anchor.diff:      
       //Add the query string components as UTF-8 characters which are URL encoded
       //and sorted using lexicographic byte ordering.
  -    var query = uri.queryParameters;
  -    var keys = query.keys.toList();
  -    keys.sort(); 
  -    canon.write(keys.map((String key){
  -      return Uri.encodeComponent(key) +'='+ Uri.encodeComponent(query[key]);
  -    }).join('&'));
  +    canon.write(canonicalQueryString(uri.queryParameters));
       
       return canon.toString();
     }
  
positive.code:     canon.write(CryptoUtils.bytesToHex(payloadHash));
      
      return canon.toString();
    }
    
    String calculateSignature2(String canonical, String secretKey){
  
negative.code: 
  class Sign{
    var iso = new DateFormat('yyyy-MM-ddTHH:mm:ss');
    var long4 = new DateFormat('yyyyMMddTHH:mm:ssZ');
    var short4 = new DateFormat('yyyyMMdd');
    
    Request sign2(Request req, String accessKey,
                 String secretKey, [DateTime time]){
  