# Path: multiscanner/config.py
# MS_WD = os.path.dirname(os.path.abspath(__file__))
# MODULESDIR = os.path.join(MS_WD, 'modules')
# CONFIG = determine_configuration_path(None)
# def get_configuration_paths():
# def determine_configuration_path(filepath):
# 
# Path: multiscanner/ext/pdfparser.py
# CHAR_WHITESPACE = 1
# CHAR_DELIMITER = 2
# CHAR_REGULAR = 3
# CONTEXT_NONE = 1
# CONTEXT_OBJ = 2
# CONTEXT_XREF = 3
# CONTEXT_TRAILER = 4
# PDF_ELEMENT_COMMENT = 1
# PDF_ELEMENT_INDIRECT_OBJECT = 2
# PDF_ELEMENT_XREF = 3
# PDF_ELEMENT_TRAILER = 4
# PDF_ELEMENT_STARTXREF = 5
# PDF_ELEMENT_MALFORMED = 6
# def C2BIP3(string):
# def CIC(expression):
# def IFF(expression, valueTrue, valueFalse):
# def Timestamp(epoch=None):
# def CopyWithoutWhiteSpace(content):
# def Obj2Str(content):
#     def __init__(self, file):
#     def byte(self):
#     def unget(self, byte):
# def CharacterClass(byte):
# def IsNumeric(str):
#     def __init__(self, file):
#     def Token(self):
#     def TokenIgnoreWhiteSpace(self):
#     def Tokens(self):
#     def unget(self, byte):
#     def __init__(self, file, verbose=False, extract=None):
#     def GetObject(self):
#     def __init__(self, comment):
#     def __init__(self, content):
#     def __init__(self, content):
#     def Contains(self, keyword):
# def IIf(expr, truepart, falsepart):
#     def __init__(self, id, version, content):
#     def GetType(self):
#     def GetReferences(self):
#     def References(self, index):
#     def ContainsStream(self):
#     def Contains(self, keyword):
#     def StreamContains(self, keyword, filter, casesensitive, regex):
#     def Stream(self, filter=True):
#     def Decompress(self, data, filters):
#     def StreamYARAMatch(self, rules, decoders, decoderoptions, filter):
#     def __init__(self, index):
#     def __init__(self, content):
# def TrimLWhiteSpace(data):
# def TrimRWhiteSpace(data):
#     def __init__(self, content, nocanonicalizedoutput):
#     def isOpenDictionary(self, token):
#     def isCloseDictionary(self, token):
#     def couldBeCloseDictionary(self, token):
#     def ParseDictionary(self, tokens):
#     def Retrieve(self):
#     def PrettyPrintSubElement(self, prefix, e):
#     def PrettyPrintSub(self, prefix, dictionary):
#     def PrettyPrint(self, prefix):
#     def Get(self, select):
#     def GetNestedSub(self, dictionary, select):
#     def GetNested(self, select):
# def FormatOutput(data, raw):
# def StdoutWriteChunked(data):
# def IfWIN32SetBinary(io):
# def PrintOutputObject(object, options):
# def Canonicalize(sIn):
# def EqualCanonical(s1, s2):
# def ConditionalCanonicalize(sIn, nocanonicalizedoutput):
# def ASCII85Decode(data):
# def ASCIIHexDecode(data):
# def FlateDecode(data):
# def RunLengthDecode(data):
#     def __init__(self, fp):
#     def readbits(self, bits):
#     def feed(self, code):
#     def run(self):
# def LZWDecode(data):
# def PrintGenerateObject(object, options, newId=None):
# def PrintObject(object, options):
# def File2Strings(filename):
# def ProcessAt(argument):
# def YARACompile(ruledata):
# def AddDecoder(cClass):
# def LoadDecoders(decoders, verbose):
#     def __init__(self, stream, options):
#     def Available(self):
#     def Decode(self):
#     def Name(self):
# def DecodeFunction(decoders, options, stream):
#     def __init__(self):
#     def Addline(self, line):
#     def Content(self):
# def HexDump(data):
# def CombineHexAscii(hexDump, asciiDump):
# def HexAsciiDump(data):
# def HexAsciiDumpLine(data):
# def Main():
# def TestPythonVersion(enforceMaximumVersion=False, enforceMinimumVersion=False):
# class cPDFDocument:
# class cPDFTokenizer:
# class cPDFParser:
# class cPDFElementComment:
# class cPDFElementXref:
# class cPDFElementTrailer:
# class cPDFElementIndirectObject:
# class cPDFElementStartxref:
# class cPDFElementMalformed:
# class cPDFParseDictionary:
# class LZWDecoder(object):
# class cDecoderParent():
# class cIdentity(cDecoderParent):
# class cDumpStream():


import hashlib
import math
import re
from multiscanner.config import PY3
from multiscanner.ext import pdfparser
        'XObject': 0,
        'Sig': 0,
        'Pages': 0,
        'FontDescriptor': 0,
        'Font': 0,
        'EmbeddedFile': 0,
        'StructTreeRoot': 0,
        'Mask': 0,
        'Group': 0,
        'Outlines': 0,
        'Action': 0,
        'Annot': 0,
        'Other_objects': 0,
        'Encoding': 0,
        'ExtGState': 0,
        'Pattern': 0,
        '3D': 0,
        'Total': 0,
        'Version': '',
    }
    object_summary["Version"] = _get_pdf_version(data[:1024])
    oPDFParser = pdfparser.cPDFParser(fname)
    done = True
    # self._debug("Parsing document")
    while done is True:
        try:
            pdf_object = oPDFParser.GetObject()
        except Exception as e:
            pdf_object = None
        if pdf_object is not None:

# Path: multiscanner/config.py
# MS_WD = os.path.dirname(os.path.abspath(__file__))
# MODULESDIR = os.path.join(MS_WD, 'modules')
# CONFIG = determine_configuration_path(None)
# def get_configuration_paths():
# def determine_configuration_path(filepath):
# 
# Path: multiscanner/ext/pdfparser.py
# CHAR_WHITESPACE = 1
# CHAR_DELIMITER = 2
# CHAR_REGULAR = 3
# CONTEXT_NONE = 1
# CONTEXT_OBJ = 2
# CONTEXT_XREF = 3
# CONTEXT_TRAILER = 4
# PDF_ELEMENT_COMMENT = 1
# PDF_ELEMENT_INDIRECT_OBJECT = 2
# PDF_ELEMENT_XREF = 3
# PDF_ELEMENT_TRAILER = 4
# PDF_ELEMENT_STARTXREF = 5
# PDF_ELEMENT_MALFORMED = 6
# def C2BIP3(string):
# def CIC(expression):
# def IFF(expression, valueTrue, valueFalse):
# def Timestamp(epoch=None):
# def CopyWithoutWhiteSpace(content):
# def Obj2Str(content):
#     def __init__(self, file):
#     def byte(self):
#     def unget(self, byte):
# def CharacterClass(byte):
# def IsNumeric(str):
#     def __init__(self, file):
#     def Token(self):
#     def TokenIgnoreWhiteSpace(self):
#     def Tokens(self):
#     def unget(self, byte):
#     def __init__(self, file, verbose=False, extract=None):
#     def GetObject(self):
#     def __init__(self, comment):
#     def __init__(self, content):
#     def __init__(self, content):
#     def Contains(self, keyword):
# def IIf(expr, truepart, falsepart):
#     def __init__(self, id, version, content):
#     def GetType(self):
#     def GetReferences(self):
#     def References(self, index):
#     def ContainsStream(self):
#     def Contains(self, keyword):
#     def StreamContains(self, keyword, filter, casesensitive, regex):
#     def Stream(self, filter=True):
#     def Decompress(self, data, filters):
#     def StreamYARAMatch(self, rules, decoders, decoderoptions, filter):
#     def __init__(self, index):
#     def __init__(self, content):
# def TrimLWhiteSpace(data):
# def TrimRWhiteSpace(data):
#     def __init__(self, content, nocanonicalizedoutput):
#     def isOpenDictionary(self, token):
#     def isCloseDictionary(self, token):
#     def couldBeCloseDictionary(self, token):
#     def ParseDictionary(self, tokens):
#     def Retrieve(self):
#     def PrettyPrintSubElement(self, prefix, e):
#     def PrettyPrintSub(self, prefix, dictionary):
#     def PrettyPrint(self, prefix):
#     def Get(self, select):
#     def GetNestedSub(self, dictionary, select):
#     def GetNested(self, select):
# def FormatOutput(data, raw):
# def StdoutWriteChunked(data):
# def IfWIN32SetBinary(io):
# def PrintOutputObject(object, options):
# def Canonicalize(sIn):
# def EqualCanonical(s1, s2):
# def ConditionalCanonicalize(sIn, nocanonicalizedoutput):
# def ASCII85Decode(data):
# def ASCIIHexDecode(data):
# def FlateDecode(data):
# def RunLengthDecode(data):
#     def __init__(self, fp):
#     def readbits(self, bits):
#     def feed(self, code):
#     def run(self):
# def LZWDecode(data):
# def PrintGenerateObject(object, options, newId=None):
# def PrintObject(object, options):
# def File2Strings(filename):
# def ProcessAt(argument):
# def YARACompile(ruledata):
# def AddDecoder(cClass):
# def LoadDecoders(decoders, verbose):
#     def __init__(self, stream, options):
#     def Available(self):
#     def Decode(self):
#     def Name(self):
# def DecodeFunction(decoders, options, stream):
#     def __init__(self):
#     def Addline(self, line):
#     def Content(self):
# def HexDump(data):
# def CombineHexAscii(hexDump, asciiDump):
# def HexAsciiDump(data):
# def HexAsciiDumpLine(data):
# def Main():
# def TestPythonVersion(enforceMaximumVersion=False, enforceMinimumVersion=False):
# class cPDFDocument:
# class cPDFTokenizer:
# class cPDFParser:
# class cPDFElementComment:
# class cPDFElementXref:
# class cPDFElementTrailer:
# class cPDFElementIndirectObject:
# class cPDFElementStartxref:
# class cPDFElementMalformed:
# class cPDFParseDictionary:
# class LZWDecoder(object):
# class cDecoderParent():
# class cIdentity(cDecoderParent):
# class cDumpStream():


# Path: multiscanner/modules/Metadata/pdfinfo.py
import hashlib
import math
import re
from multiscanner.config import PY3
from multiscanner.ext import pdfparser

        'XObject': 0,
        'Sig': 0,
        'Pages': 0,
        'FontDescriptor': 0,
        'Font': 0,
        'EmbeddedFile': 0,
        'StructTreeRoot': 0,
        'Mask': 0,
        'Group': 0,
        'Outlines': 0,
        'Action': 0,
        'Annot': 0,
        'Other_objects': 0,
        'Encoding': 0,
        'ExtGState': 0,
        'Pattern': 0,
        '3D': 0,
        'Total': 0,
        'Version': '',
    }
    object_summary["Version"] = _get_pdf_version(data[:1024])
    oPDFParser = pdfparser.cPDFParser(fname)
    done = True
    # self._debug("Parsing document")
    while done is True:
        try:
            pdf_object = oPDFParser.GetObject()
        except Exception as e:
            pdf_object = None
        if pdf_object is not None:

            if pdf_object.type in [pdfparser.PDF_ELEMENT_INDIRECT_OBJECT]: