code: protected List<Application> parseFCIProprietaryTemplate(final byte[] pData) throws CommunicationException {
  		List<Application> ret = new ArrayList<Application>();
  		// Get SFI
  		byte[] data = TlvUtil.getValue(pData, EmvTags.SFI);
  
  		// Check SFI
  		if (data != null) {
  			int sfi = BytesUtils.byteArrayToInt(data);
  			if (LOGGER.isDebugEnabled()) {
  				LOGGER.debug("SFI found:" + sfi);
  			}
  			// For each records
  			for (int rec = 0; rec < MAX_RECORD_SFI; rec++) {
  				data = provider.transceive(new CommandApdu(CommandEnum.READ_RECORD, rec, sfi << 3 | 4, 0).toBytes());
  				// Check response
  				if (ResponseUtils.isSucceed(data)) {
  					// Get applications Tags
  					ret.addAll(getApplicationTemplate(data));
  				} else {
  					// No more records
  					break;
  				}
  			}
  		} else {
  			// Read Application template
  			ret.addAll(getApplicationTemplate(pData));
  			if (LOGGER.isDebugEnabled()) {
  				LOGGER.debug("(FCI) Issuer Discretionary Data is already present");
  			}
  		}
  		return ret;
  	}
docs: Method used to parse FCI Proprietary Template
  
  @param pData
  data to parse
  @return the list of EMV application in the card
  @throws CommunicationException communication error