diff --git a/codecs/jpegLossless.js b/codecs/jpegLossless.js index ff26c440..6dad8106 100644 --- a/codecs/jpegLossless.js +++ b/codecs/jpegLossless.js @@ -41,9 +41,9 @@ /*** Constructor ***/ jpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || function () { - this.hSamp = 0; // Horizontal sampling factor - this.quantTableSel = 0; // Quantization table destination selector - this.vSamp = 0; // Vertical + this.hSamp = 0; // Horizontal sampling factor + this.quantTableSel = 0; // Quantization table destination selector + this.vSamp = 0; // Vertical }; @@ -51,10 +51,10 @@ var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.ComponentSpec; + module.exports = jpeg.lossless.ComponentSpec; } -},{}],2:[function(require,module,exports){ + },{}],2:[function(require,module,exports){ /* * Copyright (C) 2015 Michael Martinez * Changes: Added support for selection values 2-7, fixed minor bugs & @@ -97,24 +97,28 @@ /*** Constructor ***/ jpeg.lossless.DataStream = jpeg.lossless.DataStream || function (data, offset, length) { - this.buffer = new DataView(data, offset, length); - this.index = 0; + // Note: DataView is much slower than Int8Array + // this.buffer = new DataView(data, offset, length); + this.buffer = new Uint8Array(data, offset, length); + this.index = 0; }; jpeg.lossless.DataStream.prototype.get16 = function () { - var value = this.buffer.getUint16(this.index, false); - this.index += 2; - return value; + // var value = this.buffer.getUint16(this.index, false); + var value = (this.buffer[this.index] << 8) + this.buffer[this.index + 1]; // DataView is big-endian by default + this.index += 2; + return value; }; jpeg.lossless.DataStream.prototype.get8 = function () { - var value = this.buffer.getUint8(this.index); - this.index += 1; - return value; + // var value = this.buffer.getUint8(this.index); + var value = this.buffer[this.index]; + this.index += 1; + return value; }; @@ -122,10 +126,10 @@ var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.DataStream; + module.exports = jpeg.lossless.DataStream; } -},{}],3:[function(require,module,exports){ + },{}],3:[function(require,module,exports){ /* * Copyright (C) 2015 Michael Martinez * Changes: Added support for selection values 2-7, fixed minor bugs & @@ -173,45 +177,54 @@ /*** Constructor ***/ + + /** + * The Decoder constructor. + * @property {number} xDim - size of x dimension + * @property {number} yDim - size of y dimension + * @property {number} numComp - number of components + * @property {number} numBytes - number of bytes per component + * @type {Function} + */ jpeg.lossless.Decoder = jpeg.lossless.Decoder || function (buffer, numBytes) { - this.buffer = buffer; - this.frame = new jpeg.lossless.FrameHeader(); - this.huffTable = new jpeg.lossless.HuffmanTable(); - this.quantTable = new jpeg.lossless.QuantizationTable(); - this.scan = new jpeg.lossless.ScanHeader(); - this.DU = jpeg.lossless.Utils.createArray(10, 4, 64); // at most 10 data units in a MCU, at most 4 data units in one component - this.HuffTab = jpeg.lossless.Utils.createArray(4, 2, 50 * 256); - this.IDCT_Source = []; - this.nBlock = []; // number of blocks in the i-th Comp in a scan - this.acTab = jpeg.lossless.Utils.createArray(10, 1); // ac HuffTab for the i-th Comp in a scan - this.dcTab = jpeg.lossless.Utils.createArray(10, 1); // dc HuffTab for the i-th Comp in a scan - this.qTab = jpeg.lossless.Utils.createArray(10, 1); // quantization table for the i-th Comp in a scan - this.marker = 0; - this.markerIndex = 0; - this.numComp = 0; - this.restartInterval = 0; - this.selection = 0; - this.xDim = 0; - this.yDim = 0; - this.xLoc = 0; - this.yLoc = 0; - this.numBytes = 0; - this.outputData = null; - this.restarting = false; - this.mask = 0; - - if (typeof numBytes !== "undefined") { - this.numBytes = numBytes; - } + this.buffer = buffer; + this.frame = new jpeg.lossless.FrameHeader(); + this.huffTable = new jpeg.lossless.HuffmanTable(); + this.quantTable = new jpeg.lossless.QuantizationTable(); + this.scan = new jpeg.lossless.ScanHeader(); + this.DU = jpeg.lossless.Utils.createArray(10, 4, 64); // at most 10 data units in a MCU, at most 4 data units in one component + this.HuffTab = jpeg.lossless.Utils.createArray(4, 2, 50 * 256); + this.IDCT_Source = []; + this.nBlock = []; // number of blocks in the i-th Comp in a scan + this.acTab = jpeg.lossless.Utils.createArray(10, 1); // ac HuffTab for the i-th Comp in a scan + this.dcTab = jpeg.lossless.Utils.createArray(10, 1); // dc HuffTab for the i-th Comp in a scan + this.qTab = jpeg.lossless.Utils.createArray(10, 1); // quantization table for the i-th Comp in a scan + this.marker = 0; + this.markerIndex = 0; + this.numComp = 0; + this.restartInterval = 0; + this.selection = 0; + this.xDim = 0; + this.yDim = 0; + this.xLoc = 0; + this.yLoc = 0; + this.numBytes = 0; + this.outputData = null; + this.restarting = false; + this.mask = 0; + + if (typeof numBytes !== "undefined") { + this.numBytes = numBytes; + } }; /*** Static Pseudo-constants ***/ jpeg.lossless.Decoder.IDCT_P = [0, 5, 40, 16, 45, 2, 7, 42, 21, 56, 8, 61, 18, 47, 1, 4, 41, 23, 58, 13, 32, 24, 37, 10, 63, 17, 44, 3, 6, 43, 20, - 57, 15, 34, 29, 48, 53, 26, 39, 9, 60, 19, 46, 22, 59, 12, 33, 31, 50, 55, 25, 36, 11, 62, 14, 35, 28, 49, 52, 27, 38, 30, 51, 54]; + 57, 15, 34, 29, 48, 53, 26, 39, 9, 60, 19, 46, 22, 59, 12, 33, 31, 50, 55, 25, 36, 11, 62, 14, 35, 28, 49, 52, 27, 38, 30, 51, 54]; jpeg.lossless.Decoder.TABLE = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, - 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63]; + 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63]; jpeg.lossless.Decoder.MAX_HUFFMAN_SUBTREE = 50; jpeg.lossless.Decoder.MSB = 0x80000000; jpeg.lossless.Decoder.RESTART_MARKER_BEGIN = 0xFFD0; @@ -219,730 +232,747 @@ /*** Prototype Methods ***/ + /** + * Returns decompressed data. + * @param {ArrayBuffer} buffer + * @param {number} [offset] + * @param {number} [length] + * @returns {ArrayBufer} + */ jpeg.lossless.Decoder.prototype.decompress = function (buffer, offset, length) { - return this.decode(buffer, offset, length).buffer; + return this.decode(buffer, offset, length).buffer; }; jpeg.lossless.Decoder.prototype.decode = function (buffer, offset, length, numBytes) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - var current, scanNum = 0, pred = [], i, compN, temp = [], index = [], mcuNum; + var current, scanNum = 0, pred = [], i, compN, temp = [], index = [], mcuNum; - if (typeof buffer !== "undefined") { - this.buffer = buffer; - } - - if (typeof numBytes !== "undefined") { - this.numBytes = numBytes; - } - - this.stream = new jpeg.lossless.DataStream(this.buffer, offset, length); - this.buffer = null; - - this.xLoc = 0; - this.yLoc = 0; - current = this.stream.get16(); - - if (current !== 0xFFD8) { // SOI - throw new Error("Not a JPEG file"); - } - - current = this.stream.get16(); - - while ((((current >> 4) !== 0x0FFC) || (current === 0xFFC4))) { // SOF 0~15 - switch (current) { - case 0xFFC4: // DHT - this.huffTable.read(this.stream, this.HuffTab); - break; - case 0xFFCC: // DAC - throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)"); - case 0xFFDB: - this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE); - break; - case 0xFFDD: - this.restartInterval = this.readNumber(); - break; - case 0xFFE0: - case 0xFFE1: - case 0xFFE2: - case 0xFFE3: - case 0xFFE4: - case 0xFFE5: - case 0xFFE6: - case 0xFFE7: - case 0xFFE8: - case 0xFFE9: - case 0xFFEA: - case 0xFFEB: - case 0xFFEC: - case 0xFFED: - case 0xFFEE: - case 0xFFEF: - this.readApp(); - break; - case 0xFFFE: - this.readComment(); - break; - default: - if ((current >> 8) !== 0xFF) { - throw new Error("ERROR: format throw new IOException! (decode)"); - } + if (typeof buffer !== "undefined") { + this.buffer = buffer; } - current = this.stream.get16(); - } - - if ((current < 0xFFC0) || (current > 0xFFC7)) { - throw new Error("ERROR: could not handle arithmetic code!"); - } - - this.frame.read(this.stream); - current = this.stream.get16(); - - do { - while (current !== 0x0FFDA) { // SOS - switch (current) { - case 0xFFC4: // DHT - this.huffTable.read(this.stream, this.HuffTab); - break; - case 0xFFCC: // DAC - throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)"); - case 0xFFDB: - this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE); - break; - case 0xFFDD: - this.restartInterval = this.readNumber(); - break; - case 0xFFE0: - case 0xFFE1: - case 0xFFE2: - case 0xFFE3: - case 0xFFE4: - case 0xFFE5: - case 0xFFE6: - case 0xFFE7: - case 0xFFE8: - case 0xFFE9: - case 0xFFEA: - case 0xFFEB: - case 0xFFEC: - case 0xFFED: - case 0xFFEE: - case 0xFFEF: - this.readApp(); - break; - case 0xFFFE: - this.readComment(); - break; - default: - if ((current >> 8) !== 0xFF) { - throw new Error("ERROR: format throw new IOException! (Parser.decode)"); - } - } - - current = this.stream.get16(); + if (typeof numBytes !== "undefined") { + this.numBytes = numBytes; } - this.precision = this.frame.precision; - this.components = this.frame.components; + this.stream = new jpeg.lossless.DataStream(this.buffer, offset, length); + this.buffer = null; - if (!this.numBytes) { - this.numBytes = parseInt(Math.ceil(this.precision / 8)); - } + this.xLoc = 0; + this.yLoc = 0; + current = this.stream.get16(); - if (this.numBytes == 1) { - this.mask = 0xFF; - } else { - this.mask = 0xFFFF; + if (current !== 0xFFD8) { // SOI + throw new Error("Not a JPEG file"); } - this.scan.read(this.stream); - this.numComp = this.scan.numComp; - this.selection = this.scan.selection; - - if (this.numBytes === 1) { - if (this.numComp === 3) { - this.getter = this.getValueRGB; - this.setter = this.setValueRGB; - this.output = this.outputRGB; - } else { - this.getter = this.getValue8; - this.setter = this.setValue8; - this.output = this.outputSingle; - } - } else { - this.getter = this.getValue16; - this.setter = this.setValue16; - this.output = this.outputSingle; - } + current = this.stream.get16(); - switch (this.selection) { - case 2: - this.selector = this.select2; - break; - case 3: - this.selector = this.select3; - break; - case 4: - this.selector = this.select4; - break; - case 5: - this.selector = this.select5; - break; - case 6: - this.selector = this.select6; - break; - case 7: - this.selector = this.select7; - break; - default: - this.selector = this.select1; - break; - } + while ((((current >> 4) !== 0x0FFC) || (current === 0xFFC4))) { // SOF 0~15 + switch (current) { + case 0xFFC4: // DHT + this.huffTable.read(this.stream, this.HuffTab); + break; + case 0xFFCC: // DAC + throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)"); + case 0xFFDB: + this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE); + break; + case 0xFFDD: + this.restartInterval = this.readNumber(); + break; + case 0xFFE0: + case 0xFFE1: + case 0xFFE2: + case 0xFFE3: + case 0xFFE4: + case 0xFFE5: + case 0xFFE6: + case 0xFFE7: + case 0xFFE8: + case 0xFFE9: + case 0xFFEA: + case 0xFFEB: + case 0xFFEC: + case 0xFFED: + case 0xFFEE: + case 0xFFEF: + this.readApp(); + break; + case 0xFFFE: + this.readComment(); + break; + default: + if ((current >> 8) !== 0xFF) { + throw new Error("ERROR: format throw new IOException! (decode)"); + } + } - this.scanComps = this.scan.components; - this.quantTables = this.quantTable.quantTables; + current = this.stream.get16(); + } - for (i = 0; i < this.numComp; i+=1) { - compN = this.scanComps[i].scanCompSel; - this.qTab[i] = this.quantTables[this.components[compN].quantTableSel]; - this.nBlock[i] = this.components[compN].vSamp * this.components[compN].hSamp; - this.dcTab[i] = this.HuffTab[this.scanComps[i].dcTabSel][0]; - this.acTab[i] = this.HuffTab[this.scanComps[i].acTabSel][1]; + if ((current < 0xFFC0) || (current > 0xFFC7)) { + throw new Error("ERROR: could not handle arithmetic code!"); } - this.xDim = this.frame.dimX; - this.yDim = this.frame.dimY; - this.outputData = new DataView(new ArrayBuffer(this.xDim * this.yDim * this.numBytes * this.numComp)); + this.frame.read(this.stream); + current = this.stream.get16(); - scanNum+=1; + do { + while (current !== 0x0FFDA) { // SOS + switch (current) { + case 0xFFC4: // DHT + this.huffTable.read(this.stream, this.HuffTab); + break; + case 0xFFCC: // DAC + throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)"); + case 0xFFDB: + this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE); + break; + case 0xFFDD: + this.restartInterval = this.readNumber(); + break; + case 0xFFE0: + case 0xFFE1: + case 0xFFE2: + case 0xFFE3: + case 0xFFE4: + case 0xFFE5: + case 0xFFE6: + case 0xFFE7: + case 0xFFE8: + case 0xFFE9: + case 0xFFEA: + case 0xFFEB: + case 0xFFEC: + case 0xFFED: + case 0xFFEE: + case 0xFFEF: + this.readApp(); + break; + case 0xFFFE: + this.readComment(); + break; + default: + if ((current >> 8) !== 0xFF) { + throw new Error("ERROR: format throw new IOException! (Parser.decode)"); + } + } + + current = this.stream.get16(); + } - while (true) { // Decode one scan - temp[0] = 0; - index[0] = 0; + this.precision = this.frame.precision; + this.components = this.frame.components; - for (i = 0; i < 10; i+=1) { - pred[i] = (1 << (this.precision - 1)); - } + if (!this.numBytes) { + this.numBytes = parseInt(Math.ceil(this.precision / 8)); + } - if (this.restartInterval === 0) { - current = this.decodeUnit(pred, temp, index); + if (this.numBytes == 1) { + this.mask = 0xFF; + } else { + this.mask = 0xFFFF; + } - while ((current === 0) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim))) { - this.output(pred); - current = this.decodeUnit(pred, temp, index); + this.scan.read(this.stream); + this.numComp = this.scan.numComp; + this.selection = this.scan.selection; + + if (this.numBytes === 1) { + if (this.numComp === 3) { + this.getter = this.getValueRGB; + this.setter = this.setValueRGB; + this.output = this.outputRGB; + } else { + this.getter = this.getValue8; + this.setter = this.setValue8; + this.output = this.outputSingle; + } + } else { + this.getter = this.getValue16; + this.setter = this.setValue16; + this.output = this.outputSingle; } - break; //current=MARKER - } + switch (this.selection) { + case 2: + this.selector = this.select2; + break; + case 3: + this.selector = this.select3; + break; + case 4: + this.selector = this.select4; + break; + case 5: + this.selector = this.select5; + break; + case 6: + this.selector = this.select6; + break; + case 7: + this.selector = this.select7; + break; + default: + this.selector = this.select1; + break; + } - for (mcuNum = 0; mcuNum < this.restartInterval; mcuNum+=1) { - this.restarting = (mcuNum == 0); - current = this.decodeUnit(pred, temp, index); - this.output(pred); + this.scanComps = this.scan.components; + this.quantTables = this.quantTable.quantTables; - if (current !== 0) { - break; + for (i = 0; i < this.numComp; i+=1) { + compN = this.scanComps[i].scanCompSel; + this.qTab[i] = this.quantTables[this.components[compN].quantTableSel]; + this.nBlock[i] = this.components[compN].vSamp * this.components[compN].hSamp; + this.dcTab[i] = this.HuffTab[this.scanComps[i].dcTabSel][0]; + this.acTab[i] = this.HuffTab[this.scanComps[i].acTabSel][1]; } - } - if (current === 0) { - if (this.markerIndex !== 0) { - current = (0xFF00 | this.marker); - this.markerIndex = 0; + this.xDim = this.frame.dimX; + this.yDim = this.frame.dimY; + if (this.numBytes == 1) { + this.outputData = new Uint8Array(new ArrayBuffer(this.xDim * this.yDim * this.numBytes * this.numComp)); } else { - current = this.stream.get16(); + this.outputData = new Uint16Array(new ArrayBuffer(this.xDim * this.yDim * this.numBytes * this.numComp)); } - } - if (!((current >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && - (current <= jpeg.lossless.Decoder.RESTART_MARKER_END))) { - break; //current=MARKER - } - } + scanNum+=1; + + while (true) { // Decode one scan + temp[0] = 0; + index[0] = 0; + + for (i = 0; i < 10; i+=1) { + pred[i] = (1 << (this.precision - 1)); + } + + if (this.restartInterval === 0) { + current = this.decodeUnit(pred, temp, index); + + while ((current === 0) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim))) { + this.output(pred); + current = this.decodeUnit(pred, temp, index); + } + + break; //current=MARKER + } + + for (mcuNum = 0; mcuNum < this.restartInterval; mcuNum+=1) { + this.restarting = (mcuNum == 0); + current = this.decodeUnit(pred, temp, index); + this.output(pred); + + if (current !== 0) { + break; + } + } + + if (current === 0) { + if (this.markerIndex !== 0) { + current = (0xFF00 | this.marker); + this.markerIndex = 0; + } else { + current = this.stream.get16(); + } + } + + if (!((current >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && + (current <= jpeg.lossless.Decoder.RESTART_MARKER_END))) { + break; //current=MARKER + } + } - if ((current === 0xFFDC) && (scanNum === 1)) { //DNL - this.readNumber(); - current = this.stream.get16(); - } - } while ((current !== 0xFFD9) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) && (scanNum === 0)); + if ((current === 0xFFDC) && (scanNum === 1)) { //DNL + this.readNumber(); + current = this.stream.get16(); + } + } while ((current !== 0xFFD9) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) && (scanNum === 0)); - return this.outputData; + return this.outputData; }; jpeg.lossless.Decoder.prototype.decodeUnit = function (prev, temp, index) { - if (this.numComp == 1) { - return this.decodeSingle(prev, temp, index); - } else if (this.numComp == 3) { - return this.decodeRGB(prev, temp, index); - } else { - return -1; - } + if (this.numComp == 1) { + return this.decodeSingle(prev, temp, index); + } else if (this.numComp == 3) { + return this.decodeRGB(prev, temp, index); + } else { + return -1; + } }; jpeg.lossless.Decoder.prototype.select1 = function (compOffset) { - return this.getPreviousX(compOffset); + return this.getPreviousX(compOffset); }; jpeg.lossless.Decoder.prototype.select2 = function (compOffset) { - return this.getPreviousY(compOffset); + return this.getPreviousY(compOffset); }; jpeg.lossless.Decoder.prototype.select3 = function (compOffset) { - return this.getPreviousXY(compOffset); + return this.getPreviousXY(compOffset); }; jpeg.lossless.Decoder.prototype.select4 = function (compOffset) { - return (this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) - this.getPreviousXY(compOffset); + return (this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) - this.getPreviousXY(compOffset); }; jpeg.lossless.Decoder.prototype.select5 = function (compOffset) { - return this.getPreviousX(compOffset) + ((this.getPreviousY(compOffset) - this.getPreviousXY(compOffset)) >> 1); + return this.getPreviousX(compOffset) + ((this.getPreviousY(compOffset) - this.getPreviousXY(compOffset)) >> 1); }; jpeg.lossless.Decoder.prototype.select6 = function (compOffset) { - return this.getPreviousY(compOffset) + ((this.getPreviousX(compOffset) - this.getPreviousXY(compOffset)) >> 1); + return this.getPreviousY(compOffset) + ((this.getPreviousX(compOffset) - this.getPreviousXY(compOffset)) >> 1); }; jpeg.lossless.Decoder.prototype.select7 = function (compOffset) { - return ((this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) / 2); + return ((this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) / 2); }; jpeg.lossless.Decoder.prototype.decodeRGB = function (prev, temp, index) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - var value, actab, dctab, qtab, ctrC, i, k, j; + var value, actab, dctab, qtab, ctrC, i, k, j; - prev[0] = this.selector(0); - prev[1] = this.selector(1); - prev[2] = this.selector(2); + prev[0] = this.selector(0); + prev[1] = this.selector(1); + prev[2] = this.selector(2); - for (ctrC = 0; ctrC < this.numComp; ctrC+=1) { - qtab = this.qTab[ctrC]; - actab = this.acTab[ctrC]; - dctab = this.dcTab[ctrC]; - for (i = 0; i < this.nBlock[ctrC]; i+=1) { - for (k = 0; k < this.IDCT_Source.length; k+=1) { - this.IDCT_Source[k] = 0; - } + for (ctrC = 0; ctrC < this.numComp; ctrC+=1) { + qtab = this.qTab[ctrC]; + actab = this.acTab[ctrC]; + dctab = this.dcTab[ctrC]; + for (i = 0; i < this.nBlock[ctrC]; i+=1) { + for (k = 0; k < this.IDCT_Source.length; k+=1) { + this.IDCT_Source[k] = 0; + } - value = this.getHuffmanValue(dctab, temp, index); + value = this.getHuffmanValue(dctab, temp, index); - if (value >= 0xFF00) { - return value; - } + if (value >= 0xFF00) { + return value; + } - prev[ctrC] = this.IDCT_Source[0] = prev[ctrC] + this.getn(index, value, temp, index); - this.IDCT_Source[0] *= qtab[0]; + prev[ctrC] = this.IDCT_Source[0] = prev[ctrC] + this.getn(index, value, temp, index); + this.IDCT_Source[0] *= qtab[0]; - for (j = 1; j < 64; j+=1) { - value = this.getHuffmanValue(actab, temp, index); + for (j = 1; j < 64; j+=1) { + value = this.getHuffmanValue(actab, temp, index); - if (value >= 0xFF00) { - return value; - } + if (value >= 0xFF00) { + return value; + } - j += (value >> 4); + j += (value >> 4); - if ((value & 0x0F) === 0) { - if ((value >> 4) === 0) { - break; - } - } else { - this.IDCT_Source[jpeg.lossless.Decoder.IDCT_P[j]] = this.getn(index, value & 0x0F, temp, index) * qtab[j]; + if ((value & 0x0F) === 0) { + if ((value >> 4) === 0) { + break; + } + } else { + this.IDCT_Source[jpeg.lossless.Decoder.IDCT_P[j]] = this.getn(index, value & 0x0F, temp, index) * qtab[j]; + } + } } - } } - } - return 0; + return 0; }; jpeg.lossless.Decoder.prototype.decodeSingle = function (prev, temp, index) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - var value, i, n, nRestart; + var value, i, n, nRestart; - if (this.restarting) { - this.restarting = false; - prev[0] = (1 << (this.frame.precision - 1)); - } else { - prev[0] = this.selector(); - } - - for (i = 0; i < this.nBlock[0]; i+=1) { - value = this.getHuffmanValue(this.dcTab[0], temp, index); - if (value >= 0xFF00) { - return value; + if (this.restarting) { + this.restarting = false; + prev[0] = (1 << (this.frame.precision - 1)); + } else { + prev[0] = this.selector(); } - n = this.getn(prev, value, temp, index); - nRestart = (n >> 8); + for (i = 0; i < this.nBlock[0]; i+=1) { + value = this.getHuffmanValue(this.dcTab[0], temp, index); + if (value >= 0xFF00) { + return value; + } - if ((nRestart >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && (nRestart <= jpeg.lossless.Decoder.RESTART_MARKER_END)) { - return nRestart; - } + n = this.getn(prev, value, temp, index); + nRestart = (n >> 8); - prev[0] += n; - } + if ((nRestart >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && (nRestart <= jpeg.lossless.Decoder.RESTART_MARKER_END)) { + return nRestart; + } - return 0; + prev[0] += n; + } + + return 0; }; -// Huffman table for fast search: (HuffTab) 8-bit Look up table 2-layer search architecture, 1st-layer represent 256 node (8 bits) if codeword-length > 8 -// bits, then the entry of 1st-layer = (# of 2nd-layer table) | MSB and it is stored in the 2nd-layer Size of tables in each layer are 256. -// HuffTab[*][*][0-256] is always the only 1st-layer table. -// -// An entry can be: (1) (# of 2nd-layer table) | MSB , for code length > 8 in 1st-layer (2) (Code length) << 8 | HuffVal -// -// HuffmanValue(table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...) -// ): -// return: Huffman Value of table -// 0xFF?? if it receives a MARKER -// Parameter: table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...) -// temp temp storage for remainded bits -// index index to bit of temp -// in FILE pointer -// Effect: -// temp store new remainded bits -// index change to new index -// in change to new position -// NOTE: -// Initial by temp=0; index=0; -// NOTE: (explain temp and index) -// temp: is always in the form at calling time or returning time -// | byte 4 | byte 3 | byte 2 | byte 1 | -// | 0 | 0 | 00000000 | 00000??? | if not a MARKER -// ^index=3 (from 0 to 15) -// 321 -// NOTE (marker and marker_index): -// If get a MARKER from 'in', marker=the low-byte of the MARKER -// and marker_index=9 -// If marker_index=9 then index is always > 8, or HuffmanValue() -// will not be called + // Huffman table for fast search: (HuffTab) 8-bit Look up table 2-layer search architecture, 1st-layer represent 256 node (8 bits) if codeword-length > 8 + // bits, then the entry of 1st-layer = (# of 2nd-layer table) | MSB and it is stored in the 2nd-layer Size of tables in each layer are 256. + // HuffTab[*][*][0-256] is always the only 1st-layer table. + // + // An entry can be: (1) (# of 2nd-layer table) | MSB , for code length > 8 in 1st-layer (2) (Code length) << 8 | HuffVal + // + // HuffmanValue(table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...) + // ): + // return: Huffman Value of table + // 0xFF?? if it receives a MARKER + // Parameter: table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...) + // temp temp storage for remainded bits + // index index to bit of temp + // in FILE pointer + // Effect: + // temp store new remainded bits + // index change to new index + // in change to new position + // NOTE: + // Initial by temp=0; index=0; + // NOTE: (explain temp and index) + // temp: is always in the form at calling time or returning time + // | byte 4 | byte 3 | byte 2 | byte 1 | + // | 0 | 0 | 00000000 | 00000??? | if not a MARKER + // ^index=3 (from 0 to 15) + // 321 + // NOTE (marker and marker_index): + // If get a MARKER from 'in', marker=the low-byte of the MARKER + // and marker_index=9 + // If marker_index=9 then index is always > 8, or HuffmanValue() + // will not be called jpeg.lossless.Decoder.prototype.getHuffmanValue = function (table, temp, index) { - /*jslint bitwise: true */ - - var code, input, mask; - mask = 0xFFFF; - - if (index[0] < 8) { - temp[0] <<= 8; - input = this.stream.get8(); - if (input === 0xFF) { - this.marker = this.stream.get8(); - if (this.marker !== 0) { - this.markerIndex = 9; - } + /*jslint bitwise: true */ + + var code, input, mask; + mask = 0xFFFF; + + if (index[0] < 8) { + temp[0] <<= 8; + input = this.stream.get8(); + if (input === 0xFF) { + this.marker = this.stream.get8(); + if (this.marker !== 0) { + this.markerIndex = 9; + } + } + temp[0] |= input; + } else { + index[0] -= 8; } - temp[0] |= input; - } else { - index[0] -= 8; - } - code = table[temp[0] >> index[0]]; + code = table[temp[0] >> index[0]]; - if ((code & jpeg.lossless.Decoder.MSB) !== 0) { - if (this.markerIndex !== 0) { - this.markerIndex = 0; - return 0xFF00 | this.marker; - } + if ((code & jpeg.lossless.Decoder.MSB) !== 0) { + if (this.markerIndex !== 0) { + this.markerIndex = 0; + return 0xFF00 | this.marker; + } - temp[0] &= (mask >> (16 - index[0])); - temp[0] <<= 8; - input = this.stream.get8(); - - if (input === 0xFF) { - this.marker = this.stream.get8(); - if (this.marker !== 0) { - this.markerIndex = 9; - } - } + temp[0] &= (mask >> (16 - index[0])); + temp[0] <<= 8; + input = this.stream.get8(); - temp[0] |= input; - code = table[((code & 0xFF) * 256) + (temp[0] >> index[0])]; - index[0] += 8; - } + if (input === 0xFF) { + this.marker = this.stream.get8(); + if (this.marker !== 0) { + this.markerIndex = 9; + } + } - index[0] += 8 - (code >> 8); + temp[0] |= input; + code = table[((code & 0xFF) * 256) + (temp[0] >> index[0])]; + index[0] += 8; + } - if (index[0] < 0) { - throw new Error("index=" + index[0] + " temp=" + temp[0] + " code=" + code + " in HuffmanValue()"); - } + index[0] += 8 - (code >> 8); - if (index[0] < this.markerIndex) { - this.markerIndex = 0; - return 0xFF00 | this.marker; - } + if (index[0] < 0) { + throw new Error("index=" + index[0] + " temp=" + temp[0] + " code=" + code + " in HuffmanValue()"); + } + + if (index[0] < this.markerIndex) { + this.markerIndex = 0; + return 0xFF00 | this.marker; + } - temp[0] &= (mask >> (16 - index[0])); - return code & 0xFF; + temp[0] &= (mask >> (16 - index[0])); + return code & 0xFF; }; jpeg.lossless.Decoder.prototype.getn = function (PRED, n, temp, index) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - var result, one, n_one, mask, input; - one = 1; - n_one = -1; - mask = 0xFFFF; + var result, one, n_one, mask, input; + one = 1; + n_one = -1; + mask = 0xFFFF; - if (n === 0) { - return 0; - } + if (n === 0) { + return 0; + } - if (n === 16) { - if (PRED[0] >= 0) { - return -32768; - } else { - return 32768; + if (n === 16) { + if (PRED[0] >= 0) { + return -32768; + } else { + return 32768; + } } - } - index[0] -= n; + index[0] -= n; - if (index[0] >= 0) { - if ((index[0] < this.markerIndex) && !this.isLastPixel()) { // this was corrupting the last pixel in some cases - this.markerIndex = 0; - return (0xFF00 | this.marker) << 8; - } + if (index[0] >= 0) { + if ((index[0] < this.markerIndex) && !this.isLastPixel()) { // this was corrupting the last pixel in some cases + this.markerIndex = 0; + return (0xFF00 | this.marker) << 8; + } - result = temp[0] >> index[0]; - temp[0] &= (mask >> (16 - index[0])); - } else { - temp[0] <<= 8; - input = this.stream.get8(); - - if (input === 0xFF) { - this.marker = this.stream.get8(); - if (this.marker !== 0) { - this.markerIndex = 9; - } - } + result = temp[0] >> index[0]; + temp[0] &= (mask >> (16 - index[0])); + } else { + temp[0] <<= 8; + input = this.stream.get8(); + + if (input === 0xFF) { + this.marker = this.stream.get8(); + if (this.marker !== 0) { + this.markerIndex = 9; + } + } - temp[0] |= input; - index[0] += 8; + temp[0] |= input; + index[0] += 8; - if (index[0] < 0) { - if (this.markerIndex !== 0) { - this.markerIndex = 0; - return (0xFF00 | this.marker) << 8; - } + if (index[0] < 0) { + if (this.markerIndex !== 0) { + this.markerIndex = 0; + return (0xFF00 | this.marker) << 8; + } + + temp[0] <<= 8; + input = this.stream.get8(); - temp[0] <<= 8; - input = this.stream.get8(); + if (input === 0xFF) { + this.marker = this.stream.get8(); + if (this.marker !== 0) { + this.markerIndex = 9; + } + } - if (input === 0xFF) { - this.marker = this.stream.get8(); - if (this.marker !== 0) { - this.markerIndex = 9; + temp[0] |= input; + index[0] += 8; } - } - temp[0] |= input; - index[0] += 8; - } + if (index[0] < 0) { + throw new Error("index=" + index[0] + " in getn()"); + } - if (index[0] < 0) { - throw new Error("index=" + index[0] + " in getn()"); - } + if (index[0] < this.markerIndex) { + this.markerIndex = 0; + return (0xFF00 | this.marker) << 8; + } - if (index[0] < this.markerIndex) { - this.markerIndex = 0; - return (0xFF00 | this.marker) << 8; + result = temp[0] >> index[0]; + temp[0] &= (mask >> (16 - index[0])); } - result = temp[0] >> index[0]; - temp[0] &= (mask >> (16 - index[0])); - } - - if (result < (one << (n - 1))) { - result += (n_one << n) + 1; - } + if (result < (one << (n - 1))) { + result += (n_one << n) + 1; + } - return result; + return result; }; jpeg.lossless.Decoder.prototype.getPreviousX = function (compOffset) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - if (this.xLoc > 0) { - return this.getter((((this.yLoc * this.xDim) + this.xLoc) - 1), compOffset); - } else if (this.yLoc > 0) { - return this.getPreviousY(compOffset); - } else { - return (1 << (this.frame.precision - 1)); - } + if (this.xLoc > 0) { + return this.getter((((this.yLoc * this.xDim) + this.xLoc) - 1), compOffset); + } else if (this.yLoc > 0) { + return this.getPreviousY(compOffset); + } else { + return (1 << (this.frame.precision - 1)); + } }; jpeg.lossless.Decoder.prototype.getPreviousXY = function (compOffset) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - if ((this.xLoc > 0) && (this.yLoc > 0)) { - return this.getter(((((this.yLoc - 1) * this.xDim) + this.xLoc) - 1), compOffset); - } else { - return this.getPreviousY(compOffset); - } + if ((this.xLoc > 0) && (this.yLoc > 0)) { + return this.getter(((((this.yLoc - 1) * this.xDim) + this.xLoc) - 1), compOffset); + } else { + return this.getPreviousY(compOffset); + } }; jpeg.lossless.Decoder.prototype.getPreviousY = function (compOffset) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - if (this.yLoc > 0) { - return this.getter((((this.yLoc - 1) * this.xDim) + this.xLoc), compOffset); - } else { - return this.getPreviousX(compOffset); - } + if (this.yLoc > 0) { + return this.getter((((this.yLoc - 1) * this.xDim) + this.xLoc), compOffset); + } else { + return this.getPreviousX(compOffset); + } }; jpeg.lossless.Decoder.prototype.isLastPixel = function () { - return (this.xLoc === (this.xDim - 1)) && (this.yLoc === (this.yDim - 1)); + return (this.xLoc === (this.xDim - 1)) && (this.yLoc === (this.yDim - 1)); }; jpeg.lossless.Decoder.prototype.outputSingle = function (PRED) { - if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) { - this.setter((((this.yLoc * this.xDim) + this.xLoc)), this.mask & PRED[0]); + if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) { + this.setter((((this.yLoc * this.xDim) + this.xLoc)), this.mask & PRED[0]); - this.xLoc+=1; + this.xLoc+=1; - if (this.xLoc >= this.xDim) { - this.yLoc+=1; - this.xLoc = 0; + if (this.xLoc >= this.xDim) { + this.yLoc+=1; + this.xLoc = 0; + } } - } }; jpeg.lossless.Decoder.prototype.outputRGB = function (PRED) { - var offset = ((this.yLoc * this.xDim) + this.xLoc); + var offset = ((this.yLoc * this.xDim) + this.xLoc); - if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) { - this.setter(offset, PRED[0], 0); - this.setter(offset, PRED[1], 1); - this.setter(offset, PRED[2], 2); + if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) { + this.setter(offset, PRED[0], 0); + this.setter(offset, PRED[1], 1); + this.setter(offset, PRED[2], 2); - this.xLoc+=1; + this.xLoc+=1; - if (this.xLoc >= this.xDim) { - this.yLoc+=1; - this.xLoc = 0; + if (this.xLoc >= this.xDim) { + this.yLoc+=1; + this.xLoc = 0; + } } - } - }; - - - - jpeg.lossless.Decoder.prototype.setValue16 = function (index, val) { - this.outputData.setInt16(index * 2, val, true); }; - - - jpeg.lossless.Decoder.prototype.getValue16 = function (index) { - return this.outputData.getInt16(index * 2, true) & this.mask; - }; - - - jpeg.lossless.Decoder.prototype.setValue8 = function (index, val) { - this.outputData.setInt8(index, val); + this.outputData[index] = val; }; - - jpeg.lossless.Decoder.prototype.getValue8 = function (index) { - return this.outputData.getInt8(index) & this.mask; + return this.outputData[index]; // mask should not be necessary because outputData is either Int8Array or Int16Array }; - + var littleEndian = (function() { + var buffer = new ArrayBuffer(2); + new DataView(buffer).setInt16(0, 256, true /* littleEndian */); + // Int16Array uses the platform's endianness. + return new Int16Array(buffer)[0] === 256; + })(); + + if (littleEndian) { + // just reading from an array is fine then. Int16Array will use platform endianness. + jpeg.lossless.Decoder.prototype.setValue16 = jpeg.lossless.Decoder.prototype.setValue8; + jpeg.lossless.Decoder.prototype.getValue16 = jpeg.lossless.Decoder.prototype.getValue8; + } + else { + // If platform is big-endian, we will need to convert to little-endian + jpeg.lossless.Decoder.prototype.setValue16 = function (index, val) { + this.outputData[index] = ((val & 0xFF) << 8) | ((val >> 8) & 0xFF); + }; + + jpeg.lossless.Decoder.prototype.getValue16 = function (index) { + var val = this.outputData[index]; + return ((val & 0xFF) << 8) | ((val >> 8) & 0xFF); + }; + } jpeg.lossless.Decoder.prototype.setValueRGB = function (index, val, compOffset) { - this.outputData.setUint8(index * 3 + compOffset, val); + // this.outputData.setUint8(index * 3 + compOffset, val); + this.outputData[index * 3 + compOffset] = val; }; - - jpeg.lossless.Decoder.prototype.getValueRGB = function (index, compOffset) { - return this.outputData.getUint8(index * 3 + compOffset); + // return this.outputData.getUint8(index * 3 + compOffset); + return this.outputData[index * 3 + compOffset]; }; jpeg.lossless.Decoder.prototype.readApp = function() { - var count = 0, length = this.stream.get16(); - count += 2; + var count = 0, length = this.stream.get16(); + count += 2; - while (count < length) { - this.stream.get8(); - count+=1; - } + while (count < length) { + this.stream.get8(); + count+=1; + } - return length; + return length; }; jpeg.lossless.Decoder.prototype.readComment = function () { - var sb = "", count = 0, length; + var sb = "", count = 0, length; - length = this.stream.get16(); - count += 2; + length = this.stream.get16(); + count += 2; - while (count < length) { - sb += this.stream.get8(); - count+=1; - } + while (count < length) { + sb += this.stream.get8(); + count+=1; + } - return sb; + return sb; }; jpeg.lossless.Decoder.prototype.readNumber = function() { - var Ld = this.stream.get16(); + var Ld = this.stream.get16(); - if (Ld !== 4) { - throw new Error("ERROR: Define number format throw new IOException [Ld!=4]"); - } + if (Ld !== 4) { + throw new Error("ERROR: Define number format throw new IOException [Ld!=4]"); + } - return this.stream.get16(); + return this.stream.get16(); }; @@ -951,10 +981,10 @@ var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.Decoder; + module.exports = jpeg.lossless.Decoder; } -},{"./data-stream.js":2,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-header.js":9,"./utils.js":10}],4:[function(require,module,exports){ + },{"./data-stream.js":2,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-header.js":9,"./utils.js":10}],4:[function(require,module,exports){ /* * Copyright (C) 2015 Michael Martinez * Changes: Added support for selection values 2-7, fixed minor bugs & @@ -999,11 +1029,11 @@ /*** Constructor ***/ jpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || function () { - this.components = []; // Components - this.dimX = 0; // Number of samples per line - this.dimY = 0; // Number of lines - this.numComp = 0; // Number of component in the frame - this.precision = 0; // Sample Precision (from the original image) + this.components = []; // Components + this.dimX = 0; // Number of samples per line + this.dimY = 0; // Number of lines + this.numComp = 0; // Number of component in the frame + this.precision = 0; // Sample Precision (from the original image) }; @@ -1011,54 +1041,54 @@ /*** Prototype Methods ***/ jpeg.lossless.FrameHeader.prototype.read = function (data) { - /*jslint bitwise: true */ - - var count = 0, length, i, c, temp; + /*jslint bitwise: true */ - length = data.get16(); - count += 2; + var count = 0, length, i, c, temp; - this.precision = data.get8(); - count+=1; + length = data.get16(); + count += 2; - this.dimY = data.get16(); - count += 2; + this.precision = data.get8(); + count+=1; - this.dimX = data.get16(); - count += 2; + this.dimY = data.get16(); + count += 2; - this.numComp = data.get8(); - count+=1; - for (i = 1; i <= this.numComp; i+=1) { - if (count > length) { - throw new Error("ERROR: frame format error"); - } + this.dimX = data.get16(); + count += 2; - c = data.get8(); + this.numComp = data.get8(); count+=1; + for (i = 1; i <= this.numComp; i+=1) { + if (count > length) { + throw new Error("ERROR: frame format error"); + } - if (count >= length) { - throw new Error("ERROR: frame format error [c>=Lf]"); - } + c = data.get8(); + count+=1; - temp = data.get8(); - count+=1; + if (count >= length) { + throw new Error("ERROR: frame format error [c>=Lf]"); + } - if (!this.components[c]) { - this.components[c] = new jpeg.lossless.ComponentSpec(); - } + temp = data.get8(); + count+=1; - this.components[c].hSamp = temp >> 4; - this.components[c].vSamp = temp & 0x0F; - this.components[c].quantTableSel = data.get8(); - count+=1; - } + if (!this.components[c]) { + this.components[c] = new jpeg.lossless.ComponentSpec(); + } - if (count !== length) { - throw new Error("ERROR: frame format error [Lf!=count]"); - } + this.components[c].hSamp = temp >> 4; + this.components[c].vSamp = temp & 0x0F; + this.components[c].quantTableSel = data.get8(); + count+=1; + } + + if (count !== length) { + throw new Error("ERROR: frame format error [Lf!=count]"); + } - return 1; + return 1; }; @@ -1066,10 +1096,10 @@ var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.FrameHeader; + module.exports = jpeg.lossless.FrameHeader; } -},{"./component-spec.js":1,"./data-stream.js":2}],5:[function(require,module,exports){ + },{"./component-spec.js":1,"./data-stream.js":2}],5:[function(require,module,exports){ /* * Copyright (C) 2015 Michael Martinez * Changes: Added support for selection values 2-7, fixed minor bugs & @@ -1114,23 +1144,23 @@ /*** Constructor ***/ jpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || function () { - this.l = jpeg.lossless.Utils.createArray(4, 2, 16); - this.th = []; - this.v = jpeg.lossless.Utils.createArray(4, 2, 16, 200); - this.tc = jpeg.lossless.Utils.createArray(4, 2); - - this.tc[0][0] = 0; - this.tc[1][0] = 0; - this.tc[2][0] = 0; - this.tc[3][0] = 0; - this.tc[0][1] = 0; - this.tc[1][1] = 0; - this.tc[2][1] = 0; - this.tc[3][1] = 0; - this.th[0] = 0; - this.th[1] = 0; - this.th[2] = 0; - this.th[3] = 0; + this.l = jpeg.lossless.Utils.createArray(4, 2, 16); + this.th = []; + this.v = jpeg.lossless.Utils.createArray(4, 2, 16, 200); + this.tc = jpeg.lossless.Utils.createArray(4, 2); + + this.tc[0][0] = 0; + this.tc[1][0] = 0; + this.tc[2][0] = 0; + this.tc[3][0] = 0; + this.tc[0][1] = 0; + this.tc[1][1] = 0; + this.tc[2][1] = 0; + this.tc[3][1] = 0; + this.th[0] = 0; + this.th[1] = 0; + this.th[2] = 0; + this.th[3] = 0; }; @@ -1143,110 +1173,110 @@ /*** Prototype Methods ***/ jpeg.lossless.HuffmanTable.prototype.read = function(data, HuffTab) { - /*jslint bitwise: true */ - - var count = 0, length, temp, t, c, i, j; + /*jslint bitwise: true */ - length = data.get16(); - count += 2; + var count = 0, length, temp, t, c, i, j; - while (count < length) { - temp = data.get8(); - count+=1; - t = temp & 0x0F; - if (t > 3) { - throw new Error("ERROR: Huffman table ID > 3"); - } + length = data.get16(); + count += 2; - c = temp >> 4; - if (c > 2) { - throw new Error("ERROR: Huffman table [Table class > 2 ]"); - } + while (count < length) { + temp = data.get8(); + count+=1; + t = temp & 0x0F; + if (t > 3) { + throw new Error("ERROR: Huffman table ID > 3"); + } - this.th[t] = 1; - this.tc[t][c] = 1; + c = temp >> 4; + if (c > 2) { + throw new Error("ERROR: Huffman table [Table class > 2 ]"); + } - for (i = 0; i < 16; i+=1) { - this.l[t][c][i] = data.get8(); - count+=1; - } + this.th[t] = 1; + this.tc[t][c] = 1; - for (i = 0; i < 16; i+=1) { - for (j = 0; j < this.l[t][c][i]; j+=1) { - if (count > length) { - throw new Error("ERROR: Huffman table format error [count>Lh]"); + for (i = 0; i < 16; i+=1) { + this.l[t][c][i] = data.get8(); + count+=1; } - this.v[t][c][i][j] = data.get8(); - count+=1; - } + for (i = 0; i < 16; i+=1) { + for (j = 0; j < this.l[t][c][i]; j+=1) { + if (count > length) { + throw new Error("ERROR: Huffman table format error [count>Lh]"); + } + + this.v[t][c][i][j] = data.get8(); + count+=1; + } + } } - } - if (count !== length) { - throw new Error("ERROR: Huffman table format error [count!=Lf]"); - } + if (count !== length) { + throw new Error("ERROR: Huffman table format error [count!=Lf]"); + } - for (i = 0; i < 4; i+=1) { - for (j = 0; j < 2; j+=1) { - if (this.tc[i][j] !== 0) { - this.buildHuffTable(HuffTab[i][j], this.l[i][j], this.v[i][j]); - } + for (i = 0; i < 4; i+=1) { + for (j = 0; j < 2; j+=1) { + if (this.tc[i][j] !== 0) { + this.buildHuffTable(HuffTab[i][j], this.l[i][j], this.v[i][j]); + } + } } - } - return 1; + return 1; }; -// Build_HuffTab() -// Parameter: t table ID -// c table class ( 0 for DC, 1 for AC ) -// L[i] # of codewords which length is i -// V[i][j] Huffman Value (length=i) -// Effect: -// build up HuffTab[t][c] using L and V. + // Build_HuffTab() + // Parameter: t table ID + // c table class ( 0 for DC, 1 for AC ) + // L[i] # of codewords which length is i + // V[i][j] Huffman Value (length=i) + // Effect: + // build up HuffTab[t][c] using L and V. jpeg.lossless.HuffmanTable.prototype.buildHuffTable = function(tab, L, V) { - /*jslint bitwise: true */ - - var currentTable, temp, k, i, j, n; - temp = 256; - k = 0; - - for (i = 0; i < 8; i+=1) { // i+1 is Code length - for (j = 0; j < L[i]; j+=1) { - for (n = 0; n < (temp >> (i + 1)); n+=1) { - tab[k] = V[i][j] | ((i + 1) << 8); - k+=1; - } + /*jslint bitwise: true */ + + var currentTable, temp, k, i, j, n; + temp = 256; + k = 0; + + for (i = 0; i < 8; i+=1) { // i+1 is Code length + for (j = 0; j < L[i]; j+=1) { + for (n = 0; n < (temp >> (i + 1)); n+=1) { + tab[k] = V[i][j] | ((i + 1) << 8); + k+=1; + } + } + } + + for (i = 1; k < 256; i+=1, k+=1) { + tab[k] = i | jpeg.lossless.HuffmanTable.MSB; } - } - for (i = 1; k < 256; i+=1, k+=1) { - tab[k] = i | jpeg.lossless.HuffmanTable.MSB; - } + currentTable = 1; + k = 0; - currentTable = 1; - k = 0; + for (i = 8; i < 16; i+=1) { // i+1 is Code length + for (j = 0; j < L[i]; j+=1) { + for (n = 0; n < (temp >> (i - 7)); n+=1) { + tab[(currentTable * 256) + k] = V[i][j] | ((i + 1) << 8); + k+=1; + } - for (i = 8; i < 16; i+=1) { // i+1 is Code length - for (j = 0; j < L[i]; j+=1) { - for (n = 0; n < (temp >> (i - 7)); n+=1) { - tab[(currentTable * 256) + k] = V[i][j] | ((i + 1) << 8); - k+=1; - } + if (k >= 256) { + if (k > 256) { + throw new Error("ERROR: Huffman table error(1)!"); + } - if (k >= 256) { - if (k > 256) { - throw new Error("ERROR: Huffman table error(1)!"); + k = 0; + currentTable+=1; + } } - - k = 0; - currentTable+=1; - } } - } }; @@ -1254,18 +1284,30 @@ var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.HuffmanTable; + module.exports = jpeg.lossless.HuffmanTable; } -},{"./data-stream.js":2,"./utils.js":10}],6:[function(require,module,exports){ + },{"./data-stream.js":2,"./utils.js":10}],6:[function(require,module,exports){ /*jslint browser: true, node: true */ /*global require, module */ "use strict"; /*** Imports ****/ + + /** + * jpeg + * @type {*|{}} + */ var jpeg = jpeg || {}; + + /** + * jpeg.lossless + * @type {*|{}} + */ jpeg.lossless = jpeg.lossless || {}; + + jpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || ((typeof require !== 'undefined') ? require('./component-spec.js') : null); jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null); jpeg.lossless.Decoder = jpeg.lossless.Decoder || ((typeof require !== 'undefined') ? require('./decoder.js') : null); @@ -1280,10 +1322,10 @@ /*** Exports ***/ var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg; + module.exports = jpeg; } -},{"./component-spec.js":1,"./data-stream.js":2,"./decoder.js":3,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-component.js":8,"./scan-header.js":9,"./utils.js":10}],7:[function(require,module,exports){ + },{"./component-spec.js":1,"./data-stream.js":2,"./decoder.js":3,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-component.js":8,"./scan-header.js":9,"./utils.js":10}],7:[function(require,module,exports){ /* * Copyright (C) 2015 Michael Martinez * Changes: Added support for selection values 2-7, fixed minor bugs & @@ -1328,14 +1370,14 @@ /*** Constructor ***/ jpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || function () { - this.precision = []; // Quantization precision 8 or 16 - this.tq = []; // 1: this table is presented - this.quantTables = jpeg.lossless.Utils.createArray(4, 64); // Tables - - this.tq[0] = 0; - this.tq[1] = 0; - this.tq[2] = 0; - this.tq[3] = 0; + this.precision = []; // Quantization precision 8 or 16 + this.tq = []; // 1: this table is presented + this.quantTables = jpeg.lossless.Utils.createArray(4, 64); // Tables + + this.tq[0] = 0; + this.tq[1] = 0; + this.tq[2] = 0; + this.tq[3] = 0; }; @@ -1343,99 +1385,99 @@ /*** Static Methods ***/ jpeg.lossless.QuantizationTable.enhanceQuantizationTable = function(qtab, table) { - /*jslint bitwise: true */ - - var i; - - for (i = 0; i < 8; i+=1) { - qtab[table[(0 * 8) + i]] *= 90; - qtab[table[(4 * 8) + i]] *= 90; - qtab[table[(2 * 8) + i]] *= 118; - qtab[table[(6 * 8) + i]] *= 49; - qtab[table[(5 * 8) + i]] *= 71; - qtab[table[(1 * 8) + i]] *= 126; - qtab[table[(7 * 8) + i]] *= 25; - qtab[table[(3 * 8) + i]] *= 106; - } - - for (i = 0; i < 8; i+=1) { - qtab[table[0 + (8 * i)]] *= 90; - qtab[table[4 + (8 * i)]] *= 90; - qtab[table[2 + (8 * i)]] *= 118; - qtab[table[6 + (8 * i)]] *= 49; - qtab[table[5 + (8 * i)]] *= 71; - qtab[table[1 + (8 * i)]] *= 126; - qtab[table[7 + (8 * i)]] *= 25; - qtab[table[3 + (8 * i)]] *= 106; - } - - for (i = 0; i < 64; i+=1) { - qtab[i] >>= 6; - } + /*jslint bitwise: true */ + + var i; + + for (i = 0; i < 8; i+=1) { + qtab[table[(0 * 8) + i]] *= 90; + qtab[table[(4 * 8) + i]] *= 90; + qtab[table[(2 * 8) + i]] *= 118; + qtab[table[(6 * 8) + i]] *= 49; + qtab[table[(5 * 8) + i]] *= 71; + qtab[table[(1 * 8) + i]] *= 126; + qtab[table[(7 * 8) + i]] *= 25; + qtab[table[(3 * 8) + i]] *= 106; + } + + for (i = 0; i < 8; i+=1) { + qtab[table[0 + (8 * i)]] *= 90; + qtab[table[4 + (8 * i)]] *= 90; + qtab[table[2 + (8 * i)]] *= 118; + qtab[table[6 + (8 * i)]] *= 49; + qtab[table[5 + (8 * i)]] *= 71; + qtab[table[1 + (8 * i)]] *= 126; + qtab[table[7 + (8 * i)]] *= 25; + qtab[table[3 + (8 * i)]] *= 106; + } + + for (i = 0; i < 64; i+=1) { + qtab[i] >>= 6; + } }; /*** Prototype Methods ***/ jpeg.lossless.QuantizationTable.prototype.read = function (data, table) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - var count = 0, length, temp, t, i; + var count = 0, length, temp, t, i; - length = data.get16(); - count += 2; + length = data.get16(); + count += 2; - while (count < length) { - temp = data.get8(); - count+=1; - t = temp & 0x0F; + while (count < length) { + temp = data.get8(); + count+=1; + t = temp & 0x0F; - if (t > 3) { - throw new Error("ERROR: Quantization table ID > 3"); - } + if (t > 3) { + throw new Error("ERROR: Quantization table ID > 3"); + } - this.precision[t] = temp >> 4; + this.precision[t] = temp >> 4; - if (this.precision[t] === 0) { - this.precision[t] = 8; - } else if (this.precision[t] === 1) { - this.precision[t] = 16; - } else { - throw new Error("ERROR: Quantization table precision error"); - } + if (this.precision[t] === 0) { + this.precision[t] = 8; + } else if (this.precision[t] === 1) { + this.precision[t] = 16; + } else { + throw new Error("ERROR: Quantization table precision error"); + } - this.tq[t] = 1; + this.tq[t] = 1; - if (this.precision[t] === 8) { - for (i = 0; i < 64; i+=1) { - if (count > length) { - throw new Error("ERROR: Quantization table format error"); - } + if (this.precision[t] === 8) { + for (i = 0; i < 64; i+=1) { + if (count > length) { + throw new Error("ERROR: Quantization table format error"); + } - this.quantTables[t][i] = data.get8(); - count+=1; - } + this.quantTables[t][i] = data.get8(); + count+=1; + } - jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table); - } else { - for (i = 0; i < 64; i+=1) { - if (count > length) { - throw new Error("ERROR: Quantization table format error"); - } + jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table); + } else { + for (i = 0; i < 64; i+=1) { + if (count > length) { + throw new Error("ERROR: Quantization table format error"); + } - this.quantTables[t][i] = data.get16(); - count += 2; - } + this.quantTables[t][i] = data.get16(); + count += 2; + } - jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table); + jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table); + } } - } - if (count !== length) { - throw new Error("ERROR: Quantization table error [count!=Lq]"); - } + if (count !== length) { + throw new Error("ERROR: Quantization table error [count!=Lq]"); + } - return 1; + return 1; }; @@ -1444,10 +1486,10 @@ var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.QuantizationTable; + module.exports = jpeg.lossless.QuantizationTable; } -},{"./data-stream.js":2,"./utils.js":10}],8:[function(require,module,exports){ + },{"./data-stream.js":2,"./utils.js":10}],8:[function(require,module,exports){ /* * Copyright (C) 2015 Michael Martinez * Changes: Added support for selection values 2-7, fixed minor bugs & @@ -1490,9 +1532,9 @@ /*** Constructor ***/ jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || function () { - this.acTabSel = 0; // AC table selector - this.dcTabSel = 0; // DC table selector - this.scanCompSel = 0; // Scan component selector + this.acTabSel = 0; // AC table selector + this.dcTabSel = 0; // DC table selector + this.scanCompSel = 0; // Scan component selector }; @@ -1501,10 +1543,10 @@ var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.ScanComponent; + module.exports = jpeg.lossless.ScanComponent; } -},{}],9:[function(require,module,exports){ + },{}],9:[function(require,module,exports){ /* * Copyright (C) 2015 Michael Martinez * Changes: Added support for selection values 2-7, fixed minor bugs & @@ -1549,61 +1591,61 @@ /*** Constructor ***/ jpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || function () { - this.ah = 0; - this.al = 0; - this.numComp = 0; // Number of components in the scan - this.selection = 0; // Start of spectral or predictor selection - this.spectralEnd = 0; // End of spectral selection - this.components = []; + this.ah = 0; + this.al = 0; + this.numComp = 0; // Number of components in the scan + this.selection = 0; // Start of spectral or predictor selection + this.spectralEnd = 0; // End of spectral selection + this.components = []; }; /*** Prototype Methods ***/ jpeg.lossless.ScanHeader.prototype.read = function(data) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - var count = 0, length, i, temp; + var count = 0, length, i, temp; - length = data.get16(); - count += 2; + length = data.get16(); + count += 2; - this.numComp = data.get8(); - count+=1; + this.numComp = data.get8(); + count+=1; - for (i = 0; i < this.numComp; i+=1) { - this.components[i] = new jpeg.lossless.ScanComponent(); + for (i = 0; i < this.numComp; i+=1) { + this.components[i] = new jpeg.lossless.ScanComponent(); - if (count > length) { - throw new Error("ERROR: scan header format error"); - } + if (count > length) { + throw new Error("ERROR: scan header format error"); + } - this.components[i].scanCompSel = data.get8(); - count+=1; + this.components[i].scanCompSel = data.get8(); + count+=1; - temp = data.get8(); - count+=1; + temp = data.get8(); + count+=1; - this.components[i].dcTabSel = (temp >> 4); - this.components[i].acTabSel = (temp & 0x0F); - } + this.components[i].dcTabSel = (temp >> 4); + this.components[i].acTabSel = (temp & 0x0F); + } - this.selection = data.get8(); - count+=1; + this.selection = data.get8(); + count+=1; - this.spectralEnd = data.get8(); - count+=1; + this.spectralEnd = data.get8(); + count+=1; - temp = data.get8(); - this.ah = (temp >> 4); - this.al = (temp & 0x0F); - count+=1; + temp = data.get8(); + this.ah = (temp >> 4); + this.al = (temp & 0x0F); + count+=1; - if (count !== length) { - throw new Error("ERROR: scan header format error [count!=Ns]"); - } + if (count !== length) { + throw new Error("ERROR: scan header format error [count!=Ns]"); + } - return 1; + return 1; }; @@ -1612,10 +1654,10 @@ var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.ScanHeader; + module.exports = jpeg.lossless.ScanHeader; } -},{"./data-stream.js":2,"./scan-component.js":8}],10:[function(require,module,exports){ + },{"./data-stream.js":2,"./scan-component.js":8}],10:[function(require,module,exports){ /* * Copyright (C) 2015 Michael Martinez * Changes: Added support for selection values 2-7, fixed minor bugs & @@ -1662,43 +1704,44 @@ /*** Static methods ***/ -// http://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript + // http://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript jpeg.lossless.Utils.createArray = function (length) { - var arr = new Array(length || 0), - i = length; + var arr = new Array(length || 0), + i = length; - if (arguments.length > 1) { - var args = Array.prototype.slice.call(arguments, 1); - while(i--) arr[length-1 - i] = jpeg.lossless.Utils.createArray.apply(this, args); - } + if (arguments.length > 1) { + var args = Array.prototype.slice.call(arguments, 1); + while(i--) arr[length-1 - i] = jpeg.lossless.Utils.createArray.apply(this, args); + } - return arr; + return arr; }; -// http://stackoverflow.com/questions/18638900/javascript-crc32 + // http://stackoverflow.com/questions/18638900/javascript-crc32 jpeg.lossless.Utils.makeCRCTable = function(){ - var c; - var crcTable = []; - for(var n =0; n < 256; n++){ - c = n; - for(var k =0; k < 8; k++){ - c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + var c; + var crcTable = []; + for(var n =0; n < 256; n++){ + c = n; + for(var k =0; k < 8; k++){ + c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + crcTable[n] = c; } - crcTable[n] = c; - } - return crcTable; + return crcTable; }; jpeg.lossless.Utils.crc32 = function(dataView) { - var crcTable = jpeg.lossless.Utils.crcTable || (jpeg.lossless.Utils.crcTable = jpeg.lossless.Utils.makeCRCTable()); - var crc = 0 ^ (-1); + var uint8view = new Uint8Array(dataView.buffer); + var crcTable = jpeg.lossless.Utils.crcTable || (jpeg.lossless.Utils.crcTable = jpeg.lossless.Utils.makeCRCTable()); + var crc = 0 ^ (-1); - for (var i = 0; i < dataView.byteLength; i++ ) { - crc = (crc >>> 8) ^ crcTable[(crc ^ dataView.getUint8(i)) & 0xFF]; - } + for (var i = 0; i < uint8view.length; i++ ) { + crc = (crc >>> 8) ^ crcTable[(crc ^ uint8view[i]) & 0xFF]; + } - return (crc ^ (-1)) >>> 0; + return (crc ^ (-1)) >>> 0; }; @@ -1706,7 +1749,7 @@ var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.Utils; + module.exports = jpeg.lossless.Utils; } },{}]},{},[6])(6) diff --git a/dist/cornerstoneWADOImageLoaderCodecs.js b/dist/cornerstoneWADOImageLoaderCodecs.js index 3d25b9b8..6696c349 100644 --- a/dist/cornerstoneWADOImageLoaderCodecs.js +++ b/dist/cornerstoneWADOImageLoaderCodecs.js @@ -1085,9 +1085,9 @@ var JpegImage = (function jpegImage() { /*** Constructor ***/ jpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || function () { - this.hSamp = 0; // Horizontal sampling factor - this.quantTableSel = 0; // Quantization table destination selector - this.vSamp = 0; // Vertical + this.hSamp = 0; // Horizontal sampling factor + this.quantTableSel = 0; // Quantization table destination selector + this.vSamp = 0; // Vertical }; @@ -1095,10 +1095,10 @@ var JpegImage = (function jpegImage() { var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.ComponentSpec; + module.exports = jpeg.lossless.ComponentSpec; } -},{}],2:[function(require,module,exports){ + },{}],2:[function(require,module,exports){ /* * Copyright (C) 2015 Michael Martinez * Changes: Added support for selection values 2-7, fixed minor bugs & @@ -1141,24 +1141,28 @@ var JpegImage = (function jpegImage() { /*** Constructor ***/ jpeg.lossless.DataStream = jpeg.lossless.DataStream || function (data, offset, length) { - this.buffer = new DataView(data, offset, length); - this.index = 0; + // Note: DataView is much slower than Int8Array + // this.buffer = new DataView(data, offset, length); + this.buffer = new Uint8Array(data, offset, length); + this.index = 0; }; jpeg.lossless.DataStream.prototype.get16 = function () { - var value = this.buffer.getUint16(this.index, false); - this.index += 2; - return value; + // var value = this.buffer.getUint16(this.index, false); + var value = (this.buffer[this.index] << 8) + this.buffer[this.index + 1]; // DataView is big-endian by default + this.index += 2; + return value; }; jpeg.lossless.DataStream.prototype.get8 = function () { - var value = this.buffer.getUint8(this.index); - this.index += 1; - return value; + // var value = this.buffer.getUint8(this.index); + var value = this.buffer[this.index]; + this.index += 1; + return value; }; @@ -1166,10 +1170,10 @@ var JpegImage = (function jpegImage() { var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.DataStream; + module.exports = jpeg.lossless.DataStream; } -},{}],3:[function(require,module,exports){ + },{}],3:[function(require,module,exports){ /* * Copyright (C) 2015 Michael Martinez * Changes: Added support for selection values 2-7, fixed minor bugs & @@ -1217,45 +1221,54 @@ var JpegImage = (function jpegImage() { /*** Constructor ***/ + + /** + * The Decoder constructor. + * @property {number} xDim - size of x dimension + * @property {number} yDim - size of y dimension + * @property {number} numComp - number of components + * @property {number} numBytes - number of bytes per component + * @type {Function} + */ jpeg.lossless.Decoder = jpeg.lossless.Decoder || function (buffer, numBytes) { - this.buffer = buffer; - this.frame = new jpeg.lossless.FrameHeader(); - this.huffTable = new jpeg.lossless.HuffmanTable(); - this.quantTable = new jpeg.lossless.QuantizationTable(); - this.scan = new jpeg.lossless.ScanHeader(); - this.DU = jpeg.lossless.Utils.createArray(10, 4, 64); // at most 10 data units in a MCU, at most 4 data units in one component - this.HuffTab = jpeg.lossless.Utils.createArray(4, 2, 50 * 256); - this.IDCT_Source = []; - this.nBlock = []; // number of blocks in the i-th Comp in a scan - this.acTab = jpeg.lossless.Utils.createArray(10, 1); // ac HuffTab for the i-th Comp in a scan - this.dcTab = jpeg.lossless.Utils.createArray(10, 1); // dc HuffTab for the i-th Comp in a scan - this.qTab = jpeg.lossless.Utils.createArray(10, 1); // quantization table for the i-th Comp in a scan - this.marker = 0; - this.markerIndex = 0; - this.numComp = 0; - this.restartInterval = 0; - this.selection = 0; - this.xDim = 0; - this.yDim = 0; - this.xLoc = 0; - this.yLoc = 0; - this.numBytes = 0; - this.outputData = null; - this.restarting = false; - this.mask = 0; - - if (typeof numBytes !== "undefined") { - this.numBytes = numBytes; - } + this.buffer = buffer; + this.frame = new jpeg.lossless.FrameHeader(); + this.huffTable = new jpeg.lossless.HuffmanTable(); + this.quantTable = new jpeg.lossless.QuantizationTable(); + this.scan = new jpeg.lossless.ScanHeader(); + this.DU = jpeg.lossless.Utils.createArray(10, 4, 64); // at most 10 data units in a MCU, at most 4 data units in one component + this.HuffTab = jpeg.lossless.Utils.createArray(4, 2, 50 * 256); + this.IDCT_Source = []; + this.nBlock = []; // number of blocks in the i-th Comp in a scan + this.acTab = jpeg.lossless.Utils.createArray(10, 1); // ac HuffTab for the i-th Comp in a scan + this.dcTab = jpeg.lossless.Utils.createArray(10, 1); // dc HuffTab for the i-th Comp in a scan + this.qTab = jpeg.lossless.Utils.createArray(10, 1); // quantization table for the i-th Comp in a scan + this.marker = 0; + this.markerIndex = 0; + this.numComp = 0; + this.restartInterval = 0; + this.selection = 0; + this.xDim = 0; + this.yDim = 0; + this.xLoc = 0; + this.yLoc = 0; + this.numBytes = 0; + this.outputData = null; + this.restarting = false; + this.mask = 0; + + if (typeof numBytes !== "undefined") { + this.numBytes = numBytes; + } }; /*** Static Pseudo-constants ***/ jpeg.lossless.Decoder.IDCT_P = [0, 5, 40, 16, 45, 2, 7, 42, 21, 56, 8, 61, 18, 47, 1, 4, 41, 23, 58, 13, 32, 24, 37, 10, 63, 17, 44, 3, 6, 43, 20, - 57, 15, 34, 29, 48, 53, 26, 39, 9, 60, 19, 46, 22, 59, 12, 33, 31, 50, 55, 25, 36, 11, 62, 14, 35, 28, 49, 52, 27, 38, 30, 51, 54]; + 57, 15, 34, 29, 48, 53, 26, 39, 9, 60, 19, 46, 22, 59, 12, 33, 31, 50, 55, 25, 36, 11, 62, 14, 35, 28, 49, 52, 27, 38, 30, 51, 54]; jpeg.lossless.Decoder.TABLE = [0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, - 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63]; + 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63]; jpeg.lossless.Decoder.MAX_HUFFMAN_SUBTREE = 50; jpeg.lossless.Decoder.MSB = 0x80000000; jpeg.lossless.Decoder.RESTART_MARKER_BEGIN = 0xFFD0; @@ -1263,730 +1276,747 @@ var JpegImage = (function jpegImage() { /*** Prototype Methods ***/ + /** + * Returns decompressed data. + * @param {ArrayBuffer} buffer + * @param {number} [offset] + * @param {number} [length] + * @returns {ArrayBufer} + */ jpeg.lossless.Decoder.prototype.decompress = function (buffer, offset, length) { - return this.decode(buffer, offset, length).buffer; + return this.decode(buffer, offset, length).buffer; }; jpeg.lossless.Decoder.prototype.decode = function (buffer, offset, length, numBytes) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - var current, scanNum = 0, pred = [], i, compN, temp = [], index = [], mcuNum; + var current, scanNum = 0, pred = [], i, compN, temp = [], index = [], mcuNum; - if (typeof buffer !== "undefined") { - this.buffer = buffer; - } + if (typeof buffer !== "undefined") { + this.buffer = buffer; + } - if (typeof numBytes !== "undefined") { - this.numBytes = numBytes; - } + if (typeof numBytes !== "undefined") { + this.numBytes = numBytes; + } - this.stream = new jpeg.lossless.DataStream(this.buffer, offset, length); - this.buffer = null; + this.stream = new jpeg.lossless.DataStream(this.buffer, offset, length); + this.buffer = null; - this.xLoc = 0; - this.yLoc = 0; - current = this.stream.get16(); + this.xLoc = 0; + this.yLoc = 0; + current = this.stream.get16(); - if (current !== 0xFFD8) { // SOI - throw new Error("Not a JPEG file"); - } + if (current !== 0xFFD8) { // SOI + throw new Error("Not a JPEG file"); + } - current = this.stream.get16(); + current = this.stream.get16(); - while ((((current >> 4) !== 0x0FFC) || (current === 0xFFC4))) { // SOF 0~15 - switch (current) { - case 0xFFC4: // DHT - this.huffTable.read(this.stream, this.HuffTab); - break; - case 0xFFCC: // DAC - throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)"); - case 0xFFDB: - this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE); - break; - case 0xFFDD: - this.restartInterval = this.readNumber(); - break; - case 0xFFE0: - case 0xFFE1: - case 0xFFE2: - case 0xFFE3: - case 0xFFE4: - case 0xFFE5: - case 0xFFE6: - case 0xFFE7: - case 0xFFE8: - case 0xFFE9: - case 0xFFEA: - case 0xFFEB: - case 0xFFEC: - case 0xFFED: - case 0xFFEE: - case 0xFFEF: - this.readApp(); - break; - case 0xFFFE: - this.readComment(); - break; - default: - if ((current >> 8) !== 0xFF) { - throw new Error("ERROR: format throw new IOException! (decode)"); + while ((((current >> 4) !== 0x0FFC) || (current === 0xFFC4))) { // SOF 0~15 + switch (current) { + case 0xFFC4: // DHT + this.huffTable.read(this.stream, this.HuffTab); + break; + case 0xFFCC: // DAC + throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)"); + case 0xFFDB: + this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE); + break; + case 0xFFDD: + this.restartInterval = this.readNumber(); + break; + case 0xFFE0: + case 0xFFE1: + case 0xFFE2: + case 0xFFE3: + case 0xFFE4: + case 0xFFE5: + case 0xFFE6: + case 0xFFE7: + case 0xFFE8: + case 0xFFE9: + case 0xFFEA: + case 0xFFEB: + case 0xFFEC: + case 0xFFED: + case 0xFFEE: + case 0xFFEF: + this.readApp(); + break; + case 0xFFFE: + this.readComment(); + break; + default: + if ((current >> 8) !== 0xFF) { + throw new Error("ERROR: format throw new IOException! (decode)"); + } } + + current = this.stream.get16(); } + if ((current < 0xFFC0) || (current > 0xFFC7)) { + throw new Error("ERROR: could not handle arithmetic code!"); + } + + this.frame.read(this.stream); current = this.stream.get16(); - } - if ((current < 0xFFC0) || (current > 0xFFC7)) { - throw new Error("ERROR: could not handle arithmetic code!"); - } + do { + while (current !== 0x0FFDA) { // SOS + switch (current) { + case 0xFFC4: // DHT + this.huffTable.read(this.stream, this.HuffTab); + break; + case 0xFFCC: // DAC + throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)"); + case 0xFFDB: + this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE); + break; + case 0xFFDD: + this.restartInterval = this.readNumber(); + break; + case 0xFFE0: + case 0xFFE1: + case 0xFFE2: + case 0xFFE3: + case 0xFFE4: + case 0xFFE5: + case 0xFFE6: + case 0xFFE7: + case 0xFFE8: + case 0xFFE9: + case 0xFFEA: + case 0xFFEB: + case 0xFFEC: + case 0xFFED: + case 0xFFEE: + case 0xFFEF: + this.readApp(); + break; + case 0xFFFE: + this.readComment(); + break; + default: + if ((current >> 8) !== 0xFF) { + throw new Error("ERROR: format throw new IOException! (Parser.decode)"); + } + } - this.frame.read(this.stream); - current = this.stream.get16(); + current = this.stream.get16(); + } - do { - while (current !== 0x0FFDA) { // SOS - switch (current) { - case 0xFFC4: // DHT - this.huffTable.read(this.stream, this.HuffTab); - break; - case 0xFFCC: // DAC - throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)"); - case 0xFFDB: - this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE); - break; - case 0xFFDD: - this.restartInterval = this.readNumber(); - break; - case 0xFFE0: - case 0xFFE1: - case 0xFFE2: - case 0xFFE3: - case 0xFFE4: - case 0xFFE5: - case 0xFFE6: - case 0xFFE7: - case 0xFFE8: - case 0xFFE9: - case 0xFFEA: - case 0xFFEB: - case 0xFFEC: - case 0xFFED: - case 0xFFEE: - case 0xFFEF: - this.readApp(); - break; - case 0xFFFE: - this.readComment(); - break; - default: - if ((current >> 8) !== 0xFF) { - throw new Error("ERROR: format throw new IOException! (Parser.decode)"); - } - } + this.precision = this.frame.precision; + this.components = this.frame.components; - current = this.stream.get16(); - } + if (!this.numBytes) { + this.numBytes = parseInt(Math.ceil(this.precision / 8)); + } - this.precision = this.frame.precision; - this.components = this.frame.components; + if (this.numBytes == 1) { + this.mask = 0xFF; + } else { + this.mask = 0xFFFF; + } - if (!this.numBytes) { - this.numBytes = parseInt(Math.ceil(this.precision / 8)); - } + this.scan.read(this.stream); + this.numComp = this.scan.numComp; + this.selection = this.scan.selection; - if (this.numBytes == 1) { - this.mask = 0xFF; - } else { - this.mask = 0xFFFF; - } - - this.scan.read(this.stream); - this.numComp = this.scan.numComp; - this.selection = this.scan.selection; - - if (this.numBytes === 1) { - if (this.numComp === 3) { - this.getter = this.getValueRGB; - this.setter = this.setValueRGB; - this.output = this.outputRGB; - } else { - this.getter = this.getValue8; - this.setter = this.setValue8; - this.output = this.outputSingle; - } - } else { - this.getter = this.getValue16; - this.setter = this.setValue16; - this.output = this.outputSingle; - } + if (this.numBytes === 1) { + if (this.numComp === 3) { + this.getter = this.getValueRGB; + this.setter = this.setValueRGB; + this.output = this.outputRGB; + } else { + this.getter = this.getValue8; + this.setter = this.setValue8; + this.output = this.outputSingle; + } + } else { + this.getter = this.getValue16; + this.setter = this.setValue16; + this.output = this.outputSingle; + } - switch (this.selection) { - case 2: - this.selector = this.select2; - break; - case 3: - this.selector = this.select3; - break; - case 4: - this.selector = this.select4; - break; - case 5: - this.selector = this.select5; - break; - case 6: - this.selector = this.select6; - break; - case 7: - this.selector = this.select7; - break; - default: - this.selector = this.select1; - break; - } + switch (this.selection) { + case 2: + this.selector = this.select2; + break; + case 3: + this.selector = this.select3; + break; + case 4: + this.selector = this.select4; + break; + case 5: + this.selector = this.select5; + break; + case 6: + this.selector = this.select6; + break; + case 7: + this.selector = this.select7; + break; + default: + this.selector = this.select1; + break; + } - this.scanComps = this.scan.components; - this.quantTables = this.quantTable.quantTables; + this.scanComps = this.scan.components; + this.quantTables = this.quantTable.quantTables; - for (i = 0; i < this.numComp; i+=1) { - compN = this.scanComps[i].scanCompSel; - this.qTab[i] = this.quantTables[this.components[compN].quantTableSel]; - this.nBlock[i] = this.components[compN].vSamp * this.components[compN].hSamp; - this.dcTab[i] = this.HuffTab[this.scanComps[i].dcTabSel][0]; - this.acTab[i] = this.HuffTab[this.scanComps[i].acTabSel][1]; - } + for (i = 0; i < this.numComp; i+=1) { + compN = this.scanComps[i].scanCompSel; + this.qTab[i] = this.quantTables[this.components[compN].quantTableSel]; + this.nBlock[i] = this.components[compN].vSamp * this.components[compN].hSamp; + this.dcTab[i] = this.HuffTab[this.scanComps[i].dcTabSel][0]; + this.acTab[i] = this.HuffTab[this.scanComps[i].acTabSel][1]; + } - this.xDim = this.frame.dimX; - this.yDim = this.frame.dimY; - this.outputData = new DataView(new ArrayBuffer(this.xDim * this.yDim * this.numBytes * this.numComp)); + this.xDim = this.frame.dimX; + this.yDim = this.frame.dimY; + if (this.numBytes == 1) { + this.outputData = new Uint8Array(new ArrayBuffer(this.xDim * this.yDim * this.numBytes * this.numComp)); + } else { + this.outputData = new Uint16Array(new ArrayBuffer(this.xDim * this.yDim * this.numBytes * this.numComp)); + } - scanNum+=1; + scanNum+=1; - while (true) { // Decode one scan - temp[0] = 0; - index[0] = 0; + while (true) { // Decode one scan + temp[0] = 0; + index[0] = 0; - for (i = 0; i < 10; i+=1) { - pred[i] = (1 << (this.precision - 1)); - } + for (i = 0; i < 10; i+=1) { + pred[i] = (1 << (this.precision - 1)); + } - if (this.restartInterval === 0) { - current = this.decodeUnit(pred, temp, index); + if (this.restartInterval === 0) { + current = this.decodeUnit(pred, temp, index); - while ((current === 0) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim))) { - this.output(pred); - current = this.decodeUnit(pred, temp, index); - } + while ((current === 0) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim))) { + this.output(pred); + current = this.decodeUnit(pred, temp, index); + } - break; //current=MARKER - } + break; //current=MARKER + } - for (mcuNum = 0; mcuNum < this.restartInterval; mcuNum+=1) { - this.restarting = (mcuNum == 0); - current = this.decodeUnit(pred, temp, index); - this.output(pred); + for (mcuNum = 0; mcuNum < this.restartInterval; mcuNum+=1) { + this.restarting = (mcuNum == 0); + current = this.decodeUnit(pred, temp, index); + this.output(pred); - if (current !== 0) { - break; - } - } + if (current !== 0) { + break; + } + } - if (current === 0) { - if (this.markerIndex !== 0) { - current = (0xFF00 | this.marker); - this.markerIndex = 0; - } else { - current = this.stream.get16(); - } - } + if (current === 0) { + if (this.markerIndex !== 0) { + current = (0xFF00 | this.marker); + this.markerIndex = 0; + } else { + current = this.stream.get16(); + } + } - if (!((current >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && - (current <= jpeg.lossless.Decoder.RESTART_MARKER_END))) { - break; //current=MARKER - } - } + if (!((current >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && + (current <= jpeg.lossless.Decoder.RESTART_MARKER_END))) { + break; //current=MARKER + } + } - if ((current === 0xFFDC) && (scanNum === 1)) { //DNL - this.readNumber(); - current = this.stream.get16(); - } - } while ((current !== 0xFFD9) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) && (scanNum === 0)); + if ((current === 0xFFDC) && (scanNum === 1)) { //DNL + this.readNumber(); + current = this.stream.get16(); + } + } while ((current !== 0xFFD9) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) && (scanNum === 0)); - return this.outputData; + return this.outputData; }; jpeg.lossless.Decoder.prototype.decodeUnit = function (prev, temp, index) { - if (this.numComp == 1) { - return this.decodeSingle(prev, temp, index); - } else if (this.numComp == 3) { - return this.decodeRGB(prev, temp, index); - } else { - return -1; - } + if (this.numComp == 1) { + return this.decodeSingle(prev, temp, index); + } else if (this.numComp == 3) { + return this.decodeRGB(prev, temp, index); + } else { + return -1; + } }; jpeg.lossless.Decoder.prototype.select1 = function (compOffset) { - return this.getPreviousX(compOffset); + return this.getPreviousX(compOffset); }; jpeg.lossless.Decoder.prototype.select2 = function (compOffset) { - return this.getPreviousY(compOffset); + return this.getPreviousY(compOffset); }; jpeg.lossless.Decoder.prototype.select3 = function (compOffset) { - return this.getPreviousXY(compOffset); + return this.getPreviousXY(compOffset); }; jpeg.lossless.Decoder.prototype.select4 = function (compOffset) { - return (this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) - this.getPreviousXY(compOffset); + return (this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) - this.getPreviousXY(compOffset); }; jpeg.lossless.Decoder.prototype.select5 = function (compOffset) { - return this.getPreviousX(compOffset) + ((this.getPreviousY(compOffset) - this.getPreviousXY(compOffset)) >> 1); + return this.getPreviousX(compOffset) + ((this.getPreviousY(compOffset) - this.getPreviousXY(compOffset)) >> 1); }; jpeg.lossless.Decoder.prototype.select6 = function (compOffset) { - return this.getPreviousY(compOffset) + ((this.getPreviousX(compOffset) - this.getPreviousXY(compOffset)) >> 1); + return this.getPreviousY(compOffset) + ((this.getPreviousX(compOffset) - this.getPreviousXY(compOffset)) >> 1); }; jpeg.lossless.Decoder.prototype.select7 = function (compOffset) { - return ((this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) / 2); + return ((this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) / 2); }; jpeg.lossless.Decoder.prototype.decodeRGB = function (prev, temp, index) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - var value, actab, dctab, qtab, ctrC, i, k, j; + var value, actab, dctab, qtab, ctrC, i, k, j; - prev[0] = this.selector(0); - prev[1] = this.selector(1); - prev[2] = this.selector(2); + prev[0] = this.selector(0); + prev[1] = this.selector(1); + prev[2] = this.selector(2); - for (ctrC = 0; ctrC < this.numComp; ctrC+=1) { - qtab = this.qTab[ctrC]; - actab = this.acTab[ctrC]; - dctab = this.dcTab[ctrC]; - for (i = 0; i < this.nBlock[ctrC]; i+=1) { - for (k = 0; k < this.IDCT_Source.length; k+=1) { - this.IDCT_Source[k] = 0; - } + for (ctrC = 0; ctrC < this.numComp; ctrC+=1) { + qtab = this.qTab[ctrC]; + actab = this.acTab[ctrC]; + dctab = this.dcTab[ctrC]; + for (i = 0; i < this.nBlock[ctrC]; i+=1) { + for (k = 0; k < this.IDCT_Source.length; k+=1) { + this.IDCT_Source[k] = 0; + } - value = this.getHuffmanValue(dctab, temp, index); + value = this.getHuffmanValue(dctab, temp, index); - if (value >= 0xFF00) { - return value; - } + if (value >= 0xFF00) { + return value; + } - prev[ctrC] = this.IDCT_Source[0] = prev[ctrC] + this.getn(index, value, temp, index); - this.IDCT_Source[0] *= qtab[0]; + prev[ctrC] = this.IDCT_Source[0] = prev[ctrC] + this.getn(index, value, temp, index); + this.IDCT_Source[0] *= qtab[0]; - for (j = 1; j < 64; j+=1) { - value = this.getHuffmanValue(actab, temp, index); + for (j = 1; j < 64; j+=1) { + value = this.getHuffmanValue(actab, temp, index); - if (value >= 0xFF00) { - return value; - } + if (value >= 0xFF00) { + return value; + } - j += (value >> 4); + j += (value >> 4); - if ((value & 0x0F) === 0) { - if ((value >> 4) === 0) { - break; - } - } else { - this.IDCT_Source[jpeg.lossless.Decoder.IDCT_P[j]] = this.getn(index, value & 0x0F, temp, index) * qtab[j]; + if ((value & 0x0F) === 0) { + if ((value >> 4) === 0) { + break; + } + } else { + this.IDCT_Source[jpeg.lossless.Decoder.IDCT_P[j]] = this.getn(index, value & 0x0F, temp, index) * qtab[j]; + } + } } - } } - } - return 0; + return 0; }; jpeg.lossless.Decoder.prototype.decodeSingle = function (prev, temp, index) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - var value, i, n, nRestart; + var value, i, n, nRestart; - if (this.restarting) { - this.restarting = false; - prev[0] = (1 << (this.frame.precision - 1)); - } else { - prev[0] = this.selector(); - } - - for (i = 0; i < this.nBlock[0]; i+=1) { - value = this.getHuffmanValue(this.dcTab[0], temp, index); - if (value >= 0xFF00) { - return value; + if (this.restarting) { + this.restarting = false; + prev[0] = (1 << (this.frame.precision - 1)); + } else { + prev[0] = this.selector(); } - n = this.getn(prev, value, temp, index); - nRestart = (n >> 8); + for (i = 0; i < this.nBlock[0]; i+=1) { + value = this.getHuffmanValue(this.dcTab[0], temp, index); + if (value >= 0xFF00) { + return value; + } - if ((nRestart >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && (nRestart <= jpeg.lossless.Decoder.RESTART_MARKER_END)) { - return nRestart; - } + n = this.getn(prev, value, temp, index); + nRestart = (n >> 8); - prev[0] += n; - } + if ((nRestart >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && (nRestart <= jpeg.lossless.Decoder.RESTART_MARKER_END)) { + return nRestart; + } - return 0; + prev[0] += n; + } + + return 0; }; -// Huffman table for fast search: (HuffTab) 8-bit Look up table 2-layer search architecture, 1st-layer represent 256 node (8 bits) if codeword-length > 8 -// bits, then the entry of 1st-layer = (# of 2nd-layer table) | MSB and it is stored in the 2nd-layer Size of tables in each layer are 256. -// HuffTab[*][*][0-256] is always the only 1st-layer table. -// -// An entry can be: (1) (# of 2nd-layer table) | MSB , for code length > 8 in 1st-layer (2) (Code length) << 8 | HuffVal -// -// HuffmanValue(table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...) -// ): -// return: Huffman Value of table -// 0xFF?? if it receives a MARKER -// Parameter: table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...) -// temp temp storage for remainded bits -// index index to bit of temp -// in FILE pointer -// Effect: -// temp store new remainded bits -// index change to new index -// in change to new position -// NOTE: -// Initial by temp=0; index=0; -// NOTE: (explain temp and index) -// temp: is always in the form at calling time or returning time -// | byte 4 | byte 3 | byte 2 | byte 1 | -// | 0 | 0 | 00000000 | 00000??? | if not a MARKER -// ^index=3 (from 0 to 15) -// 321 -// NOTE (marker and marker_index): -// If get a MARKER from 'in', marker=the low-byte of the MARKER -// and marker_index=9 -// If marker_index=9 then index is always > 8, or HuffmanValue() -// will not be called + // Huffman table for fast search: (HuffTab) 8-bit Look up table 2-layer search architecture, 1st-layer represent 256 node (8 bits) if codeword-length > 8 + // bits, then the entry of 1st-layer = (# of 2nd-layer table) | MSB and it is stored in the 2nd-layer Size of tables in each layer are 256. + // HuffTab[*][*][0-256] is always the only 1st-layer table. + // + // An entry can be: (1) (# of 2nd-layer table) | MSB , for code length > 8 in 1st-layer (2) (Code length) << 8 | HuffVal + // + // HuffmanValue(table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...) + // ): + // return: Huffman Value of table + // 0xFF?? if it receives a MARKER + // Parameter: table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...) + // temp temp storage for remainded bits + // index index to bit of temp + // in FILE pointer + // Effect: + // temp store new remainded bits + // index change to new index + // in change to new position + // NOTE: + // Initial by temp=0; index=0; + // NOTE: (explain temp and index) + // temp: is always in the form at calling time or returning time + // | byte 4 | byte 3 | byte 2 | byte 1 | + // | 0 | 0 | 00000000 | 00000??? | if not a MARKER + // ^index=3 (from 0 to 15) + // 321 + // NOTE (marker and marker_index): + // If get a MARKER from 'in', marker=the low-byte of the MARKER + // and marker_index=9 + // If marker_index=9 then index is always > 8, or HuffmanValue() + // will not be called jpeg.lossless.Decoder.prototype.getHuffmanValue = function (table, temp, index) { - /*jslint bitwise: true */ - - var code, input, mask; - mask = 0xFFFF; - - if (index[0] < 8) { - temp[0] <<= 8; - input = this.stream.get8(); - if (input === 0xFF) { - this.marker = this.stream.get8(); - if (this.marker !== 0) { - this.markerIndex = 9; - } + /*jslint bitwise: true */ + + var code, input, mask; + mask = 0xFFFF; + + if (index[0] < 8) { + temp[0] <<= 8; + input = this.stream.get8(); + if (input === 0xFF) { + this.marker = this.stream.get8(); + if (this.marker !== 0) { + this.markerIndex = 9; + } + } + temp[0] |= input; + } else { + index[0] -= 8; } - temp[0] |= input; - } else { - index[0] -= 8; - } - code = table[temp[0] >> index[0]]; + code = table[temp[0] >> index[0]]; - if ((code & jpeg.lossless.Decoder.MSB) !== 0) { - if (this.markerIndex !== 0) { - this.markerIndex = 0; - return 0xFF00 | this.marker; - } + if ((code & jpeg.lossless.Decoder.MSB) !== 0) { + if (this.markerIndex !== 0) { + this.markerIndex = 0; + return 0xFF00 | this.marker; + } - temp[0] &= (mask >> (16 - index[0])); - temp[0] <<= 8; - input = this.stream.get8(); + temp[0] &= (mask >> (16 - index[0])); + temp[0] <<= 8; + input = this.stream.get8(); - if (input === 0xFF) { - this.marker = this.stream.get8(); - if (this.marker !== 0) { - this.markerIndex = 9; - } - } + if (input === 0xFF) { + this.marker = this.stream.get8(); + if (this.marker !== 0) { + this.markerIndex = 9; + } + } - temp[0] |= input; - code = table[((code & 0xFF) * 256) + (temp[0] >> index[0])]; - index[0] += 8; - } + temp[0] |= input; + code = table[((code & 0xFF) * 256) + (temp[0] >> index[0])]; + index[0] += 8; + } - index[0] += 8 - (code >> 8); + index[0] += 8 - (code >> 8); - if (index[0] < 0) { - throw new Error("index=" + index[0] + " temp=" + temp[0] + " code=" + code + " in HuffmanValue()"); - } + if (index[0] < 0) { + throw new Error("index=" + index[0] + " temp=" + temp[0] + " code=" + code + " in HuffmanValue()"); + } - if (index[0] < this.markerIndex) { - this.markerIndex = 0; - return 0xFF00 | this.marker; - } + if (index[0] < this.markerIndex) { + this.markerIndex = 0; + return 0xFF00 | this.marker; + } - temp[0] &= (mask >> (16 - index[0])); - return code & 0xFF; + temp[0] &= (mask >> (16 - index[0])); + return code & 0xFF; }; jpeg.lossless.Decoder.prototype.getn = function (PRED, n, temp, index) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - var result, one, n_one, mask, input; - one = 1; - n_one = -1; - mask = 0xFFFF; + var result, one, n_one, mask, input; + one = 1; + n_one = -1; + mask = 0xFFFF; - if (n === 0) { - return 0; - } + if (n === 0) { + return 0; + } - if (n === 16) { - if (PRED[0] >= 0) { - return -32768; - } else { - return 32768; + if (n === 16) { + if (PRED[0] >= 0) { + return -32768; + } else { + return 32768; + } } - } - index[0] -= n; + index[0] -= n; - if (index[0] >= 0) { - if ((index[0] < this.markerIndex) && !this.isLastPixel()) { // this was corrupting the last pixel in some cases - this.markerIndex = 0; - return (0xFF00 | this.marker) << 8; - } + if (index[0] >= 0) { + if ((index[0] < this.markerIndex) && !this.isLastPixel()) { // this was corrupting the last pixel in some cases + this.markerIndex = 0; + return (0xFF00 | this.marker) << 8; + } - result = temp[0] >> index[0]; - temp[0] &= (mask >> (16 - index[0])); - } else { - temp[0] <<= 8; - input = this.stream.get8(); + result = temp[0] >> index[0]; + temp[0] &= (mask >> (16 - index[0])); + } else { + temp[0] <<= 8; + input = this.stream.get8(); - if (input === 0xFF) { - this.marker = this.stream.get8(); - if (this.marker !== 0) { - this.markerIndex = 9; - } - } + if (input === 0xFF) { + this.marker = this.stream.get8(); + if (this.marker !== 0) { + this.markerIndex = 9; + } + } - temp[0] |= input; - index[0] += 8; + temp[0] |= input; + index[0] += 8; - if (index[0] < 0) { - if (this.markerIndex !== 0) { - this.markerIndex = 0; - return (0xFF00 | this.marker) << 8; - } + if (index[0] < 0) { + if (this.markerIndex !== 0) { + this.markerIndex = 0; + return (0xFF00 | this.marker) << 8; + } - temp[0] <<= 8; - input = this.stream.get8(); + temp[0] <<= 8; + input = this.stream.get8(); - if (input === 0xFF) { - this.marker = this.stream.get8(); - if (this.marker !== 0) { - this.markerIndex = 9; + if (input === 0xFF) { + this.marker = this.stream.get8(); + if (this.marker !== 0) { + this.markerIndex = 9; + } + } + + temp[0] |= input; + index[0] += 8; } - } - temp[0] |= input; - index[0] += 8; - } + if (index[0] < 0) { + throw new Error("index=" + index[0] + " in getn()"); + } - if (index[0] < 0) { - throw new Error("index=" + index[0] + " in getn()"); - } + if (index[0] < this.markerIndex) { + this.markerIndex = 0; + return (0xFF00 | this.marker) << 8; + } - if (index[0] < this.markerIndex) { - this.markerIndex = 0; - return (0xFF00 | this.marker) << 8; + result = temp[0] >> index[0]; + temp[0] &= (mask >> (16 - index[0])); } - result = temp[0] >> index[0]; - temp[0] &= (mask >> (16 - index[0])); - } - - if (result < (one << (n - 1))) { - result += (n_one << n) + 1; - } + if (result < (one << (n - 1))) { + result += (n_one << n) + 1; + } - return result; + return result; }; jpeg.lossless.Decoder.prototype.getPreviousX = function (compOffset) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - if (this.xLoc > 0) { - return this.getter((((this.yLoc * this.xDim) + this.xLoc) - 1), compOffset); - } else if (this.yLoc > 0) { - return this.getPreviousY(compOffset); - } else { - return (1 << (this.frame.precision - 1)); - } + if (this.xLoc > 0) { + return this.getter((((this.yLoc * this.xDim) + this.xLoc) - 1), compOffset); + } else if (this.yLoc > 0) { + return this.getPreviousY(compOffset); + } else { + return (1 << (this.frame.precision - 1)); + } }; jpeg.lossless.Decoder.prototype.getPreviousXY = function (compOffset) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - if ((this.xLoc > 0) && (this.yLoc > 0)) { - return this.getter(((((this.yLoc - 1) * this.xDim) + this.xLoc) - 1), compOffset); - } else { - return this.getPreviousY(compOffset); - } + if ((this.xLoc > 0) && (this.yLoc > 0)) { + return this.getter(((((this.yLoc - 1) * this.xDim) + this.xLoc) - 1), compOffset); + } else { + return this.getPreviousY(compOffset); + } }; jpeg.lossless.Decoder.prototype.getPreviousY = function (compOffset) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - if (this.yLoc > 0) { - return this.getter((((this.yLoc - 1) * this.xDim) + this.xLoc), compOffset); - } else { - return this.getPreviousX(compOffset); - } + if (this.yLoc > 0) { + return this.getter((((this.yLoc - 1) * this.xDim) + this.xLoc), compOffset); + } else { + return this.getPreviousX(compOffset); + } }; jpeg.lossless.Decoder.prototype.isLastPixel = function () { - return (this.xLoc === (this.xDim - 1)) && (this.yLoc === (this.yDim - 1)); + return (this.xLoc === (this.xDim - 1)) && (this.yLoc === (this.yDim - 1)); }; jpeg.lossless.Decoder.prototype.outputSingle = function (PRED) { - if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) { - this.setter((((this.yLoc * this.xDim) + this.xLoc)), this.mask & PRED[0]); + if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) { + this.setter((((this.yLoc * this.xDim) + this.xLoc)), this.mask & PRED[0]); - this.xLoc+=1; + this.xLoc+=1; - if (this.xLoc >= this.xDim) { - this.yLoc+=1; - this.xLoc = 0; + if (this.xLoc >= this.xDim) { + this.yLoc+=1; + this.xLoc = 0; + } } - } }; jpeg.lossless.Decoder.prototype.outputRGB = function (PRED) { - var offset = ((this.yLoc * this.xDim) + this.xLoc); + var offset = ((this.yLoc * this.xDim) + this.xLoc); - if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) { - this.setter(offset, PRED[0], 0); - this.setter(offset, PRED[1], 1); - this.setter(offset, PRED[2], 2); + if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) { + this.setter(offset, PRED[0], 0); + this.setter(offset, PRED[1], 1); + this.setter(offset, PRED[2], 2); - this.xLoc+=1; + this.xLoc+=1; - if (this.xLoc >= this.xDim) { - this.yLoc+=1; - this.xLoc = 0; + if (this.xLoc >= this.xDim) { + this.yLoc+=1; + this.xLoc = 0; + } } - } }; - - - jpeg.lossless.Decoder.prototype.setValue16 = function (index, val) { - this.outputData.setInt16(index * 2, val, true); - }; - - - - jpeg.lossless.Decoder.prototype.getValue16 = function (index) { - return this.outputData.getInt16(index * 2, true) & this.mask; - }; - - - jpeg.lossless.Decoder.prototype.setValue8 = function (index, val) { - this.outputData.setInt8(index, val); + this.outputData[index] = val; }; - - jpeg.lossless.Decoder.prototype.getValue8 = function (index) { - return this.outputData.getInt8(index) & this.mask; + return this.outputData[index]; // mask should not be necessary because outputData is either Int8Array or Int16Array }; - + var littleEndian = (function() { + var buffer = new ArrayBuffer(2); + new DataView(buffer).setInt16(0, 256, true /* littleEndian */); + // Int16Array uses the platform's endianness. + return new Int16Array(buffer)[0] === 256; + })(); + + if (littleEndian) { + // just reading from an array is fine then. Int16Array will use platform endianness. + jpeg.lossless.Decoder.prototype.setValue16 = jpeg.lossless.Decoder.prototype.setValue8; + jpeg.lossless.Decoder.prototype.getValue16 = jpeg.lossless.Decoder.prototype.getValue8; + } + else { + // If platform is big-endian, we will need to convert to little-endian + jpeg.lossless.Decoder.prototype.setValue16 = function (index, val) { + this.outputData[index] = ((val & 0xFF) << 8) | ((val >> 8) & 0xFF); + }; + + jpeg.lossless.Decoder.prototype.getValue16 = function (index) { + var val = this.outputData[index]; + return ((val & 0xFF) << 8) | ((val >> 8) & 0xFF); + }; + } jpeg.lossless.Decoder.prototype.setValueRGB = function (index, val, compOffset) { - this.outputData.setUint8(index * 3 + compOffset, val); + // this.outputData.setUint8(index * 3 + compOffset, val); + this.outputData[index * 3 + compOffset] = val; }; - - jpeg.lossless.Decoder.prototype.getValueRGB = function (index, compOffset) { - return this.outputData.getUint8(index * 3 + compOffset); + // return this.outputData.getUint8(index * 3 + compOffset); + return this.outputData[index * 3 + compOffset]; }; jpeg.lossless.Decoder.prototype.readApp = function() { - var count = 0, length = this.stream.get16(); - count += 2; + var count = 0, length = this.stream.get16(); + count += 2; - while (count < length) { - this.stream.get8(); - count+=1; - } + while (count < length) { + this.stream.get8(); + count+=1; + } - return length; + return length; }; jpeg.lossless.Decoder.prototype.readComment = function () { - var sb = "", count = 0, length; + var sb = "", count = 0, length; - length = this.stream.get16(); - count += 2; + length = this.stream.get16(); + count += 2; - while (count < length) { - sb += this.stream.get8(); - count+=1; - } + while (count < length) { + sb += this.stream.get8(); + count+=1; + } - return sb; + return sb; }; jpeg.lossless.Decoder.prototype.readNumber = function() { - var Ld = this.stream.get16(); + var Ld = this.stream.get16(); - if (Ld !== 4) { - throw new Error("ERROR: Define number format throw new IOException [Ld!=4]"); - } + if (Ld !== 4) { + throw new Error("ERROR: Define number format throw new IOException [Ld!=4]"); + } - return this.stream.get16(); + return this.stream.get16(); }; @@ -1995,10 +2025,10 @@ var JpegImage = (function jpegImage() { var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.Decoder; + module.exports = jpeg.lossless.Decoder; } -},{"./data-stream.js":2,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-header.js":9,"./utils.js":10}],4:[function(require,module,exports){ + },{"./data-stream.js":2,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-header.js":9,"./utils.js":10}],4:[function(require,module,exports){ /* * Copyright (C) 2015 Michael Martinez * Changes: Added support for selection values 2-7, fixed minor bugs & @@ -2043,11 +2073,11 @@ var JpegImage = (function jpegImage() { /*** Constructor ***/ jpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || function () { - this.components = []; // Components - this.dimX = 0; // Number of samples per line - this.dimY = 0; // Number of lines - this.numComp = 0; // Number of component in the frame - this.precision = 0; // Sample Precision (from the original image) + this.components = []; // Components + this.dimX = 0; // Number of samples per line + this.dimY = 0; // Number of lines + this.numComp = 0; // Number of component in the frame + this.precision = 0; // Sample Precision (from the original image) }; @@ -2055,54 +2085,54 @@ var JpegImage = (function jpegImage() { /*** Prototype Methods ***/ jpeg.lossless.FrameHeader.prototype.read = function (data) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - var count = 0, length, i, c, temp; + var count = 0, length, i, c, temp; - length = data.get16(); - count += 2; + length = data.get16(); + count += 2; - this.precision = data.get8(); - count+=1; - - this.dimY = data.get16(); - count += 2; + this.precision = data.get8(); + count+=1; - this.dimX = data.get16(); - count += 2; + this.dimY = data.get16(); + count += 2; - this.numComp = data.get8(); - count+=1; - for (i = 1; i <= this.numComp; i+=1) { - if (count > length) { - throw new Error("ERROR: frame format error"); - } + this.dimX = data.get16(); + count += 2; - c = data.get8(); + this.numComp = data.get8(); count+=1; + for (i = 1; i <= this.numComp; i+=1) { + if (count > length) { + throw new Error("ERROR: frame format error"); + } - if (count >= length) { - throw new Error("ERROR: frame format error [c>=Lf]"); - } + c = data.get8(); + count+=1; - temp = data.get8(); - count+=1; + if (count >= length) { + throw new Error("ERROR: frame format error [c>=Lf]"); + } - if (!this.components[c]) { - this.components[c] = new jpeg.lossless.ComponentSpec(); - } + temp = data.get8(); + count+=1; - this.components[c].hSamp = temp >> 4; - this.components[c].vSamp = temp & 0x0F; - this.components[c].quantTableSel = data.get8(); - count+=1; - } + if (!this.components[c]) { + this.components[c] = new jpeg.lossless.ComponentSpec(); + } - if (count !== length) { - throw new Error("ERROR: frame format error [Lf!=count]"); - } + this.components[c].hSamp = temp >> 4; + this.components[c].vSamp = temp & 0x0F; + this.components[c].quantTableSel = data.get8(); + count+=1; + } + + if (count !== length) { + throw new Error("ERROR: frame format error [Lf!=count]"); + } - return 1; + return 1; }; @@ -2110,10 +2140,10 @@ var JpegImage = (function jpegImage() { var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.FrameHeader; + module.exports = jpeg.lossless.FrameHeader; } -},{"./component-spec.js":1,"./data-stream.js":2}],5:[function(require,module,exports){ + },{"./component-spec.js":1,"./data-stream.js":2}],5:[function(require,module,exports){ /* * Copyright (C) 2015 Michael Martinez * Changes: Added support for selection values 2-7, fixed minor bugs & @@ -2158,23 +2188,23 @@ var JpegImage = (function jpegImage() { /*** Constructor ***/ jpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || function () { - this.l = jpeg.lossless.Utils.createArray(4, 2, 16); - this.th = []; - this.v = jpeg.lossless.Utils.createArray(4, 2, 16, 200); - this.tc = jpeg.lossless.Utils.createArray(4, 2); - - this.tc[0][0] = 0; - this.tc[1][0] = 0; - this.tc[2][0] = 0; - this.tc[3][0] = 0; - this.tc[0][1] = 0; - this.tc[1][1] = 0; - this.tc[2][1] = 0; - this.tc[3][1] = 0; - this.th[0] = 0; - this.th[1] = 0; - this.th[2] = 0; - this.th[3] = 0; + this.l = jpeg.lossless.Utils.createArray(4, 2, 16); + this.th = []; + this.v = jpeg.lossless.Utils.createArray(4, 2, 16, 200); + this.tc = jpeg.lossless.Utils.createArray(4, 2); + + this.tc[0][0] = 0; + this.tc[1][0] = 0; + this.tc[2][0] = 0; + this.tc[3][0] = 0; + this.tc[0][1] = 0; + this.tc[1][1] = 0; + this.tc[2][1] = 0; + this.tc[3][1] = 0; + this.th[0] = 0; + this.th[1] = 0; + this.th[2] = 0; + this.th[3] = 0; }; @@ -2187,110 +2217,110 @@ var JpegImage = (function jpegImage() { /*** Prototype Methods ***/ jpeg.lossless.HuffmanTable.prototype.read = function(data, HuffTab) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - var count = 0, length, temp, t, c, i, j; + var count = 0, length, temp, t, c, i, j; - length = data.get16(); - count += 2; + length = data.get16(); + count += 2; - while (count < length) { - temp = data.get8(); - count+=1; - t = temp & 0x0F; - if (t > 3) { - throw new Error("ERROR: Huffman table ID > 3"); - } - - c = temp >> 4; - if (c > 2) { - throw new Error("ERROR: Huffman table [Table class > 2 ]"); - } + while (count < length) { + temp = data.get8(); + count+=1; + t = temp & 0x0F; + if (t > 3) { + throw new Error("ERROR: Huffman table ID > 3"); + } - this.th[t] = 1; - this.tc[t][c] = 1; + c = temp >> 4; + if (c > 2) { + throw new Error("ERROR: Huffman table [Table class > 2 ]"); + } - for (i = 0; i < 16; i+=1) { - this.l[t][c][i] = data.get8(); - count+=1; - } + this.th[t] = 1; + this.tc[t][c] = 1; - for (i = 0; i < 16; i+=1) { - for (j = 0; j < this.l[t][c][i]; j+=1) { - if (count > length) { - throw new Error("ERROR: Huffman table format error [count>Lh]"); + for (i = 0; i < 16; i+=1) { + this.l[t][c][i] = data.get8(); + count+=1; } - this.v[t][c][i][j] = data.get8(); - count+=1; - } + for (i = 0; i < 16; i+=1) { + for (j = 0; j < this.l[t][c][i]; j+=1) { + if (count > length) { + throw new Error("ERROR: Huffman table format error [count>Lh]"); + } + + this.v[t][c][i][j] = data.get8(); + count+=1; + } + } } - } - if (count !== length) { - throw new Error("ERROR: Huffman table format error [count!=Lf]"); - } + if (count !== length) { + throw new Error("ERROR: Huffman table format error [count!=Lf]"); + } - for (i = 0; i < 4; i+=1) { - for (j = 0; j < 2; j+=1) { - if (this.tc[i][j] !== 0) { - this.buildHuffTable(HuffTab[i][j], this.l[i][j], this.v[i][j]); - } + for (i = 0; i < 4; i+=1) { + for (j = 0; j < 2; j+=1) { + if (this.tc[i][j] !== 0) { + this.buildHuffTable(HuffTab[i][j], this.l[i][j], this.v[i][j]); + } + } } - } - return 1; + return 1; }; -// Build_HuffTab() -// Parameter: t table ID -// c table class ( 0 for DC, 1 for AC ) -// L[i] # of codewords which length is i -// V[i][j] Huffman Value (length=i) -// Effect: -// build up HuffTab[t][c] using L and V. + // Build_HuffTab() + // Parameter: t table ID + // c table class ( 0 for DC, 1 for AC ) + // L[i] # of codewords which length is i + // V[i][j] Huffman Value (length=i) + // Effect: + // build up HuffTab[t][c] using L and V. jpeg.lossless.HuffmanTable.prototype.buildHuffTable = function(tab, L, V) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - var currentTable, temp, k, i, j, n; - temp = 256; - k = 0; + var currentTable, temp, k, i, j, n; + temp = 256; + k = 0; - for (i = 0; i < 8; i+=1) { // i+1 is Code length - for (j = 0; j < L[i]; j+=1) { - for (n = 0; n < (temp >> (i + 1)); n+=1) { - tab[k] = V[i][j] | ((i + 1) << 8); - k+=1; - } + for (i = 0; i < 8; i+=1) { // i+1 is Code length + for (j = 0; j < L[i]; j+=1) { + for (n = 0; n < (temp >> (i + 1)); n+=1) { + tab[k] = V[i][j] | ((i + 1) << 8); + k+=1; + } + } } - } - for (i = 1; k < 256; i+=1, k+=1) { - tab[k] = i | jpeg.lossless.HuffmanTable.MSB; - } + for (i = 1; k < 256; i+=1, k+=1) { + tab[k] = i | jpeg.lossless.HuffmanTable.MSB; + } - currentTable = 1; - k = 0; + currentTable = 1; + k = 0; - for (i = 8; i < 16; i+=1) { // i+1 is Code length - for (j = 0; j < L[i]; j+=1) { - for (n = 0; n < (temp >> (i - 7)); n+=1) { - tab[(currentTable * 256) + k] = V[i][j] | ((i + 1) << 8); - k+=1; - } + for (i = 8; i < 16; i+=1) { // i+1 is Code length + for (j = 0; j < L[i]; j+=1) { + for (n = 0; n < (temp >> (i - 7)); n+=1) { + tab[(currentTable * 256) + k] = V[i][j] | ((i + 1) << 8); + k+=1; + } - if (k >= 256) { - if (k > 256) { - throw new Error("ERROR: Huffman table error(1)!"); - } + if (k >= 256) { + if (k > 256) { + throw new Error("ERROR: Huffman table error(1)!"); + } - k = 0; - currentTable+=1; - } + k = 0; + currentTable+=1; + } + } } - } }; @@ -2298,18 +2328,30 @@ var JpegImage = (function jpegImage() { var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.HuffmanTable; + module.exports = jpeg.lossless.HuffmanTable; } -},{"./data-stream.js":2,"./utils.js":10}],6:[function(require,module,exports){ + },{"./data-stream.js":2,"./utils.js":10}],6:[function(require,module,exports){ /*jslint browser: true, node: true */ /*global require, module */ "use strict"; /*** Imports ****/ + + /** + * jpeg + * @type {*|{}} + */ var jpeg = jpeg || {}; + + /** + * jpeg.lossless + * @type {*|{}} + */ jpeg.lossless = jpeg.lossless || {}; + + jpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || ((typeof require !== 'undefined') ? require('./component-spec.js') : null); jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null); jpeg.lossless.Decoder = jpeg.lossless.Decoder || ((typeof require !== 'undefined') ? require('./decoder.js') : null); @@ -2324,10 +2366,10 @@ var JpegImage = (function jpegImage() { /*** Exports ***/ var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg; + module.exports = jpeg; } -},{"./component-spec.js":1,"./data-stream.js":2,"./decoder.js":3,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-component.js":8,"./scan-header.js":9,"./utils.js":10}],7:[function(require,module,exports){ + },{"./component-spec.js":1,"./data-stream.js":2,"./decoder.js":3,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-component.js":8,"./scan-header.js":9,"./utils.js":10}],7:[function(require,module,exports){ /* * Copyright (C) 2015 Michael Martinez * Changes: Added support for selection values 2-7, fixed minor bugs & @@ -2372,14 +2414,14 @@ var JpegImage = (function jpegImage() { /*** Constructor ***/ jpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || function () { - this.precision = []; // Quantization precision 8 or 16 - this.tq = []; // 1: this table is presented - this.quantTables = jpeg.lossless.Utils.createArray(4, 64); // Tables - - this.tq[0] = 0; - this.tq[1] = 0; - this.tq[2] = 0; - this.tq[3] = 0; + this.precision = []; // Quantization precision 8 or 16 + this.tq = []; // 1: this table is presented + this.quantTables = jpeg.lossless.Utils.createArray(4, 64); // Tables + + this.tq[0] = 0; + this.tq[1] = 0; + this.tq[2] = 0; + this.tq[3] = 0; }; @@ -2387,99 +2429,99 @@ var JpegImage = (function jpegImage() { /*** Static Methods ***/ jpeg.lossless.QuantizationTable.enhanceQuantizationTable = function(qtab, table) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - var i; + var i; - for (i = 0; i < 8; i+=1) { - qtab[table[(0 * 8) + i]] *= 90; - qtab[table[(4 * 8) + i]] *= 90; - qtab[table[(2 * 8) + i]] *= 118; - qtab[table[(6 * 8) + i]] *= 49; - qtab[table[(5 * 8) + i]] *= 71; - qtab[table[(1 * 8) + i]] *= 126; - qtab[table[(7 * 8) + i]] *= 25; - qtab[table[(3 * 8) + i]] *= 106; - } + for (i = 0; i < 8; i+=1) { + qtab[table[(0 * 8) + i]] *= 90; + qtab[table[(4 * 8) + i]] *= 90; + qtab[table[(2 * 8) + i]] *= 118; + qtab[table[(6 * 8) + i]] *= 49; + qtab[table[(5 * 8) + i]] *= 71; + qtab[table[(1 * 8) + i]] *= 126; + qtab[table[(7 * 8) + i]] *= 25; + qtab[table[(3 * 8) + i]] *= 106; + } - for (i = 0; i < 8; i+=1) { - qtab[table[0 + (8 * i)]] *= 90; - qtab[table[4 + (8 * i)]] *= 90; - qtab[table[2 + (8 * i)]] *= 118; - qtab[table[6 + (8 * i)]] *= 49; - qtab[table[5 + (8 * i)]] *= 71; - qtab[table[1 + (8 * i)]] *= 126; - qtab[table[7 + (8 * i)]] *= 25; - qtab[table[3 + (8 * i)]] *= 106; - } + for (i = 0; i < 8; i+=1) { + qtab[table[0 + (8 * i)]] *= 90; + qtab[table[4 + (8 * i)]] *= 90; + qtab[table[2 + (8 * i)]] *= 118; + qtab[table[6 + (8 * i)]] *= 49; + qtab[table[5 + (8 * i)]] *= 71; + qtab[table[1 + (8 * i)]] *= 126; + qtab[table[7 + (8 * i)]] *= 25; + qtab[table[3 + (8 * i)]] *= 106; + } - for (i = 0; i < 64; i+=1) { - qtab[i] >>= 6; - } + for (i = 0; i < 64; i+=1) { + qtab[i] >>= 6; + } }; /*** Prototype Methods ***/ jpeg.lossless.QuantizationTable.prototype.read = function (data, table) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - var count = 0, length, temp, t, i; + var count = 0, length, temp, t, i; - length = data.get16(); - count += 2; + length = data.get16(); + count += 2; - while (count < length) { - temp = data.get8(); - count+=1; - t = temp & 0x0F; + while (count < length) { + temp = data.get8(); + count+=1; + t = temp & 0x0F; - if (t > 3) { - throw new Error("ERROR: Quantization table ID > 3"); - } + if (t > 3) { + throw new Error("ERROR: Quantization table ID > 3"); + } - this.precision[t] = temp >> 4; + this.precision[t] = temp >> 4; - if (this.precision[t] === 0) { - this.precision[t] = 8; - } else if (this.precision[t] === 1) { - this.precision[t] = 16; - } else { - throw new Error("ERROR: Quantization table precision error"); - } + if (this.precision[t] === 0) { + this.precision[t] = 8; + } else if (this.precision[t] === 1) { + this.precision[t] = 16; + } else { + throw new Error("ERROR: Quantization table precision error"); + } - this.tq[t] = 1; + this.tq[t] = 1; - if (this.precision[t] === 8) { - for (i = 0; i < 64; i+=1) { - if (count > length) { - throw new Error("ERROR: Quantization table format error"); - } + if (this.precision[t] === 8) { + for (i = 0; i < 64; i+=1) { + if (count > length) { + throw new Error("ERROR: Quantization table format error"); + } - this.quantTables[t][i] = data.get8(); - count+=1; - } + this.quantTables[t][i] = data.get8(); + count+=1; + } - jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table); - } else { - for (i = 0; i < 64; i+=1) { - if (count > length) { - throw new Error("ERROR: Quantization table format error"); - } + jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table); + } else { + for (i = 0; i < 64; i+=1) { + if (count > length) { + throw new Error("ERROR: Quantization table format error"); + } - this.quantTables[t][i] = data.get16(); - count += 2; - } + this.quantTables[t][i] = data.get16(); + count += 2; + } - jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table); + jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table); + } } - } - if (count !== length) { - throw new Error("ERROR: Quantization table error [count!=Lq]"); - } + if (count !== length) { + throw new Error("ERROR: Quantization table error [count!=Lq]"); + } - return 1; + return 1; }; @@ -2488,10 +2530,10 @@ var JpegImage = (function jpegImage() { var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.QuantizationTable; + module.exports = jpeg.lossless.QuantizationTable; } -},{"./data-stream.js":2,"./utils.js":10}],8:[function(require,module,exports){ + },{"./data-stream.js":2,"./utils.js":10}],8:[function(require,module,exports){ /* * Copyright (C) 2015 Michael Martinez * Changes: Added support for selection values 2-7, fixed minor bugs & @@ -2534,9 +2576,9 @@ var JpegImage = (function jpegImage() { /*** Constructor ***/ jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || function () { - this.acTabSel = 0; // AC table selector - this.dcTabSel = 0; // DC table selector - this.scanCompSel = 0; // Scan component selector + this.acTabSel = 0; // AC table selector + this.dcTabSel = 0; // DC table selector + this.scanCompSel = 0; // Scan component selector }; @@ -2545,10 +2587,10 @@ var JpegImage = (function jpegImage() { var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.ScanComponent; + module.exports = jpeg.lossless.ScanComponent; } -},{}],9:[function(require,module,exports){ + },{}],9:[function(require,module,exports){ /* * Copyright (C) 2015 Michael Martinez * Changes: Added support for selection values 2-7, fixed minor bugs & @@ -2593,61 +2635,61 @@ var JpegImage = (function jpegImage() { /*** Constructor ***/ jpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || function () { - this.ah = 0; - this.al = 0; - this.numComp = 0; // Number of components in the scan - this.selection = 0; // Start of spectral or predictor selection - this.spectralEnd = 0; // End of spectral selection - this.components = []; + this.ah = 0; + this.al = 0; + this.numComp = 0; // Number of components in the scan + this.selection = 0; // Start of spectral or predictor selection + this.spectralEnd = 0; // End of spectral selection + this.components = []; }; /*** Prototype Methods ***/ jpeg.lossless.ScanHeader.prototype.read = function(data) { - /*jslint bitwise: true */ + /*jslint bitwise: true */ - var count = 0, length, i, temp; + var count = 0, length, i, temp; - length = data.get16(); - count += 2; + length = data.get16(); + count += 2; - this.numComp = data.get8(); - count+=1; + this.numComp = data.get8(); + count+=1; - for (i = 0; i < this.numComp; i+=1) { - this.components[i] = new jpeg.lossless.ScanComponent(); + for (i = 0; i < this.numComp; i+=1) { + this.components[i] = new jpeg.lossless.ScanComponent(); - if (count > length) { - throw new Error("ERROR: scan header format error"); - } + if (count > length) { + throw new Error("ERROR: scan header format error"); + } - this.components[i].scanCompSel = data.get8(); - count+=1; + this.components[i].scanCompSel = data.get8(); + count+=1; - temp = data.get8(); - count+=1; + temp = data.get8(); + count+=1; - this.components[i].dcTabSel = (temp >> 4); - this.components[i].acTabSel = (temp & 0x0F); - } + this.components[i].dcTabSel = (temp >> 4); + this.components[i].acTabSel = (temp & 0x0F); + } - this.selection = data.get8(); - count+=1; + this.selection = data.get8(); + count+=1; - this.spectralEnd = data.get8(); - count+=1; + this.spectralEnd = data.get8(); + count+=1; - temp = data.get8(); - this.ah = (temp >> 4); - this.al = (temp & 0x0F); - count+=1; + temp = data.get8(); + this.ah = (temp >> 4); + this.al = (temp & 0x0F); + count+=1; - if (count !== length) { - throw new Error("ERROR: scan header format error [count!=Ns]"); - } + if (count !== length) { + throw new Error("ERROR: scan header format error [count!=Ns]"); + } - return 1; + return 1; }; @@ -2656,10 +2698,10 @@ var JpegImage = (function jpegImage() { var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.ScanHeader; + module.exports = jpeg.lossless.ScanHeader; } -},{"./data-stream.js":2,"./scan-component.js":8}],10:[function(require,module,exports){ + },{"./data-stream.js":2,"./scan-component.js":8}],10:[function(require,module,exports){ /* * Copyright (C) 2015 Michael Martinez * Changes: Added support for selection values 2-7, fixed minor bugs & @@ -2706,43 +2748,44 @@ var JpegImage = (function jpegImage() { /*** Static methods ***/ -// http://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript + // http://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript jpeg.lossless.Utils.createArray = function (length) { - var arr = new Array(length || 0), - i = length; + var arr = new Array(length || 0), + i = length; - if (arguments.length > 1) { - var args = Array.prototype.slice.call(arguments, 1); - while(i--) arr[length-1 - i] = jpeg.lossless.Utils.createArray.apply(this, args); - } + if (arguments.length > 1) { + var args = Array.prototype.slice.call(arguments, 1); + while(i--) arr[length-1 - i] = jpeg.lossless.Utils.createArray.apply(this, args); + } - return arr; + return arr; }; -// http://stackoverflow.com/questions/18638900/javascript-crc32 + // http://stackoverflow.com/questions/18638900/javascript-crc32 jpeg.lossless.Utils.makeCRCTable = function(){ - var c; - var crcTable = []; - for(var n =0; n < 256; n++){ - c = n; - for(var k =0; k < 8; k++){ - c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); - } - crcTable[n] = c; - } - return crcTable; + var c; + var crcTable = []; + for(var n =0; n < 256; n++){ + c = n; + for(var k =0; k < 8; k++){ + c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + crcTable[n] = c; + } + return crcTable; }; jpeg.lossless.Utils.crc32 = function(dataView) { - var crcTable = jpeg.lossless.Utils.crcTable || (jpeg.lossless.Utils.crcTable = jpeg.lossless.Utils.makeCRCTable()); - var crc = 0 ^ (-1); + var uint8view = new Uint8Array(dataView.buffer); + var crcTable = jpeg.lossless.Utils.crcTable || (jpeg.lossless.Utils.crcTable = jpeg.lossless.Utils.makeCRCTable()); + var crc = 0 ^ (-1); - for (var i = 0; i < dataView.byteLength; i++ ) { - crc = (crc >>> 8) ^ crcTable[(crc ^ dataView.getUint8(i)) & 0xFF]; - } + for (var i = 0; i < uint8view.length; i++ ) { + crc = (crc >>> 8) ^ crcTable[(crc ^ uint8view[i]) & 0xFF]; + } - return (crc ^ (-1)) >>> 0; + return (crc ^ (-1)) >>> 0; }; @@ -2750,7 +2793,7 @@ var JpegImage = (function jpegImage() { var moduleType = typeof module; if ((moduleType !== 'undefined') && module.exports) { - module.exports = jpeg.lossless.Utils; + module.exports = jpeg.lossless.Utils; } },{}]},{},[6])(6) diff --git a/dist/cornerstoneWADOImageLoaderCodecs.min.js b/dist/cornerstoneWADOImageLoaderCodecs.min.js index df642f0f..35ac1166 100644 --- a/dist/cornerstoneWADOImageLoaderCodecs.min.js +++ b/dist/cornerstoneWADOImageLoaderCodecs.min.js @@ -25,11 +25,11 @@ r=0;za(8,A|0,i<<1|0,0);m=r;r=0;if(m&1){C=25;break}if(!(d[A>>0]&1))a=10;else a=(f return}function hs(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0;f[a+12>>2]=0;f[a+16>>2]=e;do if(b){g=e+112|0;if(b>>>0<29&(d[g>>0]|0)==0){d[g>>0]=1;break}else{e=Iu(b<<2)|0;break}}else e=0;while(0);f[a>>2]=e;c=e+(c<<2)|0;f[a+8>>2]=c;f[a+4>>2]=c;f[a+12>>2]=e+(b<<2);return}function is(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0;d=f[a>>2]|0;g=a+4|0;c=b+4|0;e=(f[g>>2]|0)-d|0;h=(f[c>>2]|0)+(0-(e>>2)<<2)|0;f[c>>2]=h;zs(h|0,d|0,e|0)|0;e=f[a>>2]|0;f[a>>2]=f[c>>2];f[c>>2]=e;e=b+8|0;d=f[g>>2]|0;f[g>>2]=f[e>>2];f[e>>2]=d;e=a+8|0;a=b+12|0;d=f[e>>2]|0;f[e>>2]=f[a>>2];f[a>>2]=d;f[b>>2]=f[c>>2];return}function js(a){a=a|0;var b=0,c=0,e=0;c=f[a+4>>2]|0;e=a+8|0;b=f[e>>2]|0;if((b|0)!=(c|0)){do b=b+-4|0;while((b|0)!=(c|0));f[e>>2]=b}c=f[a>>2]|0;do if(c){b=f[a+16>>2]|0;if((b|0)==(c|0)){d[b+112>>0]=0;break}else{Ju(c);break}}while(0);return}function ks(a,b){a=a|0;b=b|0;var c=0;if(b>>>0>1073741823)Gu(a);c=a+128|0;if(b>>>0<29&(d[c>>0]|0)==0){d[c>>0]=1;c=a+16|0}else c=Iu(b<<2)|0;f[a+4>>2]=c;f[a>>2]=c;f[a+8>>2]=c+(b<<2);return}function ls(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;do if((a|0)!=(b|0)){e=Jv()|0;g=f[e>>2]|0;f[e>>2]=0;d=+Nw(a,h,Uo()|0);a=f[e>>2]|0;if(!a)f[e>>2]=g;if((f[h>>2]|0)!=(b|0)){f[c>>2]=4;d=0.0;break}if((a|0)==34)f[c>>2]=4}else{f[c>>2]=4;d=0.0}while(0);l=i;return+d}function ms(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;do if((a|0)!=(b|0)){e=Jv()|0;g=f[e>>2]|0;f[e>>2]=0;d=+Nw(a,h,Uo()|0);a=f[e>>2]|0;if(!a)f[e>>2]=g;if((f[h>>2]|0)!=(b|0)){f[c>>2]=4;d=0.0;break}if((a|0)==34)f[c>>2]=4}else{f[c>>2]=4;d=0.0}while(0);l=i;return+d}function ns(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0,g=0,h=0,i=0;i=l;l=l+16|0;h=i;do if((a|0)==(b|0)){f[c>>2]=4;d=0.0}else{e=Jv()|0;g=f[e>>2]|0;f[e>>2]=0;d=+Nw(a,h,Uo()|0);a=f[e>>2]|0;if(!a)f[e>>2]=g;if((f[h>>2]|0)!=(b|0)){f[c>>2]=4;d=0.0;break}if((a|0)==34)f[c>>2]=4}while(0);l=i;return+d}function os(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j;do if((a|0)!=(b|0)){if((d[a>>0]|0)==45){f[c>>2]=4;e=0;a=0;break}g=Jv()|0;h=f[g>>2]|0;f[g>>2]=0;a=Cv(a,i,e,Uo()|0)|0;e=f[g>>2]|0;if(!e)f[g>>2]=h;if((f[i>>2]|0)!=(b|0)){f[c>>2]=4;e=0;a=0;break}if((e|0)==34){f[c>>2]=4;e=-1;a=-1}else e=G}else{f[c>>2]=4;e=0;a=0}while(0);G=e;l=j;return a|0}function ps(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;do if((a|0)!=(b|0)){if((d[a>>0]|0)==45){f[c>>2]=4;a=0;break}h=Jv()|0;i=f[h>>2]|0;f[h>>2]=0;a=Cv(a,j,e,Uo()|0)|0;e=G;g=f[h>>2]|0;if(!g)f[h>>2]=i;if((f[j>>2]|0)!=(b|0)){f[c>>2]=4;a=0;break}if(e>>>0>0|(e|0)==0&a>>>0>4294967295|(g|0)==34){f[c>>2]=4;a=-1;break}else break}else{f[c>>2]=4;a=0}while(0);l=k;return a|0}function qs(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;do if((a|0)!=(b|0)){if((d[a>>0]|0)==45){f[c>>2]=4;a=0;break}h=Jv()|0;i=f[h>>2]|0;f[h>>2]=0;a=Cv(a,j,e,Uo()|0)|0;e=G;g=f[h>>2]|0;if(!g)f[h>>2]=i;if((f[j>>2]|0)!=(b|0)){f[c>>2]=4;a=0;break}if(e>>>0>0|(e|0)==0&a>>>0>4294967295|(g|0)==34){f[c>>2]=4;a=-1;break}else break}else{f[c>>2]=4;a=0}while(0);l=k;return a|0}function rs(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;do if((a|0)!=(b|0)){if((d[a>>0]|0)==45){f[c>>2]=4;a=0;break}h=Jv()|0;i=f[h>>2]|0;f[h>>2]=0;a=Cv(a,j,e,Uo()|0)|0;e=G;g=f[h>>2]|0;if(!g)f[h>>2]=i;if((f[j>>2]|0)!=(b|0)){f[c>>2]=4;a=0;break}if(e>>>0>0|(e|0)==0&a>>>0>65535|(g|0)==34){f[c>>2]=4;a=-1;break}else{a=a&65535;break}}else{f[c>>2]=4;a=0}while(0);l=k;return a|0}function ss(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j;do if((a|0)!=(b|0)){g=Jv()|0;h=f[g>>2]|0;f[g>>2]=0;a=Dv(a,i,d,Uo()|0)|0;d=G;e=f[g>>2]|0;if(!e)f[g>>2]=h;if((f[i>>2]|0)!=(b|0)){f[c>>2]=4;d=0;a=0;break}if((e|0)==34){f[c>>2]=4;i=(d|0)>0|(d|0)==0&a>>>0>0;G=i?2147483647:-2147483648;l=j;return(i?-1:0)|0}}else{f[c>>2]=4;d=0;a=0}while(0);G=d;l=j;return a|0}function ts(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j;a:do if((a|0)==(b|0)){f[c>>2]=4;a=0}else{g=Jv()|0;h=f[g>>2]|0;f[g>>2]=0;a=Dv(a,i,d,Uo()|0)|0;d=G;e=f[g>>2]|0;if(!e)f[g>>2]=h;if((f[i>>2]|0)!=(b|0)){f[c>>2]=4;a=0;break}do if((e|0)==34){f[c>>2]=4;if((d|0)>0|(d|0)==0&a>>>0>0){a=2147483647;break a}}else{if((d|0)<-1|(d|0)==-1&a>>>0<2147483648){f[c>>2]=4;break}if((d|0)>0|(d|0)==0&a>>>0>2147483647){f[c>>2]=4;a=2147483647;break a}else break a}while(0);a=-2147483648}while(0);l=j;return a|0}function us(){}function vs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return(G=d,a-c>>>0|0)|0}function ws(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0;e=a+c|0;if((c|0)>=20){b=b&255;h=a&3;i=b|b<<8|b<<16|b<<24;g=e&~3;if(h){h=a+4-h|0;while((a|0)<(h|0)){d[a>>0]=b;a=a+1|0}}while((a|0)<(g|0)){f[a>>2]=i;a=a+4|0}}while((a|0)<(e|0)){d[a>>0]=b;a=a+1|0}return a-c|0}function xs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return(G=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function ys(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){G=b>>>c;return a>>>c|(b&(1<>>c-32|0}function zs(a,b,c){a=a|0;b=b|0;c=c|0;var e=0;if((c|0)>=4096)return Za(a|0,b|0,c|0)|0;e=a|0;if((a&3)==(b&3)){while(a&3){if(!c)return e|0;d[a>>0]=d[b>>0]|0;a=a+1|0;b=b+1|0;c=c-1|0}while((c|0)>=4){f[a>>2]=f[b>>2];a=a+4|0;b=b+4|0;c=c-4|0}}while((c|0)>0){d[a>>0]=d[b>>0]|0;a=a+1|0;b=b+1|0;c=c-1|0}return e|0}function As(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){G=b<>>32-c;return a<0){a=a-1|0;b=b-1|0;c=c-1|0;d[a>>0]=d[b>>0]|0}a=e}else zs(a,b,c)|0;return a|0}function Cs(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){G=b>>c;return a>>>c|(b&(1<>c-32|0}function Ds(a){a=a|0;var b=0;b=d[p+(a&255)>>0]|0;if((b|0)<8)return b|0;b=d[p+(a>>8&255)>>0]|0;if((b|0)<8)return b+8|0;b=d[p+(a>>16&255)>>0]|0;if((b|0)<8)return b+16|0;return(d[p+(a>>>24)>>0]|0)+24|0}function Es(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=ca(e,f)|0;d=a>>>16;a=(c>>>16)+(ca(e,d)|0)|0;e=b>>>16;b=ca(e,f)|0;return(G=(a>>>16)+(ca(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Fs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=vs(j^a,i^b,j,i)|0;g=G;a=f^j;b=e^i;return vs((Ks(h,g,vs(f^c,e^d,f,e)|0,G,0)|0)^a,G^b,a,b)|0}function Gs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+16|0;i=e|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;k=d>>31|((d|0)<0?-1:0)<<1;j=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;a=vs(h^a,g^b,h,g)|0;b=G;Ks(a,b,vs(k^c,j^d,k,j)|0,G,i)|0;d=vs(f[i>>2]^h,f[i+4>>2]^g,h,g)|0;c=G;l=e;return(G=c,d)|0}function Hs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=Es(e,f)|0;a=G;return(G=(ca(b,f)|0)+(ca(d,e)|0)+a|a&0,c|0|0)|0}function Is(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ks(a,b,c,d,0)|0}function Js(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;g=l;l=l+16|0;e=g|0;Ks(a,b,c,d,e)|0;l=g;return(G=f[e+4>>2]|0,f[e>>2]|0)|0}function Ks(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=c;n=d;i=n;if(!k){g=(e|0)!=0;if(!i){if(g){f[e>>2]=(l>>>0)%(h>>>0);f[e+4>>2]=0}n=0;e=(l>>>0)/(h>>>0)>>>0;return(G=n,e)|0}else{if(!g){n=0;e=0;return(G=n,e)|0}f[e>>2]=a|0;f[e+4>>2]=b&0;n=0;e=0;return(G=n,e)|0}}g=(i|0)==0;do if(h){if(!g){g=(ea(i|0)|0)-(ea(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<>>(m>>>0)&b;g=0;i=l<>2]=a|0;f[e+4>>2]=j|b&0;n=0;e=0;return(G=n,e)|0}g=h-1|0;if(g&h){i=(ea(h|0)|0)+33-(ea(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(e){f[e>>2]=g&l;f[e+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return(G=o,p)|0}else{p=Ds(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return(G=o,p)|0}}else{if(g){if(e){f[e>>2]=(k>>>0)%(h>>>0);f[e+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return(G=o,p)|0}if(!l){if(e){f[e>>2]=0;f[e+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return(G=o,p)|0}g=i-1|0;if(!(g&i)){if(e){f[e>>2]=a|0;f[e+4>>2]=g&k|b&0}o=0;p=k>>>((Ds(i|0)|0)>>>0);return(G=o,p)|0}g=(ea(i|0)|0)-(ea(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;f[e+4>>2]=j|b&0;o=0;p=0;return(G=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=c|0|0;l=n|d&0;k=xs(m|0,l|0,-1,-1)|0;c=G;j=i;i=0;do{d=j;j=g>>>31|j<<1;g=i|g<<1;d=a<<1|d>>>31|0;n=a>>>31|b<<1|0;vs(k,c,d,n)|0;p=G;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=vs(d,n,o&m,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l)|0;b=G;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(e){f[e>>2]=a;f[e+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return(G=o,p)|0}function Ls(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return cx[a&15](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Ms(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;dx[a&15](b|0,c|0,d|0,e|0,f|0)}function Ns(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;return ex[a&3](b|0,c|0,d|0,e|0,f|0,+g)|0}function Os(a,b){a=a|0;b=b|0;fx[a&255](b|0)}function Ps(a,b,c){a=a|0;b=b|0;c=c|0;gx[a&127](b|0,c|0)}function Qs(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return hx[a&63](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Rs(a,b){a=a|0;b=b|0;return ix[a&127](b|0)|0}function Ss(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return jx[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)|0}function Ts(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return kx[a&63](b|0,c|0,d|0)|0}function Us(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;lx[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0,p|0)}function Vs(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;mx[a&15](b|0,c|0,d|0,e|0,f|0,g|0)}function Ws(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;nx[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function Xs(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;ox[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function Ys(a,b,c){a=a|0;b=b|0;c=c|0;return px[a&63](b|0,c|0)|0}function Zs(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return qx[a&31](b|0,c|0,d|0,e|0,f|0)|0}function $s(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return+rx[a&3](b|0,c|0,d|0)}function _s(a){a=a|0;return sx[a&15]()|0}function at(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return tx[a&31](b|0,c|0,d|0,e|0)|0}function bt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ux[a&15](b|0,c|0,d|0)}function ct(a){a=a|0;vx[a&7]()}function dt(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;return wx[a&15](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function et(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return xx[a&7](b|0,c|0,d|0,e|0,+f)|0}function ft(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;yx[a&63](b|0,c|0,d|0,e|0)}function gt(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;fa(0);return 0}function ht(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;fa(1)}function it(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;fa(2);return 0}function jt(a){a=a|0;fa(3)}function kt(a,b){a=a|0;b=b|0;fa(4)}function lt(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;fa(5);return 0}function mt(a){a=a|0;fa(6);return 0}function nt(a){a=a|0;return fb(a|0)|0}function ot(a){a=a|0;return ub(a|0)|0}function pt(a){a=a|0;return kb(a|0)|0}function qt(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;fa(7);return 0}function rt(a,b,c){a=a|0;b=b|0;c=c|0;fa(8);return 0}function st(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;fa(9)}function tt(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;fa(10)}function ut(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;fa(11)}function vt(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;fa(12)}function wt(a,b){a=a|0;b=b|0;fa(13);return 0}function xt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;fa(14);return 0}function yt(a,b,c){a=a|0;b=b|0;c=c|0;fa(15);return 0.0}function zt(){fa(16);return 0}function At(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;fa(17);return 0}function Bt(a,b,c){a=a|0;b=b|0;c=c|0;fa(18)}function Ct(a,b,c){a=a|0;b=b|0;c=c|0;ob(a|0,b|0,c|0)}function Dt(){fa(19)}function Et(){sb()}function Ft(){$a()}function Gt(){pb()}function Ht(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;fa(20);return 0}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;fa(21);return 0}function Jt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;fa(22)}function Kt(a){a=a|0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;j=m;ju(j,255,0);k=a+152|0;if(((f[j+4>>2]|0)==(f[k>>2]|0)?(f[j+8>>2]|0)==(f[a+156>>2]|0):0)?(f[j+12>>2]|0)==(f[a+160>>2]|0):0){k=f[8900]|0;f[a+4580>>2]=k+(((f[8901]|0)-k|0)>>>1);l=m;return}c=a+4584|0;e=a+4588|0;g=f[e>>2]|0;b=f[c>>2]|0;h=g-b|0;if(h>>>0>=512){if(h>>>0>512?(i=b+512|0,(g|0)!=(i|0)):0)f[e>>2]=i}else{Qd(c,512-h|0);b=f[c>>2]|0}j=a+4580|0;f[j>>2]=b+256;i=a+160|0;g=a+156|0;h=-256;while(1){b=f[i>>2]|0;if((h|0)>(0-b|0)){c=f[g>>2]|0;if((h|0)>(0-c|0)){e=f[k>>2]|0;if((h|0)>(0-e|0))if((h|0)>=0){if((h|0)<1){d[(f[j>>2]|0)+h>>0]=0;h=1;continue}if((e|0)<=(h|0))if((c|0)>(h|0))b=2;else b=(b|0)>(h|0)?3:4;else b=1}else b=-1;else b=-2}else b=-3}else b=-4;d[(f[j>>2]|0)+h>>0]=b;h=h+1|0;if((h|0)==256)break}l=m;return}function Lt(a){a=a|0;var b=0,c=0;f[a>>2]=35660;b=f[a+4608>>2]|0;if(b){c=a+4612|0;if((f[c>>2]|0)!=(b|0))f[c>>2]=b;Ju(b)}f[a>>2]=36736;b=f[a+92>>2]|0;if(b){c=a+96|0;if((f[c>>2]|0)!=(b|0))f[c>>2]=b;Ju(b)}a=a+88|0;b=f[a>>2]|0;f[a>>2]=0;if(!b)return;fx[f[(f[b>>2]|0)+4>>2]&255](b);return}function Mt(a){a=a|0;var b=0,c=0;f[a>>2]=35660;b=f[a+4608>>2]|0;if(b){c=a+4612|0;if((f[c>>2]|0)!=(b|0))f[c>>2]=b;Ju(b)}f[a>>2]=36736;b=f[a+92>>2]|0;if(b){c=a+96|0;if((f[c>>2]|0)!=(b|0))f[c>>2]=b;Ju(b)}c=a+88|0;b=f[c>>2]|0;f[c>>2]=0;if(!b){Ju(a);return}fx[f[(f[b>>2]|0)+4>>2]&255](b);Ju(a);return}function Nt(a,b){a=a|0;b=b|0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=l;l=l+352|0;x=w+328|0;y=w+192|0;c=w+343|0;e=w+342|0;g=w+341|0;h=w+340|0;p=w+176|0;j=w+168|0;k=w+160|0;m=w+152|0;v=w;t=w+136|0;if((f[a+28>>2]|0)!=0?(f[a+20>>2]|0)!=1:0){s=a+4|0;u=a+32|0;i=f[u>>2]|0;if(!i){a=Iu(48)|0;r=0;f[y>>2]=f[b>>2];f[y+4>>2]=f[b+4>>2];f[y+8>>2]=f[b+8>>2];d[x>>0]=d[c>>0]|0;Da(44,a|0,y|0,s|0,x|0);z=r;r=0;if(!(z&1)){z=a;l=w;return z|0}z=Qa()|0;Ju(a);_a(z|0)}a=f[a+12>>2]|0;if((a|0)==8)switch(i|0){case 1:{a=Iu(48)|0;r=0;f[y>>2]=f[b>>2];f[y+4>>2]=f[b+4>>2];f[y+8>>2]=f[b+8>>2];d[x>>0]=d[e>>0]|0;Da(45,a|0,y|0,s|0,x|0);z=r;r=0;if(!(z&1)){z=a;l=w;return z|0}z=Qa()|0;Ju(a);_a(z|0)}case 2:{a=Iu(48)|0;r=0;f[y>>2]=f[b>>2];f[y+4>>2]=f[b+4>>2];f[y+8>>2]=f[b+8>>2];d[x>>0]=d[g>>0]|0;Da(46,a|0,y|0,s|0,x|0);z=r;r=0;if(!(z&1)){z=a;l=w;return z|0}z=Qa()|0;Ju(a);_a(z|0)}case 3:{a=Iu(48)|0;r=0;f[y>>2]=f[b>>2];f[y+4>>2]=f[b+4>>2];f[y+8>>2]=f[b+8>>2];d[x>>0]=d[h>>0]|0;Da(47,a|0,y|0,s|0,x|0);z=r;r=0;if(!(z&1)){z=a;l=w;return z|0}z=Qa()|0;Ju(a);_a(z|0)}default:{i=y+56|0;g=y+4|0;f[y>>2]=36160;f[i>>2]=36180;r=0;la(62,y+56|0,g|0);w=r;r=0;if(w&1){z=Qa()|0;cn(i);_a(z|0)}f[y+128>>2]=0;f[y+132>>2]=-1;f[y>>2]=36200;f[y+56>>2]=36220;r=0;ka(180,g|0);w=r;r=0;do if(w&1)a=Qa()|0;else{f[g>>2]=36236;h=y+36|0;f[h>>2]=0;f[h+4>>2]=0;f[h+8>>2]=0;f[h+12>>2]=0;f[y+52>>2]=16;f[x>>2]=0;f[x+4>>2]=0;f[x+8>>2]=0;r=0;la(63,g|0,x|0);w=r;r=0;if(w&1){a=Qa()|0;Fm(x);Fm(h);kn(g);break}Fm(x);r=0;a=pa(28,y|0,49007,21)|0;x=r;r=0;do if((!(x&1)?(r=0,n=ua(36,a|0,f[u>>2]|0)|0,x=r,r=0,!(x&1)):0)?(r=0,pa(28,n|0,50997,18)|0,x=r,r=0,!(x&1)):0){e=Pa(16)|0;r=0;la(64,p|0,g|0);x=r;r=0;if(!(x&1)){if((d[8]|0)==0?(Ka(8)|0)!=0:0){nb(72,35648,q|0)|0;Sa(8)}r=0;Da(36,e|0,9,35648,p|0);x=r;r=0;if(x&1)c=1;else{r=0;za(6,e|0,824,96);r=0;c=0}a=Qa()|0;Fm(p);if(!c)break}else a=Qa()|0;Oa(e|0)}else z=34;while(0);if((z|0)==34)a=Qa()|0;f[y>>2]=36200;f[i>>2]=36220;f[g>>2]=36236;Fm(h);kn(g);cn(i);z=a;_a(z|0)}while(0);z=a;cn(i);_a(z|0)}}if((a|0)<=8){a=Pa(16)|0;if((d[8]|0)==0?(Ka(8)|0)!=0:0){nb(72,35648,q|0)|0;Sa(8)}r=0;za(7,a|0,8,35648);z=r;r=0;if(!(z&1))ob(a|0,824,96);z=Qa()|0;Oa(a|0);_a(z|0)}c=16-a|0;switch(i|0){case 1:{a=Iu(60)|0;f[j>>2]=c;r=0;f[y>>2]=f[b>>2];f[y+4>>2]=f[b+4>>2];f[y+8>>2]=f[b+8>>2];f[x>>2]=f[j>>2];f[x+4>>2]=f[j+4>>2];Da(41,a|0,y|0,s|0,x|0);z=r;r=0;if(!(z&1)){z=a;l=w;return z|0}z=Qa()|0;Ju(a);_a(z|0)}case 2:{a=Iu(60)|0;f[k>>2]=c;r=0;f[y>>2]=f[b>>2];f[y+4>>2]=f[b+4>>2];f[y+8>>2]=f[b+8>>2];f[x>>2]=f[k>>2];f[x+4>>2]=f[k+4>>2];Da(42,a|0,y|0,s|0,x|0);z=r;r=0;if(!(z&1)){z=a;l=w;return z|0}z=Qa()|0;Ju(a);_a(z|0)}case 3:{a=Iu(60)|0;f[m>>2]=c;r=0;f[y>>2]=f[b>>2];f[y+4>>2]=f[b+4>>2];f[y+8>>2]=f[b+8>>2];f[x>>2]=f[m>>2];f[x+4>>2]=f[m+4>>2];Da(43,a|0,y|0,s|0,x|0);z=r;r=0;if(!(z&1)){z=a;l=w;return z|0}z=Qa()|0;Ju(a);_a(z|0)}default:{i=v+56|0;g=v+4|0;f[v>>2]=36160;f[i>>2]=36180;r=0;la(62,v+56|0,g|0);y=r;r=0;if(y&1){z=Qa()|0;cn(i);_a(z|0)}f[v+128>>2]=0;f[v+132>>2]=-1;f[v>>2]=36200;f[v+56>>2]=36220;r=0;ka(180,g|0);y=r;r=0;do if(y&1)a=Qa()|0;else{f[g>>2]=36236;h=v+36|0;f[h>>2]=0;f[h+4>>2]=0;f[h+8>>2]=0;f[h+12>>2]=0;f[v+52>>2]=16;f[x>>2]=0;f[x+4>>2]=0;f[x+8>>2]=0;r=0;la(63,g|0,x|0);y=r;r=0;if(y&1){a=Qa()|0;Fm(x);Fm(h);kn(g);break}Fm(x);r=0;a=pa(28,v|0,49007,21)|0;y=r;r=0;do if((!(y&1)?(r=0,o=ua(36,a|0,f[u>>2]|0)|0,y=r,r=0,!(y&1)):0)?(r=0,pa(28,o|0,50997,18)|0,y=r,r=0,!(y&1)):0){e=Pa(16)|0;r=0;la(64,t|0,g|0);y=r;r=0;if(!(y&1)){if((d[8]|0)==0?(Ka(8)|0)!=0:0){nb(72,35648,q|0)|0;Sa(8)}r=0;Da(36,e|0,9,35648,t|0);y=r;r=0;if(y&1)c=1;else{r=0;za(6,e|0,824,96);r=0;c=0}a=Qa()|0;Fm(t);if(!c)break}else a=Qa()|0;Oa(e|0)}else z=64;while(0);if((z|0)==64)a=Qa()|0;f[v>>2]=36200;f[i>>2]=36220;f[g>>2]=36236;Fm(h);kn(g);cn(i);z=a;_a(z|0)}while(0);z=a;cn(i);_a(z|0)}}}c=f[b+4>>2]|0;e=Iu(16)|0;a=f[a+16>>2]|0;if(!c){z=f[b>>2]|0;f[e>>2]=36132;f[e+4>>2]=z;f[e+8>>2]=1;f[e+12>>2]=a;z=e;l=w;return z|0}else{f[e>>2]=36108;f[e+4>>2]=c;f[e+8>>2]=1;f[e+12>>2]=a;z=e;l=w;return z|0}return 0}function Ot(a,b){a=a|0;b=b|0;var c=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;m=j;ju(m,f[a+128>>2]|0,f[a+136>>2]|0);k=f[b+4>>2]|0;i=f[b+8>>2]|0;i=(i|0)==0?f[m+8>>2]|0:i;h=f[b+12>>2]|0;h=(h|0)==0?f[m+12>>2]|0:h;c=f[b+16>>2]|0;g=f[m+16>>2]|0;f[a+176>>2]=(k|0)==0?f[m+4>>2]|0:k;f[a+180>>2]=i;f[a+184>>2]=h;Wt(a);h=a+132|0;b=(f[h>>2]|0)+32|0;b=(b|0)<128?2:(b|0)/64|0;i=0;do{f[a+188+(i*12|0)>>2]=b;f[a+188+(i*12|0)+4>>2]=0;e[a+188+(i*12|0)+8>>1]=0;e[a+188+(i*12|0)+10>>1]=1;i=i+1|0}while((i|0)!=365);k=(f[h>>2]|0)+32|0;k=(k|0)<128?2:(k|0)/64|0;m=((c|0)==0?g:c)&255;f[a+4568>>2]=k;f[a+4572>>2]=0;d[a+4576>>0]=m;d[a+4577>>0]=1;d[a+4578>>0]=0;f[a+4580>>2]=k;f[a+4584>>2]=1;d[a+4588>>0]=m;d[a+4589>>0]=1;d[a+4590>>0]=0;f[a+4592>>2]=0;l=j;return}function Pt(a,b,c,e,g){a=a|0;b=b|0;c=c|0;e=e|0;g=g|0;var h=0,i=0;i=a+88|0;h=f[b>>2]|0;f[b>>2]=0;b=f[i>>2]|0;f[i>>2]=h;if(b)fx[f[(f[b>>2]|0)+4>>2]&255](b);i=e+4|0;h=f[i>>2]|0;d[a+4620>>0]=g&1;b=a+156|0;f[b>>2]=f[c>>2];f[b+4>>2]=f[c+4>>2];f[b+8>>2]=f[c+8>>2];f[b+12>>2]=f[c+12>>2];Cd(a,e);Qt(a);b=f[a+116>>2]|0;a=f[a+112>>2]|0;while(1){g=b+-1|0;c=(d[g>>0]|0)==-1?7:8;if((a|0)<(c|0))break;else{b=g;a=a-c|0}}b=b-h|0;g=f[i>>2]|0;if(!g)return;f[i>>2]=g+b;e=e+8|0;f[e>>2]=(f[e>>2]|0)-b;return}function Qt(a){a=a|0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=l;l=l+32|0;C=A+12|0;z=A;j=a+172|0;y=(f[j>>2]|0)+4|0;if((f[a+28>>2]|0)==1)k=f[a+20>>2]|0;else k=1;b=ca(k<<1,y)|0;f[C>>2]=0;D=C+4|0;f[D>>2]=0;f[C+8>>2]=0;a:do if(b){if(!((b|0)<0?(r=0,ka(178,C|0),B=r,r=0,B&1):0))x=6;if((x|0)==6?(r=0,c=na(67,b|0)|0,B=r,r=0,!(B&1)):0){f[D>>2]=c;f[C>>2]=c;f[C+8>>2]=c+b;while(1){d[c>>0]=0;c=(f[D>>2]|0)+1|0;f[D>>2]=c;b=b+-1|0;if(!b)break a}}c=Qa()|0;b=f[C>>2]|0;if(!b)_a(c|0);if((f[D>>2]|0)!=(b|0))f[D>>2]=b;Ju(b);_a(c|0)}while(0);f[z>>2]=0;B=z+4|0;f[B>>2]=0;f[z+8>>2]=0;do if(!k)x=19;else{if(!(k>>>0>1073741823?(r=0,ka(178,z|0),w=r,r=0,w&1):0))x=17;if((x|0)==17?(e=k<<2,r=0,g=na(67,e|0)|0,w=r,r=0,!(w&1)):0){f[z>>2]=g;x=g+(k<<2)|0;f[z+8>>2]=x;ws(g|0,0,e|0)|0;f[B>>2]=x;x=19;break}c=Qa()|0;b=f[z>>2]|0;e=b;if(b){g=f[B>>2]|0;if((g|0)!=(b|0))f[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);Ju(b)}}while(0);if((x|0)==19){m=a+8|0;b=f[m>>2]|0;a:do if((b|0)>0){n=a+4596|0;o=ca(k,y)|0;p=o+1|0;q=a+4600|0;s=a+160|0;t=a+168|0;u=a+164|0;v=a+156|0;w=a+88|0;i=a+4592|0;if((k|0)>0)h=0;else{h=0;while(1){g=f[C>>2]|0;c=g+1|0;f[n>>2]=c;e=g+p|0;f[q>>2]=e;if(!(h&1))c=p;else{f[n>>2]=e;f[q>>2]=c;c=1}k=f[s>>2]|0;if((k|0)<=(h|0)?(h|0)<((f[t>>2]|0)+k|0):0){k=f[w>>2]|0;r=0;Da(f[(f[k>>2]|0)+8>>2]|0,k|0,g+(c+((f[v>>2]|0)-o))|0,f[u>>2]|0,y|0);k=r;r=0;if(k&1)break;b=f[m>>2]|0}h=h+1|0;if((h|0)>=(b|0)){x=50;break a}}c=Qa()|0;break}b:while(1){c=f[C>>2]|0;b=c+1|0;f[n>>2]=b;c=c+p|0;f[q>>2]=c;if(h&1){f[n>>2]=c;f[q>>2]=b;b=c}g=f[z>>2]|0;c=b;e=0;do{f[i>>2]=f[g+(e<<2)>>2];x=f[j>>2]|0;d[c+x>>0]=d[c+(x+-1)>>0]|0;d[(f[q>>2]|0)+-1>>0]=d[f[n>>2]>>0]|0;r=0;la(83,a|0,0);x=r;r=0;if(x&1){x=38;break b}g=f[z>>2]|0;f[g+(e<<2)>>2]=f[i>>2];c=(f[n>>2]|0)+y|0;f[n>>2]=c;b=f[q>>2]|0;f[q>>2]=b+y;e=e+1|0}while((e|0)<(k|0));x=f[s>>2]|0;if(((x|0)<=(h|0)?(h|0)<((f[t>>2]|0)+x|0):0)?(x=f[w>>2]|0,r=0,Da(f[(f[x>>2]|0)+8>>2]|0,x|0,b+(y+((f[v>>2]|0)-o))|0,f[u>>2]|0,y|0),x=r,r=0,x&1):0){x=30;break}h=h+1|0;if((h|0)>=(f[m>>2]|0)){x=50;break a}}if((x|0)==30){c=Qa()|0;break}else if((x|0)==38){c=Qa()|0;break}}else x=50;while(0);do if((x|0)==50){r=0;ka(183,a|0);a=r;r=0;if(a&1){c=Qa()|0;break}b=f[z>>2]|0;c=b;if(b){e=f[B>>2]|0;if((e|0)!=(b|0))f[B>>2]=e+(~((e+-4-c|0)>>>2)<<2);Ju(b)}b=f[C>>2]|0;if(!b){l=A;return}if((f[D>>2]|0)!=(b|0))f[D>>2]=b;Ju(b);l=A;return}while(0);b=f[z>>2]|0;e=b;if(b){g=f[B>>2]|0;if((g|0)!=(b|0))f[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);Ju(b)}}b=f[C>>2]|0;if(!b)_a(c|0);if((f[D>>2]|0)!=(b|0))f[D>>2]=b;Ju(b);_a(c|0)}function Rt(a,b){a=a|0;b=b|0;var c=0,e=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=a+4596|0;c=f[p>>2]|0;t=a+172|0;b=f[t>>2]|0;if((b|0)<=0)return;q=a+4600|0;r=a+4604|0;s=a+4592|0;k=c;i=g[c+-1>>0]|0;c=g[c>>0]|0;o=0;while(1){m=f[q>>2]|0;j=d[m+(o+-1)>>0]|0;n=j&255;h=o+1|0;e=g[k+h>>0]|0;l=f[r>>2]|0;k=c-i|0;i=i-n|0;l=((((d[l+(e-c)>>0]|0)*9|0)+(d[l+k>>0]|0)|0)*9|0)+(d[l+i>>0]|0)|0;m=m+o|0;if(!l){b=Tt(a,j,m,b-o|0)|0;c=b+o|0;if((c|0)!=(f[t>>2]|0)){n=Ut(a,n,g[(f[p>>2]|0)+c>>0]|0)|0;d[(f[q>>2]|0)+c>>0]=n;n=f[s>>2]|0;f[s>>2]=(n|0)<1?0:n+-1|0;b=b+1|0}h=b+o|0;e=f[p>>2]|0;c=g[e+(h+-1)>>0]|0;e=g[e+h>>0]|0}else{b=c-n>>31;if((b^i|0)<0)b=c;else b=n+((b^k|0)<0?0:k)|0;n=St(a,l,g[m>>0]|0,b,0)|0;d[(f[q>>2]|0)+o>>0]=n}b=f[t>>2]|0;if((b|0)<=(h|0))break;k=f[p>>2]|0;i=c;c=e;o=h}return}function St(a,b,c,g,h){a=a|0;b=b|0;c=c|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,s=0,t=0;t=b>>31;l=(t^b)-t|0;p=a+188+(l*12|0)+10|0;c=e[p>>1]|0;o=a+188+(l*12|0)|0;h=f[o>>2]|0;if((c|0)<(h|0))if((c<<1|0)<(h|0))if((c<<2|0)<(h|0))if((c<<3|0)<(h|0))if((c<<4|0)<(h|0)){b=5;while(1)if((c<>1]^t)-t+g|0;s=a+128|0;h=f[s>>2]|0;if((c&h|0)==(c|0))m=c;else m=h&~(c>>31);c=a+112|0;if((f[c>>2]|0)<8)Od(a);h=a+108|0;g=f[h>>2]|0;i=g>>>24;j=f[2832+(b<<11)+(i<<3)+4>>2]|0;if(!j){k=f[a+148>>2]|0;h=f[a+140>>2]|0;c=pg(a)|0;if((c|0)<(k+-1-h|0)){if(b)c=(qg(a,b)|0)+(c<>31^c>>1;if((((c|0)>-1?c:0-c|0)|0)>65535){c=Pa(16)|0;if((d[8]|0)==0?(Ka(8)|0)!=0:0){nb(72,35648,q|0)|0;Sa(8)}r=0;za(7,c|0,5,35648);a=r;r=0;if(a&1){a=Qa()|0;Oa(c|0);_a(a|0)}else ob(c|0,824,96)}}else{f[c>>2]=(f[c>>2]|0)-j;f[h>>2]=g<>2]|0}k=a+136|0;g=f[k>>2]|0;if(!b){if(!g)h=(f[a+188+(l*12|0)+4>>2]<<1)+-1+(e[p>>1]|0)>>31;else h=0;j=h^c}else j=c;b=f[a+152>>2]|0;h=(f[o>>2]|0)+((j|0)>-1?j:0-j|0)|0;i=a+188+(l*12|0)+4|0;c=(f[i>>2]|0)+(ca(g<<1|1,j)|0)|0;g=e[p>>1]|0;if((g|0)==(b|0)){h=h>>1;c=c>>1;g=b>>1}f[o>>2]=h;b=g+1|0;e[p>>1]=b;h=b+c|0;if((h|0)>=1){if((c|0)>0){c=c-b|0;p=e[n>>1]|0;e[n>>1]=(p<<16>>16<127&1)+(p&65535);c=(c|0)>0?0:c}}else{c=e[n>>1]|0;e[n>>1]=(c&65535)-(c<<16>>16>-128&1);c=(h|0)>(~g|0)?h:0-g|0}f[i>>2]=c;b=f[k>>2]|0;g=b<<1|1;h=(ca(g,(j^t)-t|0)|0)+m|0;if((h|0)>=(0-b|0)){c=f[s>>2]|0;if((c+b|0)<(h|0))h=h-(ca(f[a+132>>2]|0,g)|0)|0}else{h=(ca(f[a+132>>2]|0,g)|0)+h|0;c=f[s>>2]|0}if((h&c|0)==(h|0)){a=h;a=a&255;return a|0}a=c&~(h>>31);a=a&255;return a|0}function Tt(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;j=a+112|0;k=a+108|0;l=a+4592|0;g=f[j>>2]|0;h=0;while(1){if((g|0)<1){Od(a);g=f[j>>2]|0}i=f[k>>2]|0;g=g+-1|0;f[j>>2]=g;f[k>>2]=i<<1;if((i|0)>=0){m=8;break}i=f[l>>2]|0;n=1<>2];o=e-h|0;o=(n|0)<(o|0)?n:o;h=o+h|0;if((o|0)==(n|0))f[l>>2]=(i|0)>30?31:i+1|0;if((h|0)==(e|0)){g=e;break}}if((m|0)==8)if((h|0)!=(e|0)){g=f[l>>2]|0;if((g+-4|0)>>>0<28)g=qg(a,f[36476+(g<<2)>>2]|0)|0;else g=0;g=g+h|0;if((g|0)>(e|0)){g=Pa(16)|0;if((d[8]|0)==0?(Ka(8)|0)!=0:0){nb(72,35648,q|0)|0;Sa(8)}r=0;za(7,g|0,5,35648);o=r;r=0;if(o&1){o=Qa()|0;Oa(g|0);_a(o|0)}else ob(g|0,824,96)}}else g=e;if((g|0)<=0)return g|0;ws(c|0,b|0,g|0)|0;return g|0}function Ut(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0;g=b-c|0;h=a+128|0;d=a+136|0;if((((g|0)>-1?g:0-g|0)|0)>(f[d>>2]|0)){b=ca(Vt(a,a+4568|0)|0,c-b>>31|1)|0;e=f[d>>2]|0;g=e<<1|1;b=(ca(b,g)|0)+c|0;if((b|0)>=(0-e|0)){d=f[h>>2]|0;if((d+e|0)<(b|0))b=b-(ca(f[a+132>>2]|0,g)|0)|0}else{b=(ca(f[a+132>>2]|0,g)|0)+b|0;d=f[h>>2]|0}if((b&d|0)==(b|0)){a=b;a=a&255;return a|0}a=d&~(b>>31);a=a&255;return a|0}else{c=Vt(a,a+4580|0)|0;g=f[d>>2]|0;e=g<<1|1;b=(ca(e,c)|0)+b|0;if((b|0)>=(0-g|0)){d=f[h>>2]|0;if((d+g|0)<(b|0))b=b-(ca(f[a+132>>2]|0,e)|0)|0}else{b=(ca(f[a+132>>2]|0,e)|0)+b|0;d=f[h>>2]|0}if((b&d|0)==(b|0)){a=b;a=a&255;return a|0}a=d&~(b>>31);a=a&255;return a|0}return 0}function Vt(a,b){a=a|0;b=b|0;var c=0,e=0,h=0,i=0,j=0,k=0,l=0,m=0;m=b+9|0;c=g[m>>0]|0;i=b+4|0;h=(ca(c>>>1,f[i>>2]|0)|0)+(f[b>>2]|0)|0;if((c|0)<(h|0)){e=0;do{c=c<<1;e=e+1|0}while((c|0)<(h|0))}else e=0;j=f[a+148>>2]|0;k=f[36476+(f[a+4592>>2]<<2)>>2]|0;c=f[a+140>>2]|0;h=pg(a)|0;do if((h|0)<(j+-2-k-c|0))if(!e){e=f[i>>2]|0;a=e+h|0;c=a&1;a=(c+a|0)/2|0;l=8;break}else{k=(qg(a,e)|0)+(h<>2]|0;h=k+e|0;j=h&1;c=j;i=1;h=(j+h|0)/2|0;break}else{h=(qg(a,c)|0)+1|0;j=f[i>>2]|0;a=h+j|0;c=a&1;a=(c+a|0)/2|0;if(!e){e=j;l=8}else{k=h;i=1;h=a;e=j}}while(0);if((l|0)==8){k=h;i=g[b+10>>0]<<1>>>0>=(g[m>>0]|0)>>>0;h=a}h=(c|0)!=0^i?h:0-h|0;if((h|0)<0){l=b+10|0;d[l>>0]=(g[l>>0]|0)+1}c=(k+1-e>>1)+(f[b>>2]|0)|0;f[b>>2]=c;e=d[m>>0]|0;if(e<<24>>24!=(d[b+8>>0]|0)){b=e;b=b&255;b=b+1|0;b=b&255;d[m>>0]=b;return h|0}f[b>>2]=c>>1;l=(e&255)>>>1;d[m>>0]=l;b=b+10|0;d[b>>0]=(g[b>>0]|0)>>>1;b=l;b=b&255;b=b+1|0;b=b&255;d[m>>0]=b;return h|0}function Wt(a){a=a|0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;e=p;o=a+136|0;a:do if(!(f[o>>2]|0)){c=f[a+128>>2]|0;b=a+144|0;if((((c|0)==((1<>2])+-1|0)?(ju(e,c,0),(f[e+4>>2]|0)==(f[a+176>>2]|0)):0)?(f[e+8>>2]|0)==(f[a+180>>2]|0):0)?(f[e+12>>2]|0)==(f[a+184>>2]|0):0)switch(f[b>>2]|0){case 8:{o=f[8900]|0;f[a+4604>>2]=o+(((f[8901]|0)-o|0)>>>1);l=p;return}case 10:{o=f[8903]|0;f[a+4604>>2]=o+(((f[8904]|0)-o|0)>>>1);l=p;return}case 12:{o=f[8906]|0;f[a+4604>>2]=o+(((f[8907]|0)-o|0)>>>1);l=p;return}case 16:{o=f[8909]|0;f[a+4604>>2]=o+(((f[8910]|0)-o|0)>>>1);l=p;return}default:break a}}else b=a+144|0;while(0);n=1<>2];c=a+4608|0;e=n<<1;g=a+4612|0;h=f[g>>2]|0;b=f[c>>2]|0;i=h-b|0;if(e>>>0<=i>>>0){if(e>>>0>>0?(j=b+e|0,(h|0)!=(j|0)):0)f[g>>2]=j}else{Qd(c,e-i|0);b=f[c>>2]|0}m=a+4604|0;f[m>>2]=b+n;b=0-n|0;if((n|0)<=(b|0)){l=p;return}j=a+184|0;k=a+180|0;i=a+176|0;h=b;do{b=f[j>>2]|0;if((h|0)>(0-b|0)){c=f[k>>2]|0;if((h|0)>(0-c|0)){e=f[i>>2]|0;if((h|0)>(0-e|0)){g=f[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((e|0)<=(h|0))if((c|0)>(h|0))b=2;else b=(b|0)>(h|0)?3:4;else b=1;else b=0;else b=-1}else b=-2}else b=-3}else b=-4;d[(f[m>>2]|0)+h>>0]=b;h=h+1|0}while((h|0)!=(n|0));l=p;return}function Xt(a){a=a|0;Ju(a);return}function Yt(a){a=a|0;return 50767}function Zt(a,b,c){a=a|0;b=b|0;c=c|0;Dm(a,50754,12);return}function $t(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;s=l;l=l+16|0;t=s;f[t>>2]=0;u=t+4|0;f[u>>2]=0;f[t+8>>2]=0;p=t+8|0;r=0;g=na(67,1)|0;o=r;r=0;a:do if((!(o&1)?(o=g+1|0,d[g>>0]=c,f[t>>2]=g,f[u>>2]=o,f[p>>2]=o,r=0,la(84,t|0,b&65535|0),o=r,r=0,!(o&1)):0)?(r=0,la(84,t|0,a&65535|0),o=r,r=0,!(o&1)):0){m=e&255;g=f[u>>2]|0;c=f[p>>2]|0;if(g>>>0>=c>>>0){b=f[t>>2]|0;a=b;i=g-a+1|0;if((i|0)<0){r=0;ka(178,t|0);o=r;r=0;if(o&1){q=52;break}a=f[t>>2]|0;c=f[p>>2]|0;b=a}k=b;g=c-k|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?i:g;c=f[u>>2]|0;j=c-k|0;if(!g){g=0;i=0}else q=12}else{j=f[u>>2]|0;g=2147483647;c=j;j=j-k|0;q=12}if((q|0)==12){r=0;i=na(67,g|0)|0;o=r;r=0;if(o&1){q=52;break}}d[i+j>>0]=m;n=c-k|0;o=i+(j-n)|0;zs(o|0,b|0,n|0)|0;f[t>>2]=o;f[u>>2]=i+(j+1);f[p>>2]=i+g;if(a)Ju(a)}else{d[g>>0]=m;f[u>>2]=(f[u>>2]|0)+1}b:do if((e|0)>0){o=0;while(1){o=o+1|0;n=o&255;g=f[u>>2]|0;b=f[p>>2]|0;if(g>>>0>=b>>>0){a=f[t>>2]|0;c=a;i=g-c+1|0;if((i|0)<0){r=0;ka(178,t|0);m=r;r=0;if(m&1)break;a=f[t>>2]|0;c=a;b=f[p>>2]|0}m=a;g=b-m|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?i:g;b=f[u>>2]|0;j=b-m|0;if(!g){k=0;i=0}else q=25}else{j=f[u>>2]|0;g=2147483647;b=j;j=j-m|0;q=25}if((q|0)==25){q=0;r=0;i=na(67,g|0)|0;k=r;r=0;if(k&1)break;else k=g}d[i+j>>0]=n;g=i+(j+1)|0;m=b-m|0;n=i+(j-m)|0;zs(n|0,a|0,m|0)|0;f[t>>2]=n;f[u>>2]=g;f[p>>2]=i+k;if(c){Ju(c);g=f[u>>2]|0}}else{d[g>>0]=n;g=(f[u>>2]|0)+1|0;f[u>>2]=g}c=f[p>>2]|0;if(g>>>0>=c>>>0){b=f[t>>2]|0;a=b;i=g-a+1|0;if((i|0)<0){r=0;ka(178,t|0);n=r;r=0;if(n&1)break;a=f[t>>2]|0;c=f[p>>2]|0;b=a}m=b;g=c-m|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?i:g;i=f[u>>2]|0;j=i-m|0;if(!g){k=0;c=0}else q=36}else{j=f[u>>2]|0;g=2147483647;i=j;j=j-m|0;q=36}if((q|0)==36){q=0;r=0;c=na(67,g|0)|0;n=r;r=0;if(n&1)break;else k=g}d[c+j>>0]=17;g=c+(j+1)|0;m=i-m|0;n=c+(j-m)|0;zs(n|0,b|0,m|0)|0;f[t>>2]=n;f[u>>2]=g;f[p>>2]=c+k;if(a){Ju(a);g=f[u>>2]|0}}else{d[g>>0]=17;g=(f[u>>2]|0)+1|0;f[u>>2]=g}c=f[p>>2]|0;if(g>>>0>=c>>>0){b=f[t>>2]|0;a=b;i=g-a+1|0;if((i|0)<0){r=0;ka(178,t|0);n=r;r=0;if(n&1)break;a=f[t>>2]|0;c=f[p>>2]|0;b=a}k=b;g=c-k|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?i:g;c=f[u>>2]|0;j=c-k|0;if(!g){g=0;i=0}else q=48}else{j=f[u>>2]|0;g=2147483647;c=j;j=j-k|0;q=48}if((q|0)==48){q=0;r=0;i=na(67,g|0)|0;n=r;r=0;if(n&1)break}d[i+j>>0]=0;m=c-k|0;n=i+(j-m)|0;zs(n|0,b|0,m|0)|0;f[t>>2]=n;f[u>>2]=i+(j+1);f[p>>2]=i+g;if(a)Ju(a)}else{d[g>>0]=0;f[u>>2]=(f[u>>2]|0)+1}if((o|0)>=(e|0))break b}h=Qa()|0;break a}while(0);r=0;j=na(67,20)|0;e=r;r=0;if(!(e&1)){f[j>>2]=36800;d[j+4>>0]=-9;a=j+8|0;f[a>>2]=0;i=j+12|0;f[i>>2]=0;c=j+16|0;f[c>>2]=0;g=f[u>>2]|0;e=f[t>>2]|0;b=g-e|0;do if((g|0)!=(e|0)){if(!((b|0)<0?(r=0,ka(178,a|0),e=r,r=0,e&1):0))q=62;if((q|0)==62?(r=0,h=na(67,b|0)|0,e=r,r=0,!(e&1)):0){f[i>>2]=h;f[a>>2]=h;f[c>>2]=h+b;g=f[t>>2]|0;c=f[u>>2]|0;if((g|0)==(c|0))break;do{d[h>>0]=d[g>>0]|0;h=(f[i>>2]|0)+1|0;f[i>>2]=h;g=g+1|0}while((g|0)!=(c|0));g=f[t>>2]|0;break}h=Qa()|0;g=f[a>>2]|0;if(g){if((f[i>>2]|0)!=(g|0))f[i>>2]=g;Ju(g)}Ju(j);break a}while(0);if(!g){l=s;return j|0}if((f[u>>2]|0)!=(g|0))f[u>>2]=g;Ju(g);l=s;return j|0}else q=52}else q=52;while(0);if((q|0)==52)h=Qa()|0;g=f[t>>2]|0;if(!g)_a(h|0);if((f[u>>2]|0)!=(g|0))f[u>>2]=g;Ju(g);_a(h|0);return 0}function _t(a){a=a|0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;u=l;l=l+32|0;q=u+28|0;w=u+16|0;t=u+4|0;s=u;f[w>>2]=0;x=w+4|0;f[x>>2]=0;f[w+8>>2]=0;o=Iu(5)|0;f[w>>2]=o;p=w+8|0;f[p>>2]=o+5;d[o>>0]=74;d[o+1>>0]=70;d[o+2>>0]=73;d[o+3>>0]=70;d[o+4>>0]=0;f[x>>2]=o+5;r=0;la(84,w|0,f[a>>2]&65535|0);o=r;r=0;a:do if(!(o&1)){m=f[a+4>>2]&255;b=f[x>>2]|0;e=f[p>>2]|0;if(b>>>0>=e>>>0){g=f[w>>2]|0;h=g;i=b-h+1|0;if((i|0)<0){r=0;ka(178,w|0);o=r;r=0;if(o&1){v=43;break}h=f[w>>2]|0;e=f[p>>2]|0;g=h}k=g;b=e-k|0;if(b>>>0<1073741823){b=b<<1;b=b>>>0>>0?i:b;e=f[x>>2]|0;j=e-k|0;if(!b){b=0;i=0}else v=10}else{j=f[x>>2]|0;b=2147483647;e=j;j=j-k|0;v=10}if((v|0)==10){r=0;i=na(67,b|0)|0;o=r;r=0;if(o&1){v=43;break}}d[i+j>>0]=m;n=e-k|0;o=i+(j-n)|0;zs(o|0,g|0,n|0)|0;f[w>>2]=o;f[x>>2]=i+(j+1);f[p>>2]=i+b;if(h)Ju(h)}else{d[b>>0]=m;f[x>>2]=(f[x>>2]|0)+1}r=0;la(84,w|0,f[a+8>>2]&65535|0);o=r;r=0;if(!(o&1)?(r=0,la(84,w|0,f[a+12>>2]&65535|0), o=r,r=0,!(o&1)):0){o=a+16|0;n=f[o>>2]&255;b=f[x>>2]|0;g=f[p>>2]|0;if(b>>>0>=g>>>0){h=f[w>>2]|0;e=h;i=b-e+1|0;if((i|0)<0){r=0;ka(178,w|0);m=r;r=0;if(m&1){v=43;break}h=f[w>>2]|0;e=h;g=f[p>>2]|0}m=h;b=g-m|0;if(b>>>0<1073741823){b=b<<1;b=b>>>0>>0?i:b;i=f[x>>2]|0;j=i-m|0;if(!b){k=0;g=0}else v=23}else{j=f[x>>2]|0;b=2147483647;i=j;j=j-m|0;v=23}if((v|0)==23){r=0;g=na(67,b|0)|0;k=r;r=0;if(k&1){v=43;break}else k=b}d[g+j>>0]=n;b=g+(j+1)|0;m=i-m|0;n=g+(j-m)|0;zs(n|0,h|0,m|0)|0;f[w>>2]=n;f[x>>2]=b;f[p>>2]=g+k;if(e){Ju(e);b=f[x>>2]|0}}else{d[b>>0]=n;b=(f[x>>2]|0)+1|0;f[x>>2]=b}n=a+20|0;m=f[n>>2]&255;e=f[p>>2]|0;if(b>>>0>=e>>>0){g=f[w>>2]|0;h=g;i=b-h+1|0;if((i|0)<0){r=0;ka(178,w|0);k=r;r=0;if(k&1){v=43;break}h=f[w>>2]|0;e=f[p>>2]|0;g=h}k=g;b=e-k|0;if(b>>>0<1073741823){b=b<<1;b=b>>>0>>0?i:b;e=f[x>>2]|0;j=e-k|0;if(!b){b=0;i=0}else v=34}else{j=f[x>>2]|0;b=2147483647;e=j;j=j-k|0;v=34}if((v|0)==34){r=0;i=na(67,b|0)|0;y=r;r=0;if(y&1){v=43;break}}d[i+j>>0]=m;m=e-k|0;y=i+(j-m)|0;zs(y|0,g|0,m|0)|0;f[w>>2]=y;f[x>>2]=i+(j+1);f[p>>2]=i+b;if(h)Ju(h)}else{d[b>>0]=m;f[x>>2]=(f[x>>2]|0)+1}b=f[o>>2]|0;do if((b|0)>0){if(!(f[a+24>>2]|0)){f[s>>2]=f[x>>2];y=0+(ca(b*3|0,f[n>>2]|0)|0)|0;r=0;f[q>>2]=f[s>>2];ya(15,w|0,q|0,0,y|0)|0;y=r;r=0;if(y&1){v=43;break a}else break}e=Pa(16)|0;r=0;za(5,t|0,50792,57);y=r;r=0;if(!(y&1)){r=0;b=xa(1)|0;y=r;r=0;if(!(y&1)?(r=0,Da(36,e|0,1,b|0,t|0),y=r,r=0,!(y&1)):0){r=0;za(6,e|0,824,96);r=0;c=0}else c=1;b=Qa()|0;Fm(t);if(!c){c=b;break a}}else b=Qa()|0;Oa(e|0);c=b;break a}while(0);r=0;j=na(67,20)|0;y=r;r=0;if(!(y&1)){f[j>>2]=36800;d[j+4>>0]=-32;h=j+8|0;f[h>>2]=0;i=j+12|0;f[i>>2]=0;e=j+16|0;f[e>>2]=0;b=f[x>>2]|0;y=f[w>>2]|0;g=b-y|0;do if((b|0)!=(y|0)){if(!((g|0)<0?(r=0,ka(178,h|0),y=r,r=0,y&1):0))v=53;if((v|0)==53?(r=0,c=na(67,g|0)|0,y=r,r=0,!(y&1)):0){f[i>>2]=c;f[h>>2]=c;f[e>>2]=c+g;b=f[w>>2]|0;e=f[x>>2]|0;if((b|0)==(e|0))break;do{d[c>>0]=d[b>>0]|0;c=(f[i>>2]|0)+1|0;f[i>>2]=c;b=b+1|0}while((b|0)!=(e|0));b=f[w>>2]|0;break}b=Qa()|0;c=f[h>>2]|0;if(c){if((f[i>>2]|0)!=(c|0))f[i>>2]=c;Ju(c)}Ju(j);v=44;break a}while(0);if(!b){l=u;return j|0}if((f[x>>2]|0)!=(b|0))f[x>>2]=b;Ju(b);l=u;return j|0}else v=43}else v=43}else v=43;while(0);if((v|0)==43){b=Qa()|0;v=44}if((v|0)==44)c=b;b=f[w>>2]|0;if(!b)_a(c|0);if((f[x>>2]|0)!=(b|0))f[x>>2]=b;Ju(b);_a(c|0);return 0}function au(a){a=a|0;var b=0,c=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;m=j;f[m>>2]=0;n=m+4|0;f[n>>2]=0;f[m+8>>2]=0;r=0;b=na(67,1)|0;i=r;r=0;a:do if((((((!(i&1)?(i=b+1|0,d[b>>0]=1,f[m>>2]=b,f[n>>2]=i,f[m+8>>2]=i,r=0,la(84,m|0,f[a>>2]&65535|0),i=r,r=0,!(i&1)):0)?(r=0,la(84,m|0,f[a+4>>2]&65535|0),i=r,r=0,!(i&1)):0)?(r=0,la(84,m|0,f[a+8>>2]&65535|0),i=r,r=0,!(i&1)):0)?(r=0,la(84,m|0,f[a+12>>2]&65535|0),i=r,r=0,!(i&1)):0)?(r=0,la(84,m|0,f[a+16>>2]&65535|0),i=r,r=0,!(i&1)):0)?(r=0,k=na(67,20)|0,i=r,r=0,!(i&1)):0){f[k>>2]=36800;d[k+4>>0]=-8;g=k+8|0;f[g>>2]=0;i=k+12|0;f[i>>2]=0;a=k+16|0;f[a>>2]=0;b=f[n>>2]|0;o=f[m>>2]|0;e=b-o|0;do if((b|0)!=(o|0)){if(!((e|0)<0?(r=0,ka(178,g|0),o=r,r=0,o&1):0))h=11;if((h|0)==11?(r=0,c=na(67,e|0)|0,o=r,r=0,!(o&1)):0){f[i>>2]=c;f[g>>2]=c;f[a>>2]=c+e;b=f[m>>2]|0;a=f[n>>2]|0;if((b|0)==(a|0))break;do{d[c>>0]=d[b>>0]|0;c=(f[i>>2]|0)+1|0;f[i>>2]=c;b=b+1|0}while((b|0)!=(a|0));b=f[m>>2]|0;break}c=Qa()|0;b=f[g>>2]|0;if(b){if((f[i>>2]|0)!=(b|0))f[i>>2]=b;Ju(b)}Ju(k);break a}while(0);if(!b){l=j;return k|0}if((f[n>>2]|0)!=(b|0))f[n>>2]=b;Ju(b);l=j;return k|0}else h=25;while(0);if((h|0)==25)c=Qa()|0;b=f[m>>2]|0;if(!b)_a(c|0);if((f[n>>2]|0)!=(b|0))f[n>>2]=b;Ju(b);_a(c|0);return 0}function bu(a){a=a|0;var b=0,c=0,e=0,g=0,h=0,i=0;h=Iu(5)|0;d[h>>0]=109;d[h+1>>0]=114;d[h+2>>0]=102;d[h+3>>0]=120;d[h+4>>0]=a;r=0;g=na(67,20)|0;e=r;r=0;if(e&1){g=Qa()|0;Ju(h);_a(g|0)}f[g>>2]=36800;d[g+4>>0]=-24;a=g+8|0;f[a>>2]=0;b=g+12|0;f[b>>2]=0;c=g+16|0;f[c>>2]=0;r=0;e=na(67,5)|0;i=r;r=0;if(!(i&1)){f[b>>2]=e;f[a>>2]=e;f[c>>2]=e+5;d[e>>0]=109;i=(f[b>>2]|0)+1|0;f[b>>2]=i;e=h+1|0;d[i>>0]=d[e>>0]|0;i=(f[b>>2]|0)+1|0;f[b>>2]=i;e=e+1|0;d[i>>0]=d[e>>0]|0;i=(f[b>>2]|0)+1|0;f[b>>2]=i;e=e+1|0;d[i>>0]=d[e>>0]|0;i=(f[b>>2]|0)+1|0;f[b>>2]=i;d[i>>0]=d[e+1>>0]|0;f[b>>2]=(f[b>>2]|0)+1;Ju(h);return g|0}i=Qa()|0;Ju(g);Ju(h);_a(i|0);return 0}function cu(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0;v=l;l=l+16|0;w=v;f[w>>2]=0;x=w+4|0;f[x>>2]=0;f[w+8>>2]=0;t=w+8|0;r=0;g=na(67,1)|0;s=r;r=0;a:do if(!(s&1)){j=g+1|0;s=j;d[g>>0]=b;f[w>>2]=g;f[x>>2]=s;f[t>>2]=s;if((b|0)>0){i=j;s=0;do{q=s+a&255;if(i>>>0>=j>>>0){g=f[w>>2]|0;k=g;i=i-k+1|0;if((i|0)<0){r=0;ka(178,w|0);p=r;r=0;if(p&1){u=28;break}k=f[w>>2]|0;j=f[t>>2]|0;p=k}else p=g;o=p;g=j-o|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?i:g;j=f[x>>2]|0;m=j-o|0;if(!g){n=0;i=0}else u=13}else{m=f[x>>2]|0;g=2147483647;j=m;m=m-o|0;u=13}if((u|0)==13){u=0;r=0;i=na(67,g|0)|0;n=r;r=0;if(n&1){u=28;break}else n=g}d[i+m>>0]=q;g=i+(m+1)|0;o=j-o|0;q=i+(m-o)|0;zs(q|0,p|0,o|0)|0;f[w>>2]=q;f[x>>2]=g;f[t>>2]=i+n;if(k){Ju(k);g=f[x>>2]|0}}else{d[i>>0]=q;g=(f[x>>2]|0)+1|0;f[x>>2]=g}j=f[t>>2]|0;if(g>>>0>=j>>>0){k=f[w>>2]|0;i=k;m=g-i+1|0;if((m|0)<0){r=0;ka(178,w|0);q=r;r=0;if(q&1){u=28;break}k=f[w>>2]|0;i=k;j=f[t>>2]|0}o=k;g=j-o|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?m:g;m=f[x>>2]|0;j=m-o|0;if(!g){g=0;n=0}else u=24}else{j=f[x>>2]|0;g=2147483647;m=j;j=j-o|0;u=24}if((u|0)==24){u=0;r=0;n=na(67,g|0)|0;q=r;r=0;if(q&1){u=28;break}}d[n+j>>0]=0;p=m-o|0;q=n+(j-p)|0;zs(q|0,k|0,p|0)|0;f[w>>2]=q;f[x>>2]=n+(j+1);f[t>>2]=n+g;if(i)Ju(i)}else{d[g>>0]=0;f[x>>2]=(f[x>>2]|0)+1}s=s+1|0;i=f[x>>2]|0;j=f[t>>2]|0}while((s|0)<(b|0));if((u|0)==28){h=Qa()|0;break}g=c&255;if(i>>>0>>0){d[i>>0]=g;i=(f[x>>2]|0)+1|0;f[x>>2]=i}else u=37}else{i=j;g=c&255;u=37}if((u|0)==37){k=f[w>>2]|0;m=k;n=i-m+1|0;if((n|0)<0){r=0;ka(178,w|0);c=r;r=0;if(c&1){u=29;break}m=f[w>>2]|0;j=f[t>>2]|0;k=m}q=k;i=j-q|0;if(i>>>0<1073741823){i=i<<1;i=i>>>0>>0?n:i;n=f[x>>2]|0;o=n-q|0;if(!i){p=0;j=0}else u=43}else{o=f[x>>2]|0;i=2147483647;n=o;o=o-q|0;u=43}if((u|0)==43){r=0;j=na(67,i|0)|0;c=r;r=0;if(c&1){u=29;break}else p=i}d[j+o>>0]=g;i=j+(o+1)|0;a=n-q|0;c=j+(o-a)|0;zs(c|0,k|0,a|0)|0;f[w>>2]=c;f[x>>2]=i;f[t>>2]=j+p;if(m){Ju(m);i=f[x>>2]|0}}q=e&255;g=f[t>>2]|0;if(i>>>0>=g>>>0){j=f[w>>2]|0;k=j;i=i-k+1|0;if((i|0)<0){r=0;ka(178,w|0);e=r;r=0;if(e&1){u=29;break}k=f[w>>2]|0;g=f[t>>2]|0;j=k}p=j;g=g-p|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?i:g;m=f[x>>2]|0;n=m-p|0;if(!g){o=0;i=0}else u=54}else{n=f[x>>2]|0;g=2147483647;m=n;n=n-p|0;u=54}if((u|0)==54){r=0;i=na(67,g|0)|0;e=r;r=0;if(e&1){u=29;break}else o=g}d[i+n>>0]=q;g=i+(n+1)|0;c=m-p|0;e=i+(n-c)|0;zs(e|0,j|0,c|0)|0;f[w>>2]=e;f[x>>2]=g;f[t>>2]=i+o;if(k){Ju(k);g=f[x>>2]|0}}else{d[i>>0]=q;g=(f[x>>2]|0)+1|0;f[x>>2]=g}i=f[t>>2]|0;if(g>>>0>=i>>>0){j=f[w>>2]|0;k=j;m=g-k+1|0;if((m|0)<0){r=0;ka(178,w|0);e=r;r=0;if(e&1){u=29;break}k=f[w>>2]|0;i=f[t>>2]|0;j=k}o=j;g=i-o|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?m:g;i=f[x>>2]|0;n=i-o|0;if(!g){g=0;m=0}else u=65}else{n=f[x>>2]|0;g=2147483647;i=n;n=n-o|0;u=65}if((u|0)==65){r=0;m=na(67,g|0)|0;e=r;r=0;if(e&1){u=29;break}}d[m+n>>0]=0;c=i-o|0;e=m+(n-c)|0;zs(e|0,j|0,c|0)|0;f[w>>2]=e;f[x>>2]=m+(n+1);f[t>>2]=m+g;if(k)Ju(k)}else{d[g>>0]=0;f[x>>2]=(f[x>>2]|0)+1}r=0;n=na(67,20)|0;t=r;r=0;if(!(t&1)){f[n>>2]=36800;d[n+4>>0]=-38;k=n+8|0;f[k>>2]=0;m=n+12|0;f[m>>2]=0;i=n+16|0;f[i>>2]=0;g=f[x>>2]|0;t=f[w>>2]|0;j=g-t|0;do if((g|0)!=(t|0)){if(!((j|0)<0?(r=0,ka(178,k|0),t=r,r=0,t&1):0))u=72;if((u|0)==72?(r=0,h=na(67,j|0)|0,t=r,r=0,!(t&1)):0){f[m>>2]=h;f[k>>2]=h;f[i>>2]=h+j;g=f[w>>2]|0;i=f[x>>2]|0;if((g|0)==(i|0))break;do{d[h>>0]=d[g>>0]|0;h=(f[m>>2]|0)+1|0;f[m>>2]=h;g=g+1|0}while((g|0)!=(i|0));g=f[w>>2]|0;break}h=Qa()|0;g=f[k>>2]|0;if(g){if((f[m>>2]|0)!=(g|0))f[m>>2]=g;Ju(g)}Ju(n);break a}while(0);if(!g){l=v;return n|0}if((f[x>>2]|0)!=(g|0))f[x>>2]=g;Ju(g);l=v;return n|0}else u=29}else u=29;while(0);if((u|0)==29)h=Qa()|0;g=f[w>>2]|0;if(!g)_a(h|0);if((f[x>>2]|0)!=(g|0))f[x>>2]=g;Ju(g);_a(h|0);return 0}function du(a,b){a=a|0;b=b|0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;n=(b&65535)>>>8&255;o=a+4|0;c=f[o>>2]|0;p=a+8|0;e=f[p>>2]|0;if(c>>>0>=e>>>0){g=f[a>>2]|0;h=g;i=c-h+1|0;if((i|0)<0){Gu(a);h=f[a>>2]|0;e=f[p>>2]|0;g=h}m=g;c=e-m|0;if(c>>>0<1073741823){c=c<<1;c=c>>>0>>0?i:c;i=f[o>>2]|0;e=i-m|0;if(!c){l=0;k=0;j=e;c=i}else q=8}else{e=f[o>>2]|0;c=2147483647;i=e;e=e-m|0;q=8}if((q|0)==8){l=c;k=Iu(c)|0;j=e;c=i}d[k+j>>0]=n;e=k+(j+1)|0;m=c-m|0;n=k+(j-m)|0;zs(n|0,g|0,m|0)|0;f[a>>2]=n;f[o>>2]=e;f[p>>2]=k+l;if(h){Ju(h);e=f[o>>2]|0}}else{d[c>>0]=n;e=(f[o>>2]|0)+1|0;f[o>>2]=e}m=b&255;c=f[p>>2]|0;if(e>>>0>>0){d[e>>0]=m;f[o>>2]=(f[o>>2]|0)+1;return}g=f[a>>2]|0;h=g;e=e-h+1|0;if((e|0)<0){Gu(a);h=f[a>>2]|0;c=f[p>>2]|0;g=h}l=g;c=c-l|0;if(c>>>0<1073741823){c=c<<1;c=c>>>0>>0?e:c;i=f[o>>2]|0;e=i-l|0;if(!c){k=0;j=0;c=i}else q=18}else{e=f[o>>2]|0;c=2147483647;i=e;e=e-l|0;q=18}if((q|0)==18){k=c;j=Iu(c)|0;c=i}d[j+e>>0]=m;b=c-l|0;q=j+(e-b)|0;zs(q|0,g|0,b|0)|0;f[a>>2]=q;f[o>>2]=j+(e+1);f[p>>2]=j+k;if(!h)return;Ju(h);return}function eu(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;g=f[a>>2]|0;q=f[b>>2]|0;p=q;k=g;n=c;l=e-n|0;if((l|0)<=0){r=q;return r|0}o=a+8|0;b=f[o>>2]|0;r=a+4|0;m=f[r>>2]|0;h=m;if((l|0)<=(b-h|0)){j=h-p|0;if((l|0)>(j|0)){i=c+j|0;if((i|0)==(e|0))b=m;else{h=i;b=m;do{d[b>>0]=d[h>>0]|0;b=(f[r>>2]|0)+1|0;f[r>>2]=b;h=h+1|0}while((h|0)!=(e|0))}if((j|0)>0)j=b;else{r=q;return r|0}}else{j=m;i=e}g=j-(g+(l-k+p))|0;b=q+g|0;if(b>>>0>>0){h=j;do{d[h>>0]=d[b>>0]|0;b=b+1|0;h=(f[r>>2]|0)+1|0;f[r>>2]=h}while((b|0)!=(m|0))}Bs(j+(0-g)|0,q|0,g|0)|0;Bs(q|0,c|0,i-n|0)|0;r=q;return r|0}h=h-k+l|0;if((h|0)<0){Gu(a);b=f[o>>2]|0;g=f[a>>2]|0}i=g;b=b-i|0;if(b>>>0<1073741823){b=b<<1;b=b>>>0>>0?h:b;h=p-i|0;if(!b){i=0;l=0}else j=15}else{b=2147483647;h=p-i|0;j=15}if((j|0)==15){i=b;l=Iu(b)|0}k=l+h|0;b=k;j=l+i|0;if((c|0)!=(e|0)){g=c;i=k;do{d[i>>0]=d[g>>0]|0;i=b+1|0;b=i;g=g+1|0}while((g|0)!=(e|0));g=f[a>>2]|0}c=p-g|0;e=l+(h-c)|0;zs(e|0,g|0,c|0)|0;p=(f[r>>2]|0)-p|0;c=b;zs(c|0,q|0,p|0)|0;b=f[a>>2]|0;f[a>>2]=e;f[r>>2]=c+p;f[o>>2]=j;if(!b){r=k;return r|0}Ju(b);r=k;return r|0}function fu(a){a=a|0;var b=0;f[a>>2]=36800;b=f[a+8>>2]|0;if(!b)return;a=a+12|0;if((f[a>>2]|0)!=(b|0))f[a>>2]=b;Ju(b);return}function gu(a){a=a|0;var b=0,c=0;f[a>>2]=36800;b=f[a+8>>2]|0;if(!b){Ju(a);return}c=a+12|0;if((f[c>>2]|0)!=(b|0))f[c>>2]=b;Ju(b);Ju(a);return}function hu(a,b){a=a|0;b=b|0;var c=0,e=0,g=0;iu(b,-1);iu(b,d[a+4>>0]|0);g=a+12|0;e=a+8|0;a=(f[g>>2]|0)-(f[e>>2]|0)+2|0;iu(b,(a&65535)>>>8&255);iu(b,a&255);a=f[e>>2]|0;if((f[g>>2]|0)==(a|0))return;else c=0;do{iu(b,d[a+c>>0]|0);c=c+1|0;a=f[e>>2]|0}while(c>>>0<((f[g>>2]|0)-a|0)>>>0);return}function iu(a,b){a=a|0;b=b|0;var c=0,e=0,g=0;g=f[a+4>>2]|0;if(g){c=g+24|0;e=f[c>>2]|0;if((e|0)==(f[g+28>>2]|0)){px[f[(f[g>>2]|0)+52>>2]&63](g,b&255)|0;return}else{f[c>>2]=e+1;d[e>>0]=b;return}}c=a+16|0;e=f[c>>2]|0;if(e>>>0<(f[a+12>>2]|0)>>>0){f[c>>2]=e+1;d[(f[a+8>>2]|0)+e>>0]=b;return}c=Pa(16)|0;r=0;e=xa(1)|0;b=r;r=0;if(b&1){b=Qa()|0;Oa(c|0);_a(b|0)}r=0;za(7,c|0,4,e|0);b=r;r=0;if(b&1){b=Qa()|0;Oa(c|0);_a(b|0)}else ob(c|0,824,96)}function ju(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;e=(b|0)<4095?(b+128|0)/256|0:16;g=(c*3|0)+2+e|0;d=c+1|0;g=(g|0)<(d|0)|(g|0)>(b|0)?d:g;f[a+4>>2]=g;d=(e<<2|3)+(c*5|0)|0;d=(d|0)>(b|0)|(d|0)<(g|0)?g:d;f[a+8>>2]=d;c=(c*7|0)+4+(e*17|0)|0;f[a+12>>2]=(c|0)>(b|0)|(c|0)<(d|0)?d:c;f[a>>2]=b;f[a+16>>2]=64;return}function ku(a,b){a=a|0;b=b|0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+128|0;j=m+100|0;e=m+16|0;c=m+112|0;k=m+4|0;n=m;g=e;h=a+20|0;i=g+84|0;do{f[g>>2]=f[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));f[e+16>>2]=f[a+4>>2];h=Xb(c,e,a+56|0)|0;c=f[(f[h>>2]|0)+16>>2]|0;a=a+8|0;r=0;f[j>>2]=f[a>>2];f[j+4>>2]=f[a+4>>2];f[j+8>>2]=f[a+8>>2];c=ua(c|0,h|0,j|0)|0;a=r;r=0;do if(a&1)c=Qa()|0;else{g=b+4|0;f[k>>2]=f[g>>2];f[k+4>>2]=f[g+4>>2];f[k+8>>2]=f[g+8>>2];g=b+16|0;a=f[g>>2]|0;j=k+8|0;f[j>>2]=(f[j>>2]|0)-a;j=k+4|0;f[j>>2]=(f[j>>2]|0)+a;j=f[(f[h>>2]|0)+12>>2]|0;f[n>>2]=c;r=0;c=ya(j|0,h|0,n|0,k|0,((d[b>>0]|0)==0?0:(f[b+8>>2]|0)+a|0)|0)|0;k=r;r=0;if(k&1){c=Qa()|0;e=f[n>>2]|0;f[n>>2]=0;if(!e)break;fx[f[(f[e>>2]|0)+4>>2]&255](e);break}e=f[n>>2]|0;f[n>>2]=0;if(e)fx[f[(f[e>>2]|0)+4>>2]&255](e);if(!(f[b+4>>2]|0))f[g>>2]=(f[g>>2]|0)+c;if(!h){l=m;return}fx[f[(f[h>>2]|0)+4>>2]&255](h);l=m;return}while(0);if(!h)_a(c|0);fx[f[(f[h>>2]|0)+4>>2]&255](h);_a(c|0)}function lu(a,b){a=a|0;b=b|0;f[a>>2]=f[b>>2];f[a+4>>2]=f[b+4>>2];f[a+8>>2]=f[b+8>>2];d[a+12>>0]=0;b=a+16|0;a=b+100|0;do{f[b>>2]=0;b=b+4|0}while((b|0)<(a|0));return}function mu(a,b){a=a|0;b=b|0;var c=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,x=0;v=l;l=l+32|0;u=v+4|0;p=v+16|0;w=v;nu(a);q=a+16|0;g=f[a+24>>2]|0;a:do if((g+-2|0)>>>0<=14){s=a+40|0;c=f[s>>2]|0;if(c>>>0>2)c=5;else{t=a+32|0;h=f[t>>2]|0;switch(h|0){case 0:{c=1;break a}case 4:{if((c|0)==2){c=2;break a}break}case 3:break;default:if(c){c=2;break a}}o=a+100|0;c=a+108|0;e=f[c>>2]|0;if((e|0)<1){e=f[q>>2]|0;f[c>>2]=e;c=f[a+20>>2]|0;f[a+112>>2]=c}else c=f[a+112>>2]|0;k=Hs(c|0,((c|0)<0)<<31>>31|0,e|0,((e|0)<0)<<31>>31|0)|0;j=(g+7|0)/8|0;j=Hs(k|0,G|0,j|0,((j|0)<0)<<31>>31|0)|0;k=b+4|0;c=f[k>>2]|0;i=b+8|0;if((c|0)!=0?(m=f[i>>2]|0,n=Hs(h|0,((h|0)<0)<<31>>31|0,j|0,G|0)|0,g=G,0<(g|0)|0==(g|0)&m>>>0>>0):0){c=Pa(16)|0;r=0;e=xa(1)|0;w=r;r=0;if(!(w&1)?(r=0,za(7,c|0,3,e|0),w=r,r=0,!(w&1)):0)ob(c|0,824,96);w=Qa()|0;Oa(c|0);_a(w|0)}m=a+52|0;n=a+12|0;if((h|0)>0)h=0;else{l=v;return}while(1){ou(a,(h|0)==0);e=Vb(p,q,m)|0;g=f[(f[e>>2]|0)+8>>2]|0;r=0;f[u>>2]=f[b>>2];f[u+4>>2]=f[b+4>>2];f[u+8>>2]=f[b+8>>2];g=ua(g|0,e|0,u|0)|0;x=r;r=0;if(x&1){g=32;break}x=f[(f[e>>2]|0)+16>>2]|0;f[w>>2]=g;r=0;ia(x|0,e|0,w|0,o|0,a|0,(d[n>>0]|0)!=0|0);x=r;r=0;if(x&1){g=30;break}g=f[w>>2]|0;f[w>>2]=0;if(g)fx[f[(f[g>>2]|0)+4>>2]&255](g);if(!c)c=0;else{c=c+j|0;f[k>>2]=c;f[i>>2]=(f[i>>2]|0)-j}g=(f[s>>2]|0)==0;h=(g&1)+h|0;if(e)fx[f[(f[e>>2]|0)+4>>2]&255](e);if(!g){g=34;break}if((h|0)>=(f[t>>2]|0)){g=34;break}}if((g|0)==30){c=Qa()|0;g=f[w>>2]|0;f[w>>2]=0;if(g)fx[f[(f[g>>2]|0)+4>>2]&255](g)}else if((g|0)==32){c=Qa()|0;if(!e){x=c;_a(x|0)}}else if((g|0)==34){l=v;return}fx[f[(f[e>>2]|0)+4>>2]&255](e);x=c;_a(x|0)}}else c=2;while(0);e=Pa(16)|0;r=0;g=xa(1)|0;x=r;r=0;if(!(x&1)?(r=0,za(7,e|0,c|0,g|0),x=r,r=0,!(x&1)):0)ob(e|0,824,96);x=Qa()|0;Oa(e|0);_a(x|0)}function nu(a){a=a|0;var b=0,c=0,d=0,e=0;if((ru(a)|0)<<24>>24!=-40){b=Pa(16)|0;r=0;c=xa(1)|0;e=r;r=0;if(!(e&1)?(r=0,za(7,b|0,5,c|0),e=r,r=0,!(e&1)):0)ob(b|0,824,96);e=Qa()|0;Oa(b|0);_a(e|0)}b=ru(a)|0;if(b<<24>>24==-38)return;while(1){d=((qu(a)|0)&255)<<8;d=d|(qu(a)|0)&255;b=su(a,b)|0;c=-2-b+d|0;if((c|0)<0)break;if((c|0)>0){b=d+-2-b|0;c=0;do{qu(a)|0;c=c+1|0}while((c|0)!=(b|0))}b=ru(a)|0;if(b<<24>>24==-38){e=8;break}}if((e|0)==8)return;b=Pa(16)|0;r=0;c=xa(1)|0;e=r;r=0;if(!(e&1)?(r=0,za(7,b|0,5,c|0),e=r,r=0,!(e&1)):0)ob(b|0,824,96);e=Qa()|0;Oa(b|0);_a(e|0)}function ou(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;if(!b){if((qu(a)|0)<<24>>24!=-1){b=Pa(16)|0;r=0;c=xa(1)|0;a=r;r=0;if(!(a&1)?(r=0,za(7,b|0,12,c|0),a=r,r=0,!(a&1)):0)ob(b|0,824,96);a=Qa()|0;Oa(b|0);_a(a|0)}if((qu(a)|0)<<24>>24!=-38){b=Pa(16)|0;r=0;c=xa(1)|0;a=r;r=0;if(!(a&1)?(r=0,za(7,b|0,5,c|0),a=r,r=0,!(a&1)):0)ob(b|0,824,96);a=Qa()|0;Oa(b|0);_a(a|0)}}qu(a)|0;qu(a)|0;c=qu(a)|0;d=c&255;do if(c<<24>>24==1){qu(a)|0;c=0;e=20}else{if((d|0)==(f[a+32>>2]|0)){b=qu(a)|0;if(!(c<<24>>24))break;else{c=0;e=20;break}}b=Pa(16)|0;r=0;c=xa(1)|0;a=r;r=0;if(!(a&1)?(r=0,za(7,b|0,2,c|0),a=r,r=0,!(a&1)):0)ob(b|0,824,96);a=Qa()|0;Oa(b|0);_a(a|0)}while(0);if((e|0)==20)while(1){qu(a)|0;c=c+1|0;b=qu(a)|0;if((c|0)==(d|0))break;else e=20}f[a+36>>2]=b&255;e=qu(a)|0;c=a+40|0;f[c>>2]=e&255;if((e&255)>=3){b=Pa(16)|0;r=0;c=xa(1)|0;a=r;r=0;if(!(a&1)?(r=0,za(7,b|0,5,c|0),a=r,r=0,!(a&1)):0)ob(b|0,824,96);a=Qa()|0;Oa(b|0);_a(a|0)}if((qu(a)|0)<<24>>24){b=Pa(16)|0;r=0;c=xa(1)|0;a=r;r=0;if(!(a&1)?(r=0,za(7,b|0,5,c|0),a=r,r=0,!(a&1)):0)ob(b|0,824,96);a=Qa()|0;Oa(b|0);_a(a|0)}d=a+28|0;if(f[d>>2]|0)return;b=f[a+108>>2]|0;if(!b)b=f[a+16>>2]|0;if(!(f[c>>2]|0))c=1;else c=f[a+32>>2]|0;e=ca(c,b)|0;f[d>>2]=ca(e,((f[a+24>>2]|0)+7|0)/8|0)|0;return}function pu(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if((c|0)<=0)return;n=b+4|0;o=b+8|0;q=0;do{p=qu(a)|0;e=f[n>>2]|0;g=f[o>>2]|0;if(e>>>0>=g>>>0){h=f[b>>2]|0;i=h;j=e-i+1|0;if((j|0)<0){Gu(b);i=f[b>>2]|0;g=f[o>>2]|0;h=i}m=h;e=g-m|0;if(e>>>0<1073741823){e=e<<1;e=e>>>0>>0?j:e;j=f[n>>2]|0;g=j-m|0;if(!e){l=0;k=0;e=j}else r=10}else{g=f[n>>2]|0;e=2147483647;j=g;g=g-m|0;r=10}if((r|0)==10){r=0;l=e;k=Iu(e)|0;e=j}d[k+g>>0]=p;m=e-m|0;p=k+(g-m)|0;zs(p|0,h|0,m|0)|0;f[b>>2]=p;f[n>>2]=k+(g+1);f[o>>2]=k+l;if(i)Ju(i)}else{d[e>>0]=p;f[n>>2]=(f[n>>2]|0)+1}q=q+1|0}while((q|0)!=(c|0));return}function qu(a){a=a|0;var b=0,c=0,e=0,h=0;c=f[a>>2]|0;if(c){a=c+12|0;b=f[a>>2]|0;if((b|0)==(f[c+16>>2]|0))a=ix[f[(f[c>>2]|0)+40>>2]&127](c)|0;else{f[a>>2]=b+1;a=g[b>>0]|0}h=a&255;return h|0}e=a+8|0;h=f[e>>2]|0;if(h){a=a+4|0;b=f[a>>2]|0;c=d[b>>0]|0;if(!b){h=c;return h|0}f[a>>2]=b+1;f[e>>2]=h+-1;h=c;return h|0}a=Pa(16)|0;r=0;b=xa(1)|0;h=r;r=0;if(h&1){h=Qa()|0;Oa(a|0);_a(h|0)}r=0;za(7,a|0,4,b|0);h=r;r=0;if(h&1){h=Qa()|0;Oa(a|0);_a(h|0)}else ob(a|0,824,96);return 0}function ru(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0;c=l;l=l+176|0;b=c+152|0;j=c+16|0;h=c;i=qu(a)|0;d=i&255;if(i<<24>>24==-1){do b=qu(a)|0;while(b<<24>>24==-1);l=c;return b|0}i=j+56|0;g=j+4|0;f[j>>2]=36160;f[i>>2]=36180;r=0;la(62,j+56|0,g|0);e=r;r=0;if(e&1){j=Qa()|0;cn(i);_a(j|0)}f[j+128>>2]=0;f[j+132>>2]=-1;f[j>>2]=36200;f[j+56>>2]=36220;r=0;ka(180,g|0);e=r;r=0;do if(e&1)b=Qa()|0;else{f[g>>2]=36236;e=j+36|0;f[e>>2]=0;f[e+4>>2]=0;f[e+8>>2]=0;f[e+12>>2]=0;f[j+52>>2]=16;f[b>>2]=0;f[b+4>>2]=0;f[b+8>>2]=0;r=0;la(63,g|0,b|0);c=r;r=0;if(c&1){j=Qa()|0;Fm(b);Fm(e);kn(g);b=j;break}Fm(b);f[j+((f[(f[j>>2]|0)+-12>>2]|0)+76)>>2]=48;r=0;b=pa(28,j|0,50907,62)|0;c=r;r=0;if(!(c&1)?(c=b+((f[(f[b>>2]|0)+-12>>2]|0)+4)|0,f[c>>2]=f[c>>2]&-75|8,c=b+((f[(f[b>>2]|0)+-12>>2]|0)+4)|0,f[c>>2]=f[c>>2]|16384,f[b+((f[(f[b>>2]|0)+-12>>2]|0)+12)>>2]=2,r=0,ua(38,b|0,d|0)|0,d=r,r=0,!(d&1)):0){c=Pa(16)|0;r=0;la(64,h|0,g|0);d=r;r=0;if(!(d&1)){r=0;b=xa(1)|0;d=r;r=0;if(!(d&1)?(r=0,Da(36,c|0,12,b|0,h|0),d=r,r=0,!(d&1)):0){r=0;za(6,c|0,824,96);r=0;a=0}else a=1;b=Qa()|0;Fm(h);if(!a){h=b;f[j>>2]=36200;f[i>>2]=36220;f[g>>2]=36236;Fm(e);kn(g);cn(i);_a(h|0)}}else b=Qa()|0;Oa(c|0);h=b;f[j>>2]=36200;f[i>>2]=36220;f[g>>2]=36236;Fm(e);kn(g);cn(i);_a(h|0)}h=Qa()|0;f[j>>2]=36200;f[i>>2]=36220;f[g>>2]=36236;Fm(e);kn(g);cn(i);_a(h|0)}while(0);j=b;cn(i);_a(j|0);return 0}function su(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;c=l;l=l+320|0;i=c+300|0;m=c+152|0;j=c+288|0;n=c+16|0;k=c;switch(b<<24>>24){case-9:{f[a+24>>2]=(qu(a)|0)&255;o=((qu(a)|0)&255)<<8|(qu(a)|0)&255;f[a+16>>2]=((qu(a)|0)&255)<<8|(qu(a)|0)&255;f[a+20>>2]=o;f[a+32>>2]=(qu(a)|0)&255;o=6;l=c;return o|0}case-8:{o=tu(a)|0;l=c;return o|0}case-24:{o=uu(a)|0;l=c;return o|0}case-53:case-54:case-55:case-57:case-58:case-59:case-61:case-62:case-63:case-64:{h=m+56|0;e=m+4|0;f[m>>2]=36160;f[h>>2]=36180;r=0;la(62,m+56|0,e|0);n=r;r=0;if(n&1){o=Qa()|0;cn(h);_a(o|0)}f[m+128>>2]=0;f[m+132>>2]=-1;f[m>>2]=36200;f[m+56>>2]=36220;r=0;ka(180,e|0);n=r;r=0;do if(n&1)a=Qa()|0;else{f[e>>2]=36236;g=m+36|0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[m+52>>2]=16;f[i>>2]=0;f[i+4>>2]=0;f[i+8>>2]=0;r=0;la(63,e|0,i|0);n=r;r=0;if(n&1){a=Qa()|0;Fm(i);Fm(g);kn(e);break}Fm(i);r=0;a=pa(28,m|0,50970,26)|0;n=r;r=0;do if((!(n&1)?(r=0,d=ua(38,a|0,b&255|0)|0,n=r,r=0,!(n&1)):0)?(r=0,pa(28,d|0,50997,18)|0,n=r,r=0,!(n&1)):0){d=Pa(16)|0;r=0;la(64,j|0,e|0);n=r;r=0;if(!(n&1)){r=0;a=xa(1)|0;n=r;r=0;if(!(n&1)?(r=0,Da(36,d|0,10,a|0,j|0),n=r,r=0,!(n&1)):0){r=0;za(6,d|0,824,96);r=0;c=0}else c=1;a=Qa()|0;Fm(j);if(!c)break}else a=Qa()|0;Oa(d|0)}else o=20;while(0);if((o|0)==20)a=Qa()|0;f[m>>2]=36200;f[h>>2]=36220;f[e>>2]=36236;Fm(g);kn(e);cn(h);o=a;_a(o|0)}while(0);o=a;cn(h);_a(o|0)}case-25:case-32:case-2:{o=0;l=c;return o|0}default:{j=n+56|0;g=n+4|0;f[n>>2]=36160;f[j>>2]=36180;r=0;la(62,n+56|0,g|0);m=r;r=0;if(m&1){o=Qa()|0;cn(j);_a(o|0)}f[n+128>>2]=0;f[n+132>>2]=-1;f[n>>2]=36200;f[n+56>>2]=36220;r=0;ka(180,g|0);m=r;r=0;do if(m&1)a=Qa()|0;else{f[g>>2]=36236;h=n+36|0;f[h>>2]=0;f[h+4>>2]=0;f[h+8>>2]=0;f[h+12>>2]=0;f[n+52>>2]=16;f[i>>2]=0;f[i+4>>2]=0;f[i+8>>2]=0;r=0;la(63,g|0,i|0);m=r;r=0;if(m&1){a=Qa()|0;Fm(i);Fm(h);kn(g);break}Fm(i);r=0;a=pa(28,n|0,51016,20)|0;m=r;r=0;do if((!(m&1)?(r=0,e=ua(38,a|0,b&255|0)|0,m=r,r=0,!(m&1)):0)?(r=0,pa(28,e|0,51037,13)|0,m=r,r=0,!(m&1)):0){d=Pa(16)|0;r=0;la(64,k|0,g|0);m=r;r=0;if(!(m&1)){r=0;a=xa(1)|0;m=r;r=0;if(!(m&1)?(r=0,Da(36,d|0,11,a|0,k|0),m=r,r=0,!(m&1)):0){r=0;za(6,d|0,824,96);r=0;c=0}else c=1;a=Qa()|0;Fm(k);if(!c)break}else a=Qa()|0;Oa(d|0)}else o=40;while(0);if((o|0)==40)a=Qa()|0;f[n>>2]=36200;f[j>>2]=36220;f[g>>2]=36236;Fm(h);kn(g);cn(j);o=a;_a(o|0)}while(0);o=a;cn(j);_a(o|0)}}return 0}function tu(a){a=a|0;var b=0;if((qu(a)|0)<<24>>24!=1){a=1;return a|0}b=((qu(a)|0)&255)<<8;f[a+52>>2]=b|(qu(a)|0)&255;b=((qu(a)|0)&255)<<8;f[a+56>>2]=b|(qu(a)|0)&255;b=((qu(a)|0)&255)<<8;f[a+60>>2]=b|(qu(a)|0)&255;b=((qu(a)|0)&255)<<8;f[a+64>>2]=b|(qu(a)|0)&255;b=((qu(a)|0)&255)<<8;f[a+68>>2]=b|(qu(a)|0)&255;a=11;return a|0}function uu(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;c=l;l=l+16|0;e=c;f[e>>2]=0;g=e+4|0;f[g>>2]=0;f[e+8>>2]=0;r=0;za(9,a|0,e|0,4);b=r;r=0;a:do if(b&1)d=3;else{b=f[e>>2]|0;b:do if(!(Vw(b,51051,4)|0)){r=0;b=na(69,a|0)|0;h=r;r=0;if(h&1){d=3;break a}b=b&255;switch(b|0){case 3:case 2:case 1:case 0:{f[a+44>>2]=b;a=5;b=f[e>>2]|0;break b}case 5:case 4:{b=Pa(16)|0;r=0;a=xa(1)|0;h=r;r=0;if(!(h&1)?(r=0,za(7,b|0,7,a|0),h=r,r=0,!(h&1)):0){r=0;za(6,b|0,824,96);r=0;d=3;break a}a=Qa()|0;Oa(b|0);break a}default:{b=Pa(16)|0;r=0;a=xa(1)|0;h=r;r=0;if(!(h&1)?(r=0,za(7,b|0,5,a|0),h=r,r=0,!(h&1)):0){r=0;za(6,b|0,824,96);r=0;d=3;break a}a=Qa()|0;Oa(b|0);break a}}}else a=4;while(0);if(!b){l=c;return a|0}if((f[g>>2]|0)!=(b|0))f[g>>2]=b;Ju(b);l=c;return a|0}while(0);if((d|0)==3)a=Qa()|0;b=f[e>>2]|0;if(!b)_a(a|0);if((f[g>>2]|0)!=(b|0))f[g>>2]=b;Ju(b);_a(a|0);return 0}function vu(a){a=a|0;var b=0,c=0,d=0;d=f[(f[a>>2]|0)+-12>>2]|0;f[a+d>>2]=36200;b=a+(d+56)|0;f[b>>2]=36220;c=a+(d+4)|0;f[c>>2]=36236;Fm(a+(d+36)|0);kn(c);cn(b);return}function wu(a){a=a|0;return}function xu(a){a=a|0;Ju(a);return}function yu(a){a=a|0;d[a>>0]=0;a=a+4|0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;f[a+16>>2]=0;f[a+20>>2]=0;f[a+24>>2]=0;f[a+28>>2]=0;return}function zu(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0;e=l;l=l+16|0;g=e;b=bu(b)|0;f[g>>2]=b;c=a+28|0;d=f[c>>2]|0;if(d>>>0<(f[a+32>>2]|0)>>>0){f[d>>2]=b;f[c>>2]=d+4;f[g>>2]=0;l=e;return}r=0;la(57,a+24|0,g|0);a=r;r=0;if(a&1){b=Qa()|0;c=f[g>>2]|0;f[g>>2]=0;if(!c)_a(b|0);fx[f[(f[c>>2]|0)+4>>2]&255](c);_a(b|0)}else{b=f[g>>2]|0;f[g>>2]=0;if(!b){l=e;return}fx[f[(f[b>>2]|0)+4>>2]&255](b);l=e;return}}function Au(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0;d=a+4|0;f[d>>2]=f[b>>2];f[d+4>>2]=f[b+4>>2];f[d+8>>2]=f[b+8>>2];iu(a,-1);iu(a,-40);d=a+28|0;e=a+24|0;b=f[e>>2]|0;if((f[d>>2]|0)==(b|0)){iu(a,-1);iu(a,-39);a=a+16|0;a=f[a>>2]|0;return a|0}else c=0;do{g=f[b+(c<<2)>>2]|0;gx[f[(f[g>>2]|0)+8>>2]&127](g,a);c=c+1|0;b=f[e>>2]|0}while(c>>>0<(f[d>>2]|0)-b>>2>>>0);iu(a,-1);iu(a,-39);g=a+16|0;g=f[g>>2]|0;return g|0}function Bu(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;e=n+12|0;j=n+8|0;m=n+4|0;o=n;d=c+36|0;do if(((((f[d>>2]|0)==0?(f[c+40>>2]|0)==0:0)?(f[c+44>>2]|0)==0:0)?(f[c+48>>2]|0)==0:0)?(f[c+52>>2]|0)==0:0){d=f[c+8>>2]|0;if((d|0)<=12){g=a+28|0;h=a+32|0;break}ju(e,(1<>2]|0);d=au(e)|0;f[j>>2]=d;g=a+28|0;e=f[g>>2]|0;h=a+32|0;if(e>>>0<(f[h>>2]|0)>>>0){f[e>>2]=d;f[g>>2]=e+4;f[j>>2]=0;break}r=0;la(57,a+24|0,j|0);i=r;r=0;if(!(i&1)){d=f[j>>2]|0;f[j>>2]=0;if(!d)break;fx[f[(f[d>>2]|0)+4>>2]&255](d);break}c=Qa()|0;d=f[j>>2]|0;f[j>>2]=0;if(!d){o=c;_a(o|0)}fx[f[(f[d>>2]|0)+4>>2]&255](d);o=c;_a(o|0)}else k=6;while(0);do if((k|0)==6){d=au(d)|0;f[i>>2]=d;g=a+28|0;e=f[g>>2]|0;h=a+32|0;if(e>>>0<(f[h>>2]|0)>>>0){f[e>>2]=d;f[g>>2]=e+4;f[i>>2]=0;break}r=0;la(57,a+24|0,i|0);k=r;r=0;if(!(k&1)){d=f[i>>2]|0;f[i>>2]=0;if(!d)break;fx[f[(f[d>>2]|0)+4>>2]&255](d);break}c=Qa()|0;d=f[i>>2]|0;f[i>>2]=0;if(!d){o=c;_a(o|0)}fx[f[(f[d>>2]|0)+4>>2]&255](d);o=c;_a(o|0)}while(0);d=a+20|0;e=(f[d>>2]|0)+1|0;f[d>>2]=e;d=f[c+24>>2]|0;i=(d|0)==0?1:f[c+16>>2]|0;d=cu(e,i,f[c+20>>2]|0,d)|0;f[m>>2]=d;e=f[g>>2]|0;do if(e>>>0<(f[h>>2]|0)>>>0){f[e>>2]=d;f[g>>2]=e+4;f[m>>2]=0}else{r=0;la(57,a+24|0,m|0);k=r;r=0;if(!(k&1)){d=f[m>>2]|0;f[m>>2]=0;if(!d)break;fx[f[(f[d>>2]|0)+4>>2]&255](d);break}c=Qa()|0;d=f[m>>2]|0;f[m>>2]=0;if(!d){o=c;_a(o|0)}fx[f[(f[d>>2]|0)+4>>2]&255](d);o=c;_a(o|0)}while(0);j=Iu(104)|0;f[j>>2]=36820;f[j+4>>2]=i;e=j+8|0;f[e>>2]=f[b>>2];f[e+4>>2]=f[b+4>>2];f[e+8>>2]=f[b+8>>2];e=j+20|0;d=e+84|0;do{f[e>>2]=f[c>>2];e=e+4|0;c=c+4|0}while((e|0)<(d|0));f[o>>2]=j;c=f[g>>2]|0;if(c>>>0<(f[h>>2]|0)>>>0){f[c>>2]=j;f[g>>2]=c+4;f[o>>2]=0;l=n;return}r=0;la(57,a+24|0,o|0);a=r;r=0;if(a&1){c=Qa()|0;d=f[o>>2]|0;f[o>>2]=0;if(!d){o=c;_a(o|0)}fx[f[(f[d>>2]|0)+4>>2]&255](d);o=c;_a(o|0)}else{c=f[o>>2]|0;f[o>>2]=0;if(!c){l=n;return}fx[f[(f[c>>2]|0)+4>>2]&255](c);l=n;return}}function Cu(a,b,c,e,g,h,i,j,k,m,n){a=a|0;b=b|0;c=c|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+96|0;p=q;o=Qb(a,b,p,0)|0;if(o){g=o;l=q;return g|0}d[p+32>>0]=0;s=f[p+8>>2]|0;u=f[p>>2]|0;t=f[p+4>>2]|0;o=ca(t,u)|0;r=f[p+16>>2]|0;o=ca(ca(o,(s|0)<9?1:2)|0,r)|0;f[e>>2]=o;o=Cl(o)|0;f[c>>2]=o;f[g>>2]=u;f[h>>2]=t;f[i>>2]=s;f[j>>2]=f[p+12>>2];f[k>>2]=r;f[m>>2]=f[p+20>>2];f[n>>2]=f[p+24>>2];g=Rb(o,f[e>>2]|0,a,b,0,0)|0;l=q;return g|0}function Du(a,b,c,d,e,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0;n=l;l=l+96|0;k=n+4|0;h=n;m=k;o=m+84|0;do{f[m>>2]=0;m=m+4|0}while((m|0)<(o|0));f[k+16>>2]=g;f[k+8>>2]=e;f[k>>2]=c;f[k+4>>2]=d;f[i>>2]=Cl(b)|0;f[h>>2]=0;c=Pb(i,b,h,a,b,k,0)|0;f[j>>2]=f[h>>2];l=n;return c|0}function Eu(a,b){a=a|0;b=b|0;var c=0;c=l;l=l+16|0;f[c>>2]=b;b=f[9320]|0;Jw(b,a,c)|0;Bw(10,b)|0;Ja()}function Fu(a){a=a|0;Na(51337,51366,1164,51442)}function Gu(a){a=a|0;Na(51463,51486,303,51442)}function Hu(){var a=0,b=0;a=l;l=l+16|0;if(!(gb(37024,4)|0)){b=cb(f[9255]|0)|0;l=a;return b|0}else Eu(51562,a);return 0}function Iu(a){a=a|0;var b=0;b=(a|0)==0?1:a;a=Cl(b)|0;a:do if(!a){while(1){a=Ru()|0;if(!a)break;vx[a&7]();a=Cl(b)|0;if(a)break a}b=Pa(4)|0;f[b>>2]=36844;ob(b|0,592,78)}while(0);return a|0}function Ju(a){a=a|0;Dl(a);return}function Ku(a){a=a|0;Ju(a);return}function Lu(a){a=a|0;f[a>>2]=36844;return}function Mu(a){a=a|0;return}function Nu(a){a=a|0;Ju(a);return}function Ou(a){a=a|0;return 51611}function Pu(a){a=a|0;var b=0;b=l;l=l+16|0;r=0;Aa(a|0);a=r;r=0;if(!(a&1)){r=0;la(85,51626,b|0);r=0}a=Qa(0)|0;Ya(a|0)|0;r=0;la(85,51666,b+8|0);r=0;a=Qa(0)|0;r=0;Aa(3);b=r;r=0;if(b&1){b=Qa(0)|0;Mb(b)}else Mb(a)}function Qu(){var a=0,b=0,c=0;r=0;a=xa(2)|0;c=r;r=0;if(c&1){c=Qa(0)|0;Mb(c)}if(((a|0)!=0?(b=f[a>>2]|0,(b|0)!=0):0)?(c=b+48|0,(f[c>>2]&-256|0)==1126902528?(f[c+4>>2]|0)==1129074247:0):0)Pu(f[b+12>>2]|0);c=f[9208]|0;f[9208]=c+0;Pu(c)}function Ru(){var a=0;a=f[9214]|0;f[9214]=a+0;return a|0}function Su(a){a=a|0;return}function Tu(a){a=a|0;f[a>>2]=36868;Av(a+4|0);return}function Uu(a){a=a|0;Tu(a);Ju(a);return}function Vu(a){a=a|0;return f[a+4>>2]|0}function Wu(a){a=a|0;return}function Xu(a){a=a|0;f[a>>2]=36888;return}function Yu(a){a=a|0;return}function Zu(a){a=a|0;Ju(a);return}function $u(a){a=a|0;return 51716}function _u(a){a=a|0;return}function av(a){a=a|0;return}function bv(a){a=a|0;return}function cv(a){a=a|0;Ju(a);return}function dv(a){a=a|0;Ju(a);return}function ev(a){a=a|0;Ju(a);return}function fv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0;h=l;l=l+64|0;g=h;if((a|0)!=(b|0))if((b|0)!=0?(e=lv(b,656,672,0)|0,(e|0)!=0):0){b=g;d=b+56|0;do{f[b>>2]=0;b=b+4|0}while((b|0)<(d|0));f[g>>2]=e;f[g+8>>2]=a;f[g+12>>2]=-1;f[g+48>>2]=1;yx[f[(f[e>>2]|0)+28>>2]&63](e,g,f[c>>2]|0,1);if((f[g+24>>2]|0)==1){f[c>>2]=f[g+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function gv(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0;a=b+16|0;g=f[a>>2]|0;do if(g){if((g|0)!=(c|0)){e=b+36|0;f[e>>2]=(f[e>>2]|0)+1;f[b+24>>2]=2;d[b+54>>0]=1;break}a=b+24|0;if((f[a>>2]|0)==2)f[a>>2]=e}else{f[a>>2]=c;f[b+24>>2]=e;f[b+36>>2]=1}while(0);return}function hv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((a|0)==(f[b+8>>2]|0))gv(0,b,c,d);return}function iv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((a|0)==(f[b+8>>2]|0))gv(0,b,c,d);else{a=f[a+8>>2]|0;yx[f[(f[a>>2]|0)+28>>2]&63](a,b,c,d)}return}function jv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;g=f[a+4>>2]|0;e=g>>8;if(g&1)e=f[(f[c>>2]|0)+e>>2]|0;a=f[a>>2]|0;yx[f[(f[a>>2]|0)+28>>2]&63](a,b,c+e|0,(g&2|0)!=0?d:2);return}function kv(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0;a:do if((a|0)!=(f[b+8>>2]|0)){h=f[a+12>>2]|0;g=a+16+(h<<3)|0;jv(a+16|0,b,c,e);if((h|0)>1){h=b+54|0;a=a+24|0;do{jv(a,b,c,e);if(d[h>>0]|0)break a;a=a+8|0}while(a>>>0>>0)}}else gv(0,b,c,e);while(0);return}function lv(a,b,c,g){a=a|0;b=b|0;c=c|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+64|0;q=r;p=f[a>>2]|0;o=a+(f[p+-8>>2]|0)|0;p=f[p+-4>>2]|0;f[q>>2]=c;f[q+4>>2]=a;f[q+8>>2]=b;f[q+12>>2]=g;g=q+16|0;a=q+20|0;b=q+24|0;h=q+28|0;i=q+32|0;j=q+40|0;k=(p|0)==(c|0);m=g;n=m+36|0;do{f[m>>2]=0;m=m+4|0}while((m|0)<(n|0));e[g+36>>1]=0;d[g+38>>0]=0;a:do if(k){f[q+48>>2]=1;mx[f[(f[c>>2]|0)+20>>2]&15](c,q,o,o,1,0);g=(f[b>>2]|0)==1?o:0}else{dx[f[(f[p>>2]|0)+24>>2]&15](p,q,o,1,0);switch(f[q+36>>2]|0){case 0:{g=(f[j>>2]|0)==1&(f[h>>2]|0)==1&(f[i>>2]|0)==1?f[a>>2]|0:0;break a}case 1:break;default:{g=0;break a}}if((f[b>>2]|0)!=1?!((f[j>>2]|0)==0&(f[h>>2]|0)==1&(f[i>>2]|0)==1):0){g=0;break}g=f[g>>2]|0}while(0);l=r;return g|0}function mv(a,b,c,e,g){a=a|0;b=b|0;c=c|0;e=e|0;g=g|0;d[b+53>>0]=1;do if((f[b+4>>2]|0)==(e|0)){d[b+52>>0]=1;e=b+16|0;a=f[e>>2]|0;if(!a){f[e>>2]=c;f[b+24>>2]=g;f[b+36>>2]=1;if(!((g|0)==1?(f[b+48>>2]|0)==1:0))break;d[b+54>>0]=1;break}if((a|0)!=(c|0)){g=b+36|0;f[g>>2]=(f[g>>2]|0)+1;d[b+54>>0]=1;break}a=b+24|0;e=f[a>>2]|0;if((e|0)==2){f[a>>2]=g;e=g}if((e|0)==1?(f[b+48>>2]|0)==1:0)d[b+54>>0]=1}while(0);return}function nv(a,b,c,e,g){a=a|0;b=b|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;a:do if((a|0)==(f[b+8>>2]|0)){if((f[b+4>>2]|0)==(c|0)?(h=b+28|0,(f[h>>2]|0)!=1):0)f[h>>2]=e}else{if((a|0)!=(f[b>>2]|0)){q=f[a+12>>2]|0;j=a+16+(q<<3)|0;pv(a+16|0,b,c,e,g);h=a+24|0;if((q|0)<=1)break;i=f[a+8>>2]|0;if((i&2|0)==0?(k=b+36|0,(f[k>>2]|0)!=1):0){if(!(i&1)){i=b+54|0;while(1){if(d[i>>0]|0)break a;if((f[k>>2]|0)==1)break a;pv(h,b,c,e,g);h=h+8|0;if(h>>>0>=j>>>0)break a}}i=b+24|0;a=b+54|0;while(1){if(d[a>>0]|0)break a;if((f[k>>2]|0)==1?(f[i>>2]|0)==1:0)break a;pv(h,b,c,e,g);h=h+8|0;if(h>>>0>=j>>>0)break a}}i=b+54|0;while(1){if(d[i>>0]|0)break a;pv(h,b,c,e,g);h=h+8|0;if(h>>>0>=j>>>0)break a}}if((f[b+16>>2]|0)!=(c|0)?(p=b+20|0,(f[p>>2]|0)!=(c|0)):0){f[b+32>>2]=e;m=b+44|0;if((f[m>>2]|0)==4)break;i=f[a+12>>2]|0;j=a+16+(i<<3)|0;k=b+52|0;e=b+53|0;n=b+54|0;l=a+8|0;o=b+24|0;b:do if((i|0)>0){i=0;h=0;a=a+16|0;while(1){d[k>>0]=0;d[e>>0]=0;ov(a,b,c,c,1,g);if(d[n>>0]|0){q=20;break b}do if(d[e>>0]|0){if(!(d[k>>0]|0))if(!(f[l>>2]&1)){h=1;q=20;break b}else{h=1;break}if((f[o>>2]|0)==1)break b;if(!(f[l>>2]&2))break b;else{i=1;h=1}}while(0);a=a+8|0;if(a>>>0>=j>>>0){q=20;break}}}else{i=0;h=0;q=20}while(0);do if((q|0)==20){if((!i?(f[p>>2]=c,c=b+40|0,f[c>>2]=(f[c>>2]|0)+1,(f[b+36>>2]|0)==1):0)?(f[o>>2]|0)==2:0){d[n>>0]=1;if(h)break}else q=24;if((q|0)==24?h:0)break;f[m>>2]=4;break a}while(0);f[m>>2]=3;break}if((e|0)==1)f[b+32>>2]=1}while(0);return}function ov(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0;i=f[a+4>>2]|0;h=i>>8;if(i&1)h=f[(f[d>>2]|0)+h>>2]|0;a=f[a>>2]|0;mx[f[(f[a>>2]|0)+20>>2]&15](a,b,c,d+h|0,(i&2|0)!=0?e:2,g);return}function pv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0;h=f[a+4>>2]|0;g=h>>8;if(h&1)g=f[(f[c>>2]|0)+g>>2]|0;a=f[a>>2]|0;dx[f[(f[a>>2]|0)+24>>2]&15](a,b,c+g|0,(h&2|0)!=0?d:2,e);return}function qv(a,b,c,e,g){a=a|0;b=b|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0;a:do if((a|0)==(f[b+8>>2]|0)){if((f[b+4>>2]|0)==(c|0)?(h=b+28|0,(f[h>>2]|0)!=1):0)f[h>>2]=e}else{if((a|0)!=(f[b>>2]|0)){j=f[a+8>>2]|0;dx[f[(f[j>>2]|0)+24>>2]&15](j,b,c,e,g);break}if((f[b+16>>2]|0)!=(c|0)?(i=b+20|0, (f[i>>2]|0)!=(c|0)):0){f[b+32>>2]=e;e=b+44|0;if((f[e>>2]|0)==4)break;h=b+52|0;d[h>>0]=0;k=b+53|0;d[k>>0]=0;a=f[a+8>>2]|0;mx[f[(f[a>>2]|0)+20>>2]&15](a,b,c,c,1,g);if(d[k>>0]|0){if(!(d[h>>0]|0)){h=1;j=13}}else{h=0;j=13}do if((j|0)==13){f[i>>2]=c;k=b+40|0;f[k>>2]=(f[k>>2]|0)+1;if((f[b+36>>2]|0)==1?(f[b+24>>2]|0)==2:0){d[b+54>>0]=1;if(h)break}else j=16;if((j|0)==16?h:0)break;f[e>>2]=4;break a}while(0);f[e>>2]=3;break}if((e|0)==1)f[b+32>>2]=1}while(0);return}function rv(a,b,c,e,g){a=a|0;b=b|0;c=c|0;e=e|0;g=g|0;var h=0,i=0;do if((a|0)==(f[b+8>>2]|0)){if((f[b+4>>2]|0)==(c|0)?(i=b+28|0,(f[i>>2]|0)!=1):0)f[i>>2]=e}else if((a|0)==(f[b>>2]|0)){if((f[b+16>>2]|0)!=(c|0)?(h=b+20|0,(f[h>>2]|0)!=(c|0)):0){f[b+32>>2]=e;f[h>>2]=c;g=b+40|0;f[g>>2]=(f[g>>2]|0)+1;if((f[b+36>>2]|0)==1?(f[b+24>>2]|0)==2:0)d[b+54>>0]=1;f[b+44>>2]=4;break}if((e|0)==1)f[b+32>>2]=1}while(0);return}function sv(a,b,c,e,g,h){a=a|0;b=b|0;c=c|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((a|0)==(f[b+8>>2]|0))mv(0,b,c,e,g);else{m=b+52|0;n=d[m>>0]|0;o=b+53|0;p=d[o>>0]|0;l=f[a+12>>2]|0;i=a+16+(l<<3)|0;d[m>>0]=0;d[o>>0]=0;ov(a+16|0,b,c,e,g,h);a:do if((l|0)>1){j=b+24|0;k=a+8|0;l=b+54|0;a=a+24|0;do{if(d[l>>0]|0)break a;if(!(d[m>>0]|0)){if((d[o>>0]|0)!=0?(f[k>>2]&1|0)==0:0)break a}else{if((f[j>>2]|0)==1)break a;if(!(f[k>>2]&2))break a}d[m>>0]=0;d[o>>0]=0;ov(a,b,c,e,g,h);a=a+8|0}while(a>>>0>>0)}while(0);d[m>>0]=n;d[o>>0]=p}return}function tv(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;if((a|0)==(f[b+8>>2]|0))mv(0,b,c,d,e);else{a=f[a+8>>2]|0;mx[f[(f[a>>2]|0)+20>>2]&15](a,b,c,d,e,g)}return}function uv(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;if((a|0)==(f[b+8>>2]|0))mv(0,b,c,d,e);return}function vv(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=l;l=l+16|0;d=e;f[d>>2]=f[c>>2];a=kx[f[(f[a>>2]|0)+16>>2]&63](a,b,d)|0;if(a)f[c>>2]=f[d>>2];l=e;return a&1|0}function wv(a){a=a|0;if(!a)a=0;else a=(lv(a,656,704,0)|0)!=0;return a&1|0}function xv(){var a=0;a=Pa(4)|0;Lu(a);ob(a|0,592,78)}function yv(){var a=0,b=0,c=0,d=0,e=0,g=0,h=0,i=0;e=l;l=l+48|0;h=e+32|0;c=e+24|0;i=e+16|0;g=e;e=e+36|0;a=Hu()|0;if((a|0)!=0?(d=f[a>>2]|0,(d|0)!=0):0){a=d+48|0;b=f[a>>2]|0;a=f[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){f[c>>2]=f[9257];Eu(51919,c)}if((b|0)==1126902529&(a|0)==1129074247)a=f[d+44>>2]|0;else a=d+80|0;f[e>>2]=a;d=f[d>>2]|0;a=f[d+4>>2]|0;if(kx[f[(f[608>>2]|0)+16>>2]&63](608,d,e)|0){i=f[e>>2]|0;e=f[9257]|0;i=ix[f[(f[i>>2]|0)+8>>2]&127](i)|0;f[g>>2]=e;f[g+4>>2]=a;f[g+8>>2]=i;Eu(51833,g)}else{f[i>>2]=f[9257];f[i+4>>2]=a;Eu(51878,i)}}Eu(51957,h)}function zv(){var a=0;a=l;l=l+16|0;if(!(Ia(37020,184)|0)){l=a;return}else Eu(51730,a)}function Av(a){a=a|0;var b=0,c=0;c=(f[a>>2]|0)+-4|0;b=f[c>>2]|0;f[c>>2]=b+-1;if((b+-1|0)<0)Ju((f[a>>2]|0)+-12|0);return}function Bv(a){a=a|0;var b=0;b=l;l=l+16|0;Dl(a);if(!(mb(f[9255]|0,0)|0)){l=b;return}else Eu(51780,b)}function Cv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=Ow(a,b,c)|0;return a|0}function Dv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=Pw(a,b,c)|0;return a|0}function Ev(){return 37296}function Fv(){return 37300}function Gv(){return 37304}function Hv(a){a=a|0;return((a|0)==32|(a+-9|0)>>>0<5)&1|0}function Iv(a){a=a|0;if((a+-48|0)>>>0<10)a=1;else a=((a|32)+-97|0)>>>0<6;return a&1|0}function Jv(){var a=0;if(!(f[9258]|0))a=37308;else a=f[(eb()|0)+60>>2]|0;return a|0}function Kv(a){a=a|0;var b=0,c=0;b=0;while(1){if((g[51978+b>>0]|0)==(a|0)){c=2;break}b=b+1|0;if((b|0)==87){b=87;a=52066;c=5;break}}if((c|0)==2)if(!b)a=52066;else{a=52066;c=5}if((c|0)==5)while(1){c=a;while(1){a=c+1|0;if(!(d[c>>0]|0))break;else c=a}b=b+-1|0;if(!b)break;else c=5}return a|0}function Lv(a,b,c){a=a|0;b=b|0;c=c|0;var e=0.0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0.0,r=0.0,s=0,t=0,u=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0.0;L=l;l=l+512|0;H=L;switch(b|0){case 0:{K=24;J=-149;A=4;break}case 1:{K=53;J=-1074;A=4;break}case 2:{K=53;J=-1074;A=4;break}default:e=0.0}a:do if((A|0)==4){D=a+4|0;C=a+100|0;do{b=f[D>>2]|0;if(b>>>0<(f[C>>2]|0)>>>0){f[D>>2]=b+1;b=g[b>>0]|0}else b=Ov(a)|0}while((Hv(b)|0)!=0);b:do switch(b|0){case 43:case 45:{h=1-(((b|0)==45&1)<<1)|0;b=f[D>>2]|0;if(b>>>0<(f[C>>2]|0)>>>0){f[D>>2]=b+1;b=g[b>>0]|0;I=h;break b}else{b=Ov(a)|0;I=h;break b}}default:I=1}while(0);h=b;b=0;do{if((h|32|0)!=(d[53870+b>>0]|0))break;do if(b>>>0<7){h=f[D>>2]|0;if(h>>>0<(f[C>>2]|0)>>>0){f[D>>2]=h+1;h=g[h>>0]|0;break}else{h=Ov(a)|0;break}}while(0);b=b+1|0}while(b>>>0<8);b:do switch(b|0){case 8:break;case 3:{A=23;break}default:{j=(c|0)!=0;if(j&b>>>0>3)if((b|0)==8)break b;else{A=23;break b}c:do if(!b){b=0;do{if((h|32|0)!=(d[56747+b>>0]|0))break c;do if(b>>>0<2){h=f[D>>2]|0;if(h>>>0<(f[C>>2]|0)>>>0){f[D>>2]=h+1;h=g[h>>0]|0;break}else{h=Ov(a)|0;break}}while(0);b=b+1|0}while(b>>>0<3)}while(0);switch(b|0){case 3:{b=f[D>>2]|0;if(b>>>0<(f[C>>2]|0)>>>0){f[D>>2]=b+1;b=g[b>>0]|0}else b=Ov(a)|0;if((b|0)==40)b=1;else{if(!(f[C>>2]|0)){e=v;break a}f[D>>2]=(f[D>>2]|0)+-1;e=v;break a}while(1){h=f[D>>2]|0;if(h>>>0<(f[C>>2]|0)>>>0){f[D>>2]=h+1;h=g[h>>0]|0}else h=Ov(a)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;b=b+1|0}if((h|0)==41){e=v;break a}h=(f[C>>2]|0)==0;if(!h)f[D>>2]=(f[D>>2]|0)+-1;if(!j){f[(Jv()|0)>>2]=22;Nv(a,0);e=0.0;break a}if(!b){e=v;break a}while(1){b=b+-1|0;if(!h)f[D>>2]=(f[D>>2]|0)+-1;if(!b){e=v;break a}}}case 0:{do if((h|0)==48){b=f[D>>2]|0;if(b>>>0<(f[C>>2]|0)>>>0){f[D>>2]=b+1;b=g[b>>0]|0}else b=Ov(a)|0;if((b|32|0)!=120){if(!(f[C>>2]|0)){b=48;break}f[D>>2]=(f[D>>2]|0)+-1;b=48;break}b=f[D>>2]|0;if(b>>>0<(f[C>>2]|0)>>>0){f[D>>2]=b+1;b=g[b>>0]|0;j=0}else{b=Ov(a)|0;j=0}c:while(1){switch(b|0){case 46:{A=74;break c}case 48:break;default:{y=0;k=0;x=0;h=0;n=j;o=0;u=0;m=1.0;j=0;e=0.0;break c}}b=f[D>>2]|0;if(b>>>0<(f[C>>2]|0)>>>0){f[D>>2]=b+1;b=g[b>>0]|0;j=1;continue}else{b=Ov(a)|0;j=1;continue}}if((A|0)==74){b=f[D>>2]|0;if(b>>>0<(f[C>>2]|0)>>>0){f[D>>2]=b+1;b=g[b>>0]|0}else b=Ov(a)|0;if((b|0)==48){j=0;h=0;do{b=f[D>>2]|0;if(b>>>0<(f[C>>2]|0)>>>0){f[D>>2]=b+1;b=g[b>>0]|0}else b=Ov(a)|0;j=xs(j|0,h|0,-1,-1)|0;h=G}while((b|0)==48);y=0;k=0;x=j;n=1;o=1;u=0;m=1.0;j=0;e=0.0}else{y=0;k=0;x=0;h=0;n=j;o=1;u=0;m=1.0;j=0;e=0.0}}while(1){s=b+-48|0;p=b|32;if(s>>>0>=10){t=(b|0)==46;if(!(t|(p+-97|0)>>>0<6)){p=x;s=y;break}if(t)if(!o){t=k;h=y;s=y;o=1;p=u;i=m}else{p=x;s=y;b=46;break}else A=86}else A=86;if((A|0)==86){A=0;b=(b|0)>57?p+-87|0:s;do if(!((y|0)<0|(y|0)==0&k>>>0<8)){if((y|0)<0|(y|0)==0&k>>>0<14){r=m*.0625;p=u;i=r;e=e+r*+(b|0);break}if((u|0)!=0|(b|0)==0){p=u;i=m}else{p=1;i=m;e=e+m*.5}}else{p=u;i=m;j=b+(j<<4)|0}while(0);k=xs(k|0,y|0,1,0)|0;t=x;s=G;n=1}b=f[D>>2]|0;if(b>>>0<(f[C>>2]|0)>>>0){f[D>>2]=b+1;y=s;x=t;b=g[b>>0]|0;u=p;m=i;continue}else{y=s;x=t;b=Ov(a)|0;u=p;m=i;continue}}if(!n){b=(f[C>>2]|0)==0;if(!b)f[D>>2]=(f[D>>2]|0)+-1;if(c){if(!b?(z=f[D>>2]|0,f[D>>2]=z+-1,(o|0)!=0):0)f[D>>2]=z+-2}else Nv(a,0);e=+(I|0)*0.0;break a}n=(o|0)==0;o=n?k:p;n=n?s:h;if((s|0)<0|(s|0)==0&k>>>0<8){h=s;do{j=j<<4;k=xs(k|0,h|0,1,0)|0;h=G}while((h|0)<0|(h|0)==0&k>>>0<8)}if((b|32|0)==112){h=$w(a,c)|0;b=G;if((h|0)==0&(b|0)==-2147483648){if(!c){Nv(a,0);e=0.0;break a}if(!(f[C>>2]|0)){h=0;b=0}else{f[D>>2]=(f[D>>2]|0)+-1;h=0;b=0}}}else if(!(f[C>>2]|0)){h=0;b=0}else{f[D>>2]=(f[D>>2]|0)+-1;h=0;b=0}H=As(o|0,n|0,2)|0;H=xs(H|0,G|0,-32,-1)|0;b=xs(H|0,G|0,h|0,b|0)|0;h=G;if(!j){e=+(I|0)*0.0;break a}if((h|0)>0|(h|0)==0&b>>>0>(0-J|0)>>>0){f[(Jv()|0)>>2]=34;e=+(I|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break a}H=J+-106|0;F=((H|0)<0)<<31>>31;if((h|0)<(F|0)|(h|0)==(F|0)&b>>>0>>0){f[(Jv()|0)>>2]=34;e=+(I|0)*2.2250738585072014e-308*2.2250738585072014e-308;break a}if((j|0)>-1){do{F=!(e>=.5);H=F&1|j<<1;j=H^1;e=e+(F?e:e+-1.0);b=xs(b|0,h|0,-1,-1)|0;h=G}while((H|0)>-1);k=b;m=e}else{k=b;m=e}b=vs(32,0,J|0,((J|0)<0)<<31>>31|0)|0;b=xs(k|0,h|0,b|0,G|0)|0;J=G;if(0>(J|0)|0==(J|0)&K>>>0>b>>>0)if((b|0)<0){b=0;A=127}else A=125;else{b=K;A=125}if((A|0)==125)if((b|0)<53)A=127;else{h=b;i=+(I|0);e=0.0}if((A|0)==127){e=+(I|0);h=b;i=e;e=+Zv(+cw(1.0,84-b|0),e)}K=(j&1|0)==0&(m!=0.0&(h|0)<32);e=i*(K?0.0:m)+(e+i*+(((K&1)+j|0)>>>0))-e;if(!(e!=0.0))f[(Jv()|0)>>2]=34;e=+dw(e,k);break a}else b=h;while(0);E=J+K|0;F=0-E|0;j=0;c:while(1){switch(b|0){case 46:{A=138;break c}case 48:break;default:{h=0;p=0;o=0;break c}}b=f[D>>2]|0;if(b>>>0<(f[C>>2]|0)>>>0){f[D>>2]=b+1;b=g[b>>0]|0;j=1;continue}else{b=Ov(a)|0;j=1;continue}}if((A|0)==138){b=f[D>>2]|0;if(b>>>0<(f[C>>2]|0)>>>0){f[D>>2]=b+1;b=g[b>>0]|0}else b=Ov(a)|0;if((b|0)==48){h=0;b=0;while(1){h=xs(h|0,b|0,-1,-1)|0;j=G;b=f[D>>2]|0;if(b>>>0<(f[C>>2]|0)>>>0){f[D>>2]=b+1;b=g[b>>0]|0}else b=Ov(a)|0;if((b|0)==48)b=j;else{p=j;j=1;o=1;break}}}else{h=0;p=0;o=1}}f[H>>2]=0;n=b+-48|0;k=(b|0)==46;c:do if(k|n>>>0<10){B=H+496|0;y=0;t=0;u=k;A=p;s=j;z=o;j=0;k=0;o=0;d:while(1){do if(u)if(!z){h=y;p=t;z=1}else{p=A;b=y;n=t;break d}else{u=xs(y|0,t|0,1,0)|0;t=G;x=(b|0)!=48;if((k|0)>=125){if(!x){p=A;y=u;break}f[B>>2]=f[B>>2]|1;p=A;y=u;break}p=H+(k<<2)|0;if(j)n=b+-48+((f[p>>2]|0)*10|0)|0;f[p>>2]=n;j=j+1|0;n=(j|0)==9;p=A;y=u;s=1;j=n?0:j;k=(n&1)+k|0;o=x?u:o}while(0);b=f[D>>2]|0;if(b>>>0<(f[C>>2]|0)>>>0){f[D>>2]=b+1;b=g[b>>0]|0}else b=Ov(a)|0;n=b+-48|0;u=(b|0)==46;if(!(u|n>>>0<10)){n=z;A=161;break c}else A=p}s=(s|0)!=0;A=169}else{y=0;t=0;s=j;n=o;j=0;k=0;o=0;A=161}while(0);do if((A|0)==161){B=(n|0)==0;h=B?y:h;p=B?t:p;s=(s|0)!=0;if(!((b|32|0)==101&s))if((b|0)>-1){b=y;n=t;A=169;break}else{b=y;n=t;A=171;break}n=$w(a,c)|0;b=G;if((n|0)==0&(b|0)==-2147483648){if(!c){Nv(a,0);e=0.0;break}if(!(f[C>>2]|0)){n=0;b=0}else{f[D>>2]=(f[D>>2]|0)+-1;n=0;b=0}}h=xs(n|0,b|0,h|0,p|0)|0;s=y;p=G;n=t;A=173}while(0);if((A|0)==169)if(f[C>>2]|0){f[D>>2]=(f[D>>2]|0)+-1;if(s){s=b;A=173}else A=172}else A=171;if((A|0)==171)if(s){s=b;A=173}else A=172;do if((A|0)==172){f[(Jv()|0)>>2]=22;Nv(a,0);e=0.0}else if((A|0)==173){b=f[H>>2]|0;if(!b){e=+(I|0)*0.0;break}if(((n|0)<0|(n|0)==0&s>>>0<10)&((h|0)==(s|0)&(p|0)==(n|0))?K>>>0>30|(b>>>K|0)==0:0){e=+(I|0)*+(b>>>0);break}a=(J|0)/-2|0;D=((a|0)<0)<<31>>31;if((p|0)>(D|0)|(p|0)==(D|0)&h>>>0>a>>>0){f[(Jv()|0)>>2]=34;e=+(I|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=J+-106|0;D=((a|0)<0)<<31>>31;if((p|0)<(D|0)|(p|0)==(D|0)&h>>>0>>0){f[(Jv()|0)>>2]=34;e=+(I|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(j){if((j|0)<9){n=H+(k<<2)|0;b=f[n>>2]|0;do{b=b*10|0;j=j+1|0}while((j|0)!=9);f[n>>2]=b}k=k+1|0}if((o|0)<9?(o|0)<=(h|0)&(h|0)<18:0){if((h|0)==9){e=+(I|0)*+((f[H>>2]|0)>>>0);break}if((h|0)<9){e=+(I|0)*+((f[H>>2]|0)>>>0)/+(f[37312+(8-h<<2)>>2]|0);break}a=K+27+(ca(h,-3)|0)|0;b=f[H>>2]|0;if((a|0)>30|(b>>>a|0)==0){e=+(I|0)*+(b>>>0)*+(f[37312+(h+-10<<2)>>2]|0);break}}b=(h|0)%9|0;if(!b){j=0;b=0}else{s=(h|0)>-1?b:b+9|0;n=f[37312+(8-s<<2)>>2]|0;if(k){o=1e9/(n|0)|0;j=0;b=0;p=0;do{C=H+(p<<2)|0;D=f[C>>2]|0;a=((D>>>0)/(n>>>0)|0)+b|0;f[C>>2]=a;b=ca((D>>>0)%(n>>>0)|0,o)|0;a=(p|0)==(j|0)&(a|0)==0;p=p+1|0;h=a?h+-9|0:h;j=a?p&127:j}while((p|0)!=(k|0));if(b){f[H+(k<<2)>>2]=b;k=k+1|0}}else{j=0;k=0}b=0;h=9-s+h|0}c:while(1){t=(h|0)<18;u=(h|0)==18;x=H+(j<<2)|0;do{if(!t){if(!u)break c;if((f[x>>2]|0)>>>0>=9007199){h=18;break c}}n=0;o=k+127|0;while(1){s=o&127;p=H+(s<<2)|0;o=As(f[p>>2]|0,0,29)|0;o=xs(o|0,G|0,n|0,0)|0;n=G;if(n>>>0>0|(n|0)==0&o>>>0>1e9){a=Is(o|0,n|0,1e9,0)|0;o=Js(o|0,n|0,1e9,0)|0;n=a}else n=0;f[p>>2]=o;a=(s|0)==(j|0);k=(s|0)!=(k+127&127|0)|a?k:(o|0)==0?s:k;if(a)break;else o=s+-1|0}b=b+-29|0}while((n|0)==0);j=j+127&127;if((j|0)==(k|0)){a=k+127&127;k=H+((k+126&127)<<2)|0;f[k>>2]=f[k>>2]|f[H+(a<<2)>>2];k=a}f[H+(j<<2)>>2]=n;h=h+9|0}c:while(1){y=k+1&127;x=H+((k+127&127)<<2)|0;while(1){t=(h|0)==18;u=(h|0)>27?9:1;s=t^1;while(1){o=j&127;p=(o|0)==(k|0);do if(!p){n=f[H+(o<<2)>>2]|0;if(n>>>0<9007199){A=219;break}if(n>>>0>9007199)break;n=j+1&127;if((n|0)==(k|0)){A=219;break}n=f[H+(n<<2)>>2]|0;if(n>>>0<254740991){A=219;break}if(!(n>>>0>254740991|s)){h=o;break c}}else A=219;while(0);if((A|0)==219?(A=0,t):0){A=220;break c}b=b+u|0;if((j|0)==(k|0))j=k;else break}s=(1<>>u;o=j;n=0;p=j;while(1){D=H+(p<<2)|0;a=f[D>>2]|0;j=(a>>>u)+n|0;f[D>>2]=j;n=ca(a&s,t)|0;j=(p|0)==(o|0)&(j|0)==0;p=p+1&127;h=j?h+-9|0:h;j=j?p:o;if((p|0)==(k|0))break;else o=j}if(!n)continue;if((y|0)!=(j|0))break;f[x>>2]=f[x>>2]|1}f[H+(k<<2)>>2]=n;k=y}if((A|0)==220)if(p){f[H+(y+-1<<2)>>2]=0;h=k;k=y}else h=o;e=+((f[H+(h<<2)>>2]|0)>>>0);h=j+1&127;if((h|0)==(k|0)){k=j+2&127;f[H+(k+-1<<2)>>2]=0}r=+(I|0);i=r*(e*1.0e9+ +((f[H+(h<<2)>>2]|0)>>>0));t=b+53|0;p=t-J|0;s=(p|0)<(K|0);h=s&1;o=s?(p|0)<0?0:p:K;if((o|0)<53){M=+Zv(+cw(1.0,105-o|0),i);m=+_v(i,+cw(1.0,53-o|0));q=M;e=m;m=M+(i-m)}else{q=0.0;e=0.0;m=i}n=j+2&127;do if((n|0)==(k|0))i=e;else{n=f[H+(n<<2)>>2]|0;do if(n>>>0>=5e8){if(n>>>0>5e8){e=r*.75+e;break}if((j+3&127|0)==(k|0)){e=r*.5+e;break}else{e=r*.75+e;break}}else{if((n|0)==0?(j+3&127|0)==(k|0):0)break;e=r*.25+e}while(0);if((53-o|0)<=1){i=e;break}if(+_v(e,1.0)!=0.0){i=e;break}i=e+1.0}while(0);e=m+i-q;do if((t&2147483647|0)>(-2-E|0)){if(+R(+e)>=9007199254740992.0){h=s&(o|0)==(p|0)?0:h;b=b+1|0;e=e*.5}if((b+50|0)<=(F|0)?!(i!=0.0&(h|0)!=0):0)break;f[(Jv()|0)>>2]=34}while(0);e=+dw(e,b)}while(0);break a}default:{if(f[C>>2]|0)f[D>>2]=(f[D>>2]|0)+-1;f[(Jv()|0)>>2]=22;Nv(a,0);e=0.0;break a}}}}while(0);if((A|0)==23){h=(f[C>>2]|0)==0;if(!h)f[D>>2]=(f[D>>2]|0)+-1;if((c|0)!=0&b>>>0>3)do{if(!h)f[D>>2]=(f[D>>2]|0)+-1;b=b+-1|0}while(b>>>0>3)}e=+(I|0)*w}while(0);l=L;return+e}function Mv(a,b,c,e,h){a=a|0;b=b|0;c=c|0;e=e|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;a:do if(b>>>0>36){f[(Jv()|0)>>2]=22;h=0;e=0}else{r=a+4|0;q=a+100|0;do{i=f[r>>2]|0;if(i>>>0<(f[q>>2]|0)>>>0){f[r>>2]=i+1;i=g[i>>0]|0}else i=Ov(a)|0}while((Hv(i)|0)!=0);b:do switch(i|0){case 43:case 45:{j=((i|0)==45)<<31>>31;i=f[r>>2]|0;if(i>>>0<(f[q>>2]|0)>>>0){f[r>>2]=i+1;i=g[i>>0]|0;p=j;break b}else{i=Ov(a)|0;p=j;break b}}default:p=0}while(0);j=(b|0)==0;do if((b&-17|0)==0&(i|0)==48){i=f[r>>2]|0;if(i>>>0<(f[q>>2]|0)>>>0){f[r>>2]=i+1;i=g[i>>0]|0}else i=Ov(a)|0;if((i|32|0)!=120)if(j){b=8;n=46;break}else{n=32;break}b=f[r>>2]|0;if(b>>>0<(f[q>>2]|0)>>>0){f[r>>2]=b+1;i=g[b>>0]|0}else i=Ov(a)|0;if((g[53879+(i+1)>>0]|0)>15){e=(f[q>>2]|0)==0;if(!e)f[r>>2]=(f[r>>2]|0)+-1;if(!c){Nv(a,0);h=0;e=0;break a}if(e){h=0;e=0;break a}f[r>>2]=(f[r>>2]|0)+-1;h=0;e=0;break a}else{b=16;n=46}}else{b=j?10:b;if((g[53879+(i+1)>>0]|0)>>>0>>0)n=32;else{if(f[q>>2]|0)f[r>>2]=(f[r>>2]|0)+-1;Nv(a,0);f[(Jv()|0)>>2]=22;h=0;e=0;break a}}while(0);if((n|0)==32)if((b|0)==10){b=i+-48|0;if(b>>>0<10){i=0;while(1){j=(i*10|0)+b|0;b=f[r>>2]|0;if(b>>>0<(f[q>>2]|0)>>>0){f[r>>2]=b+1;i=g[b>>0]|0}else i=Ov(a)|0;b=i+-48|0;if(!(b>>>0<10&j>>>0<429496729)){b=j;break}else i=j}j=0}else{b=0;j=0}c=i+-48|0;if(c>>>0<10){while(1){k=Hs(b|0,j|0,10,0)|0;l=G;m=((c|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&k>>>0>~c>>>0){k=b;break}b=xs(k|0,l|0,c|0,m|0)|0;j=G;i=f[r>>2]|0;if(i>>>0<(f[q>>2]|0)>>>0){f[r>>2]=i+1;i=g[i>>0]|0}else i=Ov(a)|0;c=i+-48|0;if(!(c>>>0<10&(j>>>0<429496729|(j|0)==429496729&b>>>0<2576980378))){k=b;break}}if(c>>>0>9){i=k;b=p}else{b=10;n=72}}else{i=b;b=p}}else n=46;b:do if((n|0)==46){if(!(b+-1&b)){n=d[54136+((b*23|0)>>>5&7)>>0]|0;j=d[53879+(i+1)>>0]|0;c=j&255;if(c>>>0>>0){i=0;while(1){k=c|i<>2]|0;if(i>>>0<(f[q>>2]|0)>>>0){f[r>>2]=i+1;i=g[i>>0]|0}else i=Ov(a)|0;j=d[53879+(i+1)>>0]|0;c=j&255;if(!(k>>>0<134217728&c>>>0>>0))break;else i=k}c=0}else{c=0;k=0}l=ys(-1,-1,n|0)|0;m=G;if((j&255)>>>0>=b>>>0|(c>>>0>m>>>0|(c|0)==(m|0)&k>>>0>l>>>0)){j=c;n=72;break}else i=c;while(1){k=As(k|0,i|0,n|0)|0;c=G;k=j&255|k;i=f[r>>2]|0;if(i>>>0<(f[q>>2]|0)>>>0){f[r>>2]=i+1;i=g[i>>0]|0}else i=Ov(a)|0;j=d[53879+(i+1)>>0]|0;if((j&255)>>>0>=b>>>0|(c>>>0>m>>>0|(c|0)==(m|0)&k>>>0>l>>>0)){j=c;n=72;break b}else i=c}}j=d[53879+(i+1)>>0]|0;c=j&255;if(c>>>0>>0){i=0;while(1){k=c+(ca(i,b)|0)|0;i=f[r>>2]|0;if(i>>>0<(f[q>>2]|0)>>>0){f[r>>2]=i+1;i=g[i>>0]|0}else i=Ov(a)|0;j=d[53879+(i+1)>>0]|0;c=j&255;if(!(k>>>0<119304647&c>>>0>>0))break;else i=k}c=0}else{k=0;c=0}if((j&255)>>>0>>0){n=Is(-1,-1,b|0,0)|0;o=G;m=c;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&k>>>0>n>>>0){j=m;n=72;break b}c=Hs(k|0,m|0,b|0,0)|0;l=G;j=j&255;if(l>>>0>4294967295|(l|0)==-1&c>>>0>~j>>>0){j=m;n=72;break b}k=xs(j|0,0,c|0,l|0)|0;c=G;i=f[r>>2]|0;if(i>>>0<(f[q>>2]|0)>>>0){f[r>>2]=i+1;i=g[i>>0]|0}else i=Ov(a)|0;j=d[53879+(i+1)>>0]|0;if((j&255)>>>0>=b>>>0){j=c;n=72;break}else m=c}}else{j=c;n=72}}while(0);if((n|0)==72)if((g[53879+(i+1)>>0]|0)>>>0>>0){do{i=f[r>>2]|0;if(i>>>0<(f[q>>2]|0)>>>0){f[r>>2]=i+1;i=g[i>>0]|0}else i=Ov(a)|0}while((g[53879+(i+1)>>0]|0)>>>0>>0);f[(Jv()|0)>>2]=34;j=h;i=e;b=(e&1|0)==0&0==0?p:0}else{i=k;b=p}if(f[q>>2]|0)f[r>>2]=(f[r>>2]|0)+-1;if(!(j>>>0>>0|(j|0)==(h|0)&i>>>0>>0)){if(!((e&1|0)!=0|0!=0|(b|0)!=0)){f[(Jv()|0)>>2]=34;e=xs(e|0,h|0,-1,-1)|0;h=G;break}if(j>>>0>h>>>0|(j|0)==(h|0)&i>>>0>e>>>0){f[(Jv()|0)>>2]=34;break}}e=((b|0)<0)<<31>>31;e=vs(i^b|0,j^e|0,b|0,e|0)|0;h=G}while(0);G=h;return e|0}function Nv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;f[a+104>>2]=b;c=f[a+4>>2]|0;d=f[a+8>>2]|0;e=d-c|0;f[a+108>>2]=e;if((b|0)!=0&(e|0)>(b|0))f[a+100>>2]=c+b;else f[a+100>>2]=d;return}function Ov(a){a=a|0;var b=0,c=0,e=0,h=0,i=0,j=0;c=a+104|0;i=f[c>>2]|0;if((i|0)!=0?(f[a+108>>2]|0)>=(i|0):0)j=4;else{b=zw(a)|0;if((b|0)>=0){h=f[c>>2]|0;c=a+8|0;if(h){e=f[c>>2]|0;i=f[a+4>>2]|0;c=e;h=h-(f[a+108>>2]|0)+-1|0;if((c-i|0)>(h|0))f[a+100>>2]=i+h;else j=9}else{e=f[c>>2]|0;c=e;j=9}if((j|0)==9)f[a+100>>2]=c;c=f[a+4>>2]|0;if(e){a=a+108|0;f[a>>2]=e+1-c+(f[a>>2]|0)}c=c+-1|0;if((g[c>>0]|0|0)!=(b|0))d[c>>0]=b}else j=4}if((j|0)==4){f[a+100>>2]=0;b=-1}return b|0}function Pv(a){a=a|0;if(a>>>0>4294963200){f[(Jv()|0)>>2]=0-a;a=-1}return a|0}function Qv(a){a=a|0;return 0}function Rv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return d|0}function Sv(a,b){a=a|0;b=b|0;return-1|0}function Tv(a){a=a|0;Dl(a);return}function Uv(a,b){a=a|0;b=b|0;return(a+-48|0)>>>0<10|0}function Vv(a,b){a=a|0;b=b|0;return Iv(a)|0}function Wv(a,b,c){a=a|0;b=b|0;c=c|0;if(((d[b>>0]|0)!=0?(Sw(b,58885)|0)!=0:0)?(Sw(b,54145)|0)!=0:0)c=0;else if(!c)c=El(1,4)|0;return c|0}function Xv(a){a=a|0;var b=0,c=0;b=(eb()|0)+176|0;c=f[b>>2]|0;if(a)f[b>>2]=a;return c|0}function Yv(a,b){a=+a;b=+b;var c=0,d=0;k[n>>3]=a;d=f[n>>2]|0;c=f[n+4>>2]|0;k[n>>3]=b;c=f[n+4>>2]&-2147483648|c&2147483647;f[n>>2]=d;f[n+4>>2]=c;return+ +k[n>>3]}function Zv(a,b){a=+a;b=+b;return+ +Yv(a,b)}function $v(a,b){a=+a;b=+b;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,l=0,m=0,o=0,p=0,q=0;k[n>>3]=a;c=f[n>>2]|0;l=f[n+4>>2]|0;k[n>>3]=b;m=f[n>>2]|0;o=f[n+4>>2]|0;d=ys(c|0,l|0,52)|0;d=d&2047;i=ys(m|0,o|0,52)|0;i=i&2047;p=l&-2147483648;h=As(m|0,o|0,1)|0;j=G;a:do if(!((h|0)==0&(j|0)==0)?(g=o&2147483647,!(g>>>0>2146435072|(g|0)==2146435072&m>>>0>0|(d|0)==2047)):0){e=As(c|0,l|0,1)|0;g=G;if(!(g>>>0>j>>>0|(g|0)==(j|0)&e>>>0>h>>>0))return+((e|0)==(h|0)&(g|0)==(j|0)?a*0.0:a);if(!d){d=As(c|0,l|0,12)|0;e=G;if((e|0)>-1|(e|0)==-1&d>>>0>4294967295){g=d;d=0;do{d=d+-1|0;g=As(g|0,e|0,1)|0;e=G}while((e|0)>-1|(e|0)==-1&g>>>0>4294967295)}else d=0;c=As(c|0,l|0,1-d|0)|0;e=G}else e=l&1048575|1048576;if(!i){g=As(m|0,o|0,12)|0;h=G;if((h|0)>-1|(h|0)==-1&g>>>0>4294967295){i=0;do{i=i+-1|0;g=As(g|0,h|0,1)|0;h=G}while((h|0)>-1|(h|0)==-1&g>>>0>4294967295)}else i=0;m=As(m|0,o|0,1-i|0)|0;l=G}else l=o&1048575|1048576;j=vs(c|0,e|0,m|0,l|0)|0;h=G;g=(h|0)>-1|(h|0)==-1&j>>>0>4294967295;b:do if((d|0)>(i|0)){while(1){if(g)if((c|0)==(m|0)&(e|0)==(l|0))break;else{c=j;e=h}c=As(c|0,e|0,1)|0;e=G;d=d+-1|0;j=vs(c|0,e|0,m|0,l|0)|0;h=G;g=(h|0)>-1|(h|0)==-1&j>>>0>4294967295;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(g)if((c|0)==(m|0)&(e|0)==(l|0)){b=a*0.0;break}else{e=h;c=j}if(e>>>0<1048576|(e|0)==1048576&c>>>0<0)do{c=As(c|0,e|0,1)|0;e=G;d=d+-1|0}while(e>>>0<1048576|(e|0)==1048576&c>>>0<0);if((d|0)>0){o=xs(c|0,e|0,0,-1048576)|0;c=G;d=As(d|0,0,52)|0;c=c|G;d=o|d}else{d=ys(c|0,e|0,1-d|0)|0;c=G}f[n>>2]=d;f[n+4>>2]=c|p;b=+k[n>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return+b}function _v(a,b){a=+a;b=+b;return+ +$v(a,b)}function aw(a,b){a=+a;b=b|0;var c=0,d=0,e=0;k[n>>3]=a;c=f[n>>2]|0;d=f[n+4>>2]|0;e=ys(c|0,d|0,52)|0;e=e&2047;switch(e|0){case 0:{if(a!=0.0){a=+aw(a*18446744073709551616.0,b);c=(f[b>>2]|0)+-64|0}else c=0;f[b>>2]=c;break}case 2047:break;default:{f[b>>2]=e+-1022;f[n>>2]=c;f[n+4>>2]=d&-2146435073|1071644672;a=+k[n>>3]}}return+a}function bw(a,b){a=+a;b=b|0;return+ +aw(a,b)}function cw(a,b){a=+a;b=b|0;var c=0;if((b|0)>1023){a=a*8988465674311579538646525.0e283;c=b+-1023|0;if((c|0)>1023){c=b+-2046|0;c=(c|0)>1023?1023:c;a=a*8988465674311579538646525.0e283}}else if((b|0)<-1022){a=a*2.2250738585072014e-308;c=b+1022|0;if((c|0)<-1022){c=b+2044|0;c=(c|0)<-1022?-1022:c;a=a*2.2250738585072014e-308}}else c=b;c=As(c+1023|0,0,52)|0;b=G;f[n>>2]=c;f[n+4>>2]=b;return+(a*+k[n>>3])}function dw(a,b){a=+a;b=b|0;return+ +cw(a,b)}function ew(a,b,c){a=a|0;b=b|0;c=c|0;return fw(0,a,b,(c|0)!=0?c:37344)|0}function fw(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(e|0)==0?37348:e;e=f[i>>2]|0;a:do if(!b)if(!e)e=0;else j=15;else{h=(a|0)==0?g:a;if(!c)e=-2;else{if(!e){e=d[b>>0]|0;g=e&255;if(e<<24>>24>-1){f[h>>2]=g;e=e<<24>>24!=0&1;break}e=g+-194|0;if(e>>>0>50){j=15;break}e=f[37076+(e<<2)>>2]|0;g=c+-1|0;if(g){b=b+1|0;j=9}}else{g=c;j=9}b:do if((j|0)==9){a=d[b>>0]|0;m=(a&255)>>>3;if((m+-16|m+(e>>26))>>>0>7){j=15;break a}while(1){b=b+1|0;e=(a&255)+-128|e<<6;g=g+-1|0;if((e|0)>=0)break;if(!g)break b;a=d[b>>0]|0;if((a&-64)<<24>>24!=-128){j=15;break a}}f[i>>2]=0;f[h>>2]=e;e=c-g|0;break a}while(0);f[i>>2]=e;e=-2}}while(0);if((j|0)==15){f[i>>2]=0;f[(Jv()|0)>>2]=84;e=-1}l=k;return e|0}function gw(a){a=a|0;if(!a)a=1;else a=(f[a>>2]|0)==0;return a&1|0}function hw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+1040|0;k=o+8|0;n=o;j=f[b>>2]|0;f[n>>2]=j;m=(a|0)!=0;d=m?d:256;a=m?a:k;g=j;a:do if((d|0)!=0&(j|0)!=0){i=d;j=g;d=0;while(1){g=c>>>2;h=g>>>0>=i>>>0;if(!(c>>>0>131|h)){g=j;break a}g=h?i:g;c=c-g|0;g=iw(a,n,g,e)|0;if((g|0)==-1){d=c;break}p=(a|0)==(k|0);j=p?0:g;h=i-j|0;a=p?a:a+(g<<2)|0;d=g+d|0;g=f[n>>2]|0;if((i|0)!=(j|0)&(g|0)!=0){i=h;j=g}else{i=h;break a}}c=d;i=0;g=f[n>>2]|0;d=-1}else{i=d;d=0}while(0);a:do if((g|0)!=0?(i|0)!=0&(c|0)!=0:0){h=g;g=a;while(1){a=fw(g,h,c,e)|0;if((a+2|0)>>>0<3)break;h=(f[n>>2]|0)+a|0;f[n>>2]=h;i=i+-1|0;d=d+1|0;if(!((i|0)!=0&(c|0)!=(a|0)))break a;else{c=c-a|0;g=g+4|0}}switch(a|0){case-1:{d=-1;break a}case 0:{f[n>>2]=0;break a}default:{f[e>>2]=0;break a}}}while(0);if(m)f[b>>2]=f[n>>2];l=o;return d|0}function iw(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var h=0,i=0,j=0,k=0,l=0,m=0;h=f[b>>2]|0;if((e|0)!=0?(i=f[e>>2]|0,(i|0)!=0):0)if(!a){e=c;j=h;m=16}else{f[e>>2]=0;l=a;e=c;k=i;m=37}else if(!a){e=c;m=7}else{i=a;e=c;m=6}a:while(1)if((m|0)==6){if(!e){m=26;break}else a=i;while(1){i=d[h>>0]|0;do if(((i&255)+-1|0)>>>0<127?e>>>0>4&(h&3|0)==0:0){j=h;while(1){h=f[j>>2]|0;if((h+-16843009|h)&-2139062144){i=h;h=j;m=32;break}f[a>>2]=h&255;f[a+4>>2]=g[j+1>>0];f[a+8>>2]=g[j+2>>0];h=j+4|0;i=a+16|0;f[a+12>>2]=g[j+3>>0];e=e+-4|0;if(e>>>0>4){a=i;j=h}else{m=31;break}}if((m|0)==31){a=i;i=d[h>>0]|0;break}else if((m|0)==32){i=i&255;break}}while(0);i=i&255;if((i+-1|0)>>>0>=127)break;h=h+1|0;f[a>>2]=i;e=e+-1|0;if(!e){m=26;break a}else a=a+4|0}i=i+-194|0;if(i>>>0>50){m=48;break}l=a;k=f[37076+(i<<2)>>2]|0;h=h+1|0;m=37;continue}else if((m|0)==7){i=d[h>>0]|0;if(((i&255)+-1|0)>>>0<127?(h&3|0)==0:0){i=f[h>>2]|0;if(!((i+-16843009|i)&-2139062144))do{h=h+4|0;e=e+-4|0;i=f[h>>2]|0}while(((i+-16843009|i)&-2139062144|0)==0);i=i&255}i=i&255;if((i+-1|0)>>>0<127){e=e+-1|0;h=h+1|0;m=7;continue}i=i+-194|0;if(i>>>0>50){m=48;break}i=f[37076+(i<<2)>>2]|0;j=h+1|0;m=16;continue}else if((m|0)==16){m=(g[j>>0]|0)>>>3;if((m+-16|m+(i>>26))>>>0>7){m=17;break}h=j+1|0;if(i&33554432){if((d[h>>0]&-64)<<24>>24!=-128){m=20;break}h=j+2|0;if(i&524288){if((d[h>>0]&-64)<<24>>24!=-128){m=23;break}h=j+3|0}}e=e+-1|0;m=7;continue}else if((m|0)==37){i=g[h>>0]|0;m=i>>>3;if((m+-16|m+(k>>26))>>>0>7){m=38;break}j=h+1|0;a=i+-128|k<<6;if((a|0)<0){i=g[j>>0]|0;if((i&192|0)!=128){m=41;break}j=h+2|0;a=i+-128|a<<6;if((a|0)<0){i=g[j>>0]|0;if((i&192|0)!=128){m=44;break}a=i+-128|a<<6;h=h+3|0}else h=j}else h=j;f[l>>2]=a;i=l+4|0;e=e+-1|0;m=6;continue}if((m|0)==17){h=j+-1|0;m=47}else if((m|0)==20){h=j+-1|0;m=47}else if((m|0)==23){h=j+-1|0;m=47}else if((m|0)==26)f[b>>2]=h;else if((m|0)==38){a=l;i=k;h=h+-1|0;m=47}else if((m|0)==41){e=l;c=h+-1|0;m=52}else if((m|0)==44){e=l;c=h+-1|0;m=52}if((m|0)==47)if(!i)m=48;else{e=a;c=h;m=52}if((m|0)==48)if(!(d[h>>0]|0)){if(a){f[a>>2]=0;f[b>>2]=0}c=c-e|0}else{e=a;c=h;m=52}if((m|0)==52){f[(Jv()|0)>>2]=84;if(!e)c=-1;else{f[b>>2]=c;c=-1}}return c|0}function jw(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,h=0,i=0,j=0;j=l;l=l+16|0;e=j;a:do if(!b)e=0;else{do if(c){i=(a|0)==0?e:a;e=d[b>>0]|0;a=e&255;if(e<<24>>24>-1){f[i>>2]=a;e=e<<24>>24!=0&1;break a}e=a+-194|0;if(e>>>0<=50){a=b+1|0;h=f[37076+(e<<2)>>2]|0;if(c>>>0<4?(h&-2147483648>>>((c*6|0)+-6|0)|0)!=0:0)break;e=g[a>>0]|0;c=e>>>3;if((c+-16|c+(h>>26))>>>0<=7){e=e+-128|h<<6;if((e|0)>=0){f[i>>2]=e;e=2;break a}a=g[b+2>>0]|0;if((a&192|0)==128){a=a+-128|e<<6;if((a|0)>=0){f[i>>2]=a;e=3;break a}e=g[b+3>>0]|0;if((e&192|0)==128){f[i>>2]=e+-128|a<<6;e=4;break a}}}}}while(0);f[(Jv()|0)>>2]=84;e=-1}while(0);l=j;return e|0}function kw(a,b,c){a=a|0;b=b|0;c=c|0;do if(a){if(b>>>0<128){d[a>>0]=b;a=1;break}if(b>>>0<2048){d[a>>0]=b>>>6|192;d[a+1>>0]=b&63|128;a=2;break}if(b>>>0<55296|(b&-8192|0)==57344){d[a>>0]=b>>>12|224;d[a+1>>0]=b>>>6&63|128;d[a+2>>0]=b&63|128;a=3;break}if((b+-65536|0)>>>0<1048576){d[a>>0]=b>>>18|240;d[a+1>>0]=b>>>12&63|128;d[a+2>>0]=b>>>6&63|128;d[a+3>>0]=b&63|128;a=4;break}else{f[(Jv()|0)>>2]=84;a=-1;break}}else a=1;while(0);return a|0}function lw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+272|0;i=m+8|0;k=m;h=f[b>>2]|0;f[k>>2]=h;j=(a|0)!=0;e=j?d:256;d=j?a:i;a=h;a:do if((e|0)!=0&(h|0)!=0){h=e;g=a;e=0;while(1){a=c>>>0>=h>>>0;if(!(a|c>>>0>32)){a=g;break a}a=a?h:c;c=c-a|0;a=mw(d,k,a,0)|0;if((a|0)==-1){e=c;break}o=(d|0)==(i|0);n=o?0:a;g=h-n|0;d=o?d:d+a|0;e=a+e|0;a=f[k>>2]|0;if((h|0)!=(n|0)&(a|0)!=0){h=g;g=a}else{h=g;break a}}c=e;h=0;a=f[k>>2]|0;e=-1}else{h=e;e=0}while(0);a:do if((a|0)!=0?(h|0)!=0&(c|0)!=0:0){g=a;a=d;while(1){d=kw(a,f[g>>2]|0,0)|0;if((d+1|0)>>>0<2)break;g=(f[k>>2]|0)+4|0;f[k>>2]=g;c=c+-1|0;e=e+1|0;if(!((h|0)!=(d|0)&(c|0)!=0))break a;else{h=h-d|0;a=a+d|0}}if(!d)f[k>>2]=0;else e=-1}while(0);if(j)f[b>>2]=f[k>>2];l=m;return e|0}function mw(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0;j=l;l=l+16|0;i=j;a:do if(!a){a=f[b>>2]|0;e=f[a>>2]|0;if(!e)c=0;else{c=0;do{if(e>>>0>127){e=kw(i,e,0)|0;if((e|0)==-1){c=-1;break a}}else e=1;c=e+c|0;a=a+4|0;e=f[a>>2]|0}while((e|0)!=0)}}else{b:do if(c>>>0>3){e=c;g=f[b>>2]|0;while(1){h=f[g>>2]|0;if((h+-1|0)>>>0>126){if(!h)break;h=kw(a,h,0)|0;if((h|0)==-1){c=-1;break a}a=a+h|0;e=e-h|0}else{d[a>>0]=h;a=a+1|0;e=e+-1|0;g=f[b>>2]|0}g=g+4|0;f[b>>2]=g;if(e>>>0<=3)break b}d[a>>0]=0;f[b>>2]=0;c=c-e|0;break a}else e=c;while(0);if(e){g=f[b>>2]|0;while(1){h=f[g>>2]|0;if((h+-1|0)>>>0>126){if(!h){g=19;break}h=kw(i,h,0)|0;if((h|0)==-1){c=-1;break a}if(e>>>0>>0){g=22;break}kw(a,f[g>>2]|0,0)|0;a=a+h|0;e=e-h|0}else{d[a>>0]=h;a=a+1|0;e=e+-1|0;g=f[b>>2]|0}g=g+4|0;f[b>>2]=g;if(!e)break a}if((g|0)==19){d[a>>0]=0;f[b>>2]=0;c=c-e|0;break}else if((g|0)==22){c=c-e|0;break}}}while(0);l=j;return c|0}function nw(a,b){a=a|0;b=b|0;if(!a)a=0;else a=kw(a,b,0)|0;return a|0}function ow(a){a=a|0;return 0}function pw(a){a=a|0;return}function qw(a,b){a=a|0;b=b|0;var c=0,e=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;k=m;j=b&255;d[k>>0]=j;e=a+16|0;h=f[e>>2]|0;if(!h)if(!(yw(a)|0)){h=f[e>>2]|0;i=4}else c=-1;else i=4;do if((i|0)==4){e=a+20|0;i=f[e>>2]|0;if(i>>>0>>0?(c=b&255,(c|0)!=(d[a+75>>0]|0)):0){f[e>>2]=i+1;d[i>>0]=j;break}if((kx[f[a+36>>2]&63](a,k,1)|0)==1)c=g[k>>0]|0;else c=-1}while(0);l=m;return c|0}function rw(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;f[c>>2]=f[a+60>>2];a=Pv(qb(6,c|0)|0)|0;l=b;return a|0}function sw(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+48|0;h=m+16|0;g=m;e=m+32|0;f[e>>2]=b;i=e+4|0;k=a+48|0;n=f[k>>2]|0;f[i>>2]=c-((n|0)!=0&1);j=a+44|0;f[e+8>>2]=f[j>>2];f[e+12>>2]=n;if(!(f[9258]|0)){f[h>>2]=f[a+60>>2];f[h+4>>2]=e;f[h+8>>2]=2;e=Pv(yb(145,h|0)|0)|0}else{rb(185,a|0);f[g>>2]=f[a+60>>2];f[g+4>>2]=e;f[g+8>>2]=2;e=Pv(yb(145,g|0)|0)|0;jb(0)}if((e|0)>=1){i=f[i>>2]|0;if(e>>>0>i>>>0){h=f[j>>2]|0;g=a+4|0;f[g>>2]=h;f[a+8>>2]=h+(e-i);if(!(f[k>>2]|0))e=c;else{f[g>>2]=h+1;d[b+(c+-1)>>0]=d[h>>0]|0;e=c}}}else{f[a>>2]=f[a>>2]|e&48^16;f[a+8>>2]=0;f[a+4>>2]=0}l=m;return e|0}function tw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;e=l;l=l+32|0;g=e;d=e+20|0;f[g>>2]=f[a+60>>2];f[g+4>>2]=0;f[g+8>>2]=b;f[g+12>>2]=d;f[g+16>>2]=c;if((Pv(xb(140,g|0)|0)|0)<0){f[d>>2]=-1;a=-1}else a=f[d>>2]|0;l=e;return a|0}function uw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+48|0;n=q+16|0;m=q;d=q+32|0;o=a+28|0;e=f[o>>2]|0;f[d>>2]=e;p=a+20|0;e=(f[p>>2]|0)-e|0;f[d+4>>2]=e;f[d+8>>2]=b;f[d+12>>2]=c;j=a+60|0;k=a+44|0;b=2;e=e+c|0;while(1){if(!(f[9258]|0)){f[n>>2]=f[j>>2];f[n+4>>2]=d;f[n+8>>2]=b;h=Pv(zb(146,n|0)|0)|0}else{rb(186,a|0);f[m>>2]=f[j>>2];f[m+4>>2]=d;f[m+8>>2]=b;h=Pv(zb(146,m|0)|0)|0;jb(0)}if((e|0)==(h|0)){e=6;break}if((h|0)<0){e=8;break}e=e-h|0;g=f[d+4>>2]|0;if(h>>>0<=g>>>0)if((b|0)==2){f[o>>2]=(f[o>>2]|0)+h;i=g;b=2}else i=g;else{i=f[k>>2]|0;f[o>>2]=i;f[p>>2]=i;i=f[d+12>>2]|0;h=h-g|0;d=d+8|0;b=b+-1|0}f[d>>2]=(f[d>>2]|0)+h;f[d+4>>2]=i-h}if((e|0)==6){n=f[k>>2]|0;f[a+16>>2]=n+(f[a+48>>2]|0);a=n;f[o>>2]=a;f[p>>2]=a}else if((e|0)==8){f[a+16>>2]=0;f[o>>2]=0;f[p>>2]=0;f[a>>2]=f[a>>2]|32;if((b|0)==2)c=0;else c=c-(f[d+4>>2]|0)|0}l=q;return c|0}function vw(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0;g=l;l=l+80|0;e=g;f[a+36>>2]=8;if((f[a>>2]&64|0)==0?(f[e>>2]=f[a+60>>2],f[e+4>>2]=21505,f[e+8>>2]=g+12,(hb(54,e|0)|0)!=0):0)d[a+75>>0]=-1;e=uw(a,b,c)|0;l=g;return e|0}function ww(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0;d=a+84|0;g=f[d>>2]|0;h=c+256|0;e=Qw(g,0,h)|0;e=(e|0)==0?h:e-g|0;c=e>>>0>>0?e:c;zs(b|0,g|0,c|0)|0;f[a+4>>2]=g+c;b=g+e|0;f[a+8>>2]=b;f[d>>2]=b;return c|0}function xw(a){a=a|0;var b=0,c=0;b=a+74|0;c=d[b>>0]|0;d[b>>0]=c+255|c;b=a+20|0;c=a+44|0;if((f[b>>2]|0)>>>0>(f[c>>2]|0)>>>0)kx[f[a+36>>2]&63](a,0,0)|0;f[a+16>>2]=0;f[a+28>>2]=0;f[b>>2]=0;b=f[a>>2]|0;if(b&20)if(!(b&4))b=-1;else{f[a>>2]=b|32;b=-1}else{b=f[c>>2]|0;f[a+8>>2]=b;f[a+4>>2]=b;b=0}return b|0}function yw(a){a=a|0;var b=0,c=0;b=a+74|0;c=d[b>>0]|0;d[b>>0]=c+255|c;b=f[a>>2]|0;if(!(b&8)){f[a+8>>2]=0;f[a+4>>2]=0;b=f[a+44>>2]|0;f[a+28>>2]=b;f[a+20>>2]=b;f[a+16>>2]=b+(f[a+48>>2]|0);b=0}else{f[a>>2]=b|32;b=-1}return b|0}function zw(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if((f[a+8>>2]|0)==0?(xw(a)|0)!=0:0)b=-1;else if((kx[f[a+32>>2]&63](a,b,1)|0)==1)b=g[b>>0]|0;else b=-1;l=c;return b|0}function Aw(a){a=a|0;var b=0,c=0;do if(a){if((f[a+76>>2]|0)<=-1){b=bx(a)|0;break}c=(ow(a)|0)==0;b=bx(a)|0;if(!c)pw(a)}else{if(!(f[9323]|0))b=0;else b=Aw(f[9323]|0)|0;Ha(37060);a=f[9264]|0;if(a)do{if((f[a+76>>2]|0)>-1)c=ow(a)|0;else c=0;if((f[a+20>>2]|0)>>>0>(f[a+28>>2]|0)>>>0)b=bx(a)|0|b;if(c)pw(a);a=f[a+56>>2]|0}while((a|0)!=0);ib(37060)}while(0);return b|0}function Bw(a,b){a=a|0;b=b|0;var c=0,e=0,g=0,h=0,i=0;if((f[b+76>>2]|0)>=0?(ow(b)|0)!=0:0){if((d[b+75>>0]|0)!=(a|0)?(e=b+20|0,g=f[e>>2]|0,g>>>0<(f[b+16>>2]|0)>>>0):0){f[e>>2]=g+1;d[g>>0]=a;c=a&255}else c=qw(b,a)|0;pw(b)}else i=3;do if((i|0)==3){if((d[b+75>>0]|0)!=(a|0)?(h=b+20|0,c=f[h>>2]|0,c>>>0<(f[b+16>>2]|0)>>>0):0){f[h>>2]=c+1;d[c>>0]=a;c=a&255;break}c=qw(b,a)|0}while(0);return c|0}function Cw(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0;e=c+16|0;g=f[e>>2]|0;if(!g)if(!(yw(c)|0)){g=f[e>>2]|0;h=4}else e=0;else h=4;a:do if((h|0)==4){i=c+20|0;h=f[i>>2]|0;if((g-h|0)>>>0>>0){e=kx[f[c+36>>2]&63](c,a,b)|0;break}b:do if((d[c+75>>0]|0)>-1){e=b;while(1){if(!e){g=h;e=0;break b}g=e+-1|0;if((d[a+g>>0]|0)==10)break;else e=g}if((kx[f[c+36>>2]&63](c,a,e)|0)>>>0>>0)break a;b=b-e|0;a=a+e|0;g=f[i>>2]|0}else{g=h;e=0}while(0);zs(g|0,a|0,b|0)|0;f[i>>2]=(f[i>>2]|0)+b;e=e+b|0}while(0);return e|0}function Dw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;e=ca(c,b)|0;if((f[d+76>>2]|0)>-1){g=(ow(d)|0)==0;a=Cw(a,e,d)|0;if(!g)pw(d)}else a=Cw(a,e,d)|0;if((a|0)!=(e|0))c=(a>>>0)/(b>>>0)|0;return c|0}function Ew(a){a=a|0;var b=0,c=0,d=0;if((f[a+76>>2]|0)>=0?(ow(a)|0)!=0:0){b=a+4|0;c=f[b>>2]|0;if(c>>>0<(f[a+8>>2]|0)>>>0){ -f[b>>2]=c+1;b=g[c>>0]|0}else b=zw(a)|0}else d=3;do if((d|0)==3){b=a+4|0;c=f[b>>2]|0;if(c>>>0<(f[a+8>>2]|0)>>>0){f[b>>2]=c+1;b=g[c>>0]|0;break}else{b=zw(a)|0;break}}while(0);return b|0}function Fw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;e=l;l=l+16|0;g=e;f[g>>2]=d;d=Lw(a,b,c,g)|0;l=e;return d|0}function Gw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;f[e>>2]=c;c=Mw(a,b,e)|0;l=d;return c|0}function Hw(a,b){a=a|0;b=b|0;var c=0,e=0,g=0,h=0;do if((a|0)!=-1){if((f[b+76>>2]|0)>-1)g=ow(b)|0;else g=0;if(!((f[b+8>>2]|0)==0?(xw(b)|0)!=0:0))h=6;if((h|0)==6?(c=b+4|0,e=f[c>>2]|0,e>>>0>((f[b+44>>2]|0)+-8|0)>>>0):0){h=e+-1|0;f[c>>2]=h;d[h>>0]=a;f[b>>2]=f[b>>2]&-17;if(!g)break;pw(b);break}if(g){pw(b);a=-1}else a=-1}else a=-1;while(0);return a|0}function Iw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;i=l;l=l+16|0;d=i;e=Cl(240)|0;do if(e){f[d>>2]=f[c>>2];d=Lw(e,240,b,d)|0;if(d>>>0<240){b=Fl(e,d+1|0)|0;f[a>>2]=(b|0)!=0?b:e;break}Dl(e);if((d|0)>=0?(h=d+1|0,g=Cl(h)|0,f[a>>2]=g,(g|0)!=0):0)d=Lw(g,h,b,c)|0;else d=-1}else d=-1;while(0);l=i;return d|0}function Jw(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;o=s+80|0;r=s+96|0;q=s;p=s+136|0;e=r;g=e+40|0;do{f[e>>2]=0;e=e+4|0}while((e|0)<(g|0));f[o>>2]=f[c>>2];if((ul(0,b,o,q,r)|0)<0)c=-1;else{if((f[a+76>>2]|0)>-1)m=ow(a)|0;else m=0;c=f[a>>2]|0;n=c&32;if((d[a+74>>0]|0)<1)f[a>>2]=c&-33;c=a+48|0;if(!(f[c>>2]|0)){g=a+44|0;h=f[g>>2]|0;f[g>>2]=p;i=a+28|0;f[i>>2]=p;j=a+20|0;f[j>>2]=p;f[c>>2]=80;k=a+16|0;f[k>>2]=p+80;e=ul(a,b,o,q,r)|0;if(h){kx[f[a+36>>2]&63](a,0,0)|0;e=(f[j>>2]|0)==0?-1:e;f[g>>2]=h;f[c>>2]=0;f[k>>2]=0;f[i>>2]=0;f[j>>2]=0}}else e=ul(a,b,o,q,r)|0;c=f[a>>2]|0;f[a>>2]=c|n;if(m)pw(a);c=(c&32|0)==0?e:-1}l=s;return c|0}function Kw(a,b,c){a=a|0;b=b|0;c=c|0;var h=0,i=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;P=l;l=l+304|0;H=P+16|0;J=P+8|0;I=P+33|0;K=P;y=P+32|0;if((f[a+76>>2]|0)>-1)O=ow(a)|0;else O=0;h=d[b>>0]|0;a:do if(h<<24>>24){L=a+4|0;M=a+100|0;F=a+108|0;z=a+8|0;A=I+10|0;B=I+33|0;C=J+4|0;D=I+46|0;E=I+94|0;m=h;h=0;n=b;s=0;i=0;b=0;b:while(1){c:do if(!(Hv(m&255)|0)){m=(d[n>>0]|0)==37;d:do if(m){q=n+1|0;o=d[q>>0]|0;e:do switch(o<<24>>24){case 37:break d;case 42:{x=0;o=n+2|0;break}default:{o=(o&255)+-48|0;if(o>>>0<10?(d[n+2>>0]|0)==36:0){f[H>>2]=f[c>>2];while(1){x=(f[H>>2]|0)+(4-1)&~(4-1);m=f[x>>2]|0;f[H>>2]=x+4;if(o>>>0>1)o=o+-1|0;else break}x=m;o=n+3|0;break e}o=(f[c>>2]|0)+(4-1)&~(4-1);x=f[o>>2]|0;f[c>>2]=o+4;o=q}}while(0);m=d[o>>0]|0;n=m&255;if((n+-48|0)>>>0<10){m=0;while(1){q=(m*10|0)+-48+n|0;o=o+1|0;m=d[o>>0]|0;n=m&255;if((n+-48|0)>>>0>=10)break;else m=q}}else q=0;if(m<<24>>24==109){o=o+1|0;r=d[o>>0]|0;m=(x|0)!=0&1;i=0;b=0}else{r=m;m=0}n=o+1|0;switch(r&255|0){case 104:{w=(d[n>>0]|0)==104;n=w?o+2|0:n;o=w?-2:-1;break}case 108:{w=(d[n>>0]|0)==108;n=w?o+2|0:n;o=w?3:1;break}case 106:{o=3;break}case 116:case 122:{o=1;break}case 76:{o=2;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{n=o;o=0;break}default:{N=152;break b}}r=g[n>>0]|0;t=(r&47|0)==3;r=t?r|32:r;t=t?1:o;switch(r|0){case 99:{w=s;v=(q|0)<1?1:q;break}case 91:{w=s;v=q;break}case 110:{if(!x){o=s;break c}switch(t|0){case-2:{d[x>>0]=s;o=s;break c}case-1:{e[x>>1]=s;o=s;break c}case 0:{f[x>>2]=s;o=s;break c}case 1:{f[x>>2]=s;o=s;break c}case 3:{o=x;f[o>>2]=s;f[o+4>>2]=((s|0)<0)<<31>>31;o=s;break c}default:{o=s;break c}}}default:{Nv(a,0);do{o=f[L>>2]|0;if(o>>>0<(f[M>>2]|0)>>>0){f[L>>2]=o+1;o=g[o>>0]|0}else o=Ov(a)|0}while((Hv(o)|0)!=0);o=f[L>>2]|0;if(f[M>>2]|0){o=o+-1|0;f[L>>2]=o}w=(f[F>>2]|0)+s+o-(f[z>>2]|0)|0;v=q}}Nv(a,v);o=f[L>>2]|0;q=f[M>>2]|0;if(o>>>0>>0)f[L>>2]=o+1;else{if((Ov(a)|0)<0){N=152;break b}q=f[M>>2]|0}if(q)f[L>>2]=(f[L>>2]|0)+-1;e:do switch(r|0){case 91:case 99:case 115:{u=(r|0)==99;f:do if((r&239|0)==99){ws(I|0,-1,257)|0;d[I>>0]=0;if((r|0)==115){d[B>>0]=0;d[A>>0]=0;d[A+1>>0]=0;d[A+2>>0]=0;d[A+3>>0]=0;d[A+4>>0]=0}}else{Q=n+1|0;s=(d[Q>>0]|0)==94;o=s&1;r=s?Q:n;n=s?n+2|0:Q;ws(I|0,s&1|0,257)|0;d[I>>0]=0;switch(d[n>>0]|0){case 45:{s=(o^1)&255;d[D>>0]=s;n=r+2|0;break}case 93:{s=(o^1)&255;d[E>>0]=s;n=r+2|0;break}default:s=(o^1)&255}while(1){o=d[n>>0]|0;g:do switch(o<<24>>24){case 0:{N=152;break b}case 93:break f;case 45:{r=n+1|0;o=d[r>>0]|0;switch(o<<24>>24){case 93:case 0:{o=45;break g}default:{}}n=d[n+-1>>0]|0;if((n&255)<(o&255)){n=n&255;do{n=n+1|0;d[I+n>>0]=s;o=d[r>>0]|0}while((n|0)<(o&255|0));n=r}else n=r;break}default:{}}while(0);d[I+((o&255)+1)>>0]=s;n=n+1|0}}while(0);r=u?v+1|0:31;s=(t|0)==1;t=(m|0)!=0;f:do if(s){if(t){b=Cl(r<<2)|0;if(!b){i=0;N=152;break b}}else b=x;f[J>>2]=0;f[C>>2]=0;i=0;g:while(1){q=(b|0)==0;do{h:while(1){o=f[L>>2]|0;if(o>>>0<(f[M>>2]|0)>>>0){f[L>>2]=o+1;o=g[o>>0]|0}else o=Ov(a)|0;if(!(d[I+(o+1)>>0]|0))break g;d[y>>0]=o;switch(fw(K,y,1,J)|0){case-1:{i=0;N=152;break b}case-2:break;default:break h}}if(!q){f[b+(i<<2)>>2]=f[K>>2];i=i+1|0}}while(!(t&(i|0)==(r|0)));i=r<<1|1;o=Fl(b,i<<2)|0;if(!o){i=0;N=152;break b}Q=r;r=i;b=o;i=Q}if(!(gw(J)|0)){i=0;N=152;break b}else{q=i;i=0}}else{if(t){i=Cl(r)|0;if(!i){i=0;b=0;N=152;break b}else o=0;while(1){do{b=f[L>>2]|0;if(b>>>0<(f[M>>2]|0)>>>0){f[L>>2]=b+1;b=g[b>>0]|0}else b=Ov(a)|0;if(!(d[I+(b+1)>>0]|0)){q=o;b=0;break f}d[i+o>>0]=b;o=o+1|0}while((o|0)!=(r|0));b=r<<1|1;o=Fl(i,b)|0;if(!o){b=0;N=152;break b}else{Q=r;r=b;i=o;o=Q}}}if(!x){i=q;while(1){b=f[L>>2]|0;if(b>>>0>>0){f[L>>2]=b+1;b=g[b>>0]|0}else b=Ov(a)|0;if(!(d[I+(b+1)>>0]|0)){q=0;i=0;b=0;break f}i=f[M>>2]|0}}else{i=0;while(1){b=f[L>>2]|0;if(b>>>0>>0){f[L>>2]=b+1;b=g[b>>0]|0}else b=Ov(a)|0;if(!(d[I+(b+1)>>0]|0)){q=i;i=x;b=0;break f}d[x+i>>0]=b;q=f[M>>2]|0;i=i+1|0}}}while(0);o=f[L>>2]|0;if(f[M>>2]|0){o=o+-1|0;f[L>>2]=o}o=o-(f[z>>2]|0)+(f[F>>2]|0)|0;if(!o)break b;if(!((o|0)==(v|0)|u^1))break b;do if(t)if(s){f[x>>2]=b;break}else{f[x>>2]=i;break}while(0);if(!u){if(b)f[b+(q<<2)>>2]=0;if(!i){i=0;break e}d[i+q>>0]=0}break}case 120:case 88:case 112:{o=16;N=134;break}case 111:{o=8;N=134;break}case 117:case 100:{o=10;N=134;break}case 105:{o=0;N=134;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{p=+Lv(a,t,0);if((f[F>>2]|0)==((f[z>>2]|0)-(f[L>>2]|0)|0))break b;if(x)switch(t|0){case 0:{j[x>>2]=p;break e}case 1:{k[x>>3]=p;break e}case 2:{k[x>>3]=p;break e}default:break e}break}default:{}}while(0);e:do if((N|0)==134){N=0;o=Mv(a,o,0,-1,-1)|0;if((f[F>>2]|0)==((f[z>>2]|0)-(f[L>>2]|0)|0))break b;if((x|0)!=0&(r|0)==112){f[x>>2]=o;break}if(x)switch(t|0){case-2:{d[x>>0]=o;break e}case-1:{e[x>>1]=o;break e}case 0:{f[x>>2]=o;break e}case 1:{f[x>>2]=o;break e}case 3:{Q=x;f[Q>>2]=o;f[Q+4>>2]=G;break e}default:break e}}while(0);h=((x|0)!=0&1)+h|0;o=(f[F>>2]|0)+w+(f[L>>2]|0)-(f[z>>2]|0)|0;break c}while(0);n=n+(m&1)|0;Nv(a,0);m=f[L>>2]|0;if(m>>>0<(f[M>>2]|0)>>>0){f[L>>2]=m+1;m=g[m>>0]|0}else m=Ov(a)|0;if((m|0)!=(g[n>>0]|0)){N=21;break b}o=s+1|0}else{while(1){m=n+1|0;if(!(Hv(g[m>>0]|0)|0))break;else n=m}Nv(a,0);do{m=f[L>>2]|0;if(m>>>0<(f[M>>2]|0)>>>0){f[L>>2]=m+1;m=g[m>>0]|0}else m=Ov(a)|0}while((Hv(m)|0)!=0);m=f[L>>2]|0;if(f[M>>2]|0){m=m+-1|0;f[L>>2]=m}o=(f[F>>2]|0)+s+m-(f[z>>2]|0)|0}while(0);n=n+1|0;m=d[n>>0]|0;if(!(m<<24>>24))break a;else s=o}if((N|0)==21){if(f[M>>2]|0)f[L>>2]=(f[L>>2]|0)+-1;if((h|0)!=0|(m|0)>-1)break;else{h=0;N=153}}else if((N|0)==152)if(!h){h=m;N=153}if((N|0)==153){m=h;h=-1}if(m){Dl(i);Dl(b)}}else h=0;while(0);if(O)pw(a);l=P;return h|0}function Lw(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+112|0;m=n;h=m;i=37352;j=h+112|0;do{f[h>>2]=f[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((b+-1|0)>>>0>2147483646)if(!b){b=1;k=4}else{f[(Jv()|0)>>2]=75;b=-1}else{g=a;k=4}if((k|0)==4){k=-2-g|0;k=b>>>0>k>>>0?k:b;f[m+48>>2]=k;a=m+20|0;f[a>>2]=g;f[m+44>>2]=g;b=g+k|0;g=m+16|0;f[g>>2]=b;f[m+28>>2]=b;b=Jw(m,c,e)|0;if(k){c=f[a>>2]|0;d[c+(((c|0)==(f[g>>2]|0))<<31>>31)>>0]=0}}l=n;return b|0}function Mw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0;g=l;l=l+112|0;d=g;e=d;h=e+112|0;do{f[e>>2]=0;e=e+4|0}while((e|0)<(h|0));f[d+32>>2]=29;f[d+44>>2]=a;f[d+76>>2]=-1;f[d+84>>2]=a;h=Kw(d,b,c)|0;l=g;return h|0}function Nw(a,b,c){a=a|0;b=b|0;c=c|0;return+ +wl(a,b,2)}function Ow(a,b,c){a=a|0;b=b|0;c=c|0;a=xl(a,b,c,-1,-1)|0;return a|0}function Pw(a,b,c){a=a|0;b=b|0;c=c|0;a=xl(a,b,c,0,-2147483648)|0;return a|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0;h=b&255;e=(c|0)!=0;a:do if(e&(a&3|0)!=0){g=b&255;while(1){if((d[a>>0]|0)==g<<24>>24){i=6;break a}a=a+1|0;c=c+-1|0;e=(c|0)!=0;if(!(e&(a&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(e)i=6;else c=0;a:do if((i|0)==6){g=b&255;if((d[a>>0]|0)!=g<<24>>24){e=ca(h,16843009)|0;b:do if(c>>>0>3)while(1){h=f[a>>2]^e;if((h&-2139062144^-2139062144)&h+-16843009)break;a=a+4|0;c=c+-4|0;if(c>>>0<=3){i=11;break b}}else i=11;while(0);if((i|0)==11)if(!c){c=0;break}while(1){if((d[a>>0]|0)==g<<24>>24)break a;a=a+1|0;c=c+-1|0;if(!c){c=0;break}}}}while(0);return((c|0)!=0?a:0)|0}function Rw(a,b){a=a|0;b=b|0;var c=0,e=0;c=b;a:do if(!((c^a)&3)){if(c&3)do{c=d[b>>0]|0;d[a>>0]=c;if(!(c<<24>>24))break a;b=b+1|0;a=a+1|0}while((b&3|0)!=0);c=f[b>>2]|0;if(!((c&-2139062144^-2139062144)&c+-16843009)){e=a;while(1){b=b+4|0;a=e+4|0;f[e>>2]=c;c=f[b>>2]|0;if((c&-2139062144^-2139062144)&c+-16843009)break;else e=a}}e=8}else e=8;while(0);if((e|0)==8){e=d[b>>0]|0;d[a>>0]=e;if(e<<24>>24)do{b=b+1|0;a=a+1|0;e=d[b>>0]|0;d[a>>0]=e}while(e<<24>>24!=0)}return a|0}function Sw(a,b){a=a|0;b=b|0;var c=0,e=0;e=d[a>>0]|0;c=d[b>>0]|0;if(e<<24>>24==0?1:e<<24>>24!=c<<24>>24)b=e;else{do{a=a+1|0;b=b+1|0;e=d[a>>0]|0;c=d[b>>0]|0}while(!(e<<24>>24==0?1:e<<24>>24!=c<<24>>24));b=e}return(b&255)-(c&255)|0}function Tw(a,b){a=a|0;b=b|0;Rw(a,b)|0;return a|0}function Uw(a){a=a|0;var b=0,c=0,e=0;e=a;a:do if(!(e&3))c=4;else{b=a;a=e;while(1){if(!(d[b>>0]|0))break a;b=b+1|0;a=b;if(!(a&3)){a=b;c=4;break}}}while(0);if((c|0)==4){while(1){b=f[a>>2]|0;if(!((b&-2139062144^-2139062144)&b+-16843009))a=a+4|0;else break}if((b&255)<<24>>24)do a=a+1|0;while((d[a>>0]|0)!=0)}return a-e|0}function Vw(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,f=0;if(!c)b=0;else{e=d[a>>0]|0;a:do if(!(e<<24>>24))e=0;else while(1){c=c+-1|0;f=d[b>>0]|0;if(!(e<<24>>24==f<<24>>24&((c|0)!=0&f<<24>>24!=0)))break a;a=a+1|0;b=b+1|0;e=d[a>>0]|0;if(!(e<<24>>24)){e=0;break}}while(0);b=(e&255)-(g[b>>0]|0)|0}return b|0}function Ww(a){a=a|0;var b=0;b=a;while(1)if(!(f[b>>2]|0))break;else b=b+4|0;return b-a>>2|0}function Xw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(c){d=a;while(1){c=c+-1|0;f[d>>2]=f[b>>2];if(!c)break;else{b=b+4|0;d=d+4|0}}}return a|0}function Yw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=(c|0)==0;if(a-b>>2>>>0>>0){if(!d)do{c=c+-1|0;f[a+(c<<2)>>2]=f[b+(c<<2)>>2]}while((c|0)!=0)}else if(!d){d=b;b=a;while(1){c=c+-1|0;f[b>>2]=f[d>>2];if(!c)break;else{d=d+4|0;b=b+4|0}}}return a|0}function Zw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(c){d=a;while(1){c=c+-1|0;f[d>>2]=b;if(!c)break;else d=d+4|0}}return a|0}function $w(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,h=0,i=0,j=0;i=a+4|0;c=f[i>>2]|0;j=a+100|0;if(c>>>0<(f[j>>2]|0)>>>0){f[i>>2]=c+1;c=g[c>>0]|0}else c=Ov(a)|0;switch(c|0){case 43:case 45:{d=(c|0)==45&1;c=f[i>>2]|0;if(c>>>0<(f[j>>2]|0)>>>0){f[i>>2]=c+1;c=g[c>>0]|0}else c=Ov(a)|0;if((b|0)!=0&(c+-48|0)>>>0>9?(f[j>>2]|0)!=0:0){f[i>>2]=(f[i>>2]|0)+-1;h=d}else h=d;break}default:h=0}if((c+-48|0)>>>0>9)if(!(f[j>>2]|0)){d=-2147483648;c=0}else{f[i>>2]=(f[i>>2]|0)+-1;d=-2147483648;c=0}else{d=0;do{d=c+-48+(d*10|0)|0;c=f[i>>2]|0;if(c>>>0<(f[j>>2]|0)>>>0){f[i>>2]=c+1;c=g[c>>0]|0}else c=Ov(a)|0}while((c+-48|0)>>>0<10&(d|0)<214748364);b=((d|0)<0)<<31>>31;if((c+-48|0)>>>0<10){do{b=Hs(d|0,b|0,10,0)|0;d=G;c=xs(c|0,((c|0)<0)<<31>>31|0,-48,-1)|0;d=xs(c|0,G|0,b|0,d|0)|0;b=G;c=f[i>>2]|0;if(c>>>0<(f[j>>2]|0)>>>0){f[i>>2]=c+1;c=g[c>>0]|0}else c=Ov(a)|0}while((c+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&d>>>0<2061584302));e=d}else e=d;if((c+-48|0)>>>0<10)do{c=f[i>>2]|0;if(c>>>0<(f[j>>2]|0)>>>0){f[i>>2]=c+1;c=g[c>>0]|0}else c=Ov(a)|0}while((c+-48|0)>>>0<10);if(f[j>>2]|0)f[i>>2]=(f[i>>2]|0)+-1;a=(h|0)!=0;c=vs(0,0,e|0,b|0)|0;d=a?G:b;c=a?c:e}G=d;return c|0}function _w(a){a=a|0;if(!(f[a+68>>2]|0))pw(a);return}function ax(a){a=a|0;if(!(f[a+68>>2]|0))pw(a);return}function bx(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;b=a+20|0;g=a+28|0;if((f[b>>2]|0)>>>0>(f[g>>2]|0)>>>0?(kx[f[a+36>>2]&63](a,0,0)|0,(f[b>>2]|0)==0):0)b=-1;else{h=a+4|0;c=f[h>>2]|0;d=a+8|0;e=f[d>>2]|0;if(c>>>0>>0)kx[f[a+40>>2]&63](a,c-e|0,1)|0;f[a+16>>2]=0;f[g>>2]=0;f[b>>2]=0;f[d>>2]=0;f[h>>2]=0;b=0}return b|0}var cx=[gt,Qi,Ui,Oj,Sj,Xj,Zj,Lq,Wq,gt,gt,gt,gt,gt,gt,gt];var dx=[ht,Pt,Eh,sh,gh,Wg,Kg,yg,hg,rv,qv,nv,ht,ht,ht,ht];var ex=[it,bk,hk,it];var fx=[jt,Lt,Mt,Ah,Bh,oh,ph,ch,dh,Sg,Tg,Gg,Hg,ug,vg,dg,eg,Sf,Tf,Gf,Hf,uf,vf,hf,jf,Xe,Ye,ee,fe,Td,Ud,_b,ac,vd,zd,wd,$n,ao,_n,bo,Sc,Tc,vu,Uc,Lc,Mc,oc,pc,wc,xc,Dc,Ec,Vc,Wc,ad,bd,hd,id,od,pd,Rd,Sd,ne,oe,ue,ve,Be,Ce,Ie,Je,sg,tg,Am,Xt,fu,gu,wu,xu,Mu,Nu,Tu,Uu,Yu,Zu,_u,cv,av,bv,dv,ev,zn,Ql,Wl,kn,_l,fm,ym,zm,ln,An,On,Qn,Pn,Rn,Un,Wn,Vn,Xn,ho,jo,io,ko,ro,so,bn,to,uo,vo,xo,Kk,Bo,Co,Go,Ho,Vo,Wo,np,op,Cp,Dp,Sh,Th,pi,qi,Ni,Pi,Si,Ti,Wi,Xi,fj,gj,qj,rj,Bj,Cj,Mj,Nj,Vj,Wj,_j,ak,fk,gk,lk,mk,qk,rk,yk,zk,al,bl,Kq,tl,hq,iq,jq,kq,wo,Jk,Mk,kl,Pp,Xp,dq,eq,yu,nu,Gu,$b,mn,Tn,Gd,kg,Bv,_w,ax,Jl,Tv,Pj,Rj,Lk,Ur,_r,as,bs,cs,ds,es,Fm,Tm,Dl,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt];var gx=[kt,Ot,Dh,rh,fh,Vg,Jg,xg,gg,Uf,If,wf,kf,Ze,ge,Vd,bc,nn,hu,ku,Rl,Vl,am,em,Cn,$i,_i,aj,bj,dj,ej,jj,kj,lj,mj,oj,pj,uj,vj,wj,xj,zj,Aj,Fj,Gj,Hj,Ij,Kj,Lj,pk,uk,pq,rq,tq,qq,sq,uq,Sb,zu,lu,mu,ou,gn,ic,kc,co,an,Nm,Fd,Zd,Qe,bf,of,Af,Mf,Yf,jg,Ag,Mg,Yg,ih,uh,Gh,Rt,du,Eu,pm,nm,en,lo,om,Lm,Xm,Wm,or,pr,qr,rr,sr,tr,sl,ur,vr,wr,xr,yr,zr,Ar,Br,Cr,Dr,Er,Fr,Gr,Hr,Ir,Jr,Kr,Lr,Mr,Nr,Or,Pr,Qr,Sr,ks,kt,kt];var hx=[lt,Io,Jo,Ko,Lo,Mo,No,Oo,Po,Qo,Ro,So,Xo,Yo,Zo,$o,_o,ap,bp,cp,dp,ep,fp,up,wp,Hp,Mh,Vh,Wh,Xh,Zh,_h,si,ti,ui,wi,yi,ek,kk,Kc,gr,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt];var ix=[mt,rn,sn,Pc,vn,Yt,Ou,Vu,$u,rw,Sl,Hn,Jn,Kn,Gn,Xl,Yl,bm,un,gm,hm,no,Uh,wq,yq,Aq,Gq,Iq,Cq,Eq,ri,xq,zq,Bq,Hq,Jq,Dq,Fq,Yi,Zi,cj,hj,ij,nj,sj,tj,yj,Dj,Ej,Jj,Lp,Mp,Op,lq,nq,mq,oq,ol,pl,rl,Tp,Up,Wp,_p,aq,cq,_t,Iu,fn,qu,Sn,Yn,nt,ot,pt,Xv,Ww,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt];var jx=[qt,Qj,Yj,qt];var kx=[rt,on,tn,xn,rm,sm,fv,yl,uw,tw,sw,vw,Dn,In,Tl,Mn,cm,Ao,Fo,nk,sk,dl,fl,il,Nk,Uk,Xk,$k,jc,vl,Om,Wv,lr,nr,kw,jw,ew,Iw,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt];var lx=[st,dk,jk,st];var mx=[tt,Nc,uv,tv,sv,En,pn,ok,tk,tt,tt,tt,tt,tt,tt,tt];var nx=[ut,tp,zp,Gp,Oh,ut,ut,ut];var ox=[vt,Tj,$j,ck,ik,vt,vt,vt];var px=[wt,Nt,Ch,qh,eh,Ug,Ig,wg,fg,Wf,Kf,yf,mf,_e,ie,Xd,dc,Qc,Rc,Ln,Ul,Zl,Nn,wn,dm,im,yn,cl,el,gl,Sk,Vk,Yk,Au,Wb,Yb,fo,Ik,go,Vv,Uv,Hm,Um,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt];var qx=[xt,yo,Do,pp,qp,vp,Bp,Ep,Fp,Lh,Qh,jl,Kp,Np,_k,nl,ql,Sp,Vp,$p,bq,lw,hw,xt,xt,xt,xt,xt,xt,xt,xt,xt];var rx=[yt,ns,ms,ls];var sx=[zt,Tb,Hu,Uo,Bk,Ck,Dk,Ev,Gv,Fv,zt,zt,zt,zt,zt,zt];var tx=[At,Vf,Jf,xf,lf,$e,he,Wd,cc,hl,Pk,Qk,Rk,Zk,$t,eu,Vq,fr,iw,Rv,fw,ts,ss,rs,qs,ps,os,At,At,At,At,At];var ux=[Bt,qm,Zt,oo,Bu,Dm,Ct,xm,Jm,pu,um,qo,jr,kr,mr,Rm];var vx=[Dt,Et,yv,Ft,zv,Gt,xv,Dt];var wx=[Ht,bi,Ai,Ip,Jp,ll,ml,Qp,Rp,Yp,Zp,Ht,Ht,Ht,Ht,Ht];var xx=[It,xp,Ap,Nh,Ph,It,It,It];var yx=[Jt,Ad,Bd,xd,yd,Oc,qc,rc,yc,zc,Fc,Gc,Xc,Yc,cd,dd,jd,kd,qd,rd,pe,qe,we,xe,De,Ee,Ke,Le,hv,iv,kv,Fn,qn,zo,Eo,Lb,wm,ec,fc,gc,hc,lc,mc,nc,je,ke,le,me,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt];return{_jpegls_encode:Du,___cxa_can_catch:vv,_free:Dl,_jpegls_decode:Cu,___cxa_is_pointer_type:wv,_i64Add:xs,_memmove:Bs,_i64Subtract:vs,_memset:ws,_malloc:Cl,_memcpy:zs,_bitshift64Lshr:ys,_bitshift64Shl:As,__GLOBAL__I_000101:Kl,__GLOBAL__sub_I_jpegls_cpp:Zb,__GLOBAL__sub_I_iostream_cpp:Ll,runPostSets:us,stackAlloc:Bb,stackSave:Cb,stackRestore:Db,establishStackSpace:Eb,setThrew:Fb,setTempRet0:Ib,getTempRet0:Jb,dynCall_iiiiiiii:Ls,dynCall_viiiii:Ms,dynCall_iiiiiid:Ns,dynCall_vi:Os,dynCall_vii:Ps,dynCall_iiiiiii:Qs,dynCall_ii:Rs,dynCall_iiiiiiiiiiii:Ss,dynCall_iiii:Ts,dynCall_viiiiiiiiiiiiiii:Us,dynCall_viiiiii:Vs,dynCall_viiiiiii:Ws,dynCall_viiiiiiiiii:Xs,dynCall_iii:Ys,dynCall_iiiiii:Zs,dynCall_diii:$s,dynCall_i:_s,dynCall_iiiii:at,dynCall_viii:bt,dynCall_v:ct,dynCall_iiiiiiiii:dt,dynCall_iiiiid:et,dynCall_viiii:ft}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_jpegls_encode=Module._jpegls_encode=asm._jpegls_encode,___cxa_can_catch=Module.___cxa_can_catch=asm.___cxa_can_catch,_free=Module._free=asm._free,_jpegls_decode=Module._jpegls_decode=asm._jpegls_decode,___cxa_is_pointer_type=Module.___cxa_is_pointer_type=asm.___cxa_is_pointer_type,_i64Add=Module._i64Add=asm._i64Add,_memmove=Module._memmove=asm._memmove,_i64Subtract=Module._i64Subtract=asm._i64Subtract,_memset=Module._memset=asm._memset,_malloc=Module._malloc=asm._malloc,_memcpy=Module._memcpy=asm._memcpy,runPostSets=Module.runPostSets=asm.runPostSets,__GLOBAL__sub_I_iostream_cpp=Module.__GLOBAL__sub_I_iostream_cpp=asm.__GLOBAL__sub_I_iostream_cpp,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,__GLOBAL__sub_I_jpegls_cpp=Module.__GLOBAL__sub_I_jpegls_cpp=asm.__GLOBAL__sub_I_jpegls_cpp,__GLOBAL__I_000101=Module.__GLOBAL__I_000101=asm.__GLOBAL__I_000101,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,dynCall_iiiiiiii=Module.dynCall_iiiiiiii=asm.dynCall_iiiiiiii,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_iiiiiid=Module.dynCall_iiiiiid=asm.dynCall_iiiiiid,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_iiiiiii=Module.dynCall_iiiiiii=asm.dynCall_iiiiiii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_iiiiiiiiiiii=Module.dynCall_iiiiiiiiiiii=asm.dynCall_iiiiiiiiiiii,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_viiiiiiiiiiiiiii=Module.dynCall_viiiiiiiiiiiiiii=asm.dynCall_viiiiiiiiiiiiiii,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_viiiiiii=Module.dynCall_viiiiiii=asm.dynCall_viiiiiii,dynCall_viiiiiiiiii=Module.dynCall_viiiiiiiiii=asm.dynCall_viiiiiiiiii,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiii=Module.dynCall_iiiii=asm.dynCall_iiiii,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_iiiiiiiii=Module.dynCall_iiiiiiiii=asm.dynCall_iiiiiiiii,dynCall_iiiiid=Module.dynCall_iiiiid=asm.dynCall_iiiiid,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=asm.stackAlloc,Runtime.stackSave=asm.stackSave,Runtime.stackRestore=asm.stackRestore,Runtime.establishStackSpace=asm.establishStackSpace,Runtime.setTempRet0=asm.setTempRet0,Runtime.getTempRet0=asm.getTempRet0,ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function a(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=a)},Module.callMain=Module.callMain=function(a){function b(){for(var a=0;3>a;a++)d.push(0)}assert(0==runDependencies,"cannot call main when async dependencies remain! (listen on __ATMAIN__)"),assert(0==__ATPRERUN__.length,"cannot call main when preRun functions remain to be called"),a=a||[],ensureInitRuntime();var c=a.length+1,d=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];b();for(var e=0;c-1>e;e+=1)d.push(allocate(intArrayFromString(a[e]),"i8",ALLOC_NORMAL)),b();d.push(0),d=allocate(d,"i32",ALLOC_NORMAL);try{var f=Module._main(c,d,0);exit(f,!0)}catch(g){if(g instanceof ExitStatus)return;if("SimulateInfiniteLoop"==g)return void(Module.noExitRuntime=!0);throw g&&"object"==typeof g&&g.stack&&Module.printErr("exception thrown: "+[g,g.stack]),g}finally{calledMain=!0}},Module.run=Module.run=run,Module.exit=Module.exit=exit;var abortDecorators=[];if(Module.abort=Module.abort=abort,Module.preInit)for("function"==typeof Module.preInit&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;return Module.noInitialRun&&(shouldRunNow=!1),run(),Module},ColorSpace={Unkown:0,Grayscale:1,AdobeRGB:2,RGB:3,CYMK:4},JpegImage=function(){"use strict";function a(){}function b(a,b){for(var c,d,e=0,f=[],g=16;g>0&&!a[g-1];)g--;f.push({children:[],index:0});var h,i=f[0];for(c=0;g>c;c++){for(d=0;d0;)i=f.pop();for(i.index++,f.push(i);f.length<=c;)f.push(h={children:[],index:0}),i.children[i.index]=h.children,i=h;e++}g>c+1&&(f.push(h={children:[],index:0}),i.children[i.index]=h.children,i=h)}return f[0].children}function c(a,b,c){return 64*((a.blocksPerLine+1)*b+c)}function d(a,b,d,e,f,g,i,j,k){function l(){if(H>0)return H--,G>>H&1;if(G=a[b++],255==G){var c=a[b++];if(c)throw"unexpected marker: "+(G<<8|c).toString(16)}return H=7,G>>>7}function m(a){for(var b,c=a;null!==(b=l());){if(c=c[b],"number"==typeof c)return c;if("object"!=typeof c)throw"invalid huffman sequence"}return null}function n(a){for(var b=0;a>0;){var c=l();if(null===c)return;b=b<<1|c,a--}return b}function o(a){var b=n(a);return b>=1<e;){var f=m(a.huffmanTableAC),g=15&f,i=f>>4;if(0!==g){e+=i;var j=h[e];a.blockData[b+j]=o(g),e++}else{if(15>i)break;e+=16}}}function q(a,b){var c=m(a.huffmanTableDC),d=0===c?0:o(c)<0)return void I--;for(var c=g,d=i;d>=c;){var e=m(a.huffmanTableAC),f=15&e,j=e>>4;if(0!==f){c+=j;var l=h[c];a.blockData[b+l]=o(f)*(1<j){I=n(j)+(1<=c;){var f=h[c];switch(J){case 0:var j=m(a.huffmanTableAC),p=15&j;if(e=j>>4,0===p)15>e?(I=n(e)+(1<N;){for(y=0;K>y;y++)e[y].pred=0;if(I=0,1==K)for(x=e[0],B=0;f>B;B++)v(x,C,N),N++;else for(B=0;f>B;B++){for(y=0;K>y;y++)for(x=e[y],O=x.h,P=x.v,z=0;P>z;z++)for(A=0;O>A;A++)u(x,C,N,z,A);N++}if(H=0,L=a[b]<<8|a[b+1],65280>=L)throw"marker was not found";if(!(L>=65488&&65495>=L))break;b+=2}return b-F}function e(a,b,c){var d,e,f,g,h,q,r,s,t,u,v=a.quantizationTable;for(u=0;64>u;u++)c[u]=a.blockData[b+u]*v[u];for(u=0;8>u;++u){var w=8*u;0!==c[1+w]||0!==c[2+w]||0!==c[3+w]||0!==c[4+w]||0!==c[5+w]||0!==c[6+w]||0!==c[7+w]?(d=o*c[0+w]+128>>8,e=o*c[4+w]+128>>8,f=c[2+w],g=c[6+w],h=p*(c[1+w]-c[7+w])+128>>8,s=p*(c[1+w]+c[7+w])+128>>8,q=c[3+w]<<4,r=c[5+w]<<4,t=d-e+1>>1,d=d+e+1>>1,e=t,t=f*n+g*m+128>>8,f=f*m-g*n+128>>8,g=t,t=h-r+1>>1,h=h+r+1>>1,r=t,t=s+q+1>>1,q=s-q+1>>1,s=t,t=d-g+1>>1,d=d+g+1>>1,g=t,t=e-f+1>>1,e=e+f+1>>1,f=t,t=h*l+s*k+2048>>12,h=h*k-s*l+2048>>12,s=t,t=q*j+r*i+2048>>12,q=q*i-r*j+2048>>12,r=t,c[0+w]=d+s,c[7+w]=d-s,c[1+w]=e+r,c[6+w]=e-r,c[2+w]=f+q,c[5+w]=f-q,c[3+w]=g+h,c[4+w]=g-h):(t=o*c[0+w]+512>>10,c[0+w]=t,c[1+w]=t,c[2+w]=t,c[3+w]=t,c[4+w]=t,c[5+w]=t,c[6+w]=t,c[7+w]=t)}for(u=0;8>u;++u){var x=u;0!==c[8+x]||0!==c[16+x]||0!==c[24+x]||0!==c[32+x]||0!==c[40+x]||0!==c[48+x]||0!==c[56+x]?(d=o*c[0+x]+2048>>12,e=o*c[32+x]+2048>>12,f=c[16+x],g=c[48+x],h=p*(c[8+x]-c[56+x])+2048>>12,s=p*(c[8+x]+c[56+x])+2048>>12,q=c[24+x],r=c[40+x],t=d-e+1>>1,d=d+e+1>>1,e=t,t=f*n+g*m+2048>>12,f=f*m-g*n+2048>>12,g=t,t=h-r+1>>1,h=h+r+1>>1,r=t,t=s+q+1>>1,q=s-q+1>>1,s=t,t=d-g+1>>1,d=d+g+1>>1,g=t,t=e-f+1>>1,e=e+f+1>>1,f=t,t=h*l+s*k+2048>>12,h=h*k-s*l+2048>>12,s=t,t=q*j+r*i+2048>>12,q=q*i-r*j+2048>>12,r=t,c[0+x]=d+s,c[56+x]=d-s,c[8+x]=e+r,c[48+x]=e-r,c[16+x]=f+q,c[40+x]=f-q,c[24+x]=g+h,c[32+x]=g-h):(t=o*c[u+0]+8192>>14,c[0+x]=t,c[8+x]=t,c[16+x]=t,c[24+x]=t,c[32+x]=t,c[40+x]=t,c[48+x]=t,c[56+x]=t)}for(u=0;64>u;++u){var y=b+u,z=c[u];z=z<=-2056/a.bitConversion?0:z>=2024/a.bitConversion?255/a.bitConversion:z+2056/a.bitConversion>>4,a.blockData[y]=z}}function f(a,b){for(var d=b.blocksPerLine,f=b.blocksPerColumn,g=new Int32Array(64),h=0;f>h;h++)for(var i=0;d>i;i++){var j=c(b,h,i);e(b,j,g)}return b.blockData}function g(a){return 0>=a?0:a>=255?255:0|a}var h=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),i=4017,j=799,k=3406,l=2276,m=1567,n=3784,o=5793,p=2896;return a.prototype={load:function(a){var b=function(a){this.parse(a),this.onload&&this.onload()}.bind(this);if(a.indexOf("data:")>-1){for(var c=a.indexOf("base64,")+7,d=atob(a.substring(c)),e=new Uint8Array(d.length),f=d.length-1;f>=0;f--)e[f]=d.charCodeAt(f);b(d)}else{var g=new XMLHttpRequest;g.open("GET",a,!0),g.responseType="arraybuffer",g.onload=function(){var a=new Uint8Array(g.response);b(a)}.bind(this),g.send(null)}},parse:function(a){function c(){var b=a[k]<<8|a[k+1];return k+=2,b}function e(){var b=c(),d=a.subarray(k,k+b-2);return k+=d.length,d}function g(a){for(var b=Math.ceil(a.samplesPerLine/8/a.maxH),c=Math.ceil(a.scanLines/8/a.maxV),d=0;dk;){var x=a[k++],y=new Int32Array(64);if(x>>4===0)for(s=0;64>s;s++){var z=h[s];y[z]=a[k++]}else{if(x>>4!==1)throw"DQT: invalid table spec";for(s=0;64>s;s++){var A=h[s];y[A]=c()}}n[15&x]=y}break;case 65472:case 65473:case 65474:if(i)throw"Only single frame JPEGs supported";c(),i={},i.extended=65473===q,i.progressive=65474===q,i.precision=a[k++],i.scanLines=c(),i.samplesPerLine=c(),i.components=[],i.componentIds={};var B,C=a[k++],D=0,E=0;for(r=0;C>r;r++){B=a[k];var F=a[k+1]>>4,G=15&a[k+1];F>D&&(D=F),G>E&&(E=G);var H=a[k+2];t=i.components.push({h:F,v:G,quantizationTable:n[H],quantizationTableId:H,bitConversion:255/((1<r;){var J=a[k++],K=new Uint8Array(16),L=0;for(s=0;16>s;s++,k++)L+=K[s]=a[k];var M=new Uint8Array(L);for(s=0;L>s;s++,k++)M[s]=a[k];r+=17+L,(J>>4===0?p:o)[15&J]=b(K,M)}break;case 65501:c(),j=c();break;case 65498:var N,O=(c(),a[k++]),P=[];for(r=0;O>r;r++){var Q=i.componentIds[a[k++]];N=i.components[Q];var R=a[k++];N.huffmanTableDC=p[R>>4],N.huffmanTableAC=o[15&R],P.push(N)}var S=a[k++],T=a[k++],U=a[k++],V=d(a,k,i,P,j,S,T,U>>4,15&U);k+=V;break;default:if(255==a[k-3]&&a[k-2]>=192&&a[k-2]<=254){k-=3;break}throw"unknown JPEG marker "+q.toString(16)}q=c()}switch(this.width=i.samplesPerLine,this.height=i.scanLines,this.jfif=l,this.adobe=m,this.components=[],i.components.length){case 1:this.colorspace=ColorSpace.Grayscale;break;case 3:this.adobe?this.colorspace=ColorSpace.AdobeRGB:this.colorspace=ColorSpace.RGB;break;case 4:this.colorspace=ColorSpace.CYMK;break;default:this.colorspace=ColorSpace.Unknown}for(var r=0;ri;i++){d=this.components[i];for(var q,r,s=d.blocksPerLine,t=d.blocksPerColumn,u=s<<3,v=0,w=0;t>w;w++)for(var x=w<<3,y=0;s>y;y++){var z=c(d,w,y),l=0,A=y<<3;for(q=0;8>q;q++){var v=(x+q)*u;for(r=0;8>r;r++)p[v+A+r]=d.output[z+l++]}}e=d.scaleX*j,f=d.scaleY*k,l=i;var B,C,D;for(h=0;b>h;h++)for(g=0;a>g;g++)C=0|h*f,B=0|g*e,D=C*u+B,o[l]=p[D],l+=m}return o},getData:function(a,b){var d,e,f,h,i,j,k,l,m,n,o,p,q,r,s,t=this.width/a,u=this.height/b,v=0,w=this.components.length,x=a*b*w,y=new Uint8Array(x),z=new Uint8Array((this.components[0].blocksPerLine<<3)*this.components[0].blocksPerColumn*8);for(j=0;w>j;j++){d=this.components[j];for(var A,B,C=d.blocksPerLine,D=d.blocksPerColumn,E=C<<3,F=0,G=0;D>G;G++)for(var H=G<<3,I=0;C>I;I++){var J=c(d,G,I),v=0,K=I<<3;for(A=0;8>A;A++){var F=(H+A)*E;for(B=0;8>B;B++)z[F+K+B]=d.output[J+v++]*d.bitConversion}}e=d.scaleX*t,f=d.scaleY*u,v=j;var L,M,N;for(i=0;b>i;i++)for(h=0;a>h;h++)M=0|i*f,L=0|h*e,N=M*E+L,y[v]=z[N],v+=w}switch(w){case 1:case 2:break;case 3:if(s=!0,this.adobe&&this.adobe.transformCode?s=!0:"undefined"!=typeof this.colorTransform&&(s=!!this.colorTransform),s)for(j=0;x>j;j+=w)k=y[j],l=y[j+1],m=y[j+2],p=g(k-179.456+1.402*m),q=g(k+135.459-.344*l-.714*m),r=g(k-226.816+1.772*l),y[j]=p,y[j+1]=q,y[j+2]=r;break;case 4:if(!this.adobe)throw"Unsupported color mode (4 components)";if(s=!1,this.adobe&&this.adobe.transformCode?s=!0:"undefined"!=typeof this.colorTransform&&(s=!!this.colorTransform),s)for(j=0;x>j;j+=w)k=y[j],l=y[j+1],m=y[j+2],n=g(434.456-k-1.402*m),o=g(119.541-k+.344*l+.714*m),k=g(481.816-k-1.772*l),y[j]=n,y[j+1]=o,y[j+2]=k;break;default:throw"Unsupported color mode"}return y}},a}();!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.jpeg=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g>4!==4092||65476===f;){switch(f){case 65476:this.huffTable.read(this.stream,this.HuffTab);break;case 65484:throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)");case 65499:this.quantTable.read(this.stream,d.lossless.Decoder.TABLE);break;case 65501:this.restartInterval=this.readNumber();break;case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:this.readApp();break;case 65534:this.readComment();break;default:if(f>>8!==255)throw new Error("ERROR: format throw new IOException! (decode)")}f=this.stream.get16()}if(65472>f||f>65479)throw new Error("ERROR: could not handle arithmetic code!");this.frame.read(this.stream),f=this.stream.get16();do{for(;65498!==f;){switch(f){case 65476:this.huffTable.read(this.stream,this.HuffTab);break;case 65484:throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)");case 65499:this.quantTable.read(this.stream,d.lossless.Decoder.TABLE);break;case 65501:this.restartInterval=this.readNumber();break;case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:this.readApp();break;case 65534:this.readComment();break;default:if(f>>8!==255)throw new Error("ERROR: format throw new IOException! (Parser.decode)")}f=this.stream.get16()}switch(this.precision=this.frame.precision,this.components=this.frame.components,this.numBytes||(this.numBytes=parseInt(Math.ceil(this.precision/8))),1==this.numBytes?this.mask=255:this.mask=65535,this.scan.read(this.stream),this.numComp=this.scan.numComp,this.selection=this.scan.selection,1===this.numBytes?3===this.numComp?(this.getter=this.getValueRGB,this.setter=this.setValueRGB,this.output=this.outputRGB):(this.getter=this.getValue8,this.setter=this.setValue8,this.output=this.outputSingle):(this.getter=this.getValue16,this.setter=this.setValue16,this.output=this.outputSingle),this.selection){case 2:this.selector=this.select2;break;case 3:this.selector=this.select3;break;case 4:this.selector=this.select4;break;case 5:this.selector=this.select5;break;case 6:this.selector=this.select6;break;case 7:this.selector=this.select7;break;default:this.selector=this.select1}for(this.scanComps=this.scan.components,this.quantTables=this.quantTable.quantTables,g=0;gg;g+=1)k[g]=1<=d.lossless.Decoder.RESTART_MARKER_BEGIN&&f<=d.lossless.Decoder.RESTART_MARKER_END))break}65500===f&&1===j&&(this.readNumber(),f=this.stream.get16())}while(65497!==f&&this.xLoc>1)},d.lossless.Decoder.prototype.select6=function(a){return this.getPreviousY(a)+(this.getPreviousX(a)-this.getPreviousXY(a)>>1)},d.lossless.Decoder.prototype.select7=function(a){return(this.getPreviousX(a)+this.getPreviousY(a))/2},d.lossless.Decoder.prototype.decodeRGB=function(a,b,c){var e,f,g,h,i,j,k,l;for(a[0]=this.selector(0),a[1]=this.selector(1),a[2]=this.selector(2),i=0;i=65280)return e;for(a[i]=this.IDCT_Source[0]=a[i]+this.getn(c,e,b,c),this.IDCT_Source[0]*=h[0],l=1;64>l;l+=1){if(e=this.getHuffmanValue(f,b,c),e>=65280)return e;if(l+=e>>4,0===(15&e)){if(e>>4===0)break}else this.IDCT_Source[d.lossless.Decoder.IDCT_P[l]]=this.getn(c,15&e,b,c)*h[l]}}return 0},d.lossless.Decoder.prototype.decodeSingle=function(a,b,c){var e,f,g,h;for(this.restarting?(this.restarting=!1,a[0]=1<=65280)return e;if(g=this.getn(a,e,b,c),h=g>>8,h>=d.lossless.Decoder.RESTART_MARKER_BEGIN&&h<=d.lossless.Decoder.RESTART_MARKER_END)return h;a[0]+=g}return 0},d.lossless.Decoder.prototype.getHuffmanValue=function(a,b,c){var e,f,g;if(g=65535,c[0]<8?(b[0]<<=8,f=this.stream.get8(),255===f&&(this.marker=this.stream.get8(),0!==this.marker&&(this.markerIndex=9)),b[0]|=f):c[0]-=8,e=a[b[0]>>c[0]],0!==(e&d.lossless.Decoder.MSB)){if(0!==this.markerIndex)return this.markerIndex=0,65280|this.marker;b[0]&=g>>16-c[0],b[0]<<=8,f=this.stream.get8(),255===f&&(this.marker=this.stream.get8(),0!==this.marker&&(this.markerIndex=9)),b[0]|=f,e=a[256*(255&e)+(b[0]>>c[0])],c[0]+=8}if(c[0]+=8-(e>>8),c[0]<0)throw new Error("index="+c[0]+" temp="+b[0]+" code="+e+" in HuffmanValue()");return c[0]>16-c[0],255&e)},d.lossless.Decoder.prototype.getn=function(a,b,c,d){var e,f,g,h,i;if(f=1,g=-1,h=65535,0===b)return 0;if(16===b)return a[0]>=0?-32768:32768;if(d[0]-=b,d[0]>=0){if(d[0]>d[0],c[0]&=h>>16-d[0]}else{if(c[0]<<=8,i=this.stream.get8(),255===i&&(this.marker=this.stream.get8(),0!==this.marker&&(this.markerIndex=9)),c[0]|=i,d[0]+=8,d[0]<0){if(0!==this.markerIndex)return this.markerIndex=0,(65280|this.marker)<<8;c[0]<<=8,i=this.stream.get8(),255===i&&(this.marker=this.stream.get8(),0!==this.marker&&(this.markerIndex=9)),c[0]|=i,d[0]+=8}if(d[0]<0)throw new Error("index="+d[0]+" in getn()");if(d[0]>d[0],c[0]&=h>>16-d[0]}return f<e&&(e+=(g<0?this.getter(this.yLoc*this.xDim+this.xLoc-1,a):this.yLoc>0?this.getPreviousY(a):1<0&&this.yLoc>0?this.getter((this.yLoc-1)*this.xDim+this.xLoc-1,a):this.getPreviousY(a)},d.lossless.Decoder.prototype.getPreviousY=function(a){return this.yLoc>0?this.getter((this.yLoc-1)*this.xDim+this.xLoc,a):this.getPreviousX(a)},d.lossless.Decoder.prototype.isLastPixel=function(){return this.xLoc===this.xDim-1&&this.yLoc===this.yDim-1},d.lossless.Decoder.prototype.outputSingle=function(a){this.xLoc=this.xDim&&(this.yLoc+=1,this.xLoc=0))},d.lossless.Decoder.prototype.outputRGB=function(a){var b=this.yLoc*this.xDim+this.xLoc;this.xLoc=this.xDim&&(this.yLoc+=1,this.xLoc=0))},d.lossless.Decoder.prototype.setValue16=function(a,b){this.outputData.setInt16(2*a,b,!0)},d.lossless.Decoder.prototype.getValue16=function(a){return this.outputData.getInt16(2*a,!0)&this.mask},d.lossless.Decoder.prototype.setValue8=function(a,b){this.outputData.setInt8(a,b)},d.lossless.Decoder.prototype.getValue8=function(a){return this.outputData.getInt8(a)&this.mask},d.lossless.Decoder.prototype.setValueRGB=function(a,b,c){this.outputData.setUint8(3*a+c,b)},d.lossless.Decoder.prototype.getValueRGB=function(a,b){return this.outputData.getUint8(3*a+b)},d.lossless.Decoder.prototype.readApp=function(){var a=0,b=this.stream.get16();for(a+=2;b>a;)this.stream.get8(),a+=1;return b},d.lossless.Decoder.prototype.readComment=function(){var a,b="",c=0;for(a=this.stream.get16(),c+=2;a>c;)b+=this.stream.get8(),c+=1;return b},d.lossless.Decoder.prototype.readNumber=function(){var a=this.stream.get16();if(4!==a)throw new Error("ERROR: Define number format throw new IOException [Ld!=4]");return this.stream.get16()};var e=typeof b;"undefined"!==e&&b.exports&&(b.exports=d.lossless.Decoder)},{"./data-stream.js":2,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-header.js":9,"./utils.js":10}],4:[function(a,b,c){"use strict";var d=d||{};d.lossless=d.lossless||{},d.lossless.ComponentSpec=d.lossless.ComponentSpec||("undefined"!=typeof a?a("./component-spec.js"):null),d.lossless.DataStream=d.lossless.DataStream||("undefined"!=typeof a?a("./data-stream.js"):null),d.lossless.FrameHeader=d.lossless.FrameHeader||function(){this.components=[],this.dimX=0,this.dimY=0,this.numComp=0,this.precision=0},d.lossless.FrameHeader.prototype.read=function(a){var b,c,e,f,g=0;for(b=a.get16(),g+=2,this.precision=a.get8(),g+=1,this.dimY=a.get16(),g+=2,this.dimX=a.get16(),g+=2,this.numComp=a.get8(),g+=1,c=1;c<=this.numComp;c+=1){if(g>b)throw new Error("ERROR: frame format error");if(e=a.get8(),g+=1,g>=b)throw new Error("ERROR: frame format error [c>=Lf]");f=a.get8(),g+=1,this.components[e]||(this.components[e]=new d.lossless.ComponentSpec),this.components[e].hSamp=f>>4,this.components[e].vSamp=15&f,this.components[e].quantTableSel=a.get8(),g+=1}if(g!==b)throw new Error("ERROR: frame format error [Lf!=count]");return 1};var e=typeof b;"undefined"!==e&&b.exports&&(b.exports=d.lossless.FrameHeader)},{"./component-spec.js":1,"./data-stream.js":2}],5:[function(a,b,c){"use strict";var d=d||{};d.lossless=d.lossless||{},d.lossless.DataStream=d.lossless.DataStream||("undefined"!=typeof a?a("./data-stream.js"):null),d.lossless.Utils=d.lossless.Utils||("undefined"!=typeof a?a("./utils.js"):null),d.lossless.HuffmanTable=d.lossless.HuffmanTable||function(){this.l=d.lossless.Utils.createArray(4,2,16),this.th=[],this.v=d.lossless.Utils.createArray(4,2,16,200),this.tc=d.lossless.Utils.createArray(4,2),this.tc[0][0]=0,this.tc[1][0]=0,this.tc[2][0]=0,this.tc[3][0]=0,this.tc[0][1]=0,this.tc[1][1]=0,this.tc[2][1]=0,this.tc[3][1]=0,this.th[0]=0,this.th[1]=0,this.th[2]=0,this.th[3]=0},d.lossless.HuffmanTable.MSB=2147483648,d.lossless.HuffmanTable.prototype.read=function(a,b){var c,d,e,f,g,h,i=0;for(c=a.get16(),i+=2;c>i;){if(d=a.get8(),i+=1,e=15&d,e>3)throw new Error("ERROR: Huffman table ID > 3");if(f=d>>4,f>2)throw new Error("ERROR: Huffman table [Table class > 2 ]");for(this.th[e]=1,this.tc[e][f]=1,g=0;16>g;g+=1)this.l[e][f][g]=a.get8(),i+=1;for(g=0;16>g;g+=1)for(h=0;hc)throw new Error("ERROR: Huffman table format error [count>Lh]");this.v[e][f][g][h]=a.get8(),i+=1}}if(i!==c)throw new Error("ERROR: Huffman table format error [count!=Lf]");for(g=0;4>g;g+=1)for(h=0;2>h;h+=1)0!==this.tc[g][h]&&this.buildHuffTable(b[g][h],this.l[g][h],this.v[g][h]);return 1},d.lossless.HuffmanTable.prototype.buildHuffTable=function(a,b,c){var e,f,g,h,i,j;for(f=256,g=0,h=0;8>h;h+=1)for(i=0;i>h+1>j;j+=1)a[g]=c[h][i]|h+1<<8,g+=1;for(h=1;256>g;h+=1,g+=1)a[g]=h|d.lossless.HuffmanTable.MSB;for(e=1,g=0,h=8;16>h;h+=1)for(i=0;i>h-7>j;j+=1)a[256*e+g]=c[h][i]|h+1<<8,g+=1;if(g>=256){if(g>256)throw new Error("ERROR: Huffman table error(1)!");g=0,e+=1}}};var e=typeof b;"undefined"!==e&&b.exports&&(b.exports=d.lossless.HuffmanTable)},{"./data-stream.js":2,"./utils.js":10}],6:[function(a,b,c){"use strict";var d=d||{};d.lossless=d.lossless||{},d.lossless.ComponentSpec=d.lossless.ComponentSpec||("undefined"!=typeof a?a("./component-spec.js"):null),d.lossless.DataStream=d.lossless.DataStream||("undefined"!=typeof a?a("./data-stream.js"):null),d.lossless.Decoder=d.lossless.Decoder||("undefined"!=typeof a?a("./decoder.js"):null),d.lossless.FrameHeader=d.lossless.FrameHeader||("undefined"!=typeof a?a("./frame-header.js"):null),d.lossless.HuffmanTable=d.lossless.HuffmanTable||("undefined"!=typeof a?a("./huffman-table.js"):null),d.lossless.QuantizationTable=d.lossless.QuantizationTable||("undefined"!=typeof a?a("./quantization-table.js"):null),d.lossless.ScanComponent=d.lossless.ScanComponent||("undefined"!=typeof a?a("./scan-component.js"):null),d.lossless.ScanHeader=d.lossless.ScanHeader||("undefined"!=typeof a?a("./scan-header.js"):null),d.lossless.Utils=d.lossless.Utils||("undefined"!=typeof a?a("./utils.js"):null);var e=typeof b;"undefined"!==e&&b.exports&&(b.exports=d)},{"./component-spec.js":1,"./data-stream.js":2,"./decoder.js":3,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-component.js":8,"./scan-header.js":9,"./utils.js":10}],7:[function(a,b,c){"use strict";var d=d||{};d.lossless=d.lossless||{},d.lossless.DataStream=d.lossless.DataStream||("undefined"!=typeof a?a("./data-stream.js"):null),d.lossless.Utils=d.lossless.Utils||("undefined"!=typeof a?a("./utils.js"):null),d.lossless.QuantizationTable=d.lossless.QuantizationTable||function(){this.precision=[],this.tq=[],this.quantTables=d.lossless.Utils.createArray(4,64),this.tq[0]=0,this.tq[1]=0,this.tq[2]=0,this.tq[3]=0},d.lossless.QuantizationTable.enhanceQuantizationTable=function(a,b){var c;for(c=0;8>c;c+=1)a[b[0+c]]*=90,a[b[32+c]]*=90,a[b[16+c]]*=118,a[b[48+c]]*=49,a[b[40+c]]*=71,a[b[8+c]]*=126,a[b[56+c]]*=25,a[b[24+c]]*=106;for(c=0;8>c;c+=1)a[b[0+8*c]]*=90,a[b[4+8*c]]*=90,a[b[2+8*c]]*=118,a[b[6+8*c]]*=49,a[b[5+8*c]]*=71,a[b[1+8*c]]*=126,a[b[7+8*c]]*=25,a[b[3+8*c]]*=106;for(c=0;64>c;c+=1)a[c]>>=6},d.lossless.QuantizationTable.prototype.read=function(a,b){var c,e,f,g,h=0;for(c=a.get16(),h+=2;c>h;){if(e=a.get8(),h+=1,f=15&e,f>3)throw new Error("ERROR: Quantization table ID > 3");if(this.precision[f]=e>>4,0===this.precision[f])this.precision[f]=8;else{if(1!==this.precision[f])throw new Error("ERROR: Quantization table precision error");this.precision[f]=16}if(this.tq[f]=1,8===this.precision[f]){for(g=0;64>g;g+=1){if(h>c)throw new Error("ERROR: Quantization table format error");this.quantTables[f][g]=a.get8(),h+=1}d.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[f],b)}else{for(g=0;64>g;g+=1){if(h>c)throw new Error("ERROR: Quantization table format error");this.quantTables[f][g]=a.get16(),h+=2}d.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[f],b)}}if(h!==c)throw new Error("ERROR: Quantization table error [count!=Lq]");return 1};var e=typeof b;"undefined"!==e&&b.exports&&(b.exports=d.lossless.QuantizationTable)},{"./data-stream.js":2,"./utils.js":10}],8:[function(a,b,c){"use strict";var d=d||{};d.lossless=d.lossless||{},d.lossless.ScanComponent=d.lossless.ScanComponent||function(){this.acTabSel=0,this.dcTabSel=0,this.scanCompSel=0};var e=typeof b;"undefined"!==e&&b.exports&&(b.exports=d.lossless.ScanComponent)},{}],9:[function(a,b,c){"use strict";var d=d||{};d.lossless=d.lossless||{},d.lossless.DataStream=d.lossless.DataStream||("undefined"!=typeof a?a("./data-stream.js"):null),d.lossless.ScanComponent=d.lossless.ScanComponent||("undefined"!=typeof a?a("./scan-component.js"):null),d.lossless.ScanHeader=d.lossless.ScanHeader||function(){this.ah=0,this.al=0,this.numComp=0,this.selection=0,this.spectralEnd=0,this.components=[]},d.lossless.ScanHeader.prototype.read=function(a){var b,c,e,f=0;for(b=a.get16(),f+=2,this.numComp=a.get8(),f+=1,c=0;cb)throw new Error("ERROR: scan header format error");this.components[c].scanCompSel=a.get8(),f+=1,e=a.get8(),f+=1,this.components[c].dcTabSel=e>>4,this.components[c].acTabSel=15&e}if(this.selection=a.get8(),f+=1,this.spectralEnd=a.get8(),f+=1,e=a.get8(),this.ah=e>>4,this.al=15&e,f+=1,f!==b)throw new Error("ERROR: scan header format error [count!=Ns]");return 1};var e=typeof b;"undefined"!==e&&b.exports&&(b.exports=d.lossless.ScanHeader)},{"./data-stream.js":2,"./scan-component.js":8}],10:[function(a,b,c){"use strict";var d=d||{};d.lossless=d.lossless||{},d.lossless.Utils=d.lossless.Utils||{},d.lossless.Utils.createArray=function(a){var b=new Array(a||0),c=a;if(arguments.length>1)for(var e=Array.prototype.slice.call(arguments,1);c--;)b[a-1-c]=d.lossless.Utils.createArray.apply(this,e);return b},d.lossless.Utils.makeCRCTable=function(){for(var a,b=[],c=0;256>c;c++){a=c;for(var d=0;8>d;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b},d.lossless.Utils.crc32=function(a){for(var b=d.lossless.Utils.crcTable||(d.lossless.Utils.crcTable=d.lossless.Utils.makeCRCTable()),c=-1,e=0;e>>8^b[255&(c^a.getUint8(e))];return(-1^c)>>>0};var e=typeof b;"undefined"!==e&&b.exports&&(b.exports=d.lossless.Utils)},{}]},{},[6])(6)});var JpxImage=function(){function a(){this.failOnCorruptedImage=!1}function b(a,b){a.x0=Math.ceil(b.XOsiz/a.XRsiz),a.x1=Math.ceil(b.Xsiz/a.XRsiz),a.y0=Math.ceil(b.YOsiz/a.YRsiz),a.y1=Math.ceil(b.Ysiz/a.YRsiz),a.width=a.x1-a.x0,a.height=a.y1-a.y0}function c(a,b){for(var c,d=a.SIZ,e=[],f=Math.ceil((d.Xsiz-d.XTOsiz)/d.XTsiz),g=Math.ceil((d.Ysiz-d.YTOsiz)/d.YTsiz),h=0;g>h;h++)for(var i=0;f>i;i++)c={},c.tx0=Math.max(d.XTOsiz+i*d.XTsiz,d.XOsiz),c.ty0=Math.max(d.YTOsiz+h*d.YTsiz,d.YOsiz),c.tx1=Math.min(d.XTOsiz+(i+1)*d.XTsiz,d.Xsiz),c.ty1=Math.min(d.YTOsiz+(h+1)*d.YTsiz,d.Ysiz),c.width=c.tx1-c.tx0,c.height=c.ty1-c.ty0,c.components=[],e.push(c);a.tiles=e;for(var j=d.Csiz,k=0,l=j;l>k;k++)for(var m=b[k],n=0,o=e.length;o>n;n++){var p={};c=e[n],p.tcx0=Math.ceil(c.tx0/m.XRsiz),p.tcy0=Math.ceil(c.ty0/m.YRsiz),p.tcx1=Math.ceil(c.tx1/m.XRsiz),p.tcy1=Math.ceil(c.ty1/m.YRsiz),p.width=p.tcx1-p.tcx0,p.height=p.tcy1-p.tcy0,c.components[k]=p}}function d(a,b,c){var d=b.codingStyleParameters,e={};return d.entropyCoderWithCustomPrecincts?(e.PPx=d.precinctsSizes[c].PPx,e.PPy=d.precinctsSizes[c].PPy):(e.PPx=15,e.PPy=15),e.xcb_=c>0?Math.min(d.xcb,e.PPx-1):Math.min(d.xcb,e.PPx),e.ycb_=c>0?Math.min(d.ycb,e.PPy-1):Math.min(d.ycb,e.PPy),e}function e(a,b,c){var d=1<b.trx0?Math.ceil(b.trx1/d)-Math.floor(b.trx0/d):0,j=b.try1>b.try0?Math.ceil(b.try1/e)-Math.floor(b.try0/e):0,k=i*j;b.precinctParameters={precinctWidth:d,precinctHeight:e,numprecinctswide:i,numprecinctshigh:j,numprecincts:k,precinctWidthInSubband:g,precinctHeightInSubband:h}}function f(a,b,c){var d,e,f,g,h=c.xcb_,i=c.ycb_,j=1<>h,m=b.tby0>>i,n=b.tbx1+j-1>>h,o=b.tby1+k-1>>i,p=b.resolution.precinctParameters,q=[],r=[];for(e=m;o>e;e++)for(d=l;n>d;d++){f={cbx:d,cby:e,tbx0:j*d,tby0:k*e,tbx1:j*(d+1),tby1:k*(e+1)},f.tbx0_=Math.max(b.tbx0,f.tbx0),f.tby0_=Math.max(b.tby0,f.tby0),f.tbx1_=Math.min(b.tbx1,f.tbx1),f.tby1_=Math.min(b.tby1,f.tby1);var s=Math.floor((f.tbx0_-b.tbx0)/p.precinctWidthInSubband),t=Math.floor((f.tby0_-b.tby0)/p.precinctHeightInSubband);if(g=s+t*p.numprecinctswide,f.precinctNumber=g,f.subbandType=b.type,f.Lblock=3,!(f.tbx1_<=f.tbx0_||f.tby1_<=f.tby0_)){q.push(f);var u=r[g];void 0!==u?(du.cbxMax&&(u.cbxMax=d),eu.cbyMax&&(u.cbyMax=e)):r[g]=u={cbxMin:d,cbyMin:e,cbxMax:d,cbyMax:e},f.precinct=u}}b.codeblockParameters={codeblockWidth:h,codeblockHeight:i,numcodeblockwide:n-l+1,numcodeblockhigh:o-m+1},b.codeblocks=q,b.precincts=r}function g(a,b,c){for(var d=[],e=a.subbands,f=0,g=e.length;g>f;f++)for(var h=e[f],i=h.codeblocks,j=0,k=i.length;k>j;j++){var l=i[j];l.precinctNumber===b&&d.push(l)}return{layerNumber:c,codeblocks:d}}function h(a){for(var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,h=0,i=0;f>i;i++)h=Math.max(h,d.components[i].codingStyleParameters.decompositionLevelsCount);var j=0,k=0,l=0,m=0;this.nextPacket=function(){for(;e>j;j++){for(;h>=k;k++){for(;f>l;l++){var a=d.components[l];if(!(k>a.codingStyleParameters.decompositionLevelsCount)){for(var b=a.resolutions[k],c=b.precinctParameters.numprecincts;c>m;){var i=g(b,m,j);return m++,i}m=0}}l=0}k=0}}}function i(a){for(var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,h=0,i=0;f>i;i++)h=Math.max(h,d.components[i].codingStyleParameters.decompositionLevelsCount);var j=0,k=0,l=0,m=0;this.nextPacket=function(){for(;h>=j;j++){for(;e>k;k++){for(;f>l;l++){var a=d.components[l];if(!(j>a.codingStyleParameters.decompositionLevelsCount)){for(var b=a.resolutions[j],c=b.precinctParameters.numprecincts;c>m;){var i=g(b,m,k);return m++,i}m=0}}l=0}k=0}}}function j(a){var b,c,d,e,f=a.SIZ,h=a.currentTile.index,i=a.tiles[h],j=i.codingStyleDefaultParameters.layersCount,k=f.Csiz,l=0;for(d=0;k>d;d++){var m=i.components[d];l=Math.max(l,m.codingStyleParameters.decompositionLevelsCount)}var n=new Int32Array(l+1);for(c=0;l>=c;++c){var o=0;for(d=0;k>d;++d){var p=i.components[d].resolutions;c=c;c++){for(;ed;d++){var a=i.components[d];if(!(c>a.codingStyleParameters.decompositionLevelsCount)){var f=a.resolutions[c],h=f.precinctParameters.numprecincts;if(!(e>=h)){for(;j>b;){var m=g(f,e,b);return b++,m}b=0}}}d=0}e=0}}}function k(a){var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,h=n(d),i=h,j=0,k=0,l=0,o=0,p=0;this.nextPacket=function(){for(;pl;l++){for(var a=d.components[l],b=a.codingStyleParameters.decompositionLevelsCount;b>=k;k++){var c=a.resolutions[k],n=h.components[l].resolutions[k],q=m(o,p,n,i,c);if(null!==q){for(;e>j;){var r=g(c,q,j);return j++,r}j=0}}k=0}l=0}o=0}}}function l(a){var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,h=n(d),i=0,j=0,k=0,l=0,o=0;this.nextPacket=function(){for(;f>k;++k){for(var a=d.components[k],b=h.components[k],c=a.codingStyleParameters.decompositionLevelsCount;o=j;j++){var n=a.resolutions[j],p=b.resolutions[j],q=m(l,o,p,b,n);if(null!==q){for(;e>i;){var r=g(n,q,i);return i++,r}i=0}}j=0}l=0}o=0}}}function m(a,b,c,d,e){var f=a*d.minWidth,g=b*d.minHeight;if(f%c.width!==0||g%c.height!==0)return null;var h=g/c.width*e.precinctParameters.numprecinctswide;return f/c.height+h}function n(a){for(var b=a.components.length,c=Number.MAX_VALUE,d=Number.MAX_VALUE,e=0,f=0,g=new Array(b),h=0;b>h;h++){for(var i=a.components[h],j=i.codingStyleParameters.decompositionLevelsCount,k=new Array(j+1),l=Number.MAX_VALUE,m=Number.MAX_VALUE,n=0,o=0,p=1,q=j;q>=0;--q){var r=i.resolutions[q],s=p*r.precinctParameters.precinctWidth,t=p*r.precinctParameters.precinctHeight;l=Math.min(l,s),m=Math.min(m,t),n=Math.max(n,r.precinctParameters.numprecinctswide),o=Math.max(o,r.precinctParameters.numprecinctshigh),k[q]={width:s,height:t},p<<=1}c=Math.min(c,l),d=Math.min(d,m),e=Math.max(e,n),f=Math.max(f,o),g[h]={resolutions:k,minWidth:l,minHeight:m,maxNumWide:n,maxNumHigh:o}}return{components:g,minWidth:c,minHeight:d,maxNumWide:e,maxNumHigh:f}}function o(a){for(var b=a.SIZ,c=a.currentTile.index,g=a.tiles[c],m=b.Csiz,n=0;m>n;n++){for(var o=g.components[n],p=o.codingStyleParameters.decompositionLevelsCount,q=[],r=[],s=0;p>=s;s++){var t=d(a,o,s),u={},v=1<l;){if(c+k>=b.length)throw new Error("Unexpected EOF");var d=b[c+k];k++,m?(j=j<<7|d,l+=7,m=!1):(j=j<<8|d,l+=8),255===d&&(m=!0)}return l-=a,j>>>l&(1<a?a+3:(a=e(5),31>a?a+6:(a=e(7),a+37))}for(var j,k=0,l=0,m=!1,n=a.currentTile.index,o=a.tiles[n],p=a.COD.sopMarkerUsed,q=a.COD.ephMarkerUsed,r=o.packetsIterator;d>k;)try{h(),p&&f(145)&&g(4);var s=r.nextPacket();if(void 0===s)return;if(!e(1))continue;for(var t,u=s.layerNumber,x=[],y=0,z=s.codeblocks.length;z>y;y++){t=s.codeblocks[y];var A,B=t.precinct,C=t.cbx-B.cbxMin,D=t.cby-B.cbyMin,E=!1,F=!1;if(void 0!==t.included)E=!!e(1);else{B=t.precinct;var G,H;if(void 0!==B.inclusionTree)G=B.inclusionTree;else{var I=B.cbxMax-B.cbxMin+1,J=B.cbyMax-B.cbyMin+1;G=new w(I,J),H=new v(I,J),B.inclusionTree=G,B.zeroBitPlanesTree=H}for(G.reset(C,D,u);;){if(k>=b.length)return;if(G.isAboveThreshold())break;if(G.isKnown())G.nextLevel();else if(e(1)){if(G.setKnown(),G.isLeaf()){t.included=!0,E=F=!0;break}G.nextLevel()}else G.incrementValue()}}if(E){if(F){for(H=B.zeroBitPlanesTree,H.reset(C,D);;){if(k>=b.length)return;if(e(1)){if(A=!H.nextLevel())break}else H.incrementValue()}t.zeroBitPlanes=H.value}for(var K=i();e(1);)t.Lblock++;var L=log2(K),M=(1<K?L-1:L)+t.Lblock,N=e(M);x.push({codeblock:t,codingpasses:K,dataLength:N})}}for(h(),q&&f(146);x.length>0;){var O=x.shift();t=O.codeblock,void 0===t.data&&(t.data=[]),t.data.push({data:b,start:c+k,end:c+k+O.dataLength,codingpasses:O.codingpasses}),k+=O.dataLength}}catch(P){return}return k}function q(a,b,c,d,e,f,g,h){for(var i=d.tbx0,j=d.tby0,k=d.tbx1-d.tbx0,l=d.codeblocks,m="H"===d.type.charAt(0)?1:0,n="H"===d.type.charAt(1)?b:0,o=0,p=l.length;p>o;++o){var q=l[o],r=q.tbx1_-q.tbx0_,s=q.tby1_-q.tby0_;if(0!==r&&0!==s&&void 0!==q.data){var t,u;t=new x(r,s,q.subbandType,q.zeroBitPlanes,f),u=2;var v,w,y,z=q.data,A=0,B=0;for(v=0,w=z.length;w>v;v++)y=z[v],A+=y.end-y.start,B+=y.codingpasses;var C=new Int16Array(A),D=0;for(v=0,w=z.length;w>v;v++){y=z[v];var E=y.data.subarray(y.start,y.end);C.set(E,D),D+=E.length}var F=new ArithmeticDecoder(C,0,A);for(t.setDecoder(F),v=0;B>v;v++){switch(u){case 0:t.runSignificancePropogationPass();break;case 1:t.runMagnitudeRefinementPass();break;case 2:t.runCleanupPass(),h&&t.checkSegmentationSymbol()}u=(u+1)%3}var G,H,I,J=q.tbx0_-i+(q.tby0_-j)*k,K=t.coefficentsSign,L=t.coefficentsMagnitude,M=t.bitsDecoded,N=g?0:.5;D=0;var O="LL"!==d.type;for(v=0;s>v;v++){var P=J/k|0,Q=2*P*(b-k)+m+n;for(G=0;r>G;G++){if(H=L[D],0!==H){H=(H+N)*e,0!==K[D]&&(H=-H),I=M[D];var R=O?Q+(J<<1):J;g&&I>=f?a[R]=H:a[R]=H*(1<=r;r++){for(var s=d.resolutions[r],t=s.trx1-s.trx0,v=s.try1-s.try0,w=new Float32Array(t*v),x=0,y=s.subbands.length;y>x;x++){var B,C;i?(B=h[p].mu,C=h[p].epsilon,p++):(B=h[0].mu,C=h[0].epsilon+(r>0?1-r:0));var D=s.subbands[x],E=u[D.type],F=m?1:Math.pow(2,l+E-C)*(1+B/2048),G=j+C-1;q(w,t,v,D,F,G,m,k)}o.push({width:t,height:v,items:w})}var H=n.calculate(o,d.tcx0,d.tcy0);return{left:d.tcx0,top:d.tcy0,width:H.width,height:H.height,items:H.items}}function s(a){for(var b=a.SIZ,c=a.components,d=b.Csiz,e=[],f=0,g=a.tiles.length;g>f;f++){var h,i=a.tiles[f],j=[];for(h=0;d>h;h++)j[h]=r(a,i,h);var k=j[0],l=c[0].isSigned;if(l)var m=new Int16Array(k.items.length*d);else var m=new Uint16Array(k.items.length*d);var n,o,p,q,s,t,u,v,w,x,y,z,A,B,C,D={left:k.left,top:k.top,width:k.width,height:k.height,items:m},E=0;if(i.codingStyleDefaultParameters.multipleComponentTransform){var F=4===d,G=j[0].items,H=j[1].items,I=j[2].items,J=F?j[3].items:null; -n=c[0].precision-8,o=(128<t;t++,E+=L)v=G[t]+o,w=H[t],x=I[t],z=v-(x+w>>2),y=z+x,A=z+w,m[E++]=0>=y?0:y>=p?255:y>>n,m[E++]=0>=z?0:z>=p?255:z>>n,m[E++]=0>=A?0:A>=p?255:A>>n;else for(t=0;u>t;t++,E+=L)v=G[t]+o,w=H[t],x=I[t],y=v+1.402*x,z=v-.34413*w-.71414*x,A=v+1.772*w,m[E++]=0>=y?0:y>=p?255:y>>n,m[E++]=0>=z?0:z>=p?255:z>>n,m[E++]=0>=A?0:A>=p?255:A>>n;if(F)for(t=0,E=3;u>t;t++,E+=4)B=J[t],m[E]=q>=B?0:B>=s?255:B+o>>n}else for(h=0;d>h;h++)if(8===c[h].precision){var M=j[h].items;for(n=c[h].precision-8,o=(128<t;t++)C=M[t],m[E]=q>=C?0:C>=p?255:C+o>>n,E+=d}else{var l=c[h].isSigned,M=j[h].items;if(l)for(E=h,t=0,u=M.length;u>t;t++)m[E]=M[t],E+=d;else{n=c[h].precision-8,o=(128<t;t++)C=M[t],m[E]=Math.max(Math.min(C+o,N),0),E+=d}}e.push(D)}return e}function t(a,b){for(var c=a.SIZ,d=c.Csiz,e=a.tiles[b],f=0;d>f;f++){var g=e.components[f],h=void 0!==a.currentTile.QCC[f]?a.currentTile.QCC[f]:a.currentTile.QCD;g.quantizationParameters=h;var i=void 0!==a.currentTile.COC[f]?a.currentTile.COC[f]:a.currentTile.COD;g.codingStyleParameters=i}e.codingStyleDefaultParameters=a.currentTile.COD}var u={LL:0,LH:1,HL:1,HH:2};a.prototype={parse:function(a){var b=readUint16(a,0);if(65359===b)return void this.parseCodestream(a,0,a.length);for(var c=0,d=a.length;d>c;){var e=8,f=readUint32(a,c),g=readUint32(a,c+4);if(c+=e,1===f&&(f=4294967296*readUint32(a,c)+readUint32(a,c+4),c+=8,e+=8),0===f&&(f=d-c+e),e>f)throw new Error("JPX Error: Invalid box field size");var h=f-e,i=!0;switch(g){case 1785737832:i=!1;break;case 1668246642:var j=a[c];if(a[c+1],a[c+2],1===j){var k=readUint32(a,c+3);switch(k){case 16:case 17:case 18:break;default:warn("Unknown colorspace "+k)}}else 2===j&&info("ICC profile not supported");break;case 1785737827:this.parseCodestream(a,c,c+h);break;case 1783636e3:218793738!==readUint32(a,c)&&warn("Invalid JP2 signature");break;case 1783634458:case 1718909296:case 1920099697:case 1919251232:case 1768449138:break;default:var l=String.fromCharCode(g>>24&255,g>>16&255,g>>8&255,255&g);warn("Unsupported header type "+g+" ("+l+")")}i&&(c+=h)}},parseImageProperties:function(a){for(var b=a.getByte();b>=0;){var c=b;b=a.getByte();var d=c<<8|b;if(65361===d){a.skip(4);var e=a.getInt32()>>>0,f=a.getInt32()>>>0,g=a.getInt32()>>>0,h=a.getInt32()>>>0;a.skip(16);var i=a.getUint16();return this.width=e-g,this.height=f-h,this.componentsCount=i,void(this.bitsPerComponent=8)}}throw new Error("JPX Error: No size marker found in JPX stream")},parseCodestream:function(a,d,e){var f={};try{for(var g=!1,h=d;e>h+1;){var i=readUint16(a,h);h+=2;var j,k,l,m,n,q,r=0;switch(i){case 65359:f.mainHeader=!0;break;case 65497:break;case 65361:r=readUint16(a,h);var u={};u.Xsiz=readUint32(a,h+4),u.Ysiz=readUint32(a,h+8),u.XOsiz=readUint32(a,h+12),u.YOsiz=readUint32(a,h+16),u.XTsiz=readUint32(a,h+20),u.YTsiz=readUint32(a,h+24),u.XTOsiz=readUint32(a,h+28),u.YTOsiz=readUint32(a,h+32);var v=readUint16(a,h+36);u.Csiz=v;var w=[];j=h+38;for(var x=0;v>x;x++){var y={precision:(127&a[j])+1,isSigned:!!(128&a[j]),XRsiz:a[j+1],YRsiz:a[j+1]};b(y,u),w.push(y)}f.SIZ=u,f.components=w,c(f,w),f.QCC=[],f.COC=[];break;case 65372:r=readUint16(a,h);var z={};switch(j=h+2,k=a[j++],31&k){case 0:m=8,n=!0;break;case 1:m=16,n=!1;break;case 2:m=16,n=!0;break;default:throw new Error("JPX Error: Invalid SQcd value "+k)}for(z.noQuantization=8===m,z.scalarExpounded=n,z.guardBits=k>>5,l=[];r+h>j;){var A={};8===m?(A.epsilon=a[j++]>>3,A.mu=0):(A.epsilon=a[j]>>3,A.mu=(7&a[j])<<8|a[j+1],j+=2),l.push(A)}z.SPqcds=l,f.mainHeader?f.QCD=z:(f.currentTile.QCD=z,f.currentTile.QCC=[]);break;case 65373:r=readUint16(a,h);var B={};j=h+2;var C;switch(f.SIZ.Csiz<257?C=a[j++]:(C=readUint16(a,j),j+=2),k=a[j++],31&k){case 0:m=8,n=!0;break;case 1:m=16,n=!1;break;case 2:m=16,n=!0;break;default:throw new Error("JPX Error: Invalid SQcd value "+k)}for(B.noQuantization=8===m,B.scalarExpounded=n,B.guardBits=k>>5,l=[];r+h>j;)A={},8===m?(A.epsilon=a[j++]>>3,A.mu=0):(A.epsilon=a[j]>>3,A.mu=(7&a[j])<<8|a[j+1],j+=2),l.push(A);B.SPqcds=l,f.mainHeader?f.QCC[C]=B:f.currentTile.QCC[C]=B;break;case 65362:r=readUint16(a,h);var D={};j=h+2;var E=a[j++];D.entropyCoderWithCustomPrecincts=!!(1&E),D.sopMarkerUsed=!!(2&E),D.ephMarkerUsed=!!(4&E),D.progressionOrder=a[j++],D.layersCount=readUint16(a,j),j+=2,D.multipleComponentTransform=a[j++],D.decompositionLevelsCount=a[j++],D.xcb=(15&a[j++])+2,D.ycb=(15&a[j++])+2;var F=a[j++];if(D.selectiveArithmeticCodingBypass=!!(1&F),D.resetContextProbabilities=!!(2&F),D.terminationOnEachCodingPass=!!(4&F),D.verticalyStripe=!!(8&F),D.predictableTermination=!!(16&F),D.segmentationSymbolUsed=!!(32&F),D.reversibleTransformation=a[j++],D.entropyCoderWithCustomPrecincts){for(var G=[];r+h>j;){var H=a[j++];G.push({PPx:15&H,PPy:H>>4})}D.precinctsSizes=G}var I=[];if(D.selectiveArithmeticCodingBypass&&I.push("selectiveArithmeticCodingBypass"),D.resetContextProbabilities&&I.push("resetContextProbabilities"),D.terminationOnEachCodingPass&&I.push("terminationOnEachCodingPass"),D.verticalyStripe&&I.push("verticalyStripe"),D.predictableTermination&&I.push("predictableTermination"),I.length>0)throw g=!0,new Error("JPX Error: Unsupported COD options ("+I.join(", ")+")");f.mainHeader?f.COD=D:(f.currentTile.COD=D,f.currentTile.COC=[]);break;case 65424:r=readUint16(a,h),q={},q.index=readUint16(a,h+2),q.length=readUint32(a,h+4),q.dataEnd=q.length+h-2,q.partIndex=a[h+8],q.partsCount=a[h+9],f.mainHeader=!1,0===q.partIndex&&(q.COD=f.COD,q.COC=f.COC.slice(0),q.QCD=f.QCD,q.QCC=f.QCC.slice(0)),f.currentTile=q;break;case 65427:q=f.currentTile,0===q.partIndex&&(t(f,q.index),o(f)),r=q.dataEnd-h,p(f,a,h,r);break;case 65365:case 65367:case 65368:case 65380:r=readUint16(a,h);break;case 65363:throw new Error("JPX Error: Codestream code 0xFF53 (COC) is not implemented");default:throw new Error("JPX Error: Unknown codestream code: "+i.toString(16))}h+=r}}catch(J){if(g||this.failOnCorruptedImage)throw J;warn("Trying to recover from "+J.message)}this.tiles=s(f),this.width=f.SIZ.Xsiz-f.SIZ.XOsiz,this.height=f.SIZ.Ysiz-f.SIZ.YOsiz,this.componentsCount=f.SIZ.Csiz}};var v=function(){function a(a,b){var c=log2(Math.max(a,b))+1;this.levels=[];for(var d=0;c>d;d++){var e={width:a,height:b,items:[]};this.levels.push(e),a=Math.ceil(a/2),b=Math.ceil(b/2)}}return a.prototype={reset:function(a,b){for(var c,d=0,e=0;d>=1,b>>=1,d++}d--,c=this.levels[d],c.items[c.index]=e,this.currentLevel=d,delete this.value},incrementValue:function(){var a=this.levels[this.currentLevel];a.items[a.index]++},nextLevel:function(){var a=this.currentLevel,b=this.levels[a],c=b.items[b.index];return a--,0>a?(this.value=c,!1):(this.currentLevel=a,b=this.levels[a],b.items[b.index]=c,!0)}},a}(),w=function(){function a(a,b){var c=log2(Math.max(a,b))+1;this.levels=[];for(var d=0;c>d;d++){for(var e=new Uint8Array(a*b),f=new Uint8Array(a*b),g=0,h=e.length;h>g;g++)e[g]=0,f[g]=0;var i={width:a,height:b,items:e,status:f};this.levels.push(i),a=Math.ceil(a/2),b=Math.ceil(b/2)}}return a.prototype={reset:function(a,b,c){this.currentStopValue=c;for(var d=0;d>=1,b>>=1,d++}this.currentLevel=this.levels.length-1,this.minValue=this.levels[this.currentLevel].items[0]},incrementValue:function(){var a=this.levels[this.currentLevel];a.items[a.index]=a.items[a.index]+1,a.items[a.index]>this.minValue&&(this.minValue=a.items[a.index])},nextLevel:function(){var a=this.currentLevel;if(a--,0>a)return!1;this.currentLevel=a;var b=this.levels[a];return b.items[b.index]this.minValue&&(this.minValue=b.items[b.index]),!0},isLeaf:function(){return 0===this.currentLevel},isAboveThreshold:function(){var a=this.currentLevel,b=this.levels[a];return b.items[b.index]>this.currentStopValue},isKnown:function(){var a=this.currentLevel,b=this.levels[a];return b.status[b.index]>0},setKnown:function(){var a=this.currentLevel,b=this.levels[a];b.status[b.index]=1}},a}(),x=function(){function a(a,b,c,g,h){this.width=a,this.height=b,this.contextLabelTable="HH"===c?f:"HL"===c?e:d;var i=a*b;this.neighborsSignificance=new Uint8Array(i),this.coefficentsSign=new Uint8Array(i),this.coefficentsMagnitude=h>14?new Uint32Array(i):h>6?new Uint16Array(i):new Uint8Array(i),this.processingFlags=new Uint8Array(i);var j=new Uint8Array(i);if(0!==g)for(var k=0;i>k;k++)j[k]=g;this.bitsDecoded=j,this.reset()}var b=17,c=18,d=new Uint8Array([0,5,8,0,3,7,8,0,4,7,8,0,0,0,0,0,1,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8]),e=new Uint8Array([0,3,4,0,5,7,7,0,8,8,8,0,0,0,0,0,1,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8]),f=new Uint8Array([0,1,2,0,1,2,2,0,2,2,2,0,0,0,0,0,3,4,5,0,4,5,5,0,5,5,5,0,0,0,0,0,6,7,7,0,7,7,7,0,7,7,7,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8]);return a.prototype={setDecoder:function(a){this.decoder=a},reset:function(){this.contexts=new Int8Array(19),this.contexts[0]=8,this.contexts[b]=92,this.contexts[c]=6},setNeighborsSignificance:function(a,b,c){var d,e=this.neighborsSignificance,f=this.width,g=this.height,h=b>0,i=f>b+1;a>0&&(d=c-f,h&&(e[d-1]+=16),i&&(e[d+1]+=16),e[d]+=4),g>a+1&&(d=c+f,h&&(e[d-1]+=16),i&&(e[d+1]+=16),e[d]+=4),h&&(e[c-1]+=1),i&&(e[c+1]+=1),e[c]|=128},runSignificancePropogationPass:function(){for(var a=this.decoder,b=this.width,c=this.height,d=this.coefficentsMagnitude,e=this.coefficentsSign,f=this.neighborsSignificance,g=this.processingFlags,h=this.contexts,i=this.contextLabelTable,j=this.bitsDecoded,k=-2,l=1,m=2,n=0;c>n;n+=4)for(var o=0;b>o;o++)for(var p=n*b+o,q=0;4>q;q++,p+=b){var r=n+q;if(r>=c)break;if(g[p]&=k,!d[p]&&f[p]){var s=i[f[p]],t=a.readBit(h,s);if(t){var u=this.decodeSignBit(r,o,p);e[p]=u,d[p]=1,this.setNeighborsSignificance(r,o,p),g[p]|=m}j[p]++,g[p]|=l}}},decodeSignBit:function(a,b,c){var d,e,f,g,h,i,j=this.width,k=this.height,l=this.coefficentsMagnitude,m=this.coefficentsSign;g=b>0&&0!==l[c-1],j>b+1&&0!==l[c+1]?(f=m[c+1],g?(e=m[c-1],d=1-f-e):d=1-f-f):g?(e=m[c-1],d=1-e-e):d=0;var n=3*d;return g=a>0&&0!==l[c-j],k>a+1&&0!==l[c+j]?(f=m[c+j],g?(e=m[c-j],d=1-f-e+n):d=1-f-f+n):g?(e=m[c-j],d=1-e-e+n):d=n,d>=0?(h=9+d,i=this.decoder.readBit(this.contexts,h)):(h=9-d,i=1^this.decoder.readBit(this.contexts,h)),i},runMagnitudeRefinementPass:function(){for(var a,b=this.decoder,c=this.width,d=this.height,e=this.coefficentsMagnitude,f=this.neighborsSignificance,g=this.contexts,h=this.bitsDecoded,i=this.processingFlags,j=1,k=2,l=c*d,m=4*c,n=0;l>n;n=a){a=Math.min(l,n+m);for(var o=0;c>o;o++)for(var p=n+o;a>p;p+=c)if(e[p]&&0===(i[p]&j)){var q=16;if(0!==(i[p]&k)){i[p]^=k;var r=127&f[p];q=0===r?15:14}var s=b.readBit(g,q);e[p]=e[p]<<1|s,h[p]++,i[p]|=j}}},runCleanupPass:function(){for(var a,d=this.decoder,e=this.width,f=this.height,g=this.neighborsSignificance,h=this.coefficentsMagnitude,i=this.coefficentsSign,j=this.contexts,k=this.contextLabelTable,l=this.bitsDecoded,m=this.processingFlags,n=1,o=2,p=e,q=2*e,r=3*e,s=0;f>s;s=a){a=Math.min(s+4,f);for(var t=s*e,u=f>s+3,v=0;e>v;v++){var w,x=t+v,y=u&&0===m[x]&&0===m[x+p]&&0===m[x+q]&&0===m[x+r]&&0===g[x]&&0===g[x+p]&&0===g[x+q]&&0===g[x+r],z=0,A=x,B=s;if(y){var C=d.readBit(j,c);if(!C){l[x]++,l[x+p]++,l[x+q]++,l[x+r]++;continue}z=d.readBit(j,b)<<1|d.readBit(j,b),0!==z&&(B=s+z,A+=z*e),w=this.decodeSignBit(B,v,A),i[A]=w,h[A]=1,this.setNeighborsSignificance(B,v,A),m[A]|=o,A=x;for(var D=s;B>=D;D++,A+=e)l[A]++;z++}for(B=s+z;a>B;B++,A+=e)if(!h[A]&&0===(m[A]&n)){var E=k[g[A]],F=d.readBit(j,E);1===F&&(w=this.decodeSignBit(B,v,A),i[A]=w,h[A]=1,this.setNeighborsSignificance(B,v,A),m[A]|=o),l[A]++}}}},checkSegmentationSymbol:function(){var a=this.decoder,c=this.contexts,d=a.readBit(c,b)<<3|a.readBit(c,b)<<2|a.readBit(c,b)<<1|a.readBit(c,b);if(10!==d)throw new Error("JPX Error: Invalid segmentation symbol")}},a}(),y=function(){function a(){}return a.prototype.calculate=function(a,b,c){for(var d=a[0],e=1,f=a.length;f>e;e++)d=this.iterate(d,a[e],b,c);return d},a.prototype.extend=function(a,b,c){var d=b-1,e=b+1,f=b+c-2,g=b+c;a[d--]=a[e++],a[g++]=a[f--],a[d--]=a[e++],a[g++]=a[f--],a[d--]=a[e++],a[g++]=a[f--],a[d]=a[e],a[g]=a[f]},a.prototype.iterate=function(a,b,c,d){var e,f,g,h,i,j,k=a.width,l=a.height,m=a.items,n=b.width,o=b.height,p=b.items;for(g=0,e=0;l>e;e++)for(h=2*e*n,f=0;k>f;f++,g++,h+=2)p[h]=m[g];m=a.items=null;var q=4,r=new Float32Array(n+2*q);if(1===n){if(0!==(1&c))for(j=0,g=0;o>j;j++,g+=n)p[g]*=.5}else for(j=0,g=0;o>j;j++,g+=n)r.set(p.subarray(g,g+n),q),this.extend(r,q,n),this.filter(r,q,n),p.set(r.subarray(q,q+n),g);var s=16,t=[];for(e=0;s>e;e++)t.push(new Float32Array(o+2*q));var u,v=0;if(a=q+o,1===o){if(0!==(1&d))for(i=0;n>i;i++)p[i]*=.5}else for(i=0;n>i;i++){if(0===v){for(s=Math.min(n-i,s),g=i,h=q;a>h;g+=n,h++)for(u=0;s>u;u++)t[u][h]=p[g+u];v=s}v--;var w=t[v];if(this.extend(w,q,o),this.filter(w,q,o),0===v)for(g=i-s+1,h=q;a>h;g+=n,h++)for(u=0;s>u;u++)p[g+u]=t[u][h]}return{width:n,height:o,items:p}},a}(),z=function(){function a(){y.call(this)}return a.prototype=Object.create(y.prototype),a.prototype.filter=function(a,b,c){var d=c>>1;b=0|b;var e,f,g,h,i=-1.586134342059924,j=-.052980118572961,k=.882911075530934,l=.443506852043971,m=1.230174104914001,n=1/m;for(e=b-3,f=d+4;f--;e+=2)a[e]*=n;for(e=b-2,g=l*a[e-1],f=d+3;f--&&(h=l*a[e+1],a[e]=m*a[e]-g-h,f--);e+=2)e+=2,g=l*a[e+1],a[e]=m*a[e]-g-h;for(e=b-1,g=k*a[e-1],f=d+2;f--&&(h=k*a[e+1],a[e]-=g+h,f--);e+=2)e+=2,g=k*a[e+1],a[e]-=g+h;for(e=b,g=j*a[e-1],f=d+1;f--&&(h=j*a[e+1],a[e]-=g+h,f--);e+=2)e+=2,g=j*a[e+1],a[e]-=g+h;if(0!==d)for(e=b+1,g=i*a[e-1],f=d;f--&&(h=i*a[e+1],a[e]-=g+h,f--);e+=2)e+=2,g=i*a[e+1],a[e]-=g+h},a}(),A=function(){function a(){y.call(this)}return a.prototype=Object.create(y.prototype),a.prototype.filter=function(a,b,c){var d=c>>1;b=0|b;var e,f;for(e=b,f=d+1;f--;e+=2)a[e]-=a[e-1]+a[e+1]+2>>2;for(e=b+1,f=d;f--;e+=2)a[e]+=a[e-1]+a[e+1]>>1},a}();return a}(),ArithmeticDecoder=function(){function a(a,b,c){this.data=a,this.bp=b,this.dataEnd=c,this.chigh=a[b],this.clow=0,this.byteIn(),this.chigh=this.chigh<<7&65535|this.clow>>9&127,this.clow=this.clow<<7&65535,this.ct-=7,this.a=32768}var b=[{qe:22017,nmps:1,nlps:1,switchFlag:1},{qe:13313,nmps:2,nlps:6,switchFlag:0},{qe:6145,nmps:3,nlps:9,switchFlag:0},{qe:2753,nmps:4,nlps:12,switchFlag:0},{qe:1313,nmps:5,nlps:29,switchFlag:0},{qe:545,nmps:38,nlps:33,switchFlag:0},{qe:22017,nmps:7,nlps:6,switchFlag:1},{qe:21505,nmps:8,nlps:14,switchFlag:0},{qe:18433,nmps:9,nlps:14,switchFlag:0},{qe:14337,nmps:10,nlps:14,switchFlag:0},{qe:12289,nmps:11,nlps:17,switchFlag:0},{qe:9217,nmps:12,nlps:18,switchFlag:0},{qe:7169,nmps:13,nlps:20,switchFlag:0},{qe:5633,nmps:29,nlps:21,switchFlag:0},{qe:22017,nmps:15,nlps:14,switchFlag:1},{qe:21505,nmps:16,nlps:14,switchFlag:0},{qe:20737,nmps:17,nlps:15,switchFlag:0},{qe:18433,nmps:18,nlps:16,switchFlag:0},{qe:14337,nmps:19,nlps:17,switchFlag:0},{qe:13313,nmps:20,nlps:18,switchFlag:0},{qe:12289,nmps:21,nlps:19,switchFlag:0},{qe:10241,nmps:22,nlps:19,switchFlag:0},{qe:9217,nmps:23,nlps:20,switchFlag:0},{qe:8705,nmps:24,nlps:21,switchFlag:0},{qe:7169,nmps:25,nlps:22,switchFlag:0},{qe:6145,nmps:26,nlps:23,switchFlag:0},{qe:5633,nmps:27,nlps:24,switchFlag:0},{qe:5121,nmps:28,nlps:25,switchFlag:0},{qe:4609,nmps:29,nlps:26,switchFlag:0},{qe:4353,nmps:30,nlps:27,switchFlag:0},{qe:2753,nmps:31,nlps:28,switchFlag:0},{qe:2497,nmps:32,nlps:29,switchFlag:0},{qe:2209,nmps:33,nlps:30,switchFlag:0},{qe:1313,nmps:34,nlps:31,switchFlag:0},{qe:1089,nmps:35,nlps:32,switchFlag:0},{qe:673,nmps:36,nlps:33,switchFlag:0},{qe:545,nmps:37,nlps:34,switchFlag:0},{qe:321,nmps:38,nlps:35,switchFlag:0},{qe:273,nmps:39,nlps:36,switchFlag:0},{qe:133,nmps:40,nlps:37,switchFlag:0},{qe:73,nmps:41,nlps:38,switchFlag:0},{qe:37,nmps:42,nlps:39,switchFlag:0},{qe:21,nmps:43,nlps:40,switchFlag:0},{qe:9,nmps:44,nlps:41,switchFlag:0},{qe:5,nmps:45,nlps:42,switchFlag:0},{qe:1,nmps:45,nlps:43,switchFlag:0},{qe:22017,nmps:46,nlps:46,switchFlag:0}];return a.prototype={byteIn:function(){var a=this.data,b=this.bp;if(255===a[b]){var c=a[b+1];c>143?(this.clow+=65280,this.ct=8):(b++,this.clow+=a[b]<<9,this.ct=7,this.bp=b)}else b++,this.clow+=b65535&&(this.chigh+=this.clow>>16,this.clow&=65535)},readBit:function(a,c){var d,e=a[c]>>1,f=1&a[c],g=b[e],h=g.qe,i=this.a-h;if(this.chighi?(i=h,d=f,e=g.nmps):(i=h,d=1^f,1===g.switchFlag&&(f=d),e=g.nlps);else{if(this.chigh-=h,0!==(32768&i))return this.a=i,f;h>i?(d=1^f,1===g.switchFlag&&(f=d),e=g.nlps):(d=f,e=g.nmps)}do 0===this.ct&&this.byteIn(),i<<=1,this.chigh=this.chigh<<1&65535|this.clow>>15&1,this.clow=this.clow<<1&65535,this.ct--;while(0===(32768&i));return this.a=i,a[c]=e<<1|f,d}},a}(),globalScope="undefined"==typeof window?this:window,isWorker="undefined"==typeof window,FONT_IDENTITY_MATRIX=[.001,0,0,.001,0,0],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,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4},ImageKind={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3},AnnotationType={WIDGET:1,TEXT:2,LINK:3},StreamType={UNKNOWN:0,FLATE:1,LZW:2,DCT:3,JPX:4,JBIG:5,A85:6,AHX:7,CCF:8,RL:9},FontType={UNKNOWN:0,TYPE1:1,TYPE1C:2,CIDFONTTYPE0:3,CIDFONTTYPE0C:4,TRUETYPE:5,CIDFONTTYPE2:6,TYPE3:7,OPENTYPE:8,TYPE0:9,MMTYPE1:10};globalScope.PDFJS||(globalScope.PDFJS={}),globalScope.PDFJS.pdfBug=!1,PDFJS.VERBOSITY_LEVELS={errors:0,warnings:1,infos:5};var OPS=PDFJS.OPS={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotations:78,endAnnotations:79,beginAnnotation:80,endAnnotation:81,paintJpegXObject:82,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91},UNSUPPORTED_FEATURES=PDFJS.UNSUPPORTED_FEATURES={unknown:"unknown",forms:"forms",javaScript:"javaScript",smask:"smask",shadingPattern:"shadingPattern",font:"font"},UnsupportedManager=PDFJS.UnsupportedManager=function(){var a=[];return{listen:function(b){a.push(b)},notify:function(b){warn('Unsupported feature "'+b+'"');for(var c=0,d=a.length;d>c;c++)a[c](b)}}}();PDFJS.isValidUrl=isValidUrl,PDFJS.shadow=shadow;var PasswordResponses=PDFJS.PasswordResponses={NEED_PASSWORD:1,INCORRECT_PASSWORD:2},PasswordException=function(){function a(a,b){this.name="PasswordException",this.message=a,this.code=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.PasswordException=PasswordException;var UnknownErrorException=function(){function a(a,b){this.name="UnknownErrorException",this.message=a,this.details=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.UnknownErrorException=UnknownErrorException;var InvalidPDFException=function(){function a(a){this.name="InvalidPDFException",this.message=a}return a.prototype=new Error,a.constructor=a,a}();PDFJS.InvalidPDFException=InvalidPDFException;var MissingPDFException=function(){function a(a){this.name="MissingPDFException",this.message=a}return a.prototype=new Error,a.constructor=a,a}();PDFJS.MissingPDFException=MissingPDFException;var UnexpectedResponseException=function(){function a(a,b){this.name="UnexpectedResponseException",this.message=a,this.status=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.UnexpectedResponseException=UnexpectedResponseException;var NotImplementedException=function(){function a(a){this.message=a}return a.prototype=new Error,a.prototype.name="NotImplementedException",a.constructor=a,a}(),MissingDataException=function(){function a(a,b){this.begin=a,this.end=b,this.message="Missing data ["+a+", "+b+")"}return a.prototype=new Error,a.prototype.name="MissingDataException",a.constructor=a,a}(),XRefParseException=function(){function a(a){this.message=a}return a.prototype=new Error,a.prototype.name="XRefParseException",a.constructor=a,a}();Object.defineProperty(PDFJS,"isLittleEndian",{configurable:!0,get:function(){return shadow(PDFJS,"isLittleEndian",isLittleEndian())}}),Object.defineProperty(PDFJS,"hasCanvasTypedArrays",{configurable:!0,get:function(){return shadow(PDFJS,"hasCanvasTypedArrays",hasCanvasTypedArrays())}});var Uint32ArrayView=function(){function a(a,b){this.buffer=a,this.byteLength=a.length,this.length=void 0===b?this.byteLength>>2:b,c(this.length)}function b(a){return{get:function(){var b=this.buffer,c=a<<2;return(b[c]|b[c+1]<<8|b[c+2]<<16|b[c+3]<<24)>>>0},set:function(b){var c=this.buffer,d=a<<2;c[d]=255&b,c[d+1]=b>>8&255,c[d+2]=b>>16&255,c[d+3]=b>>>24&255}}}function c(c){for(;c>d;)Object.defineProperty(a.prototype,d,b(d)),d++}a.prototype=Object.create(null);var d=0;return a}(),IDENTITY_MATRIX=[1,0,0,1,0,0],Util=PDFJS.Util=function(){function a(){}var b=["rgb(",0,",",0,",",0,")"];return a.makeCssRgb=function(a,c,d){return b[1]=a,b[3]=c,b[5]=d,b.join("")},a.transform=function(a,b){return[a[0]*b[0]+a[2]*b[1],a[1]*b[0]+a[3]*b[1],a[0]*b[2]+a[2]*b[3],a[1]*b[2]+a[3]*b[3],a[0]*b[4]+a[2]*b[5]+a[4],a[1]*b[4]+a[3]*b[5]+a[5]]},a.applyTransform=function(a,b){var c=a[0]*b[0]+a[1]*b[2]+b[4],d=a[0]*b[1]+a[1]*b[3]+b[5];return[c,d]},a.applyInverseTransform=function(a,b){var c=b[0]*b[3]-b[1]*b[2],d=(a[0]*b[3]-a[1]*b[2]+b[2]*b[5]-b[4]*b[3])/c,e=(-a[0]*b[1]+a[1]*b[0]+b[4]*b[1]-b[5]*b[0])/c;return[d,e]},a.getAxialAlignedBoundingBox=function(b,c){var d=a.applyTransform(b,c),e=a.applyTransform(b.slice(2,4),c),f=a.applyTransform([b[0],b[3]],c),g=a.applyTransform([b[2],b[1]],c);return[Math.min(d[0],e[0],f[0],g[0]),Math.min(d[1],e[1],f[1],g[1]),Math.max(d[0],e[0],f[0],g[0]),Math.max(d[1],e[1],f[1],g[1])]},a.inverseTransform=function(a){var b=a[0]*a[3]-a[1]*a[2];return[a[3]/b,-a[1]/b,-a[2]/b,a[0]/b,(a[2]*a[5]-a[4]*a[3])/b,(a[4]*a[1]-a[5]*a[0])/b]},a.apply3dTransform=function(a,b){return[a[0]*b[0]+a[1]*b[1]+a[2]*b[2],a[3]*b[0]+a[4]*b[1]+a[5]*b[2],a[6]*b[0]+a[7]*b[1]+a[8]*b[2]]},a.singularValueDecompose2dScale=function(a){var b=[a[0],a[2],a[1],a[3]],c=a[0]*b[0]+a[1]*b[2],d=a[0]*b[1]+a[1]*b[3],e=a[2]*b[0]+a[3]*b[2],f=a[2]*b[1]+a[3]*b[3],g=(c+f)/2,h=Math.sqrt((c+f)*(c+f)-4*(c*f-e*d))/2,i=g+h||1,j=g-h||1;return[Math.sqrt(i),Math.sqrt(j)]},a.normalizeRect=function(a){var b=a.slice(0);return a[0]>a[2]&&(b[0]=a[2],b[2]=a[0]),a[1]>a[3]&&(b[1]=a[3],b[3]=a[1]),b},a.intersect=function(b,c){function d(a,b){return a-b}var e=[b[0],b[2],c[0],c[2]].sort(d),f=[b[1],b[3],c[1],c[3]].sort(d),g=[];return b=a.normalizeRect(b),c=a.normalizeRect(c),e[0]===b[0]&&e[1]===c[0]||e[0]===c[0]&&e[1]===b[0]?(g[0]=e[1],g[2]=e[2],f[0]===b[1]&&f[1]===c[1]||f[0]===c[1]&&f[1]===b[1]?(g[1]=f[1],g[3]=f[2],g):!1):!1},a.sign=function(a){return 0>a?-1:1},a.appendToArray=function(a,b){Array.prototype.push.apply(a,b)},a.prependToArray=function(a,b){Array.prototype.unshift.apply(a,b)},a.extendObj=function(a,b){for(var c in b)a[c]=b[c]},a.getInheritableProperty=function(a,b){for(;a&&!a.has(b);)a=a.get("Parent");return a?a.get(b):null},a.inherit=function(a,b,c){a.prototype=Object.create(b.prototype),a.prototype.constructor=a;for(var d in c)a.prototype[d]=c[d]},a.loadScript=function(a,b){var c=document.createElement("script"),d=!1;c.setAttribute("src",a),b&&(c.onload=function(){d||b(),d=!0}),document.getElementsByTagName("head")[0].appendChild(c)},a}(),PageViewport=PDFJS.PageViewport=function(){function a(a,b,c,d,e,f){this.viewBox=a,this.scale=b,this.rotation=c,this.offsetX=d,this.offsetY=e;var g,h,i,j,k=(a[2]+a[0])/2,l=(a[3]+a[1])/2;switch(c%=360,c=0>c?c+360:c){case 180:g=-1,h=0,i=0,j=1;break;case 90:g=0,h=1,i=1,j=0;break;case 270:g=0,h=-1,i=-1,j=0;break;default:g=1,h=0,i=0,j=-1}f&&(i=-i,j=-j);var m,n,o,p;0===g?(m=Math.abs(l-a[1])*b+d,n=Math.abs(k-a[0])*b+e,o=Math.abs(a[3]-a[1])*b,p=Math.abs(a[2]-a[0])*b):(m=Math.abs(k-a[0])*b+d,n=Math.abs(l-a[1])*b+e,o=Math.abs(a[2]-a[0])*b,p=Math.abs(a[3]-a[1])*b),this.transform=[g*b,h*b,i*b,j*b,m-g*b*k-i*b*l,n-h*b*k-j*b*l],this.width=o,this.height=p,this.fontScale=b}return a.prototype={clone:function(b){b=b||{};var c="scale"in b?b.scale:this.scale,d="rotation"in b?b.rotation:this.rotation;return new a(this.viewBox.slice(),c,d,this.offsetX,this.offsetY,b.dontFlip)},convertToViewportPoint:function(a,b){return Util.applyTransform([a,b],this.transform)},convertToViewportRectangle:function(a){var b=Util.applyTransform([a[0],a[1]],this.transform),c=Util.applyTransform([a[2],a[3]],this.transform);return[b[0],b[1],c[0],c[1]]},convertToPdfPoint:function(a,b){return Util.applyInverseTransform([a,b],this.transform)}},a}(),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,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];PDFJS.createPromiseCapability=createPromiseCapability,function(){function a(a){this._status=b,this._handlers=[];try{a.call(this,this._resolve.bind(this),this._reject.bind(this))}catch(c){this._reject(c)}}if(globalScope.Promise)return"function"!=typeof globalScope.Promise.all&&(globalScope.Promise.all=function(a){var b,c,d=0,e=[],f=new globalScope.Promise(function(a,d){b=a,c=d});return a.forEach(function(a,f){d++,a.then(function(a){e[f]=a,d--,0===d&&b(e)},c)}),0===d&&b(e),f}),"function"!=typeof globalScope.Promise.resolve&&(globalScope.Promise.resolve=function(a){return new globalScope.Promise(function(b){b(a)})}),"function"!=typeof globalScope.Promise.reject&&(globalScope.Promise.reject=function(a){return new globalScope.Promise(function(b,c){c(a)})}),void("function"!=typeof globalScope.Promise.prototype["catch"]&&(globalScope.Promise.prototype["catch"]=function(a){return globalScope.Promise.prototype.then(void 0,a)}));var b=0,c=1,d=2,e=500,f={handlers:[],running:!1,unhandledRejections:[],pendingRejectionCheck:!1,scheduleHandlers:function(a){a._status!==b&&(this.handlers=this.handlers.concat(a._handlers),a._handlers=[],this.running||(this.running=!0,setTimeout(this.runHandlers.bind(this),0)))},runHandlers:function(){for(var a=1,b=Date.now()+a;this.handlers.length>0;){var e=this.handlers.shift(),f=e.thisPromise._status,g=e.thisPromise._value;try{f===c?"function"==typeof e.onResolve&&(g=e.onResolve(g)):"function"==typeof e.onReject&&(g=e.onReject(g),f=c,e.thisPromise._unhandledRejection&&this.removeUnhandeledRejection(e.thisPromise))}catch(h){f=d,g=h}if(e.nextPromise._updateStatus(f,g),Date.now()>=b)break}return this.handlers.length>0?void setTimeout(this.runHandlers.bind(this),0):void(this.running=!1)},addUnhandledRejection:function(a){this.unhandledRejections.push({promise:a,time:Date.now()}),this.scheduleRejectionCheck()},removeUnhandeledRejection:function(a){a._unhandledRejection=!1;for(var b=0;be){var c=this.unhandledRejections[b].promise._value,d="Unhandled rejection: "+c;c.stack&&(d+="\n"+c.stack),warn(d),this.unhandledRejections.splice(b),b--}this.unhandledRejections.length&&this.scheduleRejectionCheck()}.bind(this),e))}};a.all=function(b){function c(a){g._status!==d&&(i=[],f(a))}var e,f,g=new a(function(a,b){e=a,f=b}),h=b.length,i=[];if(0===h)return e(i),g;for(var j=0,k=b.length;k>j;++j){var l=b[j],m=function(a){return function(b){g._status!==d&&(i[a]=b,h--,0===h&&e(i))}}(j);a.isPromise(l)?l.then(m,c):m(l)}return g},a.isPromise=function(a){return a&&"function"==typeof a.then},a.resolve=function(b){return new a(function(a){a(b)})},a.reject=function(b){return new a(function(a,c){c(b)})},a.prototype={_status:null,_value:null,_handlers:null,_unhandledRejection:null,_updateStatus:function(b,e){if(this._status!==c&&this._status!==d){if(b===c&&a.isPromise(e))return void e.then(this._updateStatus.bind(this,c),this._updateStatus.bind(this,d));this._status=b,this._value=e,b===d&&0===this._handlers.length&&(this._unhandledRejection=!0,f.addUnhandledRejection(this)),f.scheduleHandlers(this)}},_resolve:function(a){this._updateStatus(c,a)},_reject:function(a){this._updateStatus(d,a)},then:function(b,c){var d=new a(function(a,b){this.resolve=a,this.reject=b});return this._handlers.push({thisPromise:this,onResolve:b,onReject:c,nextPromise:d}),f.scheduleHandlers(this),d},"catch":function(a){return this.then(void 0,a)}},globalScope.Promise=a}();var StatTimer=function(){function a(a,b,c){for(;a.lengthb;++b){var g=d[b].name;g.length>f&&(f=g.length)}for(b=0,c=d.length;c>b;++b){var h=d[b],i=h.end-h.start;e+=a(h.name," ",f)+" "+i+"ms\n"}return e}},b}();PDFJS.createBlob=function(a,b){if("undefined"!=typeof Blob)return new Blob([a],{type:b});var c=new MozBlobBuilder;return c.append(a),c.getBlob(b)},PDFJS.createObjectURL=function(){var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return function(b,c){if(!PDFJS.disableCreateObjectURL&&"undefined"!=typeof URL&&URL.createObjectURL){var d=PDFJS.createBlob(b,c);return URL.createObjectURL(d)}for(var e="data:"+c+";base64,",f=0,g=b.length;g>f;f+=3){var h=255&b[f],i=255&b[f+1],j=255&b[f+2],k=h>>2,l=(3&h)<<4|i>>4,m=g>f+1?(15&i)<<2|j>>6:64,n=g>f+2?63&j:64;e+=a[k]+a[l]+a[m]+a[n]}return e}}(),MessageHandler.prototype={on:function(a,b,c){var d=this.actionHandler;d[a]&&error('There is already an actionName called "'+a+'"'),d[a]=[b,c]},send:function(a,b,c){var d={action:a,data:b};this.postMessage(d,c)},sendWithPromise:function(a,b,c){var d=this.callbackIndex++,e={action:a,data:b,callbackId:d},f=createPromiseCapability();this.callbacksCapabilities[d]=f;try{this.postMessage(e,c)}catch(g){f.reject(g)}return f.promise},postMessage:function(a,b){b&&this.postMessageTransfers?this.comObj.postMessage(a,b):this.comObj.postMessage(a)}};var OpenJPEG=function(Module){ -function globalEval(a){eval.call(null,a)}function assert(a,b){a||abort("Assertion failed: "+b)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(e){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}function setValue(a,b,c,d){switch(c=c||"i8","*"===c.charAt(c.length-1)&&(c="i32"),c){case"i1":HEAP8[a>>0]=b;break;case"i8":HEAP8[a>>0]=b;break;case"i16":HEAP16[a>>1]=b;break;case"i32":HEAP32[a>>2]=b;break;case"i64":tempI64=[b>>>0,(tempDouble=b,+Math_abs(tempDouble)>=1?tempDouble>0?(0|Math_min(+Math_floor(tempDouble/4294967296),4294967295))>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[a>>2]=tempI64[0],HEAP32[a+4>>2]=tempI64[1];break;case"float":HEAPF32[a>>2]=b;break;case"double":HEAPF64[a>>3]=b;break;default:abort("invalid type for setValue: "+c)}}function getValue(a,b,c){switch(b=b||"i8","*"===b.charAt(b.length-1)&&(b="i32"),b){case"i1":return HEAP8[a>>0];case"i8":return HEAP8[a>>0];case"i16":return HEAP16[a>>1];case"i32":return HEAP32[a>>2];case"i64":return HEAP32[a>>2];case"float":return HEAPF32[a>>2];case"double":return HEAPF64[a>>3];default:abort("invalid type for setValue: "+b)}return null}function allocate(a,b,c,d){var e,f;"number"==typeof a?(e=!0,f=a):(e=!1,f=a.length);var g,h="string"==typeof b?b:null;if(g=c==ALLOC_NONE?d:[_malloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][void 0===c?ALLOC_STATIC:c](Math.max(f,h?1:b.length)),e){var i,d=g;for(assert(0==(3&g)),i=g+(-4&f);i>d;d+=4)HEAP32[d>>2]=0;for(i=g+f;i>d;)HEAP8[d++>>0]=0;return g}if("i8"===h)return a.subarray||a.slice?HEAPU8.set(a,g):HEAPU8.set(new Uint8Array(a),g),g;for(var j,k,l,m=0;f>m;){var n=a[m];"function"==typeof n&&(n=Runtime.getFunctionIndex(n)),j=h||b[m],0!==j?("i64"==j&&(j="i32"),setValue(g+m,n,j),l!==j&&(k=Runtime.getNativeTypeSize(j),l=j),m+=k):m++}return g}function getMemory(a){return staticSealed?"undefined"!=typeof _sbrk&&!_sbrk.called||!runtimeInitialized?Runtime.dynamicAlloc(a):_malloc(a):Runtime.staticAlloc(a)}function Pointer_stringify(a,b){if(0===b||!a)return"";for(var c,d=0,e=0;;){if(c=HEAPU8[a+e>>0],d|=c,0==c&&!b)break;if(e++,b&&e==b)break}b||(b=e);var f="";if(128>d){for(var g,h=1024;b>0;)g=String.fromCharCode.apply(String,HEAPU8.subarray(a,a+Math.min(b,h))),f=f?f+g:g,a+=h,b-=h;return f}return Module.UTF8ToString(a)}function AsciiToString(a){for(var b="";;){var c=HEAP8[a++>>0];if(!c)return b;b+=String.fromCharCode(c)}}function stringToAscii(a,b){return writeAsciiToMemory(a,b,!1)}function UTF8ArrayToString(a,b){for(var c,d,e,f,g,h,i="";;){if(c=a[b++],!c)return i;if(128&c)if(d=63&a[b++],192!=(224&c))if(e=63&a[b++],224==(240&c)?c=(15&c)<<12|d<<6|e:(f=63&a[b++],240==(248&c)?c=(7&c)<<18|d<<12|e<<6|f:(g=63&a[b++],248==(252&c)?c=(3&c)<<24|d<<18|e<<12|f<<6|g:(h=63&a[b++],c=(1&c)<<30|d<<24|e<<18|f<<12|g<<6|h))),65536>c)i+=String.fromCharCode(c);else{var j=c-65536;i+=String.fromCharCode(55296|j>>10,56320|1023&j)}else i+=String.fromCharCode((31&c)<<6|d);else i+=String.fromCharCode(c)}}function UTF8ToString(a){return UTF8ArrayToString(HEAPU8,a)}function stringToUTF8Array(a,b,c,d){if(!(d>0))return 0;for(var e=c,f=c+d-1,g=0;g=55296&&57343>=h&&(h=65536+((1023&h)<<10)|1023&a.charCodeAt(++g)),127>=h){if(c>=f)break;b[c++]=h}else if(2047>=h){if(c+1>=f)break;b[c++]=192|h>>6,b[c++]=128|63&h}else if(65535>=h){if(c+2>=f)break;b[c++]=224|h>>12,b[c++]=128|h>>6&63,b[c++]=128|63&h}else if(2097151>=h){if(c+3>=f)break;b[c++]=240|h>>18,b[c++]=128|h>>12&63,b[c++]=128|h>>6&63,b[c++]=128|63&h}else if(67108863>=h){if(c+4>=f)break;b[c++]=248|h>>24,b[c++]=128|h>>18&63,b[c++]=128|h>>12&63,b[c++]=128|h>>6&63,b[c++]=128|63&h}else{if(c+5>=f)break;b[c++]=252|h>>30,b[c++]=128|h>>24&63,b[c++]=128|h>>18&63,b[c++]=128|h>>12&63,b[c++]=128|h>>6&63,b[c++]=128|63&h}}return b[c]=0,c-e}function stringToUTF8(a,b,c){return stringToUTF8Array(a,HEAPU8,b,c)}function lengthBytesUTF8(a){for(var b=0,c=0;c=55296&&57343>=d&&(d=65536+((1023&d)<<10)|1023&a.charCodeAt(++c)),127>=d?++b:b+=2047>=d?2:65535>=d?3:2097151>=d?4:67108863>=d?5:6}return b}function UTF16ToString(a){for(var b=0,c="";;){var d=HEAP16[a+2*b>>1];if(0==d)return c;++b,c+=String.fromCharCode(d)}}function stringToUTF16(a,b,c){if(void 0===c&&(c=2147483647),2>c)return 0;c-=2;for(var d=b,e=c<2*a.length?c/2:a.length,f=0;e>f;++f){var g=a.charCodeAt(f);HEAP16[b>>1]=g,b+=2}return HEAP16[b>>1]=0,b-d}function lengthBytesUTF16(a){return 2*a.length}function UTF32ToString(a){for(var b=0,c="";;){var d=HEAP32[a+4*b>>2];if(0==d)return c;if(++b,d>=65536){var e=d-65536;c+=String.fromCharCode(55296|e>>10,56320|1023&e)}else c+=String.fromCharCode(d)}}function stringToUTF32(a,b,c){if(void 0===c&&(c=2147483647),4>c)return 0;for(var d=b,e=d+c-4,f=0;f=55296&&57343>=g){var h=a.charCodeAt(++f);g=65536+((1023&g)<<10)|1023&h}if(HEAP32[b>>2]=g,b+=4,b+4>e)break}return HEAP32[b>>2]=0,b-d}function lengthBytesUTF32(a){for(var b=0,c=0;c=55296&&57343>=d&&++c,b+=4}return b}function demangle(a){function b(){i++,"K"===a[i]&&i++;for(var b=[];"E"!==a[i];)if("S"!==a[i])if("C"!==a[i]){var c=parseInt(a.substr(i)),d=c.toString().length;if(!c||!d){i--;break}var e=a.substr(i+d,c);b.push(e),k.push(e),i+=d+c}else b.push(b[b.length-1]),i+=2;else{i++;var f=a.indexOf("_",i),g=a.substring(i,f)||0;b.push(k[g]||"?"),i=f+1}return i++,b}function c(d,e,f){function g(){return"("+m.join(", ")+")"}e=e||1/0;var h,k="",m=[];if("N"===a[i]){if(h=b().join("::"),e--,0===e)return d?[h]:h}else{("K"===a[i]||l&&"L"===a[i])&&i++;var n=parseInt(a.substr(i));if(n){var o=n.toString().length;h=a.substr(i+o,n),i+=o+n}}if(l=!1,"I"===a[i]){i++;var p=c(!0),q=c(!0,1,!0);k+=q[0]+" "+h+"<"+p.join(", ")+">"}else k=h;a:for(;i0;){var r=a[i++];if(r in j)m.push(j[r]);else switch(r){case"P":m.push(c(!0,1,!0)[0]+"*");break;case"R":m.push(c(!0,1,!0)[0]+"&");break;case"L":i++;var s=a.indexOf("E",i),n=s-i;m.push(a.substr(i,n)),i+=n+2;break;case"A":var n=parseInt(a.substr(i));if(i+=n.toString().length,"_"!==a[i])throw"?";i++,m.push(c(!0,1,!0)[0]+" ["+n+"]");break;case"E":break a;default:k+="?"+r;break a}}return f||1!==m.length||"void"!==m[0]||(m=[]),d?(k&&m.push(k+"?"),m):k+g()}var d=!!Module.___cxa_demangle;if(d)try{var e=_malloc(a.length);writeStringToMemory(a.substr(1),e);var f=_malloc(4),g=Module.___cxa_demangle(e,0,0,f);if(0===getValue(f,"i32")&&g)return Pointer_stringify(g)}catch(h){}finally{e&&_free(e),f&&_free(f),g&&_free(g)}var i=3,j={v:"void",b:"bool",c:"char",s:"short",i:"int",l:"long",f:"float",d:"double",w:"wchar_t",a:"signed char",h:"unsigned char",t:"unsigned short",j:"unsigned int",m:"unsigned long",x:"long long",y:"unsigned long long",z:"..."},k=[],l=!0,m=a;try{if("Object._main"==a||"_main"==a)return"main()";if("number"==typeof a&&(a=Pointer_stringify(a)),"_"!==a[0])return a;if("_"!==a[1])return a;if("Z"!==a[2])return a;switch(a[3]){case"n":return"operator new()";case"d":return"operator delete()"}m=c()}catch(h){m+="?"}return m.indexOf("?")>=0&&!d&&Runtime.warnOnce("warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),m}function demangleAll(a){return a.replace(/__Z[\w\d_]+/g,function(a){var b=demangle(a);return a===b?a:a+" ["+b+"]"})}function jsStackTrace(){var a=new Error;if(!a.stack){try{throw new Error(0)}catch(b){a=b}if(!a.stack)return"(no stack trace available)"}return a.stack.toString()}function stackTrace(){return demangleAll(jsStackTrace())}function alignMemoryPage(a){return a%4096>0&&(a+=4096-a%4096),a}function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}function callRuntimeCallbacks(a){for(;a.length>0;){var b=a.shift();if("function"!=typeof b){var c=b.func;"number"==typeof c?void 0===b.arg?Runtime.dynCall("v",c):Runtime.dynCall("vi",c,[b.arg]):c(void 0===b.arg?null:b.arg)}else b()}}function preRun(){if(Module.preRun)for("function"==typeof Module.preRun&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for("function"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(a){__ATPRERUN__.unshift(a)}function addOnInit(a){__ATINIT__.unshift(a)}function addOnPreMain(a){__ATMAIN__.unshift(a)}function addOnExit(a){__ATEXIT__.unshift(a)}function addOnPostRun(a){__ATPOSTRUN__.unshift(a)}function intArrayFromString(a,b,c){var d=c>0?c:lengthBytesUTF8(a)+1,e=new Array(d),f=stringToUTF8Array(a,e,0,e.length);return b&&(e.length=f),e}function intArrayToString(a){for(var b=[],c=0;c255&&(d&=255),b.push(String.fromCharCode(d))}return b.join("")}function writeStringToMemory(a,b,c){for(var d=intArrayFromString(a,c),e=0;e>0]=f,e+=1}}function writeArrayToMemory(a,b){for(var c=0;c>0]=a[c]}function writeAsciiToMemory(a,b,c){for(var d=0;d>0]=a.charCodeAt(d);c||(HEAP8[b>>0]=0)}function unSign(a,b,c){return a>=0?a:32>=b?2*Math.abs(1<=a)return a;var d=32>=b?Math.abs(1<=d&&(32>=b||a>d)&&(a=-2*d+a),a}function getUniqueRunDependency(a){return a}function addRunDependency(a){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}function removeRunDependency(a){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),0==runDependencies&&(null!==runDependencyWatcher&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var b=dependenciesFulfilled;dependenciesFulfilled=null,b()}}function copyTempFloat(a){HEAP8[tempDoublePtr]=HEAP8[a],HEAP8[tempDoublePtr+1]=HEAP8[a+1],HEAP8[tempDoublePtr+2]=HEAP8[a+2],HEAP8[tempDoublePtr+3]=HEAP8[a+3]}function copyTempDouble(a){HEAP8[tempDoublePtr]=HEAP8[a],HEAP8[tempDoublePtr+1]=HEAP8[a+1],HEAP8[tempDoublePtr+2]=HEAP8[a+2],HEAP8[tempDoublePtr+3]=HEAP8[a+3],HEAP8[tempDoublePtr+4]=HEAP8[a+4],HEAP8[tempDoublePtr+5]=HEAP8[a+5],HEAP8[tempDoublePtr+6]=HEAP8[a+6],HEAP8[tempDoublePtr+7]=HEAP8[a+7]}function _abort(){Module.abort()}function ___lock(){}function ___unlock(){}function _emscripten_set_main_loop_timing(a,b){function c(a){a.source===window&&a.data===e&&(a.stopPropagation(),d.shift()())}if(Browser.mainLoop.timingMode=a,Browser.mainLoop.timingValue=b,!Browser.mainLoop.func)return 1;if(0==a)Browser.mainLoop.scheduler=function(){setTimeout(Browser.mainLoop.runner,b)},Browser.mainLoop.method="timeout";else if(1==a)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(2==a){if(!window.setImmediate){var d=[],e="__emcc";window.addEventListener("message",c,!0),window.setImmediate=function(a){d.push(a),window.postMessage(e,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_set_main_loop(a,b,c,d,e){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=a,Browser.mainLoop.arg=d;var f=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var b=Date.now(),c=Browser.mainLoop.queue.shift();if(c.func(c.arg),Browser.mainLoop.remainingBlockers){var e=Browser.mainLoop.remainingBlockers,g=e%1==0?e-1:Math.floor(e);c.counted?Browser.mainLoop.remainingBlockers=g:(g+=.5,Browser.mainLoop.remainingBlockers=(8*e+g)/9)}return console.log('main loop blocker "'+c.name+'" took '+(Date.now()-b)+" ms"),Browser.mainLoop.updateStatus(),void setTimeout(Browser.mainLoop.runner,0)}if(!(f1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0)return void Browser.mainLoop.scheduler();"timeout"===Browser.mainLoop.method&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(function(){"undefined"!=typeof d?Runtime.dynCall("vi",a,[d]):Runtime.dynCall("v",a)}),f0?_emscripten_set_main_loop_timing(0,1e3/b):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),c)throw"SimulateInfiniteLoop"}function ___syscall54(a,b){SYSCALLS.varargs=b;try{return 0}catch(c){return"undefined"!=typeof FS&&c instanceof FS.ErrnoError||abort(c),-c.errno}}function ___setErrNo(a){return Module.___errno_location&&(HEAP32[Module.___errno_location()>>2]=a),a}function _sysconf(a){switch(a){case 30:return PAGE_SIZE;case 85:return totalMemory/PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"==typeof navigator?navigator.hardwareConcurrency||1:1}return ___setErrNo(ERRNO_CODES.EINVAL),-1}function _pthread_cleanup_push(a,b){__ATEXIT__.push(function(){Runtime.dynCall("vi",a,[b])}),_pthread_cleanup_push.level=__ATEXIT__.length}function _pthread_cleanup_pop(){assert(_pthread_cleanup_push.level==__ATEXIT__.length,"cannot pop if something else added meanwhile!"),__ATEXIT__.pop(),_pthread_cleanup_push.level=__ATEXIT__.length}function ___syscall5(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStr(),d=SYSCALLS.get(),e=SYSCALLS.get(),f=FS.open(c,d,e);return f.fd}catch(g){return"undefined"!=typeof FS&&g instanceof FS.ErrnoError||abort(g),-g.errno}}function _emscripten_memcpy_big(a,b,c){return HEAPU8.set(HEAPU8.subarray(b,b+c),a),a}function ___syscall6(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStreamFromFD();return FS.close(c),0}catch(d){return"undefined"!=typeof FS&&d instanceof FS.ErrnoError||abort(d),-d.errno}}function _sbrk(a){var b=_sbrk;b.called||(DYNAMICTOP=alignMemoryPage(DYNAMICTOP),b.called=!0,assert(Runtime.dynamicAlloc),b.alloc=Runtime.dynamicAlloc,Runtime.dynamicAlloc=function(){abort("cannot dynamically allocate, sbrk now has control")});var c=DYNAMICTOP;if(0!=a){var d=b.alloc(a);if(!d)return-1>>>0}return c}function _time(a){var b=Date.now()/1e3|0;return a&&(HEAP32[a>>2]=b),b}function _pthread_self(){return 0}function ___syscall140(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStreamFromFD(),d=SYSCALLS.get(),e=SYSCALLS.get(),f=SYSCALLS.get(),g=SYSCALLS.get(),h=e;return assert(0===d),FS.llseek(c,h,g),HEAP32[f>>2]=c.position,c.getdents&&0===h&&0===g&&(c.getdents=null),0}catch(i){return"undefined"!=typeof FS&&i instanceof FS.ErrnoError||abort(i),-i.errno}}function ___syscall146(a,b){SYSCALLS.varargs=b;try{var c=(SYSCALLS.get(),SYSCALLS.get()),d=SYSCALLS.get(),e=0;___syscall146.buffer||(___syscall146.buffer=[]);for(var f=___syscall146.buffer,g=0;d>g;g++){for(var h=HEAP32[c+8*g>>2],i=HEAP32[c+(8*g+4)>>2],j=0;i>j;j++){var k=HEAPU8[h+j];0===k||10===k?(Module.print(UTF8ArrayToString(f,0)),f.length=0):f.push(k)}e+=i}return e}catch(l){return"undefined"!=typeof FS&&l instanceof FS.ErrnoError||abort(l),-l.errno}}function ___syscall221(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStreamFromFD(),d=SYSCALLS.get();switch(d){case 0:var e=SYSCALLS.get();if(0>e)return-ERRNO_CODES.EINVAL;var f;return f=FS.open(c.path,c.flags,0,e),f.fd;case 1:case 2:return 0;case 3:return c.flags;case 4:var e=SYSCALLS.get();return c.flags|=e,0;case 12:case 12:var e=SYSCALLS.get(),g=0;return HEAP16[e+g>>1]=2,0;case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:return ___setErrNo(ERRNO_CODES.EINVAL),-1;default:return-ERRNO_CODES.EINVAL}}catch(h){return"undefined"!=typeof FS&&h instanceof FS.ErrnoError||abort(h),-h.errno}}function ___syscall145(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStreamFromFD(),d=SYSCALLS.get(),e=SYSCALLS.get();return SYSCALLS.doReadv(c,d,e)}catch(f){return"undefined"!=typeof FS&&f instanceof FS.ErrnoError||abort(f),-f.errno}}function invoke_iiiiiiii(a,b,c,d,e,f,g,h){try{return Module.dynCall_iiiiiiii(a,b,c,d,e,f,g,h)}catch(i){if("number"!=typeof i&&"longjmp"!==i)throw i;asm.setThrew(1,0)}}function invoke_iiii(a,b,c,d){try{return Module.dynCall_iiii(a,b,c,d)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;asm.setThrew(1,0)}}function invoke_di(a,b){try{return Module.dynCall_di(a,b)}catch(c){if("number"!=typeof c&&"longjmp"!==c)throw c;asm.setThrew(1,0)}}function invoke_vi(a,b){try{Module.dynCall_vi(a,b)}catch(c){if("number"!=typeof c&&"longjmp"!==c)throw c;asm.setThrew(1,0)}}function invoke_vii(a,b,c){try{Module.dynCall_vii(a,b,c)}catch(d){if("number"!=typeof d&&"longjmp"!==d)throw d;asm.setThrew(1,0)}}function invoke_iiiiiii(a,b,c,d,e,f,g){try{return Module.dynCall_iiiiiii(a,b,c,d,e,f,g)}catch(h){if("number"!=typeof h&&"longjmp"!==h)throw h;asm.setThrew(1,0)}}function invoke_ii(a,b){try{return Module.dynCall_ii(a,b)}catch(c){if("number"!=typeof c&&"longjmp"!==c)throw c;asm.setThrew(1,0)}}function invoke_viii(a,b,c,d){try{Module.dynCall_viii(a,b,c,d)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;asm.setThrew(1,0)}}function invoke_iiiiiiiiiiii(a,b,c,d,e,f,g,h,i,j,k,l){try{return Module.dynCall_iiiiiiiiiiii(a,b,c,d,e,f,g,h,i,j,k,l)}catch(m){if("number"!=typeof m&&"longjmp"!==m)throw m;asm.setThrew(1,0)}}function invoke_iiiii(a,b,c,d,e){try{return Module.dynCall_iiiii(a,b,c,d,e)}catch(f){if("number"!=typeof f&&"longjmp"!==f)throw f;asm.setThrew(1,0)}}function invoke_iii(a,b,c){try{return Module.dynCall_iii(a,b,c)}catch(d){if("number"!=typeof d&&"longjmp"!==d)throw d;asm.setThrew(1,0)}}function invoke_iiiiii(a,b,c,d,e,f){try{return Module.dynCall_iiiiii(a,b,c,d,e,f)}catch(g){if("number"!=typeof g&&"longjmp"!==g)throw g;asm.setThrew(1,0)}}function invoke_viiii(a,b,c,d,e){try{Module.dynCall_viiii(a,b,c,d,e)}catch(f){if("number"!=typeof f&&"longjmp"!==f)throw f;asm.setThrew(1,0)}}function ExitStatus(a){this.name="ExitStatus",this.message="Program terminated with exit("+a+")",this.status=a}function run(a){function b(){Module.calledRun||(Module.calledRun=!0,ABORT||(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(a),postRun()))}a=a||Module.arguments,null===preloadStartTime&&(preloadStartTime=Date.now()),runDependencies>0||(preRun(),runDependencies>0||Module.calledRun||(Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),b()},1)):b()))}function exit(a,b){if(!b||!Module.noExitRuntime)throw Module.noExitRuntime||(ABORT=!0,EXITSTATUS=a,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(a)),ENVIRONMENT_IS_NODE?(process.stdout.once("drain",function(){process.exit(a)}),console.log(" "),setTimeout(function(){process.exit(a)},500)):ENVIRONMENT_IS_SHELL&&"function"==typeof quit&&quit(a),new ExitStatus(a)}function abort(a){void 0!==a?(Module.print(a),Module.printErr(a),a=JSON.stringify(a)):a="",ABORT=!0,EXITSTATUS=1;var b="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.",c="abort("+a+") at "+stackTrace()+b;throw abortDecorators&&abortDecorators.forEach(function(b){c=b(c,a)}),c}Module=Module||{};var Module;Module||(Module=("undefined"!=typeof OpenJPEG?OpenJPEG:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB="object"==typeof window,ENVIRONMENT_IS_WORKER="function"==typeof importScripts,ENVIRONMENT_IS_NODE="object"==typeof process&&"function"==typeof require&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=function(a){process.stdout.write(a+"\n")}),Module.printErr||(Module.printErr=function(a){process.stderr.write(a+"\n")});var nodeFS=require("fs"),nodePath=require("path");Module.read=function(a,b){a=nodePath.normalize(a);var c=nodeFS.readFileSync(a);return c||a==nodePath.resolve(a)||(a=path.join(__dirname,"..","src",a),c=nodeFS.readFileSync(a)),c&&!b&&(c=c.toString()),c},Module.readBinary=function(a){var b=Module.read(a,!0);return b.buffer||(b=new Uint8Array(b)),assert(b.buffer),b},Module.load=function(a){globalEval(read(a))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Module),process.on("uncaughtException",function(a){if(!(a instanceof ExitStatus))throw a}),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),"undefined"!=typeof printErr&&(Module.printErr=printErr),"undefined"!=typeof read?Module.read=read:Module.read=function(){throw"no read() available (jsc?)"},Module.readBinary=function(a){if("function"==typeof readbuffer)return new Uint8Array(readbuffer(a));var b=read(a,"binary");return assert("object"==typeof b),b},"undefined"!=typeof scriptArgs?Module.arguments=scriptArgs:"undefined"!=typeof arguments&&(Module.arguments=arguments);else{if(!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER)throw"Unknown runtime environment. Where are we?";if(Module.read=function(a){var b=new XMLHttpRequest;return b.open("GET",a,!1),b.send(null),b.responseText},"undefined"!=typeof arguments&&(Module.arguments=arguments),"undefined"!=typeof console)Module.print||(Module.print=function(a){console.log(a)}),Module.printErr||(Module.printErr=function(a){console.log(a)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&"undefined"!=typeof dump?function(a){dump(a)}:function(a){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),"undefined"==typeof Module.setWindowTitle&&(Module.setWindowTitle=function(a){document.title=a})}!Module.load&&Module.read&&(Module.load=function(a){globalEval(Module.read(a))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);var Runtime={setTempRet0:function(a){tempRet0=a},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(a){STACKTOP=a},getNativeTypeSize:function(a){switch(a){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:if("*"===a[a.length-1])return Runtime.QUANTUM_SIZE;if("i"===a[0]){var b=parseInt(a.substr(1));return assert(b%8===0),b/8}return 0}},getNativeFieldSize:function(a){return Math.max(Runtime.getNativeTypeSize(a),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(a,b){return"double"===b||"i64"===b?7&a&&(assert(4===(7&a)),a+=4):assert(0===(3&a)),a},getAlignSize:function(a,b,c){return c||"i64"!=a&&"double"!=a?a?Math.min(b||(a?Runtime.getNativeFieldSize(a):0),Runtime.QUANTUM_SIZE):Math.min(b,8):8},dynCall:function(a,b,c){return c&&c.length?(c.splice||(c=Array.prototype.slice.call(c)),c.splice(0,0,b),Module["dynCall_"+a].apply(null,c)):Module["dynCall_"+a].call(null,b)},functionPointers:[],addFunction:function(a){for(var b=0;b=TOTAL_MEMORY){var c=enlargeMemory();if(!c)return DYNAMICTOP=b,0}return b},alignMemory:function(a,b){var c=a=Math.ceil(a/(b?b:16))*(b?b:16);return c},makeBigInt:function(a,b,c){var d=c?+(a>>>0)+4294967296*+(b>>>0):+(a>>>0)+4294967296*+(0|b);return d},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var __THREW__=0,ABORT=!1,EXITSTATUS=0,undef=0,tempValue,tempInt,tempBigInt,tempInt2,tempBigInt2,tempPair,tempBigIntI,tempBigIntR,tempBigIntS,tempBigIntP,tempBigIntD,tempDouble,tempFloat,tempI64,tempI64b,tempRet0,tempRet1,tempRet2,tempRet3,tempRet4,tempRet5,tempRet6,tempRet7,tempRet8,tempRet9,globalScope=this,cwrap,ccall;!function(){function parseJSFunc(a){var b=a.toString().match(sourceRegex).slice(1);return{arguments:b[0],body:b[1],returnValue:b[2]}}var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(a){var b=Runtime.stackAlloc(a.length);return writeArrayToMemory(a,b),b},stringToC:function(a){var b=0;return null!==a&&void 0!==a&&0!==a&&(b=Runtime.stackAlloc((a.length<<2)+1),writeStringToMemory(a,b)),b}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(a,b,c,d,e){var f=getCFunc(a),g=[],h=0;if(d)for(var i=0;ii;i++){var arg=argNames[i],type=argTypes[i];if("number"!==type){var convertCode=JSsource[type+"ToC"];funcstr+="var "+convertCode.arguments+" = "+arg+";",funcstr+=convertCode.body+";",funcstr+=arg+"="+convertCode.returnValue+";"}}}var cfuncname=parseJSFunc(function(){return cfunc}).returnValue;if(funcstr+="var ret = "+cfuncname+"("+argNames.join(",")+");",!numericRet){var strgfy=parseJSFunc(function(){return Pointer_stringify}).returnValue;funcstr+="ret = "+strgfy+"(ret);"}return numericArgs||(funcstr+=JSsource.stackRestore.body.replace("()","(stack)")+";"),funcstr+="return ret})",eval(funcstr)}}(),Module.ccall=ccall,Module.cwrap=cwrap,Module.setValue=setValue,Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE,Module.allocate=allocate,Module.getMemory=getMemory,Module.Pointer_stringify=Pointer_stringify,Module.AsciiToString=AsciiToString,Module.stringToAscii=stringToAscii,Module.UTF8ArrayToString=UTF8ArrayToString,Module.UTF8ToString=UTF8ToString,Module.stringToUTF8Array=stringToUTF8Array,Module.stringToUTF8=stringToUTF8,Module.lengthBytesUTF8=lengthBytesUTF8,Module.UTF16ToString=UTF16ToString,Module.stringToUTF16=stringToUTF16,Module.lengthBytesUTF16=lengthBytesUTF16,Module.UTF32ToString=UTF32ToString,Module.stringToUTF32=stringToUTF32,Module.lengthBytesUTF32=lengthBytesUTF32,Module.stackTrace=stackTrace;for(var PAGE_SIZE=4096,HEAP,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64,STATIC_BASE=0,STATICTOP=0,staticSealed=!1,STACK_BASE=0,STACKTOP=0,STACK_MAX=0,DYNAMIC_BASE=0,DYNAMICTOP=0,TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||4e8,totalMemory=65536;TOTAL_MEMORY>totalMemory||2*TOTAL_STACK>totalMemory;)16777216>totalMemory?totalMemory*=2:totalMemory+=16777216;totalMemory!==TOTAL_MEMORY&&(TOTAL_MEMORY=totalMemory),assert("undefined"!=typeof Int32Array&&"undefined"!=typeof Float64Array&&!!new Int32Array(1).subarray&&!!new Int32Array(1).set,"JS engine does not provide full typed array support");var buffer;buffer=new ArrayBuffer(TOTAL_MEMORY),HEAP8=new Int8Array(buffer),HEAP16=new Int16Array(buffer),HEAP32=new Int32Array(buffer),HEAPU8=new Uint8Array(buffer),HEAPU16=new Uint16Array(buffer),HEAPU32=new Uint32Array(buffer),HEAPF32=new Float32Array(buffer),HEAPF64=new Float64Array(buffer),HEAP32[0]=255,assert(255===HEAPU8[0]&&0===HEAPU8[3],"Typed arrays 2 must be run on a little-endian system"),Module.HEAP=HEAP,Module.buffer=buffer,Module.HEAP8=HEAP8,Module.HEAP16=HEAP16,Module.HEAP32=HEAP32,Module.HEAPU8=HEAPU8,Module.HEAPU16=HEAPU16,Module.HEAPU32=HEAPU32,Module.HEAPF32=HEAPF32,Module.HEAPF64=HEAPF64;var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1; -Module.addOnPreRun=addOnPreRun,Module.addOnInit=addOnInit,Module.addOnPreMain=addOnPreMain,Module.addOnExit=addOnExit,Module.addOnPostRun=addOnPostRun,Module.intArrayFromString=intArrayFromString,Module.intArrayToString=intArrayToString,Module.writeStringToMemory=writeStringToMemory,Module.writeArrayToMemory=writeArrayToMemory,Module.writeAsciiToMemory=writeAsciiToMemory,Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(a,b){var c=a>>>16,d=65535&a,e=b>>>16,f=65535&b;return d*f+(c*f+d*e<<16)|0}),Math.imul=Math.imul,Math.clz32||(Math.clz32=function(a){a>>>=0;for(var b=0;32>b;b++)if(a&1<<31-b)return b;return 32}),Math.clz32=Math.clz32;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_min=Math.min,Math_clz32=Math.clz32,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;Module.addRunDependency=addRunDependency,Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var memoryInitializer=null,ASM_CONSTS=[];STATIC_BASE=8,STATICTOP=STATIC_BASE+25664,__ATINIT__.push(),allocate([131,192,202,161,69,182,251,63,127,251,58,112,206,136,234,63,127,251,58,112,206,136,234,63,131,192,202,161,69,182,251,63,225,122,20,174,71,225,252,63,94,186,73,12,2,43,249,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,248,63,0,0,0,0,0,0,6,64,0,0,0,0,0,128,21,64,92,143,194,245,40,92,37,64,215,163,112,61,10,87,53,64,246,40,92,143,194,85,69,64,133,235,81,184,30,85,85,64,102,102,102,102,102,86,101,64,205,204,204,204,204,84,117,64,207,247,83,227,165,155,240,63,70,182,243,253,212,120,249,63,39,49,8,172,28,90,7,64,29,90,100,59,223,207,22,64,41,92,143,194,245,168,38,64,164,112,61,10,215,163,54,64,0,0,0,0,0,160,70,64,31,133,235,81,184,158,86,64,205,204,204,204,204,156,102,64,0,0,0,0,0,0,0,0,207,247,83,227,165,155,240,63,70,182,243,253,212,120,249,63,39,49,8,172,28,90,7,64,29,90,100,59,223,207,22,64,41,92,143,194,245,168,38,64,164,112,61,10,215,163,54,64,0,0,0,0,0,160,70,64,31,133,235,81,184,158,86,64,205,204,204,204,204,156,102,64,0,0,0,0,0,0,0,0,173,250,92,109,197,254,230,63,86,125,174,182,98,127,237,63,199,75,55,137,65,96,249,63,242,210,77,98,16,88,8,64,250,126,106,188,116,19,24,64,133,235,81,184,30,5,40,64,0,0,0,0,0,0,56,64,92,143,194,245,40,252,71,64,236,81,184,30,133,251,87,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,113,61,10,215,163,112,255,63,104,145,237,124,63,181,16,64,117,147,24,4,86,206,32,64,102,102,102,102,102,230,48,64,236,81,184,30,133,235,64,64,92,143,194,245,40,236,80,64,154,153,153,153,153,233,96,64,154,153,153,153,153,233,112,64,51,51,51,51,51,231,128,64,147,24,4,86,14,45,0,64,182,243,253,212,120,233,15,64,246,40,92,143,194,181,32,64,10,215,163,112,61,10,49,64,195,245,40,92,143,34,65,64,184,30,133,235,81,40,81,64,154,153,153,153,153,41,97,64,154,153,153,153,153,41,113,64,0,0,0,0,0,40,129,64,0,0,0,0,0,0,0,0,147,24,4,86,14,45,0,64,182,243,253,212,120,233,15,64,246,40,92,143,194,181,32,64,10,215,163,112,61,10,49,64,195,245,40,92,143,34,65,64,184,30,133,235,81,40,81,64,154,153,153,153,153,41,97,64,154,153,153,153,153,41,113,64,0,0,0,0,0,40,129,64,0,0,0,0,0,0,0,0,164,112,61,10,215,163,0,64,236,81,184,30,133,235,14,64,119,190,159,26,47,157,32,64,174,71,225,122,20,46,49,64,123,20,174,71,225,90,65,64,246,40,92,143,194,101,81,64,154,153,153,153,153,105,97,64,154,153,153,153,153,105,113,64,154,153,153,153,153,105,129,64,0,0,0,0,0,0,0,0,4,0,0,0,67,80,82,76,0,0,0,0,0,0,0,0,76,82,67,80,0,0,0,0,3,0,0,0,80,67,82,76,0,0,0,0,1,0,0,0,82,76,67,80,0,0,0,0,2,0,0,0,82,80,67,76,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,144,255,0,0,12,0,0,0,1,0,0,0,82,255,0,0,20,0,0,0,2,0,0,0,83,255,0,0,20,0,0,0,3,0,0,0,94,255,0,0,20,0,0,0,4,0,0,0,92,255,0,0,20,0,0,0,5,0,0,0,93,255,0,0,20,0,0,0,6,0,0,0,95,255,0,0,20,0,0,0,7,0,0,0,81,255,0,0,2,0,0,0,8,0,0,0,85,255,0,0,4,0,0,0,9,0,0,0,87,255,0,0,4,0,0,0,10,0,0,0,88,255,0,0,16,0,0,0,11,0,0,0,96,255,0,0,4,0,0,0,12,0,0,0,97,255,0,0,16,0,0,0,13,0,0,0,145,255,0,0,0,0,0,0,0,0,0,0,99,255,0,0,4,0,0,0,14,0,0,0,100,255,0,0,20,0,0,0,15,0,0,0,116,255,0,0,20,0,0,0,16,0,0,0,120,255,0,0,4,0,0,0,17,0,0,0,117,255,0,0,20,0,0,0,18,0,0,0,119,255,0,0,20,0,0,0,19,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,4,0,0,0,8,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,32,32,80,106,20,0,0,0,112,121,116,102,21,0,0,0,104,50,112,106,22,0,0,0,114,100,104,105,23,0,0,0,114,108,111,99,24,0,0,0,99,99,112,98,25,0,0,0,114,108,99,112,26,0,0,0,112,97,109,99,27,0,0,0,102,101,100,99,28,0,0,0,1,86,0,0,0,0,0,0,164,4,0,0,180,4,0,0,1,86,0,0,1,0,0,0,180,4,0,0,164,4,0,0,1,52,0,0,0,0,0,0,196,4,0,0,68,5,0,0,1,52,0,0,1,0,0,0,212,4,0,0,84,5,0,0,1,24,0,0,0,0,0,0,228,4,0,0,164,5,0,0,1,24,0,0,1,0,0,0,244,4,0,0,180,5,0,0,193,10,0,0,0,0,0,0,4,5,0,0,4,6,0,0,193,10,0,0,1,0,0,0,20,5,0,0,20,6,0,0,33,5,0,0,0,0,0,0,36,5,0,0,36,8,0,0,33,5,0,0,1,0,0,0,52,5,0,0,52,8,0,0,33,2,0,0,0,0,0,0,68,9,0,0,164,8,0,0,33,2,0,0,1,0,0,0,84,9,0,0,180,8,0,0,1,86,0,0,0,0,0,0,100,5,0,0,84,5,0,0,1,86,0,0,1,0,0,0,116,5,0,0,68,5,0,0,1,84,0,0,0,0,0,0,132,5,0,0,68,6,0,0,1,84,0,0,1,0,0,0,148,5,0,0,84,6,0,0,1,72,0,0,0,0,0,0,164,5,0,0,68,6,0,0,1,72,0,0,1,0,0,0,180,5,0,0,84,6,0,0,1,56,0,0,0,0,0,0,196,5,0,0,68,6,0,0,1,56,0,0,1,0,0,0,212,5,0,0,84,6,0,0,1,48,0,0,0,0,0,0,228,5,0,0,164,6,0,0,1,48,0,0,1,0,0,0,244,5,0,0,180,6,0,0,1,36,0,0,0,0,0,0,4,6,0,0,196,6,0,0,1,36,0,0,1,0,0,0,20,6,0,0,212,6,0,0,1,28,0,0,0,0,0,0,36,6,0,0,4,7,0,0,1,28,0,0,1,0,0,0,52,6,0,0,20,7,0,0,1,22,0,0,0,0,0,0,36,8,0,0,36,7,0,0,1,22,0,0,1,0,0,0,52,8,0,0,52,7,0,0,1,86,0,0,0,0,0,0,100,6,0,0,84,6,0,0,1,86,0,0,1,0,0,0,116,6,0,0,68,6,0,0,1,84,0,0,0,0,0,0,132,6,0,0,68,6,0,0,1,84,0,0,1,0,0,0,148,6,0,0,84,6,0,0,1,81,0,0,0,0,0,0,164,6,0,0,100,6,0,0,1,81,0,0,1,0,0,0,180,6,0,0,116,6,0,0,1,72,0,0,0,0,0,0,196,6,0,0,132,6,0,0,1,72,0,0,1,0,0,0,212,6,0,0,148,6,0,0,1,56,0,0,0,0,0,0,228,6,0,0,164,6,0,0,1,56,0,0,1,0,0,0,244,6,0,0,180,6,0,0,1,52,0,0,0,0,0,0,4,7,0,0,196,6,0,0,1,52,0,0,1,0,0,0,20,7,0,0,212,6,0,0,1,48,0,0,0,0,0,0,36,7,0,0,228,6,0,0,1,48,0,0,1,0,0,0,52,7,0,0,244,6,0,0,1,40,0,0,0,0,0,0,68,7,0,0,228,6,0,0,1,40,0,0,1,0,0,0,84,7,0,0,244,6,0,0,1,36,0,0,0,0,0,0,100,7,0,0,4,7,0,0,1,36,0,0,1,0,0,0,116,7,0,0,20,7,0,0,1,34,0,0,0,0,0,0,132,7,0,0,36,7,0,0,1,34,0,0,1,0,0,0,148,7,0,0,52,7,0,0,1,28,0,0,0,0,0,0,164,7,0,0,68,7,0,0,1,28,0,0,1,0,0,0,180,7,0,0,84,7,0,0,1,24,0,0,0,0,0,0,196,7,0,0,100,7,0,0,1,24,0,0,1,0,0,0,212,7,0,0,116,7,0,0,1,22,0,0,0,0,0,0,228,7,0,0,132,7,0,0,1,22,0,0,1,0,0,0,244,7,0,0,148,7,0,0,1,20,0,0,0,0,0,0,4,8,0,0,164,7,0,0,1,20,0,0,1,0,0,0,20,8,0,0,180,7,0,0,1,18,0,0,0,0,0,0,36,8,0,0,196,7,0,0,1,18,0,0,1,0,0,0,52,8,0,0,212,7,0,0,1,17,0,0,0,0,0,0,68,8,0,0,228,7,0,0,1,17,0,0,1,0,0,0,84,8,0,0,244,7,0,0,193,10,0,0,0,0,0,0,100,8,0,0,4,8,0,0,193,10,0,0,1,0,0,0,116,8,0,0,20,8,0,0,193,9,0,0,0,0,0,0,132,8,0,0,36,8,0,0,193,9,0,0,1,0,0,0,148,8,0,0,52,8,0,0,161,8,0,0,0,0,0,0,164,8,0,0,68,8,0,0,161,8,0,0,1,0,0,0,180,8,0,0,84,8,0,0,33,5,0,0,0,0,0,0,196,8,0,0,100,8,0,0,33,5,0,0,1,0,0,0,212,8,0,0,116,8,0,0,65,4,0,0,0,0,0,0,228,8,0,0,132,8,0,0,65,4,0,0,1,0,0,0,244,8,0,0,148,8,0,0,161,2,0,0,0,0,0,0,4,9,0,0,164,8,0,0,161,2,0,0,1,0,0,0,20,9,0,0,180,8,0,0,33,2,0,0,0,0,0,0,36,9,0,0,196,8,0,0,33,2,0,0,1,0,0,0,52,9,0,0,212,8,0,0,65,1,0,0,0,0,0,0,68,9,0,0,228,8,0,0,65,1,0,0,1,0,0,0,84,9,0,0,244,8,0,0,17,1,0,0,0,0,0,0,100,9,0,0,4,9,0,0,17,1,0,0,1,0,0,0,116,9,0,0,20,9,0,0,133,0,0,0,0,0,0,0,132,9,0,0,36,9,0,0,133,0,0,0,1,0,0,0,148,9,0,0,52,9,0,0,73,0,0,0,0,0,0,0,164,9,0,0,68,9,0,0,73,0,0,0,1,0,0,0,180,9,0,0,84,9,0,0,37,0,0,0,0,0,0,0,196,9,0,0,100,9,0,0,37,0,0,0,1,0,0,0,212,9,0,0,116,9,0,0,21,0,0,0,0,0,0,0,228,9,0,0,132,9,0,0,21,0,0,0,1,0,0,0,244,9,0,0,148,9,0,0,9,0,0,0,0,0,0,0,4,10,0,0,164,9,0,0,9,0,0,0,1,0,0,0,20,10,0,0,180,9,0,0,5,0,0,0,0,0,0,0,36,10,0,0,196,9,0,0,5,0,0,0,1,0,0,0,52,10,0,0,212,9,0,0,1,0,0,0,0,0,0,0,36,10,0,0,228,9,0,0,1,0,0,0,1,0,0,0,52,10,0,0,244,9,0,0,1,86,0,0,0,0,0,0,68,10,0,0,68,10,0,0,1,86,0,0,1,0,0,0,84,10,0,0,84,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,11,0,0,12,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,38,94,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,64,4,32,0,32,2,128,0,128,8,16,0,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,1,0,3,128,4,0,6,128,7,0,9,128,10,0,12,128,13,0,15,128,16,0,18,128,19,0,21,128,22,0,24,128,25,0,27,128,28,0,30,128,31,0,33,128,34,0,36,128,37,0,39,128,40,0,42,128,43,0,45,128,46,0,48,128,49,0,51,128,52,0,54,128,55,0,57,128,58,0,60,128,61,0,63,128,64,0,66,128,67,0,69,128,70,0,72,128,73,0,75,128,76,0,78,128,79,0,81,128,82,0,84,128,85,0,87,128,88,0,90,128,91,0,93,128,94,0,96,128,97,0,99,128,100,0,102,128,103,0,105,128,106,0,108,128,109,0,111,128,112,0,114,128,115,0,117,128,118,0,0,0,0,0,0,0,0,0,0,0,0,128,0,128,0,128,0,128,0,0,1,0,1,0,1,128,1,128,1,0,2,0,2,128,2,128,2,0,3,0,3,128,3,0,4,0,4,128,4,0,5,128,5,128,5,0,6,128,6,0,7,128,7,0,8,128,8,0,9,128,9,0,10,128,10,128,11,0,12,128,12,0,13,0,14,128,14,0,15,0,16,128,16,128,17,0,18,0,19,128,19,128,20,0,21,0,22,0,23,128,23,128,24,128,25,128,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,128,38,128,39,128,40,128,41,0,43,0,44,0,45,128,46,128,47,0,49,0,50,128,51,128,52,0,54,0,55,128,56,0,58,0,59,128,60,0,62,128,63,128,64,0,66,128,67,0,69,128,70,0,72,128,73,0,75,128,76,0,78,128,79,128,81,0,83,128,84,0,86,0,88,128,89,0,91,0,93,128,94,128,96,0,98,0,100,128,101,128,103,0,105,0,107,0,109,128,110,128,112,128,114,128,116,0,118,0,120,0,122,0,124,0,126,0,24,128,23,0,23,128,22,0,22,128,21,0,21,128,20,0,20,128,19,0,19,128,18,0,18,128,17,0,17,128,16,0,16,128,15,0,15,128,14,0,14,128,13,0,13,128,12,0,12,128,11,0,11,128,10,0,10,128,9,0,9,128,8,0,8,128,7,0,7,128,6,0,6,128,5,0,5,128,4,0,4,128,3,0,3,128,2,0,2,128,1,0,1,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,1,128,1,0,2,128,2,0,3,128,3,0,4,128,4,0,5,128,5,0,6,128,6,0,7,128,7,0,8,128,8,0,9,128,9,0,10,128,10,0,11,128,11,0,12,128,12,0,13,128,13,0,14,128,14,0,15,128,15,0,16,128,16,0,17,128,17,0,18,128,18,0,19,128,19,0,20,128,20,0,21,128,21,0,22,128,22,0,23,128,23,0,32,0,31,0,30,0,29,0,28,0,27,128,26,128,25,128,24,128,23,0,23,0,22,0,21,128,20,128,19,0,19,0,18,128,17,128,16,0,16,0,15,128,14,0,14,0,13,128,12,0,12,128,11,128,10,0,10,128,9,0,9,128,8,0,8,128,7,0,7,128,6,0,6,128,5,128,5,0,5,128,4,0,4,0,4,128,3,0,3,0,3,128,2,128,2,0,2,0,2,128,1,128,1,0,1,0,1,0,1,128,0,128,0,128,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,128,0,128,0,128,0,0,1,0,1,0,1,128,1,128,1,0,2,0,2,128,2,128,2,0,3,0,3,128,3,0,4,0,4,128,4,0,5,128,5,128,5,0,6,128,6,0,7,128,7,0,8,128,8,0,9,128,9,0,10,128,10,128,11,0,12,128,12,0,13,0,14,128,14,0,15,0,16,128,16,128,17,0,18,0,19,128,19,128,20,0,21,0,22,0,23,128,23,128,24,128,25,128,26,0,27,0,28,0,29,0,30,0,31,91,69,82,82,79,82,93,32,111,112,106,95,100,101,99,111,109,112,114,101,115,115,58,32,102,97,105,108,101,100,32,116,111,32,115,101,116,117,112,32,116,104,101,32,100,101,99,111,100,101,114,0,91,69,82,82,79,82,93,32,111,112,106,95,100,101,99,111,109,112,114,101,115,115,58,32,102,97,105,108,101,100,32,116,111,32,114,101,97,100,32,116,104,101,32,104,101,97,100,101,114,0,91,69,82,82,79,82,93,32,111,112,106,95,100,101,99,111,109,112,114,101,115,115,58,32,102,97,105,108,101,100,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,33,0,91,69,82,82,79,82,93,32,37,115,0,83,116,114,101,97,109,32,114,101,97,99,104,101,100,32,105,116,115,32,101,110,100,32,33,10,0,69,114,114,111,114,32,111,110,32,119,114,105,116,105,110,103,32,115,116,114,101,97,109,33,10,0,83,116,114,101,97,109,32,101,114,114,111,114,33,10,0,50,46,49,46,48,0,67,111,100,101,99,32,112,114,111,118,105,100,101,100,32,116,111,32,116,104,101,32,111,112,106,95,115,101,116,117,112,95,100,101,99,111,100,101,114,32,102,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,97,32,100,101,99,111,109,112,114,101,115,115,111,114,32,104,97,110,100,108,101,114,46,10,0,67,111,100,101,99,32,112,114,111,118,105,100,101,100,32,116,111,32,116,104,101,32,111,112,106,95,114,101,97,100,95,104,101,97,100,101,114,32,102,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,97,32,100,101,99,111,109,112,114,101,115,115,111,114,32,104,97,110,100,108,101,114,46,10,0,119,98,0,114,98,0,73,110,118,97,108,105,100,32,110,117,109,98,101,114,32,111,102,32,114,101,115,111,108,117,116,105,111,110,115,32,58,32,37,100,32,110,111,116,32,105,110,32,114,97,110,103,101,32,91,49,44,37,100,93,10,0,68,101,112,114,101,99,97,116,101,100,32,102,105,101,108,100,115,32,99,112,95,99,105,110,101,109,97,32,111,114,32,99,112,95,114,115,105,122,32,97,114,101,32,117,115,101,100,10,80,108,101,97,115,101,32,99,111,110,115,105,100,101,114,32,117,115,105,110,103,32,111,110,108,121,32,116,104,101,32,114,115,105,122,32,102,105,101,108,100,10,83,101,101,32,111,112,101,110,106,112,101,103,46,104,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,10,0,84,104,101,32,100,101,115,105,114,101,100,32,109,97,120,105,109,117,109,32,99,111,100,101,115,116,114,101,97,109,32,115,105,122,101,32,104,97,115,32,108,105,109,105,116,101,100,10,97,116,32,108,101,97,115,116,32,111,110,101,32,111,102,32,116,104,101,32,100,101,115,105,114,101,100,32,113,117,97,108,105,116,121,32,108,97,121,101,114,115,10,0,74,80,69,71,32,50,48,48,48,32,83,99,97,108,97,98,108,101,32,68,105,103,105,116,97,108,32,67,105,110,101,109,97,32,112,114,111,102,105,108,101,115,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,49,32,115,105,110,103,108,101,32,113,117,97,108,105,116,121,32,108,97,121,101,114,45,62,32,78,117,109,98,101,114,32,111,102,32,108,97,121,101,114,115,32,102,111,114,99,101,100,32,116,111,32,49,32,40,114,97,116,104,101,114,32,116,104,97,110,32,37,100,41,10,45,62,32,82,97,116,101,32,111,102,32,116,104,101,32,108,97,115,116,32,108,97,121,101,114,32,40,37,51,46,49,102,41,32,119,105,108,108,32,98,101,32,117,115,101,100,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,40,50,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,60,61,32,53,10,45,62,32,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,102,111,114,99,101,100,32,116,111,32,53,32,40,114,97,116,104,101,114,32,116,104,97,110,32,37,100,41,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,52,32,40,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,62,61,32,49,32,38,38,32,60,61,32,54,10,45,62,32,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,102,111,114,99,101,100,32,116,111,32,49,32,40,114,97,116,104,101,114,32,116,104,97,110,32,37,100,41,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,52,32,40,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,62,61,32,49,32,38,38,32,60,61,32,54,10,45,62,32,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,102,111,114,99,101,100,32,116,111,32,54,32,40,114,97,116,104,101,114,32,116,104,97,110,32,37,100,41,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,77,97,120,105,109,117,109,32,49,51,48,50,48,56,51,32,99,111,109,112,114,101,115,115,101,100,32,98,121,116,101,115,32,64,32,50,52,102,112,115,10,65,115,32,110,111,32,114,97,116,101,32,104,97,115,32,98,101,101,110,32,103,105,118,101,110,44,32,116,104,105,115,32,108,105,109,105,116,32,119,105,108,108,32,98,101,32,117,115,101,100,46,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,77,97,120,105,109,117,109,32,49,51,48,50,48,56,51,32,99,111,109,112,114,101,115,115,101,100,32,98,121,116,101,115,32,64,32,50,52,102,112,115,10,45,62,32,83,112,101,99,105,102,105,101,100,32,114,97,116,101,32,101,120,99,101,101,100,115,32,116,104,105,115,32,108,105,109,105,116,46,32,82,97,116,101,32,119,105,108,108,32,98,101,32,102,111,114,99,101,100,32,116,111,32,49,51,48,50,48,56,51,32,98,121,116,101,115,46,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,77,97,120,105,109,117,109,32,49,48,52,49,54,54,54,32,99,111,109,112,114,101,115,115,101,100,32,98,121,116,101,115,32,64,32,50,52,102,112,115,10,65,115,32,110,111,32,114,97,116,101,32,104,97,115,32,98,101,101,110,32,103,105,118,101,110,44,32,116,104,105,115,32,108,105,109,105,116,32,119,105,108,108,32,98,101,32,117,115,101,100,46,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,77,97,120,105,109,117,109,32,49,48,52,49,54,54,54,32,99,111,109,112,114,101,115,115,101,100,32,98,121,116,101,115,32,64,32,50,52,102,112,115,10,45,62,32,83,112,101,99,105,102,105,101,100,32,114,97,116,101,32,101,120,99,101,101,100,115,32,116,104,105,115,32,108,105,109,105,116,46,32,82,97,116,101,32,119,105,108,108,32,98,101,32,102,111,114,99,101,100,32,116,111,32,49,48,52,49,54,54,54,32,98,121,116,101,115,46,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,40,50,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,51,32,99,111,109,112,111,110,101,110,116,115,45,62,32,78,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,32,111,102,32,105,110,112,117,116,32,105,109,97,103,101,32,40,37,100,41,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,10,45,62,32,78,111,110,45,112,114,111,102,105,108,101,45,51,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,98,101,32,103,101,110,101,114,97,116,101,100,10,0,115,105,103,110,101,100,0,117,110,115,105,103,110,101,100,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,40,50,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,80,114,101,99,105,115,105,111,110,32,111,102,32,101,97,99,104,32,99,111,109,112,111,110,101,110,116,32,115,104,97,108,108,32,98,101,32,49,50,32,98,105,116,115,32,117,110,115,105,103,110,101,100,45,62,32,65,116,32,108,101,97,115,116,32,99,111,109,112,111,110,101,110,116,32,37,100,32,111,102,32,105,110,112,117,116,32,105,109,97,103,101,32,40,37,100,32,98,105,116,115,44,32,37,115,41,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,10,45,62,32,78,111,110,45,112,114,111,102,105,108,101,45,51,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,98,101,32,103,101,110,101,114,97,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,40,50,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,119,105,100,116,104,32,60,61,32,50,48,52,56,32,97,110,100,32,104,101,105,103,104,116,32,60,61,32,49,48,56,48,10,45,62,32,73,110,112,117,116,32,105,109,97,103,101,32,115,105,122,101,32,37,100,32,120,32,37,100,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,10,45,62,32,78,111,110,45,112,114,111,102,105,108,101,45,51,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,98,101,32,103,101,110,101,114,97,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,52,32,40,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,119,105,100,116,104,32,60,61,32,52,48,57,54,32,97,110,100,32,104,101,105,103,104,116,32,60,61,32,50,49,54,48,10,45,62,32,73,109,97,103,101,32,115,105,122,101,32,37,100,32,120,32,37,100,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,10,45,62,32,78,111,110,45,112,114,111,102,105,108,101,45,52,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,98,101,32,103,101,110,101,114,97,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,76,111,110,103,32,84,101,114,109,32,83,116,111,114,97,103,101,32,112,114,111,102,105,108,101,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,66,114,111,97,100,99,97,115,116,32,112,114,111,102,105,108,101,115,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,73,77,70,32,112,114,111,102,105,108,101,115,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,80,97,114,116,45,50,32,112,114,111,102,105,108,101,32,100,101,102,105,110,101,100,10,98,117,116,32,110,111,32,80,97,114,116,45,50,32,101,120,116,101,110,115,105,111,110,32,101,110,97,98,108,101,100,46,10,80,114,111,102,105,108,101,32,115,101,116,32,116,111,32,78,79,78,69,46,10,0,85,110,115,117,112,112,111,114,116,101,100,32,80,97,114,116,45,50,32,101,120,116,101,110,115,105,111,110,32,101,110,97,98,108,101,100,10,80,114,111,102,105,108,101,32,115,101,116,32,116,111,32,78,79,78,69,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,99,111,112,121,32,111,102,32,117,115,101,114,32,101,110,99,111,100,105,110,103,32,112,97,114,97,109,101,116,101,114,115,32,109,97,116,114,105,120,32,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,99,111,112,121,32,111,102,32,99,111,109,109,101,110,116,32,115,116,114,105,110,103,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,99,111,109,109,101,110,116,32,115,116,114,105,110,103,10,0,37,115,37,115,0,67,114,101,97,116,101,100,32,98,121,32,79,112,101,110,74,80,69,71,32,118,101,114,115,105,111,110,32,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,116,105,108,101,32,99,111,100,105,110,103,32,112,97,114,97,109,101,116,101,114,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,99,104,101,99,107,105,110,103,32,116,104,101,32,112,111,99,32,118,97,108,117,101,115,46,10,0,77,105,115,115,105,110,103,32,112,97,99,107,101,116,115,32,112,111,115,115,105,98,108,101,32,108,111,115,115,32,111,102,32,100,97,116,97,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,116,105,108,101,32,99,111,109,112,111,110,101,110,116,32,99,111,100,105,110,103,32,112,97,114,97,109,101,116,101,114,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,116,101,109,112,32,98,117,102,102,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,101,110,99,111,100,101,114,32,77,67,84,32,99,111,100,105,110,103,32,109,97,116,114,105,120,32,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,101,110,99,111,100,101,114,32,77,67,84,32,100,101,99,111,100,105,110,103,32,109,97,116,114,105,120,32,10,0,70,97,105,108,101,100,32,116,111,32,105,110,118,101,114,115,101,32,101,110,99,111,100,101,114,32,77,67,84,32,100,101,99,111,100,105,110,103,32,109,97,116,114,105,120,32,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,101,110,99,111,100,101,114,32,77,67,84,32,110,111,114,109,115,32,10,0,70,97,105,108,101,100,32,116,111,32,115,101,116,117,112,32,106,50,107,32,109,99,116,32,101,110,99,111,100,105,110,103,10,0,67,97,110,110,111,116,32,112,101,114,102,111,114,109,32,77,67,84,32,111,110,32,99,111,109,112,111,110,101,110,116,115,32,119,105,116,104,32,100,105,102,102,101,114,101,110,116,32,115,105,122,101,115,46,32,68,105,115,97,98,108,105,110,103,32,77,67,84,46,10,0,83,116,114,101,97,109,32,116,111,111,32,115,104,111,114,116,10,0,73,110,99,111,110,115,105,115,116,101,110,116,32,109,97,114,107,101,114,32,115,105,122,101,10,0,77,97,114,107,101,114,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,32,119,105,116,104,32,105,116,115,32,112,111,115,105,116,105,111,110,10,0,77,97,114,107,101,114,32,115,105,122,101,32,105,110,99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,32,115,116,114,101,97,109,32,108,101,110,103,116,104,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,104,101,97,100,101,114,10,0,78,111,116,32,115,117,114,101,32,104,111,119,32,116,104,97,116,32,104,97,112,112,101,110,101,100,46,10,0,70,97,105,108,32,116,111,32,114,101,97,100,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,114,107,101,114,32,115,101,103,109,101,110,116,32,40,37,35,120,41,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,100,100,32,116,108,32,109,97,114,107,101,114,10,0,84,105,108,101,32,112,97,114,116,32,108,101,110,103,116,104,32,115,105,122,101,32,105,110,99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,32,115,116,114,101,97,109,32,108,101,110,103,116,104,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,83,79,84,32,109,97,114,107,101,114,10,0,111,112,106,95,106,50,107,95,97,112,112,108,121,95,110,98,95,116,105,108,101,95,112,97,114,116,115,95,99,111,114,114,101,99,116,105,111,110,32,101,114,114,111,114,10,0,78,111,110,32,99,111,110,102,111,114,109,97,110,116,32,99,111,100,101,115,116,114,101,97,109,32,84,80,115,111,116,61,61,84,78,115,111,116,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,80,80,84,32,109,97,114,107,101,114,10,0,70,97,105,108,101,100,32,116,111,32,109,101,114,103,101,32,80,80,84,32,100,97,116,97,10,0,67,97,110,110,111,116,32,100,101,99,111,100,101,32,116,105,108,101,44,32,109,101,109,111,114,121,32,101,114,114,111,114,10,0,72,101,97,100,101,114,32,111,102,32,116,105,108,101,32,37,100,32,47,32,37,100,32,104,97,115,32,98,101,101,110,32,114,101,97,100,46,10,0,70,97,105,108,101,100,32,116,111,32,100,101,99,111,100,101,46,10,0,78,111,32,69,79,67,32,109,97,114,107,101,114,46,32,80,111,115,115,105,98,108,121,32,97,32,116,114,117,110,99,97,116,101,100,32,115,116,114,101,97,109,10,0,83,116,114,101,97,109,32,100,111,101,115,32,110,111,116,32,101,110,100,32,119,105,116,104,32,69,79,67,10,0,83,116,114,101,97,109,32,116,111,111,32,115,104,111,114,116,44,32,101,120,112,101,99,116,101,100,32,83,79,84,10,0,78,101,101,100,32,116,111,32,100,101,99,111,100,101,32,116,104,101,32,109,97,105,110,32,104,101,97,100,101,114,32,98,101,102,111,114,101,32,98,101,103,105,110,32,116,111,32,100,101,99,111,100,101,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,99,111,100,101,115,116,114,101,97,109,0,78,111,32,100,101,99,111,100,101,100,32,97,114,101,97,32,112,97,114,97,109,101,116,101,114,115,44,32,115,101,116,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,116,111,32,116,104,101,32,119,104,111,108,101,32,105,109,97,103,101,10,0,76,101,102,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,120,48,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,88,115,105,122,61,37,100,41,46,10,0,76,101,102,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,120,48,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,88,79,115,105,122,61,37,100,41,46,10,0,85,112,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,121,48,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,89,115,105,122,61,37,100,41,46,10,0,85,112,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,121,48,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,89,79,115,105,122,61,37,100,41,46,10,0,82,105,103,104,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,120,49,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,88,79,115,105,122,61,37,100,41,46,10,0,82,105,103,104,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,120,49,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,88,115,105,122,61,37,100,41,46,10,0,66,111,116,116,111,109,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,121,49,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,89,79,115,105,122,61,37,100,41,46,10,0,66,111,116,116,111,109,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,121,49,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,89,115,105,122,61,37,100,41,46,10,0,83,105,122,101,32,120,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,99,111,109,112,111,110,101,110,116,32,105,109,97,103,101,32,105,115,32,105,110,99,111,114,114,101,99,116,32,40,99,111,109,112,91,37,100,93,46,119,61,37,100,41,46,10,0,83,105,122,101,32,121,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,99,111,109,112,111,110,101,110,116,32,105,109,97,103,101,32,105,115,32,105,110,99,111,114,114,101,99,116,32,40,99,111,109,112,91,37,100,93,46,104,61,37,100,41,46,10,0,83,101,116,116,105,110,103,32,100,101,99,111,100,105,110,103,32,97,114,101,97,32,116,111,32,37,100,44,37,100,44,37,100,44,37,100,10,0,87,114,111,110,103,32,102,108,97,103,10,0,67,111,100,101,115,116,114,101,97,109,32,105,110,102,111,32,102,114,111,109,32,109,97,105,110,32,104,101,97,100,101,114,58,32,123,10,0,9,32,116,120,48,61,37,100,44,32,116,121,48,61,37,100,10,0,9,32,116,100,120,61,37,100,44,32,116,100,121,61,37,100,10,0,9,32,116,119,61,37,100,44,32,116,104,61,37,100,10,0,125,10,0,67,111,100,101,115,116,114,101,97,109,32,105,110,100,101,120,32,102,114,111,109,32,109,97,105,110,32,104,101,97,100,101,114,58,32,123,10,0,9,32,77,97,105,110,32,104,101,97,100,101,114,32,115,116,97,114,116,32,112,111,115,105,116,105,111,110,61,37,108,108,105,10,9,32,77,97,105,110,32,104,101],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE), +f[b>>2]=c+1;b=g[c>>0]|0}else b=zw(a)|0}else d=3;do if((d|0)==3){b=a+4|0;c=f[b>>2]|0;if(c>>>0<(f[a+8>>2]|0)>>>0){f[b>>2]=c+1;b=g[c>>0]|0;break}else{b=zw(a)|0;break}}while(0);return b|0}function Fw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;e=l;l=l+16|0;g=e;f[g>>2]=d;d=Lw(a,b,c,g)|0;l=e;return d|0}function Gw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;f[e>>2]=c;c=Mw(a,b,e)|0;l=d;return c|0}function Hw(a,b){a=a|0;b=b|0;var c=0,e=0,g=0,h=0;do if((a|0)!=-1){if((f[b+76>>2]|0)>-1)g=ow(b)|0;else g=0;if(!((f[b+8>>2]|0)==0?(xw(b)|0)!=0:0))h=6;if((h|0)==6?(c=b+4|0,e=f[c>>2]|0,e>>>0>((f[b+44>>2]|0)+-8|0)>>>0):0){h=e+-1|0;f[c>>2]=h;d[h>>0]=a;f[b>>2]=f[b>>2]&-17;if(!g)break;pw(b);break}if(g){pw(b);a=-1}else a=-1}else a=-1;while(0);return a|0}function Iw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;i=l;l=l+16|0;d=i;e=Cl(240)|0;do if(e){f[d>>2]=f[c>>2];d=Lw(e,240,b,d)|0;if(d>>>0<240){b=Fl(e,d+1|0)|0;f[a>>2]=(b|0)!=0?b:e;break}Dl(e);if((d|0)>=0?(h=d+1|0,g=Cl(h)|0,f[a>>2]=g,(g|0)!=0):0)d=Lw(g,h,b,c)|0;else d=-1}else d=-1;while(0);l=i;return d|0}function Jw(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;o=s+80|0;r=s+96|0;q=s;p=s+136|0;e=r;g=e+40|0;do{f[e>>2]=0;e=e+4|0}while((e|0)<(g|0));f[o>>2]=f[c>>2];if((ul(0,b,o,q,r)|0)<0)c=-1;else{if((f[a+76>>2]|0)>-1)m=ow(a)|0;else m=0;c=f[a>>2]|0;n=c&32;if((d[a+74>>0]|0)<1)f[a>>2]=c&-33;c=a+48|0;if(!(f[c>>2]|0)){g=a+44|0;h=f[g>>2]|0;f[g>>2]=p;i=a+28|0;f[i>>2]=p;j=a+20|0;f[j>>2]=p;f[c>>2]=80;k=a+16|0;f[k>>2]=p+80;e=ul(a,b,o,q,r)|0;if(h){kx[f[a+36>>2]&63](a,0,0)|0;e=(f[j>>2]|0)==0?-1:e;f[g>>2]=h;f[c>>2]=0;f[k>>2]=0;f[i>>2]=0;f[j>>2]=0}}else e=ul(a,b,o,q,r)|0;c=f[a>>2]|0;f[a>>2]=c|n;if(m)pw(a);c=(c&32|0)==0?e:-1}l=s;return c|0}function Kw(a,b,c){a=a|0;b=b|0;c=c|0;var h=0,i=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;P=l;l=l+304|0;H=P+16|0;J=P+8|0;I=P+33|0;K=P;y=P+32|0;if((f[a+76>>2]|0)>-1)O=ow(a)|0;else O=0;h=d[b>>0]|0;a:do if(h<<24>>24){L=a+4|0;M=a+100|0;F=a+108|0;z=a+8|0;A=I+10|0;B=I+33|0;C=J+4|0;D=I+46|0;E=I+94|0;m=h;h=0;n=b;s=0;i=0;b=0;b:while(1){c:do if(!(Hv(m&255)|0)){m=(d[n>>0]|0)==37;d:do if(m){q=n+1|0;o=d[q>>0]|0;e:do switch(o<<24>>24){case 37:break d;case 42:{x=0;o=n+2|0;break}default:{o=(o&255)+-48|0;if(o>>>0<10?(d[n+2>>0]|0)==36:0){f[H>>2]=f[c>>2];while(1){x=(f[H>>2]|0)+(4-1)&~(4-1);m=f[x>>2]|0;f[H>>2]=x+4;if(o>>>0>1)o=o+-1|0;else break}x=m;o=n+3|0;break e}o=(f[c>>2]|0)+(4-1)&~(4-1);x=f[o>>2]|0;f[c>>2]=o+4;o=q}}while(0);m=d[o>>0]|0;n=m&255;if((n+-48|0)>>>0<10){m=0;while(1){q=(m*10|0)+-48+n|0;o=o+1|0;m=d[o>>0]|0;n=m&255;if((n+-48|0)>>>0>=10)break;else m=q}}else q=0;if(m<<24>>24==109){o=o+1|0;r=d[o>>0]|0;m=(x|0)!=0&1;i=0;b=0}else{r=m;m=0}n=o+1|0;switch(r&255|0){case 104:{w=(d[n>>0]|0)==104;n=w?o+2|0:n;o=w?-2:-1;break}case 108:{w=(d[n>>0]|0)==108;n=w?o+2|0:n;o=w?3:1;break}case 106:{o=3;break}case 116:case 122:{o=1;break}case 76:{o=2;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{n=o;o=0;break}default:{N=152;break b}}r=g[n>>0]|0;t=(r&47|0)==3;r=t?r|32:r;t=t?1:o;switch(r|0){case 99:{w=s;v=(q|0)<1?1:q;break}case 91:{w=s;v=q;break}case 110:{if(!x){o=s;break c}switch(t|0){case-2:{d[x>>0]=s;o=s;break c}case-1:{e[x>>1]=s;o=s;break c}case 0:{f[x>>2]=s;o=s;break c}case 1:{f[x>>2]=s;o=s;break c}case 3:{o=x;f[o>>2]=s;f[o+4>>2]=((s|0)<0)<<31>>31;o=s;break c}default:{o=s;break c}}}default:{Nv(a,0);do{o=f[L>>2]|0;if(o>>>0<(f[M>>2]|0)>>>0){f[L>>2]=o+1;o=g[o>>0]|0}else o=Ov(a)|0}while((Hv(o)|0)!=0);o=f[L>>2]|0;if(f[M>>2]|0){o=o+-1|0;f[L>>2]=o}w=(f[F>>2]|0)+s+o-(f[z>>2]|0)|0;v=q}}Nv(a,v);o=f[L>>2]|0;q=f[M>>2]|0;if(o>>>0>>0)f[L>>2]=o+1;else{if((Ov(a)|0)<0){N=152;break b}q=f[M>>2]|0}if(q)f[L>>2]=(f[L>>2]|0)+-1;e:do switch(r|0){case 91:case 99:case 115:{u=(r|0)==99;f:do if((r&239|0)==99){ws(I|0,-1,257)|0;d[I>>0]=0;if((r|0)==115){d[B>>0]=0;d[A>>0]=0;d[A+1>>0]=0;d[A+2>>0]=0;d[A+3>>0]=0;d[A+4>>0]=0}}else{Q=n+1|0;s=(d[Q>>0]|0)==94;o=s&1;r=s?Q:n;n=s?n+2|0:Q;ws(I|0,s&1|0,257)|0;d[I>>0]=0;switch(d[n>>0]|0){case 45:{s=(o^1)&255;d[D>>0]=s;n=r+2|0;break}case 93:{s=(o^1)&255;d[E>>0]=s;n=r+2|0;break}default:s=(o^1)&255}while(1){o=d[n>>0]|0;g:do switch(o<<24>>24){case 0:{N=152;break b}case 93:break f;case 45:{r=n+1|0;o=d[r>>0]|0;switch(o<<24>>24){case 93:case 0:{o=45;break g}default:{}}n=d[n+-1>>0]|0;if((n&255)<(o&255)){n=n&255;do{n=n+1|0;d[I+n>>0]=s;o=d[r>>0]|0}while((n|0)<(o&255|0));n=r}else n=r;break}default:{}}while(0);d[I+((o&255)+1)>>0]=s;n=n+1|0}}while(0);r=u?v+1|0:31;s=(t|0)==1;t=(m|0)!=0;f:do if(s){if(t){b=Cl(r<<2)|0;if(!b){i=0;N=152;break b}}else b=x;f[J>>2]=0;f[C>>2]=0;i=0;g:while(1){q=(b|0)==0;do{h:while(1){o=f[L>>2]|0;if(o>>>0<(f[M>>2]|0)>>>0){f[L>>2]=o+1;o=g[o>>0]|0}else o=Ov(a)|0;if(!(d[I+(o+1)>>0]|0))break g;d[y>>0]=o;switch(fw(K,y,1,J)|0){case-1:{i=0;N=152;break b}case-2:break;default:break h}}if(!q){f[b+(i<<2)>>2]=f[K>>2];i=i+1|0}}while(!(t&(i|0)==(r|0)));i=r<<1|1;o=Fl(b,i<<2)|0;if(!o){i=0;N=152;break b}Q=r;r=i;b=o;i=Q}if(!(gw(J)|0)){i=0;N=152;break b}else{q=i;i=0}}else{if(t){i=Cl(r)|0;if(!i){i=0;b=0;N=152;break b}else o=0;while(1){do{b=f[L>>2]|0;if(b>>>0<(f[M>>2]|0)>>>0){f[L>>2]=b+1;b=g[b>>0]|0}else b=Ov(a)|0;if(!(d[I+(b+1)>>0]|0)){q=o;b=0;break f}d[i+o>>0]=b;o=o+1|0}while((o|0)!=(r|0));b=r<<1|1;o=Fl(i,b)|0;if(!o){b=0;N=152;break b}else{Q=r;r=b;i=o;o=Q}}}if(!x){i=q;while(1){b=f[L>>2]|0;if(b>>>0>>0){f[L>>2]=b+1;b=g[b>>0]|0}else b=Ov(a)|0;if(!(d[I+(b+1)>>0]|0)){q=0;i=0;b=0;break f}i=f[M>>2]|0}}else{i=0;while(1){b=f[L>>2]|0;if(b>>>0>>0){f[L>>2]=b+1;b=g[b>>0]|0}else b=Ov(a)|0;if(!(d[I+(b+1)>>0]|0)){q=i;i=x;b=0;break f}d[x+i>>0]=b;q=f[M>>2]|0;i=i+1|0}}}while(0);o=f[L>>2]|0;if(f[M>>2]|0){o=o+-1|0;f[L>>2]=o}o=o-(f[z>>2]|0)+(f[F>>2]|0)|0;if(!o)break b;if(!((o|0)==(v|0)|u^1))break b;do if(t)if(s){f[x>>2]=b;break}else{f[x>>2]=i;break}while(0);if(!u){if(b)f[b+(q<<2)>>2]=0;if(!i){i=0;break e}d[i+q>>0]=0}break}case 120:case 88:case 112:{o=16;N=134;break}case 111:{o=8;N=134;break}case 117:case 100:{o=10;N=134;break}case 105:{o=0;N=134;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{p=+Lv(a,t,0);if((f[F>>2]|0)==((f[z>>2]|0)-(f[L>>2]|0)|0))break b;if(x)switch(t|0){case 0:{j[x>>2]=p;break e}case 1:{k[x>>3]=p;break e}case 2:{k[x>>3]=p;break e}default:break e}break}default:{}}while(0);e:do if((N|0)==134){N=0;o=Mv(a,o,0,-1,-1)|0;if((f[F>>2]|0)==((f[z>>2]|0)-(f[L>>2]|0)|0))break b;if((x|0)!=0&(r|0)==112){f[x>>2]=o;break}if(x)switch(t|0){case-2:{d[x>>0]=o;break e}case-1:{e[x>>1]=o;break e}case 0:{f[x>>2]=o;break e}case 1:{f[x>>2]=o;break e}case 3:{Q=x;f[Q>>2]=o;f[Q+4>>2]=G;break e}default:break e}}while(0);h=((x|0)!=0&1)+h|0;o=(f[F>>2]|0)+w+(f[L>>2]|0)-(f[z>>2]|0)|0;break c}while(0);n=n+(m&1)|0;Nv(a,0);m=f[L>>2]|0;if(m>>>0<(f[M>>2]|0)>>>0){f[L>>2]=m+1;m=g[m>>0]|0}else m=Ov(a)|0;if((m|0)!=(g[n>>0]|0)){N=21;break b}o=s+1|0}else{while(1){m=n+1|0;if(!(Hv(g[m>>0]|0)|0))break;else n=m}Nv(a,0);do{m=f[L>>2]|0;if(m>>>0<(f[M>>2]|0)>>>0){f[L>>2]=m+1;m=g[m>>0]|0}else m=Ov(a)|0}while((Hv(m)|0)!=0);m=f[L>>2]|0;if(f[M>>2]|0){m=m+-1|0;f[L>>2]=m}o=(f[F>>2]|0)+s+m-(f[z>>2]|0)|0}while(0);n=n+1|0;m=d[n>>0]|0;if(!(m<<24>>24))break a;else s=o}if((N|0)==21){if(f[M>>2]|0)f[L>>2]=(f[L>>2]|0)+-1;if((h|0)!=0|(m|0)>-1)break;else{h=0;N=153}}else if((N|0)==152)if(!h){h=m;N=153}if((N|0)==153){m=h;h=-1}if(m){Dl(i);Dl(b)}}else h=0;while(0);if(O)pw(a);l=P;return h|0}function Lw(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+112|0;m=n;h=m;i=37352;j=h+112|0;do{f[h>>2]=f[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((b+-1|0)>>>0>2147483646)if(!b){b=1;k=4}else{f[(Jv()|0)>>2]=75;b=-1}else{g=a;k=4}if((k|0)==4){k=-2-g|0;k=b>>>0>k>>>0?k:b;f[m+48>>2]=k;a=m+20|0;f[a>>2]=g;f[m+44>>2]=g;b=g+k|0;g=m+16|0;f[g>>2]=b;f[m+28>>2]=b;b=Jw(m,c,e)|0;if(k){c=f[a>>2]|0;d[c+(((c|0)==(f[g>>2]|0))<<31>>31)>>0]=0}}l=n;return b|0}function Mw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0;g=l;l=l+112|0;d=g;e=d;h=e+112|0;do{f[e>>2]=0;e=e+4|0}while((e|0)<(h|0));f[d+32>>2]=29;f[d+44>>2]=a;f[d+76>>2]=-1;f[d+84>>2]=a;h=Kw(d,b,c)|0;l=g;return h|0}function Nw(a,b,c){a=a|0;b=b|0;c=c|0;return+ +wl(a,b,2)}function Ow(a,b,c){a=a|0;b=b|0;c=c|0;a=xl(a,b,c,-1,-1)|0;return a|0}function Pw(a,b,c){a=a|0;b=b|0;c=c|0;a=xl(a,b,c,0,-2147483648)|0;return a|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,g=0,h=0,i=0;h=b&255;e=(c|0)!=0;a:do if(e&(a&3|0)!=0){g=b&255;while(1){if((d[a>>0]|0)==g<<24>>24){i=6;break a}a=a+1|0;c=c+-1|0;e=(c|0)!=0;if(!(e&(a&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(e)i=6;else c=0;a:do if((i|0)==6){g=b&255;if((d[a>>0]|0)!=g<<24>>24){e=ca(h,16843009)|0;b:do if(c>>>0>3)while(1){h=f[a>>2]^e;if((h&-2139062144^-2139062144)&h+-16843009)break;a=a+4|0;c=c+-4|0;if(c>>>0<=3){i=11;break b}}else i=11;while(0);if((i|0)==11)if(!c){c=0;break}while(1){if((d[a>>0]|0)==g<<24>>24)break a;a=a+1|0;c=c+-1|0;if(!c){c=0;break}}}}while(0);return((c|0)!=0?a:0)|0}function Rw(a,b){a=a|0;b=b|0;var c=0,e=0;c=b;a:do if(!((c^a)&3)){if(c&3)do{c=d[b>>0]|0;d[a>>0]=c;if(!(c<<24>>24))break a;b=b+1|0;a=a+1|0}while((b&3|0)!=0);c=f[b>>2]|0;if(!((c&-2139062144^-2139062144)&c+-16843009)){e=a;while(1){b=b+4|0;a=e+4|0;f[e>>2]=c;c=f[b>>2]|0;if((c&-2139062144^-2139062144)&c+-16843009)break;else e=a}}e=8}else e=8;while(0);if((e|0)==8){e=d[b>>0]|0;d[a>>0]=e;if(e<<24>>24)do{b=b+1|0;a=a+1|0;e=d[b>>0]|0;d[a>>0]=e}while(e<<24>>24!=0)}return a|0}function Sw(a,b){a=a|0;b=b|0;var c=0,e=0;e=d[a>>0]|0;c=d[b>>0]|0;if(e<<24>>24==0?1:e<<24>>24!=c<<24>>24)b=e;else{do{a=a+1|0;b=b+1|0;e=d[a>>0]|0;c=d[b>>0]|0}while(!(e<<24>>24==0?1:e<<24>>24!=c<<24>>24));b=e}return(b&255)-(c&255)|0}function Tw(a,b){a=a|0;b=b|0;Rw(a,b)|0;return a|0}function Uw(a){a=a|0;var b=0,c=0,e=0;e=a;a:do if(!(e&3))c=4;else{b=a;a=e;while(1){if(!(d[b>>0]|0))break a;b=b+1|0;a=b;if(!(a&3)){a=b;c=4;break}}}while(0);if((c|0)==4){while(1){b=f[a>>2]|0;if(!((b&-2139062144^-2139062144)&b+-16843009))a=a+4|0;else break}if((b&255)<<24>>24)do a=a+1|0;while((d[a>>0]|0)!=0)}return a-e|0}function Vw(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,f=0;if(!c)b=0;else{e=d[a>>0]|0;a:do if(!(e<<24>>24))e=0;else while(1){c=c+-1|0;f=d[b>>0]|0;if(!(e<<24>>24==f<<24>>24&((c|0)!=0&f<<24>>24!=0)))break a;a=a+1|0;b=b+1|0;e=d[a>>0]|0;if(!(e<<24>>24)){e=0;break}}while(0);b=(e&255)-(g[b>>0]|0)|0}return b|0}function Ww(a){a=a|0;var b=0;b=a;while(1)if(!(f[b>>2]|0))break;else b=b+4|0;return b-a>>2|0}function Xw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(c){d=a;while(1){c=c+-1|0;f[d>>2]=f[b>>2];if(!c)break;else{b=b+4|0;d=d+4|0}}}return a|0}function Yw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=(c|0)==0;if(a-b>>2>>>0>>0){if(!d)do{c=c+-1|0;f[a+(c<<2)>>2]=f[b+(c<<2)>>2]}while((c|0)!=0)}else if(!d){d=b;b=a;while(1){c=c+-1|0;f[b>>2]=f[d>>2];if(!c)break;else{d=d+4|0;b=b+4|0}}}return a|0}function Zw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(c){d=a;while(1){c=c+-1|0;f[d>>2]=b;if(!c)break;else d=d+4|0}}return a|0}function $w(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,h=0,i=0,j=0;i=a+4|0;c=f[i>>2]|0;j=a+100|0;if(c>>>0<(f[j>>2]|0)>>>0){f[i>>2]=c+1;c=g[c>>0]|0}else c=Ov(a)|0;switch(c|0){case 43:case 45:{d=(c|0)==45&1;c=f[i>>2]|0;if(c>>>0<(f[j>>2]|0)>>>0){f[i>>2]=c+1;c=g[c>>0]|0}else c=Ov(a)|0;if((b|0)!=0&(c+-48|0)>>>0>9?(f[j>>2]|0)!=0:0){f[i>>2]=(f[i>>2]|0)+-1;h=d}else h=d;break}default:h=0}if((c+-48|0)>>>0>9)if(!(f[j>>2]|0)){d=-2147483648;c=0}else{f[i>>2]=(f[i>>2]|0)+-1;d=-2147483648;c=0}else{d=0;do{d=c+-48+(d*10|0)|0;c=f[i>>2]|0;if(c>>>0<(f[j>>2]|0)>>>0){f[i>>2]=c+1;c=g[c>>0]|0}else c=Ov(a)|0}while((c+-48|0)>>>0<10&(d|0)<214748364);b=((d|0)<0)<<31>>31;if((c+-48|0)>>>0<10){do{b=Hs(d|0,b|0,10,0)|0;d=G;c=xs(c|0,((c|0)<0)<<31>>31|0,-48,-1)|0;d=xs(c|0,G|0,b|0,d|0)|0;b=G;c=f[i>>2]|0;if(c>>>0<(f[j>>2]|0)>>>0){f[i>>2]=c+1;c=g[c>>0]|0}else c=Ov(a)|0}while((c+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&d>>>0<2061584302));e=d}else e=d;if((c+-48|0)>>>0<10)do{c=f[i>>2]|0;if(c>>>0<(f[j>>2]|0)>>>0){f[i>>2]=c+1;c=g[c>>0]|0}else c=Ov(a)|0}while((c+-48|0)>>>0<10);if(f[j>>2]|0)f[i>>2]=(f[i>>2]|0)+-1;a=(h|0)!=0;c=vs(0,0,e|0,b|0)|0;d=a?G:b;c=a?c:e}G=d;return c|0}function _w(a){a=a|0;if(!(f[a+68>>2]|0))pw(a);return}function ax(a){a=a|0;if(!(f[a+68>>2]|0))pw(a);return}function bx(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0;b=a+20|0;g=a+28|0;if((f[b>>2]|0)>>>0>(f[g>>2]|0)>>>0?(kx[f[a+36>>2]&63](a,0,0)|0,(f[b>>2]|0)==0):0)b=-1;else{h=a+4|0;c=f[h>>2]|0;d=a+8|0;e=f[d>>2]|0;if(c>>>0>>0)kx[f[a+40>>2]&63](a,c-e|0,1)|0;f[a+16>>2]=0;f[g>>2]=0;f[b>>2]=0;f[d>>2]=0;f[h>>2]=0;b=0}return b|0}var cx=[gt,Qi,Ui,Oj,Sj,Xj,Zj,Lq,Wq,gt,gt,gt,gt,gt,gt,gt];var dx=[ht,Pt,Eh,sh,gh,Wg,Kg,yg,hg,rv,qv,nv,ht,ht,ht,ht];var ex=[it,bk,hk,it];var fx=[jt,Lt,Mt,Ah,Bh,oh,ph,ch,dh,Sg,Tg,Gg,Hg,ug,vg,dg,eg,Sf,Tf,Gf,Hf,uf,vf,hf,jf,Xe,Ye,ee,fe,Td,Ud,_b,ac,vd,zd,wd,$n,ao,_n,bo,Sc,Tc,vu,Uc,Lc,Mc,oc,pc,wc,xc,Dc,Ec,Vc,Wc,ad,bd,hd,id,od,pd,Rd,Sd,ne,oe,ue,ve,Be,Ce,Ie,Je,sg,tg,Am,Xt,fu,gu,wu,xu,Mu,Nu,Tu,Uu,Yu,Zu,_u,cv,av,bv,dv,ev,zn,Ql,Wl,kn,_l,fm,ym,zm,ln,An,On,Qn,Pn,Rn,Un,Wn,Vn,Xn,ho,jo,io,ko,ro,so,bn,to,uo,vo,xo,Kk,Bo,Co,Go,Ho,Vo,Wo,np,op,Cp,Dp,Sh,Th,pi,qi,Ni,Pi,Si,Ti,Wi,Xi,fj,gj,qj,rj,Bj,Cj,Mj,Nj,Vj,Wj,_j,ak,fk,gk,lk,mk,qk,rk,yk,zk,al,bl,Kq,tl,hq,iq,jq,kq,wo,Jk,Mk,kl,Pp,Xp,dq,eq,yu,nu,Gu,$b,mn,Tn,Gd,kg,Bv,_w,ax,Jl,Tv,Pj,Rj,Lk,Ur,_r,as,bs,cs,ds,es,Fm,Tm,Dl,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt,jt];var gx=[kt,Ot,Dh,rh,fh,Vg,Jg,xg,gg,Uf,If,wf,kf,Ze,ge,Vd,bc,nn,hu,ku,Rl,Vl,am,em,Cn,$i,_i,aj,bj,dj,ej,jj,kj,lj,mj,oj,pj,uj,vj,wj,xj,zj,Aj,Fj,Gj,Hj,Ij,Kj,Lj,pk,uk,pq,rq,tq,qq,sq,uq,Sb,zu,lu,mu,ou,gn,ic,kc,co,an,Nm,Fd,Zd,Qe,bf,of,Af,Mf,Yf,jg,Ag,Mg,Yg,ih,uh,Gh,Rt,du,Eu,pm,nm,en,lo,om,Lm,Xm,Wm,or,pr,qr,rr,sr,tr,sl,ur,vr,wr,xr,yr,zr,Ar,Br,Cr,Dr,Er,Fr,Gr,Hr,Ir,Jr,Kr,Lr,Mr,Nr,Or,Pr,Qr,Sr,ks,kt,kt];var hx=[lt,Io,Jo,Ko,Lo,Mo,No,Oo,Po,Qo,Ro,So,Xo,Yo,Zo,$o,_o,ap,bp,cp,dp,ep,fp,up,wp,Hp,Mh,Vh,Wh,Xh,Zh,_h,si,ti,ui,wi,yi,ek,kk,Kc,gr,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt,lt];var ix=[mt,rn,sn,Pc,vn,Yt,Ou,Vu,$u,rw,Sl,Hn,Jn,Kn,Gn,Xl,Yl,bm,un,gm,hm,no,Uh,wq,yq,Aq,Gq,Iq,Cq,Eq,ri,xq,zq,Bq,Hq,Jq,Dq,Fq,Yi,Zi,cj,hj,ij,nj,sj,tj,yj,Dj,Ej,Jj,Lp,Mp,Op,lq,nq,mq,oq,ol,pl,rl,Tp,Up,Wp,_p,aq,cq,_t,Iu,fn,qu,Sn,Yn,nt,ot,pt,Xv,Ww,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt,mt];var jx=[qt,Qj,Yj,qt];var kx=[rt,on,tn,xn,rm,sm,fv,yl,uw,tw,sw,vw,Dn,In,Tl,Mn,cm,Ao,Fo,nk,sk,dl,fl,il,Nk,Uk,Xk,$k,jc,vl,Om,Wv,lr,nr,kw,jw,ew,Iw,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt,rt];var lx=[st,dk,jk,st];var mx=[tt,Nc,uv,tv,sv,En,pn,ok,tk,tt,tt,tt,tt,tt,tt,tt];var nx=[ut,tp,zp,Gp,Oh,ut,ut,ut];var ox=[vt,Tj,$j,ck,ik,vt,vt,vt];var px=[wt,Nt,Ch,qh,eh,Ug,Ig,wg,fg,Wf,Kf,yf,mf,_e,ie,Xd,dc,Qc,Rc,Ln,Ul,Zl,Nn,wn,dm,im,yn,cl,el,gl,Sk,Vk,Yk,Au,Wb,Yb,fo,Ik,go,Vv,Uv,Hm,Um,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt,wt];var qx=[xt,yo,Do,pp,qp,vp,Bp,Ep,Fp,Lh,Qh,jl,Kp,Np,_k,nl,ql,Sp,Vp,$p,bq,lw,hw,xt,xt,xt,xt,xt,xt,xt,xt,xt];var rx=[yt,ns,ms,ls];var sx=[zt,Tb,Hu,Uo,Bk,Ck,Dk,Ev,Gv,Fv,zt,zt,zt,zt,zt,zt];var tx=[At,Vf,Jf,xf,lf,$e,he,Wd,cc,hl,Pk,Qk,Rk,Zk,$t,eu,Vq,fr,iw,Rv,fw,ts,ss,rs,qs,ps,os,At,At,At,At,At];var ux=[Bt,qm,Zt,oo,Bu,Dm,Ct,xm,Jm,pu,um,qo,jr,kr,mr,Rm];var vx=[Dt,Et,yv,Ft,zv,Gt,xv,Dt];var wx=[Ht,bi,Ai,Ip,Jp,ll,ml,Qp,Rp,Yp,Zp,Ht,Ht,Ht,Ht,Ht];var xx=[It,xp,Ap,Nh,Ph,It,It,It];var yx=[Jt,Ad,Bd,xd,yd,Oc,qc,rc,yc,zc,Fc,Gc,Xc,Yc,cd,dd,jd,kd,qd,rd,pe,qe,we,xe,De,Ee,Ke,Le,hv,iv,kv,Fn,qn,zo,Eo,Lb,wm,ec,fc,gc,hc,lc,mc,nc,je,ke,le,me,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt,Jt];return{_jpegls_encode:Du,___cxa_can_catch:vv,_free:Dl,_jpegls_decode:Cu,___cxa_is_pointer_type:wv,_i64Add:xs,_memmove:Bs,_i64Subtract:vs,_memset:ws,_malloc:Cl,_memcpy:zs,_bitshift64Lshr:ys,_bitshift64Shl:As,__GLOBAL__I_000101:Kl,__GLOBAL__sub_I_jpegls_cpp:Zb,__GLOBAL__sub_I_iostream_cpp:Ll,runPostSets:us,stackAlloc:Bb,stackSave:Cb,stackRestore:Db,establishStackSpace:Eb,setThrew:Fb,setTempRet0:Ib,getTempRet0:Jb,dynCall_iiiiiiii:Ls,dynCall_viiiii:Ms,dynCall_iiiiiid:Ns,dynCall_vi:Os,dynCall_vii:Ps,dynCall_iiiiiii:Qs,dynCall_ii:Rs,dynCall_iiiiiiiiiiii:Ss,dynCall_iiii:Ts,dynCall_viiiiiiiiiiiiiii:Us,dynCall_viiiiii:Vs,dynCall_viiiiiii:Ws,dynCall_viiiiiiiiii:Xs,dynCall_iii:Ys,dynCall_iiiiii:Zs,dynCall_diii:$s,dynCall_i:_s,dynCall_iiiii:at,dynCall_viii:bt,dynCall_v:ct,dynCall_iiiiiiiii:dt,dynCall_iiiiid:et,dynCall_viiii:ft}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_jpegls_encode=Module._jpegls_encode=asm._jpegls_encode,___cxa_can_catch=Module.___cxa_can_catch=asm.___cxa_can_catch,_free=Module._free=asm._free,_jpegls_decode=Module._jpegls_decode=asm._jpegls_decode,___cxa_is_pointer_type=Module.___cxa_is_pointer_type=asm.___cxa_is_pointer_type,_i64Add=Module._i64Add=asm._i64Add,_memmove=Module._memmove=asm._memmove,_i64Subtract=Module._i64Subtract=asm._i64Subtract,_memset=Module._memset=asm._memset,_malloc=Module._malloc=asm._malloc,_memcpy=Module._memcpy=asm._memcpy,runPostSets=Module.runPostSets=asm.runPostSets,__GLOBAL__sub_I_iostream_cpp=Module.__GLOBAL__sub_I_iostream_cpp=asm.__GLOBAL__sub_I_iostream_cpp,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,__GLOBAL__sub_I_jpegls_cpp=Module.__GLOBAL__sub_I_jpegls_cpp=asm.__GLOBAL__sub_I_jpegls_cpp,__GLOBAL__I_000101=Module.__GLOBAL__I_000101=asm.__GLOBAL__I_000101,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,dynCall_iiiiiiii=Module.dynCall_iiiiiiii=asm.dynCall_iiiiiiii,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_iiiiiid=Module.dynCall_iiiiiid=asm.dynCall_iiiiiid,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_iiiiiii=Module.dynCall_iiiiiii=asm.dynCall_iiiiiii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_iiiiiiiiiiii=Module.dynCall_iiiiiiiiiiii=asm.dynCall_iiiiiiiiiiii,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_viiiiiiiiiiiiiii=Module.dynCall_viiiiiiiiiiiiiii=asm.dynCall_viiiiiiiiiiiiiii,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_viiiiiii=Module.dynCall_viiiiiii=asm.dynCall_viiiiiii,dynCall_viiiiiiiiii=Module.dynCall_viiiiiiiiii=asm.dynCall_viiiiiiiiii,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiii=Module.dynCall_iiiii=asm.dynCall_iiiii,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_iiiiiiiii=Module.dynCall_iiiiiiiii=asm.dynCall_iiiiiiiii,dynCall_iiiiid=Module.dynCall_iiiiid=asm.dynCall_iiiiid,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=asm.stackAlloc,Runtime.stackSave=asm.stackSave,Runtime.stackRestore=asm.stackRestore,Runtime.establishStackSpace=asm.establishStackSpace,Runtime.setTempRet0=asm.setTempRet0,Runtime.getTempRet0=asm.getTempRet0,ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function a(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=a)},Module.callMain=Module.callMain=function(a){function b(){for(var a=0;3>a;a++)d.push(0)}assert(0==runDependencies,"cannot call main when async dependencies remain! (listen on __ATMAIN__)"),assert(0==__ATPRERUN__.length,"cannot call main when preRun functions remain to be called"),a=a||[],ensureInitRuntime();var c=a.length+1,d=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];b();for(var e=0;c-1>e;e+=1)d.push(allocate(intArrayFromString(a[e]),"i8",ALLOC_NORMAL)),b();d.push(0),d=allocate(d,"i32",ALLOC_NORMAL);try{var f=Module._main(c,d,0);exit(f,!0)}catch(g){if(g instanceof ExitStatus)return;if("SimulateInfiniteLoop"==g)return void(Module.noExitRuntime=!0);throw g&&"object"==typeof g&&g.stack&&Module.printErr("exception thrown: "+[g,g.stack]),g}finally{calledMain=!0}},Module.run=Module.run=run,Module.exit=Module.exit=exit;var abortDecorators=[];if(Module.abort=Module.abort=abort,Module.preInit)for("function"==typeof Module.preInit&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;return Module.noInitialRun&&(shouldRunNow=!1),run(),Module},ColorSpace={Unkown:0,Grayscale:1,AdobeRGB:2,RGB:3,CYMK:4},JpegImage=function(){"use strict";function a(){}function b(a,b){for(var c,d,e=0,f=[],g=16;g>0&&!a[g-1];)g--;f.push({children:[],index:0});var h,i=f[0];for(c=0;g>c;c++){for(d=0;d0;)i=f.pop();for(i.index++,f.push(i);f.length<=c;)f.push(h={children:[],index:0}),i.children[i.index]=h.children,i=h;e++}g>c+1&&(f.push(h={children:[],index:0}),i.children[i.index]=h.children,i=h)}return f[0].children}function c(a,b,c){return 64*((a.blocksPerLine+1)*b+c)}function d(a,b,d,e,f,g,i,j,k){function l(){if(H>0)return H--,G>>H&1;if(G=a[b++],255==G){var c=a[b++];if(c)throw"unexpected marker: "+(G<<8|c).toString(16)}return H=7,G>>>7}function m(a){for(var b,c=a;null!==(b=l());){if(c=c[b],"number"==typeof c)return c;if("object"!=typeof c)throw"invalid huffman sequence"}return null}function n(a){for(var b=0;a>0;){var c=l();if(null===c)return;b=b<<1|c,a--}return b}function o(a){var b=n(a);return b>=1<e;){var f=m(a.huffmanTableAC),g=15&f,i=f>>4;if(0!==g){e+=i;var j=h[e];a.blockData[b+j]=o(g),e++}else{if(15>i)break;e+=16}}}function q(a,b){var c=m(a.huffmanTableDC),d=0===c?0:o(c)<0)return void I--;for(var c=g,d=i;d>=c;){var e=m(a.huffmanTableAC),f=15&e,j=e>>4;if(0!==f){c+=j;var l=h[c];a.blockData[b+l]=o(f)*(1<j){I=n(j)+(1<=c;){var f=h[c];switch(J){case 0:var j=m(a.huffmanTableAC),p=15&j;if(e=j>>4,0===p)15>e?(I=n(e)+(1<N;){for(y=0;K>y;y++)e[y].pred=0;if(I=0,1==K)for(x=e[0],B=0;f>B;B++)v(x,C,N),N++;else for(B=0;f>B;B++){for(y=0;K>y;y++)for(x=e[y],O=x.h,P=x.v,z=0;P>z;z++)for(A=0;O>A;A++)u(x,C,N,z,A);N++}if(H=0,L=a[b]<<8|a[b+1],65280>=L)throw"marker was not found";if(!(L>=65488&&65495>=L))break;b+=2}return b-F}function e(a,b,c){var d,e,f,g,h,q,r,s,t,u,v=a.quantizationTable;for(u=0;64>u;u++)c[u]=a.blockData[b+u]*v[u];for(u=0;8>u;++u){var w=8*u;0!==c[1+w]||0!==c[2+w]||0!==c[3+w]||0!==c[4+w]||0!==c[5+w]||0!==c[6+w]||0!==c[7+w]?(d=o*c[0+w]+128>>8,e=o*c[4+w]+128>>8,f=c[2+w],g=c[6+w],h=p*(c[1+w]-c[7+w])+128>>8,s=p*(c[1+w]+c[7+w])+128>>8,q=c[3+w]<<4,r=c[5+w]<<4,t=d-e+1>>1,d=d+e+1>>1,e=t,t=f*n+g*m+128>>8,f=f*m-g*n+128>>8,g=t,t=h-r+1>>1,h=h+r+1>>1,r=t,t=s+q+1>>1,q=s-q+1>>1,s=t,t=d-g+1>>1,d=d+g+1>>1,g=t,t=e-f+1>>1,e=e+f+1>>1,f=t,t=h*l+s*k+2048>>12,h=h*k-s*l+2048>>12,s=t,t=q*j+r*i+2048>>12,q=q*i-r*j+2048>>12,r=t,c[0+w]=d+s,c[7+w]=d-s,c[1+w]=e+r,c[6+w]=e-r,c[2+w]=f+q,c[5+w]=f-q,c[3+w]=g+h,c[4+w]=g-h):(t=o*c[0+w]+512>>10,c[0+w]=t,c[1+w]=t,c[2+w]=t,c[3+w]=t,c[4+w]=t,c[5+w]=t,c[6+w]=t,c[7+w]=t)}for(u=0;8>u;++u){var x=u;0!==c[8+x]||0!==c[16+x]||0!==c[24+x]||0!==c[32+x]||0!==c[40+x]||0!==c[48+x]||0!==c[56+x]?(d=o*c[0+x]+2048>>12,e=o*c[32+x]+2048>>12,f=c[16+x],g=c[48+x],h=p*(c[8+x]-c[56+x])+2048>>12,s=p*(c[8+x]+c[56+x])+2048>>12,q=c[24+x],r=c[40+x],t=d-e+1>>1,d=d+e+1>>1,e=t,t=f*n+g*m+2048>>12,f=f*m-g*n+2048>>12,g=t,t=h-r+1>>1,h=h+r+1>>1,r=t,t=s+q+1>>1,q=s-q+1>>1,s=t,t=d-g+1>>1,d=d+g+1>>1,g=t,t=e-f+1>>1,e=e+f+1>>1,f=t,t=h*l+s*k+2048>>12,h=h*k-s*l+2048>>12,s=t,t=q*j+r*i+2048>>12,q=q*i-r*j+2048>>12,r=t,c[0+x]=d+s,c[56+x]=d-s,c[8+x]=e+r,c[48+x]=e-r,c[16+x]=f+q,c[40+x]=f-q,c[24+x]=g+h,c[32+x]=g-h):(t=o*c[u+0]+8192>>14,c[0+x]=t,c[8+x]=t,c[16+x]=t,c[24+x]=t,c[32+x]=t,c[40+x]=t,c[48+x]=t,c[56+x]=t)}for(u=0;64>u;++u){var y=b+u,z=c[u];z=z<=-2056/a.bitConversion?0:z>=2024/a.bitConversion?255/a.bitConversion:z+2056/a.bitConversion>>4,a.blockData[y]=z}}function f(a,b){for(var d=b.blocksPerLine,f=b.blocksPerColumn,g=new Int32Array(64),h=0;f>h;h++)for(var i=0;d>i;i++){var j=c(b,h,i);e(b,j,g)}return b.blockData}function g(a){return 0>=a?0:a>=255?255:0|a}var h=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),i=4017,j=799,k=3406,l=2276,m=1567,n=3784,o=5793,p=2896;return a.prototype={load:function(a){var b=function(a){this.parse(a),this.onload&&this.onload()}.bind(this);if(a.indexOf("data:")>-1){for(var c=a.indexOf("base64,")+7,d=atob(a.substring(c)),e=new Uint8Array(d.length),f=d.length-1;f>=0;f--)e[f]=d.charCodeAt(f);b(d)}else{var g=new XMLHttpRequest;g.open("GET",a,!0),g.responseType="arraybuffer",g.onload=function(){var a=new Uint8Array(g.response);b(a)}.bind(this),g.send(null)}},parse:function(a){function c(){var b=a[k]<<8|a[k+1];return k+=2,b}function e(){var b=c(),d=a.subarray(k,k+b-2);return k+=d.length,d}function g(a){for(var b=Math.ceil(a.samplesPerLine/8/a.maxH),c=Math.ceil(a.scanLines/8/a.maxV),d=0;dk;){var x=a[k++],y=new Int32Array(64);if(x>>4===0)for(s=0;64>s;s++){var z=h[s];y[z]=a[k++]}else{if(x>>4!==1)throw"DQT: invalid table spec";for(s=0;64>s;s++){var A=h[s];y[A]=c()}}n[15&x]=y}break;case 65472:case 65473:case 65474:if(i)throw"Only single frame JPEGs supported";c(),i={},i.extended=65473===q,i.progressive=65474===q,i.precision=a[k++],i.scanLines=c(),i.samplesPerLine=c(),i.components=[],i.componentIds={};var B,C=a[k++],D=0,E=0;for(r=0;C>r;r++){B=a[k];var F=a[k+1]>>4,G=15&a[k+1];F>D&&(D=F),G>E&&(E=G);var H=a[k+2];t=i.components.push({h:F,v:G,quantizationTable:n[H],quantizationTableId:H,bitConversion:255/((1<r;){var J=a[k++],K=new Uint8Array(16),L=0;for(s=0;16>s;s++,k++)L+=K[s]=a[k];var M=new Uint8Array(L);for(s=0;L>s;s++,k++)M[s]=a[k];r+=17+L,(J>>4===0?p:o)[15&J]=b(K,M)}break;case 65501:c(),j=c();break;case 65498:var N,O=(c(),a[k++]),P=[];for(r=0;O>r;r++){var Q=i.componentIds[a[k++]];N=i.components[Q];var R=a[k++];N.huffmanTableDC=p[R>>4],N.huffmanTableAC=o[15&R],P.push(N)}var S=a[k++],T=a[k++],U=a[k++],V=d(a,k,i,P,j,S,T,U>>4,15&U);k+=V;break;default:if(255==a[k-3]&&a[k-2]>=192&&a[k-2]<=254){k-=3;break}throw"unknown JPEG marker "+q.toString(16)}q=c()}switch(this.width=i.samplesPerLine,this.height=i.scanLines,this.jfif=l,this.adobe=m,this.components=[],i.components.length){case 1:this.colorspace=ColorSpace.Grayscale;break;case 3:this.adobe?this.colorspace=ColorSpace.AdobeRGB:this.colorspace=ColorSpace.RGB;break;case 4:this.colorspace=ColorSpace.CYMK;break;default:this.colorspace=ColorSpace.Unknown}for(var r=0;ri;i++){d=this.components[i];for(var q,r,s=d.blocksPerLine,t=d.blocksPerColumn,u=s<<3,v=0,w=0;t>w;w++)for(var x=w<<3,y=0;s>y;y++){var z=c(d,w,y),l=0,A=y<<3;for(q=0;8>q;q++){var v=(x+q)*u;for(r=0;8>r;r++)p[v+A+r]=d.output[z+l++]}}e=d.scaleX*j,f=d.scaleY*k,l=i;var B,C,D;for(h=0;b>h;h++)for(g=0;a>g;g++)C=0|h*f,B=0|g*e,D=C*u+B,o[l]=p[D],l+=m}return o},getData:function(a,b){var d,e,f,h,i,j,k,l,m,n,o,p,q,r,s,t=this.width/a,u=this.height/b,v=0,w=this.components.length,x=a*b*w,y=new Uint8Array(x),z=new Uint8Array((this.components[0].blocksPerLine<<3)*this.components[0].blocksPerColumn*8);for(j=0;w>j;j++){d=this.components[j];for(var A,B,C=d.blocksPerLine,D=d.blocksPerColumn,E=C<<3,F=0,G=0;D>G;G++)for(var H=G<<3,I=0;C>I;I++){var J=c(d,G,I),v=0,K=I<<3;for(A=0;8>A;A++){var F=(H+A)*E;for(B=0;8>B;B++)z[F+K+B]=d.output[J+v++]*d.bitConversion}}e=d.scaleX*t,f=d.scaleY*u,v=j;var L,M,N;for(i=0;b>i;i++)for(h=0;a>h;h++)M=0|i*f,L=0|h*e,N=M*E+L,y[v]=z[N],v+=w}switch(w){case 1:case 2:break;case 3:if(s=!0,this.adobe&&this.adobe.transformCode?s=!0:"undefined"!=typeof this.colorTransform&&(s=!!this.colorTransform),s)for(j=0;x>j;j+=w)k=y[j],l=y[j+1],m=y[j+2],p=g(k-179.456+1.402*m),q=g(k+135.459-.344*l-.714*m),r=g(k-226.816+1.772*l),y[j]=p,y[j+1]=q,y[j+2]=r;break;case 4:if(!this.adobe)throw"Unsupported color mode (4 components)";if(s=!1,this.adobe&&this.adobe.transformCode?s=!0:"undefined"!=typeof this.colorTransform&&(s=!!this.colorTransform),s)for(j=0;x>j;j+=w)k=y[j],l=y[j+1],m=y[j+2],n=g(434.456-k-1.402*m),o=g(119.541-k+.344*l+.714*m),k=g(481.816-k-1.772*l),y[j]=n,y[j+1]=o,y[j+2]=k;break;default:throw"Unsupported color mode"}return y}},a}();!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.jpeg=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g>4!==4092||65476===f;){switch(f){case 65476:this.huffTable.read(this.stream,this.HuffTab);break;case 65484:throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)");case 65499:this.quantTable.read(this.stream,d.lossless.Decoder.TABLE);break;case 65501:this.restartInterval=this.readNumber();break;case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:this.readApp();break;case 65534:this.readComment();break;default:if(f>>8!==255)throw new Error("ERROR: format throw new IOException! (decode)")}f=this.stream.get16()}if(65472>f||f>65479)throw new Error("ERROR: could not handle arithmetic code!");this.frame.read(this.stream),f=this.stream.get16();do{for(;65498!==f;){switch(f){case 65476:this.huffTable.read(this.stream,this.HuffTab);break;case 65484:throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)");case 65499:this.quantTable.read(this.stream,d.lossless.Decoder.TABLE);break;case 65501:this.restartInterval=this.readNumber();break;case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:this.readApp();break;case 65534:this.readComment();break;default:if(f>>8!==255)throw new Error("ERROR: format throw new IOException! (Parser.decode)")}f=this.stream.get16()}switch(this.precision=this.frame.precision,this.components=this.frame.components,this.numBytes||(this.numBytes=parseInt(Math.ceil(this.precision/8))),1==this.numBytes?this.mask=255:this.mask=65535,this.scan.read(this.stream),this.numComp=this.scan.numComp,this.selection=this.scan.selection,1===this.numBytes?3===this.numComp?(this.getter=this.getValueRGB,this.setter=this.setValueRGB,this.output=this.outputRGB):(this.getter=this.getValue8,this.setter=this.setValue8,this.output=this.outputSingle):(this.getter=this.getValue16,this.setter=this.setValue16,this.output=this.outputSingle),this.selection){case 2:this.selector=this.select2;break;case 3:this.selector=this.select3;break;case 4:this.selector=this.select4;break;case 5:this.selector=this.select5;break;case 6:this.selector=this.select6;break;case 7:this.selector=this.select7;break;default:this.selector=this.select1}for(this.scanComps=this.scan.components,this.quantTables=this.quantTable.quantTables,g=0;gg;g+=1)k[g]=1<=d.lossless.Decoder.RESTART_MARKER_BEGIN&&f<=d.lossless.Decoder.RESTART_MARKER_END))break}65500===f&&1===j&&(this.readNumber(),f=this.stream.get16())}while(65497!==f&&this.xLoc>1)},d.lossless.Decoder.prototype.select6=function(a){return this.getPreviousY(a)+(this.getPreviousX(a)-this.getPreviousXY(a)>>1)},d.lossless.Decoder.prototype.select7=function(a){return(this.getPreviousX(a)+this.getPreviousY(a))/2},d.lossless.Decoder.prototype.decodeRGB=function(a,b,c){var e,f,g,h,i,j,k,l;for(a[0]=this.selector(0),a[1]=this.selector(1),a[2]=this.selector(2),i=0;i=65280)return e;for(a[i]=this.IDCT_Source[0]=a[i]+this.getn(c,e,b,c),this.IDCT_Source[0]*=h[0],l=1;64>l;l+=1){if(e=this.getHuffmanValue(f,b,c),e>=65280)return e;if(l+=e>>4,0===(15&e)){if(e>>4===0)break}else this.IDCT_Source[d.lossless.Decoder.IDCT_P[l]]=this.getn(c,15&e,b,c)*h[l]}}return 0},d.lossless.Decoder.prototype.decodeSingle=function(a,b,c){var e,f,g,h;for(this.restarting?(this.restarting=!1,a[0]=1<=65280)return e;if(g=this.getn(a,e,b,c),h=g>>8,h>=d.lossless.Decoder.RESTART_MARKER_BEGIN&&h<=d.lossless.Decoder.RESTART_MARKER_END)return h;a[0]+=g}return 0},d.lossless.Decoder.prototype.getHuffmanValue=function(a,b,c){var e,f,g;if(g=65535,c[0]<8?(b[0]<<=8,f=this.stream.get8(),255===f&&(this.marker=this.stream.get8(),0!==this.marker&&(this.markerIndex=9)),b[0]|=f):c[0]-=8,e=a[b[0]>>c[0]],0!==(e&d.lossless.Decoder.MSB)){if(0!==this.markerIndex)return this.markerIndex=0,65280|this.marker;b[0]&=g>>16-c[0],b[0]<<=8,f=this.stream.get8(),255===f&&(this.marker=this.stream.get8(),0!==this.marker&&(this.markerIndex=9)),b[0]|=f,e=a[256*(255&e)+(b[0]>>c[0])],c[0]+=8}if(c[0]+=8-(e>>8),c[0]<0)throw new Error("index="+c[0]+" temp="+b[0]+" code="+e+" in HuffmanValue()");return c[0]>16-c[0],255&e)},d.lossless.Decoder.prototype.getn=function(a,b,c,d){var e,f,g,h,i;if(f=1,g=-1,h=65535,0===b)return 0;if(16===b)return a[0]>=0?-32768:32768;if(d[0]-=b,d[0]>=0){if(d[0]>d[0],c[0]&=h>>16-d[0]}else{if(c[0]<<=8,i=this.stream.get8(),255===i&&(this.marker=this.stream.get8(),0!==this.marker&&(this.markerIndex=9)),c[0]|=i,d[0]+=8,d[0]<0){if(0!==this.markerIndex)return this.markerIndex=0,(65280|this.marker)<<8;c[0]<<=8,i=this.stream.get8(),255===i&&(this.marker=this.stream.get8(),0!==this.marker&&(this.markerIndex=9)),c[0]|=i,d[0]+=8}if(d[0]<0)throw new Error("index="+d[0]+" in getn()");if(d[0]>d[0],c[0]&=h>>16-d[0]}return f<e&&(e+=(g<0?this.getter(this.yLoc*this.xDim+this.xLoc-1,a):this.yLoc>0?this.getPreviousY(a):1<0&&this.yLoc>0?this.getter((this.yLoc-1)*this.xDim+this.xLoc-1,a):this.getPreviousY(a)},d.lossless.Decoder.prototype.getPreviousY=function(a){return this.yLoc>0?this.getter((this.yLoc-1)*this.xDim+this.xLoc,a):this.getPreviousX(a)},d.lossless.Decoder.prototype.isLastPixel=function(){return this.xLoc===this.xDim-1&&this.yLoc===this.yDim-1},d.lossless.Decoder.prototype.outputSingle=function(a){this.xLoc=this.xDim&&(this.yLoc+=1,this.xLoc=0))},d.lossless.Decoder.prototype.outputRGB=function(a){var b=this.yLoc*this.xDim+this.xLoc;this.xLoc=this.xDim&&(this.yLoc+=1,this.xLoc=0))},d.lossless.Decoder.prototype.setValue8=function(a,b){this.outputData[a]=b},d.lossless.Decoder.prototype.getValue8=function(a){return this.outputData[a]};var e=function(){var a=new ArrayBuffer(2);return new DataView(a).setInt16(0,256,!0),256===new Int16Array(a)[0]}();e?(d.lossless.Decoder.prototype.setValue16=d.lossless.Decoder.prototype.setValue8,d.lossless.Decoder.prototype.getValue16=d.lossless.Decoder.prototype.getValue8):(d.lossless.Decoder.prototype.setValue16=function(a,b){this.outputData[a]=(255&b)<<8|b>>8&255},d.lossless.Decoder.prototype.getValue16=function(a){var b=this.outputData[a];return(255&b)<<8|b>>8&255}),d.lossless.Decoder.prototype.setValueRGB=function(a,b,c){this.outputData[3*a+c]=b},d.lossless.Decoder.prototype.getValueRGB=function(a,b){return this.outputData[3*a+b]},d.lossless.Decoder.prototype.readApp=function(){var a=0,b=this.stream.get16();for(a+=2;b>a;)this.stream.get8(),a+=1;return b},d.lossless.Decoder.prototype.readComment=function(){var a,b="",c=0;for(a=this.stream.get16(),c+=2;a>c;)b+=this.stream.get8(),c+=1;return b},d.lossless.Decoder.prototype.readNumber=function(){var a=this.stream.get16();if(4!==a)throw new Error("ERROR: Define number format throw new IOException [Ld!=4]");return this.stream.get16()};var f=typeof b;"undefined"!==f&&b.exports&&(b.exports=d.lossless.Decoder)},{"./data-stream.js":2,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-header.js":9,"./utils.js":10}],4:[function(a,b,c){"use strict";var d=d||{};d.lossless=d.lossless||{},d.lossless.ComponentSpec=d.lossless.ComponentSpec||("undefined"!=typeof a?a("./component-spec.js"):null),d.lossless.DataStream=d.lossless.DataStream||("undefined"!=typeof a?a("./data-stream.js"):null),d.lossless.FrameHeader=d.lossless.FrameHeader||function(){this.components=[],this.dimX=0,this.dimY=0,this.numComp=0,this.precision=0},d.lossless.FrameHeader.prototype.read=function(a){var b,c,e,f,g=0;for(b=a.get16(),g+=2,this.precision=a.get8(),g+=1,this.dimY=a.get16(),g+=2,this.dimX=a.get16(),g+=2,this.numComp=a.get8(),g+=1,c=1;c<=this.numComp;c+=1){if(g>b)throw new Error("ERROR: frame format error");if(e=a.get8(),g+=1,g>=b)throw new Error("ERROR: frame format error [c>=Lf]");f=a.get8(),g+=1,this.components[e]||(this.components[e]=new d.lossless.ComponentSpec),this.components[e].hSamp=f>>4,this.components[e].vSamp=15&f,this.components[e].quantTableSel=a.get8(),g+=1}if(g!==b)throw new Error("ERROR: frame format error [Lf!=count]");return 1};var e=typeof b;"undefined"!==e&&b.exports&&(b.exports=d.lossless.FrameHeader)},{"./component-spec.js":1,"./data-stream.js":2}],5:[function(a,b,c){"use strict";var d=d||{};d.lossless=d.lossless||{},d.lossless.DataStream=d.lossless.DataStream||("undefined"!=typeof a?a("./data-stream.js"):null),d.lossless.Utils=d.lossless.Utils||("undefined"!=typeof a?a("./utils.js"):null),d.lossless.HuffmanTable=d.lossless.HuffmanTable||function(){this.l=d.lossless.Utils.createArray(4,2,16),this.th=[],this.v=d.lossless.Utils.createArray(4,2,16,200),this.tc=d.lossless.Utils.createArray(4,2),this.tc[0][0]=0,this.tc[1][0]=0,this.tc[2][0]=0,this.tc[3][0]=0,this.tc[0][1]=0,this.tc[1][1]=0,this.tc[2][1]=0,this.tc[3][1]=0,this.th[0]=0,this.th[1]=0,this.th[2]=0,this.th[3]=0},d.lossless.HuffmanTable.MSB=2147483648,d.lossless.HuffmanTable.prototype.read=function(a,b){var c,d,e,f,g,h,i=0;for(c=a.get16(),i+=2;c>i;){if(d=a.get8(),i+=1,e=15&d,e>3)throw new Error("ERROR: Huffman table ID > 3");if(f=d>>4,f>2)throw new Error("ERROR: Huffman table [Table class > 2 ]");for(this.th[e]=1,this.tc[e][f]=1,g=0;16>g;g+=1)this.l[e][f][g]=a.get8(),i+=1;for(g=0;16>g;g+=1)for(h=0;hc)throw new Error("ERROR: Huffman table format error [count>Lh]");this.v[e][f][g][h]=a.get8(),i+=1}}if(i!==c)throw new Error("ERROR: Huffman table format error [count!=Lf]");for(g=0;4>g;g+=1)for(h=0;2>h;h+=1)0!==this.tc[g][h]&&this.buildHuffTable(b[g][h],this.l[g][h],this.v[g][h]);return 1},d.lossless.HuffmanTable.prototype.buildHuffTable=function(a,b,c){var e,f,g,h,i,j;for(f=256,g=0,h=0;8>h;h+=1)for(i=0;i>h+1>j;j+=1)a[g]=c[h][i]|h+1<<8,g+=1;for(h=1;256>g;h+=1,g+=1)a[g]=h|d.lossless.HuffmanTable.MSB;for(e=1,g=0,h=8;16>h;h+=1)for(i=0;i>h-7>j;j+=1)a[256*e+g]=c[h][i]|h+1<<8,g+=1;if(g>=256){if(g>256)throw new Error("ERROR: Huffman table error(1)!");g=0,e+=1}}};var e=typeof b;"undefined"!==e&&b.exports&&(b.exports=d.lossless.HuffmanTable)},{"./data-stream.js":2,"./utils.js":10}],6:[function(a,b,c){"use strict";var d=d||{};d.lossless=d.lossless||{},d.lossless.ComponentSpec=d.lossless.ComponentSpec||("undefined"!=typeof a?a("./component-spec.js"):null),d.lossless.DataStream=d.lossless.DataStream||("undefined"!=typeof a?a("./data-stream.js"):null),d.lossless.Decoder=d.lossless.Decoder||("undefined"!=typeof a?a("./decoder.js"):null),d.lossless.FrameHeader=d.lossless.FrameHeader||("undefined"!=typeof a?a("./frame-header.js"):null),d.lossless.HuffmanTable=d.lossless.HuffmanTable||("undefined"!=typeof a?a("./huffman-table.js"):null),d.lossless.QuantizationTable=d.lossless.QuantizationTable||("undefined"!=typeof a?a("./quantization-table.js"):null),d.lossless.ScanComponent=d.lossless.ScanComponent||("undefined"!=typeof a?a("./scan-component.js"):null),d.lossless.ScanHeader=d.lossless.ScanHeader||("undefined"!=typeof a?a("./scan-header.js"):null),d.lossless.Utils=d.lossless.Utils||("undefined"!=typeof a?a("./utils.js"):null);var e=typeof b;"undefined"!==e&&b.exports&&(b.exports=d)},{"./component-spec.js":1,"./data-stream.js":2,"./decoder.js":3,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-component.js":8,"./scan-header.js":9,"./utils.js":10}],7:[function(a,b,c){"use strict";var d=d||{};d.lossless=d.lossless||{},d.lossless.DataStream=d.lossless.DataStream||("undefined"!=typeof a?a("./data-stream.js"):null),d.lossless.Utils=d.lossless.Utils||("undefined"!=typeof a?a("./utils.js"):null),d.lossless.QuantizationTable=d.lossless.QuantizationTable||function(){this.precision=[],this.tq=[],this.quantTables=d.lossless.Utils.createArray(4,64),this.tq[0]=0,this.tq[1]=0,this.tq[2]=0,this.tq[3]=0},d.lossless.QuantizationTable.enhanceQuantizationTable=function(a,b){var c;for(c=0;8>c;c+=1)a[b[0+c]]*=90,a[b[32+c]]*=90,a[b[16+c]]*=118,a[b[48+c]]*=49,a[b[40+c]]*=71,a[b[8+c]]*=126,a[b[56+c]]*=25,a[b[24+c]]*=106;for(c=0;8>c;c+=1)a[b[0+8*c]]*=90,a[b[4+8*c]]*=90,a[b[2+8*c]]*=118,a[b[6+8*c]]*=49,a[b[5+8*c]]*=71,a[b[1+8*c]]*=126,a[b[7+8*c]]*=25,a[b[3+8*c]]*=106;for(c=0;64>c;c+=1)a[c]>>=6},d.lossless.QuantizationTable.prototype.read=function(a,b){var c,e,f,g,h=0;for(c=a.get16(),h+=2;c>h;){if(e=a.get8(),h+=1,f=15&e,f>3)throw new Error("ERROR: Quantization table ID > 3");if(this.precision[f]=e>>4,0===this.precision[f])this.precision[f]=8;else{if(1!==this.precision[f])throw new Error("ERROR: Quantization table precision error");this.precision[f]=16}if(this.tq[f]=1,8===this.precision[f]){for(g=0;64>g;g+=1){if(h>c)throw new Error("ERROR: Quantization table format error");this.quantTables[f][g]=a.get8(),h+=1}d.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[f],b)}else{for(g=0;64>g;g+=1){if(h>c)throw new Error("ERROR: Quantization table format error");this.quantTables[f][g]=a.get16(),h+=2}d.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[f],b)}}if(h!==c)throw new Error("ERROR: Quantization table error [count!=Lq]");return 1};var e=typeof b;"undefined"!==e&&b.exports&&(b.exports=d.lossless.QuantizationTable)},{"./data-stream.js":2,"./utils.js":10}],8:[function(a,b,c){"use strict";var d=d||{};d.lossless=d.lossless||{},d.lossless.ScanComponent=d.lossless.ScanComponent||function(){this.acTabSel=0,this.dcTabSel=0,this.scanCompSel=0};var e=typeof b;"undefined"!==e&&b.exports&&(b.exports=d.lossless.ScanComponent)},{}],9:[function(a,b,c){"use strict";var d=d||{};d.lossless=d.lossless||{},d.lossless.DataStream=d.lossless.DataStream||("undefined"!=typeof a?a("./data-stream.js"):null),d.lossless.ScanComponent=d.lossless.ScanComponent||("undefined"!=typeof a?a("./scan-component.js"):null),d.lossless.ScanHeader=d.lossless.ScanHeader||function(){this.ah=0,this.al=0,this.numComp=0,this.selection=0,this.spectralEnd=0,this.components=[]},d.lossless.ScanHeader.prototype.read=function(a){var b,c,e,f=0;for(b=a.get16(),f+=2,this.numComp=a.get8(),f+=1,c=0;cb)throw new Error("ERROR: scan header format error");this.components[c].scanCompSel=a.get8(),f+=1,e=a.get8(),f+=1,this.components[c].dcTabSel=e>>4,this.components[c].acTabSel=15&e}if(this.selection=a.get8(),f+=1,this.spectralEnd=a.get8(),f+=1,e=a.get8(),this.ah=e>>4,this.al=15&e,f+=1,f!==b)throw new Error("ERROR: scan header format error [count!=Ns]");return 1};var e=typeof b;"undefined"!==e&&b.exports&&(b.exports=d.lossless.ScanHeader)},{"./data-stream.js":2,"./scan-component.js":8}],10:[function(a,b,c){"use strict";var d=d||{};d.lossless=d.lossless||{},d.lossless.Utils=d.lossless.Utils||{},d.lossless.Utils.createArray=function(a){var b=new Array(a||0),c=a;if(arguments.length>1)for(var e=Array.prototype.slice.call(arguments,1);c--;)b[a-1-c]=d.lossless.Utils.createArray.apply(this,e);return b},d.lossless.Utils.makeCRCTable=function(){for(var a,b=[],c=0;256>c;c++){a=c;for(var d=0;8>d;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b},d.lossless.Utils.crc32=function(a){for(var b=new Uint8Array(a.buffer),c=d.lossless.Utils.crcTable||(d.lossless.Utils.crcTable=d.lossless.Utils.makeCRCTable()),e=-1,f=0;f>>8^c[255&(e^b[f])];return(-1^e)>>>0};var e=typeof b;"undefined"!==e&&b.exports&&(b.exports=d.lossless.Utils)},{}]},{},[6])(6)});var JpxImage=function(){function a(){this.failOnCorruptedImage=!1}function b(a,b){a.x0=Math.ceil(b.XOsiz/a.XRsiz),a.x1=Math.ceil(b.Xsiz/a.XRsiz),a.y0=Math.ceil(b.YOsiz/a.YRsiz),a.y1=Math.ceil(b.Ysiz/a.YRsiz),a.width=a.x1-a.x0,a.height=a.y1-a.y0}function c(a,b){for(var c,d=a.SIZ,e=[],f=Math.ceil((d.Xsiz-d.XTOsiz)/d.XTsiz),g=Math.ceil((d.Ysiz-d.YTOsiz)/d.YTsiz),h=0;g>h;h++)for(var i=0;f>i;i++)c={},c.tx0=Math.max(d.XTOsiz+i*d.XTsiz,d.XOsiz),c.ty0=Math.max(d.YTOsiz+h*d.YTsiz,d.YOsiz),c.tx1=Math.min(d.XTOsiz+(i+1)*d.XTsiz,d.Xsiz),c.ty1=Math.min(d.YTOsiz+(h+1)*d.YTsiz,d.Ysiz),c.width=c.tx1-c.tx0,c.height=c.ty1-c.ty0,c.components=[],e.push(c);a.tiles=e;for(var j=d.Csiz,k=0,l=j;l>k;k++)for(var m=b[k],n=0,o=e.length;o>n;n++){var p={};c=e[n],p.tcx0=Math.ceil(c.tx0/m.XRsiz),p.tcy0=Math.ceil(c.ty0/m.YRsiz),p.tcx1=Math.ceil(c.tx1/m.XRsiz),p.tcy1=Math.ceil(c.ty1/m.YRsiz),p.width=p.tcx1-p.tcx0,p.height=p.tcy1-p.tcy0,c.components[k]=p}}function d(a,b,c){var d=b.codingStyleParameters,e={};return d.entropyCoderWithCustomPrecincts?(e.PPx=d.precinctsSizes[c].PPx,e.PPy=d.precinctsSizes[c].PPy):(e.PPx=15,e.PPy=15),e.xcb_=c>0?Math.min(d.xcb,e.PPx-1):Math.min(d.xcb,e.PPx),e.ycb_=c>0?Math.min(d.ycb,e.PPy-1):Math.min(d.ycb,e.PPy),e}function e(a,b,c){var d=1<b.trx0?Math.ceil(b.trx1/d)-Math.floor(b.trx0/d):0,j=b.try1>b.try0?Math.ceil(b.try1/e)-Math.floor(b.try0/e):0,k=i*j;b.precinctParameters={precinctWidth:d,precinctHeight:e,numprecinctswide:i,numprecinctshigh:j,numprecincts:k,precinctWidthInSubband:g,precinctHeightInSubband:h}}function f(a,b,c){var d,e,f,g,h=c.xcb_,i=c.ycb_,j=1<>h,m=b.tby0>>i,n=b.tbx1+j-1>>h,o=b.tby1+k-1>>i,p=b.resolution.precinctParameters,q=[],r=[];for(e=m;o>e;e++)for(d=l;n>d;d++){f={cbx:d,cby:e,tbx0:j*d,tby0:k*e,tbx1:j*(d+1),tby1:k*(e+1)},f.tbx0_=Math.max(b.tbx0,f.tbx0),f.tby0_=Math.max(b.tby0,f.tby0),f.tbx1_=Math.min(b.tbx1,f.tbx1),f.tby1_=Math.min(b.tby1,f.tby1);var s=Math.floor((f.tbx0_-b.tbx0)/p.precinctWidthInSubband),t=Math.floor((f.tby0_-b.tby0)/p.precinctHeightInSubband);if(g=s+t*p.numprecinctswide,f.precinctNumber=g,f.subbandType=b.type,f.Lblock=3,!(f.tbx1_<=f.tbx0_||f.tby1_<=f.tby0_)){q.push(f);var u=r[g];void 0!==u?(du.cbxMax&&(u.cbxMax=d),eu.cbyMax&&(u.cbyMax=e)):r[g]=u={cbxMin:d,cbyMin:e,cbxMax:d,cbyMax:e},f.precinct=u}}b.codeblockParameters={codeblockWidth:h,codeblockHeight:i,numcodeblockwide:n-l+1,numcodeblockhigh:o-m+1},b.codeblocks=q,b.precincts=r}function g(a,b,c){for(var d=[],e=a.subbands,f=0,g=e.length;g>f;f++)for(var h=e[f],i=h.codeblocks,j=0,k=i.length;k>j;j++){var l=i[j];l.precinctNumber===b&&d.push(l)}return{layerNumber:c,codeblocks:d}}function h(a){for(var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,h=0,i=0;f>i;i++)h=Math.max(h,d.components[i].codingStyleParameters.decompositionLevelsCount);var j=0,k=0,l=0,m=0;this.nextPacket=function(){for(;e>j;j++){for(;h>=k;k++){for(;f>l;l++){var a=d.components[l];if(!(k>a.codingStyleParameters.decompositionLevelsCount)){for(var b=a.resolutions[k],c=b.precinctParameters.numprecincts;c>m;){var i=g(b,m,j);return m++,i}m=0}}l=0}k=0}}}function i(a){for(var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,h=0,i=0;f>i;i++)h=Math.max(h,d.components[i].codingStyleParameters.decompositionLevelsCount);var j=0,k=0,l=0,m=0;this.nextPacket=function(){for(;h>=j;j++){for(;e>k;k++){for(;f>l;l++){var a=d.components[l];if(!(j>a.codingStyleParameters.decompositionLevelsCount)){for(var b=a.resolutions[j],c=b.precinctParameters.numprecincts;c>m;){var i=g(b,m,k);return m++,i}m=0}}l=0}k=0}}}function j(a){var b,c,d,e,f=a.SIZ,h=a.currentTile.index,i=a.tiles[h],j=i.codingStyleDefaultParameters.layersCount,k=f.Csiz,l=0;for(d=0;k>d;d++){var m=i.components[d];l=Math.max(l,m.codingStyleParameters.decompositionLevelsCount)}var n=new Int32Array(l+1);for(c=0;l>=c;++c){var o=0;for(d=0;k>d;++d){var p=i.components[d].resolutions;c=c;c++){for(;ed;d++){var a=i.components[d];if(!(c>a.codingStyleParameters.decompositionLevelsCount)){var f=a.resolutions[c],h=f.precinctParameters.numprecincts;if(!(e>=h)){for(;j>b;){var m=g(f,e,b);return b++,m}b=0}}}d=0}e=0}}}function k(a){var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,h=n(d),i=h,j=0,k=0,l=0,o=0,p=0;this.nextPacket=function(){for(;pl;l++){for(var a=d.components[l],b=a.codingStyleParameters.decompositionLevelsCount;b>=k;k++){var c=a.resolutions[k],n=h.components[l].resolutions[k],q=m(o,p,n,i,c);if(null!==q){for(;e>j;){var r=g(c,q,j);return j++,r}j=0}}k=0}l=0}o=0}}}function l(a){var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,h=n(d),i=0,j=0,k=0,l=0,o=0;this.nextPacket=function(){for(;f>k;++k){for(var a=d.components[k],b=h.components[k],c=a.codingStyleParameters.decompositionLevelsCount;o=j;j++){var n=a.resolutions[j],p=b.resolutions[j],q=m(l,o,p,b,n);if(null!==q){for(;e>i;){var r=g(n,q,i);return i++,r}i=0}}j=0}l=0}o=0}}}function m(a,b,c,d,e){var f=a*d.minWidth,g=b*d.minHeight;if(f%c.width!==0||g%c.height!==0)return null;var h=g/c.width*e.precinctParameters.numprecinctswide;return f/c.height+h}function n(a){for(var b=a.components.length,c=Number.MAX_VALUE,d=Number.MAX_VALUE,e=0,f=0,g=new Array(b),h=0;b>h;h++){for(var i=a.components[h],j=i.codingStyleParameters.decompositionLevelsCount,k=new Array(j+1),l=Number.MAX_VALUE,m=Number.MAX_VALUE,n=0,o=0,p=1,q=j;q>=0;--q){var r=i.resolutions[q],s=p*r.precinctParameters.precinctWidth,t=p*r.precinctParameters.precinctHeight;l=Math.min(l,s),m=Math.min(m,t),n=Math.max(n,r.precinctParameters.numprecinctswide),o=Math.max(o,r.precinctParameters.numprecinctshigh),k[q]={width:s,height:t},p<<=1}c=Math.min(c,l),d=Math.min(d,m),e=Math.max(e,n),f=Math.max(f,o),g[h]={resolutions:k,minWidth:l,minHeight:m,maxNumWide:n,maxNumHigh:o}}return{components:g,minWidth:c,minHeight:d,maxNumWide:e,maxNumHigh:f}}function o(a){for(var b=a.SIZ,c=a.currentTile.index,g=a.tiles[c],m=b.Csiz,n=0;m>n;n++){for(var o=g.components[n],p=o.codingStyleParameters.decompositionLevelsCount,q=[],r=[],s=0;p>=s;s++){var t=d(a,o,s),u={},v=1<l;){if(c+k>=b.length)throw new Error("Unexpected EOF");var d=b[c+k];k++,m?(j=j<<7|d,l+=7,m=!1):(j=j<<8|d,l+=8),255===d&&(m=!0)}return l-=a,j>>>l&(1<a?a+3:(a=e(5),31>a?a+6:(a=e(7),a+37))}for(var j,k=0,l=0,m=!1,n=a.currentTile.index,o=a.tiles[n],p=a.COD.sopMarkerUsed,q=a.COD.ephMarkerUsed,r=o.packetsIterator;d>k;)try{h(),p&&f(145)&&g(4);var s=r.nextPacket();if(void 0===s)return;if(!e(1))continue;for(var t,u=s.layerNumber,x=[],y=0,z=s.codeblocks.length;z>y;y++){t=s.codeblocks[y];var A,B=t.precinct,C=t.cbx-B.cbxMin,D=t.cby-B.cbyMin,E=!1,F=!1;if(void 0!==t.included)E=!!e(1);else{B=t.precinct;var G,H;if(void 0!==B.inclusionTree)G=B.inclusionTree;else{var I=B.cbxMax-B.cbxMin+1,J=B.cbyMax-B.cbyMin+1;G=new w(I,J),H=new v(I,J),B.inclusionTree=G,B.zeroBitPlanesTree=H}for(G.reset(C,D,u);;){if(k>=b.length)return;if(G.isAboveThreshold())break;if(G.isKnown())G.nextLevel();else if(e(1)){if(G.setKnown(),G.isLeaf()){t.included=!0,E=F=!0;break}G.nextLevel()}else G.incrementValue()}}if(E){if(F){for(H=B.zeroBitPlanesTree,H.reset(C,D);;){if(k>=b.length)return;if(e(1)){if(A=!H.nextLevel())break}else H.incrementValue()}t.zeroBitPlanes=H.value}for(var K=i();e(1);)t.Lblock++;var L=log2(K),M=(1<K?L-1:L)+t.Lblock,N=e(M);x.push({codeblock:t,codingpasses:K,dataLength:N})}}for(h(),q&&f(146);x.length>0;){var O=x.shift();t=O.codeblock,void 0===t.data&&(t.data=[]),t.data.push({data:b,start:c+k,end:c+k+O.dataLength,codingpasses:O.codingpasses}),k+=O.dataLength}}catch(P){return}return k}function q(a,b,c,d,e,f,g,h){for(var i=d.tbx0,j=d.tby0,k=d.tbx1-d.tbx0,l=d.codeblocks,m="H"===d.type.charAt(0)?1:0,n="H"===d.type.charAt(1)?b:0,o=0,p=l.length;p>o;++o){var q=l[o],r=q.tbx1_-q.tbx0_,s=q.tby1_-q.tby0_;if(0!==r&&0!==s&&void 0!==q.data){var t,u;t=new x(r,s,q.subbandType,q.zeroBitPlanes,f),u=2;var v,w,y,z=q.data,A=0,B=0;for(v=0,w=z.length;w>v;v++)y=z[v],A+=y.end-y.start,B+=y.codingpasses;var C=new Int16Array(A),D=0;for(v=0,w=z.length;w>v;v++){y=z[v];var E=y.data.subarray(y.start,y.end);C.set(E,D),D+=E.length}var F=new ArithmeticDecoder(C,0,A);for(t.setDecoder(F),v=0;B>v;v++){switch(u){case 0:t.runSignificancePropogationPass();break;case 1:t.runMagnitudeRefinementPass();break;case 2:t.runCleanupPass(),h&&t.checkSegmentationSymbol()}u=(u+1)%3}var G,H,I,J=q.tbx0_-i+(q.tby0_-j)*k,K=t.coefficentsSign,L=t.coefficentsMagnitude,M=t.bitsDecoded,N=g?0:.5;D=0;var O="LL"!==d.type;for(v=0;s>v;v++){var P=J/k|0,Q=2*P*(b-k)+m+n;for(G=0;r>G;G++){if(H=L[D],0!==H){H=(H+N)*e,0!==K[D]&&(H=-H),I=M[D];var R=O?Q+(J<<1):J;g&&I>=f?a[R]=H:a[R]=H*(1<=r;r++){for(var s=d.resolutions[r],t=s.trx1-s.trx0,v=s.try1-s.try0,w=new Float32Array(t*v),x=0,y=s.subbands.length;y>x;x++){var B,C;i?(B=h[p].mu,C=h[p].epsilon,p++):(B=h[0].mu,C=h[0].epsilon+(r>0?1-r:0));var D=s.subbands[x],E=u[D.type],F=m?1:Math.pow(2,l+E-C)*(1+B/2048),G=j+C-1;q(w,t,v,D,F,G,m,k)}o.push({width:t,height:v,items:w})}var H=n.calculate(o,d.tcx0,d.tcy0);return{left:d.tcx0,top:d.tcy0,width:H.width,height:H.height,items:H.items}}function s(a){for(var b=a.SIZ,c=a.components,d=b.Csiz,e=[],f=0,g=a.tiles.length;g>f;f++){var h,i=a.tiles[f],j=[];for(h=0;d>h;h++)j[h]=r(a,i,h); +var k=j[0],l=c[0].isSigned;if(l)var m=new Int16Array(k.items.length*d);else var m=new Uint16Array(k.items.length*d);var n,o,p,q,s,t,u,v,w,x,y,z,A,B,C,D={left:k.left,top:k.top,width:k.width,height:k.height,items:m},E=0;if(i.codingStyleDefaultParameters.multipleComponentTransform){var F=4===d,G=j[0].items,H=j[1].items,I=j[2].items,J=F?j[3].items:null;n=c[0].precision-8,o=(128<t;t++,E+=L)v=G[t]+o,w=H[t],x=I[t],z=v-(x+w>>2),y=z+x,A=z+w,m[E++]=0>=y?0:y>=p?255:y>>n,m[E++]=0>=z?0:z>=p?255:z>>n,m[E++]=0>=A?0:A>=p?255:A>>n;else for(t=0;u>t;t++,E+=L)v=G[t]+o,w=H[t],x=I[t],y=v+1.402*x,z=v-.34413*w-.71414*x,A=v+1.772*w,m[E++]=0>=y?0:y>=p?255:y>>n,m[E++]=0>=z?0:z>=p?255:z>>n,m[E++]=0>=A?0:A>=p?255:A>>n;if(F)for(t=0,E=3;u>t;t++,E+=4)B=J[t],m[E]=q>=B?0:B>=s?255:B+o>>n}else for(h=0;d>h;h++)if(8===c[h].precision){var M=j[h].items;for(n=c[h].precision-8,o=(128<t;t++)C=M[t],m[E]=q>=C?0:C>=p?255:C+o>>n,E+=d}else{var l=c[h].isSigned,M=j[h].items;if(l)for(E=h,t=0,u=M.length;u>t;t++)m[E]=M[t],E+=d;else{n=c[h].precision-8,o=(128<t;t++)C=M[t],m[E]=Math.max(Math.min(C+o,N),0),E+=d}}e.push(D)}return e}function t(a,b){for(var c=a.SIZ,d=c.Csiz,e=a.tiles[b],f=0;d>f;f++){var g=e.components[f],h=void 0!==a.currentTile.QCC[f]?a.currentTile.QCC[f]:a.currentTile.QCD;g.quantizationParameters=h;var i=void 0!==a.currentTile.COC[f]?a.currentTile.COC[f]:a.currentTile.COD;g.codingStyleParameters=i}e.codingStyleDefaultParameters=a.currentTile.COD}var u={LL:0,LH:1,HL:1,HH:2};a.prototype={parse:function(a){var b=readUint16(a,0);if(65359===b)return void this.parseCodestream(a,0,a.length);for(var c=0,d=a.length;d>c;){var e=8,f=readUint32(a,c),g=readUint32(a,c+4);if(c+=e,1===f&&(f=4294967296*readUint32(a,c)+readUint32(a,c+4),c+=8,e+=8),0===f&&(f=d-c+e),e>f)throw new Error("JPX Error: Invalid box field size");var h=f-e,i=!0;switch(g){case 1785737832:i=!1;break;case 1668246642:var j=a[c];if(a[c+1],a[c+2],1===j){var k=readUint32(a,c+3);switch(k){case 16:case 17:case 18:break;default:warn("Unknown colorspace "+k)}}else 2===j&&info("ICC profile not supported");break;case 1785737827:this.parseCodestream(a,c,c+h);break;case 1783636e3:218793738!==readUint32(a,c)&&warn("Invalid JP2 signature");break;case 1783634458:case 1718909296:case 1920099697:case 1919251232:case 1768449138:break;default:var l=String.fromCharCode(g>>24&255,g>>16&255,g>>8&255,255&g);warn("Unsupported header type "+g+" ("+l+")")}i&&(c+=h)}},parseImageProperties:function(a){for(var b=a.getByte();b>=0;){var c=b;b=a.getByte();var d=c<<8|b;if(65361===d){a.skip(4);var e=a.getInt32()>>>0,f=a.getInt32()>>>0,g=a.getInt32()>>>0,h=a.getInt32()>>>0;a.skip(16);var i=a.getUint16();return this.width=e-g,this.height=f-h,this.componentsCount=i,void(this.bitsPerComponent=8)}}throw new Error("JPX Error: No size marker found in JPX stream")},parseCodestream:function(a,d,e){var f={};try{for(var g=!1,h=d;e>h+1;){var i=readUint16(a,h);h+=2;var j,k,l,m,n,q,r=0;switch(i){case 65359:f.mainHeader=!0;break;case 65497:break;case 65361:r=readUint16(a,h);var u={};u.Xsiz=readUint32(a,h+4),u.Ysiz=readUint32(a,h+8),u.XOsiz=readUint32(a,h+12),u.YOsiz=readUint32(a,h+16),u.XTsiz=readUint32(a,h+20),u.YTsiz=readUint32(a,h+24),u.XTOsiz=readUint32(a,h+28),u.YTOsiz=readUint32(a,h+32);var v=readUint16(a,h+36);u.Csiz=v;var w=[];j=h+38;for(var x=0;v>x;x++){var y={precision:(127&a[j])+1,isSigned:!!(128&a[j]),XRsiz:a[j+1],YRsiz:a[j+1]};b(y,u),w.push(y)}f.SIZ=u,f.components=w,c(f,w),f.QCC=[],f.COC=[];break;case 65372:r=readUint16(a,h);var z={};switch(j=h+2,k=a[j++],31&k){case 0:m=8,n=!0;break;case 1:m=16,n=!1;break;case 2:m=16,n=!0;break;default:throw new Error("JPX Error: Invalid SQcd value "+k)}for(z.noQuantization=8===m,z.scalarExpounded=n,z.guardBits=k>>5,l=[];r+h>j;){var A={};8===m?(A.epsilon=a[j++]>>3,A.mu=0):(A.epsilon=a[j]>>3,A.mu=(7&a[j])<<8|a[j+1],j+=2),l.push(A)}z.SPqcds=l,f.mainHeader?f.QCD=z:(f.currentTile.QCD=z,f.currentTile.QCC=[]);break;case 65373:r=readUint16(a,h);var B={};j=h+2;var C;switch(f.SIZ.Csiz<257?C=a[j++]:(C=readUint16(a,j),j+=2),k=a[j++],31&k){case 0:m=8,n=!0;break;case 1:m=16,n=!1;break;case 2:m=16,n=!0;break;default:throw new Error("JPX Error: Invalid SQcd value "+k)}for(B.noQuantization=8===m,B.scalarExpounded=n,B.guardBits=k>>5,l=[];r+h>j;)A={},8===m?(A.epsilon=a[j++]>>3,A.mu=0):(A.epsilon=a[j]>>3,A.mu=(7&a[j])<<8|a[j+1],j+=2),l.push(A);B.SPqcds=l,f.mainHeader?f.QCC[C]=B:f.currentTile.QCC[C]=B;break;case 65362:r=readUint16(a,h);var D={};j=h+2;var E=a[j++];D.entropyCoderWithCustomPrecincts=!!(1&E),D.sopMarkerUsed=!!(2&E),D.ephMarkerUsed=!!(4&E),D.progressionOrder=a[j++],D.layersCount=readUint16(a,j),j+=2,D.multipleComponentTransform=a[j++],D.decompositionLevelsCount=a[j++],D.xcb=(15&a[j++])+2,D.ycb=(15&a[j++])+2;var F=a[j++];if(D.selectiveArithmeticCodingBypass=!!(1&F),D.resetContextProbabilities=!!(2&F),D.terminationOnEachCodingPass=!!(4&F),D.verticalyStripe=!!(8&F),D.predictableTermination=!!(16&F),D.segmentationSymbolUsed=!!(32&F),D.reversibleTransformation=a[j++],D.entropyCoderWithCustomPrecincts){for(var G=[];r+h>j;){var H=a[j++];G.push({PPx:15&H,PPy:H>>4})}D.precinctsSizes=G}var I=[];if(D.selectiveArithmeticCodingBypass&&I.push("selectiveArithmeticCodingBypass"),D.resetContextProbabilities&&I.push("resetContextProbabilities"),D.terminationOnEachCodingPass&&I.push("terminationOnEachCodingPass"),D.verticalyStripe&&I.push("verticalyStripe"),D.predictableTermination&&I.push("predictableTermination"),I.length>0)throw g=!0,new Error("JPX Error: Unsupported COD options ("+I.join(", ")+")");f.mainHeader?f.COD=D:(f.currentTile.COD=D,f.currentTile.COC=[]);break;case 65424:r=readUint16(a,h),q={},q.index=readUint16(a,h+2),q.length=readUint32(a,h+4),q.dataEnd=q.length+h-2,q.partIndex=a[h+8],q.partsCount=a[h+9],f.mainHeader=!1,0===q.partIndex&&(q.COD=f.COD,q.COC=f.COC.slice(0),q.QCD=f.QCD,q.QCC=f.QCC.slice(0)),f.currentTile=q;break;case 65427:q=f.currentTile,0===q.partIndex&&(t(f,q.index),o(f)),r=q.dataEnd-h,p(f,a,h,r);break;case 65365:case 65367:case 65368:case 65380:r=readUint16(a,h);break;case 65363:throw new Error("JPX Error: Codestream code 0xFF53 (COC) is not implemented");default:throw new Error("JPX Error: Unknown codestream code: "+i.toString(16))}h+=r}}catch(J){if(g||this.failOnCorruptedImage)throw J;warn("Trying to recover from "+J.message)}this.tiles=s(f),this.width=f.SIZ.Xsiz-f.SIZ.XOsiz,this.height=f.SIZ.Ysiz-f.SIZ.YOsiz,this.componentsCount=f.SIZ.Csiz}};var v=function(){function a(a,b){var c=log2(Math.max(a,b))+1;this.levels=[];for(var d=0;c>d;d++){var e={width:a,height:b,items:[]};this.levels.push(e),a=Math.ceil(a/2),b=Math.ceil(b/2)}}return a.prototype={reset:function(a,b){for(var c,d=0,e=0;d>=1,b>>=1,d++}d--,c=this.levels[d],c.items[c.index]=e,this.currentLevel=d,delete this.value},incrementValue:function(){var a=this.levels[this.currentLevel];a.items[a.index]++},nextLevel:function(){var a=this.currentLevel,b=this.levels[a],c=b.items[b.index];return a--,0>a?(this.value=c,!1):(this.currentLevel=a,b=this.levels[a],b.items[b.index]=c,!0)}},a}(),w=function(){function a(a,b){var c=log2(Math.max(a,b))+1;this.levels=[];for(var d=0;c>d;d++){for(var e=new Uint8Array(a*b),f=new Uint8Array(a*b),g=0,h=e.length;h>g;g++)e[g]=0,f[g]=0;var i={width:a,height:b,items:e,status:f};this.levels.push(i),a=Math.ceil(a/2),b=Math.ceil(b/2)}}return a.prototype={reset:function(a,b,c){this.currentStopValue=c;for(var d=0;d>=1,b>>=1,d++}this.currentLevel=this.levels.length-1,this.minValue=this.levels[this.currentLevel].items[0]},incrementValue:function(){var a=this.levels[this.currentLevel];a.items[a.index]=a.items[a.index]+1,a.items[a.index]>this.minValue&&(this.minValue=a.items[a.index])},nextLevel:function(){var a=this.currentLevel;if(a--,0>a)return!1;this.currentLevel=a;var b=this.levels[a];return b.items[b.index]this.minValue&&(this.minValue=b.items[b.index]),!0},isLeaf:function(){return 0===this.currentLevel},isAboveThreshold:function(){var a=this.currentLevel,b=this.levels[a];return b.items[b.index]>this.currentStopValue},isKnown:function(){var a=this.currentLevel,b=this.levels[a];return b.status[b.index]>0},setKnown:function(){var a=this.currentLevel,b=this.levels[a];b.status[b.index]=1}},a}(),x=function(){function a(a,b,c,g,h){this.width=a,this.height=b,this.contextLabelTable="HH"===c?f:"HL"===c?e:d;var i=a*b;this.neighborsSignificance=new Uint8Array(i),this.coefficentsSign=new Uint8Array(i),this.coefficentsMagnitude=h>14?new Uint32Array(i):h>6?new Uint16Array(i):new Uint8Array(i),this.processingFlags=new Uint8Array(i);var j=new Uint8Array(i);if(0!==g)for(var k=0;i>k;k++)j[k]=g;this.bitsDecoded=j,this.reset()}var b=17,c=18,d=new Uint8Array([0,5,8,0,3,7,8,0,4,7,8,0,0,0,0,0,1,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8]),e=new Uint8Array([0,3,4,0,5,7,7,0,8,8,8,0,0,0,0,0,1,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8]),f=new Uint8Array([0,1,2,0,1,2,2,0,2,2,2,0,0,0,0,0,3,4,5,0,4,5,5,0,5,5,5,0,0,0,0,0,6,7,7,0,7,7,7,0,7,7,7,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8]);return a.prototype={setDecoder:function(a){this.decoder=a},reset:function(){this.contexts=new Int8Array(19),this.contexts[0]=8,this.contexts[b]=92,this.contexts[c]=6},setNeighborsSignificance:function(a,b,c){var d,e=this.neighborsSignificance,f=this.width,g=this.height,h=b>0,i=f>b+1;a>0&&(d=c-f,h&&(e[d-1]+=16),i&&(e[d+1]+=16),e[d]+=4),g>a+1&&(d=c+f,h&&(e[d-1]+=16),i&&(e[d+1]+=16),e[d]+=4),h&&(e[c-1]+=1),i&&(e[c+1]+=1),e[c]|=128},runSignificancePropogationPass:function(){for(var a=this.decoder,b=this.width,c=this.height,d=this.coefficentsMagnitude,e=this.coefficentsSign,f=this.neighborsSignificance,g=this.processingFlags,h=this.contexts,i=this.contextLabelTable,j=this.bitsDecoded,k=-2,l=1,m=2,n=0;c>n;n+=4)for(var o=0;b>o;o++)for(var p=n*b+o,q=0;4>q;q++,p+=b){var r=n+q;if(r>=c)break;if(g[p]&=k,!d[p]&&f[p]){var s=i[f[p]],t=a.readBit(h,s);if(t){var u=this.decodeSignBit(r,o,p);e[p]=u,d[p]=1,this.setNeighborsSignificance(r,o,p),g[p]|=m}j[p]++,g[p]|=l}}},decodeSignBit:function(a,b,c){var d,e,f,g,h,i,j=this.width,k=this.height,l=this.coefficentsMagnitude,m=this.coefficentsSign;g=b>0&&0!==l[c-1],j>b+1&&0!==l[c+1]?(f=m[c+1],g?(e=m[c-1],d=1-f-e):d=1-f-f):g?(e=m[c-1],d=1-e-e):d=0;var n=3*d;return g=a>0&&0!==l[c-j],k>a+1&&0!==l[c+j]?(f=m[c+j],g?(e=m[c-j],d=1-f-e+n):d=1-f-f+n):g?(e=m[c-j],d=1-e-e+n):d=n,d>=0?(h=9+d,i=this.decoder.readBit(this.contexts,h)):(h=9-d,i=1^this.decoder.readBit(this.contexts,h)),i},runMagnitudeRefinementPass:function(){for(var a,b=this.decoder,c=this.width,d=this.height,e=this.coefficentsMagnitude,f=this.neighborsSignificance,g=this.contexts,h=this.bitsDecoded,i=this.processingFlags,j=1,k=2,l=c*d,m=4*c,n=0;l>n;n=a){a=Math.min(l,n+m);for(var o=0;c>o;o++)for(var p=n+o;a>p;p+=c)if(e[p]&&0===(i[p]&j)){var q=16;if(0!==(i[p]&k)){i[p]^=k;var r=127&f[p];q=0===r?15:14}var s=b.readBit(g,q);e[p]=e[p]<<1|s,h[p]++,i[p]|=j}}},runCleanupPass:function(){for(var a,d=this.decoder,e=this.width,f=this.height,g=this.neighborsSignificance,h=this.coefficentsMagnitude,i=this.coefficentsSign,j=this.contexts,k=this.contextLabelTable,l=this.bitsDecoded,m=this.processingFlags,n=1,o=2,p=e,q=2*e,r=3*e,s=0;f>s;s=a){a=Math.min(s+4,f);for(var t=s*e,u=f>s+3,v=0;e>v;v++){var w,x=t+v,y=u&&0===m[x]&&0===m[x+p]&&0===m[x+q]&&0===m[x+r]&&0===g[x]&&0===g[x+p]&&0===g[x+q]&&0===g[x+r],z=0,A=x,B=s;if(y){var C=d.readBit(j,c);if(!C){l[x]++,l[x+p]++,l[x+q]++,l[x+r]++;continue}z=d.readBit(j,b)<<1|d.readBit(j,b),0!==z&&(B=s+z,A+=z*e),w=this.decodeSignBit(B,v,A),i[A]=w,h[A]=1,this.setNeighborsSignificance(B,v,A),m[A]|=o,A=x;for(var D=s;B>=D;D++,A+=e)l[A]++;z++}for(B=s+z;a>B;B++,A+=e)if(!h[A]&&0===(m[A]&n)){var E=k[g[A]],F=d.readBit(j,E);1===F&&(w=this.decodeSignBit(B,v,A),i[A]=w,h[A]=1,this.setNeighborsSignificance(B,v,A),m[A]|=o),l[A]++}}}},checkSegmentationSymbol:function(){var a=this.decoder,c=this.contexts,d=a.readBit(c,b)<<3|a.readBit(c,b)<<2|a.readBit(c,b)<<1|a.readBit(c,b);if(10!==d)throw new Error("JPX Error: Invalid segmentation symbol")}},a}(),y=function(){function a(){}return a.prototype.calculate=function(a,b,c){for(var d=a[0],e=1,f=a.length;f>e;e++)d=this.iterate(d,a[e],b,c);return d},a.prototype.extend=function(a,b,c){var d=b-1,e=b+1,f=b+c-2,g=b+c;a[d--]=a[e++],a[g++]=a[f--],a[d--]=a[e++],a[g++]=a[f--],a[d--]=a[e++],a[g++]=a[f--],a[d]=a[e],a[g]=a[f]},a.prototype.iterate=function(a,b,c,d){var e,f,g,h,i,j,k=a.width,l=a.height,m=a.items,n=b.width,o=b.height,p=b.items;for(g=0,e=0;l>e;e++)for(h=2*e*n,f=0;k>f;f++,g++,h+=2)p[h]=m[g];m=a.items=null;var q=4,r=new Float32Array(n+2*q);if(1===n){if(0!==(1&c))for(j=0,g=0;o>j;j++,g+=n)p[g]*=.5}else for(j=0,g=0;o>j;j++,g+=n)r.set(p.subarray(g,g+n),q),this.extend(r,q,n),this.filter(r,q,n),p.set(r.subarray(q,q+n),g);var s=16,t=[];for(e=0;s>e;e++)t.push(new Float32Array(o+2*q));var u,v=0;if(a=q+o,1===o){if(0!==(1&d))for(i=0;n>i;i++)p[i]*=.5}else for(i=0;n>i;i++){if(0===v){for(s=Math.min(n-i,s),g=i,h=q;a>h;g+=n,h++)for(u=0;s>u;u++)t[u][h]=p[g+u];v=s}v--;var w=t[v];if(this.extend(w,q,o),this.filter(w,q,o),0===v)for(g=i-s+1,h=q;a>h;g+=n,h++)for(u=0;s>u;u++)p[g+u]=t[u][h]}return{width:n,height:o,items:p}},a}(),z=function(){function a(){y.call(this)}return a.prototype=Object.create(y.prototype),a.prototype.filter=function(a,b,c){var d=c>>1;b=0|b;var e,f,g,h,i=-1.586134342059924,j=-.052980118572961,k=.882911075530934,l=.443506852043971,m=1.230174104914001,n=1/m;for(e=b-3,f=d+4;f--;e+=2)a[e]*=n;for(e=b-2,g=l*a[e-1],f=d+3;f--&&(h=l*a[e+1],a[e]=m*a[e]-g-h,f--);e+=2)e+=2,g=l*a[e+1],a[e]=m*a[e]-g-h;for(e=b-1,g=k*a[e-1],f=d+2;f--&&(h=k*a[e+1],a[e]-=g+h,f--);e+=2)e+=2,g=k*a[e+1],a[e]-=g+h;for(e=b,g=j*a[e-1],f=d+1;f--&&(h=j*a[e+1],a[e]-=g+h,f--);e+=2)e+=2,g=j*a[e+1],a[e]-=g+h;if(0!==d)for(e=b+1,g=i*a[e-1],f=d;f--&&(h=i*a[e+1],a[e]-=g+h,f--);e+=2)e+=2,g=i*a[e+1],a[e]-=g+h},a}(),A=function(){function a(){y.call(this)}return a.prototype=Object.create(y.prototype),a.prototype.filter=function(a,b,c){var d=c>>1;b=0|b;var e,f;for(e=b,f=d+1;f--;e+=2)a[e]-=a[e-1]+a[e+1]+2>>2;for(e=b+1,f=d;f--;e+=2)a[e]+=a[e-1]+a[e+1]>>1},a}();return a}(),ArithmeticDecoder=function(){function a(a,b,c){this.data=a,this.bp=b,this.dataEnd=c,this.chigh=a[b],this.clow=0,this.byteIn(),this.chigh=this.chigh<<7&65535|this.clow>>9&127,this.clow=this.clow<<7&65535,this.ct-=7,this.a=32768}var b=[{qe:22017,nmps:1,nlps:1,switchFlag:1},{qe:13313,nmps:2,nlps:6,switchFlag:0},{qe:6145,nmps:3,nlps:9,switchFlag:0},{qe:2753,nmps:4,nlps:12,switchFlag:0},{qe:1313,nmps:5,nlps:29,switchFlag:0},{qe:545,nmps:38,nlps:33,switchFlag:0},{qe:22017,nmps:7,nlps:6,switchFlag:1},{qe:21505,nmps:8,nlps:14,switchFlag:0},{qe:18433,nmps:9,nlps:14,switchFlag:0},{qe:14337,nmps:10,nlps:14,switchFlag:0},{qe:12289,nmps:11,nlps:17,switchFlag:0},{qe:9217,nmps:12,nlps:18,switchFlag:0},{qe:7169,nmps:13,nlps:20,switchFlag:0},{qe:5633,nmps:29,nlps:21,switchFlag:0},{qe:22017,nmps:15,nlps:14,switchFlag:1},{qe:21505,nmps:16,nlps:14,switchFlag:0},{qe:20737,nmps:17,nlps:15,switchFlag:0},{qe:18433,nmps:18,nlps:16,switchFlag:0},{qe:14337,nmps:19,nlps:17,switchFlag:0},{qe:13313,nmps:20,nlps:18,switchFlag:0},{qe:12289,nmps:21,nlps:19,switchFlag:0},{qe:10241,nmps:22,nlps:19,switchFlag:0},{qe:9217,nmps:23,nlps:20,switchFlag:0},{qe:8705,nmps:24,nlps:21,switchFlag:0},{qe:7169,nmps:25,nlps:22,switchFlag:0},{qe:6145,nmps:26,nlps:23,switchFlag:0},{qe:5633,nmps:27,nlps:24,switchFlag:0},{qe:5121,nmps:28,nlps:25,switchFlag:0},{qe:4609,nmps:29,nlps:26,switchFlag:0},{qe:4353,nmps:30,nlps:27,switchFlag:0},{qe:2753,nmps:31,nlps:28,switchFlag:0},{qe:2497,nmps:32,nlps:29,switchFlag:0},{qe:2209,nmps:33,nlps:30,switchFlag:0},{qe:1313,nmps:34,nlps:31,switchFlag:0},{qe:1089,nmps:35,nlps:32,switchFlag:0},{qe:673,nmps:36,nlps:33,switchFlag:0},{qe:545,nmps:37,nlps:34,switchFlag:0},{qe:321,nmps:38,nlps:35,switchFlag:0},{qe:273,nmps:39,nlps:36,switchFlag:0},{qe:133,nmps:40,nlps:37,switchFlag:0},{qe:73,nmps:41,nlps:38,switchFlag:0},{qe:37,nmps:42,nlps:39,switchFlag:0},{qe:21,nmps:43,nlps:40,switchFlag:0},{qe:9,nmps:44,nlps:41,switchFlag:0},{qe:5,nmps:45,nlps:42,switchFlag:0},{qe:1,nmps:45,nlps:43,switchFlag:0},{qe:22017,nmps:46,nlps:46,switchFlag:0}];return a.prototype={byteIn:function(){var a=this.data,b=this.bp;if(255===a[b]){var c=a[b+1];c>143?(this.clow+=65280,this.ct=8):(b++,this.clow+=a[b]<<9,this.ct=7,this.bp=b)}else b++,this.clow+=b65535&&(this.chigh+=this.clow>>16,this.clow&=65535)},readBit:function(a,c){var d,e=a[c]>>1,f=1&a[c],g=b[e],h=g.qe,i=this.a-h;if(this.chighi?(i=h,d=f,e=g.nmps):(i=h,d=1^f,1===g.switchFlag&&(f=d),e=g.nlps);else{if(this.chigh-=h,0!==(32768&i))return this.a=i,f;h>i?(d=1^f,1===g.switchFlag&&(f=d),e=g.nlps):(d=f,e=g.nmps)}do 0===this.ct&&this.byteIn(),i<<=1,this.chigh=this.chigh<<1&65535|this.clow>>15&1,this.clow=this.clow<<1&65535,this.ct--;while(0===(32768&i));return this.a=i,a[c]=e<<1|f,d}},a}(),globalScope="undefined"==typeof window?this:window,isWorker="undefined"==typeof window,FONT_IDENTITY_MATRIX=[.001,0,0,.001,0,0],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,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4},ImageKind={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3},AnnotationType={WIDGET:1,TEXT:2,LINK:3},StreamType={UNKNOWN:0,FLATE:1,LZW:2,DCT:3,JPX:4,JBIG:5,A85:6,AHX:7,CCF:8,RL:9},FontType={UNKNOWN:0,TYPE1:1,TYPE1C:2,CIDFONTTYPE0:3,CIDFONTTYPE0C:4,TRUETYPE:5,CIDFONTTYPE2:6,TYPE3:7,OPENTYPE:8,TYPE0:9,MMTYPE1:10};globalScope.PDFJS||(globalScope.PDFJS={}),globalScope.PDFJS.pdfBug=!1,PDFJS.VERBOSITY_LEVELS={errors:0,warnings:1,infos:5};var OPS=PDFJS.OPS={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotations:78,endAnnotations:79,beginAnnotation:80,endAnnotation:81,paintJpegXObject:82,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91},UNSUPPORTED_FEATURES=PDFJS.UNSUPPORTED_FEATURES={unknown:"unknown",forms:"forms",javaScript:"javaScript",smask:"smask",shadingPattern:"shadingPattern",font:"font"},UnsupportedManager=PDFJS.UnsupportedManager=function(){var a=[];return{listen:function(b){a.push(b)},notify:function(b){warn('Unsupported feature "'+b+'"');for(var c=0,d=a.length;d>c;c++)a[c](b)}}}();PDFJS.isValidUrl=isValidUrl,PDFJS.shadow=shadow;var PasswordResponses=PDFJS.PasswordResponses={NEED_PASSWORD:1,INCORRECT_PASSWORD:2},PasswordException=function(){function a(a,b){this.name="PasswordException",this.message=a,this.code=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.PasswordException=PasswordException;var UnknownErrorException=function(){function a(a,b){this.name="UnknownErrorException",this.message=a,this.details=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.UnknownErrorException=UnknownErrorException;var InvalidPDFException=function(){function a(a){this.name="InvalidPDFException",this.message=a}return a.prototype=new Error,a.constructor=a,a}();PDFJS.InvalidPDFException=InvalidPDFException;var MissingPDFException=function(){function a(a){this.name="MissingPDFException",this.message=a}return a.prototype=new Error,a.constructor=a,a}();PDFJS.MissingPDFException=MissingPDFException;var UnexpectedResponseException=function(){function a(a,b){this.name="UnexpectedResponseException",this.message=a,this.status=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.UnexpectedResponseException=UnexpectedResponseException;var NotImplementedException=function(){function a(a){this.message=a}return a.prototype=new Error,a.prototype.name="NotImplementedException",a.constructor=a,a}(),MissingDataException=function(){function a(a,b){this.begin=a,this.end=b,this.message="Missing data ["+a+", "+b+")"}return a.prototype=new Error,a.prototype.name="MissingDataException",a.constructor=a,a}(),XRefParseException=function(){function a(a){this.message=a}return a.prototype=new Error,a.prototype.name="XRefParseException",a.constructor=a,a}();Object.defineProperty(PDFJS,"isLittleEndian",{configurable:!0,get:function(){return shadow(PDFJS,"isLittleEndian",isLittleEndian())}}),Object.defineProperty(PDFJS,"hasCanvasTypedArrays",{configurable:!0,get:function(){return shadow(PDFJS,"hasCanvasTypedArrays",hasCanvasTypedArrays())}});var Uint32ArrayView=function(){function a(a,b){this.buffer=a,this.byteLength=a.length,this.length=void 0===b?this.byteLength>>2:b,c(this.length)}function b(a){return{get:function(){var b=this.buffer,c=a<<2;return(b[c]|b[c+1]<<8|b[c+2]<<16|b[c+3]<<24)>>>0},set:function(b){var c=this.buffer,d=a<<2;c[d]=255&b,c[d+1]=b>>8&255,c[d+2]=b>>16&255,c[d+3]=b>>>24&255}}}function c(c){for(;c>d;)Object.defineProperty(a.prototype,d,b(d)),d++}a.prototype=Object.create(null);var d=0;return a}(),IDENTITY_MATRIX=[1,0,0,1,0,0],Util=PDFJS.Util=function(){function a(){}var b=["rgb(",0,",",0,",",0,")"];return a.makeCssRgb=function(a,c,d){return b[1]=a,b[3]=c,b[5]=d,b.join("")},a.transform=function(a,b){return[a[0]*b[0]+a[2]*b[1],a[1]*b[0]+a[3]*b[1],a[0]*b[2]+a[2]*b[3],a[1]*b[2]+a[3]*b[3],a[0]*b[4]+a[2]*b[5]+a[4],a[1]*b[4]+a[3]*b[5]+a[5]]},a.applyTransform=function(a,b){var c=a[0]*b[0]+a[1]*b[2]+b[4],d=a[0]*b[1]+a[1]*b[3]+b[5];return[c,d]},a.applyInverseTransform=function(a,b){var c=b[0]*b[3]-b[1]*b[2],d=(a[0]*b[3]-a[1]*b[2]+b[2]*b[5]-b[4]*b[3])/c,e=(-a[0]*b[1]+a[1]*b[0]+b[4]*b[1]-b[5]*b[0])/c;return[d,e]},a.getAxialAlignedBoundingBox=function(b,c){var d=a.applyTransform(b,c),e=a.applyTransform(b.slice(2,4),c),f=a.applyTransform([b[0],b[3]],c),g=a.applyTransform([b[2],b[1]],c);return[Math.min(d[0],e[0],f[0],g[0]),Math.min(d[1],e[1],f[1],g[1]),Math.max(d[0],e[0],f[0],g[0]),Math.max(d[1],e[1],f[1],g[1])]},a.inverseTransform=function(a){var b=a[0]*a[3]-a[1]*a[2];return[a[3]/b,-a[1]/b,-a[2]/b,a[0]/b,(a[2]*a[5]-a[4]*a[3])/b,(a[4]*a[1]-a[5]*a[0])/b]},a.apply3dTransform=function(a,b){return[a[0]*b[0]+a[1]*b[1]+a[2]*b[2],a[3]*b[0]+a[4]*b[1]+a[5]*b[2],a[6]*b[0]+a[7]*b[1]+a[8]*b[2]]},a.singularValueDecompose2dScale=function(a){var b=[a[0],a[2],a[1],a[3]],c=a[0]*b[0]+a[1]*b[2],d=a[0]*b[1]+a[1]*b[3],e=a[2]*b[0]+a[3]*b[2],f=a[2]*b[1]+a[3]*b[3],g=(c+f)/2,h=Math.sqrt((c+f)*(c+f)-4*(c*f-e*d))/2,i=g+h||1,j=g-h||1;return[Math.sqrt(i),Math.sqrt(j)]},a.normalizeRect=function(a){var b=a.slice(0);return a[0]>a[2]&&(b[0]=a[2],b[2]=a[0]),a[1]>a[3]&&(b[1]=a[3],b[3]=a[1]),b},a.intersect=function(b,c){function d(a,b){return a-b}var e=[b[0],b[2],c[0],c[2]].sort(d),f=[b[1],b[3],c[1],c[3]].sort(d),g=[];return b=a.normalizeRect(b),c=a.normalizeRect(c),e[0]===b[0]&&e[1]===c[0]||e[0]===c[0]&&e[1]===b[0]?(g[0]=e[1],g[2]=e[2],f[0]===b[1]&&f[1]===c[1]||f[0]===c[1]&&f[1]===b[1]?(g[1]=f[1],g[3]=f[2],g):!1):!1},a.sign=function(a){return 0>a?-1:1},a.appendToArray=function(a,b){Array.prototype.push.apply(a,b)},a.prependToArray=function(a,b){Array.prototype.unshift.apply(a,b)},a.extendObj=function(a,b){for(var c in b)a[c]=b[c]},a.getInheritableProperty=function(a,b){for(;a&&!a.has(b);)a=a.get("Parent");return a?a.get(b):null},a.inherit=function(a,b,c){a.prototype=Object.create(b.prototype),a.prototype.constructor=a;for(var d in c)a.prototype[d]=c[d]},a.loadScript=function(a,b){var c=document.createElement("script"),d=!1;c.setAttribute("src",a),b&&(c.onload=function(){d||b(),d=!0}),document.getElementsByTagName("head")[0].appendChild(c)},a}(),PageViewport=PDFJS.PageViewport=function(){function a(a,b,c,d,e,f){this.viewBox=a,this.scale=b,this.rotation=c,this.offsetX=d,this.offsetY=e;var g,h,i,j,k=(a[2]+a[0])/2,l=(a[3]+a[1])/2;switch(c%=360,c=0>c?c+360:c){case 180:g=-1,h=0,i=0,j=1;break;case 90:g=0,h=1,i=1,j=0;break;case 270:g=0,h=-1,i=-1,j=0;break;default:g=1,h=0,i=0,j=-1}f&&(i=-i,j=-j);var m,n,o,p;0===g?(m=Math.abs(l-a[1])*b+d,n=Math.abs(k-a[0])*b+e,o=Math.abs(a[3]-a[1])*b,p=Math.abs(a[2]-a[0])*b):(m=Math.abs(k-a[0])*b+d,n=Math.abs(l-a[1])*b+e,o=Math.abs(a[2]-a[0])*b,p=Math.abs(a[3]-a[1])*b),this.transform=[g*b,h*b,i*b,j*b,m-g*b*k-i*b*l,n-h*b*k-j*b*l],this.width=o,this.height=p,this.fontScale=b}return a.prototype={clone:function(b){b=b||{};var c="scale"in b?b.scale:this.scale,d="rotation"in b?b.rotation:this.rotation;return new a(this.viewBox.slice(),c,d,this.offsetX,this.offsetY,b.dontFlip)},convertToViewportPoint:function(a,b){return Util.applyTransform([a,b],this.transform)},convertToViewportRectangle:function(a){var b=Util.applyTransform([a[0],a[1]],this.transform),c=Util.applyTransform([a[2],a[3]],this.transform);return[b[0],b[1],c[0],c[1]]},convertToPdfPoint:function(a,b){return Util.applyInverseTransform([a,b],this.transform)}},a}(),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,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];PDFJS.createPromiseCapability=createPromiseCapability,function(){function a(a){this._status=b,this._handlers=[];try{a.call(this,this._resolve.bind(this),this._reject.bind(this))}catch(c){this._reject(c)}}if(globalScope.Promise)return"function"!=typeof globalScope.Promise.all&&(globalScope.Promise.all=function(a){var b,c,d=0,e=[],f=new globalScope.Promise(function(a,d){b=a,c=d});return a.forEach(function(a,f){d++,a.then(function(a){e[f]=a,d--,0===d&&b(e)},c)}),0===d&&b(e),f}),"function"!=typeof globalScope.Promise.resolve&&(globalScope.Promise.resolve=function(a){return new globalScope.Promise(function(b){b(a)})}),"function"!=typeof globalScope.Promise.reject&&(globalScope.Promise.reject=function(a){return new globalScope.Promise(function(b,c){c(a)})}),void("function"!=typeof globalScope.Promise.prototype["catch"]&&(globalScope.Promise.prototype["catch"]=function(a){return globalScope.Promise.prototype.then(void 0,a)}));var b=0,c=1,d=2,e=500,f={handlers:[],running:!1,unhandledRejections:[],pendingRejectionCheck:!1,scheduleHandlers:function(a){a._status!==b&&(this.handlers=this.handlers.concat(a._handlers),a._handlers=[],this.running||(this.running=!0,setTimeout(this.runHandlers.bind(this),0)))},runHandlers:function(){for(var a=1,b=Date.now()+a;this.handlers.length>0;){var e=this.handlers.shift(),f=e.thisPromise._status,g=e.thisPromise._value;try{f===c?"function"==typeof e.onResolve&&(g=e.onResolve(g)):"function"==typeof e.onReject&&(g=e.onReject(g),f=c,e.thisPromise._unhandledRejection&&this.removeUnhandeledRejection(e.thisPromise))}catch(h){f=d,g=h}if(e.nextPromise._updateStatus(f,g),Date.now()>=b)break}return this.handlers.length>0?void setTimeout(this.runHandlers.bind(this),0):void(this.running=!1)},addUnhandledRejection:function(a){this.unhandledRejections.push({promise:a,time:Date.now()}),this.scheduleRejectionCheck()},removeUnhandeledRejection:function(a){a._unhandledRejection=!1;for(var b=0;be){var c=this.unhandledRejections[b].promise._value,d="Unhandled rejection: "+c;c.stack&&(d+="\n"+c.stack),warn(d),this.unhandledRejections.splice(b),b--}this.unhandledRejections.length&&this.scheduleRejectionCheck()}.bind(this),e))}};a.all=function(b){function c(a){g._status!==d&&(i=[],f(a))}var e,f,g=new a(function(a,b){e=a,f=b}),h=b.length,i=[];if(0===h)return e(i),g;for(var j=0,k=b.length;k>j;++j){var l=b[j],m=function(a){return function(b){g._status!==d&&(i[a]=b,h--,0===h&&e(i))}}(j);a.isPromise(l)?l.then(m,c):m(l)}return g},a.isPromise=function(a){return a&&"function"==typeof a.then},a.resolve=function(b){return new a(function(a){a(b)})},a.reject=function(b){return new a(function(a,c){c(b)})},a.prototype={_status:null,_value:null,_handlers:null,_unhandledRejection:null,_updateStatus:function(b,e){if(this._status!==c&&this._status!==d){if(b===c&&a.isPromise(e))return void e.then(this._updateStatus.bind(this,c),this._updateStatus.bind(this,d));this._status=b,this._value=e,b===d&&0===this._handlers.length&&(this._unhandledRejection=!0,f.addUnhandledRejection(this)),f.scheduleHandlers(this)}},_resolve:function(a){this._updateStatus(c,a)},_reject:function(a){this._updateStatus(d,a)},then:function(b,c){var d=new a(function(a,b){this.resolve=a,this.reject=b});return this._handlers.push({thisPromise:this,onResolve:b,onReject:c,nextPromise:d}),f.scheduleHandlers(this),d},"catch":function(a){return this.then(void 0,a)}},globalScope.Promise=a}();var StatTimer=function(){function a(a,b,c){for(;a.lengthb;++b){var g=d[b].name;g.length>f&&(f=g.length)}for(b=0,c=d.length;c>b;++b){var h=d[b],i=h.end-h.start;e+=a(h.name," ",f)+" "+i+"ms\n"}return e}},b}();PDFJS.createBlob=function(a,b){if("undefined"!=typeof Blob)return new Blob([a],{type:b});var c=new MozBlobBuilder;return c.append(a),c.getBlob(b)},PDFJS.createObjectURL=function(){var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return function(b,c){if(!PDFJS.disableCreateObjectURL&&"undefined"!=typeof URL&&URL.createObjectURL){var d=PDFJS.createBlob(b,c);return URL.createObjectURL(d)}for(var e="data:"+c+";base64,",f=0,g=b.length;g>f;f+=3){var h=255&b[f],i=255&b[f+1],j=255&b[f+2],k=h>>2,l=(3&h)<<4|i>>4,m=g>f+1?(15&i)<<2|j>>6:64,n=g>f+2?63&j:64;e+=a[k]+a[l]+a[m]+a[n]}return e}}(),MessageHandler.prototype={on:function(a,b,c){var d=this.actionHandler;d[a]&&error('There is already an actionName called "'+a+'"'),d[a]=[b,c]},send:function(a,b,c){var d={action:a,data:b};this.postMessage(d,c); +},sendWithPromise:function(a,b,c){var d=this.callbackIndex++,e={action:a,data:b,callbackId:d},f=createPromiseCapability();this.callbacksCapabilities[d]=f;try{this.postMessage(e,c)}catch(g){f.reject(g)}return f.promise},postMessage:function(a,b){b&&this.postMessageTransfers?this.comObj.postMessage(a,b):this.comObj.postMessage(a)}};var OpenJPEG=function(Module){function globalEval(a){eval.call(null,a)}function assert(a,b){a||abort("Assertion failed: "+b)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(e){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}function setValue(a,b,c,d){switch(c=c||"i8","*"===c.charAt(c.length-1)&&(c="i32"),c){case"i1":HEAP8[a>>0]=b;break;case"i8":HEAP8[a>>0]=b;break;case"i16":HEAP16[a>>1]=b;break;case"i32":HEAP32[a>>2]=b;break;case"i64":tempI64=[b>>>0,(tempDouble=b,+Math_abs(tempDouble)>=1?tempDouble>0?(0|Math_min(+Math_floor(tempDouble/4294967296),4294967295))>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[a>>2]=tempI64[0],HEAP32[a+4>>2]=tempI64[1];break;case"float":HEAPF32[a>>2]=b;break;case"double":HEAPF64[a>>3]=b;break;default:abort("invalid type for setValue: "+c)}}function getValue(a,b,c){switch(b=b||"i8","*"===b.charAt(b.length-1)&&(b="i32"),b){case"i1":return HEAP8[a>>0];case"i8":return HEAP8[a>>0];case"i16":return HEAP16[a>>1];case"i32":return HEAP32[a>>2];case"i64":return HEAP32[a>>2];case"float":return HEAPF32[a>>2];case"double":return HEAPF64[a>>3];default:abort("invalid type for setValue: "+b)}return null}function allocate(a,b,c,d){var e,f;"number"==typeof a?(e=!0,f=a):(e=!1,f=a.length);var g,h="string"==typeof b?b:null;if(g=c==ALLOC_NONE?d:[_malloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][void 0===c?ALLOC_STATIC:c](Math.max(f,h?1:b.length)),e){var i,d=g;for(assert(0==(3&g)),i=g+(-4&f);i>d;d+=4)HEAP32[d>>2]=0;for(i=g+f;i>d;)HEAP8[d++>>0]=0;return g}if("i8"===h)return a.subarray||a.slice?HEAPU8.set(a,g):HEAPU8.set(new Uint8Array(a),g),g;for(var j,k,l,m=0;f>m;){var n=a[m];"function"==typeof n&&(n=Runtime.getFunctionIndex(n)),j=h||b[m],0!==j?("i64"==j&&(j="i32"),setValue(g+m,n,j),l!==j&&(k=Runtime.getNativeTypeSize(j),l=j),m+=k):m++}return g}function getMemory(a){return staticSealed?"undefined"!=typeof _sbrk&&!_sbrk.called||!runtimeInitialized?Runtime.dynamicAlloc(a):_malloc(a):Runtime.staticAlloc(a)}function Pointer_stringify(a,b){if(0===b||!a)return"";for(var c,d=0,e=0;;){if(c=HEAPU8[a+e>>0],d|=c,0==c&&!b)break;if(e++,b&&e==b)break}b||(b=e);var f="";if(128>d){for(var g,h=1024;b>0;)g=String.fromCharCode.apply(String,HEAPU8.subarray(a,a+Math.min(b,h))),f=f?f+g:g,a+=h,b-=h;return f}return Module.UTF8ToString(a)}function AsciiToString(a){for(var b="";;){var c=HEAP8[a++>>0];if(!c)return b;b+=String.fromCharCode(c)}}function stringToAscii(a,b){return writeAsciiToMemory(a,b,!1)}function UTF8ArrayToString(a,b){for(var c,d,e,f,g,h,i="";;){if(c=a[b++],!c)return i;if(128&c)if(d=63&a[b++],192!=(224&c))if(e=63&a[b++],224==(240&c)?c=(15&c)<<12|d<<6|e:(f=63&a[b++],240==(248&c)?c=(7&c)<<18|d<<12|e<<6|f:(g=63&a[b++],248==(252&c)?c=(3&c)<<24|d<<18|e<<12|f<<6|g:(h=63&a[b++],c=(1&c)<<30|d<<24|e<<18|f<<12|g<<6|h))),65536>c)i+=String.fromCharCode(c);else{var j=c-65536;i+=String.fromCharCode(55296|j>>10,56320|1023&j)}else i+=String.fromCharCode((31&c)<<6|d);else i+=String.fromCharCode(c)}}function UTF8ToString(a){return UTF8ArrayToString(HEAPU8,a)}function stringToUTF8Array(a,b,c,d){if(!(d>0))return 0;for(var e=c,f=c+d-1,g=0;g=55296&&57343>=h&&(h=65536+((1023&h)<<10)|1023&a.charCodeAt(++g)),127>=h){if(c>=f)break;b[c++]=h}else if(2047>=h){if(c+1>=f)break;b[c++]=192|h>>6,b[c++]=128|63&h}else if(65535>=h){if(c+2>=f)break;b[c++]=224|h>>12,b[c++]=128|h>>6&63,b[c++]=128|63&h}else if(2097151>=h){if(c+3>=f)break;b[c++]=240|h>>18,b[c++]=128|h>>12&63,b[c++]=128|h>>6&63,b[c++]=128|63&h}else if(67108863>=h){if(c+4>=f)break;b[c++]=248|h>>24,b[c++]=128|h>>18&63,b[c++]=128|h>>12&63,b[c++]=128|h>>6&63,b[c++]=128|63&h}else{if(c+5>=f)break;b[c++]=252|h>>30,b[c++]=128|h>>24&63,b[c++]=128|h>>18&63,b[c++]=128|h>>12&63,b[c++]=128|h>>6&63,b[c++]=128|63&h}}return b[c]=0,c-e}function stringToUTF8(a,b,c){return stringToUTF8Array(a,HEAPU8,b,c)}function lengthBytesUTF8(a){for(var b=0,c=0;c=55296&&57343>=d&&(d=65536+((1023&d)<<10)|1023&a.charCodeAt(++c)),127>=d?++b:b+=2047>=d?2:65535>=d?3:2097151>=d?4:67108863>=d?5:6}return b}function UTF16ToString(a){for(var b=0,c="";;){var d=HEAP16[a+2*b>>1];if(0==d)return c;++b,c+=String.fromCharCode(d)}}function stringToUTF16(a,b,c){if(void 0===c&&(c=2147483647),2>c)return 0;c-=2;for(var d=b,e=c<2*a.length?c/2:a.length,f=0;e>f;++f){var g=a.charCodeAt(f);HEAP16[b>>1]=g,b+=2}return HEAP16[b>>1]=0,b-d}function lengthBytesUTF16(a){return 2*a.length}function UTF32ToString(a){for(var b=0,c="";;){var d=HEAP32[a+4*b>>2];if(0==d)return c;if(++b,d>=65536){var e=d-65536;c+=String.fromCharCode(55296|e>>10,56320|1023&e)}else c+=String.fromCharCode(d)}}function stringToUTF32(a,b,c){if(void 0===c&&(c=2147483647),4>c)return 0;for(var d=b,e=d+c-4,f=0;f=55296&&57343>=g){var h=a.charCodeAt(++f);g=65536+((1023&g)<<10)|1023&h}if(HEAP32[b>>2]=g,b+=4,b+4>e)break}return HEAP32[b>>2]=0,b-d}function lengthBytesUTF32(a){for(var b=0,c=0;c=55296&&57343>=d&&++c,b+=4}return b}function demangle(a){function b(){i++,"K"===a[i]&&i++;for(var b=[];"E"!==a[i];)if("S"!==a[i])if("C"!==a[i]){var c=parseInt(a.substr(i)),d=c.toString().length;if(!c||!d){i--;break}var e=a.substr(i+d,c);b.push(e),k.push(e),i+=d+c}else b.push(b[b.length-1]),i+=2;else{i++;var f=a.indexOf("_",i),g=a.substring(i,f)||0;b.push(k[g]||"?"),i=f+1}return i++,b}function c(d,e,f){function g(){return"("+m.join(", ")+")"}e=e||1/0;var h,k="",m=[];if("N"===a[i]){if(h=b().join("::"),e--,0===e)return d?[h]:h}else{("K"===a[i]||l&&"L"===a[i])&&i++;var n=parseInt(a.substr(i));if(n){var o=n.toString().length;h=a.substr(i+o,n),i+=o+n}}if(l=!1,"I"===a[i]){i++;var p=c(!0),q=c(!0,1,!0);k+=q[0]+" "+h+"<"+p.join(", ")+">"}else k=h;a:for(;i0;){var r=a[i++];if(r in j)m.push(j[r]);else switch(r){case"P":m.push(c(!0,1,!0)[0]+"*");break;case"R":m.push(c(!0,1,!0)[0]+"&");break;case"L":i++;var s=a.indexOf("E",i),n=s-i;m.push(a.substr(i,n)),i+=n+2;break;case"A":var n=parseInt(a.substr(i));if(i+=n.toString().length,"_"!==a[i])throw"?";i++,m.push(c(!0,1,!0)[0]+" ["+n+"]");break;case"E":break a;default:k+="?"+r;break a}}return f||1!==m.length||"void"!==m[0]||(m=[]),d?(k&&m.push(k+"?"),m):k+g()}var d=!!Module.___cxa_demangle;if(d)try{var e=_malloc(a.length);writeStringToMemory(a.substr(1),e);var f=_malloc(4),g=Module.___cxa_demangle(e,0,0,f);if(0===getValue(f,"i32")&&g)return Pointer_stringify(g)}catch(h){}finally{e&&_free(e),f&&_free(f),g&&_free(g)}var i=3,j={v:"void",b:"bool",c:"char",s:"short",i:"int",l:"long",f:"float",d:"double",w:"wchar_t",a:"signed char",h:"unsigned char",t:"unsigned short",j:"unsigned int",m:"unsigned long",x:"long long",y:"unsigned long long",z:"..."},k=[],l=!0,m=a;try{if("Object._main"==a||"_main"==a)return"main()";if("number"==typeof a&&(a=Pointer_stringify(a)),"_"!==a[0])return a;if("_"!==a[1])return a;if("Z"!==a[2])return a;switch(a[3]){case"n":return"operator new()";case"d":return"operator delete()"}m=c()}catch(h){m+="?"}return m.indexOf("?")>=0&&!d&&Runtime.warnOnce("warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),m}function demangleAll(a){return a.replace(/__Z[\w\d_]+/g,function(a){var b=demangle(a);return a===b?a:a+" ["+b+"]"})}function jsStackTrace(){var a=new Error;if(!a.stack){try{throw new Error(0)}catch(b){a=b}if(!a.stack)return"(no stack trace available)"}return a.stack.toString()}function stackTrace(){return demangleAll(jsStackTrace())}function alignMemoryPage(a){return a%4096>0&&(a+=4096-a%4096),a}function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}function callRuntimeCallbacks(a){for(;a.length>0;){var b=a.shift();if("function"!=typeof b){var c=b.func;"number"==typeof c?void 0===b.arg?Runtime.dynCall("v",c):Runtime.dynCall("vi",c,[b.arg]):c(void 0===b.arg?null:b.arg)}else b()}}function preRun(){if(Module.preRun)for("function"==typeof Module.preRun&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for("function"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(a){__ATPRERUN__.unshift(a)}function addOnInit(a){__ATINIT__.unshift(a)}function addOnPreMain(a){__ATMAIN__.unshift(a)}function addOnExit(a){__ATEXIT__.unshift(a)}function addOnPostRun(a){__ATPOSTRUN__.unshift(a)}function intArrayFromString(a,b,c){var d=c>0?c:lengthBytesUTF8(a)+1,e=new Array(d),f=stringToUTF8Array(a,e,0,e.length);return b&&(e.length=f),e}function intArrayToString(a){for(var b=[],c=0;c255&&(d&=255),b.push(String.fromCharCode(d))}return b.join("")}function writeStringToMemory(a,b,c){for(var d=intArrayFromString(a,c),e=0;e>0]=f,e+=1}}function writeArrayToMemory(a,b){for(var c=0;c>0]=a[c]}function writeAsciiToMemory(a,b,c){for(var d=0;d>0]=a.charCodeAt(d);c||(HEAP8[b>>0]=0)}function unSign(a,b,c){return a>=0?a:32>=b?2*Math.abs(1<=a)return a;var d=32>=b?Math.abs(1<=d&&(32>=b||a>d)&&(a=-2*d+a),a}function getUniqueRunDependency(a){return a}function addRunDependency(a){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}function removeRunDependency(a){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),0==runDependencies&&(null!==runDependencyWatcher&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var b=dependenciesFulfilled;dependenciesFulfilled=null,b()}}function copyTempFloat(a){HEAP8[tempDoublePtr]=HEAP8[a],HEAP8[tempDoublePtr+1]=HEAP8[a+1],HEAP8[tempDoublePtr+2]=HEAP8[a+2],HEAP8[tempDoublePtr+3]=HEAP8[a+3]}function copyTempDouble(a){HEAP8[tempDoublePtr]=HEAP8[a],HEAP8[tempDoublePtr+1]=HEAP8[a+1],HEAP8[tempDoublePtr+2]=HEAP8[a+2],HEAP8[tempDoublePtr+3]=HEAP8[a+3],HEAP8[tempDoublePtr+4]=HEAP8[a+4],HEAP8[tempDoublePtr+5]=HEAP8[a+5],HEAP8[tempDoublePtr+6]=HEAP8[a+6],HEAP8[tempDoublePtr+7]=HEAP8[a+7]}function _abort(){Module.abort()}function ___lock(){}function ___unlock(){}function _emscripten_set_main_loop_timing(a,b){function c(a){a.source===window&&a.data===e&&(a.stopPropagation(),d.shift()())}if(Browser.mainLoop.timingMode=a,Browser.mainLoop.timingValue=b,!Browser.mainLoop.func)return 1;if(0==a)Browser.mainLoop.scheduler=function(){setTimeout(Browser.mainLoop.runner,b)},Browser.mainLoop.method="timeout";else if(1==a)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(2==a){if(!window.setImmediate){var d=[],e="__emcc";window.addEventListener("message",c,!0),window.setImmediate=function(a){d.push(a),window.postMessage(e,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_set_main_loop(a,b,c,d,e){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=a,Browser.mainLoop.arg=d;var f=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var b=Date.now(),c=Browser.mainLoop.queue.shift();if(c.func(c.arg),Browser.mainLoop.remainingBlockers){var e=Browser.mainLoop.remainingBlockers,g=e%1==0?e-1:Math.floor(e);c.counted?Browser.mainLoop.remainingBlockers=g:(g+=.5,Browser.mainLoop.remainingBlockers=(8*e+g)/9)}return console.log('main loop blocker "'+c.name+'" took '+(Date.now()-b)+" ms"),Browser.mainLoop.updateStatus(),void setTimeout(Browser.mainLoop.runner,0)}if(!(f1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0)return void Browser.mainLoop.scheduler();"timeout"===Browser.mainLoop.method&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(function(){"undefined"!=typeof d?Runtime.dynCall("vi",a,[d]):Runtime.dynCall("v",a)}),f0?_emscripten_set_main_loop_timing(0,1e3/b):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),c)throw"SimulateInfiniteLoop"}function ___syscall54(a,b){SYSCALLS.varargs=b;try{return 0}catch(c){return"undefined"!=typeof FS&&c instanceof FS.ErrnoError||abort(c),-c.errno}}function ___setErrNo(a){return Module.___errno_location&&(HEAP32[Module.___errno_location()>>2]=a),a}function _sysconf(a){switch(a){case 30:return PAGE_SIZE;case 85:return totalMemory/PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"==typeof navigator?navigator.hardwareConcurrency||1:1}return ___setErrNo(ERRNO_CODES.EINVAL),-1}function _pthread_cleanup_push(a,b){__ATEXIT__.push(function(){Runtime.dynCall("vi",a,[b])}),_pthread_cleanup_push.level=__ATEXIT__.length}function _pthread_cleanup_pop(){assert(_pthread_cleanup_push.level==__ATEXIT__.length,"cannot pop if something else added meanwhile!"),__ATEXIT__.pop(),_pthread_cleanup_push.level=__ATEXIT__.length}function ___syscall5(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStr(),d=SYSCALLS.get(),e=SYSCALLS.get(),f=FS.open(c,d,e);return f.fd}catch(g){return"undefined"!=typeof FS&&g instanceof FS.ErrnoError||abort(g),-g.errno}}function _emscripten_memcpy_big(a,b,c){return HEAPU8.set(HEAPU8.subarray(b,b+c),a),a}function ___syscall6(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStreamFromFD();return FS.close(c),0}catch(d){return"undefined"!=typeof FS&&d instanceof FS.ErrnoError||abort(d),-d.errno}}function _sbrk(a){var b=_sbrk;b.called||(DYNAMICTOP=alignMemoryPage(DYNAMICTOP),b.called=!0,assert(Runtime.dynamicAlloc),b.alloc=Runtime.dynamicAlloc,Runtime.dynamicAlloc=function(){abort("cannot dynamically allocate, sbrk now has control")});var c=DYNAMICTOP;if(0!=a){var d=b.alloc(a);if(!d)return-1>>>0}return c}function _time(a){var b=Date.now()/1e3|0;return a&&(HEAP32[a>>2]=b),b}function _pthread_self(){return 0}function ___syscall140(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStreamFromFD(),d=SYSCALLS.get(),e=SYSCALLS.get(),f=SYSCALLS.get(),g=SYSCALLS.get(),h=e;return assert(0===d),FS.llseek(c,h,g),HEAP32[f>>2]=c.position,c.getdents&&0===h&&0===g&&(c.getdents=null),0}catch(i){return"undefined"!=typeof FS&&i instanceof FS.ErrnoError||abort(i),-i.errno}}function ___syscall146(a,b){SYSCALLS.varargs=b;try{var c=(SYSCALLS.get(),SYSCALLS.get()),d=SYSCALLS.get(),e=0;___syscall146.buffer||(___syscall146.buffer=[]);for(var f=___syscall146.buffer,g=0;d>g;g++){for(var h=HEAP32[c+8*g>>2],i=HEAP32[c+(8*g+4)>>2],j=0;i>j;j++){var k=HEAPU8[h+j];0===k||10===k?(Module.print(UTF8ArrayToString(f,0)),f.length=0):f.push(k)}e+=i}return e}catch(l){return"undefined"!=typeof FS&&l instanceof FS.ErrnoError||abort(l),-l.errno}}function ___syscall221(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStreamFromFD(),d=SYSCALLS.get();switch(d){case 0:var e=SYSCALLS.get();if(0>e)return-ERRNO_CODES.EINVAL;var f;return f=FS.open(c.path,c.flags,0,e),f.fd;case 1:case 2:return 0;case 3:return c.flags;case 4:var e=SYSCALLS.get();return c.flags|=e,0;case 12:case 12:var e=SYSCALLS.get(),g=0;return HEAP16[e+g>>1]=2,0;case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:return ___setErrNo(ERRNO_CODES.EINVAL),-1;default:return-ERRNO_CODES.EINVAL}}catch(h){return"undefined"!=typeof FS&&h instanceof FS.ErrnoError||abort(h),-h.errno}}function ___syscall145(a,b){SYSCALLS.varargs=b;try{var c=SYSCALLS.getStreamFromFD(),d=SYSCALLS.get(),e=SYSCALLS.get();return SYSCALLS.doReadv(c,d,e)}catch(f){return"undefined"!=typeof FS&&f instanceof FS.ErrnoError||abort(f),-f.errno}}function invoke_iiiiiiii(a,b,c,d,e,f,g,h){try{return Module.dynCall_iiiiiiii(a,b,c,d,e,f,g,h)}catch(i){if("number"!=typeof i&&"longjmp"!==i)throw i;asm.setThrew(1,0)}}function invoke_iiii(a,b,c,d){try{return Module.dynCall_iiii(a,b,c,d)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;asm.setThrew(1,0)}}function invoke_di(a,b){try{return Module.dynCall_di(a,b)}catch(c){if("number"!=typeof c&&"longjmp"!==c)throw c;asm.setThrew(1,0)}}function invoke_vi(a,b){try{Module.dynCall_vi(a,b)}catch(c){if("number"!=typeof c&&"longjmp"!==c)throw c;asm.setThrew(1,0)}}function invoke_vii(a,b,c){try{Module.dynCall_vii(a,b,c)}catch(d){if("number"!=typeof d&&"longjmp"!==d)throw d;asm.setThrew(1,0)}}function invoke_iiiiiii(a,b,c,d,e,f,g){try{return Module.dynCall_iiiiiii(a,b,c,d,e,f,g)}catch(h){if("number"!=typeof h&&"longjmp"!==h)throw h;asm.setThrew(1,0)}}function invoke_ii(a,b){try{return Module.dynCall_ii(a,b)}catch(c){if("number"!=typeof c&&"longjmp"!==c)throw c;asm.setThrew(1,0)}}function invoke_viii(a,b,c,d){try{Module.dynCall_viii(a,b,c,d)}catch(e){if("number"!=typeof e&&"longjmp"!==e)throw e;asm.setThrew(1,0)}}function invoke_iiiiiiiiiiii(a,b,c,d,e,f,g,h,i,j,k,l){try{return Module.dynCall_iiiiiiiiiiii(a,b,c,d,e,f,g,h,i,j,k,l)}catch(m){if("number"!=typeof m&&"longjmp"!==m)throw m;asm.setThrew(1,0)}}function invoke_iiiii(a,b,c,d,e){try{return Module.dynCall_iiiii(a,b,c,d,e)}catch(f){if("number"!=typeof f&&"longjmp"!==f)throw f;asm.setThrew(1,0)}}function invoke_iii(a,b,c){try{return Module.dynCall_iii(a,b,c)}catch(d){if("number"!=typeof d&&"longjmp"!==d)throw d;asm.setThrew(1,0)}}function invoke_iiiiii(a,b,c,d,e,f){try{return Module.dynCall_iiiiii(a,b,c,d,e,f)}catch(g){if("number"!=typeof g&&"longjmp"!==g)throw g;asm.setThrew(1,0)}}function invoke_viiii(a,b,c,d,e){try{Module.dynCall_viiii(a,b,c,d,e)}catch(f){if("number"!=typeof f&&"longjmp"!==f)throw f;asm.setThrew(1,0)}}function ExitStatus(a){this.name="ExitStatus",this.message="Program terminated with exit("+a+")",this.status=a}function run(a){function b(){Module.calledRun||(Module.calledRun=!0,ABORT||(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(a),postRun()))}a=a||Module.arguments,null===preloadStartTime&&(preloadStartTime=Date.now()),runDependencies>0||(preRun(),runDependencies>0||Module.calledRun||(Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),b()},1)):b()))}function exit(a,b){if(!b||!Module.noExitRuntime)throw Module.noExitRuntime||(ABORT=!0,EXITSTATUS=a,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(a)),ENVIRONMENT_IS_NODE?(process.stdout.once("drain",function(){process.exit(a)}),console.log(" "),setTimeout(function(){process.exit(a)},500)):ENVIRONMENT_IS_SHELL&&"function"==typeof quit&&quit(a),new ExitStatus(a)}function abort(a){void 0!==a?(Module.print(a),Module.printErr(a),a=JSON.stringify(a)):a="",ABORT=!0,EXITSTATUS=1;var b="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.",c="abort("+a+") at "+stackTrace()+b;throw abortDecorators&&abortDecorators.forEach(function(b){c=b(c,a)}),c}Module=Module||{};var Module;Module||(Module=("undefined"!=typeof OpenJPEG?OpenJPEG:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB="object"==typeof window,ENVIRONMENT_IS_WORKER="function"==typeof importScripts,ENVIRONMENT_IS_NODE="object"==typeof process&&"function"==typeof require&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=function(a){process.stdout.write(a+"\n")}),Module.printErr||(Module.printErr=function(a){process.stderr.write(a+"\n")});var nodeFS=require("fs"),nodePath=require("path");Module.read=function(a,b){a=nodePath.normalize(a);var c=nodeFS.readFileSync(a);return c||a==nodePath.resolve(a)||(a=path.join(__dirname,"..","src",a),c=nodeFS.readFileSync(a)),c&&!b&&(c=c.toString()),c},Module.readBinary=function(a){var b=Module.read(a,!0);return b.buffer||(b=new Uint8Array(b)),assert(b.buffer),b},Module.load=function(a){globalEval(read(a))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Module),process.on("uncaughtException",function(a){if(!(a instanceof ExitStatus))throw a}),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),"undefined"!=typeof printErr&&(Module.printErr=printErr),"undefined"!=typeof read?Module.read=read:Module.read=function(){throw"no read() available (jsc?)"},Module.readBinary=function(a){if("function"==typeof readbuffer)return new Uint8Array(readbuffer(a));var b=read(a,"binary");return assert("object"==typeof b),b},"undefined"!=typeof scriptArgs?Module.arguments=scriptArgs:"undefined"!=typeof arguments&&(Module.arguments=arguments);else{if(!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER)throw"Unknown runtime environment. Where are we?";if(Module.read=function(a){var b=new XMLHttpRequest;return b.open("GET",a,!1),b.send(null),b.responseText},"undefined"!=typeof arguments&&(Module.arguments=arguments),"undefined"!=typeof console)Module.print||(Module.print=function(a){console.log(a)}),Module.printErr||(Module.printErr=function(a){console.log(a)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&"undefined"!=typeof dump?function(a){dump(a)}:function(a){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),"undefined"==typeof Module.setWindowTitle&&(Module.setWindowTitle=function(a){document.title=a})}!Module.load&&Module.read&&(Module.load=function(a){globalEval(Module.read(a))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);var Runtime={setTempRet0:function(a){tempRet0=a},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(a){STACKTOP=a},getNativeTypeSize:function(a){switch(a){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:if("*"===a[a.length-1])return Runtime.QUANTUM_SIZE;if("i"===a[0]){var b=parseInt(a.substr(1));return assert(b%8===0),b/8}return 0}},getNativeFieldSize:function(a){return Math.max(Runtime.getNativeTypeSize(a),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(a,b){return"double"===b||"i64"===b?7&a&&(assert(4===(7&a)),a+=4):assert(0===(3&a)),a},getAlignSize:function(a,b,c){return c||"i64"!=a&&"double"!=a?a?Math.min(b||(a?Runtime.getNativeFieldSize(a):0),Runtime.QUANTUM_SIZE):Math.min(b,8):8},dynCall:function(a,b,c){return c&&c.length?(c.splice||(c=Array.prototype.slice.call(c)),c.splice(0,0,b),Module["dynCall_"+a].apply(null,c)):Module["dynCall_"+a].call(null,b)},functionPointers:[],addFunction:function(a){for(var b=0;b=TOTAL_MEMORY){var c=enlargeMemory();if(!c)return DYNAMICTOP=b,0}return b},alignMemory:function(a,b){var c=a=Math.ceil(a/(b?b:16))*(b?b:16);return c},makeBigInt:function(a,b,c){var d=c?+(a>>>0)+4294967296*+(b>>>0):+(a>>>0)+4294967296*+(0|b);return d},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var __THREW__=0,ABORT=!1,EXITSTATUS=0,undef=0,tempValue,tempInt,tempBigInt,tempInt2,tempBigInt2,tempPair,tempBigIntI,tempBigIntR,tempBigIntS,tempBigIntP,tempBigIntD,tempDouble,tempFloat,tempI64,tempI64b,tempRet0,tempRet1,tempRet2,tempRet3,tempRet4,tempRet5,tempRet6,tempRet7,tempRet8,tempRet9,globalScope=this,cwrap,ccall;!function(){function parseJSFunc(a){var b=a.toString().match(sourceRegex).slice(1);return{arguments:b[0],body:b[1],returnValue:b[2]}}var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(a){var b=Runtime.stackAlloc(a.length);return writeArrayToMemory(a,b),b},stringToC:function(a){var b=0;return null!==a&&void 0!==a&&0!==a&&(b=Runtime.stackAlloc((a.length<<2)+1),writeStringToMemory(a,b)),b}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(a,b,c,d,e){var f=getCFunc(a),g=[],h=0;if(d)for(var i=0;ii;i++){var arg=argNames[i],type=argTypes[i];if("number"!==type){var convertCode=JSsource[type+"ToC"];funcstr+="var "+convertCode.arguments+" = "+arg+";",funcstr+=convertCode.body+";",funcstr+=arg+"="+convertCode.returnValue+";"}}}var cfuncname=parseJSFunc(function(){return cfunc}).returnValue;if(funcstr+="var ret = "+cfuncname+"("+argNames.join(",")+");",!numericRet){var strgfy=parseJSFunc(function(){return Pointer_stringify}).returnValue;funcstr+="ret = "+strgfy+"(ret);"}return numericArgs||(funcstr+=JSsource.stackRestore.body.replace("()","(stack)")+";"),funcstr+="return ret})",eval(funcstr)}}(),Module.ccall=ccall,Module.cwrap=cwrap,Module.setValue=setValue,Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE,Module.allocate=allocate,Module.getMemory=getMemory,Module.Pointer_stringify=Pointer_stringify,Module.AsciiToString=AsciiToString,Module.stringToAscii=stringToAscii,Module.UTF8ArrayToString=UTF8ArrayToString,Module.UTF8ToString=UTF8ToString,Module.stringToUTF8Array=stringToUTF8Array,Module.stringToUTF8=stringToUTF8,Module.lengthBytesUTF8=lengthBytesUTF8,Module.UTF16ToString=UTF16ToString,Module.stringToUTF16=stringToUTF16,Module.lengthBytesUTF16=lengthBytesUTF16,Module.UTF32ToString=UTF32ToString,Module.stringToUTF32=stringToUTF32,Module.lengthBytesUTF32=lengthBytesUTF32,Module.stackTrace=stackTrace;for(var PAGE_SIZE=4096,HEAP,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64,STATIC_BASE=0,STATICTOP=0,staticSealed=!1,STACK_BASE=0,STACKTOP=0,STACK_MAX=0,DYNAMIC_BASE=0,DYNAMICTOP=0,TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||4e8,totalMemory=65536;TOTAL_MEMORY>totalMemory||2*TOTAL_STACK>totalMemory;)16777216>totalMemory?totalMemory*=2:totalMemory+=16777216;totalMemory!==TOTAL_MEMORY&&(TOTAL_MEMORY=totalMemory),assert("undefined"!=typeof Int32Array&&"undefined"!=typeof Float64Array&&!!new Int32Array(1).subarray&&!!new Int32Array(1).set,"JS engine does not provide full typed array support");var buffer;buffer=new ArrayBuffer(TOTAL_MEMORY),HEAP8=new Int8Array(buffer),HEAP16=new Int16Array(buffer),HEAP32=new Int32Array(buffer),HEAPU8=new Uint8Array(buffer),HEAPU16=new Uint16Array(buffer),HEAPU32=new Uint32Array(buffer),HEAPF32=new Float32Array(buffer),HEAPF64=new Float64Array(buffer), +HEAP32[0]=255,assert(255===HEAPU8[0]&&0===HEAPU8[3],"Typed arrays 2 must be run on a little-endian system"),Module.HEAP=HEAP,Module.buffer=buffer,Module.HEAP8=HEAP8,Module.HEAP16=HEAP16,Module.HEAP32=HEAP32,Module.HEAPU8=HEAPU8,Module.HEAPU16=HEAPU16,Module.HEAPU32=HEAPU32,Module.HEAPF32=HEAPF32,Module.HEAPF64=HEAPF64;var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;Module.addOnPreRun=addOnPreRun,Module.addOnInit=addOnInit,Module.addOnPreMain=addOnPreMain,Module.addOnExit=addOnExit,Module.addOnPostRun=addOnPostRun,Module.intArrayFromString=intArrayFromString,Module.intArrayToString=intArrayToString,Module.writeStringToMemory=writeStringToMemory,Module.writeArrayToMemory=writeArrayToMemory,Module.writeAsciiToMemory=writeAsciiToMemory,Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(a,b){var c=a>>>16,d=65535&a,e=b>>>16,f=65535&b;return d*f+(c*f+d*e<<16)|0}),Math.imul=Math.imul,Math.clz32||(Math.clz32=function(a){a>>>=0;for(var b=0;32>b;b++)if(a&1<<31-b)return b;return 32}),Math.clz32=Math.clz32;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_min=Math.min,Math_clz32=Math.clz32,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;Module.addRunDependency=addRunDependency,Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var memoryInitializer=null,ASM_CONSTS=[];STATIC_BASE=8,STATICTOP=STATIC_BASE+25664,__ATINIT__.push(),allocate([131,192,202,161,69,182,251,63,127,251,58,112,206,136,234,63,127,251,58,112,206,136,234,63,131,192,202,161,69,182,251,63,225,122,20,174,71,225,252,63,94,186,73,12,2,43,249,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,248,63,0,0,0,0,0,0,6,64,0,0,0,0,0,128,21,64,92,143,194,245,40,92,37,64,215,163,112,61,10,87,53,64,246,40,92,143,194,85,69,64,133,235,81,184,30,85,85,64,102,102,102,102,102,86,101,64,205,204,204,204,204,84,117,64,207,247,83,227,165,155,240,63,70,182,243,253,212,120,249,63,39,49,8,172,28,90,7,64,29,90,100,59,223,207,22,64,41,92,143,194,245,168,38,64,164,112,61,10,215,163,54,64,0,0,0,0,0,160,70,64,31,133,235,81,184,158,86,64,205,204,204,204,204,156,102,64,0,0,0,0,0,0,0,0,207,247,83,227,165,155,240,63,70,182,243,253,212,120,249,63,39,49,8,172,28,90,7,64,29,90,100,59,223,207,22,64,41,92,143,194,245,168,38,64,164,112,61,10,215,163,54,64,0,0,0,0,0,160,70,64,31,133,235,81,184,158,86,64,205,204,204,204,204,156,102,64,0,0,0,0,0,0,0,0,173,250,92,109,197,254,230,63,86,125,174,182,98,127,237,63,199,75,55,137,65,96,249,63,242,210,77,98,16,88,8,64,250,126,106,188,116,19,24,64,133,235,81,184,30,5,40,64,0,0,0,0,0,0,56,64,92,143,194,245,40,252,71,64,236,81,184,30,133,251,87,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,113,61,10,215,163,112,255,63,104,145,237,124,63,181,16,64,117,147,24,4,86,206,32,64,102,102,102,102,102,230,48,64,236,81,184,30,133,235,64,64,92,143,194,245,40,236,80,64,154,153,153,153,153,233,96,64,154,153,153,153,153,233,112,64,51,51,51,51,51,231,128,64,147,24,4,86,14,45,0,64,182,243,253,212,120,233,15,64,246,40,92,143,194,181,32,64,10,215,163,112,61,10,49,64,195,245,40,92,143,34,65,64,184,30,133,235,81,40,81,64,154,153,153,153,153,41,97,64,154,153,153,153,153,41,113,64,0,0,0,0,0,40,129,64,0,0,0,0,0,0,0,0,147,24,4,86,14,45,0,64,182,243,253,212,120,233,15,64,246,40,92,143,194,181,32,64,10,215,163,112,61,10,49,64,195,245,40,92,143,34,65,64,184,30,133,235,81,40,81,64,154,153,153,153,153,41,97,64,154,153,153,153,153,41,113,64,0,0,0,0,0,40,129,64,0,0,0,0,0,0,0,0,164,112,61,10,215,163,0,64,236,81,184,30,133,235,14,64,119,190,159,26,47,157,32,64,174,71,225,122,20,46,49,64,123,20,174,71,225,90,65,64,246,40,92,143,194,101,81,64,154,153,153,153,153,105,97,64,154,153,153,153,153,105,113,64,154,153,153,153,153,105,129,64,0,0,0,0,0,0,0,0,4,0,0,0,67,80,82,76,0,0,0,0,0,0,0,0,76,82,67,80,0,0,0,0,3,0,0,0,80,67,82,76,0,0,0,0,1,0,0,0,82,76,67,80,0,0,0,0,2,0,0,0,82,80,67,76,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,144,255,0,0,12,0,0,0,1,0,0,0,82,255,0,0,20,0,0,0,2,0,0,0,83,255,0,0,20,0,0,0,3,0,0,0,94,255,0,0,20,0,0,0,4,0,0,0,92,255,0,0,20,0,0,0,5,0,0,0,93,255,0,0,20,0,0,0,6,0,0,0,95,255,0,0,20,0,0,0,7,0,0,0,81,255,0,0,2,0,0,0,8,0,0,0,85,255,0,0,4,0,0,0,9,0,0,0,87,255,0,0,4,0,0,0,10,0,0,0,88,255,0,0,16,0,0,0,11,0,0,0,96,255,0,0,4,0,0,0,12,0,0,0,97,255,0,0,16,0,0,0,13,0,0,0,145,255,0,0,0,0,0,0,0,0,0,0,99,255,0,0,4,0,0,0,14,0,0,0,100,255,0,0,20,0,0,0,15,0,0,0,116,255,0,0,20,0,0,0,16,0,0,0,120,255,0,0,4,0,0,0,17,0,0,0,117,255,0,0,20,0,0,0,18,0,0,0,119,255,0,0,20,0,0,0,19,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,4,0,0,0,8,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,32,32,80,106,20,0,0,0,112,121,116,102,21,0,0,0,104,50,112,106,22,0,0,0,114,100,104,105,23,0,0,0,114,108,111,99,24,0,0,0,99,99,112,98,25,0,0,0,114,108,99,112,26,0,0,0,112,97,109,99,27,0,0,0,102,101,100,99,28,0,0,0,1,86,0,0,0,0,0,0,164,4,0,0,180,4,0,0,1,86,0,0,1,0,0,0,180,4,0,0,164,4,0,0,1,52,0,0,0,0,0,0,196,4,0,0,68,5,0,0,1,52,0,0,1,0,0,0,212,4,0,0,84,5,0,0,1,24,0,0,0,0,0,0,228,4,0,0,164,5,0,0,1,24,0,0,1,0,0,0,244,4,0,0,180,5,0,0,193,10,0,0,0,0,0,0,4,5,0,0,4,6,0,0,193,10,0,0,1,0,0,0,20,5,0,0,20,6,0,0,33,5,0,0,0,0,0,0,36,5,0,0,36,8,0,0,33,5,0,0,1,0,0,0,52,5,0,0,52,8,0,0,33,2,0,0,0,0,0,0,68,9,0,0,164,8,0,0,33,2,0,0,1,0,0,0,84,9,0,0,180,8,0,0,1,86,0,0,0,0,0,0,100,5,0,0,84,5,0,0,1,86,0,0,1,0,0,0,116,5,0,0,68,5,0,0,1,84,0,0,0,0,0,0,132,5,0,0,68,6,0,0,1,84,0,0,1,0,0,0,148,5,0,0,84,6,0,0,1,72,0,0,0,0,0,0,164,5,0,0,68,6,0,0,1,72,0,0,1,0,0,0,180,5,0,0,84,6,0,0,1,56,0,0,0,0,0,0,196,5,0,0,68,6,0,0,1,56,0,0,1,0,0,0,212,5,0,0,84,6,0,0,1,48,0,0,0,0,0,0,228,5,0,0,164,6,0,0,1,48,0,0,1,0,0,0,244,5,0,0,180,6,0,0,1,36,0,0,0,0,0,0,4,6,0,0,196,6,0,0,1,36,0,0,1,0,0,0,20,6,0,0,212,6,0,0,1,28,0,0,0,0,0,0,36,6,0,0,4,7,0,0,1,28,0,0,1,0,0,0,52,6,0,0,20,7,0,0,1,22,0,0,0,0,0,0,36,8,0,0,36,7,0,0,1,22,0,0,1,0,0,0,52,8,0,0,52,7,0,0,1,86,0,0,0,0,0,0,100,6,0,0,84,6,0,0,1,86,0,0,1,0,0,0,116,6,0,0,68,6,0,0,1,84,0,0,0,0,0,0,132,6,0,0,68,6,0,0,1,84,0,0,1,0,0,0,148,6,0,0,84,6,0,0,1,81,0,0,0,0,0,0,164,6,0,0,100,6,0,0,1,81,0,0,1,0,0,0,180,6,0,0,116,6,0,0,1,72,0,0,0,0,0,0,196,6,0,0,132,6,0,0,1,72,0,0,1,0,0,0,212,6,0,0,148,6,0,0,1,56,0,0,0,0,0,0,228,6,0,0,164,6,0,0,1,56,0,0,1,0,0,0,244,6,0,0,180,6,0,0,1,52,0,0,0,0,0,0,4,7,0,0,196,6,0,0,1,52,0,0,1,0,0,0,20,7,0,0,212,6,0,0,1,48,0,0,0,0,0,0,36,7,0,0,228,6,0,0,1,48,0,0,1,0,0,0,52,7,0,0,244,6,0,0,1,40,0,0,0,0,0,0,68,7,0,0,228,6,0,0,1,40,0,0,1,0,0,0,84,7,0,0,244,6,0,0,1,36,0,0,0,0,0,0,100,7,0,0,4,7,0,0,1,36,0,0,1,0,0,0,116,7,0,0,20,7,0,0,1,34,0,0,0,0,0,0,132,7,0,0,36,7,0,0,1,34,0,0,1,0,0,0,148,7,0,0,52,7,0,0,1,28,0,0,0,0,0,0,164,7,0,0,68,7,0,0,1,28,0,0,1,0,0,0,180,7,0,0,84,7,0,0,1,24,0,0,0,0,0,0,196,7,0,0,100,7,0,0,1,24,0,0,1,0,0,0,212,7,0,0,116,7,0,0,1,22,0,0,0,0,0,0,228,7,0,0,132,7,0,0,1,22,0,0,1,0,0,0,244,7,0,0,148,7,0,0,1,20,0,0,0,0,0,0,4,8,0,0,164,7,0,0,1,20,0,0,1,0,0,0,20,8,0,0,180,7,0,0,1,18,0,0,0,0,0,0,36,8,0,0,196,7,0,0,1,18,0,0,1,0,0,0,52,8,0,0,212,7,0,0,1,17,0,0,0,0,0,0,68,8,0,0,228,7,0,0,1,17,0,0,1,0,0,0,84,8,0,0,244,7,0,0,193,10,0,0,0,0,0,0,100,8,0,0,4,8,0,0,193,10,0,0,1,0,0,0,116,8,0,0,20,8,0,0,193,9,0,0,0,0,0,0,132,8,0,0,36,8,0,0,193,9,0,0,1,0,0,0,148,8,0,0,52,8,0,0,161,8,0,0,0,0,0,0,164,8,0,0,68,8,0,0,161,8,0,0,1,0,0,0,180,8,0,0,84,8,0,0,33,5,0,0,0,0,0,0,196,8,0,0,100,8,0,0,33,5,0,0,1,0,0,0,212,8,0,0,116,8,0,0,65,4,0,0,0,0,0,0,228,8,0,0,132,8,0,0,65,4,0,0,1,0,0,0,244,8,0,0,148,8,0,0,161,2,0,0,0,0,0,0,4,9,0,0,164,8,0,0,161,2,0,0,1,0,0,0,20,9,0,0,180,8,0,0,33,2,0,0,0,0,0,0,36,9,0,0,196,8,0,0,33,2,0,0,1,0,0,0,52,9,0,0,212,8,0,0,65,1,0,0,0,0,0,0,68,9,0,0,228,8,0,0,65,1,0,0,1,0,0,0,84,9,0,0,244,8,0,0,17,1,0,0,0,0,0,0,100,9,0,0,4,9,0,0,17,1,0,0,1,0,0,0,116,9,0,0,20,9,0,0,133,0,0,0,0,0,0,0,132,9,0,0,36,9,0,0,133,0,0,0,1,0,0,0,148,9,0,0,52,9,0,0,73,0,0,0,0,0,0,0,164,9,0,0,68,9,0,0,73,0,0,0,1,0,0,0,180,9,0,0,84,9,0,0,37,0,0,0,0,0,0,0,196,9,0,0,100,9,0,0,37,0,0,0,1,0,0,0,212,9,0,0,116,9,0,0,21,0,0,0,0,0,0,0,228,9,0,0,132,9,0,0,21,0,0,0,1,0,0,0,244,9,0,0,148,9,0,0,9,0,0,0,0,0,0,0,4,10,0,0,164,9,0,0,9,0,0,0,1,0,0,0,20,10,0,0,180,9,0,0,5,0,0,0,0,0,0,0,36,10,0,0,196,9,0,0,5,0,0,0,1,0,0,0,52,10,0,0,212,9,0,0,1,0,0,0,0,0,0,0,36,10,0,0,228,9,0,0,1,0,0,0,1,0,0,0,52,10,0,0,244,9,0,0,1,86,0,0,0,0,0,0,68,10,0,0,68,10,0,0,1,86,0,0,1,0,0,0,84,10,0,0,84,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,11,0,0,12,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,38,94,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,64,4,32,0,32,2,128,0,128,8,16,0,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,1,0,3,128,4,0,6,128,7,0,9,128,10,0,12,128,13,0,15,128,16,0,18,128,19,0,21,128,22,0,24,128,25,0,27,128,28,0,30,128,31,0,33,128,34,0,36,128,37,0,39,128,40,0,42,128,43,0,45,128,46,0,48,128,49,0,51,128,52,0,54,128,55,0,57,128,58,0,60,128,61,0,63,128,64,0,66,128,67,0,69,128,70,0,72,128,73,0,75,128,76,0,78,128,79,0,81,128,82,0,84,128,85,0,87,128,88,0,90,128,91,0,93,128,94,0,96,128,97,0,99,128,100,0,102,128,103,0,105,128,106,0,108,128,109,0,111,128,112,0,114,128,115,0,117,128,118,0,0,0,0,0,0,0,0,0,0,0,0,128,0,128,0,128,0,128,0,0,1,0,1,0,1,128,1,128,1,0,2,0,2,128,2,128,2,0,3,0,3,128,3,0,4,0,4,128,4,0,5,128,5,128,5,0,6,128,6,0,7,128,7,0,8,128,8,0,9,128,9,0,10,128,10,128,11,0,12,128,12,0,13,0,14,128,14,0,15,0,16,128,16,128,17,0,18,0,19,128,19,128,20,0,21,0,22,0,23,128,23,128,24,128,25,128,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,128,38,128,39,128,40,128,41,0,43,0,44,0,45,128,46,128,47,0,49,0,50,128,51,128,52,0,54,0,55,128,56,0,58,0,59,128,60,0,62,128,63,128,64,0,66,128,67,0,69,128,70,0,72,128,73,0,75,128,76,0,78,128,79,128,81,0,83,128,84,0,86,0,88,128,89,0,91,0,93,128,94,128,96,0,98,0,100,128,101,128,103,0,105,0,107,0,109,128,110,128,112,128,114,128,116,0,118,0,120,0,122,0,124,0,126,0,24,128,23,0,23,128,22,0,22,128,21,0,21,128,20,0,20,128,19,0,19,128,18,0,18,128,17,0,17,128,16,0,16,128,15,0,15,128,14,0,14,128,13,0,13,128,12,0,12,128,11,0,11,128,10,0,10,128,9,0,9,128,8,0,8,128,7,0,7,128,6,0,6,128,5,0,5,128,4,0,4,128,3,0,3,128,2,0,2,128,1,0,1,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,1,128,1,0,2,128,2,0,3,128,3,0,4,128,4,0,5,128,5,0,6,128,6,0,7,128,7,0,8,128,8,0,9,128,9,0,10,128,10,0,11,128,11,0,12,128,12,0,13,128,13,0,14,128,14,0,15,128,15,0,16,128,16,0,17,128,17,0,18,128,18,0,19,128,19,0,20,128,20,0,21,128,21,0,22,128,22,0,23,128,23,0,32,0,31,0,30,0,29,0,28,0,27,128,26,128,25,128,24,128,23,0,23,0,22,0,21,128,20,128,19,0,19,0,18,128,17,128,16,0,16,0,15,128,14,0,14,0,13,128,12,0,12,128,11,128,10,0,10,128,9,0,9,128,8,0,8,128,7,0,7,128,6,0,6,128,5,128,5,0,5,128,4,0,4,0,4,128,3,0,3,0,3,128,2,128,2,0,2,0,2,128,1,128,1,0,1,0,1,0,1,128,0,128,0,128,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,128,0,128,0,128,0,0,1,0,1,0,1,128,1,128,1,0,2,0,2,128,2,128,2,0,3,0,3,128,3,0,4,0,4,128,4,0,5,128,5,128,5,0,6,128,6,0,7,128,7,0,8,128,8,0,9,128,9,0,10,128,10,128,11,0,12,128,12,0,13,0,14,128,14,0,15,0,16,128,16,128,17,0,18,0,19,128,19,128,20,0,21,0,22,0,23,128,23,128,24,128,25,128,26,0,27,0,28,0,29,0,30,0,31,91,69,82,82,79,82,93,32,111,112,106,95,100,101,99,111,109,112,114,101,115,115,58,32,102,97,105,108,101,100,32,116,111,32,115,101,116,117,112,32,116,104,101,32,100,101,99,111,100,101,114,0,91,69,82,82,79,82,93,32,111,112,106,95,100,101,99,111,109,112,114,101,115,115,58,32,102,97,105,108,101,100,32,116,111,32,114,101,97,100,32,116,104,101,32,104,101,97,100,101,114,0,91,69,82,82,79,82,93,32,111,112,106,95,100,101,99,111,109,112,114,101,115,115,58,32,102,97,105,108,101,100,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,33,0,91,69,82,82,79,82,93,32,37,115,0,83,116,114,101,97,109,32,114,101,97,99,104,101,100,32,105,116,115,32,101,110,100,32,33,10,0,69,114,114,111,114,32,111,110,32,119,114,105,116,105,110,103,32,115,116,114,101,97,109,33,10,0,83,116,114,101,97,109,32,101,114,114,111,114,33,10,0,50,46,49,46,48,0,67,111,100,101,99,32,112,114,111,118,105,100,101,100,32,116,111,32,116,104,101,32,111,112,106,95,115,101,116,117,112,95,100,101,99,111,100,101,114,32,102,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,97,32,100,101,99,111,109,112,114,101,115,115,111,114,32,104,97,110,100,108,101,114,46,10,0,67,111,100,101,99,32,112,114,111,118,105,100,101,100,32,116,111,32,116,104,101,32,111,112,106,95,114,101,97,100,95,104,101,97,100,101,114,32,102,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,97,32,100,101,99,111,109,112,114,101,115,115,111,114,32,104,97,110,100,108,101,114,46,10,0,119,98,0,114,98,0,73,110,118,97,108,105,100,32,110,117,109,98,101,114,32,111,102,32,114,101,115,111,108,117,116,105,111,110,115,32,58,32,37,100,32,110,111,116,32,105,110,32,114,97,110,103,101,32,91,49,44,37,100,93,10,0,68,101,112,114,101,99,97,116,101,100,32,102,105,101,108,100,115,32,99,112,95,99,105,110,101,109,97,32,111,114,32,99,112,95,114,115,105,122,32,97,114,101,32,117,115,101,100,10,80,108,101,97,115,101,32,99,111,110,115,105,100,101,114,32,117,115,105,110,103,32,111,110,108,121,32,116,104,101,32,114,115,105,122,32,102,105,101,108,100,10,83,101,101,32,111,112,101,110,106,112,101,103,46,104,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,10,0,84,104,101,32,100,101,115,105,114,101,100,32,109,97,120,105,109,117,109,32,99,111,100,101,115,116,114,101,97,109,32,115,105,122,101,32,104,97,115,32,108,105,109,105,116,101,100,10,97,116,32,108,101,97,115,116,32,111,110,101,32,111,102,32,116,104,101,32,100,101,115,105,114,101,100,32,113,117,97,108,105,116,121,32,108,97,121,101,114,115,10,0,74,80,69,71,32,50,48,48,48,32,83,99,97,108,97,98,108,101,32,68,105,103,105,116,97,108,32,67,105,110,101,109,97,32,112,114,111,102,105,108,101,115,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,49,32,115,105,110,103,108,101,32,113,117,97,108,105,116,121,32,108,97,121,101,114,45,62,32,78,117,109,98,101,114,32,111,102,32,108,97,121,101,114,115,32,102,111,114,99,101,100,32,116,111,32,49,32,40,114,97,116,104,101,114,32,116,104,97,110,32,37,100,41,10,45,62,32,82,97,116,101,32,111,102,32,116,104,101,32,108,97,115,116,32,108,97,121,101,114,32,40,37,51,46,49,102,41,32,119,105,108,108,32,98,101,32,117,115,101,100,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,40,50,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,60,61,32,53,10,45,62,32,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,102,111,114,99,101,100,32,116,111,32,53,32,40,114,97,116,104,101,114,32,116,104,97,110,32,37,100,41,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,52,32,40,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,62,61,32,49,32,38,38,32,60,61,32,54,10,45,62,32,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,102,111,114,99,101,100,32,116,111,32,49,32,40,114,97,116,104,101,114,32,116,104,97,110,32,37,100,41,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,52,32,40,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,62,61,32,49,32,38,38,32,60,61,32,54,10,45,62,32,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,102,111,114,99,101,100,32,116,111,32,54,32,40,114,97,116,104,101,114,32,116,104,97,110,32,37,100,41,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,77,97,120,105,109,117,109,32,49,51,48,50,48,56,51,32,99,111,109,112,114,101,115,115,101,100,32,98,121,116,101,115,32,64,32,50,52,102,112,115,10,65,115,32,110,111,32,114,97,116,101,32,104,97,115,32,98,101,101,110,32,103,105,118,101,110,44,32,116,104,105,115,32,108,105,109,105,116,32,119,105,108,108,32,98,101,32,117,115,101,100,46,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,77,97,120,105,109,117,109,32,49,51,48,50,48,56,51,32,99,111,109,112,114,101,115,115,101,100,32,98,121,116,101,115,32,64,32,50,52,102,112,115,10,45,62,32,83,112,101,99,105,102,105,101,100,32,114,97,116,101,32,101,120,99,101,101,100,115,32,116,104,105,115,32,108,105,109,105,116,46,32,82,97,116,101,32,119,105,108,108,32,98,101,32,102,111,114,99,101,100,32,116,111,32,49,51,48,50,48,56,51,32,98,121,116,101,115,46,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,77,97,120,105,109,117,109,32,49,48,52,49,54,54,54,32,99,111,109,112,114,101,115,115,101,100,32,98,121,116,101,115,32,64,32,50,52,102,112,115,10,65,115,32,110,111,32,114,97,116,101,32,104,97,115,32,98,101,101,110,32,103,105,118,101,110,44,32,116,104,105,115,32,108,105,109,105,116,32,119,105,108,108,32,98,101,32,117,115,101,100,46,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,77,97,120,105,109,117,109,32,49,48,52,49,54,54,54,32,99,111,109,112,114,101,115,115,101,100,32,98,121,116,101,115,32,64,32,50,52,102,112,115,10,45,62,32,83,112,101,99,105,102,105,101,100,32,114,97,116,101,32,101,120,99,101,101,100,115,32,116,104,105,115,32,108,105,109,105,116,46,32,82,97,116,101,32,119,105,108,108,32,98,101,32,102,111,114,99,101,100,32,116,111,32,49,48,52,49,54,54,54,32,98,121,116,101,115,46,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,40,50,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,51,32,99,111,109,112,111,110,101,110,116,115,45,62,32,78,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,32,111,102,32,105,110,112,117,116,32,105,109,97,103,101,32,40,37,100,41,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,10,45,62,32,78,111,110,45,112,114,111,102,105,108,101,45,51,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,98,101,32,103,101,110,101,114,97,116,101,100,10,0,115,105,103,110,101,100,0,117,110,115,105,103,110,101,100,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,40,50,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,80,114,101,99,105,115,105,111,110,32,111,102,32,101,97,99,104,32,99,111,109,112,111,110,101,110,116,32,115,104,97,108,108,32,98,101,32,49,50,32,98,105,116,115,32,117,110,115,105,103,110,101,100,45,62,32,65,116,32,108,101,97,115,116,32,99,111,109,112,111,110,101,110,116,32,37,100,32,111,102,32,105,110,112,117,116,32,105,109,97,103,101,32,40,37,100,32,98,105,116,115,44,32,37,115,41,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,10,45,62,32,78,111,110,45,112,114,111,102,105,108,101,45,51,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,98,101,32,103,101,110,101,114,97,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,40,50,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,119,105,100,116,104,32,60,61,32,50,48,52,56,32,97,110,100,32,104,101,105,103,104,116,32,60,61,32,49,48,56,48,10,45,62,32,73,110,112,117,116,32,105,109,97,103,101,32,115,105,122,101,32,37,100,32,120,32,37,100,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,10,45,62,32,78,111,110,45,112,114,111,102,105,108,101,45,51,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,98,101,32,103,101,110,101,114,97,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,52,32,40,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,119,105,100,116,104,32,60,61,32,52,48,57,54,32,97,110,100,32,104,101,105,103,104,116,32,60,61,32,50,49,54,48,10,45,62,32,73,109,97,103,101,32,115,105,122,101,32,37,100,32,120,32,37,100,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,10,45,62,32,78,111,110,45,112,114,111,102,105,108,101,45,52,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,98,101,32,103,101,110,101,114,97,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,76,111,110,103,32,84,101,114,109,32,83,116,111,114,97,103,101,32,112,114,111,102,105,108,101,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,66,114,111,97,100,99,97,115,116,32,112,114,111,102,105,108,101,115,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,73,77,70,32,112,114,111,102,105,108,101,115,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,80,97,114,116,45,50,32,112,114,111,102,105,108,101,32,100,101,102,105,110,101,100,10,98,117,116,32,110,111,32,80,97,114,116,45,50,32,101,120,116,101,110,115,105,111,110,32,101,110,97,98,108,101,100,46,10,80,114,111,102,105,108,101,32,115,101,116,32,116,111,32,78,79,78,69,46,10,0,85,110,115,117,112,112,111,114,116,101,100,32,80,97,114,116,45,50,32,101,120,116,101,110,115,105,111,110,32,101,110,97,98,108,101,100,10,80,114,111,102,105,108,101,32,115,101,116,32,116,111,32,78,79,78,69,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,99,111,112,121,32,111,102,32,117,115,101,114,32,101,110,99,111,100,105,110,103,32,112,97,114,97,109,101,116,101,114,115,32,109,97,116,114,105,120,32,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,99,111,112,121,32,111,102,32,99,111,109,109,101,110,116,32,115,116,114,105,110,103,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,99,111,109,109,101,110,116,32,115,116,114,105,110,103,10,0,37,115,37,115,0,67,114,101,97,116,101,100,32,98,121,32,79,112,101,110,74,80,69,71,32,118,101,114,115,105,111,110,32,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,116,105,108,101,32,99,111,100,105,110,103,32,112,97,114,97,109,101,116,101,114,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,99,104,101,99,107,105,110,103,32,116,104,101,32,112,111,99,32,118,97,108,117,101,115,46,10,0,77,105,115,115,105,110,103,32,112,97,99,107,101,116,115,32,112,111,115,115,105,98,108,101,32,108,111,115,115,32,111,102,32,100,97,116,97,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,116,105,108,101,32,99,111,109,112,111,110,101,110,116,32,99,111,100,105,110,103,32,112,97,114,97,109,101,116,101,114,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,116,101,109,112,32,98,117,102,102,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,101,110,99,111,100,101,114,32,77,67,84,32,99,111,100,105,110,103,32,109,97,116,114,105,120,32,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,101,110,99,111,100,101,114,32,77,67,84,32,100,101,99,111,100,105,110,103,32,109,97,116,114,105,120,32,10,0,70,97,105,108,101,100,32,116,111,32,105,110,118,101,114,115,101,32,101,110,99,111,100,101,114,32,77,67,84,32,100,101,99,111,100,105,110,103,32,109,97,116,114,105,120,32,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,101,110,99,111,100,101,114,32,77,67,84,32,110,111,114,109,115,32,10,0,70,97,105,108,101,100,32,116,111,32,115,101,116,117,112,32,106,50,107,32,109,99,116,32,101,110,99,111,100,105,110,103,10,0,67,97,110,110,111,116,32,112,101,114,102,111,114,109,32,77,67,84,32,111,110,32,99,111,109,112,111,110,101,110,116,115,32,119,105,116,104,32,100,105,102,102,101,114,101,110,116,32,115,105,122,101,115,46,32,68,105,115,97,98,108,105,110,103,32,77,67,84,46,10,0,83,116,114,101,97,109,32,116,111,111,32,115,104,111,114,116,10,0,73,110,99,111,110,115,105,115,116,101,110,116,32,109,97,114,107,101,114,32,115,105,122,101,10,0,77,97,114,107,101,114,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,32,119,105,116,104,32,105,116,115,32,112,111,115,105,116,105,111,110,10,0,77,97,114,107,101,114,32,115,105,122,101,32,105,110,99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,32,115,116,114,101,97,109,32,108,101,110,103,116,104,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,104,101,97,100,101,114,10,0,78,111,116,32,115,117,114,101,32,104,111,119,32,116,104,97,116,32,104,97,112,112,101,110,101,100,46,10,0,70,97,105,108,32,116,111,32,114,101,97,100,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,114,107,101,114,32,115,101,103,109,101,110,116,32,40,37,35,120,41,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,100,100,32,116,108,32,109,97,114,107,101,114,10,0,84,105,108,101,32,112,97,114,116,32,108,101,110,103,116,104,32,115,105,122,101,32,105,110,99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,32,115,116,114,101,97,109,32,108,101,110,103,116,104,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,83,79,84,32,109,97,114,107,101,114,10,0,111,112,106,95,106,50,107,95,97,112,112,108,121,95,110,98,95,116,105,108,101,95,112,97,114,116,115,95,99,111,114,114,101,99,116,105,111,110,32,101,114,114,111,114,10,0,78,111,110,32,99,111,110,102,111,114,109,97,110,116,32,99,111,100,101,115,116,114,101,97,109,32,84,80,115,111,116,61,61,84,78,115,111,116,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,80,80,84,32,109,97,114,107,101,114,10,0,70,97,105,108,101,100,32,116,111,32,109,101,114,103,101,32,80,80,84,32,100,97,116,97,10,0,67,97,110,110,111,116,32,100,101,99,111,100,101,32,116,105,108,101,44,32,109,101,109,111,114,121,32,101,114,114,111,114,10,0,72,101,97,100,101,114,32,111,102,32,116,105,108,101,32,37,100,32,47,32,37,100,32,104,97,115,32,98,101,101,110,32,114,101,97,100,46,10,0,70,97,105,108,101,100,32,116,111,32,100,101,99,111,100,101,46,10,0,78,111,32,69,79,67,32,109,97,114,107,101,114,46,32,80,111,115,115,105,98,108,121,32,97,32,116,114,117,110,99,97,116,101,100,32,115,116,114,101,97,109,10,0,83,116,114,101,97,109,32,100,111,101,115,32,110,111,116,32,101,110,100,32,119,105,116,104,32,69,79,67,10,0,83,116,114,101,97,109,32,116,111,111,32,115,104,111,114,116,44,32,101,120,112,101,99,116,101,100,32,83,79,84,10,0,78,101,101,100,32,116,111,32,100,101,99,111,100,101,32,116,104,101,32,109,97,105,110,32,104,101,97,100,101,114,32,98,101,102,111,114,101,32,98,101,103,105,110,32,116,111,32,100,101,99,111,100,101,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,99,111,100,101,115,116,114,101,97,109,0,78,111,32,100,101,99,111,100,101,100,32,97,114,101,97,32,112,97,114,97,109,101,116,101,114,115,44,32,115,101,116,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,116,111,32,116,104,101,32,119,104,111,108,101,32,105,109,97,103,101,10,0,76,101,102,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,120,48,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,88,115,105,122,61,37,100,41,46,10,0,76,101,102,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,120,48,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,88,79,115,105,122,61,37,100,41,46,10,0,85,112,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,121,48,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,89,115,105,122,61,37,100,41,46,10,0,85,112,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,121,48,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,89,79,115,105,122,61,37,100,41,46,10,0,82,105,103,104,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,120,49,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,88,79,115,105,122,61,37,100,41,46,10,0,82,105,103,104,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,120,49,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,88,115,105,122,61,37,100,41,46,10,0,66,111,116,116,111,109,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,121,49,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,89,79,115,105,122,61,37,100,41,46,10,0,66,111,116,116,111,109,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,121,49,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,89,115,105,122,61,37,100,41,46,10,0,83,105,122,101,32,120,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,99,111,109,112,111,110,101,110,116,32,105,109,97,103,101,32,105,115,32,105,110,99,111,114,114,101,99,116,32,40,99,111,109,112,91,37,100,93,46,119,61,37,100,41,46,10,0,83,105,122,101,32,121,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,99,111,109,112,111,110,101,110,116,32,105,109,97,103,101,32,105,115,32,105,110,99,111,114,114,101,99,116,32,40,99,111,109,112,91,37,100,93,46,104,61,37,100,41,46,10,0,83,101,116,116,105,110,103,32,100,101,99,111,100,105,110,103,32,97,114,101,97,32,116,111,32,37,100,44,37,100,44,37,100,44,37,100,10,0,87,114,111,110,103,32,102,108,97,103,10,0,67,111,100,101,115,116,114,101,97,109,32,105,110,102,111,32,102,114,111,109,32,109,97,105,110,32,104,101,97,100,101,114,58,32,123,10,0,9,32,116,120,48,61,37,100,44,32,116,121,48,61,37,100,10,0,9,32,116,100,120,61,37,100,44,32,116,100,121,61,37,100,10,0,9,32,116,119,61,37,100,44,32,116,104,61,37,100,10,0,125,10,0,67,111,100,101,115,116,114,101,97,109,32,105,110,100,101,120,32,102,114,111,109,32,109,97,105,110,32,104,101,97,100,101,114,58,32,123,10,0,9,32,77,97,105,110,32,104,101,97,100,101,114,32,115,116,97,114,116,32,112,111,115,105,116,105,111,110,61,37,108,108,105,10,9,32,77,97,105,110,32,104,101],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE), allocate([97,100,101,114,32,101,110,100,32,112,111,115,105,116,105,111,110,61,37,108,108,105,10,0,9,32,77,97,114,107,101,114,32,108,105,115,116,58,32,123,10,0,9,9,32,116,121,112,101,61,37,35,120,44,32,112,111,115,61,37,108,108,105,44,32,108,101,110,61,37,100,10,0,9,32,125,10,0,9,32,84,105,108,101,32,105,110,100,101,120,58,32,123,10,0,9,9,32,110,98,32,111,102,32,116,105,108,101,45,112,97,114,116,32,105,110,32,116,105,108,101,32,91,37,100,93,61,37,100,10,0,9,9,9,32,116,105,108,101,45,112,97,114,116,91,37,100,93,58,32,115,116,97,114,95,112,111,115,61,37,108,108,105,44,32,101,110,100,95,104,101,97,100,101,114,61,37,108,108,105,44,32,101,110,100,95,112,111,115,61,37,108,108,105,46,10,0,91,68,69,86,93,32,68,117,109,112,32,97,110,32,105,109,97,103,101,95,104,101,97,100,101,114,32,115,116,114,117,99,116,32,123,10,0,73,109,97,103,101,32,105,110,102,111,32,123,10,0,37,115,32,120,48,61,37,100,44,32,121,48,61,37,100,10,0,37,115,32,120,49,61,37,100,44,32,121,49,61,37,100,10,0,37,115,32,110,117,109,99,111,109,112,115,61,37,100,10,0,37,115,9,32,99,111,109,112,111,110,101,110,116,32,37,100,32,123,10,0,37,115,125,10,0,91,68,69,86,93,32,68,117,109,112,32,97,110,32,105,109,97,103,101,95,99,111,109,112,95,104,101,97,100,101,114,32,115,116,114,117,99,116,32,123,10,0,37,115,32,100,120,61,37,100,44,32,100,121,61,37,100,10,0,37,115,32,112,114,101,99,61,37,100,10,0,37,115,32,115,103,110,100,61,37,100,10,0,87,101,32,110,101,101,100,32,97,110,32,105,109,97,103,101,32,112,114,101,118,105,111,117,115,108,121,32,99,114,101,97,116,101,100,46,10,0,84,105,108,101,32,105,110,100,101,120,32,112,114,111,118,105,100,101,100,32,98,121,32,116,104,101,32,117,115,101,114,32,105,115,32,105,110,99,111,114,114,101,99,116,32,37,100,32,40,109,97,120,32,61,32,37,100,41,32,10,0,82,101,115,111,108,117,116,105,111,110,32,102,97,99,116,111,114,32,105,115,32,103,114,101,97,116,101,114,32,116,104,97,110,32,116,104,101,32,109,97,120,105,109,117,109,32,114,101,115,111,108,117,116,105,111,110,32,105,110,32,116,104,101,32,99,111,109,112,111,110,101,110,116,46,10,0,84,104,101,32,103,105,118,101,110,32,116,105,108,101,32,105,110,100,101,120,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,46,0,116,105,108,101,32,110,117,109,98,101,114,32,37,100,32,47,32,37,100,10,0,69,114,114,111,114,32,97,108,108,111,99,97,116,105,110,103,32,116,105,108,101,32,99,111,109,112,111,110,101,110,116,32,100,97,116,97,46,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,101,110,99,111,100,101,32,97,108,108,32,116,105,108,101,115,10,0,83,105,122,101,32,109,105,115,109,97,116,99,104,32,98,101,116,119,101,101,110,32,116,105,108,101,32,100,97,116,97,32,97,110,100,32,115,101,110,116,32,100,97,116,97,46,0,70,97,105,108,101,100,32,116,111,32,97,108,108,111,99,97,116,101,32,105,109,97,103,101,32,104,101,97,100,101,114,46,0,69,114,114,111,114,32,119,104,105,108,101,32,111,112,106,95,106,50,107,95,112,114,101,95,119,114,105,116,101,95,116,105,108,101,32,119,105,116,104,32,116,105,108,101,32,105,110,100,101,120,32,61,32,37,100,10,0,69,114,114,111,114,32,119,104,105,108,101,32,111,112,106,95,106,50,107,95,112,111,115,116,95,119,114,105,116,101,95,116,105,108,101,32,119,105,116,104,32,116,105,108,101,32,105,110,100,101,120,32,61,32,37,100,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,99,114,101,97,116,101,32,84,105,108,101,32,67,111,100,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,67,66,68,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,77,67,84,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,77,67,67,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,77,67,79,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,116,104,101,32,67,79,77,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,80,79,67,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,84,76,77,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,81,67,67,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,119,114,105,116,105,110,103,32,83,81,99,100,32,83,81,99,99,32,101,108,101,109,101,110,116,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,67,79,67,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,119,114,105,116,105,110,103,32,83,80,67,111,100,32,83,80,67,111,99,32,101,108,101,109,101,110,116,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,81,67,68,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,119,114,105,116,105,110,103,32,81,67,68,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,67,79,68,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,119,114,105,116,105,110,103,32,67,79,68,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,116,104,101,32,83,73,90,32,109,97,114,107,101,114,10,0,78,117,109,98,101,114,32,111,102,32,114,101,115,111,108,117,116,105,111,110,115,32,105,115,32,116,111,111,32,104,105,103,104,32,105,110,32,99,111,109,112,97,114,105,115,111,110,32,116,111,32,116,104,101,32,115,105,122,101,32,111,102,32,116,105,108,101,115,10,0,67,97,110,110,111,116,32,101,110,99,111,100,101,32,116,105,108,101,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,100,101,99,111,100,101,32,111,110,101,32,116,105,108,101,10,0,80,114,111,98,108,101,109,32,119,105,116,104,32,115,101,101,107,32,102,117,110,99,116,105,111,110,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,32,37,100,47,37,100,10,0,84,105,108,101,32,37,100,47,37,100,32,104,97,115,32,98,101,101,110,32,100,101,99,111,100,101,100,46,10,0,73,109,97,103,101,32,100,97,116,97,32,104,97,115,32,98,101,101,110,32,117,112,100,97,116,101,100,32,119,105,116,104,32,116,105,108,101,32,37,100,46,10,10,0,84,105,108,101,32,114,101,97,100,44,32,100,101,99,111,100,101,100,32,97,110,100,32,117,112,100,97,116,101,100,32,105,115,32,110,111,116,32,116,104,101,32,100,101,115,105,114,101,100,32,111,110,101,32,40,37,100,32,118,115,32,37,100,41,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,115,10,0,70,97,105,108,101,100,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,32,37,100,47,37,100,10,0,9,32,100,101,102,97,117,108,116,32,116,105,108,101,32,123,10,0,9,9,32,99,115,116,121,61,37,35,120,10,0,9,9,32,112,114,103,61,37,35,120,10,0,9,9,32,110,117,109,108,97,121,101,114,115,61,37,100,10,0,9,9,32,109,99,116,61,37,120,10,0,9,9,32,99,111,109,112,32,37,100,32,123,10,0,9,9,9,32,99,115,116,121,61,37,35,120,10,0,9,9,9,32,110,117,109,114,101,115,111,108,117,116,105,111,110,115,61,37,100,10,0,9,9,9,32,99,98,108,107,119,61,50,94,37,100,10,0,9,9,9,32,99,98,108,107,104,61,50,94,37,100,10,0,9,9,9,32,99,98,108,107,115,116,121,61,37,35,120,10,0,9,9,9,32,113,109,102,98,105,100,61,37,100,10,0,9,9,9,32,112,114,101,99,99,105,110,116,115,105,122,101,32,40,119,44,104,41,61,0,40,37,100,44,37,100,41,32,0,9,9,9,32,113,110,116,115,116,121,61,37,100,10,0,9,9,9,32,110,117,109,103,98,105,116,115,61,37,100,10,0,9,9,9,32,115,116,101,112,115,105,122,101,115,32,40,109,44,101,41,61,0,9,9,9,32,114,111,105,115,104,105,102,116,61,37,100,10,0,9,9,32,125,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,77,67,79,32,109,97,114,107,101,114,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,109,117,108,116,105,112,108,101,32,116,114,97,110,115,102,111,114,109,97,116,105,111,110,32,115,116,97,103,101,115,46,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,77,67,67,32,109,97,114,107,101,114,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,109,117,108,116,105,112,108,101,32,100,97,116,97,32,115,112,97,110,110,105,110,103,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,77,67,67,32,109,97,114,107,101,114,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,109,117,108,116,105,112,108,101,32,99,111,108,108,101,99,116,105,111,110,115,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,99,111,108,108,101,99,116,105,111,110,115,32,111,116,104,101,114,32,116,104,97,110,32,97,114,114,97,121,32,100,101,99,111,114,114,101,108,97,116,105,111,110,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,99,111,108,108,101,99,116,105,111,110,115,32,119,105,116,104,32,105,110,100,105,120,32,115,104,117,102,102,108,101,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,99,111,108,108,101,99,116,105,111,110,115,32,119,105,116,104,111,117,116,32,115,97,109,101,32,110,117,109,98,101,114,32,111,102,32,105,110,100,105,120,101,115,10,0,67,114,114,111,114,32,114,101,97,100,105,110,103,32,67,66,68,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,77,67,84,32,109,97,114,107,101,114,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,109,99,116,32,100,97,116,97,32,119,105,116,104,105,110,32,109,117,108,116,105,112,108,101,32,77,67,84,32,114,101,99,111,114,100,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,77,67,84,32,109,97,114,107,101,114,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,109,117,108,116,105,112,108,101,32,77,67,84,32,109,97,114,107,101,114,115,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,67,82,71,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,80,84,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,80,84,32,109,97,114,107,101,114,58,32,112,97,99,107,101,116,32,104,101,97,100,101,114,32,104,97,118,101,32,98,101,101,110,32,112,114,101,118,105,111,117,115,108,121,32,102,111,117,110,100,32,105,110,32,116,104,101,32,109,97,105,110,32,104,101,97,100,101,114,32,40,80,80,77,32,109,97,114,107,101,114,41,46,10,0,90,112,112,116,32,37,117,32,97,108,114,101,97,100,121,32,114,101,97,100,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,80,77,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,80,80,77,32,109,97,114,107,101,114,10,0,90,112,112,109,32,37,117,32,97,108,114,101,97,100,121,32,114,101,97,100,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,76,84,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,76,77,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,84,76,77,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,32,115,105,122,101,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,58,32,110,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,32,105,115,32,105,108,108,101,103,97,108,32,45,62,32,37,100,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,58,32,110,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,32,105,115,32,110,111,116,32,99,111,109,112,97,116,105,98,108,101,32,119,105,116,104,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,110,117,109,98,101,114,32,111,102,32,112,97,114,97,109,101,116,101,114,115,32,40,32,37,100,32,118,115,32,37,100,41,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,58,32,110,101,103,97,116,105,118,101,32,111,114,32,122,101,114,111,32,105,109,97,103,101,32,115,105,122,101,32,40,37,100,32,120,32,37,100,41,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,58,32,105,110,118,97,108,105,100,32,116,105,108,101,32,115,105,122,101,32,40,116,100,120,58,32,37,100,44,32,116,100,121,58,32,37,100,41,10,0,80,114,101,118,101,110,116,32,98,117,102,102,101,114,32,111,118,101,114,102,108,111,119,32,40,120,49,58,32,37,100,44,32,121,49,58,32,37,100,41,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,58,32,105,108,108,101,103,97,108,32,116,105,108,101,32,111,102,102,115,101,116,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,83,73,90,32,109,97,114,107,101,114,10,0,73,110,118,97,108,105,100,32,118,97,108,117,101,115,32,102,111,114,32,99,111,109,112,32,61,32,37,100,32,58,32,100,120,61,37,117,32,100,121,61,37,117,10,32,40,115,104,111,117,108,100,32,98,101,32,98,101,116,119,101,101,110,32,49,32,97,110,100,32,50,53,53,32,97,99,99,111,114,100,105,110,103,32,116,104,101,32,74,80,69,71,50,48,48,48,32,110,111,114,109,41,0,73,110,118,97,108,105,100,32,110,117,109,98,101,114,32,111,102,32,116,105,108,101,115,32,58,32,37,117,32,120,32,37,117,32,40,109,97,120,105,109,117,109,32,102,105,120,101,100,32,98,121,32,106,112,101,103,50,48,48,48,32,110,111,114,109,32,105,115,32,54,53,53,51,53,32,116,105,108,101,115,41,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,79,67,32,109,97,114,107,101,114,10,0,84,111,111,32,109,97,110,121,32,80,79,67,115,32,37,100,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,81,67,67,32,109,97,114,107,101,114,10,0,73,110,118,97,108,105,100,32,99,111,109,112,111,110,101,110,116,32,110,117,109,98,101,114,58,32,37,100,44,32,114,101,103,97,114,100,105,110,103,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,32,37,100,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,83,81,99,100,32,111,114,32,83,81,99,99,32,101,108,101,109,101,110,116,10,0,87,104,105,108,101,32,114,101,97,100,105,110,103,32,67,67,80,95,81,78,84,83,84,89,32,101,108,101,109,101,110,116,32,105,110,115,105,100,101,32,81,67,68,32,111,114,32,81,67,67,32,109,97,114,107,101,114,32,115,101,103,109,101,110,116,44,32,110,117,109,98,101,114,32,111,102,32,115,117,98,98,97,110,100,115,32,40,37,100,41,32,105,115,32,103,114,101,97,116,101,114,32,116,111,32,79,80,74,95,74,50,75,95,77,65,88,66,65,78,68,83,32,40,37,100,41,46,32,83,111,32,119,101,32,108,105,109,105,116,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,101,108,101,109,101,110,116,115,32,115,116,111,114,101,100,32,116,111,32,79,80,74,95,74,50,75,95,77,65,88,66,65,78,68,83,32,40,37,100,41,32,97,110,100,32,115,107,105,112,32,116,104,101,32,114,101,115,116,46,32,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,81,67,68,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,82,71,78,32,109,97,114,107,101,114,10,0,98,97,100,32,99,111,109,112,111,110,101,110,116,32,110,117,109,98,101,114,32,105,110,32,82,71,78,32,40,37,100,32,119,104,101,110,32,116,104,101,114,101,32,97,114,101,32,111,110,108,121,32,37,100,41,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,67,79,67,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,67,79,67,32,109,97,114,107,101,114,32,40,98,97,100,32,110,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,41,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,83,80,67,111,100,32,83,80,67,111,99,32,101,108,101,109,101,110,116,10,0,73,110,118,97,108,105,100,32,118,97,108,117,101,32,102,111,114,32,110,117,109,114,101,115,111,108,117,116,105,111,110,115,32,58,32,37,100,44,32,109,97,120,32,118,97,108,117,101,32,105,115,32,115,101,116,32,105,110,32,111,112,101,110,106,112,101,103,46,104,32,97,116,32,37,100,10,0,69,114,114,111,114,32,100,101,99,111,100,105,110,103,32,99,111,109,112,111,110,101,110,116,32,37,100,46,10,84,104,101,32,110,117,109,98,101,114,32,111,102,32,114,101,115,111,108,117,116,105,111,110,115,32,116,111,32,114,101,109,111,118,101,32,105,115,32,104,105,103,104,101,114,32,116,104,97,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,114,101,115,111,108,117,116,105,111,110,115,32,111,102,32,116,104,105,115,32,99,111,109,112,111,110,101,110,116,10,77,111,100,105,102,121,32,116,104,101,32,99,112,95,114,101,100,117,99,101,32,112,97,114,97,109,101,116,101,114,46,10,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,83,80,67,111,100,32,83,80,67,111,99,32,101,108,101,109,101,110,116,44,32,73,110,118,97,108,105,100,32,99,98,108,107,119,47,99,98,108,107,104,32,99,111,109,98,105,110,97,116,105,111,110,10,0,73,110,118,97,108,105,100,32,112,114,101,99,105,110,99,116,32,115,105,122,101,10,0,67,79,68,32,109,97,114,107,101,114,32,97,108,114,101,97,100,121,32,114,101,97,100,46,32,78,111,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,67,79,68,32,109,97,114,107,101,114,32,112,101,114,32,116,105,108,101,46,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,67,79,68,32,109,97,114,107,101,114,10,0,85,110,107,110,111,119,110,32,83,99,111,100,32,118,97,108,117,101,32,105,110,32,67,79,68,32,109,97,114,107,101,114,10,0,85,110,107,110,111,119,110,32,112,114,111,103,114,101,115,115,105,111,110,32,111,114,100,101,114,32,105,110,32,67,79,68,32,109,97,114,107,101,114,10,0,73,110,118,97,108,105,100,32,110,117,109,98,101,114,32,111,102,32,108,97,121,101,114,115,32,105,110,32,67,79,68,32,109,97,114,107,101,114,32,58,32,37,100,32,110,111,116,32,105,110,32,114,97,110,103,101,32,91,49,45,54,53,53,51,53,93,10,0,73,110,118,97,108,105,100,32,116,105,108,101,32,110,117,109,98,101,114,32,37,100,10,0,69,109,112,116,121,32,83,79,84,32,109,97,114,107,101,114,32,100,101,116,101,99,116,101,100,58,32,80,115,111,116,61,37,100,46,10,0,80,115,111,116,32,118,97,108,117,101,32,105,115,32,110,111,116,32,99,111,114,114,101,99,116,32,114,101,103,97,114,100,115,32,116,111,32,116,104,101,32,74,80,69,71,50,48,48,48,32,110,111,114,109,58,32,37,100,46,10,0,80,115,111,116,32,118,97,108,117,101,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,116,105,108,101,45,112,97,114,116,32,105,115,32,101,113,117,97,108,32,116,111,32,122,101,114,111,44,32,119,101,32,97,115,115,117,109,105,110,103,32,105,116,32,105,115,32,116,104,101,32,108,97,115,116,32,116,105,108,101,45,112,97,114,116,32,111,102,32,116,104,101,32,99,111,100,101,115,116,114,101,97,109,46,10,0,73,110,32,83,79,84,32,109,97,114,107,101,114,44,32,84,80,83,111,116,32,40,37,100,41,32,105,115,32,110,111,116,32,118,97,108,105,100,32,114,101,103,97,114,100,115,32,116,111,32,116,104,101,32,99,117,114,114,101,110,116,32,110,117,109,98,101,114,32,111,102,32,116,105,108,101,45,112,97,114,116,32,40,37,100,41,44,32,103,105,118,105,110,103,32,117,112,10,0,73,110,32,83,79,84,32,109,97,114,107,101,114,44,32,84,80,83,111,116,32,40,37,100,41,32,105,115,32,110,111,116,32,118,97,108,105,100,32,114,101,103,97,114,100,115,32,116,111,32,116,104,101,32,99,117,114,114,101,110,116,32,110,117,109,98,101,114,32,111,102,32,116,105,108,101,45,112,97,114,116,32,40,104,101,97,100,101,114,41,32,40,37,100,41,44,32,103,105,118,105,110,103,32,117,112,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,83,79,84,32,109,97,114,107,101,114,46,32,84,105,108,101,32,105,110,100,101,120,32,97,108,108,111,99,97,116,105,111,110,32,102,97,105,108,101,100,10,0,83,116,97,114,116,32,116,111,32,114,101,97,100,32,106,50,107,32,109,97,105,110,32,104,101,97,100,101,114,32,40,37,100,41,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,100,100,32,109,104,32,109,97,114,107,101,114,10,0,69,120,112,101,99,116,101,100,32,97,32,83,79,67,32,109,97,114,107,101,114,32,10,0,65,32,109,97,114,107,101,114,32,73,68,32,119,97,115,32,101,120,112,101,99,116,101,100,32,40,48,120,102,102,45,45,41,32,105,110,115,116,101,97,100,32,111,102,32,37,46,56,120,10,0,85,110,107,110,111,119,110,32,109,97,114,107,101,114,10,0,85,110,107,110,111,119,32,109,97,114,107,101,114,32,104,97,118,101,32,98,101,101,110,32,100,101,116,101,99,116,101,100,32,97,110,100,32,103,101,110,101,114,97,116,101,100,32,101,114,114,111,114,46,10,0,77,97,114,107,101,114,32,104,97,110,100,108,101,114,32,102,117,110,99,116,105,111,110,32,102,97,105,108,101,100,32,116,111,32,114,101,97,100,32,116,104,101,32,109,97,114,107,101,114,32,115,101,103,109,101,110,116,10,0,114,101,113,117,105,114,101,100,32,83,73,90,32,109,97,114,107,101,114,32,110,111,116,32,102,111,117,110,100,32,105,110,32,109,97,105,110,32,104,101,97,100,101,114,10,0,114,101,113,117,105,114,101,100,32,67,79,68,32,109,97,114,107,101,114,32,110,111,116,32,102,111,117,110,100,32,105,110,32,109,97,105,110,32,104,101,97,100,101,114,10,0,114,101,113,117,105,114,101,100,32,81,67,68,32,109,97,114,107,101,114,32,110,111,116,32,102,111,117,110,100,32,105,110,32,109,97,105,110,32,104,101,97,100,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,98,121,116,101,115,32,116,111,32,114,101,97,100,32,78,112,112,109,10,0,67,111,114,114,117,112,116,101,100,32,80,80,77,32,109,97,114,107,101,114,115,10,0,70,97,105,108,101,100,32,116,111,32,109,101,114,103,101,32,80,80,77,32,100,97,116,97,10,0,77,97,105,110,32,104,101,97,100,101,114,32,104,97,115,32,98,101,101,110,32,99,111,114,114,101,99,116,108,121,32,100,101,99,111,100,101,100,46,10,0,70,97,105,108,101,100,32,116,111,32,100,101,99,111,100,101,32,116,104,101,32,99,111,100,101,115,116,114,101,97,109,32,105,110,32,116,104,101,32,74,80,50,32,102,105,108,101,10,0,73,110,118,97,108,105,100,32,110,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,32,115,112,101,99,105,102,105,101,100,32,119,104,105,108,101,32,115,101,116,116,105,110,103,32,117,112,32,74,80,50,32,101,110,99,111,100,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,119,104,101,110,32,115,101,116,117,112,32,116,104,101,32,74,80,50,32,101,110,99,111,100,101,114,10,0,65,108,112,104,97,32,99,104,97,110,110,101,108,32,115,112,101,99,105,102,105,101,100,32,98,117,116,32,117,110,107,110,111,119,110,32,101,110,117,109,99,115,46,32,78,111,32,99,100,101,102,32,98,111,120,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,46,10,0,65,108,112,104,97,32,99,104,97,110,110,101,108,32,115,112,101,99,105,102,105,101,100,32,98,117,116,32,110,111,116,32,101,110,111,117,103,104,32,105,109,97,103,101,32,99,111,109,112,111,110,101,110,116,115,32,102,111,114,32,97,110,32,97,117,116,111,109,97,116,105,99,32,99,100,101,102,32,98,111,120,32,99,114,101,97,116,105,111,110,46,10,0,65,108,112,104,97,32,99,104,97,110,110,101,108,32,112,111,115,105,116,105,111,110,32,99,111,110,102,108,105,99,116,115,32,119,105,116,104,32,99,111,108,111,114,32,99,104,97,110,110,101,108,46,32,78,111,32,99,100,101,102,32,98,111,120,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,46,10,0,77,117,108,116,105,112,108,101,32,97,108,112,104,97,32,99,104,97,110,110,101,108,115,32,115,112,101,99,105,102,105,101,100,46,32,78,111,32,99,100,101,102,32,98,111,120,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,115,101,116,117,112,32,116,104,101,32,74,80,50,32,101,110,99,111,100,101,114,10,0,74,80,50,32,98,111,120,32,119,104,105,99,104,32,97,114,101,32,97,102,116,101,114,32,116,104,101,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,100,32,98,121,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,111,108,100,32,74,80,50,32,72,101,97,100,101,114,32,100,97,116,97,10,0,83,116,114,101,97,109,32,101,114,114,111,114,32,119,104,105,108,101,32,119,114,105,116,105,110,103,32,74,80,50,32,72,101,97,100,101,114,32,98,111,120,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,97,110,100,108,101,32,102,116,121,112,32,100,97,116,97,10,0,69,114,114,111,114,32,119,104,105,108,101,32,119,114,105,116,105,110,103,32,102,116,121,112,32,100,97,116,97,32,116,111,32,115,116,114,101,97,109,10,0,70,97,105,108,101,100,32,116,111,32,115,101,101,107,32,105,110,32,116,104,101,32,115,116,114,101,97,109,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,97,110,100,108,101,32,106,112,101,103,50,48,48,48,32,102,105,108,101,32,104,101,97,100,101,114,10,0,67,97,110,110,111,116,32,104,97,110,100,108,101,32,98,111,120,32,115,105,122,101,115,32,104,105,103,104,101,114,32,116,104,97,110,32,50,94,51,50,10,0,98,97,100,32,112,108,97,99,101,100,32,106,112,101,103,32,99,111,100,101,115,116,114,101,97,109,10,0,67,97,110,110,111,116,32,104,97,110,100,108,101,32,98,111,120,32,111,102,32,117,110,100,101,102,105,110,101,100,32,115,105,122,101,115,10,0,105,110,118,97,108,105,100,32,98,111,120,32,115,105,122,101,32,37,100,32,40,37,120,41,10,0,70,111,117,110,100,32,97,32,109,105,115,112,108,97,99,101,100,32,39,37,99,37,99,37,99,37,99,39,32,98,111,120,32,111,117,116,115,105,100,101,32,106,112,50,104,32,98,111,120,10,0,74,80,69,71,50,48,48,48,32,72,101,97,100,101,114,32,98,111,120,32,110,111,116,32,114,101,97,100,32,121,101,116,44,32,39,37,99,37,99,37,99,37,99,39,32,98,111,120,32,119,105,108,108,32,98,101,32,105,103,110,111,114,101,100,10,0,80,114,111,98,108,101,109,32,119,105,116,104,32,115,107,105,112,112,105,110,103,32,74,80,69,71,50,48,48,48,32,98,111,120,44,32,115,116,114,101,97,109,32,101,114,114,111,114,10,0,73,110,118,97,108,105,100,32,98,111,120,32,115,105,122,101,32,37,100,32,102,111,114,32,98,111,120,32,39,37,99,37,99,37,99,37,99,39,46,32,78,101,101,100,32,37,100,32,98,121,116,101,115,44,32,37,100,32,98,121,116,101,115,32,114,101,109,97,105,110,105,110,103,32,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,97,110,100,108,101,32,106,112,101,103,50,48,48,48,32,98,111,120,10,0,80,114,111,98,108,101,109,32,119,105,116,104,32,114,101,97,100,105,110,103,32,74,80,69,71,50,48,48,48,32,98,111,120,44,32,115,116,114,101,97,109,32,101,114,114,111,114,10,0,77,97,108,102,111,114,109,101,100,32,74,80,50,32,102,105,108,101,32,102,111,114,109,97,116,58,32,102,105,114,115,116,32,98,111,120,32,109,117,115,116,32,98,101,32,74,80,69,71,32,50,48,48,48,32,115,105,103,110,97,116,117,114,101,32,98,111,120,10,0,77,97,108,102,111,114,109,101,100,32,74,80,50,32,102,105,108,101,32,102,111,114,109,97,116,58,32,115,101,99,111,110,100,32,98,111,120,32,109,117,115,116,32,98,101,32,102,105,108,101,32,116,121,112,101,32,98,111,120,10,0,73,110,115,117,102,102,105,99,105,101,110,116,32,100,97,116,97,32,102,111,114,32,67,68,69,70,32,98,111,120,46,10,0,78,117,109,98,101,114,32,111,102,32,99,104,97,110,110,101,108,32,100,101,115,99,114,105,112,116,105,111,110,32,105,115,32,101,113,117,97,108,32,116,111,32,122,101,114,111,32,105,110,32,67,68,69,70,32,98,111,120,46,10,0,78,101,101,100,32,116,111,32,114,101,97,100,32,97,32,80,67,76,82,32,98,111,120,32,98,101,102,111,114,101,32,116,104,101,32,67,77,65,80,32,98,111,120,46,10,0,79,110,108,121,32,111,110,101,32,67,77,65,80,32,98,111,120,32,105,115,32,97,108,108,111,119,101,100,46,10,0,73,110,115,117,102,102,105,99,105,101,110,116,32,100,97,116,97,32,102,111,114,32,67,77,65,80,32,98,111,120,46,10,0,73,110,118,97,108,105,100,32,80,67,76,82,32,98,111,120,46,32,82,101,112,111,114,116,115,32,37,100,32,101,110,116,114,105,101,115,10,0,73,110,118,97,108,105,100,32,80,67,76,82,32,98,111,120,46,32,82,101,112,111,114,116,115,32,48,32,112,97,108,101,116,116,101,32,99,111,108,117,109,110,115,10,0,65,32,66,80,67,67,32,104,101,97,100,101,114,32,98,111,120,32,105,115,32,97,118,97,105,108,97,98,108,101,32,97,108,116,104,111,117,103,104,32,66,80,67,32,103,105,118,101,110,32,98,121,32,116,104,101,32,73,72,68,82,32,98,111,120,32,40,37,100,41,32,105,110,100,105,99,97,116,101,32,99,111,109,112,111,110,101,110,116,115,32,98,105,116,32,100,101,112,116,104,32,105,115,32,99,111,110,115,116,97,110,116,10,0,66,97,100,32,66,80,67,67,32,104,101,97,100,101,114,32,98,111,120,32,40,98,97,100,32,115,105,122,101,41,10,0,66,97,100,32,67,79,76,82,32,104,101,97,100,101,114,32,98,111,120,32,40,98,97,100,32,115,105,122,101,41,10,0,65,32,99,111,110,102,111,114,109,105,110,103,32,74,80,50,32,114,101,97,100,101,114,32,115,104,97,108,108,32,105,103,110,111,114,101,32,97,108,108,32,67,111,108,111,117,114,32,83,112,101,99,105,102,105,99,97,116,105,111,110,32,98,111,120,101,115,32,97,102,116,101,114,32,116,104,101,32,102,105,114,115,116,44,32,115,111,32,119,101,32,105,103,110,111,114,101,32,116,104,105,115,32,111,110,101,46,10,0,66,97,100,32,67,79,76,82,32,104,101,97,100,101,114,32,98,111,120,32,40,98,97,100,32,115,105,122,101,58,32,37,100,41,10,0,66,97,100,32,67,79,76,82,32,104,101,97,100,101,114,32,98,111,120,32,40,67,73,69,76,97,98,44,32,98,97,100,32,115,105,122,101,58,32,37,100,41,10,0,67,79,76,82,32,66,79,88,32,109,101,116,104,32,118,97,108,117,101,32,105,115,32,110,111,116,32,97,32,114,101,103,117,108,97,114,32,118,97,108,117,101,32,40,37,100,41,44,32,115,111,32,119,101,32,119,105,108,108,32,105,103,110,111,114,101,32,116,104,101,32,101,110,116,105,114,101,32,67,111,108,111,117,114,32,83,112,101,99,105,102,105,99,97,116,105,111,110,32,98,111,120,46,32,10,0,66,97,100,32,105,109,97,103,101,32,104,101,97,100,101,114,32,98,111,120,32,40,98,97,100,32,115,105,122,101,41,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,97,110,100,108,101,32,105,109,97,103,101,32,104,101,97,100,101,114,32,40,105,104,100,114,41,10,0,74,80,50,32,73,72,68,82,32,98,111,120,58,32,99,111,109,112,114,101,115,115,105,111,110,32,116,121,112,101,32,105,110,100,105,99,97,116,101,32,116,104,97,116,32,116,104,101,32,102,105,108,101,32,105,115,32,110,111,116,32,97,32,99,111,110,102,111,114,109,105,110,103,32,74,80,50,32,102,105,108,101,32,40,37,100,41,32,10,0,84,104,101,32,32,98,111,120,32,109,117,115,116,32,98,101,32,116,104,101,32,102,105,114,115,116,32,98,111,120,32,105,110,32,116,104,101,32,102,105,108,101,46,10,0,67,97,110,110,111,116,32,104,97,110,100,108,101,32,98,111,120,32,111,102,32,108,101,115,115,32,116,104,97,110,32,56,32,98,121,116,101,115,10,0,67,97,110,110,111,116,32,104,97,110,100,108,101,32,88,76,32,98,111,120,32,111,102,32,108,101,115,115,32,116,104,97,110,32,49,54,32,98,121,116,101,115,10,0,66,111,120,32,108,101,110,103,116,104,32,105,115,32,105,110,99,111,110,115,105,115,116,101,110,116,46,10,0,83,116,114,101,97,109,32,101,114,114,111,114,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32,74,80,50,32,72,101,97,100,101,114,32,98,111,120,10,0,83,116,114,101,97,109,32,101,114,114,111,114,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32,74,80,50,32,72,101,97,100,101,114,32,98,111,120,58,32,98,111,120,32,108,101,110,103,116,104,32,105,115,32,105,110,99,111,110,115,105,115,116,101,110,116,46,10,0,83,116,114,101,97,109,32,101,114,114,111,114,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32,74,80,50,32,72,101,97,100,101,114,32,98,111,120,58,32,110,111,32,39,105,104,100,114,39,32,98,111,120,46,10,0,84,104,101,32,102,116,121,112,32,98,111,120,32,109,117,115,116,32,98,101,32,116,104,101,32,115,101,99,111,110,100,32,98,111,120,32,105,110,32,116,104,101,32,102,105,108,101,46,10,0,69,114,114,111,114,32,119,105,116,104,32,70,84,89,80,32,115,105,103,110,97,116,117,114,101,32,66,111,120,32,115,105,122,101,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,119,105,116,104,32,70,84,89,80,32,66,111,120,10,0,84,104,101,32,115,105,103,110,97,116,117,114,101,32,98,111,120,32,109,117,115,116,32,98,101,32,116,104,101,32,102,105,114,115,116,32,98,111,120,32,105,110,32,116,104,101,32,102,105,108,101,46,10,0,69,114,114,111,114,32,119,105,116,104,32,74,80,32,115,105,103,110,97,116,117,114,101,32,66,111,120,32,115,105,122,101,10,0,69,114,114,111,114,32,119,105,116,104,32,74,80,32,83,105,103,110,97,116,117,114,101,32,58,32,98,97,100,32,109,97,103,105,99,32,110,117,109,98,101,114,10,0,111,112,106,95,106,112,50,95,97,112,112,108,121,95,99,100,101,102,58,32,99,110,61,37,100,44,32,110,117,109,99,111,109,112,115,61,37,100,10,0,111,112,106,95,106,112,50,95,97,112,112,108,121,95,99,100,101,102,58,32,97,99,110,61,37,100,44,32,110,117,109,99,111,109,112,115,61,37,100,10,0,73,110,118,97,108,105,100,32,99,111,109,112,111,110,101,110,116,32,105,110,100,101,120,32,37,100,32,40,62,61,32,37,100,41,46,10,0,73,110,99,111,109,112,108,101,116,101,32,99,104,97,110,110,101,108,32,100,101,102,105,110,105,116,105,111,110,115,46,10,0,85,110,101,120,112,101,99,116,101,100,32,79,79,77,46,10,0,73,110,118,97,108,105,100,32,99,111,109,112,111,110,101,110,116,47,112,97,108,101,116,116,101,32,105,110,100,101,120,32,102,111,114,32,100,105,114,101,99,116,32,109,97,112,112,105,110,103,32,37,100,46,10,0,67,111,109,112,111,110,101,110,116,32,37,100,32,105,115,32,109,97,112,112,101,100,32,116,119,105,99,101,46,10,0,68,105,114,101,99,116,32,117,115,101,32,97,116,32,35,37,100,32,104,111,119,101,118,101,114,32,112,99,111,108,61,37,100,46,10,0,67,111,109,112,111,110,101,110,116,32,37,100,32,100,111,101,115,110,39,116,32,104,97,118,101,32,97,32,109,97,112,112,105,110,103,46,10,0,67,111,109,112,111,110,101,110,116,32,109,97,112,112,105,110,103,32,115,101,101,109,115,32,119,114,111,110,103,46,32,84,114,121,105,110,103,32,116,111,32,99,111,114,114,101,99,116,46,10,0,84,105,108,101,115,32,100,111,110,39,116,32,97,108,108,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,100,105,109,101,110,115,105,111,110,46,32,83,107,105,112,32,116,104,101,32,77,67,84,32,115,116,101,112,46,10,0,78,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,32,40,37,100,41,32,105,115,32,105,110,99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,32,97,32,77,67,84,46,32,83,107,105,112,32,116,104,101,32,77,67,84,32,115,116,101,112,46,10,0,116,105,108,101,115,32,114,101,113,117,105,114,101,32,97,116,32,108,101,97,115,116,32,111,110,101,32,114,101,115,111,108,117,116,105,111,110,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,116,105,108,101,32,100,97,116,97,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,116,105,108,101,32,114,101,115,111,108,117,116,105,111,110,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,97,110,100,108,101,32,98,97,110,100,32,112,114,101,99,105,110,116,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,99,117,114,114,101,110,116,32,112,114,101,99,105,110,99,116,32,99,111,100,101,98,108,111,99,107,32,101,108,101,109,101,110,116,10,0,78,111,32,105,110,99,108,116,114,101,101,32,99,114,101,97,116,101,100,46,10,0,78,111,32,105,109,115,98,116,114,101,101,32,99,114,101,97,116,101,100,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,99,114,101,97,116,101,32,84,97,103,45,116,114,101,101,10,0,116,103,116,95,99,114,101,97,116,101,32,116,114,101,101,45,62,110,117,109,110,111,100,101,115,32,61,61,32,48,44,32,110,111,32,116,114,101,101,32,99,114,101,97,116,101,100,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,99,114,101,97,116,101,32,84,97,103,45,116,114,101,101,32,110,111,100,101,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,105,110,105,116,105,97,108,105,122,101,32,116,104,101,32,116,97,103,32,116,114,101,101,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,100,100,32,97,32,110,101,119,32,118,97,108,105,100,97,116,105,111,110,32,112,114,111,99,101,100,117,114,101,10,0,0,1,1,2,1,2,2,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+10240), allocate([7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,1,1,2,1,2,2,2,1,2,2,2,2,2,2,2,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,1,1,2,1,2,2,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,3,3,6,3,6,6,8,3,6,6,8,6,8,8,8,1,4,4,7,4,7,7,8,4,7,7,8,7,8,8,8,1,4,4,7,4,7,7,8,4,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,1,4,4,7,4,7,7,8,4,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,1,4,4,7,4,7,7,8,4,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,9,10,12,13,10,10,13,13,12,13,12,13,13,13,13,13,9,10,12,11,10,9,13,12,12,11,12,11,13,12,13,12,9,10,12,11,10,10,11,11,12,13,9,10,13,13,10,10,9,10,12,13,10,9,11,12,12,11,9,10,13,12,10,9,9,10,12,13,10,9,11,12,12,13,12,13,11,12,11,12,9,10,12,11,10,10,11,11,12,11,12,11,11,11,11,11,9,10,12,11,10,9,13,12,12,13,9,10,11,12,10,9,9,10,12,13,10,10,13,13,12,11,9,10,11,11,10,10,9,10,12,13,10,10,13,13,12,11,9,10,11,11,10,10,9,10,12,11,10,9,13,12,12,13,9,10,11,12,10,9,9,10,12,11,10,10,11,11,12,11,12,11,11,11,11,11,9,10,12,13,10,9,11,12,12,13,12,13,11,12,11,12,9,10,12,13,10,9,11,12,12,11,9,10,13,12,10,9,9,10,12,11,10,10,11,11,12,13,9,10,13,13,10,10,9,10,12,11,10,9,13,12,12,11,12,11,13,12,13,12,9,10,12,13,10,10,13,13,12,13,12,13,13,13,13,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,114,101,97,100,58,32,115,101,103,109,101,110,116,32,116,111,111,32,108,111,110,103,32,40,37,100,41,32,119,105,116,104,32,109,97,120,32,40,37,100,41,32,102,111,114,32,99,111,100,101,98,108,111,99,107,32,37,100,32,40,112,61,37,100,44,32,98,61,37,100,44,32,114,61,37,100,44,32,99,61,37,100,41,10,0,114,101,97,100,58,32,115,101,103,109,101,110,116,32,116,111,111,32,108,111,110,103,32,40,37,100,41,32,119,105,116,104,32,99,117,114,114,101,110,116,32,115,105,122,101,32,40,37,100,32,62,32,37,100,41,32,102,111,114,32,99,111,100,101,98,108,111,99,107,32,37,100,32,40,112,61,37,100,44,32,98,61,37,100,44,32,114,61,37,100,44,32,99,61,37,100,41,10,0,115,107,105,112,58,32,115,101,103,109,101,110,116,32,116,111,111,32,108,111,110,103,32,40,37,100,41,32,119,105,116,104,32,109,97,120,32,40,37,100,41,32,102,111,114,32,99,111,100,101,98,108,111,99,107,32,37,100,32,40,112,61,37,100,44,32,98,61,37,100,44,32,114,61,37,100,44,32,99,61,37,100,41,10,0,78,111,116,32,101,110,111,117,103,104,32,115,112,97,99,101,32,102,111,114,32,101,120,112,101,99,116,101,100,32,83,79,80,32,109,97,114,107,101,114,10,0,69,120,112,101,99,116,101,100,32,83,79,80,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,115,112,97,99,101,32,102,111,114,32,101,120,112,101,99,116,101,100,32,69,80,72,32,109,97,114,107,101,114,10,0,69,120,112,101,99,116,101,100,32,69,80,72,32,109,97,114,107,101,114,10,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0,114,119,97],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+20480),allocate([17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,46,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+25118);var tempDoublePtr=Runtime.alignMemory(allocate(12,"i8",ALLOC_STATIC),8);assert(tempDoublePtr%8==0),Module._i64Subtract=_i64Subtract;var _floorf=Math_floor;Module._bitshift64Ashr=_bitshift64Ashr;var _SItoF=!0;Module._memset=_memset;var _BDtoILow=!0,_ceilf=Math_ceil;Module._bitshift64Shl=_bitshift64Shl,Module._i64Add=_i64Add;var _floor=Math_floor,_sqrt=Math_sqrt,PATH=void 0,Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var a=Browser.mainLoop.timingMode,b=Browser.mainLoop.timingValue,c=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(c,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(a,b),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var a=Module.statusMessage||"Please wait...",b=Browser.mainLoop.remainingBlockers,c=Browser.mainLoop.expectedBlockers;b?c>b?Module.setStatus(a+" ("+(c-b)+"/"+c+")"):Module.setStatus(a):Module.setStatus("")}},runIter:function(a){if(!ABORT){if(Module.preMainLoop){var b=Module.preMainLoop();if(b===!1)return}try{a()}catch(c){if(c instanceof ExitStatus)return;throw c&&"object"==typeof c&&c.stack&&Module.printErr("exception thrown: "+[c,c.stack]),c}Module.postMainLoop&&Module.postMainLoop()}}},isFullScreen:!1,pointerLock:!1,moduleContextCreatedCallbacks:[],workers:[],init:function(){function a(){Browser.pointerLock=document.pointerLockElement===e||document.mozPointerLockElement===e||document.webkitPointerLockElement===e||document.msPointerLockElement===e}if(Module.preloadPlugins||(Module.preloadPlugins=[]),!Browser.initted){Browser.initted=!0;try{new Blob,Browser.hasBlobConstructor=!0}catch(b){Browser.hasBlobConstructor=!1,console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder="undefined"!=typeof MozBlobBuilder?MozBlobBuilder:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:Browser.hasBlobConstructor?null:console.log("warning: no BlobBuilder"),Browser.URLObject="undefined"!=typeof window?window.URL?window.URL:window.webkitURL:void 0,Module.noImageDecoding||"undefined"!=typeof Browser.URLObject||(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var c={};c.canHandle=function(a){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(a)},c.handle=function(a,b,c,d){var e=null;if(Browser.hasBlobConstructor)try{e=new Blob([a],{type:Browser.getMimetype(b)}),e.size!==a.length&&(e=new Blob([new Uint8Array(a).buffer],{type:Browser.getMimetype(b)}))}catch(f){Runtime.warnOnce("Blob constructor present but fails: "+f+"; falling back to blob builder")}if(!e){var g=new Browser.BlobBuilder;g.append(new Uint8Array(a).buffer),e=g.getBlob()}var h=Browser.URLObject.createObjectURL(e),i=new Image;i.onload=function(){assert(i.complete,"Image "+b+" could not be decoded");var d=document.createElement("canvas");d.width=i.width,d.height=i.height;var e=d.getContext("2d");e.drawImage(i,0,0),Module.preloadedImages[b]=d,Browser.URLObject.revokeObjectURL(h),c&&c(a)},i.onerror=function(a){console.log("Image "+h+" could not be decoded"),d&&d()},i.src=h},Module.preloadPlugins.push(c);var d={};d.canHandle=function(a){return!Module.noAudioDecoding&&a.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},d.handle=function(a,b,c,d){function e(d){g||(g=!0,Module.preloadedAudios[b]=d,c&&c(a))}function f(){g||(g=!0,Module.preloadedAudios[b]=new Audio,d&&d())}var g=!1;if(!Browser.hasBlobConstructor)return f();try{var h=new Blob([a],{type:Browser.getMimetype(b)})}catch(i){return f()}var j=Browser.URLObject.createObjectURL(h),k=new Audio;k.addEventListener("canplaythrough",function(){e(k)},!1),k.onerror=function(c){function d(a){for(var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c="=",d="",e=0,f=0,g=0;g=6;){var h=e>>f-6&63;f-=6,d+=b[h]}return 2==f?(d+=b[(3&e)<<4],d+=c+c):4==f&&(d+=b[(15&e)<<2],d+=c),d}g||(console.log("warning: browser could not fully decode audio "+b+", trying slower base64 approach"),k.src="data:audio/x-"+b.substr(-3)+";base64,"+d(a),e(k))},k.src=j,Browser.safeSetTimeout(function(){e(k)},1e4)},Module.preloadPlugins.push(d);var e=Module.canvas;e&&(e.requestPointerLock=e.requestPointerLock||e.mozRequestPointerLock||e.webkitRequestPointerLock||e.msRequestPointerLock||function(){},e.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},e.exitPointerLock=e.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",a,!1),document.addEventListener("mozpointerlockchange",a,!1),document.addEventListener("webkitpointerlockchange",a,!1),document.addEventListener("mspointerlockchange",a,!1),Module.elementPointerLock&&e.addEventListener("click",function(a){!Browser.pointerLock&&e.requestPointerLock&&(e.requestPointerLock(),a.preventDefault())},!1))}},createContext:function(a,b,c,d){if(b&&Module.ctx&&a==Module.canvas)return Module.ctx;var e,f;if(b){var g={antialias:!1,alpha:!1};if(d)for(var h in d)g[h]=d[h];f=GL.createContext(a,g),f&&(e=GL.getContext(f).GLctx),a.style.backgroundColor="black"}else e=a.getContext("2d");return e?(c&&(b||assert("undefined"==typeof GLctx,"cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=e,b&&GL.makeContextCurrent(f),Module.useWebGL=b,Browser.moduleContextCreatedCallbacks.forEach(function(a){a()}),Browser.init()),e):null},destroyContext:function(a,b,c){},fullScreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullScreen:function(a,b,c){function d(){Browser.isFullScreen=!1;var a=e.parentNode;(document.webkitFullScreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.mozFullscreenElement||document.fullScreenElement||document.fullscreenElement||document.msFullScreenElement||document.msFullscreenElement||document.webkitCurrentFullScreenElement)===a?(e.cancelFullScreen=document.cancelFullScreen||document.mozCancelFullScreen||document.webkitCancelFullScreen||document.msExitFullscreen||document.exitFullscreen||function(){},e.cancelFullScreen=e.cancelFullScreen.bind(document),Browser.lockPointer&&e.requestPointerLock(),Browser.isFullScreen=!0,Browser.resizeCanvas&&Browser.setFullScreenCanvasSize()):(a.parentNode.insertBefore(e,a),a.parentNode.removeChild(a),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullScreen),Browser.updateCanvasDimensions(e)}Browser.lockPointer=a,Browser.resizeCanvas=b,Browser.vrDevice=c,"undefined"==typeof Browser.lockPointer&&(Browser.lockPointer=!0),"undefined"==typeof Browser.resizeCanvas&&(Browser.resizeCanvas=!1),"undefined"==typeof Browser.vrDevice&&(Browser.vrDevice=null);var e=Module.canvas;Browser.fullScreenHandlersInstalled||(Browser.fullScreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",d,!1),document.addEventListener("mozfullscreenchange",d,!1),document.addEventListener("webkitfullscreenchange",d,!1),document.addEventListener("MSFullscreenChange",d,!1));var f=document.createElement("div");e.parentNode.insertBefore(f,e),f.appendChild(e),f.requestFullScreen=f.requestFullScreen||f.mozRequestFullScreen||f.msRequestFullscreen||(f.webkitRequestFullScreen?function(){f.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),c?f.requestFullScreen({vrDisplay:c}):f.requestFullScreen()},nextRAF:0,fakeRequestAnimationFrame:function(a){var b=Date.now();if(0===Browser.nextRAF)Browser.nextRAF=b+1e3/60;else for(;b+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var c=Math.max(Browser.nextRAF-b,0);setTimeout(a,c)},requestAnimationFrame:function(a){"undefined"==typeof window?Browser.fakeRequestAnimationFrame(a):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(a))},safeCallback:function(a){return function(){return ABORT?void 0:a.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var a=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],a.forEach(function(a){a()})}},safeRequestAnimationFrame:function(a){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?a():Browser.queuedAsyncCallbacks.push(a))})},safeSetTimeout:function(a,b){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?a():Browser.queuedAsyncCallbacks.push(a))},b)},safeSetInterval:function(a,b){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&a()},b)},getMimetype:function(a){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[a.substr(a.lastIndexOf(".")+1)]},getUserMedia:function(a){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(a)},getMovementX:function(a){return a.movementX||a.mozMovementX||a.webkitMovementX||0},getMovementY:function(a){return a.movementY||a.mozMovementY||a.webkitMovementY||0},getMouseWheelDelta:function(a){var b=0;switch(a.type){case"DOMMouseScroll":b=a.detail;break;case"mousewheel":b=a.wheelDelta;break;case"wheel":b=a.deltaY;break;default:throw"unrecognized mouse wheel event: "+a.type}return b},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(a){if(Browser.pointerLock)"mousemove"!=a.type&&"mozMovementX"in a?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(a),Browser.mouseMovementY=Browser.getMovementY(a)),"undefined"!=typeof SDL?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var b=Module.canvas.getBoundingClientRect(),c=Module.canvas.width,d=Module.canvas.height,e="undefined"!=typeof window.scrollX?window.scrollX:window.pageXOffset,f="undefined"!=typeof window.scrollY?window.scrollY:window.pageYOffset;if("touchstart"===a.type||"touchend"===a.type||"touchmove"===a.type){var g=a.touch;if(void 0===g)return;var h=g.pageX-(e+b.left),i=g.pageY-(f+b.top);h*=c/b.width,i*=d/b.height;var j={x:h,y:i};if("touchstart"===a.type)Browser.lastTouches[g.identifier]=j,Browser.touches[g.identifier]=j;else if("touchend"===a.type||"touchmove"===a.type){var k=Browser.touches[g.identifier];k||(k=j),Browser.lastTouches[g.identifier]=k,Browser.touches[g.identifier]=j}return}var l=a.pageX-(e+b.left),m=a.pageY-(f+b.top);l*=c/b.width,m*=d/b.height,Browser.mouseMovementX=l-Browser.mouseX,Browser.mouseMovementY=m-Browser.mouseY,Browser.mouseX=l,Browser.mouseY=m}},xhrLoad:function(a,b,c){var d=new XMLHttpRequest;d.open("GET",a,!0),d.responseType="arraybuffer",d.onload=function(){200==d.status||0==d.status&&d.response?b(d.response):c()},d.onerror=c,d.send(null)},asyncLoad:function(a,b,c,d){Browser.xhrLoad(a,function(c){assert(c,'Loading data file "'+a+'" failed (no arrayBuffer).'),b(new Uint8Array(c)),d||removeRunDependency("al "+a)},function(b){if(!c)throw'Loading data file "'+a+'" failed.';c()}),d||addRunDependency("al "+a)},resizeListeners:[],updateResizeListeners:function(){var a=Module.canvas;Browser.resizeListeners.forEach(function(b){b(a.width,a.height)})},setCanvasSize:function(a,b,c){var d=Module.canvas;Browser.updateCanvasDimensions(d,a,b),c||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function(){if("undefined"!=typeof SDL){var a=HEAPU32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2];a=8388608|a,HEAP32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2]=a}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if("undefined"!=typeof SDL){var a=HEAPU32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2];a=-8388609&a,HEAP32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2]=a}Browser.updateResizeListeners()},updateCanvasDimensions:function(a,b,c){b&&c?(a.widthNative=b,a.heightNative=c):(b=a.widthNative,c=a.heightNative);var d=b,e=c;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(d/e>2];return b},getStr:function(){var a=Pointer_stringify(SYSCALLS.get());return a},get64:function(){var a=SYSCALLS.get(),b=SYSCALLS.get();return assert(a>=0?0===b:-1===b),a},getZero:function(){assert(0===SYSCALLS.get())}},ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};Module._bitshift64Lshr=_bitshift64Lshr;var _BDtoIHigh=!0;Module._memcpy=_memcpy;var _llvm_pow_f64=Math_pow,_BItoD=!0;Module.requestFullScreen=function(a,b,c){Browser.requestFullScreen(a,b,c)},Module.requestAnimationFrame=function(a){Browser.requestAnimationFrame(a)},Module.setCanvasSize=function(a,b,c){Browser.setCanvasSize(a,b,c)},Module.pauseMainLoop=function(){Browser.mainLoop.pause()},Module.resumeMainLoop=function(){Browser.mainLoop.resume()},Module.getUserMedia=function(){Browser.getUserMedia()},Module.createContext=function(a,b,c,d){return Browser.createContext(a,b,c,d)},STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP),staticSealed=!0,STACK_MAX=STACK_BASE+TOTAL_STACK,DYNAMIC_BASE=DYNAMICTOP=Runtime.alignMemory(STACK_MAX),assert(TOTAL_MEMORY>DYNAMIC_BASE,"TOTAL_MEMORY not big enough for stack");var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_DYNAMIC);Module.asmGlobalArg={Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort:abort,assert:assert,invoke_iiiiiiii:invoke_iiiiiiii,invoke_iiii:invoke_iiii,invoke_di:invoke_di,invoke_vi:invoke_vi,invoke_vii:invoke_vii,invoke_iiiiiii:invoke_iiiiiii,invoke_ii:invoke_ii,invoke_viii:invoke_viii,invoke_iiiiiiiiiiii:invoke_iiiiiiiiiiii,invoke_iiiii:invoke_iiiii,invoke_iii:invoke_iii,invoke_iiiiii:invoke_iiiiii,invoke_viiii:invoke_viiii,_pthread_cleanup_pop:_pthread_cleanup_pop,___syscall221:___syscall221,_llvm_pow_f64:_llvm_pow_f64,_abort:_abort,_pthread_cleanup_push:_pthread_cleanup_push,_ceilf:_ceilf,_emscripten_set_main_loop_timing:_emscripten_set_main_loop_timing,_sbrk:_sbrk,_emscripten_memcpy_big:_emscripten_memcpy_big,_sysconf:_sysconf,___setErrNo:___setErrNo,_floor:_floor,_pthread_self:_pthread_self,_sqrt:_sqrt,_floorf:_floorf,___syscall54:___syscall54,___unlock:___unlock,_emscripten_set_main_loop:_emscripten_set_main_loop,___lock:___lock,___syscall6:___syscall6,___syscall5:___syscall5,_time:_time,___syscall140:___syscall140,___syscall145:___syscall145,___syscall146:___syscall146,STACKTOP:STACKTOP,STACK_MAX:STACK_MAX,tempDoublePtr:tempDoublePtr,ABORT:ABORT,cttz_i8:cttz_i8};var asm=function(a,b,c){"use asm";var d=new a.Int8Array(c);var e=new a.Int16Array(c);var f=new a.Int32Array(c);var g=new a.Uint8Array(c);var h=new a.Uint16Array(c);var i=new a.Uint32Array(c);var j=new a.Float32Array(c);var k=new a.Float64Array(c);var l=b.STACKTOP|0;var m=b.STACK_MAX|0;var n=b.tempDoublePtr|0;var o=b.ABORT|0;var p=b.cttz_i8|0;var q=0;var r=0;var s=0;var t=0;var u=a.NaN,v=a.Infinity;var w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0,E=0.0;var F=0;var G=0;var H=0;var I=0;var J=0;var K=0;var L=0;var M=0;var N=0;var O=0;var P=a.Math.floor;var Q=a.Math.abs;var R=a.Math.sqrt;var S=a.Math.pow;var T=a.Math.cos;var U=a.Math.sin;var V=a.Math.tan;var W=a.Math.acos;var X=a.Math.asin;var Y=a.Math.atan;var Z=a.Math.atan2;var $=a.Math.exp;var _=a.Math.log;var aa=a.Math.ceil;var ba=a.Math.imul;var ca=a.Math.min;var da=a.Math.clz32;var ea=b.abort;var fa=b.assert;var ga=b.invoke_iiiiiiii;var ha=b.invoke_iiii;var ia=b.invoke_di;var ja=b.invoke_vi;var ka=b.invoke_vii;var la=b.invoke_iiiiiii;var ma=b.invoke_ii;var na=b.invoke_viii;var oa=b.invoke_iiiiiiiiiiii;var pa=b.invoke_iiiii;var qa=b.invoke_iii;var ra=b.invoke_iiiiii;var sa=b.invoke_viiii;var ta=b._pthread_cleanup_pop;var ua=b.___syscall221;var va=b._llvm_pow_f64;var wa=b._abort;var xa=b._pthread_cleanup_push;var ya=b._ceilf;var za=b._emscripten_set_main_loop_timing;var Aa=b._sbrk;var Ba=b._emscripten_memcpy_big;var Ca=b._sysconf; var Da=b.___setErrNo;var Ea=b._floor;var Fa=b._pthread_self;var Ga=b._sqrt;var Ha=b._floorf;var Ia=b.___syscall54;var Ja=b.___unlock;var Ka=b._emscripten_set_main_loop;var La=b.___lock;var Ma=b.___syscall6;var Na=b.___syscall5;var Oa=b._time;var Pa=b.___syscall140;var Qa=b.___syscall145;var Ra=b.___syscall146;var Sa=0.0;function Ta(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+48|0;e=m+32|0;k=m+28|0;f[e>>2]=c;if((f[a+8>>2]|0)==16)j=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else j=f[a+12>>2]|0;g=(f[a+80>>2]|0)+16|0;h=(f[g>>2]|0)>>>0<257?1:2;i=h+1|0;if(i>>>0>c>>>0){Pd(d,1,14585,m)|0;d=0;l=m;return d|0}f[e>>2]=c-i;ld(b,k,h);c=f[k>>2]|0;if(c>>>0>=(f[g>>2]|0)>>>0){Pd(d,1,14611,m+8|0)|0;d=0;l=m;return d|0}ld(b+h|0,(f[j+5584>>2]|0)+(c*1080|0)|0,1);if(!(rb(a,f[k>>2]|0,b+i|0,e,d)|0)){Pd(d,1,14585,m+16|0)|0;d=0;l=m;return d|0}if(!(f[e>>2]|0)){d=1;l=m;return d|0}Pd(d,1,14585,m+24|0)|0;d=0;l=m;return d|0}function Ua(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;j=l;l=l+32|0;i=j+8|0;e=j+20|0;h=f[(f[a+80>>2]|0)+16>>2]|0;g=h>>>0<257?1:2;if((g+2|0)!=(c|0)){Pd(d,1,14502,j)|0;i=0;l=j;return i|0}if((f[a+8>>2]|0)==16)a=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else a=f[a+12>>2]|0;ld(b,e,g);ld(b+g|0,j+16|0,1);c=f[e>>2]|0;if(c>>>0>>0){ld(b+(g+1)|0,(f[a+5584>>2]|0)+(c*1080|0)+808|0,1);i=1;l=j;return i|0}else{f[i>>2]=c;f[i+4>>2]=h;Pd(d,1,14528,i)|0;i=0;l=j;return i|0}return 0}function Va(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0;h=l;l=l+16|0;e=h+12|0;f[e>>2]=c;if(!(qb(a,0,b,e,d)|0)){Pd(d,1,14476,h)|0;g=0;l=h;return g|0}if(f[e>>2]|0){Pd(d,1,14476,h+8|0)|0;g=0;l=h;return g|0}if((f[a+8>>2]|0)==16)e=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else e=f[a+12>>2]|0;e=f[e+5584>>2]|0;c=a+80|0;if((f[(f[c>>2]|0)+16>>2]|0)>>>0<=1){g=1;l=h;return g|0}d=e+24|0;a=e+804|0;g=e+28|0;b=1;while(1){f[e+1104>>2]=f[d>>2];f[e+1884>>2]=f[a>>2];Ki(e+1108|0,g|0,776)|0;b=b+1|0;if(b>>>0>=(f[(f[c>>2]|0)+16>>2]|0)>>>0){e=1;break}else e=e+1080|0}l=h;return e|0}function Wa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;n=o+32|0;m=o+24|0;k=o+16|0;g=o+8|0;e=o;j=o+40|0;h=o+36|0;f[j>>2]=c;i=a+80|0;do if((f[(f[i>>2]|0)+16>>2]|0)>>>0<257){if(c){ld(b,h,1);g=b+1|0;b=c+-1|0;break}Pd(d,1,14129,e)|0;n=0;l=o;return n|0}else{if(c>>>0>=2){ld(b,h,2);g=b+2|0;b=c+-2|0;break}Pd(d,1,14129,g)|0;n=0;l=o;return n|0}while(0);f[j>>2]=b;e=f[h>>2]|0;b=f[(f[i>>2]|0)+16>>2]|0;if(e>>>0>=b>>>0){f[k>>2]=e;f[k+4>>2]=b;Pd(d,1,14155,k)|0;n=0;l=o;return n|0}if(!(qb(a,e,g,j,d)|0)){Pd(d,1,14129,m)|0;n=0;l=o;return n|0}if(!(f[j>>2]|0)){n=1;l=o;return n|0}Pd(d,1,14129,n)|0;n=0;l=o;return n|0}function Xa(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;h=t+8|0;s=t+12|0;r=f[(f[a+80>>2]|0)+16>>2]|0;q=r>>>0<257?1:2;p=(q<<1)+5|0;g=(c>>>0)/(p>>>0)|0;if((g|0)==0|((c>>>0)%(p>>>0)|0|0)!=0){Pd(e,1,14085,t)|0;s=0;l=t;return s|0}if((f[a+8>>2]|0)==16)p=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else p=f[a+12>>2]|0;c=p+5636|0;a=d[c>>0]|0;if(!(a&4))o=0;else o=(f[p+420>>2]|0)+1|0;n=o+g|0;if(n>>>0>31){f[h>>2]=n;Pd(e,1,14111,h)|0;s=0;l=t;return s|0}d[c>>0]=a|4;if(o>>>0>>0){e=q+1|0;m=p+8|0;h=q+3|0;i=q|4;j=i+q|0;k=j+1|0;a=b;g=o;c=p+424+(o*148|0)|0;while(1){ld(a,c,1);ld(a+1|0,c+4|0,q);b=c+8|0;ld(a+e|0,b,2);u=f[b>>2]|0;o=f[m>>2]|0;f[b>>2]=u>>>0>>0?u:o;ld(a+h|0,c+12|0,1);b=c+16|0;ld(a+i|0,b,q);ld(a+j|0,s,1);f[c+36>>2]=f[s>>2];o=f[b>>2]|0;f[b>>2]=o>>>0>>0?o:r;g=g+1|0;if(g>>>0>=n>>>0)break;else{a=a+k|0;c=c+148|0}}}f[p+420>>2]=n+-1;u=1;l=t;return u|0}function Ya(a,b,c,g){a=a|0;b=b|0;c=c|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;M=l;l=l+144|0;L=M+128|0;H=M+120|0;G=M+112|0;E=M+104|0;D=M+96|0;C=M+88|0;A=M+72|0;t=M+64|0;r=M+56|0;q=M+48|0;p=M+40|0;s=M+32|0;k=M+24|0;i=M+16|0;h=M+136|0;w=M+132|0;J=f[a+80>>2]|0;K=a+88|0;if(c>>>0<36){Pd(g,1,13440,M)|0;g=0;l=M;return g|0}I=c+-36|0;o=(I>>>0)/3|0;if((I>>>0)%3|0){Pd(g,1,13440,M+8|0)|0;g=0;l=M;return g|0}ld(b,h,2);e[K>>1]=f[h>>2];x=J+8|0;ld(b+2|0,x,4);B=J+12|0;ld(b+6|0,B,4);ld(b+10|0,J,4);n=J+4|0;ld(b+14|0,n,4);v=a+100|0;ld(b+18|0,v,4);z=a+104|0;ld(b+22|0,z,4);u=a+92|0;ld(b+26|0,u,4);y=a+96|0;ld(b+30|0,y,4);ld(b+34|0,h,2);j=b+36|0;c=f[h>>2]|0;if(c>>>0>=16385){f[i>>2]=c;Pd(g,1,13468,i)|0;g=0;l=M;return g|0}c=c&65535;I=J+16|0;f[I>>2]=c;if((c|0)!=(o|0)){f[k>>2]=c;f[k+4>>2]=o;Pd(g,1,13529,k)|0;g=0;l=M;return g|0}k=f[J>>2]|0;m=f[x>>2]|0;if(m>>>0>k>>>0){c=f[n>>2]|0;b=f[B>>2]|0;if(c>>>0>>0){h=f[v>>2]|0;i=f[z>>2]|0;if(!(ba(i,h)|0)){f[p>>2]=h;f[p+4>>2]=i;Pd(g,1,13705,p)|0;g=0;l=M;return g|0}s=Pi(b|0,0,m|0,0)|0;if(!((s|0)==(ba(b,m)|0)&(F|0)==0)){f[q>>2]=m;f[q+4>>2]=b;Pd(g,1,13766,q)|0;g=0;l=M;return g|0}m=f[u>>2]|0;p=Ii(m|0,0,h|0,0)|0;q=F;n=f[y>>2]|0;s=Ii(n|0,0,i|0,0)|0;if(m>>>0<=k>>>0?n>>>0<=c>>>0&(p|0-q)>>>0>k>>>0&(s|0-F)>>>0>c>>>0:0){b=Le(o,52)|0;o=J+24|0;f[o>>2]=b;if(!b){f[I>>2]=0;Pd(g,1,13852,t)|0;g=0;l=M;return g|0}a:do if(f[I>>2]|0){k=a+168|0;c=0;i=b;while(1){ld(j,w,1);f[i+24>>2]=(f[w>>2]&127)+1;f[i+32>>2]=(f[w>>2]|0)>>>7;ld(j+1|0,w,1);f[i>>2]=f[w>>2];ld(j+2|0,w,1);h=f[w>>2]|0;f[i+4>>2]=h;b=f[i>>2]|0;if((h+-1|0)>>>0>254|(b+-1|0)>>>0>254)break;f[i+36>>2]=0;f[i+40>>2]=f[k>>2];c=c+1|0;if(c>>>0>=(f[I>>2]|0)>>>0)break a;else{j=j+3|0;i=i+52|0}}f[A>>2]=c;f[A+4>>2]=b;f[A+8>>2]=h;Pd(g,1,13900,A)|0;g=0;l=M;return g|0}while(0);m=f[u>>2]|0;k=f[v>>2]|0;j=((f[x>>2]|0)+-1-m+k|0)/(k|0)|0;f[a+112>>2]=j;i=f[y>>2]|0;h=f[z>>2]|0;b=((f[B>>2]|0)+-1-i+h|0)/(h|0)|0;f[a+116>>2]=b;if(!((b|0)==0|(j|0)==0)?j>>>0<=(65535/(b>>>0)|0)>>>0:0){n=ba(j,b)|0;c=a+28|0;if(!(d[a+76>>0]&2)){f[c>>2]=0;f[a+32>>2]=0;f[a+36>>2]=j;f[a+40>>2]=b}else{f[c>>2]=(((f[c>>2]|0)-m|0)>>>0)/(k>>>0)|0;C=a+32|0;f[C>>2]=(((f[C>>2]|0)-i|0)>>>0)/(h>>>0)|0;C=a+36|0;f[C>>2]=((f[C>>2]|0)+-1-m+k|0)/(k|0)|0;C=a+40|0;f[C>>2]=((f[C>>2]|0)+-1-i+h|0)/(h|0)|0}C=Le(n,5640)|0;j=a+164|0;f[j>>2]=C;if(!C){Pd(g,1,13852,D)|0;g=0;l=M;return g|0}D=Le(f[I>>2]|0,1080)|0;b=a+12|0;f[(f[b>>2]|0)+5584>>2]=D;if(!D){Pd(g,1,13852,E)|0;g=0;l=M;return g|0}E=Le(10,20)|0;c=f[b>>2]|0;f[c+5612>>2]=E;if(!E){Pd(g,1,13852,G)|0;g=0;l=M;return g|0}f[c+5620>>2]=10;G=Le(10,20)|0;c=f[b>>2]|0;f[c+5624>>2]=G;if(!G){Pd(g,1,13852,H)|0;g=0;l=M;return g|0}f[c+5632>>2]=10;i=f[I>>2]|0;if(i){h=f[o>>2]|0;c=c+5584|0;b=0;do{if(!(f[h+(b*52|0)+32>>2]|0))f[(f[c>>2]|0)+(b*1080|0)+1076>>2]=1<<(f[h+(b*52|0)+24>>2]|0)+-1;b=b+1|0}while(b>>>0>>0)}a:do if(n){c=f[j>>2]|0;H=Le(i,1080)|0;f[c+5584>>2]=H;if(H){b=0;while(1){b=b+1|0;if(b>>>0>=n>>>0)break a;H=Le(f[I>>2]|0,1080)|0;f[c+11224>>2]=H;if(!H)break;else c=c+5640|0}}Pd(g,1,13852,L)|0;g=0;l=M;return g|0}while(0);f[a+8>>2]=4;Vd(J,K);g=1;l=M;return g|0}f[C>>2]=j;f[C+4>>2]=b;Pd(g,1,14002,C)|0;g=0;l=M;return g|0}Pd(g,1,13808,r)|0;g=0;l=M;return g|0}}else{b=f[B>>2]|0;c=f[n>>2]|0}f[s>>2]=m-k;f[s+4>>2]=b-c;Pd(g,1,13643,s)|0;g=0;l=M;return g|0}function Za(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=l;l=l+32|0;a=e+12|0;if(c>>>0<2){Pd(d,1,13414,e)|0;d=0;l=e;return d|0}ld(b,e+16|0,1);ld(b+1|0,a,1);b=f[a>>2]|0;if(!(((c+-2|0)>>>0)%(((b>>>5&2)+2+(b>>>4&3)|0)>>>0)|0)){d=1;l=e;return d|0}Pd(d,1,13414,e+8|0)|0;d=0;l=e;return d|0}function $a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=l;l=l+16|0;if(!c){Pd(d,1,13388,a)|0;b=0}else b=1;l=a;return b|0}function _a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;j=l;l=l+32|0;i=j+8|0;h=j+12|0;if(!c){Pd(d,1,13362,j)|0;d=0;l=j;return d|0}ld(b,j+16|0,1);e=c+-1|0;if(!e){d=1;l=j;return d|0}else{g=0;a=0}do{b=b+1|0;ld(b,h,1);c=f[h>>2]|0;if(!(c&128))a=0;else a=(c&127|a)<<7;g=g+1|0}while((g|0)!=(e|0));if(!a){d=1;l=j;return d|0}Pd(d,1,13362,i)|0;d=0;l=j;return d|0}function ab(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+48|0;o=p+32|0;k=p+24|0;h=p+16|0;g=p+8|0;n=p+36|0;if(c>>>0<2){Pd(e,1,13276,p)|0;o=0;l=p;return o|0}m=a+184|0;d[m>>0]=d[m>>0]|1;ld(b,n,1);m=b+1|0;j=c+-1|0;i=a+124|0;c=f[i>>2]|0;do if(c){g=a+120|0;b=f[n>>2]|0;if((f[g>>2]|0)>>>0<=b>>>0){a=b+1|0;b=Oe(c,a<<3)|0;if(b){f[i>>2]=b;c=f[g>>2]|0;Gi(b+(c<<3)|0,0,a-c<<3|0)|0;f[g>>2]=a;c=f[i>>2]|0;break}Pd(e,1,13302,h)|0;o=0;l=p;return o|0}}else{b=(f[n>>2]|0)+1|0;c=Le(b,8)|0;f[i>>2]=c;if(c){f[a+120>>2]=b;break}Pd(e,1,13302,g)|0;o=0;l=p;return o|0}while(0);b=f[n>>2]|0;if(f[c+(b<<3)>>2]|0){f[k>>2]=b;Pd(e,1,13340,k)|0;o=0;l=p;return o|0}k=Ke(j)|0;c=f[n>>2]|0;b=f[i>>2]|0;f[b+(c<<3)>>2]=k;if(!k){Pd(e,1,13302,o)|0;o=0;l=p;return o|0}else{f[b+(c<<3)+4>>2]=j;Ki(f[b+(f[n>>2]<<3)>>2]|0,m|0,j|0)|0;o=1;l=p;return o|0}return 0}function bb(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+48|0;q=r+40|0;o=r+32|0;j=r+24|0;i=r+16|0;p=r+44|0;if(c>>>0<2){Pd(e,1,13127,r)|0;q=0;l=r;return q|0}if(d[a+184>>0]&1){Pd(e,1,13153,r+8|0)|0;q=0;l=r;return q|0}h=f[a+200>>2]|0;g=f[a+164>>2]|0;n=g+(h*5640|0)+5636|0;d[n>>0]=d[n>>0]|2;ld(b,p,1);n=b+1|0;m=c+-1|0;k=g+(h*5640|0)+5164|0;b=f[k>>2]|0;do if(b){g=g+(h*5640|0)+5160|0;a=f[p>>2]|0;if((f[g>>2]|0)>>>0<=a>>>0){c=a+1|0;a=Oe(b,c<<3)|0;if(a){f[k>>2]=a;b=f[g>>2]|0;Gi(a+(b<<3)|0,0,c-b<<3|0)|0;f[g>>2]=c;b=f[k>>2]|0;break}Pd(e,1,8775,j)|0;q=0;l=r;return q|0}}else{a=(f[p>>2]|0)+1|0;b=Le(a,8)|0;f[k>>2]=b;if(b){f[g+(h*5640|0)+5160>>2]=a;break}Pd(e,1,8775,i)|0;q=0;l=r;return q|0}while(0);a=f[p>>2]|0;if(f[b+(a<<3)>>2]|0){f[o>>2]=a;Pd(e,1,13254,o)|0;q=0;l=r;return q|0}o=Ke(m)|0;b=f[p>>2]|0;a=f[k>>2]|0;f[a+(b<<3)>>2]=o;if(!o){Pd(e,1,8775,q)|0;q=0;l=r;return q|0}else{f[a+(b<<3)+4>>2]=m;Ki(f[a+(f[p>>2]<<3)>>2]|0,n|0,m|0)|0;q=1;l=r;return q|0}return 0}function cb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=l;l=l+16|0;if((f[(f[a+80>>2]|0)+16>>2]<<2|0)==(c|0)){d=1;l=b;return d|0}Pd(d,1,13101,b)|0;d=0;l=b;return d|0}function db(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function eb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;r=s+40|0;q=s+32|0;k=s+24|0;p=s+44|0;if((f[a+8>>2]|0)==16)i=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else i=f[a+12>>2]|0;if(c>>>0<2){Pd(d,1,12933,s)|0;r=0;l=s;return r|0}ld(b,p,2);if(f[p>>2]|0){Pd(d,2,12959,s+8|0)|0;r=1;l=s;return r|0}if(c>>>0<7){Pd(d,1,12933,s+16|0)|0;r=0;l=s;return r|0}ld(b+2|0,p,2);n=b+4|0;o=f[p>>2]&255;j=i+5612|0;e=f[j>>2]|0;m=i+5616|0;a=f[m>>2]|0;a:do if(!a){g=0;h=e}else{g=0;h=e;do{if((f[h+8>>2]|0)==(o|0))break a;h=h+20|0;g=g+1|0}while(g>>>0>>0)}while(0);if((g|0)==(a|0)){g=i+5620|0;do if((a|0)==(f[g>>2]|0)){a=a+10|0;f[g>>2]=a;a=Oe(e,a*20|0)|0;if(a){f[j>>2]=a;e=f[m>>2]|0;Gi(a+(e*20|0)|0,0,((f[g>>2]|0)-e|0)*20|0)|0;e=f[j>>2]|0;a=f[m>>2]|0;break}Pe(f[j>>2]|0);f[j>>2]=0;f[g>>2]=0;f[m>>2]=0;Pd(d,1,13019,k)|0;r=0;l=s;return r|0}while(0);f[m>>2]=a+1;h=e+(a*20|0)|0}g=h+12|0;a=f[g>>2]|0;if(a){Pe(a);f[g>>2]=0}f[h+8>>2]=o;o=f[p>>2]|0;f[h+4>>2]=o>>>8&3;f[h>>2]=o>>>10&3;ld(n,p,2);if(f[p>>2]|0){Pd(d,2,13057,q)|0;r=1;l=s;return r|0}a=c+-6|0;e=Ke(a)|0;f[g>>2]=e;if(!e){Pd(d,1,12933,r)|0;r=0;l=s;return r|0}else{Ki(e|0,b+6|0,a|0)|0;f[h+16>>2]=a;r=1;l=s;return r|0}return 0}function fb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+16|0;h=i+12|0;a=a+80|0;g=f[(f[a>>2]|0)+16>>2]|0;if((g+2|0)!=(c|0)){Pd(d,1,12907,i)|0;h=0;l=i;return h|0}ld(b,e,2);if((f[e>>2]|0)!=(g|0)){Pd(d,1,12907,i+8|0)|0;h=0;l=i;return h|0}if(!g){h=1;l=i;return h|0}e=b+2|0;b=0;a=f[(f[a>>2]|0)+24>>2]|0;while(1){ld(e,h,1);f[a+32>>2]=(f[h>>2]|0)>>>7&1;f[a+24>>2]=(f[h>>2]&127)+1;b=b+1|0;if((b|0)==(g|0)){a=1;break}else{e=e+1|0;a=a+52|0}}l=i;return a|0}function gb(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=l;l=l+144|0;I=J+120|0;H=J+112|0;G=J+104|0;F=J+96|0;E=J+88|0;D=J+80|0;C=J+72|0;B=J+64|0;A=J+56|0;z=J+48|0;p=J+40|0;o=J+32|0;m=J+24|0;x=J+136|0;u=J+132|0;v=J+128|0;w=J+124|0;if((f[a+8>>2]|0)==16)q=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else q=f[a+12>>2]|0;if(c>>>0<2){Pd(e,1,12567,J)|0;I=0;l=J;return I|0}ld(b,x,2);if(f[x>>2]|0){Pd(e,2,12593,J+8|0)|0;I=1;l=J;return I|0}if(c>>>0<7){Pd(e,1,12567,J+16|0)|0;I=0;l=J;return I|0}ld(b+2|0,u,1);n=b+3|0;k=q+5624|0;g=f[k>>2]|0;y=q+5628|0;a=f[y>>2]|0;a:do if(!a){i=0;h=g}else{j=f[u>>2]|0;i=0;h=g;do{if((f[h>>2]|0)==(j|0))break a;h=h+20|0;i=i+1|0}while(i>>>0>>0)}while(0);if((i|0)==(a|0)){h=q+5632|0;do if((a|0)==(f[h>>2]|0)){a=a+10|0;f[h>>2]=a;a=Oe(g,a*20|0)|0;if(a){f[k>>2]=a;g=f[y>>2]|0;Gi(a+(g*20|0)|0,0,((f[h>>2]|0)-g|0)*20|0)|0;g=f[k>>2]|0;a=f[y>>2]|0;break}Pe(f[k>>2]|0);f[k>>2]=0;f[h>>2]=0;f[y>>2]=0;Pd(e,1,12639,m)|0;I=0;l=J;return I|0}while(0);h=g+(a*20|0)|0}f[h>>2]=f[u>>2];ld(n,x,2);if(f[x>>2]|0){Pd(e,2,12593,o)|0;I=1;l=J;return I|0}ld(b+5|0,v,2);g=f[v>>2]|0;if(g>>>0>1){Pd(e,2,12677,p)|0;I=1;l=J;return I|0}a=c+-7|0;a:do if(g){r=h+4|0;s=h+16|0;t=h+8|0;c=h+12|0;p=q+5612|0;o=q+5616|0;m=b+7|0;n=0;b:while(1){if(a>>>0<3){g=27;break}ld(m,x,1);if((f[x>>2]|0)!=1){g=29;break}ld(m+1|0,w,2);g=a+-3|0;i=f[w>>2]|0;j=(i>>>15)+1|0;i=i&32767;f[r>>2]=i;h=(ba(j,i)|0)+2|0;if(g>>>0>>0){g=31;break}a=m+3|0;k=g-h|0;if(i){g=0;do{ld(a,x,j);if((f[x>>2]|0)!=(g|0)){g=34;break b}a=a+j|0;g=g+1|0}while(g>>>0<(f[r>>2]|0)>>>0)}ld(a,w,2);g=a+2|0;h=f[w>>2]|0;i=(h>>>15)+1|0;h=h&32767;f[w>>2]=h;if((h|0)!=(f[r>>2]|0)){g=37;break}a=(ba(i,h)|0)+3|0;if(k>>>0>>0){g=39;break}a=k-a|0;if(h){h=0;do{ld(g,x,i);if((f[x>>2]|0)!=(h|0)){g=42;break b}g=g+i|0;h=h+1|0}while(h>>>0<(f[r>>2]|0)>>>0)}ld(g,x,3);m=g+3|0;d[s>>0]=((f[x>>2]|0)>>>16^1)&1|d[s>>0]&-2;f[t>>2]=0;f[c>>2]=0;k=f[x>>2]|0;h=k&255;f[u>>2]=h;if(h){i=f[o>>2]|0;if(!i){g=50;break}j=0;g=f[p>>2]|0;while(1){if((f[g+8>>2]|0)==(h|0))break;j=j+1|0;if(j>>>0>=i>>>0){g=50;break b}else g=g+20|0}f[t>>2]=g}h=k>>>8&255;f[u>>2]=h;if(h){i=f[o>>2]|0;if(!i){g=57;break}j=0;g=f[p>>2]|0;while(1){if((f[g+8>>2]|0)==(h|0))break;j=j+1|0;if(j>>>0>=i>>>0){g=57;break b}else g=g+20|0}f[c>>2]=g}n=n+1|0;if(n>>>0>=(f[v>>2]|0)>>>0)break a}if((g|0)==27){Pd(e,1,12567,z)|0;I=0;l=J;return I|0}else if((g|0)==29){Pd(e,2,12721,A)|0;I=1;l=J;return I|0}else if((g|0)==31){Pd(e,1,12567,B)|0;I=0;l=J;return I|0}else if((g|0)==34){Pd(e,2,12787,C)|0;I=1;l=J;return I|0}else if((g|0)==37){Pd(e,2,12841,D)|0;I=1;l=J;return I|0}else if((g|0)==39){Pd(e,1,12567,E)|0;I=0;l=J;return I|0}else if((g|0)==42){Pd(e,2,12787,F)|0;I=1;l=J;return I|0}else if((g|0)==50){Pd(e,1,12567,G)|0;I=0;l=J;return I|0}else if((g|0)==57){Pd(e,1,12567,H)|0;I=0;l=J;return I|0}}while(0);if(!a){f[y>>2]=(f[y>>2]|0)+1;I=1;l=J;return I|0}else{Pd(e,1,12567,I)|0;I=0;l=J;return I|0}return 0}function hb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+32|0;r=s+24|0;q=s+20|0;n=a+80|0;e=f[n>>2]|0;if((f[a+8>>2]|0)==16)g=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else g=f[a+12>>2]|0;if(!c){Pd(d,1,12486,s)|0;r=0;l=s;return r|0}ld(b,q,1);a=f[q>>2]|0;if(a>>>0>1){Pd(d,2,12512,s+8|0)|0;r=1;l=s;return r|0}if((a+1|0)!=(c|0)){Pd(d,2,12486,s+16|0)|0;r=0;l=s;return r|0}m=g+5584|0;a=f[e+16>>2]|0;if(a){c=0;d=f[m>>2]|0;while(1){f[d+1076>>2]=0;c=c+1|0;if(c>>>0>=a>>>0)break;else d=d+1080|0}}k=g+5604|0;a=f[k>>2]|0;if(a){Pe(a);f[k>>2]=0}if(!(f[q>>2]|0)){r=1;l=s;return r|0}j=g+5624|0;h=g+5628|0;i=0;while(1){b=b+1|0;ld(b,r,1);a=f[n>>2]|0;e=f[j>>2]|0;g=f[h>>2]|0;if(((g|0)!=0?!((g|0)==0?1:(f[e>>2]|0)!=(f[r>>2]|0)):0)?(o=f[e+4>>2]|0,p=a+16|0,(o|0)==(f[p>>2]|0)):0){a=f[e+8>>2]|0;if(a){c=ba(o,o)|0;g=ba(f[1036+(f[a>>2]<<2)>>2]|0,c)|0;if((f[a+16>>2]|0)!=(g|0)){a=0;c=32;break}d=Ke(c<<2)|0;f[k>>2]=d;if(!d){a=0;c=32;break}yj[f[1052+(f[a>>2]<<2)>>2]&15](f[a+12>>2]|0,d,c)}a=f[e+12>>2]|0;if(a){c=f[p>>2]|0;g=ba(c,f[1036+(f[a>>2]<<2)>>2]|0)|0;if((f[a+16>>2]|0)!=(g|0)){a=0;c=32;break}g=Ke(c<<2)|0;if(!g){a=0;c=32;break}yj[f[1068+(f[a>>2]<<2)>>2]&15](f[a+12>>2]|0,g,c);a=f[p>>2]|0;if(a){c=0;d=g;e=f[m>>2]|0;while(1){f[e+1076>>2]=f[d>>2];c=c+1|0;if((c|0)==(a|0))break;else{d=d+4|0;e=e+1080|0}}}Pe(g)}}i=i+1|0;if(i>>>0>=(f[q>>2]|0)>>>0){a=1;c=32;break}}if((c|0)==32){l=s;return a|0}return 0}function ib(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=l;l=l+16|0;e=g;if(!c){l=g;return}d=0;while(1){ld(a,e,2);f[b>>2]=f[e>>2];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+2|0}}l=g;return}function jb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=l;l=l+16|0;e=g;if(!c){l=g;return}d=0;while(1){ld(a,e,4);f[b>>2]=f[e>>2];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}l=g;return}function kb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=l;l=l+16|0;e=g;if(!c){l=g;return}d=0;while(1){pd(a,e);f[b>>2]=~~+j[e>>2];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}l=g;return}function lb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=l;l=l+16|0;e=g;if(!c){l=g;return}d=0;while(1){nd(a,e);f[b>>2]=~~+k[e>>3];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+8|0}}l=g;return}function mb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=l;l=l+16|0;e=g;if(!c){l=g;return}d=0;while(1){ld(a,e,2);j[b>>2]=+((f[e>>2]|0)>>>0);d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+2|0}}l=g;return}function nb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=l;l=l+16|0;e=g;if(!c){l=g;return}d=0;while(1){ld(a,e,4);j[b>>2]=+((f[e>>2]|0)>>>0);d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}l=g;return}function ob(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;g=l;l=l+16|0;e=g;if(!c){l=g;return}d=0;while(1){pd(a,e);f[b>>2]=f[e>>2];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}l=g;return}function pb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;f=l;l=l+16|0;e=f;if(!c){l=f;return}d=0;while(1){nd(a,e);j[b>>2]=+k[e>>3];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+8|0}}l=f;return}function qb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+8|0;j=n+20|0;if((f[a+8>>2]|0)==16)a=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else a=f[a+12>>2]|0;m=f[a+5584>>2]|0;a=f[d>>2]|0;if(!a){Pd(e,1,14224,n)|0;b=0;l=n;return b|0}f[d>>2]=a+-1;ld(c,j,1);c=c+1|0;g=f[j>>2]&31;i=m+(b*1080|0)+24|0;f[i>>2]=g;f[m+(b*1080|0)+804>>2]=(f[j>>2]|0)>>>5;do if((g|0)==1){a=1;k=8}else{a=(f[d>>2]|0)>>>((g|0)!=0&1);if(a>>>0>97){f[h>>2]=a;f[h+4>>2]=97;f[h+8>>2]=97;Pd(e,2,14260,h)|0;g=f[i>>2]|0}e=(a|0)==0;if(g)if(e){a=0;k=20;break}else{k=8;break}if(!e){g=0;while(1){ld(c,j,1);if(g>>>0<97){f[m+(b*1080|0)+28+(g<<3)>>2]=(f[j>>2]|0)>>>3;f[m+(b*1080|0)+28+(g<<3)+4>>2]=0}g=g+1|0;if((g|0)==(a|0))break;else c=c+1|0}}a=(f[d>>2]|0)-a|0}while(0);if((k|0)==8){g=0;while(1){ld(c,j,2);if(g>>>0<97){f[m+(b*1080|0)+28+(g<<3)>>2]=(f[j>>2]|0)>>>11;f[m+(b*1080|0)+28+(g<<3)+4>>2]=f[j>>2]&2047}g=g+1|0;if((g|0)==(a|0)){k=20;break}else c=c+2|0}}if((k|0)==20)a=(f[d>>2]|0)-(a<<1)|0;f[d>>2]=a;if((f[i>>2]|0)!=1){b=1;l=n;return b|0}a=m+(b*1080|0)+28|0;c=m+(b*1080|0)+32|0;g=1;do{d=(f[a>>2]|0)-(((g+-1|0)>>>0)/3|0)|0;f[m+(b*1080|0)+28+(g<<3)>>2]=(d|0)>0?d:0;f[m+(b*1080|0)+28+(g<<3)+4>>2]=f[c>>2];g=g+1|0}while((g|0)!=97);a=1;l=n;return a|0}function rb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+48|0;p=r+40|0;k=r+32|0;j=r+16|0;i=r+8|0;o=r+44|0;h=a+8|0;if((f[h>>2]|0)==16)g=(f[a+164>>2]|0)+((f[a+200>>2]|0)*5640|0)|0;else g=f[a+12>>2]|0;m=f[g+5584>>2]|0;if((f[d>>2]|0)>>>0<5){Pd(e,1,14664,r)|0;d=0;l=r;return d|0}n=m+(b*1080|0)+4|0;ld(c,n,1);g=(f[n>>2]|0)+1|0;f[n>>2]=g;if(g>>>0>33){f[i>>2]=g;f[i+4>>2]=33;Pd(e,1,14699,i)|0;d=0;l=r;return d|0}if((f[a+168>>2]|0)>>>0>=g>>>0){f[j>>2]=b;Pd(e,1,14776,j)|0;f[h>>2]=f[h>>2]|32768;d=0;l=r;return d|0}i=m+(b*1080|0)+8|0;ld(c+1|0,i,1);f[i>>2]=(f[i>>2]|0)+2;a=m+(b*1080|0)+12|0;ld(c+2|0,a,1);j=(f[a>>2]|0)+2|0;f[a>>2]=j;i=f[i>>2]|0;if(i>>>0>10|j>>>0>10|(i+j|0)>>>0>12){Pd(e,1,14934,r+24|0)|0;d=0;l=r;return d|0}ld(c+3|0,m+(b*1080|0)+16|0,1);ld(c+4|0,m+(b*1080|0)+20|0,1);h=(f[d>>2]|0)+-5|0;f[d>>2]=h;g=f[n>>2]|0;if(!(f[m+(b*1080|0)>>2]&1)){if(!g){d=1;l=r;return d|0}else g=0;do{f[m+(b*1080|0)+812+(g<<2)>>2]=15;f[m+(b*1080|0)+944+(g<<2)>>2]=15;g=g+1|0}while(g>>>0<(f[n>>2]|0)>>>0);g=1;l=r;return g|0}if(h>>>0>>0){Pd(e,1,14664,k)|0;d=0;l=r;return d|0}do if(!g)g=0;else{a=0;h=c+5|0;while(1){ld(h,o,1);h=h+1|0;g=f[o>>2]|0;if((a|0)!=0?g>>>0<16|(g&15|0)==0:0)break;f[m+(b*1080|0)+812+(a<<2)>>2]=g&15;f[m+(b*1080|0)+944+(a<<2)>>2]=(f[o>>2]|0)>>>4;a=a+1|0;g=f[n>>2]|0;if(a>>>0>=g>>>0){q=22;break}}if((q|0)==22){h=f[d>>2]|0;break}Pd(e,1,15002,p)|0;d=0;l=r;return d|0}while(0);f[d>>2]=h-g;d=1;l=r;return d|0}function sb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){kd(b,~~+j[a>>2]>>>0,2);d=d+1|0;if((d|0)==(c|0))break;else{b=b+2|0;a=a+4|0}}return}function tb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){kd(b,~~+j[a>>2]>>>0,4);d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}return}function ub(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){od(b,+j[a>>2]);d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}return}function vb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){md(b,+j[a>>2]);d=d+1|0;if((d|0)==(c|0))break;else{b=b+8|0;a=a+4|0}}return}function wb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;i=l;l=l+16|0;if(!c){c=0;l=i;return c|0}if(!(gf(f[a>>2]|0,b,c,d)|0)){Pd(d,1,16303,i)|0;c=0;l=i;return c|0}if(f[a+128>>2]|0){c=1;l=i;return c|0}h=a+108|0;if(!(Pb(c,h,d)|0)){c=0;l=i;return c|0}b=f[a+48>>2]|0;a:do switch(b|0){case 16:{f[c+20>>2]=1;break}case 17:{f[c+20>>2]=2;break}case 18:{f[c+20>>2]=3;break}case 24:{f[c+20>>2]=4;break}default:{e=c+20|0;if((b|0)==12){f[e>>2]=5;break a}else{f[e>>2]=-1;break a}}}while(0);g=a+120|0;b=f[g>>2]|0;do if(b){if(f[b+12>>2]|0){Qb(c,h);break}Pe(f[b+4>>2]|0);Pe(f[(f[g>>2]|0)+8>>2]|0);Pe(f[f[g>>2]>>2]|0);b=f[g>>2]|0;e=f[b+12>>2]|0;if(e){Pe(e);b=f[g>>2]|0}Pe(b);f[g>>2]=0}while(0);if(f[a+116>>2]|0)Rb(c,h,d);b=f[h>>2]|0;if(!b){c=1;l=i;return c|0}f[c+28>>2]=b;f[c+32>>2]=f[a+112>>2];f[h>>2]=0;c=1;l=i;return c|0}function xb(a,b){a=a|0;b=b|0;Re(f[a>>2]|0,b);d[a+124>>0]=0;f[a+128>>2]=f[b+8248>>2]&1;return}function yb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+80|0;v=w+64|0;s=w+56|0;o=w+48|0;r=w+40|0;q=w+32|0;p=w+24|0;if(!((a|0)!=0&(b|0)!=0&(c|0)!=0)){b=0;l=w;return b|0}t=c+16|0;if(((f[t>>2]|0)+-1|0)>>>0>16383){Pd(d,1,16352,w)|0;b=0;l=w;return b|0}if(!(Ue(f[a>>2]|0,b,c,d)|0)){b=0;l=w;return b|0}f[a+56>>2]=1785737760;f[a+60>>2]=0;f[a+64>>2]=1;g=Ke(4)|0;h=a+68|0;f[h>>2]=g;if(!g){f[h>>2]=0;Pd(d,1,16421,w+8|0)|0;b=0;l=w;return b|0}f[g>>2]=1785737760;k=f[t>>2]|0;f[a+20>>2]=k;k=Ke(k*12|0)|0;g=a+72|0;f[g>>2]=k;if(!k){f[g>>2]=0;Pd(d,1,16421,w+16|0)|0;b=0;l=w;return b|0}f[a+16>>2]=(f[c+12>>2]|0)-(f[c+4>>2]|0);f[a+12>>2]=(f[c+8>>2]|0)-(f[c>>2]|0);u=c+24|0;m=f[u>>2]|0;i=f[m+24>>2]|0;j=f[m+32>>2]|0;g=a+24|0;f[g>>2]=i+-1+(j<<7);n=f[t>>2]|0;if(n>>>0>1){h=1;do{if((i|0)!=(f[m+(h*52|0)+24>>2]|0))f[g>>2]=255;h=h+1|0}while(h>>>0>>0)}f[a+28>>2]=7;f[a+32>>2]=0;f[a+36>>2]=0;h=(n|0)==0;if(!h?(f[k+8>>2]=i+-1+(j<<7),n>>>0>1):0){g=1;do{f[k+(g*12|0)+8>>2]=(f[m+(g*52|0)+24>>2]|0)+-1+(f[m+(g*52|0)+32>>2]<<7);g=g+1|0}while(g>>>0>>0)}g=a+40|0;a:do if(!(f[c+32>>2]|0)){f[g>>2]=1;switch(f[c+20>>2]|0){case 1:{f[a+48>>2]=16;break a}case 2:{f[a+48>>2]=17;break a}case 3:{f[a+48>>2]=18;break a}default:break a}}else{f[g>>2]=2;f[a+48>>2]=0}while(0);a:do if(!h){h=0;g=0;i=0;do{c=(e[m+(i*52|0)+48>>1]|0)==0;g=(c&1^1)+g|0;h=c?h:i;i=i+1|0}while(i>>>0>>0);i=h;if((g|0)!=1){if(g>>>0<=1)break;Pd(d,2,16717,o)|0;break}switch(f[a+48>>2]|0){case 18:case 16:{h=3;break}case 17:{h=1;break}default:{Pd(d,2,16467,p)|0;break a}}if(n>>>0<(h+1|0)>>>0){Pd(d,2,16541,q)|0;break}if(i>>>0>>0){Pd(d,2,16634,r)|0;break}r=Ke(8)|0;g=a+116|0;f[g>>2]=r;if(!r){Pd(d,1,16782,s)|0;b=0;l=w;return b|0}s=Ke((f[t>>2]|0)*6|0)|0;c=f[g>>2]|0;f[c>>2]=s;if(!s){Pd(d,1,16782,v)|0;b=0;l=w;return b|0}k=f[t>>2]|0;e[c+4>>1]=k;j=f[c>>2]|0;g=0;do{e[j+(g*6|0)>>1]=g;e[j+(g*6|0)+2>>1]=0;v=g;g=g+1|0;e[j+(v*6|0)+4>>1]=g}while((g|0)!=(h|0));if(h>>>0>>0){i=f[u>>2]|0;do{v=(e[i+(h*52|0)+48>>1]|0)==0;e[j+(h*6|0)>>1]=h;g=j+(h*6|0)+2|0;if(v){e[g>>1]=-1;e[j+(h*6|0)+4>>1]=-1}else{e[g>>1]=1;e[(f[c>>2]|0)+(h*6|0)+4>>1]=0}h=h+1|0}while(h>>>0>>0)}}while(0);f[a+52>>2]=0;f[a+44>>2]=0;f[a+96>>2]=f[b+18692>>2];b=1;l=w;return b|0}function zb(a,b,c){a=a|0;b=b|0;c=c|0;return kf(f[a>>2]|0,b,c)|0}function Ab(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;d=a+8|0;if(!(ig(f[d>>2]|0,52,c)|0)){c=0;return c|0}g=f[d>>2]|0;h=jg(g)|0;d=kg(g)|0;if(h){i=0;e=1;while(1){if(!e)e=0;else e=(sj[f[d>>2]&63](a,b,c)|0)!=0;i=i+1|0;if((i|0)==(h|0))break;else{d=d+4|0;e=e&1}}lg(g);if(!e){c=0;return c|0}}else lg(g);c=We(f[a>>2]|0,b,c)|0;return c|0}function Bb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0;d=a+8|0;if(!(ig(f[d>>2]|0,53,c)|0)){c=0;return c|0}if(!(lf(f[a>>2]|0,b,c)|0)){c=0;return c|0}i=f[d>>2]|0;g=jg(i)|0;d=kg(i)|0;if(!g)d=1;else{h=0;e=d;d=1;while(1){if(!d)d=0;else d=(sj[f[e>>2]&63](a,b,c)|0)!=0;d=d&1;h=h+1|0;if((h|0)==(g|0))break;else e=e+4|0}}lg(i);c=d;return c|0}function Cb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;e=a+4|0;if(!(ig(f[e>>2]|0,54,d)|0)){b=0;return b|0}h=f[e>>2]|0;i=jg(h)|0;e=kg(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(sj[f[e>>2]&63](a,b,d)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{e=e+4|0;g=g&1}}lg(h);if(!g){b=0;return b|0}}else lg(h);e=a+8|0;if(!(ig(f[e>>2]|0,55,d)|0)){b=0;return b|0}if(!(ig(f[e>>2]|0,56,d)|0)){b=0;return b|0}if(!(ig(f[e>>2]|0,57,d)|0)){b=0;return b|0}if((f[a+96>>2]|0)!=0?(ig(f[e>>2]|0,58,d)|0)==0:0){b=0;return b|0}if(!(ig(f[e>>2]|0,59,d)|0)){b=0;return b|0}h=f[e>>2]|0;i=jg(h)|0;e=kg(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(sj[f[e>>2]&63](a,b,d)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{e=e+4|0;g=g&1}}lg(h);if(!g){b=0;return b|0}}else lg(h);b=mf(f[a>>2]|0,b,c,d)|0;return b|0}function Db(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;k=b+8|0;if(!(ig(f[k>>2]|0,52,d)|0)){a=0;return a|0}h=f[b+4>>2]|0;i=jg(h)|0;e=kg(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(sj[f[e>>2]&63](b,a,d)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{e=e+4|0;g=g&1}}lg(h);if(!g){a=0;return a|0}}else lg(h);h=f[k>>2]|0;i=jg(h)|0;e=kg(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(sj[f[e>>2]&63](b,a,d)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{e=e+4|0;g=g&1}}lg(h);if(!g){a=0;return a|0}}else lg(h);a=Xe(a,f[b>>2]|0,c,d)|0;return a|0}function Eb(a,b,c,d,e,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return Ze(f[a>>2]|0,b,c,d,e,g,h,i,j,k,l)|0}function Fb(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;return nf(f[a>>2]|0,b,c,d,e,g)|0}function Gb(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;return $e(f[a>>2]|0,b,c,d,e,g)|0}function Hb(a){a=a|0;var b=0,c=0,d=0;if(!a)return;Te(f[a>>2]|0);f[a>>2]=0;b=a+72|0;c=f[b>>2]|0;if(c){Pe(c);f[b>>2]=0}b=a+68|0;c=f[b>>2]|0;if(c){Pe(c);f[b>>2]=0}b=a+108|0;c=f[b>>2]|0;if(c){Pe(c);f[b>>2]=0}d=a+116|0;b=f[d>>2]|0;if(b){c=f[b>>2]|0;if(c){Pe(c);b=f[d>>2]|0;f[b>>2]=0}Pe(b);f[d>>2]=0}d=a+120|0;b=f[d>>2]|0;if(b){c=f[b+12>>2]|0;if(c){Pe(c);b=f[d>>2]|0;f[b+12>>2]=0}c=f[b+4>>2]|0;if(c){Pe(c);b=f[d>>2]|0;f[b+4>>2]=0}c=f[b+8>>2]|0;if(c){Pe(c);b=f[d>>2]|0;f[b+8>>2]=0}c=f[b>>2]|0;if(c){Pe(c);b=f[d>>2]|0;f[b>>2]=0}Pe(b);f[d>>2]=0}b=a+4|0;c=f[b>>2]|0;if(c){hg(c);f[b>>2]=0}b=a+8|0;c=f[b>>2]|0;if(c){hg(c);f[b>>2]=0}Pe(a);return}function Ib(a,b,c,d,e,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;h=h|0;return _e(f[a>>2]|0,b,c,d,e,g,h)|0}function Jb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0;i=l;l=l+16|0;if(!c){a=0;l=i;return a|0}Pd(d,2,16826,i)|0;if(!(hf(f[a>>2]|0,b,c,d,e)|0)){Pd(d,1,16303,i+8|0)|0;a=0;l=i;return a|0}h=a+108|0;if(!(Pb(c,h,d)|0)){a=0;l=i;return a|0}e=f[a+48>>2]|0;a:do switch(e|0){case 16:{f[c+20>>2]=1;break}case 17:{f[c+20>>2]=2;break}case 18:{f[c+20>>2]=3;break}case 24:{f[c+20>>2]=4;break}default:{b=c+20|0;if((e|0)==12){f[b>>2]=5;break a}else{f[b>>2]=-1;break a}}}while(0);g=a+120|0;b=f[g>>2]|0;do if(b){if(f[b+12>>2]|0){Qb(c,h);break}Pe(f[b+4>>2]|0);Pe(f[(f[g>>2]|0)+8>>2]|0);Pe(f[f[g>>2]>>2]|0);b=f[g>>2]|0;e=f[b+12>>2]|0;if(e){Pe(e);b=f[g>>2]|0}Pe(b);f[g>>2]=0}while(0);if(f[a+116>>2]|0)Rb(c,h,d);b=f[h>>2]|0;if(!b){a=1;l=i;return a|0}f[c+28>>2]=b;f[c+32>>2]=f[a+112>>2];f[h>>2]=0;a=1;l=i;return a|0}function Kb(a){a=a|0;var b=0;b=Le(1,136)|0;if(!b)return b|0;if(!a){a=Se()|0;f[b>>2]=a}else{a=af()|0;f[b>>2]=a}if(!a){Hb(b);b=0;return b|0}a=b+108|0;f[a>>2]=0;f[a+4>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;d[a+16>>0]=0;a=gg()|0;f[b+4>>2]=a;if(!a){Hb(b);b=0;return b|0}a=gg()|0;f[b+8>>2]=a;if(a)return b|0;Hb(b);b=0;return b|0}function Lb(a,b,c){a=a|0;b=b|0;c=c|0;bf(f[a>>2]|0,b,c);return}function Mb(a){a=a|0;return ff(f[a>>2]|0)|0}function Nb(a){a=a|0;return ef(f[a>>2]|0)|0}function Ob(a,b,c){a=a|0;b=b|0;c=c|0;return jf(f[a>>2]|0,b,c)|0}function Pb(a,b,c){a=a|0;b=b|0;c=c|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=l;l=l+80|0;A=B+72|0;z=B+64|0;y=B+56|0;x=B+48|0;w=B+40|0;v=B+32|0;u=B+24|0;s=B+16|0;o=B+8|0;n=B;i=f[b+8>>2]|0;a:do if(i){r=f[i>>2]|0;q=e[i+4>>1]|0;i=f[a+16>>2]|0;p=f[b+12>>2]|0;if((p|0)!=0?(f[p+12>>2]|0)!=0:0)b=g[p+18>>0]|0;else b=i;m=q<<16>>16==0;b:do if(!m){k=0;c:while(1){j=k&65535;i=h[r+(j*6|0)>>1]|0;if(i>>>0>=b>>>0){j=15;break}i=e[r+(j*6|0)+4>>1]|0;switch(i<<16>>16){case 0:case-1:break;default:{i=(i&65535)+-1|0;if(i>>>0>=b>>>0){j=18;break c}}}k=k+1<<16>>16;if((k&65535)>=(q&65535))break b}if((j|0)==15){f[n>>2]=i;f[n+4>>2]=b;Pd(c,1,19343,n)|0;c=0;l=B;return c|0}else if((j|0)==18){f[o>>2]=i;f[o+4>>2]=b;Pd(c,1,19343,o)|0;c=0;l=B;return c|0}}while(0);if(!b)i=p;else{b:do if(!m)while(1){b=b+-1|0;i=0;do{if((h[r+((i&65535)*6|0)>>1]|0)==(b|0))break;i=i+1<<16>>16}while((i&65535)<(q&65535));if(i<<16>>16==q<<16>>16)break b;if(!b){i=p;break a}}while(0);Pd(c,1,19380,s)|0;c=0;l=B;return c|0}}else i=f[b+12>>2]|0;while(0);if(!i){c=1;l=B;return c|0}t=f[i+12>>2]|0;if(!t){c=1;l=B;return c|0}p=d[i+18>>0]|0;s=p&255;r=p<<24>>24==0;if(r)i=1;else{k=a+16|0;b=0;m=0;i=1;do{b=h[t+(b<<2)>>1]|0;j=f[k>>2]|0;if(b>>>0>=j>>>0){f[u>>2]=b;f[u+4>>2]=j;Pd(c,1,19343,u)|0;i=0}m=m+1<<16>>16;b=m&65535}while(b>>>0>>0)}q=Le(s,4)|0;if(!q){Pd(c,1,19413,v)|0;c=0;l=B;return c|0}if(!r){n=0;o=0;do{j=d[t+(n<<2)+3>>0]|0;k=j&255;do if((j&255)<(p&255)){m=q+(k<<2)|0;b=d[t+(n<<2)+2>>0]|0;if((f[m>>2]|0)!=0&b<<24>>24==1){f[x>>2]=k;Pd(c,1,19486,x)|0;i=0;break}if(b<<24>>24!=0|j<<24>>24==0){f[m>>2]=1;break}else{f[y>>2]=n;f[y+4>>2]=k;Pd(c,1,19517,y)|0;i=0;break}}else{f[w>>2]=k;Pd(c,1,19430,w)|0;i=0}while(0);o=o+1<<16>>16;n=o&65535}while(n>>>0>>0);if(!r){b=0;j=0;do{if((f[q+(b<<2)>>2]|0)==0?(d[t+(b<<2)+2>>0]|0)!=0:0){f[z>>2]=b;Pd(c,1,19553,z)|0;i=0}j=j+1<<16>>16;b=j&65535}while(b>>>0>>0)}}if(!i){Pe(q);c=0;l=B;return c|0}a:do if(!((f[a+16>>2]|0)!=1|r)){i=0;b=0;while(1){b=b+1<<16>>16;if(!(f[q+(i<<2)>>2]|0))break;i=b&65535;if(i>>>0>=s>>>0)break a}f[A>>2]=i;Pd(c,2,19591,A)|0;if(!r){i=0;b=0;do{d[t+(i<<2)+2>>0]=1;d[t+(i<<2)+3>>0]=b;b=b+1<<16>>16;i=b&65535}while(i>>>0>>0)}}while(0);Pe(q);c=1;l=B;return c|0}function Qb(a,b){a=a|0;b=b|0;var c=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=b+12|0;b=f[w>>2]|0;m=f[b+8>>2]|0;o=f[b+4>>2]|0;q=f[b>>2]|0;r=f[b+12>>2]|0;b=d[b+18>>0]|0;s=a+24|0;t=f[s>>2]|0;u=b&255;v=Ke(u*52|0)|0;if(!v)return;n=b<<24>>24==0;if(!n){k=0;l=0;do{b=e[r+(k<<2)>>1]|0;if(!(d[r+(k<<2)+2>>0]|0)){b=b&65535;c=v+(k*52|0)|0;i=t+(b*52|0)|0;j=c+52|0;do{f[c>>2]=f[i>>2];c=c+4|0;i=i+4|0}while((c|0)<(j|0))}else{b=b&65535;c=v+((g[r+(k<<2)+3>>0]|0)*52|0)|0;i=t+(b*52|0)|0;j=c+52|0;do{f[c>>2]=f[i>>2];c=c+4|0;i=i+4|0}while((c|0)<(j|0))}j=Ke(ba(f[t+(b*52|0)+8>>2]<<2,f[t+(b*52|0)+12>>2]|0)|0)|0;f[v+(k*52|0)+44>>2]=j;if(!j){p=7;break}f[v+(k*52|0)+24>>2]=g[m+k>>0];f[v+(k*52|0)+32>>2]=g[o+k>>0];l=l+1<<16>>16;k=l&65535}while(k>>>0>>0);if((p|0)==7){Pe(v);return}m=(h[(f[w>>2]|0)+16>>1]|0)+-1|0;if(!n){b=0;l=0;do{j=f[t+((h[r+(b<<2)>>1]|0)*52|0)+44>>2]|0;i=g[r+(b<<2)+3>>0]|0;k=ba(f[v+(i*52|0)+12>>2]|0,f[v+(i*52|0)+8>>2]|0)|0;if(!(d[r+(b<<2)+2>>0]|0)){b=f[v+(b*52|0)+44>>2]|0;if(k){c=0;do{f[b+(c<<2)>>2]=f[j+(c<<2)>>2];c=c+1|0}while((c|0)!=(k|0))}}else{b=f[v+(i*52|0)+44>>2]|0;if(k){c=0;do{p=f[j+(c<<2)>>2]|0;f[b+(c<<2)>>2]=f[q+((ba((p|0)<0?0:(p|0)>(m|0)?m:p,u)|0)+i<<2)>>2];c=c+1|0}while((c|0)!=(k|0))}}l=l+1<<16>>16;b=l&65535}while(b>>>0>>0)}}c=a+16|0;i=f[c>>2]|0;if(i){b=0;j=0;do{b=f[t+(b*52|0)+44>>2]|0;if(b)Pe(b);j=j+1<<16>>16;b=j&65535}while(b>>>0>>0)}Pe(t);f[s>>2]=v;f[c>>2]=u;Pe(f[(f[w>>2]|0)+4>>2]|0);Pe(f[(f[w>>2]|0)+8>>2]|0);Pe(f[f[w>>2]>>2]|0);b=f[w>>2]|0;c=f[b+12>>2]|0;if(c){Pe(c);b=f[w>>2]|0}Pe(b);f[w>>2]=0;return}function Rb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;