FAILURE MAP
← Case archive

FA-58896 / Payroll withholding rules / Open access

Annualized percentage-method withholding: de-annualization rounding stage · case 01

Per-period withholding drifts by several cents from the exact annualized result.

Verified by executionVariant 1 · 10 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The annual tax is rounded to whole dollars before dividing by periods, rounding at the wrong stage.

VERIFIED REPAIR

Restore the contract rule at the de-annualization rounding stage step: use `wh = (tax * 2 + 100 * periods) // (200 * periods)`.

Unsuccessful approach: The attempt drops the intermediate truncation but then truncates the per-period result instead of rounding half-up.

Case contract

Input {wage, freq, allow, status}. Annualize: wage*periods (weekly 52, biweekly 26, semimonthly 24, monthly 12); subtract 4,300.00 per allowance, floor 0. Marginal brackets over 4,000/15,000/50,000 dollars at 10/12/22% (married thresholds doubled). Annual tax (in cent-percent units) is divided by periods and rounded half-up to cents once.

Why this case matters

Percentage-method withholding depends on marginal bracket slices and on rounding only after de-annualizing.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    periods = {'weekly': 52, 'biweekly': 26, 'semimonthly': 24, 'monthly': 12}[x['freq']]
    annual = x['wage'] * periods
    adjusted = max(0, annual - x['allow'] * 430000)
    mult = 2 if x['status'] == 'married' else 1
    brackets = [(400000 * mult, 10), (1500000 * mult, 12), (5000000 * mult, 22)]
    tax = 0
    for i, (lo, rate) in enumerate(brackets):
        hi = brackets[i + 1][0] if i + 1 < len(brackets) else None
        if adjusted > lo:
            top = adjusted if hi is None else min(adjusted, hi)
            tax += (top - lo) * rate
    wh = ((tax + 5000) // 10000 * 200 + periods) // (2 * periods)
    return wh
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression', {'wage': 998152, 'freq': 'semimonthly', 'allow': 1, 'status': 'married'}, 168152), ('regression', {'wage': 36754, 'freq': 'biweekly', 'allow': 1, 'status': 'single'}, 483), ('partial-repair probe', {'wage': 992194, 'freq': 'weekly', 'allow': 3, 'status': 'married'}, 190902), ('partial-repair probe', {'wage': 124657, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 1966), ('boundary control', {'wage': 0, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 0), ('boundary control', {'wage': 57693, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 5577), ('normal control', {'wage': 22359, 'freq': 'semimonthly', 'allow': 5, 'status': 'married'}, 0), ('normal control', {'wage': 89742, 'freq': 'monthly', 'allow': 1, 'status': 'married'}, 0), ('normal control', {'wage': 17607, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 0), ('normal control', {'wage': 6134, 'freq': 'semimonthly', 'allow': 0, 'status': 'single'}, 0)], [('regression', {'wage': 124657, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 1966), ('regression', {'wage': 36754, 'freq': 'biweekly', 'allow': 1, 'status': 'single'}, 483), ('partial-repair probe', {'wage': 157996, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 5300), ('partial-repair probe', {'wage': 1223812, 'freq': 'monthly', 'allow': 5, 'status': 'married'}, 134822), ('boundary control', {'wage': 125000, 'freq': 'semimonthly', 'allow': 1, 'status': 'married'}, 7375), ('boundary control', {'wage': 0, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 0), ('normal control', {'wage': 52312, 'freq': 'semimonthly', 'allow': 5, 'status': 'single'}, 0), ('normal control', {'wage': 28087, 'freq': 'biweekly', 'allow': 1, 'status': 'single'}, 0), ('normal control', {'wage': 97334, 'freq': 'monthly', 'allow': 6, 'status': 'single'}, 0), ('normal control', {'wage': 18119, 'freq': 'weekly', 'allow': 3, 'status': 'married'}, 0)], [('regression', {'wage': 1223812, 'freq': 'monthly', 'allow': 5, 'status': 'married'}, 134822), ('regression', {'wage': 124657, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 1966), ('partial-repair probe', {'wage': 475908, 'freq': 'monthly', 'allow': 6, 'status': 'single'}, 25476), ('partial-repair probe', {'wage': 872994, 'freq': 'weekly', 'allow': 3, 'status': 'married'}, 164678), ('boundary control', {'wage': 57693, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 5577), ('boundary control', {'wage': 125000, 'freq': 'semimonthly', 'allow': 1, 'status': 'married'}, 7375), ('normal control', {'wage': 10871, 'freq': 'weekly', 'allow': 6, 'status': 'single'}, 0), ('normal control', {'wage': 836, 'freq': 'semimonthly', 'allow': 1, 'status': 'single'}, 0), ('normal control', {'wage': 30453, 'freq': 'biweekly', 'allow': 2, 'status': 'married'}, 0), ('normal control', {'wage': 27188, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 0)], [('regression', {'wage': 475908, 'freq': 'monthly', 'allow': 6, 'status': 'single'}, 25476), ('regression', {'wage': 1223812, 'freq': 'monthly', 'allow': 5, 'status': 'married'}, 134822), ('partial-repair probe', {'wage': 872994, 'freq': 'weekly', 'allow': 3, 'status': 'married'}, 164678), ('partial-repair probe', {'wage': 166201, 'freq': 'weekly', 'allow': 0, 'status': 'married'}, 17252), ('boundary control', {'wage': 0, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 0), ('boundary control', {'wage': 57693, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 5577), ('normal control', {'wage': 23859, 'freq': 'semimonthly', 'allow': 2, 'status': 'married'}, 0), ('normal control', {'wage': 50426, 'freq': 'semimonthly', 'allow': 5, 'status': 'married'}, 0), ('normal control', {'wage': 128102, 'freq': 'monthly', 'allow': 5, 'status': 'married'}, 0), ('normal control', {'wage': 6608, 'freq': 'semimonthly', 'allow': 0, 'status': 'married'}, 0)], [('regression', {'wage': 872994, 'freq': 'weekly', 'allow': 3, 'status': 'married'}, 164678), ('regression', {'wage': 143245, 'freq': 'biweekly', 'allow': 5, 'status': 'married'}, 2978), ('partial-repair probe', {'wage': 1203384, 'freq': 'biweekly', 'allow': 6, 'status': 'single'}, 220991), ('partial-repair probe', {'wage': 1136572, 'freq': 'weekly', 'allow': 1, 'status': 'married'}, 226304), ('boundary control', {'wage': 125000, 'freq': 'semimonthly', 'allow': 1, 'status': 'married'}, 7375), ('boundary control', {'wage': 0, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 0), ('normal control', {'wage': 49359, 'freq': 'weekly', 'allow': 6, 'status': 'single'}, 0), ('normal control', {'wage': 56499, 'freq': 'monthly', 'allow': 4, 'status': 'married'}, 0), ('normal control', {'wage': 6762, 'freq': 'weekly', 'allow': 6, 'status': 'single'}, 0), ('normal control', {'wage': 30428, 'freq': 'monthly', 'allow': 4, 'status': 'married'}, 0)]]
for i, (label, args, expected) in enumerate(fixtures[N-1]):
    check("%s %d" % (label, i), solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression 0168150168152Failed
regression 1485483Failed
partial-repair probe 2190902190902Passed
partial-repair probe 319671966Failed
boundary control 400Passed
boundary control 555775577Passed
normal control 600Passed
normal control 700Passed
normal control 800Passed
normal control 900Passed

SHA-256 / 90e8810deda46a98a4a3288ab640acd398f7a8b4866faa2ef710f7a4140d552d

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    periods = {'weekly': 52, 'biweekly': 26, 'semimonthly': 24, 'monthly': 12}[x['freq']]
    annual = x['wage'] * periods
    adjusted = max(0, annual - x['allow'] * 430000)
    mult = 2 if x['status'] == 'married' else 1
    brackets = [(400000 * mult, 10), (1500000 * mult, 12), (5000000 * mult, 22)]
    tax = 0
    for i, (lo, rate) in enumerate(brackets):
        hi = brackets[i + 1][0] if i + 1 < len(brackets) else None
        if adjusted > lo:
            top = adjusted if hi is None else min(adjusted, hi)
            tax += (top - lo) * rate
    wh = tax // (100 * periods)
    return wh
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression', {'wage': 998152, 'freq': 'semimonthly', 'allow': 1, 'status': 'married'}, 168152), ('regression', {'wage': 36754, 'freq': 'biweekly', 'allow': 1, 'status': 'single'}, 483), ('partial-repair probe', {'wage': 992194, 'freq': 'weekly', 'allow': 3, 'status': 'married'}, 190902), ('partial-repair probe', {'wage': 124657, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 1966), ('boundary control', {'wage': 0, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 0), ('boundary control', {'wage': 57693, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 5577), ('normal control', {'wage': 22359, 'freq': 'semimonthly', 'allow': 5, 'status': 'married'}, 0), ('normal control', {'wage': 89742, 'freq': 'monthly', 'allow': 1, 'status': 'married'}, 0), ('normal control', {'wage': 17607, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 0), ('normal control', {'wage': 6134, 'freq': 'semimonthly', 'allow': 0, 'status': 'single'}, 0)], [('regression', {'wage': 124657, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 1966), ('regression', {'wage': 36754, 'freq': 'biweekly', 'allow': 1, 'status': 'single'}, 483), ('partial-repair probe', {'wage': 157996, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 5300), ('partial-repair probe', {'wage': 1223812, 'freq': 'monthly', 'allow': 5, 'status': 'married'}, 134822), ('boundary control', {'wage': 125000, 'freq': 'semimonthly', 'allow': 1, 'status': 'married'}, 7375), ('boundary control', {'wage': 0, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 0), ('normal control', {'wage': 52312, 'freq': 'semimonthly', 'allow': 5, 'status': 'single'}, 0), ('normal control', {'wage': 28087, 'freq': 'biweekly', 'allow': 1, 'status': 'single'}, 0), ('normal control', {'wage': 97334, 'freq': 'monthly', 'allow': 6, 'status': 'single'}, 0), ('normal control', {'wage': 18119, 'freq': 'weekly', 'allow': 3, 'status': 'married'}, 0)], [('regression', {'wage': 1223812, 'freq': 'monthly', 'allow': 5, 'status': 'married'}, 134822), ('regression', {'wage': 124657, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 1966), ('partial-repair probe', {'wage': 475908, 'freq': 'monthly', 'allow': 6, 'status': 'single'}, 25476), ('partial-repair probe', {'wage': 872994, 'freq': 'weekly', 'allow': 3, 'status': 'married'}, 164678), ('boundary control', {'wage': 57693, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 5577), ('boundary control', {'wage': 125000, 'freq': 'semimonthly', 'allow': 1, 'status': 'married'}, 7375), ('normal control', {'wage': 10871, 'freq': 'weekly', 'allow': 6, 'status': 'single'}, 0), ('normal control', {'wage': 836, 'freq': 'semimonthly', 'allow': 1, 'status': 'single'}, 0), ('normal control', {'wage': 30453, 'freq': 'biweekly', 'allow': 2, 'status': 'married'}, 0), ('normal control', {'wage': 27188, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 0)], [('regression', {'wage': 475908, 'freq': 'monthly', 'allow': 6, 'status': 'single'}, 25476), ('regression', {'wage': 1223812, 'freq': 'monthly', 'allow': 5, 'status': 'married'}, 134822), ('partial-repair probe', {'wage': 872994, 'freq': 'weekly', 'allow': 3, 'status': 'married'}, 164678), ('partial-repair probe', {'wage': 166201, 'freq': 'weekly', 'allow': 0, 'status': 'married'}, 17252), ('boundary control', {'wage': 0, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 0), ('boundary control', {'wage': 57693, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 5577), ('normal control', {'wage': 23859, 'freq': 'semimonthly', 'allow': 2, 'status': 'married'}, 0), ('normal control', {'wage': 50426, 'freq': 'semimonthly', 'allow': 5, 'status': 'married'}, 0), ('normal control', {'wage': 128102, 'freq': 'monthly', 'allow': 5, 'status': 'married'}, 0), ('normal control', {'wage': 6608, 'freq': 'semimonthly', 'allow': 0, 'status': 'married'}, 0)], [('regression', {'wage': 872994, 'freq': 'weekly', 'allow': 3, 'status': 'married'}, 164678), ('regression', {'wage': 143245, 'freq': 'biweekly', 'allow': 5, 'status': 'married'}, 2978), ('partial-repair probe', {'wage': 1203384, 'freq': 'biweekly', 'allow': 6, 'status': 'single'}, 220991), ('partial-repair probe', {'wage': 1136572, 'freq': 'weekly', 'allow': 1, 'status': 'married'}, 226304), ('boundary control', {'wage': 125000, 'freq': 'semimonthly', 'allow': 1, 'status': 'married'}, 7375), ('boundary control', {'wage': 0, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 0), ('normal control', {'wage': 49359, 'freq': 'weekly', 'allow': 6, 'status': 'single'}, 0), ('normal control', {'wage': 56499, 'freq': 'monthly', 'allow': 4, 'status': 'married'}, 0), ('normal control', {'wage': 6762, 'freq': 'weekly', 'allow': 6, 'status': 'single'}, 0), ('normal control', {'wage': 30428, 'freq': 'monthly', 'allow': 4, 'status': 'married'}, 0)]]
for i, (label, args, expected) in enumerate(fixtures[N-1]):
    check("%s %d" % (label, i), solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression 0168151168152Failed
regression 1483483Passed
partial-repair probe 2190901190902Failed
partial-repair probe 319651966Failed
boundary control 400Passed
boundary control 555775577Passed
normal control 600Passed
normal control 700Passed
normal control 800Passed
normal control 900Passed

SHA-256 / 9c3d031dba41ec5812ee503620d83bf73edc500833ca8a92f326e365cb915d6f

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    periods = {'weekly': 52, 'biweekly': 26, 'semimonthly': 24, 'monthly': 12}[x['freq']]
    annual = x['wage'] * periods
    adjusted = max(0, annual - x['allow'] * 430000)
    mult = 2 if x['status'] == 'married' else 1
    brackets = [(400000 * mult, 10), (1500000 * mult, 12), (5000000 * mult, 22)]
    tax = 0
    for i, (lo, rate) in enumerate(brackets):
        hi = brackets[i + 1][0] if i + 1 < len(brackets) else None
        if adjusted > lo:
            top = adjusted if hi is None else min(adjusted, hi)
            tax += (top - lo) * rate
    wh = (tax * 2 + 100 * periods) // (200 * periods)
    return wh
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression', {'wage': 998152, 'freq': 'semimonthly', 'allow': 1, 'status': 'married'}, 168152), ('regression', {'wage': 36754, 'freq': 'biweekly', 'allow': 1, 'status': 'single'}, 483), ('partial-repair probe', {'wage': 992194, 'freq': 'weekly', 'allow': 3, 'status': 'married'}, 190902), ('partial-repair probe', {'wage': 124657, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 1966), ('boundary control', {'wage': 0, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 0), ('boundary control', {'wage': 57693, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 5577), ('normal control', {'wage': 22359, 'freq': 'semimonthly', 'allow': 5, 'status': 'married'}, 0), ('normal control', {'wage': 89742, 'freq': 'monthly', 'allow': 1, 'status': 'married'}, 0), ('normal control', {'wage': 17607, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 0), ('normal control', {'wage': 6134, 'freq': 'semimonthly', 'allow': 0, 'status': 'single'}, 0)], [('regression', {'wage': 124657, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 1966), ('regression', {'wage': 36754, 'freq': 'biweekly', 'allow': 1, 'status': 'single'}, 483), ('partial-repair probe', {'wage': 157996, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 5300), ('partial-repair probe', {'wage': 1223812, 'freq': 'monthly', 'allow': 5, 'status': 'married'}, 134822), ('boundary control', {'wage': 125000, 'freq': 'semimonthly', 'allow': 1, 'status': 'married'}, 7375), ('boundary control', {'wage': 0, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 0), ('normal control', {'wage': 52312, 'freq': 'semimonthly', 'allow': 5, 'status': 'single'}, 0), ('normal control', {'wage': 28087, 'freq': 'biweekly', 'allow': 1, 'status': 'single'}, 0), ('normal control', {'wage': 97334, 'freq': 'monthly', 'allow': 6, 'status': 'single'}, 0), ('normal control', {'wage': 18119, 'freq': 'weekly', 'allow': 3, 'status': 'married'}, 0)], [('regression', {'wage': 1223812, 'freq': 'monthly', 'allow': 5, 'status': 'married'}, 134822), ('regression', {'wage': 124657, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 1966), ('partial-repair probe', {'wage': 475908, 'freq': 'monthly', 'allow': 6, 'status': 'single'}, 25476), ('partial-repair probe', {'wage': 872994, 'freq': 'weekly', 'allow': 3, 'status': 'married'}, 164678), ('boundary control', {'wage': 57693, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 5577), ('boundary control', {'wage': 125000, 'freq': 'semimonthly', 'allow': 1, 'status': 'married'}, 7375), ('normal control', {'wage': 10871, 'freq': 'weekly', 'allow': 6, 'status': 'single'}, 0), ('normal control', {'wage': 836, 'freq': 'semimonthly', 'allow': 1, 'status': 'single'}, 0), ('normal control', {'wage': 30453, 'freq': 'biweekly', 'allow': 2, 'status': 'married'}, 0), ('normal control', {'wage': 27188, 'freq': 'semimonthly', 'allow': 4, 'status': 'married'}, 0)], [('regression', {'wage': 475908, 'freq': 'monthly', 'allow': 6, 'status': 'single'}, 25476), ('regression', {'wage': 1223812, 'freq': 'monthly', 'allow': 5, 'status': 'married'}, 134822), ('partial-repair probe', {'wage': 872994, 'freq': 'weekly', 'allow': 3, 'status': 'married'}, 164678), ('partial-repair probe', {'wage': 166201, 'freq': 'weekly', 'allow': 0, 'status': 'married'}, 17252), ('boundary control', {'wage': 0, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 0), ('boundary control', {'wage': 57693, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 5577), ('normal control', {'wage': 23859, 'freq': 'semimonthly', 'allow': 2, 'status': 'married'}, 0), ('normal control', {'wage': 50426, 'freq': 'semimonthly', 'allow': 5, 'status': 'married'}, 0), ('normal control', {'wage': 128102, 'freq': 'monthly', 'allow': 5, 'status': 'married'}, 0), ('normal control', {'wage': 6608, 'freq': 'semimonthly', 'allow': 0, 'status': 'married'}, 0)], [('regression', {'wage': 872994, 'freq': 'weekly', 'allow': 3, 'status': 'married'}, 164678), ('regression', {'wage': 143245, 'freq': 'biweekly', 'allow': 5, 'status': 'married'}, 2978), ('partial-repair probe', {'wage': 1203384, 'freq': 'biweekly', 'allow': 6, 'status': 'single'}, 220991), ('partial-repair probe', {'wage': 1136572, 'freq': 'weekly', 'allow': 1, 'status': 'married'}, 226304), ('boundary control', {'wage': 125000, 'freq': 'semimonthly', 'allow': 1, 'status': 'married'}, 7375), ('boundary control', {'wage': 0, 'freq': 'weekly', 'allow': 0, 'status': 'single'}, 0), ('normal control', {'wage': 49359, 'freq': 'weekly', 'allow': 6, 'status': 'single'}, 0), ('normal control', {'wage': 56499, 'freq': 'monthly', 'allow': 4, 'status': 'married'}, 0), ('normal control', {'wage': 6762, 'freq': 'weekly', 'allow': 6, 'status': 'single'}, 0), ('normal control', {'wage': 30428, 'freq': 'monthly', 'allow': 4, 'status': 'married'}, 0)]]
for i, (label, args, expected) in enumerate(fixtures[N-1]):
    check("%s %d" % (label, i), solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression 0168152168152Passed
regression 1483483Passed
partial-repair probe 2190902190902Passed
partial-repair probe 319661966Passed
boundary control 400Passed
boundary control 555775577Passed
normal control 600Passed
normal control 700Passed
normal control 800Passed
normal control 900Passed

SHA-256 / 4f6d1306290a2ad43af19ff58fa0dde71b0b48011d6c88324a3c8781ca13313a

Verification & scope

A deterministic teaching model of a stipulated payroll rule with toy thresholds and rates. It makes no claim of conformance to any tax authority, statute or jurisdiction and is not payroll software. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:46:31.121445+00:00.

Case digest / db3e5f3e716163d886443fba1fdfebfd833754c919f351e78bec5cac88448b7f