(imported from commit 00c0c7b59616473ab2aec2a24b41798f7c8af322)
(imported from commit eb0a9466b9064f89322ab593134af0761caeea8a)
(imported from commit 81d7e010f6316dfbe0ce7b645a7b61dde2881483)