#
# Autogenerated by Thrift Compiler (0.11.0)
#
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
#
#  options string: py
#

from thrift.Thrift import TType, TMessageType, TFrozenDict, TException, TApplicationException
from thrift.protocol.TProtocol import TProtocolException
from thrift.TRecursive import fix_spec

import sys
import codechecker_api_shared.ttypes

from thrift.transport import TTransport
all_structs = []


class DetectionStatus(object):
    """
    Detection status is an automated system which assigns a value to every
    report during the storage process.
    """
    NEW = 0
    RESOLVED = 1
    UNRESOLVED = 2
    REOPENED = 3
    OFF = 4
    UNAVAILABLE = 5

    _VALUES_TO_NAMES = {
        0: "NEW",
        1: "RESOLVED",
        2: "UNRESOLVED",
        3: "REOPENED",
        4: "OFF",
        5: "UNAVAILABLE",
    }

    _NAMES_TO_VALUES = {
        "NEW": 0,
        "RESOLVED": 1,
        "UNRESOLVED": 2,
        "REOPENED": 3,
        "OFF": 4,
        "UNAVAILABLE": 5,
    }


class DiffType(object):
    NEW = 0
    RESOLVED = 1
    UNRESOLVED = 2

    _VALUES_TO_NAMES = {
        0: "NEW",
        1: "RESOLVED",
        2: "UNRESOLVED",
    }

    _NAMES_TO_VALUES = {
        "NEW": 0,
        "RESOLVED": 1,
        "UNRESOLVED": 2,
    }


class Encoding(object):
    DEFAULT = 0
    BASE64 = 1

    _VALUES_TO_NAMES = {
        0: "DEFAULT",
        1: "BASE64",
    }

    _NAMES_TO_VALUES = {
        "DEFAULT": 0,
        "BASE64": 1,
    }


class Order(object):
    ASC = 0
    DESC = 1

    _VALUES_TO_NAMES = {
        0: "ASC",
        1: "DESC",
    }

    _NAMES_TO_VALUES = {
        "ASC": 0,
        "DESC": 1,
    }


class ReviewStatus(object):
    """
    Review status is a feature which allows a user to assign one of these
    statuses to a particular Report.
    """
    UNREVIEWED = 0
    CONFIRMED = 1
    FALSE_POSITIVE = 2
    INTENTIONAL = 3

    _VALUES_TO_NAMES = {
        0: "UNREVIEWED",
        1: "CONFIRMED",
        2: "FALSE_POSITIVE",
        3: "INTENTIONAL",
    }

    _NAMES_TO_VALUES = {
        "UNREVIEWED": 0,
        "CONFIRMED": 1,
        "FALSE_POSITIVE": 2,
        "INTENTIONAL": 3,
    }


class Severity(object):
    """
    The severity of the reported issue. This list is generated from CodeChecker's
    database on analyzer checkers.
    """
    UNSPECIFIED = 0
    STYLE = 10
    LOW = 20
    MEDIUM = 30
    HIGH = 40
    CRITICAL = 50

    _VALUES_TO_NAMES = {
        0: "UNSPECIFIED",
        10: "STYLE",
        20: "LOW",
        30: "MEDIUM",
        40: "HIGH",
        50: "CRITICAL",
    }

    _NAMES_TO_VALUES = {
        "UNSPECIFIED": 0,
        "STYLE": 10,
        "LOW": 20,
        "MEDIUM": 30,
        "HIGH": 40,
        "CRITICAL": 50,
    }


class SortType(object):
    FILENAME = 0
    CHECKER_NAME = 1
    SEVERITY = 2
    REVIEW_STATUS = 3
    DETECTION_STATUS = 4
    BUG_PATH_LENGTH = 5

    _VALUES_TO_NAMES = {
        0: "FILENAME",
        1: "CHECKER_NAME",
        2: "SEVERITY",
        3: "REVIEW_STATUS",
        4: "DETECTION_STATUS",
        5: "BUG_PATH_LENGTH",
    }

    _NAMES_TO_VALUES = {
        "FILENAME": 0,
        "CHECKER_NAME": 1,
        "SEVERITY": 2,
        "REVIEW_STATUS": 3,
        "DETECTION_STATUS": 4,
        "BUG_PATH_LENGTH": 5,
    }


class RunSortType(object):
    NAME = 0
    UNRESOLVED_REPORTS = 1
    DATE = 2
    DURATION = 3
    CC_VERSION = 4

    _VALUES_TO_NAMES = {
        0: "NAME",
        1: "UNRESOLVED_REPORTS",
        2: "DATE",
        3: "DURATION",
        4: "CC_VERSION",
    }

    _NAMES_TO_VALUES = {
        "NAME": 0,
        "UNRESOLVED_REPORTS": 1,
        "DATE": 2,
        "DURATION": 3,
        "CC_VERSION": 4,
    }


class StoreLimitKind(object):
    FAILURE_ZIP_SIZE = 0
    COMPILATION_DATABASE_SIZE = 1

    _VALUES_TO_NAMES = {
        0: "FAILURE_ZIP_SIZE",
        1: "COMPILATION_DATABASE_SIZE",
    }

    _NAMES_TO_VALUES = {
        "FAILURE_ZIP_SIZE": 0,
        "COMPILATION_DATABASE_SIZE": 1,
    }


class ExtendedReportDataType(object):
    NOTE = 0
    MACRO = 10
    FIXIT = 20

    _VALUES_TO_NAMES = {
        0: "NOTE",
        10: "MACRO",
        20: "FIXIT",
    }

    _NAMES_TO_VALUES = {
        "NOTE": 0,
        "MACRO": 10,
        "FIXIT": 20,
    }


class CommentKind(object):
    USER = 0
    SYSTEM = 1

    _VALUES_TO_NAMES = {
        0: "USER",
        1: "SYSTEM",
    }

    _NAMES_TO_VALUES = {
        "USER": 0,
        "SYSTEM": 1,
    }


class ReviewStatusRuleSortType(object):
    REPORT_HASH = 0
    STATUS = 1
    AUTHOR = 2
    DATE = 3
    ASSOCIATED_REPORTS_COUNT = 4

    _VALUES_TO_NAMES = {
        0: "REPORT_HASH",
        1: "STATUS",
        2: "AUTHOR",
        3: "DATE",
        4: "ASSOCIATED_REPORTS_COUNT",
    }

    _NAMES_TO_VALUES = {
        "REPORT_HASH": 0,
        "STATUS": 1,
        "AUTHOR": 2,
        "DATE": 3,
        "ASSOCIATED_REPORTS_COUNT": 4,
    }


class SourceFileData(object):
    """
    Attributes:
     - fileId
     - filePath
     - fileContent
     - hasBlameInfo
     - remoteUrl
     - trackingBranch
    """


    def __init__(self, fileId=None, filePath=None, fileContent=None, hasBlameInfo=None, remoteUrl=None, trackingBranch=None,):
        self.fileId = fileId
        self.filePath = filePath
        self.fileContent = fileContent
        self.hasBlameInfo = hasBlameInfo
        self.remoteUrl = remoteUrl
        self.trackingBranch = trackingBranch

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I64:
                    self.fileId = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.STRING:
                    self.filePath = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.STRING:
                    self.fileContent = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.BOOL:
                    self.hasBlameInfo = iprot.readBool()
                else:
                    iprot.skip(ftype)
            elif fid == 5:
                if ftype == TType.STRING:
                    self.remoteUrl = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 6:
                if ftype == TType.STRING:
                    self.trackingBranch = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('SourceFileData')
        if self.fileId is not None:
            oprot.writeFieldBegin('fileId', TType.I64, 1)
            oprot.writeI64(self.fileId)
            oprot.writeFieldEnd()
        if self.filePath is not None:
            oprot.writeFieldBegin('filePath', TType.STRING, 2)
            oprot.writeString(self.filePath.encode('utf-8') if sys.version_info[0] == 2 else self.filePath)
            oprot.writeFieldEnd()
        if self.fileContent is not None:
            oprot.writeFieldBegin('fileContent', TType.STRING, 3)
            oprot.writeString(self.fileContent.encode('utf-8') if sys.version_info[0] == 2 else self.fileContent)
            oprot.writeFieldEnd()
        if self.hasBlameInfo is not None:
            oprot.writeFieldBegin('hasBlameInfo', TType.BOOL, 4)
            oprot.writeBool(self.hasBlameInfo)
            oprot.writeFieldEnd()
        if self.remoteUrl is not None:
            oprot.writeFieldBegin('remoteUrl', TType.STRING, 5)
            oprot.writeString(self.remoteUrl.encode('utf-8') if sys.version_info[0] == 2 else self.remoteUrl)
            oprot.writeFieldEnd()
        if self.trackingBranch is not None:
            oprot.writeFieldBegin('trackingBranch', TType.STRING, 6)
            oprot.writeString(self.trackingBranch.encode('utf-8') if sys.version_info[0] == 2 else self.trackingBranch)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class SortMode(object):
    """
    Attributes:
     - type
     - ord
    """


    def __init__(self, type=None, ord=None,):
        self.type = type
        self.ord = ord

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I32:
                    self.type = iprot.readI32()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.I32:
                    self.ord = iprot.readI32()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('SortMode')
        if self.type is not None:
            oprot.writeFieldBegin('type', TType.I32, 1)
            oprot.writeI32(self.type)
            oprot.writeFieldEnd()
        if self.ord is not None:
            oprot.writeFieldBegin('ord', TType.I32, 2)
            oprot.writeI32(self.ord)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class RunSortMode(object):
    """
    Attributes:
     - type
     - ord
    """


    def __init__(self, type=None, ord=None,):
        self.type = type
        self.ord = ord

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I32:
                    self.type = iprot.readI32()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.I32:
                    self.ord = iprot.readI32()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('RunSortMode')
        if self.type is not None:
            oprot.writeFieldBegin('type', TType.I32, 1)
            oprot.writeI32(self.type)
            oprot.writeFieldEnd()
        if self.ord is not None:
            oprot.writeFieldBegin('ord', TType.I32, 2)
            oprot.writeI32(self.ord)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class BugPathEvent(object):
    """
    Attributes:
     - startLine
     - startCol
     - endLine
     - endCol
     - msg
     - fileId
     - filePath
    """


    def __init__(self, startLine=None, startCol=None, endLine=None, endCol=None, msg=None, fileId=None, filePath=None,):
        self.startLine = startLine
        self.startCol = startCol
        self.endLine = endLine
        self.endCol = endCol
        self.msg = msg
        self.fileId = fileId
        self.filePath = filePath

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I64:
                    self.startLine = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.I64:
                    self.startCol = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.I64:
                    self.endLine = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.I64:
                    self.endCol = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 5:
                if ftype == TType.STRING:
                    self.msg = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 6:
                if ftype == TType.I64:
                    self.fileId = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 7:
                if ftype == TType.STRING:
                    self.filePath = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('BugPathEvent')
        if self.startLine is not None:
            oprot.writeFieldBegin('startLine', TType.I64, 1)
            oprot.writeI64(self.startLine)
            oprot.writeFieldEnd()
        if self.startCol is not None:
            oprot.writeFieldBegin('startCol', TType.I64, 2)
            oprot.writeI64(self.startCol)
            oprot.writeFieldEnd()
        if self.endLine is not None:
            oprot.writeFieldBegin('endLine', TType.I64, 3)
            oprot.writeI64(self.endLine)
            oprot.writeFieldEnd()
        if self.endCol is not None:
            oprot.writeFieldBegin('endCol', TType.I64, 4)
            oprot.writeI64(self.endCol)
            oprot.writeFieldEnd()
        if self.msg is not None:
            oprot.writeFieldBegin('msg', TType.STRING, 5)
            oprot.writeString(self.msg.encode('utf-8') if sys.version_info[0] == 2 else self.msg)
            oprot.writeFieldEnd()
        if self.fileId is not None:
            oprot.writeFieldBegin('fileId', TType.I64, 6)
            oprot.writeI64(self.fileId)
            oprot.writeFieldEnd()
        if self.filePath is not None:
            oprot.writeFieldBegin('filePath', TType.STRING, 7)
            oprot.writeString(self.filePath.encode('utf-8') if sys.version_info[0] == 2 else self.filePath)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class BugPathPos(object):
    """
    Attributes:
     - startLine
     - startCol
     - endLine
     - endCol
     - fileId
     - filePath
    """


    def __init__(self, startLine=None, startCol=None, endLine=None, endCol=None, fileId=None, filePath=None,):
        self.startLine = startLine
        self.startCol = startCol
        self.endLine = endLine
        self.endCol = endCol
        self.fileId = fileId
        self.filePath = filePath

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I64:
                    self.startLine = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.I64:
                    self.startCol = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.I64:
                    self.endLine = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.I64:
                    self.endCol = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 5:
                if ftype == TType.I64:
                    self.fileId = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 6:
                if ftype == TType.STRING:
                    self.filePath = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('BugPathPos')
        if self.startLine is not None:
            oprot.writeFieldBegin('startLine', TType.I64, 1)
            oprot.writeI64(self.startLine)
            oprot.writeFieldEnd()
        if self.startCol is not None:
            oprot.writeFieldBegin('startCol', TType.I64, 2)
            oprot.writeI64(self.startCol)
            oprot.writeFieldEnd()
        if self.endLine is not None:
            oprot.writeFieldBegin('endLine', TType.I64, 3)
            oprot.writeI64(self.endLine)
            oprot.writeFieldEnd()
        if self.endCol is not None:
            oprot.writeFieldBegin('endCol', TType.I64, 4)
            oprot.writeI64(self.endCol)
            oprot.writeFieldEnd()
        if self.fileId is not None:
            oprot.writeFieldBegin('fileId', TType.I64, 5)
            oprot.writeI64(self.fileId)
            oprot.writeFieldEnd()
        if self.filePath is not None:
            oprot.writeFieldBegin('filePath', TType.STRING, 6)
            oprot.writeString(self.filePath.encode('utf-8') if sys.version_info[0] == 2 else self.filePath)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class ExtendedReportData(object):
    """
    Attributes:
     - type
     - startLine
     - startCol
     - endLine
     - endCol
     - message
     - fileId
     - filePath
    """


    def __init__(self, type=None, startLine=None, startCol=None, endLine=None, endCol=None, message=None, fileId=None, filePath=None,):
        self.type = type
        self.startLine = startLine
        self.startCol = startCol
        self.endLine = endLine
        self.endCol = endCol
        self.message = message
        self.fileId = fileId
        self.filePath = filePath

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I32:
                    self.type = iprot.readI32()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.I64:
                    self.startLine = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.I64:
                    self.startCol = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.I64:
                    self.endLine = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 5:
                if ftype == TType.I64:
                    self.endCol = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 6:
                if ftype == TType.STRING:
                    self.message = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 7:
                if ftype == TType.I64:
                    self.fileId = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 8:
                if ftype == TType.STRING:
                    self.filePath = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('ExtendedReportData')
        if self.type is not None:
            oprot.writeFieldBegin('type', TType.I32, 1)
            oprot.writeI32(self.type)
            oprot.writeFieldEnd()
        if self.startLine is not None:
            oprot.writeFieldBegin('startLine', TType.I64, 2)
            oprot.writeI64(self.startLine)
            oprot.writeFieldEnd()
        if self.startCol is not None:
            oprot.writeFieldBegin('startCol', TType.I64, 3)
            oprot.writeI64(self.startCol)
            oprot.writeFieldEnd()
        if self.endLine is not None:
            oprot.writeFieldBegin('endLine', TType.I64, 4)
            oprot.writeI64(self.endLine)
            oprot.writeFieldEnd()
        if self.endCol is not None:
            oprot.writeFieldBegin('endCol', TType.I64, 5)
            oprot.writeI64(self.endCol)
            oprot.writeFieldEnd()
        if self.message is not None:
            oprot.writeFieldBegin('message', TType.STRING, 6)
            oprot.writeString(self.message.encode('utf-8') if sys.version_info[0] == 2 else self.message)
            oprot.writeFieldEnd()
        if self.fileId is not None:
            oprot.writeFieldBegin('fileId', TType.I64, 7)
            oprot.writeI64(self.fileId)
            oprot.writeFieldEnd()
        if self.filePath is not None:
            oprot.writeFieldBegin('filePath', TType.STRING, 8)
            oprot.writeString(self.filePath.encode('utf-8') if sys.version_info[0] == 2 else self.filePath)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class ReportDetails(object):
    """
    Attributes:
     - pathEvents
     - executionPath
     - extendedData
     - comments
    """


    def __init__(self, pathEvents=None, executionPath=None, extendedData=None, comments=None,):
        self.pathEvents = pathEvents
        self.executionPath = executionPath
        self.extendedData = extendedData
        self.comments = comments

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.LIST:
                    self.pathEvents = []
                    (_etype3, _size0) = iprot.readListBegin()
                    for _i4 in range(_size0):
                        _elem5 = BugPathEvent()
                        _elem5.read(iprot)
                        self.pathEvents.append(_elem5)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.LIST:
                    self.executionPath = []
                    (_etype9, _size6) = iprot.readListBegin()
                    for _i10 in range(_size6):
                        _elem11 = BugPathPos()
                        _elem11.read(iprot)
                        self.executionPath.append(_elem11)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.LIST:
                    self.extendedData = []
                    (_etype15, _size12) = iprot.readListBegin()
                    for _i16 in range(_size12):
                        _elem17 = ExtendedReportData()
                        _elem17.read(iprot)
                        self.extendedData.append(_elem17)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.LIST:
                    self.comments = []
                    (_etype21, _size18) = iprot.readListBegin()
                    for _i22 in range(_size18):
                        _elem23 = CommentData()
                        _elem23.read(iprot)
                        self.comments.append(_elem23)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('ReportDetails')
        if self.pathEvents is not None:
            oprot.writeFieldBegin('pathEvents', TType.LIST, 1)
            oprot.writeListBegin(TType.STRUCT, len(self.pathEvents))
            for iter24 in self.pathEvents:
                iter24.write(oprot)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.executionPath is not None:
            oprot.writeFieldBegin('executionPath', TType.LIST, 2)
            oprot.writeListBegin(TType.STRUCT, len(self.executionPath))
            for iter25 in self.executionPath:
                iter25.write(oprot)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.extendedData is not None:
            oprot.writeFieldBegin('extendedData', TType.LIST, 3)
            oprot.writeListBegin(TType.STRUCT, len(self.extendedData))
            for iter26 in self.extendedData:
                iter26.write(oprot)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.comments is not None:
            oprot.writeFieldBegin('comments', TType.LIST, 4)
            oprot.writeListBegin(TType.STRUCT, len(self.comments))
            for iter27 in self.comments:
                iter27.write(oprot)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class AnalyzerStatistics(object):
    """
    Attributes:
     - version
     - failed
     - successful
     - failedFilePaths
    """


    def __init__(self, version=None, failed=None, successful=None, failedFilePaths=None,):
        self.version = version
        self.failed = failed
        self.successful = successful
        self.failedFilePaths = failedFilePaths

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.STRING:
                    self.version = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.I64:
                    self.failed = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.I64:
                    self.successful = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.LIST:
                    self.failedFilePaths = []
                    (_etype31, _size28) = iprot.readListBegin()
                    for _i32 in range(_size28):
                        _elem33 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        self.failedFilePaths.append(_elem33)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('AnalyzerStatistics')
        if self.version is not None:
            oprot.writeFieldBegin('version', TType.STRING, 1)
            oprot.writeString(self.version.encode('utf-8') if sys.version_info[0] == 2 else self.version)
            oprot.writeFieldEnd()
        if self.failed is not None:
            oprot.writeFieldBegin('failed', TType.I64, 2)
            oprot.writeI64(self.failed)
            oprot.writeFieldEnd()
        if self.successful is not None:
            oprot.writeFieldBegin('successful', TType.I64, 3)
            oprot.writeI64(self.successful)
            oprot.writeFieldEnd()
        if self.failedFilePaths is not None:
            oprot.writeFieldBegin('failedFilePaths', TType.LIST, 4)
            oprot.writeListBegin(TType.STRING, len(self.failedFilePaths))
            for iter34 in self.failedFilePaths:
                oprot.writeString(iter34.encode('utf-8') if sys.version_info[0] == 2 else iter34)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class RunData(object):
    """
    Attributes:
     - runId
     - runDate
     - name
     - duration
     - resultCount
     - runCmd
     - detectionStatusCount
     - versionTag
     - codeCheckerVersion
     - analyzerStatistics
     - description
    """


    def __init__(self, runId=None, runDate=None, name=None, duration=None, resultCount=None, runCmd=None, detectionStatusCount=None, versionTag=None, codeCheckerVersion=None, analyzerStatistics=None, description=None,):
        self.runId = runId
        self.runDate = runDate
        self.name = name
        self.duration = duration
        self.resultCount = resultCount
        self.runCmd = runCmd
        self.detectionStatusCount = detectionStatusCount
        self.versionTag = versionTag
        self.codeCheckerVersion = codeCheckerVersion
        self.analyzerStatistics = analyzerStatistics
        self.description = description

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I64:
                    self.runId = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.STRING:
                    self.runDate = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.STRING:
                    self.name = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.I64:
                    self.duration = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 5:
                if ftype == TType.I64:
                    self.resultCount = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 6:
                if ftype == TType.STRING:
                    self.runCmd = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 7:
                if ftype == TType.MAP:
                    self.detectionStatusCount = {}
                    (_ktype36, _vtype37, _size35) = iprot.readMapBegin()
                    for _i39 in range(_size35):
                        _key40 = iprot.readI32()
                        _val41 = iprot.readI32()
                        self.detectionStatusCount[_key40] = _val41
                    iprot.readMapEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 8:
                if ftype == TType.STRING:
                    self.versionTag = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 9:
                if ftype == TType.STRING:
                    self.codeCheckerVersion = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 10:
                if ftype == TType.MAP:
                    self.analyzerStatistics = {}
                    (_ktype43, _vtype44, _size42) = iprot.readMapBegin()
                    for _i46 in range(_size42):
                        _key47 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        _val48 = AnalyzerStatistics()
                        _val48.read(iprot)
                        self.analyzerStatistics[_key47] = _val48
                    iprot.readMapEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 11:
                if ftype == TType.STRING:
                    self.description = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('RunData')
        if self.runId is not None:
            oprot.writeFieldBegin('runId', TType.I64, 1)
            oprot.writeI64(self.runId)
            oprot.writeFieldEnd()
        if self.runDate is not None:
            oprot.writeFieldBegin('runDate', TType.STRING, 2)
            oprot.writeString(self.runDate.encode('utf-8') if sys.version_info[0] == 2 else self.runDate)
            oprot.writeFieldEnd()
        if self.name is not None:
            oprot.writeFieldBegin('name', TType.STRING, 3)
            oprot.writeString(self.name.encode('utf-8') if sys.version_info[0] == 2 else self.name)
            oprot.writeFieldEnd()
        if self.duration is not None:
            oprot.writeFieldBegin('duration', TType.I64, 4)
            oprot.writeI64(self.duration)
            oprot.writeFieldEnd()
        if self.resultCount is not None:
            oprot.writeFieldBegin('resultCount', TType.I64, 5)
            oprot.writeI64(self.resultCount)
            oprot.writeFieldEnd()
        if self.runCmd is not None:
            oprot.writeFieldBegin('runCmd', TType.STRING, 6)
            oprot.writeString(self.runCmd.encode('utf-8') if sys.version_info[0] == 2 else self.runCmd)
            oprot.writeFieldEnd()
        if self.detectionStatusCount is not None:
            oprot.writeFieldBegin('detectionStatusCount', TType.MAP, 7)
            oprot.writeMapBegin(TType.I32, TType.I32, len(self.detectionStatusCount))
            for kiter49, viter50 in self.detectionStatusCount.items():
                oprot.writeI32(kiter49)
                oprot.writeI32(viter50)
            oprot.writeMapEnd()
            oprot.writeFieldEnd()
        if self.versionTag is not None:
            oprot.writeFieldBegin('versionTag', TType.STRING, 8)
            oprot.writeString(self.versionTag.encode('utf-8') if sys.version_info[0] == 2 else self.versionTag)
            oprot.writeFieldEnd()
        if self.codeCheckerVersion is not None:
            oprot.writeFieldBegin('codeCheckerVersion', TType.STRING, 9)
            oprot.writeString(self.codeCheckerVersion.encode('utf-8') if sys.version_info[0] == 2 else self.codeCheckerVersion)
            oprot.writeFieldEnd()
        if self.analyzerStatistics is not None:
            oprot.writeFieldBegin('analyzerStatistics', TType.MAP, 10)
            oprot.writeMapBegin(TType.STRING, TType.STRUCT, len(self.analyzerStatistics))
            for kiter51, viter52 in self.analyzerStatistics.items():
                oprot.writeString(kiter51.encode('utf-8') if sys.version_info[0] == 2 else kiter51)
                viter52.write(oprot)
            oprot.writeMapEnd()
            oprot.writeFieldEnd()
        if self.description is not None:
            oprot.writeFieldBegin('description', TType.STRING, 11)
            oprot.writeString(self.description.encode('utf-8') if sys.version_info[0] == 2 else self.description)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class RunHistoryData(object):
    """
    Attributes:
     - runId
     - runName
     - versionTag
     - user
     - time
     - id
     - checkCommand
     - codeCheckerVersion
     - analyzerStatistics
     - description
    """


    def __init__(self, runId=None, runName=None, versionTag=None, user=None, time=None, id=None, checkCommand=None, codeCheckerVersion=None, analyzerStatistics=None, description=None,):
        self.runId = runId
        self.runName = runName
        self.versionTag = versionTag
        self.user = user
        self.time = time
        self.id = id
        self.checkCommand = checkCommand
        self.codeCheckerVersion = codeCheckerVersion
        self.analyzerStatistics = analyzerStatistics
        self.description = description

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I64:
                    self.runId = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.STRING:
                    self.runName = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.STRING:
                    self.versionTag = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.STRING:
                    self.user = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 5:
                if ftype == TType.STRING:
                    self.time = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 6:
                if ftype == TType.I64:
                    self.id = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 7:
                if ftype == TType.STRING:
                    self.checkCommand = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 8:
                if ftype == TType.STRING:
                    self.codeCheckerVersion = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 9:
                if ftype == TType.MAP:
                    self.analyzerStatistics = {}
                    (_ktype54, _vtype55, _size53) = iprot.readMapBegin()
                    for _i57 in range(_size53):
                        _key58 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        _val59 = AnalyzerStatistics()
                        _val59.read(iprot)
                        self.analyzerStatistics[_key58] = _val59
                    iprot.readMapEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 11:
                if ftype == TType.STRING:
                    self.description = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('RunHistoryData')
        if self.runId is not None:
            oprot.writeFieldBegin('runId', TType.I64, 1)
            oprot.writeI64(self.runId)
            oprot.writeFieldEnd()
        if self.runName is not None:
            oprot.writeFieldBegin('runName', TType.STRING, 2)
            oprot.writeString(self.runName.encode('utf-8') if sys.version_info[0] == 2 else self.runName)
            oprot.writeFieldEnd()
        if self.versionTag is not None:
            oprot.writeFieldBegin('versionTag', TType.STRING, 3)
            oprot.writeString(self.versionTag.encode('utf-8') if sys.version_info[0] == 2 else self.versionTag)
            oprot.writeFieldEnd()
        if self.user is not None:
            oprot.writeFieldBegin('user', TType.STRING, 4)
            oprot.writeString(self.user.encode('utf-8') if sys.version_info[0] == 2 else self.user)
            oprot.writeFieldEnd()
        if self.time is not None:
            oprot.writeFieldBegin('time', TType.STRING, 5)
            oprot.writeString(self.time.encode('utf-8') if sys.version_info[0] == 2 else self.time)
            oprot.writeFieldEnd()
        if self.id is not None:
            oprot.writeFieldBegin('id', TType.I64, 6)
            oprot.writeI64(self.id)
            oprot.writeFieldEnd()
        if self.checkCommand is not None:
            oprot.writeFieldBegin('checkCommand', TType.STRING, 7)
            oprot.writeString(self.checkCommand.encode('utf-8') if sys.version_info[0] == 2 else self.checkCommand)
            oprot.writeFieldEnd()
        if self.codeCheckerVersion is not None:
            oprot.writeFieldBegin('codeCheckerVersion', TType.STRING, 8)
            oprot.writeString(self.codeCheckerVersion.encode('utf-8') if sys.version_info[0] == 2 else self.codeCheckerVersion)
            oprot.writeFieldEnd()
        if self.analyzerStatistics is not None:
            oprot.writeFieldBegin('analyzerStatistics', TType.MAP, 9)
            oprot.writeMapBegin(TType.STRING, TType.STRUCT, len(self.analyzerStatistics))
            for kiter60, viter61 in self.analyzerStatistics.items():
                oprot.writeString(kiter60.encode('utf-8') if sys.version_info[0] == 2 else kiter60)
                viter61.write(oprot)
            oprot.writeMapEnd()
            oprot.writeFieldEnd()
        if self.description is not None:
            oprot.writeFieldBegin('description', TType.STRING, 11)
            oprot.writeString(self.description.encode('utf-8') if sys.version_info[0] == 2 else self.description)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class RunHistoryFilter(object):
    """
    Members of this struct are interpreted in "AND" relation with each other.
    Between the list elements there is "OR" relation.
    If exactMatch field is True it will use exact match for run names.

    Attributes:
     - tagNames
     - tagIds
     - stored
    """


    def __init__(self, tagNames=None, tagIds=None, stored=None,):
        self.tagNames = tagNames
        self.tagIds = tagIds
        self.stored = stored

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.LIST:
                    self.tagNames = []
                    (_etype65, _size62) = iprot.readListBegin()
                    for _i66 in range(_size62):
                        _elem67 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        self.tagNames.append(_elem67)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.LIST:
                    self.tagIds = []
                    (_etype71, _size68) = iprot.readListBegin()
                    for _i72 in range(_size68):
                        _elem73 = iprot.readI64()
                        self.tagIds.append(_elem73)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.STRUCT:
                    self.stored = DateInterval()
                    self.stored.read(iprot)
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('RunHistoryFilter')
        if self.tagNames is not None:
            oprot.writeFieldBegin('tagNames', TType.LIST, 1)
            oprot.writeListBegin(TType.STRING, len(self.tagNames))
            for iter74 in self.tagNames:
                oprot.writeString(iter74.encode('utf-8') if sys.version_info[0] == 2 else iter74)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.tagIds is not None:
            oprot.writeFieldBegin('tagIds', TType.LIST, 2)
            oprot.writeListBegin(TType.I64, len(self.tagIds))
            for iter75 in self.tagIds:
                oprot.writeI64(iter75)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.stored is not None:
            oprot.writeFieldBegin('stored', TType.STRUCT, 3)
            self.stored.write(oprot)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class RunTagCount(object):
    """
    Attributes:
     - time
     - name
     - count
     - id
     - runName
     - runId
    """


    def __init__(self, time=None, name=None, count=None, id=None, runName=None, runId=None,):
        self.time = time
        self.name = name
        self.count = count
        self.id = id
        self.runName = runName
        self.runId = runId

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.STRING:
                    self.time = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.STRING:
                    self.name = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.I64:
                    self.count = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.I64:
                    self.id = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 5:
                if ftype == TType.STRING:
                    self.runName = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 6:
                if ftype == TType.I64:
                    self.runId = iprot.readI64()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('RunTagCount')
        if self.time is not None:
            oprot.writeFieldBegin('time', TType.STRING, 1)
            oprot.writeString(self.time.encode('utf-8') if sys.version_info[0] == 2 else self.time)
            oprot.writeFieldEnd()
        if self.name is not None:
            oprot.writeFieldBegin('name', TType.STRING, 2)
            oprot.writeString(self.name.encode('utf-8') if sys.version_info[0] == 2 else self.name)
            oprot.writeFieldEnd()
        if self.count is not None:
            oprot.writeFieldBegin('count', TType.I64, 3)
            oprot.writeI64(self.count)
            oprot.writeFieldEnd()
        if self.id is not None:
            oprot.writeFieldBegin('id', TType.I64, 4)
            oprot.writeI64(self.id)
            oprot.writeFieldEnd()
        if self.runName is not None:
            oprot.writeFieldBegin('runName', TType.STRING, 5)
            oprot.writeString(self.runName.encode('utf-8') if sys.version_info[0] == 2 else self.runName)
            oprot.writeFieldEnd()
        if self.runId is not None:
            oprot.writeFieldBegin('runId', TType.I64, 6)
            oprot.writeI64(self.runId)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class ReviewData(object):
    """
    Attributes:
     - status
     - comment
     - author
     - date
     - isInSource
    """


    def __init__(self, status=None, comment=None, author=None, date=None, isInSource=None,):
        self.status = status
        self.comment = comment
        self.author = author
        self.date = date
        self.isInSource = isInSource

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I32:
                    self.status = iprot.readI32()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.STRING:
                    self.comment = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.STRING:
                    self.author = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.STRING:
                    self.date = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 5:
                if ftype == TType.BOOL:
                    self.isInSource = iprot.readBool()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('ReviewData')
        if self.status is not None:
            oprot.writeFieldBegin('status', TType.I32, 1)
            oprot.writeI32(self.status)
            oprot.writeFieldEnd()
        if self.comment is not None:
            oprot.writeFieldBegin('comment', TType.STRING, 2)
            oprot.writeString(self.comment.encode('utf-8') if sys.version_info[0] == 2 else self.comment)
            oprot.writeFieldEnd()
        if self.author is not None:
            oprot.writeFieldBegin('author', TType.STRING, 3)
            oprot.writeString(self.author.encode('utf-8') if sys.version_info[0] == 2 else self.author)
            oprot.writeFieldEnd()
        if self.date is not None:
            oprot.writeFieldBegin('date', TType.STRING, 4)
            oprot.writeString(self.date.encode('utf-8') if sys.version_info[0] == 2 else self.date)
            oprot.writeFieldEnd()
        if self.isInSource is not None:
            oprot.writeFieldBegin('isInSource', TType.BOOL, 5)
            oprot.writeBool(self.isInSource)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class ReviewStatusRuleSortMode(object):
    """
    Attributes:
     - type
     - ord
    """


    def __init__(self, type=None, ord=None,):
        self.type = type
        self.ord = ord

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I32:
                    self.type = iprot.readI32()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.I32:
                    self.ord = iprot.readI32()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('ReviewStatusRuleSortMode')
        if self.type is not None:
            oprot.writeFieldBegin('type', TType.I32, 1)
            oprot.writeI32(self.type)
            oprot.writeFieldEnd()
        if self.ord is not None:
            oprot.writeFieldBegin('ord', TType.I32, 2)
            oprot.writeI32(self.ord)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class ReviewStatusRuleFilter(object):
    """
    This struct can be used for filtering review status rules (see
    getReviewStatusRules()).
    Members of this struct are interpreted in "OR" relation with each other.
    Between the elements of the list there is "AND" relation.

    - reportHashes: An optional list of report hashes. The result list contains
        the review status only for these report types. If not given then all
        review status rules return in the current product.
    - reviewStatuses: An optional list of review statuses that filter the result
        set. If not set then all kinds of review status return. If empty list
        then nothing returns.
    - authors: An optional list of review status authors that filter the
        result set. If not set then all kinds of review status return. If empty
        list then nothing returns.
    - noAssociatedReports: If true it will filter review status rules which do
        not have any associated report. If it is not set or false it will not
        filter the results.

    Attributes:
     - reportHashes
     - reviewStatuses
     - authors
     - noAssociatedReports
    """


    def __init__(self, reportHashes=None, reviewStatuses=None, authors=None, noAssociatedReports=None,):
        self.reportHashes = reportHashes
        self.reviewStatuses = reviewStatuses
        self.authors = authors
        self.noAssociatedReports = noAssociatedReports

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.LIST:
                    self.reportHashes = []
                    (_etype79, _size76) = iprot.readListBegin()
                    for _i80 in range(_size76):
                        _elem81 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        self.reportHashes.append(_elem81)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.LIST:
                    self.reviewStatuses = []
                    (_etype85, _size82) = iprot.readListBegin()
                    for _i86 in range(_size82):
                        _elem87 = iprot.readI32()
                        self.reviewStatuses.append(_elem87)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.LIST:
                    self.authors = []
                    (_etype91, _size88) = iprot.readListBegin()
                    for _i92 in range(_size88):
                        _elem93 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        self.authors.append(_elem93)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 5:
                if ftype == TType.BOOL:
                    self.noAssociatedReports = iprot.readBool()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('ReviewStatusRuleFilter')
        if self.reportHashes is not None:
            oprot.writeFieldBegin('reportHashes', TType.LIST, 1)
            oprot.writeListBegin(TType.STRING, len(self.reportHashes))
            for iter94 in self.reportHashes:
                oprot.writeString(iter94.encode('utf-8') if sys.version_info[0] == 2 else iter94)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.reviewStatuses is not None:
            oprot.writeFieldBegin('reviewStatuses', TType.LIST, 2)
            oprot.writeListBegin(TType.I32, len(self.reviewStatuses))
            for iter95 in self.reviewStatuses:
                oprot.writeI32(iter95)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.authors is not None:
            oprot.writeFieldBegin('authors', TType.LIST, 4)
            oprot.writeListBegin(TType.STRING, len(self.authors))
            for iter96 in self.authors:
                oprot.writeString(iter96.encode('utf-8') if sys.version_info[0] == 2 else iter96)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.noAssociatedReports is not None:
            oprot.writeFieldBegin('noAssociatedReports', TType.BOOL, 5)
            oprot.writeBool(self.noAssociatedReports)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class ReviewStatusRule(object):
    """
    Attributes:
     - reportHash
     - reviewData
     - associatedReportCount
    """


    def __init__(self, reportHash=None, reviewData=None, associatedReportCount=None,):
        self.reportHash = reportHash
        self.reviewData = reviewData
        self.associatedReportCount = associatedReportCount

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.STRING:
                    self.reportHash = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.STRUCT:
                    self.reviewData = ReviewData()
                    self.reviewData.read(iprot)
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.I64:
                    self.associatedReportCount = iprot.readI64()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('ReviewStatusRule')
        if self.reportHash is not None:
            oprot.writeFieldBegin('reportHash', TType.STRING, 1)
            oprot.writeString(self.reportHash.encode('utf-8') if sys.version_info[0] == 2 else self.reportHash)
            oprot.writeFieldEnd()
        if self.reviewData is not None:
            oprot.writeFieldBegin('reviewData', TType.STRUCT, 2)
            self.reviewData.write(oprot)
            oprot.writeFieldEnd()
        if self.associatedReportCount is not None:
            oprot.writeFieldBegin('associatedReportCount', TType.I64, 3)
            oprot.writeI64(self.associatedReportCount)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class ReportData(object):
    """
    Attributes:
     - runId
     - checkerId
     - bugHash
     - checkedFile
     - checkerMsg
     - reportId
     - fileId
     - line
     - column
     - severity
     - reviewData
     - detectionStatus
     - detectedAt
     - fixedAt
     - bugPathLength
     - details
     - analyzerName
    """


    def __init__(self, runId=None, checkerId=None, bugHash=None, checkedFile=None, checkerMsg=None, reportId=None, fileId=None, line=None, column=None, severity=None, reviewData=None, detectionStatus=None, detectedAt=None, fixedAt=None, bugPathLength=None, details=None, analyzerName=None,):
        self.runId = runId
        self.checkerId = checkerId
        self.bugHash = bugHash
        self.checkedFile = checkedFile
        self.checkerMsg = checkerMsg
        self.reportId = reportId
        self.fileId = fileId
        self.line = line
        self.column = column
        self.severity = severity
        self.reviewData = reviewData
        self.detectionStatus = detectionStatus
        self.detectedAt = detectedAt
        self.fixedAt = fixedAt
        self.bugPathLength = bugPathLength
        self.details = details
        self.analyzerName = analyzerName

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I64:
                    self.runId = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.STRING:
                    self.checkerId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.STRING:
                    self.bugHash = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.STRING:
                    self.checkedFile = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 5:
                if ftype == TType.STRING:
                    self.checkerMsg = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 6:
                if ftype == TType.I64:
                    self.reportId = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 7:
                if ftype == TType.I64:
                    self.fileId = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 8:
                if ftype == TType.I64:
                    self.line = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 9:
                if ftype == TType.I64:
                    self.column = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 10:
                if ftype == TType.I32:
                    self.severity = iprot.readI32()
                else:
                    iprot.skip(ftype)
            elif fid == 11:
                if ftype == TType.STRUCT:
                    self.reviewData = ReviewData()
                    self.reviewData.read(iprot)
                else:
                    iprot.skip(ftype)
            elif fid == 12:
                if ftype == TType.I32:
                    self.detectionStatus = iprot.readI32()
                else:
                    iprot.skip(ftype)
            elif fid == 13:
                if ftype == TType.STRING:
                    self.detectedAt = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 14:
                if ftype == TType.STRING:
                    self.fixedAt = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 15:
                if ftype == TType.I64:
                    self.bugPathLength = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 16:
                if ftype == TType.STRUCT:
                    self.details = ReportDetails()
                    self.details.read(iprot)
                else:
                    iprot.skip(ftype)
            elif fid == 17:
                if ftype == TType.STRING:
                    self.analyzerName = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('ReportData')
        if self.runId is not None:
            oprot.writeFieldBegin('runId', TType.I64, 1)
            oprot.writeI64(self.runId)
            oprot.writeFieldEnd()
        if self.checkerId is not None:
            oprot.writeFieldBegin('checkerId', TType.STRING, 2)
            oprot.writeString(self.checkerId.encode('utf-8') if sys.version_info[0] == 2 else self.checkerId)
            oprot.writeFieldEnd()
        if self.bugHash is not None:
            oprot.writeFieldBegin('bugHash', TType.STRING, 3)
            oprot.writeString(self.bugHash.encode('utf-8') if sys.version_info[0] == 2 else self.bugHash)
            oprot.writeFieldEnd()
        if self.checkedFile is not None:
            oprot.writeFieldBegin('checkedFile', TType.STRING, 4)
            oprot.writeString(self.checkedFile.encode('utf-8') if sys.version_info[0] == 2 else self.checkedFile)
            oprot.writeFieldEnd()
        if self.checkerMsg is not None:
            oprot.writeFieldBegin('checkerMsg', TType.STRING, 5)
            oprot.writeString(self.checkerMsg.encode('utf-8') if sys.version_info[0] == 2 else self.checkerMsg)
            oprot.writeFieldEnd()
        if self.reportId is not None:
            oprot.writeFieldBegin('reportId', TType.I64, 6)
            oprot.writeI64(self.reportId)
            oprot.writeFieldEnd()
        if self.fileId is not None:
            oprot.writeFieldBegin('fileId', TType.I64, 7)
            oprot.writeI64(self.fileId)
            oprot.writeFieldEnd()
        if self.line is not None:
            oprot.writeFieldBegin('line', TType.I64, 8)
            oprot.writeI64(self.line)
            oprot.writeFieldEnd()
        if self.column is not None:
            oprot.writeFieldBegin('column', TType.I64, 9)
            oprot.writeI64(self.column)
            oprot.writeFieldEnd()
        if self.severity is not None:
            oprot.writeFieldBegin('severity', TType.I32, 10)
            oprot.writeI32(self.severity)
            oprot.writeFieldEnd()
        if self.reviewData is not None:
            oprot.writeFieldBegin('reviewData', TType.STRUCT, 11)
            self.reviewData.write(oprot)
            oprot.writeFieldEnd()
        if self.detectionStatus is not None:
            oprot.writeFieldBegin('detectionStatus', TType.I32, 12)
            oprot.writeI32(self.detectionStatus)
            oprot.writeFieldEnd()
        if self.detectedAt is not None:
            oprot.writeFieldBegin('detectedAt', TType.STRING, 13)
            oprot.writeString(self.detectedAt.encode('utf-8') if sys.version_info[0] == 2 else self.detectedAt)
            oprot.writeFieldEnd()
        if self.fixedAt is not None:
            oprot.writeFieldBegin('fixedAt', TType.STRING, 14)
            oprot.writeString(self.fixedAt.encode('utf-8') if sys.version_info[0] == 2 else self.fixedAt)
            oprot.writeFieldEnd()
        if self.bugPathLength is not None:
            oprot.writeFieldBegin('bugPathLength', TType.I64, 15)
            oprot.writeI64(self.bugPathLength)
            oprot.writeFieldEnd()
        if self.details is not None:
            oprot.writeFieldBegin('details', TType.STRUCT, 16)
            self.details.write(oprot)
            oprot.writeFieldEnd()
        if self.analyzerName is not None:
            oprot.writeFieldBegin('analyzerName', TType.STRING, 17)
            oprot.writeString(self.analyzerName.encode('utf-8') if sys.version_info[0] == 2 else self.analyzerName)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class BugPathLengthRange(object):
    """
    Attributes:
     - min
     - max
    """


    def __init__(self, min=None, max=None,):
        self.min = min
        self.max = max

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I64:
                    self.min = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.I64:
                    self.max = iprot.readI64()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('BugPathLengthRange')
        if self.min is not None:
            oprot.writeFieldBegin('min', TType.I64, 1)
            oprot.writeI64(self.min)
            oprot.writeFieldEnd()
        if self.max is not None:
            oprot.writeFieldBegin('max', TType.I64, 2)
            oprot.writeI64(self.max)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class DateInterval(object):
    """
    Attributes:
     - before
     - after
    """


    def __init__(self, before=None, after=None,):
        self.before = before
        self.after = after

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I64:
                    self.before = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.I64:
                    self.after = iprot.readI64()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('DateInterval')
        if self.before is not None:
            oprot.writeFieldBegin('before', TType.I64, 1)
            oprot.writeI64(self.before)
            oprot.writeFieldEnd()
        if self.after is not None:
            oprot.writeFieldBegin('after', TType.I64, 2)
            oprot.writeI64(self.after)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class ReportDate(object):
    """
    Attributes:
     - detected
     - fixed
    """


    def __init__(self, detected=None, fixed=None,):
        self.detected = detected
        self.fixed = fixed

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.STRUCT:
                    self.detected = DateInterval()
                    self.detected.read(iprot)
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.STRUCT:
                    self.fixed = DateInterval()
                    self.fixed.read(iprot)
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('ReportDate')
        if self.detected is not None:
            oprot.writeFieldBegin('detected', TType.STRUCT, 1)
            self.detected.write(oprot)
            oprot.writeFieldEnd()
        if self.fixed is not None:
            oprot.writeFieldBegin('fixed', TType.STRUCT, 2)
            self.fixed.write(oprot)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class ReportFilter(object):
    """
    Members of this struct are interpreted in "OR" relation with each other.
    Between the elements of the list there is "AND" relation.

    Attributes:
     - filepath
     - checkerMsg
     - checkerName
     - reportHash
     - severity
     - reviewStatus
     - detectionStatus
     - runHistoryTag
     - firstDetectionDate
     - fixDate
     - isUnique
     - runName
     - runTag
     - componentNames
     - bugPathLength
     - date
     - analyzerNames
     - openReportsDate
     - cleanupPlanNames
     - fileMatchesAnyPoint
     - componentMatchesAnyPoint
    """


    def __init__(self, filepath=None, checkerMsg=None, checkerName=None, reportHash=None, severity=None, reviewStatus=None, detectionStatus=None, runHistoryTag=None, firstDetectionDate=None, fixDate=None, isUnique=None, runName=None, runTag=None, componentNames=None, bugPathLength=None, date=None, analyzerNames=None, openReportsDate=None, cleanupPlanNames=None, fileMatchesAnyPoint=None, componentMatchesAnyPoint=None,):
        self.filepath = filepath
        self.checkerMsg = checkerMsg
        self.checkerName = checkerName
        self.reportHash = reportHash
        self.severity = severity
        self.reviewStatus = reviewStatus
        self.detectionStatus = detectionStatus
        self.runHistoryTag = runHistoryTag
        self.firstDetectionDate = firstDetectionDate
        self.fixDate = fixDate
        self.isUnique = isUnique
        self.runName = runName
        self.runTag = runTag
        self.componentNames = componentNames
        self.bugPathLength = bugPathLength
        self.date = date
        self.analyzerNames = analyzerNames
        self.openReportsDate = openReportsDate
        self.cleanupPlanNames = cleanupPlanNames
        self.fileMatchesAnyPoint = fileMatchesAnyPoint
        self.componentMatchesAnyPoint = componentMatchesAnyPoint

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.LIST:
                    self.filepath = []
                    (_etype100, _size97) = iprot.readListBegin()
                    for _i101 in range(_size97):
                        _elem102 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        self.filepath.append(_elem102)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.LIST:
                    self.checkerMsg = []
                    (_etype106, _size103) = iprot.readListBegin()
                    for _i107 in range(_size103):
                        _elem108 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        self.checkerMsg.append(_elem108)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.LIST:
                    self.checkerName = []
                    (_etype112, _size109) = iprot.readListBegin()
                    for _i113 in range(_size109):
                        _elem114 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        self.checkerName.append(_elem114)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.LIST:
                    self.reportHash = []
                    (_etype118, _size115) = iprot.readListBegin()
                    for _i119 in range(_size115):
                        _elem120 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        self.reportHash.append(_elem120)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 5:
                if ftype == TType.LIST:
                    self.severity = []
                    (_etype124, _size121) = iprot.readListBegin()
                    for _i125 in range(_size121):
                        _elem126 = iprot.readI32()
                        self.severity.append(_elem126)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 6:
                if ftype == TType.LIST:
                    self.reviewStatus = []
                    (_etype130, _size127) = iprot.readListBegin()
                    for _i131 in range(_size127):
                        _elem132 = iprot.readI32()
                        self.reviewStatus.append(_elem132)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 7:
                if ftype == TType.LIST:
                    self.detectionStatus = []
                    (_etype136, _size133) = iprot.readListBegin()
                    for _i137 in range(_size133):
                        _elem138 = iprot.readI32()
                        self.detectionStatus.append(_elem138)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 8:
                if ftype == TType.LIST:
                    self.runHistoryTag = []
                    (_etype142, _size139) = iprot.readListBegin()
                    for _i143 in range(_size139):
                        _elem144 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        self.runHistoryTag.append(_elem144)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 9:
                if ftype == TType.I64:
                    self.firstDetectionDate = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 10:
                if ftype == TType.I64:
                    self.fixDate = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 11:
                if ftype == TType.BOOL:
                    self.isUnique = iprot.readBool()
                else:
                    iprot.skip(ftype)
            elif fid == 12:
                if ftype == TType.LIST:
                    self.runName = []
                    (_etype148, _size145) = iprot.readListBegin()
                    for _i149 in range(_size145):
                        _elem150 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        self.runName.append(_elem150)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 13:
                if ftype == TType.LIST:
                    self.runTag = []
                    (_etype154, _size151) = iprot.readListBegin()
                    for _i155 in range(_size151):
                        _elem156 = iprot.readI64()
                        self.runTag.append(_elem156)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 14:
                if ftype == TType.LIST:
                    self.componentNames = []
                    (_etype160, _size157) = iprot.readListBegin()
                    for _i161 in range(_size157):
                        _elem162 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        self.componentNames.append(_elem162)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 15:
                if ftype == TType.STRUCT:
                    self.bugPathLength = BugPathLengthRange()
                    self.bugPathLength.read(iprot)
                else:
                    iprot.skip(ftype)
            elif fid == 16:
                if ftype == TType.STRUCT:
                    self.date = ReportDate()
                    self.date.read(iprot)
                else:
                    iprot.skip(ftype)
            elif fid == 17:
                if ftype == TType.LIST:
                    self.analyzerNames = []
                    (_etype166, _size163) = iprot.readListBegin()
                    for _i167 in range(_size163):
                        _elem168 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        self.analyzerNames.append(_elem168)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 18:
                if ftype == TType.I64:
                    self.openReportsDate = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 19:
                if ftype == TType.LIST:
                    self.cleanupPlanNames = []
                    (_etype172, _size169) = iprot.readListBegin()
                    for _i173 in range(_size169):
                        _elem174 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        self.cleanupPlanNames.append(_elem174)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 20:
                if ftype == TType.BOOL:
                    self.fileMatchesAnyPoint = iprot.readBool()
                else:
                    iprot.skip(ftype)
            elif fid == 21:
                if ftype == TType.BOOL:
                    self.componentMatchesAnyPoint = iprot.readBool()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('ReportFilter')
        if self.filepath is not None:
            oprot.writeFieldBegin('filepath', TType.LIST, 1)
            oprot.writeListBegin(TType.STRING, len(self.filepath))
            for iter175 in self.filepath:
                oprot.writeString(iter175.encode('utf-8') if sys.version_info[0] == 2 else iter175)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.checkerMsg is not None:
            oprot.writeFieldBegin('checkerMsg', TType.LIST, 2)
            oprot.writeListBegin(TType.STRING, len(self.checkerMsg))
            for iter176 in self.checkerMsg:
                oprot.writeString(iter176.encode('utf-8') if sys.version_info[0] == 2 else iter176)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.checkerName is not None:
            oprot.writeFieldBegin('checkerName', TType.LIST, 3)
            oprot.writeListBegin(TType.STRING, len(self.checkerName))
            for iter177 in self.checkerName:
                oprot.writeString(iter177.encode('utf-8') if sys.version_info[0] == 2 else iter177)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.reportHash is not None:
            oprot.writeFieldBegin('reportHash', TType.LIST, 4)
            oprot.writeListBegin(TType.STRING, len(self.reportHash))
            for iter178 in self.reportHash:
                oprot.writeString(iter178.encode('utf-8') if sys.version_info[0] == 2 else iter178)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.severity is not None:
            oprot.writeFieldBegin('severity', TType.LIST, 5)
            oprot.writeListBegin(TType.I32, len(self.severity))
            for iter179 in self.severity:
                oprot.writeI32(iter179)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.reviewStatus is not None:
            oprot.writeFieldBegin('reviewStatus', TType.LIST, 6)
            oprot.writeListBegin(TType.I32, len(self.reviewStatus))
            for iter180 in self.reviewStatus:
                oprot.writeI32(iter180)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.detectionStatus is not None:
            oprot.writeFieldBegin('detectionStatus', TType.LIST, 7)
            oprot.writeListBegin(TType.I32, len(self.detectionStatus))
            for iter181 in self.detectionStatus:
                oprot.writeI32(iter181)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.runHistoryTag is not None:
            oprot.writeFieldBegin('runHistoryTag', TType.LIST, 8)
            oprot.writeListBegin(TType.STRING, len(self.runHistoryTag))
            for iter182 in self.runHistoryTag:
                oprot.writeString(iter182.encode('utf-8') if sys.version_info[0] == 2 else iter182)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.firstDetectionDate is not None:
            oprot.writeFieldBegin('firstDetectionDate', TType.I64, 9)
            oprot.writeI64(self.firstDetectionDate)
            oprot.writeFieldEnd()
        if self.fixDate is not None:
            oprot.writeFieldBegin('fixDate', TType.I64, 10)
            oprot.writeI64(self.fixDate)
            oprot.writeFieldEnd()
        if self.isUnique is not None:
            oprot.writeFieldBegin('isUnique', TType.BOOL, 11)
            oprot.writeBool(self.isUnique)
            oprot.writeFieldEnd()
        if self.runName is not None:
            oprot.writeFieldBegin('runName', TType.LIST, 12)
            oprot.writeListBegin(TType.STRING, len(self.runName))
            for iter183 in self.runName:
                oprot.writeString(iter183.encode('utf-8') if sys.version_info[0] == 2 else iter183)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.runTag is not None:
            oprot.writeFieldBegin('runTag', TType.LIST, 13)
            oprot.writeListBegin(TType.I64, len(self.runTag))
            for iter184 in self.runTag:
                oprot.writeI64(iter184)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.componentNames is not None:
            oprot.writeFieldBegin('componentNames', TType.LIST, 14)
            oprot.writeListBegin(TType.STRING, len(self.componentNames))
            for iter185 in self.componentNames:
                oprot.writeString(iter185.encode('utf-8') if sys.version_info[0] == 2 else iter185)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.bugPathLength is not None:
            oprot.writeFieldBegin('bugPathLength', TType.STRUCT, 15)
            self.bugPathLength.write(oprot)
            oprot.writeFieldEnd()
        if self.date is not None:
            oprot.writeFieldBegin('date', TType.STRUCT, 16)
            self.date.write(oprot)
            oprot.writeFieldEnd()
        if self.analyzerNames is not None:
            oprot.writeFieldBegin('analyzerNames', TType.LIST, 17)
            oprot.writeListBegin(TType.STRING, len(self.analyzerNames))
            for iter186 in self.analyzerNames:
                oprot.writeString(iter186.encode('utf-8') if sys.version_info[0] == 2 else iter186)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.openReportsDate is not None:
            oprot.writeFieldBegin('openReportsDate', TType.I64, 18)
            oprot.writeI64(self.openReportsDate)
            oprot.writeFieldEnd()
        if self.cleanupPlanNames is not None:
            oprot.writeFieldBegin('cleanupPlanNames', TType.LIST, 19)
            oprot.writeListBegin(TType.STRING, len(self.cleanupPlanNames))
            for iter187 in self.cleanupPlanNames:
                oprot.writeString(iter187.encode('utf-8') if sys.version_info[0] == 2 else iter187)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.fileMatchesAnyPoint is not None:
            oprot.writeFieldBegin('fileMatchesAnyPoint', TType.BOOL, 20)
            oprot.writeBool(self.fileMatchesAnyPoint)
            oprot.writeFieldEnd()
        if self.componentMatchesAnyPoint is not None:
            oprot.writeFieldBegin('componentMatchesAnyPoint', TType.BOOL, 21)
            oprot.writeBool(self.componentMatchesAnyPoint)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class RunReportCount(object):
    """
    Attributes:
     - runId
     - name
     - reportCount
    """


    def __init__(self, runId=None, name=None, reportCount=None,):
        self.runId = runId
        self.name = name
        self.reportCount = reportCount

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I64:
                    self.runId = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.STRING:
                    self.name = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.I64:
                    self.reportCount = iprot.readI64()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('RunReportCount')
        if self.runId is not None:
            oprot.writeFieldBegin('runId', TType.I64, 1)
            oprot.writeI64(self.runId)
            oprot.writeFieldEnd()
        if self.name is not None:
            oprot.writeFieldBegin('name', TType.STRING, 2)
            oprot.writeString(self.name.encode('utf-8') if sys.version_info[0] == 2 else self.name)
            oprot.writeFieldEnd()
        if self.reportCount is not None:
            oprot.writeFieldBegin('reportCount', TType.I64, 3)
            oprot.writeI64(self.reportCount)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class CheckerCount(object):
    """
    Attributes:
     - name
     - severity
     - count
    """


    def __init__(self, name=None, severity=None, count=None,):
        self.name = name
        self.severity = severity
        self.count = count

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.STRING:
                    self.name = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.I32:
                    self.severity = iprot.readI32()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.I64:
                    self.count = iprot.readI64()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('CheckerCount')
        if self.name is not None:
            oprot.writeFieldBegin('name', TType.STRING, 1)
            oprot.writeString(self.name.encode('utf-8') if sys.version_info[0] == 2 else self.name)
            oprot.writeFieldEnd()
        if self.severity is not None:
            oprot.writeFieldBegin('severity', TType.I32, 2)
            oprot.writeI32(self.severity)
            oprot.writeFieldEnd()
        if self.count is not None:
            oprot.writeFieldBegin('count', TType.I64, 3)
            oprot.writeI64(self.count)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class CommentData(object):
    """
    Attributes:
     - id
     - author
     - message
     - createdAt
     - kind
    """


    def __init__(self, id=None, author=None, message=None, createdAt=None, kind=None,):
        self.id = id
        self.author = author
        self.message = message
        self.createdAt = createdAt
        self.kind = kind

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I64:
                    self.id = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.STRING:
                    self.author = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.STRING:
                    self.message = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.STRING:
                    self.createdAt = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 5:
                if ftype == TType.I32:
                    self.kind = iprot.readI32()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('CommentData')
        if self.id is not None:
            oprot.writeFieldBegin('id', TType.I64, 1)
            oprot.writeI64(self.id)
            oprot.writeFieldEnd()
        if self.author is not None:
            oprot.writeFieldBegin('author', TType.STRING, 2)
            oprot.writeString(self.author.encode('utf-8') if sys.version_info[0] == 2 else self.author)
            oprot.writeFieldEnd()
        if self.message is not None:
            oprot.writeFieldBegin('message', TType.STRING, 3)
            oprot.writeString(self.message.encode('utf-8') if sys.version_info[0] == 2 else self.message)
            oprot.writeFieldEnd()
        if self.createdAt is not None:
            oprot.writeFieldBegin('createdAt', TType.STRING, 4)
            oprot.writeString(self.createdAt.encode('utf-8') if sys.version_info[0] == 2 else self.createdAt)
            oprot.writeFieldEnd()
        if self.kind is not None:
            oprot.writeFieldBegin('kind', TType.I32, 5)
            oprot.writeI32(self.kind)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class RunFilter(object):
    """
    Members of this struct are interpreted in "AND" relation with each other.
    Between the list elements there is "OR" relation.
    If exactMatch field is True it will use exact match for run names.

    Attributes:
     - ids
     - names
     - exactMatch
     - beforeTime
     - afterTime
     - beforeRun
     - afterRun
    """


    def __init__(self, ids=None, names=None, exactMatch=None, beforeTime=None, afterTime=None, beforeRun=None, afterRun=None,):
        self.ids = ids
        self.names = names
        self.exactMatch = exactMatch
        self.beforeTime = beforeTime
        self.afterTime = afterTime
        self.beforeRun = beforeRun
        self.afterRun = afterRun

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.LIST:
                    self.ids = []
                    (_etype191, _size188) = iprot.readListBegin()
                    for _i192 in range(_size188):
                        _elem193 = iprot.readI64()
                        self.ids.append(_elem193)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.LIST:
                    self.names = []
                    (_etype197, _size194) = iprot.readListBegin()
                    for _i198 in range(_size194):
                        _elem199 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        self.names.append(_elem199)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.BOOL:
                    self.exactMatch = iprot.readBool()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.I64:
                    self.beforeTime = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 5:
                if ftype == TType.I64:
                    self.afterTime = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 6:
                if ftype == TType.STRING:
                    self.beforeRun = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 7:
                if ftype == TType.STRING:
                    self.afterRun = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('RunFilter')
        if self.ids is not None:
            oprot.writeFieldBegin('ids', TType.LIST, 1)
            oprot.writeListBegin(TType.I64, len(self.ids))
            for iter200 in self.ids:
                oprot.writeI64(iter200)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.names is not None:
            oprot.writeFieldBegin('names', TType.LIST, 2)
            oprot.writeListBegin(TType.STRING, len(self.names))
            for iter201 in self.names:
                oprot.writeString(iter201.encode('utf-8') if sys.version_info[0] == 2 else iter201)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.exactMatch is not None:
            oprot.writeFieldBegin('exactMatch', TType.BOOL, 3)
            oprot.writeBool(self.exactMatch)
            oprot.writeFieldEnd()
        if self.beforeTime is not None:
            oprot.writeFieldBegin('beforeTime', TType.I64, 4)
            oprot.writeI64(self.beforeTime)
            oprot.writeFieldEnd()
        if self.afterTime is not None:
            oprot.writeFieldBegin('afterTime', TType.I64, 5)
            oprot.writeI64(self.afterTime)
            oprot.writeFieldEnd()
        if self.beforeRun is not None:
            oprot.writeFieldBegin('beforeRun', TType.STRING, 6)
            oprot.writeString(self.beforeRun.encode('utf-8') if sys.version_info[0] == 2 else self.beforeRun)
            oprot.writeFieldEnd()
        if self.afterRun is not None:
            oprot.writeFieldBegin('afterRun', TType.STRING, 7)
            oprot.writeString(self.afterRun.encode('utf-8') if sys.version_info[0] == 2 else self.afterRun)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class CompareData(object):
    """
    Attributes:
     - runIds
     - diffType
     - runTag
     - openReportsDate
    """


    def __init__(self, runIds=None, diffType=None, runTag=None, openReportsDate=None,):
        self.runIds = runIds
        self.diffType = diffType
        self.runTag = runTag
        self.openReportsDate = openReportsDate

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.LIST:
                    self.runIds = []
                    (_etype205, _size202) = iprot.readListBegin()
                    for _i206 in range(_size202):
                        _elem207 = iprot.readI64()
                        self.runIds.append(_elem207)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.I32:
                    self.diffType = iprot.readI32()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.LIST:
                    self.runTag = []
                    (_etype211, _size208) = iprot.readListBegin()
                    for _i212 in range(_size208):
                        _elem213 = iprot.readI64()
                        self.runTag.append(_elem213)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.I64:
                    self.openReportsDate = iprot.readI64()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('CompareData')
        if self.runIds is not None:
            oprot.writeFieldBegin('runIds', TType.LIST, 1)
            oprot.writeListBegin(TType.I64, len(self.runIds))
            for iter214 in self.runIds:
                oprot.writeI64(iter214)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.diffType is not None:
            oprot.writeFieldBegin('diffType', TType.I32, 2)
            oprot.writeI32(self.diffType)
            oprot.writeFieldEnd()
        if self.runTag is not None:
            oprot.writeFieldBegin('runTag', TType.LIST, 3)
            oprot.writeListBegin(TType.I64, len(self.runTag))
            for iter215 in self.runTag:
                oprot.writeI64(iter215)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.openReportsDate is not None:
            oprot.writeFieldBegin('openReportsDate', TType.I64, 4)
            oprot.writeI64(self.openReportsDate)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class LinesInFilesRequested(object):
    """
    Attributes:
     - fileId
     - lines
    """


    def __init__(self, fileId=None, lines=None,):
        self.fileId = fileId
        self.lines = lines

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I64:
                    self.fileId = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.SET:
                    self.lines = set()
                    (_etype219, _size216) = iprot.readSetBegin()
                    for _i220 in range(_size216):
                        _elem221 = iprot.readI64()
                        self.lines.add(_elem221)
                    iprot.readSetEnd()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('LinesInFilesRequested')
        if self.fileId is not None:
            oprot.writeFieldBegin('fileId', TType.I64, 1)
            oprot.writeI64(self.fileId)
            oprot.writeFieldEnd()
        if self.lines is not None:
            oprot.writeFieldBegin('lines', TType.SET, 2)
            oprot.writeSetBegin(TType.I64, len(self.lines))
            for iter222 in self.lines:
                oprot.writeI64(iter222)
            oprot.writeSetEnd()
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class SourceComponentData(object):
    """
    Attributes:
     - name
     - value
     - description
    """


    def __init__(self, name=None, value=None, description=None,):
        self.name = name
        self.value = value
        self.description = description

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.STRING:
                    self.name = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.STRING:
                    self.value = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.STRING:
                    self.description = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('SourceComponentData')
        if self.name is not None:
            oprot.writeFieldBegin('name', TType.STRING, 1)
            oprot.writeString(self.name.encode('utf-8') if sys.version_info[0] == 2 else self.name)
            oprot.writeFieldEnd()
        if self.value is not None:
            oprot.writeFieldBegin('value', TType.STRING, 2)
            oprot.writeString(self.value.encode('utf-8') if sys.version_info[0] == 2 else self.value)
            oprot.writeFieldEnd()
        if self.description is not None:
            oprot.writeFieldBegin('description', TType.STRING, 3)
            oprot.writeString(self.description.encode('utf-8') if sys.version_info[0] == 2 else self.description)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class AnalysisFailureInfo(object):
    """
    Attributes:
     - runName
    """


    def __init__(self, runName=None,):
        self.runName = runName

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.STRING:
                    self.runName = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('AnalysisFailureInfo')
        if self.runName is not None:
            oprot.writeFieldBegin('runName', TType.STRING, 1)
            oprot.writeString(self.runName.encode('utf-8') if sys.version_info[0] == 2 else self.runName)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class ExportData(object):
    """
    Attributes:
     - comments
     - reviewData
    """


    def __init__(self, comments=None, reviewData=None,):
        self.comments = comments
        self.reviewData = reviewData

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.MAP:
                    self.comments = {}
                    (_ktype224, _vtype225, _size223) = iprot.readMapBegin()
                    for _i227 in range(_size223):
                        _key228 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        _val229 = []
                        (_etype233, _size230) = iprot.readListBegin()
                        for _i234 in range(_size230):
                            _elem235 = CommentData()
                            _elem235.read(iprot)
                            _val229.append(_elem235)
                        iprot.readListEnd()
                        self.comments[_key228] = _val229
                    iprot.readMapEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.MAP:
                    self.reviewData = {}
                    (_ktype237, _vtype238, _size236) = iprot.readMapBegin()
                    for _i240 in range(_size236):
                        _key241 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        _val242 = ReviewData()
                        _val242.read(iprot)
                        self.reviewData[_key241] = _val242
                    iprot.readMapEnd()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('ExportData')
        if self.comments is not None:
            oprot.writeFieldBegin('comments', TType.MAP, 1)
            oprot.writeMapBegin(TType.STRING, TType.LIST, len(self.comments))
            for kiter243, viter244 in self.comments.items():
                oprot.writeString(kiter243.encode('utf-8') if sys.version_info[0] == 2 else kiter243)
                oprot.writeListBegin(TType.STRUCT, len(viter244))
                for iter245 in viter244:
                    iter245.write(oprot)
                oprot.writeListEnd()
            oprot.writeMapEnd()
            oprot.writeFieldEnd()
        if self.reviewData is not None:
            oprot.writeFieldBegin('reviewData', TType.MAP, 2)
            oprot.writeMapBegin(TType.STRING, TType.STRUCT, len(self.reviewData))
            for kiter246, viter247 in self.reviewData.items():
                oprot.writeString(kiter246.encode('utf-8') if sys.version_info[0] == 2 else kiter246)
                viter247.write(oprot)
            oprot.writeMapEnd()
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class AnalysisInfoFilter(object):
    """
    Attributes:
     - runId
     - runHistoryId
     - reportId
    """


    def __init__(self, runId=None, runHistoryId=None, reportId=None,):
        self.runId = runId
        self.runHistoryId = runHistoryId
        self.reportId = reportId

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I64:
                    self.runId = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.I64:
                    self.runHistoryId = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.I64:
                    self.reportId = iprot.readI64()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('AnalysisInfoFilter')
        if self.runId is not None:
            oprot.writeFieldBegin('runId', TType.I64, 1)
            oprot.writeI64(self.runId)
            oprot.writeFieldEnd()
        if self.runHistoryId is not None:
            oprot.writeFieldBegin('runHistoryId', TType.I64, 2)
            oprot.writeI64(self.runHistoryId)
            oprot.writeFieldEnd()
        if self.reportId is not None:
            oprot.writeFieldBegin('reportId', TType.I64, 3)
            oprot.writeI64(self.reportId)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class AnalysisInfo(object):
    """
    Attributes:
     - analyzerCommand
    """


    def __init__(self, analyzerCommand=None,):
        self.analyzerCommand = analyzerCommand

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.STRING:
                    self.analyzerCommand = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('AnalysisInfo')
        if self.analyzerCommand is not None:
            oprot.writeFieldBegin('analyzerCommand', TType.STRING, 1)
            oprot.writeString(self.analyzerCommand.encode('utf-8') if sys.version_info[0] == 2 else self.analyzerCommand)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class BlameData(object):
    """
    Attributes:
     - startLine
     - endLine
     - commitHash
    """


    def __init__(self, startLine=None, endLine=None, commitHash=None,):
        self.startLine = startLine
        self.endLine = endLine
        self.commitHash = commitHash

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I64:
                    self.startLine = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.I64:
                    self.endLine = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.STRING:
                    self.commitHash = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('BlameData')
        if self.startLine is not None:
            oprot.writeFieldBegin('startLine', TType.I64, 1)
            oprot.writeI64(self.startLine)
            oprot.writeFieldEnd()
        if self.endLine is not None:
            oprot.writeFieldBegin('endLine', TType.I64, 2)
            oprot.writeI64(self.endLine)
            oprot.writeFieldEnd()
        if self.commitHash is not None:
            oprot.writeFieldBegin('commitHash', TType.STRING, 3)
            oprot.writeString(self.commitHash.encode('utf-8') if sys.version_info[0] == 2 else self.commitHash)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class CommitAuthor(object):
    """
    Attributes:
     - name
     - email
    """


    def __init__(self, name=None, email=None,):
        self.name = name
        self.email = email

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.STRING:
                    self.name = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.STRING:
                    self.email = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('CommitAuthor')
        if self.name is not None:
            oprot.writeFieldBegin('name', TType.STRING, 1)
            oprot.writeString(self.name.encode('utf-8') if sys.version_info[0] == 2 else self.name)
            oprot.writeFieldEnd()
        if self.email is not None:
            oprot.writeFieldBegin('email', TType.STRING, 2)
            oprot.writeString(self.email.encode('utf-8') if sys.version_info[0] == 2 else self.email)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class Commit(object):
    """
    Attributes:
     - author
     - summary
     - message
     - committedDateTime
    """


    def __init__(self, author=None, summary=None, message=None, committedDateTime=None,):
        self.author = author
        self.summary = summary
        self.message = message
        self.committedDateTime = committedDateTime

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.STRUCT:
                    self.author = CommitAuthor()
                    self.author.read(iprot)
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.STRING:
                    self.summary = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.STRING:
                    self.message = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.STRING:
                    self.committedDateTime = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('Commit')
        if self.author is not None:
            oprot.writeFieldBegin('author', TType.STRUCT, 1)
            self.author.write(oprot)
            oprot.writeFieldEnd()
        if self.summary is not None:
            oprot.writeFieldBegin('summary', TType.STRING, 2)
            oprot.writeString(self.summary.encode('utf-8') if sys.version_info[0] == 2 else self.summary)
            oprot.writeFieldEnd()
        if self.message is not None:
            oprot.writeFieldBegin('message', TType.STRING, 3)
            oprot.writeString(self.message.encode('utf-8') if sys.version_info[0] == 2 else self.message)
            oprot.writeFieldEnd()
        if self.committedDateTime is not None:
            oprot.writeFieldBegin('committedDateTime', TType.STRING, 4)
            oprot.writeString(self.committedDateTime.encode('utf-8') if sys.version_info[0] == 2 else self.committedDateTime)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class BlameInfo(object):
    """
    Attributes:
     - commits
     - blame
    """


    def __init__(self, commits=None, blame=None,):
        self.commits = commits
        self.blame = blame

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.MAP:
                    self.commits = {}
                    (_ktype249, _vtype250, _size248) = iprot.readMapBegin()
                    for _i252 in range(_size248):
                        _key253 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        _val254 = Commit()
                        _val254.read(iprot)
                        self.commits[_key253] = _val254
                    iprot.readMapEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.LIST:
                    self.blame = []
                    (_etype258, _size255) = iprot.readListBegin()
                    for _i259 in range(_size255):
                        _elem260 = BlameData()
                        _elem260.read(iprot)
                        self.blame.append(_elem260)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('BlameInfo')
        if self.commits is not None:
            oprot.writeFieldBegin('commits', TType.MAP, 1)
            oprot.writeMapBegin(TType.STRING, TType.STRUCT, len(self.commits))
            for kiter261, viter262 in self.commits.items():
                oprot.writeString(kiter261.encode('utf-8') if sys.version_info[0] == 2 else kiter261)
                viter262.write(oprot)
            oprot.writeMapEnd()
            oprot.writeFieldEnd()
        if self.blame is not None:
            oprot.writeFieldBegin('blame', TType.LIST, 2)
            oprot.writeListBegin(TType.STRUCT, len(self.blame))
            for iter263 in self.blame:
                iter263.write(oprot)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class CleanupPlan(object):
    """
    Attributes:
     - id
     - name
     - dueDate
     - description
     - closedAt
     - reportHashes
    """


    def __init__(self, id=None, name=None, dueDate=None, description=None, closedAt=None, reportHashes=None,):
        self.id = id
        self.name = name
        self.dueDate = dueDate
        self.description = description
        self.closedAt = closedAt
        self.reportHashes = reportHashes

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.I64:
                    self.id = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.STRING:
                    self.name = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.I64:
                    self.dueDate = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 4:
                if ftype == TType.STRING:
                    self.description = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 5:
                if ftype == TType.I64:
                    self.closedAt = iprot.readI64()
                else:
                    iprot.skip(ftype)
            elif fid == 6:
                if ftype == TType.LIST:
                    self.reportHashes = []
                    (_etype267, _size264) = iprot.readListBegin()
                    for _i268 in range(_size264):
                        _elem269 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        self.reportHashes.append(_elem269)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('CleanupPlan')
        if self.id is not None:
            oprot.writeFieldBegin('id', TType.I64, 1)
            oprot.writeI64(self.id)
            oprot.writeFieldEnd()
        if self.name is not None:
            oprot.writeFieldBegin('name', TType.STRING, 2)
            oprot.writeString(self.name.encode('utf-8') if sys.version_info[0] == 2 else self.name)
            oprot.writeFieldEnd()
        if self.dueDate is not None:
            oprot.writeFieldBegin('dueDate', TType.I64, 3)
            oprot.writeI64(self.dueDate)
            oprot.writeFieldEnd()
        if self.description is not None:
            oprot.writeFieldBegin('description', TType.STRING, 4)
            oprot.writeString(self.description.encode('utf-8') if sys.version_info[0] == 2 else self.description)
            oprot.writeFieldEnd()
        if self.closedAt is not None:
            oprot.writeFieldBegin('closedAt', TType.I64, 5)
            oprot.writeI64(self.closedAt)
            oprot.writeFieldEnd()
        if self.reportHashes is not None:
            oprot.writeFieldBegin('reportHashes', TType.LIST, 6)
            oprot.writeListBegin(TType.STRING, len(self.reportHashes))
            for iter270 in self.reportHashes:
                oprot.writeString(iter270.encode('utf-8') if sys.version_info[0] == 2 else iter270)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class CleanupPlanFilter(object):
    """
    Attributes:
     - ids
     - names
     - isOpen
    """


    def __init__(self, ids=None, names=None, isOpen=None,):
        self.ids = ids
        self.names = names
        self.isOpen = isOpen

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.LIST:
                    self.ids = []
                    (_etype274, _size271) = iprot.readListBegin()
                    for _i275 in range(_size271):
                        _elem276 = iprot.readI64()
                        self.ids.append(_elem276)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.LIST:
                    self.names = []
                    (_etype280, _size277) = iprot.readListBegin()
                    for _i281 in range(_size277):
                        _elem282 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                        self.names.append(_elem282)
                    iprot.readListEnd()
                else:
                    iprot.skip(ftype)
            elif fid == 3:
                if ftype == TType.BOOL:
                    self.isOpen = iprot.readBool()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('CleanupPlanFilter')
        if self.ids is not None:
            oprot.writeFieldBegin('ids', TType.LIST, 1)
            oprot.writeListBegin(TType.I64, len(self.ids))
            for iter283 in self.ids:
                oprot.writeI64(iter283)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.names is not None:
            oprot.writeFieldBegin('names', TType.LIST, 2)
            oprot.writeListBegin(TType.STRING, len(self.names))
            for iter284 in self.names:
                oprot.writeString(iter284.encode('utf-8') if sys.version_info[0] == 2 else iter284)
            oprot.writeListEnd()
            oprot.writeFieldEnd()
        if self.isOpen is not None:
            oprot.writeFieldBegin('isOpen', TType.BOOL, 3)
            oprot.writeBool(self.isOpen)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)


class Checker(object):
    """
    Attributes:
     - analyzerName
     - checkerId
    """


    def __init__(self, analyzerName=None, checkerId=None,):
        self.analyzerName = analyzerName
        self.checkerId = checkerId

    def read(self, iprot):
        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
            iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
            return
        iprot.readStructBegin()
        while True:
            (fname, ftype, fid) = iprot.readFieldBegin()
            if ftype == TType.STOP:
                break
            if fid == 1:
                if ftype == TType.STRING:
                    self.analyzerName = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            elif fid == 2:
                if ftype == TType.STRING:
                    self.checkerId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                else:
                    iprot.skip(ftype)
            else:
                iprot.skip(ftype)
            iprot.readFieldEnd()
        iprot.readStructEnd()

    def write(self, oprot):
        if oprot._fast_encode is not None and self.thrift_spec is not None:
            oprot.trans.write(oprot._fast_encode(self, [self.__class__, self.thrift_spec]))
            return
        oprot.writeStructBegin('Checker')
        if self.analyzerName is not None:
            oprot.writeFieldBegin('analyzerName', TType.STRING, 1)
            oprot.writeString(self.analyzerName.encode('utf-8') if sys.version_info[0] == 2 else self.analyzerName)
            oprot.writeFieldEnd()
        if self.checkerId is not None:
            oprot.writeFieldBegin('checkerId', TType.STRING, 2)
            oprot.writeString(self.checkerId.encode('utf-8') if sys.version_info[0] == 2 else self.checkerId)
            oprot.writeFieldEnd()
        oprot.writeFieldStop()
        oprot.writeStructEnd()

    def validate(self):
        return

    def __repr__(self):
        L = ['%s=%r' % (key, value)
             for key, value in self.__dict__.items()]
        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

    def __ne__(self, other):
        return not (self == other)
all_structs.append(SourceFileData)
SourceFileData.thrift_spec = (
    None,  # 0
    (1, TType.I64, 'fileId', None, None, ),  # 1
    (2, TType.STRING, 'filePath', 'UTF8', None, ),  # 2
    (3, TType.STRING, 'fileContent', 'UTF8', None, ),  # 3
    (4, TType.BOOL, 'hasBlameInfo', None, None, ),  # 4
    (5, TType.STRING, 'remoteUrl', 'UTF8', None, ),  # 5
    (6, TType.STRING, 'trackingBranch', 'UTF8', None, ),  # 6
)
all_structs.append(SortMode)
SortMode.thrift_spec = (
    None,  # 0
    (1, TType.I32, 'type', None, None, ),  # 1
    (2, TType.I32, 'ord', None, None, ),  # 2
)
all_structs.append(RunSortMode)
RunSortMode.thrift_spec = (
    None,  # 0
    (1, TType.I32, 'type', None, None, ),  # 1
    (2, TType.I32, 'ord', None, None, ),  # 2
)
all_structs.append(BugPathEvent)
BugPathEvent.thrift_spec = (
    None,  # 0
    (1, TType.I64, 'startLine', None, None, ),  # 1
    (2, TType.I64, 'startCol', None, None, ),  # 2
    (3, TType.I64, 'endLine', None, None, ),  # 3
    (4, TType.I64, 'endCol', None, None, ),  # 4
    (5, TType.STRING, 'msg', 'UTF8', None, ),  # 5
    (6, TType.I64, 'fileId', None, None, ),  # 6
    (7, TType.STRING, 'filePath', 'UTF8', None, ),  # 7
)
all_structs.append(BugPathPos)
BugPathPos.thrift_spec = (
    None,  # 0
    (1, TType.I64, 'startLine', None, None, ),  # 1
    (2, TType.I64, 'startCol', None, None, ),  # 2
    (3, TType.I64, 'endLine', None, None, ),  # 3
    (4, TType.I64, 'endCol', None, None, ),  # 4
    (5, TType.I64, 'fileId', None, None, ),  # 5
    (6, TType.STRING, 'filePath', 'UTF8', None, ),  # 6
)
all_structs.append(ExtendedReportData)
ExtendedReportData.thrift_spec = (
    None,  # 0
    (1, TType.I32, 'type', None, None, ),  # 1
    (2, TType.I64, 'startLine', None, None, ),  # 2
    (3, TType.I64, 'startCol', None, None, ),  # 3
    (4, TType.I64, 'endLine', None, None, ),  # 4
    (5, TType.I64, 'endCol', None, None, ),  # 5
    (6, TType.STRING, 'message', 'UTF8', None, ),  # 6
    (7, TType.I64, 'fileId', None, None, ),  # 7
    (8, TType.STRING, 'filePath', 'UTF8', None, ),  # 8
)
all_structs.append(ReportDetails)
ReportDetails.thrift_spec = (
    None,  # 0
    (1, TType.LIST, 'pathEvents', (TType.STRUCT, [BugPathEvent, None], False), None, ),  # 1
    (2, TType.LIST, 'executionPath', (TType.STRUCT, [BugPathPos, None], False), None, ),  # 2
    (3, TType.LIST, 'extendedData', (TType.STRUCT, [ExtendedReportData, None], False), None, ),  # 3
    (4, TType.LIST, 'comments', (TType.STRUCT, [CommentData, None], False), None, ),  # 4
)
all_structs.append(AnalyzerStatistics)
AnalyzerStatistics.thrift_spec = (
    None,  # 0
    (1, TType.STRING, 'version', 'UTF8', None, ),  # 1
    (2, TType.I64, 'failed', None, None, ),  # 2
    (3, TType.I64, 'successful', None, None, ),  # 3
    (4, TType.LIST, 'failedFilePaths', (TType.STRING, 'UTF8', False), None, ),  # 4
)
all_structs.append(RunData)
RunData.thrift_spec = (
    None,  # 0
    (1, TType.I64, 'runId', None, None, ),  # 1
    (2, TType.STRING, 'runDate', 'UTF8', None, ),  # 2
    (3, TType.STRING, 'name', 'UTF8', None, ),  # 3
    (4, TType.I64, 'duration', None, None, ),  # 4
    (5, TType.I64, 'resultCount', None, None, ),  # 5
    (6, TType.STRING, 'runCmd', 'UTF8', None, ),  # 6
    (7, TType.MAP, 'detectionStatusCount', (TType.I32, None, TType.I32, None, False), None, ),  # 7
    (8, TType.STRING, 'versionTag', 'UTF8', None, ),  # 8
    (9, TType.STRING, 'codeCheckerVersion', 'UTF8', None, ),  # 9
    (10, TType.MAP, 'analyzerStatistics', (TType.STRING, 'UTF8', TType.STRUCT, [AnalyzerStatistics, None], False), None, ),  # 10
    (11, TType.STRING, 'description', 'UTF8', None, ),  # 11
)
all_structs.append(RunHistoryData)
RunHistoryData.thrift_spec = (
    None,  # 0
    (1, TType.I64, 'runId', None, None, ),  # 1
    (2, TType.STRING, 'runName', 'UTF8', None, ),  # 2
    (3, TType.STRING, 'versionTag', 'UTF8', None, ),  # 3
    (4, TType.STRING, 'user', 'UTF8', None, ),  # 4
    (5, TType.STRING, 'time', 'UTF8', None, ),  # 5
    (6, TType.I64, 'id', None, None, ),  # 6
    (7, TType.STRING, 'checkCommand', 'UTF8', None, ),  # 7
    (8, TType.STRING, 'codeCheckerVersion', 'UTF8', None, ),  # 8
    (9, TType.MAP, 'analyzerStatistics', (TType.STRING, 'UTF8', TType.STRUCT, [AnalyzerStatistics, None], False), None, ),  # 9
    None,  # 10
    (11, TType.STRING, 'description', 'UTF8', None, ),  # 11
)
all_structs.append(RunHistoryFilter)
RunHistoryFilter.thrift_spec = (
    None,  # 0
    (1, TType.LIST, 'tagNames', (TType.STRING, 'UTF8', False), None, ),  # 1
    (2, TType.LIST, 'tagIds', (TType.I64, None, False), None, ),  # 2
    (3, TType.STRUCT, 'stored', [DateInterval, None], None, ),  # 3
)
all_structs.append(RunTagCount)
RunTagCount.thrift_spec = (
    None,  # 0
    (1, TType.STRING, 'time', 'UTF8', None, ),  # 1
    (2, TType.STRING, 'name', 'UTF8', None, ),  # 2
    (3, TType.I64, 'count', None, None, ),  # 3
    (4, TType.I64, 'id', None, None, ),  # 4
    (5, TType.STRING, 'runName', 'UTF8', None, ),  # 5
    (6, TType.I64, 'runId', None, None, ),  # 6
)
all_structs.append(ReviewData)
ReviewData.thrift_spec = (
    None,  # 0
    (1, TType.I32, 'status', None, None, ),  # 1
    (2, TType.STRING, 'comment', 'UTF8', None, ),  # 2
    (3, TType.STRING, 'author', 'UTF8', None, ),  # 3
    (4, TType.STRING, 'date', 'UTF8', None, ),  # 4
    (5, TType.BOOL, 'isInSource', None, None, ),  # 5
)
all_structs.append(ReviewStatusRuleSortMode)
ReviewStatusRuleSortMode.thrift_spec = (
    None,  # 0
    (1, TType.I32, 'type', None, None, ),  # 1
    (2, TType.I32, 'ord', None, None, ),  # 2
)
all_structs.append(ReviewStatusRuleFilter)
ReviewStatusRuleFilter.thrift_spec = (
    None,  # 0
    (1, TType.LIST, 'reportHashes', (TType.STRING, 'UTF8', False), None, ),  # 1
    (2, TType.LIST, 'reviewStatuses', (TType.I32, None, False), None, ),  # 2
    None,  # 3
    (4, TType.LIST, 'authors', (TType.STRING, 'UTF8', False), None, ),  # 4
    (5, TType.BOOL, 'noAssociatedReports', None, None, ),  # 5
)
all_structs.append(ReviewStatusRule)
ReviewStatusRule.thrift_spec = (
    None,  # 0
    (1, TType.STRING, 'reportHash', 'UTF8', None, ),  # 1
    (2, TType.STRUCT, 'reviewData', [ReviewData, None], None, ),  # 2
    (3, TType.I64, 'associatedReportCount', None, None, ),  # 3
)
all_structs.append(ReportData)
ReportData.thrift_spec = (
    None,  # 0
    (1, TType.I64, 'runId', None, None, ),  # 1
    (2, TType.STRING, 'checkerId', 'UTF8', None, ),  # 2
    (3, TType.STRING, 'bugHash', 'UTF8', None, ),  # 3
    (4, TType.STRING, 'checkedFile', 'UTF8', None, ),  # 4
    (5, TType.STRING, 'checkerMsg', 'UTF8', None, ),  # 5
    (6, TType.I64, 'reportId', None, None, ),  # 6
    (7, TType.I64, 'fileId', None, None, ),  # 7
    (8, TType.I64, 'line', None, None, ),  # 8
    (9, TType.I64, 'column', None, None, ),  # 9
    (10, TType.I32, 'severity', None, None, ),  # 10
    (11, TType.STRUCT, 'reviewData', [ReviewData, None], None, ),  # 11
    (12, TType.I32, 'detectionStatus', None, None, ),  # 12
    (13, TType.STRING, 'detectedAt', 'UTF8', None, ),  # 13
    (14, TType.STRING, 'fixedAt', 'UTF8', None, ),  # 14
    (15, TType.I64, 'bugPathLength', None, None, ),  # 15
    (16, TType.STRUCT, 'details', [ReportDetails, None], None, ),  # 16
    (17, TType.STRING, 'analyzerName', 'UTF8', None, ),  # 17
)
all_structs.append(BugPathLengthRange)
BugPathLengthRange.thrift_spec = (
    None,  # 0
    (1, TType.I64, 'min', None, None, ),  # 1
    (2, TType.I64, 'max', None, None, ),  # 2
)
all_structs.append(DateInterval)
DateInterval.thrift_spec = (
    None,  # 0
    (1, TType.I64, 'before', None, None, ),  # 1
    (2, TType.I64, 'after', None, None, ),  # 2
)
all_structs.append(ReportDate)
ReportDate.thrift_spec = (
    None,  # 0
    (1, TType.STRUCT, 'detected', [DateInterval, None], None, ),  # 1
    (2, TType.STRUCT, 'fixed', [DateInterval, None], None, ),  # 2
)
all_structs.append(ReportFilter)
ReportFilter.thrift_spec = (
    None,  # 0
    (1, TType.LIST, 'filepath', (TType.STRING, 'UTF8', False), None, ),  # 1
    (2, TType.LIST, 'checkerMsg', (TType.STRING, 'UTF8', False), None, ),  # 2
    (3, TType.LIST, 'checkerName', (TType.STRING, 'UTF8', False), None, ),  # 3
    (4, TType.LIST, 'reportHash', (TType.STRING, 'UTF8', False), None, ),  # 4
    (5, TType.LIST, 'severity', (TType.I32, None, False), None, ),  # 5
    (6, TType.LIST, 'reviewStatus', (TType.I32, None, False), None, ),  # 6
    (7, TType.LIST, 'detectionStatus', (TType.I32, None, False), None, ),  # 7
    (8, TType.LIST, 'runHistoryTag', (TType.STRING, 'UTF8', False), None, ),  # 8
    (9, TType.I64, 'firstDetectionDate', None, None, ),  # 9
    (10, TType.I64, 'fixDate', None, None, ),  # 10
    (11, TType.BOOL, 'isUnique', None, None, ),  # 11
    (12, TType.LIST, 'runName', (TType.STRING, 'UTF8', False), None, ),  # 12
    (13, TType.LIST, 'runTag', (TType.I64, None, False), None, ),  # 13
    (14, TType.LIST, 'componentNames', (TType.STRING, 'UTF8', False), None, ),  # 14
    (15, TType.STRUCT, 'bugPathLength', [BugPathLengthRange, None], None, ),  # 15
    (16, TType.STRUCT, 'date', [ReportDate, None], None, ),  # 16
    (17, TType.LIST, 'analyzerNames', (TType.STRING, 'UTF8', False), None, ),  # 17
    (18, TType.I64, 'openReportsDate', None, None, ),  # 18
    (19, TType.LIST, 'cleanupPlanNames', (TType.STRING, 'UTF8', False), None, ),  # 19
    (20, TType.BOOL, 'fileMatchesAnyPoint', None, None, ),  # 20
    (21, TType.BOOL, 'componentMatchesAnyPoint', None, None, ),  # 21
)
all_structs.append(RunReportCount)
RunReportCount.thrift_spec = (
    None,  # 0
    (1, TType.I64, 'runId', None, None, ),  # 1
    (2, TType.STRING, 'name', 'UTF8', None, ),  # 2
    (3, TType.I64, 'reportCount', None, None, ),  # 3
)
all_structs.append(CheckerCount)
CheckerCount.thrift_spec = (
    None,  # 0
    (1, TType.STRING, 'name', 'UTF8', None, ),  # 1
    (2, TType.I32, 'severity', None, None, ),  # 2
    (3, TType.I64, 'count', None, None, ),  # 3
)
all_structs.append(CommentData)
CommentData.thrift_spec = (
    None,  # 0
    (1, TType.I64, 'id', None, None, ),  # 1
    (2, TType.STRING, 'author', 'UTF8', None, ),  # 2
    (3, TType.STRING, 'message', 'UTF8', None, ),  # 3
    (4, TType.STRING, 'createdAt', 'UTF8', None, ),  # 4
    (5, TType.I32, 'kind', None, None, ),  # 5
)
all_structs.append(RunFilter)
RunFilter.thrift_spec = (
    None,  # 0
    (1, TType.LIST, 'ids', (TType.I64, None, False), None, ),  # 1
    (2, TType.LIST, 'names', (TType.STRING, 'UTF8', False), None, ),  # 2
    (3, TType.BOOL, 'exactMatch', None, None, ),  # 3
    (4, TType.I64, 'beforeTime', None, None, ),  # 4
    (5, TType.I64, 'afterTime', None, None, ),  # 5
    (6, TType.STRING, 'beforeRun', 'UTF8', None, ),  # 6
    (7, TType.STRING, 'afterRun', 'UTF8', None, ),  # 7
)
all_structs.append(CompareData)
CompareData.thrift_spec = (
    None,  # 0
    (1, TType.LIST, 'runIds', (TType.I64, None, False), None, ),  # 1
    (2, TType.I32, 'diffType', None, None, ),  # 2
    (3, TType.LIST, 'runTag', (TType.I64, None, False), None, ),  # 3
    (4, TType.I64, 'openReportsDate', None, None, ),  # 4
)
all_structs.append(LinesInFilesRequested)
LinesInFilesRequested.thrift_spec = (
    None,  # 0
    (1, TType.I64, 'fileId', None, None, ),  # 1
    (2, TType.SET, 'lines', (TType.I64, None, False), None, ),  # 2
)
all_structs.append(SourceComponentData)
SourceComponentData.thrift_spec = (
    None,  # 0
    (1, TType.STRING, 'name', 'UTF8', None, ),  # 1
    (2, TType.STRING, 'value', 'UTF8', None, ),  # 2
    (3, TType.STRING, 'description', 'UTF8', None, ),  # 3
)
all_structs.append(AnalysisFailureInfo)
AnalysisFailureInfo.thrift_spec = (
    None,  # 0
    (1, TType.STRING, 'runName', 'UTF8', None, ),  # 1
)
all_structs.append(ExportData)
ExportData.thrift_spec = (
    None,  # 0
    (1, TType.MAP, 'comments', (TType.STRING, 'UTF8', TType.LIST, (TType.STRUCT, [CommentData, None], False), False), None, ),  # 1
    (2, TType.MAP, 'reviewData', (TType.STRING, 'UTF8', TType.STRUCT, [ReviewData, None], False), None, ),  # 2
)
all_structs.append(AnalysisInfoFilter)
AnalysisInfoFilter.thrift_spec = (
    None,  # 0
    (1, TType.I64, 'runId', None, None, ),  # 1
    (2, TType.I64, 'runHistoryId', None, None, ),  # 2
    (3, TType.I64, 'reportId', None, None, ),  # 3
)
all_structs.append(AnalysisInfo)
AnalysisInfo.thrift_spec = (
    None,  # 0
    (1, TType.STRING, 'analyzerCommand', 'UTF8', None, ),  # 1
)
all_structs.append(BlameData)
BlameData.thrift_spec = (
    None,  # 0
    (1, TType.I64, 'startLine', None, None, ),  # 1
    (2, TType.I64, 'endLine', None, None, ),  # 2
    (3, TType.STRING, 'commitHash', 'UTF8', None, ),  # 3
)
all_structs.append(CommitAuthor)
CommitAuthor.thrift_spec = (
    None,  # 0
    (1, TType.STRING, 'name', 'UTF8', None, ),  # 1
    (2, TType.STRING, 'email', 'UTF8', None, ),  # 2
)
all_structs.append(Commit)
Commit.thrift_spec = (
    None,  # 0
    (1, TType.STRUCT, 'author', [CommitAuthor, None], None, ),  # 1
    (2, TType.STRING, 'summary', 'UTF8', None, ),  # 2
    (3, TType.STRING, 'message', 'UTF8', None, ),  # 3
    (4, TType.STRING, 'committedDateTime', 'UTF8', None, ),  # 4
)
all_structs.append(BlameInfo)
BlameInfo.thrift_spec = (
    None,  # 0
    (1, TType.MAP, 'commits', (TType.STRING, 'UTF8', TType.STRUCT, [Commit, None], False), None, ),  # 1
    (2, TType.LIST, 'blame', (TType.STRUCT, [BlameData, None], False), None, ),  # 2
)
all_structs.append(CleanupPlan)
CleanupPlan.thrift_spec = (
    None,  # 0
    (1, TType.I64, 'id', None, None, ),  # 1
    (2, TType.STRING, 'name', 'UTF8', None, ),  # 2
    (3, TType.I64, 'dueDate', None, None, ),  # 3
    (4, TType.STRING, 'description', 'UTF8', None, ),  # 4
    (5, TType.I64, 'closedAt', None, None, ),  # 5
    (6, TType.LIST, 'reportHashes', (TType.STRING, 'UTF8', False), None, ),  # 6
)
all_structs.append(CleanupPlanFilter)
CleanupPlanFilter.thrift_spec = (
    None,  # 0
    (1, TType.LIST, 'ids', (TType.I64, None, False), None, ),  # 1
    (2, TType.LIST, 'names', (TType.STRING, 'UTF8', False), None, ),  # 2
    (3, TType.BOOL, 'isOpen', None, None, ),  # 3
)
all_structs.append(Checker)
Checker.thrift_spec = (
    None,  # 0
    (1, TType.STRING, 'analyzerName', 'UTF8', None, ),  # 1
    (2, TType.STRING, 'checkerId', 'UTF8', None, ),  # 2
)
fix_spec(all_structs)
del all_structs
