new file mode 100644
--- /dev/null
+++ b/browser/extensions/pdfjs/content/build/pdf.js
@@ -0,0 +1,36813 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+/* Copyright 2012 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var PDFJS = {};
+
+(function pdfjsWrapper() {
+ // Use strict in our context only - users might not want it
+ 'use strict';
+
+ PDFJS.build =
+'1ff741a';
+
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+/* Copyright 2012 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+'use strict';
+
+var globalScope = (typeof window === 'undefined') ? this : window;
+
+var isWorker = (typeof window == 'undefined');
+
+var ERRORS = 0, WARNINGS = 1, INFOS = 5;
+var verbosity = WARNINGS;
+
+// The global PDFJS object exposes the API
+// In production, it will be declared outside a global wrapper
+// In development, it will be declared here
+if (!globalScope.PDFJS) {
+ globalScope.PDFJS = {};
+}
+
+// getPdf()
+// Convenience function to perform binary Ajax GET
+// Usage: getPdf('http://...', callback)
+// getPdf({
+// url:String ,
+// [,progress:Function, error:Function]
+// },
+// callback)
+function getPdf(arg, callback) {
+ var params = arg;
+ if (typeof arg === 'string')
+ params = { url: arg };
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', params.url);
+
+ var headers = params.headers;
+ if (headers) {
+ for (var property in headers) {
+ if (typeof headers[property] === 'undefined')
+ continue;
+
+ xhr.setRequestHeader(property, params.headers[property]);
+ }
+ }
+
+ xhr.mozResponseType = xhr.responseType = 'arraybuffer';
+
+ var protocol = params.url.substring(0, params.url.indexOf(':') + 1);
+ xhr.expected = (protocol === 'http:' || protocol === 'https:') ? 200 : 0;
+
+ if ('progress' in params)
+ xhr.onprogress = params.progress || undefined;
+
+ var calledErrorBack = false;
+
+ if ('error' in params) {
+ xhr.onerror = function errorBack() {
+ if (!calledErrorBack) {
+ calledErrorBack = true;
+ params.error();
+ }
+ }
+ }
+
+ xhr.onreadystatechange = function getPdfOnreadystatechange(e) {
+ if (xhr.readyState === 4) {
+ if (xhr.status === xhr.expected) {
+ var data = (xhr.mozResponseArrayBuffer || xhr.mozResponse ||
+ xhr.responseArrayBuffer || xhr.response);
+ callback(data);
+ } else if (params.error && !calledErrorBack) {
+ calledErrorBack = true;
+ params.error(e);
+ }
+ }
+ };
+ xhr.send(null);
+}
+globalScope.PDFJS.getPdf = getPdf;
+globalScope.PDFJS.pdfBug = false;
+
+var Page = (function PageClosure() {
+ function Page(xref, pageIndex, pageDict, ref) {
+ this.pageIndex = pageIndex;
+ this.pageDict = pageDict;
+ this.xref = xref;
+ this.ref = ref;
+
+ this.displayReadyPromise = null;
+ }
+
+ Page.prototype = {
+ getPageProp: function Page_getPageProp(key) {
+ return this.pageDict.get(key);
+ },
+ inheritPageProp: function Page_inheritPageProp(key) {
+ var dict = this.pageDict;
+ var obj = dict.get(key);
+ while (obj === undefined) {
+ dict = dict.get('Parent');
+ if (!dict)
+ break;
+ obj = dict.get(key);
+ }
+ return obj;
+ },
+ get content() {
+ return shadow(this, 'content', this.getPageProp('Contents'));
+ },
+ get resources() {
+ return shadow(this, 'resources', this.inheritPageProp('Resources'));
+ },
+ get mediaBox() {
+ var obj = this.inheritPageProp('MediaBox');
+ // Reset invalid media box to letter size.
+ if (!isArray(obj) || obj.length !== 4)
+ obj = [0, 0, 612, 792];
+ return shadow(this, 'mediaBox', obj);
+ },
+ get view() {
+ var mediaBox = this.mediaBox;
+ var cropBox = this.inheritPageProp('CropBox');
+ if (!isArray(cropBox) || cropBox.length !== 4)
+ return shadow(this, 'view', mediaBox);
+
+ // From the spec, 6th ed., p.963:
+ // "The crop, bleed, trim, and art boxes should not ordinarily
+ // extend beyond the boundaries of the media box. If they do, they are
+ // effectively reduced to their intersection with the media box."
+ cropBox = Util.intersect(cropBox, mediaBox);
+ if (!cropBox)
+ return shadow(this, 'view', mediaBox);
+
+ return shadow(this, 'view', cropBox);
+ },
+ get annotations() {
+ return shadow(this, 'annotations', this.inheritPageProp('Annots'));
+ },
+ get rotate() {
+ var rotate = this.inheritPageProp('Rotate') || 0;
+ // Normalize rotation so it's a multiple of 90 and between 0 and 270
+ if (rotate % 90 != 0) {
+ rotate = 0;
+ } else if (rotate >= 360) {
+ rotate = rotate % 360;
+ } else if (rotate < 0) {
+ // The spec doesn't cover negatives, assume its counterclockwise
+ // rotation. The following is the other implementation of modulo.
+ rotate = ((rotate % 360) + 360) % 360;
+ }
+ return shadow(this, 'rotate', rotate);
+ },
+ getContentStream: function Page_getContentStream() {
+ var content = this.content;
+ if (isArray(content)) {
+ // fetching items
+ var xref = this.xref;
+ var i, n = content.length;
+ var streams = [];
+ for (i = 0; i < n; ++i)
+ streams.push(xref.fetchIfRef(content[i]));
+ content = new StreamsSequenceStream(streams);
+ } else if (isStream(content)) {
+ content.reset();
+ } else if (!content) {
+ // replacing non-existent page content with empty one
+ content = new NullStream();
+ }
+ return content;
+ },
+ getOperatorList: function Page_getOperatorList(handler, dependency) {
+ var xref = this.xref;
+ var contentStream = this.getContentStream();
+ var resources = this.resources;
+ var pe = this.pe = new PartialEvaluator(
+ xref, handler, this.pageIndex,
+ 'p' + this.pageIndex + '_');
+
+ return pe.getOperatorList(contentStream, resources, dependency);
+ },
+ extractTextContent: function Page_extractTextContent() {
+ var handler = {
+ on: function nullHandlerOn() {},
+ send: function nullHandlerSend() {}
+ };
+
+ var xref = this.xref;
+ var contentStream = this.getContentStream();
+ var resources = xref.fetchIfRef(this.resources);
+
+ var pe = new PartialEvaluator(
+ xref, handler, this.pageIndex,
+ 'p' + this.pageIndex + '_');
+ return pe.getTextContent(contentStream, resources);
+ },
+ getLinks: function Page_getLinks() {
+ var links = [];
+ var annotations = this.getAnnotations();
+ var i, n = annotations.length;
+ for (i = 0; i < n; ++i) {
+ if (annotations[i].type != 'Link')
+ continue;
+ links.push(annotations[i]);
+ }
+ return links;
+ },
+ getAnnotations: function Page_getAnnotations() {
+ var xref = this.xref;
+ function getInheritableProperty(annotation, name) {
+ var item = annotation;
+ while (item && !item.has(name)) {
+ item = item.get('Parent');
+ }
+ if (!item)
+ return null;
+ return item.get(name);
+ }
+ function isValidUrl(url) {
+ if (!url)
+ return false;
+ var colon = url.indexOf(':');
+ if (colon < 0)
+ return false;
+ var protocol = url.substr(0, colon);
+ switch (protocol) {
+ case 'http':
+ case 'https':
+ case 'ftp':
+ case 'mailto':
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ var annotations = this.annotations || [];
+ var i, n = annotations.length;
+ var items = [];
+ for (i = 0; i < n; ++i) {
+ var annotationRef = annotations[i];
+ var annotation = xref.fetch(annotationRef);
+ if (!isDict(annotation))
+ continue;
+ var subtype = annotation.get('Subtype');
+ if (!isName(subtype))
+ continue;
+ var rect = annotation.get('Rect');
+
+ var item = {};
+ item.type = subtype.name;
+ item.rect = rect;
+ switch (subtype.name) {
+ case 'Link':
+ var a = annotation.get('A');
+ if (a) {
+ switch (a.get('S').name) {
+ case 'URI':
+ var url = a.get('URI');
+ // TODO: pdf spec mentions urls can be relative to a Base
+ // entry in the dictionary.
+ if (!isValidUrl(url))
+ url = '';
+ item.url = url;
+ break;
+ case 'GoTo':
+ item.dest = a.get('D');
+ break;
+ case 'GoToR':
+ var url = a.get('F');
+ // TODO: pdf reference says that GoToR
+ // can also have 'NewWindow' attribute
+ if (!isValidUrl(url))
+ url = '';
+ item.url = url;
+ item.dest = a.get('D');
+ break;
+ default:
+ TODO('unrecognized link type: ' + a.get('S').name);
+ }
+ } else if (annotation.has('Dest')) {
+ // simple destination link
+ var dest = annotation.get('Dest');
+ item.dest = isName(dest) ? dest.name : dest;
+ }
+ break;
+ case 'Widget':
+ var fieldType = getInheritableProperty(annotation, 'FT');
+ if (!isName(fieldType))
+ break;
+ item.fieldType = fieldType.name;
+ // Building the full field name by collecting the field and
+ // its ancestors 'T' properties and joining them using '.'.
+ var fieldName = [];
+ var namedItem = annotation, ref = annotationRef;
+ while (namedItem) {
+ var parent = namedItem.get('Parent');
+ var parentRef = namedItem.getRaw('Parent');
+ var name = namedItem.get('T');
+ if (name) {
+ fieldName.unshift(stringToPDFString(name));
+ } else {
+ // The field name is absent, that means more than one field
+ // with the same name may exist. Replacing the empty name
+ // with the '`' plus index in the parent's 'Kids' array.
+ // This is not in the PDF spec but necessary to id the
+ // the input controls.
+ var kids = parent.get('Kids');
+ var j, jj;
+ for (j = 0, jj = kids.length; j < jj; j++) {
+ var kidRef = kids[j];
+ if (kidRef.num == ref.num && kidRef.gen == ref.gen)
+ break;
+ }
+ fieldName.unshift('`' + j);
+ }
+ namedItem = parent;
+ ref = parentRef;
+ }
+ item.fullName = fieldName.join('.');
+ var alternativeText = stringToPDFString(annotation.get('TU') || '');
+ item.alternativeText = alternativeText;
+ var da = getInheritableProperty(annotation, 'DA') || '';
+ var m = /([\d\.]+)\sTf/.exec(da);
+ if (m)
+ item.fontSize = parseFloat(m[1]);
+ item.textAlignment = getInheritableProperty(annotation, 'Q');
+ item.flags = getInheritableProperty(annotation, 'Ff') || 0;
+ break;
+ case 'Text':
+ var content = annotation.get('Contents');
+ var title = annotation.get('T');
+ item.content = stringToPDFString(content || '');
+ item.title = stringToPDFString(title || '');
+ item.name = !annotation.has('Name') ? 'Note' :
+ annotation.get('Name').name;
+ break;
+ default:
+ TODO('unimplemented annotation type: ' + subtype.name);
+ break;
+ }
+ items.push(item);
+ }
+ return items;
+ }
+ };
+
+ return Page;
+})();
+
+/**
+ * The `PDFDocument` holds all the data of the PDF file. Compared to the
+ * `PDFDoc`, this one doesn't have any job management code.
+ * Right now there exists one PDFDocument on the main thread + one object
+ * for each worker. If there is no worker support enabled, there are two
+ * `PDFDocument` objects on the main thread created.
+ */
+var PDFDocument = (function PDFDocumentClosure() {
+ function PDFDocument(arg, password) {
+ if (isStream(arg))
+ init.call(this, arg, password);
+ else if (isArrayBuffer(arg))
+ init.call(this, new Stream(arg), password);
+ else
+ error('PDFDocument: Unknown argument type');
+ }
+
+ function init(stream, password) {
+ assertWellFormed(stream.length > 0, 'stream must have data');
+ this.stream = stream;
+ this.setup(password);
+ this.acroForm = this.catalog.catDict.get('AcroForm');
+ }
+
+ function find(stream, needle, limit, backwards) {
+ var pos = stream.pos;
+ var end = stream.end;
+ var str = '';
+ if (pos + limit > end)
+ limit = end - pos;
+ for (var n = 0; n < limit; ++n)
+ str += stream.getChar();
+ stream.pos = pos;
+ var index = backwards ? str.lastIndexOf(needle) : str.indexOf(needle);
+ if (index == -1)
+ return false; /* not found */
+ stream.pos += index;
+ return true; /* found */
+ }
+
+ var DocumentInfoValidators = {
+ get entries() {
+ // Lazily build this since all the validation functions below are not
+ // defined until after this file loads.
+ return shadow(this, 'entries', {
+ Title: isString,
+ Author: isString,
+ Subject: isString,
+ Keywords: isString,
+ Creator: isString,
+ Producer: isString,
+ CreationDate: isString,
+ ModDate: isString,
+ Trapped: isName
+ });
+ }
+ };
+
+ PDFDocument.prototype = {
+ get linearization() {
+ var length = this.stream.length;
+ var linearization = false;
+ if (length) {
+ try {
+ linearization = new Linearization(this.stream);
+ if (linearization.length != length)
+ linearization = false;
+ } catch (err) {
+ warn('The linearization data is not available ' +
+ 'or unreadable pdf data is found');
+ linearization = false;
+ }
+ }
+ // shadow the prototype getter with a data property
+ return shadow(this, 'linearization', linearization);
+ },
+ get startXRef() {
+ var stream = this.stream;
+ var startXRef = 0;
+ var linearization = this.linearization;
+ if (linearization) {
+ // Find end of first obj.
+ stream.reset();
+ if (find(stream, 'endobj', 1024))
+ startXRef = stream.pos + 6;
+ } else {
+ // Find startxref by jumping backward from the end of the file.
+ var step = 1024;
+ var found = false, pos = stream.end;
+ while (!found && pos > 0) {
+ pos -= step - 'startxref'.length;
+ if (pos < 0)
+ pos = 0;
+ stream.pos = pos;
+ found = find(stream, 'startxref', step, true);
+ }
+ if (found) {
+ stream.skip(9);
+ var ch;
+ do {
+ ch = stream.getChar();
+ } while (Lexer.isSpace(ch));
+ var str = '';
+ while ((ch - '0') <= 9) {
+ str += ch;
+ ch = stream.getChar();
+ }
+ startXRef = parseInt(str, 10);
+ if (isNaN(startXRef))
+ startXRef = 0;
+ }
+ }
+ // shadow the prototype getter with a data property
+ return shadow(this, 'startXRef', startXRef);
+ },
+ get mainXRefEntriesOffset() {
+ var mainXRefEntriesOffset = 0;
+ var linearization = this.linearization;
+ if (linearization)
+ mainXRefEntriesOffset = linearization.mainXRefEntriesOffset;
+ // shadow the prototype getter with a data property
+ return shadow(this, 'mainXRefEntriesOffset', mainXRefEntriesOffset);
+ },
+ // Find the header, remove leading garbage and setup the stream
+ // starting from the header.
+ checkHeader: function PDFDocument_checkHeader() {
+ var stream = this.stream;
+ stream.reset();
+ if (find(stream, '%PDF-', 1024)) {
+ // Found the header, trim off any garbage before it.
+ stream.moveStart();
+ return;
+ }
+ // May not be a PDF file, continue anyway.
+ },
+ setup: function PDFDocument_setup(password) {
+ this.checkHeader();
+ var xref = new XRef(this.stream,
+ this.startXRef,
+ this.mainXRefEntriesOffset,
+ password);
+ this.xref = xref;
+ this.catalog = new Catalog(xref);
+ },
+ get numPages() {
+ var linearization = this.linearization;
+ var num = linearization ? linearization.numPages : this.catalog.numPages;
+ // shadow the prototype getter
+ return shadow(this, 'numPages', num);
+ },
+ getDocumentInfo: function PDFDocument_getDocumentInfo() {
+ var docInfo;
+ if (this.xref.trailer.has('Info')) {
+ var infoDict = this.xref.trailer.get('Info');
+
+ docInfo = {};
+ var validEntries = DocumentInfoValidators.entries;
+ // Only fill the document info with valid entries from the spec.
+ for (var key in validEntries) {
+ if (infoDict.has(key)) {
+ var value = infoDict.get(key);
+ // Make sure the value conforms to the spec.
+ if (validEntries[key](value)) {
+ docInfo[key] = typeof value !== 'string' ? value :
+ stringToPDFString(value);
+ } else {
+ info('Bad value in document info for "' + key + '"');
+ }
+ }
+ }
+ }
+ return shadow(this, 'getDocumentInfo', docInfo);
+ },
+ getFingerprint: function PDFDocument_getFingerprint() {
+ var xref = this.xref, fileID;
+ if (xref.trailer.has('ID')) {
+ fileID = '';
+ var id = xref.trailer.get('ID')[0];
+ id.split('').forEach(function(el) {
+ fileID += Number(el.charCodeAt(0)).toString(16);
+ });
+ } else {
+ // If we got no fileID, then we generate one,
+ // from the first 100 bytes of PDF
+ var data = this.stream.bytes.subarray(0, 100);
+ var hash = calculateMD5(data, 0, data.length);
+ fileID = '';
+ for (var i = 0, length = hash.length; i < length; i++) {
+ fileID += Number(hash[i]).toString(16);
+ }
+ }
+
+ return shadow(this, 'getFingerprint', fileID);
+ },
+ getPage: function PDFDocument_getPage(n) {
+ return this.catalog.getPage(n);
+ }
+ };
+
+ return PDFDocument;
+})();
+
+
+
+// Use only for debugging purposes. This should not be used in any code that is
+// in mozilla master.
+var log = (function() {
+ if ('console' in globalScope && 'log' in globalScope['console']) {
+ return globalScope['console']['log'].bind(globalScope['console']);
+ } else {
+ return function nop() {
+ };
+ }
+})();
+
+// A notice for devs that will not trigger the fallback UI. These are good
+// for things that are helpful to devs, such as warning that Workers were
+// disabled, which is important to devs but not end users.
+function info(msg) {
+ if (verbosity >= INFOS) {
+ log('Info: ' + msg);
+ PDFJS.LogManager.notify('info', msg);
+ }
+}
+
+// Non-fatal warnings that should trigger the fallback UI.
+function warn(msg) {
+ if (verbosity >= WARNINGS) {
+ log('Warning: ' + msg);
+ PDFJS.LogManager.notify('warn', msg);
+ }
+}
+
+// Fatal errors that should trigger the fallback UI and halt execution by
+// throwing an exception.
+function error(msg) {
+ // If multiple arguments were passed, pass them all to the log function.
+ if (arguments.length > 1) {
+ var logArguments = ['Error:'];
+ logArguments.push.apply(logArguments, arguments);
+ log.apply(null, logArguments);
+ // Join the arguments into a single string for the lines below.
+ msg = [].join.call(arguments, ' ');
+ } else {
+ log('Error: ' + msg);
+ }
+ log(backtrace());
+ PDFJS.LogManager.notify('error', msg);
+ throw new Error(msg);
+}
+
+// Missing features that should trigger the fallback UI.
+function TODO(what) {
+ warn('TODO: ' + what);
+}
+
+function backtrace() {
+ try {
+ throw new Error();
+ } catch (e) {
+ return e.stack ? e.stack.split('\n').slice(2).join('\n') : '';
+ }
+}
+
+function assert(cond, msg) {
+ if (!cond)
+ error(msg);
+}
+
+// Combines two URLs. The baseUrl shall be absolute URL. If the url is an
+// absolute URL, it will be returned as is.
+function combineUrl(baseUrl, url) {
+ if (url.indexOf(':') >= 0)
+ return url;
+ if (url.charAt(0) == '/') {
+ // absolute path
+ var i = baseUrl.indexOf('://');
+ i = baseUrl.indexOf('/', i + 3);
+ return baseUrl.substring(0, i) + url;
+ } else {
+ // relative path
+ var pathLength = baseUrl.length, i;
+ i = baseUrl.lastIndexOf('#');
+ pathLength = i >= 0 ? i : pathLength;
+ i = baseUrl.lastIndexOf('?', pathLength);
+ pathLength = i >= 0 ? i : pathLength;
+ var prefixLength = baseUrl.lastIndexOf('/', pathLength);
+ return baseUrl.substring(0, prefixLength + 1) + url;
+ }
+}
+
+// In a well-formed PDF, |cond| holds. If it doesn't, subsequent
+// behavior is undefined.
+function assertWellFormed(cond, msg) {
+ if (!cond)
+ error(msg);
+}
+
+var LogManager = PDFJS.LogManager = (function LogManagerClosure() {
+ var loggers = [];
+ return {
+ addLogger: function logManager_addLogger(logger) {
+ loggers.push(logger);
+ },
+ notify: function(type, message) {
+ for (var i = 0, ii = loggers.length; i < ii; i++) {
+ var logger = loggers[i];
+ if (logger[type])
+ logger[type](message);
+ }
+ }
+ };
+})();
+
+function shadow(obj, prop, value) {
+ Object.defineProperty(obj, prop, { value: value,
+ enumerable: true,
+ configurable: true,
+ writable: false });
+ return value;
+}
+
+var PasswordException = (function PasswordExceptionClosure() {
+ function PasswordException(msg, code) {
+ this.name = 'PasswordException';
+ this.message = msg;
+ this.code = code;
+ }
+
+ PasswordException.prototype = new Error();
+ PasswordException.constructor = PasswordException;
+
+ return PasswordException;
+})();
+
+var UnknownErrorException = (function UnknownErrorExceptionClosure() {
+ function UnknownErrorException(msg, details) {
+ this.name = 'UnknownErrorException';
+ this.message = msg;
+ this.details = details;
+ }
+
+ UnknownErrorException.prototype = new Error();
+ UnknownErrorException.constructor = UnknownErrorException;
+
+ return UnknownErrorException;
+})();
+
+var InvalidPDFException = (function InvalidPDFExceptionClosure() {
+ function InvalidPDFException(msg) {
+ this.name = 'InvalidPDFException';
+ this.message = msg;
+ }
+
+ InvalidPDFException.prototype = new Error();
+ InvalidPDFException.constructor = InvalidPDFException;
+
+ return InvalidPDFException;
+})();
+
+function bytesToString(bytes) {
+ var str = '';
+ var length = bytes.length;
+ for (var n = 0; n < length; ++n)
+ str += String.fromCharCode(bytes[n]);
+ return str;
+}
+
+function stringToBytes(str) {
+ var length = str.length;
+ var bytes = new Uint8Array(length);
+ for (var n = 0; n < length; ++n)
+ bytes[n] = str.charCodeAt(n) & 0xFF;
+ return bytes;
+}
+
+var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
+
+var Util = PDFJS.Util = (function UtilClosure() {
+ function Util() {}
+
+ Util.makeCssRgb = function Util_makeCssRgb(r, g, b) {
+ var ri = (255 * r) | 0, gi = (255 * g) | 0, bi = (255 * b) | 0;
+ return 'rgb(' + ri + ',' + gi + ',' + bi + ')';
+ };
+
+ Util.makeCssCmyk = function Util_makeCssCmyk(c, m, y, k) {
+ c = (new DeviceCmykCS()).getRgb([c, m, y, k]);
+ var ri = (255 * c[0]) | 0, gi = (255 * c[1]) | 0, bi = (255 * c[2]) | 0;
+ return 'rgb(' + ri + ',' + gi + ',' + bi + ')';
+ };
+
+ // For 2d affine transforms
+ Util.applyTransform = function Util_applyTransform(p, m) {
+ var xt = p[0] * m[0] + p[1] * m[2] + m[4];
+ var yt = p[0] * m[1] + p[1] * m[3] + m[5];
+ return [xt, yt];
+ };
+
+ Util.applyInverseTransform = function Util_applyInverseTransform(p, m) {
+ var d = m[0] * m[3] - m[1] * m[2];
+ var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
+ var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
+ return [xt, yt];
+ };
+
+ Util.inverseTransform = function Util_inverseTransform(m) {
+ var d = m[0] * m[3] - m[1] * m[2];
+ return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d,
+ (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];
+ };
+
+ // Apply a generic 3d matrix M on a 3-vector v:
+ // | a b c | | X |
+ // | d e f | x | Y |
+ // | g h i | | Z |
+ // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i],
+ // with v as [X,Y,Z]
+ Util.apply3dTransform = function Util_apply3dTransform(m, v) {
+ return [
+ m[0] * v[0] + m[1] * v[1] + m[2] * v[2],
+ m[3] * v[0] + m[4] * v[1] + m[5] * v[2],
+ m[6] * v[0] + m[7] * v[1] + m[8] * v[2]
+ ];
+ }
+
+ // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)
+ // For coordinate systems whose origin lies in the bottom-left, this
+ // means normalization to (BL,TR) ordering. For systems with origin in the
+ // top-left, this means (TL,BR) ordering.
+ Util.normalizeRect = function Util_normalizeRect(rect) {
+ var r = rect.slice(0); // clone rect
+ if (rect[0] > rect[2]) {
+ r[0] = rect[2];
+ r[2] = rect[0];
+ }
+ if (rect[1] > rect[3]) {
+ r[1] = rect[3];
+ r[3] = rect[1];
+ }
+ return r;
+ }
+
+ // Returns a rectangle [x1, y1, x2, y2] corresponding to the
+ // intersection of rect1 and rect2. If no intersection, returns 'false'
+ // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]
+ Util.intersect = function Util_intersect(rect1, rect2) {
+ function compare(a, b) {
+ return a - b;
+ };
+
+ // Order points along the axes
+ var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare),
+ orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare),
+ result = [];
+
+ rect1 = Util.normalizeRect(rect1);
+ rect2 = Util.normalizeRect(rect2);
+
+ // X: first and second points belong to different rectangles?
+ if ((orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) ||
+ (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])) {
+ // Intersection must be between second and third points
+ result[0] = orderedX[1];
+ result[2] = orderedX[2];
+ } else {
+ return false;
+ }
+
+ // Y: first and second points belong to different rectangles?
+ if ((orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) ||
+ (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])) {
+ // Intersection must be between second and third points
+ result[1] = orderedY[1];
+ result[3] = orderedY[2];
+ } else {
+ return false;
+ }
+
+ return result;
+ };
+
+ Util.sign = function Util_sign(num) {
+ return num < 0 ? -1 : 1;
+ };
+
+ return Util;
+})();
+
+var PageViewport = PDFJS.PageViewport = (function PageViewportClosure() {
+ function PageViewport(viewBox, scale, rotate, offsetX, offsetY) {
+ // creating transform to convert pdf coordinate system to the normal
+ // canvas like coordinates taking in account scale and rotation
+ var centerX = (viewBox[2] + viewBox[0]) / 2;
+ var centerY = (viewBox[3] + viewBox[1]) / 2;
+ var rotateA, rotateB, rotateC, rotateD;
+ switch (rotate % 360) {
+ case -180:
+ case 180:
+ rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1;
+ break;
+ case -270:
+ case 90:
+ rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0;
+ break;
+ case -90:
+ case 270:
+ rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0;
+ break;
+ case 360:
+ case 0:
+ default:
+ rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1;
+ break;
+ }
+ var offsetCanvasX, offsetCanvasY;
+ var width, height;
+ if (rotateA == 0) {
+ offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
+ offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
+ width = Math.abs(viewBox[3] - viewBox[1]) * scale;
+ height = Math.abs(viewBox[2] - viewBox[0]) * scale;
+ } else {
+ offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
+ offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
+ width = Math.abs(viewBox[2] - viewBox[0]) * scale;
+ height = Math.abs(viewBox[3] - viewBox[1]) * scale;
+ }
+ // creating transform for the following operations:
+ // translate(-centerX, -centerY), rotate and flip vertically,
+ // scale, and translate(offsetCanvasX, offsetCanvasY)
+ this.transform = [
+ rotateA * scale,
+ rotateB * scale,
+ rotateC * scale,
+ rotateD * scale,
+ offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,
+ offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY
+ ];
+
+ this.offsetX = offsetX;
+ this.offsetY = offsetY;
+ this.width = width;
+ this.height = height;
+ this.fontScale = scale;
+ }
+ PageViewport.prototype = {
+ convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) {
+ return Util.applyTransform([x, y], this.transform);
+ },
+ convertToViewportRectangle:
+ function PageViewport_convertToViewportRectangle(rect) {
+ var tl = Util.applyTransform([rect[0], rect[1]], this.transform);
+ var br = Util.applyTransform([rect[2], rect[3]], this.transform);
+ return [tl[0], tl[1], br[0], br[1]];
+ },
+ convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) {
+ return Util.applyInverseTransform([x, y], this.transform);
+ }
+ };
+ return PageViewport;
+})();
+
+var PDFStringTranslateTable = [
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 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, 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, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014,
+ 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C,
+ 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160,
+ 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC
+];
+
+function stringToPDFString(str) {
+ var i, n = str.length, str2 = '';
+ if (str[0] === '\xFE' && str[1] === '\xFF') {
+ // UTF16BE BOM
+ for (i = 2; i < n; i += 2)
+ str2 += String.fromCharCode(
+ (str.charCodeAt(i) << 8) | str.charCodeAt(i + 1));
+ } else {
+ for (i = 0; i < n; ++i) {
+ var code = PDFStringTranslateTable[str.charCodeAt(i)];
+ str2 += code ? String.fromCharCode(code) : str.charAt(i);
+ }
+ }
+ return str2;
+}
+
+function stringToUTF8String(str) {
+ return decodeURIComponent(escape(str));
+}
+
+function isBool(v) {
+ return typeof v == 'boolean';
+}
+
+function isInt(v) {
+ return typeof v == 'number' && ((v | 0) == v);
+}
+
+function isNum(v) {
+ return typeof v == 'number';
+}
+
+function isString(v) {
+ return typeof v == 'string';
+}
+
+function isNull(v) {
+ return v === null;
+}
+
+function isName(v) {
+ return v instanceof Name;
+}
+
+function isCmd(v, cmd) {
+ return v instanceof Cmd && (!cmd || v.cmd == cmd);
+}
+
+function isDict(v, type) {
+ return v instanceof Dict && (!type || v.get('Type').name == type);
+}
+
+function isArray(v) {
+ return v instanceof Array;
+}
+
+function isStream(v) {
+ return typeof v == 'object' && v != null && ('getChar' in v);
+}
+
+function isArrayBuffer(v) {
+ return typeof v == 'object' && v != null && ('byteLength' in v);
+}
+
+function isRef(v) {
+ return v instanceof Ref;
+}
+
+function isPDFFunction(v) {
+ var fnDict;
+ if (typeof v != 'object')
+ return false;
+ else if (isDict(v))
+ fnDict = v;
+ else if (isStream(v))
+ fnDict = v.dict;
+ else
+ return false;
+ return fnDict.has('FunctionType');
+}
+
+/**
+ * 'Promise' object.
+ * Each object that is stored in PDFObjects is based on a Promise object that
+ * contains the status of the object and the data. There migth be situations,
+ * where a function want to use the value of an object, but it isn't ready at
+ * that time. To get a notification, once the object is ready to be used, s.o.
+ * can add a callback using the `then` method on the promise that then calls
+ * the callback once the object gets resolved.
+ * A promise can get resolved only once and only once the data of the promise
+ * can be set. If any of these happens twice or the data is required before
+ * it was set, an exception is throw.
+ */
+var Promise = PDFJS.Promise = (function PromiseClosure() {
+ var EMPTY_PROMISE = {};
+
+ /**
+ * If `data` is passed in this constructor, the promise is created resolved.
+ * If there isn't data, it isn't resolved at the beginning.
+ */
+ function Promise(name, data) {
+ this.name = name;
+ this.isRejected = false;
+ this.error = null;
+ // If you build a promise and pass in some data it's already resolved.
+ if (data != null) {
+ this.isResolved = true;
+ this._data = data;
+ this.hasData = true;
+ } else {
+ this.isResolved = false;
+ this._data = EMPTY_PROMISE;
+ }
+ this.callbacks = [];
+ this.errbacks = [];
+ this.progressbacks = [];
+ };
+ /**
+ * Builds a promise that is resolved when all the passed in promises are
+ * resolved.
+ * @param {Promise[]} promises Array of promises to wait for.
+ * @return {Promise} New dependant promise.
+ */
+ Promise.all = function Promise_all(promises) {
+ var deferred = new Promise();
+ var unresolved = promises.length;
+ var results = [];
+ if (unresolved === 0) {
+ deferred.resolve(results);
+ return deferred;
+ }
+ for (var i = 0, ii = promises.length; i < ii; ++i) {
+ var promise = promises[i];
+ promise.then((function(i) {
+ return function(value) {
+ results[i] = value;
+ unresolved--;
+ if (unresolved === 0)
+ deferred.resolve(results);
+ };
+ })(i));
+ }
+ return deferred;
+ };
+ Promise.prototype = {
+ hasData: false,
+
+ set data(value) {
+ if (value === undefined) {
+ return;
+ }
+ if (this._data !== EMPTY_PROMISE) {
+ error('Promise ' + this.name +
+ ': Cannot set the data of a promise twice');
+ }
+ this._data = value;
+ this.hasData = true;
+
+ if (this.onDataCallback) {
+ this.onDataCallback(value);
+ }
+ },
+
+ get data() {
+ if (this._data === EMPTY_PROMISE) {
+ error('Promise ' + this.name + ': Cannot get data that isn\'t set');
+ }
+ return this._data;
+ },
+
+ onData: function Promise_onData(callback) {
+ if (this._data !== EMPTY_PROMISE) {
+ callback(this._data);
+ } else {
+ this.onDataCallback = callback;
+ }
+ },
+
+ resolve: function Promise_resolve(data) {
+ if (this.isResolved) {
+ error('A Promise can be resolved only once ' + this.name);
+ }
+ if (this.isRejected) {
+ error('The Promise was already rejected ' + this.name);
+ }
+
+ this.isResolved = true;
+ this.data = (typeof data !== 'undefined') ? data : null;
+ var callbacks = this.callbacks;
+
+ for (var i = 0, ii = callbacks.length; i < ii; i++) {
+ callbacks[i].call(null, data);
+ }
+ },
+
+ progress: function Promise_progress(data) {
+ var callbacks = this.progressbacks;
+ for (var i = 0, ii = callbacks.length; i < ii; i++) {
+ callbacks[i].call(null, data);
+ }
+ },
+
+ reject: function Promise_reject(reason, exception) {
+ if (this.isRejected) {
+ error('A Promise can be rejected only once ' + this.name);
+ }
+ if (this.isResolved) {
+ error('The Promise was already resolved ' + this.name);
+ }
+
+ this.isRejected = true;
+ this.error = reason || null;
+ var errbacks = this.errbacks;
+
+ for (var i = 0, ii = errbacks.length; i < ii; i++) {
+ errbacks[i].call(null, reason, exception);
+ }
+ },
+
+ then: function Promise_then(callback, errback, progressback) {
+ if (!callback) {
+ error('Requiring callback' + this.name);
+ }
+
+ // If the promise is already resolved, call the callback directly.
+ if (this.isResolved) {
+ var data = this.data;
+ callback.call(null, data);
+ } else if (this.isRejected && errback) {
+ var error = this.error;
+ errback.call(null, error);
+ } else {
+ this.callbacks.push(callback);
+ if (errback)
+ this.errbacks.push(errback);
+ }
+
+ if (progressback)
+ this.progressbacks.push(progressback);
+ }
+ };
+
+ return Promise;
+})();
+
+var StatTimer = (function StatTimerClosure() {
+ function rpad(str, pad, length) {
+ while (str.length < length)
+ str += pad;
+ return str;
+ }
+ function StatTimer() {
+ this.started = {};
+ this.times = [];
+ this.enabled = true;
+ }
+ StatTimer.prototype = {
+ time: function StatTimer_time(name) {
+ if (!this.enabled)
+ return;
+ if (name in this.started)
+ throw 'Timer is already running for ' + name;
+ this.started[name] = Date.now();
+ },
+ timeEnd: function StatTimer_timeEnd(name) {
+ if (!this.enabled)
+ return;
+ if (!(name in this.started))
+ throw 'Timer has not been started for ' + name;
+ this.times.push({
+ 'name': name,
+ 'start': this.started[name],
+ 'end': Date.now()
+ });
+ // Remove timer from started so it can be called again.
+ delete this.started[name];
+ },
+ toString: function StatTimer_toString() {
+ var times = this.times;
+ var out = '';
+ // Find the longest name for padding purposes.
+ var longest = 0;
+ for (var i = 0, ii = times.length; i < ii; ++i) {
+ var name = times[i]['name'];
+ if (name.length > longest)
+ longest = name.length;
+ }
+ for (var i = 0, ii = times.length; i < ii; ++i) {
+ var span = times[i];
+ var duration = span.end - span.start;
+ out += rpad(span['name'], ' ', longest) + ' ' + duration + 'ms\n';
+ }
+ return out;
+ }
+ };
+ return StatTimer;
+})();
+
+PDFJS.createBlob = function createBlob(data, contentType) {
+ if (typeof Blob === 'function')
+ return new Blob([data], { type: contentType });
+ // Blob builder is deprecated in FF14 and removed in FF18.
+ var bb = new MozBlobBuilder();
+ bb.append(data);
+ return bb.getBlob(contentType);
+};
+
+
+/**
+ * This is the main entry point for loading a PDF and interacting with it.
+ * NOTE: If a URL is used to fetch the PDF data a standard XMLHttpRequest(XHR)
+ * is used, which means it must follow the same origin rules that any XHR does
+ * e.g. No cross domain requests without CORS.
+ *
+ * @param {string|TypedAray|object} source Can be an url to where a PDF is
+ * located, a typed array (Uint8Array) already populated with data or
+ * and parameter object with the following possible fields:
+ * - url - The URL of the PDF.
+ * - data - A typed array with PDF data.
+ * - httpHeaders - Basic authentication headers.
+ * - password - For decrypting password-protected PDFs.
+ *
+ * @return {Promise} A promise that is resolved with {PDFDocumentProxy} object.
+ */
+PDFJS.getDocument = function getDocument(source) {
+ var workerInitializedPromise, workerReadyPromise, transport;
+
+ if (typeof source === 'string') {
+ source = { url: source };
+ } else if (isArrayBuffer(source)) {
+ source = { data: source };
+ } else if (typeof source !== 'object') {
+ error('Invalid parameter in getDocument, need either Uint8Array, ' +
+ 'string or a parameter object');
+ }
+
+ if (!source.url && !source.data)
+ error('Invalid parameter array, need either .data or .url');
+
+ // copy/use all keys as is except 'url' -- full path is required
+ var params = {};
+ for (var key in source) {
+ if (key === 'url' && typeof window !== 'undefined') {
+ params[key] = combineUrl(window.location.href, source[key]);
+ continue;
+ }
+ params[key] = source[key];
+ }
+
+ workerInitializedPromise = new PDFJS.Promise();
+ workerReadyPromise = new PDFJS.Promise();
+ transport = new WorkerTransport(workerInitializedPromise, workerReadyPromise);
+ workerInitializedPromise.then(function transportInitialized() {
+ transport.fetchDocument(params);
+ });
+ return workerReadyPromise;
+};
+
+/**
+ * Proxy to a PDFDocument in the worker thread. Also, contains commonly used
+ * properties that can be read synchronously.
+ */
+var PDFDocumentProxy = (function PDFDocumentProxyClosure() {
+ function PDFDocumentProxy(pdfInfo, transport) {
+ this.pdfInfo = pdfInfo;
+ this.transport = transport;
+ }
+ PDFDocumentProxy.prototype = {
+ /**
+ * @return {number} Total number of pages the PDF contains.
+ */
+ get numPages() {
+ return this.pdfInfo.numPages;
+ },
+ /**
+ * @return {string} A unique ID to identify a PDF. Not guaranteed to be
+ * unique.
+ */
+ get fingerprint() {
+ return this.pdfInfo.fingerprint;
+ },
+ /**
+ * @param {number} The page number to get. The first page is 1.
+ * @return {Promise} A promise that is resolved with a {PDFPageProxy}
+ * object.
+ */
+ getPage: function PDFDocumentProxy_getPage(number) {
+ return this.transport.getPage(number);
+ },
+ /**
+ * @return {Promise} A promise that is resolved with a lookup table for
+ * mapping named destinations to reference numbers.
+ */
+ getDestinations: function PDFDocumentProxy_getDestinations() {
+ var promise = new PDFJS.Promise();
+ var destinations = this.pdfInfo.destinations;
+ promise.resolve(destinations);
+ return promise;
+ },
+ /**
+ * @return {Promise} A promise that is resolved with an {array} that is a
+ * tree outline (if it has one) of the PDF. The tree is in the format of:
+ * [
+ * {
+ * title: string,
+ * bold: boolean,
+ * italic: boolean,
+ * color: rgb array,
+ * dest: dest obj,
+ * items: array of more items like this
+ * },
+ * ...
+ * ].
+ */
+ getOutline: function PDFDocumentProxy_getOutline() {
+ var promise = new PDFJS.Promise();
+ var outline = this.pdfInfo.outline;
+ promise.resolve(outline);
+ return promise;
+ },
+ /**
+ * @return {Promise} A promise that is resolved with an {object} that has
+ * info and metadata properties. Info is an {object} filled with anything
+ * available in the information dictionary and similarly metadata is a
+ * {Metadata} object with information from the metadata section of the PDF.
+ */
+ getMetadata: function PDFDocumentProxy_getMetadata() {
+ var promise = new PDFJS.Promise();
+ var info = this.pdfInfo.info;
+ var metadata = this.pdfInfo.metadata;
+ promise.resolve({
+ info: info,
+ metadata: metadata ? new PDFJS.Metadata(metadata) : null
+ });
+ return promise;
+ },
+ isEncrypted: function PDFDocumentProxy_isEncrypted() {
+ var promise = new PDFJS.Promise();
+ promise.resolve(this.pdfInfo.encrypted);
+ return promise;
+ },
+ /**
+ * @return {Promise} A promise that is resolved with a TypedArray that has
+ * the raw data from the PDF.
+ */
+ getData: function PDFDocumentProxy_getData() {
+ var promise = new PDFJS.Promise();
+ this.transport.getData(promise);
+ return promise;
+ },
+ destroy: function PDFDocumentProxy_destroy() {
+ this.transport.destroy();
+ }
+ };
+ return PDFDocumentProxy;
+})();
+
+var PDFPageProxy = (function PDFPageProxyClosure() {
+ function PDFPageProxy(pageInfo, transport) {
+ this.pageInfo = pageInfo;
+ this.transport = transport;
+ this.stats = new StatTimer();
+ this.stats.enabled = !!globalScope.PDFJS.enableStats;
+ this.commonObjs = transport.commonObjs;
+ this.objs = new PDFObjects();
+ this.renderInProgress = false;
+ this.cleanupAfterRender = false;
+ }
+ PDFPageProxy.prototype = {
+ /**
+ * @return {number} Page number of the page. First page is 1.
+ */
+ get pageNumber() {
+ return this.pageInfo.pageIndex + 1;
+ },
+ /**
+ * @return {number} The number of degrees the page is rotated clockwise.
+ */
+ get rotate() {
+ return this.pageInfo.rotate;
+ },
+ /**
+ * @return {object} The reference that points to this page. It has 'num' and
+ * 'gen' properties.
+ */
+ get ref() {
+ return this.pageInfo.ref;
+ },
+ /**
+ * @return {array} An array of the visible portion of the PDF page in the
+ * user space units - [x1, y1, x2, y2].
+ */
+ get view() {
+ return this.pageInfo.view;
+ },
+ /**
+ * @param {number} scale The desired scale of the viewport.
+ * @param {number} rotate Degrees to rotate the viewport. If omitted this
+ * defaults to the page rotation.
+ * @return {PageViewport} Contains 'width' and 'height' properties along
+ * with transforms required for rendering.
+ */
+ getViewport: function PDFPageProxy_getViewport(scale, rotate) {
+ if (arguments.length < 2)
+ rotate = this.rotate;
+ return new PDFJS.PageViewport(this.view, scale, rotate, 0, 0);
+ },
+ /**
+ * @return {Promise} A promise that is resolved with an {array} of the
+ * annotation objects.
+ */
+ getAnnotations: function PDFPageProxy_getAnnotations() {
+ if (this.annotationsPromise)
+ return this.annotationsPromise;
+
+ var promise = new PDFJS.Promise();
+ this.annotationsPromise = promise;
+ this.transport.getAnnotations(this.pageInfo.pageIndex);
+ return promise;
+ },
+ /**
+ * Begins the process of rendering a page to the desired context.
+ * @param {object} params A parameter object that supports:
+ * {
+ * canvasContext(required): A 2D context of a DOM Canvas object.,
+ * textLayer(optional): An object that has beginLayout, endLayout, and
+ * appendText functions.,
+ * continueCallback(optional): A function that will be called each time
+ * the rendering is paused. To continue
+ * rendering call the function that is the
+ * first argument to the callback.
+ * }.
+ * @return {Promise} A promise that is resolved when the page finishes
+ * rendering.
+ */
+ render: function PDFPageProxy_render(params) {
+ this.renderInProgress = true;
+
+ var promise = new Promise();
+ var stats = this.stats;
+ stats.time('Overall');
+ // If there is no displayReadyPromise yet, then the operatorList was never
+ // requested before. Make the request and create the promise.
+ if (!this.displayReadyPromise) {
+ this.displayReadyPromise = new Promise();
+ this.destroyed = false;
+
+ this.stats.time('Page Request');
+ this.transport.messageHandler.send('RenderPageRequest', {
+ pageIndex: this.pageNumber - 1
+ });
+ }
+
+ var self = this;
+ function complete(error) {
+ self.renderInProgress = false;
+ if (self.destroyed || self.cleanupAfterRender) {
+ delete self.displayReadyPromise;
+ delete self.operatorList;
+ self.objs.clear();
+ }
+
+ if (error)
+ promise.reject(error);
+ else
+ promise.resolve();
+ };
+ var continueCallback = params.continueCallback;
+
+ // Once the operatorList and fonts are loaded, do the actual rendering.
+ this.displayReadyPromise.then(
+ function pageDisplayReadyPromise() {
+ if (self.destroyed) {
+ complete();
+ return;
+ }
+
+ var gfx = new CanvasGraphics(params.canvasContext, this.commonObjs,
+ this.objs, params.textLayer);
+ try {
+ this.display(gfx, params.viewport, complete, continueCallback);
+ } catch (e) {
+ complete(e);
+ }
+ }.bind(this),
+ function pageDisplayReadPromiseError(reason) {
+ complete(reason);
+ }
+ );
+
+ return promise;
+ },
+ /**
+ * For internal use only.
+ */
+ startRenderingFromOperatorList:
+ function PDFPageProxy_startRenderingFromOperatorList(operatorList,
+ fonts) {
+ var self = this;
+ this.operatorList = operatorList;
+
+ var displayContinuation = function pageDisplayContinuation() {
+ // Always defer call to display() to work around bug in
+ // Firefox error reporting from XHR callbacks.
+ setTimeout(function pageSetTimeout() {
+ self.displayReadyPromise.resolve();
+ });
+ };
+
+ this.ensureFonts(fonts,
+ function pageStartRenderingFromOperatorListEnsureFonts() {
+ displayContinuation();
+ }
+ );
+ },
+ /**
+ * For internal use only.
+ */
+ ensureFonts: function PDFPageProxy_ensureFonts(fonts, callback) {
+ this.stats.time('Font Loading');
+ // Convert the font names to the corresponding font obj.
+ var fontObjs = [];
+ for (var i = 0, ii = fonts.length; i < ii; i++) {
+ var obj = this.commonObjs.getData(fonts[i]);
+ if (obj.error) {
+ warn('Error during font loading: ' + obj.error);
+ continue;
+ }
+ fontObjs.push(obj);
+ }
+
+ // Load all the fonts
+ FontLoader.bind(
+ fontObjs,
+ function pageEnsureFontsFontObjs(fontObjs) {
+ this.stats.timeEnd('Font Loading');
+
+ callback.call(this);
+ }.bind(this)
+ );
+ },
+ /**
+ * For internal use only.
+ */
+ display: function PDFPageProxy_display(gfx, viewport, callback,
+ continueCallback) {
+ var stats = this.stats;
+ stats.time('Rendering');
+
+ gfx.beginDrawing(viewport);
+
+ var startIdx = 0;
+ var length = this.operatorList.fnArray.length;
+ var operatorList = this.operatorList;
+ var stepper = null;
+ if (PDFJS.pdfBug && 'StepperManager' in globalScope &&
+ globalScope['StepperManager'].enabled) {
+ stepper = globalScope['StepperManager'].create(this.pageNumber - 1);
+ stepper.init(operatorList);
+ stepper.nextBreakPoint = stepper.getNextBreakPoint();
+ }
+
+ var continueWrapper;
+ if (continueCallback)
+ continueWrapper = function() { continueCallback(next); }
+ else
+ continueWrapper = next;
+
+ var self = this;
+ function next() {
+ startIdx = gfx.executeOperatorList(operatorList, startIdx,
+ continueWrapper, stepper);
+ if (startIdx == length) {
+ gfx.endDrawing();
+ stats.timeEnd('Rendering');
+ stats.timeEnd('Overall');
+ if (callback) callback();
+ }
+ }
+ continueWrapper();
+ },
+ /**
+ * @return {Promise} That is resolved with the a {string} that is the text
+ * content from the page.
+ */
+ getTextContent: function PDFPageProxy_getTextContent() {
+ var promise = new PDFJS.Promise();
+ this.transport.messageHandler.send('GetTextContent', {
+ pageIndex: this.pageNumber - 1
+ },
+ function textContentCallback(textContent) {
+ promise.resolve(textContent);
+ }
+ );
+ return promise;
+ },
+ /**
+ * Stub for future feature.
+ */
+ getOperationList: function PDFPageProxy_getOperationList() {
+ var promise = new PDFJS.Promise();
+ var operationList = { // not implemented
+ dependencyFontsID: null,
+ operatorList: null
+ };
+ promise.resolve(operationList);
+ return promise;
+ },
+ /**
+ * Destroys resources allocated by the page.
+ */
+ destroy: function PDFPageProxy_destroy() {
+ this.destroyed = true;
+
+ if (!this.renderInProgress) {
+ delete this.operatorList;
+ delete this.displayReadyPromise;
+ this.objs.clear();
+ }
+ }
+ };
+ return PDFPageProxy;
+})();
+/**
+ * For internal use only.
+ */
+var WorkerTransport = (function WorkerTransportClosure() {
+ function WorkerTransport(workerInitializedPromise, workerReadyPromise) {
+ this.workerReadyPromise = workerReadyPromise;
+ this.commonObjs = new PDFObjects();
+
+ this.pageCache = [];
+ this.pagePromises = [];
+ this.fontsLoading = {};
+
+ // If worker support isn't disabled explicit and the browser has worker
+ // support, create a new web worker and test if it/the browser fullfills
+ // all requirements to run parts of pdf.js in a web worker.
+ // Right now, the requirement is, that an Uint8Array is still an Uint8Array
+ // as it arrives on the worker. Chrome added this with version 15.
+ if (!globalScope.PDFJS.disableWorker && typeof Worker !== 'undefined') {
+ var workerSrc = PDFJS.workerSrc;
+ if (typeof workerSrc === 'undefined') {
+ error('No PDFJS.workerSrc specified');
+ }
+
+ try {
+ // Some versions of FF can't create a worker on localhost, see:
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=683280
+ var worker = new Worker(workerSrc);
+ var messageHandler = new MessageHandler('main', worker);
+ this.messageHandler = messageHandler;
+
+ messageHandler.on('test', function transportTest(supportTypedArray) {
+ if (supportTypedArray) {
+ this.worker = worker;
+ this.setupMessageHandler(messageHandler);
+ } else {
+ globalScope.PDFJS.disableWorker = true;
+ this.setupFakeWorker();
+ }
+ workerInitializedPromise.resolve();
+ }.bind(this));
+
+ var testObj = new Uint8Array(1);
+ // Some versions of Opera throw a DATA_CLONE_ERR on
+ // serializing the typed array.
+ messageHandler.send('test', testObj);
+ return;
+ } catch (e) {
+ info('The worker has been disabled.');
+ }
+ }
+ // Either workers are disabled, not supported or have thrown an exception.
+ // Thus, we fallback to a faked worker.
+ globalScope.PDFJS.disableWorker = true;
+ this.setupFakeWorker();
+ workerInitializedPromise.resolve();
+ }
+ WorkerTransport.prototype = {
+ destroy: function WorkerTransport_destroy() {
+ if (this.worker)
+ this.worker.terminate();
+
+ this.pageCache = [];
+ this.pagePromises = [];
+ },
+ setupFakeWorker: function WorkerTransport_setupFakeWorker() {
+ warn('Setting up fake worker.');
+ // If we don't use a worker, just post/sendMessage to the main thread.
+ var fakeWorker = {
+ postMessage: function WorkerTransport_postMessage(obj) {
+ fakeWorker.onmessage({data: obj});
+ },
+ terminate: function WorkerTransport_terminate() {}
+ };
+
+ var messageHandler = new MessageHandler('main', fakeWorker);
+ this.setupMessageHandler(messageHandler);
+
+ // If the main thread is our worker, setup the handling for the messages
+ // the main thread sends to it self.
+ WorkerMessageHandler.setup(messageHandler);
+ },
+
+ setupMessageHandler:
+ function WorkerTransport_setupMessageHandler(messageHandler) {
+ this.messageHandler = messageHandler;
+
+ messageHandler.on('GetDoc', function transportDoc(data) {
+ var pdfInfo = data.pdfInfo;
+ var pdfDocument = new PDFDocumentProxy(pdfInfo, this);
+ this.pdfDocument = pdfDocument;
+ this.workerReadyPromise.resolve(pdfDocument);
+ }, this);
+
+ messageHandler.on('NeedPassword', function transportPassword(data) {
+ this.workerReadyPromise.reject(data.exception.message, data.exception);
+ }, this);
+
+ messageHandler.on('IncorrectPassword', function transportBadPass(data) {
+ this.workerReadyPromise.reject(data.exception.message, data.exception);
+ }, this);
+
+ messageHandler.on('InvalidPDF', function transportInvalidPDF(data) {
+ this.workerReadyPromise.reject(data.exception.name, data.exception);
+ }, this);
+
+ messageHandler.on('UnknownError', function transportUnknownError(data) {
+ this.workerReadyPromise.reject(data.exception.message, data.exception);
+ }, this);
+
+ messageHandler.on('GetPage', function transportPage(data) {
+ var pageInfo = data.pageInfo;
+ var page = new PDFPageProxy(pageInfo, this);
+ this.pageCache[pageInfo.pageIndex] = page;
+ var promise = this.pagePromises[pageInfo.pageIndex];
+ promise.resolve(page);
+ }, this);
+
+ messageHandler.on('GetAnnotations', function transportAnnotations(data) {
+ var annotations = data.annotations;
+ var promise = this.pageCache[data.pageIndex].annotationsPromise;
+ promise.resolve(annotations);
+ }, this);
+
+ messageHandler.on('RenderPage', function transportRender(data) {
+ var page = this.pageCache[data.pageIndex];
+ var depFonts = data.depFonts;
+
+ page.stats.timeEnd('Page Request');
+ page.startRenderingFromOperatorList(data.operatorList, depFonts);
+ }, this);
+
+ messageHandler.on('commonobj', function transportObj(data) {
+ var id = data[0];
+ var type = data[1];
+ if (this.commonObjs.hasData(id))
+ return;
+
+ switch (type) {
+ case 'Font':
+ var exportedData = data[2];
+
+ // At this point, only the font object is created but the font is
+ // not yet attached to the DOM. This is done in `FontLoader.bind`.
+ var font;
+ if ('error' in exportedData)
+ font = new ErrorFont(exportedData.error);
+ else
+ font = new Font(exportedData);
+ this.commonObjs.resolve(id, font);
+ break;
+ default:
+ error('Got unknown common object type ' + type);
+ }
+ }, this);
+
+ messageHandler.on('obj', function transportObj(data) {
+ var id = data[0];
+ var pageIndex = data[1];
+ var type = data[2];
+ var pageProxy = this.pageCache[pageIndex];
+ if (pageProxy.objs.hasData(id))
+ return;
+
+ switch (type) {
+ case 'JpegStream':
+ var imageData = data[3];
+ loadJpegStream(id, imageData, pageProxy.objs);
+ break;
+ case 'Image':
+ var imageData = data[3];
+ pageProxy.objs.resolve(id, imageData);
+
+ // heuristics that will allow not to store large data
+ var MAX_IMAGE_SIZE_TO_STORE = 8000000;
+ if ('data' in imageData &&
+ imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {
+ pageProxy.cleanupAfterRender = true;
+ }
+ break;
+ default:
+ error('Got unknown object type ' + type);
+ }
+ }, this);
+
+ messageHandler.on('DocProgress', function transportDocProgress(data) {
+ this.workerReadyPromise.progress({
+ loaded: data.loaded,
+ total: data.total
+ });
+ }, this);
+
+ messageHandler.on('DocError', function transportDocError(data) {
+ this.workerReadyPromise.reject(data);
+ }, this);
+
+ messageHandler.on('PageError', function transportError(data) {
+ var page = this.pageCache[data.pageNum - 1];
+ if (page.displayReadyPromise)
+ page.displayReadyPromise.reject(data.error);
+ else
+ error(data.error);
+ }, this);
+
+ messageHandler.on('JpegDecode', function(data, promise) {
+ var imageData = data[0];
+ var components = data[1];
+ if (components != 3 && components != 1)
+ error('Only 3 component or 1 component can be returned');
+
+ var img = new Image();
+ img.onload = (function messageHandler_onloadClosure() {
+ var width = img.width;
+ var height = img.height;
+ var size = width * height;
+ var rgbaLength = size * 4;
+ var buf = new Uint8Array(size * components);
+ var tmpCanvas = createScratchCanvas(width, height);
+ var tmpCtx = tmpCanvas.getContext('2d');
+ tmpCtx.drawImage(img, 0, 0);
+ var data = tmpCtx.getImageData(0, 0, width, height).data;
+
+ if (components == 3) {
+ for (var i = 0, j = 0; i < rgbaLength; i += 4, j += 3) {
+ buf[j] = data[i];
+ buf[j + 1] = data[i + 1];
+ buf[j + 2] = data[i + 2];
+ }
+ } else if (components == 1) {
+ for (var i = 0, j = 0; i < rgbaLength; i += 4, j++) {
+ buf[j] = data[i];
+ }
+ }
+ promise.resolve({ data: buf, width: width, height: height});
+ }).bind(this);
+ var src = 'data:image/jpeg;base64,' + window.btoa(imageData);
+ img.src = src;
+ });
+ },
+
+ fetchDocument: function WorkerTransport_fetchDocument(source) {
+ this.messageHandler.send('GetDocRequest', {source: source});
+ },
+
+ getData: function WorkerTransport_getData(promise) {
+ this.messageHandler.send('GetData', null, function(data) {
+ promise.resolve(data);
+ });
+ },
+
+ getPage: function WorkerTransport_getPage(pageNumber, promise) {
+ var pageIndex = pageNumber - 1;
+ if (pageIndex in this.pagePromises)
+ return this.pagePromises[pageIndex];
+ var promise = new PDFJS.Promise('Page ' + pageNumber);
+ this.pagePromises[pageIndex] = promise;
+ this.messageHandler.send('GetPageRequest', { pageIndex: pageIndex });
+ return promise;
+ },
+
+ getAnnotations: function WorkerTransport_getAnnotations(pageIndex) {
+ this.messageHandler.send('GetAnnotationsRequest',
+ { pageIndex: pageIndex });
+ }
+ };
+ return WorkerTransport;
+
+})();
+
+
+// <canvas> contexts store most of the state we need natively.
+// However, PDF needs a bit more state, which we store here.
+
+var TextRenderingMode = {
+ FILL: 0,
+ STROKE: 1,
+ FILL_STROKE: 2,
+ INVISIBLE: 3,
+ FILL_ADD_TO_PATH: 4,
+ STROKE_ADD_TO_PATH: 5,
+ FILL_STROKE_ADD_TO_PATH: 6,
+ ADD_TO_PATH: 7,
+ ADD_TO_PATH_FLAG: 4
+};
+
+// Minimal font size that would be used during canvas fillText operations.
+var MIN_FONT_SIZE = 1;
+
+function createScratchCanvas(width, height) {
+ var canvas = document.createElement('canvas');
+ canvas.width = width;
+ canvas.height = height;
+ return canvas;
+}
+
+function addContextCurrentTransform(ctx) {
+ // If the context doesn't expose a `mozCurrentTransform`, add a JS based on.
+ if (!ctx.mozCurrentTransform) {
+ // Store the original context
+ ctx._originalSave = ctx.save;
+ ctx._originalRestore = ctx.restore;
+ ctx._originalRotate = ctx.rotate;
+ ctx._originalScale = ctx.scale;
+ ctx._originalTranslate = ctx.translate;
+ ctx._originalTransform = ctx.transform;
+
+ ctx._transformMatrix = [1, 0, 0, 1, 0, 0];
+ ctx._transformStack = [];
+
+ Object.defineProperty(ctx, 'mozCurrentTransform', {
+ get: function getCurrentTransform() {
+ return this._transformMatrix;
+ }
+ });
+
+ Object.defineProperty(ctx, 'mozCurrentTransformInverse', {
+ get: function getCurrentTransformInverse() {
+ // Calculation done using WolframAlpha:
+ // http://www.wolframalpha.com/input/?
+ // i=Inverse+{{a%2C+c%2C+e}%2C+{b%2C+d%2C+f}%2C+{0%2C+0%2C+1}}
+
+ var m = this._transformMatrix;
+ var a = m[0], b = m[1], c = m[2], d = m[3], e = m[4], f = m[5];
+
+ var ad_bc = a * d - b * c;
+ var bc_ad = b * c - a * d;
+
+ return [
+ d / ad_bc,
+ b / bc_ad,
+ c / bc_ad,
+ a / ad_bc,
+ (d * e - c * f) / bc_ad,
+ (b * e - a * f) / ad_bc
+ ];
+ }
+ });
+
+ ctx.save = function ctxSave() {
+ var old = this._transformMatrix;
+ this._transformStack.push(old);
+ this._transformMatrix = old.slice(0, 6);
+
+ this._originalSave();
+ };
+
+ ctx.restore = function ctxRestore() {
+ var prev = this._transformStack.pop();
+ if (prev) {
+ this._transformMatrix = prev;
+ this._originalRestore();
+ }
+ };
+
+ ctx.translate = function ctxTranslate(x, y) {
+ var m = this._transformMatrix;
+ m[4] = m[0] * x + m[2] * y + m[4];
+ m[5] = m[1] * x + m[3] * y + m[5];
+
+ this._originalTranslate(x, y);
+ };
+
+ ctx.scale = function ctxScale(x, y) {
+ var m = this._transformMatrix;
+ m[0] = m[0] * x;
+ m[1] = m[1] * x;
+ m[2] = m[2] * y;
+ m[3] = m[3] * y;
+
+ this._originalScale(x, y);
+ };
+
+ ctx.transform = function ctxTransform(a, b, c, d, e, f) {
+ var m = this._transformMatrix;
+ this._transformMatrix = [
+ m[0] * a + m[2] * b,
+ m[1] * a + m[3] * b,
+ m[0] * c + m[2] * d,
+ m[1] * c + m[3] * d,
+ m[0] * e + m[2] * f + m[4],
+ m[1] * e + m[3] * f + m[5]
+ ];
+
+ ctx._originalTransform(a, b, c, d, e, f);
+ };
+
+ ctx.rotate = function ctxRotate(angle) {
+ var cosValue = Math.cos(angle);
+ var sinValue = Math.sin(angle);
+
+ var m = this._transformMatrix;
+ this._transformMatrix = [
+ m[0] * cosValue + m[2] * sinValue,
+ m[1] * cosValue + m[3] * sinValue,
+ m[0] * (-sinValue) + m[2] * cosValue,
+ m[1] * (-sinValue) + m[3] * cosValue,
+ m[4],
+ m[5]
+ ];
+
+ this._originalRotate(angle);
+ };
+ }
+}
+
+var CanvasExtraState = (function CanvasExtraStateClosure() {
+ function CanvasExtraState(old) {
+ // Are soft masks and alpha values shapes or opacities?
+ this.alphaIsShape = false;
+ this.fontSize = 0;
+ this.fontSizeScale = 1;
+ this.textMatrix = IDENTITY_MATRIX;
+ this.fontMatrix = IDENTITY_MATRIX;
+ this.leading = 0;
+ // Current point (in user coordinates)
+ this.x = 0;
+ this.y = 0;
+ // Start of text line (in text coordinates)
+ this.lineX = 0;
+ this.lineY = 0;
+ // Character and word spacing
+ this.charSpacing = 0;
+ this.wordSpacing = 0;
+ this.textHScale = 1;
+ this.textRenderingMode = TextRenderingMode.FILL;
+ this.textRise = 0;
+ // Color spaces
+ this.fillColorSpace = new DeviceGrayCS();
+ this.fillColorSpaceObj = null;
+ this.strokeColorSpace = new DeviceGrayCS();
+ this.strokeColorSpaceObj = null;
+ this.fillColorObj = null;
+ this.strokeColorObj = null;
+ // Default fore and background colors
+ this.fillColor = '#000000';
+ this.strokeColor = '#000000';
+ // Note: fill alpha applies to all non-stroking operations
+ this.fillAlpha = 1;
+ this.strokeAlpha = 1;
+ this.lineWidth = 1;
+ this.paintFormXObjectDepth = 0;
+
+ this.old = old;
+ }
+
+ CanvasExtraState.prototype = {
+ clone: function CanvasExtraState_clone() {
+ return Object.create(this);
+ },
+ setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) {
+ this.x = x;
+ this.y = y;
+ }
+ };
+ return CanvasExtraState;
+})();
+
+var CanvasGraphics = (function CanvasGraphicsClosure() {
+ // Defines the time the executeOperatorList is going to be executing
+ // before it stops and shedules a continue of execution.
+ var EXECUTION_TIME = 15;
+
+ function CanvasGraphics(canvasCtx, commonObjs, objs, textLayer) {
+ this.ctx = canvasCtx;
+ this.current = new CanvasExtraState();
+ this.stateStack = [];
+ this.pendingClip = null;
+ this.res = null;
+ this.xobjs = null;
+ this.commonObjs = commonObjs;
+ this.objs = objs;
+ this.textLayer = textLayer;
+ if (canvasCtx) {
+ addContextCurrentTransform(canvasCtx);
+ }
+ }
+
+ var LINE_CAP_STYLES = ['butt', 'round', 'square'];
+ var LINE_JOIN_STYLES = ['miter', 'round', 'bevel'];
+ var NORMAL_CLIP = {};
+ var EO_CLIP = {};
+
+ CanvasGraphics.prototype = {
+ slowCommands: {
+ 'stroke': true,
+ 'closeStroke': true,
+ 'fill': true,
+ 'eoFill': true,
+ 'fillStroke': true,
+ 'eoFillStroke': true,
+ 'closeFillStroke': true,
+ 'closeEOFillStroke': true,
+ 'showText': true,
+ 'showSpacedText': true,
+ 'setStrokeColorSpace': true,
+ 'setFillColorSpace': true,
+ 'setStrokeColor': true,
+ 'setStrokeColorN': true,
+ 'setFillColor': true,
+ 'setFillColorN': true,
+ 'setStrokeGray': true,
+ 'setFillGray': true,
+ 'setStrokeRGBColor': true,
+ 'setFillRGBColor': true,
+ 'setStrokeCMYKColor': true,
+ 'setFillCMYKColor': true,
+ 'paintJpegXObject': true,
+ 'paintImageXObject': true,
+ 'paintImageMaskXObject': true,
+ 'shadingFill': true
+ },
+
+ beginDrawing: function CanvasGraphics_beginDrawing(viewport) {
+ var transform = viewport.transform;
+ this.ctx.save();
+ this.ctx.transform.apply(this.ctx, transform);
+
+ if (this.textLayer)
+ this.textLayer.beginLayout();
+ },
+
+ executeOperatorList: function CanvasGraphics_executeOperatorList(
+ operatorList,
+ executionStartIdx, continueCallback,
+ stepper) {
+ var argsArray = operatorList.argsArray;
+ var fnArray = operatorList.fnArray;
+ var i = executionStartIdx || 0;
+ var argsArrayLen = argsArray.length;
+
+ // Sometimes the OperatorList to execute is empty.
+ if (argsArrayLen == i) {
+ return i;
+ }
+
+ var executionEndIdx;
+ var endTime = Date.now() + EXECUTION_TIME;
+
+ var commonObjs = this.commonObjs;
+ var objs = this.objs;
+ var fnName;
+ var slowCommands = this.slowCommands;
+
+ while (true) {
+ if (stepper && i === stepper.nextBreakPoint) {
+ stepper.breakIt(i, continueCallback);
+ return i;
+ }
+
+ fnName = fnArray[i];
+
+ if (fnName !== 'dependency') {
+ this[fnName].apply(this, argsArray[i]);
+ } else {
+ var deps = argsArray[i];
+ for (var n = 0, nn = deps.length; n < nn; n++) {
+ var depObjId = deps[n];
+ var common = depObjId.substring(0, 2) == 'g_';
+
+ // If the promise isn't resolved yet, add the continueCallback
+ // to the promise and bail out.
+ if (!common && !objs.isResolved(depObjId)) {
+ objs.get(depObjId, continueCallback);
+ return i;
+ }
+ if (common && !commonObjs.isResolved(depObjId)) {
+ commonObjs.get(depObjId, continueCallback);
+ return i;
+ }
+ }
+ }
+
+ i++;
+
+ // If the entire operatorList was executed, stop as were done.
+ if (i == argsArrayLen) {
+ return i;
+ }
+
+ // If the execution took longer then a certain amount of time, shedule
+ // to continue exeution after a short delay.
+ // However, this is only possible if a 'continueCallback' is passed in.
+ if (continueCallback && slowCommands[fnName] && Date.now() > endTime) {
+ setTimeout(continueCallback, 0);
+ return i;
+ }
+
+ // If the operatorList isn't executed completely yet OR the execution
+ // time was short enough, do another execution round.
+ }
+ },
+
+ endDrawing: function CanvasGraphics_endDrawing() {
+ this.ctx.restore();
+
+ if (this.textLayer)
+ this.textLayer.endLayout();
+ },
+
+ // Graphics state
+ setLineWidth: function CanvasGraphics_setLineWidth(width) {
+ this.current.lineWidth = width;
+ this.ctx.lineWidth = width;
+ },
+ setLineCap: function CanvasGraphics_setLineCap(style) {
+ this.ctx.lineCap = LINE_CAP_STYLES[style];
+ },
+ setLineJoin: function CanvasGraphics_setLineJoin(style) {
+ this.ctx.lineJoin = LINE_JOIN_STYLES[style];
+ },
+ setMiterLimit: function CanvasGraphics_setMiterLimit(limit) {
+ this.ctx.miterLimit = limit;
+ },
+ setDash: function CanvasGraphics_setDash(dashArray, dashPhase) {
+ this.ctx.mozDash = dashArray;
+ this.ctx.mozDashOffset = dashPhase;
+ this.ctx.webkitLineDash = dashArray;
+ this.ctx.webkitLineDashOffset = dashPhase;
+ },
+ setRenderingIntent: function CanvasGraphics_setRenderingIntent(intent) {
+ // Maybe if we one day fully support color spaces this will be important
+ // for now we can ignore.
+ // TODO set rendering intent?
+ },
+ setFlatness: function CanvasGraphics_setFlatness(flatness) {
+ // There's no way to control this with canvas, but we can safely ignore.
+ // TODO set flatness?
+ },
+ setGState: function CanvasGraphics_setGState(states) {
+ for (var i = 0, ii = states.length; i < ii; i++) {
+ var state = states[i];
+ var key = state[0];
+ var value = state[1];
+
+ switch (key) {
+ case 'LW':
+ this.setLineWidth(value);
+ break;
+ case 'LC':
+ this.setLineCap(value);
+ break;
+ case 'LJ':
+ this.setLineJoin(value);
+ break;
+ case 'ML':
+ this.setMiterLimit(value);
+ break;
+ case 'D':
+ this.setDash(value[0], value[1]);
+ break;
+ case 'RI':
+ this.setRenderingIntent(value);
+ break;
+ case 'FL':
+ this.setFlatness(value);
+ break;
+ case 'Font':
+ this.setFont(state[1], state[2]);
+ break;
+ case 'CA':
+ this.current.strokeAlpha = state[1];
+ break;
+ case 'ca':
+ this.current.fillAlpha = state[1];
+ this.ctx.globalAlpha = state[1];
+ break;
+ }
+ }
+ },
+ save: function CanvasGraphics_save() {
+ this.ctx.save();
+ var old = this.current;
+ this.stateStack.push(old);
+ this.current = old.clone();
+ },
+ restore: function CanvasGraphics_restore() {
+ if ('textClipLayers' in this) {
+ this.completeTextClipping();
+ }
+
+ var prev = this.stateStack.pop();
+ if (prev) {
+ this.current = prev;
+ this.ctx.restore();
+ }
+ },
+ transform: function CanvasGraphics_transform(a, b, c, d, e, f) {
+ this.ctx.transform(a, b, c, d, e, f);
+ },
+
+ // Path
+ moveTo: function CanvasGraphics_moveTo(x, y) {
+ this.ctx.moveTo(x, y);
+ this.current.setCurrentPoint(x, y);
+ },
+ lineTo: function CanvasGraphics_lineTo(x, y) {
+ this.ctx.lineTo(x, y);
+ this.current.setCurrentPoint(x, y);
+ },
+ curveTo: function CanvasGraphics_curveTo(x1, y1, x2, y2, x3, y3) {
+ this.ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);
+ this.current.setCurrentPoint(x3, y3);
+ },
+ curveTo2: function CanvasGraphics_curveTo2(x2, y2, x3, y3) {
+ var current = this.current;
+ this.ctx.bezierCurveTo(current.x, current.y, x2, y2, x3, y3);
+ current.setCurrentPoint(x3, y3);
+ },
+ curveTo3: function CanvasGraphics_curveTo3(x1, y1, x3, y3) {
+ this.curveTo(x1, y1, x3, y3, x3, y3);
+ this.current.setCurrentPoint(x3, y3);
+ },
+ closePath: function CanvasGraphics_closePath() {
+ this.ctx.closePath();
+ },
+ rectangle: function CanvasGraphics_rectangle(x, y, width, height) {
+ this.ctx.rect(x, y, width, height);
+ },
+ stroke: function CanvasGraphics_stroke(consumePath) {
+ consumePath = typeof consumePath !== 'undefined' ? consumePath : true;
+ var ctx = this.ctx;
+ var strokeColor = this.current.strokeColor;
+ if (this.current.lineWidth === 0)
+ ctx.lineWidth = this.getSinglePixelWidth();
+ // For stroke we want to temporarily change the global alpha to the
+ // stroking alpha.
+ ctx.globalAlpha = this.current.strokeAlpha;
+ if (strokeColor && strokeColor.hasOwnProperty('type') &&
+ strokeColor.type === 'Pattern') {
+ // for patterns, we transform to pattern space, calculate
+ // the pattern, call stroke, and restore to user space
+ ctx.save();
+ ctx.strokeStyle = strokeColor.getPattern(ctx);
+ ctx.stroke();
+ ctx.restore();
+ } else {
+ ctx.stroke();
+ }
+ if (consumePath)
+ this.consumePath();
+ // Restore the global alpha to the fill alpha
+ ctx.globalAlpha = this.current.fillAlpha;
+ },
+ closeStroke: function CanvasGraphics_closeStroke() {
+ this.closePath();
+ this.stroke();
+ },
+ fill: function CanvasGraphics_fill(consumePath) {
+ consumePath = typeof consumePath !== 'undefined' ? consumePath : true;
+ var ctx = this.ctx;
+ var fillColor = this.current.fillColor;
+
+ if (fillColor && fillColor.hasOwnProperty('type') &&
+ fillColor.type === 'Pattern') {
+ ctx.save();
+ ctx.fillStyle = fillColor.getPattern(ctx);
+ ctx.fill();
+ ctx.restore();
+ } else {
+ ctx.fill();
+ }
+ if (consumePath)
+ this.consumePath();
+ },
+ eoFill: function CanvasGraphics_eoFill() {
+ var savedFillRule = this.setEOFillRule();
+ this.fill();
+ this.restoreFillRule(savedFillRule);
+ },
+ fillStroke: function CanvasGraphics_fillStroke() {
+ this.fill(false);
+ this.stroke(false);
+
+ this.consumePath();
+ },
+ eoFillStroke: function CanvasGraphics_eoFillStroke() {
+ var savedFillRule = this.setEOFillRule();
+ this.fillStroke();
+ this.restoreFillRule(savedFillRule);
+ },
+ closeFillStroke: function CanvasGraphics_closeFillStroke() {
+ this.closePath();
+ this.fillStroke();
+ },
+ closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() {
+ var savedFillRule = this.setEOFillRule();
+ this.closePath();
+ this.fillStroke();
+ this.restoreFillRule(savedFillRule);
+ },
+ endPath: function CanvasGraphics_endPath() {
+ this.consumePath();
+ },
+
+ // Clipping
+ clip: function CanvasGraphics_clip() {
+ this.pendingClip = NORMAL_CLIP;
+ },
+ eoClip: function CanvasGraphics_eoClip() {
+ this.pendingClip = EO_CLIP;
+ },
+
+ // Text
+ beginText: function CanvasGraphics_beginText() {
+ this.current.textMatrix = IDENTITY_MATRIX;
+ this.current.x = this.current.lineX = 0;
+ this.current.y = this.current.lineY = 0;
+ },
+ endText: function CanvasGraphics_endText() {
+ if ('textClipLayers' in this) {
+ this.swapImageForTextClipping();
+ }
+ },
+ getCurrentTextClipping: function CanvasGraphics_getCurrentTextClipping() {
+ var ctx = this.ctx;
+ var transform = ctx.mozCurrentTransform;
+ if ('textClipLayers' in this) {
+ // we need to reset only font and transform
+ var maskCtx = this.textClipLayers.maskCtx;
+ maskCtx.setTransform.apply(maskCtx, transform);
+ maskCtx.font = ctx.font;
+ return maskCtx;
+ }
+
+ var canvasWidth = ctx.canvas.width;
+ var canvasHeight = ctx.canvas.height;
+ // keeping track of the text clipping of the separate canvas
+ var maskCanvas = createScratchCanvas(canvasWidth, canvasHeight);
+ var maskCtx = maskCanvas.getContext('2d');
+ maskCtx.setTransform.apply(maskCtx, transform);
+ maskCtx.font = ctx.font;
+ var textClipLayers = {
+ maskCanvas: maskCanvas,
+ maskCtx: maskCtx
+ };
+ this.textClipLayers = textClipLayers;
+ return maskCtx;
+ },
+ swapImageForTextClipping:
+ function CanvasGraphics_swapImageForTextClipping() {
+ var ctx = this.ctx;
+ var canvasWidth = ctx.canvas.width;
+ var canvasHeight = ctx.canvas.height;
+ // saving current image content and clearing whole canvas
+ ctx.save();
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
+ var data = ctx.getImageData(0, 0, canvasWidth, canvasHeight);
+ this.textClipLayers.imageData = data;
+ ctx.clearRect(0, 0, canvasWidth, canvasHeight);
+ ctx.restore();
+ },
+ completeTextClipping: function CanvasGraphics_completeTextClipping() {
+ var ctx = this.ctx;
+ // applying mask to the image (result is saved in maskCanvas)
+ var maskCtx = this.textClipLayers.maskCtx;
+ maskCtx.setTransform(1, 0, 0, 1, 0, 0);
+ maskCtx.globalCompositeOperation = 'source-in';
+ maskCtx.drawImage(ctx.canvas, 0, 0);
+
+ // restoring image data and applying the result of masked drawing
+ ctx.save();
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
+ ctx.putImageData(this.textClipLayers.imageData, 0, 0);
+ ctx.drawImage(this.textClipLayers.maskCanvas, 0, 0);
+ ctx.restore();
+
+ delete this.textClipLayers;
+ },
+ setCharSpacing: function CanvasGraphics_setCharSpacing(spacing) {
+ this.current.charSpacing = spacing;
+ },
+ setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) {
+ this.current.wordSpacing = spacing;
+ },
+ setHScale: function CanvasGraphics_setHScale(scale) {
+ this.current.textHScale = scale / 100;
+ },
+ setLeading: function CanvasGraphics_setLeading(leading) {
+ this.current.leading = -leading;
+ },
+ setFont: function CanvasGraphics_setFont(fontRefName, size) {
+ var fontObj = this.commonObjs.get(fontRefName);
+ var current = this.current;
+
+ if (!fontObj)
+ error('Can\'t find font for ' + fontRefName);
+
+ // Slice-clone matrix so we can manipulate it without affecting original
+ if (fontObj.fontMatrix)
+ current.fontMatrix = fontObj.fontMatrix.slice(0);
+ else
+ current.fontMatrix = IDENTITY_MATRIX.slice(0);
+
+ // A valid matrix needs all main diagonal elements to be non-zero
+ // This also ensures we bypass FF bugzilla bug #719844.
+ if (current.fontMatrix[0] === 0 ||
+ current.fontMatrix[3] === 0) {
+ warn('Invalid font matrix for font ' + fontRefName);
+ }
+
+ // The spec for Tf (setFont) says that 'size' specifies the font 'scale',
+ // and in some docs this can be negative (inverted x-y axes).
+ // We implement this condition with fontMatrix.
+ if (size < 0) {
+ size = -size;
+ current.fontMatrix[0] *= -1;
+ current.fontMatrix[3] *= -1;
+ }
+
+ this.current.font = fontObj;
+ this.current.fontSize = size;
+
+ if (fontObj.coded)
+ return; // we don't need ctx.font for Type3 fonts
+
+ var name = fontObj.loadedName || 'sans-serif';
+ var bold = fontObj.black ? (fontObj.bold ? 'bolder' : 'bold') :
+ (fontObj.bold ? 'bold' : 'normal');
+
+ var italic = fontObj.italic ? 'italic' : 'normal';
+ var typeface = '"' + name + '", ' + fontObj.fallbackName;
+
+ // Some font backends cannot handle fonts below certain size.
+ // Keeping the font at minimal size and using the fontSizeScale to change
+ // the current transformation matrix before the fillText/strokeText.
+ // See https://bugzilla.mozilla.org/show_bug.cgi?id=726227
+ var browserFontSize = size >= MIN_FONT_SIZE ? size : MIN_FONT_SIZE;
+ this.current.fontSizeScale = browserFontSize != MIN_FONT_SIZE ? 1.0 :
+ size / MIN_FONT_SIZE;
+
+ var rule = italic + ' ' + bold + ' ' + browserFontSize + 'px ' + typeface;
+ this.ctx.font = rule;
+ },
+ setTextRenderingMode: function CanvasGraphics_setTextRenderingMode(mode) {
+ this.current.textRenderingMode = mode;
+ },
+ setTextRise: function CanvasGraphics_setTextRise(rise) {
+ this.current.textRise = rise;
+ },
+ moveText: function CanvasGraphics_moveText(x, y) {
+ this.current.x = this.current.lineX += x;
+ this.current.y = this.current.lineY += y;
+ },
+ setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) {
+ this.setLeading(-y);
+ this.moveText(x, y);
+ },
+ setTextMatrix: function CanvasGraphics_setTextMatrix(a, b, c, d, e, f) {
+ this.current.textMatrix = [a, b, c, d, e, f];
+
+ this.current.x = this.current.lineX = 0;
+ this.current.y = this.current.lineY = 0;
+ },
+ nextLine: function CanvasGraphics_nextLine() {
+ this.moveText(0, this.current.leading);
+ },
+ applyTextTransforms: function CanvasGraphics_applyTextTransforms() {
+ var ctx = this.ctx;
+ var current = this.current;
+ var textHScale = current.textHScale;
+ var fontMatrix = current.fontMatrix || IDENTITY_MATRIX;
+
+ ctx.transform.apply(ctx, current.textMatrix);
+ ctx.scale(1, -1);
+ ctx.translate(current.x, -current.y - current.textRise);
+ ctx.transform.apply(ctx, fontMatrix);
+ ctx.scale(textHScale, 1);
+ },
+ createTextGeometry: function CanvasGraphics_createTextGeometry() {
+ var geometry = {};
+ var ctx = this.ctx;
+ var font = this.current.font;
+ var ctxMatrix = ctx.mozCurrentTransform;
+ if (ctxMatrix) {
+ var bl = Util.applyTransform([0, 0], ctxMatrix);
+ var tr = Util.applyTransform([1, 1], ctxMatrix);
+ geometry.x = bl[0];
+ geometry.y = bl[1];
+ geometry.hScale = tr[0] - bl[0];
+ geometry.vScale = tr[1] - bl[1];
+ }
+ geometry.spaceWidth = font.spaceWidth;
+ geometry.fontName = font.loadedName;
+ geometry.fontFamily = font.fallbackName;
+ geometry.fontSize = this.current.fontSize;
+ return geometry;
+ },
+
+ showText: function CanvasGraphics_showText(str, skipTextSelection) {
+ var ctx = this.ctx;
+ var current = this.current;
+ var font = current.font;
+ var glyphs = font.charsToGlyphs(str);
+ var fontSize = current.fontSize;
+ var fontSizeScale = current.fontSizeScale;
+ var charSpacing = current.charSpacing;
+ var wordSpacing = current.wordSpacing;
+ var textHScale = current.textHScale;
+ var fontMatrix = current.fontMatrix || IDENTITY_MATRIX;
+ var textHScale2 = textHScale * fontMatrix[0];
+ var glyphsLength = glyphs.length;
+ var textLayer = this.textLayer;
+ var geom;
+ var textSelection = textLayer && !skipTextSelection ? true : false;
+ var textRenderingMode = current.textRenderingMode;
+ var canvasWidth = 0.0;
+
+ // Type3 fonts - each glyph is a "mini-PDF"
+ if (font.coded) {
+ ctx.save();
+ ctx.transform.apply(ctx, current.textMatrix);
+ ctx.translate(current.x, current.y);
+
+ ctx.scale(textHScale, 1);
+
+ if (textSelection) {
+ this.save();
+ ctx.scale(1, -1);
+ geom = this.createTextGeometry();
+ this.restore();
+ }
+ for (var i = 0; i < glyphsLength; ++i) {
+
+ var glyph = glyphs[i];
+ if (glyph === null) {
+ // word break
+ this.ctx.translate(wordSpacing, 0);
+ current.x += wordSpacing * textHScale;
+ continue;
+ }
+
+ this.save();
+ ctx.scale(fontSize, fontSize);
+ ctx.transform.apply(ctx, fontMatrix);
+ this.executeOperatorList(glyph.operatorList);
+ this.restore();
+
+ var transformed = Util.applyTransform([glyph.width, 0], fontMatrix);
+ var width = transformed[0] * fontSize +
+ Util.sign(current.fontMatrix[0]) * charSpacing;
+
+ ctx.translate(width, 0);
+ current.x += width * textHScale;
+
+ canvasWidth += width;
+ }
+ ctx.restore();
+ } else {
+ ctx.save();
+ this.applyTextTransforms();
+
+ var lineWidth = current.lineWidth;
+ var a1 = current.textMatrix[0], b1 = current.textMatrix[1];
+ var a2 = fontMatrix[0], b2 = fontMatrix[1];
+ var scale = Math.sqrt((a1 * a1 + b1 * b1) * (a2 * a2 + b2 * b2));
+ if (scale == 0 || lineWidth == 0)
+ lineWidth = this.getSinglePixelWidth();
+ else
+ lineWidth /= scale;
+
+ if (textSelection)
+ geom = this.createTextGeometry();
+
+ if (fontSizeScale != 1.0) {
+ ctx.scale(fontSizeScale, fontSizeScale);
+ lineWidth /= fontSizeScale;
+ }
+
+ ctx.lineWidth = lineWidth;
+
+ var x = 0;
+ for (var i = 0; i < glyphsLength; ++i) {
+ var glyph = glyphs[i];
+ if (glyph === null) {
+ // word break
+ x += Util.sign(current.fontMatrix[0]) * wordSpacing;
+ continue;
+ }
+
+ var character = glyph.fontChar;
+ var charWidth = glyph.width * fontSize * 0.001 +
+ Util.sign(current.fontMatrix[0]) * charSpacing;
+
+ if (!glyph.disabled) {
+ var scaledX = x / fontSizeScale;
+ switch (textRenderingMode) {
+ default: // other unsupported rendering modes
+ case TextRenderingMode.FILL:
+ case TextRenderingMode.FILL_ADD_TO_PATH:
+ ctx.fillText(character, scaledX, 0);
+ break;
+ case TextRenderingMode.STROKE:
+ case TextRenderingMode.STROKE_ADD_TO_PATH:
+ ctx.strokeText(character, scaledX, 0);
+ break;
+ case TextRenderingMode.FILL_STROKE:
+ case TextRenderingMode.FILL_STROKE_ADD_TO_PATH:
+ ctx.fillText(character, scaledX, 0);
+ ctx.strokeText(character, scaledX, 0);
+ break;
+ case TextRenderingMode.INVISIBLE:
+ case TextRenderingMode.ADD_TO_PATH:
+ break;
+ }
+ if (textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG) {
+ var clipCtx = this.getCurrentTextClipping();
+ clipCtx.fillText(character, scaledX, 0);
+ }
+ }
+
+ x += charWidth;
+
+ canvasWidth += charWidth;
+ }
+ current.x += x * textHScale2;
+ ctx.restore();
+ }
+
+ if (textSelection) {
+ geom.canvasWidth = canvasWidth;
+ this.textLayer.appendText(geom);
+ }
+
+ return canvasWidth;
+ },
+ showSpacedText: function CanvasGraphics_showSpacedText(arr) {
+ var ctx = this.ctx;
+ var current = this.current;
+ var font = current.font;
+ var fontSize = current.fontSize;
+ var textHScale = current.textHScale;
+ if (!font.coded)
+ textHScale *= (current.fontMatrix || IDENTITY_MATRIX)[0];
+ var arrLength = arr.length;
+ var textLayer = this.textLayer;
+ var geom;
+ var canvasWidth = 0.0;
+ var textSelection = textLayer ? true : false;
+
+ if (textSelection) {
+ ctx.save();
+ // Type3 fonts - each glyph is a "mini-PDF" (see also showText)
+ if (font.coded) {
+ ctx.transform.apply(ctx, current.textMatrix);
+ ctx.scale(1, -1);
+ ctx.translate(current.x, -1 * current.y);
+ ctx.scale(textHScale, 1);
+ } else
+ this.applyTextTransforms();
+ geom = this.createTextGeometry();
+ ctx.restore();
+ }
+
+ for (var i = 0; i < arrLength; ++i) {
+ var e = arr[i];
+ if (isNum(e)) {
+ var spacingLength = -e * 0.001 * fontSize * textHScale;
+ current.x += spacingLength;
+
+ if (textSelection)
+ canvasWidth += spacingLength;
+ } else if (isString(e)) {
+ var shownCanvasWidth = this.showText(e, true);
+
+ if (textSelection)
+ canvasWidth += shownCanvasWidth;
+ } else {
+ error('TJ array element ' + e + ' is not string or num');
+ }
+ }
+
+ if (textSelection) {
+ geom.canvasWidth = canvasWidth;
+ this.textLayer.appendText(geom);
+ }
+ },
+ nextLineShowText: function CanvasGraphics_nextLineShowText(text) {
+ this.nextLine();
+ this.showText(text);
+ },
+ nextLineSetSpacingShowText:
+ function CanvasGraphics_nextLineSetSpacingShowText(wordSpacing,
+ charSpacing,
+ text) {
+ this.setWordSpacing(wordSpacing);
+ this.setCharSpacing(charSpacing);
+ this.nextLineShowText(text);
+ },
+
+ // Type3 fonts
+ setCharWidth: function CanvasGraphics_setCharWidth(xWidth, yWidth) {
+ // We can safely ignore this since the width should be the same
+ // as the width in the Widths array.
+ },
+ setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth,
+ yWidth,
+ llx,
+ lly,
+ urx,
+ ury) {
+ // TODO According to the spec we're also suppose to ignore any operators
+ // that set color or include images while processing this type3 font.
+ this.rectangle(llx, lly, urx - llx, ury - lly);
+ this.clip();
+ this.endPath();
+ },
+
+ // Color
+ setStrokeColorSpace: function CanvasGraphics_setStrokeColorSpace(raw) {
+ this.current.strokeColorSpace = ColorSpace.fromIR(raw);
+ },
+ setFillColorSpace: function CanvasGraphics_setFillColorSpace(raw) {
+ this.current.fillColorSpace = ColorSpace.fromIR(raw);
+ },
+ setStrokeColor: function CanvasGraphics_setStrokeColor(/*...*/) {
+ var cs = this.current.strokeColorSpace;
+ var rgbColor = cs.getRgb(arguments);
+ var color = Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
+ this.ctx.strokeStyle = color;
+ this.current.strokeColor = color;
+ },
+ getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR, cs) {
+ if (IR[0] == 'TilingPattern') {
+ var args = IR[1];
+ var base = cs.base;
+ var color;
+ if (base) {
+ var baseComps = base.numComps;
+
+ color = [];
+ for (var i = 0; i < baseComps; ++i)
+ color.push(args[i]);
+
+ color = base.getRgb(color);
+ }
+ var pattern = new TilingPattern(IR, color, this.ctx, this.objs);
+ } else if (IR[0] == 'RadialAxial' || IR[0] == 'Dummy') {
+ var pattern = Pattern.shadingFromIR(IR);
+ } else {
+ error('Unkown IR type ' + IR[0]);
+ }
+ return pattern;
+ },
+ setStrokeColorN: function CanvasGraphics_setStrokeColorN(/*...*/) {
+ var cs = this.current.strokeColorSpace;
+
+ if (cs.name == 'Pattern') {
+ this.current.strokeColor = this.getColorN_Pattern(arguments, cs);
+ } else {
+ this.setStrokeColor.apply(this, arguments);
+ }
+ },
+ setFillColor: function CanvasGraphics_setFillColor(/*...*/) {
+ var cs = this.current.fillColorSpace;
+ var rgbColor = cs.getRgb(arguments);
+ var color = Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
+ this.ctx.fillStyle = color;
+ this.current.fillColor = color;
+ },
+ setFillColorN: function CanvasGraphics_setFillColorN(/*...*/) {
+ var cs = this.current.fillColorSpace;
+
+ if (cs.name == 'Pattern') {
+ this.current.fillColor = this.getColorN_Pattern(arguments, cs);
+ } else {
+ this.setFillColor.apply(this, arguments);
+ }
+ },
+ setStrokeGray: function CanvasGraphics_setStrokeGray(gray) {
+ if (!(this.current.strokeColorSpace instanceof DeviceGrayCS))
+ this.current.strokeColorSpace = new DeviceGrayCS();
+
+ var color = Util.makeCssRgb(gray, gray, gray);
+ this.ctx.strokeStyle = color;
+ this.current.strokeColor = color;
+ },
+ setFillGray: function CanvasGraphics_setFillGray(gray) {
+ if (!(this.current.fillColorSpace instanceof DeviceGrayCS))
+ this.current.fillColorSpace = new DeviceGrayCS();
+
+ var color = Util.makeCssRgb(gray, gray, gray);
+ this.ctx.fillStyle = color;
+ this.current.fillColor = color;
+ },
+ setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) {
+ if (!(this.current.strokeColorSpace instanceof DeviceRgbCS))
+ this.current.strokeColorSpace = new DeviceRgbCS();
+
+ var color = Util.makeCssRgb(r, g, b);
+ this.ctx.strokeStyle = color;
+ this.current.strokeColor = color;
+ },
+ setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) {
+ if (!(this.current.fillColorSpace instanceof DeviceRgbCS))
+ this.current.fillColorSpace = new DeviceRgbCS();
+
+ var color = Util.makeCssRgb(r, g, b);
+ this.ctx.fillStyle = color;
+ this.current.fillColor = color;
+ },
+ setStrokeCMYKColor: function CanvasGraphics_setStrokeCMYKColor(c, m, y, k) {
+ if (!(this.current.strokeColorSpace instanceof DeviceCmykCS))
+ this.current.strokeColorSpace = new DeviceCmykCS();
+
+ var color = Util.makeCssCmyk(c, m, y, k);
+ this.ctx.strokeStyle = color;
+ this.current.strokeColor = color;
+ },
+ setFillCMYKColor: function CanvasGraphics_setFillCMYKColor(c, m, y, k) {
+ if (!(this.current.fillColorSpace instanceof DeviceCmykCS))
+ this.current.fillColorSpace = new DeviceCmykCS();
+
+ var color = Util.makeCssCmyk(c, m, y, k);
+ this.ctx.fillStyle = color;
+ this.current.fillColor = color;
+ },
+
+ shadingFill: function CanvasGraphics_shadingFill(patternIR) {
+ var ctx = this.ctx;
+
+ this.save();
+ var pattern = Pattern.shadingFromIR(patternIR);
+ ctx.fillStyle = pattern.getPattern(ctx);
+
+ var inv = ctx.mozCurrentTransformInverse;
+ if (inv) {
+ var canvas = ctx.canvas;
+ var width = canvas.width;
+ var height = canvas.height;
+
+ var bl = Util.applyTransform([0, 0], inv);
+ var br = Util.applyTransform([0, height], inv);
+ var ul = Util.applyTransform([width, 0], inv);
+ var ur = Util.applyTransform([width, height], inv);
+
+ var x0 = Math.min(bl[0], br[0], ul[0], ur[0]);
+ var y0 = Math.min(bl[1], br[1], ul[1], ur[1]);
+ var x1 = Math.max(bl[0], br[0], ul[0], ur[0]);
+ var y1 = Math.max(bl[1], br[1], ul[1], ur[1]);
+
+ this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);
+ } else {
+ // HACK to draw the gradient onto an infinite rectangle.
+ // PDF gradients are drawn across the entire image while
+ // Canvas only allows gradients to be drawn in a rectangle
+ // The following bug should allow us to remove this.
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=664884
+
+ this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);
+ }
+
+ this.restore();
+ },
+
+ // Images
+ beginInlineImage: function CanvasGraphics_beginInlineImage() {
+ error('Should not call beginInlineImage');
+ },
+ beginImageData: function CanvasGraphics_beginImageData() {
+ error('Should not call beginImageData');
+ },
+
+ paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix,
+ bbox) {
+ this.save();
+ this.current.paintFormXObjectDepth++;
+
+ if (matrix && isArray(matrix) && 6 == matrix.length)
+ this.transform.apply(this, matrix);
+
+ if (bbox && isArray(bbox) && 4 == bbox.length) {
+ var width = bbox[2] - bbox[0];
+ var height = bbox[3] - bbox[1];
+ this.rectangle(bbox[0], bbox[1], width, height);
+ this.clip();
+ this.endPath();
+ }
+ },
+
+ paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() {
+ var depth = this.current.paintFormXObjectDepth;
+ do {
+ this.restore();
+ // some pdf don't close all restores inside object
+ // closing those for them
+ } while (this.current.paintFormXObjectDepth >= depth);
+ },
+
+ paintJpegXObject: function CanvasGraphics_paintJpegXObject(objId, w, h) {
+ var domImage = this.objs.get(objId);
+ if (!domImage) {
+ error('Dependent image isn\'t ready yet');
+ }
+
+ this.save();
+
+ var ctx = this.ctx;
+ // scale the image to the unit square
+ ctx.scale(1 / w, -1 / h);
+
+ ctx.drawImage(domImage, 0, 0, domImage.width, domImage.height,
+ 0, -h, w, h);
+
+ this.restore();
+ },
+
+ paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(
+ imgArray, inverseDecode, width, height) {
+ function applyStencilMask(buffer, inverseDecode) {
+ var imgArrayPos = 0;
+ var i, j, mask, buf;
+ // removing making non-masked pixels transparent
+ var bufferPos = 3; // alpha component offset
+ for (i = 0; i < height; i++) {
+ mask = 0;
+ for (j = 0; j < width; j++) {
+ if (!mask) {
+ buf = imgArray[imgArrayPos++];
+ mask = 128;
+ }
+ if (!(buf & mask) == inverseDecode) {
+ buffer[bufferPos] = 0;
+ }
+ bufferPos += 4;
+ mask >>= 1;
+ }
+ }
+ }
+ function rescaleImage(pixels, widthScale, heightScale) {
+ var scaledWidth = Math.ceil(width / widthScale);
+ var scaledHeight = Math.ceil(height / heightScale);
+
+ var itemsSum = new Uint32Array(scaledWidth * scaledHeight * 4);
+ var itemsCount = new Uint32Array(scaledWidth * scaledHeight);
+ for (var i = 0, position = 0; i < height; i++) {
+ var lineOffset = (0 | (i / heightScale)) * scaledWidth;
+ for (var j = 0; j < width; j++) {
+ var countOffset = lineOffset + (0 | (j / widthScale));
+ var sumOffset = countOffset << 2;
+ itemsSum[sumOffset] += pixels[position];
+ itemsSum[sumOffset + 1] += pixels[position + 1];
+ itemsSum[sumOffset + 2] += pixels[position + 2];
+ itemsSum[sumOffset + 3] += pixels[position + 3];
+ itemsCount[countOffset]++;
+ position += 4;
+ }
+ }
+ var tmpCanvas = createScratchCanvas(scaledWidth, scaledHeight);
+ var tmpCtx = tmpCanvas.getContext('2d');
+ var imgData = tmpCtx.getImageData(0, 0, scaledWidth, scaledHeight);
+ pixels = imgData.data;
+ for (var i = 0, j = 0, ii = scaledWidth * scaledHeight; i < ii; i++) {
+ var count = itemsCount[i];
+ pixels[j] = itemsSum[j] / count;
+ pixels[j + 1] = itemsSum[j + 1] / count;
+ pixels[j + 2] = itemsSum[j + 2] / count;
+ pixels[j + 3] = itemsSum[j + 3] / count;
+ j += 4;
+ }
+ tmpCtx.putImageData(imgData, 0, 0);
+ return tmpCanvas;
+ }
+
+ this.save();
+
+ var ctx = this.ctx;
+ var w = width, h = height;
+ // scale the image to the unit square
+ ctx.scale(1 / w, -1 / h);
+
+ var tmpCanvas = createScratchCanvas(w, h);
+ var tmpCtx = tmpCanvas.getContext('2d');
+
+ var fillColor = this.current.fillColor;
+ tmpCtx.fillStyle = (fillColor && fillColor.hasOwnProperty('type') &&
+ fillColor.type === 'Pattern') ?
+ fillColor.getPattern(tmpCtx) : fillColor;
+ tmpCtx.fillRect(0, 0, w, h);
+
+ var imgData = tmpCtx.getImageData(0, 0, w, h);
+ var pixels = imgData.data;
+
+ applyStencilMask(pixels, inverseDecode);
+
+ var currentTransform = ctx.mozCurrentTransformInverse;
+ var widthScale = Math.max(Math.abs(currentTransform[0]), 1);
+ var heightScale = Math.max(Math.abs(currentTransform[3]), 1);
+ if (widthScale >= 2 || heightScale >= 2) {
+ // canvas does not resize well large images to small -- using simple
+ // algorithm to perform pre-scaling
+ tmpCanvas = rescaleImage(imgData.data, widthScale, heightScale);
+ ctx.scale(widthScale, heightScale);
+ ctx.drawImage(tmpCanvas, 0, -h / heightScale);
+ } else {
+ tmpCtx.putImageData(imgData, 0, 0);
+ ctx.drawImage(tmpCanvas, 0, -h);
+ }
+ this.restore();
+ },
+
+ paintImageXObject: function CanvasGraphics_paintImageXObject(objId) {
+ var imgData = this.objs.get(objId);
+ if (!imgData)
+ error('Dependent image isn\'t ready yet');
+
+ this.save();
+ var ctx = this.ctx;
+ var w = imgData.width;
+ var h = imgData.height;
+ // scale the image to the unit square
+ ctx.scale(1 / w, -1 / h);
+
+ var tmpCanvas = createScratchCanvas(w, h);
+ var tmpCtx = tmpCanvas.getContext('2d');
+ this.putBinaryImageData(tmpCtx, imgData, w, h);
+
+ ctx.drawImage(tmpCanvas, 0, -h);
+ this.restore();
+ },
+
+ putBinaryImageData: function CanvasGraphics_putBinaryImageData(ctx, imgData,
+ w, h) {
+ var tmpImgData = 'createImageData' in ctx ? ctx.createImageData(w, h) :
+ ctx.getImageData(0, 0, w, h);
+
+ var tmpImgDataPixels = tmpImgData.data;
+ var data = imgData.data;
+ if ('set' in tmpImgDataPixels)
+ tmpImgDataPixels.set(data);
+ else {
+ // Copy over the imageData pixel by pixel.
+ for (var i = 0, ii = tmpImgDataPixels.length; i < ii; i++)
+ tmpImgDataPixels[i] = data[i];
+ }
+
+ ctx.putImageData(tmpImgData, 0, 0);
+ },
+
+ // Marked content
+
+ markPoint: function CanvasGraphics_markPoint(tag) {
+ // TODO Marked content.
+ },
+ markPointProps: function CanvasGraphics_markPointProps(tag, properties) {
+ // TODO Marked content.
+ },
+ beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) {
+ // TODO Marked content.
+ },
+ beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(
+ tag, properties) {
+ // TODO Marked content.
+ },
+ endMarkedContent: function CanvasGraphics_endMarkedContent() {
+ // TODO Marked content.
+ },
+
+ // Compatibility
+
+ beginCompat: function CanvasGraphics_beginCompat() {
+ TODO('ignore undefined operators (should we do that anyway?)');
+ },
+ endCompat: function CanvasGraphics_endCompat() {
+ TODO('stop ignoring undefined operators');
+ },
+
+ // Helper functions
+
+ consumePath: function CanvasGraphics_consumePath() {
+ if (this.pendingClip) {
+ var savedFillRule = null;
+ if (this.pendingClip == EO_CLIP)
+ savedFillRule = this.setEOFillRule();
+
+ this.ctx.clip();
+
+ this.pendingClip = null;
+ if (savedFillRule !== null)
+ this.restoreFillRule(savedFillRule);
+ }
+ this.ctx.beginPath();
+ },
+ // We generally keep the canvas context set for
+ // nonzero-winding, and just set evenodd for the operations
+ // that need them.
+ setEOFillRule: function CanvasGraphics_setEOFillRule() {
+ var savedFillRule = this.ctx.mozFillRule;
+ this.ctx.mozFillRule = 'evenodd';
+ return savedFillRule;
+ },
+ restoreFillRule: function CanvasGraphics_restoreFillRule(rule) {
+ this.ctx.mozFillRule = rule;
+ },
+ getSinglePixelWidth: function CanvasGraphics_getSinglePixelWidth(scale) {
+ var inverse = this.ctx.mozCurrentTransformInverse;
+ // max of the current horizontal and vertical scale
+ return Math.sqrt(Math.max(
+ (inverse[0] * inverse[0] + inverse[1] * inverse[1]),
+ (inverse[2] * inverse[2] + inverse[3] * inverse[3])));
+ }
+ };
+
+ return CanvasGraphics;
+})();
+
+
+
+var Name = (function NameClosure() {
+ function Name(name) {
+ this.name = name;
+ }
+
+ Name.prototype = {};
+
+ return Name;
+})();
+
+var Cmd = (function CmdClosure() {
+ function Cmd(cmd) {
+ this.cmd = cmd;
+ }
+
+ Cmd.prototype = {};
+
+ var cmdCache = {};
+
+ Cmd.get = function Cmd_get(cmd) {
+ var cmdValue = cmdCache[cmd];
+ if (cmdValue)
+ return cmdValue;
+
+ return cmdCache[cmd] = new Cmd(cmd);
+ };
+
+ return Cmd;
+})();
+
+var Dict = (function DictClosure() {
+ // xref is optional
+ function Dict(xref) {
+ // Map should only be used internally, use functions below to access.
+ var map = Object.create(null);
+
+ this.assignXref = function Dict_assignXref(newXref) {
+ xref = newXref;
+ };
+
+ // automatically dereferences Ref objects
+ this.get = function Dict_get(key1, key2, key3) {
+ var value;
+ if (typeof (value = map[key1]) != 'undefined' || key1 in map ||
+ typeof key2 == 'undefined') {
+ return xref ? xref.fetchIfRef(value) : value;
+ }
+ if (typeof (value = map[key2]) != 'undefined' || key2 in map ||
+ typeof key3 == 'undefined') {
+ return xref ? xref.fetchIfRef(value) : value;
+ }
+ value = map[key3] || null;
+ return xref ? xref.fetchIfRef(value) : value;
+ };
+
+ // no dereferencing
+ this.getRaw = function Dict_getRaw(key) {
+ return map[key];
+ };
+
+ // creates new map and dereferences all Refs
+ this.getAll = function Dict_getAll() {
+ var all = {};
+ for (var key in map) {
+ var obj = this.get(key);
+ all[key] = obj instanceof Dict ? obj.getAll() : obj;
+ }
+ return all;
+ };
+
+ this.set = function Dict_set(key, value) {
+ map[key] = value;
+ };
+
+ this.has = function Dict_has(key) {
+ return key in map;
+ };
+
+ this.forEach = function Dict_forEach(callback) {
+ for (var key in map) {
+ callback(key, this.get(key));
+ }
+ };
+ };
+
+ return Dict;
+})();
+
+var Ref = (function RefClosure() {
+ function Ref(num, gen) {
+ this.num = num;
+ this.gen = gen;
+ }
+
+ Ref.prototype = {};
+
+ return Ref;
+})();
+
+// The reference is identified by number and generation,
+// this structure stores only one instance of the reference.
+var RefSet = (function RefSetClosure() {
+ function RefSet() {
+ this.dict = {};
+ }
+
+ RefSet.prototype = {
+ has: function RefSet_has(ref) {
+ return !!this.dict['R' + ref.num + '.' + ref.gen];
+ },
+
+ put: function RefSet_put(ref) {
+ this.dict['R' + ref.num + '.' + ref.gen] = ref;
+ }
+ };
+
+ return RefSet;
+})();
+
+var Catalog = (function CatalogClosure() {
+ function Catalog(xref) {
+ this.xref = xref;
+ var obj = xref.getCatalogObj();
+ assertWellFormed(isDict(obj), 'catalog object is not a dictionary');
+ this.catDict = obj;
+ }
+
+ Catalog.prototype = {
+ get metadata() {
+ var streamRef = this.catDict.getRaw('Metadata');
+ if (!isRef(streamRef))
+ return shadow(this, 'metadata', null);
+
+ var encryptMetadata = !this.xref.encrypt ? false :
+ this.xref.encrypt.encryptMetadata;
+
+ var stream = this.xref.fetch(streamRef, !encryptMetadata);
+ var metadata;
+ if (stream && isDict(stream.dict)) {
+ var type = stream.dict.get('Type');
+ var subtype = stream.dict.get('Subtype');
+
+ if (isName(type) && isName(subtype) &&
+ type.name === 'Metadata' && subtype.name === 'XML') {
+ // XXX: This should examine the charset the XML document defines,
+ // however since there are currently no real means to decode
+ // arbitrary charsets, let's just hope that the author of the PDF
+ // was reasonable enough to stick with the XML default charset,
+ // which is UTF-8.
+ try {
+ metadata = stringToUTF8String(bytesToString(stream.getBytes()));
+ } catch (e) {
+ info('Skipping invalid metadata.');
+ }
+ }
+ }
+
+ return shadow(this, 'metadata', metadata);
+ },
+ get toplevelPagesDict() {
+ var pagesObj = this.catDict.get('Pages');
+ assertWellFormed(isDict(pagesObj), 'invalid top-level pages dictionary');
+ // shadow the prototype getter
+ return shadow(this, 'toplevelPagesDict', pagesObj);
+ },
+ get documentOutline() {
+ var xref = this.xref;
+ var obj = this.catDict.get('Outlines');
+ var root = { items: [] };
+ if (isDict(obj)) {
+ obj = obj.getRaw('First');
+ var processed = new RefSet();
+ if (isRef(obj)) {
+ var queue = [{obj: obj, parent: root}];
+ // to avoid recursion keeping track of the items
+ // in the processed dictionary
+ processed.put(obj);
+ while (queue.length > 0) {
+ var i = queue.shift();
+ var outlineDict = xref.fetchIfRef(i.obj);
+ if (outlineDict === null)
+ continue;
+ if (!outlineDict.has('Title'))
+ error('Invalid outline item');
+ var dest = outlineDict.get('A');
+ if (dest)
+ dest = dest.get('D');
+ else if (outlineDict.has('Dest')) {
+ dest = outlineDict.getRaw('Dest');
+ if (isName(dest))
+ dest = dest.name;
+ }
+ var title = outlineDict.get('Title');
+ var outlineItem = {
+ dest: dest,
+ title: stringToPDFString(title),
+ color: outlineDict.get('C') || [0, 0, 0],
+ count: outlineDict.get('Count'),
+ bold: !!(outlineDict.get('F') & 2),
+ italic: !!(outlineDict.get('F') & 1),
+ items: []
+ };
+ i.parent.items.push(outlineItem);
+ obj = outlineDict.getRaw('First');
+ if (isRef(obj) && !processed.has(obj)) {
+ queue.push({obj: obj, parent: outlineItem});
+ processed.put(obj);
+ }
+ obj = outlineDict.getRaw('Next');
+ if (isRef(obj) && !processed.has(obj)) {
+ queue.push({obj: obj, parent: i.parent});
+ processed.put(obj);
+ }
+ }
+ }
+ }
+ obj = root.items.length > 0 ? root.items : null;
+ return shadow(this, 'documentOutline', obj);
+ },
+ get numPages() {
+ var obj = this.toplevelPagesDict.get('Count');
+ assertWellFormed(
+ isInt(obj),
+ 'page count in top level pages object is not an integer'
+ );
+ // shadow the prototype getter
+ return shadow(this, 'num', obj);
+ },
+ traverseKids: function Catalog_traverseKids(pagesDict) {
+ var pageCache = this.pageCache;
+ var kids = pagesDict.get('Kids');
+ assertWellFormed(isArray(kids),
+ 'page dictionary kids object is not an array');
+ for (var i = 0, ii = kids.length; i < ii; ++i) {
+ var kid = kids[i];
+ assertWellFormed(isRef(kid),
+ 'page dictionary kid is not a reference');
+ var obj = this.xref.fetch(kid);
+ if (isDict(obj, 'Page') || (isDict(obj) && !obj.has('Kids'))) {
+ pageCache.push(new Page(this.xref, pageCache.length, obj, kid));
+ } else { // must be a child page dictionary
+ assertWellFormed(
+ isDict(obj),
+ 'page dictionary kid reference points to wrong type of object'
+ );
+ this.traverseKids(obj);
+ }
+ }
+ },
+ get destinations() {
+ function fetchDestination(dest) {
+ return isDict(dest) ? dest.get('D') : dest;
+ }
+
+ var xref = this.xref;
+ var dests = {}, nameTreeRef, nameDictionaryRef;
+ var obj = this.catDict.get('Names');
+ if (obj)
+ nameTreeRef = obj.getRaw('Dests');
+ else if (this.catDict.has('Dests'))
+ nameDictionaryRef = this.catDict.get('Dests');
+
+ if (nameDictionaryRef) {
+ // reading simple destination dictionary
+ obj = nameDictionaryRef;
+ obj.forEach(function catalogForEach(key, value) {
+ if (!value) return;
+ dests[key] = fetchDestination(value);
+ });
+ }
+ if (nameTreeRef) {
+ // reading name tree
+ var processed = new RefSet();
+ processed.put(nameTreeRef);
+ var queue = [nameTreeRef];
+ while (queue.length > 0) {
+ var i, n;
+ obj = xref.fetch(queue.shift());
+ if (obj.has('Kids')) {
+ var kids = obj.get('Kids');
+ for (i = 0, n = kids.length; i < n; i++) {
+ var kid = kids[i];
+ if (processed.has(kid))
+ error('invalid destinations');
+ queue.push(kid);
+ processed.put(kid);
+ }
+ continue;
+ }
+ var names = obj.get('Names');
+ for (i = 0, n = names.length; i < n; i += 2) {
+ dests[names[i]] = fetchDestination(xref.fetchIfRef(names[i + 1]));
+ }
+ }
+ }
+ return shadow(this, 'destinations', dests);
+ },
+ getPage: function Catalog_getPage(n) {
+ var pageCache = this.pageCache;
+ if (!pageCache) {
+ pageCache = this.pageCache = [];
+ this.traverseKids(this.toplevelPagesDict);
+ }
+ return this.pageCache[n - 1];
+ }
+ };
+
+ return Catalog;
+})();
+
+var XRef = (function XRefClosure() {
+ function XRef(stream, startXRef, mainXRefEntriesOffset, password) {
+ this.stream = stream;
+ this.entries = [];
+ this.xrefstms = {};
+ var trailerDict = this.readXRef(startXRef);
+ trailerDict.assignXref(this);
+ this.trailer = trailerDict;
+ // prepare the XRef cache
+ this.cache = [];
+
+ var encrypt = trailerDict.get('Encrypt');
+ if (encrypt) {
+ var fileId = trailerDict.get('ID');
+ this.encrypt = new CipherTransformFactory(encrypt, fileId[0], password);
+ }
+
+ // get the root dictionary (catalog) object
+ if (!(this.root = trailerDict.get('Root')))
+ error('Invalid root reference');
+ }
+
+ XRef.prototype = {
+ readXRefTable: function XRef_readXRefTable(parser) {
+ // Example of cross-reference table:
+ // xref
+ // 0 1 <-- subsection header (first obj #, obj count)
+ // 0000000000 65535 f <-- actual object (offset, generation #, f/n)
+ // 23 2 <-- subsection header ... and so on ...
+ // 0000025518 00002 n
+ // 0000025635 00000 n
+ // trailer
+ // ...
+
+ // Outer loop is over subsection headers
+ var obj;
+ while (!isCmd(obj = parser.getObj(), 'trailer')) {
+ var first = obj,
+ count = parser.getObj();
+
+ if (!isInt(first) || !isInt(count))
+ error('Invalid XRef table: wrong types in subsection header');
+
+ // Inner loop is over objects themselves
+ for (var i = 0; i < count; i++) {
+ var entry = {};
+ entry.offset = parser.getObj();
+ entry.gen = parser.getObj();
+ var type = parser.getObj();
+
+ if (isCmd(type, 'f'))
+ entry.free = true;
+ else if (isCmd(type, 'n'))
+ entry.uncompressed = true;
+
+ // Validate entry obj
+ if (!isInt(entry.offset) || !isInt(entry.gen) ||
+ !(entry.free || entry.uncompressed)) {
+ error('Invalid entry in XRef subsection: ' + first + ', ' + count);
+ }
+
+ if (!this.entries[i + first])
+ this.entries[i + first] = entry;
+ }
+ }
+
+ // Sanity check: as per spec, first object must be free
+ if (this.entries[0] && !this.entries[0].free)
+ error('Invalid XRef table: unexpected first object');
+
+ // Sanity check
+ if (!isCmd(obj, 'trailer'))
+ error('Invalid XRef table: could not find trailer dictionary');
+
+ // Read trailer dictionary, e.g.
+ // trailer
+ // << /Size 22
+ // /Root 20R
+ // /Info 10R
+ // /ID [ <81b14aafa313db63dbd6f981e49f94f4> ]
+ // >>
+ // The parser goes through the entire stream << ... >> and provides
+ // a getter interface for the key-value table
+ var dict = parser.getObj();
+ if (!isDict(dict))
+ error('Invalid XRef table: could not parse trailer dictionary');
+
+ return dict;
+ },
+ readXRefStream: function XRef_readXRefStream(stream) {
+ var streamParameters = stream.parameters;
+ var byteWidths = streamParameters.get('W');
+ var range = streamParameters.get('Index');
+ if (!range)
+ range = [0, streamParameters.get('Size')];
+ var i, j;
+ while (range.length > 0) {
+ var first = range[0], n = range[1];
+ if (!isInt(first) || !isInt(n))
+ error('Invalid XRef range fields: ' + first + ', ' + n);
+ var typeFieldWidth = byteWidths[0];
+ var offsetFieldWidth = byteWidths[1];
+ var generationFieldWidth = byteWidths[2];
+ if (!isInt(typeFieldWidth) || !isInt(offsetFieldWidth) ||
+ !isInt(generationFieldWidth)) {
+ error('Invalid XRef entry fields length: ' + first + ', ' + n);
+ }
+ for (i = 0; i < n; ++i) {
+ var type = 0, offset = 0, generation = 0;
+ for (j = 0; j < typeFieldWidth; ++j)
+ type = (type << 8) | stream.getByte();
+ // if type field is absent, its default value = 1
+ if (typeFieldWidth == 0)
+ type = 1;
+ for (j = 0; j < offsetFieldWidth; ++j)
+ offset = (offset << 8) | stream.getByte();
+ for (j = 0; j < generationFieldWidth; ++j)
+ generation = (generation << 8) | stream.getByte();
+ var entry = {};
+ entry.offset = offset;
+ entry.gen = generation;
+ switch (type) {
+ case 0:
+ entry.free = true;
+ break;
+ case 1:
+ entry.uncompressed = true;
+ break;
+ case 2:
+ break;
+ default:
+ error('Invalid XRef entry type: ' + type);
+ }
+ if (!this.entries[first + i])
+ this.entries[first + i] = entry;
+ }
+ range.splice(0, 2);
+ }
+ return streamParameters;
+ },
+ indexObjects: function XRef_indexObjects() {
+ // Simple scan through the PDF content to find objects,
+ // trailers and XRef streams.
+ function readToken(data, offset) {
+ var token = '', ch = data[offset];
+ while (ch !== 13 && ch !== 10) {
+ if (++offset >= data.length)
+ break;
+ token += String.fromCharCode(ch);
+ ch = data[offset];
+ }
+ return token;
+ }
+ function skipUntil(data, offset, what) {
+ var length = what.length, dataLength = data.length;
+ var skipped = 0;
+ // finding byte sequence
+ while (offset < dataLength) {
+ var i = 0;
+ while (i < length && data[offset + i] == what[i])
+ ++i;
+ if (i >= length)
+ break; // sequence found
+
+ offset++;
+ skipped++;
+ }
+ return skipped;
+ }
+ var trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]);
+ var startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114,
+ 101, 102]);
+ var endobjBytes = new Uint8Array([101, 110, 100, 111, 98, 106]);
+ var xrefBytes = new Uint8Array([47, 88, 82, 101, 102]);
+
+ var stream = this.stream;
+ stream.pos = 0;
+ var buffer = stream.getBytes();
+ var position = stream.start, length = buffer.length;
+ var trailers = [], xrefStms = [];
+ var state = 0;
+ var currentToken;
+ while (position < length) {
+ var ch = buffer[position];
+ if (ch === 32 || ch === 9 || ch === 13 || ch === 10) {
+ ++position;
+ continue;
+ }
+ if (ch === 37) { // %-comment
+ do {
+ ++position;
+ ch = buffer[position];
+ } while (ch !== 13 && ch !== 10);
+ continue;
+ }
+ var token = readToken(buffer, position);
+ var m;
+ if (token === 'xref') {
+ position += skipUntil(buffer, position, trailerBytes);
+ trailers.push(position);
+ position += skipUntil(buffer, position, startxrefBytes);
+ } else if ((m = /^(\d+)\s+(\d+)\s+obj\b/.exec(token))) {
+ this.entries[m[1]] = {
+ offset: position,
+ gen: m[2] | 0,
+ uncompressed: true
+ };
+
+ var contentLength = skipUntil(buffer, position, endobjBytes) + 7;
+ var content = buffer.subarray(position, position + contentLength);
+
+ // checking XRef stream suspect
+ // (it shall have '/XRef' and next char is not a letter)
+ var xrefTagOffset = skipUntil(content, 0, xrefBytes);
+ if (xrefTagOffset < contentLength &&
+ content[xrefTagOffset + 5] < 64) {
+ xrefStms.push(position);
+ this.xrefstms[position] = 1; // don't read it recursively
+ }
+
+ position += contentLength;
+ } else
+ position += token.length + 1;
+ }
+ // reading XRef streams
+ for (var i = 0, ii = xrefStms.length; i < ii; ++i) {
+ this.readXRef(xrefStms[i], true);
+ }
+ // finding main trailer
+ var dict;
+ for (var i = 0, ii = trailers.length; i < ii; ++i) {
+ stream.pos = trailers[i];
+ var parser = new Parser(new Lexer(stream), true, null);
+ var obj = parser.getObj();
+ if (!isCmd(obj, 'trailer'))
+ continue;
+ // read the trailer dictionary
+ if (!isDict(dict = parser.getObj()))
+ continue;
+ // taking the first one with 'ID'
+ if (dict.has('ID'))
+ return dict;
+ }
+ // no tailer with 'ID', taking last one (if exists)
+ if (dict)
+ return dict;
+ // nothing helps
+ // calling error() would reject worker with an UnknownErrorException.
+ throw new InvalidPDFException('Invalid PDF structure');
+ },
+ readXRef: function XRef_readXRef(startXRef, recoveryMode) {
+ var stream = this.stream;
+ stream.pos = startXRef;
+
+ try {
+ var parser = new Parser(new Lexer(stream), true, null);
+ var obj = parser.getObj();
+ var dict;
+
+ // Get dictionary
+ if (isCmd(obj, 'xref')) {
+ // Parse end-of-file XRef
+ dict = this.readXRefTable(parser);
+
+ // Recursively get other XRefs 'XRefStm', if any
+ obj = dict.get('XRefStm');
+ if (isInt(obj)) {
+ var pos = obj;
+ // ignore previously loaded xref streams
+ // (possible infinite recursion)
+ if (!(pos in this.xrefstms)) {
+ this.xrefstms[pos] = 1;
+ this.readXRef(pos);
+ }
+ }
+ } else if (isInt(obj)) {
+ // Parse in-stream XRef
+ if (!isInt(parser.getObj()) ||
+ !isCmd(parser.getObj(), 'obj') ||
+ !isStream(obj = parser.getObj())) {
+ error('Invalid XRef stream');
+ }
+ dict = this.readXRefStream(obj);
+ if (!dict)
+ error('Failed to read XRef stream');
+ }
+
+ // Recursively get previous dictionary, if any
+ obj = dict.get('Prev');
+ if (isInt(obj))
+ this.readXRef(obj, recoveryMode);
+ else if (isRef(obj)) {
+ // The spec says Prev must not be a reference, i.e. "/Prev NNN"
+ // This is a fallback for non-compliant PDFs, i.e. "/Prev NNN 0 R"
+ this.readXRef(obj.num, recoveryMode);
+ }
+
+ return dict;
+ } catch (e) {
+ log('(while reading XRef): ' + e);
+ }
+
+ if (recoveryMode)
+ return;
+
+ warn('Indexing all PDF objects');
+ return this.indexObjects();
+ },
+ getEntry: function XRef_getEntry(i) {
+ var e = this.entries[i];
+ if (e === null)
+ return null;
+ return e.free || !e.offset ? null : e; // returns null if entry is free
+ },
+ fetchIfRef: function XRef_fetchIfRef(obj) {
+ if (!isRef(obj))
+ return obj;
+ return this.fetch(obj);
+ },
+ fetch: function XRef_fetch(ref, suppressEncryption) {
+ assertWellFormed(isRef(ref), 'ref object is not a reference');
+ var num = ref.num;
+ if (num in this.cache)
+ return this.cache[num];
+
+ var e = this.getEntry(num);
+
+ // the referenced entry can be free
+ if (e === null)
+ return (this.cache[num] = e);
+
+ var gen = ref.gen;
+ var stream, parser;
+ if (e.uncompressed) {
+ if (e.gen != gen)
+ error('inconsistent generation in XRef');
+ stream = this.stream.makeSubStream(e.offset);
+ parser = new Parser(new Lexer(stream), true, this);
+ var obj1 = parser.getObj();
+ var obj2 = parser.getObj();
+ var obj3 = parser.getObj();
+ if (!isInt(obj1) || obj1 != num ||
+ !isInt(obj2) || obj2 != gen ||
+ !isCmd(obj3)) {
+ error('bad XRef entry');
+ }
+ if (!isCmd(obj3, 'obj')) {
+ // some bad pdfs use "obj1234" and really mean 1234
+ if (obj3.cmd.indexOf('obj') == 0) {
+ num = parseInt(obj3.cmd.substring(3), 10);
+ if (!isNaN(num))
+ return num;
+ }
+ error('bad XRef entry');
+ }
+ if (this.encrypt && !suppressEncryption) {
+ try {
+ e = parser.getObj(this.encrypt.createCipherTransform(num, gen));
+ } catch (ex) {
+ // almost all streams must be encrypted, but sometimes
+ // they are not probably due to some broken generators
+ // re-trying without encryption
+ return this.fetch(ref, true);
+ }
+ } else {
+ e = parser.getObj();
+ }
+ // Don't cache streams since they are mutable (except images).
+ if (!isStream(e) || e instanceof JpegStream)
+ this.cache[num] = e;
+ return e;
+ }
+
+ // compressed entry
+ var tableOffset = e.offset;
+ stream = this.fetch(new Ref(tableOffset, 0));
+ if (!isStream(stream))
+ error('bad ObjStm stream');
+ var first = stream.parameters.get('First');
+ var n = stream.parameters.get('N');
+ if (!isInt(first) || !isInt(n)) {
+ error('invalid first and n parameters for ObjStm stream');
+ }
+ parser = new Parser(new Lexer(stream), false, this);
+ parser.allowStreams = true;
+ var i, entries = [], nums = [];
+ // read the object numbers to populate cache
+ for (i = 0; i < n; ++i) {
+ num = parser.getObj();
+ if (!isInt(num)) {
+ error('invalid object number in the ObjStm stream: ' + num);
+ }
+ nums.push(num);
+ var offset = parser.getObj();
+ if (!isInt(offset)) {
+ error('invalid object offset in the ObjStm stream: ' + offset);
+ }
+ }
+ // read stream objects for cache
+ for (i = 0; i < n; ++i) {
+ entries.push(parser.getObj());
+ num = nums[i];
+ var entry = this.entries[num];
+ if (entry && entry.offset === tableOffset && entry.gen === i) {
+ this.cache[num] = entries[i];
+ }
+ }
+ e = entries[e.gen];
+ if (!e) {
+ error('bad XRef entry for compressed object');
+ }
+ return e;
+ },
+ getCatalogObj: function XRef_getCatalogObj() {
+ return this.root;
+ }
+ };
+
+ return XRef;
+})();
+
+/**
+ * A PDF document and page is built of many objects. E.g. there are objects
+ * for fonts, images, rendering code and such. These objects might get processed
+ * inside of a worker. The `PDFObjects` implements some basic functions to
+ * manage these objects.
+ */
+var PDFObjects = (function PDFObjectsClosure() {
+ function PDFObjects() {
+ this.objs = {};
+ }
+
+ PDFObjects.prototype = {
+ /**
+ * Internal function.
+ * Ensures there is an object defined for `objId`. Stores `data` on the
+ * object *if* it is created.
+ */
+ ensureObj: function PDFObjects_ensureObj(objId, data) {
+ if (this.objs[objId])
+ return this.objs[objId];
+ return this.objs[objId] = new Promise(objId, data);
+ },
+
+ /**
+ * If called *without* callback, this returns the data of `objId` but the
+ * object needs to be resolved. If it isn't, this function throws.
+ *
+ * If called *with* a callback, the callback is called with the data of the
+ * object once the object is resolved. That means, if you call this
+ * function and the object is already resolved, the callback gets called
+ * right away.
+ */
+ get: function PDFObjects_get(objId, callback) {
+ // If there is a callback, then the get can be async and the object is
+ // not required to be resolved right now
+ if (callback) {
+ this.ensureObj(objId).then(callback);
+ return null;
+ }
+
+ // If there isn't a callback, the user expects to get the resolved data
+ // directly.
+ var obj = this.objs[objId];
+
+ // If there isn't an object yet or the object isn't resolved, then the
+ // data isn't ready yet!
+ if (!obj || !obj.isResolved)
+ error('Requesting object that isn\'t resolved yet ' + objId);
+
+ return obj.data;
+ },
+
+ /**
+ * Resolves the object `objId` with optional `data`.
+ */
+ resolve: function PDFObjects_resolve(objId, data) {
+ var objs = this.objs;
+
+ // In case there is a promise already on this object, just resolve it.
+ if (objs[objId]) {
+ objs[objId].resolve(data);
+ } else {
+ this.ensureObj(objId, data);
+ }
+ },
+
+ onData: function PDFObjects_onData(objId, callback) {
+ this.ensureObj(objId).onData(callback);
+ },
+
+ isResolved: function PDFObjects_isResolved(objId) {
+ var objs = this.objs;
+ if (!objs[objId]) {
+ return false;
+ } else {
+ return objs[objId].isResolved;
+ }
+ },
+
+ hasData: function PDFObjects_hasData(objId) {
+ var objs = this.objs;
+ if (!objs[objId]) {
+ return false;
+ } else {
+ return objs[objId].hasData;
+ }
+ },
+
+ /**
+ * Returns the data of `objId` if object exists, null otherwise.
+ */
+ getData: function PDFObjects_getData(objId) {
+ var objs = this.objs;
+ if (!objs[objId] || !objs[objId].hasData) {
+ return null;
+ } else {
+ return objs[objId].data;
+ }
+ },
+
+ /**
+ * Sets the data of an object but *doesn't* resolve it.
+ */
+ setData: function PDFObjects_setData(objId, data) {
+ // Watchout! If you call `this.ensureObj(objId, data)` you're going to
+ // create a *resolved* promise which shouldn't be the case!
+ this.ensureObj(objId).data = data;
+ },
+
+ clear: function PDFObjects_clear() {
+ this.objs = {};
+ }
+ };
+ return PDFObjects;
+})();
+
+
+
+var PDFFunction = (function PDFFunctionClosure() {
+ var CONSTRUCT_SAMPLED = 0;
+ var CONSTRUCT_INTERPOLATED = 2;
+ var CONSTRUCT_STICHED = 3;
+ var CONSTRUCT_POSTSCRIPT = 4;
+
+ return {
+ getSampleArray: function PDFFunction_getSampleArray(size, outputSize, bps,
+ str) {
+ var length = 1;
+ for (var i = 0, ii = size.length; i < ii; i++)
+ length *= size[i];
+ length *= outputSize;
+
+ var array = [];
+ var codeSize = 0;
+ var codeBuf = 0;
+ // 32 is a valid bps so shifting won't work
+ var sampleMul = 1.0 / (Math.pow(2.0, bps) - 1);
+
+ var strBytes = str.getBytes((length * bps + 7) / 8);
+ var strIdx = 0;
+ for (var i = 0; i < length; i++) {
+ while (codeSize < bps) {
+ codeBuf <<= 8;
+ codeBuf |= strBytes[strIdx++];
+ codeSize += 8;
+ }
+ codeSize -= bps;
+ array.push((codeBuf >> codeSize) * sampleMul);
+ codeBuf &= (1 << codeSize) - 1;
+ }
+ return array;
+ },
+
+ getIR: function PDFFunction_getIR(xref, fn) {
+ var dict = fn.dict;
+ if (!dict)
+ dict = fn;
+
+ var types = [this.constructSampled,
+ null,
+ this.constructInterpolated,
+ this.constructStiched,
+ this.constructPostScript];
+
+ var typeNum = dict.get('FunctionType');
+ var typeFn = types[typeNum];
+ if (!typeFn)
+ error('Unknown type of function');
+
+ return typeFn.call(this, fn, dict, xref);
+ },
+
+ fromIR: function PDFFunction_fromIR(IR) {
+ var type = IR[0];
+ switch (type) {
+ case CONSTRUCT_SAMPLED:
+ return this.constructSampledFromIR(IR);
+ case CONSTRUCT_INTERPOLATED:
+ return this.constructInterpolatedFromIR(IR);
+ case CONSTRUCT_STICHED:
+ return this.constructStichedFromIR(IR);
+ case CONSTRUCT_POSTSCRIPT:
+ default:
+ return this.constructPostScriptFromIR(IR);
+ }
+ },
+
+ parse: function PDFFunction_parse(xref, fn) {
+ var IR = this.getIR(xref, fn);
+ return this.fromIR(IR);
+ },
+
+ constructSampled: function PDFFunction_constructSampled(str, dict) {
+ function toMultiArray(arr) {
+ var inputLength = arr.length;
+ var outputLength = arr.length / 2;
+ var out = [];
+ var index = 0;
+ for (var i = 0; i < inputLength; i += 2) {
+ out[index] = [arr[i], arr[i + 1]];
+ ++index;
+ }
+ return out;
+ }
+ var domain = dict.get('Domain');
+ var range = dict.get('Range');
+
+ if (!domain || !range)
+ error('No domain or range');
+
+ var inputSize = domain.length / 2;
+ var outputSize = range.length / 2;
+
+ domain = toMultiArray(domain);
+ range = toMultiArray(range);
+
+ var size = dict.get('Size');
+ var bps = dict.get('BitsPerSample');
+ var order = dict.get('Order') || 1;
+ if (order !== 1) {
+ // No description how cubic spline interpolation works in PDF32000:2008
+ // As in poppler, ignoring order, linear interpolation may work as good
+ TODO('No support for cubic spline interpolation: ' + order);
+ }
+
+ var encode = dict.get('Encode');
+ if (!encode) {
+ encode = [];
+ for (var i = 0; i < inputSize; ++i) {
+ encode.push(0);
+ encode.push(size[i] - 1);
+ }
+ }
+ encode = toMultiArray(encode);
+
+ var decode = dict.get('Decode');
+ if (!decode)
+ decode = range;
+ else
+ decode = toMultiArray(decode);
+
+ var samples = this.getSampleArray(size, outputSize, bps, str);
+
+ return [
+ CONSTRUCT_SAMPLED, inputSize, domain, encode, decode, samples, size,
+ outputSize, Math.pow(2, bps) - 1, range
+ ];
+ },
+
+ constructSampledFromIR: function PDFFunction_constructSampledFromIR(IR) {
+ // See chapter 3, page 109 of the PDF reference
+ function interpolate(x, xmin, xmax, ymin, ymax) {
+ return ymin + ((x - xmin) * ((ymax - ymin) / (xmax - xmin)));
+ }
+
+ return function constructSampledFromIRResult(args) {
+ // See chapter 3, page 110 of the PDF reference.
+ var m = IR[1];
+ var domain = IR[2];
+ var encode = IR[3];
+ var decode = IR[4];
+ var samples = IR[5];
+ var size = IR[6];
+ var n = IR[7];
+ var mask = IR[8];
+ var range = IR[9];
+
+ if (m != args.length)
+ error('Incorrect number of arguments: ' + m + ' != ' +
+ args.length);
+
+ var x = args;
+
+ // Building the cube vertices: its part and sample index
+ // http://rjwagner49.com/Mathematics/Interpolation.pdf
+ var cubeVertices = 1 << m;
+ var cubeN = new Float64Array(cubeVertices);
+ var cubeVertex = new Uint32Array(cubeVertices);
+ for (var j = 0; j < cubeVertices; j++)
+ cubeN[j] = 1;
+
+ var k = n, pos = 1;
+ // Map x_i to y_j for 0 <= i < m using the sampled function.
+ for (var i = 0; i < m; ++i) {
+ // x_i' = min(max(x_i, Domain_2i), Domain_2i+1)
+ var domain_2i = domain[i][0];
+ var domain_2i_1 = domain[i][1];
+ var xi = Math.min(Math.max(x[i], domain_2i), domain_2i_1);
+
+ // e_i = Interpolate(x_i', Domain_2i, Domain_2i+1,
+ // Encode_2i, Encode_2i+1)
+ var e = interpolate(xi, domain_2i, domain_2i_1,
+ encode[i][0], encode[i][1]);
+
+ // e_i' = min(max(e_i, 0), Size_i - 1)
+ var size_i = size[i];
+ e = Math.min(Math.max(e, 0), size_i - 1);
+
+ // Adjusting the cube: N and vertex sample index
+ var e0 = e < size_i - 1 ? Math.floor(e) : e - 1; // e1 = e0 + 1;
+ var n0 = e0 + 1 - e; // (e1 - e) / (e1 - e0);
+ var n1 = e - e0; // (e - e0) / (e1 - e0);
+ var offset0 = e0 * k;
+ var offset1 = offset0 + k; // e1 * k
+ for (var j = 0; j < cubeVertices; j++) {
+ if (j & pos) {
+ cubeN[j] *= n1;
+ cubeVertex[j] += offset1;
+ } else {
+ cubeN[j] *= n0;
+ cubeVertex[j] += offset0;
+ }
+ }
+
+ k *= size_i;
+ pos <<= 1;
+ }
+
+ var y = new Float64Array(n);
+ for (var j = 0; j < n; ++j) {
+ // Sum all cube vertices' samples portions
+ var rj = 0;
+ for (var i = 0; i < cubeVertices; i++)
+ rj += samples[cubeVertex[i] + j] * cubeN[i];
+
+ // r_j' = Interpolate(r_j, 0, 2^BitsPerSample - 1,
+ // Decode_2j, Decode_2j+1)
+ rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]);
+
+ // y_j = min(max(r_j, range_2j), range_2j+1)
+ y[j] = Math.min(Math.max(rj, range[j][0]), range[j][1]);
+ }
+
+ return y;
+ }
+ },
+
+ constructInterpolated: function PDFFunction_constructInterpolated(str,
+ dict) {
+ var c0 = dict.get('C0') || [0];
+ var c1 = dict.get('C1') || [1];
+ var n = dict.get('N');
+
+ if (!isArray(c0) || !isArray(c1))
+ error('Illegal dictionary for interpolated function');
+
+ var length = c0.length;
+ var diff = [];
+ for (var i = 0; i < length; ++i)
+ diff.push(c1[i] - c0[i]);
+
+ return [CONSTRUCT_INTERPOLATED, c0, diff, n];
+ },
+
+ constructInterpolatedFromIR:
+ function PDFFunction_constructInterpolatedFromIR(IR) {
+ var c0 = IR[1];
+ var diff = IR[2];
+ var n = IR[3];
+
+ var length = diff.length;
+
+ return function constructInterpolatedFromIRResult(args) {
+ var x = n == 1 ? args[0] : Math.pow(args[0], n);
+
+ var out = [];
+ for (var j = 0; j < length; ++j)
+ out.push(c0[j] + (x * diff[j]));
+
+ return out;
+
+ }
+ },
+
+ constructStiched: function PDFFunction_constructStiched(fn, dict, xref) {
+ var domain = dict.get('Domain');
+
+ if (!domain)
+ error('No domain');
+
+ var inputSize = domain.length / 2;
+ if (inputSize != 1)
+ error('Bad domain for stiched function');
+
+ var fnRefs = dict.get('Functions');
+ var fns = [];
+ for (var i = 0, ii = fnRefs.length; i < ii; ++i)
+ fns.push(PDFFunction.getIR(xref, xref.fetchIfRef(fnRefs[i])));
+
+ var bounds = dict.get('Bounds');
+ var encode = dict.get('Encode');
+
+ return [CONSTRUCT_STICHED, domain, bounds, encode, fns];
+ },
+
+ constructStichedFromIR: function PDFFunction_constructStichedFromIR(IR) {
+ var domain = IR[1];
+ var bounds = IR[2];
+ var encode = IR[3];
+ var fnsIR = IR[4];
+ var fns = [];
+
+ for (var i = 0, ii = fnsIR.length; i < ii; i++) {
+ fns.push(PDFFunction.fromIR(fnsIR[i]));
+ }
+
+ return function constructStichedFromIRResult(args) {
+ var clip = function constructStichedFromIRClip(v, min, max) {
+ if (v > max)
+ v = max;
+ else if (v < min)
+ v = min;
+ return v;
+ };
+
+ // clip to domain
+ var v = clip(args[0], domain[0], domain[1]);
+ // calulate which bound the value is in
+ for (var i = 0, ii = bounds.length; i < ii; ++i) {
+ if (v < bounds[i])
+ break;
+ }
+
+ // encode value into domain of function
+ var dmin = domain[0];
+ if (i > 0)
+ dmin = bounds[i - 1];
+ var dmax = domain[1];
+ if (i < bounds.length)
+ dmax = bounds[i];
+
+ var rmin = encode[2 * i];
+ var rmax = encode[2 * i + 1];
+
+ var v2 = rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin);
+
+ // call the appropropriate function
+ return fns[i]([v2]);
+ };
+ },
+
+ constructPostScript: function PDFFunction_constructPostScript(fn, dict,
+ xref) {
+ var domain = dict.get('Domain');
+ var range = dict.get('Range');
+
+ if (!domain)
+ error('No domain.');
+
+ if (!range)
+ error('No range.');
+
+ var lexer = new PostScriptLexer(fn);
+ var parser = new PostScriptParser(lexer);
+ var code = parser.parse();
+
+ return [CONSTRUCT_POSTSCRIPT, domain, range, code];
+ },
+
+ constructPostScriptFromIR: function PDFFunction_constructPostScriptFromIR(
+ IR) {
+ var domain = IR[1];
+ var range = IR[2];
+ var code = IR[3];
+ var numOutputs = range.length / 2;
+ var evaluator = new PostScriptEvaluator(code);
+ // Cache the values for a big speed up, the cache size is limited though
+ // since the number of possible values can be huge from a PS function.
+ var cache = new FunctionCache();
+ return function constructPostScriptFromIRResult(args) {
+ var initialStack = [];
+ for (var i = 0, ii = (domain.length / 2); i < ii; ++i) {
+ initialStack.push(args[i]);
+ }
+
+ var key = initialStack.join('_');
+ if (cache.has(key))
+ return cache.get(key);
+
+ var stack = evaluator.execute(initialStack);
+ var transformed = [];
+ for (i = numOutputs - 1; i >= 0; --i) {
+ var out = stack.pop();
+ var rangeIndex = 2 * i;
+ if (out < range[rangeIndex])
+ out = range[rangeIndex];
+ else if (out > range[rangeIndex + 1])
+ out = range[rangeIndex + 1];
+ transformed[i] = out;
+ }
+ cache.set(key, transformed);
+ return transformed;
+ };
+ }
+ };
+})();
+
+var FunctionCache = (function FunctionCacheClosure() {
+ // Of 10 PDF's with type4 functions the maxium number of distinct values seen
+ // was 256. This still may need some tweaking in the future though.
+ var MAX_CACHE_SIZE = 1024;
+ function FunctionCache() {
+ this.cache = {};
+ this.total = 0;
+ }
+ FunctionCache.prototype = {
+ has: function FunctionCache_has(key) {
+ return key in this.cache;
+ },
+ get: function FunctionCache_get(key) {
+ return this.cache[key];
+ },
+ set: function FunctionCache_set(key, value) {
+ if (this.total < MAX_CACHE_SIZE) {
+ this.cache[key] = value;
+ this.total++;
+ }
+ }
+ };
+ return FunctionCache;
+})();
+
+var PostScriptStack = (function PostScriptStackClosure() {
+ var MAX_STACK_SIZE = 100;
+ function PostScriptStack(initialStack) {
+ this.stack = initialStack || [];
+ }
+
+ PostScriptStack.prototype = {
+ push: function PostScriptStack_push(value) {
+ if (this.stack.length >= MAX_STACK_SIZE)
+ error('PostScript function stack overflow.');
+ this.stack.push(value);
+ },
+ pop: function PostScriptStack_pop() {
+ if (this.stack.length <= 0)
+ error('PostScript function stack underflow.');
+ return this.stack.pop();
+ },
+ copy: function PostScriptStack_copy(n) {
+ if (this.stack.length + n >= MAX_STACK_SIZE)
+ error('PostScript function stack overflow.');
+ var stack = this.stack;
+ for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++)
+ stack.push(stack[i]);
+ },
+ index: function PostScriptStack_index(n) {
+ this.push(this.stack[this.stack.length - n - 1]);
+ },
+ // rotate the last n stack elements p times
+ roll: function PostScriptStack_roll(n, p) {
+ var stack = this.stack;
+ var l = stack.length - n;
+ var r = stack.length - 1, c = l + (p - Math.floor(p / n) * n), i, j, t;
+ for (i = l, j = r; i < j; i++, j--) {
+ t = stack[i]; stack[i] = stack[j]; stack[j] = t;
+ }
+ for (i = l, j = c - 1; i < j; i++, j--) {
+ t = stack[i]; stack[i] = stack[j]; stack[j] = t;
+ }
+ for (i = c, j = r; i < j; i++, j--) {
+ t = stack[i]; stack[i] = stack[j]; stack[j] = t;
+ }
+ }
+ };
+ return PostScriptStack;
+})();
+var PostScriptEvaluator = (function PostScriptEvaluatorClosure() {
+ function PostScriptEvaluator(operators, operands) {
+ this.operators = operators;
+ this.operands = operands;
+ }
+ PostScriptEvaluator.prototype = {
+ execute: function PostScriptEvaluator_execute(initialStack) {
+ var stack = new PostScriptStack(initialStack);
+ var counter = 0;
+ var operators = this.operators;
+ var length = operators.length;
+ var operator, a, b;
+ while (counter < length) {
+ operator = operators[counter++];
+ if (typeof operator == 'number') {
+ // Operator is really an operand and should be pushed to the stack.
+ stack.push(operator);
+ continue;
+ }
+ switch (operator) {
+ // non standard ps operators
+ case 'jz': // jump if false
+ b = stack.pop();
+ a = stack.pop();
+ if (!a)
+ counter = b;
+ break;
+ case 'j': // jump
+ a = stack.pop();
+ counter = a;
+ break;
+
+ // all ps operators in alphabetical order (excluding if/ifelse)
+ case 'abs':
+ a = stack.pop();
+ stack.push(Math.abs(a));
+ break;
+ case 'add':
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a + b);
+ break;
+ case 'and':
+ b = stack.pop();
+ a = stack.pop();
+ if (isBool(a) && isBool(b))
+ stack.push(a && b);
+ else
+ stack.push(a & b);
+ break;
+ case 'atan':
+ a = stack.pop();
+ stack.push(Math.atan(a));
+ break;
+ case 'bitshift':
+ b = stack.pop();
+ a = stack.pop();
+ if (a > 0)
+ stack.push(a << b);
+ else
+ stack.push(a >> b);
+ break;
+ case 'ceiling':
+ a = stack.pop();
+ stack.push(Math.ceil(a));
+ break;
+ case 'copy':
+ a = stack.pop();
+ stack.copy(a);
+ break;
+ case 'cos':
+ a = stack.pop();
+ stack.push(Math.cos(a));
+ break;
+ case 'cvi':
+ a = stack.pop() | 0;
+ stack.push(a);
+ break;
+ case 'cvr':
+ // noop
+ break;
+ case 'div':
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a / b);
+ break;
+ case 'dup':
+ stack.copy(1);
+ break;
+ case 'eq':
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a == b);
+ break;
+ case 'exch':
+ stack.roll(2, 1);
+ break;
+ case 'exp':
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(Math.pow(a, b));
+ break;
+ case 'false':
+ stack.push(false);
+ break;
+ case 'floor':
+ a = stack.pop();
+ stack.push(Math.floor(a));
+ break;
+ case 'ge':
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a >= b);
+ break;
+ case 'gt':
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a > b);
+ break;
+ case 'idiv':
+ b = stack.pop();
+ a = stack.pop();
+ stack.push((a / b) | 0);
+ break;
+ case 'index':
+ a = stack.pop();
+ stack.index(a);
+ break;
+ case 'le':
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a <= b);
+ break;
+ case 'ln':
+ a = stack.pop();
+ stack.push(Math.log(a));
+ break;
+ case 'log':
+ a = stack.pop();
+ stack.push(Math.log(a) / Math.LN10);
+ break;
+ case 'lt':
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a < b);
+ break;
+ case 'mod':
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a % b);
+ break;
+ case 'mul':
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a * b);
+ break;
+ case 'ne':
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a != b);
+ break;
+ case 'neg':
+ a = stack.pop();
+ stack.push(-b);
+ break;
+ case 'not':
+ a = stack.pop();
+ if (isBool(a) && isBool(b))
+ stack.push(a && b);
+ else
+ stack.push(a & b);
+ break;
+ case 'or':
+ b = stack.pop();
+ a = stack.pop();
+ if (isBool(a) && isBool(b))
+ stack.push(a || b);
+ else
+ stack.push(a | b);
+ break;
+ case 'pop':
+ stack.pop();
+ break;
+ case 'roll':
+ b = stack.pop();
+ a = stack.pop();
+ stack.roll(a, b);
+ break;
+ case 'round':
+ a = stack.pop();
+ stack.push(Math.round(a));
+ break;
+ case 'sin':
+ a = stack.pop();
+ stack.push(Math.sin(a));
+ break;
+ case 'sqrt':
+ a = stack.pop();
+ stack.push(Math.sqrt(a));
+ break;
+ case 'sub':
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a - b);
+ break;
+ case 'true':
+ stack.push(true);
+ break;
+ case 'truncate':
+ a = stack.pop();
+ a = a < 0 ? Math.ceil(a) : Math.floor(a);
+ stack.push(a);
+ break;
+ case 'xor':
+ b = stack.pop();
+ a = stack.pop();
+ if (isBool(a) && isBool(b))
+ stack.push(a != b);
+ else
+ stack.push(a ^ b);
+ break;
+ default:
+ error('Unknown operator ' + operator);
+ break;
+ }
+ }
+ return stack.stack;
+ }
+ };
+ return PostScriptEvaluator;
+})();
+
+var PostScriptParser = (function PostScriptParserClosure() {
+ function PostScriptParser(lexer) {
+ this.lexer = lexer;
+ this.operators = [];
+ this.token = null;
+ this.prev = null;
+ }
+ PostScriptParser.prototype = {
+ nextToken: function PostScriptParser_nextToken() {
+ this.prev = this.token;
+ this.token = this.lexer.getToken();
+ },
+ accept: function PostScriptParser_accept(type) {
+ if (this.token.type == type) {
+ this.nextToken();
+ return true;
+ }
+ return false;
+ },
+ expect: function PostScriptParser_expect(type) {
+ if (this.accept(type))
+ return true;
+ error('Unexpected symbol: found ' + this.token.type + ' expected ' +
+ type + '.');
+ },
+ parse: function PostScriptParser_parse() {
+ this.nextToken();
+ this.expect(PostScriptTokenTypes.LBRACE);
+ this.parseBlock();
+ this.expect(PostScriptTokenTypes.RBRACE);
+ return this.operators;
+ },
+ parseBlock: function PostScriptParser_parseBlock() {
+ while (true) {
+ if (this.accept(PostScriptTokenTypes.NUMBER)) {
+ this.operators.push(this.prev.value);
+ } else if (this.accept(PostScriptTokenTypes.OPERATOR)) {
+ this.operators.push(this.prev.value);
+ } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
+ this.parseCondition();
+ } else {
+ return;
+ }
+ }
+ },
+ parseCondition: function PostScriptParser_parseCondition() {
+ // Add two place holders that will be updated later
+ var conditionLocation = this.operators.length;
+ this.operators.push(null, null);
+
+ this.parseBlock();
+ this.expect(PostScriptTokenTypes.RBRACE);
+ if (this.accept(PostScriptTokenTypes.IF)) {
+ // The true block is right after the 'if' so it just falls through on
+ // true else it jumps and skips the true block.
+ this.operators[conditionLocation] = this.operators.length;
+ this.operators[conditionLocation + 1] = 'jz';
+ } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
+ var jumpLocation = this.operators.length;
+ this.operators.push(null, null);
+ var endOfTrue = this.operators.length;
+ this.parseBlock();
+ this.expect(PostScriptTokenTypes.RBRACE);
+ this.expect(PostScriptTokenTypes.IFELSE);
+ // The jump is added at the end of the true block to skip the false
+ // block.
+ this.operators[jumpLocation] = this.operators.length;
+ this.operators[jumpLocation + 1] = 'j';
+
+ this.operators[conditionLocation] = endOfTrue;
+ this.operators[conditionLocation + 1] = 'jz';
+ } else {
+ error('PS Function: error parsing conditional.');
+ }
+ }
+ };
+ return PostScriptParser;
+})();
+
+var PostScriptTokenTypes = {
+ LBRACE: 0,
+ RBRACE: 1,
+ NUMBER: 2,
+ OPERATOR: 3,
+ IF: 4,
+ IFELSE: 5
+};
+
+var PostScriptToken = (function PostScriptTokenClosure() {
+ function PostScriptToken(type, value) {
+ this.type = type;
+ this.value = value;
+ }
+
+ var opCache = {};
+
+ PostScriptToken.getOperator = function PostScriptToken_getOperator(op) {
+ var opValue = opCache[op];
+ if (opValue)
+ return opValue;
+
+ return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op);
+ };
+
+ PostScriptToken.LBRACE = new PostScriptToken(PostScriptTokenTypes.LBRACE,
+ '{');
+ PostScriptToken.RBRACE = new PostScriptToken(PostScriptTokenTypes.RBRACE,
+ '}');
+ PostScriptToken.IF = new PostScriptToken(PostScriptTokenTypes.IF, 'IF');
+ PostScriptToken.IFELSE = new PostScriptToken(PostScriptTokenTypes.IFELSE,
+ 'IFELSE');
+ return PostScriptToken;
+})();
+
+var PostScriptLexer = (function PostScriptLexerClosure() {
+ function PostScriptLexer(stream) {
+ this.stream = stream;
+ }
+ PostScriptLexer.prototype = {
+ getToken: function PostScriptLexer_getToken() {
+ var s = '';
+ var ch;
+ var comment = false;
+ var stream = this.stream;
+
+ // skip comments
+ while (true) {
+ if (!(ch = stream.getChar()))
+ return EOF;
+
+ if (comment) {
+ if (ch == '\x0a' || ch == '\x0d')
+ comment = false;
+ } else if (ch == '%') {
+ comment = true;
+ } else if (!Lexer.isSpace(ch)) {
+ break;
+ }
+ }
+ switch (ch) {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ case '+': case '-': case '.':
+ return new PostScriptToken(PostScriptTokenTypes.NUMBER,
+ this.getNumber(ch));
+ case '{':
+ return PostScriptToken.LBRACE;
+ case '}':
+ return PostScriptToken.RBRACE;
+ }
+ // operator
+ var str = ch.toLowerCase();
+ while (true) {
+ ch = stream.lookChar();
+ if (ch === null)
+ break;
+ ch = ch.toLowerCase();
+ if (ch >= 'a' && ch <= 'z')
+ str += ch;
+ else
+ break;
+ stream.skip();
+ }
+ switch (str) {
+ case 'if':
+ return PostScriptToken.IF;
+ case 'ifelse':
+ return PostScriptToken.IFELSE;
+ default:
+ return PostScriptToken.getOperator(str);
+ }
+ },
+ getNumber: function PostScriptLexer_getNumber(ch) {
+ var str = ch;
+ var stream = this.stream;
+ while (true) {
+ ch = stream.lookChar();
+ if ((ch >= '0' && ch <= '9') || ch == '-' || ch == '.')
+ str += ch;
+ else
+ break;
+ stream.skip();
+ }
+ var value = parseFloat(str);
+ if (isNaN(value))
+ error('Invalid floating point number: ' + value);
+ return value;
+ }
+ };
+ return PostScriptLexer;
+})();
+
+
+
+var ISOAdobeCharset = [
+ '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar',
+ 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright',
+ 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero',
+ 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',
+ 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question',
+ 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+ 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+ 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',
+ 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
+ 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent',
+ 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency',
+ 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft',
+ 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl',
+ 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase',
+ 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis',
+ 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde',
+ 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla',
+ 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine',
+ 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash',
+ 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu',
+ 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter',
+ 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior',
+ 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright',
+ 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde',
+ 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute',
+ 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex',
+ 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex',
+ 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute',
+ 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla',
+ 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex',
+ 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis',
+ 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis',
+ 'ugrave', 'yacute', 'ydieresis', 'zcaron'
+];
+
+var ExpertCharset = [
+ '.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle',
+ 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior',
+ 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma',
+ 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle',
+ 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle',
+ 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle',
+ 'colon', 'semicolon', 'commasuperior', 'threequartersemdash',
+ 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior',
+ 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',
+ 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',
+ 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',
+ 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall',
+ 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall',
+ 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall',
+ 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall',
+ 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary',
+ 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle',
+ 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',
+ 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall',
+ 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall',
+ 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters',
+ 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths',
+ 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',
+ 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',
+ 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',
+ 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',
+ 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',
+ 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',
+ 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall',
+ 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall',
+ 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall',
+ 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',
+ 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall',
+ 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall',
+ 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',
+ 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall',
+ 'Ydieresissmall'
+];
+
+var ExpertSubsetCharset = [
+ '.notdef', 'space', 'dollaroldstyle', 'dollarsuperior',
+ 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',
+ 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction',
+ 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',
+ 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle',
+ 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior',
+ 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior',
+ 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',
+ 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',
+ 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',
+ 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted',
+ 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter',
+ 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths',
+ 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',
+ 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',
+ 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',
+ 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',
+ 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',
+ 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',
+ 'periodinferior', 'commainferior'
+];
+
+
+
+var CIDToUnicodeMaps = {
+ 'Adobe-Japan1': [[32, 160], {f: 12, c: 33}, [45, 8209], {f: 46, c: 46}, 165,
+ {f: 2, c: 93}, [95, 818], [96, 768], {f: 27, c: 97}, 166, 125, [732, 771],
+ [700, 8217], 92, [699, 8216], 124, [126, 8764], {f: 3, c: 161}, 8260, 402,
+ 0, 164, 8220, 171, {f: 2, c: 8249}, {f: 2, c: 64257}, [8210, 8211], 0, 0,
+ [183, 8729], 0, 8226, 8218, 8222, 8221, 187, 0, 0, 191, {f: 2, c: 769},
+ [175, 772], {f: 3, c: 774}, 778, [184, 807], 779, 808, 780, [822, 8212],
+ 198, 170, 321, 216, 338, 186, 230, 305, 322, 248, 339, 223, 173, 169, 172,
+ 174, 0, 0, {f: 2, c: 178}, 181, 185, {f: 3, c: 188}, {f: 6, c: 192},
+ {f: 16, c: 199}, 0, {f: 6, c: 217}, {f: 6, c: 224}, {f: 16, c: 231}, 0,
+ {f: 7, c: 249}, 352, 376, 381, [773, 8254], 353, 8482, 382, 0, 8194,
+ {s: 91}, 65512, {s: 3}, {f: 63, c: 65377}, {s: 243}, [8195, 12288],
+ {f: 2, c: 12289}, 65292, 65294, 12539, {f: 2, c: 65306}, 65311, 65281,
+ {f: 2, c: 12443}, 180, 65344, 168, 65342, 65507, 65343, {f: 2, c: 12541},
+ {f: 2, c: 12445}, 12291, 20189, {f: 3, c: 12293}, 12540, 8213, 8208, 65295,
+ 65340, [12316, 65374], 8214, 65372, 8230, 8229, {s: 4}, {f: 2, c: 65288},
+ {f: 2, c: 12308}, 65339, 65341, 65371, 65373, {f: 10, c: 12296}, 65291,
+ [8722, 65293], 177, 215, 247, 65309, 8800, 65308, 65310, {f: 2, c: 8806},
+ 8734, 8756, 9794, 9792, 176, {f: 2, c: 8242}, 8451, 65509, 65284,
+ {f: 2, c: 65504}, 65285, 65283, 65286, 65290, 65312, 167, 9734, 9733, 9675,
+ 9679, 9678, 9671, 9670, 9633, 9632, 9651, 9650, 9661, 9660, 8251, 12306,
+ 8594, {f: 2, c: 8592}, 8595, 12307, 8712, 8715, {f: 2, c: 8838},
+ {f: 2, c: 8834}, 8746, 8745, {f: 2, c: 8743}, 65506, 8658, 8660, 8704,
+ 8707, 8736, 8869, 8978, 8706, 8711, 8801, 8786, {f: 2, c: 8810}, 8730,
+ 8765, 8733, 8757, {f: 2, c: 8747}, 8491, 8240, 9839, 9837, 9834,
+ {f: 2, c: 8224}, 182, 9711, {f: 10, c: 65296}, {f: 26, c: 65313},
+ {f: 26, c: 65345}, {f: 83, c: 12353}, {f: 86, c: 12449}, {f: 17, c: 913},
+ {f: 7, c: 931}, {f: 17, c: 945}, {f: 7, c: 963}, {f: 6, c: 1040}, 1025,
+ {f: 32, c: 1046}, 1105, {f: 26, c: 1078}, 20124, 21782, 23043, 38463,
+ 21696, 24859, 25384, 23030, 36898, 33909, 33564, 31312, 24746, 25569,
+ 28197, 26093, 33894, 33446, 39925, 26771, 22311, 26017, 25201, 23451,
+ 22992, 34427, 39156, 32098, 32190, 39822, 25110, 31903, 34999, 23433,
+ 24245, 25353, 26263, 26696, 38343, 38797, 26447, 20197, 20234, 20301,
+ 20381, 20553, 22258, 22839, 22996, 23041, 23561, 24799, 24847, 24944,
+ 26131, 26885, 28858, 30031, 30064, 31227, 32173, 32239, 32963, 33806,
+ [12176, 34915], 35586, 36949, 36986, 21307, 20117, 20133, 22495, 32946,
+ 37057, 30959, [12032, 19968], 22769, 28322, 36920, 31282, 33576, 33419,
+ 39983, 20801, 21360, 21693, 21729, 22240, 23035, 24341, 39154, 28139,
+ 32996, 34093, 38498, 38512, 38560, 38907, 21515, 21491, 23431, 28879,
+ [12155, 32701], 36802, [12204, 38632], 21359, 40284, 31418, 19985, 30867,
+ [12165, 33276], 28198, 22040, 21764, 27421, 34074, 39995, 23013, 21417,
+ 28006, [12128, 29916], 38287, 22082, 20113, 36939, 38642, 33615, 39180,
+ 21473, 21942, 23344, 24433, 26144, 26355, 26628, 27704, 27891, 27945,
+ 29787, 30408, 31310, 38964, 33521, 34907, 35424, 37613, 28082, 30123,
+ 30410, 39365, 24742, 35585, 36234, 38322, 27022, 21421, 20870, 22290,
+ 22576, 22852, 23476, 24310, 24616, 25513, 25588, 27839, 28436, 28814,
+ 28948, 29017, 29141, 29503, 32257, 33398, 33489, 34199, 36960, 37467,
+ 40219, 22633, 26044, 27738, 29989, 20985, 22830, 22885, 24448, 24540,
+ 25276, 26106, 27178, 27431, 27572, 29579, 32705, 35158, 40236, 40206,
+ [12009, 40644], 23713, 27798, 33659, 20740, 23627, 25014, 33222, 26742,
+ 29281, [12036, 20057], 20474, 21368, 24681, 28201, 31311, [12211, 38899],
+ 19979, 21270, 20206, 20309, 20285, 20385, 20339, 21152, 21487, 22025,
+ 22799, 23233, 23478, 23521, 31185, 26247, 26524, 26550, 27468, 27827,
+ [12117, 28779], 29634, 31117, [12146, 31166], 31292, 31623, 33457, 33499,
+ 33540, 33655, 33775, 33747, 34662, 35506, 22057, 36008, 36838, 36942,
+ 38686, 34442, 20420, 23784, 25105, [12123, 29273], 30011, 33253, 33469,
+ 34558, 36032, 38597, 39187, 39381, 20171, 20250, 35299, 22238, 22602,
+ 22730, 24315, 24555, 24618, 24724, 24674, 25040, 25106, 25296, 25913,
+ 39745, 26214, 26800, 28023, 28784, 30028, 30342, 32117, 33445, 34809,
+ 38283, 38542, [12185, 35997], 20977, 21182, 22806, 21683, 23475, 23830,
+ 24936, 27010, 28079, 30861, 33995, 34903, 35442, 37799, 39608, 28012,
+ 39336, 34521, 22435, 26623, 34510, 37390, 21123, 22151, 21508, 24275,
+ 25313, 25785, 26684, 26680, 27579, 29554, 30906, 31339, 35226,
+ [12179, 35282], 36203, 36611, 37101, 38307, 38548, [12208, 38761], 23398,
+ 23731, 27005, {f: 2, c: 38989}, 25499, 31520, 27179, 27263, 26806, 39949,
+ 28511, 21106, 21917, 24688, 25324, 27963, 28167, 28369, 33883, 35088,
+ 36676, 19988, 39993, 21494, 26907, 27194, 38788, 26666, 20828, 31427,
+ 33970, 37340, 37772, 22107, 40232, 26658, 33541, 33841, 31909, 21000,
+ 33477, [12129, 29926], 20094, 20355, 20896, 23506, 21002, 21208, 21223,
+ 24059, 21914, 22570, 23014, 23436, 23448, 23515, [12082, 24178], 24185,
+ 24739, 24863, 24931, 25022, 25563, 25954, 26577, 26707, 26874, 27454,
+ 27475, 27735, 28450, 28567, 28485, 29872, [12130, 29976], 30435, 30475,
+ 31487, 31649, 31777, 32233, [12152, 32566], 32752, 32925, 33382, 33694,
+ 35251, 35532, 36011, 36996, 37969, 38291, 38289, 38306, 38501, 38867,
+ 39208, 33304, 20024, 21547, 23736, 24012, 29609, 30284, 30524, 23721,
+ 32747, 36107, 38593, 38929, 38996, 39000, 20225, 20238, 21361, 21916,
+ 22120, 22522, 22855, 23305, 23492, 23696, 24076, 24190, 24524, 25582,
+ 26426, 26071, 26082, 26399, 26827, 26820, 27231, 24112, 27589, 27671,
+ 27773, 30079, 31048, 23395, 31232, 32000, 24509, 35215, 35352, 36020,
+ 36215, 36556, 36637, 39138, 39438, [12004, 12225, 39740], [12018, 20096],
+ 20605, 20736, 22931, 23452, 25135, 25216, 25836, 27450, 29344, 30097,
+ 31047, 32681, 34811, 35516, 35696, 25516, 33738, 38816, 21513, 21507,
+ 21931, 26708, 27224, 35440, 30759, 26485, [12233, 40653], 21364, 23458,
+ 33050, 34384, 36870, 19992, 20037, 20167, 20241, 21450, 21560, 23470,
+ [12088, 24339], 24613, 25937, 26429, 27714, 27762, 27875, 28792, 29699,
+ 31350, 31406, 31496, 32026, 31998, 32102, 26087, [12124, 29275], 21435,
+ 23621, 24040, 25298, 25312, 25369, 28192, 34394, 35377, 36317, 37624,
+ 28417, 31142, [12226, 39770], 20136, {f: 2, c: 20139}, 20379, 20384, 20689,
+ 20807, 31478, 20849, 20982, 21332, 21281, 21375, 21483, 21932, 22659,
+ 23777, 24375, 24394, 24623, 24656, 24685, 25375, 25945, 27211, 27841,
+ 29378, 29421, 30703, 33016, 33029, 33288, 34126, 37111, 37857, 38911,
+ 39255, 39514, 20208, 20957, 23597, 26241, 26989, 23616, 26354, 26997,
+ [12127, 29577], 26704, 31873, 20677, 21220, 22343, [12081, 24062], 37670,
+ [12100, 26020], 27427, 27453, 29748, 31105, 31165, 31563, 32202, 33465,
+ 33740, 34943, 35167, 35641, 36817, [12198, 37329], 21535, 37504, 20061,
+ 20534, 21477, 21306, 29399, 29590, 30697, 33510, 36527, 39366, 39368,
+ 39378, 20855, 24858, 34398, 21936, 31354, 20598, 23507, 36935, 38533,
+ 20018, 27355, 37351, 23633, 23624, 25496, 31391, 27795, 38772, 36705,
+ 31402, 29066, 38536, 31874, 26647, 32368, 26705, 37740, 21234, 21531,
+ 34219, 35347, 32676, 36557, 37089, 21350, 34952, 31041, 20418, 20670,
+ 21009, 20804, 21843, 22317, 29674, 22411, 22865, 24418, 24452, 24693,
+ 24950, 24935, 25001, 25522, 25658, 25964, 26223, 26690, 28179, 30054,
+ 31293, 31995, 32076, 32153, 32331, 32619, 33550, 33610, 34509, 35336,
+ 35427, 35686, 36605, 38938, 40335, 33464, 36814, 39912, 21127, 25119,
+ 25731, 28608, 38553, 26689, 20625, [12107, 27424], 27770, 28500,
+ [12147, 31348], 32080, [12174, 34880], 35363, [12105, 26376], 20214, 20537,
+ 20518, 20581, 20860, 21048, 21091, 21927, 22287, 22533, 23244, 24314,
+ 25010, 25080, 25331, 25458, 26908, 27177, 29309, [12125, 29356], 29486,
+ 30740, 30831, 32121, 30476, 32937, [12178, 35211], 35609, 36066, 36562,
+ 36963, 37749, 38522, 38997, 39443, 40568, 20803, 21407, 21427, 24187,
+ 24358, 28187, 28304, [12126, 29572], 29694, 32067, 33335, [12180, 35328],
+ 35578, 38480, 20046, 20491, 21476, 21628, 22266, 22993, 23396,
+ [12080, 24049], 24235, 24359, [12094, 25144], 25925, 26543, 28246, 29392,
+ 31946, 34996, 32929, 32993, 33776, [11969, 34382], 35463, 36328, 37431,
+ 38599, 39015, [12238, 40723], 20116, 20114, 20237, 21320, 21577, 21566,
+ 23087, 24460, 24481, 24735, 26791, 27278, 29786, 30849, 35486, 35492,
+ 35703, 37264, 20062, 39881, 20132, 20348, 20399, 20505, 20502, 20809,
+ 20844, 21151, 21177, 21246, 21402, [12061, 21475], 21521, 21518, 21897,
+ 22353, 22434, 22909, 23380, 23389, 23439, [12079, 24037], 24039, 24055,
+ 24184, 24195, 24218, 24247, 24344, 24658, 24908, 25239, 25304, 25511,
+ 25915, 26114, 26179, 26356, 26477, 26657, 26775, 27083, 27743, 27946,
+ 28009, 28207, 28317, 30002, 30343, 30828, 31295, 31968, 32005, 32024,
+ 32094, 32177, 32789, 32771, 32943, 32945, 33108, 33167, 33322, 33618,
+ [12175, 34892], 34913, 35611, 36002, 36092, 37066, 37237, 37489, 30783,
+ 37628, 38308, 38477, 38917, [12217, 39321], [12220, 39640], 40251, 21083,
+ 21163, 21495, 21512, 22741, 25335, 28640, 35946, 36703, 40633, 20811,
+ 21051, 21578, 22269, 31296, 37239, 40288, [12234, 40658], 29508, 28425,
+ 33136, 29969, 24573, 24794, [12219, 39592], 29403, 36796, 27492, 38915,
+ 20170, 22256, 22372, 22718, 23130, 24680, 25031, 26127, 26118, 26681,
+ 26801, 28151, 30165, 32058, [12169, 33390], 39746, 20123, 20304, 21449,
+ 21766, 23919, 24038, 24046, 26619, 27801, 29811, 30722, 35408, 37782,
+ 35039, 22352, 24231, 25387, 20661, 20652, 20877, 26368, 21705, 22622,
+ 22971, 23472, 24425, 25165, 25505, 26685, 27507, 28168, 28797, 37319,
+ 29312, 30741, 30758, 31085, 25998, 32048, 33756, 35009, 36617, 38555,
+ 21092, 22312, 26448, 32618, 36001, 20916, 22338, 38442, 22586, 27018,
+ 32948, 21682, 23822, 22524, 30869, 40442, 20316, 21066, 21643, 25662,
+ 26152, 26388, 26613, 31364, 31574, 32034, 37679, 26716, 39853, 31545,
+ 21273, 20874, 21047, 23519, 25334, 25774, 25830, 26413, 27578, 34217,
+ 38609, 30352, 39894, 25420, 37638, 39851, [12139, 30399], 26194, 19977,
+ 20632, 21442, [12077, 23665], 24808, 25746, 25955, 26719, 29158, 29642,
+ 29987, 31639, 32386, 34453, 35715, 36059, 37240, 39184, 26028, 26283,
+ 27531, 20181, 20180, 20282, 20351, 21050, 21496, 21490, 21987, 22235,
+ [12064, 22763], 22987, 22985, 23039, [12070, 23376], 23629, 24066, 24107,
+ 24535, 24605, 25351, [12096, 25903], 23388, 26031, 26045, 26088, 26525,
+ [12108, 27490], 27515, [12114, 27663], 29509, 31049, 31169, [12151, 31992],
+ 32025, 32043, 32930, 33026, [12164, 33267], 35222, 35422, 35433, 35430,
+ 35468, 35566, 36039, 36060, 38604, 39164, [12013, 27503], 20107, 20284,
+ 20365, 20816, 23383, 23546, 24904, 25345, 26178, 27425, 28363, 27835,
+ 29246, 29885, 30164, 30913, [12144, 31034], [12157, 32780], [12159, 32819],
+ [12163, 33258], 33940, 36766, 27728, [12229, 40575], 24335, 35672, 40235,
+ 31482, 36600, 23437, 38635, 19971, 21489, 22519, 22833, 23241, 23460,
+ 24713, 28287, 28422, 30142, 36074, 23455, 34048, 31712, 20594, 26612,
+ 33437, 23649, 34122, 32286, 33294, 20889, 23556, 25448, 36198, 26012,
+ 29038, 31038, 32023, 32773, 35613, [12190, 36554], 36974, 34503, 37034,
+ 20511, 21242, 23610, 26451, 28796, 29237, 37196, 37320, 37675, 33509,
+ 23490, 24369, 24825, 20027, 21462, 23432, [12095, 25163], 26417, 27530,
+ 29417, 29664, 31278, 33131, 36259, 37202, [12216, 39318], 20754, 21463,
+ 21610, 23551, 25480, 27193, 32172, 38656, 22234, 21454, 21608, 23447,
+ 23601, 24030, 20462, 24833, 25342, 27954, 31168, 31179, 32066, 32333,
+ 32722, 33261, [12168, 33311], 33936, 34886, 35186, 35728, 36468, 36655,
+ 36913, 37195, 37228, 38598, 37276, 20160, 20303, 20805, [12055, 21313],
+ 24467, 25102, 26580, 27713, 28171, 29539, 32294, 37325, 37507, 21460,
+ 22809, 23487, 28113, 31069, 32302, 31899, 22654, 29087, 20986, 34899,
+ 36848, 20426, 23803, 26149, 30636, 31459, 33308, 39423, 20934, 24490,
+ 26092, 26991, 27529, 28147, 28310, 28516, 30462, 32020, 24033, 36981,
+ 37255, 38918, 20966, 21021, 25152, 26257, 26329, 28186, 24246, 32210,
+ 32626, 26360, 34223, 34295, 35576, 21161, 21465, [12069, 22899], 24207,
+ 24464, 24661, 37604, 38500, 20663, 20767, 21213, 21280, 21319, 21484,
+ 21736, 21830, 21809, 22039, 22888, 22974, 23100, 23477, 23558,
+ [12073, 23567], 23569, 23578, 24196, 24202, 24288, 24432, 25215, 25220,
+ 25307, 25484, 25463, 26119, 26124, 26157, 26230, 26494, 26786, 27167,
+ 27189, 27836, 28040, 28169, 28248, 28988, 28966, 29031, 30151, 30465,
+ 30813, 30977, 31077, 31216, 31456, 31505, 31911, 32057, 32918, 33750,
+ 33931, 34121, 34909, 35059, 35359, 35388, 35412, 35443, 35937, 36062,
+ 37284, 37478, 37758, 37912, 38556, 38808, 19978, 19976, 19998, 20055,
+ 20887, 21104, 22478, 22580, 22732, 23330, 24120, 24773, 25854, 26465,
+ 26454, 27972, 29366, 30067, 31331, 33976, 35698, 37304, 37664, 22065,
+ 22516, 39166, 25325, 26893, 27542, 29165, 32340, 32887, [12170, 33394],
+ 35302, [12215, 39135], 34645, 36785, 23611, 20280, 20449, 20405, 21767,
+ 23072, 23517, 23529, [12092, 24515], 24910, 25391, 26032, 26187, 26862,
+ 27035, 28024, 28145, 30003, 30137, 30495, 31070, 31206, 32051,
+ [12162, 33251], 33455, 34218, 35242, 35386, [12189, 36523], [12191, 36763],
+ 36914, 37341, 38663, [12040, 20154], 20161, 20995, 22645, 22764, 23563,
+ 29978, 23613, 33102, 35338, 36805, 38499, 38765, 31525, 35535, 38920,
+ 37218, 22259, 21416, 36887, 21561, 22402, 24101, 25512, [12116, 27700],
+ 28810, 30561, 31883, 32736, 34928, 36930, 37204, 37648, 37656, 38543,
+ 29790, 39620, 23815, 23913, 25968, 26530, 36264, 38619, 25454, 26441,
+ 26905, 33733, 38935, 38592, 35070, 28548, 25722, [12072, 23544], 19990,
+ 28716, 30045, 26159, 20932, 21046, 21218, 22995, 24449, 24615, 25104,
+ 25919, 25972, 26143, 26228, 26866, 26646, 27491, 28165, 29298,
+ [12131, 29983], 30427, 31934, 32854, 22768, 35069, [11972, 35199], 35488,
+ 35475, 35531, 36893, 37266, [11992, 38738], 38745, [12011, 25993], 31246,
+ 33030, 38587, 24109, 24796, 25114, 26021, 26132, 26512, [12143, 30707],
+ 31309, 31821, 32318, 33034, 36012, [12186, 36196], 36321, 36447, 30889,
+ 20999, 25305, 25509, 25666, 25240, 35373, 31363, 31680, 35500, 38634,
+ 32118, [12166, 33292], 34633, 20185, 20808, 21315, 21344, 23459, 23554,
+ 23574, 24029, 25126, 25159, 25776, 26643, 26676, 27849, 27973, 27927,
+ 26579, 28508, 29006, 29053, 26059, 31359, 31661, 32218, 32330, 32680,
+ 33146, [12167, 33307], 33337, 34214, 35438, 36046, 36341, 36984, 36983,
+ 37549, 37521, 38275, 39854, 21069, 21892, 28472, 28982, 20840, 31109,
+ 32341, 33203, 31950, 22092, 22609, 23720, 25514, 26366, 26365, 26970,
+ 29401, 30095, 30094, 30990, 31062, 31199, 31895, 32032, 32068, 34311,
+ 35380, 38459, 36961, [12239, 40736], 20711, 21109, 21452, 21474, 20489,
+ 21930, 22766, 22863, 29245, 23435, 23652, 21277, 24803, 24819, 25436,
+ 25475, 25407, 25531, 25805, 26089, 26361, 24035, 27085, 27133, 28437,
+ 29157, 20105, 30185, 30456, 31379, 31967, 32207, 32156, 32865, 33609,
+ 33624, 33900, 33980, 34299, 35013, [12187, 36208], 36865, 36973, 37783,
+ 38684, 39442, 20687, 22679, 24974, 33235, 34101, 36104, 36896, 20419,
+ 20596, 21063, 21363, 24687, 25417, 26463, 28204, [12188, 36275], 36895,
+ 20439, 23646, 36042, 26063, 32154, 21330, 34966, 20854, 25539, 23384,
+ 23403, 23562, 25613, 26449, 36956, 20182, 22810, 22826, 27760, 35409,
+ 21822, 22549, 22949, 24816, 25171, 26561, 33333, 26965, 38464, 39364,
+ 39464, 20307, 22534, 23550, 32784, 23729, 24111, 24453, 24608, 24907,
+ 25140, 26367, 27888, 28382, 32974, 33151, 33492, 34955, 36024, 36864,
+ 36910, 38538, 40667, 39899, 20195, 21488, [12068, 22823], 31532, 37261,
+ 38988, 40441, 28381, 28711, 21331, 21828, 23429, 25176, 25246, 25299,
+ 27810, 28655, 29730, 35351, 37944, 28609, 35582, 33592, 20967, 34552,
+ 21482, 21481, 20294, 36948, [12192, 36784], 22890, 33073, 24061, 31466,
+ 36799, 26842, [12181, 35895], 29432, 40008, 27197, 35504, 20025, 21336,
+ 22022, 22374, 25285, 25506, 26086, 27470, 28129, 28251, 28845, 30701,
+ 31471, 31658, 32187, 32829, 32966, 34507, 35477, 37723, 22243, 22727,
+ 24382, 26029, 26262, 27264, 27573, 30007, 35527, 20516, 30693, 22320,
+ 24347, 24677, 26234, 27744, 30196, 31258, 32622, 33268, 34584, 36933,
+ 39347, 31689, 30044, [12149, 31481], 31569, 33988, 36880, 31209, 31378,
+ 33590, 23265, 30528, 20013, 20210, 23449, 24544, 25277, 26172, 26609,
+ 27880, [12173, 34411], 34935, 35387, 37198, 37619, 39376, 27159, 28710,
+ 29482, 33511, 33879, 36015, 19969, 20806, 20939, 21899, 23541, 24086,
+ 24115, 24193, 24340, 24373, 24427, 24500, 25074, 25361, 26274, 26397,
+ 28526, 29266, 30010, 30522, 32884, 33081, 33144, 34678, 35519, 35548,
+ 36229, 36339, 37530, [11985, 12199, 38263], 38914, [12227, 40165], 21189,
+ 25431, 30452, 26389, 27784, 29645, 36035, 37806, 38515, 27941, 22684,
+ 26894, 27084, 36861, 37786, 30171, 36890, 22618, 26626, 25524, 27131,
+ 20291, 28460, 26584, 36795, 34086, 32180, 37716, 26943, 28528, 22378,
+ 22775, 23340, 32044, [12118, 29226], 21514, 37347, 40372, 20141, 20302,
+ 20572, 20597, 21059, 35998, 21576, 22564, 23450, 24093, 24213, 24237,
+ 24311, 24351, 24716, 25269, 25402, 25552, 26799, 27712, 30855, 31118,
+ 31243, 32224, 33351, 35330, 35558, 36420, 36883, 37048, 37165, 37336,
+ [12237, 40718], 27877, 25688, 25826, 25973, 28404, 30340, 31515, 36969,
+ 37841, 28346, 21746, 24505, 25764, 36685, 36845, 37444, 20856, 22635,
+ 22825, 23637, 24215, 28155, 32399, 29980, 36028, 36578, 39003, 28857,
+ 20253, 27583, 28593, [12133, 30000], 38651, 20814, 21520, 22581, 22615,
+ 22956, 23648, 24466, [12099, 26007], 26460, 28193, 30331, 33759, 36077,
+ 36884, 37117, 37709, 30757, 30778, 21162, 24230, [12063, 22303], 22900,
+ 24594, 20498, 20826, 20908, 20941, [12049, 20992], 21776, 22612, 22616,
+ 22871, 23445, 23798, 23947, 24764, 25237, 25645, 26481, 26691, 26812,
+ 26847, 30423, 28120, 28271, 28059, 28783, 29128, 24403, 30168, 31095,
+ 31561, 31572, 31570, 31958, 32113, 21040, 33891, 34153, 34276, 35342,
+ 35588, [12182, 35910], 36367, 36867, 36879, 37913, 38518, 38957, 39472,
+ 38360, 20685, 21205, 21516, 22530, 23566, 24999, 25758, 27934, 30643,
+ 31461, 33012, 33796, 36947, 37509, 23776, 40199, 21311, 24471, 24499,
+ 28060, 29305, 30563, 31167, 31716, 27602, 29420, 35501, 26627, 27233,
+ 20984, 31361, 26932, 23626, 40182, 33515, 23493, [12195, 37193], 28702,
+ 22136, 23663, 24775, 25958, 27788, 35930, 36929, 38931, 21585, 26311,
+ 37389, 22856, 37027, 20869, 20045, 20970, 34201, 35598, 28760, 25466,
+ 37707, 26978, 39348, 32260, 30071, 21335, 26976, 36575, 38627, 27741,
+ [12038, 20108], 23612, 24336, 36841, 21250, 36049, [12161, 32905], 34425,
+ 24319, [12103, 26085], 20083, [12042, 20837], 22914, 23615, 38894, 20219,
+ 22922, 24525, 35469, 28641, 31152, 31074, 23527, 33905, 29483, 29105,
+ 24180, 24565, 25467, 25754, 29123, 31896, 20035, 24316, 20043, 22492,
+ 22178, 24745, 28611, 32013, 33021, 33075, 33215, 36786, 35223, 34468,
+ 24052, 25226, 25773, 35207, 26487, 27874, 27966, 29750, 30772, 23110,
+ 32629, 33453, [12218, 39340], 20467, 24259, 25309, 25490, 25943, 26479,
+ 30403, 29260, 32972, 32954, 36649, 37197, 20493, 22521, 23186, 26757,
+ 26995, 29028, 29437, 36023, 22770, 36064, 38506, 36889, 34687, 31204,
+ 30695, 33833, 20271, 21093, 21338, 25293, 26575, 27850, [12137, 30333],
+ 31636, 31893, 33334, 34180, 36843, 26333, 28448, 29190, 32283, 33707,
+ 39361, [12008, 40614], 20989, 31665, 30834, 31672, 32903, 31560, 27368,
+ 24161, 32908, 30033, 30048, [12043, 20843], 37474, 28300, 30330, 37271,
+ 39658, 20240, 32624, 25244, 31567, 38309, 40169, 22138, 22617, 34532,
+ 38588, 20276, 21028, 21322, 21453, 21467, 24070, 25644, 26001, 26495,
+ 27710, 27726, 29256, 29359, 29677, 30036, 32321, 33324, 34281, 36009,
+ 31684, [12196, 37318], 29033, 38930, 39151, 25405, 26217, 30058, 30436,
+ 30928, 34115, 34542, 21290, 21329, 21542, 22915, 24199, 24444, 24754,
+ 25161, 25209, 25259, 26000, [12112, 27604], 27852, 30130, [12138, 30382],
+ 30865, 31192, 32203, 32631, 32933, 34987, 35513, 36027, 36991,
+ [12206, 38750], [12214, 39131], 27147, 31800, 20633, 23614, 24494, 26503,
+ 27608, 29749, 30473, 32654, [12240, 40763], 26570, 31255, 21305,
+ [12134, 30091], 39661, 24422, 33181, 33777, 32920, 24380, 24517, 30050,
+ 31558, 36924, 26727, 23019, 23195, 32016, 30334, 35628, 20469, 24426,
+ 27161, 27703, 28418, 29922, 31080, 34920, 35413, 35961, 24287, 25551,
+ 30149, 31186, 33495, 37672, 37618, 33948, 34541, 39981, 21697, 24428,
+ 25996, 27996, 28693, 36007, 36051, 38971, 25935, 29942, 19981, 20184,
+ 22496, 22827, 23142, 23500, 20904, 24067, 24220, 24598, 25206, 25975,
+ 26023, 26222, 28014, [12119, 29238], 31526, 33104, 33178, 33433, 35676,
+ 36000, 36070, 36212, [12201, 38428], 38468, 20398, 25771, 27494, 33310,
+ 33889, 34154, 37096, 23553, 26963, [12213, 39080], 33914, 34135, 20239,
+ 21103, 24489, 24133, 26381, 31119, 33145, 35079, 35206, 28149, 24343,
+ 25173, 27832, 20175, 29289, 39826, 20998, 21563, 22132, 22707, 24996,
+ 25198, 28954, 22894, 31881, 31966, 32027, 38640, [12098, 25991], 32862,
+ 19993, 20341, 20853, 22592, 24163, 24179, 24330, 26564, 20006, 34109,
+ 38281, 38491, [12150, 31859], [12212, 38913], 20731, 22721, 30294, 30887,
+ 21029, 30629, 34065, 31622, 20559, 22793, [12122, 29255], 31687, 32232,
+ 36794, 36820, 36941, 20415, 21193, 23081, 24321, 38829, 20445, 33303,
+ 37610, 22275, 25429, 27497, 29995, 35036, 36628, 31298, 21215, 22675,
+ 24917, 25098, 26286, [11935, 27597], 31807, 33769, 20515, 20472, 21253,
+ 21574, 22577, 22857, 23453, 23792, 23791, 23849, 24214, 25265, 25447,
+ 25918, [12101, 26041], 26379, 27861, 27873, 28921, 30770, 32299, 32990,
+ 33459, 33804, 34028, 34562, 35090, 35370, 35914, 37030, 37586, 39165,
+ 40179, 40300, 20047, 20129, 20621, 21078, 22346, 22952, 24125,
+ {f: 2, c: 24536}, 25151, 26292, 26395, 26576, 26834, 20882, 32033, 32938,
+ 33192, 35584, 35980, 36031, 37502, 38450, 21536, 38956, 21271, 20693,
+ [12056, 21340], 22696, 25778, 26420, 29287, 30566, 31302, 37350, 21187,
+ 27809, 27526, 22528, 24140, 22868, 26412, 32763, 20961, 30406, 25705,
+ 30952, 39764, [12231, 40635], 22475, 22969, 26151, 26522, 27598, 21737,
+ 27097, 24149, 33180, 26517, 39850, 26622, 40018, 26717, 20134, 20451,
+ [12060, 21448], 25273, 26411, 27819, 36804, 20397, 32365, 40639, 19975,
+ 24930, 28288, 28459, 34067, 21619, 26410, 39749, [11922, 24051], 31637,
+ 23724, 23494, 34588, 28234, 34001, 31252, 33032, 22937, 31885,
+ [11936, 27665], 30496, 21209, 22818, 28961, 29279, [12141, 30683], 38695,
+ 40289, 26891, 23167, 23064, 20901, 21517, 21629, 26126, 30431, 36855,
+ 37528, 40180, 23018, 29277, 28357, 20813, 26825, 32191, 32236,
+ [12207, 38754], 40634, 25720, 27169, 33538, 22916, 23391, [12113, 27611],
+ 29467, 30450, 32178, 32791, 33945, 20786, [12106, 26408], 40665,
+ [12140, 30446], 26466, 21247, 39173, 23588, 25147, 31870, 36016, 21839,
+ 24758, 32011, [12200, 38272], 21249, 20063, 20918, 22812, 29242, 32822,
+ 37326, 24357, [12142, 30690], 21380, 24441, 32004, 34220, 35379, 36493,
+ 38742, 26611, 34222, 37971, 24841, 24840, 27833, 30290, 35565, 36664,
+ 21807, 20305, 20778, 21191, 21451, 23461, 24189, 24736, 24962, 25558,
+ 26377, 26586, 28263, 28044, {f: 2, c: 29494}, 30001, 31056, 35029, 35480,
+ 36938, [12194, 37009], 37109, 38596, 34701, [12067, 22805], 20104, 20313,
+ 19982, 35465, 36671, 38928, 20653, 24188, 22934, 23481, 24248, 25562,
+ 25594, 25793, 26332, 26954, 27096, 27915, 28342, 29076, [12132, 29992],
+ 31407, [12154, 32650], 32768, 33865, 33993, 35201, 35617, 36362, 36965,
+ 38525, 39178, 24958, 25233, 27442, 27779, 28020, 32716, 32764, 28096,
+ 32645, 34746, 35064, 26469, 33713, 38972, 38647, 27931, 32097, 33853,
+ 37226, 20081, 21365, 23888, 27396, 28651, 34253, 34349, 35239, 21033,
+ 21519, 23653, 26446, 26792, 29702, 29827, 30178, 35023, 35041,
+ [12197, 37324], 38626, 38520, 24459, 29575, [12148, 31435], 33870, 25504,
+ 30053, 21129, 27969, 28316, 29705, 30041, 30827, 31890, 38534,
+ [12015, 31452], [12243, 40845], 20406, 24942, 26053, 34396, 20102, 20142,
+ 20698, 20001, 20940, 23534, 26009, 26753, 28092, 29471, 30274, 30637,
+ 31260, 31975, 33391, 35538, 36988, 37327, 38517, 38936, [12050, 21147],
+ 32209, 20523, 21400, 26519, 28107, 29136, 29747, 33256, 36650, 38563,
+ 40023, 40607, 29792, 22593, 28057, 32047, 39006, 20196, 20278, 20363,
+ 20919, 21169, 23994, 24604, 29618, 31036, 33491, 37428, 38583, 38646,
+ 38666, 40599, 40802, 26278, 27508, 21015, 21155, 28872, 35010, 24265,
+ 24651, 24976, 28451, 29001, 31806, 32244, 32879, 34030, 36899, 37676,
+ 21570, 39791, 27347, 28809, 36034, 36335, 38706, 21172, 23105, 24266,
+ 24324, 26391, 27004, 27028, 28010, 28431, 29282, 29436, 31725,
+ [12156, 32769], 32894, 34635, 37070, 20845, 40595, 31108, 32907, 37682,
+ 35542, 20525, 21644, 35441, 27498, 36036, 33031, 24785, 26528, 40434,
+ 20121, 20120, 39952, 35435, 34241, 34152, 26880, 28286, 30871, 33109,
+ 24332, 19984, 19989, 20010, 20017, [12034, 20022], 20028, [12035, 20031],
+ 20034, 20054, 20056, 20098, [12037, 20101], 35947, 20106, 33298, 24333,
+ 20110, {f: 2, c: 20126}, [12039, 20128], 20130, 20144, 20147, 20150, 20174,
+ 20173, 20164, 20166, 20162, 20183, 20190, 20205, 20191, 20215, 20233,
+ 20314, 20272, 20315, 20317, 20311, 20295, 20342, 20360, 20367, 20376,
+ 20347, 20329, 20336, 20369, 20335, 20358, 20374, 20760, 20436, 20447,
+ 20430, 20440, 20443, 20433, 20442, 20432, {f: 2, c: 20452}, 20506, 20520,
+ 20500, 20522, 20517, 20485, 20252, 20470, 20513, 20521, 20524, 20478,
+ 20463, 20497, 20486, 20547, 20551, 26371, 20565, 20560, 20552, 20570,
+ 20566, 20588, 20600, 20608, 20634, 20613, 20660, 20658, {f: 2, c: 20681},
+ 20659, 20674, 20694, 20702, 20709, 20717, 20707, 20718, 20729, 20725,
+ 20745, {f: 2, c: 20737}, 20758, 20757, 20756, 20762, 20769, 20794, 20791,
+ 20796, 20795, [12041, 20799], [11918, 20800], 20818, 20812, 20820, 20834,
+ 31480, {f: 2, c: 20841}, 20846, 20864, [12044, 20866], 22232, 20876, 20873,
+ 20879, 20881, 20883, 20885, [12045, 20886], 20900, 20902, 20898,
+ {f: 2, c: 20905}, [12046, 20907], 20915, {f: 2, c: 20913}, 20912, 20917,
+ 20925, 20933, 20937, 20955, [12047, 20960], 34389, 20969, 20973, 20976,
+ [12048, 20981], 20990, 20996, 21003, 21012, 21006, 21031, 21034, 21038,
+ 21043, 21049, 21071, 21060, {f: 2, c: 21067}, 21086, 21076, 21098, 21108,
+ 21097, 21107, 21119, 21117, 21133, 21140, 21138, 21105, 21128, 21137,
+ 36776, 36775, {f: 2, c: 21164}, 21180, 21173, 21185, 21197, 21207, 21214,
+ 21219, 21222, 39149, 21216, 21235, 21237, 21240, [12051, 21241], 21254,
+ 21256, 30008, 21261, 21264, 21263, [12052, 21269], [12053, 21274], 21283,
+ 21295, 21297, 21299, [12054, 21304], 21312, 21318, 21317, 19991, 21321,
+ 21325, 20950, 21342, [12057, 21353], 21358, 22808, 21371, 21367,
+ [12058, 21378], 21398, 21408, 21414, 21413, 21422, 21424, [12059, 21430],
+ 21443, 31762, 38617, 21471, 26364, 29166, 21486, 21480, 21485, 21498,
+ 21505, 21565, 21568, {f: 2, c: 21548}, 21564, 21550, 21558, 21545, 21533,
+ 21582, 21647, 21621, 21646, 21599, 21617, 21623, 21616, 21650, 21627,
+ 21632, 21622, 21636, 21648, 21638, 21703, 21666, 21688, 21669, 21676,
+ 21700, 21704, 21672, 21675, 21698, 21668, 21694, 21692, 21720,
+ {f: 2, c: 21733}, 21775, 21780, 21757, 21742, 21741, 21754, 21730, 21817,
+ 21824, 21859, 21836, 21806, 21852, 21829, {f: 2, c: 21846}, 21816, 21811,
+ 21853, 21913, 21888, 21679, 21898, 21919, 21883, 21886, 21912, 21918,
+ 21934, 21884, 21891, 21929, 21895, 21928, 21978, 21957, 21983, 21956,
+ 21980, 21988, 21972, 22036, 22007, 22038, 22014, 22013, 22043, 22009,
+ 22094, 22096, 29151, 22068, 22070, 22066, 22072, 22123, 22116, 22063,
+ 22124, 22122, 22150, 22144, 22154, 22176, 22164, 22159, 22181, 22190,
+ 22198, 22196, 22210, 22204, 22209, 22211, 22208, 22216, 22222, 22225,
+ 22227, [12062, 22231], 22254, 22265, 22272, 22271, 22276, 22281, 22280,
+ 22283, 22285, 22291, 22296, 22294, 21959, 22300, 22310, {f: 2, c: 22327},
+ 22350, 22331, 22336, 22351, 22377, 22464, 22408, 22369, 22399, 22409,
+ 22419, 22432, 22451, 22436, 22442, 22448, 22467, 22470, 22484,
+ {f: 2, c: 22482}, 22538, 22486, 22499, 22539, 22553, 22557, 22642, 22561,
+ 22626, 22603, 22640, 27584, 22610, 22589, 22649, 22661, 22713, 22687,
+ 22699, 22714, 22750, 22715, 22712, 22702, 22725, 22739, 22737, 22743,
+ 22745, 22744, 22757, 22748, 22756, 22751, 22767, 22778, 22777,
+ {f: 3, c: 22779}, [12065, 22786], [12066, 22794], 22800, 22811, 26790,
+ 22821, {f: 2, c: 22828}, 22834, 22840, 22846, 31442, 22869, 22864, 22862,
+ 22874, 22872, 22882, 22880, 22887, 22892, 22889, 22904, 22913, 22941,
+ 20318, 20395, 22947, 22962, 22982, 23016, 23004, 22925, {f: 2, c: 23001},
+ 23077, 23071, 23057, 23068, 23049, 23066, 23104, 23148, 23113,
+ {f: 2, c: 23093}, 23138, 23146, 23194, 23228, 23230, 23243, 23234, 23229,
+ 23267, 23255, 23270, 23273, 23254, {f: 2, c: 23290}, 23308, 23307, 23318,
+ 23346, 23248, 23338, 23350, 23358, 23363, 23365, 23360, 23377, 23381,
+ {f: 2, c: 23386}, 23397, 23401, 23408, 23411, 23413, 23416, 25992, 23418,
+ [12071, 23424], 23427, 23462, 23480, 23491, 23495, 23497, 23508, 23504,
+ 23524, 23526, 23522, 23518, 23525, 23531, 23536, 23542, 23539, 23557,
+ {f: 2, c: 23559}, 23565, 23571, 23584, [11920, 12074, 23586], 23592,
+ [12075, 23608], 23609, 23617, 23622, 23630, 23635, 23632, 23631, 23409,
+ 23660, [12076, 23662], 20066, 23670, 23673, 23692, 23697, 23700, 22939,
+ 23723, 23739, 23734, 23740, 23735, 23749, 23742, 23751, 23769, 23785,
+ 23805, 23802, 23789, 23948, 23786, 23819, 23829, 23831, 23900, 23839,
+ 23835, 23825, 23828, 23842, 23834, 23833, 23832, 23884, 23890, 23886,
+ 23883, 23916, 23923, 23926, 23943, 23940, 23938, 23970, 23965, 23980,
+ 23982, 23997, 23952, 23991, 23996, 24009, 24013, 24019, 24018, 24022,
+ [12078, 24027], 24043, 24050, 24053, 24075, 24090, 24089, 24081, 24091,
+ {f: 2, c: 24118}, 24132, 24131, 24128, 24142, 24151, 24148, 24159, 24162,
+ 24164, 24135, {f: 2, c: 24181}, [11923, 12083, 24186], 40636,
+ [12084, 24191], 24224, {f: 2, c: 24257}, 24264, 24272, 24271, 24278, 24291,
+ 24285, {f: 2, c: 24282}, 24290, 24289, {f: 2, c: 24296}, 24300, 24305,
+ 24307, 24304, [12085, 24308], 24312, [12086, 24318], 24323, 24329, 24413,
+ 24412, [12087, 24331], 24337, 24342, 24361, 24365, 24376, 24385, 24392,
+ 24396, 24398, 24367, [11924, 24401], {f: 2, c: 24406}, 24409,
+ [12090, 24417], 24429, [12091, 24435], 24439, 24451, 24450, 24447, 24458,
+ 24456, 24465, 24455, 24478, 24473, 24472, 24480, 24488, 24493, 24508,
+ 24534, 24571, 24548, 24568, 24561, 24541, 24755, 24575, 24609, 24672,
+ 24601, 24592, 24617, 24590, 24625, 24603, 24597, 24619, 24614, 24591,
+ 24634, 24666, 24641, 24682, 24695, 24671, 24650, 24646, 24653, 24675,
+ 24643, 24676, 24642, 24684, 24683, 24665, 24705, 24717, 24807, 24707,
+ 24730, 24708, 24731, {f: 2, c: 24726}, 24722, 24743, 24715, 24801, 24760,
+ 24800, 24787, 24756, 24560, 24765, 24774, 24757, 24792, 24909, 24853,
+ 24838, {f: 2, c: 24822}, 24832, 24820, 24826, 24835, 24865, 24827, 24817,
+ {f: 2, c: 24845}, 24903, 24894, 24872, 24871, 24906, 24895, 24892, 24876,
+ 24884, 24893, 24898, 24900, 24947, 24951, {f: 3, c: 24920}, 24939, 24948,
+ 24943, 24933, 24945, 24927, 24925, 24915, 24949, 24985, 24982, 24967,
+ 25004, 24980, 24986, 24970, 24977, 25003, 25006, 25036, 25034, 25033,
+ 25079, 25032, 25027, 25030, 25018, 25035, 32633, 25037, 25062, 25059,
+ 25078, 25082, 25076, 25087, 25085, 25084, 25086, 25088, [12093, 25096],
+ 25097, 25101, 25100, 25108, 25115, 25118, 25121, 25130, 25134, 25136,
+ {f: 2, c: 25138}, 25153, 25166, 25182, 25187, 25179, 25184, 25192, 25212,
+ 25218, 25225, 25214, {f: 2, c: 25234}, 25238, 25300, 25219, 25236, 25303,
+ 25297, 25275, 25295, 25343, 25286, 25812, 25288, 25308, 25292, 25290,
+ 25282, 25287, 25243, 25289, 25356, 25326, 25329, 25383, 25346, 25352,
+ 25327, 25333, 25424, 25406, 25421, 25628, 25423, 25494, 25486, 25472,
+ 25515, 25462, 25507, 25487, 25481, 25503, 25525, 25451, 25449, 25534,
+ 25577, 25536, 25542, 25571, 25545, 25554, 25590, 25540, 25622, 25652,
+ 25606, 25619, 25638, 25654, 25885, 25623, 25640, 25615, 25703, 25711,
+ 25718, 25678, 25898, 25749, 25747, 25765, 25769, 25736, 25788, 25818,
+ 25810, 25797, 25799, 25787, 25816, 25794, 25841, 25831, 33289,
+ {f: 2, c: 25824}, 25260, 25827, 25839, 25900, 25846, 25844, 25842, 25850,
+ 25856, 25853, 25880, 25884, 25861, 25892, 25891, 25899, [12097, 25908],
+ [11929, 25909], 25911, 25910, 25912, 30027, 25928, 25942, 25941, 25933,
+ 25944, 25950, 25949, 25970, 25976, {f: 2, c: 25986}, 35722, 26011, 26015,
+ 26027, 26039, 26051, 26054, 26049, 26052, 26060, 26066, 26075, 26073,
+ [12102, 26080], [11931, 26081], 26097, 26482, 26122, 26115, 26107, 26483,
+ {f: 2, c: 26165}, 26164, 26140, 26191, 26180, 26185, 26177, 26206, 26205,
+ 26212, {f: 2, c: 26215}, 26207, 26210, 26224, 26243, 26248, 26254, 26249,
+ 26244, 26264, 26269, 26305, 26297, 26313, 26302, 26300, 26308, 26296,
+ 26326, 26330, 26336, 26175, 26342, 26345, [12104, 26352], 26357, 26359,
+ 26383, 26390, 26398, {f: 2, c: 26406}, 38712, 26414, 26431, 26422, 26433,
+ 26424, 26423, 26438, 26462, 26464, 26457, {f: 2, c: 26467}, 26505, 26480,
+ 26537, 26492, 26474, 26508, 26507, 26534, 26529, 26501, 26551, 26607,
+ 26548, 26604, 26547, 26601, 26552, 26596, 26590, 26589, 26594, 26606,
+ 26553, 26574, 26566, 26599, 27292, 26654, 26694, 26665, 26688, 26701,
+ 26674, 26702, 26803, 26667, 26713, 26723, 26743, 26751, 26783, 26767,
+ 26797, 26772, 26781, 26779, 26755, 27310, 26809, 26740, 26805, 26784,
+ 26810, 26895, 26765, 26750, 26881, 26826, 26888, 26840, 26914, 26918,
+ 26849, 26892, 26829, 26836, 26855, 26837, 26934, 26898, 26884, 26839,
+ 26851, 26917, 26873, 26848, 26863, 26920, 26922, 26906, 26915, 26913,
+ 26822, 27001, 26999, 26972, 27000, 26987, 26964, 27006, 26990, 26937,
+ 26996, 26941, 26969, 26928, 26977, 26974, 26973, 27009, 26986, 27058,
+ 27054, 27088, 27071, 27073, 27091, 27070, 27086, 23528, 27082, 27101,
+ 27067, 27075, 27047, 27182, 27025, 27040, 27036, 27029, 27060, 27102,
+ 27112, 27138, 27163, 27135, 27402, 27129, 27122, 27111, 27141, 27057,
+ 27166, 27117, 27156, 27115, 27146, 27154, 27329, 27171, 27155, 27204,
+ 27148, 27250, 27190, 27256, 27207, 27234, 27225, 27238, 27208, 27192,
+ 27170, 27280, 27277, 27296, 27268, {f: 2, c: 27298}, 27287, 34327, 27323,
+ 27331, 27330, 27320, 27315, 27308, 27358, 27345, 27359, 27306, 27354,
+ 27370, 27387, 27397, 34326, 27386, 27410, 27414, 39729, 27423, 27448,
+ 27447, 30428, 27449, 39150, 27463, 27459, 27465, 27472, 27481, 27476,
+ 27483, 27487, 27489, 27512, [12109, 27513], {f: 2, c: 27519}, 27524, 27523,
+ 27533, 27544, 27541, 27550, 27556, {f: 2, c: 27562}, 27567, 27570, 27569,
+ [12110, 27571], 27575, 27580, 27590, [12111, 27595], 27603, 27615, 27628,
+ 27627, 27635, 27631, 40638, 27656, 27667, [12115, 27668], 27675, 27684,
+ 27683, 27742, 27733, 27746, 27754, 27778, 27789, 27802, 27777, 27803,
+ 27774, 27752, 27763, 27794, 27792, 27844, 27889, 27859, 27837, 27863,
+ 27845, 27869, 27822, 27825, 27838, 27834, 27867, 27887, 27865, 27882,
+ 27935, 34893, 27958, 27947, 27965, 27960, 27929, 27957, 27955, 27922,
+ 27916, 28003, 28051, 28004, 27994, 28025, 27993, 28046, 28053, 28644,
+ 28037, 28153, 28181, 28170, 28085, 28103, 28134, 28088, 28102, 28140,
+ 28126, 28108, 28136, 28114, 28101, 28154, 28121, 28132, 28117, 28138,
+ 28142, 28205, 28270, 28206, 28185, 28274, 28255, 28222, 28195, 28267,
+ 28203, 28278, 28237, 28191, 28227, 28218, 28238, 28196, 28415, 28189,
+ 28216, 28290, 28330, 28312, 28361, 28343, 28371, 28349, 28335, 28356,
+ 28338, {f: 2, c: 28372}, 28303, 28325, 28354, 28319, 28481, 28433, 28748,
+ 28396, 28408, 28414, 28479, 28402, 28465, 28399, 28466, 28364, 28478,
+ 28435, 28407, 28550, 28538, 28536, 28545, 28544, 28527, 28507, 28659,
+ 28525, 28546, 28540, 28504, 28558, 28561, 28610, 28518, 28595, 28579,
+ 28577, 28580, 28601, 28614, 28586, 28639, 28629, 28652, 28628, 28632,
+ 28657, 28654, 28635, 28681, 28683, 28666, 28689, 28673, 28687, 28670,
+ 28699, 28698, 28532, 28701, 28696, 28703, 28720, 28734, 28722, 28753,
+ 28771, 28825, 28818, 28847, 28913, 28844, 28856, 28851, 28846, 28895,
+ 28875, 28893, 28889, 28937, 28925, 28956, 28953, 29029, 29013, 29064,
+ 29030, 29026, 29004, 29014, 29036, 29071, 29179, 29060, 29077, 29096,
+ 29100, 29143, 29113, 29118, 29138, 29129, 29140, 29134, 29152, 29164,
+ 29159, 29173, 29180, 29177, 29183, 29197, 29200, 29211, 29224, 29229,
+ 29228, 29232, 29234, [12120, 29243], 29244, [12121, 29247], 29248, 29254,
+ 29259, 29272, 29300, 29310, 29314, 29313, 29319, 29330, 29334, 29346,
+ 29351, 29369, 29362, 29379, 29382, 29380, 29390, 29394, 29410,
+ {f: 2, c: 29408}, 29433, 29431, 20495, 29463, 29450, 29468, 29462, 29469,
+ 29492, 29487, 29481, 29477, 29502, {f: 2, c: 29518}, 40664, 29527, 29546,
+ 29544, 29552, 29560, 29557, 29563, 29562, 29640, 29619, 29646, 29627,
+ 29632, 29669, 29678, 29662, 29858, 29701, 29807, 29733, 29688, 29746,
+ 29754, 29781, 29759, 29791, 29785, 29761, 29788, 29801, 29808, 29795,
+ 29802, 29814, 29822, 29835, 29854, 29863, 29898, 29903, 29908, 29681,
+ 29920, 29923, 29927, 29929, 29934, 29938, {f: 2, c: 29936}, 29944, 29943,
+ 29956, 29955, 29957, 29964, 29966, 29965, 29973, 29971, 29982, 29990,
+ 29996, 30012, 30020, 30029, 30026, 30025, 30043, 30022, 30042, 30057,
+ 30052, 30055, 30059, 30061, 30072, 30070, {f: 2, c: 30086}, 30068, 30090,
+ 30089, 30082, 30100, 30106, 30109, 30117, 30115, 30146, 30131, 30147,
+ 30133, 30141, 30136, 30140, 30129, 30157, 30154, 30162, 30169, 30179,
+ 30174, {f: 2, c: 30206}, 30204, 30209, 30192, 30202, {f: 2, c: 30194},
+ 30219, 30221, 30217, 30239, 30247, {f: 3, c: 30240}, 30244, 30260, 30256,
+ 30267, {f: 2, c: 30279}, 30278, 30300, 30296, {f: 2, c: 30305},
+ {f: 3, c: 30312}, 30311, 30316, 30320, 30322, [12136, 30326], 30328, 30332,
+ 30336, 30339, 30344, 30347, 30350, 30358, 30355, {f: 2, c: 30361}, 30384,
+ 30388, {f: 3, c: 30392}, 30402, 30413, 30422, 30418, 30430, 30433, 30437,
+ 30439, 30442, 34351, 30459, 30472, 30471, 30468, 30505, 30500, 30494,
+ {f: 2, c: 30501}, 30491, {f: 2, c: 30519}, 30535, 30554, 30568, 30571,
+ 30555, 30565, 30591, 30590, 30585, 30606, 30603, 30609, 30624, 30622,
+ 30640, 30646, 30649, 30655, {f: 2, c: 30652}, 30651, 30663, 30669, 30679,
+ 30682, 30684, 30691, 30702, 30716, 30732, 30738, 31014, 30752, 31018,
+ 30789, 30862, 30836, 30854, 30844, 30874, 30860, 30883, 30901, 30890,
+ 30895, 30929, 30918, 30923, 30932, 30910, 30908, 30917, 30922, 30956,
+ 30951, 30938, 30973, 30964, 30983, 30994, 30993, 31001, 31020, 31019,
+ 31040, 31072, 31063, 31071, 31066, 31061, 31059, 31098, 31103, 31114,
+ 31133, 31143, 40779, 31146, 31150, 31155, {f: 2, c: 31161}, 31177, 31189,
+ 31207, 31212, 31201, 31203, 31240, 31245, {f: 2, c: 31256}, 31264, 31263,
+ 31104, 31281, 31291, 31294, 31287, 31299, 31319, 31305, {f: 2, c: 31329},
+ 31337, 40861, 31344, 31353, 31357, 31368, 31383, 31381, 31384, 31382,
+ 31401, 31432, 31408, 31414, 31429, 31428, 31423, 36995, 31431, 31434,
+ 31437, 31439, 31445, 31443, {f: 2, c: 31449}, 31453, {f: 2, c: 31457},
+ 31462, 31469, 31472, 31490, 31503, 31498, 31494, 31539, {f: 2, c: 31512},
+ 31518, 31541, 31528, 31542, 31568, 31610, 31492, 31565, 31499, 31564,
+ 31557, 31605, 31589, 31604, 31591, {f: 2, c: 31600}, 31596, 31598, 31645,
+ 31640, 31647, 31629, 31644, 31642, 31627, 31634, 31631, 31581, 31641,
+ 31691, 31681, 31692, 31695, 31668, 31686, 31709, 31721, 31761, 31764,
+ 31718, 31717, 31840, 31744, 31751, 31763, 31731, 31735, 31767, 31757,
+ 31734, 31779, 31783, 31786, 31775, 31799, 31787, 31805, 31820, 31811,
+ 31828, 31823, 31808, 31824, 31832, 31839, 31844, 31830, 31845, 31852,
+ 31861, 31875, 31888, 31908, 31917, 31906, 31915, 31905, 31912, 31923,
+ 31922, 31921, 31918, 31929, 31933, 31936, 31941, 31938, 31960, 31954,
+ 31964, 31970, 39739, 31983, 31986, 31988, 31990, 31994, 32006, 32002,
+ 32028, 32021, 32010, 32069, 32075, 32046, 32050, 32063, 32053, 32070,
+ 32115, 32086, 32078, 32114, 32104, 32110, 32079, 32099, 32147, 32137,
+ 32091, 32143, 32125, 32155, 32186, 32174, 32163, 32181, 32199, 32189,
+ 32171, 32317, 32162, 32175, 32220, 32184, 32159, 32176, 32216, 32221,
+ 32228, 32222, 32251, 32242, 32225, 32261, 32266, 32291, 32289, 32274,
+ 32305, 32287, 32265, 32267, 32290, 32326, 32358, 32315, 32309, 32313,
+ 32323, 32311, 32306, 32314, 32359, 32349, 32342, 32350, {f: 2, c: 32345},
+ 32377, 32362, 32361, 32380, 32379, 32387, 32213, 32381, 36782, 32383,
+ {f: 2, c: 32392}, 32396, 32402, 32400, {f: 2, c: 32403}, 32406, 32398,
+ {f: 2, c: 32411}, 32568, 32570, 32581, {f: 3, c: 32588}, 32592,
+ [12153, 32593], 32597, 32596, 32600, {f: 2, c: 32607}, {f: 2, c: 32616},
+ 32615, 32632, 32642, 32646, 32643, 32648, 32647, 32652, 32660, 32670,
+ 32669, 32666, 32675, 32687, 32690, 32697, 32686, 32694, 32696, 35697,
+ {f: 2, c: 32709}, 32714, 32725, 32724, 32737, 32742, 32745, 32755, 32761,
+ 39132, 32774, 32772, 32779, [12158, 32786], {f: 2, c: 32792}, 32796, 32801,
+ 32808, 32831, 32827, 32842, 32838, 32850, 32856, 32858, 32863, 32866,
+ 32872, 32883, 32882, 32880, 32886, 32889, 32893, [12160, 32895], 32900,
+ 32902, 32901, 32923, 32915, 32922, 32941, 20880, 32940, 32987, 32997,
+ 32985, 32989, 32964, 32986, 32982, 33033, 33007, 33009, 33051, 33065,
+ 33059, 33071, 33099, 38539, 33094, 33086, 33107, 33105, 33020, 33137,
+ 33134, {f: 2, c: 33125}, 33140, 33155, 33160, 33162, 33152, 33154, 33184,
+ 33173, 33188, 33187, 33119, 33171, 33193, 33200, 33205, 33214, 33208,
+ 33213, 33216, 33218, 33210, 33225, 33229, 33233, 33241, 33240, 33224,
+ 33242, {f: 2, c: 33247}, 33255, {f: 2, c: 33274}, 33278, {f: 2, c: 33281},
+ 33285, 33287, 33290, 33293, 33296, 33302, 33321, 33323, 33336, 33331,
+ 33344, 33369, 33368, 33373, 33370, 33375, 33380, 33378, 33384,
+ {f: 2, c: 33386}, 33326, 33393, 33399, [12171, 33400], 33406, 33421, 33426,
+ 33451, 33439, 33467, 33452, 33505, 33507, 33503, 33490, 33524, 33523,
+ 33530, 33683, 33539, 33531, 33529, 33502, 33542, 33500, 33545, 33497,
+ 33589, 33588, 33558, 33586, 33585, 33600, 33593, 33616, 33605, 33583,
+ 33579, {f: 2, c: 33559}, 33669, 33690, 33706, 33695, 33698, 33686, 33571,
+ 33678, 33671, 33674, 33660, 33717, 33651, 33653, 33696, 33673, 33704,
+ 33780, 33811, 33771, 33742, 33789, 33795, 33752, 33803, 33729, 33783,
+ 33799, 33760, 33778, 33805, 33826, 33824, 33725, 33848, 34054, 33787,
+ 33901, 33834, 33852, 34138, 33924, 33911, 33899, 33965, 33902, 33922,
+ 33897, 33862, 33836, 33903, 33913, 33845, 33994, 33890, 33977, 33983,
+ 33951, 34009, 33997, 33979, 34010, 34000, 33985, 33990, 34006, 33953,
+ 34081, 34047, 34036, {f: 2, c: 34071}, 34092, 34079, 34069, 34068, 34044,
+ 34112, 34147, 34136, 34120, 34113, 34306, 34123, 34133, 34176, 34212,
+ 34184, 34193, 34186, 34216, 34157, 34196, 34203, 34282, 34183, 34204,
+ 34167, 34174, 34192, 34249, 34234, 34255, 34233, 34256, 34261, 34269,
+ 34277, 34268, 34297, 34314, 34323, 34315, 34302, 34298, 34310, 34338,
+ 34330, 34352, 34367, [12172, 34381], 20053, 34388, 34399, 34407, 34417,
+ 34451, 34467, {f: 2, c: 34473}, {f: 2, c: 34443}, 34486, 34479, 34500,
+ 34502, 34480, 34505, 34851, 34475, 34516, 34526, 34537, 34540, 34527,
+ 34523, 34543, 34578, 34566, 34568, 34560, 34563, 34555, 34577, 34569,
+ 34573, 34553, 34570, 34612, 34623, 34615, 34619, 34597, 34601, 34586,
+ 34656, 34655, 34680, 34636, 34638, 34676, 34647, 34664, 34670, 34649,
+ 34643, 34659, 34666, 34821, 34722, 34719, 34690, 34735, 34763, 34749,
+ 34752, 34768, 38614, 34731, 34756, 34739, 34759, 34758, 34747, 34799,
+ 34802, 34784, 34831, 34829, 34814, {f: 2, c: 34806}, 34830, 34770, 34833,
+ 34838, 34837, 34850, 34849, 34865, 34870, 34873, 34855, 34875, 34884,
+ 34882, 34898, 34905, 34910, 34914, 34923, 34945, 34942, 34974, 34933,
+ 34941, 34997, 34930, 34946, 34967, 34962, 34990, 34969, 34978, 34957,
+ 34980, 34992, 35007, 34993, {f: 2, c: 35011}, 35028, {f: 2, c: 35032},
+ 35037, 35065, 35074, 35068, 35060, 35048, 35058, 35076, 35084, 35082,
+ 35091, 35139, 35102, 35109, {f: 2, c: 35114}, 35137, 35140, 35131, 35126,
+ 35128, 35148, 35101, 35168, 35166, 35174, 35172, 35181, 35178, 35183,
+ 35188, 35191, [12177, 35198], 35203, 35208, 35210, 35219, 35224, 35233,
+ 35241, 35238, 35244, 35247, 35250, 35258, 35261, {f: 2, c: 35263}, 35290,
+ {f: 2, c: 35292}, 35303, 35316, 35320, 35331, 35350, 35344, 35340, 35355,
+ 35357, 35365, 35382, 35393, 35419, 35410, 35398, 35400, 35452, 35437,
+ 35436, 35426, 35461, 35458, 35460, 35496, 35489, 35473, {f: 2, c: 35493},
+ 35482, 35491, 35524, 35533, 35522, 35546, 35563, 35571, 35559, 35556,
+ 35569, 35604, 35552, 35554, 35575, 35550, 35547, 35596, 35591, 35610,
+ 35553, 35606, 35600, 35607, 35616, 35635, 38827, 35622, 35627, 35646,
+ 35624, 35649, 35660, 35663, 35662, 35657, 35670, 35675, 35674, 35691,
+ 35679, 35692, 35695, 35700, 35709, 35712, 35724, 35726, {f: 2, c: 35730},
+ 35734, {f: 2, c: 35737}, 35898, 35905, 35903, 35912, 35916, 35918, 35920,
+ [12183, 35925], 35938, 35948, [12184, 35960], 35962, 35970, 35977, 35973,
+ 35978, {f: 2, c: 35981}, 35988, 35964, 35992, 25117, 36013, 36010, 36029,
+ {f: 2, c: 36018}, 36014, 36022, 36040, 36033, 36068, 36067, 36058, 36093,
+ {f: 2, c: 36090}, {f: 2, c: 36100}, 36106, 36103, 36111, 36109, 36112,
+ 40782, 36115, 36045, 36116, 36118, 36199, 36205, 36209, 36211, 36225,
+ 36249, 36290, 36286, 36282, 36303, 36314, 36310, 36300, 36315, 36299,
+ {f: 2, c: 36330}, 36319, 36323, 36348, {f: 2, c: 36360}, 36351,
+ {f: 2, c: 36381}, 36368, 36383, 36418, 36405, 36400, 36404, 36426, 36423,
+ 36425, 36428, 36432, 36424, 36441, 36452, 36448, 36394, 36451, 36437,
+ 36470, 36466, 36476, 36481, 36487, 36485, 36484, 36491, 36490, 36499,
+ 36497, 36500, 36505, 36522, 36513, 36524, 36528, 36550, 36529, 36542,
+ 36549, 36552, 36555, 36571, 36579, 36604, 36603, 36587, 36606, 36618,
+ 36613, 36629, 36626, 36633, 36627, 36636, 36639, 36635, 36620, 36646,
+ 36659, 36667, 36665, 36677, 36674, 36670, 36684, 36681, 36678, 36686,
+ 36695, 36700, {f: 3, c: 36706}, 36764, 36767, 36771, 36781, 36783, 36791,
+ 36826, 36837, 36834, 36842, 36847, 36999, 36852, 36869, {f: 2, c: 36857},
+ 36881, 36885, 36897, 36877, 36894, 36886, 36875, 36903, 36918, 36917,
+ 36921, 36856, {f: 4, c: 36943}, 36878, 36937, 36926, 36950, 36952, 36958,
+ 36968, 36975, 36982, 38568, 36978, 36994, 36989, 36993, 36992, 37002,
+ 37001, 37007, 37032, 37039, 37041, 37045, 37090, 37092, 25160, 37083,
+ 37122, 37138, 37145, 37170, 37168, 37194, 37206, 37208, 37219, 37221,
+ 37225, 37235, 37234, 37259, 37257, 37250, 37282, 37291, 37295, 37290,
+ 37301, 37300, 37306, {f: 2, c: 37312}, 37321, 37323, 37328, 37334, 37343,
+ 37345, 37339, 37372, {f: 2, c: 37365}, 37406, 37375, 37396, 37420, 37397,
+ 37393, 37470, 37463, 37445, 37449, 37476, 37448, 37525, 37439, 37451,
+ 37456, 37532, 37526, 37523, 37531, 37466, 37583, 37561, 37559, 37609,
+ 37647, 37626, 37700, 37678, 37657, 37666, 37658, 37667, 37690, 37685,
+ 37691, 37724, 37728, 37756, 37742, 37718, 37808, {f: 2, c: 37804}, 37780,
+ 37817, {f: 2, c: 37846}, 37864, 37861, 37848, 37827, 37853, 37840, 37832,
+ 37860, 37914, 37908, 37907, 37891, 37895, 37904, 37942, 37931, 37941,
+ 37921, 37946, 37953, 37970, 37956, 37979, 37984, 37986, 37982, 37994,
+ 37417, 38000, 38005, 38007, 38013, 37978, 38012, 38014, 38017, 38015,
+ 38274, 38279, 38282, 38292, 38294, {f: 2, c: 38296}, 38304, 38312, 38311,
+ 38317, 38332, 38331, 38329, 38334, 38346, 28662, 38339, 38349, 38348,
+ 38357, 38356, 38358, 38364, 38369, 38373, 38370, 38433, 38440,
+ {f: 2, c: 38446}, 38466, 38476, 38479, 38475, 38519, 38492, 38494, 38493,
+ 38495, 38502, 38514, 38508, 38541, 38552, 38549, 38551, 38570, 38567,
+ {f: 2, c: 38577}, 38576, 38580, [12202, 38582], 38584, [12203, 38585],
+ 38606, 38603, 38601, 38605, 35149, 38620, 38669, 38613, 38649, 38660,
+ 38662, 38664, 38675, 38670, 38673, 38671, 38678, 38681, 38692, 38698,
+ 38704, 38713, {f: 2, c: 38717}, 38724, 38726, 38728, 38722, 38729, 38748,
+ 38752, 38756, 38758, 38760, 21202, 38763, 38769, 38777, 38789, 38780,
+ 38785, 38778, 38790, 38795, {f: 2, c: 38799}, 38812, 38824, 38822, 38819,
+ {f: 2, c: 38835}, 38851, 38854, 38856, [12209, 38859], 38876,
+ [12210, 38893], 40783, 38898, 31455, 38902, 38901, 38927, 38924, 38968,
+ 38948, 38945, 38967, 38973, 38982, 38991, 38987, 39019, {f: 3, c: 39023},
+ 39028, 39027, 39082, 39087, 39089, 39094, 39108, 39107, 39110, 39145,
+ 39147, 39171, 39177, 39186, 39188, 39192, 39201, {f: 2, c: 39197}, 39204,
+ 39200, 39212, 39214, {f: 2, c: 39229}, 39234, 39241, 39237, 39248, 39243,
+ {f: 2, c: 39249}, 39244, 39253, {f: 2, c: 39319}, 39333, {f: 2, c: 39341},
+ 39356, 39391, 39387, 39389, 39384, 39377, {f: 2, c: 39405},
+ {f: 2, c: 39409}, 39419, 39416, 39425, 39439, 39429, 39394, 39449, 39467,
+ 39479, 39493, 39490, 39488, 39491, 39486, 39509, 39501, 39515, 39511,
+ 39519, 39522, 39525, 39524, 39529, 39531, 39530, 39597, 39600, 39612,
+ 39616, 39631, 39633, {f: 2, c: 39635}, 39646, [12221, 39647],
+ {f: 2, c: 39650}, 39654, 39663, 39659, 39662, 39668, 39665, 39671, 39675,
+ 39686, 39704, 39706, 39711, {f: 2, c: 39714}, [12222, 39717],
+ {f: 4, c: 39719}, 39726, [12223, 39727], [12224, 39730], 39748, 39747,
+ 39759, {f: 2, c: 39757}, 39761, 39768, 39796, 39827, 39811, 39825,
+ {f: 2, c: 39830}, {f: 2, c: 39839}, 39848, 39860, 39872, 39882, 39865,
+ 39878, 39887, {f: 2, c: 39889}, 39907, 39906, 39908, 39892, 39905, 39994,
+ 39922, 39921, 39920, 39957, 39956, 39945, 39955, 39948, 39942, 39944,
+ 39954, 39946, 39940, 39982, 39963, 39973, 39972, 39969, 39984, 40007,
+ 39986, 40006, 39998, 40026, 40032, 40039, 40054, 40056, 40167, 40172,
+ 40176, 40201, 40200, 40171, 40195, 40198, 40234, 40230, 40367, 40227,
+ 40223, 40260, 40213, 40210, 40257, 40255, 40254, 40262, 40264,
+ {f: 2, c: 40285}, 40292, 40273, 40272, 40281, 40306, 40329, 40327, 40363,
+ 40303, 40314, 40346, 40356, 40361, 40370, 40388, 40385, 40379, 40376,
+ 40378, 40390, 40399, 40386, 40409, 40403, 40440, 40422, 40429, 40431,
+ 40445, {f: 2, c: 40474}, 40478, [12228, 40565], 40569, 40573, 40577, 40584,
+ {f: 2, c: 40587}, 40594, 40597, 40593, 40605, [12230, 40613], 40617, 40632,
+ 40618, 40621, 38753, 40652, {f: 3, c: 40654}, 40660, 40668, 40670, 40669,
+ 40672, 40677, 40680, 40687, 40692, {f: 2, c: 40694}, [12235, 40697],
+ {f: 2, c: 40699}, [12236, 40701], {f: 2, c: 40711}, 30391, 40725, 40737,
+ 40748, 40766, [12241, 40778], [12242, 40786], 40788, 40803,
+ {f: 3, c: 40799}, {f: 2, c: 40806}, 40812, 40810, 40823, 40818, 40822,
+ 40853, [12244, 40860], [12245, 40864], 22575, 27079, 36953, 29796, 0,
+ {f: 76, c: 9472}, {f: 20, c: 9312}, {f: 10, c: 8544}, 13129, 13076, 0,
+ 13133, 0, 13095, 0, 13110, 13137, 0, 13069, 13094, 0, 13099, 13130, 0,
+ {f: 3, c: 13212}, {f: 2, c: 13198}, 13252, 13217, 12317, 12319, 8470,
+ 13261, 0, {f: 5, c: 12964}, {f: 2, c: 12849}, 12857, 13182, 13181, 13180,
+ 8750, 8721, {s: 3}, 8735, 8895, 0, 0, 21854, {s: 7}, 167133, 0, 0, 28976,
+ 0, 40407, {s: 4}, 64054, 0, 0, 22169, 15694, {s: 4}, 20448, 0, 0, 36544, 0,
+ 194797, {s: 4}, 153716, 32363, 33606, 167670, {s: 3}, 40572, 0, 0, 26171,
+ 0, 40628, {s: 4}, 26629, {s: 5}, 23650, 0, 194780, 0, 32353, 0, 0, 64070,
+ {s: 5}, 34083, 37292, {s: 7}, 34796, {s: 8}, 25620, 0, 0, 39506, {s: 4},
+ 64074, 0, 194692, {s: 4}, 31774, {s: 6}, 64016, 25681, 0, 0, 63980, 22625,
+ 39002, 0, 194679, {s: 3}, 31153, 0, 28678, {s: 9}, 22218, {s: 3}, 21085, 0,
+ 28497, 37297, {s: 10}, 64106, {s: 6}, 38960, 0, 40629, {s: 9}, 33802,
+ 63939, {f: 2, c: 63890}, 63897, 0, 34847, 194575, 0, 194771, 194584,
+ {s: 7}, 137754, 23643, {s: 4}, 25890, 0, 0, 26618, 0, 26766, 0, 148432,
+ 194848, {s: 21}, 34110, {s: 15}, 30562, {s: 12}, 65075, 0,
+ {f: 2, c: 65073}, {s: 4}, 65072, {f: 2, c: 65077}, {f: 2, c: 65081}, 0, 0,
+ {f: 2, c: 65079}, {f: 2, c: 65087}, {f: 2, c: 65085}, {f: 4, c: 65089},
+ {f: 2, c: 65083}, {s: 41}, {f: 3, c: 12436}, 0, 0, 22099, {s: 41}, 65508,
+ 65287, 65282, 0, 9665, 9655, 8681, 8679, 8678, 8680, 9634, 9831, 9825,
+ 9828, 9826, 13216, 13218, {f: 2, c: 13220}, 13207, 8467, 13208, 13235,
+ 13234, 13233, 13232, {f: 3, c: 13189}, 13259, 13200, 13268, 13206, 13090,
+ 13078, 13080, 13077, 13059, 13091, 13143, 13122, 13113, 13115, 13056,
+ 13105, 13127, 13086, 13098, 0, 13183, 8481, 9742, 12342, 12320, {s: 3},
+ {f: 9, c: 9352}, {f: 20, c: 9332}, 12881, {f: 10, c: 8560},
+ {f: 10, c: 12882}, {f: 26, c: 9372}, 12867, 12861, 12863, 12852, 12856,
+ 12851, 12860, 12866, 12862, 12854, 12853, 12859, 12864, 12858, 12976,
+ 12973, 12969, 12975, 12948, 12970, 12952, 12971, 12946, 12945, 12947,
+ 12972, 12974, 12950, {s: 8}, {f: 3, c: 9131}, 0, {f: 3, c: 9127}, 0, 13260,
+ 13061, 0, 0, 13215, 13219, 13222, 0, 0, 12958, {f: 2, c: 13192}, 13256,
+ 8749, 0, 12848, {f: 6, c: 12842}, 12855, 12865, 10145, {s: 3}, 9673, 9824,
+ 9829, 9827, 9830, {f: 4, c: 9728}, 9758, {f: 2, c: 9756}, 9759, 12953,
+ 9450, {f: 2, c: 8554}, {s: 3}, {f: 8, c: 9601}, 9615, 9614, 9613, 9612,
+ 9611, 9610, 9609, {f: 2, c: 9620}, {f: 2, c: 9581}, 9584, 9583, 9552, 9566,
+ 9578, 9569, {f: 2, c: 9698}, 9701, 9700, 0, 0, {f: 3, c: 9585}, {s: 20},
+ 20956, 29081, {f: 9, c: 10102}, {s: 3}, {f: 2, c: 8570}, {s: 3}, 8575,
+ 8458, 8457, 0, 0, 12292, 8646, {f: 2, c: 8644}, 0, {f: 4, c: 12535}, 0, 0,
+ 12957, {s: 3}, 13179, {s: 3}, 13107, 13134, {s: 30}, 32394, 35100, 37704,
+ 37512, 34012, 20425, 28859, 26161, 26824, 37625, 26363, 24389,
+ [12033, 20008], 20193, 20220, 20224, 20227, 20281, 20310, 20370, 20362,
+ 20378, 20372, 20429, 20544, 20514, 20479, 20510, 20550, 20592, 20546,
+ 20628, 20724, 20696, 20810, 20836, 20893, 20926, 20972, 21013, 21148,
+ 21158, 21184, 21211, 21248, 0, 21284, 21362, 21395, 21426, 21469, 64014,
+ 21660, 21642, 21673, 21759, 21894, 22361, 22373, 22444, 22472, 22471,
+ 64015, 0, 22686, 22706, 22795, 22867, 22875, 22877, 22883, 22948, 22970,
+ 23382, 23488, 29999, 23512, 0, 23582, 23718, 23738, 23797, 23847, 23891, 0,
+ 23874, 23917, {f: 2, c: 23992}, 24016, 24353, 24372, 24423, 24503, 24542,
+ 24669, 24709, 24714, 24798, 24789, 24864, 24818, 24849, 24887, 24880,
+ 24984, 25107, 25254, 25589, 25696, 25757, 25806, 25934, 26112, 26133,
+ 26121, 26158, 0, 26148, 26213, 26199, 26201, 64018, 26227, 26265, 26272,
+ 26290, 26303, 26362, 26382, 0, 26470, 26555, 26706, 26560, 0, 26692, 26831,
+ 64019, 26984, 64020, 27032, 27106, 27184, 27243, 27206, 27251, 27262,
+ 27362, 27364, 27606, 27711, 27740, 27782, 27759, 27866, 27908, 28039,
+ 28015, 28054, 28076, 28111, 28152, 28146, 28156, 28217, 28252, 28199,
+ 28220, 28351, 28552, 28597, 28661, 28677, 28679, 28712, 28805, 28843,
+ 28943, 28932, 29020, {f: 2, c: 28998}, 0, 29121, 29182, 29361, 29374,
+ 29476, 64022, 29559, 29629, 29641, 29654, 29667, 29650, 29703, 29685,
+ 29734, 29738, 29737, 29742, 0, 29833, 29855, 29953, 30063, 30338, 30364,
+ 30366, 30363, 30374, 64023, 30534, 21167, 30753, 30798, 30820, 30842,
+ 31024, {f: 3, c: 64024}, 31124, 64027, 31131, 31441, 31463, 64028, 31467,
+ 31646, 64029, 32072, 0, 32183, 32160, 32214, 32338, 32583, 32673, 64030,
+ 33537, 33634, 33663, 33735, 33782, 33864, 33972, 34131, 34137, 34155,
+ 64031, 34224, {f: 2, c: 64032}, 34823, 35061, 35346, 35383, 35449, 35495,
+ 35518, 35551, 64034, 35574, 35667, 35711, 36080, 36084, 36114, 36214,
+ 64035, 36559, 0, 64037, 36967, 37086, 64038, 37141, 37159, 37338, 37335,
+ 37342, {f: 2, c: 37357}, {f: 2, c: 37348}, 37382, 37392, 37386, 37434,
+ 37440, 37436, 37454, 37465, 37457, 37433, 37479, 37543, {f: 2, c: 37495},
+ 37607, 37591, 37593, 37584, 64039, 37589, 37600, 37587, 37669, 37665,
+ 37627, 64040, 37662, 37631, 37661, 37634, 37744, 37719, 37796, 37830,
+ 37854, 37880, 37937, 37957, 37960, 38290, 0, 64041, 38557, 38575, 38707,
+ 38715, 38723, 38733, 38735, [12205, 38737], 0, 38999, 39013,
+ {f: 2, c: 64042}, 39207, 64044, 39326, 39502, 39641, 39644, 39797, 39794,
+ 39823, 39857, 39867, 39936, 40304, 40299, 64045, 40473, 40657, {s: 636},
+ 8364, 8486, 0, 0, 64256, {f: 2, c: 64259}, 257, 299, 363, 275, 333, 256,
+ 298, 362, 274, 332, {f: 4, c: 8539}, {f: 2, c: 8531}, 8304,
+ {f: 6, c: 8308}, {f: 10, c: 8320}, 461, 282, 0, 7868, 463, 0, 296, 465, 0,
+ 467, 366, 360, 462, 283, 0, 7869, 464, 0, 297, 466, 0, 468, 367, 361, 593,
+ 8049, 8048, 509, 0, 596, 0, 0, 601, 0, 0, 602, 0, 0, 603, 8051, 8050, 0,
+ 331, 629, 652, 0, 0, 658, 643, 720, {s: 682}, {f: 10, c: 12832}, {s: 108},
+ {f: 4, c: 12892}, {f: 15, c: 12977}, {s: 50}, {f: 26, c: 9424},
+ {f: 26, c: 9398}, {s: 48}, {f: 47, c: 13008}, 0, {f: 10, c: 12928}, 12944,
+ {f: 6, c: 12938}, 0, 12959, {s: 6}, {f: 2, c: 12960}, 12955, 12954, 12963,
+ 12962, 12951, 0, 12956, 12949, {s: 6}, 9676, {s: 11}, 10111,
+ {f: 10, c: 9451}, {s: 510}, 8414, {s: 815}, 13274, {s: 3}, 8448, 13250, 0,
+ 0, 8453, 0, 13169, 0, 0, 13197, 13211, {s: 3}, {f: 2, c: 13271}, {s: 3},
+ {f: 2, c: 13057}, 13060, 13062, 0, 13064, 0, 13063, 13066, 0, 13065, 0,
+ 13067, 0, 13068, {f: 6, c: 13070}, 0, 13079, 0, 13081, 0, {f: 4, c: 13082},
+ {f: 3, c: 13087}, 13092, 0, 13093, 0, 0, {f: 2, c: 13096}, 0, 13101, 0, 0,
+ {f: 3, c: 13102}, 13106, 0, 0, {f: 2, c: 13108}, 13116, {s: 3}, 13111, 0,
+ 13112, 13114, 13117, 13121, {f: 3, c: 13118}, {f: 4, c: 13123}, 13128,
+ {f: 2, c: 13131}, {f: 2, c: 13135}, 0, 0, 13138, 13140, 0, 0, 13139,
+ {f: 2, c: 13141}, {s: 132}, 8501, 976, 8714, 8463, 0, 981, 987, 977, 0,
+ {f: 2, c: 9832}, 9836, {s: 5}, 12347, 0, {f: 3, c: 12339}, 8252, 8265,
+ {s: 5}, 8723, 0, 8771, {f: 2, c: 8818}, {s: 6}, {f: 2, c: 12312},
+ {f: 2, c: 65375}, {s: 10}, 9115, {f: 2, c: 9117}, 9120, {s: 4}, 9121,
+ {f: 2, c: 9123}, 9126, {s: 12}, [9116, 9119, 9122, 9125, 9130], {s: 8},
+ 9986, 0, 0, 12349, 0, 12447, 0, 0, 8709, 8864, 8854, 8856, 8853, 8855,
+ {s: 4}, 9664, 9654, {s: 4}, 8656, 8596, {f: 2, c: 8600}, {f: 2, c: 8598},
+ 8652, 8651, {s: 10}, 12336, 8967, {s: 8}, 10048, 10047, {s: 7}, 9643, 0,
+ 9642, 0, 10010, {s: 12}, 9702, {s: 4}, 10070, {s: 379}, {f: 2, c: 65093},
+ {s: 679}, 64103, 64098, 32227, [12232, 40643], 28331, 64082, 64061, 64069,
+ 64062, 27114, 28212, 64096, 64071, 64056, 64066, 64078, 34395, 64105,
+ 64052, 64099, 25581, 25802, 30799, 64084, 63856, 64077, 64097, 64072,
+ 64076, {f: 2, c: 64091}, 64081, 64067, 64090, 28041, 29376, 0, 194885,
+ 64086, 64080, 64049, 64059, 24034, 64063, 64101, 21373, 64055, 64095,
+ 24501, 64064, 0, 64083, 0, 64085, 64104, 64068, 64089, 26202, 64053, 64075,
+ 64100, 64065, 64048, 0, 64057, 64051, 27493, 64058, 27599, 64050, 25150,
+ 64079, 63773, 63964, 63798, 28122, 63952, 26310, 27511, 64087, 37706, 0,
+ 37636, {s: 120}, 133390, {s: 120}, 35999, 11991, [11965, 158033], {s: 5},
+ 37555, 38321, 0, 0, 194812, {s: 13}, 194965, {s: 8}, 194794, 0, 26478,
+ 11974, 0, 194594, {s: 13}, 13314, 0, 0, 26083, {s: 4}, 134071, {s: 10},
+ 171339, 0, 194611, 24378, {s: 8}, 11945, 0, 20465, {s: 7}, 63753, {s: 7},
+ 11964, 0, 0, 194732, 26435, {s: 3}, 133732, 35329, 25142, 0, 0, 21555,
+ 23067, {s: 3}, 25221, 0, 0, 194819, {s: 6}, 21567, {s: 9}, 27506, {s: 4},
+ 29986, 19256, 0, 0, 24063, {s: 6}, 194827, 29626, 134047, {s: 3}, 194600,
+ 0, 194849, {s: 5}, 194623, {s: 16}, 194675, {f: 2, c: 11916}, 23577,
+ {s: 3}, 131083, 23426, 194642, {s: 5}, 11997, [11999, 39136],
+ [11998, 169599], 14221, 0, [11927, 14586], 0, 194887, 0, [11909, 20155],
+ 131490, {s: 7}, 13599, 0, 194738, 0, 0, [11971, 35200], {s: 4}, 31237,
+ {s: 4}, 35498, 0, 32085, 0, 28568, {s: 7}, 25591, 30246, {s: 4},
+ [11978, 163767], {s: 5}, 146686, {s: 5}, 13351, 0, 0, 33067, 0, 0, 194842,
+ {s: 5}, 11950, {s: 5}, 194714, {s: 3}, 194831, {s: 19}, 22305, 135741,
+ 194586, 0, 64003, {s: 7}, 21534, 15240, 20839, {s: 4}, 63839, {s: 9},
+ 20023, {s: 13}, [11946, 150804], 24421, 23020, 194658, 0, 24217, {s: 46},
+ 13416, {s: 8}, 21200, {s: 9}, 26625, 0, 195024, 195039, {s: 5}, 153215, 0,
+ 0, 11959, {s: 4}, 36534, 63775, {s: 3}, 63875, {s: 5}, 31867, 63906, 0,
+ 63898, 0, [11961, 32770], 157360, {s: 4}, [11911, 132648], 0, 0, 131210,
+ 194604, [11915, 13630], {s: 4}, 21589, 0, 22841, 0, 0, 23414, 194669,
+ 23572, 14306, 23782, 0, 20040, 0, 0, 194742, {s: 4}, 158105, 25371, 0, 0,
+ 26211, 0, 194779, 0, 0, 27126, 27014, {s: 3}, 27596, 0, 28183, 0, 0, 27818,
+ {s: 3}, [11942, 20012], 0, 0, 29935, 30069, 30188, 30286, 16305, 30570,
+ 30633, {s: 6}, 31571, 0, 0, 16996, {s: 3}, 194924, 0, 0, 32328, {s: 5},
+ 11955, {s: 4}, 33089, 17491, 0, [11966, 33401], [11967, 64094],
+ [11968, 64093], 0, 20857, 33626, {s: 3}, 17701, 0, 34292, 131248, {s: 4},
+ 34429, 0, 13358, 35014, {s: 6}, 18406, {s: 8}, 36808, {s: 19}, 166279, 0,
+ 0, 167447, 0, 0, 38969, {s: 6}, 39432, {s: 4}, 39903, {s: 10}, 148206,
+ {s: 5}, 21385, 0, 64017, 194785, 0, 146622, 132625, 0, {f: 2, c: 19972},
+ 19999, 20011, {f: 2, c: 20015}, {f: 2, c: 20032}, 20036, [11907, 20058],
+ 20095, 20109, 20118, 20153, 20176, 20192, 20221, 20223, 20235, 20245,
+ 20320, 20283, 20297, 20308, 20346, {f: 2, c: 20349}, 20375, 20414, 20431,
+ 20477, {f: 2, c: 20480}, 20496, 20507, 20519, 20526, 20567, 20582, 20586,
+ 20539, 20623, 20630, 20636, 20684, 20710, 20713, 20719, 20744, 20747,
+ 20752, 20763, 20766, 20831, 20897, 20924, 0, 20974, 20980, 20993,
+ [11913, 20994], 21011, 21065, 21089, 21094, 21139, 21192, 21232,
+ {f: 2, c: 21258}, 21310, 21324, 21323, 21345, 21356, 21419, 21466, 21478,
+ 21493, 21543, 21581, 21606, 21611, 21620, 21645, 21654, 21665, 21677,
+ 21689, 21695, 21702, 21709, 21774, 21803, 21813, 21834, 21856, 0, 21896,
+ 21902, 22024, {f: 2, c: 22030}, 22071, 22079, 22089, 22091, 22095, 22118,
+ 22121, 22127, {f: 2, c: 22129}, 22165, 22170, {f: 2, c: 22188}, 22193,
+ 22217, 22237, 22244, 22282, 22293, 22307, 22319, {f: 2, c: 22323}, 22348,
+ 22384, 22412, 22428, 22456, 22502, 22509, {f: 2, c: 22517}, 22527, 22537,
+ 22560, 22578, 22652, 22656, 22697, 22734, 22736, 22740, 22746, 22761,
+ 22796, 22820, 22831, 22881, 22893, 22986, 22994, 23005, {f: 2, c: 23011},
+ 23044, 23052, 23075, 23111, 23125, 23139, 23149, 23166, 23198, 23207,
+ 23212, 23219, 23264, 23296, 23321, 23333, 23341, 23361, 23420,
+ {f: 2, c: 23422}, 23434, [11919, 23587], 23595, 23600, 23651, 23657, 23676,
+ 23755, 23762, 23796, 23844, 23846, 23875, 23878, 23882, 23954, 23956,
+ 23961, 23968, 24024, 24032, 24056, 24064, 24082, {f: 2, c: 24084}, 24088,
+ 24110, 24152, {f: 2, c: 24171}, 24232, 24234, {f: 2, c: 24254}, 0, 24274,
+ 24327, 24334, {f: 2, c: 24348}, 24354, 24360, 24374, 24379, 24384,
+ [12089, 24400], 24408, 24420, 24457, 24476, 24487, 24484, 24495, 24504,
+ [11926, 24516], 24521, 24545, 24553, 24557, 24572, 24599, 24602, 24627,
+ 24673, 24703, 24734, 24740, 24752, 24779, 24795, 24824, {f: 3, c: 24850},
+ 24860, 24956, 24973, 24991, 25000, 25026, 25055, 25109, 25129, 25155,
+ 25158, [11928, 25164], 25169, 25174, 25284, 25340, 25354, 25357, 25368,
+ 25401, {f: 2, c: 25410}, 25445, 25460, 25469, 25476, 25479, 25488, 25502,
+ 25553, 25564, 25609, 25616, 25634, 25684, 25691, 25709, 25723,
+ {f: 2, c: 25790}, 25829, 25847, 25851, 25860, 25878, 25881, 25927, 25959,
+ 25985, 25989, 26050, 26096, 26098, 26156, 26188, {f: 2, c: 26203}, 26209,
+ 26219, 0, 26276, 26312, 26348, 26373, 26387, 26419, 26440, 26444, 26486,
+ 26491, 26544, 26546, 26617, 26583, 26585, 26608, 26668, {f: 2, c: 26672},
+ 26715, 26738, 26741, 26746, 26756, 26789, 26802, 26832, 26838, 26856,
+ 26861, {f: 2, c: 26864}, 26876, 26897, 26899, 26933, 26939, 26967, 26979,
+ 26994, {f: 2, c: 27007}, 27046, 27053, 27063, {f: 2, c: 27094}, 27137,
+ 27151, 27157, 27176, 27188, 27198, 27205, {f: 2, c: 27216}, 27222, 27227,
+ 27267, 27273, 27281, {f: 3, c: 27293}, 27356, 27367, 27372, 27422, 27428,
+ 27445, 27462, 27478, 27488, 27522, 27582, 27617, 27633, 27664, 27699,
+ [11937, 27701], 11938, 27737, 27766, 27771, 27781, 27797, 27804, 27856,
+ 27860, 27862, 27872, {f: 2, c: 27883}, 27886, 27914, 27918, 27921, 27950,
+ 27991, 27998, 28005, 28034, 28095, 28100, 28106, 28118, 28137, 28194,
+ 28241, 28359, 28362, 28366, 28413, 28442, 28458, 28463, 28467, 28506,
+ 28510, 28514, 28541, 28555, 28557, 28562, 28564, 28570, {f: 2, c: 28583},
+ 28598, 28634, 28638, 0, 28729, 28732, 0, 28756, {f: 2, c: 28765}, 28772,
+ [11939, 28780], 28798, 28801, 28821, 28855, {f: 2, c: 28883}, 28888, 28892,
+ 28935, 28960, 28977, 29002, 29010, 29024, 29049, 29074, 0, 29131, 29139,
+ 29142, 29184, 29213, 29227, 29240, 29249, 29267, {f: 2, c: 29269}, 29276,
+ 29325, [11944, 29357], 29364, 29383, 29435, {f: 2, c: 29444}, 29480, 29489,
+ 29507, 29548, 29564, 29571, {f: 2, c: 29573}, 29589, {f: 3, c: 29598},
+ 29606, 29611, 29621, 29623, 29628, 29647, 29657, 29673, 29684, 29693,
+ 29700, 29706, {f: 2, c: 29722}, 29732, 29736, 29740, {f: 3, c: 29743},
+ 29753, 29764, 29767, 29771, 29773, 29777, 29783, 29798, 29803, 29809,
+ 29824, {f: 3, c: 29829}, 29840, 29848, 29852, 29856, 29859, 29864, 29867,
+ 29877, 29887, 29896, 29914, 29918, 30030, 30073, 30081, 30096,
+ [12135, 30098], 30099, 30132, 30180, 30201, 30208, 30218, {f: 2, c: 30229},
+ 30233, 30238, 30253, 30261, 30275, 30283, 30309, 30317, 30319, 30321,
+ 30324, {f: 2, c: 30372}, 30405, 30412, 30444, 30460, 30516, 30518, 30556,
+ {f: 2, c: 30559}, 30578, 30589, 30613, 30634, 30694, 30704, 30708, 30726,
+ 30754, {f: 2, c: 30765}, 30768, 30773, 30824, 30878, 30920, 30924, 30926,
+ 30948, {f: 2, c: 30944}, 30962, 30967, 30971, 31025, 0, [11949, 31035],
+ 31037, 31045, {f: 2, c: 31067}, 31115, 31126, 31128, [12145, 31160], 31163,
+ 31178, 31194, 31235, 31241, 31249, 31262, 31277, 31289, 31301, 31308,
+ 31325, 0, 31341, 31352, 31392, 31395, 31411, {f: 2, c: 31419}, 31430,
+ 31495, 31508, 31527, 31537, 31559, 31566, 31584, 31593, 31597, 31602,
+ 31633, 31663, 31703, 31705, 31755, 31759, 31776, 31782, 31793, 31798,
+ 31825, 31833, 31847, 31854, 31856, 31932, 31935, {f: 2, c: 31944}, 31959,
+ 31961, 31965, 31979, {f: 3, c: 32007}, 32019, 32029, 32035, 32065, 32083,
+ 32089, 32093, 32122, 32134, {f: 2, c: 32139}, 32204, 32235, 32241, 32249,
+ 32264, 32273, 32277, 32288, 32327, 32354, 32366, 32371, 32397, 32401,
+ 32408, 32580, 32591, [11947, 11954, 32594], [11953, 32595], 32609, 32657,
+ 32703, 32718, 32735, 32741, 32748, {f: 2, c: 32750}, 32762, 32782, 32785,
+ 32788, 32804, 32806, 32826, 32828, 32864, 32881, 32885, 32926, 32934,
+ 32939, {f: 2, c: 32983}, 33046, 33048, 33082, 33098, 33100, 33153, 33156,
+ 33204, 33231, 33273, 33283, 33313, 33330, 33332, 33350, 33355, 33359,
+ 33422, 33454, 33463, 33470, 33478, 33534, 33603, 33617, 33621, 33670,
+ 33677, 33682, 33688, 33705, {f: 2, c: 33727}, 33770, 33807, 33809, 33866,
+ 33910, 33960, 33967, 33984, 33986, 34032, 34045, 34060, 34100, 34142,
+ 34191, 34231, 34254, 34221, 34322, 34345, 34386, 34403, 34412, 34415,
+ 34426, 34445, 34449, 34456, {f: 2, c: 34471}, 34554, 34557, 34571, 34579,
+ 34585, 34590, 34600, 34622, 34673, 34696, 34713, {f: 2, c: 34732}, 34741,
+ 34774, 34795, 34797, 34817, 0, 34822, 34827, 34836, 34844, 34902, 34911,
+ [11970, 34916], 34968, 34986, {f: 2, c: 35005}, 35018, 35026, 35035,
+ {f: 2, c: 35056}, 35078, {f: 3, c: 35096}, 35111, 35120, 35134, 35195,
+ 35284, 35286, 35301, 35313, 35335, 35343, 35349, 35362, 35406, 35455,
+ 35572, 35615, 35639, {f: 2, c: 35651}, 35668, 35740, 35742, 35911, 35924,
+ 35955, 36004, 36057, 36065, 36088, 36094, 36123, 36201, 36204, 36228,
+ 36237, 36245, 36262, 36294, 36302, 36324, 36332, 36384, 36427, 36460,
+ 36464, 36474, 36498, 36526, 36531, 36561, 36564, 36601, 36631, 36662,
+ 36774, [12193, 36789], [11981, 36790], 0, 36832, 36836, 36854, 36866,
+ 36908, 36932, 37000, 37013, 37017, 37019, 37026, 37044, 37079, 37085,
+ 37108, 37143, 37148, 37169, 37178, 37181, 37192, 37211, 37217, 37220,
+ 37262, 37278, 37288, {f: 2, c: 37293}, 37298, 37308, 37360, 37367, 37371,
+ 37383, 37416, 37427, 37432, 37443, 37447, 37455, 37472, 37570,
+ {f: 2, c: 37579}, 37599, 37645, 37653, 37663, 37671, 37703, 37714, 0,
+ 37738, 37741, 37787, 37818, 37801, 37825, 37834, 37858, 37882, 37885,
+ 37903, 37940, 37951, 37973, 37995, 38002, [11986, 38264], 38310, 38313, 0,
+ 38324, 38333, 38362, [11983, 11990, 38429], 38465, 38488, 38532, 38564,
+ 38569, 38610, 195060, 38622, 38633, 38641, 38658, 38665, 38746, 38755,
+ 38766, 38771, 38810, 38818, {f: 2, c: 38837}, 38873, 38878, 38900, 38922,
+ 38926, 38942, 38947, 38955, 38974, {f: 2, c: 38994}, 39001, 39020, 39096,
+ 39098, 39103, 39112, 39141, {f: 2, c: 39218}, 39232, 39245, 39260, 39263,
+ 39345, {f: 2, c: 39353}, 39369, 39426, 39446, 39460, 39463,
+ {f: 2, c: 39469}, 39478, 39480, 39498, 39510, {f: 2, c: 39605}, 39673,
+ 39683, 39712, {f: 2, c: 39731}, 39795, 39801, 39847, 39873, 39879, 39895,
+ 39911, 39915, 39927, 39930, 39933, 39947, 39975, 39978, 39990, 40001,
+ 40019, 40035, 40048, 40055, 40194, 40258, 40263, 40291, 40297, 40316,
+ 40318, 40333, 40369, 40387, 40391, 40406, 40415, 40427, 40436, 40469,
+ 40477, 40612, 40616, 40620, 40679, 40686, 40720, 40722, 40727, 40729,
+ 40751, 40759, 40761, 40769, 40773, 40791, 40808, 40817, 40821, 40848,
+ 40852, 40866, 0, 13317, 194564, 22048, 24267, 11925, 0, 144954, 0, 28665,
+ 28390, 29107, [11940, 64073], {s: 4}, [11980, 64102], 0, 23986, 0, 20435,
+ 20697, 20720, 20931, 22134, 27220, 27905, 28112, 28226, 28377, 29668,
+ 29729, 30060, 30801, 34805, 144382, 29608, 15091, 13531, 17420, 16010, 0,
+ 0, 19432, 0, 16090, 15138, 0, 17786, 16531, 0, 18021, 16643, 17043, 18094,
+ 13448, 140809, {f: 3, c: 63584}, 63610, 63615, {s: 23}, {f: 2, c: 8836},
+ {f: 2, c: 8842}, 8713, 0, {f: 2, c: 8965}, {s: 9}, {f: 2, c: 8741},
+ {s: 14}, 8802, 0, 8773, 8776, {f: 2, c: 8822}, {s: 4}, 8487, {s: 209},
+ {f: 2, c: 8922}, 8533, 8984, {f: 2, c: 7742}, {f: 2, c: 504}, 470, 472,
+ 474, 476, 260, 728, 317, 346, 350, 356, 377, 379, 261, 731, 318, 347, 711,
+ 351, 357, 378, 733, 380, 340, 258, 313, 262, 268, 280, 270, 323, 327, 336,
+ 344, 368, 354, 341, 259, 314, 263, 269, 281, 271, 273, 324, 328, 337, 345,
+ 369, 355, 729, 264, 284, 292, 308, 348, 364, 265, 285, 293, 309, 349, 365,
+ 625, 651, 638, 620, 622, 633, 648, 598, 627, 637, 642, 656, 635, 621, 607,
+ 626, 669, 654, 609, 624, 641, 295, 661, 660, 614, 664, 450, 595, 599, 644,
+ 608, 403, 616, 649, 600, 604, 606, 592, 623, 650, 612, 594, 653, 613, 674,
+ 673, 597, 657, 634, 615, 865, 712, 716, 721, 8255, 783, {f: 5, c: 741}, 0,
+ 0, 805, 812, 825, 796, {f: 2, c: 799}, 829, 809, 815, 734, 804, 816, 828,
+ 820, {f: 2, c: 797}, {f: 2, c: 792}, 810, {f: 2, c: 826}, 794, {s: 3},
+ {f: 2, c: 610}, 618, 628, 630, 632, 640, 655, 665, 668, 671, 688, 690, 695,
+ 704, {f: 2, c: 736}, {s: 6}, 8862, {s: 287}, 12348, 12543, 0,
+ {f: 2, c: 12310}, 9838, 9835, {f: 2, c: 10548}, 10687, 0, 12448, 0,
+ {f: 2, c: 10746}, {s: 13}, 962, {f: 10, c: 9461}, {f: 2, c: 9750}, 9649,
+ {f: 10, c: 12784}, 0, {f: 6, c: 12794}, {f: 15, c: 9150}, 0, 0, 10003, 0,
+ 9251, 9166, {f: 4, c: 9680}, {f: 2, c: 8263}, 0, 8273, 8258,
+ {f: 16, c: 12688}, {s: 13}, {f: 2, c: 9136}, {f: 12, c: 9842},
+ {f: 2, c: 12441}, 8413, {s: 450}, 20296, 20319, 20330, 20332, 20494, 20504,
+ 20545, 20722, 20688, 20742, 20739, 20789, 20821, 20823, 13493, 20938,
+ 20962, 21079, 21196, 21206, 21243, 21276, 21347, 21405, 21522, 21631,
+ 21640, 21840, 21889, 21933, 21966, 22075, 22174, 22185, 22195, 22391,
+ 22396, 135963, 22479, 22500, 22628, 22665, 136302, 22738, 22752, 34369,
+ 22923, 22930, 22979, 23059, 23143, 23159, 23172, 23236, 137405, 23421,
+ 23443, 23570, 64060, 136884, 23674, 23695, 23711, 23715, 23722, 23760,
+ 138804, 23821, 23879, 23937, 23972, 23975, 24011, 24158, 24313, 24320,
+ 24322, 24355, 24381, 24404, 24445, 24589, 24596, 24600, 24629, 24647,
+ 24733, 24788, 24797, 24875, 25020, 25017, 25122, 25178, 25199, 25302,
+ 25468, 25573, 25721, 25796, 25808, 25897, 26013, 26170, 26146, 26155,
+ 26160, 26163, 26184, 143812, {f: 2, c: 26231}, 26253, 26299, 26331, 26344,
+ 26439, 26497, 26515, 26520, 26523, 26620, 26653, 26787, 26890, 26953,
+ 144836, 26946, 26980, 27045, 27087, 15286, 15299, 27113, 27125, 145215,
+ 27195, 145251, 27284, 27301, 15375, 27419, 27436, 27495, 27561, 27565,
+ 27607, 27647, 27653, 27764, 27800, 27899, 27846, 27953, 27961, 27967,
+ 27992, 28052, 28074, 28123, 28125, 28228, 28254, 28337, 28353, 28432,
+ 28505, 28513, 28542, 28556, 28576, 28604, 28615, 28618, 28656, 28750,
+ 28789, 28836, 28900, 28971, 28958, 28974, 29009, 29032, 29061, 29063,
+ 29114, 29124, 29205, 15935, 29339, 149489, 29479, 29520, 29542, 29602,
+ 29739, 29766, 29794, 29805, 29862, 29865, 29897, 29951, 29975, 16242,
+ 30158, 30210, 30216, 30308, 30337, 30365, 30378, 30390, 30414, 30420,
+ 30438, 30449, 30474, 30489, {f: 2, c: 30541}, 30586, 30592, 30612, 30688,
+ 152718, 30787, 30830, 30896, 152846, 30893, 30976, 31004, 31022, 31028,
+ 31046, 31097, 31176, 153457, 31188, 31198, 31211, 31213, 31365, 154052,
+ 31438, 31485, 31506, 31533, 31547, 31599, 31745, 31795, 155041, 31853,
+ 31865, 31887, 31892, 31904, 31957, 32049, 32092, 32131, 32166, 32194,
+ 32296, 32663, 32731, 32821, 32823, 32970, 32992, 33011, 33120,
+ {f: 2, c: 33127}, 33133, 33211, 33226, 33239, 17499, 33376, 33396, 158463,
+ 33441, {f: 2, c: 33443}, 33449, 33471, 33493, 33533, 33536, 33570, 33581,
+ 33594, 33607, 33661, 33703, 33743, 33745, 33761, 33793, 33798, 33887,
+ 33904, 33907, 33925, 33950, 33978, 159296, 34098, 34078, 34095, 34148,
+ 34170, 34188, 34210, 34251, 34285, 34303, {f: 2, c: 34308}, 34320, 159988,
+ 34328, 34360, 34391, 34402, 17821, 34421, 34488, 34556, 34695, 17898,
+ 34826, 34832, 35022, 161412, 35122, 35129, 35136, 35220, 35318, 35399,
+ 35421, 35425, 35445, 35536, 35654, 35673, 35689, 35741, 35913, 35944,
+ 36271, 36305, 36311, 36387, 36413, 36475, 164471, 18500, 36602, 36638,
+ 36653, 36692, 164813, 36840, 36846, 36872, 36909, 37015, 37043, 37054,
+ {f: 2, c: 37060}, 37063, 37103, 37140, 37142, {f: 2, c: 37154}, 37167,
+ 37172, 37251, 37361, 37705, {f: 2, c: 37732}, 37795, 37855, 37892, 37939,
+ 37962, 37987, 38001, 38286, 38303, 38316, 38326, 38347, 38352, 38355,
+ 18864, 38366, 38565, 38639, 38734, 38805, 38830, 38842, 38849, 38857,
+ 38875, 38998, 39143, 39256, 39427, 39617, 39619, 39630, 39638, 39682,
+ 39688, 19479, 39725, 39774, 39782, 39812, 39818, 39838, 39886, 39909,
+ 39928, 39971, {f: 2, c: 40015}, 40037, {f: 2, c: 40221}, 40259, 40274,
+ 40330, 40342, 40384, 40364, 40380, 172432, 40423, 40455, 40606, 40623,
+ 40855, 131209, 19970, 19983, 19986, 20009, 20014, 20039, 131234, 20049,
+ 13318, 131236, 20073, 20125, 13356, 20156, 20163, 20168, 20203, 20186,
+ 20209, 20213, 20246, 20324, 20279, 20286, 20312, 131603, {f: 2, c: 20343},
+ 20354, 20357, 20454, 20402, 20421, 20427, 20434, 13418, 20466, 20499,
+ 20508, 20558, 20563, 20579, 20643, 20616, {f: 2, c: 20626}, 20629, 20650,
+ 131883, 20657, {f: 2, c: 20666}, 20676, 20679, 20723, 131969, 20686,
+ 131953, 20692, 20705, 13458, 132089, 20759, 132170, 20832, 132361, 20851,
+ 20867, 20875, 13500, 20888, 20899, 20909, 13511, 132566, 20979, 21010,
+ 21014, 132943, 21077, 21084, 21100, 21111, 21124, 21122, 133127, 21144,
+ 133178, 21156, {f: 2, c: 21178}, 21194, 21201, 133305, 21239, 21301, 21314,
+ 133500, 133533, 21351, 21370, 21412, 21428, 133843, 21431, 21440, 133917,
+ {f: 2, c: 13661}, 21461, 13667, 21492, 21540, 21544, 13678, 21571, 21602,
+ 21612, 21653, 21664, 21670, 21678, 21687, 21690, 21699, 134469, 21740,
+ 21743, 21745, 21747, {f: 2, c: 21760}, 21769, 21820, 21825, 13734, 21831,
+ 13736, 21860, 134625, 21885, 21890, 21905, 13765, 21970, 134805, 134765,
+ 21951, 21961, 21964, 21969, 21981, 13786, 21986, 134756, 21993, 22056,
+ 135007, 22023, 22032, 22064, 13812, 22077, 22080, 22087, 22110, 22112,
+ 22125, 13829, 22152, 22156, 22173, 22184, 22194, 22213, 22221, 22239,
+ 22248, {f: 2, c: 22262}, 135681, 135765, 22313, 135803, {f: 2, c: 22341},
+ 22349, 135796, 22376, 22383, {f: 3, c: 22387}, 22395, 135908, 135895,
+ 22426, {f: 2, c: 22429}, 22440, 22487, 135933, 22476, 135990, 136004,
+ 22494, 22512, 13898, 22520, 22523, 22525, 22532, 22558, 22567, 22585,
+ 136132, 22601, 22604, 22631, {f: 2, c: 22666}, 22669, {f: 2, c: 22671},
+ 22676, 22685, 22698, 22705, 136301, 22723, 22733, 22754, {f: 2, c: 22771},
+ {f: 2, c: 22789}, 22797, 22804, 136663, 13969, 22845, 13977, 22854, 13974,
+ 158761, 22879, 136775, {f: 2, c: 22901}, 22908, 22943, 22958, 22972, 22984,
+ 22989, 23006, 23015, 23022, 136966, 137026, 14031, 23053, 23063, 23079,
+ 23085, 23141, 23162, 23179, 23196, {f: 2, c: 23199}, 23202, 23217, 23221,
+ 23226, 23231, 23258, 23260, 23269, 23280, 23278, 23285, 23304, 23319,
+ 23348, 23372, 23378, 23400, 23407, 23425, 23428, 137667, 23446, 23468,
+ {f: 2, c: 14177}, 23502, 23510, 14188, 14187, 23537, 23549, 14197, 23555,
+ 23593, 138326, 23647, {f: 2, c: 23655}, 23664, 138541, 138565, 138616,
+ 138594, 23688, 23690, 14273, 138657, 138652, 23712, 23714, 23719, 138642,
+ 23725, 23733, 138679, 23753, 138720, 138803, 23814, 23824, 23851, 23837,
+ 23840, 23857, 23865, 14312, 23905, 23914, 14324, 23920, 139038, 14333,
+ 23944, 14336, 23959, 23984, 23988, 139126, 24017, 24023, 139258, 24036,
+ 24041, 14383, 14390, 14400, 24095, 24126, 24137, 14428, 24150, 14433,
+ {f: 2, c: 24173}, 139643, 24229, 24236, 24249, 24262, 24281, 140062, 24317,
+ 24328, 140205, 24350, 24391, 24419, 24434, 24446, 24463, 24482, 24519,
+ 24523, {f: 3, c: 24530}, 24546, {f: 2, c: 24558}, 24563, 14615, 24610,
+ 24612, 14618, 24652, 24725, 24744, 141043, 24753, 24766, 24776, 24793,
+ 24814, 24821, 24848, 24857, 24862, 24890, 14703, 24897, 24902, 24928,
+ 141403, {f: 2, c: 24978}, 24983, 24997, 25005, 141483, 25045, 25053, 25077,
+ 141711, 25123, 25170, 25185, 25188, 25211, 25197, 25203, 25241, 25301,
+ 142008, 25341, 25347, 25360, {f: 2, c: 142159}, 25394, 25397,
+ {f: 2, c: 25403}, 25409, 25412, 25422, 142150, 25433, 142365, 142246,
+ 25452, 25497, 142372, 25492, 25533, {f: 2, c: 25556}, 25568,
+ {f: 2, c: 25579}, 25586, 25630, 25637, 25641, 25647, 25690, 25693, 25715,
+ 25725, 25735, 25745, 25759, {f: 2, c: 25803}, 25813, 25815, 142817, 25828,
+ 25855, 14958, 25871, 25876, 14963, 25886, 25906, 25924, 25940, 25963,
+ 25978, 25988, 25994, 26034, 26037, 26040, 26047, 26057, 26068, 15062,
+ 26105, 26108, 26116, 26120, 26145, 26154, 26181, 26193, 26190, 15082,
+ 143811, 143861, 143798, 26218, {f: 2, c: 26220}, 26235, 26240, 26256,
+ 26258, 15118, 26285, 26289, 26293, 15130, 15132, 15063, 26369, 26386,
+ 144242, 26393, 144339, 144338, 26445, 26452, 26461, 144336, 144356, 144341,
+ 26484, 144346, 26514, 144351, 33635, 26640, 26563, 26568, 26578, 26587,
+ 26615, 144458, 144465, 144459, 26648, 26655, 26669, 144485, 26675, 26683,
+ 26686, 26693, 26697, 26700, 26709, 26711, 15223, 26731, 26734, 26748,
+ 26754, 26768, 26774, 15213, {f: 3, c: 26776}, 26780, {f: 2, c: 26794},
+ 26804, 26811, 26875, 144612, 144730, 26819, 26821, 26828, 26841,
+ {f: 2, c: 26852}, 26860, 26871, 26883, 26887, 15239, 144788, 15245, 26950,
+ 26985, 26988, 27002, 27026, 15268, 27030, 27056, 27066, 27068, 27072,
+ 27089, 144953, 144967, 144952, 27107, {f: 2, c: 27118}, 27123, 15309,
+ 27124, 27134, 27153, 27162, 27165, 145180, {f: 2, c: 27186}, 27199, 27209,
+ 27258, 27214, 27218, 27236, 145164, 27275, 15344, 27297, 145252, 27307,
+ 27325, 27334, 27348, 27344, 27357, 145407, 145383, {f: 3, c: 27377}, 27389,
+ 145444, 27403, {f: 3, c: 27407}, 145469, 27415, 15398, 27439, 27466, 27480,
+ 27500, 27509, [11934, 27514], 27521, 27547, 27566, 146072, 27581,
+ {f: 3, c: 27591}, 27610, {f: 2, c: 27622}, 27630, 27650, 27658, 27662,
+ 27702, 146559, 27725, 27739, 27757, 27780, 27785, 15555, 27796, 27799,
+ 27821, 27842, 15570, 27868, 27881, 27885, 146688, 27904, 27940,
+ {f: 2, c: 27942}, 27751, 27951, 27964, 27995, 28000, 28016,
+ {f: 2, c: 28032}, 28042, 28045, 28049, 28056, 146752, 146938, 146937,
+ 146899, 28075, 28078, 28084, 28098, 27956, 28104, 28110, 28127, 28150,
+ 28214, 28190, 15633, 28210, {f: 2, c: 28232}, {f: 2, c: 28235}, 28239,
+ {f: 2, c: 28243}, 28247, 28259, 15646, 28307, 28327, 28340, 28355, 28469,
+ 28395, 28409, 28411, 28426, 28428, 28440, 28453, 28470, 28476, 147326,
+ 28498, 28503, 28512, 28520, 28560, 28566, 28606, 28575, 28581, 28591,
+ 15716, {f: 2, c: 28616}, 28649, 147606, 28668, 28672, 28682, 28707, 147715,
+ 28730, 28739, 28743, 28747, 15770, 28773, 28777, 28782, 28790, 28806,
+ 28823, 147910, 28831, 28849, 147966, 28908, 28874, 28881, 28931, 28934,
+ 28936, 28940, 15808, 28975, 29008, 29011, 29022, 15828, 29078, 29056,
+ 29083, 29088, 29090, {f: 2, c: 29102}, 148412, 29145, 29148, 29191, 15877,
+ 29236, 29241, 29250, 29271, 29283, 149033, {f: 2, c: 29294}, 29304, 29311,
+ 29326, 149157, 29358, 29360, 29377, 15968, 29388, 15974, 15976, 29427,
+ 29434, 29447, 29458, {f: 2, c: 29464}, 16003, 29497, 29484, 29491, 29501,
+ 29522, 16020, 29547, 149654, {f: 2, c: 29550}, 29553, 29569, 29578, 29588,
+ 29592, 29596, 29605, 29625, 29631, 29637, 29643, 29665, 29671, 29689,
+ 29715, 29690, 29697, 29779, 29760, 29763, 29778, 29789, 29825, 29832,
+ 150093, 29842, 29847, 29849, 29857, 29861, 29866, 29881, 29883, 29882,
+ 29910, 29912, 29931, 150358, 29946, 150383, 29984, 29988, 29994, 16215,
+ 150550, {f: 2, c: 30013}, 30016, 30024, 30032, 30034, 30066, 30065, 30074,
+ {f: 2, c: 30077}, 30092, 16245, 30114, 16247, 30128, 30135,
+ {f: 2, c: 30143}, 30150, 30159, 30163, 30173, {f: 2, c: 30175}, 30183,
+ 30190, 30193, 30211, 30232, 30215, 30223, 16302, 151054, 30227,
+ {f: 2, c: 30235}, 151095, 30245, 30248, 30268, 30259, 151146, 16329, 30273,
+ 151179, 30281, 30293, 16343, 30318, 30357, 30369, 30368, {f: 2, c: 30375},
+ 30383, 151626, 30409, 151637, 30440, 151842, 30487, 30490, 30509, 30517,
+ 151977, 16441, 152037, 152013, 30552, 152094, 30588, 152140, 16472, 30618,
+ 30623, 30626, 30628, {f: 2, c: 30686}, 30692, 30698, 30700, 30715, 152622,
+ 30725, 30729, 30733, 30745, 30764, 30791, 30826, 152793, 30858, 30868,
+ 30884, 30877, 30879, 30907, 30933, 30950, {f: 2, c: 30969}, 30974, 152999,
+ 30992, 31003, 31013, 31050, 31064, 16645, 31079, 31090, 31125, 31137,
+ 31145, 31156, 31170, 31175, {f: 2, c: 31180}, 31190, 16712, 153513, 153524,
+ 16719, 31242, 31253, 31259, 16739, 31288, 31303, 31318, 31321, 31324,
+ 31327, 31335, 31338, 31349, 31362, 31370, 31376, 31404, 154068, 16820,
+ 31417, 31422, 16831, 31436, 31464, 31476, 154340, 154339, 154353, 31549,
+ 31530, {f: 2, c: 31534}, 16870, 16883, 31615, 31553, 16878, 31573, 31609,
+ 31588, 31590, 31603, 154546, 16903, 31632, 31643, 16910, 31669, 31676,
+ 31685, 31690, 154699, 154724, 31700, 31702, 31706, 31722, 31728, 31747,
+ 31758, 31813, 31818, 31831, 31838, 31841, 31849, 31855, 155182, 155222,
+ 155237, 31910, 155234, {f: 2, c: 31926}, 155352, 31940, 155330, 31949,
+ 155368, 155427, 31974, 155484, 31989, 32003, 17094, 32018, 32030, 155616,
+ 155604, {f: 2, c: 32061}, 32064, 32071, 155660, 155643, 17110, 32090,
+ 32106, 32112, 17117, 32127, 155671, 32136, 32151, 155744, 32157, 32167,
+ 32170, 32182, 32192, 32215, 32217, 32230, 17154, 155885, 64088, 32272,
+ 32279, 32285, 32295, 32300, 32325, 32373, 32382, {f: 2, c: 32390}, 17195,
+ 32410, 17219, 32572, 32571, 32574, 32579, 13505, 156272, 156294,
+ {f: 2, c: 32611}, 32621, {f: 2, c: 32637}, 32656, 20859, 146702, 32662,
+ 32668, 32685, 156674, 32707, 32719, 32739, 32754, 32778, 32776, 32790,
+ 32812, 32816, 32835, 32870, 32891, 32921, 32924, 32932, 32935, 32952,
+ 157310, 32965, 32981, 32998, 33037, 33013, 33019, 17390, 33077, 33054,
+ 17392, 33060, 33063, 33068, 157469, 33085, 17416, 33129, 17431, 17436,
+ 33157, 17442, 33176, 33202, 33217, 33219, 33238, 33243, 157917, 33252,
+ 157930, 33260, 33277, 33279, 158063, 33284, 158173, 33305, 33314, 158238,
+ 33340, 33353, 33349, 158296, 17526, 17530, 33367, 158348, 33372, 33379,
+ 158391, 17553, 33405, 33407, 33411, 33418, 33427, {f: 2, c: 33447}, 33458,
+ 33460, 33466, 33468, 33506, 33512, 33527, {f: 2, c: 33543}, 33548, 33620,
+ 33563, 33565, 33584, 33596, 33604, 33623, 17598, 17620, 17587,
+ {f: 2, c: 33684}, 33691, 33693, 33737, 33744, 33748, 33757, 33765, 33785,
+ 33813, 158835, 33815, 33849, 33871, {f: 2, c: 33873}, {f: 2, c: 33881},
+ 33884, 158941, 33893, 33912, 33916, 33921, 17677, 33943, 33958, 33982,
+ 17672, {f: 2, c: 33998}, 34003, 159333, 34023, 34026, 34031, 34033, 34042,
+ 34075, {f: 2, c: 34084}, 34091, 34127, 34159, 17731, 34129,
+ {f: 2, c: 34145}, 159636, 34171, 34173, 34175, 34177, 34182, 34195, 34205,
+ 34207, 159736, {f: 2, c: 159734}, 34236, 34247, 34250, {f: 2, c: 34264},
+ 34271, 34273, 34278, 34294, 34304, 34321, 34334, 34337, 34340, 34343,
+ 160013, 34361, 34364, 160057, 34368, 34387, 34390, 34423, 34439, 34441,
+ {f: 2, c: 34460}, 34481, 34483, 34497, 34499, 34513, 34517, 34519, 34531,
+ 34534, 17848, 34565, 34567, 34574, 34576, 34591, 34593, 34595, 34609,
+ 34618, 34624, 34627, 34641, 34648, {f: 2, c: 34660}, 34674, 34684, 160731,
+ 160730, 34727, 34697, 34699, 34707, 34720, 160766, 17893, 34750, 160784,
+ 34753, 34766, 34783, 160841, 34787, {f: 2, c: 34789}, 34794, 34835, 34856,
+ 34862, 34866, 34876, 17935, 34890, 34904, 161301, 161300, 34921, 161329,
+ 34927, 34976, 35004, 35008, 161427, 35025, 35027, 17985, 35073, 161550,
+ 35127, 161571, 35138, 35141, 35145, 161618, 35170, 35209, 35216, 35231,
+ 35248, 35255, 35288, 35307, 18081, 35315, 35325, 35327, 18095, 35345,
+ 35348, 162181, 35361, 35381, 35390, 35397, 35405, 35416, 35502, 35472,
+ 35511, 35543, 35580, 162436, 35594, 35589, 35597, 35612, 35629, 18188,
+ 35665, 35678, 35702, 35713, 35723, {f: 2, c: 35732}, 35897, 162739, 35901,
+ 162750, 162759, 35909, 35919, 35927, 35945, 35949, 163000, 35987, 35986,
+ 35993, 18276, 35995, 36054, 36053, 163232, 36081, 163344, 36105, 36110,
+ 36296, 36313, 36364, 18429, 36349, 36358, 163978, 36372, 36374,
+ {f: 2, c: 36385}, 36391, 164027, 18454, 36406, 36409, 36436, 36450, 36461,
+ 36463, 36504, 36510, 36533, 36539, 164482, 18510, 164595, 36608, 36616,
+ 36651, 36672, 36682, 36696, 164876, 36772, 36788, 164949, 36801, 36806,
+ 64036, 36810, 36813, 36819, 36821, 36849, 36853, 36859, 36876, 36919,
+ 165227, 36931, 36957, {f: 2, c: 165320}, 36997, 37004, 37008, 37025, 18613,
+ 37040, 37046, 37059, 37064, 165591, 37084, 37087, 165626, 37110, 37106,
+ 37120, 37099, {f: 2, c: 37118}, 37124, 37126, 37144, 37150, 37175, 37177,
+ {f: 2, c: 37190}, 37207, 37209, 37236, 37241, 37253, 37299, 37302,
+ {f: 2, c: 37315}, 166217, 166214, 37356, 37377, {f: 2, c: 37398}, 166251,
+ 37442, 37450, 37462, 37473, 37477, 37480, 166280, {f: 2, c: 37500}, 37503,
+ 37513, 37517, 37527, 37529, 37535, 37547, {f: 2, c: 166330}, 37554,
+ {f: 2, c: 37567}, 37574, 37582, 37605, 37649, 166430, 166441, 37623, 37673,
+ 166513, 166467, 37713, 37722, 37739, 37745, 37747, 37793, 166553, 166605,
+ 37768, 37771, 37775, 37790, 37877, 166628, 166621, 37873, 37831, 37852,
+ 37863, 37897, {f: 2, c: 37910}, 37883, 37938, 37947, 166849, 166895, 37997,
+ 37999, 38265, 38278, {f: 2, c: 38284}, 167184, 167281, 38344, 167419,
+ 167455, 38444, {f: 2, c: 38451}, 167478, 38460, 38497, 167561, 38530,
+ 167659, 38554, 167730, 18919, 38579, 38586, 38589, 18938, 167928, 38616,
+ 38618, 38621, 18948, 38676, 38691, 18985, 38710, 38721, 38727, 38743,
+ 38747, 38762, 168608, 168625, 38806, 38814, {f: 2, c: 38833}, 38846, 38860,
+ 38865, 38868, 38872, 38881, 38897, 38916, 38925, 38932, 38934, 19132,
+ 169104, {f: 2, c: 38962}, 38949, 38983, 39014, 39083, 39085, 39088, 169423,
+ 39095, {f: 2, c: 39099}, 39106, 39111, 39115, 39137, 39139, 39146,
+ {f: 2, c: 39152}, 39155, 39176, 19259, 169712, {f: 2, c: 39190}, 169753,
+ {f: 3, c: 39194}, 169808, 39217, {f: 3, c: 39226}, 39233, 39238, 39246,
+ 39264, 39331, 39334, 39357, 39359, 39363, 39380, 39385, 39390, 170182,
+ 39408, 39417, 39420, 39434, 39441, 39450, 39456, 39473, 39492, 39500,
+ 39512, 19394, 39599, 19402, 39607, 19410, 39609, 170610, 39622, 39632,
+ 39634, 39637, 39648, 39653, 39657, 39692, 39696, 39698, 39702, 39708,
+ 39723, 39741, 19488, 39755, 39779, 39781, {f: 2, c: 39787},
+ {f: 2, c: 39798}, 39846, 39852, 171483, 39858, 39864, 39870, 39923, 39896,
+ 39901, 39914, 39919, 39918, 171541, 171658, 171593, 39958,
+ {f: 3, c: 39960}, 39965, 39970, 39977, 171716, 39985, 39991, 40005, 40028,
+ 171753, {f: 2, c: 40009}, 171739, 40020, 40024, 40027, 40029, 40031,
+ {f: 3, c: 40041}, {f: 2, c: 40045}, 40050, 40053, 40058, 40166, 40178,
+ 40203, [171982, 171991], 40209, {f: 2, c: 40215}, 172079, 19652, 172058,
+ 40242, 19665, 40266, 40287, 40290, 172281, 172162, 40307, {f: 2, c: 40310},
+ 40324, 40345, 40353, 40383, 40373, 40377, 40381, 40393, 40410, 40416,
+ 40419, 19719, 40458, 40450, 40461, 40476, 40571, 139800, 40576, 40581,
+ 40603, 172940, 40637, 173111, 40671, 40703, 40706, 19831, 40707, 40762,
+ 40765, 40774, 40787, 40789, 40792, 173553, 40797, 173570, 40809, 40813,
+ 40816, 173746, 11948, 13844, 14509, 15820, 16348, 17854, 17936, 19326,
+ 19512, 19681, 19980, {f: 2, c: 20003}, 20089, 20211, 20236, 20249, 20267,
+ 20270, 20273, 20356, 20382, 20407, 20484, 20492, 20556, 20575, 20578,
+ 20599, 20622, 20638, 20642, 20675, 20712, 20721, 20734, 20743,
+ {f: 3, c: 20748}, 20787, 20792, 20852, 20868, 20920, 20922, 20936, 20943,
+ 20945, {f: 2, c: 20947}, 20952, 20959, 20997, 21030, 21032, 21035,
+ {f: 2, c: 21041}, 21045, 21052, 21082, 21088, 21102, {f: 2, c: 21112},
+ 21130, 21132, 21217, 21225, 21233, 21251, 21265, 21279, 21293, 21298,
+ 21309, 21349, 21357, 21369, 21374, 21396, 21401, 21418, 21423, 21434,
+ 21441, {f: 2, c: 21444}, 21472, 21523, 21546, 21553, {f: 2, c: 21556},
+ 21580, 21671, 21674, 21681, 21691, 21710, 21738, 21756, 21765, 21768,
+ 21781, 21799, 21802, 21814, 21841, 21862, 21903, 21906, 21908, 21924,
+ 21938, 21955, 21958, 21971, 21979, 21996, 21998, 22001, 22006, 22008,
+ 22021, 22029, {f: 2, c: 22033}, 22060, 22069, 22073, 22093, 22100, 22149,
+ 22175, 22182, 22199, 22220, 22223, 22233, 22241, 22251, 22253, 22257,
+ 22279, 22284, {f: 2, c: 22298}, 22301, 22316, 22318, {f: 2, c: 22333},
+ 22367, 22379, 22381, 22394, 22403, 22423, 22446, 22485, 22503, 22541,
+ 22566, 22605, 22607, 22623, 22637, 22655, 22657, 22680, 22716, 22815,
+ 22819, 22873, 22905, 22935, 22959, 22963, 23007, 23025, 23032, 23218,
+ 23224, 23274, 23286, 23323, 23325, 23329, 23352, 23479, 23511, 23520,
+ 23583, 23594, 23596, 23606, 23641, 23644, 23661, 23773, 23809, 23860,
+ 23869, 23897, 23934, 23939, 24007, 24057, 24104, 24114, 24117, 24155,
+ 24168, 24170, 24183, 24192, 24203, 24243, 24253, 24273, {f: 2, c: 24276},
+ 24397, 24492, 24554, 24583, 24649, 24660, 24679, 24763, 24772, 24829,
+ 24842, 24854, 24874, 24886, 24926, 24932, 24955, 24957, 24959, 24989,
+ 25016, 25052, 25058, 25061, 25064, 25092, 25095, 25137, 25145, 25149,
+ 25210, 25232, 25256, 25306, 25332, 25366, 25386, 25398, 25414, 25419,
+ 25427, 25457, 25461, 25471, 25474, 25482, {f: 2, c: 25518}, 25578,
+ {f: 2, c: 25592}, 25618, 25624, 25632, 25636, 25642, 25653, 25661, 25663,
+ 25682, 25695, 25716, 25744, {f: 2, c: 25752}, 25772, 25779, 25837, 25840,
+ 25883, 25887, 25902, 25929, 25952, 26002, 26005, 26036, 26046, 26056,
+ 26062, 26064, 26079, 26238, {f: 2, c: 26251}, 26291, 26304, 26319, 26405,
+ 26421, 26453, 26496, 26511, 26513, 26532, 26545, 26549, 26558, 26664,
+ 26758, 26859, 26869, 26903, 26931, 26936, 26971, 26981, 27048, 27051,
+ 27055, 27109, 27121, 27210, 27221, 27239, 27249, 27311, {f: 2, c: 27336},
+ 27395, 27451, 27455, {f: 2, c: 27517}, 27568, 27639, 27641, 27652, 27657,
+ 27661, 27692, 27722, 27730, 27732, 27769, 27820, 27828, 27858, 28001,
+ 28028, 28089, 28144, 28229, 28275, 28283, 28285, 28297, 28348,
+ {f: 2, c: 28378}, 28454, 28457, 28464, 28551, 28573, 28590, 28599, 28685,
+ 28704, 28745, 28824, 28848, {f: 2, c: 28885}, 28997, 29106, 29172, 29207,
+ 29215, 29251, {f: 2, c: 29263}, 29274, 29280, 29288, 29303, 29316, 29385,
+ 29413, 29428, 29442, 29451, 29470, 29474, {f: 2, c: 29498}, 29517, 29528,
+ 29543, 29810, 29871, 29919, 29924, 29940, 29947, 29974, 29985, 30015,
+ 30046, 30105, 30116, 30145, 30148, 30156, 30167, 30172, 30177, 30191,
+ 30212, 30220, 30237, 30258, 30264, 30277, 30282, 30303, 30381, 30397,
+ 30425, 30443, 30448, 30457, 30464, 30478, 30498, 30504, 30511, 30521,
+ 30526, 30533, 30538, 30543, 30558, 30564, 30567, 30572, 30596,
+ {f: 2, c: 30604}, 30614, 30631, 30639, 30647, 30654, 30665, 30673, 30681,
+ 30705, 30775, 30812, 30846, 30872, 30881, 30897, 30899, 30921, 30931,
+ 30988, 31007, {f: 2, c: 31015}, 31039, 31042, 31060, 31083, 31100, 31147,
+ 31172, 31210, 31234, 31244, 31280, 31290, 31300, 31360, 31366, 31380,
+ 31413, 31421, 31486, 31531, 31607, 31648, 31660, 31664, 31720, 31730,
+ 31736, 31740, 31742, 31753, 31784, 31791, 31810, {f: 2, c: 31826},
+ {f: 3, c: 31835}, 31858, 31869, 31879, 31902, 31930, 31943, 31955, 31962,
+ 32060, 32077, 32130, 32133, 32141, 32145, 32158, 32179, 32185, 32208,
+ 32229, {f: 2, c: 32245}, 32303, 32310, 32324, 32367, 32376, 32385, 32573,
+ 32603, 32605, 32613, 32625, {f: 2, c: 32639}, 32651, 32674,
+ {f: 3, c: 32765}, 32775, 32781, 32798, 32825, 32904, 32910, 32975, 32980,
+ 33005, 33008, 33015, 33018, 33022, 33027, 33047, 33072, 33111, 33135,
+ 33139, 33163, 33168, 33179, 33182, 33227, 33237, {f: 2, c: 33245}, 33249,
+ 33263, 33270, 33280, 33291, {f: 2, c: 33299}, 33306, 33338, 33348, 33389,
+ 33412, 33417, 33425, 33450, 33456, 33488, 33514, 33519, 33526, 33622,
+ 33656, 33784, 33788, 33880, 33939, 33969, 33981, 34043, 34118, 34134,
+ 34141, 34181, 34200, 34370, 34374, 34496, 34580, 34594, 34606, 34617,
+ 34653, 34683, 34700, 34702, {f: 2, c: 34711}, 34718, 34723, 34734, 34751,
+ 34761, 34778, 34840, 34843, 34861, 34874, 34885, 34891, 34894, 34901,
+ 34906, 34926, {f: 3, c: 34970}, 35021, 35040, 35055, {f: 2, c: 35086},
+ 35110, 35125, 35162, 35164, 35179, 35184, 35196, 35237, 35253, 35260,
+ 35285, 35401, 35415, 35431, 35454, 35462, 35478, 35510, 35529, 35537,
+ 35549, 35564, 35573, 35590, 35599, 35601, 35653, 35666, 35693, 35704,
+ 35708, 35710, 35717, 35743, 35915, 35923, 35963, 36026, 36037, 36041,
+ 36050, 36076, 36085, 36087, 36097, 36099, 36119, 36124, 36206, 36241,
+ 36255, 36267, 36274, 36309, 36327, {f: 2, c: 36337}, 36340, 36353, 36363,
+ 36390, 36401, {f: 2, c: 36416}, 36429, 36431, 36444, 36449, 36457, 36465,
+ 36469, 36471, 36489, 36496, 36501, 36506, 36519, 36521, 36525, 36584,
+ 36592, 36615, 36632, 36645, 36647, 36652, 36661, 36666, 36675, 36679,
+ 36689, 36693, {f: 3, c: 36768}, 36773, 36868, 36891, 36911, 36940, 36955,
+ 36976, 36980, 36985, 37003, 37016, 37024, 37042, 37053, 37065, 37104,
+ 37125, 37157, 37210, 37223, 37242, 37258, 37265, 37269, 37296, 37307,
+ 37309, 37314, 37317, 37376, 37385, 37411, 37494, 37518, 37551,
+ {f: 2, c: 37563}, 37569, 37571, 37573, 37576, 37652, 37683, 37686, 37720,
+ 37759, 37762, 37770, 37819, 37836, 37862, 37881, 37890, {f: 2, c: 37901},
+ 37934, 37964, 38280, 38305, 38335, 38342, 38345, {f: 2, c: 38353}, 38368,
+ 38372, 38374, 38436, 38449, 38456, 38461, 38484, 38516, 38523, 38527,
+ 38529, 38531, 38537, 38550, 38574, 38659, 38683, {f: 2, c: 38689}, 38696,
+ 38705, 38759, 38774, 38781, 38783, 38809, 38815, 38828, 38841, 38861,
+ 38880, 38895, 38919, 38950, 38958, {f: 2, c: 39010}, 39092, 39109, 39170,
+ 39185, 39189, 39221, 39240, 39252, 39262, 39393, 39436, 39440, 39459,
+ 39489, 39505, {f: 2, c: 39613}, 39681, 39689, 39691, {f: 2, c: 39693},
+ 39705, 39733, 39752, 39765, 39784, 39808, 39814, 39824, 39837, 39856,
+ 39871, 39880, 39935, 39938, 39964, 39989, 40004, 40022, 40033, 40040,
+ 40240, 40253, 40298, 40315, 40421, 40425, 40435, 40570, {f: 3, c: 40578},
+ 40624, 40676, 40688, 40690, 40713, 40719, 40724, 40731, 40738, 40742,
+ {f: 2, c: 40746}, 40756, 40794, 40815, 40862, 40869, 131317, 151044,
+ 151538, 163187, 194581, 194630, 194713, 194726, 194789, 195038, 13790,
+ {s: 4}, 172722, 0, 0, 131416, {s: 4}, 132529, 0, 0, 132844, {s: 6}, 134488,
+ {s: 21}, 154060, {s: 9}, 14756, 14776, 142914, 0, 0, 14940, 0, 0, 143339,
+ 0, 0, 162228, 0, 15044, 15051, {s: 5}, 14981, {s: 8}, 15347, 27384, {s: 5},
+ 15665, {s: 9}, 147531, 0, 15936, 14497, {s: 34}, 158878, {s: 12}, 18207,
+ 162876, {s: 4}, 18462, {s: 71}, 39709, 39724, 20482, 20958, 21255, 23532,
+ 63784, 26142, 63785, 28746, 64021, 21857, 27706, 31328, 156492, 34819,
+ 38315, 38741, 171581, 173594],
+ 'Adobe-Korea1': [{f: 95, c: 32}, 8361, 8208, 169, 0, 0, [12288, 12644],
+ {f: 2, c: 12289}, 12539, 8229, [8230, 8943], 168, 12291, {f: 2, c: 8211},
+ 8214, 65340, 65374, {f: 2, c: 8216}, {f: 2, c: 8220}, {f: 2, c: 12308},
+ {f: 10, c: 12296}, 177, 215, 247, 8800, {f: 2, c: 8804}, 8734, 8756, 176,
+ {f: 2, c: 8242}, 8451, 8491, {f: 2, c: 65504}, 65509, 9794, 9792, 8736,
+ 8869, 8978, 8706, 8711, 8801, 8786, 167, 8251, 9734, 9733, 9675, 9679,
+ 9678, 9671, 9670, 9633, 9632, 9651, 9650, 9661, 9660, 8594,
+ {f: 2, c: 8592}, {f: 2, c: 8595}, 12307, 171, 187, 8730, 8765, 8733, 8757,
+ {f: 2, c: 8747}, 8712, 8715, {f: 2, c: 8838}, {f: 2, c: 8834}, 8746, 8745,
+ {f: 2, c: 8743}, 65506, 8658, 8660, 8704, 8707, 180, 732, 711, 728, 733,
+ 730, 729, 184, 731, 161, 191, 8758, 8750, 8721, 8719, 164, 8457, 8240,
+ 9665, 9664, 9655, 9654, 9828, {f: 2, c: 9824}, 9829, 9831, 9827, 9673,
+ 9672, 9635, {f: 2, c: 9680}, 9618, {f: 2, c: 9636}, 9640, 9639, 9638, 9641,
+ 9832, 9743, 9742, 9756, 9758, 182, {f: 2, c: 8224}, 8597, 8599, 8601, 8598,
+ 8600, 9837, {f: 2, c: 9833}, 9836, 12927, 12828, 8470, 13255, 8482, 13250,
+ 13272, 8481, {f: 59, c: 65281}, 65510, {f: 33, c: 65341}, 65507,
+ {f: 51, c: 12593}, {f: 42, c: 12645}, {f: 10, c: 8560}, {f: 10, c: 8544},
+ {f: 17, c: 913}, {f: 7, c: 931}, {f: 17, c: 945}, {f: 7, c: 963}, 9472,
+ 9474, 9484, 9488, 9496, 9492, 9500, 9516, 9508, 9524, 9532, 9473, 9475,
+ 9487, 9491, 9499, 9495, 9507, 9523, 9515, 9531, 9547, 9504, 9519, 9512,
+ 9527, 9535, 9501, 9520, 9509, 9528, 9538, 9490, 9489, 9498, 9497, 9494,
+ 9493, 9486, 9485, {f: 2, c: 9502}, {f: 2, c: 9505}, {f: 2, c: 9510},
+ {f: 2, c: 9513}, {f: 2, c: 9517}, {f: 2, c: 9521}, {f: 2, c: 9525},
+ {f: 2, c: 9529}, {f: 2, c: 9533}, {f: 2, c: 9536}, {f: 8, c: 9539},
+ {f: 3, c: 13205}, 8467, 13208, 13252, {f: 4, c: 13219}, {f: 10, c: 13209},
+ 13258, {f: 3, c: 13197}, 13263, {f: 2, c: 13192}, 13256, {f: 2, c: 13223},
+ {f: 10, c: 13232}, {f: 5, c: 13184}, {f: 6, c: 13242}, {f: 5, c: 13200},
+ 8486, {f: 2, c: 13248}, {f: 3, c: 13194}, 13270, 13253, {f: 3, c: 13229},
+ 13275, {f: 4, c: 13225}, 13277, 13264, 13267, 13251, 13257, 13276, 13254,
+ 198, 208, 170, 294, 306, 319, 321, 216, 338, 186, 222, 358, 330,
+ {f: 28, c: 12896}, {f: 26, c: 9424}, {f: 15, c: 9312}, 189,
+ {f: 2, c: 8531}, 188, 190, {f: 4, c: 8539}, 230, 273, 240, 295, 305, 307,
+ 312, 320, 322, 248, 339, 223, 254, 359, 331, 329, {f: 28, c: 12800},
+ {f: 26, c: 9372}, {f: 15, c: 9332}, 185, {f: 2, c: 178}, 8308, 8319,
+ {f: 4, c: 8321}, {f: 83, c: 12353}, {f: 86, c: 12449}, {f: 6, c: 1040},
+ 1025, {f: 32, c: 1046}, 1105, {f: 26, c: 1078}, {f: 2, c: 44032}, 44036,
+ {f: 4, c: 44039}, {f: 8, c: 44048}, {f: 5, c: 44057}, 44064, 44068,
+ {f: 2, c: 44076}, {f: 3, c: 44079}, {f: 2, c: 44088}, 44092, 44096, 44107,
+ 44109, 44116, 44120, 44124, {f: 2, c: 44144}, 44148, {f: 2, c: 44151},
+ 44154, {f: 2, c: 44160}, {f: 4, c: 44163}, {f: 4, c: 44169}, 44176, 44180,
+ {f: 2, c: 44188}, {f: 3, c: 44191}, {f: 3, c: 44200}, 44204,
+ {f: 2, c: 44207}, {f: 2, c: 44216}, {f: 3, c: 44219}, 44225, 44228, 44232,
+ 44236, 44245, 44247, {f: 2, c: 44256}, 44260, {f: 2, c: 44263}, 44266,
+ 44268, {f: 3, c: 44271}, 44275, {f: 2, c: 44277}, {f: 2, c: 44284}, 44288,
+ 44292, 44294, {f: 2, c: 44300}, 44303, 44305, 44312, 44316, 44320, 44329,
+ {f: 2, c: 44332}, {f: 2, c: 44340}, 44344, 44348, {f: 2, c: 44356}, 44359,
+ 44361, 44368, 44372, 44376, 44385, 44387, {f: 2, c: 44396}, 44400,
+ {f: 4, c: 44403}, {f: 3, c: 44411}, 44415, {f: 2, c: 44417},
+ {f: 2, c: 44424}, 44428, 44432, {f: 2, c: 44444}, 44452, 44471,
+ {f: 2, c: 44480}, 44484, 44488, {f: 2, c: 44496}, 44499, 44508, 44512,
+ 44516, {f: 2, c: 44536}, 44540, {f: 3, c: 44543}, {f: 2, c: 44552}, 44555,
+ 44557, 44564, {f: 2, c: 44592}, 44596, {f: 2, c: 44599}, 44602,
+ {f: 2, c: 44608}, 44611, {f: 2, c: 44613}, 44618, {f: 3, c: 44620}, 44624,
+ 44628, 44630, {f: 2, c: 44636}, {f: 3, c: 44639}, 44645, {f: 2, c: 44648},
+ 44652, 44656, {f: 2, c: 44664}, {f: 3, c: 44667}, {f: 2, c: 44676}, 44684,
+ {f: 3, c: 44732}, 44736, 44740, {f: 2, c: 44748}, {f: 3, c: 44751},
+ {f: 2, c: 44760}, 44764, 44776, 44779, 44781, 44788, 44792, 44796,
+ {f: 2, c: 44807}, 44813, 44816, {f: 2, c: 44844}, 44848, 44850, 44852,
+ {f: 2, c: 44860}, 44863, {f: 3, c: 44865}, {f: 2, c: 44872}, 44880,
+ {f: 2, c: 44892}, {f: 2, c: 44900}, 44921, 44928, 44932, 44936,
+ {f: 2, c: 44944}, 44949, 44956, {f: 2, c: 44984}, 44988, 44992,
+ {f: 3, c: 44999}, 45003, {f: 2, c: 45005}, 45012, 45020, {f: 2, c: 45032},
+ {f: 2, c: 45040}, 45044, 45048, {f: 2, c: 45056}, 45060, 45068, 45072,
+ 45076, {f: 2, c: 45084}, 45096, {f: 2, c: 45124}, 45128, 45130, 45132,
+ 45134, {f: 3, c: 45139}, 45143, 45145, 45149, {f: 2, c: 45180}, 45184,
+ 45188, {f: 2, c: 45196}, 45199, 45201, {f: 3, c: 45208}, 45212,
+ {f: 4, c: 45215}, {f: 2, c: 45224}, {f: 5, c: 45227}, 45233,
+ {f: 3, c: 45235}, 45240, 45244, {f: 2, c: 45252}, {f: 3, c: 45255},
+ {f: 2, c: 45264}, 45268, 45272, 45280, 45285, {f: 2, c: 45320},
+ {f: 2, c: 45323}, 45328, {f: 2, c: 45330}, {f: 2, c: 45336},
+ {f: 3, c: 45339}, {f: 3, c: 45347}, 45352, 45356, {f: 2, c: 45364},
+ {f: 3, c: 45367}, {f: 2, c: 45376}, 45380, 45384, {f: 2, c: 45392},
+ {f: 2, c: 45396}, 45400, 45404, 45408, {f: 2, c: 45432}, 45436, 45440,
+ 45442, {f: 2, c: 45448}, 45451, 45453, {f: 3, c: 45458}, 45464, 45468,
+ 45480, 45516, 45520, 45524, {f: 2, c: 45532}, 45535, {f: 2, c: 45544},
+ 45548, 45552, 45561, 45563, 45565, {f: 2, c: 45572}, 45576,
+ {f: 2, c: 45579}, {f: 2, c: 45588}, 45591, 45593, 45600, 45620, 45628,
+ 45656, 45660, 45664, {f: 2, c: 45672}, {f: 2, c: 45684}, 45692,
+ {f: 2, c: 45700}, 45705, {f: 2, c: 45712}, 45716, {f: 3, c: 45720},
+ {f: 2, c: 45728}, 45731, {f: 2, c: 45733}, 45738, 45740, 45744, 45748,
+ {f: 2, c: 45768}, 45772, 45776, 45778, {f: 2, c: 45784}, 45787, 45789,
+ 45794, {f: 3, c: 45796}, 45800, {f: 5, c: 45803}, {f: 3, c: 45811},
+ {f: 5, c: 45815}, {f: 3, c: 45823}, 45828, 45832, {f: 2, c: 45840},
+ {f: 3, c: 45843}, 45852, {f: 3, c: 45908}, 45912, {f: 2, c: 45915},
+ {f: 2, c: 45918}, {f: 2, c: 45924}, 45927, 45929, 45931, 45934,
+ {f: 2, c: 45936}, 45940, 45944, {f: 2, c: 45952}, {f: 3, c: 45955}, 45964,
+ 45968, 45972, {f: 2, c: 45984}, 45992, 45996, {f: 2, c: 46020}, 46024,
+ {f: 2, c: 46027}, 46030, 46032, {f: 2, c: 46036}, 46039, 46041, 46043,
+ 46045, 46048, 46052, 46056, 46076, 46096, 46104, 46108, 46112,
+ {f: 2, c: 46120}, 46123, 46132, {f: 2, c: 46160}, 46164, 46168,
+ {f: 2, c: 46176}, 46179, 46181, 46188, 46208, 46216, 46237, 46244, 46248,
+ 46252, 46261, 46263, 46265, 46272, 46276, 46280, 46288, 46293,
+ {f: 2, c: 46300}, 46304, {f: 2, c: 46307}, 46310, {f: 2, c: 46316}, 46319,
+ 46321, 46328, {f: 2, c: 46356}, 46360, {f: 2, c: 46363}, {f: 2, c: 46372},
+ {f: 4, c: 46375}, {f: 2, c: 46384}, 46388, 46392, {f: 2, c: 46400},
+ {f: 3, c: 46403}, {f: 3, c: 46411}, 46416, 46420, {f: 2, c: 46428},
+ {f: 3, c: 46431}, {f: 2, c: 46496}, 46500, 46504, {f: 2, c: 46506},
+ {f: 2, c: 46512}, {f: 3, c: 46515}, {f: 3, c: 46523}, 46528, 46532,
+ {f: 2, c: 46540}, {f: 3, c: 46543}, 46552, 46572, {f: 2, c: 46608}, 46612,
+ 46616, 46629, 46636, 46644, 46664, 46692, 46696, {f: 2, c: 46748}, 46752,
+ 46756, {f: 2, c: 46763}, 46769, 46804, 46832, 46836, 46840,
+ {f: 2, c: 46848}, 46853, {f: 2, c: 46888}, 46892, {f: 2, c: 46895},
+ {f: 2, c: 46904}, 46907, 46916, 46920, 46924, {f: 2, c: 46932}, 46944,
+ 46948, 46952, {f: 2, c: 46960}, 46963, 46965, {f: 2, c: 46972}, 46976,
+ 46980, {f: 2, c: 46988}, {f: 4, c: 46991}, {f: 4, c: 46998}, 47004, 47008,
+ {f: 2, c: 47016}, {f: 3, c: 47019}, {f: 2, c: 47028}, 47032, 47047, 47049,
+ {f: 2, c: 47084}, 47088, 47092, {f: 2, c: 47100}, {f: 3, c: 47103},
+ {f: 3, c: 47111}, 47116, 47120, {f: 2, c: 47128}, 47131, 47133,
+ {f: 2, c: 47140}, 47144, 47148, {f: 2, c: 47156}, {f: 3, c: 47159}, 47168,
+ 47172, 47185, 47187, {f: 2, c: 47196}, 47200, 47204, {f: 2, c: 47212},
+ 47215, 47217, 47224, 47228, 47245, 47272, 47280, 47284, 47288,
+ {f: 2, c: 47296}, 47299, 47301, 47308, 47312, 47316, 47325, 47327, 47329,
+ {f: 2, c: 47336}, 47340, 47344, {f: 2, c: 47352}, 47355, 47357, 47364,
+ 47384, 47392, {f: 2, c: 47420}, 47424, 47428, 47436, 47439, 47441,
+ {f: 2, c: 47448}, 47452, 47456, {f: 2, c: 47464}, 47467, 47469,
+ {f: 2, c: 47476}, 47480, 47484, {f: 2, c: 47492}, 47495, {f: 2, c: 47497},
+ {f: 2, c: 47501}, {f: 2, c: 47532}, 47536, 47540, {f: 2, c: 47548}, 47551,
+ 47553, {f: 2, c: 47560}, 47564, {f: 5, c: 47566}, {f: 2, c: 47576}, 47579,
+ {f: 2, c: 47581}, 47585, {f: 3, c: 47587}, 47592, 47596, {f: 2, c: 47604},
+ {f: 4, c: 47607}, {f: 2, c: 47616}, 47624, 47637, {f: 2, c: 47672}, 47676,
+ 47680, 47682, {f: 2, c: 47688}, 47691, {f: 2, c: 47693}, {f: 3, c: 47699},
+ 47704, 47708, {f: 2, c: 47716}, {f: 3, c: 47719}, {f: 2, c: 47728}, 47732,
+ 47736, {f: 3, c: 47747}, 47751, 47756, {f: 2, c: 47784}, {f: 2, c: 47787},
+ 47792, 47794, {f: 2, c: 47800}, 47803, 47805, 47812, 47816,
+ {f: 2, c: 47832}, 47868, 47872, 47876, 47885, 47887, 47889, 47896, 47900,
+ 47904, 47913, 47915, {f: 3, c: 47924}, 47928, {f: 4, c: 47931},
+ {f: 2, c: 47940}, 47943, 47945, 47949, {f: 2, c: 47951}, 47956, 47960,
+ 47969, 47971, 47980, 48008, 48012, 48016, 48036, 48040, 48044, 48052,
+ 48055, 48064, 48068, 48072, 48080, 48083, {f: 2, c: 48120}, 48124,
+ {f: 2, c: 48127}, 48130, {f: 2, c: 48136}, {f: 3, c: 48139}, 48143, 48145,
+ {f: 5, c: 48148}, {f: 5, c: 48155}, {f: 2, c: 48164}, 48167, 48169, 48173,
+ {f: 2, c: 48176}, 48180, 48184, {f: 2, c: 48192}, {f: 3, c: 48195}, 48201,
+ {f: 2, c: 48204}, 48208, 48221, {f: 2, c: 48260}, 48264, {f: 2, c: 48267},
+ 48270, {f: 2, c: 48276}, 48279, {f: 2, c: 48281}, {f: 2, c: 48288}, 48292,
+ {f: 2, c: 48295}, {f: 2, c: 48304}, {f: 3, c: 48307}, {f: 2, c: 48316},
+ 48320, 48324, 48333, {f: 3, c: 48335}, 48341, 48344, 48348,
+ {f: 3, c: 48372}, 48376, 48380, {f: 2, c: 48388}, 48391, 48393, 48400,
+ 48404, 48420, 48428, 48448, {f: 2, c: 48456}, 48460, 48464,
+ {f: 2, c: 48472}, 48484, 48488, {f: 2, c: 48512}, 48516, {f: 4, c: 48519},
+ {f: 2, c: 48528}, 48531, 48533, {f: 2, c: 48537}, 48540, 48548, 48560,
+ 48568, {f: 2, c: 48596}, 48600, 48604, 48617, 48624, 48628, 48632, 48640,
+ 48643, 48645, {f: 2, c: 48652}, 48656, 48660, {f: 2, c: 48668}, 48671,
+ {f: 2, c: 48708}, 48712, 48716, 48718, {f: 2, c: 48724}, 48727,
+ {f: 3, c: 48729}, {f: 2, c: 48736}, 48740, 48744, 48746, {f: 2, c: 48752},
+ {f: 3, c: 48755}, {f: 3, c: 48763}, 48768, 48772, {f: 2, c: 48780},
+ {f: 3, c: 48783}, {f: 2, c: 48792}, 48808, {f: 2, c: 48848}, 48852,
+ {f: 2, c: 48855}, 48864, {f: 3, c: 48867}, 48876, 48897, {f: 2, c: 48904},
+ {f: 2, c: 48920}, {f: 3, c: 48923}, {f: 2, c: 48960}, 48964, 48968,
+ {f: 2, c: 48976}, 48981, 49044, 49072, 49093, {f: 2, c: 49100}, 49104,
+ 49108, 49116, 49119, 49121, 49212, 49233, 49240, 49244, 49248,
+ {f: 2, c: 49256}, {f: 2, c: 49296}, 49300, 49304, {f: 2, c: 49312}, 49315,
+ 49317, {f: 2, c: 49324}, {f: 2, c: 49327}, {f: 4, c: 49331},
+ {f: 2, c: 49340}, {f: 3, c: 49343}, 49349, {f: 2, c: 49352}, 49356, 49360,
+ {f: 2, c: 49368}, {f: 3, c: 49371}, {f: 2, c: 49380}, 49384, 49388,
+ {f: 2, c: 49396}, 49399, 49401, 49408, 49412, 49416, 49424, 49429,
+ {f: 5, c: 49436}, {f: 2, c: 49443}, {f: 2, c: 49446}, {f: 2, c: 49452},
+ {f: 3, c: 49455}, 49462, {f: 2, c: 49464}, 49468, 49472, {f: 2, c: 49480},
+ {f: 3, c: 49483}, {f: 2, c: 49492}, 49496, 49500, {f: 2, c: 49508},
+ {f: 3, c: 49511}, 49520, 49524, 49528, 49541, {f: 3, c: 49548}, 49552,
+ 49556, 49558, {f: 2, c: 49564}, 49567, 49569, 49573, {f: 2, c: 49576},
+ 49580, 49584, 49597, 49604, 49608, 49612, 49620, {f: 2, c: 49623}, 49632,
+ 49636, 49640, {f: 2, c: 49648}, 49651, {f: 2, c: 49660}, 49664, 49668,
+ {f: 2, c: 49676}, 49679, 49681, {f: 2, c: 49688}, 49692, {f: 2, c: 49695},
+ {f: 2, c: 49704}, 49707, 49709, 49711, {f: 2, c: 49713}, 49716, 49736,
+ {f: 2, c: 49744}, 49748, 49752, 49760, 49765, {f: 2, c: 49772}, 49776,
+ 49780, {f: 2, c: 49788}, 49791, 49793, {f: 2, c: 49800}, 49808, 49816,
+ 49819, 49821, {f: 2, c: 49828}, 49832, {f: 2, c: 49836}, {f: 2, c: 49844},
+ 49847, 49849, {f: 2, c: 49884}, 49888, {f: 2, c: 49891}, {f: 3, c: 49899},
+ 49903, 49905, 49910, {f: 2, c: 49912}, {f: 2, c: 49915}, 49920,
+ {f: 2, c: 49928}, {f: 2, c: 49932}, {f: 3, c: 49939}, 49944, 49948,
+ {f: 2, c: 49956}, {f: 2, c: 49960}, 49989, {f: 2, c: 50024}, 50028, 50032,
+ 50034, {f: 2, c: 50040}, {f: 2, c: 50044}, 50052, 50056, 50060, 50112,
+ {f: 2, c: 50136}, 50140, {f: 2, c: 50143}, 50146, {f: 2, c: 50152}, 50157,
+ {f: 2, c: 50164}, 50168, 50184, 50192, 50212, 50220, 50224, 50228,
+ {f: 2, c: 50236}, 50248, {f: 2, c: 50276}, 50280, 50284, {f: 2, c: 50292},
+ 50297, 50304, 50324, 50332, 50360, 50364, 50409, {f: 2, c: 50416}, 50420,
+ 50424, 50426, {f: 3, c: 50431}, 50444, 50448, 50452, 50460,
+ {f: 2, c: 50472}, 50476, 50480, {f: 2, c: 50488}, 50491, 50493,
+ {f: 2, c: 50500}, {f: 3, c: 50504}, {f: 3, c: 50508}, {f: 3, c: 50515},
+ {f: 3, c: 50519}, {f: 2, c: 50525}, {f: 2, c: 50528}, 50532, 50536,
+ {f: 2, c: 50544}, {f: 3, c: 50547}, {f: 2, c: 50556}, 50560, 50564, 50567,
+ {f: 2, c: 50572}, 50575, 50577, 50581, {f: 2, c: 50583}, 50588, 50592,
+ 50601, {f: 2, c: 50612}, {f: 2, c: 50616}, {f: 4, c: 50619},
+ {f: 7, c: 50628}, 50636, 50638, {f: 2, c: 50640}, 50644, 50648,
+ {f: 2, c: 50656}, 50659, 50661, {f: 3, c: 50668}, 50672, 50676,
+ {f: 2, c: 50678}, {f: 6, c: 50684}, {f: 4, c: 50693}, 50700, 50704,
+ {f: 2, c: 50712}, {f: 2, c: 50715}, {f: 2, c: 50724}, 50728,
+ {f: 3, c: 50732}, 50736, {f: 3, c: 50739}, 50743, 50745, 50747,
+ {f: 2, c: 50752}, 50756, 50760, {f: 2, c: 50768}, {f: 3, c: 50771},
+ {f: 2, c: 50780}, 50784, 50796, 50799, 50801, {f: 2, c: 50808}, 50812,
+ 50816, {f: 2, c: 50824}, 50827, 50829, {f: 2, c: 50836}, 50840, 50844,
+ {f: 2, c: 50852}, 50855, 50857, {f: 2, c: 50864}, 50868, {f: 3, c: 50872},
+ {f: 2, c: 50880}, 50883, 50885, {f: 2, c: 50892}, 50896, 50900,
+ {f: 2, c: 50908}, {f: 2, c: 50912}, {f: 2, c: 50920}, 50924, 50928,
+ {f: 2, c: 50936}, 50941, {f: 2, c: 50948}, 50952, 50956, {f: 2, c: 50964},
+ 50967, 50969, {f: 2, c: 50976}, 50980, 50984, {f: 2, c: 50992}, 50995,
+ 50997, 50999, {f: 2, c: 51004}, 51008, 51012, 51018, {f: 2, c: 51020},
+ 51023, {f: 8, c: 51025}, 51036, 51040, 51048, 51051, {f: 2, c: 51060},
+ 51064, {f: 3, c: 51068}, {f: 3, c: 51075}, {f: 4, c: 51079}, 51086,
+ {f: 2, c: 51088}, 51092, {f: 3, c: 51094}, 51098, {f: 2, c: 51104},
+ {f: 4, c: 51107}, {f: 2, c: 51116}, 51120, 51124, {f: 2, c: 51132},
+ {f: 3, c: 51135}, {f: 2, c: 51144}, 51148, 51150, 51152, 51160, 51165,
+ 51172, 51176, 51180, {f: 2, c: 51200}, 51204, 51208, 51210,
+ {f: 2, c: 51216}, 51219, {f: 2, c: 51221}, {f: 2, c: 51228}, 51232, 51236,
+ {f: 2, c: 51244}, 51247, 51249, 51256, 51260, 51264, {f: 2, c: 51272},
+ {f: 2, c: 51276}, 51284, {f: 2, c: 51312}, 51316, 51320, 51322,
+ {f: 2, c: 51328}, 51331, {f: 3, c: 51333}, {f: 3, c: 51339}, 51348, 51357,
+ 51359, 51361, 51368, {f: 2, c: 51388}, 51396, 51400, 51404,
+ {f: 2, c: 51412}, 51415, 51417, {f: 2, c: 51424}, 51428, 51445,
+ {f: 2, c: 51452}, 51456, {f: 3, c: 51460}, {f: 2, c: 51468}, 51471, 51473,
+ 51480, 51500, 51508, {f: 2, c: 51536}, 51540, 51544, {f: 2, c: 51552},
+ 51555, 51564, 51568, 51572, 51580, {f: 2, c: 51592}, 51596, 51600,
+ {f: 2, c: 51608}, 51611, 51613, {f: 2, c: 51648}, 51652, {f: 2, c: 51655},
+ 51658, {f: 2, c: 51664}, 51667, {f: 2, c: 51669}, {f: 2, c: 51673},
+ {f: 2, c: 51676}, 51680, 51682, 51684, 51687, {f: 2, c: 51692},
+ {f: 3, c: 51695}, {f: 2, c: 51704}, 51708, 51712, {f: 2, c: 51720},
+ {f: 3, c: 51723}, 51732, 51736, 51753, {f: 2, c: 51788}, 51792, 51796,
+ {f: 2, c: 51804}, {f: 3, c: 51807}, 51816, 51837, 51844, 51864,
+ {f: 2, c: 51900}, 51904, 51908, {f: 2, c: 51916}, 51919, 51921, 51923,
+ {f: 2, c: 51928}, 51936, 51948, 51956, 51976, 51984, 51988, 51992,
+ {f: 2, c: 52000}, 52033, {f: 2, c: 52040}, 52044, 52048, {f: 2, c: 52056},
+ 52061, 52068, {f: 2, c: 52088}, 52124, 52152, 52180, 52196, 52199, 52201,
+ {f: 2, c: 52236}, 52240, 52244, {f: 2, c: 52252}, {f: 2, c: 52257},
+ {f: 3, c: 52263}, 52268, 52270, 52272, {f: 2, c: 52280}, {f: 4, c: 52283},
+ {f: 2, c: 52292}, 52296, 52300, {f: 2, c: 52308}, {f: 3, c: 52311}, 52320,
+ 52324, 52326, 52328, 52336, 52341, {f: 2, c: 52376}, 52380, 52384,
+ {f: 2, c: 52392}, {f: 3, c: 52395}, {f: 2, c: 52404}, 52408, 52412,
+ {f: 2, c: 52420}, 52423, 52425, 52432, 52436, 52452, 52460, 52464, 52481,
+ {f: 2, c: 52488}, 52492, 52496, {f: 2, c: 52504}, 52507, 52509, 52516,
+ 52520, 52524, 52537, 52572, 52576, 52580, {f: 2, c: 52588}, 52591, 52593,
+ 52600, 52616, {f: 2, c: 52628}, 52632, 52636, {f: 2, c: 52644}, 52647,
+ 52649, 52656, 52676, 52684, 52688, 52712, 52716, 52720, {f: 2, c: 52728},
+ 52731, 52733, 52740, 52744, 52748, 52756, 52761, {f: 2, c: 52768}, 52772,
+ 52776, {f: 2, c: 52784}, 52787, 52789, {f: 2, c: 52824}, 52828,
+ {f: 3, c: 52831}, {f: 2, c: 52840}, 52843, 52845, {f: 2, c: 52852}, 52856,
+ 52860, {f: 2, c: 52868}, 52871, 52873, {f: 2, c: 52880}, 52884, 52888,
+ {f: 2, c: 52896}, {f: 3, c: 52899}, {f: 2, c: 52908}, 52929,
+ {f: 2, c: 52964}, 52968, {f: 2, c: 52971}, {f: 2, c: 52980},
+ {f: 3, c: 52983}, {f: 2, c: 52992}, 52996, 53000, {f: 2, c: 53008}, 53011,
+ 53013, 53020, 53024, 53028, {f: 2, c: 53036}, {f: 3, c: 53039}, 53048,
+ {f: 2, c: 53076}, 53080, 53084, {f: 2, c: 53092}, 53095, 53097,
+ {f: 2, c: 53104}, 53108, 53112, 53120, 53125, 53132, 53153, 53160, 53168,
+ 53188, {f: 2, c: 53216}, 53220, 53224, {f: 2, c: 53232}, 53235, 53237,
+ 53244, 53248, 53252, 53265, 53272, 53293, {f: 2, c: 53300}, 53304, 53308,
+ {f: 2, c: 53316}, 53319, 53321, 53328, 53332, 53336, 53344,
+ {f: 2, c: 53356}, 53360, 53364, {f: 2, c: 53372}, 53377, {f: 2, c: 53412},
+ 53416, 53420, {f: 2, c: 53428}, 53431, 53433, {f: 2, c: 53440}, 53444,
+ {f: 2, c: 53448}, {f: 2, c: 53456}, {f: 3, c: 53459}, {f: 2, c: 53468},
+ 53472, 53476, {f: 2, c: 53484}, {f: 3, c: 53487}, 53496, 53517,
+ {f: 2, c: 53552}, 53556, 53560, 53562, {f: 2, c: 53568}, {f: 3, c: 53571},
+ {f: 2, c: 53580}, 53584, 53588, {f: 2, c: 53596}, 53599, 53601, 53608,
+ 53612, 53628, 53636, 53640, {f: 2, c: 53664}, 53668, 53672,
+ {f: 2, c: 53680}, 53683, 53685, 53690, 53692, 53696, 53720, 53748, 53752,
+ 53767, 53769, 53776, {f: 2, c: 53804}, 53808, 53812, {f: 2, c: 53820},
+ 53823, 53825, 53832, 53852, 53860, {f: 2, c: 53888}, 53892, 53896,
+ {f: 2, c: 53904}, 53909, 53916, 53920, 53924, 53932, 53937,
+ {f: 2, c: 53944}, 53948, {f: 2, c: 53951}, 53954, {f: 2, c: 53960}, 53963,
+ 53972, 53976, 53980, {f: 2, c: 53988}, {f: 2, c: 54000}, 54004, 54008,
+ {f: 2, c: 54016}, 54019, 54021, {f: 3, c: 54028}, 54032, 54036, 54038,
+ {f: 2, c: 54044}, {f: 3, c: 54047}, 54053, {f: 2, c: 54056}, 54060, 54064,
+ {f: 2, c: 54072}, {f: 3, c: 54075}, {f: 2, c: 54084}, {f: 2, c: 54140},
+ 54144, 54148, {f: 2, c: 54156}, {f: 3, c: 54159}, {f: 2, c: 54168}, 54172,
+ 54176, {f: 2, c: 54184}, 54187, 54189, 54196, 54200, 54204,
+ {f: 2, c: 54212}, {f: 2, c: 54216}, 54224, 54232, 54241, 54243,
+ {f: 2, c: 54252}, 54256, 54260, {f: 2, c: 54268}, 54271, 54273, 54280,
+ 54301, 54336, 54340, 54364, 54368, 54372, 54381, 54383, {f: 2, c: 54392},
+ 54396, {f: 2, c: 54399}, 54402, {f: 2, c: 54408}, 54411, 54413, 54420,
+ 54441, 54476, 54480, 54484, 54492, 54495, 54504, 54508, 54512, 54520,
+ 54523, 54525, 54532, 54536, 54540, {f: 2, c: 54548}, 54551,
+ {f: 2, c: 54588}, 54592, 54596, {f: 2, c: 54604}, 54607, 54609,
+ {f: 2, c: 54616}, 54620, 54624, 54629, {f: 2, c: 54632}, 54635, 54637,
+ {f: 2, c: 54644}, 54648, 54652, {f: 2, c: 54660}, {f: 3, c: 54663}, 54672,
+ 54693, {f: 2, c: 54728}, 54732, 54736, 54738, {f: 2, c: 54744}, 54747,
+ 54749, {f: 2, c: 54756}, 54760, 54764, {f: 2, c: 54772}, 54775, 54777,
+ {f: 2, c: 54784}, 54788, 54792, {f: 2, c: 54800}, {f: 3, c: 54803}, 54812,
+ 54816, 54820, 54829, {f: 2, c: 54840}, 54844, 54848, 54853,
+ {f: 2, c: 54856}, 54859, 54861, 54865, {f: 2, c: 54868}, 54872, 54876,
+ 54887, 54889, {f: 2, c: 54896}, 54900, 54915, 54917, {f: 2, c: 54924},
+ 54928, 54932, 54941, 54943, 54945, 54952, 54956, 54960, 54969, 54971,
+ {f: 2, c: 54980}, 54984, 54988, 54993, 54996, 54999, 55001, 55008, 55012,
+ 55016, 55024, 55029, {f: 2, c: 55036}, 55040, 55044, 55057,
+ {f: 2, c: 55064}, 55068, 55072, {f: 2, c: 55080}, 55083, 55085,
+ {f: 2, c: 55092}, 55096, 55100, 55108, 55111, 55113, {f: 2, c: 55120},
+ 55124, {f: 4, c: 55126}, {f: 2, c: 55136}, 55139, 55141, 55145, 55148,
+ 55152, 55156, {f: 2, c: 55164}, 55169, {f: 2, c: 55176}, 55180, 55184,
+ {f: 2, c: 55192}, 55195, 55197, 20285, 20339, 20551, 20729, 21152, 21487,
+ 21621, 21733, 22025, 23233, 23478, 26247, {f: 2, c: 26550}, 26607, 27468,
+ 29634, 30146, 31292, 33499, 33540, 34903, 34952, 35382, [36040, 63747],
+ 36303, 36603, 36838, 39381, 21051, 21364, 21508, 24682, 24932, 27580,
+ 29647, 33050, 35258, [12179, 35282], 38307, 20355, 21002, 22718, 22904,
+ 23014, [12082, 24178], 24185, 25031, 25536, 26438, 26604, 26751, 28567,
+ 30286, 30475, 30965, 31240, 31487, 31777, 32925, [12169, 33390], 33393,
+ 35563, 38291, 20075, 21917, 26359, 28212, 30883, 31469, 33883, 35088,
+ 34638, 38824, 21208, 22350, 22570, 23884, 24863, 25022, 25121, 25954,
+ 26577, 27204, 28187, [12130, 29976], 30131, 30435, 30640, 32058, 37039,
+ {f: 2, c: 37969}, 40853, 21283, 23724, 30002, 32987, 37440, 38296, 21083,
+ 22536, 23004, 23713, 23831, 24247, 24378, 24394, 24951, 27743, 30074,
+ 30086, 31968, 32115, 32177, 32652, 33108, 33313, 34193, 35137, 35611,
+ 37628, [38477, 64009], 40007, 20171, 20215, 20491, 20977, 22607, 24887,
+ 24894, 24936, 25913, 27114, 28433, 30117, 30342, 30422, 31623, 33445,
+ 33995, 37799, 38283, 21888, 23458, 22353, 31923, 32697, 37301, 20520,
+ 21435, 23621, 24040, 25298, 25454, 25818, 25831, 28192, 28844, 31067,
+ 36317, 36382, 36989, 37445, 37624, 20094, 20214, 20581, [12081, 24062],
+ 24314, 24838, 26967, 33137, 34388, 36423, 37749, 39467, 20062, 20625,
+ 26480, 26688, 20745, 21133, 21138, 27298, 30652, 37392, 40660, 21163,
+ 24623, 36850, 20552, 25001, 25581, 25802, 26684, 27268, 28608, 33160,
+ 35233, 38548, 22533, 29309, [12125, 29356], 29956, 32121, 32365, 32937,
+ [12178, 35211, 64010], 35700, 36963, 40273, 25225, 27770, 28500, 32080,
+ 32570, 35363, 20860, 24906, 31645, 35609, 37463, 37772, 20140, 20435,
+ 20510, 20670, 20742, 21185, 21197, 21375, 22384, 22659, 24218, 24465,
+ 24950, 25004, 25806, 25964, 26223, 26299, [26356, 63745], 26775, 28039,
+ 28805, 28913, 29855, 29861, 29898, 30169, 30828, 30956, 31455, 31478,
+ 32069, 32147, 32789, 32831, 33051, 33686, 35686, 36629, 36885, 37857,
+ 38915, 38968, 39514, 39912, 20418, 21843, 22586, [22865, 63753], 23395,
+ 23622, 24760, 25106, 26690, 26800, 26856, 28330, 30028, 30328, 30926,
+ 31293, 31995, 32363, 32380, 35336, 35489, 35903, 38542, 40388, 21476,
+ 21481, 21578, 21617, 22266, 22993, 23396, 23611, 24235, 25335, 25911,
+ 25925, 25970, 26272, 26543, 27073, 27837, 30204, 30352, 30590, 31295,
+ 32660, 32771, 32929, 33167, 33510, 33533, 33776, 34241, 34865, 34996,
+ 35493, 36764, 37678, 38599, 39015, [12220, 39640], [12238, 40723], 21741,
+ 26011, 26354, 26767, 31296, [12181, 35895], 40288, 22256, 22372, 23825,
+ 26118, 26801, 26829, 28414, 29736, 34974, 39908, 27752, [12219, 39592],
+ 20379, 20844, 20849, 21151, 23380, [12079, 24037], 24656, 24685, 25329,
+ 25511, 25915, 29657, 31354, 34467, 36002, 38799, [20018, 63749], 23521,
+ [12093, 25096], 26524, [12128, 29916], 31185, 33747, 35463, 35506, 36328,
+ 36942, 37707, 38982, [24275, 64011], 27112, 34303, 37101, 20896, 23448,
+ 23532, 24931, 26874, 27454, 28748, 29743, 29912, 31649, 32592, 33733,
+ 35264, 36011, 38364, 39208, 21038, 24669, 25324, 36866, 20362, 20809,
+ 21281, 22745, 24291, 26336, 27960, 28826, 29378, 29654, 31568, 33009,
+ 37979, 21350, 25499, 32619, 20054, 20608, 22602, 22750, 24618, 24871,
+ 25296, 27088, 39745, 23439, 32024, 32945, 36703, 20132, 20689, 21676,
+ 21932, 23308, 23968, 24039, 25898, 25934, 26657, 27211, 29409, 30350,
+ 30703, 32094, 32761, 33184, 34126, 34527, 36611, 36686, 37066, 39171,
+ 39509, 39851, 19992, 20037, 20061, 20167, 20465, 20855, 21246, 21312,
+ [12061, 21475], [21477, 63750], 21646, 22036, 22389, 22434, 23495, 23943,
+ 24272, 25084, 25304, 25937, 26552, 26601, 27083, 27472, 27590, 27628,
+ 27714, 28317, 28792, 29399, 29590, 29699, 30655, 30697, 31350, 32127,
+ 32777, [12165, 33276], 33285, 33290, 33503, 34914, 35635, 36092, 36544,
+ 36881, 37041, 37476, 37558, 39378, 39493, 40169, 40407,
+ [12244, 40860, 63751, 63752], 22283, 23616, 33738, 38816, 38827, 40628,
+ 21531, 31384, 32676, 35033, 36557, 37089, 22528, 23624, 25496, 31391,
+ 23470, [12088, 24339], 31353, 31406, 33422, 36524, 20518, 21048, 21240,
+ 21367, 22280, 25331, 25458, 27402, 28099, 30519, 21413, 29527, 34152,
+ 36470, 38357, 26426, 27331, 28528, 35437, 36556, 39243, 26231, 27512,
+ 36020, [12225, 39740], 21483, 22317, 22862, 25542, 27131, 29674, 30789,
+ 31418, 31429, 31998, 33909, 35215, 36211, 36917, 38312, 21243, 22343,
+ 30023, 31584, 33740, 37406, 27224, 20811, 21067, 21127, 25119, 26840,
+ 26997, 38553, 20677, 21156, 21220, 25027, [12100, 26020], 26681, 27135,
+ 29822, 31563, 33465, 33771, 35250, 35641, 36817, 39241, 20170, 22935,
+ 25810, 26129, 27278, 29748, 31105, 31165, 33449, {f: 2, c: 34942}, 35167,
+ 37670, 20235, 21450, 24613, 25201, 27762, 32026, 32102, 20120, 20834,
+ 30684, 32943, 20225, 20238, 20854, 20864, 21980, 22120, 22331, 22522,
+ 22524, 22804, 22855, 22931, 23492, 23696, 23822, [12080, 24049], 24190,
+ 24524, 25216, 26071, 26083, {f: 2, c: 26398}, 26462, 26827, 26820, 27231,
+ 27450, 27683, 27773, 27778, 28103, 29592, 29734, 29738, 29826, 29859,
+ 30072, 30079, 30849, 30959, 31041, {f: 2, c: 31047}, 31098, 31637, 32000,
+ 32186, 32648, 32774, 32813, 32908, 35352, 35663, [35912, 63744], 36215,
+ 37665, 37668, 39138, 39249, {f: 2, c: 39438}, 39525, 40594, 32202, 20342,
+ 21513, 25326, 26708, [12198, 37329, 63754], 21931, 20794, 23068, 25062,
+ [25295, 63835], 25343, 37027, [35582, 63837], 26262, 29014, 38627, 25423,
+ 25466, 21335, 26511, 26976, 28275, 30007, 32013, 34930, 22218, 23064,
+ 20035, 20839, [22856, 63756], 26608, 32784, [12069, 22899, 63873],
+ [24180, 63886], [25754, 63889], [31178, 63893], [24565, 63907], 24684,
+ 25288, [25467, 63908], [23527, 63839, 63914], 23511, 21162, 22900, 24361,
+ [24594, 63840], 29785, 39377, 28611, 33215, 36786, 24817, 33126,
+ [23615, 63933], 23273, 35365, [26491, 63944], [32016, 63951], 33021, 23612,
+ [27877, 63971], [21311, 63979], [28346, 63980], 22810, [33590, 63998],
+ [20025, 63838], 20150, 20294, 21934, 22296, 22727, 24406, 26039, 26086,
+ 27264, 27573, 28237, 30701, 31471, 31774, 32222, 34507, 34962, 37170,
+ 37723, 25787, 28606, 29562, 30136, 36948, 21846, 22349, 25018, 25812,
+ 26311, 28129, 28251, 28525, 28601, 30192, 32835, 33213, 34113, 35203,
+ 35527, 35674, 37663, 27795, 30035, 31572, 36367, 36957, 21776, 22530,
+ 22616, 24162, 25095, 25758, 26848, 30070, [31958, 64003], 34739, 40680,
+ 20195, 22408, 22382, [12068, 22823], 23565, 23729, 24118, 24453, 25140,
+ 25825, 29619, 33274, 34955, 36024, 38538, 40667, [23429, 64004], 24503,
+ 24755, 20498, [12049, 20992], 21040, 22294, 22581, 22615, 23566, 23648,
+ 23798, 23947, [24230, 64001], 24466, 24764, 25361, 25481, 25623, 26691,
+ 26873, 27330, 28120, 28193, 28372, 28644, 29182, 30428, 30585, 31153,
+ 31291, 33796, 35241, 36077, 36339, 36424, 36867, 36884, 36947, 37117,
+ 37709, 38518, 38876, 27602, 28678, 29272, 29346, 29544, 30563, 31167,
+ 31716, 32411, [35712, 63834], 22697, 24775, 25958, 26109, 26302, 27788,
+ 28958, 29129, 35930, 38931, 20077, 31361, 20189, 20908, 20941, 21205,
+ 21516, 24999, 26481, 26704, 26847, [27934, 64005], 28540, 30140, 30643,
+ 31461, 33012, 33891, 37509, 20828, [12099, 26007], 26460, 26515, 30168,
+ 31431, 33651, [12182, 35910], 36887, 38957, 23663, 33216, 33434, 36929,
+ 36975, 37389, 24471, 23965, 27225, 29128, 30331, 31561, 34276, 35588,
+ 37159, 39472, [21895, 63755], [25078, 63757], [30313, 63758],
+ [32645, 63759], [34367, 63760], [34746, 63761], [35064, 63762],
+ [37007, 63763], [27931, 63765], [28889, 63766], [29662, 63767], 32097,
+ [33853, 63768], [37226, 63769], [39409, 63770], [20098, 63771],
+ [21365, 63772], [27396, 63773], 27410, 28734, [29211, 63774],
+ [34349, 63775], [40478, 63776], 21068, 36771, [23888, 63777], 25829, 25900,
+ 27414, [28651, 63778], 31811, 32412, [34253, 63779], [35172, 63780], 35261,
+ [25289, 63781], [33240, 63782], [34847, 63783], [24266, 63784],
+ [26391, 63785], [28010, 63786], [29436, 63787], 29701, 29807, 34690,
+ [37086, 63788], [20358, 63789], 23821, 24480, 33802, [20919, 63790],
+ [25504, 63861], [30053, 63862], [20142, 63863], 20486, [20841, 63864],
+ [20937, 63865], [26753, 63866], 27153, 31918, 31921, [31975, 63867],
+ [33391, 63868], [35538, 63869], 36635, [37327, 63870], 20406, 20791,
+ [21237, 63871], [21570, 63872], [24300, 63874], 24942, 25150,
+ [26053, 63875], 27354, [28670, 63876], [31018, 63877], 34268, 34851,
+ [38317, 63878], 39522, [39530, 63879], [40599, 63880], [40654, 63881],
+ [12050, 21147, 63882], [26310, 63883], [27511, 63884], 28701, 31019,
+ [36706, 63885], 38722, [24976, 63887], [25088, 63888], 25891,
+ [28451, 63890], [29001, 63891], [29833, 63892], [32244, 63894],
+ [32879, 63895], [34030, 63897], [36646, 63896], [36899, 63898],
+ [37706, 63899], 20925, [21015, 63900], [21155, 63901], 27916,
+ [28872, 63903], [35010, 63904], [24265, 63906], 25986, [27566, 63909],
+ 28610, [31806, 63910], [29557, 63911], [20196, 63912], 20278,
+ [22265, 63913], 23738, [23994, 63915], [24604, 63916], [29618, 63917],
+ 31533, [32666, 63919], 32718, [32838, 63920], 36894, [37428, 63921],
+ [38646, 63922], [38728, 63923], [38936, 63924], 40801, [20363, 63925],
+ 28583, [31150, 63926], [37300, 63927], [38583, 63928], [21214, 63791],
+ 25736, [25796, 63792], [27347, 63793], 28510, 28696, [29200, 63794],
+ [30439, 63795], [12156, 32769, 63796], [34310, 63797], [34396, 63798],
+ [36335, 63799], 36613, [38706, 63800], [39791, 63801], [40442, 63802],
+ [12228, 40565], [30860, 63803], [31103, 63804], [32160, 63805],
+ [33737, 63806], [37636, 63807], [12229, 40575, 63808], 40595,
+ [35542, 63809], [22751, 63810], [24324, 63811], 26407, 28711, 29903,
+ [31840, 63812], [32894, 63813], 20769, 28712, [29282, 63814],
+ [30922, 63815], [36034, 63816], 36058, 36084, [38647, 63817],
+ [20102, 63930], [20698, 63931], [23534, 63932], 24278, [26009, 63934],
+ [29134, 63936], [30274, 63937], 30637, 32842, [34044, 63938],
+ [36988, 63939], 39719, [12243, 40845, 63940], [22744, 63818], 23105,
+ [23650, 63819], [27155, 63820], [28122, 63821], [28431, 63822], 30267,
+ [32047, 63823], [32311, 63824], 34078, 35128, 37860, [38475, 63825],
+ [21129, 63943], 26066, [26611, 63945], 27060, [27969, 63946],
+ [28316, 63947], 28687, [29705, 63948], 29792, [30041, 63949], 30244,
+ [30827, 63950], 35628, [39006, 63952], [20845, 63953], [25134, 63954],
+ [38520, 63955], 20374, [20523, 63956], [23833, 63957], [28138, 63958],
+ 32184, [36650, 63959], [24459, 63960], [24900, 63961], [26647, 63962],
+ [38534, 63964], [21202, 63826], [32907, 63827], [20956, 63828],
+ [20940, 63829], 26974, [31260, 63830], [32190, 63831], [33777, 63832],
+ [38517, 63833], 20442, [21033, 63965], 21400, [21519, 63966], 21774,
+ [23653, 63967], 24743, [26446, 63969], [26792, 63970], 28012, 29313, 29432,
+ [29702, 63972], 29827, [30178, 63973], 31852, [32633, 63974], 32696, 33673,
+ [35023, 63975], [35041, 63976], [12197, 37324, 63977], 37328,
+ [38626, 63978], 39881, [21533, 63981], 28542, [29136, 63982],
+ [29848, 63983], [34298, 63984], 36522, [38563, 63985], [40023, 63986],
+ [40607, 63987], [26519, 63988], [28107, 63989], 29747, [33256, 63990],
+ 38678, 30764, [12148, 31435, 63991], [31520, 63992], [31890, 63993], 25705,
+ 29802, 30194, 30908, 30952, [12218, 39340], 39764, [12231, 40635], 23518,
+ 24149, 28448, 33180, 33707, 37000, 19975, 21325, 23081, 24018, 24398,
+ 24930, 25405, 26217, 26364, 28415, 28459, 28771, 30622, 33836, 34067,
+ 34875, 36627, 39237, 39995, 21788, 25273, 26411, 27819, 33545, 35178,
+ 38778, 20129, 22916, {f: 2, c: 24536}, 26395, 32178, 32596, 33426, 33579,
+ 33725, 36638, 37017, 22475, 22969, 23186, 23504, 26151, 26522, 26757,
+ 27599, 29028, 32629, 36023, 36067, 36993, 39749, 33032, 35978, 38476,
+ 39488, [12230, 40613], 23391, 27667, 29467, 30450, 30431, 33804, 20906,
+ 35219, 20813, 20885, 21193, 26825, 27796, 30468, 30496, 32191, 32236,
+ [12207, 38754], 40629, 28357, 34065, 20901, 21517, 21629, 26126, 26269,
+ 26919, 28319, [12139, 30399], 30609, 33559, 33986, 34719, 37225, 37528,
+ 40180, 34946, 20398, 20882, 21215, 22982, 24125, 24917, {f: 2, c: 25720},
+ 26286, 26576, 27169, 27597, [12113, 27611], 29279, 29281, 29761, 30520,
+ [12141, 30683], 32791, 33468, 33541, 35584, 35624, 35980, [12106, 26408],
+ 27792, 29287, [12140, 30446], 30566, 31302, 40361, 27519, 27794, 22818,
+ 26406, 33945, 21359, 22675, 22937, 24287, 25551, 26164, 26483, 28218,
+ 29483, 31447, 33495, 37672, 21209, 24043, 25006, 25035, 25098, 25287,
+ 25771, [12102, 26080], 26969, 27494, [12111, 27595], 28961, 29687, 30045,
+ 32326, 33310, 33538, 34154, 35491, 36031, 38695, 40289, 22696, 40664,
+ 20497, 21006, 21563, 21839, [12098, 25991], 27766, {f: 2, c: 32010}, 32862,
+ 34442, [12200, 38272], 38639, 21247, 27797, 29289, 21619, 23194, 23614,
+ 23883, 24396, 24494, 26410, 26806, 26979, 28220, 28228, 30473,
+ [12150, 31859], 32654, 34183, 35598, 36855, 38753, 40692, 23735, 24758,
+ 24845, 25003, 25935, {f: 2, c: 26107}, 27665, 27887, 29599, 29641, 32225,
+ 38292, 23494, 34588, 35600, 21085, 21338, 25293, 25615, 25778, 26420,
+ 27192, 27850, 29632, 29854, 31636, 31893, 32283, 33162, 33334, 34180,
+ 36843, 38649, 39361, 20276, 21322, 21453, 21467, 25292, 25644, 25856,
+ 26001, 27075, 27886, 28504, 29677, 30036, 30242, 30436, 30460, 30928,
+ [30971, 63844], 31020, 32070, 33324, 34784, 36820, 38930, 39151, 21187,
+ 25300, 25765, 28196, 28497, 30332, 36299, 37297, 37474, 39662, 39747,
+ 20515, 20621, 22346, 22952, 23592, 24135, 24439, 25151, 25918,
+ [12101, 26041], 26049, 26121, 26507, 27036, 28354, 30917, 32033, 32938,
+ 33152, 33323, 33459, 33953, 34444, 35370, 35607, 37030, 38450, 40848,
+ 20493, 20467, 22521, 24472, 25308, 25490, 26479, 28227, 28953, 30403,
+ 32972, 32986, {f: 2, c: 35060}, 35097, 36064, 36649, 37197, 38506, 20271,
+ 20336, 24091, 26575, 26658, [12137, 30333], 30334, 39748, 24161, 27146,
+ 29033, 29140, 30058, 32321, 34115, 34281, 39132, 20240, 31567, 32624,
+ 38309, 20961, 24070, 26805, 27710, 27726, 27867, 29359, 31684, 33539,
+ 27861, 29754, 20731, 21128, 22721, 25816, 27287, 29863, 30294, 30887,
+ 34327, 38370, 38713, 21342, 24321, 35722, 36776, 36783, 37002, 21029,
+ 30629, 40009, 40712, 19993, 20482, 20853, 23643, 24183, 26142, 26170,
+ 26564, 26821, 28851, 29953, 30149, 31177, 31453, 36647, 39200, 39432,
+ 20445, 22561, 22577, 23542, 26222, 27493, 27921, 28282, 28541, 29668,
+ 29995, 33769, 35036, 35091, 35676, 36628, 20239, 20693, 21264,
+ [12056, 21340], 23443, [24489, 63846], 26381, 31119, 33145, 33583, 34068,
+ 35079, 35206, 36665, [36667, 64007], 39333, 39954, 26412, 20086, 20472,
+ 22857, 23553, {f: 2, c: 23791}, 25447, 26834, 28925, 29090, 29739, 32299,
+ 34028, 34562, 36898, 37586, 40179, [19981, 63847], 20184, 20463, 20613,
+ 21078, 21103, 21542, 21648, 22496, 22827, 23142, 23386, 23413, 23500,
+ 24220, 25206, 25975, 26023, 28014, 28325, [12119, 29238], 31526, 31807,
+ [12152, 32566], {f: 2, c: 33104}, 33178, 33344, 33433, 33705, 35331, 36000,
+ 36070, 36091, 36212, 36282, 37096, 37340, [12201, 38428], 38468, 39385,
+ 40167, [21271, 63843], 20998, 21545, 22132, 22707, 22868, 22894, 24575,
+ 24996, 25198, 26128, 27774, 28954, 30406, 31881, 31966, 32027, 33452,
+ 36033, 38640, 20315, 24343, 24447, 25282, 23849, 26379, 26842, 30844,
+ 32323, 40300, 19989, 20633, [12052, 21269], 21290, 21329, 22915, 23138,
+ 24199, 24754, 24970, 25161, 25209, 26000, 26503, 27047, [12112, 27604],
+ {f: 3, c: 27606}, 27832, 29749, 30202, 30738, 30865, 31189, 31192, 31875,
+ 32203, 32737, 32933, 33086, 33218, 33778, 34586, 35048, 35513, 35692,
+ 36027, 37145, [12206, 38750], [12214, 39131], [12240, 40763], 22188, 23338,
+ 24428, 25996, 27315, 27567, 27996, 28657, 28693, 29277, 29613, 36007,
+ 36051, 38971, 24977, 27703, 32856, 39425, 20045, 20107, 20123, 20181,
+ 20282, 20284, 20351, 20447, 20735, 21490, 21496, 21766, 21987, 22235,
+ [12064, 22763], 22882, 23057, 23531, 23546, 23556, 24051, 24107, 24473,
+ 24605, 25448, 26012, 26031, 26614, 26619, 26797, 27515, 27801, 27863,
+ 28195, 28681, 29509, 30722, 31038, 31040, 31072, 31169, 31721, 32023,
+ 32114, 32902, 33293, 33678, 34001, 34503, 35039, 35408, 35422, 35613,
+ 36060, 36198, 36781, 37034, 39164, 39391, 40605, 21066, 26388, 20632,
+ 21034, [12077, 23665], 25955, 27733, 29642, 29987, 30109, 31639, 33948,
+ 37240, 38704, 20087, 25746, [27578, 63856], 29022, 34217, 19977, 26441,
+ 26862, 28183, 33439, 34072, 34923, 25591, 28545, 37394, 39087, 19978,
+ 20663, 20687, 20767, 21830, 21930, 22039, 23360, 23577, 23776, 24120,
+ 24202, 24224, 24258, 24819, 26705, 27233, 28248, 29245, 29248,
+ [29376, 63994], 30456, 31077, 31665, 32724, 35059, 35316, 35443, 35937,
+ 36062, 38684, [22622, 63852], 29885, 36093, 21959, 31329, [32034, 63850],
+ [12170, 33394], 29298, [12131, 29983], 29989, 31513, 22661, 22779, 23996,
+ 24207, 24246, 24464, 24661, 25234, 25471, 25933, 26257, 26329, 26360,
+ 26646, 26866, 29312, 29790, 31598, 32110, 32214, 32626, 32997, 33298,
+ 34223, 35199, 35475, 36893, 37604, [12233, 40653], [12239, 40736],
+ [12067, 22805], 22893, 24109, 24796, 26132, 26227, 26512, 27728, 28101,
+ 28511, [12143, 30707], 30889, 33990, 37323, 37675, 20185, 20682, 20808,
+ 21892, 23307, 23459, 25159, 25982, 26059, 28210, 29053, 29697, 29764,
+ 29831, 29887, 30316, 31146, 32218, 32341, 32680, 33146, 33203, 33337,
+ 34330, 34796, 35445, 36323, 36984, 37521, 37925, 39245, 39854, 21352,
+ 23633, 26964, 27844, 27945, 28203, [12166, 33292], 34203, 35131, 35373,
+ [35498, 63855, 63905], 38634, 40807, 21089, 26297, 27570, 32406, 34814,
+ 36109, 38275, 38493, 25885, 28041, 29166, 22478, 22995, 23468, 24615,
+ 24826, 25104, 26143, 26207, 29481, 29689, 30427, [30465, 63853], 31596,
+ 32854, 32882, 33125, 35488, 37266, 19990, 21218, 27506, 27927, 31237,
+ 31545, 32048, 36016, 21484, 22063, 22609, 23477, [12073, 23567], 23569,
+ 24034, 25152, 25475, 25620, 26157, 26803, 27836, 28040, 28335, 28703,
+ 28836, 29138, 29990, 30095, 30094, 30233, 31505, 31712, 31787, 32032,
+ 32057, 34092, 34157, 34311, 35380, 36877, 36961, 37045, 37559, 38902,
+ 39479, 20439, 23660, 26463, 28049, 31903, 32396, 35606, 36118, 36895,
+ 23403, 24061, 25613, 33984, 36956, 39137, [29575, 63841, 63963], 23435,
+ 24730, 26494, 28126, 35359, 35494, 36865, 38924, 21047, 28753, 30862,
+ 37782, 34928, 37335, 20462, 21463, 22013, 22234, 22402, 22781, 23234,
+ 23432, 23723, 23744, 24101, 24833, 25101, [12095, 25163], 25480, 25628,
+ 25910, [25976, 63849], 27193, 27530, [12116, 27700], 27929, 28465, 29159,
+ 29417, 29560, 29703, 29874, 30246, 30561, 31168, 31319, 31466, 31929,
+ 32143, 32172, 32353, 32670, 33065, 33585, 33936, 34010, 34282, 34966,
+ 35504, 35728, 36664, 36930, 36995, 37228, 37526, 37561, 38539,
+ {f: 2, c: 38567}, 38614, 38656, 38920, [12216, 39318], 39635, 39706, 21460,
+ 22654, 22809, 23408, 23487, 28113, 28506, 29087, 29729, 29881, 32901,
+ 33789, 24033, 24455, 24490, 24642, 26092, 26642, 26991, 27219, 27529,
+ 27957, 28147, 29667, 30462, 30636, 31565, 32020, 33059, 33308, 33600,
+ 34036, 34147, 35426, 35524, 37255, 37662, 38918, 39348, 25100, 34899,
+ 36848, 37477, 23815, 23847, 23913, 29791, 33181, 34664, 28629,
+ [25342, 63859], 32722, 35126, 35186, 19998, 20056, 20711, 21213, 21319,
+ 25215, 26119, 32361, 34821, 38494, 20365, 21273, 22070, 22987, 23204,
+ [12075, 23608], 23630, 23629, 24066, 24337, 24643, 26045, 26159, 26178,
+ 26558, 26612, 29468, [12142, 30690], [12144, 31034], 32709, 33940, 33997,
+ 35222, 35430, 35433, 35553, [12183, 35925], 35962, 22516, 23508, 24335,
+ 24687, 25325, 26893, 27542, 28252, 29060, 31698, 34645, [35672, 63996],
+ 36606, [12215, 39135], 39166, 20280, 20353, 20449, 21627, 23072, 23480,
+ 24892, 26032, 26216, 29180, 30003, 31070, 32051, 33102, [12162, 33251],
+ 33688, 34218, 34254, 34563, 35338, [12189, 36523], [12191, 36763], 36805,
+ 22833, 23460, 23526, 24713, 23529, 23563, [12092, 24515], 27777, 28145,
+ 28683, 29978, 33455, 35574, [20160, 63997], [12055, 21313], 38617,
+ [12114, 27663], 20126, 20420, 20818, 21854, 23077, 23784, 25105,
+ [12123, 29273], 33469, 33706, 34558, 34905, 35357, 38463, 38597, 39187,
+ 40201, 40285, 22538, 23731, 23997, 24132, [24801, 63929], 24853, 25569,
+ [27138, 63764, 63836, 63935], 28197, 37122, 37716, 38990, 39952, 40823,
+ 23433, 23736, 25353, 26191, 26696, 30524, 38593, 38797, 38996, 39839,
+ 26017, 35585, 36555, 38332, 21813, 23721, 24022, 24245, 26263, 30284,
+ 33780, 38343, 22739, 25276, 29390, 40232, 20208, 22830, 24591, 26171,
+ 27523, 31207, 40230, 21395, 21696, 22467, 23830, 24859, 26326, 28079,
+ 30861, 33406, 38552, 38724, 21380, 25212, 25494, 28082, 32266, 33099,
+ 38989, 27387, 32588, 40367, 40474, 20063, 20539, 20918, 22812, 24825,
+ 25590, 26928, 29242, 32822, 37326, 24369, 32004, [33509, 63860], 33903,
+ 33979, 34277, 36493, 20335, 22756, 23363, 24665, 25562, 25880, 25965,
+ 26264, 26954, 27171, 27915, 28673, 29036, 30162, 30221, 31155, 31344,
+ [12154, 32650], 35140, 35731, 37312, 38525, 39178, 22276, 24481, 26044,
+ 28417, 30208, 31142, 35486, 39341, [12226, 39770], 40812, 20740, 25014,
+ 25233, 27277, 33222, 20547, 22576, 24422, 28937, [12180, 35328], 35578,
+ 23420, 34326, 20474, 20796, 22196, 22852, 25513, 28153, 23978, 26989,
+ 20870, 20104, 20313, 22914, 27487, 27741, 29877, 30998, 33287, 33349,
+ 33593, 36671, 36701, 39192, 20134, 22495, 24441, [26131, 63968], 30123,
+ 32377, 35695, 36870, 39515, 22181, 22567, 23032, 23071, 23476, 24310,
+ 25424, 25403, 26941, 27783, 27839, 28046, 28051, 28149, 28436, 28895,
+ 28982, 29017, 29123, 29141, 30799, 30831, 31605, 32227, 32303, 34893,
+ 36575, 37467, 40182, 24709, 28037, 29105, 38321, 21421, 26579, 28814,
+ 28976, 29744, 33398, 33490, 38331, 39653, 40573, 26308, 29121,
+ [33865, 63854], 22603, 23992, 24433, 26144, 26254, 27001, 27054, 27704,
+ 27891, 28214, 28481, 28634, 28699, 28719, 29008, 29151, 29552, 29787,
+ 29908, 30408, 31310, 32403, 33521, 35424, 36814, 37704, 38681, 20034,
+ 20522, 21000, 21473, 26355, 27757, 28618, 29450, 30591, 31330, 33454,
+ 34269, 34306, 35028, 35427, 35709, 35947, 37555, 38675, 38928, 20116,
+ 20237, 20425, 20658, 21320, 21566, 21555, 21978, 22626, 22714, 22887,
+ 23067, 23524, 24735, 25034, 25942, 26111, 26212, 26791, 27738, 28595,
+ 28879, 29100, 29522, 31613, 34568, 35492, 39986, 40711, 23627, 27779,
+ 29508, [12127, 29577], 37434, 28331, 29797, 30239, 31337, 32277, 34314,
+ 20800, 22725, 25793, 29934, 29973, 30320, 32705, 37013, 38605, 39252,
+ 28198, [12129, 29926], {f: 2, c: 31401}, 33253, 34521, 34680, 35355, 23113,
+ 23436, 23451, 26785, 26880, 28003, 29609, 29715, 29740, 30871, 32233,
+ 32747, 33048, 33109, 33694, 35916, [38446, 63942], 38929, [12104, 26352],
+ 24448, 26106, 26505, 27754, 29579, 20525, 23043, 27498, 30702, 22806,
+ 23916, 24013, 29477, 30031, 20709, 20985, 22575, 22829, 22934, 23002,
+ 23525, 23970, 25303, 25622, 25747, 25854, 26332, 27208, 29183, 29796,
+ 31368, 31407, 32327, 32350, 32768, 33136, 34799, 35201, 35616, 36953,
+ 36992, 39250, 24958, 27442, 28020, 32287, 35109, 36785, 20433, 20653,
+ 20887, 21191, 22471, 22665, 23481, 24248, 24898, 27029, 28044, 28263,
+ 28342, 29076, 29794, [12132, 29992], 29996, 32883, 33592, 33993, 36362,
+ 37780, 37854, 20110, 20305, 20598, 20778, [12060, 21448], 21451, 21491,
+ 23431, 23507, 23588, 24858, 24962, 26100, [12124, 29275], 29591, 29760,
+ 30402, 31056, 31121, 31161, 32006, [12155, 32701], 33419, 34261, 34398,
+ 36802, 36935, 37109, 37354, 38533, [12204, 38632], 38633, 21206, 24423,
+ 26093, 26161, 26671, 29020, 31286, 37057, 38922, 20113, 27218, 27550,
+ 28560, 29065, 32792, 33464, 34131, 36939, 38549, 38642, 38907, 34074,
+ 39729, 20112, 29066, 38596, 20803, 21407, 21729, 22291, 22290, 22435,
+ 23195, 23236, 23491, 24616, 24895, 25588, 27781, 27961, 28274, 28304,
+ 29232, 29503, 29783, 33489, 34945, 36677, 36960, 38498, 39000, 40219,
+ [12105, 26376], 36234, 37470, 20301, 20553, 20702, 21361, 22285, 22996,
+ 23041, 23561, 24944, 26256, 28205, 29234, 29771, 32239, 32963, 33806,
+ 33894, 34111, 34655, 34907, 35096, 35586, 36949, [12209, 38859], 39759,
+ 20083, 20369, 20754, 20842, 21807, 21929, 23418, 23461, {f: 2, c: 24188},
+ 24254, 24736, 24799, {f: 2, c: 24840}, 25540, 25912, 26377, 26580, 26586,
+ {f: 2, c: 26977}, 27833, 27943, 28216, 28641, {f: 2, c: 29494}, 29788,
+ 30001, 30290, 32173, 33278, 33848, 35029, 35480, 35547, 35565, 36400,
+ 36418, 36938, 36926, 36986, [12195, 37193], 37321, 37742, 22537, 27603,
+ [12161, 32905], 32946, 20801, 22891, 23609, 28516, 29607, 32996, 36103,
+ 37399, 38287, [12160, 32895], 25102, 28700, 32104, 34701, 22432, 24681,
+ 24903, 27575, 35518, 37504, 38577, [12036, 20057], 21535, 28139, 34093,
+ 38512, [12211, 38899], 39150, 25558, 27875, [12194, 37009], 20957, 25033,
+ 33210, 40441, 20381, 20506, 20736, 23452, 24847, 25087, 25836, 26885,
+ 27589, 30097, 30691, 32681, 33380, 34191, 34811, [12176, 34915], 35516,
+ 35696, 37291, [12038, 20108], 20197, 20234, 22839, 23016, 24050, 24347,
+ 24411, 24609, 29246, 29669, [30064, 63842], 30157, 31227, [12157, 32780],
+ [12159, 32819], 32900, 33505, 33617, 36029, 36019, 36999, 39156, 39180,
+ 28727, 30410, 32714, 32716, 32764, 35610, [12040, 20154], 20161, 20995,
+ 21360, [21693, 63902], 22240, 23035, 23493, 24341, 24525, 28270, 32106,
+ 33589, 34451, 35469, 38765, 38775, [12032, 19968], 20314, 20350, 22777,
+ [12103, 26085], 28322, 36920, 37808, 39353, 20219, 22764, 22922, 23001,
+ 24641, 31252, 33615, 36035, [12042, 20837], 21316, 20173, 21097, 23381,
+ 33471, 20180, [21050, 63999], 21672, 22985, 23039, [12070, 23376], 23383,
+ 23388, 24675, 24904, 28363, [28825, 63995], 29038, 29574, 29943, 30133,
+ 30913, 32043, 32773, [12163, 33258], 33576, 34071, 34249, 35566, 36039,
+ 38604, 20316, 21242, 22204, 26027, 26152, 28796, 28856, 29237, 32189,
+ 33421, 37196, 38592, 40306, 23409, 26855, 27544, 28538, 30430, 23697,
+ 26283, 28507, 31668, 31786, 34870, 38620, 19976, 20183, 21280, 22580,
+ 22715, 22767, 22892, 23559, 24115, 24196, 24373, 25484, 26290, 26454,
+ 27167, 27299, 27404, 28479, 29254, 29520, 29835, 31456, 31911, 33144,
+ 33247, 33255, 33674, 33900, 34083, 34196, 34255, 35037, 36115, 37292,
+ [12199, 38263], 38556, 20877, 21705, 22312, 23472, 25165, 26448, 26685,
+ 26771, 28221, 28371, 28797, 32289, 35009, 36001, 36617, 40779, 40782,
+ 29229, 31631, 35533, 37658, 20295, 20302, 20786, 21632, 22992, 24213,
+ 25269, 26485, 26990, 27159, 27822, 28186, 29401, 29482, 30141, 31672,
+ 32053, 33511, 33785, 33879, 34295, 35419, 36015, 36487, 36889, 37048,
+ 38606, 40799, 21219, 21514, 23265, 23490, 25688, 25973, 28404, 29380,
+ 30340, 31309, 31515, 31821, 32318, 32735, 33659, 35627, 36042,
+ [12186, 36196], 36321, 36447, 36842, 36857, 36969, 37841, 20291, 20346,
+ 20659, 20840, 20856, 21069, 21098, 22625, 22652, 22880, 23560, 23637,
+ 24283, 24731, 25136, 26643, 27583, 27656, 28593, 29006, 29728,
+ [12133, 30000], 30008, 30033, 30322, 31564, 31627, 31661, 31686, 32399,
+ 35438, 36670, 36681, 37439, 37523, 37666, 37931, 38651, 39002, 39019,
+ 39198, [20999, 64000], 25130, 25240, 27993, 30308, 31434, 31680, 32118,
+ 21344, 23742, 24215, 28472, 28857, 31896, 38673, 39822, 40670, 25509,
+ 25722, 34678, 19969, 20117, 20141, 20572, 20597, 21576, 22979, 23450,
+ 24128, 24237, 24311, 24449, 24773, 25402, 25919, 25972, 26060, 26230,
+ 26232, 26622, 26984, 27273, 27491, 27712, 28096, 28136, 28191, 28254,
+ 28702, 28833, 29582, 29693, 30010, 30555, 30855, 31118, 31243, 31357,
+ 31934, 32142, 33351, 35330, 35562, 35998, 37165, 37194, 37336, 37478,
+ 37580, 37664, 38662, 38742, 38748, 38914, [12237, 40718], 21046, 21137,
+ 21884, 22564, 24093, 24351, 24716, 25552, 26799, 28639, 31085, 31532,
+ 33229, 34234, 35069, 35576, 36420, 37261, 38500, 38555, 38717, 38988,
+ [12241, 40778], 20430, 20806, 20939, 21161, 22066, 24340, 24427, 25514,
+ 25805, 26089, 26177, 26362, 26361, 26397, 26781, 26839, 27133, 28437,
+ 28526, 29031, 29157, [12118, 29226], 29866, 30522, 31062, 31066, 31199,
+ 31264, 31381, 31895, 31967, 32068, 32368, 32903, 34299, 34468, 35412,
+ 35519, 36249, 36481, 36896, 36973, 37347, 38459, 38613, [12227, 40165],
+ 26063, 31751, [12188, 36275], 37827, 23384, 23562, 21330, 25305, 29469,
+ 20519, 23447, 24478, 24752, 24939, 26837, 28121, 29742, 31278, 32066,
+ 32156, 32305, 33131, 36394, 36405, 37758, 37912, 20304, 22352, 24038,
+ 24231, 25387, 32618, 20027, 20303, 20367, 20570, 23005, 32964, 21610,
+ 21608, 22014, 22863, 23449, 24030, 24282, 26205, 26417, 26609, 26666,
+ 27880, 27954, 28234, 28557, 28855, 29664, 30087, 31820, 32002, 32044,
+ 32162, [12168, 33311], 34523, 35387, 35461, [12187, 36208], 36490, 36659,
+ 36913, 37198, 37202, 37956, 39376, [12149, 31481], 31909, 20426, 20737,
+ 20934, 22472, 23535, 23803, 26201, 27197, 27994, 28310, 28652, 28940,
+ 30063, 31459, 34850, 36897, 36981, 38603, 39423, 33537, 20013, 20210,
+ 34886, 37325, 21373, 27355, 26987, 27713, 33914, 22686, 24974, 26366,
+ 25327, 28893, 29969, 30151, 32338, 33976, 35657, 36104, 20043, 21482,
+ 21675, 22320, 22336, 24535, 25345, 25351, 25711, [12096, 25903], 26088,
+ 26234, 26525, 26547, [12108, 27490], 27744, 27802, 28460, 30693, 30757,
+ 31049, 31063, 32025, 32930, 33026, [12164, 33267], 33437, 33463, 34584,
+ 35468, 36100, 36286, 36978, 30452, 31257, 31287, 32340, 32887, 21767,
+ 21972, 22645, 25391, 25634, 26185, 26187, 26733, 27035, 27524, 27941,
+ 28337, 29645, 29800, 29857, 30043, 30137, 30433, 30494, 30603, 31206,
+ 32265, 32285, 33275, 34095, 34967, 35386, 36049, 36587,
+ [12192, 36784, 63857], 36914, 37805, 38499, 38515, 38663, 20356, 21489,
+ 23018, 23241, 24089, 26702, 29894, 30142, 31209, 31378, 33187, 34541,
+ 36074, 36300, 36845, 26015, 26389, 22519, 28503, 32221, 36655, 37878,
+ 38598, 24501, 25074, 28548, 19988, 20376, 20511, 21449, 21983, 23919,
+ 24046, 27425, 27492, 30923, 31642, 36425, [12190, 36554, 63746], 36974,
+ 25417, 25662, 30528, 31364, 37679, 38015, 40810, 25776, 28591, 29158,
+ 29864, 29914, 31428, 31762, 32386, 31922, 32408, 35738, 36106, 38013,
+ 39184, 39244, 21049, 23519, 25830, 26413, 32046, 20717, [21443, 63851],
+ 22649, {f: 2, c: 24920}, 25082, 26028, 31449, 35730, 35734, 20489, 20513,
+ 21109, 21809, 23100, 24288, 24432, 24884, 25950, 26124, 26166, 26274,
+ 27085, 28356, 28466, 29462, 30241, 31379, 33081, 33369, 33750, 33980,
+ 20661, 22512, 23488, 23528, 24425, 25505, 30758, 32181, 33756, 34081,
+ 37319, 37365, 20874, 26613, 31574, 36012, 20932, 22971, 24765, 34389,
+ 20508, 21076, 23610, 24957, 25114, [25299, 64002], 25842, 26021, 28364,
+ 30240, 33034, 36448, 38495, 38587, 20191, 21315, 21912, 22825, 24029,
+ 25797, 27849, 28154, 29588, 31359, [12167, 33307], 34214, 36068, 36368,
+ 36983, 37351, 38369, 38433, 38854, 20984, 21746, 21894, 24505, 25764,
+ 28552, 32180, 36639, 36685, 37941, 20681, 23574, 27838, 28155, 29979,
+ 30651, 31805, 31844, 35449, 35522, 22558, 22974, 24086, 25463, 29266,
+ 30090, 30571, 35548, 36028, 36626, 24307, 26228, 28152, 32893, 33729,
+ 35531, [12205, 38737], 39894, 21059, 26367, 28053, 28399, 32224, 35558,
+ 36910, 36958, 39636, 21021, 21119, 21736, 24980, 25220, 25307, 26786,
+ 26898, 26970, 27189, 28818, 28966, 30813, 30977, 30990, 31186, 31245,
+ 32918, [12171, 33400], 33493, 33609, 34121, 35970, 36229, 37218, 37259,
+ 37294, 20419, 22225, 29165, 30679, 34560, 35320, [12072, 23544], 24534,
+ 26449, 37032, 21474, 22618, 23541, 24740, 24961, 25696, 32317, 32880,
+ 34085, 37507, 25774, 20652, 23828, 26368, 22684, 25277, 25512, 26894,
+ 27000, 27166, 28267, 30394, 31179, 33467, 33833, 35535, 36264, 36861,
+ 37138, 37195, 37276, 37648, 37656, 37786, 38619, 39478, 39949, 19985,
+ 30044, 31069, 31482, 31569, 31689, 32302, 33988, 36441, 36468, 36600,
+ 36880, 26149, 26943, 29763, 20986, 26414, 40668, 20805, 24544, 27798,
+ 34802, 34909, 34935, 24756, 33205, 33795, 36101, 21462, 21561, 22068,
+ 23094, 23601, 28810, 32736, 32858, 33030, 33261, 36259, 37257, 39519,
+ 40434, 20596, 20164, 21408, 24827, 28204, 23652, 20360, 20516, 21988,
+ 23769, 24159, 24677, 26772, 27835, 28100, 29118, 30164, 30196, 30305,
+ 31258, 31305, 32199, 32251, 32622, 33268, 34473, 36636, 38601, 39347,
+ [12242, 40786], 21063, 21189, 39149, 35242, 19971, 26578, 28422, 20405,
+ 23522, 26517, [27784, 63858], 28024, 29723, 30759, 37341, 37756, 34756,
+ 31204, 31281, 24555, 20182, 21668, 21822, 22702, 22949, 24816, 25171,
+ 25302, 26422, 26965, 33333, 38464, 39345, 39389, 20524, 21331, 21828,
+ 22396, 25176, 25826, 26219, 26589, 28609, 28655, 29730, 29752, 35351,
+ 37944, 21585, 22022, 22374, 24392, 24986, 27470, 28760, 28845, 32187,
+ 35477, 22890, 33067, 25506, 30472, 32829, 36010, 22612, 25645, 27067,
+ 23445, 24081, 28271, 34153, 20812, 21488, 22826, 24608, 24907, 27526,
+ 27760, 27888, 31518, 32974, 33492, 36294, 37040, 39089, 25799, 28580,
+ 25745, 25860, 20814, 21520, [12063, 22303], 35342, 24927, 26742, 30171,
+ 31570, 32113, 36890, 22534, 27084, 33151, 35114, 36864, 38969, 20600,
+ 22871, 22956, 25237, 36879, 39722, 24925, 29305, 38358, 22369, 23110,
+ 24052, 25226, 25773, 25850, 26487, 27874, 27966, 29228, 29750, 30772,
+ 32631, 33453, 36315, 38935, 21028, 22338, 26495, 29256, 29923, 36009,
+ 36774, 37393, 38442, [12043, 20843], 21485, 25420, 20329, 21764, 24726,
+ 25943, 27803, 28031, 29260, 29437, 31255, 35207, [12185, 35997], 24429,
+ 28558, 28921, 33192, 24846, [20415, 63845], 20559, 25153, [12122, 29255],
+ 31687, 32232, 32745, 36941, 38829, 39449, 36022, 22378, 24179, 26544,
+ 33805, 35413, 21536, 23318, 24163, 24290, 24330, 25987, 32954, 34109,
+ 38281, 38491, 20296, 21253, 21261, 21263, 21638, 21754, 22275, 24067,
+ 24598, 25243, 25265, 25429, 27873, 28006, 30129, 30770, 32990, 33071,
+ 33502, 33889, 33970, 34957, 35090, 36875, 37610, 39165, 39825, 24133,
+ [26292, 64006], 26333, 28689, 29190, 20469, 21117, 24426, 24915, 26451,
+ 27161, 28418, 29922, 31080, 34920, 35961, 39111, 39108, 39491, 21697,
+ 31263, 26963, 35575, 35914, [12213, 39080], 39342, 24444, 25259, 30130,
+ [12138, 30382], 34987, 36991, 38466, 21305, 24380, 24517, [27852, 63848],
+ 29644, 30050, [12134, 30091], 31558, 33534, 39325, 20047, 36924, 19979,
+ 20309, 21414, 22799, 24264, 26160, 27827, 29781, 33655, 34662, 36032,
+ 36944, 38686, 39957, 22737, 23416, 34384, 35604, 40372, 23506, 24680,
+ 24717, 26097, 27735, 28450, 28579, 28698, 32597, 32752, {f: 2, c: 38289},
+ 38480, 38867, 21106, 36676, 20989, 21547, 21688, 21859, 21898, 27323,
+ 28085, 32216, 33382, 37532, 38519, 40569, 21512, 21704, 30418, 34532,
+ 38308, 38356, 38492, 20130, 20233, 23022, 23270, 24055, 24658, 25239,
+ 26477, 26689, 27782, 28207, 32568, 32923, 33322, 38917, 20133, 20565,
+ 21683, 22419, 22874, 23401, 23475, 25032, 26999, 28023, 28707, 34809,
+ 35299, 35442, 35559, 36994, 39405, 39608, 21182, 26680, 20502, 24184,
+ 26447, 33607, [12175, 34892, 64008], 20139, 21521, 22190, 29670, 37141,
+ 38911, 39177, 39255, [12217, 39321], 22099, 22687, 34395, 35377, 25010,
+ 27382, 29563, 36562, 27463, 38570, 39511, 22869, 29184, 36203,
+ [12208, 38761], 20436, 23796, 24358, 25080, 26203, 27883, 28843,
+ [12126, 29572], 29625, 29694, 30505, 30541, 32067, 32098, 32291, 33335,
+ 34898, 36066, 37449, 39023, 23377, [12147, 31348], [12174, 34880],
+ [12212, 38913], 23244, 20448, 21332, 22846, 23805, 25406, 28025, 29433,
+ 33029, 33031, 33698, 37583, 38960, 20136, 20804, 21009, 22411, 24418,
+ 27842, 28366, 28677, 28752, 28847, 29074, 29673, [29801, 63918], 33610,
+ 34722, 34913, 36872, 37026, 37795, 39336, 20846, 24407, 24800, 24935,
+ 26291, 34137, 36426, 37295, 38795, 20046, 20114, 21628, 22741, 22778,
+ 22909, 23733, 24359, [12094, 25142], 25160, 26122, 26215, 27627, 28009,
+ 28111, 28246, 28408, 28564, 28640, 28649, 28765, 29392, 29733, 29786,
+ 29920, 30355, 31068, 31946, 32286, 32993, 33446, 33899, 33983, 34382,
+ 34399, 34676, 35703, 35946, 37804, 38912, 39013, 24785, 25110, 37239,
+ 23130, 26127, 28151, 28222, 29759, 39746, 24573, 24794, 31503, 21700,
+ 24344, 27742, 27859, 27946, 28888, 32005, 34425, 35340, 40251, 21270,
+ 21644, 23301, 27194, [12117, 28779], 30069, 31117, [12146, 31166], 33457,
+ 33775, 35441, 35649, 36008, 38772, 25844, 25899, {f: 2, c: 30906}, 31339,
+ 20024, 21914, 22864, 23462, 24187, 24739, 25563, 27489, 26213, 26707,
+ 28185, 29029, 29872, 32008, 36996, 39529, 39973, 27963, [28369, 63748],
+ 29502, 35905, 38346, 20976, 24140, 24488, 24653, 24822, 24880, 24908,
+ {f: 2, c: 26179}, 27045, 27841, 28255, 28361, 28514, 29004, 29852, 30343,
+ 31681, 31783, 33618, 34647, 36945, 38541, [12232, 40643], 21295, 22238,
+ 24315, 24458, 24674, 24724, 25079, 26214, 26371, 27292, 28142, 28590,
+ 28784, 29546, 32362, 33214, 33588, 34516, 35496, 36036, 21123, 29554,
+ 23446, 27243, 37892, 21742, 22150, 23389, 25928, 25989, 26313, 26783,
+ 28045, 28102, [12120, 29243], 32948, 37237, 39501, 20399, 20505, 21402,
+ 21518, 21564, 21897, 21957, 24127, 24460, 26429, 29030, 29661, 36869,
+ 21211, 21235, 22628, 22734, 28932, 29071, 29179, 34224, 35347,
+ [26248, 63941], 34216, 21927, 26244, 29002, 33841, 21321, 21913, 27585,
+ 24409, 24509, 25582, 26249, 28999, 35569, 36637, 40638, 20241, 25658,
+ 28875, 30054, 34407, 24676, 35662, 40440, 20807, 20982, 21256, 27958,
+ 33016, [12234, 40657], 26133, 27427, 28824, 30165, 21507, 23673, 32007,
+ 35350, [12107, 27424], 27453, 27462, 21560, 24688, 27965, 32725, 33288,
+ 20694, 20958, 21916, 22123, 22221, 23020, 23305, 24076, 24985, 24984,
+ 25137, 26206, 26342, 29081, {f: 2, c: 29113}, 29351, 31143, 31232, 32690,
+ 35440, {s: 163}, {f: 4, c: 12310}, {s: 14}, 8223, 8219, {f: 2, c: 8314},
+ {s: 7}, 8316, 0, {f: 2, c: 8317}, {s: 23}, 700, {s: 44}, 8942, 8759,
+ {s: 20}, {f: 10, c: 10122}, {s: 36}, {f: 26, c: 9398}, {s: 61},
+ {f: 2, c: 8826}, {f: 2, c: 8910}, {f: 2, c: 8832}, {f: 4, c: 8816}, 0,
+ 8842, 0, 8843, {f: 2, c: 8822}, 8825, {f: 2, c: 8922}, {s: 5}, 8773, 8771,
+ 8776, 0, 8868, {s: 78}, 8244, {s: 11}, 9839, {s: 4}, 8258, {s: 4}, 10045,
+ 0, 0, 8226, {s: 4}, {f: 2, c: 8249}, {s: 16}, 10010, 10006, 0, 9711,
+ {s: 3}, 10070, 0, 9676, {s: 24}, 9775, {s: 6}, 12320, 0, {f: 10, c: 10102},
+ {s: 17}, 12306, 12342, {s: 13}, 8710, 0, 8735, 0, {f: 2, c: 8741}, 0, 8787,
+ 8785, {f: 2, c: 8806}, 8723, {f: 3, c: 8853}, 0, 8980, 0, 0, 8802, 0, 9649,
+ 0, 8738, 8784, 0, 0, 8867, 0, 0, {f: 2, c: 8814}, 8837, 8836, 8713, 8716,
+ {f: 2, c: 8891}, 8794, 8966, {s: 6}, 12958, 0, 8252, {s: 11}, 9702, {s: 3},
+ 9663, 9653, 9657, 9667, {s: 4}, 9674, 12849, 12857, 13259, {f: 5, c: 9327},
+ {s: 18}, 8656, 8655, 8653, {s: 37}, 8657, 8659, {s: 8}, 8626, 8625, 0,
+ 8628, 8624, 8627, {s: 14}, 8636, 8640, {s: 10}, {f: 2, c: 8644}, {s: 144},
+ {f: 5, c: 9347}, {s: 33}, 12948, {s: 15}, 12965, {s: 93}, 8672, 8674, 8673,
+ 8675, {s: 4}, 8678, 8680, 8679, 8681, {s: 20}, 9757, 9759, {s: 76}, 12944,
+ {f: 6, c: 12938}, {s: 15}, {f: 2, c: 12318}, 8246, 0, 8245, {s: 3}, 12540,
+ 0, 0, {f: 2, c: 44034}, {f: 2, c: 44037}, {f: 5, c: 44043}, 44056,
+ {f: 2, c: 44062}, {f: 3, c: 44065}, {f: 7, c: 44069}, 44078,
+ {f: 6, c: 44082}, {f: 2, c: 44090}, {f: 3, c: 44093}, {f: 10, c: 44097},
+ 44108, {f: 6, c: 44110}, {f: 3, c: 44117}, {f: 3, c: 44121},
+ {f: 19, c: 44125}, {f: 2, c: 44146}, {f: 2, c: 44149}, 44153,
+ {f: 5, c: 44155}, 44162, {f: 2, c: 44167}, {f: 3, c: 44173},
+ {f: 3, c: 44177}, {f: 7, c: 44181}, 44190, {f: 6, c: 44194}, 44203,
+ {f: 2, c: 44205}, {f: 7, c: 44209}, 44218, {f: 3, c: 44222},
+ {f: 2, c: 44226}, {f: 3, c: 44229}, {f: 3, c: 44233}, {f: 8, c: 44237},
+ 44246, {f: 8, c: 44248}, {f: 2, c: 44258}, {f: 2, c: 44261}, 44265, 44267,
+ {f: 2, c: 44269}, 44274, 44276, {f: 5, c: 44279}, {f: 2, c: 44286},
+ {f: 3, c: 44289}, 44293, {f: 5, c: 44295}, 44302, 44304, {f: 6, c: 44306},
+ {f: 3, c: 44313}, {f: 3, c: 44317}, {f: 8, c: 44321}, {f: 2, c: 44330},
+ {f: 6, c: 44334}, {f: 2, c: 44342}, {f: 3, c: 44345}, {f: 7, c: 44349},
+ 44358, 44360, {f: 6, c: 44362}, {f: 3, c: 44369}, {f: 3, c: 44373},
+ {f: 8, c: 44377}, 44386, {f: 8, c: 44388}, {f: 2, c: 44398},
+ {f: 2, c: 44401}, {f: 4, c: 44407}, 44414, 44416, {f: 5, c: 44419},
+ {f: 2, c: 44426}, {f: 3, c: 44429}, {f: 11, c: 44433}, {f: 6, c: 44446},
+ {f: 18, c: 44453}, {f: 8, c: 44472}, {f: 2, c: 44482}, {f: 3, c: 44485},
+ {f: 7, c: 44489}, 44498, {f: 8, c: 44500}, {f: 3, c: 44509},
+ {f: 3, c: 44513}, {f: 19, c: 44517}, {f: 2, c: 44538}, {f: 2, c: 44541},
+ {f: 6, c: 44546}, 44554, 44556, {f: 6, c: 44558}, {f: 27, c: 44565},
+ {f: 2, c: 44594}, {f: 2, c: 44597}, 44601, {f: 5, c: 44603}, 44610, 44612,
+ {f: 3, c: 44615}, 44619, 44623, {f: 3, c: 44625}, 44629, {f: 5, c: 44631},
+ 44638, {f: 3, c: 44642}, {f: 2, c: 44646}, {f: 2, c: 44650},
+ {f: 3, c: 44653}, {f: 7, c: 44657}, 44666, {f: 6, c: 44670},
+ {f: 6, c: 44678}, {f: 47, c: 44685}, 44735, {f: 3, c: 44737},
+ {f: 7, c: 44741}, 44750, {f: 6, c: 44754}, {f: 2, c: 44762},
+ {f: 11, c: 44765}, {f: 2, c: 44777}, 44780, {f: 6, c: 44782},
+ {f: 3, c: 44789}, {f: 3, c: 44793}, {f: 10, c: 44797}, {f: 4, c: 44809},
+ {f: 2, c: 44814}, {f: 27, c: 44817}, {f: 2, c: 44846}, 44849, 44851,
+ {f: 7, c: 44853}, 44862, 44864, {f: 4, c: 44868}, {f: 6, c: 44874},
+ {f: 11, c: 44881}, {f: 6, c: 44894}, {f: 19, c: 44902}, {f: 6, c: 44922},
+ {f: 3, c: 44929}, {f: 3, c: 44933}, {f: 7, c: 44937}, {f: 3, c: 44946},
+ {f: 6, c: 44950}, {f: 27, c: 44957}, {f: 2, c: 44986}, {f: 3, c: 44989},
+ {f: 6, c: 44993}, 45002, 45004, {f: 5, c: 45007}, {f: 7, c: 45013},
+ {f: 11, c: 45021}, {f: 6, c: 45034}, {f: 2, c: 45042}, {f: 3, c: 45045},
+ {f: 7, c: 45049}, {f: 2, c: 45058}, {f: 7, c: 45061}, {f: 3, c: 45069},
+ {f: 3, c: 45073}, {f: 7, c: 45077}, {f: 10, c: 45086}, {f: 27, c: 45097},
+ {f: 2, c: 45126}, 45129, 45131, 45133, {f: 4, c: 45135}, 45142, 45144,
+ {f: 3, c: 45146}, {f: 30, c: 45150}, {f: 2, c: 45182}, {f: 3, c: 45185},
+ {f: 7, c: 45189}, 45198, 45200, {f: 6, c: 45202}, 45211, {f: 2, c: 45213},
+ {f: 5, c: 45219}, 45226, 45232, 45234, {f: 2, c: 45238}, {f: 3, c: 45241},
+ {f: 7, c: 45245}, 45254, {f: 6, c: 45258}, {f: 2, c: 45266},
+ {f: 3, c: 45269}, {f: 7, c: 45273}, {f: 4, c: 45281}, {f: 34, c: 45286},
+ 45322, {f: 3, c: 45325}, 45329, {f: 4, c: 45332}, 45338, {f: 5, c: 45342},
+ {f: 2, c: 45350}, {f: 3, c: 45353}, {f: 7, c: 45357}, 45366,
+ {f: 6, c: 45370}, {f: 2, c: 45378}, {f: 3, c: 45381}, {f: 7, c: 45385},
+ {f: 2, c: 45394}, {f: 2, c: 45398}, {f: 3, c: 45401}, {f: 3, c: 45405},
+ {f: 23, c: 45409}, {f: 2, c: 45434}, {f: 3, c: 45437}, 45441,
+ {f: 5, c: 45443}, 45450, 45452, {f: 4, c: 45454}, {f: 3, c: 45461},
+ {f: 3, c: 45465}, {f: 11, c: 45469}, {f: 35, c: 45481}, {f: 3, c: 45517},
+ {f: 3, c: 45521}, {f: 7, c: 45525}, 45534, {f: 8, c: 45536},
+ {f: 2, c: 45546}, {f: 3, c: 45549}, {f: 8, c: 45553}, 45562, 45564,
+ {f: 6, c: 45566}, {f: 2, c: 45574}, {f: 2, c: 45577}, {f: 7, c: 45581},
+ 45590, 45592, {f: 6, c: 45594}, {f: 19, c: 45601}, {f: 7, c: 45621},
+ {f: 27, c: 45629}, {f: 3, c: 45657}, {f: 3, c: 45661}, {f: 7, c: 45665},
+ {f: 10, c: 45674}, {f: 6, c: 45686}, {f: 7, c: 45693}, {f: 3, c: 45702},
+ {f: 6, c: 45706}, {f: 2, c: 45714}, {f: 3, c: 45717}, {f: 5, c: 45723},
+ 45730, 45732, {f: 3, c: 45735}, 45739, {f: 3, c: 45741}, {f: 3, c: 45745},
+ {f: 19, c: 45749}, {f: 2, c: 45770}, {f: 3, c: 45773}, 45777,
+ {f: 5, c: 45779}, 45786, 45788, {f: 4, c: 45790}, 45795, 45799,
+ {f: 2, c: 45801}, {f: 3, c: 45808}, 45814, {f: 3, c: 45820},
+ {f: 2, c: 45826}, {f: 3, c: 45829}, {f: 7, c: 45833}, 45842,
+ {f: 6, c: 45846}, {f: 55, c: 45853}, 45911, {f: 2, c: 45913}, 45917,
+ {f: 4, c: 45920}, 45926, 45928, 45930, {f: 2, c: 45932}, 45935,
+ {f: 2, c: 45938}, {f: 3, c: 45941}, {f: 7, c: 45945}, 45954,
+ {f: 6, c: 45958}, {f: 3, c: 45965}, {f: 3, c: 45969}, {f: 11, c: 45973},
+ {f: 6, c: 45986}, {f: 3, c: 45993}, {f: 23, c: 45997}, {f: 2, c: 46022},
+ {f: 2, c: 46025}, 46029, 46031, {f: 3, c: 46033}, 46038, 46040, 46042,
+ 46044, {f: 2, c: 46046}, {f: 3, c: 46049}, {f: 3, c: 46053},
+ {f: 19, c: 46057}, {f: 19, c: 46077}, {f: 7, c: 46097}, {f: 3, c: 46105},
+ {f: 3, c: 46109}, {f: 7, c: 46113}, 46122, {f: 8, c: 46124},
+ {f: 27, c: 46133}, {f: 2, c: 46162}, {f: 3, c: 46165}, {f: 7, c: 46169},
+ 46178, 46180, {f: 6, c: 46182}, {f: 19, c: 46189}, {f: 7, c: 46209},
+ {f: 20, c: 46217}, {f: 6, c: 46238}, {f: 3, c: 46245}, {f: 3, c: 46249},
+ {f: 8, c: 46253}, 46262, 46264, {f: 6, c: 46266}, {f: 3, c: 46273},
+ {f: 3, c: 46277}, {f: 7, c: 46281}, {f: 4, c: 46289}, {f: 6, c: 46294},
+ {f: 2, c: 46302}, {f: 2, c: 46305}, 46309, {f: 5, c: 46311}, 46318, 46320,
+ {f: 6, c: 46322}, {f: 27, c: 46329}, {f: 2, c: 46358}, {f: 2, c: 46361},
+ {f: 7, c: 46365}, 46374, {f: 5, c: 46379}, {f: 2, c: 46386},
+ {f: 3, c: 46389}, {f: 7, c: 46393}, 46402, {f: 5, c: 46406},
+ {f: 2, c: 46414}, {f: 3, c: 46417}, {f: 7, c: 46421}, 46430,
+ {f: 62, c: 46434}, {f: 2, c: 46498}, {f: 3, c: 46501}, 46505,
+ {f: 4, c: 46508}, 46514, {f: 5, c: 46518}, {f: 2, c: 46526},
+ {f: 3, c: 46529}, {f: 7, c: 46533}, 46542, {f: 6, c: 46546},
+ {f: 19, c: 46553}, {f: 35, c: 46573}, {f: 2, c: 46610}, {f: 3, c: 46613},
+ {f: 12, c: 46617}, {f: 6, c: 46630}, {f: 7, c: 46637}, {f: 19, c: 46645},
+ {f: 27, c: 46665}, {f: 3, c: 46693}, {f: 51, c: 46697}, {f: 2, c: 46750},
+ {f: 3, c: 46753}, {f: 6, c: 46757}, {f: 4, c: 46765}, {f: 34, c: 46770},
+ {f: 27, c: 46805}, {f: 3, c: 46833}, {f: 3, c: 46837}, {f: 7, c: 46841},
+ {f: 3, c: 46850}, {f: 34, c: 46854}, {f: 2, c: 46890}, {f: 2, c: 46893},
+ {f: 7, c: 46897}, 46906, {f: 8, c: 46908}, {f: 3, c: 46917},
+ {f: 3, c: 46921}, {f: 7, c: 46925}, {f: 10, c: 46934}, {f: 3, c: 46945},
+ {f: 3, c: 46949}, {f: 7, c: 46953}, 46962, 46964, {f: 6, c: 46966},
+ {f: 2, c: 46974}, {f: 3, c: 46977}, {f: 7, c: 46981}, 46990,
+ {f: 3, c: 46995}, {f: 2, c: 47002}, {f: 3, c: 47005}, {f: 7, c: 47009},
+ 47018, {f: 6, c: 47022}, {f: 2, c: 47030}, {f: 14, c: 47033}, 47048,
+ {f: 34, c: 47050}, {f: 2, c: 47086}, {f: 3, c: 47089}, {f: 7, c: 47093},
+ 47102, {f: 5, c: 47106}, {f: 2, c: 47114}, {f: 3, c: 47117},
+ {f: 7, c: 47121}, 47130, 47132, {f: 6, c: 47134}, {f: 2, c: 47142},
+ {f: 3, c: 47145}, {f: 7, c: 47149}, 47158, {f: 6, c: 47162},
+ {f: 3, c: 47169}, {f: 12, c: 47173}, 47186, {f: 8, c: 47188},
+ {f: 2, c: 47198}, {f: 3, c: 47201}, {f: 7, c: 47205}, 47214, 47216,
+ {f: 6, c: 47218}, {f: 3, c: 47225}, {f: 16, c: 47229}, {f: 26, c: 47246},
+ {f: 7, c: 47273}, {f: 3, c: 47281}, {f: 3, c: 47285}, {f: 7, c: 47289},
+ 47298, 47300, {f: 6, c: 47302}, {f: 3, c: 47309}, {f: 3, c: 47313},
+ {f: 8, c: 47317}, 47326, 47328, {f: 6, c: 47330}, {f: 2, c: 47338},
+ {f: 3, c: 47341}, {f: 7, c: 47345}, 47354, 47356, {f: 6, c: 47358},
+ {f: 19, c: 47365}, {f: 7, c: 47385}, {f: 27, c: 47393}, {f: 2, c: 47422},
+ {f: 3, c: 47425}, {f: 7, c: 47429}, {f: 2, c: 47437}, 47440,
+ {f: 6, c: 47442}, {f: 2, c: 47450}, {f: 3, c: 47453}, {f: 7, c: 47457},
+ 47466, 47468, {f: 6, c: 47470}, {f: 2, c: 47478}, {f: 3, c: 47481},
+ {f: 7, c: 47485}, 47494, 47496, {f: 2, c: 47499}, {f: 29, c: 47503},
+ {f: 2, c: 47534}, {f: 3, c: 47537}, {f: 7, c: 47541}, 47550, 47552,
+ {f: 6, c: 47554}, {f: 2, c: 47562}, 47565, {f: 5, c: 47571}, 47578, 47580,
+ {f: 2, c: 47583}, 47586, {f: 2, c: 47590}, {f: 3, c: 47593},
+ {f: 7, c: 47597}, 47606, {f: 5, c: 47611}, {f: 6, c: 47618},
+ {f: 12, c: 47625}, {f: 34, c: 47638}, {f: 2, c: 47674}, {f: 3, c: 47677},
+ 47681, {f: 5, c: 47683}, 47690, 47692, {f: 4, c: 47695}, {f: 2, c: 47702},
+ {f: 3, c: 47705}, {f: 7, c: 47709}, 47718, {f: 6, c: 47722},
+ {f: 2, c: 47730}, {f: 3, c: 47733}, {f: 10, c: 47737}, 47750,
+ {f: 4, c: 47752}, {f: 27, c: 47757}, 47786, {f: 3, c: 47789}, 47793,
+ {f: 5, c: 47795}, 47802, 47804, {f: 6, c: 47806}, {f: 3, c: 47813},
+ {f: 15, c: 47817}, {f: 34, c: 47834}, {f: 3, c: 47869}, {f: 3, c: 47873},
+ {f: 8, c: 47877}, 47886, 47888, {f: 6, c: 47890}, {f: 3, c: 47897},
+ {f: 3, c: 47901}, {f: 8, c: 47905}, 47914, {f: 8, c: 47916}, 47927,
+ {f: 2, c: 47929}, {f: 5, c: 47935}, 47942, 47944, {f: 3, c: 47946}, 47950,
+ {f: 3, c: 47953}, {f: 3, c: 47957}, {f: 8, c: 47961}, 47970,
+ {f: 8, c: 47972}, {f: 27, c: 47981}, {f: 3, c: 48009}, {f: 3, c: 48013},
+ {f: 19, c: 48017}, {f: 3, c: 48037}, {f: 3, c: 48041}, {f: 7, c: 48045},
+ {f: 2, c: 48053}, {f: 8, c: 48056}, {f: 3, c: 48065}, {f: 3, c: 48069},
+ {f: 7, c: 48073}, {f: 2, c: 48081}, {f: 36, c: 48084}, {f: 2, c: 48122},
+ {f: 2, c: 48125}, 48129, {f: 5, c: 48131}, 48138, 48142, 48144,
+ {f: 2, c: 48146}, {f: 2, c: 48153}, {f: 4, c: 48160}, 48166, 48168,
+ {f: 3, c: 48170}, {f: 2, c: 48174}, {f: 2, c: 48178}, {f: 3, c: 48181},
+ {f: 7, c: 48185}, 48194, {f: 3, c: 48198}, {f: 2, c: 48202},
+ {f: 2, c: 48206}, {f: 12, c: 48209}, {f: 38, c: 48222}, {f: 2, c: 48262},
+ {f: 2, c: 48265}, 48269, {f: 5, c: 48271}, 48278, 48280, {f: 5, c: 48283},
+ {f: 2, c: 48290}, {f: 2, c: 48293}, {f: 7, c: 48297}, 48306,
+ {f: 6, c: 48310}, {f: 2, c: 48318}, {f: 3, c: 48321}, {f: 8, c: 48325},
+ 48334, {f: 3, c: 48338}, {f: 2, c: 48342}, {f: 3, c: 48345},
+ {f: 23, c: 48349}, 48375, {f: 3, c: 48377}, {f: 7, c: 48381}, 48390, 48392,
+ {f: 6, c: 48394}, {f: 3, c: 48401}, {f: 15, c: 48405}, {f: 7, c: 48421},
+ {f: 19, c: 48429}, {f: 7, c: 48449}, {f: 2, c: 48458}, {f: 3, c: 48461},
+ {f: 7, c: 48465}, {f: 10, c: 48474}, {f: 3, c: 48485}, {f: 23, c: 48489},
+ {f: 2, c: 48514}, {f: 2, c: 48517}, {f: 5, c: 48523}, 48530, 48532,
+ {f: 3, c: 48534}, 48539, {f: 7, c: 48541}, {f: 11, c: 48549},
+ {f: 7, c: 48561}, {f: 27, c: 48569}, {f: 2, c: 48598}, {f: 3, c: 48601},
+ {f: 12, c: 48605}, {f: 6, c: 48618}, {f: 3, c: 48625}, {f: 3, c: 48629},
+ {f: 7, c: 48633}, {f: 2, c: 48641}, 48644, {f: 6, c: 48646},
+ {f: 2, c: 48654}, {f: 3, c: 48657}, {f: 7, c: 48661}, 48670,
+ {f: 36, c: 48672}, {f: 2, c: 48710}, {f: 3, c: 48713}, 48717,
+ {f: 5, c: 48719}, 48726, 48728, {f: 4, c: 48732}, {f: 2, c: 48738},
+ {f: 3, c: 48741}, 48745, {f: 5, c: 48747}, 48754, {f: 5, c: 48758},
+ {f: 2, c: 48766}, {f: 3, c: 48769}, {f: 7, c: 48773}, 48782,
+ {f: 6, c: 48786}, {f: 14, c: 48794}, {f: 39, c: 48809}, {f: 2, c: 48850},
+ {f: 2, c: 48853}, {f: 7, c: 48857}, {f: 2, c: 48865}, {f: 6, c: 48870},
+ {f: 20, c: 48877}, {f: 6, c: 48898}, {f: 14, c: 48906}, 48922,
+ {f: 34, c: 48926}, {f: 2, c: 48962}, {f: 3, c: 48965}, {f: 7, c: 48969},
+ {f: 3, c: 48978}, {f: 62, c: 48982}, {f: 27, c: 49045}, {f: 20, c: 49073},
+ {f: 6, c: 49094}, {f: 2, c: 49102}, {f: 3, c: 49105}, {f: 7, c: 49109},
+ {f: 2, c: 49117}, 49120, {f: 90, c: 49122}, {f: 20, c: 49213},
+ {f: 6, c: 49234}, {f: 3, c: 49241}, {f: 3, c: 49245}, {f: 7, c: 49249},
+ {f: 38, c: 49258}, {f: 2, c: 49298}, {f: 3, c: 49301}, {f: 7, c: 49305},
+ 49314, 49316, {f: 6, c: 49318}, 49326, {f: 2, c: 49329}, {f: 5, c: 49335},
+ 49342, {f: 3, c: 49346}, {f: 2, c: 49350}, {f: 2, c: 49354},
+ {f: 3, c: 49357}, {f: 7, c: 49361}, 49370, {f: 6, c: 49374},
+ {f: 2, c: 49382}, {f: 3, c: 49385}, {f: 7, c: 49389}, 49398, 49400,
+ {f: 6, c: 49402}, {f: 3, c: 49409}, {f: 3, c: 49413}, {f: 7, c: 49417},
+ {f: 4, c: 49425}, {f: 6, c: 49430}, {f: 2, c: 49441}, 49445,
+ {f: 4, c: 49448}, 49454, {f: 4, c: 49458}, 49463, {f: 2, c: 49466},
+ {f: 3, c: 49469}, {f: 7, c: 49473}, 49482, {f: 6, c: 49486},
+ {f: 2, c: 49494}, {f: 3, c: 49497}, {f: 7, c: 49501}, 49510,
+ {f: 6, c: 49514}, {f: 3, c: 49521}, {f: 3, c: 49525}, {f: 12, c: 49529},
+ {f: 6, c: 49542}, 49551, {f: 3, c: 49553}, 49557, {f: 5, c: 49559}, 49566,
+ 49568, {f: 3, c: 49570}, {f: 2, c: 49574}, {f: 2, c: 49578},
+ {f: 3, c: 49581}, {f: 12, c: 49585}, {f: 6, c: 49598}, {f: 3, c: 49605},
+ {f: 3, c: 49609}, {f: 7, c: 49613}, {f: 2, c: 49621}, {f: 7, c: 49625},
+ {f: 3, c: 49633}, {f: 3, c: 49637}, {f: 7, c: 49641}, 49650,
+ {f: 8, c: 49652}, {f: 2, c: 49662}, {f: 3, c: 49665}, {f: 7, c: 49669},
+ 49678, 49680, {f: 6, c: 49682}, {f: 2, c: 49690}, {f: 2, c: 49693},
+ {f: 7, c: 49697}, 49706, 49708, 49710, 49712, 49715, {f: 19, c: 49717},
+ {f: 7, c: 49737}, {f: 2, c: 49746}, {f: 3, c: 49749}, {f: 7, c: 49753},
+ {f: 4, c: 49761}, {f: 6, c: 49766}, {f: 2, c: 49774}, {f: 3, c: 49777},
+ {f: 7, c: 49781}, 49790, 49792, {f: 6, c: 49794}, {f: 6, c: 49802},
+ {f: 7, c: 49809}, {f: 2, c: 49817}, 49820, {f: 6, c: 49822},
+ {f: 2, c: 49830}, {f: 3, c: 49833}, {f: 6, c: 49838}, 49846, 49848,
+ {f: 34, c: 49850}, {f: 2, c: 49886}, {f: 2, c: 49889}, {f: 6, c: 49893},
+ 49902, 49904, {f: 4, c: 49906}, 49911, 49914, {f: 3, c: 49917},
+ {f: 7, c: 49921}, {f: 2, c: 49930}, {f: 5, c: 49934}, {f: 2, c: 49942},
+ {f: 3, c: 49945}, {f: 7, c: 49949}, {f: 2, c: 49958}, {f: 27, c: 49962},
+ {f: 34, c: 49990}, {f: 2, c: 50026}, {f: 3, c: 50029}, 50033,
+ {f: 5, c: 50035}, {f: 2, c: 50042}, {f: 6, c: 50046}, {f: 3, c: 50053},
+ {f: 3, c: 50057}, {f: 51, c: 50061}, {f: 23, c: 50113}, {f: 2, c: 50138},
+ {f: 2, c: 50141}, 50145, {f: 5, c: 50147}, {f: 3, c: 50154},
+ {f: 6, c: 50158}, {f: 2, c: 50166}, {f: 15, c: 50169}, {f: 7, c: 50185},
+ {f: 19, c: 50193}, {f: 7, c: 50213}, {f: 3, c: 50221}, {f: 3, c: 50225},
+ {f: 7, c: 50229}, {f: 10, c: 50238}, {f: 27, c: 50249}, {f: 2, c: 50278},
+ {f: 3, c: 50281}, {f: 7, c: 50285}, {f: 3, c: 50294}, {f: 6, c: 50298},
+ {f: 19, c: 50305}, {f: 7, c: 50325}, {f: 27, c: 50333}, {f: 3, c: 50361},
+ {f: 44, c: 50365}, {f: 6, c: 50410}, {f: 2, c: 50418}, {f: 3, c: 50421},
+ 50425, {f: 4, c: 50427}, {f: 10, c: 50434}, {f: 3, c: 50445},
+ {f: 3, c: 50449}, {f: 7, c: 50453}, {f: 11, c: 50461}, {f: 2, c: 50474},
+ {f: 3, c: 50477}, {f: 7, c: 50481}, 50490, 50492, {f: 6, c: 50494},
+ {f: 2, c: 50502}, 50507, {f: 4, c: 50511}, 50518, {f: 3, c: 50522}, 50527,
+ {f: 2, c: 50530}, {f: 3, c: 50533}, {f: 7, c: 50537}, 50546,
+ {f: 6, c: 50550}, {f: 2, c: 50558}, {f: 3, c: 50561}, {f: 2, c: 50565},
+ {f: 4, c: 50568}, 50574, 50576, {f: 3, c: 50578}, 50582, {f: 3, c: 50585},
+ {f: 3, c: 50589}, {f: 8, c: 50593}, {f: 10, c: 50602}, {f: 2, c: 50614},
+ 50618, {f: 5, c: 50623}, 50635, 50637, 50639, {f: 2, c: 50642},
+ {f: 3, c: 50645}, {f: 7, c: 50649}, 50658, 50660, {f: 6, c: 50662}, 50671,
+ {f: 3, c: 50673}, 50677, {f: 4, c: 50680}, {f: 3, c: 50690},
+ {f: 3, c: 50697}, {f: 3, c: 50701}, {f: 7, c: 50705}, 50714,
+ {f: 7, c: 50717}, {f: 2, c: 50726}, {f: 3, c: 50729}, 50735,
+ {f: 2, c: 50737}, 50742, 50744, 50746, {f: 4, c: 50748}, {f: 2, c: 50754},
+ {f: 3, c: 50757}, {f: 7, c: 50761}, 50770, {f: 6, c: 50774},
+ {f: 2, c: 50782}, {f: 11, c: 50785}, {f: 2, c: 50797}, 50800,
+ {f: 6, c: 50802}, {f: 2, c: 50810}, {f: 3, c: 50813}, {f: 7, c: 50817},
+ 50826, 50828, {f: 6, c: 50830}, {f: 2, c: 50838}, {f: 3, c: 50841},
+ {f: 7, c: 50845}, 50854, 50856, {f: 6, c: 50858}, {f: 2, c: 50866},
+ {f: 3, c: 50869}, {f: 5, c: 50875}, 50882, 50884, {f: 6, c: 50886},
+ {f: 2, c: 50894}, {f: 3, c: 50897}, {f: 7, c: 50901}, {f: 2, c: 50910},
+ {f: 6, c: 50914}, {f: 2, c: 50922}, {f: 3, c: 50925}, {f: 7, c: 50929},
+ {f: 3, c: 50938}, {f: 6, c: 50942}, {f: 2, c: 50950}, {f: 3, c: 50953},
+ {f: 7, c: 50957}, 50966, 50968, {f: 6, c: 50970}, {f: 2, c: 50978},
+ {f: 3, c: 50981}, {f: 7, c: 50985}, 50994, 50996, 50998, {f: 4, c: 51000},
+ {f: 2, c: 51006}, {f: 3, c: 51009}, {f: 5, c: 51013}, 51019, 51022, 51024,
+ {f: 3, c: 51033}, {f: 3, c: 51037}, {f: 7, c: 51041}, {f: 2, c: 51049},
+ {f: 8, c: 51052}, {f: 2, c: 51062}, {f: 3, c: 51065}, {f: 4, c: 51071},
+ 51078, {f: 3, c: 51083}, 51087, {f: 2, c: 51090}, 51093, 51097,
+ {f: 5, c: 51099}, 51106, {f: 5, c: 51111}, {f: 2, c: 51118},
+ {f: 3, c: 51121}, {f: 7, c: 51125}, 51134, {f: 6, c: 51138},
+ {f: 2, c: 51146}, 51149, 51151, {f: 7, c: 51153}, {f: 4, c: 51161},
+ {f: 6, c: 51166}, {f: 3, c: 51173}, {f: 3, c: 51177}, {f: 19, c: 51181},
+ {f: 2, c: 51202}, {f: 3, c: 51205}, 51209, {f: 5, c: 51211}, 51218, 51220,
+ {f: 5, c: 51223}, {f: 2, c: 51230}, {f: 3, c: 51233}, {f: 7, c: 51237},
+ 51246, 51248, {f: 6, c: 51250}, {f: 3, c: 51257}, {f: 3, c: 51261},
+ {f: 7, c: 51265}, {f: 2, c: 51274}, {f: 6, c: 51278}, {f: 27, c: 51285},
+ {f: 2, c: 51314}, {f: 3, c: 51317}, 51321, {f: 5, c: 51323}, 51330, 51332,
+ {f: 3, c: 51336}, {f: 6, c: 51342}, {f: 8, c: 51349}, 51358, 51360,
+ {f: 6, c: 51362}, {f: 19, c: 51369}, {f: 6, c: 51390}, {f: 3, c: 51397},
+ {f: 3, c: 51401}, {f: 7, c: 51405}, 51414, 51416, {f: 6, c: 51418},
+ {f: 2, c: 51426}, {f: 16, c: 51429}, {f: 6, c: 51446}, {f: 2, c: 51454},
+ {f: 3, c: 51457}, {f: 5, c: 51463}, 51470, 51472, {f: 6, c: 51474},
+ {f: 19, c: 51481}, {f: 7, c: 51501}, {f: 27, c: 51509}, {f: 2, c: 51538},
+ {f: 3, c: 51541}, {f: 7, c: 51545}, 51554, {f: 8, c: 51556},
+ {f: 3, c: 51565}, {f: 3, c: 51569}, {f: 7, c: 51573}, {f: 11, c: 51581},
+ {f: 2, c: 51594}, {f: 3, c: 51597}, {f: 7, c: 51601}, 51610, 51612,
+ {f: 34, c: 51614}, {f: 2, c: 51650}, {f: 2, c: 51653}, 51657,
+ {f: 5, c: 51659}, 51666, 51668, {f: 2, c: 51671}, 51675, {f: 2, c: 51678},
+ 51681, 51683, {f: 2, c: 51685}, {f: 4, c: 51688}, 51694, {f: 6, c: 51698},
+ {f: 2, c: 51706}, {f: 3, c: 51709}, {f: 7, c: 51713}, 51722,
+ {f: 6, c: 51726}, {f: 3, c: 51733}, {f: 16, c: 51737}, {f: 34, c: 51754},
+ {f: 2, c: 51790}, {f: 3, c: 51793}, {f: 7, c: 51797}, 51806,
+ {f: 6, c: 51810}, {f: 20, c: 51817}, {f: 6, c: 51838}, {f: 19, c: 51845},
+ {f: 35, c: 51865}, {f: 2, c: 51902}, {f: 3, c: 51905}, {f: 7, c: 51909},
+ 51918, 51920, 51922, {f: 4, c: 51924}, {f: 6, c: 51930}, {f: 11, c: 51937},
+ {f: 7, c: 51949}, {f: 19, c: 51957}, {f: 7, c: 51977}, {f: 3, c: 51985},
+ {f: 3, c: 51989}, {f: 7, c: 51993}, {f: 31, c: 52002}, {f: 6, c: 52034},
+ {f: 2, c: 52042}, {f: 3, c: 52045}, {f: 7, c: 52049}, {f: 3, c: 52058},
+ {f: 6, c: 52062}, {f: 19, c: 52069}, {f: 34, c: 52090}, {f: 27, c: 52125},
+ {f: 27, c: 52153}, {f: 15, c: 52181}, {f: 2, c: 52197}, 52200,
+ {f: 34, c: 52202}, {f: 2, c: 52238}, {f: 3, c: 52241}, {f: 7, c: 52245},
+ {f: 3, c: 52254}, {f: 4, c: 52259}, {f: 2, c: 52266}, 52269, 52271,
+ {f: 7, c: 52273}, 52282, {f: 5, c: 52287}, {f: 2, c: 52294},
+ {f: 3, c: 52297}, {f: 7, c: 52301}, 52310, {f: 6, c: 52314},
+ {f: 3, c: 52321}, 52325, 52327, {f: 7, c: 52329}, {f: 4, c: 52337},
+ {f: 34, c: 52342}, {f: 2, c: 52378}, {f: 3, c: 52381}, {f: 7, c: 52385},
+ 52394, {f: 6, c: 52398}, {f: 2, c: 52406}, {f: 3, c: 52409},
+ {f: 7, c: 52413}, 52422, 52424, {f: 6, c: 52426}, {f: 3, c: 52433},
+ {f: 15, c: 52437}, {f: 7, c: 52453}, {f: 3, c: 52461}, {f: 16, c: 52465},
+ {f: 6, c: 52482}, {f: 2, c: 52490}, {f: 3, c: 52493}, {f: 7, c: 52497},
+ 52506, 52508, {f: 6, c: 52510}, {f: 3, c: 52517}, {f: 3, c: 52521},
+ {f: 12, c: 52525}, {f: 34, c: 52538}, {f: 3, c: 52573}, {f: 3, c: 52577},
+ {f: 7, c: 52581}, 52590, 52592, {f: 6, c: 52594}, {f: 15, c: 52601},
+ {f: 11, c: 52617}, {f: 2, c: 52630}, {f: 3, c: 52633}, {f: 7, c: 52637},
+ 52646, 52648, {f: 6, c: 52650}, {f: 19, c: 52657}, {f: 7, c: 52677},
+ {f: 3, c: 52685}, {f: 23, c: 52689}, {f: 3, c: 52713}, {f: 3, c: 52717},
+ {f: 7, c: 52721}, 52730, 52732, {f: 6, c: 52734}, {f: 3, c: 52741},
+ {f: 3, c: 52745}, {f: 7, c: 52749}, {f: 4, c: 52757}, {f: 6, c: 52762},
+ {f: 2, c: 52770}, {f: 3, c: 52773}, {f: 7, c: 52777}, 52786, 52788,
+ {f: 34, c: 52790}, {f: 2, c: 52826}, {f: 2, c: 52829}, {f: 6, c: 52834},
+ 52842, 52844, {f: 6, c: 52846}, {f: 2, c: 52854}, {f: 3, c: 52857},
+ {f: 7, c: 52861}, 52870, 52872, {f: 6, c: 52874}, {f: 2, c: 52882},
+ {f: 3, c: 52885}, {f: 7, c: 52889}, 52898, {f: 6, c: 52902},
+ {f: 19, c: 52910}, {f: 34, c: 52930}, {f: 2, c: 52966}, {f: 2, c: 52969},
+ {f: 7, c: 52973}, 52982, {f: 6, c: 52986}, {f: 2, c: 52994},
+ {f: 3, c: 52997}, {f: 7, c: 53001}, 53010, 53012, {f: 6, c: 53014},
+ {f: 3, c: 53021}, {f: 3, c: 53025}, {f: 7, c: 53029}, 53038,
+ {f: 6, c: 53042}, {f: 27, c: 53049}, {f: 2, c: 53078}, {f: 3, c: 53081},
+ {f: 7, c: 53085}, 53094, 53096, {f: 6, c: 53098}, {f: 2, c: 53106},
+ {f: 3, c: 53109}, {f: 7, c: 53113}, {f: 4, c: 53121}, {f: 6, c: 53126},
+ {f: 20, c: 53133}, {f: 6, c: 53154}, {f: 7, c: 53161}, {f: 19, c: 53169},
+ {f: 27, c: 53189}, {f: 2, c: 53218}, {f: 3, c: 53221}, {f: 7, c: 53225},
+ 53234, 53236, {f: 6, c: 53238}, {f: 3, c: 53245}, {f: 3, c: 53249},
+ {f: 12, c: 53253}, {f: 6, c: 53266}, {f: 20, c: 53273}, {f: 6, c: 53294},
+ {f: 2, c: 53302}, {f: 3, c: 53305}, {f: 7, c: 53309}, 53318, 53320,
+ {f: 6, c: 53322}, {f: 3, c: 53329}, {f: 3, c: 53333}, {f: 7, c: 53337},
+ {f: 11, c: 53345}, {f: 2, c: 53358}, {f: 3, c: 53361}, {f: 7, c: 53365},
+ {f: 3, c: 53374}, {f: 34, c: 53378}, {f: 2, c: 53414}, {f: 3, c: 53417},
+ {f: 7, c: 53421}, 53430, 53432, {f: 6, c: 53434}, {f: 2, c: 53442},
+ {f: 3, c: 53445}, {f: 6, c: 53450}, 53458, {f: 6, c: 53462},
+ {f: 2, c: 53470}, {f: 3, c: 53473}, {f: 7, c: 53477}, 53486,
+ {f: 6, c: 53490}, {f: 20, c: 53497}, {f: 34, c: 53518}, {f: 2, c: 53554},
+ {f: 3, c: 53557}, 53561, {f: 5, c: 53563}, 53570, {f: 6, c: 53574},
+ {f: 2, c: 53582}, {f: 3, c: 53585}, {f: 7, c: 53589}, 53598, 53600,
+ {f: 6, c: 53602}, {f: 3, c: 53609}, {f: 15, c: 53613}, {f: 7, c: 53629},
+ {f: 3, c: 53637}, {f: 23, c: 53641}, {f: 2, c: 53666}, {f: 3, c: 53669},
+ {f: 7, c: 53673}, 53682, 53684, {f: 4, c: 53686}, 53691, {f: 3, c: 53693},
+ {f: 23, c: 53697}, {f: 27, c: 53721}, {f: 3, c: 53749}, {f: 14, c: 53753},
+ 53768, {f: 6, c: 53770}, {f: 27, c: 53777}, {f: 2, c: 53806},
+ {f: 3, c: 53809}, {f: 7, c: 53813}, 53822, 53824, {f: 6, c: 53826},
+ {f: 19, c: 53833}, {f: 7, c: 53853}, {f: 27, c: 53861}, {f: 2, c: 53890},
+ {f: 3, c: 53893}, {f: 7, c: 53897}, {f: 3, c: 53906}, {f: 6, c: 53910},
+ {f: 3, c: 53917}, {f: 3, c: 53921}, {f: 7, c: 53925}, {f: 4, c: 53933},
+ {f: 6, c: 53938}, {f: 2, c: 53946}, {f: 2, c: 53949}, 53953,
+ {f: 5, c: 53955}, 53962, {f: 8, c: 53964}, {f: 3, c: 53973},
+ {f: 3, c: 53977}, {f: 7, c: 53981}, {f: 10, c: 53990}, {f: 2, c: 54002},
+ {f: 3, c: 54005}, {f: 7, c: 54009}, 54018, 54020, {f: 6, c: 54022}, 54031,
+ {f: 3, c: 54033}, 54037, {f: 5, c: 54039}, 54046, {f: 3, c: 54050},
+ {f: 2, c: 54054}, {f: 2, c: 54058}, {f: 3, c: 54061}, {f: 7, c: 54065},
+ 54074, {f: 6, c: 54078}, {f: 54, c: 54086}, {f: 2, c: 54142},
+ {f: 3, c: 54145}, {f: 7, c: 54149}, 54158, {f: 6, c: 54162},
+ {f: 2, c: 54170}, {f: 3, c: 54173}, {f: 7, c: 54177}, 54186, 54188,
+ {f: 6, c: 54190}, {f: 3, c: 54197}, {f: 3, c: 54201}, {f: 7, c: 54205},
+ {f: 2, c: 54214}, {f: 6, c: 54218}, {f: 7, c: 54225}, {f: 8, c: 54233},
+ 54242, {f: 8, c: 54244}, {f: 2, c: 54254}, {f: 3, c: 54257},
+ {f: 7, c: 54261}, 54270, 54272, {f: 6, c: 54274}, {f: 20, c: 54281},
+ {f: 34, c: 54302}, {f: 3, c: 54337}, {f: 23, c: 54341}, {f: 3, c: 54365},
+ {f: 3, c: 54369}, {f: 8, c: 54373}, 54382, {f: 8, c: 54384},
+ {f: 2, c: 54394}, {f: 2, c: 54397}, 54401, {f: 5, c: 54403}, 54410, 54412,
+ {f: 6, c: 54414}, {f: 20, c: 54421}, {f: 34, c: 54442}, {f: 3, c: 54477},
+ {f: 3, c: 54481}, {f: 7, c: 54485}, {f: 2, c: 54493}, {f: 8, c: 54496},
+ {f: 3, c: 54505}, {f: 3, c: 54509}, {f: 7, c: 54513}, {f: 2, c: 54521},
+ 54524, {f: 6, c: 54526}, {f: 3, c: 54533}, {f: 3, c: 54537},
+ {f: 7, c: 54541}, 54550, {f: 36, c: 54552}, {f: 2, c: 54590},
+ {f: 3, c: 54593}, {f: 7, c: 54597}, 54606, 54608, {f: 6, c: 54610},
+ {f: 2, c: 54618}, {f: 3, c: 54621}, {f: 4, c: 54625}, {f: 2, c: 54630},
+ 54634, 54636, {f: 6, c: 54638}, {f: 2, c: 54646}, {f: 3, c: 54649},
+ {f: 7, c: 54653}, 54662, {f: 6, c: 54666}, {f: 20, c: 54673},
+ {f: 34, c: 54694}, {f: 2, c: 54730}, {f: 3, c: 54733}, 54737,
+ {f: 5, c: 54739}, 54746, 54748, {f: 6, c: 54750}, {f: 2, c: 54758},
+ {f: 3, c: 54761}, {f: 7, c: 54765}, 54774, 54776, {f: 6, c: 54778},
+ {f: 2, c: 54786}, {f: 3, c: 54789}, {f: 7, c: 54793}, 54802,
+ {f: 6, c: 54806}, {f: 3, c: 54813}, {f: 3, c: 54817}, {f: 8, c: 54821},
+ {f: 10, c: 54830}, {f: 2, c: 54842}, {f: 3, c: 54845}, {f: 4, c: 54849},
+ {f: 2, c: 54854}, 54858, 54860, {f: 3, c: 54862}, {f: 2, c: 54866},
+ {f: 2, c: 54870}, {f: 3, c: 54873}, {f: 10, c: 54877}, 54888,
+ {f: 6, c: 54890}, {f: 2, c: 54898}, {f: 14, c: 54901}, 54916,
+ {f: 6, c: 54918}, {f: 2, c: 54926}, {f: 3, c: 54929}, {f: 8, c: 54933},
+ 54942, 54944, {f: 6, c: 54946}, {f: 3, c: 54953}, {f: 3, c: 54957},
+ {f: 8, c: 54961}, 54970, {f: 8, c: 54972}, {f: 2, c: 54982},
+ {f: 3, c: 54985}, {f: 4, c: 54989}, {f: 2, c: 54994}, {f: 2, c: 54997},
+ 55000, {f: 6, c: 55002}, {f: 3, c: 55009}, {f: 3, c: 55013},
+ {f: 7, c: 55017}, {f: 4, c: 55025}, {f: 6, c: 55030}, {f: 2, c: 55038},
+ {f: 3, c: 55041}, {f: 12, c: 55045}, {f: 6, c: 55058}, {f: 2, c: 55066},
+ {f: 3, c: 55069}, {f: 7, c: 55073}, 55082, 55084, {f: 6, c: 55086},
+ {f: 2, c: 55094}, {f: 3, c: 55097}, {f: 7, c: 55101}, {f: 2, c: 55109},
+ 55112, {f: 6, c: 55114}, {f: 2, c: 55122}, 55125, {f: 6, c: 55130}, 55138,
+ 55140, {f: 3, c: 55142}, {f: 2, c: 55146}, {f: 3, c: 55149},
+ {f: 3, c: 55153}, {f: 7, c: 55157}, {f: 3, c: 55166}, {f: 6, c: 55170},
+ {f: 2, c: 55178}, {f: 3, c: 55181}, {f: 7, c: 55185}, 55194, 55196,
+ {f: 6, c: 55198}],
+ 'Adobe-CNS1': [{f: 95, c: 32}, {s: 3}, 12288, 65292, {f: 2, c: 12289}, 65294,
+ 8226, 65307, 65306, 65311, 65281, 65072, 8230, 8229, 65104, 65380, 65106,
+ 183, {f: 4, c: 65108}, 65372, 8211, 65073, 8212, {s: 4}, {f: 2, c: 65288},
+ {f: 2, c: 65077}, 65371, 65373, {f: 2, c: 65079}, {f: 2, c: 12308},
+ {f: 2, c: 65081}, {f: 2, c: 12304}, {f: 2, c: 65083}, {f: 2, c: 12298},
+ {f: 2, c: 65085}, {f: 2, c: 12296}, {f: 2, c: 65087}, {f: 2, c: 12300},
+ {f: 2, c: 65089}, {f: 2, c: 12302}, {f: 2, c: 65091}, {f: 6, c: 65113},
+ {f: 2, c: 8216}, {f: 2, c: 8220}, {f: 2, c: 12317}, 8245, 8242, 65283,
+ 65286, 65290, 8251, 167, 12291, 9675, 9679, 9651, 9650, 9678, 9734, 9733,
+ 9671, 9670, 9633, 9632, 9661, 9660, 12963, 8453, 8254, 0, 65343, 0,
+ {f: 2, c: 65097}, {f: 2, c: 65101}, {f: 2, c: 65099}, {f: 3, c: 65119},
+ 65291, 65293, 215, 247, 177, 8730, 65308, 65310, 65309, {f: 2, c: 8806},
+ 8800, 8734, 8786, 8801, {f: 5, c: 65122}, 8764, {f: 2, c: 8745}, 8869,
+ 8736, 8735, 8895, 13266, 13265, 8747, 8750, 8757, 8756, 9792, 9794, 9793,
+ 9737, 8593, 8595, 8594, 8592, {f: 2, c: 8598}, 8601, 8600, 8741, 8739, 0,
+ 0, 65295, 65340, 65284, 165, 12306, {f: 2, c: 162}, 65285, 65312, 8451,
+ 8457, {f: 3, c: 65129}, 13269, {f: 3, c: 13212}, 13262, 13217,
+ {f: 2, c: 13198}, 13252, 176, [20825, 58834], [20827, 58835],
+ [20830, 58837], [20829, 58836], 20833, 20835, 21991, [29929, 58044],
+ [31950, 58191], {f: 8, c: 9601}, 9615, 9614, 9613, 9612, 9611, 9610, 9609,
+ 9532, 9524, 9516, 9508, 9500, 9620, 9472, 9474, 9621, 9484, 9488, 9492,
+ 9496, {f: 2, c: 9581}, 9584, 9583, 9552, 9566, 9578, 9569, {f: 2, c: 9698},
+ 9701, 9700, {f: 3, c: 9585}, {f: 10, c: 65296}, {f: 10, c: 8544},
+ {f: 9, c: 12321}, 0, [21316, 57443], 0, {f: 26, c: 65313},
+ {f: 26, c: 65345}, {f: 17, c: 913}, {f: 7, c: 931}, {f: 17, c: 945},
+ {f: 7, c: 963}, {f: 37, c: 12549}, 729, 714, 711, 715, [9312, 63153],
+ [9313, 63154], [9314, 63155], [9315, 63156], [9316, 63157], [9317, 63158],
+ [9318, 63159], [9319, 63160], [9320, 63161], [9321, 63162], [9332, 63163],
+ [9333, 63164], [9334, 63165], [9335, 63166], [9336, 63167], [9337, 63168],
+ [9338, 63169], [9339, 63170], [9340, 63171], [9341, 63172], [8560, 63173],
+ [8561, 63174], [8562, 63175], [8563, 63176], [8564, 63177], [8565, 63178],
+ [8566, 63179], [8567, 63180], [8568, 63181], [8569, 63182], [12033, 20008],
+ [12034, 20022, 63183], [12035, 20031, 63184], [12037, 20101, 63185],
+ [12039, 20128, 63186], [12044, 20866, 63187], [12045, 20886, 63188],
+ [12046, 20907, 63189], [12051, 21241, 63190], [12054, 21304, 63191],
+ [12057, 21353, 63192], [12059, 21430, 63193],
+ [12065, 12066, 22786, 22794, 63194], [12071, 23424, 63195],
+ [12078, 24027, 63196], [12083, 24186, 63197], [12084, 24191, 63198],
+ [12085, 24308], [12089, 24400, 63200], [12090, 24417, 63201],
+ [12097, 25908, 63202], [12102, 26080], [12135, 30098, 63204],
+ [12136, 30326], [12193, 36789, 63206], [12202, 38582], {f: 32, c: 9216},
+ 9249, [12032, 19968], [12036, 20057], 19969, 19971, 20035, 20061, 20102,
+ [12038, 20108], [12040, 20154], [12041, 20799], [12042, 20837],
+ [12043, 20843], [12047, 20960], [12049, 20992], 20993, [12050, 21147],
+ [12052, 21269], [12055, 21313], [12056, 21340], [12060, 21448], 19977,
+ 19979, 19976, 19978, 20011, 20024, 20961, 20037, 20040, 20063, 20062,
+ 20110, 20129, [20800, 64012], 20995, 21242, 21315, 21449, [12061, 21475],
+ [12063, 22303], [12064, 22763], [12067, 22805], [12068, 22823],
+ [12069, 22899], [12070, 23376], 23377, 23379, [12072, 23544],
+ [12073, 23567], [12074, 23586], [12075, 23608], [12077, 23665], 24029,
+ [12079, 24037], [12080, 24049], {f: 2, c: 24050}, [12081, 24062],
+ [12082, 24178], [12086, 24318], [12087, 24331], [12088, 24339], 25165,
+ 19985, 19984, 19981, 20013, 20016, 20025, 20043, 23609, 20104, 20113,
+ 20117, 20114, 20116, 20130, 20161, 20160, 20163, {f: 2, c: 20166}, 20173,
+ {f: 2, c: 20170}, 20164, 20803, 20801, 20839, {f: 2, c: 20845}, 20844,
+ 20887, 20982, {f: 3, c: 20998}, 21243, {f: 2, c: 21246}, 21270, 21305,
+ 21320, 21319, 21317, 21342, 21380, 21451, 21450, 21453, 22764, 22825,
+ 22827, 22826, 22829, 23380, 23569, 23588, 23610, 23663, 24052, 24187,
+ 24319, {f: 2, c: 24340}, [12092, 24515], [12093, 25096], [12094, 25142],
+ [12095, 25163], 25166, [12096, 25903], [12098, 25991], [12099, 26007],
+ [12100, 26020], [12101, 26041], [12103, 26085], [12104, 26352],
+ [12105, 26376], [12106, 26408], [12107, 27424], [12108, 27490],
+ [12109, 27513], [12111, 27595], [12112, 27604], [12113, 27611],
+ [12114, 27663], [12116, 27700], [12117, 28779], [12118, 29226],
+ [12119, 29238], [12120, 29243], [12122, 29255], [12123, 29273],
+ [12124, 29275], [12125, 29356], 29579, 19993, 19990, 19989, 19988, 19992,
+ 20027, 20045, 20047, 20046, 20197, 20184, {f: 4, c: 20180},
+ {f: 2, c: 20195}, 20185, 20190, 20805, 20804, {f: 2, c: 20873}, 20908,
+ {f: 2, c: 20985}, 20984, 21002, 21152, 21151, [21253, 57435], 21254, 21271,
+ 21277, 20191, 21322, 21321, 21345, 21344, 21359, 21358, 21435, 21487,
+ 21476, 21491, 21484, 21486, 21481, 21480, 21500, 21496, 21493, 21483,
+ 21478, 21482, 21490, 21489, 21488, 21477, 21485, 21499, 22235, 22234,
+ 22806, 22830, 22833, 22900, 22902, 23381, 23427, 23612, 24040, 24039,
+ 24038, {f: 2, c: 24066}, 24179, 24188, 24321, 24344, 24343, 24517, 25098,
+ {f: 2, c: 25171}, 25170, 25169, 26021, 26086, 26414, 26412,
+ {f: 2, c: 26410}, 26413, 27491, 27597, 27665, 27664, 27704, 27713, 27712,
+ 27710, 29359, [12126, 29572], [12127, 29577], [12128, 29916],
+ [12129, 29926], [12130, 29976], [12131, 29983], [12132, 29992], 29993,
+ [12133, 30000], {f: 3, c: 30001}, [12134, 30091], [12137, 30333],
+ [12138, 30382], [12139, 30399], [12140, 30446], [12141, 30683],
+ [12142, 30690], [12143, 30707], [12144, 31034], [12146, 31166],
+ [12147, 31348], [12148, 31435], {f: 2, c: 19998}, {f: 2, c: 20050}, 20073,
+ 20121, 20132, 20134, 20133, 20223, 20233, 20249, 20234, 20245, 20237,
+ {f: 2, c: 20240}, 20239, 20210, 20214, 20219, 20208, 20211, 20221, 20225,
+ 20235, 20809, 20807, 20806, 20808, 20840, 20849, 20877, 20912, 21015,
+ {f: 2, c: 21009}, 21006, 21014, 21155, 21256, 21281, 21280,
+ {f: 2, c: 21360}, 21513, 21519, 21516, 21514, 21520, 21505, 21515, 21508,
+ 21521, 21517, 21512, 21507, 21518, 21510, 21522, 22240, 22238, 22237,
+ 22323, 22320, 22312, 22317, 22316, 22319, 22313, {f: 2, c: 22809},
+ {f: 2, c: 22839}, 22916, 22904, 22915, 22909, 22905, 22914, 22913,
+ {f: 2, c: 23383}, {f: 2, c: 23431}, 23429, 23433, 23546, 23574, 23673,
+ 24030, 24070, 24182, 24180, 24335, 24347, 24537, 24534, 25102,
+ {f: 2, c: 25100}, 25104, 25187, 25179, 25176, 25910, 26089, 26088,
+ {f: 2, c: 26092}, {f: 2, c: 26354}, 26377, 26429, 26420, 26417, 26421,
+ 27425, 27492, 27515, 27670, 27741, 27735, 27737, {f: 2, c: 27743}, 27728,
+ 27733, 27745, 27739, {f: 2, c: 27725}, 28784, 29279, 29277, 30334,
+ [12149, 31481], [12150, 31859], [12151, 31992], [12152, 32566],
+ [12154, 32650], [12155, 32701], [12156, 32769], 32771, [12157, 32780],
+ [12158, 32786], [12159, 32819], [12160, 32895], [12161, 32905],
+ {f: 2, c: 32907}, [12162, 33251], [12163, 33258], [12164, 33267],
+ [12165, 33276], [12166, 33292], [12167, 33307], [12168, 33311],
+ [12169, 33390], [12170, 33394], 33406, [12173, 34411], [12174, 34880],
+ [12175, 34892], [12176, 34915], 35199, 38433, 20018, 20136, 20301, 20303,
+ 20295, 20311, 20318, 20276, 20315, 20309, 20272, {f: 2, c: 20304}, 20285,
+ 20282, 20280, 20291, 20308, 20284, 20294, 20323, 20316, 20320, 20271,
+ 20302, 20278, 20313, 20317, 20296, 20314, 20812, 20811, 20813, 20853,
+ {f: 2, c: 20918}, 21029, 21028, {f: 2, c: 21033}, 21032, 21163,
+ {f: 2, c: 21161}, 21164, 21283, 21363, 21365, 21533, 21549, 21534, 21566,
+ 21542, 21582, 21543, 21574, 21571, 21555, 21576, 21570, 21531, 21545,
+ 21578, 21561, 21563, 21560, 21550, {f: 2, c: 21557}, 21536, 21564, 21568,
+ 21553, 21547, 21535, 21548, 22250, 22256, 22244, 22251, 22346, 22353,
+ 22336, 22349, 22343, 22350, 22334, 22352, 22351, 22331, 22767, 22846,
+ 22941, 22930, 22952, 22942, 22947, 22937, 22934, 22925, 22948, 22931,
+ 22922, 22949, 23389, 23388, {f: 2, c: 23386}, 23436, 23435, 23439, 23596,
+ {f: 2, c: 23616}, 23615, 23614, {f: 2, c: 23696}, 23700, 23692, 24043,
+ 24076, 24207, 24199, 24202, 24311, 24324, 24351, 24420, 24418, 24439,
+ 24441, 24536, 24524, 24535, 24525, 24561, 24555, 24568, 24554, 25106,
+ 25105, 25220, 25239, 25238, 25216, 25206, 25225, 25197, 25226, 25212,
+ 25214, 25209, 25203, 25234, 25199, 25240, 25198, 25237, 25235, 25233,
+ 25222, 25913, 25915, 25912, 26097, 26356, 26463, {f: 4, c: 26446}, 26460,
+ 26454, [26462, 57801], 26441, 26438, 26464, 26451, 26455, 27493, 27599,
+ 27714, 27742, 27801, 27777, {f: 2, c: 27784}, 27781, 27803, 27754, 27770,
+ 27792, 27760, 27788, 27752, 27798, 27794, 27773, 27779, 27762, 27774,
+ 27764, 27782, 27766, 27789, 27796, 27800, 27778, 28790, {f: 2, c: 28796},
+ 28792, 29282, 29281, 29280, 29380, 29378, 29590, 29996, 29995,
+ {f: 2, c: 30007}, 30338, 30447, 30691, 31169, 31168, 31167, 31350, 31995,
+ 32597, 32918, 32915, 32925, 32920, 32923, 32922, 32946, 33391, 33426,
+ 33419, 33421, [12178, 35211], [12179, 35282], [12180, 35328],
+ [12181, 35895], [12182, 35910], [12183, 35925], [12185, 35997],
+ [12186, 36196], [12187, 36208], [12188, 36275], [12189, 36523],
+ [12190, 36554], [12191, 36763], [12192, 36784], 36802, 36806, 36805, 36804,
+ 24033, [12194, 37009], 37026, 37034, 37030, 37027, [12195, 37193],
+ [12196, 37318], [12197, 37324], 38450, 38446, 38449, 38442, 38444, 20006,
+ 20054, 20083, 20107, 20123, 20126, {f: 2, c: 20139}, 20335, 20381, 20365,
+ 20339, 20351, 20332, 20379, 20363, 20358, 20355, 20336, 20341, 20360,
+ 20329, 20347, 20374, 20350, 20367, 20369, 20346, 20820, 20818, 20821,
+ 20841, 20855, 20854, 20856, 20925, 20989, 21051, 21048, 21047, 21050,
+ 21040, 21038, 21046, 21057, 21182, 21179, 21330, 21332, 21331, 21329,
+ 21350, {f: 3, c: 21367}, 21462, 21460, 21463, 21619, 21621, 21654, 21624,
+ 21653, 21632, 21627, 21623, 21636, 21650, 21638, 21628, 21648, 21617,
+ 21622, 21644, 21658, 21602, 21608, 21643, 21629, 21646, 22266, 22403,
+ 22391, 22378, 22377, 22369, 22374, 22372, 22396, 22812, 22857,
+ {f: 2, c: 22855}, 22852, 22868, 22974, 22971, 22996, 22969, 22958, 22993,
+ 22982, 22992, 22989, 22987, 22995, 22986, 22959, 22963, 22994, 22981,
+ 23391, 23396, 23395, 23447, 23450, 23448, 23452, 23449, 23451, 23578,
+ 23624, {f: 2, c: 23621}, 23735, 23713, 23736, 23721, 23723, 23729, 23731,
+ 24088, 24090, 24086, 24085, 24091, 24081, 24184, 24218, 24215, 24220,
+ {f: 2, c: 24213}, 24310, {f: 2, c: 24358}, 24361, {f: 2, c: 24448}, 24447,
+ 24444, 24541, 24544, 24573, 24565, 24575, 24591, 24596, 24623, 24629,
+ 24598, 24618, 24597, 24609, 24615, 24617, 24619, 24603, 25110, 25109,
+ 25151, 25150, 25152, 25215, 25289, 25292, 25284, 25279, 25282, 25273,
+ 25298, 25307, 25259, {f: 2, c: 25299}, 25291, 25288, 25256, 25277, 25276,
+ [25296, 60582], 25305, 25287, 25293, 25269, 25306, 25265, 25304,
+ {f: 2, c: 25302}, 25286, 25260, [25294, 61010], 25918, 26023, 26044, 26106,
+ 26132, 26131, 26124, 26118, 26114, 26126, 26112, 26127, 26133, 26122,
+ 26119, 26381, 26379, 26477, 26507, 26517, 26481, 26524, 26483, 26487,
+ 26503, 26525, 26519, {f: 2, c: 26479}, 26495, 26505, 26494, 26512, 26485,
+ 26522, 26515, 26492, 26474, 26482, 27427, {f: 2, c: 27494}, 27519, 27667,
+ 27675, 27875, 27880, 27891, 27825, 27852, 27877, 27827, {f: 2, c: 27837},
+ 27836, 27874, 27819, 27861, 27859, 27832, 27844, 27833, 27841, 27822,
+ 27863, 27845, 27889, 27839, 27835, 27873, 27867, 27850, 27820, 27887,
+ 27868, 27862, 27872, 28821, 28814, 28818, 28810, 28825, {f: 2, c: 29228},
+ 29240, 29256, 29287, 29289, 29376, 29390, 29401, 29399, 29392, 29609,
+ 29608, 29599, 29611, 29605, 30013, 30109, {f: 2, c: 30105}, 30340, 30402,
+ 30450, 30452, 30693, 30717, 31038, {f: 2, c: 31040}, 31177, 31176, 31354,
+ 31353, 31482, 31998, 32596, 32652, 32651, [32773, 58236], 32954, 32933,
+ 32930, 32945, 32929, 32939, 32937, 32948, 32938, 32943, 33253, 33278,
+ 33293, 33459, 33437, 33433, 33453, 33469, 33439, 33465, 33457, 33452,
+ 33445, 33455, 33464, 33443, 33456, 33470, 33463, 34382, 34417, 21021,
+ 34920, 36555, 36814, 36820, 36817, 37045, 37048, 37041, 37046, 37319,
+ [12198, 37329], [12199, 38263], [12200, 38272], [12201, 38428], 38464,
+ 38463, 38459, 38468, 38466, [12203, 38585], [12204, 38632], 38738,
+ [12206, 38750], 20127, {f: 2, c: 20141}, 20449, 20405, 20399, 20415, 20448,
+ 20433, 20431, 20445, 20419, 20406, 20440, 20447, 20426, 20439, 20398,
+ 20432, 20420, 20418, 20442, 20430, 20446, 20407, 20823, 20882, 20881,
+ 20896, 21070, 21059, 21066, 21069, 21068, 21067, 21063, 21191, 21193,
+ 21187, 21185, 21261, 21335, 21371, 21402, 21467, 21676, 21696, 21672,
+ 21710, 21705, 21688, 21670, 21683, 21703, 21698, 21693, 21674, 21697,
+ 21700, 21704, 21679, 21675, 21681, 21691, 21673, 21671, 21695, 22271,
+ 22402, 22411, 22432, 22435, 22434, 22478, 22446, 22419, 22869, 22865,
+ 22863, 22862, 22864, 23004, 23000, 23039, 23011, 23016, 23043, 23013,
+ 23018, 23002, 23014, 23041, 23035, 23401, 23459, 23462, 23460, 23458,
+ 23461, 23553, {f: 2, c: 23630}, 23629, 23627, 23769, 23762, 24055, 24093,
+ 24101, 24095, 24189, 24224, 24230, 24314, 24328, 24365, 24421, 24456,
+ 24453, {f: 2, c: 24458}, 24455, 24460, 24457, 24594, 24605, 24608, 24613,
+ 24590, 24616, 24653, 24688, 24680, [24674, 60712], 24646, 24643, 24684,
+ 24683, 24682, 24676, 25153, 25308, 25366, 25353, 25340, 25325, 25345,
+ 25326, 25341, 25351, 25329, 25335, 25327, 25324, 25342, 25332, 25361,
+ 25346, 25919, 25925, 26027, 26045, 26082, 26149, 26157, 26144, 26151,
+ 26159, 26143, 26152, 26161, 26148, 26359, 26623, 26579, 26609, 26580,
+ 26576, 26604, 26550, 26543, 26613, 26601, 26607, 26564, 26577, 26548,
+ 26586, 26597, 26552, 26575, 26590, 26611, 26544, 26585, 26594, 26589,
+ 26578, 27498, 27523, 27526, 27573, 27602, 27607, 27679, 27849, 27915,
+ 27954, 27946, 27969, 27941, 27916, 27953, 27934, 27927, 27963,
+ {f: 2, c: 27965}, 27958, 27931, 27893, 27961, 27943, 27960, 27945, 27950,
+ 27957, 27918, 27947, 28843, 28858, 28851, 28844, 28847, 28845, 28856,
+ 28846, 28836, 29232, 29298, 29295, 29300, 29417, {f: 2, c: 29408}, 29623,
+ 29642, 29627, 29618, 29645, 29632, 29619, 29978, 29997, 30031, 30028,
+ 30030, 30027, 30123, {f: 2, c: 30116}, {f: 2, c: 30114}, 30328,
+ {f: 3, c: 30342}, 30408, 30406, 30403, 30405, 30465, 30457, 30456, 30473,
+ 30475, 30462, 30460, 30471, 30684, 30722, 30740, {f: 2, c: 30732}, 31046,
+ 31049, 31048, 31047, {f: 2, c: 31161}, {f: 2, c: 31185}, 31179, 31359,
+ 31361, 31487, 31485, 31869, 32002, 32005, 32000, 32009, 32007, 32004,
+ 32006, 32568, 32654, 32703, 32784, 32781, 32785, 32822, 32982, 32997,
+ 32986, {f: 2, c: 32963}, 32972, 32993, 32987, 32974, 32990, 32996, 32989,
+ 33268, 33314, 33511, 33539, 33541, 33507, 33499, 33510, 33540, 33509,
+ 33538, 33545, 33490, 33495, 33521, 33537, 33500, 33492, 33489, 33502,
+ 33491, 33503, 33519, 33542, 34384, 34425, 34427, 34426, 34893, 34923,
+ 35201, 35284, 35336, {f: 2, c: 35330}, 35998, 36000, 36212, 36211, 36276,
+ 36557, 36556, 36848, 36838, 36834, 36842, 36837, 36845, 36843, 36836,
+ 36840, 37066, 37070, 37057, 37059, 37195, 37194, 37325, 38274, 38480,
+ {f: 3, c: 38475}, [12207, 38754], [12208, 38761], [12209, 38859],
+ [12210, 38893], [12211, 38899], [12212, 38913], [12213, 39080],
+ [12214, 39131], [12215, 39135], [12216, 39318], [12217, 39321], 20056,
+ 20147, {f: 2, c: 20492}, 20515, 20463, 20518, 20517, 20472, [20521, 57375],
+ 20502, 20486, 20540, 20511, 20506, 20498, 20497, 20474, 20480, 20500,
+ 20520, 20465, 20513, 20491, 20505, 20504, 20467, 20462, 20525, 20522,
+ 20478, 20523, 20489, 20860, {f: 2, c: 20900}, 20898, 20941, 20940, 20934,
+ 20939, 21078, 21084, 21076, 21083, 21085, 21290, [21375, 57459], 21407,
+ 21405, 21471, 21736, 21776, 21761, 21815, 21756, 21733, 21746, 21766,
+ 21754, 21780, 21737, 21741, 21729, 21769, 21742, 21738, 21734, 21799,
+ 21767, 21757, 21775, {f: 2, c: 22275}, 22466, 22484, 22475, 22467, 22537,
+ 22799, {f: 2, c: 22871}, 22874, 23057, 23064, 23068, 23071, 23067, 23059,
+ 23020, 23072, 23075, 23081, 23077, 23052, 23049, 23403, 23640, 23472,
+ 23475, 23478, 23476, 23470, 23477, 23481, 23480, 23556, 23633, 23637,
+ 23632, 23789, 23805, 23803, 23786, 23784, 23792, 23798, 23809, 23796,
+ 24046, 24109, 24107, 24235, 24237, 24231, 24369, 24466, 24465, 24464,
+ 24665, 24675, 24677, 24656, 24661, 24685, 24681, 24687, 24708, 24735,
+ 24730, 24717, 24724, 24716, 24709, 24726, 25159, 25331, 25352, 25343,
+ 25422, 25406, 25391, 25429, 25410, 25414, 25423, 25417, 25402, 25424,
+ 25405, {f: 2, c: 25386}, 25384, 25421, 25420, {f: 2, c: 25928}, 26009,
+ 26049, 26053, 26178, 26185, 26191, 26179, 26194, 26188, 26181, 26177,
+ 26360, {f: 2, c: 26388}, 26391, 26657, 26680, 26696, 26694, 26707, 26681,
+ 26690, 26708, 26665, 26803, 26647, 26700, 26705, 26685, 26612, 26704,
+ 26688, 26684, 26691, 26666, 26693, 26643, 26648, 26689, 27530, 27529,
+ 27575, 27683, {f: 2, c: 27687}, 27686, 27684, 27888, 28010, 28053, 28040,
+ 28039, 28006, 28024, 28023, 27993, 28051, 28012, 28041, 28014, 27994,
+ 28020, 28009, 28044, 28042, 28025, 28037, 28005, 28052, 28874, 28888,
+ 28900, 28889, 28872, 28879, 29241, 29305, 29436, 29433, 29437, 29432,
+ 29431, 29574, 29677, 29705, 29678, 29664, 29674, 29662, 30036, 30045,
+ 30044, 30042, 30041, 30142, 30149, 30151, {f: 2, c: 30130}, 30141, 30140,
+ 30137, 30146, 30136, 30347, 30384, 30410, {f: 2, c: 30413}, 30505,
+ {f: 2, c: 30495}, 30504, 30697, 30768, 30759, 30776, 30749, 30772, 30775,
+ 30757, 30765, 30752, 30751, 30770, 31061, 31056, 31072, 31071, 31062,
+ 31070, 31069, 31063, 31066, 31204, [31203, 60418], 31207, 31199, 31206,
+ 31209, 31192, 31364, 31368, 31449, 31494, 31505, 31881, 32033, 32023,
+ 32011, 32010, 32032, 32034, 32020, 32016, 32021, 32026, 32028, 32013,
+ 32025, 32027, 32570, 32607, 32660, 32709, 32705, 32774, 32772, 32792,
+ 32789, 32793, 32791, 32829, 32831, 33009, 33026, 33008, 33029, 33005,
+ 33012, 33030, 33016, 33011, 33032, 33021, 33034, 33020, 33007, 33261,
+ 33260, 33280, 33296, {f: 2, c: 33322}, 33320, 33324, 33467, 33579, 33618,
+ 33620, 33610, 33592, 33616, 33609, 33589, 33588, 33615, 33586, 33593,
+ 33590, 33559, 33600, 33585, 33576, 33603, 34388, 34442, 34474, 34451,
+ 34468, 34473, 34444, 34467, 34460, 34928, 34935, {f: 2, c: 34945}, 34941,
+ 34937, 35352, 35344, 35342, 35340, 35349, 35338, 35351, 35347, 35350,
+ 35343, 35345, 35912, 35962, 35961, {f: 2, c: 36001}, [36215, 58442], 36524,
+ 36562, 36564, 36559, 36785, 36865, 36870, 36855, 36864, 36858, 36852,
+ 36867, 36861, 36869, 36856, 37013, 37089, 37085, 37090, 37202, 37197,
+ 37196, 37336, 37341, 37335, 37340, 37337, 38275, {f: 2, c: 38498}, 38497,
+ 38491, 38493, 38500, 38488, 38494, 38587, 39138, [12218, 39340],
+ [12219, 39592], [12220, 39640], [12222, 39717], [12224, 39730],
+ [12225, 39740], 20094, 20602, [20605, 57382], 20572, 20551, 20547, 20556,
+ 20570, 20553, 20581, 20598, 20558, 20565, 20597, 20596, 20599, 20559,
+ 20495, 20591, 20589, 20828, 20885, 20976, 21098, 21103, 21202, 21209,
+ 21208, 21205, 21264, 21263, 21273, {f: 2, c: 21311}, 21310, 21443, 26364,
+ 21830, 21866, 21862, 21828, 21854, 21857, 21827, 21834, 21809, 21846,
+ 21839, 21845, 21807, 21860, 21816, 21806, 21852, 21804, 21859, 21811,
+ 21825, 21847, 22280, 22283, 22281, 22495, 22533, 22538, 22534, 22496,
+ 22500, 22522, 22530, 22581, 22519, 22521, 22816, 22882, 23094, 23105,
+ 23113, 23142, 23146, 23104, 23100, 23138, 23130, 23110, 23114, 23408,
+ 23495, 23493, 23492, 23490, 23487, 23494, 23561, 23560, 23559, 23648,
+ {f: 2, c: 23644}, 23815, 23814, 23822, 23835, 23830, 23842, 23825, 23849,
+ 23828, 23833, 23844, 23847, 23831, 24034, 24120, 24118, 24115, 24119,
+ {f: 2, c: 24247}, 24246, 24245, 24254, 24373, 24375, 24407, 24428, 24425,
+ 24427, 24471, 24473, 24478, 24472, 24481, 24480, 24476, 24703, 24739,
+ 24713, 24736, 24744, 24779, 24756, 24806, 24765, 24773, 24763, 24757,
+ 24796, 24764, 24792, 24789, 24774, 24799, 24760, 24794, 24775,
+ {f: 2, c: 25114}, 25160, 25504, 25511, 25458, 25494, 25506, 25509, 25463,
+ 25447, 25496, 25514, 25457, 25513, 25481, 25475, 25499, 25451, 25512,
+ 25476, 25480, 25497, 25505, 25516, 25490, 25487, 25472, 25467, 25449,
+ 25448, 25466, 25949, 25942, 25937, 25945, 25943, 21855, 25935, 25944,
+ 25941, 25940, 26012, 26011, 26028, 26063, {f: 2, c: 26059}, 26062, 26205,
+ 26202, 26212, 26216, 26214, 26206, 26361, 21207, 26395, 26753, 26799,
+ 26786, 26771, 26805, 26751, 26742, 26801, 26791, 26775, 26800, 26755,
+ 26820, 26797, 26758, 26757, 26772, 26781, 26792, 26783, 26785, 26754,
+ 27442, 27578, {f: 2, c: 27627}, 27691, 28046, 28092, 28147, 28121, 28082,
+ 28129, 28108, 28132, 28155, 28154, 28165, 28103, 28107, 28079, 28113,
+ 28078, 28126, 28153, 28088, 28151, 28149, 28101, 28114, 28186, 28085,
+ 28122, 28139, 28120, 28138, 28145, 28142, 28136, 28102, 28100, 28074,
+ 28140, 28095, 28134, 28921, {f: 2, c: 28937}, 28925, 28911, 29245, 29309,
+ 29313, 29468, 29467, 29462, 29459, 29465, 29575, 29701, 29706, 29699,
+ 29702, 29694, 29709, 29920, {f: 2, c: 29942}, 29980, 29986,
+ {f: 2, c: 30053}, 30050, 30064, 30095, {f: 2, c: 30164}, 30133, 30154,
+ 30157, 30350, 30420, 30418, 30427, 30519, 30526, 30524, 30518, 30520,
+ 30522, 30827, 30787, 30798, 31077, 31080, 31085, 31227, 31378, 31381,
+ 31520, 31528, 31515, 31532, 31526, 31513, 31518, 31534, 31890, 31895,
+ 31893, 32070, 32067, 32113, 32046, 32057, 32060, 32064, 32048, 32051,
+ 32068, 32047, 32066, 32050, 32049, 32573, 32670, 32666, 32716, 32718,
+ 32722, 32796, 32842, 32838, 33071, 33046, 33059, 33067, 33065, 33072,
+ 33060, 33282, 33333, 33335, 33334, 33337, 33678, 33694, 33688, 33656,
+ 33698, 33686, 33725, 33707, 33682, 33674, 33683, 33673, 33696, 33655,
+ {f: 2, c: 33659}, 33670, 33703, 34389, 24426, 34503, 34496, 34486, 34500,
+ 34485, 34502, 34507, 34481, 34479, 34505, 34899, 34974, 34952, 34987,
+ 34962, 34966, 34957, 34955, 35219, 35215, 35370, 35357, 35363, 35365,
+ 35377, 35373, 35359, 35355, 35362, 35913, 35930, 36009, 36012, 36011,
+ 36008, 36010, 36007, 36199, 36198, 36286, 36282, 36571, 36575, 36889,
+ 36877, 36890, 36887, 36899, 36895, 36893, 36880, 36885, 36894, 36896,
+ 36879, 36898, 36886, 36891, 36884, 37096, 37101, [37117, 58488], 37207,
+ 37326, 37365, 37350, 37347, 37351, 37357, 37353, 38281, 38506, 38517,
+ 38515, 38520, 38512, 38516, {f: 2, c: 38518}, 38508, 38592, 38634, 38633,
+ 31456, 31455, {f: 2, c: 38914}, [12226, 39770], [12227, 40165],
+ [12228, 40565], [12229, 40575], [12230, 40613], [12231, 40635], 20642,
+ 20621, 20613, 20633, 20625, 20608, 20630, 20632, 20634, 26368, 20977,
+ 21106, {f: 2, c: 21108}, 21097, 21214, 21213, 21211, 21338, 21413, 21883,
+ 21888, 21927, 21884, 21898, 21917, 21912, 21890, 21916, 21930, 21908,
+ 21895, 21899, 21891, 21939, 21934, 21919, 21822, 21938, 21914, 21947,
+ 21932, 21937, 21886, 21897, 21931, 21913, 22285, 22575, 22570, 22580,
+ 22564, {f: 2, c: 22576}, 22561, 22557, 22560, {f: 2, c: 22777}, 22880,
+ [23159, 57587], 23194, 23167, 23186, 23195, 23207, 23411, 23409, 23506,
+ 23500, 23507, 23504, {f: 2, c: 23562}, 23601, 23884, 23888, 23860, 23879,
+ 24061, 24133, 24125, 24128, 24131, 24190, 24266, {f: 2, c: 24257}, 24260,
+ 24380, 24429, {f: 2, c: 24489}, 24488, 24785, 24801, 24754, 24758, 24800,
+ 24860, 24867, 24826, 24853, 24816, 24827, 24820, 24936, 24817, 24846,
+ 24822, 24841, 24832, 24850, 25119, 25161, 25507, 25484, 25551, 25536,
+ 25577, 25545, 25542, 25549, 25554, 25571, 25552, 25569, 25558,
+ {f: 2, c: 25581}, 25462, 25588, 25578, 25563, 25682, 25562, 25593, 25950,
+ 25958, {f: 2, c: 25954}, 26001, 26000, 26031, 26222, 26224, [26228, 57786],
+ 26230, 26223, 26257, 26234, 26238, 26231, {f: 2, c: 26366}, 26399, 26397,
+ 26874, 26837, 26848, 26840, 26839, 26885, 26847, 26869, 26862, 26855,
+ 26873, 26834, 26866, 26851, 26827, 26829, 26893, 26898, 26894, 26825,
+ 26842, 26990, 26875, 27454, 27450, 27453, 27544, 27542, 27580, 27631,
+ {f: 2, c: 27694}, 27692, [28207, 57904], 28216, 28244, 28193, 28210, 28263,
+ 28234, 28192, 28197, 28195, 28187, 28251, 28248, 28196, 28246, 28270,
+ 28205, 28198, 28271, 28212, 28237, 28218, 28204, 28227, [28189, 57901],
+ 28222, 28363, 28297, 28185, 28238, 28259, 28228, 28274, 28265, 28255,
+ {f: 2, c: 28953}, 28966, 28976, 28961, 28982, [29038, 57958], 28956, 29260,
+ 29316, 29312, 29494, 29477, 29492, 29481, 29754, 29738, 29747, 29730,
+ 29733, {f: 2, c: 29749}, 29748, 29743, 29723, 29734, 29736,
+ {f: 2, c: 29989}, 30059, 30058, 30178, 30171, 30179, 30169, 30168, 30174,
+ 30176, {f: 2, c: 30331}, 30358, 30355, 30388, 30428, 30543, 30701, 30813,
+ 30828, 30831, 31245, 31240, 31243, 31237, 31232, 31384, 31383, 31382,
+ 31461, 31459, 31561, 31574, 31558, 31568, 31570, 31572, 31565, 31563,
+ 31567, [31569, 60510], 31903, 31909, 32094, 32080, 32104, 32085, 32043,
+ 32110, 32114, 32097, 32102, 32098, 32112, 32115, 21892, {f: 2, c: 32724},
+ 32779, 32850, 32901, 33109, 33108, 33099, 33105, 33102, 33081, 33094,
+ 33086, 33100, 33107, 33140, 33298, 33308, 33769, 33795, 33784, 33805,
+ 33760, 33733, 33803, [33729, 58309], 33775, 33777, 33780, 33879, 33802,
+ 33776, 33804, 33740, 33789, 33778, 33738, 33848, 33806, 33796, 33756,
+ 33799, 33748, 33759, 34395, 34527, 34521, 34541, 34516, 34523, 34532,
+ 34512, 34526, 34903, {f: 2, c: 35009}, 34993, 35203, 35222, 35387, 35424,
+ 35413, 35422, 35388, 35393, 35412, 35419, 35408, 35398, 35380, 35386,
+ 35382, 35414, 35937, 35970, 36015, 36028, 36019, 36029, 36033, 36027,
+ 36032, 36020, 36023, 36022, 36031, 36024, 36234, 36229, 36225, 36302,
+ 36317, 36299, 36314, 36305, 36300, 36315, 36294, 36603, 36600, 36604,
+ 36764, 36910, 36917, 36913, 36920, 36914, 36918, 37122, 37109, 37129,
+ 37118, 37219, 37221, 37327, {f: 2, c: 37396}, 37411, 37385, 37406, 37389,
+ 37392, 37383, 37393, 38292, 38287, 38283, 38289, 38291, 38290, 38286,
+ 38538, 38542, 38539, 38525, {f: 2, c: 38533}, 38541, 38514, 38532, 38593,
+ 38597, 38596, {f: 2, c: 38598}, 38639, 38642, 38860, {f: 2, c: 38917},
+ 38920, 39143, 39146, 39151, 39145, 39154, 39149, 39342, 39341,
+ [12232, 40643], [12233, 40653], [12234, 40657], 20098, 20653, 20661,
+ {f: 2, c: 20658}, 20677, 20670, 20652, 20663, 20667, 20655, 20679, 21119,
+ 21111, 21117, 21215, 21222, 21220, {f: 2, c: 21218}, 21295, 21983, 21992,
+ 21971, 21990, 21966, 21980, 21959, 21969, {f: 2, c: 21987}, 21999, 21978,
+ 21985, {f: 2, c: 21957}, 21989, 21961, {f: 2, c: 22290}, 22622, 22609,
+ 22616, 22615, 22618, 22612, 22635, 22604, 22637, 22602, 22626, 22610,
+ 22603, 22887, 23233, 23241, 23244, 23230, 23229, 23228, 23219, 23234,
+ 23218, 23913, 23919, 24140, 24185, 24265, 24264, 24338, 24409, 24492,
+ 24494, 24858, 24847, 24904, 24863, 24819, 24859, 24825, 24833, 24840,
+ 24910, 24908, 24900, 24909, 24894, 24884, 24871, 24845, 24838, 24887,
+ {f: 2, c: 25121}, 25619, 25662, 25630, 25642, 25645, 25661, 25644, 25615,
+ 25628, 25620, 25613, 25654, {f: 2, c: 25622}, 25606, 25964, 26015, 26032,
+ 26263, 26249, {f: 2, c: 26247}, 26262, 26244, 26264, 26253, 26371, 27028,
+ 26989, 26970, 26999, 26976, 26964, 26997, 26928, 27010, 26954, 26984,
+ 26987, 26974, 26963, 27001, 27014, 26973, 26979, 26971, 27463, 27506,
+ 27584, 27583, 27603, 27645, 28322, 28335, 28371, 28342, 28354, 28304,
+ 28317, 28359, 28357, 28325, 28312, 28348, 28346, 28331, 28369, 28310,
+ 28316, 28356, 28372, 28330, 28327, 28340, 29006, 29017, 29033, 29028,
+ 29001, 29031, 29020, 29036, 29030, 29004, 29029, 29022, 28998, 29032,
+ 29014, 29242, 29266, 29495, 29509, 29503, 29502, 29807, 29786, 29781,
+ 29791, 29790, 29761, 29759, 29785, 29787, [29788, 58019], 30070, 30072,
+ 30208, 30192, 30209, 30194, 30193, 30202, 30207, 30196, 30195,
+ {f: 2, c: 30430}, 30555, 30571, 30566, 30558, 30563, 30585, 30570, 30572,
+ 30556, 30565, 30568, 30562, 30702, 30862, 30896, {f: 2, c: 30871}, 30860,
+ 30857, 30844, 30865, 30867, 30847, 31098, 31103, 31105, 33836, 31165,
+ 31260, 31258, 31264, 31252, 31263, 31262, {f: 2, c: 31391}, 31607, 31680,
+ 31584, 31598, 31591, 31921, 31923, 31925, 32147, 32121, 32145, 32129,
+ 32143, 32091, 32622, {f: 2, c: 32617}, 32626, 32681, 32680, 32676, 32854,
+ 32856, 32902, 32900, 33137, 33136, 33144, 33125, 33134, 33139, 33131,
+ {f: 2, c: 33145}, 33126, 33285, 33351, 33922, 33911, 33853, 33841, 33909,
+ 33894, 33899, 33865, 33900, 33883, 33852, 33845, 33889, 33891, 33897,
+ 33901, 33862, 34398, 34396, 34399, 34553, 34579, 34568, 34567, 34560,
+ 34558, 34555, {f: 2, c: 34562}, 34566, 34570, 34905, 35039, 35028, 35033,
+ 35036, 35032, 35037, 35041, 35018, 35029, 35026, 35228, 35299, 35435,
+ {f: 2, c: 35442}, 35430, 35433, 35440, 35463, 35452, 35427, 35488, 35441,
+ 35461, 35437, 35426, 35438, 35436, 35449, 35451, 35390, 35432, 35938,
+ 35978, 35977, 36042, {f: 2, c: 36039}, 36036, 36018, 36035, 36034, 36037,
+ 36321, 36319, 36328, 36335, 36339, 36346, 36330, 36324, 36326, 36530,
+ 36611, 36617, 36606, 36618, 36767, 36786, 36939, 36938, 36947, 36930,
+ 36948, 36924, 36949, 36944, 36935, 36943, 36942, 36941, 36945, 36926,
+ 36929, 37138, 37143, 37228, 37226, 37225, 37321, 37431, 37463, 37432,
+ 37437, 37440, 37438, 37467, 37451, 37476, 37457, 37428, 37449, 37453,
+ 37445, 37433, 37439, 37466, 38296, 38552, {f: 2, c: 38548}, 38605, 38603,
+ {f: 2, c: 38601}, 38647, 38651, 38649, 38646, 38742, 38772, 38774,
+ {f: 2, c: 38928}, 38931, 38922, 38930, 38924, 39164, 39156,
+ {f: 2, c: 39165}, 39347, 39345, 39348, 39649, 40169, 40578, [12237, 40718],
+ [12238, 40723], [12239, 40736], 20711, 20718, 20709, 20694, [20717, 60903],
+ 20698, 20693, 20687, 20689, 20721, 20686, 20713, 20834, 20979, 21123,
+ 21122, 21297, 21421, 22014, 22016, 22043, 22039, 22013, 22036, 22022,
+ 22025, {f: 2, c: 22029}, 22007, 22038, 22047, 22024, 22032, 22006, 22296,
+ 22294, 22645, 22654, 22659, 22675, 22666, 22649, 22661, 22653, 22781,
+ 22821, 22818, 22820, 22890, 22889, 23265, 23270, 23273, 23255, 23254,
+ 23256, 23267, 23413, 23518, 23527, 23521, {f: 2, c: 23525}, 23528, 23522,
+ 23524, 23519, 23565, 23650, 23940, 23943, 24155, 24163, 24149, 24151,
+ 24148, 24275, 24278, 24330, 24390, 24432, 24505, 24903, 24895, 24907,
+ 24951, {f: 2, c: 24930}, 24927, 24922, 24920, 24949, 25130, 25735, 25688,
+ 25684, 25764, 25720, 25695, 25722, 25681, 25703, 25652, 25709, 25723,
+ 25970, 26017, 26071, 26070, 26274, 26280, 26269, 27036, 27048, 27029,
+ 27073, 27054, 27091, 27083, 27035, 27063, 27067, 27051, 27060, 27088,
+ 27085, 27053, 27084, 27046, 27075, 27043, 27465, 27468, 27699, 28467,
+ 28436, 28414, 28435, 28404, 28457, 28478, 28448, 28460, 28431, 28418,
+ 28450, 28415, 28399, 28422, 28465, 28472, 28466, 28451, 28437, 28459,
+ 28463, 28552, 28458, 28396, 28417, 28402, 28364, 28407, 29076, 29081,
+ 29053, 29066, 29060, 29074, 29246, 29330, 29334, 29508, 29520, 29796,
+ 29795, 29802, 29808, 29805, 29956, 30097, 30247, 30221, 30219, 30217,
+ 30227, 30433, 30435, 30596, 30589, 30591, 30561, 30913, 30879, 30887,
+ 30899, 30889, 30883, {f: 2, c: 31118}, 31117, 31278, 31281, 31402, 31401,
+ 31469, 31471, 31649, 31637, 31627, 31605, 31639, 31645, 31636, 31631,
+ [31672, 58170], 31623, 31620, 31929, {f: 2, c: 31933}, 32187, 32176, 32156,
+ {f: 2, c: 32189}, 32160, 32202, 32180, 32178, 32177, 32186, 32162, 32191,
+ 32181, 32184, 32173, [32210, 58202], 32199, 32172, 32624, {f: 2, c: 32736},
+ 32735, 32862, 32858, 32903, 33104, 33152, 33167, 33160, 33162, 33151,
+ 33154, 33255, 33274, 33287, 33300, 33310, 33355, 33993, 33983, 33990,
+ 33988, 33945, 33950, 33970, 33948, 33995, 33976, 33984, 34003, 33936,
+ 33980, 34001, 33994, 34623, 34588, 34619, 34594, 34597, 34612, 34584,
+ 34645, 34615, 34601, 35059, 35074, 35060, 35065, 35064, 35069, 35048,
+ 35098, 35055, 35494, 35468, 35486, 35491, 35469, 35489, 35475, 35492,
+ 35498, 35493, 35496, 35480, 35473, 35482, 35495, 35946, 35981, 35980,
+ 36051, {f: 2, c: 36049}, 36203, 36249, 36245, 36348, 36628, 36626, 36629,
+ 36627, 36771, 36960, 36952, 36956, 36963, 36953, 36958, 36962, 36957,
+ 36955, 37145, 37144, 37150, 37237, 37240, 37239, 37236, 37496, 37548,
+ 37504, 37509, 37528, 37526, 37499, 37523, 37532, 37544, 37500, 37521,
+ 38305, {f: 2, c: 38312}, 38307, 38309, 38308, 38553, 38556, 38555, 38604,
+ 38610, 38656, 38780, 38789, 38902, {f: 2, c: 38935}, 39087, 39089, 39171,
+ 39173, 39180, 39177, 39361, {f: 2, c: 39599}, 39654, {f: 2, c: 39745},
+ 40180, 40182, 40179, 40636, [12240, 40763], [12241, 40778], 20740, 20736,
+ 20731, 20725, 20729, 20738, {f: 2, c: 20744}, 20741, 20956,
+ {f: 3, c: 21127}, 21133, 21130, 21232, 21426, 22062, 22075, 22073, 22066,
+ 22079, 22068, 22057, 22099, 22094, 22103, 22132, 22070, {f: 2, c: 22063},
+ 22656, 22687, 22686, 22707, 22684, 22702, 22697, 22694, 22893, 23305,
+ 23291, 23307, 23285, 23308, 23304, 23534, 23532, 23529, 23531,
+ {f: 2, c: 23652}, 23965, 23956, 24162, 24159, 24161, 24290, 24282, 24287,
+ 24285, 24291, 24288, 24392, 24433, 24503, 24501, 24950, 24935, 24942,
+ 24925, 24917, 24962, 24956, 24944, 24939, 24958, 24999, 24976, 25003,
+ 24974, 25004, 24986, 24996, 24980, 25006, 25134, 25705, 25711, 25721,
+ 25758, 25778, 25736, [25744, 57745], 25776, 25765, 25747, 25749, 25769,
+ 25746, 25774, 25773, 25771, 25754, 25772, 25753, 25762, 25779, 25973,
+ {f: 2, c: 25975}, 26286, 26283, 26292, 26289, 27171, 27167, 27112, 27137,
+ 27166, 27161, 27133, 27169, 27155, 27146, 27123, 27138, 27141, 27117,
+ 27153, 27472, 27470, 27556, {f: 2, c: 27589}, 28479, 28540, 28548, 28497,
+ 28518, 28500, 28550, 28525, 28507, 28536, 28526, 28558, 28538, 28528,
+ 28516, 28567, 28504, 28373, 28527, 28512, 28511, 29087, 29100, 29105,
+ 29096, 29270, 29339, 29518, 29527, 29801, 29835, 29827, 29822, 29824,
+ 30079, 30240, 30249, 30239, 30244, 30246, {f: 2, c: 30241}, 30362, 30394,
+ 30436, 30606, 30599, 30604, 30609, 30603, 30923, 30917, 30906, 30922,
+ 30910, 30933, 30908, 30928, 31295, 31292, 31296, 31293, 31287, 31291,
+ 31407, 31406, 31661, 31665, 31684, 31668, {f: 2, c: 31686}, 31681, 31648,
+ 31692, 31946, 32224, 32244, 32239, 32251, 32216, 32236, 32221, 32232,
+ 32227, 32218, 32222, 32233, 32158, 32217, 32242, 32249, 32629, 32631,
+ 32687, 32745, 32806, {f: 3, c: 33179}, 33184, 33178, 33176, 34071, 34109,
+ 34074, 34030, {f: 2, c: 34092}, 34067, 34065, 34083, 34081, 34068, 34028,
+ 34085, 34047, 34054, 34690, 34676, 34678, 34656, 34662, 34680, 34664,
+ 34649, 34647, 34636, 34643, 34907, 34909, 35088, 35079, {f: 2, c: 35090},
+ 35093, 35082, 35516, 35538, 35527, 35524, 35477, 35531, 35576, 35506,
+ 35529, 35522, 35519, 35504, 35542, 35533, 35510, 35513, 35547, 35916,
+ 35918, 35948, 36064, 36062, 36070, 36068, {f: 2, c: 36076},
+ {f: 2, c: 36066}, 36060, 36074, 36065, 36205, 36255, 36259, 36395, 36368,
+ 36381, 36386, 36367, 36393, 36383, 36385, 36382, 36538, 36637, 36635,
+ 36639, 36649, 36646, 36650, 36636, 36638, 36645, 36969, 36974, 36968,
+ 36973, 36983, 37168, 37165, 37159, 37169, 37255, 37257, 37259, 37251,
+ 37573, 37563, 37559, 37610, 37604, 37569, 37555, 37564, 37586, 37575,
+ 37616, 37554, 38317, 38321, 38660, {f: 2, c: 38662}, 38665, 38752, 38797,
+ 38795, 38799, 38945, 38955, 38940, 39091, 39178, 39187, 39186, 39192,
+ 39389, 39376, 39391, 39387, 39377, 39381, 39378, 39385, 39607,
+ {f: 2, c: 39662}, 39719, 39749, 39748, 39799, 39791, 40198, 40201, 40195,
+ 40617, 40638, 40654, 22696, [12242, 40786], 20754, 20760, 20756, 20752,
+ 20757, 20864, 20906, 20957, 21137, 21139, 21235, 22105, 22123, 22137,
+ 22121, 22116, 22136, 22122, 22120, 22117, 22129, 22127, 22124, 22114,
+ 22134, 22721, 22718, 22727, 22725, 22894, 23325, 23348, 23416, 23536,
+ 23566, 24394, 25010, 24977, 25001, 24970, 25037, 25014, 25022, 25034,
+ 25032, 25136, 25797, 25793, 25803, {f: 2, c: 25787}, 25818, 25796, 25799,
+ 25794, 25805, 25791, 25810, 25812, 25790, 25972, 26310, 26313, 26297,
+ 26308, 26311, 26296, 27197, 27192, 27194, 27225, 27243, 27224, 27193,
+ 27204, 27234, 27233, 27211, 27207, 27189, 27231, 27208, 27481, 27511,
+ 27653, 28610, 28593, 28577, 28611, 28580, 28609, 28583, 28595, 28608,
+ 28601, [28598, 60318], 28582, 28576, 28596, 29118, 29129, 29136, 29138,
+ 29128, 29141, 29113, 29134, 29145, 29148, {f: 2, c: 29123}, 29544, 29852,
+ 29859, 29848, 29855, 29854, 29922, {f: 2, c: 29964}, 30260, 30264, 30266,
+ 30439, 30437, 30624, {f: 2, c: 30622}, 30629, 30952, 30938, 30956, 30951,
+ 31142, {f: 2, c: 31309}, 31302, 31308, 31307, 31418, 31705, 31761, 31689,
+ 31716, 31707, 31713, 31721, 31718, {f: 2, c: 31957}, 32266, 32273, 32264,
+ 32283, 32291, 32286, [32285, 58211], 32265, 32272, 32633, 32690,
+ {f: 2, c: 32752}, 32750, [32808, 58239], 33203, 33193, 33192, 33275, 33288,
+ {f: 2, c: 33368}, 34122, 34137, 34120, {f: 2, c: 34152}, 34115, 34121,
+ 34157, 34154, 34142, 34691, 34719, 34718, 34722, 34701, 34913, 35114,
+ 35122, 35109, 35115, 35105, 35242, [35238, 58391], 35558, 35578, 35563,
+ 35569, 35584, 35548, 35559, 35566, 35582, {f: 2, c: 35585}, 35575, 35565,
+ 35571, 35574, 35580, 35947, 35949, 35987, 36084, 36420, 36401, 36404,
+ 36418, 36409, 36405, 36667, 36655, 36664, 36659, 36776, 36774, 36981,
+ 36980, 36984, 36978, 36988, 36986, 37172, 37266, 37664, 37686, 37624,
+ 37683, 37679, 37666, 37628, 37675, 37636, 37658, 37648, 37670, 37665,
+ 37653, 37678, 37657, 38331, {f: 2, c: 38567}, 38570, 38613, 38670, 38673,
+ 38678, 38669, 38675, 38671, 38747, [38748, 58565], 38758, 38808, 38960,
+ 38968, 38971, 38967, 38957, 38969, 38948, 39184, 39208, 39198, 39195,
+ 39201, 39194, 39405, 39394, 39409, 39608, 39612, 39675, 39661, 39720,
+ 39825, 40213, 40227, 40230, 40232, 40210, 40219, 40664, 40660,
+ [12243, 40845], [12244, 40860], 20778, 20767, 20769, 20786, 21237, 22158,
+ 22144, 22160, 22149, 22151, 22159, 22741, 22739, 22737, 22734, 23344,
+ 23338, 23332, 23418, 23607, 23656, 23996, 23994, 23997, 23992, 24171,
+ 24396, 24509, 25033, 25026, 25031, 25062, 25035, 25138, 25140, 25806,
+ 25802, 25816, 25824, 25840, 25830, 25836, 25841, 25826, 25837,
+ {f: 2, c: 25986}, 26329, 26326, 27264, 27284, 27268, 27298, 27292, 27355,
+ 27299, 27262, 27287, 27280, 27296, 27484, 27566, 27610, 27656, 28632,
+ 28657, {f: 2, c: 28639}, 28635, 28644, 28651, 28655, 28544, 28652, 28641,
+ 28649, 28629, 28654, 28656, 29159, [29151, 60361], 29166, 29158, 29157,
+ 29165, 29164, 29172, 29152, 29237, 29254, 29552, 29554, 29865, 29872,
+ 29862, 29864, 30278, 30274, 30284, 30442, 30643, 30634, 30640, 30636,
+ 30631, 30637, 30703, 30967, 30970, 30964, 30959, 30977, 31143, 31146,
+ 31319, 31423, 31751, 31757, 31742, 31735, 31756, 31712, 31968, 31964,
+ 31966, 31970, 31967, 31961, 31965, 32302, 32318, 32326, 32311, 32306,
+ 32323, 32299, 32317, 32305, 32325, 32321, 32308, 32313, 32328, 32309,
+ 32319, 32303, 32580, 32755, 32764, {f: 2, c: 32881}, 32880, 32879, 32883,
+ 33222, 33219, 33210, 33218, 33216, 33215, 33213, 33225, 33214, 33256,
+ 33289, 33393, 34218, 34180, 34174, 34204, 34193, 34196, 34223, 34203,
+ 34183, 34216, 34186, 34214, 34407, 34752, 34769, 34739, 34770, 34758,
+ 34731, 34747, 34746, 34760, 34763, 35131, 35126, 35140, 35128, 35133,
+ 35244, 35598, 35607, 35609, 35611, 35594, 35616, 35613, 35588, 35600,
+ 35905, 35903, 35955, 36090, 36093, 36092, 36088, 36091, 36264, 36425,
+ 36427, 36424, 36426, 36676, 36670, 36674, 36677, 36671, 36991, 36989,
+ 36996, {f: 2, c: 36993}, 36992, 37177, 37283, 37278, 37276, 37709, 37762,
+ 37672, 37749, 37706, 37733, 37707, 37656, 37758, 37740, 37723, 37744,
+ 37722, 37716, {f: 3, c: 38346}, 38344, 38342, 38577, 38584, 38614, 38684,
+ 38686, 38816, 38867, 38982, 39094, 39221, 39425, 39423, 39854, 39851,
+ 39850, 39853, 40251, 40255, 40587, 40655, 40670, {f: 2, c: 40668}, 40667,
+ 40766, 40779, 21474, 22165, 22190, 22745, 22744, 23352, 24413, 25059,
+ 25139, 25844, 25842, 25854, 25862, {f: 2, c: 25850}, 25847, 26039, 26332,
+ 26406, 27315, 27308, 27331, 27323, 27320, 27330, {f: 2, c: 27310}, 27487,
+ 27512, 27567, 28681, 28683, 28670, 28678, 28666, 28689, 28687,
+ {f: 2, c: 29179}, 29182, 29176, 29559, 29557, 29863, 29887, 29973, 30294,
+ 30296, 30290, 30653, 30655, {f: 2, c: 30651}, 30990, 31150,
+ {f: 2, c: 31329}, 31328, {f: 2, c: 31428}, 31787, 31783, 31786, 31774,
+ 31779, 31777, 31975, {f: 2, c: 32340}, 32350, 32346, 32353, 32338, 32345,
+ 32584, 32761, 32763, 32887, 32886, 33229, 33231, 33290, 34255, 34217,
+ 34253, 34256, 34249, 34224, 34234, 34233, 34799, 34796, 34802, 34784,
+ 35206, 35250, 35316, 35624, 35641, 35628, 35627, 35920, 36101, 36441,
+ 36451, 36454, 36452, 36447, 36437, 36544, 36681, 36685, 36999, 36995,
+ 37000, {f: 2, c: 37291}, 37328, 37780, 37770, 37782, 37794, 37811, 37806,
+ 37804, 37808, 37784, 37786, 37783, 38356, 38358, 38352, 38357, 38626,
+ 38620, 38617, 38619, 38622, 38692, 38819, 38822, 38829, 38905, 38989,
+ 38991, 38988, 38990, 38995, 39098, {f: 2, c: 39230}, 39229, 39214, 39333,
+ 39438, 39617, 39683, 39686, 39759, 39758, 39757, 39882, 39881, 39933,
+ 39880, 39872, 40273, 40285, 40288, 40672, 40725, 40748, 20787, 22181,
+ 22184, {f: 2, c: 22750}, 22754, 23541, 40848, 24300, 25074, 25079, 25078,
+ 25077, 25856, 25871, 26336, 26333, 27365, 27357, 27354, 27347, 28699,
+ 28703, 28712, 28698, 28701, 28693, 28696, 29190, 29197, 29272, 29346,
+ 29560, 29562, 29885, 29898, 29923, 30087, 30086, 30303, 30305, 30663,
+ 31001, 31153, 31339, 31337, {f: 2, c: 31806}, 31800, 31805, 31799, 31808,
+ 32363, 32365, 32377, {f: 2, c: 32361}, 32371, 32645, 32694, 32697, 32696,
+ 33240, 34281, 34269, 34282, 34261, {f: 2, c: 34276}, 34295, 34811, 34821,
+ 34829, 34809, 34814, 35168, 35167, 35158, 35166, 35649, 35676, 35672,
+ 35657, 35674, {f: 2, c: 35662}, 35654, 35673, 36104, 36106, 36476, 36466,
+ 36487, 36470, 36460, 36474, 36468, 36692, 36686, 36781, {f: 2, c: 37002},
+ 37297, 37294, 37857, 37841, 37855, 37827, 37832, {f: 2, c: 37852}, 37846,
+ 37858, 37837, 37848, 37860, 37847, 37864, 38364, 38580, 38627, 38698,
+ 38695, 38753, 38876, 38907, 39006, 39000, 39003, 39100, 39237, 39241,
+ 39446, 39449, 39693, 39912, 39911, 39894, 39899, 40329, 40289, 40306,
+ 40298, 40300, 40594, 40599, 40595, 40628, 21240, 22199, 22198, 22196,
+ 22204, 22756, 23360, 23363, 23421, 23542, 24009, 25080, 25082, 25880,
+ 25876, 25881, 26342, 26407, 27372, 28734, 28720, 28722, 29200, 29563,
+ 29903, 30306, 30309, 31014, 31018, 31020, 31019, 31431, 31478, 31820,
+ 31811, 31821, {f: 2, c: 31983}, 36782, 32381, 32380, 32386, 32588, 32768,
+ 33242, 33382, 34299, 34297, 34321, 34298, 34310, 34315, 34311, 34314,
+ {f: 2, c: 34836}, 35172, 35258, 35320, 35696, 35692, 35686, 35695, 35679,
+ 35691, 36111, 36109, 36489, 36481, 36485, 36482, 37300, 37323, 37912,
+ 37891, 37885, 38369, 38704, 39108, 39250, 39249, 39336, 39467, 39472,
+ 39479, 39477, 39955, 39949, 40569, 40629, 40680, 40751, 40799, 40803,
+ 40801, {f: 2, c: 20791}, 22209, 22208, 22210, 22804, 23660, 24013, 25084,
+ 25086, 25885, 25884, 26005, 26345, 27387, 27396, 27386, 27570, 28748,
+ 29211, 29351, 29910, 29908, 30313, 30675, 31824, 32399, 32396, 32700,
+ 34327, 34349, 34330, 34851, 34850, 34849, 34847, 35178, 35180, 35261,
+ 35700, 35703, 35709, 36115, 36490, 36493, 36491, 36703, 36783, 37306,
+ 37934, 37939, 37941, 37946, 37944, 37938, 37931, 38370, {f: 2, c: 38712},
+ 38706, [38911, 58586], 39015, 39013, 39255, 39493, 39491, 39488, 39486,
+ 39631, 39764, 39761, 39981, 39973, 40367, 40372, 40386, 40376, 40605,
+ 40687, 40729, 40796, {f: 2, c: 40806}, 20796, 20795, 22216, 22218, 22217,
+ 23423, 24020, 24018, 24398, 25087, 25892, 27402, 27489, 28753, 28760,
+ 29568, 29924, 30090, 30318, 30316, 31155, 31840, 31839, 32894, 32893,
+ 33247, 35186, 35183, 35324, 35712, {f: 2, c: 36118}, 36497, 36499, 36705,
+ 37192, 37956, {f: 2, c: 37969}, {f: 2, c: 38717}, 38851, 38849, 39019,
+ 39253, 39509, 39501, 39634, 39706, 40009, 39985, 39998, 39995, 40403,
+ 40407, 40756, 40812, 40810, 40852, 22220, 24022, 25088, 25891, 25899,
+ 25898, 26348, 27408, 29914, 31434, 31844, 31843, 31845, 32403, 32406,
+ 32404, 33250, 34360, 34367, 34865, 35722, 37008, 37007, 37987, 37984,
+ 37988, 38760, 39023, 39260, {f: 2, c: 39514}, 39511, {f: 2, c: 39635},
+ 39633, 40020, 40023, 40022, 40421, 40607, 40692, 22225, 22761, 25900,
+ 28766, {f: 2, c: 30321}, [30679, 60226], 32592, 32648, 34870, 34873, 34914,
+ 35731, 35730, 35734, 33399, 36123, 37312, 37994, 38722, 38728, 38724,
+ 38854, 39024, 39519, 39714, 39768, 40031, {f: 2, c: 40441},
+ {f: 2, c: 40572}, 40711, 40823, 40818, 24307, 27414, 28771, 31852, 31854,
+ 34875, 35264, 36513, 37313, 38002, 38000, 39025, 39262, 39638, 39715,
+ 40652, 28772, 30682, 35738, 38007, 38857, 39522, 39525, 32412, 35740,
+ 36522, 37317, {f: 2, c: 38013}, 38012, {f: 2, c: 40055}, 40695, 35924,
+ 38015, 40474, 29224, 39530, 39729, 40475, 40478, 31858, 20034, 20060,
+ [12048, 20981], [12053, 21274], [12058, 21378], 19975, 19980, 20039, 20109,
+ [12062, 22231], [12076, 23662], [12091, 24435], 19983, 20871, 19982, 20014,
+ 20115, 20162, 20169, 20168, 20888, 21244, 21356, 21433, 22304, 22787,
+ 22828, [23568, 60417], 24063, 26081, [12110, 27571], 27596, [12115, 27668],
+ [12121, 29247], 20017, 20028, 20200, 20188, 20201, 20193, 20189, 20186,
+ 21004, 21001, 21276, 21324, {f: 2, c: 22306}, 22807, 22831, 23425, 23428,
+ 23570, 23611, 23668, 23667, 24068, 24192, 24194, 24521, 25097, 25168,
+ 27669, 27702, 27715, 27711, 27707, 29358, 29360, 29578, [12145, 31160],
+ 32906, 38430, 20238, 20248, 20268, 20213, 20244, 20209, 20224, 20215,
+ 20232, 20253, 20226, 20229, 20258, 20243, 20228, 20212, 20242, 20913,
+ 21011, 21008, 21158, 21282, 21279, 21325, 21386, 21511, 22241, 22239,
+ 22318, 22314, 22324, 22844, 22912, 22908, 22917, 22907, 22910, 22903,
+ 22911, 23382, 23573, 23589, 23676, {f: 2, c: 23674}, 23678, 24031,
+ [24181, 57646], 24196, 24322, 24346, 24436, 24533, 24532, 24527, 25180,
+ 25182, 25188, 25185, 25190, 25186, 25177, 25184, 25178, 25189, 25911,
+ 26095, 26094, 26430, 26425, 26424, 26427, 26426, 26431, 26428, 26419,
+ 27672, 27718, 27730, 27740, 27727, [27722, 60796], 27732, {f: 2, c: 27723},
+ 28785, 29278, {f: 2, c: 29364}, 29582, 29994, 30335, 31349, [12153, 32593],
+ [12171, 33400], 33404, 33408, 33405, 33407, [12172, 34381], [12177, 35198],
+ 37017, [37015, 59347], 37016, 37019, 37012, 38434, 38436, 38432, 38435,
+ 20310, 20283, 20322, 20297, 20307, 20324, 20286, 20327, 20306, 20319,
+ 20289, 20312, 20269, 20275, 20287, 20321, 20879, 20921, 21020, 21022,
+ 21025, {f: 2, c: 21165}, 21257, 21347, 21362, {f: 2, c: 21390}, 21552,
+ 21559, 21546, 21588, 21573, 21529, 21532, 21541, 21528, 21565, 21583,
+ 21569, 21544, 21540, 21575, 22254, 22247, 22245, 22337, 22341, 22348,
+ 22345, 22347, 22354, 22790, 22848, 22950, 22936, 22944, 22935, 22926,
+ 22946, 22928, 22927, 22951, 22945, 23438, 23442, 23592, 23594, 23693,
+ 23695, 23688, 23691, 23689, 23698, 23690, 23686, 23699, 23701, 24032,
+ 24074, 24078, 24203, 24201, 24204, 24200, 24205, 24325, 24349, 24440,
+ 24438, 24530, 24529, 24528, 24557, 24552, 24558, 24563, 24545, 24548,
+ 24547, 24570, 24559, 24567, 24571, 24576, 24564, 25146, 25219, 25228,
+ {f: 2, c: 25230}, 25236, 25223, 25201, 25211, 25210, 25200, 25217, 25224,
+ 25207, 25213, 25202, 25204, 26096, 26100, 26099, 26098, 26101, 26437,
+ 26439, 26457, 26453, 26444, 26440, 26461, 26445, 26458, 26443, 27600,
+ {f: 2, c: 27673}, 27768, 27751, 27755, 27780, 27787, 27791, 27761, 27759,
+ 27753, 27802, 27757, 27783, 27797, [27804, 57900], 27750, 27763, 27749,
+ 27771, 27790, 28788, 28794, 29283, 29375, 29373, 29379, 29382, 29377,
+ 29370, 29381, 29589, 29591, {f: 2, c: 29587}, 29586, 30010, 30009,
+ {f: 2, c: 30100}, 30337, 31037, 32820, 32917, 32921, 32912, 32914, 32924,
+ 33424, 33423, 33413, 33422, 33425, 33427, 33418, {f: 2, c: 33411},
+ [12184, 35960], 36809, 36799, 37023, 37025, 37029, 37022, 37031, 37024,
+ 38448, 38440, 38447, 38445, 20019, 20376, 20348, 20357, 20349, 20352,
+ 20359, 20342, 20340, 20361, 20356, 20343, 20300, 20375, 20330, 20378,
+ 20345, 20353, 20344, 20368, 20380, 20372, 20382, 20370, 20354, 20373,
+ 20331, 20334, 20894, 20924, 20926, 21045, {f: 2, c: 21042}, 21062, 21041,
+ 21180, {f: 2, c: 21258}, 21308, 21394, 21396, 21639, 21631, 21633, 21649,
+ 21634, 21640, 21611, 21626, 21630, 21605, 21612, 21620, 21606, 21645,
+ 21615, 21601, 21600, 21656, 21603, 21607, 21604, 22263, 22265, 22383,
+ 22386, 22381, 22379, 22385, 22384, 22390, 22400, 22389, 22395,
+ {f: 2, c: 22387}, 22370, 22376, 22397, 22796, 22853, 22965, 22970, 22991,
+ 22990, 22962, 22988, 22977, 22966, 22972, 22979, 22998, 22961, 22973,
+ 22976, 22984, 22964, 22983, 23394, 23397, 23443, 23445, 23620, 23623,
+ 23726, 23716, 23712, 23733, 23727, 23720, 23724, 23711, 23715, 23725,
+ 23714, 23722, 23719, 23709, 23717, 23734, 23728, 23718, 24087, 24084,
+ 24089, 24360, {f: 3, c: 24354}, 24404, 24450, 24446, 24445, 24542, 24549,
+ 24621, 24614, 24601, 24626, 24587, 24628, 24586, 24599, 24627, 24602,
+ 24606, 24620, 24610, 24589, 24592, 24622, 24595, 24593, 24588, 24585,
+ 24604, 25108, 25149, 25261, 25268, 25297, 25278, 25258, 25270, 25290,
+ 25262, 25267, 25263, 25275, 25257, 25264, 25272, 25917, 26024, 26043,
+ 26121, 26108, 26116, 26130, 26120, 26107, 26115, 26123, 26125, 26117,
+ 26109, 26129, 26128, 26358, 26378, 26501, 26476, 26510, 26514, 26486,
+ 26491, 26520, 26502, 26500, 26484, 26509, 26508, 26490, 26527, 26513,
+ 26521, 26499, 26493, 26497, {f: 2, c: 26488}, 26516, 27429, 27520, 27518,
+ 27614, 27677, 27795, 27884, 27883, 27886, 27865, 27830, 27860, 27821,
+ 27879, 27831, 27856, 27842, 27834, 27843, 27846, 27885, 27890, 27858,
+ 27869, 27828, 27786, 27805, 27776, 27870, 27840, 27952, 27853, 27847,
+ 27824, 27897, 27855, 27881, 27857, 28820, 28824, 28805, 28819, 28806,
+ 28804, 28817, 28822, 28802, 28826, 28803, 29290, 29398, 29387, 29400,
+ 29385, 29404, 29394, 29396, 29402, 29388, 29393, 29604, 29601, 29613,
+ 29606, 29602, 29600, 29612, 29597, 29917, 29928, {f: 2, c: 30015}, 30014,
+ 30092, 30104, 30383, 30451, 30449, 30448, 30453, 30712, 30716, 30713,
+ 30715, 30714, 30711, 31042, 31039, 31173, 31352, 31355, 31483, 31861,
+ 31997, 32821, 32911, 32942, 32931, 32952, 32949, 32941, 33312, 33440,
+ 33472, 33451, 33434, 33432, 33435, 33461, 33447, 33454, 33468, 33438,
+ 33466, 33460, 33448, 33441, 33449, 33474, 33444, 33475, 33462, 33442,
+ 34416, 34415, {f: 2, c: 34413}, 35926, 36818, 36811, 36819, 36813, 36822,
+ 36821, 36823, 37042, 37044, 37039, 37043, 37040, 38457, 38461, 38460,
+ 38458, 38467, 20429, 20421, 20435, 20402, 20425, 20427, 20417, 20436,
+ 20444, 20441, [20411, 60346], 20403, 20443, 20423, 20438, 20410, 20416,
+ 20409, 20460, 21060, 21065, 21184, 21186, 21309, 21372, 21399, 21398,
+ 21401, 21400, 21690, 21665, 21677, 21669, 21711, 21699, 33549, 21687,
+ 21678, 21718, 21686, {f: 2, c: 21701}, 21664, 21616, 21692, 21666, 21694,
+ 21618, 21726, 21680, 22453, {f: 2, c: 22430}, 22436, 22412, 22423, 22429,
+ 22427, 22420, 22424, 22415, 22425, 22437, 22426, 22421, 22772, 22797,
+ 22867, 23009, 23006, 23022, 23040, 23025, 23005, 23034, 23037, 23036,
+ 23030, 23012, 23026, 23031, 23003, 23017, 23027, 23029, 23008, 23038,
+ 23028, 23021, 23464, 23628, 23760, 23768, 23756, 23767, 23755, 23771,
+ 23774, 23770, 23753, 23751, 23754, 23766, {f: 2, c: 23763}, 23759, 23752,
+ 23750, 23758, 23775, 23800, 24057, {f: 3, c: 24097}, 24096, 24100, 24240,
+ 24228, 24226, 24219, 24227, 24229, 24327, 24366, 24406, 24454, 24631,
+ 24633, 24660, 24690, 24670, 24645, 24659, 24647, 24649, 24667, 24652,
+ 24640, 24642, 24671, 24612, 24644, 24664, 24678, 24686, {f: 2, c: 25154},
+ 25295, 25357, 25355, 25333, 25358, 25347, 25323, 25337, 25359, 25356,
+ 25336, 25334, 25344, {f: 2, c: 25363}, 25338, 25365, 25339, 25328, 25921,
+ 25923, 26026, 26047, 26166, 26145, 26162, 26165, 26140, 26150, 26146,
+ 26163, 26155, 26170, 26141, 26164, 26169, 26158, {f: 2, c: 26383}, 26561,
+ 26610, 26568, 26554, 26588, 26555, 26616, 26584, 26560, 26551, 26565,
+ 26603, 26596, 26591, 26549, 26573, 26547, 26615, 26614, 26606, 26595,
+ 26562, 26553, 26574, 26599, 26608, 26546, 26620, 26566, 26605, 26572,
+ 26542, 26598, 26587, 26618, {f: 2, c: 26569}, 26563, 26602, 26571, 27432,
+ 27522, 27524, 27574, 27606, 27608, 27616, {f: 2, c: 27680}, 27944, 27956,
+ 27949, 27935, 27964, 27967, 27922, 27914, 27866, 27955, 27908, 27929,
+ 27962, 27930, 27921, 27904, 27933, 27970, 27905, 27928, 27959, 27907,
+ 27919, 27968, 27911, 27936, 27948, 27912, 27938, 27913, 27920, 28855,
+ 28831, 28862, 28849, 28848, 28833, {f: 2, c: 28852}, 28841, 29249,
+ {f: 2, c: 29257}, 29292, 29296, 29299, 29294, 29386, 29412, 29416, 29419,
+ 29407, 29418, 29414, 29411, 29573, 29644, 29634, 29640, 29637, 29625,
+ 29622, 29621, 29620, 29675, 29631, 29639, 29630, 29635, 29638, 29624,
+ 29643, 29932, 29934, 29998, {f: 2, c: 30023}, 30119, 30122, 30329, 30404,
+ 30472, {f: 3, c: 30467}, 30474, 30455, 30459, 30458, {f: 2, c: 30695},
+ 30726, {f: 2, c: 30737}, 30725, 30736, 30735, 30734, [30729, 58095], 30723,
+ 30739, 31050, 31052, 31051, 31045, 31044, 31189, 31181, 31183, 31190,
+ 31182, 31360, 31358, 31441, {f: 2, c: 31488}, 31866, {f: 2, c: 31864},
+ {f: 3, c: 31871}, 32003, 32008, 32001, 32600, 32657, 32653, 32702, 32775,
+ {f: 2, c: 32782}, 32788, 32823, 32984, 32967, 32992, 32977, 32968, 32962,
+ 32976, 32965, 32995, 32985, 32988, 32970, 32981, 32969, 32975, 32983,
+ 32998, 32973, 33279, 33313, 33428, 33497, 33534, 33529, 33543, 33512,
+ 33536, 33493, 33594, 33515, 33494, 33524, 33516, 33505, 33522, 33525,
+ 33548, 33531, 33526, 33520, 33514, 33508, 33504, 33530, 33523, 33517,
+ 34423, 34420, 34428, 34419, 34881, 34894, 34919, 34922, 34921, 35283,
+ 35332, 35335, 36210, 36835, 36833, 36846, 36832, 37105, 37053, 37055,
+ 37077, 37061, 37054, 37063, 37067, 37064, [37332, 60294], 37331, 38484,
+ 38479, 38481, 38483, 38474, 38478, 20510, 20485, 20487, 20499, 20514,
+ 20528, 20507, 20469, 20468, 20531, 20535, 20524, {f: 2, c: 20470}, 20503,
+ 20508, 20512, 20519, 20533, 20527, 20529, 20494, 20826, 20884, 20883,
+ 20938, {f: 2, c: 20932}, 20936, 20942, 21089, 21082, 21074,
+ {f: 2, c: 21086}, 21077, 21090, 21197, 21262, 21406, 21798, 21730, 21783,
+ 21778, 21735, 21747, 21732, 21786, 21759, 21764, 21768, 21739, 21777,
+ 21765, 21745, 21770, 21755, {f: 2, c: 21751}, 21728, 21774, 21763, 21771,
+ {f: 2, c: 22273}, 22476, 22578, 22485, 22482, 22458, 22470, 22461, 22460,
+ 22456, 22454, 22463, 22471, 22480, 22457, 22465, 22798, 22858, 23065,
+ 23062, {f: 2, c: 23085}, 23061, 23055, 23063, 23050, 23070, 23091, 23404,
+ 23463, 23469, 23468, 23555, 23638, 23636, 23788, 23807, 23790, 23793,
+ 23799, 23808, 23801, 24105, 24104, 24232, 24238, 24234, 24236, 24371,
+ 24368, 24423, 24669, 24666, 24679, 24641, 24738, 24712, 24704, 24722,
+ 24705, 24733, 24707, 24725, 24731, 24727, 24711, 24732, 24718, 25113,
+ 25158, 25330, 25360, 25430, 25388, {f: 2, c: 25412}, 25398, 25411, 25572,
+ 25401, 25419, 25418, 25404, 25385, 25409, 25396, 25432, 25428, 25433,
+ 25389, 25415, 25395, 25434, 25425, 25400, 25431, 25408, 25416, 25930,
+ 25926, 26054, {f: 2, c: 26051}, 26050, 26186, 26207, 26183, 26193,
+ {f: 2, c: 26386}, 26655, 26650, 26697, {f: 2, c: 26674}, 26683, 26699,
+ 26703, 26646, 26673, 26652, 26677, 26667, 26669, 26671, 26702, 26692,
+ 26676, 26653, 26642, 26644, 26662, 26664, 26670, 26701, 26682, 26661,
+ 26656, 27436, 27439, 27437, 27441, 27444, 27501, 32898, 27528, 27622,
+ 27620, 27624, 27619, 27618, 27623, 27685, 28026, {f: 2, c: 28003}, 28022,
+ 27917, 28001, 28050, 27992, 28002, 28013, 28015, 28049, 28045, 28143,
+ 28031, 28038, 27998, [28007, 59078], 28000, 28055, 28016, 28028, 27999,
+ 28034, 28056, 27951, 28008, 28043, 28030, 28032, 28036, 27926, 28035,
+ 28027, 28029, 28021, 28048, 28892, 28883, 28881, 28893, 28875, 32569,
+ 28898, 28887, 28882, 28894, 28896, 28884, 28877, {f: 3, c: 28869}, 28890,
+ 28878, 28897, 29250, 29304, 29303, 29302, 29440, 29434, 29428, 29438,
+ 29430, 29427, 29435, 29441, 29651, 29657, 29669, 29654, 29628, 29671,
+ 29667, 29673, 29660, 29650, 29659, 29652, 29661, 29658, {f: 2, c: 29655},
+ 29672, {f: 2, c: 29918}, {f: 2, c: 29940}, 29985, 30043, 30047, 30128,
+ 30145, 30139, 30148, 30144, 30143, 30134, 30138, 30346, 30409, 30493,
+ 30491, 30480, 30483, 30482, 30499, 30481, 30485, {f: 2, c: 30489}, 30498,
+ 30503, 30755, 30764, 30754, 30773, 30767, 30760, 30766, 30763, 30753,
+ 30761, 30771, 30762, 30769, 31060, 31067, 31055, 31068, 31059, 31058,
+ 31057, {f: 2, c: 31211}, 31200, 31214, 31213, 31210, 31196, 31198, 31197,
+ 31366, 31369, 31365, {f: 2, c: 31371}, 31370, 31367, 31448, 31504, 31492,
+ 31507, 31493, 31503, 31496, 31498, 31502, 31497, 31506, 31876, 31889,
+ 31882, 31884, 31880, 31885, 31877, 32030, 32029, 32017, 32014, 32024,
+ 32022, 32019, 32031, 32018, 32015, 32012, 32604, 32609, 32606, 32608,
+ 32605, 32603, 32662, 32658, 32707, 32706, 32704, 32790, 32830, 32825,
+ 33018, 33010, 33017, 33013, 33025, 33019, 33024, 33281, 33327, 33317,
+ 33587, 33581, 33604, 33561, 33617, 33573, 33622, 33599, 33601, 33574,
+ 33564, 33570, 33602, 33614, 33563, 33578, 33544, 33596, 33613, 33558,
+ 33572, 33568, 33591, 33583, 33577, 33607, 33605, 33612, 33619, 33566,
+ 33580, 33611, 33575, 33608, 34387, 34386, 34466, 34472, 34454, 34445,
+ 34449, 34462, 34439, 34455, 34438, 34443, 34458, 34437, 34469, 34457,
+ 34465, 34471, 34453, 34456, 34446, 34461, 34448, 34452, {f: 2, c: 34883},
+ 34925, {f: 2, c: 34933}, 34930, 34944, 34929, 34943, 34927, 34947, 34942,
+ 34932, 34940, 35346, 35911, 35927, 35963, 36004, 36003, 36214, 36216,
+ 36277, 36279, 36278, 36561, 36563, 36862, 36853, 36866, 36863, 36859,
+ 36868, 36860, 36854, 37078, 37088, {f: 2, c: 37081}, 37091, 37087, 37093,
+ 37080, 37083, 37079, 37084, 37092, 37200, {f: 2, c: 37198}, 37333, 37346,
+ 37338, 38492, 38495, 38588, 39139, [12221, 39647], [12223, 39727], 20095,
+ 20592, 20586, 20577, 20574, 20576, 20563, 20555, 20573, 20594, 20552,
+ 20557, 20545, 20571, 20554, 20578, 20501, 20549, 20575, 20585, 20587,
+ {f: 2, c: 20579}, 20550, 20544, 20590, 20595, 20567, 20561, 20944, 21099,
+ 21101, 21100, 21102, 21206, 21203, 21293, 21404, {f: 2, c: 21877}, 21820,