```\\nfunction createSplit(\\n  address[] calldata accounts,\\n  uint32[] calldata percentAllocations,\\n  uint32 distributorFee,\\n  address controller\\n)\\n  external\\n  override\\n  validSplit(accounts, percentAllocations, distributorFee)\\n  returns (address split)\\n{\\n  bytes32 splitHash = _hashSplit(\\n    accounts,\\n    percentAllocations,\\n    distributorFee\\n  );\\n  if (controller == address(0)) {\\n    // create immutable split\\n    split = Clones.cloneDeterministic(walletImplementation, splitHash);\\n  } else {\\n    // create mutable split\\n    split = Clones.clone(walletImplementation);\\n    splits[split].controller = controller;\\n  }\\n  // store split's hash in storage for future verification\\n  splits[split].hash = splitHash;\\n  emit CreateSplit(split);\\n}\\n```\\n