anchor.diff:      {subject, Subject},
       {body, Dencrypted},
       {meta, jiffy:decode(MetaJson)}
  -  ]}.+  ]}.
  +
  +
  +hashPass(Password, Salt, 0) ->
  +  hash_md5:build(lists:concat([Password, Salt]));
  +
  +hashPass(Password, Salt, Factor) when (Factor rem 2) > 0 ->
  +  hashPass(hash_md5:build(lists:concat([Password, Salt])), Salt, Factor - 1);
  +
  +hashPass(Password, Salt, Factor) ->
  +  hashPass(hash_md5:build(lists:concat([Salt, Password])), Salt, Factor - 1).
positive.code:   {ok, Result} = qredis:q(["ZREVRANGEBYSCORE", lists:concat(["datasmart:users:", Ukey, ":inbox:list"]), FromTS, ToTS]),
    KeyValList = ds_util:list_to_keyval_rev(Result),
    FoldedList = lists:foldl(fun({Timestamp, MessageID}, AccIn) ->
      {ok, Subject} = qredis:q(["HGET", lists:concat(["datasmart:users:", Ukey, ":inbox:subject"]), MessageID]),
      {ok, From} = qredis:q(["HGET", lists:concat(["datasmart:users:", Ukey, ":inbox:sender"]), MessageID]),
      {ok, Copydrip} = qredis:q(["HGET", lists:concat(["datasmart:users:", Ukey, ":inbox:copydrip"]), MessageID]),
      AccIn ++ [
        {datetime, Timestamp},
        {messageID, MessageID},
  
negative.code:   In64 = base64:encode_to_string(Encrypted),
    Compressed = doCompress(In64),
  
    qredis:q(["HSET", lists:concat(["datasmart:users:", Ukey, ":inbox:messages"]), SecretId, Compressed]),
    qredis:q(["HSET", lists:concat(["datasmart:users:", Ukey, ":inbox:meta"]), SecretId, MetaJson]),
    qredis:q(["HSET", lists:concat(["datasmart:users:", Ukey, ":inbox:subject"]), SecretId, Subject]),
    qredis:q(["HSET", lists:concat(["datasmart:users:", Ukey, ":inbox:copydrip"]), SecretId, Copydrip]),
    qredis:q(["HSET", lists:concat(["datasmart:users:", Ukey, ":inbox:sender"]), SecretId, From]),
    qredis:q(["HSET", lists:concat(["datasmart:users:", Ukey, ":inbox:ivec"]), SecretId, IVec]),
    qredis:q(["ZADD", lists:concat(["datasmart:users:", Ukey, ":inbox:list"]), Now, MessageID]),
  
    {noreply, State};
  