b() logs "b", then calls a() which synchronously logs "a" and returns a resolved promise. b then suspends at the await, queuing the continuation ("c") as a microtask. The Promise.resolve().then for "d" is queued right after, so the microtask order is "c" then "d".