docs: public static ExpressionFactory newInstance(Properties properties) {
  		ClassLoader classLoader;
  		try {
  			classLoader = Thread.currentThread().getContextClassLoader();
  		} catch (SecurityException e) {
  			classLoader = ExpressionFactory.class.getClassLoader();
  		}
  
  		String className = null;
  
  		String serviceId = "META-INF/services/" + ExpressionFactory.class.getName();
  		InputStream input = classLoader.getResourceAsStream(serviceId);
  		try {
  			if (input != null) {
  				BufferedReader reader = new BufferedReader(new InputStreamReader(input, "UTF-8"));
  				className = reader.readLine();
  				reader.close();
  			}
  		} catch (IOException e) {
  			// do nothing
  		} finally {
  			if (input != null) {
  				try {
  					input.close();
  				} catch (Exception io) {
  					// do nothing
  				} finally {
  					input = null;
  				}
  			}
  		}
  
  		if (className == null || className.trim().length() == 0) {
  			try {
  				String home = System.getProperty("java.home");
  				if (home != null) {
  					String path = home + File.separator + "lib" + File.separator + "el.properties";
  					File file = new File(path);
  					if (file.exists()) {
  						input = new FileInputStream(file);
  						Properties props = new Properties();
  						props.load(input);
  						className = props.getProperty(ExpressionFactory.class.getName());
  					}
  				}
  			} catch (IOException e) {
  				// do nothing
  			} catch (SecurityException e) {
  				// do nothing
  			} finally {
  				if (input != null) {
  					try {
  						input.close();
  					} catch (IOException io) {
  						// do nothing
  					} finally {
  						input = null;
  					}
  				}
  			}
  		}
  
  		if (className == null || className.trim().length() == 0) {
  			try {
  				className = System.getProperty(ExpressionFactory.class.getName());
  			} catch (Exception se) {
  				// do nothing
  			}
  		}
  
  		if (className == null || className.trim().length() == 0) {
  			className = "org.camunda.bpm.engine.impl.juel.ExpressionFactoryImpl";
  		}
  
  		return newInstance(properties, className, classLoader);
  	}