FAILURE MAP
← Case archive

FA-74416 / Experiment statistics / Open access

Relative lift interval: Unit variances are used as variances of the mean · case 01

Lift intervals do not shrink as more users are enrolled.

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

ROOT CAUSE

var_t and var_c are not divided by their sample sizes.

VERIFIED REPAIR

Divide each unit variance by its arm size.

Unsuccessful approach: Dividing by sqrt(n) mixes up standard errors and variances.

Case contract

lift = mean_t / mean_c - 1. With variances of the means v_t = var_t/n_t and v_c = var_c/n_c, the delta-method variance is v_t/mean_c^2 + mean_t^2 v_c / mean_c^4 and the interval is lift +/- z * sqrt(variance). mean_c = 0 or nonpositive n -> None. Return [lift, low, high] rounded to 6 places.

Why this case matters

Online experiment readouts drive launch decisions; a silent formula slip flips conclusions.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(mean_c, var_c, n_c, mean_t, var_t, n_t, z):
    if mean_c == 0 or n_c <= 0 or n_t <= 0:
        return None
    lift = mean_t / mean_c - 1
    se_t = var_t
    se_c = var_c
    v = se_t / mean_c ** 2 + mean_t ** 2 * se_c / mean_c ** 4
    half = z * math.sqrt(v)
    return [round(lift, 6), round(lift - half, 6), round(lift + half, 6)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('ten percent lift', [10.0, 4.0, 400, 11.0, 4.0, 400, 1.96], [0.1, 0.070863, 0.129137]),
  ('treatment below control', [2.0, 1.0, 100, 1.5, 1.0, 100, 1.96], [-0.25, -0.3725, -0.1275]),
  ('equal means still carry control noise',
   [4.0, 9.0, 1000, 4.0, 1.0, 1000, 1.645],
   [0.0, -0.041125, 0.041125]),
  ('small means', [0.5, 0.25, 250, 0.6, 0.3, 250, 1.96], [0.2, -0.001413, 0.401413]),
  ('zero control mean', [0.0, 1.0, 10, 1.0, 1.0, 10, 1.96], None),
  ('summary statistic sample 1', [4.0, 4.0, 1000, 0.45, 16.0, 250, 1.96], [-0.8875, -1.01151, -0.76349]),
  ('summary statistic sample 2', [10.0, 9.0, 400, 3.0, 1.0, 250, 1.645], [-0.7, -0.712769, -0.687231]),
  ('summary statistic sample 3', [2.0, 1.0, 400, 4.0, 1.0, 250, 1.645], [1.0, 0.90268, 1.09732])],
 [('ten percent lift', [10.0, 4.0, 400, 11.0, 4.0, 400, 1.96], [0.1, 0.070863, 0.129137]),
  ('treatment below control', [2.0, 1.0, 100, 1.5, 1.0, 100, 1.96], [-0.25, -0.3725, -0.1275]),
  ('equal means still carry control noise',
   [4.0, 9.0, 1000, 4.0, 1.0, 1000, 1.645],
   [0.0, -0.041125, 0.041125]),
  ('small means', [0.5, 0.25, 250, 0.6, 0.3, 250, 1.96], [0.2, -0.001413, 0.401413]),
  ('zero control mean', [0.0, 1.0, 10, 1.0, 1.0, 10, 1.96], None),
  ('summary statistic sample 4', [4.0, 1.0, 400, 2.2, 4.0, 100, 1.645], [-0.45, -0.533024, -0.366976]),
  ('summary statistic sample 6', [10.0, 9.0, 1000, 2.2, 4.0, 1000, 1.645], [-0.78, -0.790956, -0.769044]),
  ('summary statistic sample 7', [2.0, 9.0, 400, 10.5, 1.0, 100, 1.645], [4.25, 3.59708, 4.90292])],
 [('ten percent lift', [10.0, 4.0, 400, 11.0, 4.0, 400, 1.96], [0.1, 0.070863, 0.129137]),
  ('treatment below control', [2.0, 1.0, 100, 1.5, 1.0, 100, 1.96], [-0.25, -0.3725, -0.1275]),
  ('equal means still carry control noise',
   [4.0, 9.0, 1000, 4.0, 1.0, 1000, 1.645],
   [0.0, -0.041125, 0.041125]),
  ('small means', [0.5, 0.25, 250, 0.6, 0.3, 250, 1.96], [0.2, -0.001413, 0.401413]),
  ('zero control mean', [0.0, 1.0, 10, 1.0, 1.0, 10, 1.96], None),
  ('summary statistic sample 11', [4.0, 4.0, 400, 10.5, 16.0, 1000, 1.96], [1.625, 1.48222, 1.76778]),
  ('summary statistic sample 12', [10.0, 9.0, 400, 0.45, 1.0, 250, 1.96], [-0.955, -0.967467, -0.942533]),
  ('summary statistic sample 13', [0.5, 1.0, 1000, 10.5, 4.0, 100, 1.645], [20.0, 17.718248, 22.281752])],
 [('ten percent lift', [10.0, 4.0, 400, 11.0, 4.0, 400, 1.96], [0.1, 0.070863, 0.129137]),
  ('treatment below control', [2.0, 1.0, 100, 1.5, 1.0, 100, 1.96], [-0.25, -0.3725, -0.1275]),
  ('equal means still carry control noise',
   [4.0, 9.0, 1000, 4.0, 1.0, 1000, 1.645],
   [0.0, -0.041125, 0.041125]),
  ('small means', [0.5, 0.25, 250, 0.6, 0.3, 250, 1.96], [0.2, -0.001413, 0.401413]),
  ('zero control mean', [0.0, 1.0, 10, 1.0, 1.0, 10, 1.96], None),
  ('summary statistic sample 16', [4.0, 9.0, 100, 4.0, 4.0, 250, 1.645], [0.0, -0.133893, 0.133893]),
  ('summary statistic sample 17', [4.0, 1.0, 100, 4.0, 16.0, 1000, 1.645], [0.0, -0.066312, 0.066312]),
  ('summary statistic sample 18', [2.0, 1.0, 400, 10.5, 4.0, 1000, 1.645], [4.25, 4.027915, 4.472085])],
 [('ten percent lift', [10.0, 4.0, 400, 11.0, 4.0, 400, 1.96], [0.1, 0.070863, 0.129137]),
  ('treatment below control', [2.0, 1.0, 100, 1.5, 1.0, 100, 1.96], [-0.25, -0.3725, -0.1275]),
  ('equal means still carry control noise',
   [4.0, 9.0, 1000, 4.0, 1.0, 1000, 1.645],
   [0.0, -0.041125, 0.041125]),
  ('small means', [0.5, 0.25, 250, 0.6, 0.3, 250, 1.96], [0.2, -0.001413, 0.401413]),
  ('zero control mean', [0.0, 1.0, 10, 1.0, 1.0, 10, 1.96], None),
  ('summary statistic sample 21', [0.5, 1.0, 400, 0.45, 1.0, 100, 1.96], [-0.1, -0.529862, 0.329862]),
  ('summary statistic sample 22', [0.5, 4.0, 1000, 10.5, 4.0, 1000, 1.96], [20.0, 14.787726, 25.212274]),
  ('summary statistic sample 25', [4.0, 9.0, 400, 10.5, 4.0, 250, 1.96], [1.625, 1.422351, 1.827649])]]
for label, args, expected in fixtures[N - 1]:
    check(label, 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
ten percent lift[0.1, -0.48275, 0.68275][0.1, 0.070863, 0.129137]Failed
treatment below control[-0.25, -1.475, 0.975][-0.25, -0.3725, -0.1275]Failed
equal means still carry control noise[0.0, -1.300487, 1.300487][0.0, -0.041125, 0.041125]Failed
small means[0.2, -2.984623, 3.384623][0.2, -0.001413, 0.401413]Failed
zero control meanNoneNonePassed
summary statistic sample 1[-0.8875, -2.850598, 1.075598][-0.8875, -1.01151, -0.76349]Failed
summary statistic sample 2[-0.7, -0.921312, -0.478688][-0.7, -0.712769, -0.687231]Failed
summary statistic sample 3[1.0, -0.839166, 2.839166][1.0, 0.90268, 1.09732]Failed

SHA-256 / 58ae35725177be085932380c9cb70f5873a2d1ba7509e62321d85dbbb5b58497

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(mean_c, var_c, n_c, mean_t, var_t, n_t, z):
    if mean_c == 0 or n_c <= 0 or n_t <= 0:
        return None
    lift = mean_t / mean_c - 1
    se_t = var_t / math.sqrt(n_t)
    se_c = var_c / math.sqrt(n_c)
    v = se_t / mean_c ** 2 + mean_t ** 2 * se_c / mean_c ** 4
    half = z * math.sqrt(v)
    return [round(lift, 6), round(lift - half, 6), round(lift + half, 6)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('ten percent lift', [10.0, 4.0, 400, 11.0, 4.0, 400, 1.96], [0.1, 0.070863, 0.129137]),
  ('treatment below control', [2.0, 1.0, 100, 1.5, 1.0, 100, 1.96], [-0.25, -0.3725, -0.1275]),
  ('equal means still carry control noise',
   [4.0, 9.0, 1000, 4.0, 1.0, 1000, 1.645],
   [0.0, -0.041125, 0.041125]),
  ('small means', [0.5, 0.25, 250, 0.6, 0.3, 250, 1.96], [0.2, -0.001413, 0.401413]),
  ('zero control mean', [0.0, 1.0, 10, 1.0, 1.0, 10, 1.96], None),
  ('summary statistic sample 1', [4.0, 4.0, 1000, 0.45, 16.0, 250, 1.96], [-0.8875, -1.01151, -0.76349]),
  ('summary statistic sample 2', [10.0, 9.0, 400, 3.0, 1.0, 250, 1.645], [-0.7, -0.712769, -0.687231]),
  ('summary statistic sample 3', [2.0, 1.0, 400, 4.0, 1.0, 250, 1.645], [1.0, 0.90268, 1.09732])],
 [('ten percent lift', [10.0, 4.0, 400, 11.0, 4.0, 400, 1.96], [0.1, 0.070863, 0.129137]),
  ('treatment below control', [2.0, 1.0, 100, 1.5, 1.0, 100, 1.96], [-0.25, -0.3725, -0.1275]),
  ('equal means still carry control noise',
   [4.0, 9.0, 1000, 4.0, 1.0, 1000, 1.645],
   [0.0, -0.041125, 0.041125]),
  ('small means', [0.5, 0.25, 250, 0.6, 0.3, 250, 1.96], [0.2, -0.001413, 0.401413]),
  ('zero control mean', [0.0, 1.0, 10, 1.0, 1.0, 10, 1.96], None),
  ('summary statistic sample 4', [4.0, 1.0, 400, 2.2, 4.0, 100, 1.645], [-0.45, -0.533024, -0.366976]),
  ('summary statistic sample 6', [10.0, 9.0, 1000, 2.2, 4.0, 1000, 1.645], [-0.78, -0.790956, -0.769044]),
  ('summary statistic sample 7', [2.0, 9.0, 400, 10.5, 1.0, 100, 1.645], [4.25, 3.59708, 4.90292])],
 [('ten percent lift', [10.0, 4.0, 400, 11.0, 4.0, 400, 1.96], [0.1, 0.070863, 0.129137]),
  ('treatment below control', [2.0, 1.0, 100, 1.5, 1.0, 100, 1.96], [-0.25, -0.3725, -0.1275]),
  ('equal means still carry control noise',
   [4.0, 9.0, 1000, 4.0, 1.0, 1000, 1.645],
   [0.0, -0.041125, 0.041125]),
  ('small means', [0.5, 0.25, 250, 0.6, 0.3, 250, 1.96], [0.2, -0.001413, 0.401413]),
  ('zero control mean', [0.0, 1.0, 10, 1.0, 1.0, 10, 1.96], None),
  ('summary statistic sample 11', [4.0, 4.0, 400, 10.5, 16.0, 1000, 1.96], [1.625, 1.48222, 1.76778]),
  ('summary statistic sample 12', [10.0, 9.0, 400, 0.45, 1.0, 250, 1.96], [-0.955, -0.967467, -0.942533]),
  ('summary statistic sample 13', [0.5, 1.0, 1000, 10.5, 4.0, 100, 1.645], [20.0, 17.718248, 22.281752])],
 [('ten percent lift', [10.0, 4.0, 400, 11.0, 4.0, 400, 1.96], [0.1, 0.070863, 0.129137]),
  ('treatment below control', [2.0, 1.0, 100, 1.5, 1.0, 100, 1.96], [-0.25, -0.3725, -0.1275]),
  ('equal means still carry control noise',
   [4.0, 9.0, 1000, 4.0, 1.0, 1000, 1.645],
   [0.0, -0.041125, 0.041125]),
  ('small means', [0.5, 0.25, 250, 0.6, 0.3, 250, 1.96], [0.2, -0.001413, 0.401413]),
  ('zero control mean', [0.0, 1.0, 10, 1.0, 1.0, 10, 1.96], None),
  ('summary statistic sample 16', [4.0, 9.0, 100, 4.0, 4.0, 250, 1.645], [0.0, -0.133893, 0.133893]),
  ('summary statistic sample 17', [4.0, 1.0, 100, 4.0, 16.0, 1000, 1.645], [0.0, -0.066312, 0.066312]),
  ('summary statistic sample 18', [2.0, 1.0, 400, 10.5, 4.0, 1000, 1.645], [4.25, 4.027915, 4.472085])],
 [('ten percent lift', [10.0, 4.0, 400, 11.0, 4.0, 400, 1.96], [0.1, 0.070863, 0.129137]),
  ('treatment below control', [2.0, 1.0, 100, 1.5, 1.0, 100, 1.96], [-0.25, -0.3725, -0.1275]),
  ('equal means still carry control noise',
   [4.0, 9.0, 1000, 4.0, 1.0, 1000, 1.645],
   [0.0, -0.041125, 0.041125]),
  ('small means', [0.5, 0.25, 250, 0.6, 0.3, 250, 1.96], [0.2, -0.001413, 0.401413]),
  ('zero control mean', [0.0, 1.0, 10, 1.0, 1.0, 10, 1.96], None),
  ('summary statistic sample 21', [0.5, 1.0, 400, 0.45, 1.0, 100, 1.96], [-0.1, -0.529862, 0.329862]),
  ('summary statistic sample 22', [0.5, 4.0, 1000, 10.5, 4.0, 1000, 1.96], [20.0, 14.787726, 25.212274]),
  ('summary statistic sample 25', [4.0, 9.0, 400, 10.5, 4.0, 250, 1.96], [1.625, 1.422351, 1.827649])]]
for label, args, expected in fixtures[N - 1]:
    check(label, 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
ten percent lift[0.1, -0.030307, 0.230307][0.1, 0.070863, 0.129137]Failed
treatment below control[-0.25, -0.637379, 0.137379][-0.25, -0.3725, -0.1275]Failed
equal means still carry control noise[0.0, -0.231263, 0.231263][0.0, -0.041125, 0.041125]Failed
small means[0.2, -0.60089, 1.00089][0.2, -0.001413, 0.401413]Failed
zero control meanNoneNonePassed
summary statistic sample 1[-0.8875, -1.380804, -0.394196][-0.8875, -1.01151, -0.76349]Failed
summary statistic sample 2[-0.7, -0.752985, -0.647015][-0.7, -0.712769, -0.687231]Failed
summary statistic sample 3[1.0, 0.577996, 1.422004][1.0, 0.90268, 1.09732]Failed

SHA-256 / 03f2d059f1d59415426d61166d9b44b101a0b98b14d1507bb128ed7f3362aa3b

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(mean_c, var_c, n_c, mean_t, var_t, n_t, z):
    if mean_c == 0 or n_c <= 0 or n_t <= 0:
        return None
    lift = mean_t / mean_c - 1
    se_t = var_t / n_t
    se_c = var_c / n_c
    v = se_t / mean_c ** 2 + mean_t ** 2 * se_c / mean_c ** 4
    half = z * math.sqrt(v)
    return [round(lift, 6), round(lift - half, 6), round(lift + half, 6)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('ten percent lift', [10.0, 4.0, 400, 11.0, 4.0, 400, 1.96], [0.1, 0.070863, 0.129137]),
  ('treatment below control', [2.0, 1.0, 100, 1.5, 1.0, 100, 1.96], [-0.25, -0.3725, -0.1275]),
  ('equal means still carry control noise',
   [4.0, 9.0, 1000, 4.0, 1.0, 1000, 1.645],
   [0.0, -0.041125, 0.041125]),
  ('small means', [0.5, 0.25, 250, 0.6, 0.3, 250, 1.96], [0.2, -0.001413, 0.401413]),
  ('zero control mean', [0.0, 1.0, 10, 1.0, 1.0, 10, 1.96], None),
  ('summary statistic sample 1', [4.0, 4.0, 1000, 0.45, 16.0, 250, 1.96], [-0.8875, -1.01151, -0.76349]),
  ('summary statistic sample 2', [10.0, 9.0, 400, 3.0, 1.0, 250, 1.645], [-0.7, -0.712769, -0.687231]),
  ('summary statistic sample 3', [2.0, 1.0, 400, 4.0, 1.0, 250, 1.645], [1.0, 0.90268, 1.09732])],
 [('ten percent lift', [10.0, 4.0, 400, 11.0, 4.0, 400, 1.96], [0.1, 0.070863, 0.129137]),
  ('treatment below control', [2.0, 1.0, 100, 1.5, 1.0, 100, 1.96], [-0.25, -0.3725, -0.1275]),
  ('equal means still carry control noise',
   [4.0, 9.0, 1000, 4.0, 1.0, 1000, 1.645],
   [0.0, -0.041125, 0.041125]),
  ('small means', [0.5, 0.25, 250, 0.6, 0.3, 250, 1.96], [0.2, -0.001413, 0.401413]),
  ('zero control mean', [0.0, 1.0, 10, 1.0, 1.0, 10, 1.96], None),
  ('summary statistic sample 4', [4.0, 1.0, 400, 2.2, 4.0, 100, 1.645], [-0.45, -0.533024, -0.366976]),
  ('summary statistic sample 6', [10.0, 9.0, 1000, 2.2, 4.0, 1000, 1.645], [-0.78, -0.790956, -0.769044]),
  ('summary statistic sample 7', [2.0, 9.0, 400, 10.5, 1.0, 100, 1.645], [4.25, 3.59708, 4.90292])],
 [('ten percent lift', [10.0, 4.0, 400, 11.0, 4.0, 400, 1.96], [0.1, 0.070863, 0.129137]),
  ('treatment below control', [2.0, 1.0, 100, 1.5, 1.0, 100, 1.96], [-0.25, -0.3725, -0.1275]),
  ('equal means still carry control noise',
   [4.0, 9.0, 1000, 4.0, 1.0, 1000, 1.645],
   [0.0, -0.041125, 0.041125]),
  ('small means', [0.5, 0.25, 250, 0.6, 0.3, 250, 1.96], [0.2, -0.001413, 0.401413]),
  ('zero control mean', [0.0, 1.0, 10, 1.0, 1.0, 10, 1.96], None),
  ('summary statistic sample 11', [4.0, 4.0, 400, 10.5, 16.0, 1000, 1.96], [1.625, 1.48222, 1.76778]),
  ('summary statistic sample 12', [10.0, 9.0, 400, 0.45, 1.0, 250, 1.96], [-0.955, -0.967467, -0.942533]),
  ('summary statistic sample 13', [0.5, 1.0, 1000, 10.5, 4.0, 100, 1.645], [20.0, 17.718248, 22.281752])],
 [('ten percent lift', [10.0, 4.0, 400, 11.0, 4.0, 400, 1.96], [0.1, 0.070863, 0.129137]),
  ('treatment below control', [2.0, 1.0, 100, 1.5, 1.0, 100, 1.96], [-0.25, -0.3725, -0.1275]),
  ('equal means still carry control noise',
   [4.0, 9.0, 1000, 4.0, 1.0, 1000, 1.645],
   [0.0, -0.041125, 0.041125]),
  ('small means', [0.5, 0.25, 250, 0.6, 0.3, 250, 1.96], [0.2, -0.001413, 0.401413]),
  ('zero control mean', [0.0, 1.0, 10, 1.0, 1.0, 10, 1.96], None),
  ('summary statistic sample 16', [4.0, 9.0, 100, 4.0, 4.0, 250, 1.645], [0.0, -0.133893, 0.133893]),
  ('summary statistic sample 17', [4.0, 1.0, 100, 4.0, 16.0, 1000, 1.645], [0.0, -0.066312, 0.066312]),
  ('summary statistic sample 18', [2.0, 1.0, 400, 10.5, 4.0, 1000, 1.645], [4.25, 4.027915, 4.472085])],
 [('ten percent lift', [10.0, 4.0, 400, 11.0, 4.0, 400, 1.96], [0.1, 0.070863, 0.129137]),
  ('treatment below control', [2.0, 1.0, 100, 1.5, 1.0, 100, 1.96], [-0.25, -0.3725, -0.1275]),
  ('equal means still carry control noise',
   [4.0, 9.0, 1000, 4.0, 1.0, 1000, 1.645],
   [0.0, -0.041125, 0.041125]),
  ('small means', [0.5, 0.25, 250, 0.6, 0.3, 250, 1.96], [0.2, -0.001413, 0.401413]),
  ('zero control mean', [0.0, 1.0, 10, 1.0, 1.0, 10, 1.96], None),
  ('summary statistic sample 21', [0.5, 1.0, 400, 0.45, 1.0, 100, 1.96], [-0.1, -0.529862, 0.329862]),
  ('summary statistic sample 22', [0.5, 4.0, 1000, 10.5, 4.0, 1000, 1.96], [20.0, 14.787726, 25.212274]),
  ('summary statistic sample 25', [4.0, 9.0, 400, 10.5, 4.0, 250, 1.96], [1.625, 1.422351, 1.827649])]]
for label, args, expected in fixtures[N - 1]:
    check(label, 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
ten percent lift[0.1, 0.070863, 0.129137][0.1, 0.070863, 0.129137]Passed
treatment below control[-0.25, -0.3725, -0.1275][-0.25, -0.3725, -0.1275]Passed
equal means still carry control noise[0.0, -0.041125, 0.041125][0.0, -0.041125, 0.041125]Passed
small means[0.2, -0.001413, 0.401413][0.2, -0.001413, 0.401413]Passed
zero control meanNoneNonePassed
summary statistic sample 1[-0.8875, -1.01151, -0.76349][-0.8875, -1.01151, -0.76349]Passed
summary statistic sample 2[-0.7, -0.712769, -0.687231][-0.7, -0.712769, -0.687231]Passed
summary statistic sample 3[1.0, 0.90268, 1.09732][1.0, 0.90268, 1.09732]Passed

SHA-256 / 6492e0ad4da7ef4c8f1841f42b2ab23a4ca8a46c28a7f09d4aa0cacb8155c956

Verification & scope

A deterministic toy experiment-analysis model with a stipulated contract; results are rounded and are not a substitute for a validated statistics package. 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:48:56.636184+00:00.

Case digest / 90b398bfff8670f21b204ee0cbf476a792bdfb851aa62df36fe4477311038951