code: protected boolean extractCommonsCardData(final byte[] pGpo) throws CommunicationException {
  		boolean ret = false;
  		// Extract data from Message Template 1
  		byte data[] = TlvUtil.getValue(pGpo, EmvTags.RESPONSE_MESSAGE_TEMPLATE_1);
  		if (data != null) {
  			data = ArrayUtils.subarray(data, 2, data.length);
  		} else { // Extract AFL data from Message template 2
  			ret = extractTrackData(template.get().getCard(), pGpo);
  			if (!ret) {
  				data = TlvUtil.getValue(pGpo, EmvTags.APPLICATION_FILE_LOCATOR);
  			} else {
  				extractCardHolderName(pGpo);
  			}
  		}
  
  		if (data != null) {
  			// Extract Afl
  			List<Afl> listAfl = extractAfl(data);
  			// for each AFL
  			for (Afl afl : listAfl) {
  				// check all records
  				for (int index = afl.getFirstRecord(); index <= afl.getLastRecord(); index++) {
  					byte[] info = template.get().getProvider()
  							.transceive(new CommandApdu(CommandEnum.READ_RECORD, index, afl.getSfi() << 3 | 4, 0).toBytes());
  					// Extract card data
  					if (ResponseUtils.isSucceed(info)) {
  						extractCardHolderName(info);
  						if (extractTrackData(template.get().getCard(), info)) {
  							return true;
  						}
  					}
  				}
  			}
  		}
  		return ret;
  	}
docs: Method used to extract commons card data
  
  @param pGpo
  global processing options response
  @return true if the extraction succeed
  @throws CommunicationException communication error