def METHOD_NAME(data, init_val=0, init_val2=0):
    # pylint: disable=too-many-statements,docstring-missing-param,docstring-missing-rtype,docstring-missing-return
    """
    implementation by:
    https://stackoverflow.com/questions/3279615/python-implementation-of-jenkins-hash
    """
    length = lenpos = len(data)
    a = b = c = 0xDEADBEEF + length + init_val
    c += init_val2
    c &= 0xFFFFFFFF
    p = 0  # string offset
    while lenpos > 12:
        a += (
            ord(data[p + 0])
            + (ord(data[p + 1]) << 8)
            + (ord(data[p + 2]) << 16)
            + (ord(data[p + 3]) << 24)
        )
        a &= 0xFFFFFFFF
        b += (
            ord(data[p + 4])
            + (ord(data[p + 5]) << 8)
            + (ord(data[p + 6]) << 16)
            + (ord(data[p + 7]) << 24)
        )
        b &= 0xFFFFFFFF
        c += (
            ord(data[p + 8])
            + (ord(data[p + 9]) << 8)
            + (ord(data[p + 10]) << 16)
            + (ord(data[p + 11]) << 24)
        )
        c &= 0xFFFFFFFF
        a, b, c = mix(a, b, c)
        p += 12
        lenpos -= 12
    if lenpos == 12:
        c += (
            ord(data[p + 8])
            + (ord(data[p + 9]) << 8)
            + (ord(data[p + 10]) << 16)
            + (ord(data[p + 11]) << 24)
        )
        b += (
            ord(data[p + 4])
            + (ord(data[p + 5]) << 8)
            + (ord(data[p + 6]) << 16)
            + (ord(data[p + 7]) << 24)
        )
        a += (
            ord(data[p + 0])
            + (ord(data[p + 1]) << 8)
            + (ord(data[p + 2]) << 16)
            + (ord(data[p + 3]) << 24)
        )
    if lenpos == 11:
        c += ord(data[p + 8]) + (ord(data[p + 9]) << 8) + (ord(data[p + 10]) << 16)
        b += (
            ord(data[p + 4])
            + (ord(data[p + 5]) << 8)
            + (ord(data[p + 6]) << 16)
            + (ord(data[p + 7]) << 24)
        )
        a += (
            ord(data[p + 0])
            + (ord(data[p + 1]) << 8)
            + (ord(data[p + 2]) << 16)
            + (ord(data[p + 3]) << 24)
        )
    if lenpos == 10:
        c += ord(data[p + 8]) + (ord(data[p + 9]) << 8)
        b += (
            ord(data[p + 4])
            + (ord(data[p + 5]) << 8)
            + (ord(data[p + 6]) << 16)
            + (ord(data[p + 7]) << 24)
        )
        a += (
            ord(data[p + 0])
            + (ord(data[p + 1]) << 8)
            + (ord(data[p + 2]) << 16)
            + (ord(data[p + 3]) << 24)
        )
    if lenpos == 9:
        c += ord(data[p + 8])
        b += (
            ord(data[p + 4])
            + (ord(data[p + 5]) << 8)
            + (ord(data[p + 6]) << 16)
            + (ord(data[p + 7]) << 24)
        )
        a += (
            ord(data[p + 0])
            + (ord(data[p + 1]) << 8)
            + (ord(data[p + 2]) << 16)
            + (ord(data[p + 3]) << 24)
        )
    if lenpos == 8:
        b += (
            ord(data[p + 4])
            + (ord(data[p + 5]) << 8)
            + (ord(data[p + 6]) << 16)
            + (ord(data[p + 7]) << 24)
        )
        a += (
            ord(data[p + 0])
            + (ord(data[p + 1]) << 8)
            + (ord(data[p + 2]) << 16)
            + (ord(data[p + 3]) << 24)
        )
    if lenpos == 7:
        b += ord(data[p + 4]) + (ord(data[p + 5]) << 8) + (ord(data[p + 6]) << 16)
        a += (
            ord(data[p + 0])
            + (ord(data[p + 1]) << 8)
            + (ord(data[p + 2]) << 16)
            + (ord(data[p + 3]) << 24)
        )
    if lenpos == 6:
        b += (ord(data[p + 5]) << 8) + ord(data[p + 4])
        a += (
            ord(data[p + 0])
            + (ord(data[p + 1]) << 8)
            + (ord(data[p + 2]) << 16)
            + (ord(data[p + 3]) << 24)
        )
    if lenpos == 5:
        b += ord(data[p + 4])
        a += (
            ord(data[p + 0])
            + (ord(data[p + 1]) << 8)
            + (ord(data[p + 2]) << 16)
            + (ord(data[p + 3]) << 24)
        )
    if lenpos == 4:
        a += (
            ord(data[p + 0])
            + (ord(data[p + 1]) << 8)
            + (ord(data[p + 2]) << 16)
            + (ord(data[p + 3]) << 24)
        )
    if lenpos == 3:
        a += ord(data[p + 0]) + (ord(data[p + 1]) << 8) + (ord(data[p + 2]) << 16)
    if lenpos == 2:
        a += ord(data[p + 0]) + (ord(data[p + 1]) << 8)
    if lenpos == 1:
        a += ord(data[p + 0])
    a &= 0xFFFFFFFF
    b &= 0xFFFFFFFF
    c &= 0xFFFFFFFF
    if lenpos == 0:
        return c, b
    a, b, c = final(a, b, c)
    return c, b