===== ISTEM =====
Solve the following programming task.

TASK: Deep Clone an Object

Write a function 'deepClone(obj)' that deeply copies a given JavaScript object or array (including nested objects, arrays and primitives) without sharing references. It must also clone Date and RegExp objects.

STARTER CODE (javascript):
function deepClone(obj) {
  // Write your code here
}

module.exports = { deepClone };


RULES:
- Keep the function name and signature EXACTLY as given.
- Return working code only. No explanations.
- Put the code in a single ``` block.
- Try to solve it first. If you genuinely cannot, write only this single
  line instead of producing faulty code: CANNOT_SOLVE

===== HAM YANIT =====
```javascript
function deepClone(obj) {
  const seen = new WeakMap();

  function clone(value) {
    // Primitives and functions (non-objects) return as is
    if (value === null || typeof value !== 'object') return value;

    // Handle Date
    if (value instanceof Date) return new Date(value);

    // Handle RegExp
    if (value instanceof RegExp) return new RegExp(value.source, value.flags);

    // Handle circular references
    if (seen.has(value)) return seen.get(value);

    // Handle Array
    if (Array.isArray(value)) {
      const arr = [];
      seen.set(value, arr);
      for (let i = 0; i < value.length; i++) {
        arr[i] = clone(value[i]);
      }
      return arr;
    }

    // Handle generic object
    const clonedObj = {};
    seen.set(value, clonedObj);
    for (const key of Object.keys(value)) {
      clonedObj[key] = clone(value[key]);
    }
    return clonedObj;
  }

  return clone(obj);
}

module.exports = { deepClone };
```