Regenerate patches

frameworks/base got too messy, time to clean it up
This commit is contained in:
Andy CrossGate Yan
2021-02-14 10:41:04 +00:00
parent 85c08ba1de
commit 79b5b414a7
150 changed files with 615 additions and 881 deletions
@@ -1,7 +1,7 @@
From 5286da2b7f598de0566d1ad1a5e070bdb5d698d1 Mon Sep 17 00:00:00 2001
From 9873f460d3a40ca739e4c069068b32990dc2fff8 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 24 Apr 2018 00:14:28 +0200
Subject: [PATCH 01/11] FIH devices: Fix "Earpiece" audio output
Subject: [PATCH 01/17] FIH devices: Fix "Earpiece" audio output
On some FIH devices (confirmed on Razer, and probably on Aquos SS2),
Earpiece is not listed in attachedDevices, and devicePort's profile
@@ -77,5 +77,5 @@ index 5f820c214..0b561320b 100644
}
--
2.17.1
2.25.1
@@ -1,7 +1,7 @@
From ddf773c1e301c5bc37fe156676ad6deb55fb7e8e Mon Sep 17 00:00:00 2001
From 09e90d056e41e8ef6d0527e7e34a54053c607b3a Mon Sep 17 00:00:00 2001
From: Alexander Pohl <pohl199885@gmail.com>
Date: Fri, 15 Jun 2018 19:58:07 +0200
Subject: [PATCH 02/11] Fix WiFi-Display on Huawei devices (EMUI 8.0)
Subject: [PATCH 02/17] Fix WiFi-Display on Huawei devices (EMUI 8.0)
Huaweis media stack doesn't handle intra-refresh-mode, so skip the error instead.
@@ -11,10 +11,10 @@ Thanks to Chris Vandomelen for pointing that out.
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 3d67c911a..007b84cea 100644
index 55e8130e4..e8b493183 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -4358,9 +4358,8 @@ status_t ACodec::setupAVCEncoderParameters(const sp<AMessage> &msg) {
@@ -4366,9 +4366,8 @@ status_t ACodec::setupAVCEncoderParameters(const sp<AMessage> &msg) {
if (msg->findInt32("intra-refresh-mode", &intraRefreshMode)) {
err = setCyclicIntraMacroblockRefresh(msg, intraRefreshMode);
if (err != OK) {
@@ -27,5 +27,5 @@ index 3d67c911a..007b84cea 100644
}
--
2.17.1
2.25.1
@@ -1,7 +1,7 @@
From 6e5e5dbc804ef1aa686731d588bdb959919de29e Mon Sep 17 00:00:00 2001
From 90390678c846d34aae136aa1557643619c524830 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 19 Aug 2018 22:59:06 +0200
Subject: [PATCH 03/11] ::Kirin:: Remove lock to prevent self-lock
Subject: [PATCH 03/17] Kirin:: Remove lock to prevent self-lock
With Huawei Camera HAL, we get the following call order:
cameraserver CameraService::enumerateProviders (*)
@@ -17,10 +17,10 @@ Hence the safe-lock
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index 3e6210294..3736a9e24 100644
index 95e4e6eb7..077e3b238 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -254,7 +254,7 @@ void CameraService::onNewProviderRegistered() {
@@ -271,7 +271,7 @@ bool CameraService::isPublicallyHiddenSecureCamera(const String8& cameraId) {
}
void CameraService::updateCameraNumAndIds() {
@@ -30,5 +30,5 @@ index 3e6210294..3736a9e24 100644
mNormalDeviceIds =
mCameraProviderManager->getAPI1CompatibleCameraDeviceIds();
--
2.17.1
2.25.1
@@ -1,7 +1,8 @@
From accaf1aedd6520cc92dd33f6fb96c75e44fbd1a8 Mon Sep 17 00:00:00 2001
From 1fe92753746f4410f5ac97abcef083276940cfee Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 19 Aug 2018 23:05:26 +0200
Subject: [PATCH] We might not have a mFlashlight at this state, but that's ok
Subject: [PATCH 04/17] We might not have a mFlashlight at this state, but
that's ok
Change-Id: I0ae65c0be4931b4e3cbda2d0cc64acc4f5018a73
---
@@ -9,10 +10,10 @@ Change-Id: I0ae65c0be4931b4e3cbda2d0cc64acc4f5018a73
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index a380b49e0..2c7c5208b 100644
index 077e3b238..bbfd90a28 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -297,7 +297,7 @@ void CameraService::addStates(const String8 id) {
@@ -299,7 +299,7 @@ void CameraService::addStates(const String8 id) {
isPublicallyHiddenSecureCamera));
}
@@ -22,5 +23,5 @@ index a380b49e0..2c7c5208b 100644
mTorchStatusMap.add(id, TorchModeStatus::AVAILABLE_OFF);
--
2.17.1
2.25.1
@@ -1,7 +1,7 @@
From a5bc47c2602ae78b0471e8f55538a4cca083decf Mon Sep 17 00:00:00 2001
From 669ad001302e6e6d749ae0f66026c8ce00d259fe Mon Sep 17 00:00:00 2001
From: Artem Borisov <dedsa2002@gmail.com>
Date: Tue, 25 Sep 2018 12:39:22 +0300
Subject: [PATCH 05/11] CameraService: Support calling addStates in
Subject: [PATCH 05/17] CameraService: Support calling addStates in
enumerateProviders
Some pre-P camera HALs trigger onDeviceStatusChange callback during HAL init.
@@ -22,10 +22,10 @@ Change-Id: Ife25b9753fdb679ab0c77f385e1b8527551a4711
1 file changed, 16 insertions(+)
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index 12ab2f47e..d208a36a9 100644
index bbfd90a28..7046384b3 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -204,6 +204,20 @@ status_t CameraService::enumerateProviders() {
@@ -212,6 +212,20 @@ status_t CameraService::enumerateProviders() {
for (auto& cameraId : deviceIds) {
String8 id8 = String8(cameraId.c_str());
@@ -46,7 +46,7 @@ index 12ab2f47e..d208a36a9 100644
if (getCameraState(id8) == nullptr) {
onDeviceStatusChanged(id8, CameraDeviceStatus::PRESENT);
}
@@ -317,8 +331,10 @@ void CameraService::onDeviceStatusChanged(const String8& id,
@@ -337,8 +351,10 @@ void CameraService::onDeviceStatusChanged(const String8& id,
ALOGI("%s: Unknown camera ID %s, a new camera is added",
__FUNCTION__, id.string());
@@ -58,5 +58,5 @@ index 12ab2f47e..d208a36a9 100644
updateStatus(newStatus, id);
} else {
--
2.17.1
2.25.1
@@ -1,7 +1,7 @@
From 04e7317ef801f4124f4a074519d7a077dac14702 Mon Sep 17 00:00:00 2001
From 8ad118d1fcfba6e9911aa099f354594787ad264b Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 9 Dec 2018 15:56:59 +0100
Subject: [PATCH 06/11] Revert "Set rlimit rtprio for cameraserver"
Subject: [PATCH 06/17] Revert "Set rlimit rtprio for cameraserver"
This reverts commit 4ae244cab4fe715fc2729e906b7dda3075fbbac3.
@@ -21,5 +21,5 @@ index a9aae0b15..fea5a1d5c 100644
writepid /dev/cpuset/camera-daemon/tasks /dev/stune/top-app/tasks
- rlimit rtprio 10 10
--
2.17.1
2.25.1
@@ -1,7 +1,7 @@
From bb6f508a514d09fdab79583886f7953dd42bfa0c Mon Sep 17 00:00:00 2001
From 293b2fb176c081a4e3db518009864c1a4c4053fd Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 4 Sep 2019 22:28:56 +0200
Subject: [PATCH 07/11] fixup! FIH devices: Fix "Earpiece" audio output
Subject: [PATCH 07/17] fixup! FIH devices: Fix "Earpiece" audio output
---
.../audiopolicy/common/managerdefinitions/src/Serializer.cpp | 3 ++-
@@ -29,5 +29,5 @@ index 0b561320b..c8cb54b5f 100644
status = deserializeCollection<AudioProfileTraits>(cur, &profiles, NULL);
if (status != NO_ERROR) {
--
2.17.1
2.25.1
@@ -1,7 +1,7 @@
From 582695245e6ce2bafaf3b11b9d3b69dcf88d0037 Mon Sep 17 00:00:00 2001
From 6f4e7e032ca73db15cb01737c24de543780718da Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 5 Aug 2019 17:27:47 +0200
Subject: [PATCH 08/11] Fix use-after-free (object on stack)
Subject: [PATCH 08/17] Fix use-after-free (object on stack)
Change-Id: I9ae666b10873eac4e7a55032071e7b15b0de058a
---
@@ -22,5 +22,5 @@ index c8cb54b5f..9f2bdc4b3 100644
std::string address = getXmlAttribute(cur, Attributes::address);
if (!address.empty()) {
--
2.17.1
2.25.1
@@ -1,7 +1,7 @@
From c02350cbd42543fdfac9bd61b630182a0da1ecf9 Mon Sep 17 00:00:00 2001
From f303633bdac9176d45ca8a9073f2f9850406ebf8 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 5 Aug 2019 18:09:50 +0200
Subject: [PATCH 09/11] Fix BT in-call on CAF devices
Subject: [PATCH 09/17] Fix BT in-call on CAF devices
See https://github.com/phhusson/treble_experimentations/issues/374
@@ -125,5 +125,5 @@ index 9f2bdc4b3..9c7e5c49d 100644
for (const xmlNode *children = cur->xmlChildrenNode; children != NULL;
--
2.17.1
2.25.1
@@ -1,7 +1,7 @@
From a71fbad371842877a92190204450b5c6753b3509 Mon Sep 17 00:00:00 2001
From 7125c20e64937da5ee8134baae39e2136629b307 Mon Sep 17 00:00:00 2001
From: Vincent Vidal <vincent.vidal@onera.fr>
Date: Thu, 12 Sep 2019 14:17:14 +0200
Subject: [PATCH 10/11] Fix null pointer for unknown audio sources in "Fix BT
Subject: [PATCH 10/17] Fix null pointer for unknown audio sources in "Fix BT
in-call on CAF devices"
Some audio sources may not exist on some devices (e.g. Axon 7), leading to a segmentation fault.
@@ -27,5 +27,5 @@ index 9c7e5c49d..8bfdb5b0a 100644
newRoute->setSources(sources);
--
2.17.1
2.25.1
@@ -1,8 +1,8 @@
From 7ad31b03ab941886ac1e930a1f1dd1232461cd18 Mon Sep 17 00:00:00 2001
From 53e025a518a6a662f533e2e08b50ebaed223957c Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 1 Oct 2019 13:35:49 +0200
Subject: [PATCH] Add (partial, cam id is hardcoded) support for Asus ZF6 motor
camera
Subject: [PATCH 11/17] Add (partial, cam id is hardcoded) support for Asus ZF6
motor camera
Change-Id: Iea6e1370780a1d16f728748d1d948d092532d8fe
---
@@ -11,7 +11,7 @@ Change-Id: Iea6e1370780a1d16f728748d1d948d092532d8fe
2 files changed, 29 insertions(+)
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index 62cbc7ddb..ddddfda97 100644
index 7046384b3..100db9e3c 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -25,6 +25,7 @@
@@ -22,7 +22,7 @@ index 62cbc7ddb..ddddfda97 100644
#include <inttypes.h>
#include <pthread.h>
@@ -131,6 +132,7 @@ Mutex CameraService::sProxyMutex;
@@ -133,6 +134,7 @@ Mutex CameraService::sProxyMutex;
sp<hardware::ICameraServiceProxy> CameraService::sCameraServiceProxy;
CameraService::CameraService() :
@@ -30,7 +30,7 @@ index 62cbc7ddb..ddddfda97 100644
mEventLog(DEFAULT_EVENT_LOG_LENGTH),
mNumberOfCameras(0),
mSoundRef(0), mInitialized(false) {
@@ -1549,6 +1551,7 @@ Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8&
@@ -1579,6 +1581,7 @@ Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8&
mServiceLock.lock();
} else {
// Otherwise, add client to active clients list
@@ -38,7 +38,7 @@ index 62cbc7ddb..ddddfda97 100644
finishConnectLocked(client, partial);
sp<ICameraMotor> cameraMotor = ICameraMotor::getService();
@@ -1564,6 +1567,27 @@ Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8&
@@ -1594,6 +1597,27 @@ Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8&
return ret;
}
@@ -66,7 +66,7 @@ index 62cbc7ddb..ddddfda97 100644
Status CameraService::setTorchMode(const String16& cameraId, bool enabled,
const sp<IBinder>& clientBinder) {
Mutex::Autolock lock(mServiceLock);
@@ -2427,6 +2451,8 @@ binder::Status CameraService::BasicClient::disconnect() {
@@ -2466,6 +2490,8 @@ binder::Status CameraService::BasicClient::disconnect() {
cameraMotor->onDisconnect(mCameraIdStr.string());
}
@@ -76,7 +76,7 @@ index 62cbc7ddb..ddddfda97 100644
sCameraService->logDisconnected(mCameraIdStr, mClientPid, String8(mClientPackageName));
sCameraService->mCameraProviderManager->removeRef(CameraProviderManager::DeviceMode::CAMERA,
diff --git a/services/camera/libcameraservice/CameraService.h b/services/camera/libcameraservice/CameraService.h
index 065157dad..6d22da619 100644
index bcaca9ffc..2607bc257 100644
--- a/services/camera/libcameraservice/CameraService.h
+++ b/services/camera/libcameraservice/CameraService.h
@@ -182,6 +182,9 @@ public:
@@ -90,5 +90,5 @@ index 065157dad..6d22da619 100644
// Client functionality
--
2.17.1
2.25.1
@@ -1,7 +1,7 @@
From d3828e0c23e79717b3b47ae29980be0b4726dc89 Mon Sep 17 00:00:00 2001
From 922e144d1ceba361f0a92372e3fda5161249fc74 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 3 Dec 2019 14:04:17 +0100
Subject: [PATCH 12/12] Fix for some Huawei camera (that's not ideal because it
Subject: [PATCH 12/17] Fix for some Huawei camera (that's not ideal because it
is a revert, it needs to be further investigated and cleaned)
---
@@ -9,7 +9,7 @@ Subject: [PATCH 12/12] Fix for some Huawei camera (that's not ideal because it
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index ca0231c9e..9bb5db067 100644
index 100db9e3c..6a68a40b9 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -16,7 +16,7 @@
@@ -21,7 +21,7 @@ index ca0231c9e..9bb5db067 100644
#include <algorithm>
#include <climits>
@@ -223,9 +223,9 @@ status_t CameraService::enumerateProviders() {
@@ -228,9 +228,9 @@ status_t CameraService::enumerateProviders() {
}
}
@@ -34,5 +34,5 @@ index ca0231c9e..9bb5db067 100644
return OK;
--
2.17.1
2.25.1
@@ -1,7 +1,7 @@
From 283eb4c984c6e0d878599c9a6fcc4e891cbb24f4 Mon Sep 17 00:00:00 2001
From 00a797e23bf88d6cd28f32155a02c40b4f9b91cb Mon Sep 17 00:00:00 2001
From: Peter Cai <peter@typeblog.net>
Date: Thu, 23 Jan 2020 11:13:43 +0800
Subject: [PATCH 13/13] audiopolicy: try again with trimmed audio port name if
Subject: [PATCH 13/17] audiopolicy: try again with trimmed audio port name if
not found
* In Spreadtrum BSP, some audio routes may contain ports with extra
@@ -53,5 +53,5 @@ index 8bfdb5b0a..4bdb082ba 100644
sources.add(source);
}
--
2.17.1
2.25.1
@@ -1,7 +1,7 @@
From b37ac3beb32e99e1517f3baf7efd98b0b8c80b8a Mon Sep 17 00:00:00 2001
From e17862fc2b519ccddf7d578968a89f35ceaacfb1 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 13 Apr 2020 21:01:16 +0200
Subject: [PATCH 15/21] There are three SCO devices. Fallback from one to the
Subject: [PATCH 14/17] There are three SCO devices. Fallback from one to the
others if needed
---
@@ -9,7 +9,7 @@ Subject: [PATCH 15/21] There are three SCO devices. Fallback from one to the
1 file changed, 21 insertions(+)
diff --git a/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp b/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp
index 1f9b725a24..ecba6023dd 100644
index 1f9b725a2..ecba6023d 100644
--- a/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp
@@ -294,6 +294,27 @@ sp <HwModule> HwModuleCollection::getModuleForDeviceTypes(audio_devices_t type,
@@ -41,5 +41,5 @@ index 1f9b725a24..ecba6023dd 100644
}
--
2.17.1
2.25.1
@@ -1,8 +1,8 @@
From a280506c41623f2c2e0f96651189ec4b5e19bad1 Mon Sep 17 00:00:00 2001
From 9fef86bc540a7fa95432d5bc8da3fc18b07ae843 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Thu, 14 May 2020 19:54:55 +0200
Subject: [PATCH] Add persist.sys.phh.samsung.camera_ids property to access
hidden Samsung cameras
Subject: [PATCH 15/17] Add persist.sys.phh.samsung.camera_ids property to
access hidden Samsung cameras
---
services/camera/libcameraservice/Android.bp | 1 +
@@ -67,5 +67,5 @@ index fdb565750..9c1c70c84 100644
ALOGE("%s: Transaction error in getting camera ID list from provider '%s': %s",
__FUNCTION__, mProviderName.c_str(), linked.description().c_str());
--
2.17.1
2.25.1
@@ -1,7 +1,7 @@
From 51622b87d04e709067335e38ae2257c21dde00a5 Mon Sep 17 00:00:00 2001
From b629b586c808f6e8e3415b578f10fe02b63b1631 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Tue, 19 May 2020 14:01:14 +0200
Subject: [PATCH 23/24] Add a property to force camera timestamp source
Subject: [PATCH 16/17] Add a property to force camera timestamp source
Some devices wrongly report their timesource
Camera's timesource can either be CLOCK_MONOTONIC, or CLOCK_BOOTTIME
@@ -18,7 +18,7 @@ timestamp source.
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
index 93e18cfee3..9cc44f1ec9 100644
index 93e18cfee..9cc44f1ec 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
@@ -299,8 +299,16 @@ status_t Camera3Device::initializeCommonLocked() {
@@ -41,5 +41,5 @@ index 93e18cfee3..9cc44f1ec9 100644
}
--
2.17.1
2.25.1
@@ -1,7 +1,7 @@
From 637819ddb60b3a5c16e21b68e448f21e621699b1 Mon Sep 17 00:00:00 2001
From 95e61a23a96f0274d222e4ef84ee8583fc36baab Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 25 May 2020 21:26:54 +0200
Subject: [PATCH 24/24] Add persist.sys.phh.disable_a2dp_offload property to
Subject: [PATCH 17/17] Add persist.sys.phh.disable_a2dp_offload property to
force a2dp offload
---
@@ -11,7 +11,7 @@ Subject: [PATCH 24/24] Add persist.sys.phh.disable_a2dp_offload property to
3 files changed, 197 insertions(+), 6 deletions(-)
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 0271ecef34..7824b590a6 100644
index e8b493183..310740ab5 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -1166,6 +1166,9 @@ status_t ACodec::configureOutputBuffersFromNativeWindow(
@@ -60,7 +60,7 @@ index 0271ecef34..7824b590a6 100644
}
}
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
index 4bdb082ba1..d144f8991d 100644
index 4bdb082ba..d144f8991 100644
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
@@ -29,6 +29,7 @@
@@ -300,7 +300,7 @@ index 4bdb082ba1..d144f8991d 100644
}
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index a984b10c03..5b7750b437 100644
index 642559089..c5fad0d6c 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -76,6 +76,8 @@ static const std::vector<audio_channel_mask_t> surroundChannelMasksOrder = {{
@@ -321,5 +321,5 @@ index a984b10c03..5b7750b437 100644
for (const char* fileName : fileNames) {
--
2.17.1
2.25.1