# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Welcome to Jekyll!

aizhamal:
    name: Aizhamal Nurmamat kyzy
    email: aizhamal@google.com
    twitter: iamaijamal
aljoscha:
    name: Aljoscha Krettek
    email: aljoscha@apache.org
    twitter: aljoscha
altay:
    name: Ahmet Altay
    email: altay@apache.org
angoenka:
    name: Ankur Goenka
    email: goenka@apache.org
anton:
    name: Anton Kedin
    email: anton@apache.org
ccy:
    name: Charles Chen
    email: ccy@apache.org
chamikara:
    name: Chamikara Jayalath
    email: chamikara@apache.org
davor:
    name: Davor Bonaci
    email: davor@apache.org
    twitter: BonaciDavor
dhalperi:
    name: Dan Halperin
    email: dhalperi@apache.org
    twitter:
fjp:
    name: Frances Perry
    email: frances@apache.org
    twitter: francesjperry
harshithdwivedi:
    name: Harshit Dwivedi
    email: harshithdwivedi@gmail.com
    twitter: harshithdwivedi
henryken:
    name: Henry Suryawirawan
    email: henry.ken@gmail.com
    twitter: henry_ken
iemejia:
    name: Ismaël Mejía
    email: iemejia@apache.org
    twitter: iemejia
jamesmalone:
    name: James Malone
    email: jamesmalone@apache.org
    twitter: chimerasaurus
jesseanderson:
    name: Jesse Anderson
    twitter: jessetanderson
jphalip:
    name: Julien Phalip
    email: jphalip@google.com
    twitter: julienphalip
klk:
    name: Kenneth Knowles
    email: klk@apache.org
    twitter: KennKnowles
lkuligin:
    name: Leonid Kuligin
    email: kuligin@google.com
    twitter: lkulighin
markliu:
    name: Mark Liu
    email: markliu@apache.org
    twitter:
robertwb:
    name: Robert Bradshaw
    email: robertwb@apache.org
    twitter:
takidau:
    name: Tyler Akidau
    email: takidau@apache.org
    twitter: takidau
tgroh:
    name: Thomas Groh
    email: tgroh@google.com
thw:
    name: Thomas Weise
    email: thw@apache.org
    twitter: thweise
jkff:
    name: Eugene Kirpichov
    email: ekirpichov@gmail.com
    twitter:
jbonofre:
    name: Jean-Baptiste Onofré
    email: jbonofre@apache.org
    twitter: jbonofre
ianand:
    name: Anand Iyer
    email: ianand@google.com
    twitter:
aromanenko:
    name: Alexey Romanenko
    email: aromanenko@apache.org
    twitter: alexromdev
pabloem:
    name: Pablo Estrada
    email: pabloem@apache.org
    twitter: polecitoem
rfernand:
    name: Rafael Fernández
    email: rfernand@google.com
mbaetens:
    name: Matthias Baetens
    email: baetensmatthias@gmail.com
    twitter: matthiasbaetens
rez:
    name: Reza Rokni
    email: rez@google.com
    twitter: rarokni
ttanay:
    name: Tanay Tummalapalli
    email: ttanay100@gmail.com
    twitter: ttanay100
