(cherry picked from commit 06d3588772894b0263086a900ccbbde108524887)
(cherry picked from commit bdbc17b371660b5317eae605ac304c3f66b49aeb)
(cherry picked from commit 4bdbcd87d410ea9121488997a1591a279f7c7b1b)