| 
					
				 | 
			
			
				@@ -22,8 +22,8 @@ if (typeof PDFJS === 'undefined') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (typeof window !== 'undefined' ? window : this).PDFJS = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-PDFJS.version = '1.0.884'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-PDFJS.build = 'fb6d87c'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+PDFJS.version = '1.0.887'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+PDFJS.build = '878fad4'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (function pdfjsWrapper() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // Use strict in our context only - users might not want it 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1880,10 +1880,20 @@ var PDFDocumentProxy = (function PDFDocumentProxyClosure() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @return {Promise} A promise that is resolved with a lookup table for 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * mapping named destinations to reference numbers. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * This can be slow for large documents: use getDestination instead 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     getDestinations: function PDFDocumentProxy_getDestinations() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return this.transport.getDestinations(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param {string} id The named destination to get. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return {Promise} A promise that is resolved with all information 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * of the given named destination. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getDestination: function PDFDocumentProxy_getDestination(id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return this.transport.getDestination(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @return {Promise} A promise that is resolved with a lookup table for 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * mapping named attachments to their content. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2661,6 +2671,10 @@ var WorkerTransport = (function WorkerTransportClosure() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return this.messageHandler.sendWithPromise('GetDestinations', null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getDestination: function WorkerTransport_getDestination(id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return this.messageHandler.sendWithPromise('GetDestination', { id: id } ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     getAttachments: function WorkerTransport_getAttachments() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return this.messageHandler.sendWithPromise('GetAttachments', null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -9628,6 +9642,38 @@ var Catalog = (function CatalogClosure() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return shadow(this, 'destinations', dests); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getDestination: function Catalog_getDestination(destinationId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      function fetchDestination(dest) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return isDict(dest) ? dest.get('D') : dest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      var xref = this.xref; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      var dest, nameTreeRef, nameDictionaryRef; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      var obj = this.catDict.get('Names'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (obj && obj.has('Dests')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        nameTreeRef = obj.getRaw('Dests'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (this.catDict.has('Dests')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        nameDictionaryRef = this.catDict.get('Dests'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (nameDictionaryRef) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // reading simple destination dictionary 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        obj = nameDictionaryRef; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        obj.forEach(function catalogForEach(key, value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (!value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (key === destinationId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dest = fetchDestination(value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (nameTreeRef) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        var nameTree = new NameTree(nameTreeRef, xref); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dest = fetchDestination(nameTree.get(destinationId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return dest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     get attachments() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       var xref = this.xref; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       var attachments = null, nameTreeRef; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -10529,6 +10575,76 @@ var NameTree = (function NameTreeClosure() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return dict; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    get: function NameTree_get(destinationId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (!this.root) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      var xref = this.xref; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      var kidsOrNames = xref.fetchIfRef(this.root); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      var loopCount = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      var MAX_NAMES_LEVELS = 10; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      var l, r, m; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // Perform a binary search to quickly find the entry that 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // contains the named destination we are looking for. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      while (kidsOrNames.has('Kids')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        loopCount++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (loopCount > MAX_NAMES_LEVELS) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          warn('Search depth limit for named destionations has been reached.'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        var kids = kidsOrNames.get('Kids'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!isArray(kids)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        l = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        r = kids.length - 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        while (l <= r) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          m = (l + r) >> 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          var kid = xref.fetchIfRef(kids[m]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          var limits = kid.get('Limits'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (destinationId < limits[0]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            r = m - 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } else if (destinationId > limits[1]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            l = m + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            kidsOrNames = xref.fetchIfRef(kids[m]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (l > r) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // If we get here, then we have found the right entry. Now 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // go through the named destinations in the Named dictionary 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // until we find the exact destination we're looking for. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      var names = kidsOrNames.get('Names'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (isArray(names)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // Perform a binary search to reduce the lookup time. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        l = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        r = names.length - 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        while (l <= r) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          // Check only even indices (0, 2, 4, ...) because the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          // odd indices contain the actual D array. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          m = (l + r) & ~1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (destinationId < names[m]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            r = m - 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } else if (destinationId > names[m]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            l = m + 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return xref.fetchIfRef(names[m + 1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return NameTree; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -39758,6 +39874,12 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    handler.on('GetDestination', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      function wphSetupGetDestination(data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return pdfManager.ensureCatalog('getDestination', [ data.id ]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     handler.on('GetAttachments', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       function wphSetupGetAttachments(data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return pdfManager.ensureCatalog('attachments'); 
			 |