declarations and initialization