///|
pub fn foldover(
  p : Plan,
  mask : Int32,
  include_original~ : Bool = true,
) -> Plan raise DesignError {
  validate_plan(p)
  if mask <= 0 || mask >= 1 << p.factors.length() {
    raise Invalid("foldover mask must select known factors")
  }
  if include_original && p.runs.length() > 2048 {
    raise Budget("foldover exceeds 4096 runs")
  }
  let runs : Array[Run] = if include_original { p.runs.copy() } else { [] }
  for r in p.runs {
    let point = r.point.copy()
    for j in 0.. Plan raise DesignError {
  validate_plan(p)
  if copies < 1 || copies > 4096 / p.runs.length() {
    raise Budget("replication exceeds run budget")
  }
  let runs : Array[Run] = []
  for k in 0.. Plan raise DesignError {
  validate_plan(p)
  if count < 0 || count > 4096 - p.runs.length() {
    raise Budget("center augmentation exceeds run budget")
  }
  let runs = p.runs.copy()
  for k in 0..