|  | @@ -22,8 +22,8 @@ if (typeof PDFJS === 'undefined') {
 | 
	
		
			
				|  |  |    (typeof window !== 'undefined' ? window : this).PDFJS = {};
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -PDFJS.version = '1.0.1013';
 | 
	
		
			
				|  |  | -PDFJS.build = '4a2c38f';
 | 
	
		
			
				|  |  | +PDFJS.version = '1.0.1015';
 | 
	
		
			
				|  |  | +PDFJS.build = 'a018e93';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  (function pdfjsWrapper() {
 | 
	
		
			
				|  |  |    // Use strict in our context only - users might not want it
 | 
	
	
		
			
				|  | @@ -3072,6 +3072,9 @@ var MAX_FONT_SIZE = 100;
 | 
	
		
			
				|  |  |  var MAX_GROUP_SIZE = 4096;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  var COMPILE_TYPE3_GLYPHS = true;
 | 
	
		
			
				|  |  | +var MAX_SIZE_TO_COMPILE = 1000;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +var FULL_CHUNK_HEIGHT = 16;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  function createScratchCanvas(width, height) {
 | 
	
		
			
				|  |  |    var canvas = document.createElement('canvas');
 | 
	
	
		
			
				|  | @@ -3205,7 +3208,7 @@ var CachedCanvases = (function CachedCanvasesClosure() {
 | 
	
		
			
				|  |  |      getCanvas: function CachedCanvases_getCanvas(id, width, height,
 | 
	
		
			
				|  |  |                                                   trackTransform) {
 | 
	
		
			
				|  |  |        var canvasEntry;
 | 
	
		
			
				|  |  | -      if (id in cache) {
 | 
	
		
			
				|  |  | +      if (cache[id] !== undefined) {
 | 
	
		
			
				|  |  |          canvasEntry = cache[id];
 | 
	
		
			
				|  |  |          canvasEntry.canvas.width = width;
 | 
	
		
			
				|  |  |          canvasEntry.canvas.height = height;
 | 
	
	
		
			
				|  | @@ -3419,6 +3422,7 @@ var CanvasExtraState = (function CanvasExtraStateClosure() {
 | 
	
		
			
				|  |  |      // Default fore and background colors
 | 
	
		
			
				|  |  |      this.fillColor = '#000000';
 | 
	
		
			
				|  |  |      this.strokeColor = '#000000';
 | 
	
		
			
				|  |  | +    this.patternFill = false;
 | 
	
		
			
				|  |  |      // Note: fill alpha applies to all non-stroking operations
 | 
	
		
			
				|  |  |      this.fillAlpha = 1;
 | 
	
		
			
				|  |  |      this.strokeAlpha = 1;
 | 
	
	
		
			
				|  | @@ -3491,13 +3495,11 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |      // that's ok; any such pixels are ignored.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      var height = imgData.height, width = imgData.width;
 | 
	
		
			
				|  |  | -    var fullChunkHeight = 16;
 | 
	
		
			
				|  |  | -    var fracChunks = height / fullChunkHeight;
 | 
	
		
			
				|  |  | -    var fullChunks = Math.floor(fracChunks);
 | 
	
		
			
				|  |  | -    var totalChunks = Math.ceil(fracChunks);
 | 
	
		
			
				|  |  | -    var partialChunkHeight = height - fullChunks * fullChunkHeight;
 | 
	
		
			
				|  |  | +    var partialChunkHeight = height % FULL_CHUNK_HEIGHT;
 | 
	
		
			
				|  |  | +    var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
 | 
	
		
			
				|  |  | +    var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    var chunkImgData = ctx.createImageData(width, fullChunkHeight);
 | 
	
		
			
				|  |  | +    var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
 | 
	
		
			
				|  |  |      var srcPos = 0, destPos;
 | 
	
		
			
				|  |  |      var src = imgData.data;
 | 
	
		
			
				|  |  |      var dest = chunkImgData.data;
 | 
	
	
		
			
				|  | @@ -3517,7 +3519,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |          0xFF000000 : 0x000000FF;
 | 
	
		
			
				|  |  |        for (i = 0; i < totalChunks; i++) {
 | 
	
		
			
				|  |  |          thisChunkHeight =
 | 
	
		
			
				|  |  | -          (i < fullChunks) ? fullChunkHeight : partialChunkHeight;
 | 
	
		
			
				|  |  | +          (i < fullChunks) ? FULL_CHUNK_HEIGHT : partialChunkHeight;
 | 
	
		
			
				|  |  |          destPos = 0;
 | 
	
		
			
				|  |  |          for (j = 0; j < thisChunkHeight; j++) {
 | 
	
		
			
				|  |  |            var srcDiff = srcLength - srcPos;
 | 
	
	
		
			
				|  | @@ -3552,19 +3554,19 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |            dest32[destPos++] = 0;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        ctx.putImageData(chunkImgData, 0, i * fullChunkHeight);
 | 
	
		
			
				|  |  | +        ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      } else if (imgData.kind === ImageKind.RGBA_32BPP) {
 | 
	
		
			
				|  |  |        // RGBA, 32-bits per pixel.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        j = 0;
 | 
	
		
			
				|  |  | -      elemsInThisChunk = width * fullChunkHeight * 4;
 | 
	
		
			
				|  |  | +      elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;
 | 
	
		
			
				|  |  |        for (i = 0; i < fullChunks; i++) {
 | 
	
		
			
				|  |  |          dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
 | 
	
		
			
				|  |  |          srcPos += elemsInThisChunk;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          ctx.putImageData(chunkImgData, 0, j);
 | 
	
		
			
				|  |  | -        j += fullChunkHeight;
 | 
	
		
			
				|  |  | +        j += FULL_CHUNK_HEIGHT;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        if (i < totalChunks) {
 | 
	
		
			
				|  |  |          elemsInThisChunk = width * partialChunkHeight * 4;
 | 
	
	
		
			
				|  | @@ -3574,11 +3576,11 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      } else if (imgData.kind === ImageKind.RGB_24BPP) {
 | 
	
		
			
				|  |  |        // RGB, 24-bits per pixel.
 | 
	
		
			
				|  |  | -      thisChunkHeight = fullChunkHeight;
 | 
	
		
			
				|  |  | +      thisChunkHeight = FULL_CHUNK_HEIGHT;
 | 
	
		
			
				|  |  |        elemsInThisChunk = width * thisChunkHeight;
 | 
	
		
			
				|  |  |        for (i = 0; i < totalChunks; i++) {
 | 
	
		
			
				|  |  |          if (i >= fullChunks) {
 | 
	
		
			
				|  |  | -          thisChunkHeight =partialChunkHeight;
 | 
	
		
			
				|  |  | +          thisChunkHeight = partialChunkHeight;
 | 
	
		
			
				|  |  |            elemsInThisChunk = width * thisChunkHeight;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -3589,7 +3591,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |            dest[destPos++] = src[srcPos++];
 | 
	
		
			
				|  |  |            dest[destPos++] = 255;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        ctx.putImageData(chunkImgData, 0, i * fullChunkHeight);
 | 
	
		
			
				|  |  | +        ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      } else {
 | 
	
		
			
				|  |  |        error('bad image kind: ' + imgData.kind);
 | 
	
	
		
			
				|  | @@ -3598,20 +3600,18 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    function putBinaryImageMask(ctx, imgData) {
 | 
	
		
			
				|  |  |      var height = imgData.height, width = imgData.width;
 | 
	
		
			
				|  |  | -    var fullChunkHeight = 16;
 | 
	
		
			
				|  |  | -    var fracChunks = height / fullChunkHeight;
 | 
	
		
			
				|  |  | -    var fullChunks = Math.floor(fracChunks);
 | 
	
		
			
				|  |  | -    var totalChunks = Math.ceil(fracChunks);
 | 
	
		
			
				|  |  | -    var partialChunkHeight = height - fullChunks * fullChunkHeight;
 | 
	
		
			
				|  |  | +    var partialChunkHeight = height % FULL_CHUNK_HEIGHT;
 | 
	
		
			
				|  |  | +    var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
 | 
	
		
			
				|  |  | +    var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    var chunkImgData = ctx.createImageData(width, fullChunkHeight);
 | 
	
		
			
				|  |  | +    var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
 | 
	
		
			
				|  |  |      var srcPos = 0;
 | 
	
		
			
				|  |  |      var src = imgData.data;
 | 
	
		
			
				|  |  |      var dest = chunkImgData.data;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      for (var i = 0; i < totalChunks; i++) {
 | 
	
		
			
				|  |  |        var thisChunkHeight =
 | 
	
		
			
				|  |  | -        (i < fullChunks) ? fullChunkHeight : partialChunkHeight;
 | 
	
		
			
				|  |  | +        (i < fullChunks) ? FULL_CHUNK_HEIGHT : partialChunkHeight;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        // Expand the mask so it can be used by the canvas.  Any required
 | 
	
		
			
				|  |  |        // inversion has already been handled.
 | 
	
	
		
			
				|  | @@ -3628,7 +3628,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |            mask >>= 1;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      ctx.putImageData(chunkImgData, 0, i * fullChunkHeight);
 | 
	
		
			
				|  |  | +      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -3638,14 +3638,14 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |                        'globalCompositeOperation', 'font'];
 | 
	
		
			
				|  |  |      for (var i = 0, ii = properties.length; i < ii; i++) {
 | 
	
		
			
				|  |  |        var property = properties[i];
 | 
	
		
			
				|  |  | -      if (property in sourceCtx) {
 | 
	
		
			
				|  |  | +      if (sourceCtx[property] !== undefined) {
 | 
	
		
			
				|  |  |          destCtx[property] = sourceCtx[property];
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    if ('setLineDash' in sourceCtx) {
 | 
	
		
			
				|  |  | +    if (sourceCtx.setLineDash !== undefined) {
 | 
	
		
			
				|  |  |        destCtx.setLineDash(sourceCtx.getLineDash());
 | 
	
		
			
				|  |  |        destCtx.lineDashOffset =  sourceCtx.lineDashOffset;
 | 
	
		
			
				|  |  | -    } else if ('mozDash' in sourceCtx) {
 | 
	
		
			
				|  |  | +    } else if (sourceCtx.mozDashOffset !== undefined) {
 | 
	
		
			
				|  |  |        destCtx.mozDash = sourceCtx.mozDash;
 | 
	
		
			
				|  |  |        destCtx.mozDashOffset = sourceCtx.mozDashOffset;
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -3872,7 +3872,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      setDash: function CanvasGraphics_setDash(dashArray, dashPhase) {
 | 
	
		
			
				|  |  |        var ctx = this.ctx;
 | 
	
		
			
				|  |  | -      if ('setLineDash' in ctx) {
 | 
	
		
			
				|  |  | +      if (ctx.setLineDash !== undefined) {
 | 
	
		
			
				|  |  |          ctx.setLineDash(dashArray);
 | 
	
		
			
				|  |  |          ctx.lineDashOffset = dashPhase;
 | 
	
		
			
				|  |  |        } else {
 | 
	
	
		
			
				|  | @@ -4115,10 +4115,10 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |        consumePath = typeof consumePath !== 'undefined' ? consumePath : true;
 | 
	
		
			
				|  |  |        var ctx = this.ctx;
 | 
	
		
			
				|  |  |        var fillColor = this.current.fillColor;
 | 
	
		
			
				|  |  | +      var isPatternFill = this.current.patternFill;
 | 
	
		
			
				|  |  |        var needRestore = false;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      if (fillColor && fillColor.hasOwnProperty('type') &&
 | 
	
		
			
				|  |  | -          fillColor.type === 'Pattern') {
 | 
	
		
			
				|  |  | +      if (isPatternFill) {
 | 
	
		
			
				|  |  |          ctx.save();
 | 
	
		
			
				|  |  |          ctx.fillStyle = fillColor.getPattern(ctx, this);
 | 
	
		
			
				|  |  |          needRestore = true;
 | 
	
	
		
			
				|  | @@ -4592,6 +4592,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      setFillColorN: function CanvasGraphics_setFillColorN(/*...*/) {
 | 
	
		
			
				|  |  |        this.current.fillColor = this.getColorN_Pattern(arguments);
 | 
	
		
			
				|  |  | +      this.current.patternFill = true;
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) {
 | 
	
		
			
				|  |  |        var color = Util.makeCssRgb(r, g, b);
 | 
	
	
		
			
				|  | @@ -4602,6 +4603,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |        var color = Util.makeCssRgb(r, g, b);
 | 
	
		
			
				|  |  |        this.ctx.fillStyle = color;
 | 
	
		
			
				|  |  |        this.current.fillColor = color;
 | 
	
		
			
				|  |  | +      this.current.patternFill = false;
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      shadingFill: function CanvasGraphics_shadingFill(patternIR) {
 | 
	
	
		
			
				|  | @@ -4860,11 +4862,12 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |      paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) {
 | 
	
		
			
				|  |  |        var ctx = this.ctx;
 | 
	
		
			
				|  |  |        var width = img.width, height = img.height;
 | 
	
		
			
				|  |  | +      var fillColor = this.current.fillColor;
 | 
	
		
			
				|  |  | +      var isPatternFill = this.current.patternFill;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        var glyph = this.processingType3;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      if (COMPILE_TYPE3_GLYPHS && glyph && !('compiled' in glyph)) {
 | 
	
		
			
				|  |  | -        var MAX_SIZE_TO_COMPILE = 1000;
 | 
	
		
			
				|  |  | +      if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) {
 | 
	
		
			
				|  |  |          if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) {
 | 
	
		
			
				|  |  |            glyph.compiled =
 | 
	
		
			
				|  |  |              compileType3Glyph({data: img.data, width: width, height: height});
 | 
	
	
		
			
				|  | @@ -4886,9 +4889,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        maskCtx.globalCompositeOperation = 'source-in';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      var fillColor = this.current.fillColor;
 | 
	
		
			
				|  |  | -      maskCtx.fillStyle = (fillColor && fillColor.hasOwnProperty('type') &&
 | 
	
		
			
				|  |  | -                          fillColor.type === 'Pattern') ?
 | 
	
		
			
				|  |  | +      maskCtx.fillStyle = isPatternFill ?
 | 
	
		
			
				|  |  |                            fillColor.getPattern(maskCtx, this) : fillColor;
 | 
	
		
			
				|  |  |        maskCtx.fillRect(0, 0, width, height);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -4902,7 +4903,8 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |                                                            scaleY, positions) {
 | 
	
		
			
				|  |  |        var width = imgData.width;
 | 
	
		
			
				|  |  |        var height = imgData.height;
 | 
	
		
			
				|  |  | -      var ctx = this.ctx;
 | 
	
		
			
				|  |  | +      var fillColor = this.current.fillColor;
 | 
	
		
			
				|  |  | +      var isPatternFill = this.current.patternFill;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        var maskCanvas = CachedCanvases.getCanvas('maskCanvas', width, height);
 | 
	
		
			
				|  |  |        var maskCtx = maskCanvas.context;
 | 
	
	
		
			
				|  | @@ -4912,14 +4914,13 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        maskCtx.globalCompositeOperation = 'source-in';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      var fillColor = this.current.fillColor;
 | 
	
		
			
				|  |  | -      maskCtx.fillStyle = (fillColor && fillColor.hasOwnProperty('type') &&
 | 
	
		
			
				|  |  | -        fillColor.type === 'Pattern') ?
 | 
	
		
			
				|  |  | -        fillColor.getPattern(maskCtx, this) : fillColor;
 | 
	
		
			
				|  |  | +      maskCtx.fillStyle = isPatternFill ?
 | 
	
		
			
				|  |  | +                          fillColor.getPattern(maskCtx, this) : fillColor;
 | 
	
		
			
				|  |  |        maskCtx.fillRect(0, 0, width, height);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        maskCtx.restore();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +      var ctx = this.ctx;
 | 
	
		
			
				|  |  |        for (var i = 0, ii = positions.length; i < ii; i += 2) {
 | 
	
		
			
				|  |  |          ctx.save();
 | 
	
		
			
				|  |  |          ctx.transform(scaleX, 0, 0, scaleY, positions[i], positions[i + 1]);
 | 
	
	
		
			
				|  | @@ -4934,6 +4935,8 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |        function CanvasGraphics_paintImageMaskXObjectGroup(images) {
 | 
	
		
			
				|  |  |        var ctx = this.ctx;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +      var fillColor = this.current.fillColor;
 | 
	
		
			
				|  |  | +      var isPatternFill = this.current.patternFill;
 | 
	
		
			
				|  |  |        for (var i = 0, ii = images.length; i < ii; i++) {
 | 
	
		
			
				|  |  |          var image = images[i];
 | 
	
		
			
				|  |  |          var width = image.width, height = image.height;
 | 
	
	
		
			
				|  | @@ -4946,9 +4949,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          maskCtx.globalCompositeOperation = 'source-in';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        var fillColor = this.current.fillColor;
 | 
	
		
			
				|  |  | -        maskCtx.fillStyle = (fillColor && fillColor.hasOwnProperty('type') &&
 | 
	
		
			
				|  |  | -                            fillColor.type === 'Pattern') ?
 | 
	
		
			
				|  |  | +        maskCtx.fillStyle = isPatternFill ?
 | 
	
		
			
				|  |  |                              fillColor.getPattern(maskCtx, this) : fillColor;
 | 
	
		
			
				|  |  |          maskCtx.fillRect(0, 0, width, height);
 | 
	
		
			
				|  |  |  
 |