(cherry picked from commit 9cbdfe0ecbf4d6391d24f32cfba0dab1e9c7292f)
(cherry picked from commit 26343635e4b25eb5e2969244fae7569fecde7efe)
(cherry picked from commit 6d9ca290b3f54b6f14c8c3af18bad89a06f66f2b)