You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2018/02/21 21:37:28 UTC

[tika] branch branch_1x updated (fd7ec73 -> 287f5d1)

This is an automated email from the ASF dual-hosted git repository.

tallison pushed a change to branch branch_1x
in repository https://gitbox.apache.org/repos/asf/tika.git.


    from fd7ec73  Remove java 8 String.join
     new aded888  TIKA-2563 -- Extract files embedded in HTML and javascript inside HTML that are stored in the Data URI scheme.
     new 287f5d1  TIKA-2563 -- mods for 1.x branch

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGES.txt                                        |   3 +
 .../org/apache/tika/parser/html/HtmlHandler.java   |  65 ++++
 .../apache/tika/parser/utils/DataURIScheme.java    |  77 +++++
 .../parser/utils/DataURISchemeParseException.java  |  13 +-
 .../tika/parser/utils/DataURISchemeUtil.java       | 103 ++++++
 .../apache/tika/parser/html/HtmlParserTest.java    |  34 ++
 .../tika/parser/utils/DataURISchemeParserTest.java |  79 +++++
 .../test-documents/testHTML_embedded_img.html      | 352 +++++++++++++++++++++
 .../testHTML_embedded_img_in_js.html               | 351 ++++++++++++++++++++
 9 files changed, 1071 insertions(+), 6 deletions(-)
 create mode 100644 tika-parsers/src/main/java/org/apache/tika/parser/utils/DataURIScheme.java
 copy tika-core/src/main/java/org/apache/tika/fork/ForkProxy.java => tika-parsers/src/main/java/org/apache/tika/parser/utils/DataURISchemeParseException.java (77%)
 create mode 100644 tika-parsers/src/main/java/org/apache/tika/parser/utils/DataURISchemeUtil.java
 create mode 100644 tika-parsers/src/test/java/org/apache/tika/parser/utils/DataURISchemeParserTest.java
 create mode 100644 tika-parsers/src/test/resources/test-documents/testHTML_embedded_img.html
 create mode 100644 tika-parsers/src/test/resources/test-documents/testHTML_embedded_img_in_js.html

-- 
To stop receiving notification emails like this one, please contact
tallison@apache.org.

[tika] 02/02: TIKA-2563 -- mods for 1.x branch

Posted by ta...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

tallison pushed a commit to branch branch_1x
in repository https://gitbox.apache.org/repos/asf/tika.git

commit 287f5d1f3547295004ba844deea5336af9efe28e
Author: tballison <ta...@mitre.org>
AuthorDate: Wed Feb 21 16:36:46 2018 -0500

    TIKA-2563 -- mods for 1.x branch
---
 .../src/test/java/org/apache/tika/parser/html/HtmlParserTest.java     | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest.java b/tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest.java
index aece610..6f2eb1f 100644
--- a/tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest.java
+++ b/tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest.java
@@ -1279,7 +1279,7 @@ public class HtmlParserTest extends TikaTest {
         Metadata imgMetadata = metadataList.get(1);
         assertEquals("image/jpeg", imgMetadata.get(Metadata.CONTENT_TYPE));
         assertContains("moscow-birds",
-                Arrays.asList(imgMetadata.getValues(TikaCoreProperties.SUBJECT)));
+                Arrays.asList(imgMetadata.getValues(Metadata.SUBJECT)));
     }
 
     @Test
@@ -1295,7 +1295,7 @@ public class HtmlParserTest extends TikaTest {
         Metadata imgMetadata = metadataList.get(1);
         assertEquals("image/jpeg", imgMetadata.get(Metadata.CONTENT_TYPE));
         assertContains("moscow-birds",
-                Arrays.asList(imgMetadata.getValues(TikaCoreProperties.SUBJECT)));
+                Arrays.asList(imgMetadata.getValues(Metadata.SUBJECT)));
     }
 
     @Test

-- 
To stop receiving notification emails like this one, please contact
tallison@apache.org.

[tika] 01/02: TIKA-2563 -- Extract files embedded in HTML and javascript inside HTML that are stored in the Data URI scheme.

Posted by ta...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

tallison pushed a commit to branch branch_1x
in repository https://gitbox.apache.org/repos/asf/tika.git

commit aded888787bf89429a0a73bcda024beb85952128
Author: tballison <ta...@mitre.org>
AuthorDate: Wed Feb 21 16:30:06 2018 -0500

    TIKA-2563 -- Extract files embedded in HTML and javascript inside HTML that are stored in the Data URI scheme.
---
 CHANGES.txt                                        |   3 +
 .../org/apache/tika/parser/html/HtmlHandler.java   |  65 ++++
 .../apache/tika/parser/utils/DataURIScheme.java    |  77 +++++
 .../parser/utils/DataURISchemeParseException.java  |  28 ++
 .../tika/parser/utils/DataURISchemeUtil.java       | 103 ++++++
 .../apache/tika/parser/html/HtmlParserTest.java    |  34 ++
 .../tika/parser/utils/DataURISchemeParserTest.java |  79 +++++
 .../test-documents/testHTML_embedded_img.html      | 352 +++++++++++++++++++++
 .../testHTML_embedded_img_in_js.html               | 351 ++++++++++++++++++++
 9 files changed, 1092 insertions(+)

diff --git a/CHANGES.txt b/CHANGES.txt
index 250d2e8..0185d44 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,8 @@
 Release 1.18 - ???
 
+   * Extract files embedded in HTML and javascript inside HTML
+     that are stored in the Data URI scheme (TIKA-2563).
+
    * Extract text from grouped text boxes in PPT (TIKA-2569).
 
    * Extract language metadata item from PDF files via Matt Sheppard (TIKA-2559)
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/html/HtmlHandler.java b/tika-parsers/src/main/java/org/apache/tika/parser/html/HtmlHandler.java
index 1febbf4..e453db1 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/html/HtmlHandler.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/html/HtmlHandler.java
@@ -24,6 +24,7 @@ import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Locale;
 import java.util.Set;
 import java.util.regex.Matcher;
@@ -36,6 +37,9 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.utils.DataURIScheme;
+import org.apache.tika.parser.utils.DataURISchemeParseException;
+import org.apache.tika.parser.utils.DataURISchemeUtil;
 import org.apache.tika.sax.TextContentHandler;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.xml.sax.Attributes;
@@ -57,6 +61,7 @@ class HtmlHandler extends TextContentHandler {
     private final ParseContext context;
     private final boolean extractScripts;
     private final StringBuilder title = new StringBuilder();
+    private final DataURISchemeUtil dataURISchemeUtil = new DataURISchemeUtil();
     private int bodyLevel = 0;
     private int discardLevel = 0;
     private int titleLevel = 0;
@@ -169,6 +174,10 @@ class HtmlHandler extends TextContentHandler {
         }
 
         title.setLength(0);
+        String value = atts.getValue("src");
+        if (value != null && value.startsWith("data:")) {
+            handleDataURIScheme(value);
+        }
     }
 
     /**
@@ -231,6 +240,15 @@ class HtmlHandler extends TextContentHandler {
                 // And resolve relative links. Eventually this should be pushed
                 // into the HtmlMapper code.
                 if (URI_ATTRIBUTES.contains(normAttrName)) {
+                    //if this is a src="data: " element,
+                    //we've handled that as an embedded file, don't include the full thing
+                    //here
+                    if (normAttrName.equals("src")) {
+                        String v = newAttributes.getValue(att);
+                        if (v.startsWith("data:")) {
+                            newAttributes.setValue(att, "data:");
+                        }
+                    }
                     newAttributes.setValue(att, resolve(newAttributes.getValue(att)));
                 } else if (isObject && "codebase".equals(normAttrName)) {
                     newAttributes.setValue(att, codebase);
@@ -296,6 +314,35 @@ class HtmlHandler extends TextContentHandler {
         }
     }
 
+    private void handleDataURIScheme(String string) throws SAXException {
+        DataURIScheme dataURIScheme = null;
+        try {
+            dataURIScheme = dataURISchemeUtil.parse(string);
+        } catch (DataURISchemeParseException e) {
+            //swallow
+            return;
+        }
+
+        //do anything with attrs?
+        Metadata m = new Metadata();
+        m.set(TikaCoreProperties.EMBEDDED_RESOURCE_TYPE,
+                TikaCoreProperties.EmbeddedResourceType.INLINE.toString());
+        if (dataURIScheme.getMediaType() != null) {
+            m.set(Metadata.CONTENT_TYPE, dataURIScheme.getMediaType().toString());
+        }
+        EmbeddedDocumentExtractor embeddedDocumentExtractor =
+                EmbeddedDocumentUtil.getEmbeddedDocumentExtractor(context);
+        if (embeddedDocumentExtractor.shouldParseEmbedded(m)) {
+            try (InputStream stream = dataURIScheme.getInputStream()) {
+                embeddedDocumentExtractor.parseEmbedded(
+                        stream, xhtml, m, false
+                );
+            } catch (IOException e) {
+                EmbeddedDocumentUtil.recordEmbeddedStreamException(e, metadata);
+            }
+        }
+    }
+
     private void writeScript() throws SAXException {
         //don't write an attached macro if there is no content
         //we may want to revisit this behavior
@@ -313,6 +360,24 @@ class HtmlHandler extends TextContentHandler {
 
         EmbeddedDocumentExtractor embeddedDocumentExtractor =
                 EmbeddedDocumentUtil.getEmbeddedDocumentExtractor(context);
+        //try to scrape dataURISchemes from javascript
+        List<DataURIScheme> dataURISchemes = dataURISchemeUtil.extract(script.toString());
+        for (DataURIScheme dataURIScheme : dataURISchemes) {
+            Metadata dataUriMetadata = new Metadata();
+            dataUriMetadata.set(TikaCoreProperties.EMBEDDED_RESOURCE_TYPE,
+                    TikaCoreProperties.EmbeddedResourceType.INLINE.toString());
+            dataUriMetadata.set(Metadata.CONTENT_TYPE,
+                    dataURIScheme.getMediaType().toString());
+            if (embeddedDocumentExtractor.shouldParseEmbedded(dataUriMetadata)) {
+                try (InputStream dataURISchemeInputStream = dataURIScheme.getInputStream()) {
+                    embeddedDocumentExtractor.parseEmbedded(dataURISchemeInputStream,
+                            xhtml, dataUriMetadata, false);
+                } catch (IOException e) {
+                    //swallow
+                }
+            }
+        }
+
         try (InputStream stream = new ByteArrayInputStream(
                 script.toString().getBytes(StandardCharsets.UTF_8))) {
             embeddedDocumentExtractor.parseEmbedded(
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/utils/DataURIScheme.java b/tika-parsers/src/main/java/org/apache/tika/parser/utils/DataURIScheme.java
new file mode 100644
index 0000000..313a0af
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/utils/DataURIScheme.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.utils;
+
+import org.apache.tika.mime.MediaType;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.Objects;
+
+public class DataURIScheme {
+
+
+    private final String rawMediaTypeString;
+    private final boolean isBase64;
+    private final byte[] data;
+
+    DataURIScheme(String mediaTypeString, boolean isBase64, byte[] data) {
+        this.rawMediaTypeString = mediaTypeString;
+        this.isBase64 = isBase64;
+        this.data = data;
+    }
+
+    public InputStream getInputStream() {
+        return new ByteArrayInputStream(data);
+    }
+
+    /**
+     *
+     * @return parsed media type or <code>null</code> if parse fails or if media type string was
+     * not specified
+     */
+    public MediaType getMediaType() {
+        if (rawMediaTypeString != null) {
+            return MediaType.parse(rawMediaTypeString);
+        }
+        return null;
+    }
+
+    public boolean isBase64() {
+        return isBase64;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof DataURIScheme)) return false;
+        DataURIScheme that = (DataURIScheme) o;
+        return isBase64() == that.isBase64() &&
+                Objects.equals(rawMediaTypeString, that.rawMediaTypeString) &&
+                Arrays.equals(data, that.data);
+    }
+
+    @Override
+    public int hashCode() {
+
+        int result = Objects.hash(rawMediaTypeString, isBase64());
+        result = 31 * result + Arrays.hashCode(data);
+        return result;
+    }
+}
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/utils/DataURISchemeParseException.java b/tika-parsers/src/main/java/org/apache/tika/parser/utils/DataURISchemeParseException.java
new file mode 100644
index 0000000..cfddc7e
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/utils/DataURISchemeParseException.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.utils;
+
+import org.apache.tika.exception.TikaException;
+
+public class DataURISchemeParseException extends TikaException {
+
+    public DataURISchemeParseException(String msg) {
+            super(msg);
+        }
+
+}
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/utils/DataURISchemeUtil.java b/tika-parsers/src/main/java/org/apache/tika/parser/utils/DataURISchemeUtil.java
new file mode 100644
index 0000000..0da2956
--- /dev/null
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/utils/DataURISchemeUtil.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.utils;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.tika.mime.MediaType;
+
+import java.nio.charset.Charset;
+import java.nio.charset.IllegalCharsetNameException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Not thread safe.  Create a separate util for each thread.
+ */
+public class DataURISchemeUtil {
+
+    public static String UNSPECIFIED_MEDIA_TYPE = "text/plain;charset=US-ASCII";
+
+    private static Pattern PARSE_PATTERN = Pattern.compile("(?s)data:([^,]*?)(base64)?,(.*)$");
+    private static Pattern EXTRACT_PATTERN =
+            Pattern.compile("(?s)data:([^,]*?)(base64)?,([^\"\']*)[\"\']");
+    private final Matcher parseMatcher = PARSE_PATTERN.matcher("");
+    private final Matcher extractMatcher = EXTRACT_PATTERN.matcher("");
+    Base64 base64 = new Base64();
+
+    public DataURIScheme parse(String string) throws DataURISchemeParseException {
+        parseMatcher.reset(string);
+        if (parseMatcher.find()) {
+            return build(parseMatcher.group(1), parseMatcher.group(2), parseMatcher.group(3));
+        }
+        throw new DataURISchemeParseException("Couldn't find expected pattern");
+    }
+
+    private DataURIScheme build(String mediaTypeString, String isBase64, String dataString) {
+        byte[] data = null;
+        //strip out back slashes as you might have in css
+        dataString = (dataString != null) ?
+                dataString.replaceAll("\\\\", " ") : dataString;
+
+        if (dataString == null || dataString.length() == 0) {
+            data = new byte[0];
+        } else if (isBase64 != null) {
+            data = base64.decode(dataString);
+        } else {
+            //TODO: handle encodings
+            MediaType mediaType = MediaType.parse(mediaTypeString);
+            Charset charset = StandardCharsets.UTF_8;
+            if (mediaType.hasParameters()) {
+                String charsetName = mediaType.getParameters().get("charset");
+                if (charsetName != null && Charset.isSupported(charsetName)) {
+                    try {
+                        charset = Charset.forName(charsetName);
+                    } catch (IllegalCharsetNameException e) {
+                        //swallow and default to UTF-8
+                    }
+                }
+            }
+            data = dataString.getBytes(charset);
+        }
+        return new DataURIScheme(mediaTypeString, (isBase64 != null), data);
+    }
+
+    /**
+     * Extracts DataURISchemes from free text, as in javascript.
+     *
+     * @param string
+     * @return list of extracted DataURISchemes
+     */
+    public List<DataURIScheme> extract(String string) {
+        extractMatcher.reset(string);
+        List<DataURIScheme> list = null;
+        while (extractMatcher.find()) {
+            DataURIScheme dataURIScheme = build(extractMatcher.group(1),
+                    extractMatcher.group(2), extractMatcher.group(3));
+            if (list == null) {
+                list = new ArrayList<>();
+            }
+            list.add(dataURIScheme);
+        }
+        return (list == null) ? Collections.EMPTY_LIST : list;
+    }
+
+}
diff --git a/tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest.java b/tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest.java
index b8b4237..aece610 100644
--- a/tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest.java
+++ b/tika-parsers/src/test/java/org/apache/tika/parser/html/HtmlParserTest.java
@@ -29,6 +29,7 @@ import javax.xml.transform.sax.SAXTransformerFactory;
 import javax.xml.transform.sax.TransformerHandler;
 import javax.xml.transform.stream.StreamResult;
 import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -39,6 +40,7 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -52,6 +54,7 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.regex.Pattern;
 
+import org.apache.commons.codec.binary.Base64;
 import org.apache.tika.Tika;
 import org.apache.tika.TikaTest;
 import org.apache.tika.config.ServiceLoader;
@@ -59,6 +62,7 @@ import org.apache.tika.config.TikaConfig;
 import org.apache.tika.detect.AutoDetectReader;
 import org.apache.tika.detect.EncodingDetector;
 import org.apache.tika.exception.TikaException;
+import org.apache.tika.io.IOUtils;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Geographic;
 import org.apache.tika.metadata.Metadata;
@@ -1265,6 +1269,36 @@ public class HtmlParserTest extends TikaTest {
     }
 
     @Test
+    public void testDataURI() throws Exception {
+        List<Metadata> metadataList = getRecursiveMetadata("testHTML_embedded_img.html");
+        assertEquals(2, metadataList.size());
+        String content = metadataList.get(0).get(RecursiveParserWrapper.TIKA_CONTENT);
+        assertContains("some content", content);
+        //make sure that you've truncated the data: value
+        assertContains("src=\"data:\"", content);
+        Metadata imgMetadata = metadataList.get(1);
+        assertEquals("image/jpeg", imgMetadata.get(Metadata.CONTENT_TYPE));
+        assertContains("moscow-birds",
+                Arrays.asList(imgMetadata.getValues(TikaCoreProperties.SUBJECT)));
+    }
+
+    @Test
+    public void testDataURIInJS() throws Exception {
+        InputStream is = getClass().getResourceAsStream("/org/apache/tika/parser/html/tika-config.xml");
+        assertNotNull(is);
+        TikaConfig tikaConfig = new TikaConfig(is);
+        Parser p = new AutoDetectParser(tikaConfig);
+        List<Metadata> metadataList = getRecursiveMetadata("testHTML_embedded_img_in_js.html", p);
+        assertEquals(3, metadataList.size());
+        String content = metadataList.get(0).get(RecursiveParserWrapper.TIKA_CONTENT);
+        assertContains("some content", content);
+        Metadata imgMetadata = metadataList.get(1);
+        assertEquals("image/jpeg", imgMetadata.get(Metadata.CONTENT_TYPE));
+        assertContains("moscow-birds",
+                Arrays.asList(imgMetadata.getValues(TikaCoreProperties.SUBJECT)));
+    }
+
+    @Test
     public void testMultiThreadingEncodingDetection() throws Exception {
         List<EncodingDetector> detectors = new ArrayList<>();
         ServiceLoader loader =
diff --git a/tika-parsers/src/test/java/org/apache/tika/parser/utils/DataURISchemeParserTest.java b/tika-parsers/src/test/java/org/apache/tika/parser/utils/DataURISchemeParserTest.java
new file mode 100644
index 0000000..e21b75e
--- /dev/null
+++ b/tika-parsers/src/test/java/org/apache/tika/parser/utils/DataURISchemeParserTest.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tika.parser.utils;
+
+import org.apache.tika.TikaTest;
+import org.apache.tika.io.IOUtils;
+import org.apache.tika.mime.MediaType;
+import org.junit.Test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+public class DataURISchemeParserTest extends TikaTest {
+    DataURISchemeUtil dataURISchemeUtil = new DataURISchemeUtil();
+
+    @Test
+    public void testEmpty() throws Exception {
+        DataURIScheme dataURIScheme = dataURISchemeUtil.parse("data:,");
+        assertFalse(dataURIScheme.isBase64());
+        assertNull(dataURIScheme.getMediaType());
+        assertEquals(-1, dataURIScheme.getInputStream().read());
+    }
+
+    @Test
+    public void testNewlines() throws Exception {
+        String data = "data:image/png;base64,R0lG\nODdh";
+        DataURIScheme dataURIScheme = dataURISchemeUtil.parse(data);
+        assertTrue(dataURIScheme.isBase64());
+        assertEquals(MediaType.image("png"), dataURIScheme.getMediaType());
+
+        String expected = "data:image/png;base64,R0lGODdh";
+        assertEquals(dataURISchemeUtil.parse(expected), dataURISchemeUtil.parse(data));
+
+    }
+
+    @Test
+    public void testBackslashNewlines() throws Exception {
+        //like you'd have in a css fragment
+        String data = "data:image/png;base64,R0lG\\\nODdh";
+        DataURIScheme dataURIScheme = dataURISchemeUtil.parse(data);
+        assertTrue(dataURIScheme.isBase64());
+        assertEquals(MediaType.image("png"), dataURIScheme.getMediaType());
+
+        String expected = "data:image/png;base64,R0lGODdh";
+        assertEquals(dataURISchemeUtil.parse(expected), dataURISchemeUtil.parse(data));
+    }
+
+    @Test
+    public void testUTF8() throws Exception {
+        String utf8 = "\u0628\u0631\u0646\u0633\u062A\u0648\u0646";
+        String data = "data:text/plain;charset=UTF-8;page=21,the%20data:"+utf8;
+        DataURIScheme dataURIScheme = dataURISchemeUtil.parse(data);
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        IOUtils.copy(dataURIScheme.getInputStream(), bos);
+        assertContains(utf8, new String(bos.toByteArray(), StandardCharsets.UTF_8));
+    }
+}
diff --git a/tika-parsers/src/test/resources/test-documents/testHTML_embedded_img.html b/tika-parsers/src/test/resources/test-documents/testHTML_embedded_img.html
new file mode 100644
index 0000000..dd3fc62
--- /dev/null
+++ b/tika-parsers/src/test/resources/test-documents/testHTML_embedded_img.html
@@ -0,0 +1,352 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+some content
+<img alt="my_image" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEA8ADwAAD/7QCIUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAA
+AGscAVoAAxslRxwBAAACAAQcAgAAAgACHAIZAAxjYW5vbi01NS0yNTAcAhkADG1v
+c2Nvdy1iaXJkcxwCGQAGc2VyYm9yHAJ0ACMoYykg0JzQsNC60YHQuNC8INCS0LDQ
+u9GP0L3RgdC60LjQuQD/4QLwRXhpZgAASUkqAAgAAAAKAA8BAgAGAAAAhgAAABAB
+AgAOAAAAjAAAABoBBQABAAAAmgAAABsBBQABAAAAogAAACgBAwABAAAAAgAAADEB
+AgAeAAAAqgAAADIBAgAUAAAAyAAAABMCAwABAAAAAQAAAJiCAgAVAAAA3AAAAGmH
+BAABAAAA8gAAAAAAAABDYW5vbgBDYW5vbiBFT1MgNDBEAPAAAAABAAAA8AAAAAEA
+AABBZG9iZSBQaG90b3Nob3AgQ1MzIE1hY2ludG9zaAAyMDA5OjEwOjAyIDIzOjAy
+OjQ5AChjKSA/Pz8/Pz8gPz8/Pz8/Pz8/AAAgAJqCBQABAAAAeAIAAJ2CBQABAAAA
+gAIAACKIAwABAAAABAAAACeIAwABAAAAkAEAAACQBwAEAAAAMDIyMQOQAgAUAAAA
+iAIAAASQAgAUAAAAnAIAAAGRBwAEAAAAAQIDAAGSCgABAAAAsAIAAAKSBQABAAAA
+uAIAAASSCgABAAAAwAIAAAWSBQABAAAAyAIAAAeSAwABAAAABQAAAAmSAwABAAAA
+EAAAAAqSBQABAAAA0AIAABGSBAABAAAAAAAAAJGSAgADAAAANDkAAJKSAgADAAAA
+NDkAAACgBwAEAAAAMDEwMAGgAwABAAAA//8AAAKgAwABAAAAMA8AAAOgAwABAAAA
+IAoAAA6iBQABAAAA2AIAAA+iBQABAAAA4AIAABCiAwABAAAAAgAAAAGkAwABAAAA
+AAAAAAKkAwABAAAAAAAAAAOkAwABAAAAAQAAAAakAwABAAAAAAAAAAikAwABAAAA
+AAAAAAmkAwABAAAAAAAAAAqkAwABAAAAAAAAAAAAAAABAAAAQAYAABwAAAAFAAAA
+MjAwOTowODoxMSAwOTowOTo0NQAyMDA5OjA4OjExIDA5OjA5OjQ1AD1TAADSBwAA
+OZ8AAAggAAAAAAAAAQAAAJVHAABBDgAAwgAAAAEAAACg8QQASQAAAHf9CgCiAAAA
+/+0AiFBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAABrHAFaAAMbJUccAQAAAgAEHAIA
+AAIAAhwCGQAMY2Fub24tNTUtMjUwHAIZAAxtb3Njb3ctYmlyZHMcAhkABnNlcmJv
+chwCdAAjKGMpINCc0LDQutGB0LjQvCDQktCw0LvRj9C90YHQutC40LkA/+EkO2h0
+dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8gADw/eHBhY2tldCBiZWdpbj0n77u/
+JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+Cjx4OnhtcG1ldGEgeG1s
+bnM6eD0nYWRvYmU6bnM6bWV0YS8nIHg6eG1wdGs9J0ltYWdlOjpFeGlmVG9vbCA3
+LjIxJz4KPHJkZjpSREYgeG1sbnM6cmRmPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5
+LzAyLzIyLXJkZi1zeW50YXgtbnMjJz4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjph
+Ym91dD0nJwogIHhtbG5zOmF1eD0naHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEu
+MC9hdXgvJz4KICA8YXV4OkZpcm13YXJlPjEuMS4xPC9hdXg6RmlybXdhcmU+CiAg
+PGF1eDpGbGFzaENvbXBlbnNhdGlvbj4wLzE8L2F1eDpGbGFzaENvbXBlbnNhdGlv
+bj4KICA8YXV4OkxlbnM+RUYtUzU1LTI1MG1tIGYvNC01LjYgSVM8L2F1eDpMZW5z
+PgogIDxhdXg6TGVuc0luZm8+NTUvMSAyNTAvMSAwLzAgMC8wPC9hdXg6TGVuc0lu
+Zm8+CiAgPGF1eDpTZXJpYWxOdW1iZXI+NzMwNTUyMjU4PC9hdXg6U2VyaWFsTnVt
+YmVyPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6
+YWJvdXQ9JycKICB4bWxuczpjcnM9J2h0dHA6Ly9ucy5hZG9iZS5jb20vY2FtZXJh
+LXJhdy1zZXR0aW5ncy8xLjAvJz4KICA8Y3JzOkFscmVhZHlBcHBsaWVkPlRydWU8
+L2NyczpBbHJlYWR5QXBwbGllZD4KICA8Y3JzOkJsdWVIdWU+MDwvY3JzOkJsdWVI
+dWU+CiAgPGNyczpCbHVlU2F0dXJhdGlvbj4wPC9jcnM6Qmx1ZVNhdHVyYXRpb24+
+CiAgPGNyczpCcmlnaHRuZXNzPjA8L2NyczpCcmlnaHRuZXNzPgogIDxjcnM6Q2Ft
+ZXJhUHJvZmlsZT5FbWJlZGRlZDwvY3JzOkNhbWVyYVByb2ZpbGU+CiAgPGNyczpD
+YW1lcmFQcm9maWxlRGlnZXN0PjU0NjUwQTM0MUI1QjVDQ0FFODQ0MkQwQjQzQTky
+QkNFPC9jcnM6Q2FtZXJhUHJvZmlsZURpZ2VzdD4KICA8Y3JzOkNocm9tYXRpY0Fi
+ZXJyYXRpb25CPjA8L2NyczpDaHJvbWF0aWNBYmVycmF0aW9uQj4KICA8Y3JzOkNo
+cm9tYXRpY0FiZXJyYXRpb25SPjA8L2NyczpDaHJvbWF0aWNBYmVycmF0aW9uUj4K
+ICA8Y3JzOkNsYXJpdHk+MDwvY3JzOkNsYXJpdHk+CiAgPGNyczpDb2xvck5vaXNl
+UmVkdWN0aW9uPjA8L2NyczpDb2xvck5vaXNlUmVkdWN0aW9uPgogIDxjcnM6Q29u
+dmVydFRvR3JheXNjYWxlPkZhbHNlPC9jcnM6Q29udmVydFRvR3JheXNjYWxlPgog
+IDxjcnM6RGVmcmluZ2U+MDwvY3JzOkRlZnJpbmdlPgogIDxjcnM6RXhwb3N1cmU+
+MC4wMDwvY3JzOkV4cG9zdXJlPgogIDxjcnM6RmlsbExpZ2h0PjA8L2NyczpGaWxs
+TGlnaHQ+CiAgPGNyczpHcmVlbkh1ZT4wPC9jcnM6R3JlZW5IdWU+CiAgPGNyczpH
+cmVlblNhdHVyYXRpb24+MDwvY3JzOkdyZWVuU2F0dXJhdGlvbj4KICA8Y3JzOkhh
+c0Nyb3A+RmFsc2U8L2NyczpIYXNDcm9wPgogIDxjcnM6SGFzU2V0dGluZ3M+VHJ1
+ZTwvY3JzOkhhc1NldHRpbmdzPgogIDxjcnM6SGlnaGxpZ2h0UmVjb3Zlcnk+MDwv
+Y3JzOkhpZ2hsaWdodFJlY292ZXJ5PgogIDxjcnM6SHVlQWRqdXN0bWVudEFxdWE+
+MDwvY3JzOkh1ZUFkanVzdG1lbnRBcXVhPgogIDxjcnM6SHVlQWRqdXN0bWVudEJs
+dWU+MDwvY3JzOkh1ZUFkanVzdG1lbnRCbHVlPgogIDxjcnM6SHVlQWRqdXN0bWVu
+dEdyZWVuPjA8L2NyczpIdWVBZGp1c3RtZW50R3JlZW4+CiAgPGNyczpIdWVBZGp1
+c3RtZW50TWFnZW50YT4wPC9jcnM6SHVlQWRqdXN0bWVudE1hZ2VudGE+CiAgPGNy
+czpIdWVBZGp1c3RtZW50T3JhbmdlPjA8L2NyczpIdWVBZGp1c3RtZW50T3Jhbmdl
+PgogIDxjcnM6SHVlQWRqdXN0bWVudFB1cnBsZT4wPC9jcnM6SHVlQWRqdXN0bWVu
+dFB1cnBsZT4KICA8Y3JzOkh1ZUFkanVzdG1lbnRSZWQ+MDwvY3JzOkh1ZUFkanVz
+dG1lbnRSZWQ+CiAgPGNyczpIdWVBZGp1c3RtZW50WWVsbG93PjA8L2NyczpIdWVB
+ZGp1c3RtZW50WWVsbG93PgogIDxjcnM6SW5jcmVtZW50YWxUZW1wZXJhdHVyZT4w
+PC9jcnM6SW5jcmVtZW50YWxUZW1wZXJhdHVyZT4KICA8Y3JzOkluY3JlbWVudGFs
+VGludD4wPC9jcnM6SW5jcmVtZW50YWxUaW50PgogIDxjcnM6THVtaW5hbmNlQWRq
+dXN0bWVudEFxdWE+MDwvY3JzOkx1bWluYW5jZUFkanVzdG1lbnRBcXVhPgogIDxj
+cnM6THVtaW5hbmNlQWRqdXN0bWVudEJsdWU+MDwvY3JzOkx1bWluYW5jZUFkanVz
+dG1lbnRCbHVlPgogIDxjcnM6THVtaW5hbmNlQWRqdXN0bWVudEdyZWVuPjA8L2Ny
+czpMdW1pbmFuY2VBZGp1c3RtZW50R3JlZW4+CiAgPGNyczpMdW1pbmFuY2VBZGp1
+c3RtZW50TWFnZW50YT4wPC9jcnM6THVtaW5hbmNlQWRqdXN0bWVudE1hZ2VudGE+
+CiAgPGNyczpMdW1pbmFuY2VBZGp1c3RtZW50T3JhbmdlPjA8L2NyczpMdW1pbmFu
+Y2VBZGp1c3RtZW50T3JhbmdlPgogIDxjcnM6THVtaW5hbmNlQWRqdXN0bWVudFB1
+cnBsZT4wPC9jcnM6THVtaW5hbmNlQWRqdXN0bWVudFB1cnBsZT4KICA8Y3JzOkx1
+bWluYW5jZUFkanVzdG1lbnRSZWQ+MDwvY3JzOkx1bWluYW5jZUFkanVzdG1lbnRS
+ZWQ+CiAgPGNyczpMdW1pbmFuY2VBZGp1c3RtZW50WWVsbG93PjA8L2NyczpMdW1p
+bmFuY2VBZGp1c3RtZW50WWVsbG93PgogIDxjcnM6THVtaW5hbmNlU21vb3RoaW5n
+PjA8L2NyczpMdW1pbmFuY2VTbW9vdGhpbmc+CiAgPGNyczpQYXJhbWV0cmljRGFy
+a3M+MDwvY3JzOlBhcmFtZXRyaWNEYXJrcz4KICA8Y3JzOlBhcmFtZXRyaWNIaWdo
+bGlnaHRTcGxpdD43NTwvY3JzOlBhcmFtZXRyaWNIaWdobGlnaHRTcGxpdD4KICA8
+Y3JzOlBhcmFtZXRyaWNIaWdobGlnaHRzPjA8L2NyczpQYXJhbWV0cmljSGlnaGxp
+Z2h0cz4KICA8Y3JzOlBhcmFtZXRyaWNMaWdodHM+MDwvY3JzOlBhcmFtZXRyaWNM
+aWdodHM+CiAgPGNyczpQYXJhbWV0cmljTWlkdG9uZVNwbGl0PjUwPC9jcnM6UGFy
+YW1ldHJpY01pZHRvbmVTcGxpdD4KICA8Y3JzOlBhcmFtZXRyaWNTaGFkb3dTcGxp
+dD4yNTwvY3JzOlBhcmFtZXRyaWNTaGFkb3dTcGxpdD4KICA8Y3JzOlBhcmFtZXRy
+aWNTaGFkb3dzPjA8L2NyczpQYXJhbWV0cmljU2hhZG93cz4KICA8Y3JzOlJlZEh1
+ZT4wPC9jcnM6UmVkSHVlPgogIDxjcnM6UmVkU2F0dXJhdGlvbj4wPC9jcnM6UmVk
+U2F0dXJhdGlvbj4KICA8Y3JzOlNhdHVyYXRpb25BZGp1c3RtZW50QXF1YT4wPC9j
+cnM6U2F0dXJhdGlvbkFkanVzdG1lbnRBcXVhPgogIDxjcnM6U2F0dXJhdGlvbkFk
+anVzdG1lbnRCbHVlPjA8L2NyczpTYXR1cmF0aW9uQWRqdXN0bWVudEJsdWU+CiAg
+PGNyczpTYXR1cmF0aW9uQWRqdXN0bWVudEdyZWVuPjA8L2NyczpTYXR1cmF0aW9u
+QWRqdXN0bWVudEdyZWVuPgogIDxjcnM6U2F0dXJhdGlvbkFkanVzdG1lbnRNYWdl
+bnRhPjA8L2NyczpTYXR1cmF0aW9uQWRqdXN0bWVudE1hZ2VudGE+CiAgPGNyczpT
+YXR1cmF0aW9uQWRqdXN0bWVudE9yYW5nZT4wPC9jcnM6U2F0dXJhdGlvbkFkanVz
+dG1lbnRPcmFuZ2U+CiAgPGNyczpTYXR1cmF0aW9uQWRqdXN0bWVudFB1cnBsZT4w
+PC9jcnM6U2F0dXJhdGlvbkFkanVzdG1lbnRQdXJwbGU+CiAgPGNyczpTYXR1cmF0
+aW9uQWRqdXN0bWVudFJlZD4wPC9jcnM6U2F0dXJhdGlvbkFkanVzdG1lbnRSZWQ+
+CiAgPGNyczpTYXR1cmF0aW9uQWRqdXN0bWVudFllbGxvdz4wPC9jcnM6U2F0dXJh
+dGlvbkFkanVzdG1lbnRZZWxsb3c+CiAgPGNyczpTaGFkb3dUaW50PjA8L2NyczpT
+aGFkb3dUaW50PgogIDxjcnM6U2hhZG93cz4wPC9jcnM6U2hhZG93cz4KICA8Y3Jz
+OlNoYXJwZW5EZXRhaWw+MjU8L2NyczpTaGFycGVuRGV0YWlsPgogIDxjcnM6U2hh
+cnBlbkVkZ2VNYXNraW5nPjA8L2NyczpTaGFycGVuRWRnZU1hc2tpbmc+CiAgPGNy
+czpTaGFycGVuUmFkaXVzPisxLjA8L2NyczpTaGFycGVuUmFkaXVzPgogIDxjcnM6
+U3BsaXRUb25pbmdCYWxhbmNlPjA8L2NyczpTcGxpdFRvbmluZ0JhbGFuY2U+CiAg
+PGNyczpTcGxpdFRvbmluZ0hpZ2hsaWdodEh1ZT4wPC9jcnM6U3BsaXRUb25pbmdI
+aWdobGlnaHRIdWU+CiAgPGNyczpTcGxpdFRvbmluZ0hpZ2hsaWdodFNhdHVyYXRp
+b24+MDwvY3JzOlNwbGl0VG9uaW5nSGlnaGxpZ2h0U2F0dXJhdGlvbj4KICA8Y3Jz
+OlNwbGl0VG9uaW5nU2hhZG93SHVlPjA8L2NyczpTcGxpdFRvbmluZ1NoYWRvd0h1
+ZT4KICA8Y3JzOlNwbGl0VG9uaW5nU2hhZG93U2F0dXJhdGlvbj4wPC9jcnM6U3Bs
+aXRUb25pbmdTaGFkb3dTYXR1cmF0aW9uPgogIDxjcnM6VG9uZUN1cnZlPgogICA8
+cmRmOlNlcT4KICAgIDxyZGY6bGk+MCwgMDwvcmRmOmxpPgogICAgPHJkZjpsaT4y
+NTUsIDI1NTwvcmRmOmxpPgogICA8L3JkZjpTZXE+CiAgPC9jcnM6VG9uZUN1cnZl
+PgogIDxjcnM6VG9uZUN1cnZlTmFtZT5MaW5lYXI8L2NyczpUb25lQ3VydmVOYW1l
+PgogIDxjcnM6VmVyc2lvbj41LjU8L2NyczpWZXJzaW9uPgogIDxjcnM6VmlicmFu
+Y2U+MDwvY3JzOlZpYnJhbmNlPgogIDxjcnM6VmlnbmV0dGVBbW91bnQ+MDwvY3Jz
+OlZpZ25ldHRlQW1vdW50PgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNj
+cmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpkYz0naHR0cDovL3B1cmwub3Jn
+L2RjL2VsZW1lbnRzLzEuMS8nPgogIDxkYzpmb3JtYXQ+YXBwbGljYXRpb24vdm5k
+LmFkb2JlLnBob3Rvc2hvcDwvZGM6Zm9ybWF0PgogIDxkYzpyaWdodHM+CiAgIDxy
+ZGY6QWx0PgogICAgPHJkZjpsaSB4bWw6bGFuZz0neC1kZWZhdWx0Jz4oYykg0JzQ
+sNC60YHQuNC8INCS0LDQu9GP0L3RgdC60LjQuTwvcmRmOmxpPgogICA8L3JkZjpB
+bHQ+CiAgPC9kYzpyaWdodHM+CiAgPGRjOnN1YmplY3Q+CiAgIDxyZGY6QmFnPgog
+ICAgPHJkZjpsaT5jYW5vbi01NS0yNTA8L3JkZjpsaT4KICAgIDxyZGY6bGk+bW9z
+Y293LWJpcmRzPC9yZGY6bGk+CiAgICA8cmRmOmxpPnNlcmJvcjwvcmRmOmxpPgog
+ICA8L3JkZjpCYWc+CiAgPC9kYzpzdWJqZWN0PgogPC9yZGY6RGVzY3JpcHRpb24+
+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpleGlmPSdo
+dHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyc+CiAgPGV4aWY6RGF0ZVRpbWVE
+aWdpdGl6ZWQ+MjAwOS0wOC0xMVQwOTowOTo0NS40OSswNDowMDwvZXhpZjpEYXRl
+VGltZURpZ2l0aXplZD4KICA8ZXhpZjpGbGFzaCByZGY6cGFyc2VUeXBlPSdSZXNv
+dXJjZSc+CiAgIDxleGlmOkZpcmVkPkZhbHNlPC9leGlmOkZpcmVkPgogICA8ZXhp
+ZjpGdW5jdGlvbj5GYWxzZTwvZXhpZjpGdW5jdGlvbj4KICAgPGV4aWY6TW9kZT4y
+PC9leGlmOk1vZGU+CiAgIDxleGlmOlJlZEV5ZU1vZGU+RmFsc2U8L2V4aWY6UmVk
+RXllTW9kZT4KICAgPGV4aWY6UmV0dXJuPjA8L2V4aWY6UmV0dXJuPgogIDwvZXhp
+ZjpGbGFzaD4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24g
+cmRmOmFib3V0PScnCiAgeG1sbnM6bHI9J2h0dHA6Ly9ucy5hZG9iZS5jb20vbGln
+aHRyb29tLzEuMC8nPgogIDxscjpoaWVyYXJjaGljYWxTdWJqZWN0PgogICA8cmRm
+OkJhZz4KICAgIDxyZGY6bGk+Y2Fub24tNTUtMjUwPC9yZGY6bGk+CiAgICA8cmRm
+OmxpPm1vc2Nvdy1iaXJkczwvcmRmOmxpPgogICAgPHJkZjpsaT5zZXJib3I8L3Jk
+ZjpsaT4KICAgPC9yZGY6QmFnPgogIDwvbHI6aGllcmFyY2hpY2FsU3ViamVjdD4K
+IDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0
+PScnCiAgeG1sbnM6cGhvdG9zaG9wPSdodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rv
+c2hvcC8xLjAvJz4KICA8cGhvdG9zaG9wOkhpc3Rvcnk+PC9waG90b3Nob3A6SGlz
+dG9yeT4KICA8cGhvdG9zaG9wOkxlZ2FjeUlQVENEaWdlc3Q+MTEwN0I2RDFDNDM3
+NkFCM0ZENThDNTY5RDczNUE1RDg8L3Bob3Rvc2hvcDpMZWdhY3lJUFRDRGlnZXN0
+PgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJv
+dXQ9JycKICB4bWxuczp0aWZmPSdodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4w
+Lyc+CiAgPHRpZmY6Qml0c1BlclNhbXBsZT4KICAgPHJkZjpTZXE+CiAgICA8cmRm
+OmxpPjg8L3JkZjpsaT4KICAgIDxyZGY6bGk+ODwvcmRmOmxpPgogICAgPHJkZjps
+aT44PC9yZGY6bGk+CiAgIDwvcmRmOlNlcT4KICA8L3RpZmY6Qml0c1BlclNhbXBs
+ZT4KICA8dGlmZjpDb21wcmVzc2lvbj44PC90aWZmOkNvbXByZXNzaW9uPgogIDx0
+aWZmOkltYWdlTGVuZ3RoPjI1OTI8L3RpZmY6SW1hZ2VMZW5ndGg+CiAgPHRpZmY6
+SW1hZ2VXaWR0aD4zODg4PC90aWZmOkltYWdlV2lkdGg+CiAgPHRpZmY6UGhvdG9t
+ZXRyaWNJbnRlcnByZXRhdGlvbj4yPC90aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0
+YXRpb24+CiAgPHRpZmY6UGxhbmFyQ29uZmlndXJhdGlvbj4xPC90aWZmOlBsYW5h
+ckNvbmZpZ3VyYXRpb24+CiAgPHRpZmY6U2FtcGxlc1BlclBpeGVsPjM8L3RpZmY6
+U2FtcGxlc1BlclBpeGVsPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNj
+cmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczp4bXA9J2h0dHA6Ly9ucy5hZG9i
+ZS5jb20veGFwLzEuMC8nPgogIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgUGhvdG9z
+aG9wIExpZ2h0cm9vbTwveG1wOkNyZWF0b3JUb29sPgogIDx4bXA6TWV0YWRhdGFE
+YXRlPjIwMDktMTAtMDJUMjI6NTU6MjkrMDQ6MDA8L3htcDpNZXRhZGF0YURhdGU+
+CiAgPHhtcDpSYXRpbmc+NTwveG1wOlJhdGluZz4KIDwvcmRmOkRlc2NyaXB0aW9u
+PgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6eG1wTU09
+J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8nPgogIDx4bXBNTTpJbnN0
+YW5jZUlEPnV1aWQ6QzZEN0NEREEzNUIxREUxMUIyQzhDRUQ5MUZDOTg1QjI8L3ht
+cE1NOkluc3RhbmNlSUQ+CiA8L3JkZjpEZXNjcmlwdGlvbj4KPC9yZGY6UkRGPgo8
+L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVu
+ZD0ndyc/Pv/bAEMAAgEBAQEBAgEBAQICAgICBAMCAgICBQQEAwQGBQYGBgUGBgYH
+CQgGBwkHBgYICwgJCgoKCgoGCAsMCwoMCQoKCv/bAEMBAgICAgICBQMDBQoHBgcK
+CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+Cv/AABEIAEQAZAMBEQACEQEDEQH/xAAdAAACAgMBAQEAAAAAAAAAAAAFBggJAgMH
+BAEA/8QAUBAAAgEDAgQCBAgIBBcAAAAAAQIDBAURAAYHCBIhEzEJFEFRFSIjMmFx
+kbEWJkKBodHS01VytMIkMzRDREhSYmZ0dYKEkpOUoqSys8HD1P/EABwBAAEFAQEB
+AAAAAAAAAAAAAAYAAQIDBwUIBP/EAD8RAAECBAMCCQkIAgMBAAAAAAECEQADBCEF
+EjEGQSJRUmGRkrHR0gcTFBUWQlNxcjI0NUNigbLwI6EzgsHh/9oADAMBAAIRAxEA
+PwDsnPpz48fuWvjxTcOOGVpsFVbZ9v09c7XO3ySyrI8syMAUlQdOI1PcE5J74wAS
+4Ng1NiNMZkwqBCmszaA8R44FMdx2rwyrTLlBJBSDcF9SNxHFHLrf6Uvm8qx1T2HZ
+sQx5tbJv/o12Bsth/LV0jujhnbDEh7iOg+KCtL6TrmSODWz7KQ+1Vtc5P/f1L2Vw
+8+8vpHhiB2yxJNylHQrxQSpvSWcepO8rbbb+JZZh982n9lMP5S+lPhhvbPE+QjoV
+4o9y+kd444yYtvHv/Brj75dN7K4fyl9I8MOdssU5COhXijYPSN8bCF+TsHc/we/l
+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"/>
+some other content
+</body>
+</html>
\ No newline at end of file
diff --git a/tika-parsers/src/test/resources/test-documents/testHTML_embedded_img_in_js.html b/tika-parsers/src/test/resources/test-documents/testHTML_embedded_img_in_js.html
new file mode 100644
index 0000000..589c47a
--- /dev/null
+++ b/tika-parsers/src/test/resources/test-documents/testHTML_embedded_img_in_js.html
@@ -0,0 +1,351 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <script>var logo="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEA8ADwAAD/7QCIUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAA
+AGscAVoAAxslRxwBAAACAAQcAgAAAgACHAIZAAxjYW5vbi01NS0yNTAcAhkADG1v
+c2Nvdy1iaXJkcxwCGQAGc2VyYm9yHAJ0ACMoYykg0JzQsNC60YHQuNC8INCS0LDQ
+u9GP0L3RgdC60LjQuQD/4QLwRXhpZgAASUkqAAgAAAAKAA8BAgAGAAAAhgAAABAB
+AgAOAAAAjAAAABoBBQABAAAAmgAAABsBBQABAAAAogAAACgBAwABAAAAAgAAADEB
+AgAeAAAAqgAAADIBAgAUAAAAyAAAABMCAwABAAAAAQAAAJiCAgAVAAAA3AAAAGmH
+BAABAAAA8gAAAAAAAABDYW5vbgBDYW5vbiBFT1MgNDBEAPAAAAABAAAA8AAAAAEA
+AABBZG9iZSBQaG90b3Nob3AgQ1MzIE1hY2ludG9zaAAyMDA5OjEwOjAyIDIzOjAy
+OjQ5AChjKSA/Pz8/Pz8gPz8/Pz8/Pz8/AAAgAJqCBQABAAAAeAIAAJ2CBQABAAAA
+gAIAACKIAwABAAAABAAAACeIAwABAAAAkAEAAACQBwAEAAAAMDIyMQOQAgAUAAAA
+iAIAAASQAgAUAAAAnAIAAAGRBwAEAAAAAQIDAAGSCgABAAAAsAIAAAKSBQABAAAA
+uAIAAASSCgABAAAAwAIAAAWSBQABAAAAyAIAAAeSAwABAAAABQAAAAmSAwABAAAA
+EAAAAAqSBQABAAAA0AIAABGSBAABAAAAAAAAAJGSAgADAAAANDkAAJKSAgADAAAA
+NDkAAACgBwAEAAAAMDEwMAGgAwABAAAA//8AAAKgAwABAAAAMA8AAAOgAwABAAAA
+IAoAAA6iBQABAAAA2AIAAA+iBQABAAAA4AIAABCiAwABAAAAAgAAAAGkAwABAAAA
+AAAAAAKkAwABAAAAAAAAAAOkAwABAAAAAQAAAAakAwABAAAAAAAAAAikAwABAAAA
+AAAAAAmkAwABAAAAAAAAAAqkAwABAAAAAAAAAAAAAAABAAAAQAYAABwAAAAFAAAA
+MjAwOTowODoxMSAwOTowOTo0NQAyMDA5OjA4OjExIDA5OjA5OjQ1AD1TAADSBwAA
+OZ8AAAggAAAAAAAAAQAAAJVHAABBDgAAwgAAAAEAAACg8QQASQAAAHf9CgCiAAAA
+/+0AiFBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAABrHAFaAAMbJUccAQAAAgAEHAIA
+AAIAAhwCGQAMY2Fub24tNTUtMjUwHAIZAAxtb3Njb3ctYmlyZHMcAhkABnNlcmJv
+chwCdAAjKGMpINCc0LDQutGB0LjQvCDQktCw0LvRj9C90YHQutC40LkA/+EkO2h0
+dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8gADw/eHBhY2tldCBiZWdpbj0n77u/
+JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+Cjx4OnhtcG1ldGEgeG1s
+bnM6eD0nYWRvYmU6bnM6bWV0YS8nIHg6eG1wdGs9J0ltYWdlOjpFeGlmVG9vbCA3
+LjIxJz4KPHJkZjpSREYgeG1sbnM6cmRmPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5
+LzAyLzIyLXJkZi1zeW50YXgtbnMjJz4KCiA8cmRmOkRlc2NyaXB0aW9uIHJkZjph
+Ym91dD0nJwogIHhtbG5zOmF1eD0naHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEu
+MC9hdXgvJz4KICA8YXV4OkZpcm13YXJlPjEuMS4xPC9hdXg6RmlybXdhcmU+CiAg
+PGF1eDpGbGFzaENvbXBlbnNhdGlvbj4wLzE8L2F1eDpGbGFzaENvbXBlbnNhdGlv
+bj4KICA8YXV4OkxlbnM+RUYtUzU1LTI1MG1tIGYvNC01LjYgSVM8L2F1eDpMZW5z
+PgogIDxhdXg6TGVuc0luZm8+NTUvMSAyNTAvMSAwLzAgMC8wPC9hdXg6TGVuc0lu
+Zm8+CiAgPGF1eDpTZXJpYWxOdW1iZXI+NzMwNTUyMjU4PC9hdXg6U2VyaWFsTnVt
+YmVyPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6
+YWJvdXQ9JycKICB4bWxuczpjcnM9J2h0dHA6Ly9ucy5hZG9iZS5jb20vY2FtZXJh
+LXJhdy1zZXR0aW5ncy8xLjAvJz4KICA8Y3JzOkFscmVhZHlBcHBsaWVkPlRydWU8
+L2NyczpBbHJlYWR5QXBwbGllZD4KICA8Y3JzOkJsdWVIdWU+MDwvY3JzOkJsdWVI
+dWU+CiAgPGNyczpCbHVlU2F0dXJhdGlvbj4wPC9jcnM6Qmx1ZVNhdHVyYXRpb24+
+CiAgPGNyczpCcmlnaHRuZXNzPjA8L2NyczpCcmlnaHRuZXNzPgogIDxjcnM6Q2Ft
+ZXJhUHJvZmlsZT5FbWJlZGRlZDwvY3JzOkNhbWVyYVByb2ZpbGU+CiAgPGNyczpD
+YW1lcmFQcm9maWxlRGlnZXN0PjU0NjUwQTM0MUI1QjVDQ0FFODQ0MkQwQjQzQTky
+QkNFPC9jcnM6Q2FtZXJhUHJvZmlsZURpZ2VzdD4KICA8Y3JzOkNocm9tYXRpY0Fi
+ZXJyYXRpb25CPjA8L2NyczpDaHJvbWF0aWNBYmVycmF0aW9uQj4KICA8Y3JzOkNo
+cm9tYXRpY0FiZXJyYXRpb25SPjA8L2NyczpDaHJvbWF0aWNBYmVycmF0aW9uUj4K
+ICA8Y3JzOkNsYXJpdHk+MDwvY3JzOkNsYXJpdHk+CiAgPGNyczpDb2xvck5vaXNl
+UmVkdWN0aW9uPjA8L2NyczpDb2xvck5vaXNlUmVkdWN0aW9uPgogIDxjcnM6Q29u
+dmVydFRvR3JheXNjYWxlPkZhbHNlPC9jcnM6Q29udmVydFRvR3JheXNjYWxlPgog
+IDxjcnM6RGVmcmluZ2U+MDwvY3JzOkRlZnJpbmdlPgogIDxjcnM6RXhwb3N1cmU+
+MC4wMDwvY3JzOkV4cG9zdXJlPgogIDxjcnM6RmlsbExpZ2h0PjA8L2NyczpGaWxs
+TGlnaHQ+CiAgPGNyczpHcmVlbkh1ZT4wPC9jcnM6R3JlZW5IdWU+CiAgPGNyczpH
+cmVlblNhdHVyYXRpb24+MDwvY3JzOkdyZWVuU2F0dXJhdGlvbj4KICA8Y3JzOkhh
+c0Nyb3A+RmFsc2U8L2NyczpIYXNDcm9wPgogIDxjcnM6SGFzU2V0dGluZ3M+VHJ1
+ZTwvY3JzOkhhc1NldHRpbmdzPgogIDxjcnM6SGlnaGxpZ2h0UmVjb3Zlcnk+MDwv
+Y3JzOkhpZ2hsaWdodFJlY292ZXJ5PgogIDxjcnM6SHVlQWRqdXN0bWVudEFxdWE+
+MDwvY3JzOkh1ZUFkanVzdG1lbnRBcXVhPgogIDxjcnM6SHVlQWRqdXN0bWVudEJs
+dWU+MDwvY3JzOkh1ZUFkanVzdG1lbnRCbHVlPgogIDxjcnM6SHVlQWRqdXN0bWVu
+dEdyZWVuPjA8L2NyczpIdWVBZGp1c3RtZW50R3JlZW4+CiAgPGNyczpIdWVBZGp1
+c3RtZW50TWFnZW50YT4wPC9jcnM6SHVlQWRqdXN0bWVudE1hZ2VudGE+CiAgPGNy
+czpIdWVBZGp1c3RtZW50T3JhbmdlPjA8L2NyczpIdWVBZGp1c3RtZW50T3Jhbmdl
+PgogIDxjcnM6SHVlQWRqdXN0bWVudFB1cnBsZT4wPC9jcnM6SHVlQWRqdXN0bWVu
+dFB1cnBsZT4KICA8Y3JzOkh1ZUFkanVzdG1lbnRSZWQ+MDwvY3JzOkh1ZUFkanVz
+dG1lbnRSZWQ+CiAgPGNyczpIdWVBZGp1c3RtZW50WWVsbG93PjA8L2NyczpIdWVB
+ZGp1c3RtZW50WWVsbG93PgogIDxjcnM6SW5jcmVtZW50YWxUZW1wZXJhdHVyZT4w
+PC9jcnM6SW5jcmVtZW50YWxUZW1wZXJhdHVyZT4KICA8Y3JzOkluY3JlbWVudGFs
+VGludD4wPC9jcnM6SW5jcmVtZW50YWxUaW50PgogIDxjcnM6THVtaW5hbmNlQWRq
+dXN0bWVudEFxdWE+MDwvY3JzOkx1bWluYW5jZUFkanVzdG1lbnRBcXVhPgogIDxj
+cnM6THVtaW5hbmNlQWRqdXN0bWVudEJsdWU+MDwvY3JzOkx1bWluYW5jZUFkanVz
+dG1lbnRCbHVlPgogIDxjcnM6THVtaW5hbmNlQWRqdXN0bWVudEdyZWVuPjA8L2Ny
+czpMdW1pbmFuY2VBZGp1c3RtZW50R3JlZW4+CiAgPGNyczpMdW1pbmFuY2VBZGp1
+c3RtZW50TWFnZW50YT4wPC9jcnM6THVtaW5hbmNlQWRqdXN0bWVudE1hZ2VudGE+
+CiAgPGNyczpMdW1pbmFuY2VBZGp1c3RtZW50T3JhbmdlPjA8L2NyczpMdW1pbmFu
+Y2VBZGp1c3RtZW50T3JhbmdlPgogIDxjcnM6THVtaW5hbmNlQWRqdXN0bWVudFB1
+cnBsZT4wPC9jcnM6THVtaW5hbmNlQWRqdXN0bWVudFB1cnBsZT4KICA8Y3JzOkx1
+bWluYW5jZUFkanVzdG1lbnRSZWQ+MDwvY3JzOkx1bWluYW5jZUFkanVzdG1lbnRS
+ZWQ+CiAgPGNyczpMdW1pbmFuY2VBZGp1c3RtZW50WWVsbG93PjA8L2NyczpMdW1p
+bmFuY2VBZGp1c3RtZW50WWVsbG93PgogIDxjcnM6THVtaW5hbmNlU21vb3RoaW5n
+PjA8L2NyczpMdW1pbmFuY2VTbW9vdGhpbmc+CiAgPGNyczpQYXJhbWV0cmljRGFy
+a3M+MDwvY3JzOlBhcmFtZXRyaWNEYXJrcz4KICA8Y3JzOlBhcmFtZXRyaWNIaWdo
+bGlnaHRTcGxpdD43NTwvY3JzOlBhcmFtZXRyaWNIaWdobGlnaHRTcGxpdD4KICA8
+Y3JzOlBhcmFtZXRyaWNIaWdobGlnaHRzPjA8L2NyczpQYXJhbWV0cmljSGlnaGxp
+Z2h0cz4KICA8Y3JzOlBhcmFtZXRyaWNMaWdodHM+MDwvY3JzOlBhcmFtZXRyaWNM
+aWdodHM+CiAgPGNyczpQYXJhbWV0cmljTWlkdG9uZVNwbGl0PjUwPC9jcnM6UGFy
+YW1ldHJpY01pZHRvbmVTcGxpdD4KICA8Y3JzOlBhcmFtZXRyaWNTaGFkb3dTcGxp
+dD4yNTwvY3JzOlBhcmFtZXRyaWNTaGFkb3dTcGxpdD4KICA8Y3JzOlBhcmFtZXRy
+aWNTaGFkb3dzPjA8L2NyczpQYXJhbWV0cmljU2hhZG93cz4KICA8Y3JzOlJlZEh1
+ZT4wPC9jcnM6UmVkSHVlPgogIDxjcnM6UmVkU2F0dXJhdGlvbj4wPC9jcnM6UmVk
+U2F0dXJhdGlvbj4KICA8Y3JzOlNhdHVyYXRpb25BZGp1c3RtZW50QXF1YT4wPC9j
+cnM6U2F0dXJhdGlvbkFkanVzdG1lbnRBcXVhPgogIDxjcnM6U2F0dXJhdGlvbkFk
+anVzdG1lbnRCbHVlPjA8L2NyczpTYXR1cmF0aW9uQWRqdXN0bWVudEJsdWU+CiAg
+PGNyczpTYXR1cmF0aW9uQWRqdXN0bWVudEdyZWVuPjA8L2NyczpTYXR1cmF0aW9u
+QWRqdXN0bWVudEdyZWVuPgogIDxjcnM6U2F0dXJhdGlvbkFkanVzdG1lbnRNYWdl
+bnRhPjA8L2NyczpTYXR1cmF0aW9uQWRqdXN0bWVudE1hZ2VudGE+CiAgPGNyczpT
+YXR1cmF0aW9uQWRqdXN0bWVudE9yYW5nZT4wPC9jcnM6U2F0dXJhdGlvbkFkanVz
+dG1lbnRPcmFuZ2U+CiAgPGNyczpTYXR1cmF0aW9uQWRqdXN0bWVudFB1cnBsZT4w
+PC9jcnM6U2F0dXJhdGlvbkFkanVzdG1lbnRQdXJwbGU+CiAgPGNyczpTYXR1cmF0
+aW9uQWRqdXN0bWVudFJlZD4wPC9jcnM6U2F0dXJhdGlvbkFkanVzdG1lbnRSZWQ+
+CiAgPGNyczpTYXR1cmF0aW9uQWRqdXN0bWVudFllbGxvdz4wPC9jcnM6U2F0dXJh
+dGlvbkFkanVzdG1lbnRZZWxsb3c+CiAgPGNyczpTaGFkb3dUaW50PjA8L2NyczpT
+aGFkb3dUaW50PgogIDxjcnM6U2hhZG93cz4wPC9jcnM6U2hhZG93cz4KICA8Y3Jz
+OlNoYXJwZW5EZXRhaWw+MjU8L2NyczpTaGFycGVuRGV0YWlsPgogIDxjcnM6U2hh
+cnBlbkVkZ2VNYXNraW5nPjA8L2NyczpTaGFycGVuRWRnZU1hc2tpbmc+CiAgPGNy
+czpTaGFycGVuUmFkaXVzPisxLjA8L2NyczpTaGFycGVuUmFkaXVzPgogIDxjcnM6
+U3BsaXRUb25pbmdCYWxhbmNlPjA8L2NyczpTcGxpdFRvbmluZ0JhbGFuY2U+CiAg
+PGNyczpTcGxpdFRvbmluZ0hpZ2hsaWdodEh1ZT4wPC9jcnM6U3BsaXRUb25pbmdI
+aWdobGlnaHRIdWU+CiAgPGNyczpTcGxpdFRvbmluZ0hpZ2hsaWdodFNhdHVyYXRp
+b24+MDwvY3JzOlNwbGl0VG9uaW5nSGlnaGxpZ2h0U2F0dXJhdGlvbj4KICA8Y3Jz
+OlNwbGl0VG9uaW5nU2hhZG93SHVlPjA8L2NyczpTcGxpdFRvbmluZ1NoYWRvd0h1
+ZT4KICA8Y3JzOlNwbGl0VG9uaW5nU2hhZG93U2F0dXJhdGlvbj4wPC9jcnM6U3Bs
+aXRUb25pbmdTaGFkb3dTYXR1cmF0aW9uPgogIDxjcnM6VG9uZUN1cnZlPgogICA8
+cmRmOlNlcT4KICAgIDxyZGY6bGk+MCwgMDwvcmRmOmxpPgogICAgPHJkZjpsaT4y
+NTUsIDI1NTwvcmRmOmxpPgogICA8L3JkZjpTZXE+CiAgPC9jcnM6VG9uZUN1cnZl
+PgogIDxjcnM6VG9uZUN1cnZlTmFtZT5MaW5lYXI8L2NyczpUb25lQ3VydmVOYW1l
+PgogIDxjcnM6VmVyc2lvbj41LjU8L2NyczpWZXJzaW9uPgogIDxjcnM6VmlicmFu
+Y2U+MDwvY3JzOlZpYnJhbmNlPgogIDxjcnM6VmlnbmV0dGVBbW91bnQ+MDwvY3Jz
+OlZpZ25ldHRlQW1vdW50PgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNj
+cmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpkYz0naHR0cDovL3B1cmwub3Jn
+L2RjL2VsZW1lbnRzLzEuMS8nPgogIDxkYzpmb3JtYXQ+YXBwbGljYXRpb24vdm5k
+LmFkb2JlLnBob3Rvc2hvcDwvZGM6Zm9ybWF0PgogIDxkYzpyaWdodHM+CiAgIDxy
+ZGY6QWx0PgogICAgPHJkZjpsaSB4bWw6bGFuZz0neC1kZWZhdWx0Jz4oYykg0JzQ
+sNC60YHQuNC8INCS0LDQu9GP0L3RgdC60LjQuTwvcmRmOmxpPgogICA8L3JkZjpB
+bHQ+CiAgPC9kYzpyaWdodHM+CiAgPGRjOnN1YmplY3Q+CiAgIDxyZGY6QmFnPgog
+ICAgPHJkZjpsaT5jYW5vbi01NS0yNTA8L3JkZjpsaT4KICAgIDxyZGY6bGk+bW9z
+Y293LWJpcmRzPC9yZGY6bGk+CiAgICA8cmRmOmxpPnNlcmJvcjwvcmRmOmxpPgog
+ICA8L3JkZjpCYWc+CiAgPC9kYzpzdWJqZWN0PgogPC9yZGY6RGVzY3JpcHRpb24+
+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpleGlmPSdo
+dHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyc+CiAgPGV4aWY6RGF0ZVRpbWVE
+aWdpdGl6ZWQ+MjAwOS0wOC0xMVQwOTowOTo0NS40OSswNDowMDwvZXhpZjpEYXRl
+VGltZURpZ2l0aXplZD4KICA8ZXhpZjpGbGFzaCByZGY6cGFyc2VUeXBlPSdSZXNv
+dXJjZSc+CiAgIDxleGlmOkZpcmVkPkZhbHNlPC9leGlmOkZpcmVkPgogICA8ZXhp
+ZjpGdW5jdGlvbj5GYWxzZTwvZXhpZjpGdW5jdGlvbj4KICAgPGV4aWY6TW9kZT4y
+PC9leGlmOk1vZGU+CiAgIDxleGlmOlJlZEV5ZU1vZGU+RmFsc2U8L2V4aWY6UmVk
+RXllTW9kZT4KICAgPGV4aWY6UmV0dXJuPjA8L2V4aWY6UmV0dXJuPgogIDwvZXhp
+ZjpGbGFzaD4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24g
+cmRmOmFib3V0PScnCiAgeG1sbnM6bHI9J2h0dHA6Ly9ucy5hZG9iZS5jb20vbGln
+aHRyb29tLzEuMC8nPgogIDxscjpoaWVyYXJjaGljYWxTdWJqZWN0PgogICA8cmRm
+OkJhZz4KICAgIDxyZGY6bGk+Y2Fub24tNTUtMjUwPC9yZGY6bGk+CiAgICA8cmRm
+OmxpPm1vc2Nvdy1iaXJkczwvcmRmOmxpPgogICAgPHJkZjpsaT5zZXJib3I8L3Jk
+ZjpsaT4KICAgPC9yZGY6QmFnPgogIDwvbHI6aGllcmFyY2hpY2FsU3ViamVjdD4K
+IDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0
+PScnCiAgeG1sbnM6cGhvdG9zaG9wPSdodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rv
+c2hvcC8xLjAvJz4KICA8cGhvdG9zaG9wOkhpc3Rvcnk+PC9waG90b3Nob3A6SGlz
+dG9yeT4KICA8cGhvdG9zaG9wOkxlZ2FjeUlQVENEaWdlc3Q+MTEwN0I2RDFDNDM3
+NkFCM0ZENThDNTY5RDczNUE1RDg8L3Bob3Rvc2hvcDpMZWdhY3lJUFRDRGlnZXN0
+PgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJv
+dXQ9JycKICB4bWxuczp0aWZmPSdodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4w
+Lyc+CiAgPHRpZmY6Qml0c1BlclNhbXBsZT4KICAgPHJkZjpTZXE+CiAgICA8cmRm
+OmxpPjg8L3JkZjpsaT4KICAgIDxyZGY6bGk+ODwvcmRmOmxpPgogICAgPHJkZjps
+aT44PC9yZGY6bGk+CiAgIDwvcmRmOlNlcT4KICA8L3RpZmY6Qml0c1BlclNhbXBs
+ZT4KICA8dGlmZjpDb21wcmVzc2lvbj44PC90aWZmOkNvbXByZXNzaW9uPgogIDx0
+aWZmOkltYWdlTGVuZ3RoPjI1OTI8L3RpZmY6SW1hZ2VMZW5ndGg+CiAgPHRpZmY6
+SW1hZ2VXaWR0aD4zODg4PC90aWZmOkltYWdlV2lkdGg+CiAgPHRpZmY6UGhvdG9t
+ZXRyaWNJbnRlcnByZXRhdGlvbj4yPC90aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0
+YXRpb24+CiAgPHRpZmY6UGxhbmFyQ29uZmlndXJhdGlvbj4xPC90aWZmOlBsYW5h
+ckNvbmZpZ3VyYXRpb24+CiAgPHRpZmY6U2FtcGxlc1BlclBpeGVsPjM8L3RpZmY6
+U2FtcGxlc1BlclBpeGVsPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNj
+cmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczp4bXA9J2h0dHA6Ly9ucy5hZG9i
+ZS5jb20veGFwLzEuMC8nPgogIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgUGhvdG9z
+aG9wIExpZ2h0cm9vbTwveG1wOkNyZWF0b3JUb29sPgogIDx4bXA6TWV0YWRhdGFE
+YXRlPjIwMDktMTAtMDJUMjI6NTU6MjkrMDQ6MDA8L3htcDpNZXRhZGF0YURhdGU+
+CiAgPHhtcDpSYXRpbmc+NTwveG1wOlJhdGluZz4KIDwvcmRmOkRlc2NyaXB0aW9u
+PgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6eG1wTU09
+J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8nPgogIDx4bXBNTTpJbnN0
+YW5jZUlEPnV1aWQ6QzZEN0NEREEzNUIxREUxMUIyQzhDRUQ5MUZDOTg1QjI8L3ht
+cE1NOkluc3RhbmNlSUQ+CiA8L3JkZjpEZXNjcmlwdGlvbj4KPC9yZGY6UkRGPgo8
+L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVu
+ZD0ndyc/Pv/bAEMAAgEBAQEBAgEBAQICAgICBAMCAgICBQQEAwQGBQYGBgUGBgYH
+CQgGBwkHBgYICwgJCgoKCgoGCAsMCwoMCQoKCv/bAEMBAgICAgICBQMDBQoHBgcK
+CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+Cv/AABEIAEQAZAMBEQACEQEDEQH/xAAdAAACAgMBAQEAAAAAAAAAAAAFBggJAgMH
+BAEA/8QAUBAAAgEDAgQCBAgIBBcAAAAAAQIDBAURAAYHCBIhEzEJFEFRFSIjMmFx
+kbEWJkKBodHS01VytMIkMzRDREhSYmZ0dYKEkpOUoqSys8HD1P/EABwBAAEFAQEB
+AAAAAAAAAAAAAAYAAQIDBwUIBP/EAD8RAAECBAMCCQkIAgMBAAAAAAECEQADBCEF
+EjEGQSJRUmGRkrHR0gcTFBUWQlNxcjI0NUNigbLwI6EzgsHh/9oADAMBAAIRAxEA
+PwDsnPpz48fuWvjxTcOOGVpsFVbZ9v09c7XO3ySyrI8syMAUlQdOI1PcE5J74wAS
+4Ng1NiNMZkwqBCmszaA8R44FMdx2rwyrTLlBJBSDcF9SNxHFHLrf6Uvm8qx1T2HZ
+sQx5tbJv/o12Bsth/LV0jujhnbDEh7iOg+KCtL6TrmSODWz7KQ+1Vtc5P/f1L2Vw
+8+8vpHhiB2yxJNylHQrxQSpvSWcepO8rbbb+JZZh982n9lMP5S+lPhhvbPE+QjoV
+4o9y+kd444yYtvHv/Brj75dN7K4fyl9I8MOdssU5COhXijYPSN8bCF+TsHc/we/l
+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"</script>
+</head>
+<body>
+some content
+</body>
+</html>
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
tallison@apache.org.