code: protected function callCorrectA($addressData)
      {
          $return   = false;
          $settings = $this->getIntegrationSettings()->getFeatureSettings();
  
          if (!file_exists($settings[self::CA_CORRECTA_CMD])) {
              $this->getLogger()->error(
                  'Correct Address: Could not find executable '.$settings[self::CA_CORRECTA_CMD]
              );
          } else {
              $pipes   = [];
              $process = proc_open(
                  $settings[self::CA_CORRECTA_CMD],
                  [
                      ['pipe', 'r'], // stdin
                      ['pipe', 'w'], // stdout
                      ['pipe', 'w'], // stderr
                  ],
                  $pipes,
                  dirname($settings[self::CA_CORRECTA_CMD]),
                  ['CA_DATA' => $settings[self::CA_CORRECTA_DATA]]
              );
  
              if (is_resource($process)) {
                  // Send input to CallCorrectA and close its stdin
                  fwrite($pipes[0], $addressData) && fclose($pipes[0]);
  
                  // Log issues and cleanup
                  if ($err = stream_get_contents($pipes[2])) {
                      $this->getLogger()->error(
                          'Correct Address: Error from executable '.$err
                      );
                  } else {
                      $return = fgets($pipes[1]);
                  }
  
                  fclose($pipes[1]) && fclose($pipes[2]) && proc_close($process);
              } else {
                  $this->getLogger()->error(
                      'Correct Address: Could not open executable '.$settings[self::CA_CORRECTA_CMD]
                  );
              }
          }
  
          return $return;
      }
docs: @param $addressData
  
  @return bool|string