Upgradeable Solidity without storage gaps: understanding ERC-7201 and OpenZeppelin's namespaced storage