Generative Adversarial Networks (GANs): Engine and Applications