# This file allows mapping several author and committer email addresses and
# names to a single canonical one for `git shortlog`, `git log --author`,
# or `git check-mailmap`.
#
# For example, if you commit as `random.person@example.com` but sometimes use
# "Rañdom Person" and sometimes "Random Person" as name and you want the former
# to be your canonical name, add
#
#     Rañdom Person <random.person@example.com>
#
# If you commit as both `random.person@example.com` and `ranp@example.com` and
# you want the former to be your canonical email address, add
#
#     <random.person@example.com> <ranp@example.com>
#
# Combinations of both are possible too, see
# https://git-scm.com/docs/gitmailmap for format details.
#
# You can commit changes for your own names and  email addresses without review.
# If you want to add entries for other people, please have them review the
# addition.
#
# Please keep this file sorted.

<compnerd@compnerd.org> <abdulras@fb.com>
<compnerd@compnerd.org> <abdulras@google.com>
<i@maskray.me> <maskray@google.com>
<qiucofan@cn.ibm.com> <qiucf@cn.ibm.com>
<rnk@google.com> <reid@kleckner.net>
<thakis@chromium.org> <nicolasweber@gmx.de>
Jon Roelofs <jonathan_roelofs@apple.com> Jon Roelofs <jroelofs@jroelofs.com>
Jon Roelofs <jonathan_roelofs@apple.com> Jonathan Roelofs <jonathan@codesourcery.com>
Jon Roelofs <jonathan_roelofs@apple.com> Jonathan Roelofs <jroelofs@jroelofs.com>
Martin Storsjö <martin@martin.st>
Saleem Abdulrasool <compnerd@compnerd.org> <compnerd@compnerd.org>
