public static void Main(String[] args)
    {
        TokenSigner tokenSigner = new TokenSigner();
        if (args == null || args.Length == 0)
        {
            tokenSigner.ListCertificates();

            Console.WriteLine("Help.");
            Console.WriteLine("First argument is the folder path.");
            Console.WriteLine("Second argument is the token pin.");


        }
        else
        {
            if (args.Length == 2)
                tokenSigner.TokenPin = args[1];

            if (File.Exists(args[0] + @"\SourceDocumentJson.json") == false)
            {
                Console.WriteLine("The file " + args[0] + @"\SourceDocumentJson.json is not exist");
            }
            else
            {
                String cades = "";
                String SourceDocumentJson = File.ReadAllText(args[0] + @"\SourceDocumentJson.json");
                JObject request = JsonConvert.DeserializeObject<JObject>(SourceDocumentJson, new JsonSerializerSettings()
                {
                    FloatFormatHandling = FloatFormatHandling.String,
                    FloatParseHandling = FloatParseHandling.Decimal,
                    DateFormatHandling = DateFormatHandling.IsoDateFormat,
                    DateParseHandling = DateParseHandling.None
                });

                //Start serialize
                String canonicalString = tokenSigner.Serialize(request);
                File.WriteAllBytes(args[0] + @"\CanonicalString.txt", System.Text.Encoding.UTF8.GetBytes(canonicalString));
                // retrieve cades
                if (request["documentTypeVersion"].Value<string>() == "0.9")
                {
                    cades = "ANY";
                }
                else
                {
                    cades = tokenSigner.SignWithCMS(canonicalString);
                }
                File.WriteAllBytes(args[0] + @"\Cades.txt", System.Text.Encoding.UTF8.GetBytes(cades));
                JObject signaturesObject = new JObject(
                                       new JProperty("signatureType", "I"),
                                       new JProperty("value", cades));
                JArray signaturesArray = new JArray();
                signaturesArray.Add(signaturesObject);
                request.Add("signatures", signaturesArray);
                String fullSignedDocument = "{\"documents\":[" + request.ToString() + "]}";
                File.WriteAllBytes(args[0] + @"\FullSignedDocument.json", System.Text.Encoding.UTF8.GetBytes(fullSignedDocument));
            }
        }
    }