# dupcall В этом задании нужно реализовать свою вариацию на тему singleflight. Объект `dupcall.Call` должен дедуплицировать вызовы дорогой функции, правильно обрабатывая отмену контекста. Клиенты вызывают метод `Do` из разных горутин, передавая внутрь `cb` который они хотят запустить. `cb` запускается в отдельной горутине и в отдельном контексте. В один момент времени должен быть запущен только один не отменённый `cb`. Клиент вызвавший `Do` должен получить результатом пару `result interface{}, err error` от того `cb`, который был запущен в момент вызова `Do` (но не обязательно от своего `cb`). При этом вызов `Do` может быть отменён через `ctx`. Отменённый вызов `Do` должен завершаться сразу. Бегущий внутри `cb` должен отменяться только в случае, если __все__ ждущие вызовы `Do` были отменены. Например, если две горутины сделали вызов `Do`, а потом первый вызов был отменён, `cb` должен добежать успешно и вторая горутина должна получить его результат.