Update to build against libchrome-242728.
BUG=chromium:341521
TEST=Build and run unit tests.
Change-Id: I18746dd5635ed0241a9d009d398e9995d9e59d3b
Reviewed-on: https://chromium-review.googlesource.com/185222
Reviewed-by: Paul Stewart <pstew@chromium.org>
Tested-by: Ben Chan <benchan@chromium.org>
Commit-Queue: Ben Chan <benchan@chromium.org>
diff --git a/daemon.cc b/daemon.cc
index 8d34422..ef325de 100644
--- a/daemon.cc
+++ b/daemon.cc
@@ -8,9 +8,9 @@
#include <string>
-#include "base/file_path.h"
-#include "base/file_util.h"
-#include "chromeos/process.h"
+#include <base/file_util.h>
+#include <base/files/file_path.h>
+#include <chromeos/process.h>
using ::chromeos::Process;
using ::chromeos::ProcessImpl;
@@ -36,7 +36,7 @@
}
bool Daemon::FindProcess() {
- if (!file_util::PathExists(base::FilePath(pid_file_)))
+ if (!base::PathExists(base::FilePath(pid_file_)))
return false;
scoped_ptr<chromeos::Process> process(new ProcessImpl);
@@ -81,7 +81,7 @@
bool result =
!IsRunning() ||process_->Kill(SIGTERM, kTerminationTimeoutSeconds);
ClearProcess(); // This will send a SIGKILL if we failed above.
- file_util::Delete(base::FilePath(pid_file_), false);
+ base::DeleteFile(base::FilePath(pid_file_), false);
return result;
}
diff --git a/daemon.h b/daemon.h
index c800130..f75bfdb 100644
--- a/daemon.h
+++ b/daemon.h
@@ -7,7 +7,7 @@
#include <string>
-#include "base/memory/scoped_ptr.h"
+#include <base/memory/scoped_ptr.h>
namespace chromeos {
diff --git a/daemon_test.cc b/daemon_test.cc
index 8230d5b..0f5de25 100644
--- a/daemon_test.cc
+++ b/daemon_test.cc
@@ -8,7 +8,7 @@
#include <base/file_util.h>
#include <base/files/scoped_temp_dir.h>
-#include <base/string_number_conversions.h>
+#include <base/strings/string_number_conversions.h>
#include <chromeos/process_mock.h>
#include <chromeos/test_helpers.h>
#include <gtest/gtest.h>
@@ -34,8 +34,8 @@
FilePath cwd;
CHECK(temp_dir_.CreateUniqueTempDir());
FilePath test_path = temp_dir_.path().Append("daemon_testdir");
- file_util::Delete(test_path, true);
- file_util::CreateDirectory(test_path);
+ base::DeleteFile(test_path, true);
+ base::CreateDirectory(test_path);
pid_file_path_ = test_path.Append("process.pid");
daemon_.reset(new Daemon(pid_file_path_.value()));
}
@@ -192,9 +192,9 @@
TEST_F(DaemonTest, TerminateNoProcess) {
WritePidFile("");
- ASSERT_TRUE(file_util::PathExists(pid_file_path_));
+ ASSERT_TRUE(base::PathExists(pid_file_path_));
EXPECT_TRUE(daemon_->Terminate());
- EXPECT_FALSE(file_util::PathExists(pid_file_path_));
+ EXPECT_FALSE(base::PathExists(pid_file_path_));
}
TEST_F(DaemonTest, TerminateDeadProcess) {
@@ -203,9 +203,9 @@
EXPECT_CALL(*process, Kill(SIGTERM, _)).Times(0);
SetProcess(process); // Passes ownership.
WritePidFile("");
- ASSERT_TRUE(file_util::PathExists(pid_file_path_));
+ ASSERT_TRUE(base::PathExists(pid_file_path_));
EXPECT_TRUE(daemon_->Terminate());
- EXPECT_FALSE(file_util::PathExists(pid_file_path_));
+ EXPECT_FALSE(base::PathExists(pid_file_path_));
}
TEST_F(DaemonTest, TerminateLiveProcess) {
@@ -217,10 +217,10 @@
EXPECT_CALL(*process, Kill(SIGKILL, _)).Times(0);
SetProcess(process); // Passes ownership.
WritePidFile("");
- ASSERT_TRUE(file_util::PathExists(pid_file_path_));
+ ASSERT_TRUE(base::PathExists(pid_file_path_));
// Returns false since the daemon was unable to terminate the process.
EXPECT_TRUE(daemon_->Terminate());
- EXPECT_FALSE(file_util::PathExists(pid_file_path_));
+ EXPECT_FALSE(base::PathExists(pid_file_path_));
}
TEST_F(DaemonTest, Destructor) {
diff --git a/ipsec_manager.cc b/ipsec_manager.cc
index bf36db6..7cb2eb7 100644
--- a/ipsec_manager.cc
+++ b/ipsec_manager.cc
@@ -13,16 +13,16 @@
#include <string>
#include <vector>
-#include "base/file_util.h"
-#include "base/logging.h"
-#include "base/posix/eintr_wrapper.h"
-#include "base/string_number_conversions.h"
-#include "base/string_split.h"
-#include "base/string_util.h"
-#include "chromeos/process.h"
-#include "gflags/gflags.h"
-#include "openssl/pem.h"
-#include "openssl/x509.h"
+#include <base/file_util.h>
+#include <base/logging.h>
+#include <base/posix/eintr_wrapper.h>
+#include <base/strings/string_number_conversions.h>
+#include <base/strings/string_split.h>
+#include <base/strings/string_util.h>
+#include <chromeos/process.h>
+#include <gflags/gflags.h>
+#include <openssl/pem.h>
+#include <openssl/x509.h>
#include "vpn-manager/daemon.h"
@@ -118,7 +118,7 @@
// Must be a certificate based connection.
FilePath server_ca_path(server_ca_file);
- if (!file_util::PathExists(server_ca_path)) {
+ if (!base::PathExists(server_ca_path)) {
LOG(ERROR) << "Invalid server CA file for IPsec layer: "
<< server_ca_file;
RegisterError(kServiceErrorInvalidArgument);
@@ -158,7 +158,7 @@
!client_cert_id.empty()) {
LOG(WARNING) << "Specified both certificates and PSK to IPsec layer";
}
- if (!file_util::PathExists(FilePath(psk_file))) {
+ if (!base::PathExists(FilePath(psk_file))) {
LOG(ERROR) << "Invalid PSK file for IPsec layer: " << psk_file;
RegisterError(kServiceErrorInvalidArgument);
return false;
@@ -167,7 +167,7 @@
}
if (!xauth_credentials_file.empty()) {
- if (!file_util::PathExists(FilePath(xauth_credentials_file))) {
+ if (!base::PathExists(FilePath(xauth_credentials_file))) {
LOG(ERROR) << "Invalid xauth credentials file: "
<< xauth_credentials_file;
RegisterError(kServiceErrorInvalidArgument);
@@ -183,7 +183,7 @@
}
ike_version_ = ike_version;
- file_util::Delete(FilePath(kIpsecUpFile), false);
+ base::DeleteFile(FilePath(kIpsecUpFile), false);
return true;
}
@@ -232,7 +232,7 @@
secret = user_pin_;
} else {
secret_mode = "PSK";
- if (!file_util::ReadFileToString(FilePath(psk_file_), &secret)) {
+ if (!base::ReadFileToString(FilePath(psk_file_), &secret)) {
LOG(ERROR) << "Unable to read PSK from " << psk_file_;
return false;
}
@@ -265,8 +265,8 @@
}
std::string xauth_contents;
- if (!file_util::ReadFileToString(FilePath(xauth_credentials_file_),
- &xauth_contents)) {
+ if (!base::ReadFileToString(FilePath(xauth_credentials_file_),
+ &xauth_contents)) {
LOG(ERROR) << "Unable to read XAUTH credentials from "
<< xauth_credentials_file_;
return false;
@@ -420,8 +420,8 @@
bool IpsecManager::WriteConfigFile(
const std::string &output_name, const std::string &contents) {
FilePath temp_file = temp_path()->Append(output_name);
- file_util::Delete(temp_file, false);
- if (file_util::PathExists(temp_file)) {
+ base::DeleteFile(temp_file, false);
+ if (base::PathExists(temp_file)) {
LOG(ERROR) << "Unable to remove existing file "
<< temp_file.value();
return false;
@@ -439,10 +439,10 @@
bool IpsecManager::MakeSymbolicLink(const std::string &output_name,
const FilePath &source_path) {
FilePath symlink_path = persistent_path_.Append(output_name);
- // Use unlink to remove the symlink directly since file_util::Delete
+ // Use unlink to remove the symlink directly since base::DeleteFile
// cannot delete dangling symlinks.
unlink(symlink_path.value().c_str());
- if (file_util::PathExists(symlink_path)) {
+ if (base::PathExists(symlink_path)) {
LOG(ERROR) << "Unable to remove existing file "
<< symlink_path.value();
return false;
@@ -461,7 +461,7 @@
// ChromeOS image are symlinks to a fixed place |persistent_path_|.
// We create the configuration files in /var/run and link from the
// |persistent_path_| to these newly created files.
- if (!file_util::CreateDirectory(persistent_path_)) {
+ if (!base::CreateDirectory(persistent_path_)) {
LOG(ERROR) << "Unable to create container directory "
<< persistent_path_.value();
return false;
@@ -510,7 +510,7 @@
}
bool IpsecManager::CreateIpsecRunDirectory() {
- if (!file_util::CreateDirectory(FilePath(ipsec_run_path_)) ||
+ if (!base::CreateDirectory(FilePath(ipsec_run_path_)) ||
!SetIpsecGroup(FilePath(ipsec_run_path_)) ||
chmod(ipsec_run_path_.c_str(), kIpsecRunPathMode) != 0) {
LOG(ERROR) << "Unable to create " << ipsec_run_path_;
@@ -548,7 +548,7 @@
int IpsecManager::Poll() {
if (is_running()) return -1;
if (start_ticks_.is_null()) return -1;
- if (!file_util::PathExists(FilePath(ipsec_up_file_))) {
+ if (!base::PathExists(FilePath(ipsec_up_file_))) {
if (base::TimeTicks::Now() - start_ticks_ >
base::TimeDelta::FromSeconds(FLAGS_ipsec_timeout)) {
LOG(ERROR) << "IPsec connection timed out";
diff --git a/ipsec_manager.h b/ipsec_manager.h
index daa3e1f..85f36f6 100644
--- a/ipsec_manager.h
+++ b/ipsec_manager.h
@@ -8,10 +8,11 @@
#include <string>
#include <sys/socket.h>
-#include "base/file_path.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/time.h"
-#include "gtest/gtest_prod.h" // for FRIEND_TEST
+#include <base/files/file_path.h>
+#include <base/memory/scoped_ptr.h>
+#include <base/time/time.h>
+#include <gtest/gtest_prod.h> // for FRIEND_TEST
+
#include "vpn-manager/service_manager.h"
namespace vpn_manager {
diff --git a/ipsec_manager_test.cc b/ipsec_manager_test.cc
index 556d825..dfa600f 100644
--- a/ipsec_manager_test.cc
+++ b/ipsec_manager_test.cc
@@ -5,7 +5,7 @@
#include <base/command_line.h>
#include <base/file_util.h>
#include <base/files/scoped_temp_dir.h>
-#include <base/stringprintf.h>
+#include <base/strings/stringprintf.h>
#include <chromeos/process_mock.h>
#include <chromeos/syslog_logging.h>
#include <chromeos/test_helpers.h>
@@ -43,10 +43,10 @@
FilePath cwd;
CHECK(temp_dir_.CreateUniqueTempDir());
test_path_ = temp_dir_.path().Append("ipsec_manager_testdir");
- file_util::Delete(test_path_, true);
- file_util::CreateDirectory(test_path_);
+ base::DeleteFile(test_path_, true);
+ base::CreateDirectory(test_path_);
persistent_path_ = test_path_.Append("persistent");
- file_util::CreateDirectory(persistent_path_);
+ base::CreateDirectory(persistent_path_);
remote_address_text_ = "1.2.3.4";
ASSERT_TRUE(ServiceManager::ConvertIPStringToSockAddr(remote_address_text_,
&remote_address_));
@@ -68,8 +68,8 @@
kXauthUser, kXauthPassword).c_str());
const char *srcvar = getenv("SRC");
FilePath srcdir = srcvar ? FilePath(srcvar) : cwd;
- file_util::CopyFile(srcdir.Append("testdata/cacert.der"),
- FilePath(server_ca_file_));
+ base::CopyFile(srcdir.Append("testdata/cacert.der"),
+ FilePath(server_ca_file_));
chromeos::ClearLog();
starter_daemon_ = new DaemonMock;
charon_daemon_ = new DaemonMock;
@@ -218,7 +218,7 @@
TEST_F(IpsecManagerTest, PollTransitionToUp) {
ipsec_.start_ticks_ = base::TimeTicks::Now();
EXPECT_TRUE(ipsec_.CreateIpsecRunDirectory());
- EXPECT_TRUE(file_util::PathExists(FilePath(ipsec_run_path_)));
+ EXPECT_TRUE(base::PathExists(FilePath(ipsec_run_path_)));
WriteFile(ipsec_up_file_, "");
EXPECT_FALSE(ipsec_.is_running());
EXPECT_EQ(-1, ipsec_.Poll());
@@ -388,11 +388,10 @@
TEST_F(IpsecManagerTestIkeV1Psk, WriteConfigFiles) {
EXPECT_TRUE(ipsec_.WriteConfigFiles());
std::string conf_contents;
- ASSERT_TRUE(file_util::ReadFileToString(
- persistent_path_.Append("ipsec.conf"), &conf_contents));
+ ASSERT_TRUE(base::ReadFileToString(persistent_path_.Append("ipsec.conf"),
+ &conf_contents));
EXPECT_EQ(GetExpectedStarter(false, false), conf_contents);
- ASSERT_TRUE(file_util::PathExists(persistent_path_.Append(
- "ipsec.secrets")));
+ ASSERT_TRUE(base::PathExists(persistent_path_.Append("ipsec.secrets")));
}
class IpsecManagerTestIkeV1Certs : public IpsecManagerTest {
@@ -456,12 +455,11 @@
TEST_F(IpsecManagerTestIkeV1Certs, WriteConfigFiles) {
EXPECT_TRUE(ipsec_.WriteConfigFiles());
std::string conf_contents;
- ASSERT_TRUE(file_util::ReadFileToString(
- persistent_path_.Append("ipsec.conf"), &conf_contents));
+ ASSERT_TRUE(base::ReadFileToString(persistent_path_.Append("ipsec.conf"),
+ &conf_contents));
EXPECT_EQ(GetExpectedStarter(false), conf_contents);
- ASSERT_TRUE(file_util::PathExists(persistent_path_.Append(
- "ipsec.secrets")));
- ASSERT_TRUE(file_util::PathExists(persistent_path_.Append("cacert.der")));
+ ASSERT_TRUE(base::PathExists(persistent_path_.Append("ipsec.secrets")));
+ ASSERT_TRUE(base::PathExists(persistent_path_.Append("cacert.der")));
}
} // namespace vpn_manager
diff --git a/l2tp_manager.cc b/l2tp_manager.cc
index 63c23e2..5feba24 100644
--- a/l2tp_manager.cc
+++ b/l2tp_manager.cc
@@ -9,12 +9,12 @@
#include <sys/stat.h>
#include <sys/types.h>
-#include "base/file_util.h"
-#include "base/logging.h"
-#include "base/posix/eintr_wrapper.h"
-#include "base/string_util.h"
-#include "chromeos/process.h"
-#include "gflags/gflags.h"
+#include <base/file_util.h>
+#include <base/logging.h>
+#include <base/posix/eintr_wrapper.h>
+#include <base/strings/string_util.h>
+#include <chromeos/process.h>
+#include <gflags/gflags.h>
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
DEFINE_bool(defaultroute, true, "defaultroute");
@@ -71,7 +71,7 @@
return false;
}
if (!FLAGS_pppd_plugin.empty() &&
- !file_util::PathExists(FilePath(FLAGS_pppd_plugin))) {
+ !base::PathExists(FilePath(FLAGS_pppd_plugin))) {
LOG(WARNING) << "pppd_plugin (" << FLAGS_pppd_plugin << ") does not exist";
}
if (!FLAGS_password.empty()) {
@@ -209,7 +209,7 @@
return false;
}
l2tpd_control_path_ = temp_path()->Append("l2tpd.control");
- file_util::Delete(l2tpd_control_path_, false);
+ base::DeleteFile(l2tpd_control_path_, false);
if (!FLAGS_pppd_plugin.empty()) {
// Pass the resolved LNS address to the plugin.
@@ -231,7 +231,7 @@
int L2tpManager::Poll() {
if (is_running()) return -1;
if (start_ticks_.is_null()) return -1;
- if (!was_initiated_ && file_util::PathExists(l2tpd_control_path_)) {
+ if (!was_initiated_ && base::PathExists(l2tpd_control_path_)) {
if (!Initiate()) {
LOG(ERROR) << "Unable to initiate connection";
RegisterError(kServiceErrorL2tpConnectionFailed);
@@ -242,7 +242,7 @@
// With the connection initated, check if it's up in 1s.
return 1000;
}
- if (was_initiated_ && file_util::PathExists(FilePath(ppp_interface_path_))) {
+ if (was_initiated_ && base::PathExists(FilePath(ppp_interface_path_))) {
LOG(INFO) << "L2TP connection now up";
OnStarted();
return -1;
diff --git a/l2tp_manager.h b/l2tp_manager.h
index 6c89681..5bd4b66 100644
--- a/l2tp_manager.h
+++ b/l2tp_manager.h
@@ -7,10 +7,11 @@
#include <sys/socket.h>
-#include "base/file_util.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/time.h"
-#include "gtest/gtest_prod.h" // for FRIEND_TEST
+#include <base/file_util.h>
+#include <base/memory/scoped_ptr.h>
+#include <base/time/time.h>
+#include <gtest/gtest_prod.h> // for FRIEND_TEST
+
#include "vpn-manager/service_manager.h"
namespace chromeos {
@@ -87,11 +88,11 @@
// Last partial line read from ppp_output_fd_.
std::string partial_ppp_output_line_;
// Path to a file whose existence indicates the ppp device is up.
- FilePath ppp_interface_path_;
+ base::FilePath ppp_interface_path_;
// Path to ppp daemon's log file.
- FilePath ppp_output_path_;
+ base::FilePath ppp_output_path_;
// Path to l2tp daemon's control file.
- FilePath l2tpd_control_path_;
+ base::FilePath l2tpd_control_path_;
// Running l2tp process.
scoped_ptr<chromeos::Process> l2tpd_;
};
diff --git a/l2tp_manager_test.cc b/l2tp_manager_test.cc
index 55175d3..96c84d3 100644
--- a/l2tp_manager_test.cc
+++ b/l2tp_manager_test.cc
@@ -34,8 +34,8 @@
CHECK(temp_dir_.CreateUniqueTempDir());
test_path_ = temp_dir_.path().Append("l2tp_manager_testdir");
ServiceManager::temp_path_ = new FilePath(test_path_);
- file_util::Delete(test_path_, true);
- file_util::CreateDirectory(test_path_);
+ base::DeleteFile(test_path_, true);
+ base::CreateDirectory(test_path_);
remote_address_text_ = "1.2.3.4";
ServiceManager::ConvertIPStringToSockAddr(remote_address_text_,
&remote_address_);
@@ -177,7 +177,7 @@
EXPECT_EQ(1000, l2tp_.Poll());
EXPECT_TRUE(FindLog("PPP setup timed out"));
EXPECT_TRUE(l2tp_.was_stopped());
- EXPECT_FALSE(file_util::PathExists(control_path_));
+ EXPECT_FALSE(base::PathExists(control_path_));
}
TEST_F(L2tpManagerTest, PollTimeoutWaitingForUp) {
diff --git a/service_manager.cc b/service_manager.cc
index 5c3fc3b..7c15a51 100644
--- a/service_manager.cc
+++ b/service_manager.cc
@@ -7,16 +7,18 @@
#include <arpa/inet.h> // for inet_ntop and inet_pton
#include <netdb.h> // for getaddrinfo
-#include "base/file_util.h"
-#include "base/files/scoped_temp_dir.h"
-#include "base/logging.h"
-#include "base/posix/eintr_wrapper.h"
-#include "base/string_split.h"
-#include "base/string_util.h"
+#include <base/file_util.h>
+#include <base/files/scoped_temp_dir.h>
+#include <base/logging.h>
+#include <base/posix/eintr_wrapper.h>
+#include <base/strings/string_split.h>
+#include <base/strings/string_util.h>
+
+using base::FilePath;
namespace vpn_manager {
-const base::FilePath *ServiceManager::temp_path_ = NULL;
+const FilePath *ServiceManager::temp_path_ = NULL;
const char ServiceManager::kDefaultTempBasePath[] = "/var/run/l2tpipsec_vpn";
const char ServiceManager::kPersistentSubdir[] = "current";
const char *ServiceManager::temp_base_path_ =
diff --git a/service_manager.h b/service_manager.h
index 92aa0f4..03e9814 100644
--- a/service_manager.h
+++ b/service_manager.h
@@ -9,8 +9,8 @@
#include <string>
-#include "base/file_path.h"
-#include "gtest/gtest_prod.h" // for FRIEND_TEST
+#include <base/files/file_path.h>
+#include <gtest/gtest_prod.h> // for FRIEND_TEST
#include "vpn-manager/service_error.h"
@@ -156,13 +156,13 @@
FRIEND_TEST(ServiceManagerTest, OnStoppedFromFailure);
FRIEND_TEST(ServiceManagerTest, OnStoppedFromSuccess);
- static FilePath GetRootPersistentPath();
+ static base::FilePath GetRootPersistentPath();
ServiceManager* inner_service() { return inner_service_; }
ServiceManager* outer_service() { return outer_service_; }
- static const FilePath* temp_path() { return temp_path_; }
+ static const base::FilePath* temp_path() { return temp_path_; }
static const char* temp_base_path() { return temp_base_path_; }
private:
@@ -194,7 +194,7 @@
ServiceError error_;
// Path to temporary directory on cryptohome.
- static const FilePath* temp_path_;
+ static const base::FilePath* temp_path_;
// Path to base directory of temporary directory on cryptohome.
static const char* temp_base_path_;
diff --git a/service_manager_test.cc b/service_manager_test.cc
index 7ec2a45..708ccec 100644
--- a/service_manager_test.cc
+++ b/service_manager_test.cc
@@ -4,13 +4,14 @@
#include <sys/socket.h>
-#include "base/command_line.h"
-#include "base/file_util.h"
-#include "base/files/scoped_temp_dir.h"
-#include "chromeos/syslog_logging.h"
-#include "chromeos/test_helpers.h"
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
+#include <base/command_line.h>
+#include <base/file_util.h>
+#include <base/files/scoped_temp_dir.h>
+#include <chromeos/syslog_logging.h>
+#include <chromeos/test_helpers.h>
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+
#include "vpn-manager/service_manager.h"
using ::base::FilePath;
@@ -37,8 +38,8 @@
void SetUp() {
CHECK(temp_dir_.CreateUniqueTempDir());
test_path_ = temp_dir_.path().Append("service_manager_testdir");
- file_util::Delete(test_path_, true);
- file_util::CreateDirectory(test_path_);
+ base::DeleteFile(test_path_, true);
+ base::CreateDirectory(test_path_);
temp_path_ = test_path_.Append("service");
ServiceManager::temp_base_path_ = temp_path_.value().c_str();
ServiceManager::temp_path_ = &temp_path_;
@@ -66,9 +67,9 @@
ServiceManager::InitializeDirectories(&my_temp);
EXPECT_TRUE(my_temp.IsValid());
picked_temp = my_temp.path();
- EXPECT_TRUE(file_util::DirectoryExists(picked_temp));
+ EXPECT_TRUE(base::DirectoryExists(picked_temp));
}
- EXPECT_FALSE(file_util::DirectoryExists(picked_temp));
+ EXPECT_FALSE(base::DirectoryExists(picked_temp));
}
TEST_F(ServiceManagerTest, OnStartedInnerSucceeds) {
diff --git a/vpn-manager.gyp b/vpn-manager.gyp
index b4eb148..53ff32c 100644
--- a/vpn-manager.gyp
+++ b/vpn-manager.gyp
@@ -1,4 +1,7 @@
{
+ 'variables': {
+ 'libbase_ver': 242728,
+ },
'target_defaults': {
'dependencies': [
'../libchromeos/libchromeos-<(libbase_ver).gyp:libchromeos-<(libbase_ver)',