(cherry picked from commit e3f250fff07ee496c54050d1ed28041c9786d0fd)
(cherry picked from commit 985d764f623e24402b1ba91562d2994b28d1aeec)
(cherry picked from commit 505f5cfa0c543f779abe43d6d77f260991486fdf)