func: function decreaseApprovalPreSigned(
          bytes _signature,
          address _to, 
          uint256 _value, 
          uint256 _gasPrice, 
          uint256 _nonce) 
        public
      returns (bool) 
      {
          uint256 gas = gasleft();
          address from = recoverPreSigned(_signature, decreaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
          require(from != address(0), "Invalid signature provided.");
  
          bytes32 txHash = getPreSignedHash(decreaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
          require(!invalidHashes[from][txHash], "Transaction has already been executed.");
          invalidHashes[from][txHash] = true;
          nonces[from]++;
          
          require(_decreaseApproval(from, _to, _value));
  
          if (_gasPrice > 0) {
              gas = 35000 + gas.sub(gasleft());
              require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
          }
  
          emit HashRedeemed(txHash, from);
          return true;
      }