public static void Main(string[] args)
        {
            var options = new CommandLineOptions();
              var parser = new CommandLineParser();
              if (!parser.ParseArguments(args, options))
              {
            Console.WriteLine(options.GetUsage());
            Environment.Exit(1);
            return;
              }

              var timestamp = Math.Round((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds);

              var key = options.Key.Replace("__unix_timestamp__", timestamp.ToString());
              Console.WriteLine("Using key <{0}>", key);

              try
              {
            var s3Client = new AmazonS3Client(options.AccessKey, options.SecretKey);
            var transferUtility = new TransferUtility(s3Client);
            var transferRequest = new TransferUtilityUploadRequest()
              .WithBucketName(options.Bucket)
              .WithFilePath(options.File)
              .WithKey(key);

            if (options.IsPublic)
            {
              transferRequest.WithCannedACL(S3CannedACL.PublicRead);
            }

            if (options.ShouldShowProgress)
            {
              Console.WriteLine();
              transferRequest.WithSubscriber(new EventHandler<UploadProgressArgs>((obj, progress) =>
              {
            Console.Write("\r{0}% complete. Uploaded {1} / {2} bytes.                    ", progress.PercentDone, progress.TransferredBytes, progress.TotalBytes);
              }));
            }

            transferUtility.Upload(transferRequest);

            Console.WriteLine();
            Console.WriteLine("Done!");
              }
              catch (Exception e)
              {
            Console.WriteLine("Error uploading: {0}", e.Message);
            Environment.Exit(1);
              }
        }