icecat: update to upstream version 128.0.14-1gnu1

This commit is contained in:
Ark74 2025-08-20 11:58:34 -06:00
parent 0cdda4f34e
commit 56c3deff60
77 changed files with 8997 additions and 3862 deletions

View file

@ -79,7 +79,6 @@ dom/media/gmp/rlz/.*
dom/media/gmp/widevine-adapter/content_decryption_module.h
dom/media/gmp/widevine-adapter/content_decryption_module_export.h
dom/media/gmp/widevine-adapter/content_decryption_module_ext.h
dom/media/gmp/widevine-adapter/content_decryption_module_proxy.h
dom/media/platforms/ffmpeg/ffmpeg57/.*
dom/media/platforms/ffmpeg/ffmpeg58/.*
dom/media/platforms/ffmpeg/ffmpeg59/.*

View file

@ -1289,7 +1289,6 @@ dom/media/gmp/rlz/
dom/media/gmp/widevine-adapter/content_decryption_module_export.h
dom/media/gmp/widevine-adapter/content_decryption_module_ext.h
dom/media/gmp/widevine-adapter/content_decryption_module.h
dom/media/gmp/widevine-adapter/content_decryption_module_proxy.h
dom/media/platforms/ffmpeg/ffmpeg57/
dom/media/platforms/ffmpeg/ffmpeg58/
dom/media/platforms/ffmpeg/ffmpeg59/

View file

@ -22,4 +22,4 @@
# changes to stick? As of bug 928195, this shouldn't be necessary! Please
# don't change CLOBBER for WebIDL changes any more.
Merge day clobber 2025-06-23
Merge day clobber 2025-07-21

View file

@ -202,7 +202,11 @@ RemoteAccessible* DocAccessibleParent::CreateAcc(
RemoteAccessible* newProxy;
if ((newProxy = GetAccessible(aAccData.ID()))) {
// This is a move. Reuse the Accessible; don't destroy it.
MOZ_ASSERT(!newProxy->RemoteParent());
if (newProxy->RemoteParent()) {
MOZ_ASSERT_UNREACHABLE(
"Attempt to move RemoteAccessible which still has a parent!");
return nullptr;
}
return newProxy;
}

View file

@ -1 +1 @@
128.13.0
128.14.0

View file

@ -1 +1 @@
128.13.0esr
128.14.0esr

View file

@ -45,7 +45,7 @@ MOZ_DEVTOOLS=all
MOZ_APP_BASENAME=IceCat
MOZ_APP_UA_NAME=Firefox
MOZ_APP_VENDOR=GNU
MOZ_APP_VERSION=128.13.0
MOZ_APP_VERSION=128.14.0
MOZ_APP_PROFILE=mozilla/icecat
MOZ_PAY=0
MOZ_SERVICES_HEALTHREPORT=0

View file

@ -10,4 +10,4 @@
# hardcoded milestones in the tree from these two files.
#--------------------------------------------------------
128.13.0
128.14.0

View file

@ -1,3 +1,9 @@
icecat (128.14.0-1gnu1+build1-0.12.0) ecne; urgency=medium
* New upstream stable release (icecat-128.14.0-1gnu1)
-- Capitulo Mexicano de Software Libre <devel@cmxsl.org> Tue, 19 Aug 2025 23:07:15 -0600
icecat (128.13.0-1gnu1+build1-0.12.0) ecne; urgency=medium
* New upstream stable release (icecat-128.13.0-1gnu1)

View file

@ -7,7 +7,6 @@
#include "GLContext.h"
#include "ImageBitmapRenderingContext.h"
#include "ImageEncoder.h"
#include "mozilla/dom/BlobImpl.h"
#include "mozilla/dom/CanvasRenderingContext2D.h"
#include "mozilla/dom/OffscreenCanvasRenderingContext2D.h"
#include "mozilla/GfxMessageUtils.h"
@ -26,55 +25,6 @@ namespace mozilla::dom {
CanvasRenderingContextHelper::CanvasRenderingContextHelper()
: mCurrentContextType(CanvasContextType::NoContext) {}
void CanvasRenderingContextHelper::ToBlob(
JSContext* aCx, nsIGlobalObject* aGlobal, BlobCallback& aCallback,
const nsAString& aType, JS::Handle<JS::Value> aParams, bool aUsePlaceholder,
ErrorResult& aRv) {
// Encoder callback when encoding is complete.
class EncodeCallback : public EncodeCompleteCallback {
public:
EncodeCallback(nsIGlobalObject* aGlobal, BlobCallback* aCallback)
: mGlobal(aGlobal), mBlobCallback(aCallback) {}
// This is called on main thread.
MOZ_CAN_RUN_SCRIPT
nsresult ReceiveBlobImpl(already_AddRefed<BlobImpl> aBlobImpl) override {
MOZ_ASSERT(NS_IsMainThread());
RefPtr<BlobImpl> blobImpl = aBlobImpl;
RefPtr<Blob> blob;
if (blobImpl) {
blob = Blob::Create(mGlobal, blobImpl);
}
RefPtr<BlobCallback> callback(std::move(mBlobCallback));
ErrorResult rv;
callback->Call(blob, rv);
mGlobal = nullptr;
MOZ_ASSERT(!mBlobCallback);
return rv.StealNSResult();
}
bool CanBeDeletedOnAnyThread() override {
// EncodeCallback is used from the main thread only.
return false;
}
nsCOMPtr<nsIGlobalObject> mGlobal;
RefPtr<BlobCallback> mBlobCallback;
};
RefPtr<EncodeCompleteCallback> callback =
new EncodeCallback(aGlobal, &aCallback);
ToBlob(aCx, callback, aType, aParams, aUsePlaceholder, aRv);
}
void CanvasRenderingContextHelper::ToBlob(
JSContext* aCx, EncodeCompleteCallback* aCallback, const nsAString& aType,
JS::Handle<JS::Value> aParams, bool aUsePlaceholder, ErrorResult& aRv) {

View file

@ -54,10 +54,6 @@ class CanvasRenderingContextHelper {
nsAString& outParams,
bool* const outCustomParseOptions);
void ToBlob(JSContext* aCx, nsIGlobalObject* global, BlobCallback& aCallback,
const nsAString& aType, JS::Handle<JS::Value> aParams,
bool aUsePlaceholder, ErrorResult& aRv);
void ToBlob(JSContext* aCx, EncodeCompleteCallback* aCallback,
const nsAString& aType, JS::Handle<JS::Value> aParams,
bool aUsePlaceholder, ErrorResult& aRv);

View file

@ -570,6 +570,10 @@ void OffscreenCanvas::SetWriteOnly(RefPtr<nsIPrincipal>&& aExpandedReader) {
mExpandedReader.forget());
mExpandedReader = std::move(aExpandedReader);
mIsWriteOnly = true;
if (mDisplay) {
mDisplay->SetWriteOnly(mExpandedReader);
}
}
bool OffscreenCanvas::CallerCanRead(nsIPrincipal& aPrincipal) const {

View file

@ -32,7 +32,11 @@ OffscreenCanvasDisplayHelper::OffscreenCanvasDisplayHelper(
mData.mSize.height = aHeight;
}
OffscreenCanvasDisplayHelper::~OffscreenCanvasDisplayHelper() = default;
OffscreenCanvasDisplayHelper::~OffscreenCanvasDisplayHelper() {
MutexAutoLock lock(mMutex);
NS_ReleaseOnMainThread("OffscreenCanvas::mExpandedReader",
mExpandedReader.forget());
}
void OffscreenCanvasDisplayHelper::DestroyElement() {
MOZ_ASSERT(NS_IsMainThread());
@ -61,6 +65,32 @@ void OffscreenCanvasDisplayHelper::DestroyCanvas() {
mWorkerRef = nullptr;
}
void OffscreenCanvasDisplayHelper::SetWriteOnly(nsIPrincipal* aExpandedReader) {
MutexAutoLock lock(mMutex);
NS_ReleaseOnMainThread("OffscreenCanvasDisplayHelper::mExpandedReader",
mExpandedReader.forget());
mExpandedReader = aExpandedReader;
mIsWriteOnly = true;
}
bool OffscreenCanvasDisplayHelper::CallerCanRead(
nsIPrincipal& aPrincipal) const {
MutexAutoLock lock(mMutex);
if (!mIsWriteOnly) {
return true;
}
// If mExpandedReader is set, this canvas was tainted only by
// mExpandedReader's resources. So allow reading if the subject
// principal subsumes mExpandedReader.
if (mExpandedReader && aPrincipal.Subsumes(mExpandedReader)) {
return true;
}
return nsContentUtils::PrincipalHasPermission(aPrincipal,
nsGkAtoms::all_urlsPermission);
}
bool OffscreenCanvasDisplayHelper::CanElementCaptureStream() const {
MutexAutoLock lock(mMutex);
return !!mWorkerRef;

View file

@ -57,6 +57,19 @@ class OffscreenCanvasDisplayHelper final {
void DestroyCanvas();
void DestroyElement();
bool IsWriteOnly() const {
MutexAutoLock lock(mMutex);
return mIsWriteOnly;
}
bool HasWorkerRef() const {
MutexAutoLock lock(mMutex);
return !!mWorkerRef;
}
void SetWriteOnly(nsIPrincipal* aExpandedReader = nullptr);
bool CallerCanRead(nsIPrincipal& aPrincipal) const;
bool CanElementCaptureStream() const;
bool UsingElementCaptureStream() const;
@ -90,6 +103,8 @@ class OffscreenCanvasDisplayHelper final {
mozilla::layers::ImageContainer::FrameID mLastFrameID MOZ_GUARDED_BY(mMutex) =
0;
bool mPendingInvalidate MOZ_GUARDED_BY(mMutex) = false;
bool mIsWriteOnly MOZ_GUARDED_BY(mMutex) = false;
RefPtr<nsIPrincipal> mExpandedReader MOZ_GUARDED_BY(mMutex);
};
} // namespace mozilla::dom

View file

@ -15,6 +15,7 @@
#include "mozilla/BasePrincipal.h"
#include "mozilla/CheckedInt.h"
#include "mozilla/PresShell.h"
#include "mozilla/dom/BlobImpl.h"
#include "mozilla/dom/CanvasCaptureMediaStream.h"
#include "mozilla/dom/CanvasRenderingContext2D.h"
#include "mozilla/dom/Document.h"
@ -768,16 +769,26 @@ void HTMLCanvasElement::ToDataURL(JSContext* aCx, const nsAString& aType,
nsAString& aDataURL,
nsIPrincipal& aSubjectPrincipal,
ErrorResult& aRv) {
// mWriteOnly check is redundant, but optimizes for the common case.
if (mWriteOnly && !CallerCanRead(aSubjectPrincipal)) {
bool recheckCanRead = mOffscreenDisplay && mOffscreenDisplay->HasWorkerRef();
if (!CallerCanRead(aSubjectPrincipal)) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}
nsresult rv = ToDataURLImpl(aCx, aSubjectPrincipal, aType, aParams, aDataURL);
if (NS_FAILED(rv)) {
aDataURL.AssignLiteral("data:,");
nsString dataURL;
nsresult rv = ToDataURLImpl(aCx, aSubjectPrincipal, aType, aParams, dataURL);
if (recheckCanRead && !CallerCanRead(aSubjectPrincipal)) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}
if (NS_FAILED(rv)) {
aDataURL.Assign(u"data:,"_ns);
return;
}
aDataURL = std::move(dataURL);
}
void HTMLCanvasElement::SetMozPrintCallback(PrintCallback* aCallback) {
@ -993,8 +1004,9 @@ void HTMLCanvasElement::ToBlob(JSContext* aCx, BlobCallback& aCallback,
JS::Handle<JS::Value> aParams,
nsIPrincipal& aSubjectPrincipal,
ErrorResult& aRv) {
// mWriteOnly check is redundant, but optimizes for the common case.
if (mWriteOnly && !CallerCanRead(aSubjectPrincipal)) {
bool recheckCanRead = mOffscreenDisplay && mOffscreenDisplay->HasWorkerRef();
if (!CallerCanRead(aSubjectPrincipal)) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}
@ -1019,7 +1031,59 @@ void HTMLCanvasElement::ToBlob(JSContext* aCx, BlobCallback& aCallback,
// If no permission, return all-white, opaque image data.
bool usePlaceholder = !CanvasUtils::IsImageExtractionAllowed(
OwnerDoc(), aCx, aSubjectPrincipal);
CanvasRenderingContextHelper::ToBlob(aCx, global, aCallback, aType, aParams,
// Encoder callback when encoding is complete.
class EncodeCallback : public EncodeCompleteCallback {
public:
EncodeCallback(nsIGlobalObject* aGlobal, BlobCallback* aCallback,
OffscreenCanvasDisplayHelper* aOffscreenDisplay,
nsIPrincipal* aSubjectPrincipal)
: mGlobal(aGlobal),
mBlobCallback(aCallback),
mOffscreenDisplay(aOffscreenDisplay),
mSubjectPrincipal(aSubjectPrincipal) {}
// This is called on main thread.
MOZ_CAN_RUN_SCRIPT
nsresult ReceiveBlobImpl(already_AddRefed<BlobImpl> aBlobImpl) override {
MOZ_ASSERT(NS_IsMainThread());
RefPtr<BlobImpl> blobImpl = aBlobImpl;
RefPtr<Blob> blob;
if (blobImpl && (!mOffscreenDisplay ||
mOffscreenDisplay->CallerCanRead(*mSubjectPrincipal))) {
blob = Blob::Create(mGlobal, blobImpl);
}
RefPtr<BlobCallback> callback(std::move(mBlobCallback));
ErrorResult rv;
callback->Call(blob, rv);
mGlobal = nullptr;
MOZ_ASSERT(!mBlobCallback);
return rv.StealNSResult();
}
bool CanBeDeletedOnAnyThread() override {
// EncodeCallback is used from the main thread only.
return false;
}
nsCOMPtr<nsIGlobalObject> mGlobal;
RefPtr<BlobCallback> mBlobCallback;
RefPtr<OffscreenCanvasDisplayHelper> mOffscreenDisplay;
RefPtr<nsIPrincipal> mSubjectPrincipal;
};
RefPtr<EncodeCompleteCallback> callback = new EncodeCallback(
global, &aCallback, recheckCanRead ? mOffscreenDisplay.get() : nullptr,
recheckCanRead ? &aSubjectPrincipal : nullptr);
CanvasRenderingContextHelper::ToBlob(aCx, callback, aType, aParams,
usePlaceholder, aRv);
}
@ -1090,7 +1154,12 @@ already_AddRefed<nsISupports> HTMLCanvasElement::GetContext(
nsIntSize HTMLCanvasElement::GetSize() { return GetWidthHeight(); }
bool HTMLCanvasElement::IsWriteOnly() const { return mWriteOnly; }
bool HTMLCanvasElement::IsWriteOnly() const {
if (mOffscreenDisplay && mOffscreenDisplay->IsWriteOnly()) {
return true;
}
return mWriteOnly;
}
void HTMLCanvasElement::SetWriteOnly(
nsIPrincipal* aExpandedReader /* = nullptr */) {
@ -1102,6 +1171,10 @@ void HTMLCanvasElement::SetWriteOnly(
}
bool HTMLCanvasElement::CallerCanRead(nsIPrincipal& aPrincipal) const {
if (mOffscreenDisplay && !mOffscreenDisplay->CallerCanRead(aPrincipal)) {
return false;
}
if (!mWriteOnly) {
return true;
}

View file

@ -372,13 +372,13 @@ class HTMLCanvasElement final : public nsGenericHTMLElement,
RefPtr<layers::ImageContainer> mImageContainer;
RefPtr<HTMLCanvasElementObserver> mContextObserver;
public:
// Record whether this canvas should be write-only or not.
// We set this when script paints an image from a different origin.
// We also transitively set it when script paints a canvas which
// is itself write-only.
bool mWriteOnly;
public:
// When this canvas is (only) tainted by an image from an extension
// content script, allow reads from the same extension afterwards.
RefPtr<nsIPrincipal> mExpandedReader;

View file

@ -96,9 +96,7 @@ void ClearKeyPersistence::WriteIndex() {
std::move(onIndexFail));
}
ClearKeyPersistence::ClearKeyPersistence(Host_10* aHost) {
this->mHost = aHost;
}
ClearKeyPersistence::ClearKeyPersistence(Host_11* aHost) : mHost(aHost) {}
void ClearKeyPersistence::EnsureInitialized(bool aPersistentStateAllowed,
function<void()>&& aOnInitialized) {

View file

@ -37,7 +37,7 @@ enum PersistentKeyState { UNINITIALIZED, LOADING, LOADED };
class ClearKeyPersistence : public RefCounted {
public:
explicit ClearKeyPersistence(cdm::Host_10* aHost);
explicit ClearKeyPersistence(cdm::Host_11* aHost);
void EnsureInitialized(bool aPersistentStateAllowed,
std::function<void()>&& aOnInitialized);
@ -51,7 +51,7 @@ class ClearKeyPersistence : public RefCounted {
void PersistentSessionRemoved(std::string& aSid);
private:
cdm::Host_10* mHost = nullptr;
cdm::Host_11* mHost = nullptr;
PersistentKeyState mPersistentKeyState = PersistentKeyState::UNINITIALIZED;

View file

@ -35,7 +35,7 @@ using std::function;
using std::string;
using std::vector;
ClearKeySessionManager::ClearKeySessionManager(Host_10* aHost)
ClearKeySessionManager::ClearKeySessionManager(Host_11* aHost)
: mDecryptionManager(ClearKeyDecryptionManager::Get()) {
CK_LOGD("ClearKeySessionManager ctor %p", this);
AddRef();

View file

@ -39,7 +39,7 @@
class ClearKeySessionManager final : public RefCounted {
public:
explicit ClearKeySessionManager(cdm::Host_10* aHost);
explicit ClearKeySessionManager(cdm::Host_11* aHost);
void Init(bool aDistinctiveIdentifierAllowed, bool aPersistentStateAllowed);
@ -116,7 +116,7 @@ class ClearKeySessionManager final : public RefCounted {
RefPtr<ClearKeyDecryptionManager> mDecryptionManager;
RefPtr<ClearKeyPersistence> mPersistence;
cdm::Host_10* mHost = nullptr;
cdm::Host_11* mHost = nullptr;
std::set<KeyId> mKeyIds;
std::map<std::string, ClearKeySession*> mSessions;

View file

@ -40,7 +40,7 @@ class WriteRecordClient : public FileIOClient {
* This function will take the memory ownership of the parameters and
* delete them when done.
*/
static void Write(Host_10* aHost, string& aRecordName,
static void Write(Host_11* aHost, string& aRecordName,
const vector<uint8_t>& aData, function<void()>&& aOnSuccess,
function<void()>&& aOnFailure) {
WriteRecordClient* client = new WriteRecordClient(
@ -75,7 +75,7 @@ class WriteRecordClient : public FileIOClient {
mOnFailure(std::move(aOnFailure)),
mData(aData) {}
void Do(const string& aName, Host_10* aHost) {
void Do(const string& aName, Host_11* aHost) {
// Initialize the FileIO.
mFileIO = aHost->CreateFileIO(this);
mFileIO->Open(aName.c_str(), aName.size());
@ -108,7 +108,7 @@ class WriteRecordClient : public FileIOClient {
const vector<uint8_t> mData;
};
void WriteData(Host_10* aHost, string& aRecordName,
void WriteData(Host_11* aHost, string& aRecordName,
const vector<uint8_t>& aData, function<void()>&& aOnSuccess,
function<void()>&& aOnFailure) {
WriteRecordClient::Write(aHost, aRecordName, aData, std::move(aOnSuccess),
@ -121,7 +121,7 @@ class ReadRecordClient : public FileIOClient {
* This function will take the memory ownership of the parameters and
* delete them when done.
*/
static void Read(Host_10* aHost, string& aRecordName,
static void Read(Host_11* aHost, string& aRecordName,
function<void(const uint8_t*, uint32_t)>&& aOnSuccess,
function<void()>&& aOnFailure) {
(new ReadRecordClient(std::move(aOnSuccess), std::move(aOnFailure)))
@ -155,7 +155,7 @@ class ReadRecordClient : public FileIOClient {
mOnSuccess(std::move(aOnSuccess)),
mOnFailure(std::move(aOnFailure)) {}
void Do(const string& aName, Host_10* aHost) {
void Do(const string& aName, Host_11* aHost) {
mFileIO = aHost->CreateFileIO(this);
mFileIO->Open(aName.c_str(), aName.size());
}
@ -186,7 +186,7 @@ class ReadRecordClient : public FileIOClient {
function<void()> mOnFailure;
};
void ReadData(Host_10* aHost, string& aRecordName,
void ReadData(Host_11* aHost, string& aRecordName,
function<void(const uint8_t*, uint32_t)>&& aOnSuccess,
function<void()>&& aOnFailure) {
ReadRecordClient::Read(aHost, aRecordName, std::move(aOnSuccess),

View file

@ -29,13 +29,13 @@
#define IO_FAILED(x) ((x) != cdm::FileIOClient::Status::kSuccess)
// Writes data to a file and fires the appropriate callback when complete.
void WriteData(cdm::Host_10* aHost, std::string& aRecordName,
void WriteData(cdm::Host_11* aHost, std::string& aRecordName,
const std::vector<uint8_t>& aData,
std::function<void()>&& aOnSuccess,
std::function<void()>&& aOnFailure);
// Reads data from a file and fires the appropriate callback when complete.
void ReadData(cdm::Host_10* aHost, std::string& aRecordName,
void ReadData(cdm::Host_11* aHost, std::string& aRecordName,
std::function<void(const uint8_t*, uint32_t)>&& aOnSuccess,
std::function<void()>&& aOnFailure);

View file

@ -46,11 +46,11 @@ CDM_API
void* CreateCdmInstance(int cdm_interface_version, const char* key_system,
uint32_t key_system_size,
GetCdmHostFunc get_cdm_host_func, void* user_data) {
if (cdm_interface_version != cdm::ContentDecryptionModule_10::kVersion) {
// Only support CDM version 10 currently.
if (cdm_interface_version != cdm::ContentDecryptionModule_11::kVersion) {
// Only support CDM version 11 currently.
return nullptr;
}
cdm::Host_10* host = static_cast<cdm::Host_10*>(
cdm::Host_11* host = static_cast<cdm::Host_11*>(
get_cdm_host_func(cdm_interface_version, user_data));
return new FakeDecryptor(host);
}

View file

@ -67,7 +67,7 @@ class TestManager {
std::set<std::string> mTestIDs;
};
FakeDecryptor::FakeDecryptor(cdm::Host_10* aHost) : mHost(aHost) {
FakeDecryptor::FakeDecryptor(cdm::Host_11* aHost) : mHost(aHost) {
MOZ_ASSERT(!sInstance);
sInstance = this;
}

View file

@ -11,7 +11,7 @@
class FakeDecryptor : public cdm::ContentDecryptionModule_10 {
public:
explicit FakeDecryptor(cdm::Host_10* aHost);
explicit FakeDecryptor(cdm::Host_11* aHost);
void Initialize(bool aAllowDistinctiveIdentifier, bool aAllowPersistentState,
bool aUseHardwareSecureCodecs) override {
@ -93,7 +93,7 @@ class FakeDecryptor : public cdm::ContentDecryptionModule_10 {
static void Message(const std::string& aMessage);
cdm::Host_10* mHost;
cdm::Host_11* mHost;
static FakeDecryptor* sInstance;

View file

@ -31,7 +31,7 @@ class WriteRecordClient : public FileIOClient {
void OnWriteComplete(Status aStatus) override { Done(aStatus); }
void Do(const std::string& aName, Host_10* aHost) {
void Do(const std::string& aName, Host_11* aHost) {
// Initialize the FileIO.
mFileIO = aHost->CreateFileIO(this);
mFileIO->Open(aName.c_str(), aName.size());
@ -64,7 +64,7 @@ class WriteRecordClient : public FileIOClient {
std::vector<uint8_t> mData;
};
void WriteRecord(Host_10* aHost, const std::string& aRecordName,
void WriteRecord(Host_11* aHost, const std::string& aRecordName,
const uint8_t* aData, uint32_t aNumBytes,
std::function<void()>&& aOnSuccess,
std::function<void()>&& aOnFailure) {
@ -74,7 +74,7 @@ void WriteRecord(Host_10* aHost, const std::string& aRecordName,
client->Do(aRecordName, aHost);
}
void WriteRecord(Host_10* aHost, const std::string& aRecordName,
void WriteRecord(Host_11* aHost, const std::string& aRecordName,
const std::string& aData, std::function<void()>&& aOnSuccess,
std::function<void()>&& aOnFailure) {
return WriteRecord(aHost, aRecordName, (const uint8_t*)aData.c_str(),
@ -104,7 +104,7 @@ class ReadRecordClient : public FileIOClient {
void OnWriteComplete(Status aStatus) override {}
void Do(const std::string& aName, Host_10* aHost) {
void Do(const std::string& aName, Host_11* aHost) {
mFileIO = aHost->CreateFileIO(this);
mFileIO->Open(aName.c_str(), aName.size());
}
@ -136,7 +136,7 @@ class ReadRecordClient : public FileIOClient {
};
void ReadRecord(
Host_10* aHost, const std::string& aRecordName,
Host_11* aHost, const std::string& aRecordName,
std::function<void(bool, const uint8_t*, uint32_t)>&& aOnReadComplete) {
// client will be delete in ReadRecordClient::Done
ReadRecordClient* client = new ReadRecordClient(std::move(aOnReadComplete));
@ -155,7 +155,7 @@ class OpenRecordClient : public FileIOClient {
void OnWriteComplete(Status aStatus) override {}
void Do(const std::string& aName, Host_10* aHost) {
void Do(const std::string& aName, Host_11* aHost) {
// Initialize the FileIO.
mFileIO = aHost->CreateFileIO(this);
mFileIO->Open(aName.c_str(), aName.size());
@ -186,7 +186,7 @@ class OpenRecordClient : public FileIOClient {
std::function<void(bool)> mOpenComplete;
};
void OpenRecord(Host_10* aHost, const std::string& aRecordName,
void OpenRecord(Host_11* aHost, const std::string& aRecordName,
std::function<void(bool)>&& aOpenComplete) {
// client will be delete in OpenRecordClient::Done
OpenRecordClient* client = new OpenRecordClient(std::move(aOpenComplete));

View file

@ -21,17 +21,17 @@ class ReadContinuation {
uint32_t aDataSize) = 0;
};
void WriteRecord(cdm::Host_10* aHost, const std::string& aRecordName,
void WriteRecord(cdm::Host_11* aHost, const std::string& aRecordName,
const std::string& aData, std::function<void()>&& aOnSuccess,
std::function<void()>&& aOnFailure);
void WriteRecord(cdm::Host_10* aHost, const std::string& aRecordName,
void WriteRecord(cdm::Host_11* aHost, const std::string& aRecordName,
const uint8_t* aData, uint32_t aNumBytes,
std::function<void()>&& aOnSuccess,
std::function<void()>&& aOnFailure);
void ReadRecord(
cdm::Host_10* aHost, const std::string& aRecordName,
cdm::Host_11* aHost, const std::string& aRecordName,
std::function<void(bool, const uint8_t*, uint32_t)>&& aOnReadComplete);
class OpenContinuation {
@ -40,6 +40,6 @@ class OpenContinuation {
virtual void operator()(bool aSuccess) = 0;
};
void OpenRecord(cdm::Host_10* aHost, const std::string& aRecordName,
void OpenRecord(cdm::Host_11* aHost, const std::string& aRecordName,
std::function<void(bool)>&& aOpenComplete);
#endif // TEST_CDM_STORAGE_H__

View file

@ -52,6 +52,15 @@ void ChromiumCDMAdapter::SetAdaptee(PRLibrary* aLib) { mLib = aLib; }
void* ChromiumCdmHost(int aHostInterfaceVersion, void* aUserData) {
GMP_LOG_DEBUG("ChromiumCdmHostFunc(%d, %p)", aHostInterfaceVersion,
aUserData);
if (aHostInterfaceVersion != cdm::Host_11::kVersion) {
return nullptr;
}
return aUserData;
}
void* ChromiumCdmHostCompat(int aHostInterfaceVersion, void* aUserData) {
GMP_LOG_DEBUG("ChromiumCdmHostCompatFunc(%d, %p)", aHostInterfaceVersion,
aUserData);
if (aHostInterfaceVersion != cdm::Host_10::kVersion) {
return nullptr;
}
@ -116,16 +125,24 @@ GMPErr ChromiumCDMAdapter::GMPGetAPI(const char* aAPIName, void* aHostAPI,
GMP_LOG_DEBUG("ChromiumCDMAdapter::GMPGetAPI(%s, 0x%p, 0x%p, %s) this=0x%p",
aAPIName, aHostAPI, aPluginAPI,
PromiseFlatCString(aKeySystem).get(), this);
bool isCdm10 = !strcmp(aAPIName, CHROMIUM_CDM_API);
if (!isCdm10) {
MOZ_ASSERT_UNREACHABLE("We only support and expect cdm10!");
int version;
GetCdmHostFunc getCdmHostFunc;
if (!strcmp(aAPIName, CHROMIUM_CDM_API)) {
version = cdm::ContentDecryptionModule_11::kVersion;
getCdmHostFunc = &ChromiumCdmHost;
} else if (!strcmp(aAPIName, CHROMIUM_CDM_API_BACKWARD_COMPAT)) {
version = cdm::ContentDecryptionModule_10::kVersion;
getCdmHostFunc = &ChromiumCdmHostCompat;
} else {
MOZ_ASSERT_UNREACHABLE("We only support and expect cdm10/11!");
GMP_LOG_DEBUG(
"ChromiumCDMAdapter::GMPGetAPI(%s, 0x%p, 0x%p) this=0x%p got "
"unsupported CDM version!",
aAPIName, aHostAPI, aPluginAPI, this);
return GMPGenericErr;
}
auto create = reinterpret_cast<decltype(::CreateCdmInstance)*>(
PR_FindFunctionSymbol(mLib, "CreateCdmInstance"));
if (!create) {
@ -136,9 +153,8 @@ GMPErr ChromiumCDMAdapter::GMPGetAPI(const char* aAPIName, void* aHostAPI,
return GMPGenericErr;
}
const int version = cdm::ContentDecryptionModule_10::kVersion;
void* cdm = create(version, aKeySystem.BeginReading(), aKeySystem.Length(),
&ChromiumCdmHost, aHostAPI);
getCdmHostFunc, aHostAPI);
if (!cdm) {
GMP_LOG_DEBUG(
"ChromiumCDMAdapter::GMPGetAPI(%s, 0x%p, 0x%p) this=0x%p "
@ -169,8 +185,10 @@ bool ChromiumCDMAdapter::Supports(int32_t aModuleVersion,
int32_t aInterfaceVersion,
int32_t aHostVersion) {
return aModuleVersion == CDM_MODULE_VERSION &&
aInterfaceVersion == cdm::ContentDecryptionModule_10::kVersion &&
aHostVersion == cdm::Host_10::kVersion;
((aInterfaceVersion == cdm::ContentDecryptionModule_11::kVersion &&
aHostVersion == cdm::Host_11::kVersion) ||
(aInterfaceVersion == cdm::ContentDecryptionModule_10::kVersion &&
aHostVersion == cdm::Host_10::kVersion));
}
#ifdef XP_WIN

View file

@ -28,7 +28,7 @@ ChromiumCDMChild::ChromiumCDMChild(GMPContentChild* aPlugin)
GMP_LOG_DEBUG("ChromiumCDMChild:: ctor this=%p", this);
}
void ChromiumCDMChild::Init(cdm::ContentDecryptionModule_10* aCDM,
void ChromiumCDMChild::Init(cdm::ContentDecryptionModule_11* aCDM,
const nsACString& aStorageId) {
MOZ_ASSERT(IsOnMessageLoopThread());
mCDM = aCDM;
@ -367,6 +367,13 @@ void ChromiumCDMChild::RequestStorageId(uint32_t aVersion) {
mStorageId.Length());
}
void ChromiumCDMChild::ReportMetrics(cdm::MetricName aMetricName,
uint64_t aValue) {
GMP_LOG_DEBUG("ChromiumCDMChild::ReportMetrics() aMetricName=%" PRIu32
", aValue=%" PRIu64,
aMetricName, aValue);
}
ChromiumCDMChild::~ChromiumCDMChild() {
GMP_LOG_DEBUG("ChromiumCDMChild:: dtor this=%p", this);
}
@ -637,25 +644,32 @@ mozilla::ipc::IPCResult ChromiumCDMChild::RecvDecrypt(
cdm::Status status = mCDM->Decrypt(input, &output);
// CDM should have allocated a cdm::Buffer for output.
CDMShmemBuffer* buffer =
output.DecryptedBuffer()
? static_cast<CDMShmemBuffer*>(output.DecryptedBuffer())
: nullptr;
MOZ_ASSERT_IF(buffer, buffer->AsShmemBuffer());
if (status != cdm::kSuccess || !buffer) {
if (status != cdm::kSuccess || !output.DecryptedBuffer()) {
Unused << SendDecryptFailed(aId, status);
return IPC_OK();
}
// Success! Return the decrypted sample to parent.
auto* buffer = static_cast<CDMBuffer*>(output.DecryptedBuffer());
if (auto* shmemBuffer = buffer->AsShmemBuffer()) {
MOZ_ASSERT(!HasShmemOfSize(outputShmemSize));
ipc::Shmem shmem = buffer->ExtractShmem();
if (SendDecrypted(aId, cdm::kSuccess, std::move(shmem))) {
ipc::Shmem shmem = shmemBuffer->ExtractShmem();
if (SendDecryptedShmem(aId, cdm::kSuccess, std::move(shmem))) {
// No need to deallocate the output shmem; it should have been returned
// to the content process.
autoDeallocateOutputShmem.release();
}
return IPC_OK();
}
if (auto* arrayBuffer = buffer->AsArrayBuffer()) {
Unused << SendDecryptedData(aId, cdm::kSuccess,
arrayBuffer->ExtractBuffer());
return IPC_OK();
}
MOZ_ASSERT_UNREACHABLE("Unexpected CDMBuffer type!");
GMP_LOG_DEBUG("ChromiumCDMChild::RecvDecrypt() unexpected CDMBuffer type");
Unused << SendDecryptFailed(aId, cdm::kDecryptError);
return IPC_OK();
}
@ -783,12 +797,12 @@ void ChromiumCDMChild::ReturnOutput(WidevineVideoFrame& aFrame) {
output.mFormat() = static_cast<cdm::VideoFormat>(aFrame.Format());
output.mImageWidth() = aFrame.Size().width;
output.mImageHeight() = aFrame.Size().height;
output.mYPlane() = {aFrame.PlaneOffset(cdm::VideoPlane::kYPlane),
aFrame.Stride(cdm::VideoPlane::kYPlane)};
output.mUPlane() = {aFrame.PlaneOffset(cdm::VideoPlane::kUPlane),
aFrame.Stride(cdm::VideoPlane::kUPlane)};
output.mVPlane() = {aFrame.PlaneOffset(cdm::VideoPlane::kVPlane),
aFrame.Stride(cdm::VideoPlane::kVPlane)};
output.mYPlane() = {aFrame.PlaneOffset(cdm::kYPlane),
aFrame.Stride(cdm::kYPlane)};
output.mUPlane() = {aFrame.PlaneOffset(cdm::kUPlane),
aFrame.Stride(cdm::kUPlane)};
output.mVPlane() = {aFrame.PlaneOffset(cdm::kVPlane),
aFrame.Stride(cdm::kVPlane)};
output.mTimestamp() = aFrame.Timestamp();
uint64_t duration = 0;
@ -797,13 +811,18 @@ void ChromiumCDMChild::ReturnOutput(WidevineVideoFrame& aFrame) {
}
CDMBuffer* base = reinterpret_cast<CDMBuffer*>(aFrame.FrameBuffer());
if (base->AsShmemBuffer()) {
ipc::Shmem shmem = base->AsShmemBuffer()->ExtractShmem();
if (auto* shmemBase = base->AsShmemBuffer()) {
ipc::Shmem shmem = shmemBase->ExtractShmem();
Unused << SendDecodedShmem(output, std::move(shmem));
} else {
MOZ_ASSERT(base->AsArrayBuffer());
Unused << SendDecodedData(output, base->AsArrayBuffer()->ExtractBuffer());
return;
}
if (auto* arrayBase = base->AsArrayBuffer()) {
Unused << SendDecodedData(output, arrayBase->ExtractBuffer());
return;
}
MOZ_ASSERT_UNREACHABLE("Unexpected CDMBuffer type!");
}
mozilla::ipc::IPCResult ChromiumCDMChild::RecvDrain() {

View file

@ -15,7 +15,9 @@ namespace mozilla::gmp {
class GMPContentChild;
class ChromiumCDMChild : public PChromiumCDMChild, public cdm::Host_10 {
class ChromiumCDMChild final : public PChromiumCDMChild,
public cdm::Host_10,
public cdm::Host_11 {
public:
// Mark AddRef and Release as `final`, as they overload pure virtual
// implementations in PChromiumCDMChild.
@ -23,12 +25,12 @@ class ChromiumCDMChild : public PChromiumCDMChild, public cdm::Host_10 {
explicit ChromiumCDMChild(GMPContentChild* aPlugin);
void Init(cdm::ContentDecryptionModule_10* aCDM,
void Init(cdm::ContentDecryptionModule_11* aCDM,
const nsACString& aStorageId);
void TimerExpired(void* aContext);
// cdm::Host_10 implementation
// cdm::Host_10/cdm::Host_11 implementation
cdm::Buffer* Allocate(uint32_t aCapacity) override;
void SetTimer(int64_t aDelayMs, void* aContext) override;
cdm::Time GetCurrentWallTime() override;
@ -59,9 +61,10 @@ class ChromiumCDMChild : public PChromiumCDMChild, public cdm::Host_10 {
void OnDeferredInitializationDone(cdm::StreamType aStreamType,
cdm::Status aDecoderStatus) override {}
void RequestStorageId(uint32_t aVersion) override;
void ReportMetrics(cdm::MetricName aMetricName, uint64_t aValue) override;
cdm::FileIO* CreateFileIO(cdm::FileIOClient* aClient) override;
void OnInitialized(bool aSuccess) override;
// end cdm::Host_10 specific methods
// end cdm::Host_10/cdm::Host_11 specific methods
void GiveBuffer(ipc::Shmem&& aBuffer);
@ -123,7 +126,7 @@ class ChromiumCDMChild : public PChromiumCDMChild, public cdm::Host_10 {
void CallOnMessageLoopThread(const char* const, MethodType, ParamType&&...);
GMPContentChild* mPlugin = nullptr;
cdm::ContentDecryptionModule_10* mCDM = nullptr;
cdm::ContentDecryptionModule_11* mCDM = nullptr;
typedef SimpleMap<int64_t, uint64_t, ThreadSafePolicy> DurationMap;
DurationMap mFrameDurations;

View file

@ -0,0 +1,134 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef ChromiumCDMCompat_h_
#define ChromiumCDMCompat_h_
#include "content_decryption_module.h"
namespace mozilla::gmp {
class ChromiumCDMCompat final : public cdm::ContentDecryptionModule_11 {
public:
explicit ChromiumCDMCompat(cdm::ContentDecryptionModule_10* aCDM)
: mCDM(aCDM) {}
void Initialize(bool aAllowDistinctiveIdentifier, bool aAllowPersistentState,
bool aUseHwSecureCodecs) override {
mCDM->Initialize(aAllowDistinctiveIdentifier, aAllowPersistentState,
aUseHwSecureCodecs);
}
void GetStatusForPolicy(uint32_t aPromiseId,
const cdm::Policy& aPolicy) override {
mCDM->GetStatusForPolicy(aPromiseId, aPolicy);
}
void SetServerCertificate(uint32_t aPromiseId,
const uint8_t* aServerCertificateData,
uint32_t aServerCertificateDataSize) override {
mCDM->SetServerCertificate(aPromiseId, aServerCertificateData,
aServerCertificateDataSize);
}
void CreateSessionAndGenerateRequest(uint32_t aPromiseId,
cdm::SessionType aSessionType,
cdm::InitDataType aInitDataType,
const uint8_t* aInitData,
uint32_t aInitDataSize) override {
mCDM->CreateSessionAndGenerateRequest(aPromiseId, aSessionType,
aInitDataType, aInitData, aInitDataSize);
};
void LoadSession(uint32_t aPromiseId, cdm::SessionType aSessionType,
const char* aSessionId, uint32_t aSessionIdSize) override {
mCDM->LoadSession(aPromiseId, aSessionType, aSessionId, aSessionIdSize);
};
void UpdateSession(uint32_t aPromiseId, const char* aSessionId,
uint32_t aSessionIdSize, const uint8_t* aResponse,
uint32_t aResponseSize) override {
mCDM->UpdateSession(aPromiseId, aSessionId, aSessionIdSize, aResponse,
aResponseSize);
};
void CloseSession(uint32_t aPromiseId, const char* aSessionId,
uint32_t aSessionIdSize) override {
mCDM->CloseSession(aPromiseId, aSessionId, aSessionIdSize);
};
void RemoveSession(uint32_t aPromiseId, const char* aSessionId,
uint32_t aSessionIdSize) override {
mCDM->RemoveSession(aPromiseId, aSessionId, aSessionIdSize);
};
void TimerExpired(void* aContext) override { mCDM->TimerExpired(aContext); };
cdm::Status Decrypt(const cdm::InputBuffer_2& aEncryptedBuffer,
cdm::DecryptedBlock* aDecryptedBuffer) override {
return mCDM->Decrypt(aEncryptedBuffer, aDecryptedBuffer);
};
cdm::Status InitializeAudioDecoder(
const cdm::AudioDecoderConfig_2& aAudioDecoderConfig) override {
return mCDM->InitializeAudioDecoder(aAudioDecoderConfig);
};
cdm::Status InitializeVideoDecoder(
const cdm::VideoDecoderConfig_2& aVideoDecoderConfig) override {
return mCDM->InitializeVideoDecoder(aVideoDecoderConfig);
};
void DeinitializeDecoder(cdm::StreamType aDecoderType) override {
mCDM->DeinitializeDecoder(aDecoderType);
};
void ResetDecoder(cdm::StreamType aDecoderType) override {
mCDM->ResetDecoder(aDecoderType);
};
cdm::Status DecryptAndDecodeFrame(const cdm::InputBuffer_2& aEncryptedBuffer,
cdm::VideoFrame* aVideoFrame) override {
return mCDM->DecryptAndDecodeFrame(aEncryptedBuffer, aVideoFrame);
};
cdm::Status DecryptAndDecodeSamples(
const cdm::InputBuffer_2& aEncryptedBuffer,
cdm::AudioFrames* aAudioFrames) override {
return mCDM->DecryptAndDecodeSamples(aEncryptedBuffer, aAudioFrames);
};
void OnPlatformChallengeResponse(
const cdm::PlatformChallengeResponse& aResponse) override {
mCDM->OnPlatformChallengeResponse(aResponse);
};
void OnQueryOutputProtectionStatus(cdm::QueryResult aResult,
uint32_t aLinkMask,
uint32_t aOutputProtectionMask) override {
mCDM->OnQueryOutputProtectionStatus(aResult, aLinkMask,
aOutputProtectionMask);
};
void OnStorageId(uint32_t aVersion, const uint8_t* aStorageId,
uint32_t aStorageIdSize) override {
mCDM->OnStorageId(aVersion, aStorageId, aStorageIdSize);
}
// Destroys the object in the same aContext as it was created.
void Destroy() override {
mCDM->Destroy();
delete this;
}
protected:
virtual ~ChromiumCDMCompat() = default;
cdm::ContentDecryptionModule_10* mCDM;
};
} // namespace mozilla::gmp
#endif // ChromiumCDMCompat_h_

View file

@ -686,11 +686,11 @@ ipc::IPCResult ChromiumCDMParent::RecvDecryptFailed(const uint32_t& aId,
return IPC_OK();
}
ipc::IPCResult ChromiumCDMParent::RecvDecrypted(const uint32_t& aId,
ipc::IPCResult ChromiumCDMParent::RecvDecryptedShmem(const uint32_t& aId,
const uint32_t& aStatus,
ipc::Shmem&& aShmem) {
MOZ_ASSERT(mGMPThread->IsOnCurrentThread());
GMP_LOG_DEBUG("ChromiumCDMParent::RecvDecrypted(this=%p, id=%" PRIu32
GMP_LOG_DEBUG("ChromiumCDMParent::RecvDecryptedShmem(this=%p, id=%" PRIu32
", status=%" PRIu32 ")",
this, aId, aStatus);
@ -704,9 +704,33 @@ ipc::IPCResult ChromiumCDMParent::RecvDecrypted(const uint32_t& aId,
}
for (size_t i = 0; i < mDecrypts.Length(); i++) {
if (mDecrypts[i]->mId == aId) {
mDecrypts[i]->PostResult(
ToDecryptStatus(aStatus),
Span<const uint8_t>(aShmem.get<uint8_t>(), aShmem.Size<uint8_t>()));
mDecrypts[i]->PostResult(ToDecryptStatus(aStatus),
aShmem.IsReadable()
? Span<const uint8_t>(aShmem.get<uint8_t>(),
aShmem.Size<uint8_t>())
: Span<const uint8_t>());
mDecrypts.RemoveElementAt(i);
break;
}
}
return IPC_OK();
}
ipc::IPCResult ChromiumCDMParent::RecvDecryptedData(const uint32_t& aId,
const uint32_t& aStatus,
nsTArray<uint8_t>&& aData) {
MOZ_ASSERT(mGMPThread->IsOnCurrentThread());
GMP_LOG_DEBUG("ChromiumCDMParent::RecvDecryptedData(this=%p, id=%" PRIu32
", status=%" PRIu32 ")",
this, aId, aStatus);
if (mIsShutdown) {
MOZ_ASSERT(mDecrypts.IsEmpty());
return IPC_OK();
}
for (size_t i = 0; i < mDecrypts.Length(); i++) {
if (mDecrypts[i]->mId == aId) {
mDecrypts[i]->PostResult(ToDecryptStatus(aStatus), aData);
mDecrypts.RemoveElementAt(i);
break;
}

View file

@ -126,8 +126,11 @@ class ChromiumCDMParent final : public PChromiumCDMParent,
const double& aSecondsSinceEpoch);
ipc::IPCResult RecvOnSessionClosed(const nsCString& aSessionId);
ipc::IPCResult RecvOnQueryOutputProtectionStatus();
ipc::IPCResult RecvDecrypted(const uint32_t& aId, const uint32_t& aStatus,
ipc::IPCResult RecvDecryptedShmem(const uint32_t& aId,
const uint32_t& aStatus,
ipc::Shmem&& aData);
ipc::IPCResult RecvDecryptedData(const uint32_t& aId, const uint32_t& aStatus,
nsTArray<uint8_t>&& aData);
ipc::IPCResult RecvDecryptFailed(const uint32_t& aId,
const uint32_t& aStatus);
ipc::IPCResult RecvOnDecoderInitDone(const uint32_t& aStatus);

View file

@ -27,11 +27,13 @@ void DecryptJob::PostResult(DecryptStatus aResult,
if (aDecryptedData.Length() != mSample->Size()) {
NS_WARNING("CDM returned incorrect number of decrypted bytes");
}
if (aResult == eme::Ok) {
if (aResult == DecryptStatus::Ok) {
UniquePtr<MediaRawDataWriter> writer(mSample->CreateWriter());
PodCopy(writer->Data(), aDecryptedData.Elements(),
std::min<size_t>(aDecryptedData.Length(), mSample->Size()));
} else if (aResult == eme::NoKeyErr) {
if (NS_WARN_IF(!writer->Replace(aDecryptedData.Elements(),
aDecryptedData.Length()))) {
aResult = DecryptStatus::GenericErr;
}
} else if (aResult == DecryptStatus::NoKeyErr) {
NS_WARNING("CDM returned NoKeyErr");
// We still have the encrypted sample, so we can re-enqueue it to be
// decrypted again once the key is usable again.

View file

@ -8,6 +8,7 @@
#include "GMPVideoDecoderChild.h"
#include "GMPVideoEncoderChild.h"
#include "ChromiumCDMChild.h"
#include "ChromiumCDMCompat.h"
#include "base/task.h"
#include "GMPUtils.h"
@ -88,15 +89,23 @@ mozilla::ipc::IPCResult GMPContentChild::RecvPGMPVideoEncoderConstructor(
mozilla::ipc::IPCResult GMPContentChild::RecvPChromiumCDMConstructor(
PChromiumCDMChild* aActor, const nsACString& aKeySystem) {
ChromiumCDMChild* child = static_cast<ChromiumCDMChild*>(aActor);
cdm::Host_10* host10 = child;
void* cdm = nullptr;
GMPErr err = mGMPChild->GetAPI(CHROMIUM_CDM_API, host10, &cdm, aKeySystem);
GMPErr err = mGMPChild->GetAPI(
CHROMIUM_CDM_API, static_cast<cdm::Host_11*>(child), &cdm, aKeySystem);
if (err != GMPNoErr || !cdm) {
err =
mGMPChild->GetAPI(CHROMIUM_CDM_API_BACKWARD_COMPAT,
static_cast<cdm::Host_10*>(child), &cdm, aKeySystem);
if (err != GMPNoErr || !cdm) {
return IPC_FAIL(this, "GMPGetAPI call failed trying to get CDM.");
}
child->Init(static_cast<cdm::ContentDecryptionModule_10*>(cdm),
cdm = new ChromiumCDMCompat(
static_cast<cdm::ContentDecryptionModule_10*>(cdm));
}
child->Init(static_cast<cdm::ContentDecryptionModule_11*>(cdm),
mGMPChild->mStorageId);
return IPC_OK();

View file

@ -16,8 +16,8 @@
#include "nsStringFwd.h"
#include "nsTArray.h"
#define CHROMIUM_CDM_API_BACKWARD_COMPAT "chromium-cdm9-host4"
#define CHROMIUM_CDM_API "chromium-cdm10-host4"
#define CHROMIUM_CDM_API_BACKWARD_COMPAT "chromium-cdm10-host4"
#define CHROMIUM_CDM_API "chromium-cdm11-host4"
class GMPVideoEncodedFrame;
class nsIFile;

View file

@ -77,7 +77,7 @@ child:
parent:
async __delete__();
// cdm::Host_10
// cdm::Host_11
async OnResolvePromiseWithKeyStatus(uint32_t aPromiseId, uint32_t aKeyStatus);
async OnResolveNewSessionPromise(uint32_t aPromiseId, nsCString aSessionId);
@ -106,7 +106,8 @@ parent:
async ResolveLoadSessionPromise(uint32_t aPromiseId, bool aSuccessful);
// Return values of cdm::ContentDecryptionModule_10::Decrypt
async Decrypted(uint32_t aId, uint32_t aStatus, Shmem aDecryptedData);
async DecryptedShmem(uint32_t aId, uint32_t aStatus, Shmem aData);
async DecryptedData(uint32_t aId, uint32_t aStatus, uint8_t[] aData);
async DecryptFailed(uint32_t aId, uint32_t aStatus);
async OnDecoderInitDone(uint32_t aStatus);

View file

@ -62,10 +62,6 @@ EXPORTS += [
"GMPVideoHost.h",
"GMPVideoi420FrameImpl.h",
"GMPVideoPlaneImpl.h",
"widevine-adapter/content_decryption_module.h",
"widevine-adapter/content_decryption_module_export.h",
"widevine-adapter/content_decryption_module_ext.h",
"widevine-adapter/content_decryption_module_proxy.h",
]
UNIFIED_SOURCES += [

View file

@ -127,14 +127,14 @@ bool WidevineVideoFrame::InitToBlack(int32_t aWidth, int32_t aHeight,
SetFormat(cdm::VideoFormat::kI420);
SetSize(cdm::Size{aWidth, aHeight});
SetFrameBuffer(buffer);
SetPlaneOffset(cdm::VideoPlane::kYPlane, 0);
SetStride(cdm::VideoPlane::kYPlane, aWidth);
SetPlaneOffset(cdm::kYPlane, 0);
SetStride(cdm::kYPlane, aWidth);
// Note: U and V planes are stored at the same place in order to
// save memory since their contents are the same.
SetPlaneOffset(cdm::VideoPlane::kUPlane, ySize);
SetStride(cdm::VideoPlane::kUPlane, halfWidth);
SetPlaneOffset(cdm::VideoPlane::kVPlane, ySize);
SetStride(cdm::VideoPlane::kVPlane, halfWidth);
SetPlaneOffset(cdm::kUPlane, ySize);
SetStride(cdm::kUPlane, halfWidth);
SetPlaneOffset(cdm::kVPlane, ySize);
SetStride(cdm::kVPlane, halfWidth);
SetTimestamp(aTimeStamp);
return true;
}

View file

@ -44,8 +44,8 @@ class WidevineVideoFrame : public cdm::VideoFrame {
cdm::VideoFormat mFormat;
cdm::Size mSize;
cdm::Buffer* mBuffer;
uint32_t mPlaneOffsets[cdm::VideoPlane::kMaxPlanes];
uint32_t mPlaneStrides[cdm::VideoPlane::kMaxPlanes];
uint32_t mPlaneOffsets[cdm::kMaxPlanes];
uint32_t mPlaneStrides[cdm::kMaxPlanes];
int64_t mTimestamp;
};

View file

@ -8,7 +8,6 @@
#include <type_traits>
#include "content_decryption_module_export.h"
#include "content_decryption_module_proxy.h"
#if defined(_MSC_VER)
typedef unsigned char uint8_t;
@ -16,7 +15,7 @@ typedef unsigned int uint32_t;
typedef int int32_t;
typedef __int64 int64_t;
#else
# include <stdint.h>
#include <stdint.h>
#endif
// The version number must be rolled when the exported functions are updated!
@ -411,6 +410,7 @@ CHECK_TYPE(InitDataType, 4, 4);
enum SessionType : uint32_t {
kTemporary = 0,
kPersistentLicense = 1,
kPersistentUsageRecord = 2
};
CHECK_TYPE(SessionType, 4, 4);
@ -479,12 +479,13 @@ class CDM_CLASS_API DecryptedBlock {
virtual ~DecryptedBlock() {}
};
enum VideoPlane : uint32_t {
kYPlane = 0,
kUPlane = 1,
kVPlane = 2,
kMaxPlanes = 3,
};
// This intentionally avoids using an enum, since it will be used to do math
// with other enums, which is deprecated in C++20.
using VideoPlane = uint32_t;
constexpr VideoPlane kYPlane = 0;
constexpr VideoPlane kUPlane = 1;
constexpr VideoPlane kVPlane = 2;
constexpr VideoPlane kMaxPlanes = 3;
CHECK_TYPE(VideoPlane, 4, 4);
class CDM_CLASS_API VideoFrame {
@ -622,7 +623,8 @@ class CDM_CLASS_API FileIOClient {
// - kInUse indicates that there are other read/write operations pending.
// - kError indicates read failure, e.g. the storage is not open or cannot be
// fully read.
virtual void OnReadComplete(Status status, const uint8_t* data,
virtual void OnReadComplete(Status status,
const uint8_t* data,
uint32_t data_size) = 0;
// Response to a FileIO::Write() call.
@ -639,8 +641,21 @@ class CDM_CLASS_API FileIOClient {
virtual ~FileIOClient() {}
};
// Metrics that will be reported from the CDM through the ReportMetrics()
// function. To add a new metric, please add it to the end of this enum list
// without changing any existing enum values.
// Note: For forward compatibility, Host implementations must gracefully handle
// unexpected (new) enum values, e.g. no-op.
enum MetricName : uint32_t {
kSdkVersion,
kCertificateSerialNumber,
kDecoderBypassBlockCount,
};
CHECK_TYPE(MetricName, 4, 4);
class CDM_CLASS_API Host_10;
class CDM_CLASS_API Host_11;
class CDM_CLASS_API Host_12;
// ContentDecryptionModule interface that all CDMs need to implement.
// The interface is versioned for backward compatibility.
@ -708,28 +723,33 @@ class CDM_CLASS_API ContentDecryptionModule_10 {
// The CDM must respond by calling either Host::OnResolveNewSessionPromise()
// or Host::OnRejectPromise(). If the session is not found, call
// Host::OnResolveNewSessionPromise() with session_id = NULL.
virtual void LoadSession(uint32_t promise_id, SessionType session_type,
virtual void LoadSession(uint32_t promise_id,
SessionType session_type,
const char* session_id,
uint32_t session_id_size) = 0;
// Updates the session with |response|. The CDM must respond by calling
// either Host::OnResolvePromise() or Host::OnRejectPromise().
virtual void UpdateSession(uint32_t promise_id, const char* session_id,
uint32_t session_id_size, const uint8_t* response,
virtual void UpdateSession(uint32_t promise_id,
const char* session_id,
uint32_t session_id_size,
const uint8_t* response,
uint32_t response_size) = 0;
// Requests that the CDM close the session. The CDM must respond by calling
// either Host::OnResolvePromise() or Host::OnRejectPromise() when the request
// has been processed. This may be before the session is closed. Once the
// session is closed, Host::OnSessionClosed() must also be called.
virtual void CloseSession(uint32_t promise_id, const char* session_id,
virtual void CloseSession(uint32_t promise_id,
const char* session_id,
uint32_t session_id_size) = 0;
// Removes any stored session data associated with this session. Will only be
// called for persistent sessions. The CDM must respond by calling either
// Host::OnResolvePromise() or Host::OnRejectPromise() when the request has
// been processed.
virtual void RemoveSession(uint32_t promise_id, const char* session_id,
virtual void RemoveSession(uint32_t promise_id,
const char* session_id,
uint32_t session_id_size) = 0;
// Performs scheduled operation with |context| when the timer fires.
@ -833,7 +853,8 @@ class CDM_CLASS_API ContentDecryptionModule_10 {
// then |link_mask| and |output_protection_mask| are undefined and should
// be ignored.
virtual void OnQueryOutputProtectionStatus(
QueryResult result, uint32_t link_mask,
QueryResult result,
uint32_t link_mask,
uint32_t output_protection_mask) = 0;
// Called by the host after a call to Host::RequestStorageId(). If the
@ -844,7 +865,8 @@ class CDM_CLASS_API ContentDecryptionModule_10 {
// If the requested version is not available, null/zero will be provided as
// |storage_id| and |storage_id_size|, respectively, and |version| should be
// ignored.
virtual void OnStorageId(uint32_t version, const uint8_t* storage_id,
virtual void OnStorageId(uint32_t version,
const uint8_t* storage_id,
uint32_t storage_id_size) = 0;
// Destroys the object in the same context as it was created.
@ -855,8 +877,6 @@ class CDM_CLASS_API ContentDecryptionModule_10 {
virtual ~ContentDecryptionModule_10() {}
};
// ----- Note: CDM interface(s) below still in development and not stable! -----
// ContentDecryptionModule interface that all CDMs need to implement.
// The interface is versioned for backward compatibility.
// Note: ContentDecryptionModule implementations must use the allocator
@ -866,7 +886,7 @@ class CDM_CLASS_API ContentDecryptionModule_10 {
class CDM_CLASS_API ContentDecryptionModule_11 {
public:
static const int kVersion = 11;
static const bool kIsStable = false;
static const bool kIsStable = true;
typedef Host_11 Host;
// Initializes the CDM instance, providing information about permitted
@ -923,21 +943,247 @@ class CDM_CLASS_API ContentDecryptionModule_11 {
// The CDM must respond by calling either Host::OnResolveNewSessionPromise()
// or Host::OnRejectPromise(). If the session is not found, call
// Host::OnResolveNewSessionPromise() with session_id = NULL.
virtual void LoadSession(uint32_t promise_id, SessionType session_type,
virtual void LoadSession(uint32_t promise_id,
SessionType session_type,
const char* session_id,
uint32_t session_id_size) = 0;
// Updates the session with |response|. The CDM must respond by calling
// either Host::OnResolvePromise() or Host::OnRejectPromise().
virtual void UpdateSession(uint32_t promise_id, const char* session_id,
uint32_t session_id_size, const uint8_t* response,
virtual void UpdateSession(uint32_t promise_id,
const char* session_id,
uint32_t session_id_size,
const uint8_t* response,
uint32_t response_size) = 0;
// Requests that the CDM close the session. The CDM must respond by calling
// either Host::OnResolvePromise() or Host::OnRejectPromise() when the request
// has been processed. This may be before the session is closed. Once the
// session is closed, Host::OnSessionClosed() must also be called.
virtual void CloseSession(uint32_t promise_id, const char* session_id,
virtual void CloseSession(uint32_t promise_id,
const char* session_id,
uint32_t session_id_size) = 0;
// Removes any stored session data associated with this session. Will only be
// called for persistent sessions. The CDM must respond by calling either
// Host::OnResolvePromise() or Host::OnRejectPromise() when the request has
// been processed.
virtual void RemoveSession(uint32_t promise_id,
const char* session_id,
uint32_t session_id_size) = 0;
// Performs scheduled operation with |context| when the timer fires.
virtual void TimerExpired(void* context) = 0;
// Decrypts the |encrypted_buffer|.
//
// Returns kSuccess if decryption succeeded, in which case the callee
// should have filled the |decrypted_buffer| and passed the ownership of
// |data| in |decrypted_buffer| to the caller.
// Returns kNoKey if the CDM did not have the necessary decryption key
// to decrypt.
// Returns kDecryptError if any other error happened.
// If the return value is not kSuccess, |decrypted_buffer| should be ignored
// by the caller.
virtual Status Decrypt(const InputBuffer_2& encrypted_buffer,
DecryptedBlock* decrypted_buffer) = 0;
// Initializes the CDM audio decoder with |audio_decoder_config|. This
// function must be called before DecryptAndDecodeSamples() is called.
//
// Returns kSuccess if the |audio_decoder_config| is supported and the CDM
// audio decoder is successfully initialized.
// Returns kInitializationError if |audio_decoder_config| is not supported.
// The CDM may still be able to do Decrypt().
// Returns kDeferredInitialization if the CDM is not ready to initialize the
// decoder at this time. Must call Host::OnDeferredInitializationDone() once
// initialization is complete.
virtual Status InitializeAudioDecoder(
const AudioDecoderConfig_2& audio_decoder_config) = 0;
// Initializes the CDM video decoder with |video_decoder_config|. This
// function must be called before DecryptAndDecodeFrame() is called.
//
// Returns kSuccess if the |video_decoder_config| is supported and the CDM
// video decoder is successfully initialized.
// Returns kInitializationError if |video_decoder_config| is not supported.
// The CDM may still be able to do Decrypt().
// Returns kDeferredInitialization if the CDM is not ready to initialize the
// decoder at this time. Must call Host::OnDeferredInitializationDone() once
// initialization is complete.
virtual Status InitializeVideoDecoder(
const VideoDecoderConfig_2& video_decoder_config) = 0;
// De-initializes the CDM decoder and sets it to an uninitialized state. The
// caller can initialize the decoder again after this call to re-initialize
// it. This can be used to reconfigure the decoder if the configuration
// changes.
virtual void DeinitializeDecoder(StreamType decoder_type) = 0;
// Resets the CDM decoder to an initialized clean state. All internal buffers
// MUST be flushed.
virtual void ResetDecoder(StreamType decoder_type) = 0;
// Decrypts the |encrypted_buffer| and decodes the decrypted buffer into a
// |video_frame|. Upon end-of-stream, the caller should call this function
// repeatedly with empty |encrypted_buffer| (|data| == NULL) until
// kNeedMoreData is returned.
//
// Returns kSuccess if decryption and decoding both succeeded, in which case
// the callee will have filled the |video_frame| and passed the ownership of
// |frame_buffer| in |video_frame| to the caller.
// Returns kNoKey if the CDM did not have the necessary decryption key
// to decrypt.
// Returns kNeedMoreData if more data was needed by the decoder to generate
// a decoded frame (e.g. during initialization and end-of-stream).
// Returns kDecryptError if any decryption error happened.
// Returns kDecodeError if any decoding error happened.
// If the return value is not kSuccess, |video_frame| should be ignored by
// the caller.
virtual Status DecryptAndDecodeFrame(const InputBuffer_2& encrypted_buffer,
VideoFrame* video_frame) = 0;
// Decrypts the |encrypted_buffer| and decodes the decrypted buffer into
// |audio_frames|. Upon end-of-stream, the caller should call this function
// repeatedly with empty |encrypted_buffer| (|data| == NULL) until only empty
// |audio_frames| is produced.
//
// Returns kSuccess if decryption and decoding both succeeded, in which case
// the callee will have filled |audio_frames| and passed the ownership of
// |data| in |audio_frames| to the caller.
// Returns kNoKey if the CDM did not have the necessary decryption key
// to decrypt.
// Returns kNeedMoreData if more data was needed by the decoder to generate
// audio samples (e.g. during initialization and end-of-stream).
// Returns kDecryptError if any decryption error happened.
// Returns kDecodeError if any decoding error happened.
// If the return value is not kSuccess, |audio_frames| should be ignored by
// the caller.
virtual Status DecryptAndDecodeSamples(const InputBuffer_2& encrypted_buffer,
AudioFrames* audio_frames) = 0;
// Called by the host after a platform challenge was initiated via
// Host::SendPlatformChallenge().
virtual void OnPlatformChallengeResponse(
const PlatformChallengeResponse& response) = 0;
// Called by the host after a call to Host::QueryOutputProtectionStatus(). The
// |link_mask| is a bit mask of OutputLinkTypes and |output_protection_mask|
// is a bit mask of OutputProtectionMethods. If |result| is kQueryFailed,
// then |link_mask| and |output_protection_mask| are undefined and should
// be ignored.
virtual void OnQueryOutputProtectionStatus(
QueryResult result,
uint32_t link_mask,
uint32_t output_protection_mask) = 0;
// Called by the host after a call to Host::RequestStorageId(). If the
// version of the storage ID requested is available, |storage_id| and
// |storage_id_size| are set appropriately. |version| will be the same as
// what was requested, unless 0 (latest) was requested, in which case
// |version| will be the actual version number for the |storage_id| returned.
// If the requested version is not available, null/zero will be provided as
// |storage_id| and |storage_id_size|, respectively, and |version| should be
// ignored.
virtual void OnStorageId(uint32_t version,
const uint8_t* storage_id,
uint32_t storage_id_size) = 0;
// Destroys the object in the same context as it was created.
virtual void Destroy() = 0;
protected:
ContentDecryptionModule_11() {}
virtual ~ContentDecryptionModule_11() {}
};
// ----- Note: CDM interface(s) below still in development and not stable! -----
// ContentDecryptionModule interface that all CDMs need to implement.
// The interface is versioned for backward compatibility.
// Note: ContentDecryptionModule implementations must use the allocator
// provided in CreateCdmInstance() to allocate any Buffer that needs to
// be passed back to the caller. Implementations must call Buffer::Destroy()
// when a Buffer is created that will never be returned to the caller.
class CDM_CLASS_API ContentDecryptionModule_12 {
public:
static const int kVersion = 12;
static const bool kIsStable = false;
typedef Host_12 Host;
// Initializes the CDM instance, providing information about permitted
// functionalities. The CDM must respond by calling Host::OnInitialized()
// with whether the initialization succeeded. No other calls will be made by
// the host before Host::OnInitialized() returns.
// If |allow_distinctive_identifier| is false, messages from the CDM,
// such as message events, must not contain a Distinctive Identifier,
// even in an encrypted form.
// If |allow_persistent_state| is false, the CDM must not attempt to
// persist state. Calls to CreateFileIO() will fail.
// If |use_hw_secure_codecs| is true, the CDM must ensure the decryption key
// and video buffers (compressed and uncompressed) are securely protected by
// hardware.
virtual void Initialize(bool allow_distinctive_identifier,
bool allow_persistent_state,
bool use_hw_secure_codecs) = 0;
// Gets the key status if the CDM has a hypothetical key with the |policy|.
// The CDM must respond by calling either Host::OnResolveKeyStatusPromise()
// with the result key status or Host::OnRejectPromise() if an unexpected
// error happened or this method is not supported.
virtual void GetStatusForPolicy(uint32_t promise_id,
const Policy& policy) = 0;
// SetServerCertificate(), CreateSessionAndGenerateRequest(), LoadSession(),
// UpdateSession(), CloseSession(), and RemoveSession() all accept a
// |promise_id|, which must be passed to the completion Host method
// (e.g. Host::OnResolveNewSessionPromise()).
// Provides a server certificate to be used to encrypt messages to the
// license server. The CDM must respond by calling either
// Host::OnResolvePromise() or Host::OnRejectPromise().
// If the CDM does not support server certificates, the promise should be
// rejected with kExceptionNotSupportedError. If |server_certificate_data|
// is empty, reject with kExceptionTypeError. Any other error should be
// rejected with kExceptionInvalidStateError or kExceptionQuotaExceededError.
// TODO(crbug.com/796417): Add support for the promise to return true or
// false, rather than using kExceptionNotSupportedError to mean false.
virtual void SetServerCertificate(uint32_t promise_id,
const uint8_t* server_certificate_data,
uint32_t server_certificate_data_size) = 0;
// Creates a session given |session_type|, |init_data_type|, and |init_data|.
// The CDM must respond by calling either Host::OnResolveNewSessionPromise()
// or Host::OnRejectPromise().
virtual void CreateSessionAndGenerateRequest(uint32_t promise_id,
SessionType session_type,
InitDataType init_data_type,
const uint8_t* init_data,
uint32_t init_data_size) = 0;
// Loads the session of type |session_type| specified by |session_id|.
// The CDM must respond by calling either Host::OnResolveNewSessionPromise()
// or Host::OnRejectPromise(). If the session is not found, call
// Host::OnResolveNewSessionPromise() with session_id = NULL.
virtual void LoadSession(uint32_t promise_id,
SessionType session_type,
const char* session_id,
uint32_t session_id_size) = 0;
// Updates the session with |response|. The CDM must respond by calling
// either Host::OnResolvePromise() or Host::OnRejectPromise().
virtual void UpdateSession(uint32_t promise_id,
const char* session_id,
uint32_t session_id_size,
const uint8_t* response,
uint32_t response_size) = 0;
// Requests that the CDM close the session. The CDM must respond by calling
// either Host::OnResolvePromise() or Host::OnRejectPromise() when the request
// has been processed. This may be before the session is closed. Once the
// session is closed, Host::OnSessionClosed() must also be called.
virtual void CloseSession(uint32_t promise_id,
const char* session_id,
uint32_t session_id_size) = 0;
// Removes any stored session data associated with this session. Removes all
@ -948,7 +1194,8 @@ class CDM_CLASS_API ContentDecryptionModule_11 {
// processed by UpdateSession(). The CDM must respond by calling either
// Host::OnResolvePromise() or Host::OnRejectPromise() when the request has
// been processed.
virtual void RemoveSession(uint32_t promise_id, const char* session_id,
virtual void RemoveSession(uint32_t promise_id,
const char* session_id,
uint32_t session_id_size) = 0;
// Performs scheduled operation with |context| when the timer fires.
@ -1052,7 +1299,8 @@ class CDM_CLASS_API ContentDecryptionModule_11 {
// then |link_mask| and |output_protection_mask| are undefined and should
// be ignored.
virtual void OnQueryOutputProtectionStatus(
QueryResult result, uint32_t link_mask,
QueryResult result,
uint32_t link_mask,
uint32_t output_protection_mask) = 0;
// Called by the host after a call to Host::RequestStorageId(). If the
@ -1063,15 +1311,16 @@ class CDM_CLASS_API ContentDecryptionModule_11 {
// If the requested version is not available, null/zero will be provided as
// |storage_id| and |storage_id_size|, respectively, and |version| should be
// ignored.
virtual void OnStorageId(uint32_t version, const uint8_t* storage_id,
virtual void OnStorageId(uint32_t version,
const uint8_t* storage_id,
uint32_t storage_id_size) = 0;
// Destroys the object in the same context as it was created.
virtual void Destroy() = 0;
protected:
ContentDecryptionModule_11() {}
virtual ~ContentDecryptionModule_11() {}
ContentDecryptionModule_12() {}
virtual ~ContentDecryptionModule_12() {}
};
class CDM_CLASS_API Host_10 {
@ -1118,15 +1367,18 @@ class CDM_CLASS_API Host_10 {
// ContentDecryptionModule calls that accept a |promise_id|.
// |exception| must be specified. |error_message| and |system_code|
// are optional. |error_message_size| should not include null termination.
virtual void OnRejectPromise(uint32_t promise_id, Exception exception,
uint32_t system_code, const char* error_message,
virtual void OnRejectPromise(uint32_t promise_id,
Exception exception,
uint32_t system_code,
const char* error_message,
uint32_t error_message_size) = 0;
// Called by the CDM when it has a message for session |session_id|.
// Size parameters should not include null termination.
virtual void OnSessionMessage(const char* session_id,
uint32_t session_id_size,
MessageType message_type, const char* message,
MessageType message_type,
const char* message,
uint32_t message_size) = 0;
// Called by the CDM when there has been a change in keys or their status for
@ -1251,15 +1503,18 @@ class CDM_CLASS_API Host_11 {
// ContentDecryptionModule calls that accept a |promise_id|.
// |exception| must be specified. |error_message| and |system_code|
// are optional. |error_message_size| should not include null termination.
virtual void OnRejectPromise(uint32_t promise_id, Exception exception,
uint32_t system_code, const char* error_message,
virtual void OnRejectPromise(uint32_t promise_id,
Exception exception,
uint32_t system_code,
const char* error_message,
uint32_t error_message_size) = 0;
// Called by the CDM when it has a message for session |session_id|.
// Size parameters should not include null termination.
virtual void OnSessionMessage(const char* session_id,
uint32_t session_id_size,
MessageType message_type, const char* message,
MessageType message_type,
const char* message,
uint32_t message_size) = 0;
// Called by the CDM when there has been a change in keys or their status for
@ -1326,18 +1581,146 @@ class CDM_CLASS_API Host_11 {
// CDM can call this method multiple times to operate on different files.
virtual FileIO* CreateFileIO(FileIOClient* client) = 0;
// Requests a CdmProxy that proxies part of CDM functionalities to a different
// entity, e.g. a hardware CDM module. A CDM instance can have at most one
// CdmProxy throughout its lifetime, which must be requested and initialized
// during CDM instance initialization time, i.e. in or after CDM::Initialize()
// and before OnInitialized() is called, to ensure proper connection of the
// CdmProxy and the media player (e.g. hardware decoder). The CdmProxy is
// owned by the host and is guaranteed to be valid throughout the CDM
// instance's lifetime. The CDM must ensure that the |client| remain valid
// before the CDM instance is destroyed. Returns null if CdmProxy is not
// supported, called before CDM::Initialize(), RequestCdmProxy() is called
// more than once, or called after the CDM instance has been initialized.
virtual CdmProxy* RequestCdmProxy(CdmProxyClient* client) = 0;
// Requests a specific version of the storage ID. A storage ID is a stable,
// device specific ID used by the CDM to securely store persistent data. The
// ID will be returned by the host via ContentDecryptionModule::OnStorageId().
// If |version| is 0, the latest version will be returned. All |version|s
// that are greater than or equal to 0x80000000 are reserved for the CDM and
// should not be supported or returned by the host. The CDM must not expose
// the ID outside the client device, even in encrypted form.
virtual void RequestStorageId(uint32_t version) = 0;
// Reports the metric |metric_name| with value |value| to the host. Can be
// called by the CDM at any time. May report the same metric multiple times
// during the lifetime of the CDM.
virtual void ReportMetrics(MetricName metric_name, uint64_t value) = 0;
protected:
Host_11() {}
virtual ~Host_11() {}
};
class CDM_CLASS_API Host_12 {
public:
static const int kVersion = 12;
// Returns a Buffer* containing non-zero members upon success, or NULL on
// failure. The caller owns the Buffer* after this call. The buffer is not
// guaranteed to be zero initialized. The capacity of the allocated Buffer
// is guaranteed to be not less than |capacity|.
virtual Buffer* Allocate(uint32_t capacity) = 0;
// Requests the host to call ContentDecryptionModule::TimerFired() |delay_ms|
// from now with |context|.
virtual void SetTimer(int64_t delay_ms, void* context) = 0;
// Returns the current wall time.
virtual Time GetCurrentWallTime() = 0;
// Called by the CDM with the result after the CDM instance was initialized.
virtual void OnInitialized(bool success) = 0;
// Called by the CDM when a key status is available in response to
// GetStatusForPolicy().
virtual void OnResolveKeyStatusPromise(uint32_t promise_id,
KeyStatus key_status) = 0;
// Called by the CDM when a session is created or loaded and the value for the
// MediaKeySession's sessionId attribute is available (|session_id|).
// This must be called before OnSessionMessage() or
// OnSessionKeysChange() is called for the same session. |session_id_size|
// should not include null termination.
// When called in response to LoadSession(), the |session_id| must be the
// same as the |session_id| passed in LoadSession(), or NULL if the
// session could not be loaded.
virtual void OnResolveNewSessionPromise(uint32_t promise_id,
const char* session_id,
uint32_t session_id_size) = 0;
// Called by the CDM when a session is updated or released.
virtual void OnResolvePromise(uint32_t promise_id) = 0;
// Called by the CDM when an error occurs as a result of one of the
// ContentDecryptionModule calls that accept a |promise_id|.
// |exception| must be specified. |error_message| and |system_code|
// are optional. |error_message_size| should not include null termination.
virtual void OnRejectPromise(uint32_t promise_id,
Exception exception,
uint32_t system_code,
const char* error_message,
uint32_t error_message_size) = 0;
// Called by the CDM when it has a message for session |session_id|.
// Size parameters should not include null termination.
virtual void OnSessionMessage(const char* session_id,
uint32_t session_id_size,
MessageType message_type,
const char* message,
uint32_t message_size) = 0;
// Called by the CDM when there has been a change in keys or their status for
// session |session_id|. |has_additional_usable_key| should be set if a
// key is newly usable (e.g. new key available, previously expired key has
// been renewed, etc.) and the browser should attempt to resume playback.
// |keys_info| is the list of key IDs for this session along with their
// current status. |keys_info_count| is the number of entries in |keys_info|.
// Size parameter for |session_id| should not include null termination.
virtual void OnSessionKeysChange(const char* session_id,
uint32_t session_id_size,
bool has_additional_usable_key,
const KeyInformation* keys_info,
uint32_t keys_info_count) = 0;
// Called by the CDM when there has been a change in the expiration time for
// session |session_id|. This can happen as the result of an Update() call
// or some other event. If this happens as a result of a call to Update(),
// it must be called before resolving the Update() promise. |new_expiry_time|
// represents the time after which the key(s) in the session will no longer
// be usable for decryption. It can be 0 if no such time exists or if the
// license explicitly never expires. Size parameter should not include null
// termination.
virtual void OnExpirationChange(const char* session_id,
uint32_t session_id_size,
Time new_expiry_time) = 0;
// Called by the CDM when session |session_id| is closed. Size
// parameter should not include null termination.
virtual void OnSessionClosed(const char* session_id,
uint32_t session_id_size) = 0;
// The following are optional methods that may not be implemented on all
// platforms.
// Sends a platform challenge for the given |service_id|. |challenge| is at
// most 256 bits of data to be signed. Once the challenge has been completed,
// the host will call ContentDecryptionModule::OnPlatformChallengeResponse()
// with the signed challenge response and platform certificate. Size
// parameters should not include null termination.
virtual void SendPlatformChallenge(const char* service_id,
uint32_t service_id_size,
const char* challenge,
uint32_t challenge_size) = 0;
// Attempts to enable output protection (e.g. HDCP) on the display link. The
// |desired_protection_mask| is a bit mask of OutputProtectionMethods. No
// status callback is issued, the CDM must call QueryOutputProtectionStatus()
// periodically to ensure the desired protections are applied.
virtual void EnableOutputProtection(uint32_t desired_protection_mask) = 0;
// Requests the current output protection status. Once the host has the status
// it will call ContentDecryptionModule::OnQueryOutputProtectionStatus().
virtual void QueryOutputProtectionStatus() = 0;
// Must be called by the CDM if it returned kDeferredInitialization during
// InitializeAudioDecoder() or InitializeVideoDecoder().
virtual void OnDeferredInitializationDone(StreamType stream_type,
Status decoder_status) = 0;
// Creates a FileIO object from the host to do file IO operation. Returns NULL
// if a FileIO object cannot be obtained. Once a valid FileIO object is
// returned, |client| must be valid until FileIO::Close() is called. The
// CDM can call this method multiple times to operate on different files.
virtual FileIO* CreateFileIO(FileIOClient* client) = 0;
// Requests a specific version of the storage ID. A storage ID is a stable,
// device specific ID used by the CDM to securely store persistent data. The
@ -1348,9 +1731,14 @@ class CDM_CLASS_API Host_11 {
// the ID outside the client device, even in encrypted form.
virtual void RequestStorageId(uint32_t version) = 0;
// Reports the metric |metric_name| with value |value| to the host. Can be
// called by the CDM at any time. May report the same metric multiple times
// during the lifetime of the CDM.
virtual void ReportMetrics(MetricName metric_name, uint64_t value) = 0;
protected:
Host_11() {}
virtual ~Host_11() {}
Host_12() {}
virtual ~Host_12() {}
};
} // namespace cdm

View file

@ -1,121 +0,0 @@
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CDM_CONTENT_DECRYPTION_MODULE_PROXY_H_
#define CDM_CONTENT_DECRYPTION_MODULE_PROXY_H_
#include "content_decryption_module_export.h"
#if defined(_MSC_VER)
typedef unsigned char uint8_t;
typedef unsigned int uint32_t;
typedef unsigned __int64 uint64_t;
#else
# include <stdint.h>
#endif
namespace cdm {
class CDM_CLASS_API CdmProxyClient;
// A proxy class for the CDM.
// In general, the interpretation of the CdmProxy and CdmProxyClient method
// parameters are protocol dependent. For enum parameters, values outside the
// enum range may not work.
class CDM_CLASS_API CdmProxy {
public:
enum Function : uint32_t {
// For Intel Negotiate Crypto SessionKey Exchange (CSME) path to call
// ID3D11VideoContext::NegotiateCryptoSessionKeyExchange.
kIntelNegotiateCryptoSessionKeyExchange = 1,
// There will be more values in the future e.g. for D3D11 RSA method.
};
enum KeyType : uint32_t {
kDecryptOnly = 0,
kDecryptAndDecode = 1,
};
// Initializes the proxy. The results will be returned in
// CdmProxyClient::OnInitialized().
virtual void Initialize() = 0;
// Processes and updates the state of the proxy.
// |output_data_size| is required by some protocol to set up the output data.
// The operation may fail if the |output_data_size| is wrong. The results will
// be returned in CdmProxyClient::OnProcessed().
virtual void Process(Function function, uint32_t crypto_session_id,
const uint8_t* input_data, uint32_t input_data_size,
uint32_t output_data_size) = 0;
// Creates a crypto session for handling media.
// If extra data has to be passed to further setup the media crypto session,
// pass the data as |input_data|. The results will be returned in
// CdmProxyClient::OnMediaCryptoSessionCreated().
virtual void CreateMediaCryptoSession(const uint8_t* input_data,
uint32_t input_data_size) = 0;
// Sets a key for the session identified by |crypto_session_id|.
virtual void SetKey(uint32_t crypto_session_id, const uint8_t* key_id,
uint32_t key_id_size, KeyType key_type,
const uint8_t* key_blob, uint32_t key_blob_size) = 0;
// Removes a key for the session identified by |crypto_session_id|.
virtual void RemoveKey(uint32_t crypto_session_id, const uint8_t* key_id,
uint32_t key_id_size) = 0;
protected:
CdmProxy() {}
virtual ~CdmProxy() {}
};
// Responses to CdmProxy calls. All responses will be called asynchronously.
class CDM_CLASS_API CdmProxyClient {
public:
enum Status : uint32_t {
kOk,
kFail,
};
enum Protocol : uint32_t {
kNone = 0, // No protocol supported. Can be used in failure cases.
kIntel, // Method using Intel CSME.
// There will be more values in the future e.g. kD3D11RsaHardware,
// kD3D11RsaSoftware to use the D3D11 RSA method.
};
// Callback for Initialize(). If the proxy created a crypto session, then the
// ID for the crypto session is |crypto_session_id|.
virtual void OnInitialized(Status status, Protocol protocol,
uint32_t crypto_session_id) = 0;
// Callback for Process(). |output_data| is the output of processing.
virtual void OnProcessed(Status status, const uint8_t* output_data,
uint32_t output_data_size) = 0;
// Callback for CreateMediaCryptoSession(). On success:
// - |crypto_session_id| is the ID for the created crypto session.
// - |output_data| is extra value, if any.
// Otherwise, |crypto_session_id| and |output_data| should be ignored.
virtual void OnMediaCryptoSessionCreated(Status status,
uint32_t crypto_session_id,
uint64_t output_data) = 0;
// Callback for SetKey().
virtual void OnKeySet(Status status) = 0;
// Callback for RemoveKey().
virtual void OnKeyRemoved(Status status) = 0;
// Called when there is a hardware reset and all the hardware context is lost.
virtual void NotifyHardwareReset() = 0;
protected:
CdmProxyClient() {}
virtual ~CdmProxyClient() {}
};
} // namespace cdm
#endif // CDM_CONTENT_DECRYPTION_MODULE_PROXY_H_

View file

@ -10,7 +10,14 @@ SOURCES += [
"WidevineVideoFrame.cpp",
]
EXPORTS += ["WidevineFileIO.h", "WidevineUtils.h", "WidevineVideoFrame.h"]
EXPORTS += [
"content_decryption_module.h",
"content_decryption_module_export.h",
"content_decryption_module_ext.h",
"WidevineFileIO.h",
"WidevineUtils.h",
"WidevineVideoFrame.h",
]
FINAL_LIBRARY = "xul"

View file

@ -16,23 +16,35 @@ namespace mozilla::dom {
// https://streams.spec.whatwg.org/#transfer-array-buffer
// As some parts of the specifcation want to use the abrupt completion value,
// this function may leave a pending exception if it returns nullptr.
//
// This can be called with a CCW to an ArrayBuffer Object as we handle the
// case explicitly.
JSObject* TransferArrayBuffer(JSContext* aCx, JS::Handle<JSObject*> aObject) {
MOZ_ASSERT(JS::IsArrayBufferObject(aObject));
JS::Rooted<JSObject*> unwrappedObj(aCx, JS::UnwrapArrayBuffer(aObject));
if (!unwrappedObj) {
js::ReportAccessDenied(aCx);
return nullptr;
}
size_t bufferLength = 0;
UniquePtr<void, JS::FreePolicy> bufferData;
{
JSAutoRealm ar(aCx, unwrappedObj);
// Step 1.
MOZ_ASSERT(!JS::IsDetachedArrayBufferObject(aObject));
MOZ_ASSERT(!JS::IsDetachedArrayBufferObject(unwrappedObj));
// Step 3 (Reordered)
size_t bufferLength = JS::GetArrayBufferByteLength(aObject);
bufferLength = JS::GetArrayBufferByteLength(unwrappedObj);
// Step 2 (Reordered)
UniquePtr<void, JS::FreePolicy> bufferData{
JS::StealArrayBufferContents(aCx, aObject)};
bufferData.reset(JS::StealArrayBufferContents(aCx, unwrappedObj));
// Step 4.
if (!JS::DetachArrayBuffer(aCx, aObject)) {
if (!JS::DetachArrayBuffer(aCx, unwrappedObj)) {
return nullptr;
}
}
// Step 5.
return JS::NewArrayBufferWithContents(aCx, bufferLength,

View file

@ -453,7 +453,7 @@ class gfxFontEntry::FontTableBlobData {
private:
// The font table data block
nsTArray<uint8_t> mTableData;
const nsTArray<uint8_t> mTableData;
// The blob destroy function needs to know the owning font entry
// so that it can take the font-entry's lock while modifying the
@ -555,11 +555,17 @@ hb_blob_t* gfxFontEntry::ShareFontTableAndGetBlob(uint32_t aTag,
MOZ_POP_THREAD_SAFETY
AutoWriteLock lock(mLock);
FontTableHashEntry* entry = cache->PutEntry(aTag);
if (MOZ_UNLIKELY(!entry)) { // OOM
return nullptr;
FontTableHashEntry* entry;
if (MOZ_UNLIKELY(entry = cache->GetEntry(aTag))) {
// We must have been racing with another GetFontTable for the same table,
// and it won the race and filled in the entry before we took the lock.
// Ignore `aBuffer` and return a reference to the existing blob.
return entry->GetBlob();
}
entry = cache->PutEntry(aTag);
if (!aBuffer) {
// ensure the entry is null
entry->Clear();

View file

@ -408,7 +408,7 @@ class gfxFontEntry {
// unregisters the table from the font entry.
//
// Pass nullptr for aBuffer to indicate that the table is not present and
// nullptr will be returned. Also returns nullptr on OOM.
// nullptr will be returned.
hb_blob_t* ShareFontTableAndGetBlob(uint32_t aTag, nsTArray<uint8_t>* aTable);
// Get the font's unitsPerEm from the 'head' table, in the case of an

View file

@ -95,17 +95,16 @@ void* js::GetNativeStackBaseImpl() {
pthread_t thread = pthread_self();
pthread_attr_t sattr;
pthread_attr_init(&sattr);
pthread_getattr_np(thread, &sattr);
int rc = pthread_getattr_np(thread, &sattr);
MOZ_RELEASE_ASSERT(rc == 0, "pthread_getattr_np failed");
// stackBase will be the *lowest* address on all architectures.
void* stackBase = nullptr;
size_t stackSize = 0;
int rc = pthread_attr_getstack(&sattr, &stackBase, &stackSize);
if (rc) {
MOZ_CRASH(
"call to pthread_attr_getstack failed, unable to setup stack range for "
"JS");
}
rc = pthread_attr_getstack(&sattr, &stackBase, &stackSize);
MOZ_RELEASE_ASSERT(rc == 0,
"call to pthread_attr_getstack failed, unable to setup "
"stack range for JS");
MOZ_RELEASE_ASSERT(stackBase,
"invalid stack base, unable to setup stack range for JS");
pthread_attr_destroy(&sattr);
@ -148,7 +147,8 @@ void* js::GetNativeStackBaseImpl() {
* FIXME: this function is non-portable;
* other POSIX systems may have different np alternatives
*/
pthread_getattr_np(thread, &sattr);
MOZ_RELEASE_ASSERT(pthread_getattr_np(thread, &sattr) == 0,
"pthread_getattr_np failed");
# endif
void* stackBase = 0;

View file

@ -450,7 +450,6 @@ JS_PUBLIC_API JSObject* JS_GetArrayBufferViewBuffer(JSContext* cx,
bool* isSharedMemory) {
AssertHeapIsIdle();
CHECK_THREAD(cx);
cx->check(obj);
Rooted<ArrayBufferViewObject*> unwrappedView(
cx, obj->maybeUnwrapAs<ArrayBufferViewObject>());

View file

@ -10,7 +10,7 @@
using namespace cdm;
ClearKeyCDM::ClearKeyCDM(Host_10* aHost) {
ClearKeyCDM::ClearKeyCDM(Host_11* aHost) {
mHost = aHost;
mSessionManager = new ClearKeySessionManager(mHost);
}

View file

@ -20,7 +20,7 @@
# include "WMFUtils.h"
#endif
class ClearKeyCDM : public cdm::ContentDecryptionModule_10 {
class ClearKeyCDM final : public cdm::ContentDecryptionModule_11 {
private:
RefPtr<ClearKeySessionManager> mSessionManager;
#ifdef ENABLE_WMF
@ -29,10 +29,10 @@ class ClearKeyCDM : public cdm::ContentDecryptionModule_10 {
bool mIsProtectionQueryEnabled = false;
protected:
cdm::Host_10* mHost;
cdm::Host_11* mHost;
public:
explicit ClearKeyCDM(cdm::Host_10* aHost);
explicit ClearKeyCDM(cdm::Host_11* aHost);
void Initialize(bool aAllowDistinctiveIdentifier, bool aAllowPersistentState,
bool aUseHardwareSecureCodecs) override;

View file

@ -27,7 +27,7 @@
using namespace wmf;
VideoDecoder::VideoDecoder(cdm::Host_10* aHost)
VideoDecoder::VideoDecoder(cdm::Host_11* aHost)
: mHost(aHost), mHasShutdown(false) {
CK_LOGD("VideoDecoder created");
@ -219,9 +219,9 @@ VideoDecoder::SampleToVideoFrame(IMFSample* aSample, int32_t aPictureWidth,
uint32_t srcUVSize = stride * (aFrameHeight + padding) / 4;
uint32_t halfStride = (stride + 1) / 2;
aVideoFrame->SetStride(cdm::VideoPlane::kYPlane, stride);
aVideoFrame->SetStride(cdm::VideoPlane::kUPlane, halfStride);
aVideoFrame->SetStride(cdm::VideoPlane::kVPlane, halfStride);
aVideoFrame->SetStride(cdm::kYPlane, stride);
aVideoFrame->SetStride(cdm::kUPlane, halfStride);
aVideoFrame->SetStride(cdm::kVPlane, halfStride);
aVideoFrame->SetSize(cdm::Size{aPictureWidth, aPictureHeight});
@ -252,17 +252,17 @@ VideoDecoder::SampleToVideoFrame(IMFSample* aSample, int32_t aPictureWidth,
uint8_t* outBuffer = buffer->Data();
aVideoFrame->SetPlaneOffset(cdm::VideoPlane::kYPlane, 0);
aVideoFrame->SetPlaneOffset(cdm::kYPlane, 0);
// Offset of U plane is the size of the Y plane, excluding the padding that
// WMF adds.
uint32_t dstUOffset = stride * aPictureHeight;
aVideoFrame->SetPlaneOffset(cdm::VideoPlane::kUPlane, dstUOffset);
aVideoFrame->SetPlaneOffset(cdm::kUPlane, dstUOffset);
// Offset of the V plane is the size of the Y plane + the size of the U plane,
// excluding any padding WMF adds.
uint32_t dstVOffset = stride * aPictureHeight + (stride * aPictureHeight) / 4;
aVideoFrame->SetPlaneOffset(cdm::VideoPlane::kVPlane, dstVOffset);
aVideoFrame->SetPlaneOffset(cdm::kVPlane, dstVOffset);
// Copy the pixel data, excluding WMF's padding.
memcpy(outBuffer, data, stride * aPictureHeight);

View file

@ -30,7 +30,7 @@
class VideoDecoder : public RefCounted {
public:
explicit VideoDecoder(cdm::Host_10* aHost);
explicit VideoDecoder(cdm::Host_11* aHost);
cdm::Status InitDecode(const cdm::VideoDecoderConfig_2& aConfig);
@ -61,7 +61,7 @@ class VideoDecoder : public RefCounted {
int32_t aFrameHeight,
cdm::VideoFrame* aVideoFrame);
cdm::Host_10* mHost;
cdm::Host_11* mHost;
wmf::AutoPtr<wmf::WMFH264Decoder> mDecoder;
std::queue<wmf::CComPtr<IMFSample>> mOutputQueue;

View file

@ -55,7 +55,7 @@ void* CreateCdmInstance(int cdm_interface_version, const char* key_system,
GetCdmHostFunc get_cdm_host_func, void* user_data) {
CK_LOGE("ClearKey CreateCDMInstance");
if (cdm_interface_version != cdm::ContentDecryptionModule_10::kVersion) {
if (cdm_interface_version != cdm::ContentDecryptionModule_11::kVersion) {
CK_LOGE(
"ClearKey CreateCDMInstance failed due to requesting unsupported "
"version %d.",
@ -81,7 +81,7 @@ void* CreateCdmInstance(int cdm_interface_version, const char* key_system,
}
#endif
cdm::Host_10* host = static_cast<cdm::Host_10*>(
cdm::Host_11* host = static_cast<cdm::Host_11*>(
get_cdm_host_func(cdm_interface_version, user_data));
ClearKeyCDM* clearKey = new ClearKeyCDM(host);

View file

@ -70,10 +70,10 @@ class WMFClearKeyCDM final
};
// In order to reuse existing Gecko clearkey implementation, we need to
// inherit the class `cdm::Host_10`.
// inherit the class `cdm::Host_11`.
// TODO : add a way to assert thread usage. It would be used on MF thread pool
// and the media supervisor thread pool.
class SessionManagerWrapper final : public RefCounted, private cdm::Host_10 {
class SessionManagerWrapper final : public RefCounted, private cdm::Host_11 {
public:
explicit SessionManagerWrapper(WMFClearKeyCDM* aCDM);
@ -94,7 +94,7 @@ class SessionManagerWrapper final : public RefCounted, private cdm::Host_10 {
private:
~SessionManagerWrapper();
// cdm::Host_10
// cdm::Host_11
void OnInitialized(bool aSuccess) override {}
void OnResolveKeyStatusPromise(uint32_t aPromiseId,
cdm::KeyStatus aKeyStatus) override {}
@ -133,6 +133,7 @@ class SessionManagerWrapper final : public RefCounted, private cdm::Host_10 {
void OnDeferredInitializationDone(cdm::StreamType aStreamType,
cdm::Status aDecoderStatus) override {}
void RequestStorageId(uint32_t aVersion) override {}
void ReportMetrics(cdm::MetricName aMetricName, uint64_t aValue) override {}
cdm::Buffer* Allocate(uint32_t aCapacity) override;
void SetTimer(int64_t aDelayMs, void* aContext) override {}
cdm::Time GetCurrentWallTime() override { return 0.0; }
@ -145,7 +146,7 @@ class SessionManagerWrapper final : public RefCounted, private cdm::Host_10 {
// This is a RAII helper class to use ClearKeySessionManager::XXXSession
// methods in a sync style, which is what MFCDM is required.
// ClearKeySessionManager uses cdm::Host_10's OnResolve/RejectXXX as callback
// ClearKeySessionManager uses cdm::Host_11's OnResolve/RejectXXX as callback
// to report whether those function calls relatd with specific promise id
// succeed or not. As we only do temporary session for ClearKey testing, we
// don't need to wait to setup the storage so calling those XXXsession
@ -155,7 +156,7 @@ class SessionManagerWrapper final : public RefCounted, private cdm::Host_10 {
// [How to to use this class, not thread-safe]
// 1. create it on the stack
// 2. use GetPromiseId() to generate a fake promise id for tracking
// 3. in cdm::Host_10's callback function, check promise id to know what
// 3. in cdm::Host_11's callback function, check promise id to know what
// result needs to be set
// 4. check result to see if the session method succeed or not
class SyncResultChecker final {

View file

@ -762,7 +762,8 @@ MFBT_API void MozStackWalk(MozWalkStackCallback aCallback,
# elif defined(ANDROID)
pthread_attr_t sattr;
pthread_attr_init(&sattr);
pthread_getattr_np(pthread_self(), &sattr);
int rc = pthread_getattr_np(pthread_self(), &sattr);
MOZ_RELEASE_ASSERT(rc == 0, "pthread_getattr_np failed");
void* stackBase = stackEnd = nullptr;
size_t stackSize = 0;
if (gettid() != getpid()) {

View file

@ -5,8 +5,8 @@
// Please pull this list from, and only from https://publicsuffix.org/list/public_suffix_list.dat,
// rather than any other VCS sites. Pulling from any other URL is not guaranteed to be supported.
// VERSION: 2025-07-09_15-23-09_UTC
// COMMIT: c38a2f8e8862ad65d91af25dee90002c61329953
// VERSION: 2025-08-08_07-48-13_UTC
// COMMIT: 9375d3415dea4bfcc974248b676bf0f6e6f2daa8
// Instructions on pulling and using this list can be found at https://publicsuffix.org/list/.
@ -6792,7 +6792,7 @@ org.zw
// newGTLDs
// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2025-07-09T15:20:49Z
// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2025-07-16T15:22:08Z
// This list is auto-generated, don't edit it manually.
// aaa : American Automobile Association, Inc.
// https://www.iana.org/domains/root/db/aaa.html
@ -7566,7 +7566,7 @@ claims
// https://www.iana.org/domains/root/db/cleaning.html
cleaning
// click : Internet Naming Company LLC
// click : Waterford Limited
// https://www.iana.org/domains/root/db/click.html
click
@ -11431,7 +11431,7 @@ cloudfront.net
// Amazon Cognito
// Submitted by AWS Security <psl-maintainers@amazon.com>
// Reference: eb4652f0-20f0-43f5-b323-e6cc6ae02ad7
// Reference: e7c02dc1-02f4-4a23-bde3-a8527c830127
auth.af-south-1.amazoncognito.com
auth.ap-east-1.amazoncognito.com
auth.ap-northeast-1.amazoncognito.com
@ -11444,6 +11444,7 @@ auth.ap-southeast-2.amazoncognito.com
auth.ap-southeast-3.amazoncognito.com
auth.ap-southeast-4.amazoncognito.com
auth.ap-southeast-5.amazoncognito.com
auth.ap-southeast-7.amazoncognito.com
auth.ca-central-1.amazoncognito.com
auth.ca-west-1.amazoncognito.com
auth.eu-central-1.amazoncognito.com
@ -11457,6 +11458,7 @@ auth.eu-west-3.amazoncognito.com
auth.il-central-1.amazoncognito.com
auth.me-central-1.amazoncognito.com
auth.me-south-1.amazoncognito.com
auth.mx-central-1.amazoncognito.com
auth.sa-east-1.amazoncognito.com
auth.us-east-1.amazoncognito.com
auth-fips.us-east-1.amazoncognito.com
@ -11582,9 +11584,41 @@ emrstudio-prod.us-west-2.amazonaws.com
// Amazon Managed Workflows for Apache Airflow
// Submitted by AWS Security <psl-maintainers@amazon.com>
// Reference: f5ea5d0a-ec6a-4f23-ac1c-553fbff13f5c
// Reference: 2f697e23-58d6-4b97-be6b-77a26e811dad
*.airflow.af-south-1.on.aws
*.airflow.ap-east-1.on.aws
*.airflow.ap-northeast-1.on.aws
*.airflow.ap-northeast-2.on.aws
*.airflow.ap-northeast-3.on.aws
*.airflow.ap-south-1.on.aws
*.airflow.ap-south-2.on.aws
*.airflow.ap-southeast-1.on.aws
*.airflow.ap-southeast-2.on.aws
*.airflow.ap-southeast-3.on.aws
*.airflow.ap-southeast-4.on.aws
*.airflow.ap-southeast-5.on.aws
*.airflow.ca-central-1.on.aws
*.airflow.ca-west-1.on.aws
*.airflow.eu-central-1.on.aws
*.airflow.eu-central-2.on.aws
*.airflow.eu-north-1.on.aws
*.airflow.eu-south-1.on.aws
*.airflow.eu-south-2.on.aws
*.airflow.eu-west-1.on.aws
*.airflow.eu-west-2.on.aws
*.airflow.eu-west-3.on.aws
*.airflow.il-central-1.on.aws
*.airflow.me-central-1.on.aws
*.airflow.me-south-1.on.aws
*.airflow.sa-east-1.on.aws
*.airflow.us-east-1.on.aws
*.airflow.us-east-2.on.aws
*.airflow.us-west-1.on.aws
*.airflow.us-west-2.on.aws
*.cn-north-1.airflow.amazonaws.com.cn
*.cn-northwest-1.airflow.amazonaws.com.cn
*.airflow.cn-north-1.on.amazonwebservices.com.cn
*.airflow.cn-northwest-1.on.amazonwebservices.com.cn
*.af-south-1.airflow.amazonaws.com
*.ap-east-1.airflow.amazonaws.com
*.ap-northeast-1.airflow.amazonaws.com
@ -11596,6 +11630,7 @@ emrstudio-prod.us-west-2.amazonaws.com
*.ap-southeast-2.airflow.amazonaws.com
*.ap-southeast-3.airflow.amazonaws.com
*.ap-southeast-4.airflow.amazonaws.com
*.ap-southeast-5.airflow.amazonaws.com
*.ca-central-1.airflow.amazonaws.com
*.ca-west-1.airflow.amazonaws.com
*.eu-central-1.airflow.amazonaws.com
@ -12173,16 +12208,43 @@ awsglobalaccelerator.com
// AWS Transfer Family web apps
// Submitted by AWS Security <psl-maintainers@amazon.com>
// Reference: 67e9cfe6-ac57-49c7-b197-6652711c8e8d
// Reference: 57a658c4-8899-410c-aa24-5b01e4a178d2
transfer-webapp.af-south-1.on.aws
transfer-webapp.ap-east-1.on.aws
transfer-webapp.ap-northeast-1.on.aws
transfer-webapp.ap-northeast-2.on.aws
transfer-webapp.ap-northeast-3.on.aws
transfer-webapp.ap-south-1.on.aws
transfer-webapp.ap-south-2.on.aws
transfer-webapp.ap-southeast-1.on.aws
transfer-webapp.ap-southeast-2.on.aws
transfer-webapp.ap-southeast-3.on.aws
transfer-webapp.ap-southeast-4.on.aws
transfer-webapp.ap-southeast-5.on.aws
transfer-webapp.ca-central-1.on.aws
transfer-webapp.ca-west-1.on.aws
transfer-webapp.eu-central-1.on.aws
transfer-webapp.eu-central-2.on.aws
transfer-webapp.eu-north-1.on.aws
transfer-webapp.eu-south-1.on.aws
transfer-webapp.eu-south-2.on.aws
transfer-webapp.eu-west-1.on.aws
transfer-webapp.eu-west-2.on.aws
transfer-webapp.eu-west-3.on.aws
transfer-webapp.il-central-1.on.aws
transfer-webapp.me-central-1.on.aws
transfer-webapp.me-south-1.on.aws
transfer-webapp.sa-east-1.on.aws
transfer-webapp.us-east-1.on.aws
transfer-webapp.us-east-2.on.aws
transfer-webapp.us-gov-east-1.on.aws
transfer-webapp-fips.us-gov-east-1.on.aws
transfer-webapp.us-gov-west-1.on.aws
transfer-webapp-fips.us-gov-west-1.on.aws
transfer-webapp.us-west-1.on.aws
transfer-webapp.us-west-2.on.aws
transfer-webapp.cn-north-1.on.amazonwebservices.com.cn
transfer-webapp.cn-northwest-1.on.amazonwebservices.com.cn
// eero
// Submitted by Yue Kang <eero-dynamic-dns@amazon.com>
@ -12711,9 +12773,6 @@ deta.dev
// Dfinity Foundation: https://dfinity.org/
// Submitted by Dfinity Team <domains@dfinity.org>
caffeine.ai
id.ai
icp-api.io
icp0.io
*.raw.icp0.io
icp1.io
@ -13756,6 +13815,11 @@ ravendb.community
development.run
ravendb.run
// HiDNS : https://www.hidoha.net
// Submitted by ifeng <admin@hidoha.net>
hidns.co
hidns.vip
// home.pl S.A. : https://home.pl
// Submitted by Krzysztof Wolski <krzysztof.wolski@home.eu>
homesklep.pl
@ -13773,7 +13837,6 @@ hoplix.shop
// HOSTBIP REGISTRY : https://www.hostbip.com/
// Submitted by Atanunu Igbunuroghene <publicsuffixlist@hostbip.com>
orx.biz
biz.gl
biz.ng
co.biz.ng
dl.biz.ng
@ -14091,6 +14154,11 @@ krellian.net
// Submitted by DisposaBoy <security@oya.to>
oya.to
// KV GmbH : https://www.nic.co.de
// Submitted by KV GmbH <registry@kv-gmbh.de>
// Abuse reports to <registry@kv-gmbh.de>
co.de
// Laravel Holdings, Inc. : https://laravel.com
// Submitted by André Valentin <security@laravel.com>
laravel.cloud
@ -14193,6 +14261,8 @@ servers.run
// Submitted by Fabian Hedin <security@lovable.dev>
lovable.app
lovableproject.com
lovable.run
lovable.sh
// LubMAN UMCS Sp. z o.o : https://lubman.pl/
// Submitted by Ireneusz Maliszewski <ireneusz.maliszewski@lubman.pl>
@ -15618,7 +15688,6 @@ pro.typeform.com
// Uberspace : https://uberspace.de
// Submitted by Moritz Werner <mwerner@jonaspasche.com>
*.uberspace.de
uber.space
// UDR Limited : http://www.udr.hk.com
@ -15760,10 +15829,11 @@ box.ca
// Submitted by Kidd Hustle <kiddhustle@wiardweb.com>
pages.wiardweb.com
// Wikimedia Labs : https://wikitech.wikimedia.org
// Submitted by Arturo Borrero Gonzalez <aborrero@wikimedia.org>
// Wikimedia Foundation : https://wikitech.wikimedia.org
// Submitted by Timo Tijhof <noc@wikimedia.org>
toolforge.org
wmcloud.org
beta.wmcloud.org
wmflabs.org
// William Harrison : https://wharrison.com.au

View file

@ -107,6 +107,10 @@ static const char kEntrust_net_Premium_2048_Secure_Server_CAFingerprint[] =
static const char kFacebookBackupFingerprint[] =
"q4PO2G2cbkZhZ82+JgmRUyGMoAeozA+BSXVXQWB8XWQ=";
/* GOOGLE_PIN_AE1_GoogleTrustServices */
static const char kGOOGLE_PIN_AE1_GoogleTrustServicesFingerprint[] =
"IGnQeIPjbxiR+JteR7AkUXl7pV+19BT4x3o15saZBNE=";
/* GOOGLE_PIN_DigiCertECCSecureServerCA */
static const char kGOOGLE_PIN_DigiCertECCSecureServerCAFingerprint[] =
"PZXN3lRAy+8tBKk2Ox6F7jIlnzr2Yzmwqc3JnyfXoCw=";
@ -115,6 +119,46 @@ static const char kGOOGLE_PIN_DigiCertECCSecureServerCAFingerprint[] =
static const char kGOOGLE_PIN_SymantecClass3EVG3Fingerprint[] =
"gMxWOrX4PMQesK9qFNbYBxjBfjUvlkn/vN1n+L9lE5E=";
/* GOOGLE_PIN_WE1_GoogleTrustServices */
static const char kGOOGLE_PIN_WE1_GoogleTrustServicesFingerprint[] =
"kIdp6NNEd8wsugYyyIYFsi1ylMCED3hZbSR8ZFsa/A4=";
/* GOOGLE_PIN_WE2_GoogleTrustServices */
static const char kGOOGLE_PIN_WE2_GoogleTrustServicesFingerprint[] =
"vh78KSg1Ry4NaqGDV10w/cTb9VH3BQUZoCWNa93W/EY=";
/* GOOGLE_PIN_WE3_GoogleTrustServices */
static const char kGOOGLE_PIN_WE3_GoogleTrustServicesFingerprint[] =
"daBIAnKdRIX3bqM85I6We7wBUh0DPycNFBMvYkXGX2Q=";
/* GOOGLE_PIN_WE4_GoogleTrustServices */
static const char kGOOGLE_PIN_WE4_GoogleTrustServicesFingerprint[] =
"O5TQDB/wa4SkRjBrQL2Aq9CG317H9MDDgpTVcrpJDa4=";
/* GOOGLE_PIN_WE5_GoogleTrustServices */
static const char kGOOGLE_PIN_WE5_GoogleTrustServicesFingerprint[] =
"8yZxLgpR8EbO8ANRrWKAzIzz9XdlSUgtYPkXKYUlGSY=";
/* GOOGLE_PIN_WR1_GoogleTrustServices */
static const char kGOOGLE_PIN_WR1_GoogleTrustServicesFingerprint[] =
"yDu9og255NN5GEf+Bwa9rTrqFQ0EydZ0r1FCh9TdAW4=";
/* GOOGLE_PIN_WR2_GoogleTrustServices */
static const char kGOOGLE_PIN_WR2_GoogleTrustServicesFingerprint[] =
"YPtHaftLw6/0vnc2BnNKGF54xiCA28WFcccjkA4ypCM=";
/* GOOGLE_PIN_WR3_GoogleTrustServices */
static const char kGOOGLE_PIN_WR3_GoogleTrustServicesFingerprint[] =
"OdSlmQD9NWJh4EbcOHBxkhygPwNSwA9Q91eounfbcoE=";
/* GOOGLE_PIN_WR4_GoogleTrustServices */
static const char kGOOGLE_PIN_WR4_GoogleTrustServicesFingerprint[] =
"hZe1OerqJ1Pnq6F4N0gVjjpHqm037Ndf4aLLVpZZdAE=";
/* GOOGLE_PIN_WR5_GoogleTrustServices */
static const char kGOOGLE_PIN_WR5_GoogleTrustServicesFingerprint[] =
"/RoweMyX8j8/fAaaeAIwzhWXigZDrh/J2BBJaHrjX90=";
/* GTS Root R1 */
static const char kGTS_Root_R1Fingerprint[] =
"hxqRlPTu1bMS/0DITB1SSu0vd4u/8l8TjPgfaAp63Gc=";
@ -277,12 +321,23 @@ static const StaticFingerprints kPinset_test = {
};
static const char* const kPinset_google_Data[] = {
kGOOGLE_PIN_WR5_GoogleTrustServicesFingerprint,
kGOOGLE_PIN_WE5_GoogleTrustServicesFingerprint,
kGlobalSign_ECC_Root_CA___R4Fingerprint,
kGOOGLE_PIN_AE1_GoogleTrustServicesFingerprint,
kGoogleBackup2048Fingerprint,
kGOOGLE_PIN_WE4_GoogleTrustServicesFingerprint,
kGOOGLE_PIN_WR3_GoogleTrustServicesFingerprint,
kGTS_Root_R3Fingerprint,
kGTS_Root_R2Fingerprint,
kGOOGLE_PIN_WR2_GoogleTrustServicesFingerprint,
kGOOGLE_PIN_WE3_GoogleTrustServicesFingerprint,
kGOOGLE_PIN_WR4_GoogleTrustServicesFingerprint,
kGTS_Root_R1Fingerprint,
kGOOGLE_PIN_WE1_GoogleTrustServicesFingerprint,
kGTS_Root_R4Fingerprint,
kGOOGLE_PIN_WE2_GoogleTrustServicesFingerprint,
kGOOGLE_PIN_WR1_GoogleTrustServicesFingerprint,
};
static const StaticFingerprints kPinset_google = {
sizeof(kPinset_google_Data) / sizeof(const char*),
@ -736,4 +791,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1760959658369000);
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1763379032408000);

File diff suppressed because it is too large Load diff

View file

@ -2,219 +2,291 @@
"data": [
{
"name": "Edge",
"schema": 1751069103311,
"schema": 1754784303244,
"status": "planned",
"version": "142",
"browserid": "edge",
"id": "7d644a9d-4167-44d0-b58a-165beedf43e5",
"last_modified": 1754902587193
},
{
"name": "Edge",
"schema": 1754784303188,
"status": "nightly",
"version": "141",
"browserid": "edge",
"id": "1276177b-8e2c-4677-9839-c39cdb272d9f",
"last_modified": 1751266171953
"last_modified": 1754902587190
},
{
"name": "Edge",
"schema": 1751069103253,
"status": "nightly",
"schema": 1754784303129,
"status": "beta",
"version": "140",
"browserid": "edge",
"id": "2f6ded78-f30e-4477-9175-c32d040041c7",
"last_modified": 1751266171946
"last_modified": 1754902587186
},
{
"name": "Edge",
"schema": 1751069103200,
"status": "beta",
"schema": 1754784303073,
"status": "current",
"version": "139",
"browserid": "edge",
"id": "c652a9a5-3a1c-4272-8a52-68dd4e9ae1b4",
"last_modified": 1751266171943
},
{
"name": "Edge",
"schema": 1751069103137,
"status": "current",
"version": "138",
"browserid": "edge",
"id": "c9aa191e-ce6c-4f14-89b3-67877f64bc92",
"last_modified": 1751266171940
"last_modified": 1754902587183
},
{
"name": "WebView Android",
"schema": 1750809904832,
"schema": 1754438705864,
"status": "planned",
"version": "142",
"browserid": "webview_android",
"id": "d1917e2a-614b-4b6c-8bb4-683132e1fd64",
"last_modified": 1754642891103
},
{
"name": "Chrome",
"schema": 1754438705284,
"status": "planned",
"version": "142",
"browserid": "chrome",
"id": "80f03197-a17b-4032-ba47-0e81e04ffce2",
"last_modified": 1754642891100
},
{
"name": "Chrome Android",
"schema": 1754438705561,
"status": "planned",
"version": "142",
"browserid": "chrome_android",
"id": "0b5cf19b-6816-4a96-aeb8-de25f776b025",
"last_modified": 1754642891097
},
{
"name": "IceCat for Android",
"schema": 1753574703585,
"status": "planned",
"version": "144",
"browserid": "icecat_android",
"id": "6e20e090-5795-4f55-bfe3-b202305eedee",
"last_modified": 1754642891094
},
{
"name": "IceCat",
"schema": 1753574703283,
"status": "planned",
"version": "144",
"browserid": "icecat",
"id": "759d8212-1e45-4ccc-ac65-75ecfc260633",
"last_modified": 1754642891090
},
{
"name": "Safari on iOS",
"schema": 1751673903549,
"status": "beta",
"version": "18.6",
"browserid": "safari_ios",
"id": "3993a35c-f47d-4ad1-9e8c-5127b8390c0c",
"last_modified": 1754642891087
},
{
"name": "Safari",
"schema": 1751673903488,
"status": "beta",
"version": "18.6",
"browserid": "safari",
"id": "9c6309f8-1f2e-41fd-8728-3d8211dac298",
"last_modified": 1754642891084
},
{
"name": "WebView on iOS",
"schema": 1751673903634,
"status": "beta",
"version": "18.6",
"browserid": "webview_ios",
"id": "3fc4e708-1847-41de-a640-45cabbf41d5a",
"last_modified": 1754642891081
},
{
"name": "Opera",
"schema": 1751673903426,
"status": "nightly",
"version": "122",
"browserid": "opera",
"id": "25658331-55b6-4129-8e2d-c59ca95df3f7",
"last_modified": 1754642891078
},
{
"name": "WebView Android",
"schema": 1754438705809,
"status": "nightly",
"version": "141",
"browserid": "webview_android",
"id": "63e64099-e7d1-4b27-9a5d-ae173595a61f",
"last_modified": 1750835286636
"last_modified": 1754642891075
},
{
"name": "IceCat for Android",
"schema": 1750809904539,
"status": "planned",
"schema": 1753574703522,
"status": "nightly",
"version": "143",
"browserid": "icecat_android",
"id": "1202f99c-4161-4075-a5f5-01dcb1734bff",
"last_modified": 1750835286632
"last_modified": 1754642891072
},
{
"name": "IceCat",
"schema": 1750809904149,
"status": "planned",
"schema": 1753574703224,
"status": "nightly",
"version": "143",
"browserid": "icecat",
"id": "8c64af12-6643-49a8-bf55-f3941779399c",
"last_modified": 1750835286629
"last_modified": 1754642891069
},
{
"name": "Chrome Android",
"schema": 1750809903778,
"status": "planned",
"schema": 1754438705505,
"status": "nightly",
"version": "141",
"browserid": "chrome_android",
"id": "1fccf4ba-14fb-4641-b9c9-5b02bbb528a5",
"last_modified": 1750835286626
"last_modified": 1754642891066
},
{
"name": "Chrome",
"schema": 1750809903446,
"status": "planned",
"schema": 1754438705225,
"status": "nightly",
"version": "141",
"browserid": "chrome",
"id": "7cdd8e9c-d3fc-47b3-bfcc-f63ddfccb7fc",
"last_modified": 1750835286622
"last_modified": 1754642891063
},
{
"name": "IceCat for Android",
"schema": 1750809904473,
"status": "nightly",
"schema": 1753574703462,
"status": "beta",
"version": "142",
"browserid": "icecat_android",
"id": "78d60df0-cb7e-4949-9917-ed8fdc503382",
"last_modified": 1750835286600
"last_modified": 1754642891060
},
{
"name": "Chrome Android",
"schema": 1750809903707,
"status": "nightly",
"schema": 1754438705449,
"status": "beta",
"version": "140",
"browserid": "chrome_android",
"id": "794cc316-0785-4962-847c-f31ac285f847",
"last_modified": 1750835286596
"last_modified": 1754642891057
},
{
"name": "WebView Android",
"schema": 1750809904778,
"status": "nightly",
"schema": 1754438705751,
"status": "beta",
"version": "140",
"browserid": "webview_android",
"id": "7bbb223e-ada4-4f53-babb-b93a73927329",
"last_modified": 1750835286593
"last_modified": 1754642891054
},
{
"name": "Chrome",
"schema": 1750809903376,
"status": "nightly",
"schema": 1754438705163,
"status": "beta",
"version": "140",
"browserid": "chrome",
"id": "60172b96-7711-458b-9b0e-2dd55255bf05",
"last_modified": 1750835286590
"last_modified": 1754642891051
},
{
"name": "IceCat",
"schema": 1750809904090,
"status": "nightly",
"schema": 1753574703165,
"status": "beta",
"version": "142",
"browserid": "icecat",
"id": "a5323a0e-8201-4c4b-a5fd-ff89431cc98b",
"last_modified": 1750835286587
"last_modified": 1754642891048
},
{
"name": "WebView Android",
"schema": 1750809904709,
"status": "beta",
"schema": 1754438705695,
"status": "current",
"version": "139",
"browserid": "webview_android",
"id": "fdb5c123-2409-4e93-bc2c-e9d482c3eabf",
"last_modified": 1750835286583
"last_modified": 1754642891044
},
{
"name": "Chrome",
"schema": 1750809903304,
"status": "beta",
"schema": 1754438705100,
"status": "current",
"version": "139",
"browserid": "chrome",
"id": "6ffd90da-55f8-4759-8049-2b3696d34d42",
"last_modified": 1750835286580
"last_modified": 1754642891042
},
{
"name": "IceCat",
"schema": 1750809904038,
"status": "beta",
"schema": 1753574703101,
"status": "current",
"version": "141",
"browserid": "icecat",
"id": "e6ac475d-0038-451e-b875-e71a26f26c1f",
"last_modified": 1750835286577
"last_modified": 1754642891039
},
{
"name": "Chrome Android",
"schema": 1750809903644,
"status": "beta",
"schema": 1754438705392,
"status": "current",
"version": "139",
"browserid": "chrome_android",
"id": "6dc0e4cb-560c-46ad-996f-2e65cd9a78bf",
"last_modified": 1750835286574
"last_modified": 1754642891036
},
{
"name": "IceCat for Android",
"schema": 1750809904418,
"status": "beta",
"schema": 1753574703400,
"status": "current",
"version": "141",
"browserid": "icecat_android",
"id": "e2a35b06-f07e-417d-98c6-f9eafdff546b",
"last_modified": 1750835286571
"last_modified": 1754642891033
},
{
"name": "WebView Android",
"schema": 1750809904659,
"status": "current",
"version": "138",
"browserid": "webview_android",
"id": "ca0f7fe1-7bf2-4154-ab36-d759e08d0276",
"last_modified": 1750835286568
"name": "Opera",
"schema": 1751673903361,
"status": "beta",
"version": "121",
"browserid": "opera",
"id": "f6db5e03-957c-4d2b-a74b-d537ea26be3f",
"last_modified": 1754642891027
},
{
"name": "Chrome Android",
"schema": 1750809903588,
"name": "Opera",
"schema": 1751673903293,
"status": "current",
"version": "138",
"browserid": "chrome_android",
"id": "485be132-bf7e-4586-af0f-8e731365b8c8",
"last_modified": 1750835286565
"version": "120",
"browserid": "opera",
"id": "24abaee4-eb98-4eee-8b27-209a3dedac71",
"last_modified": 1754642891024
},
{
"name": "IceCat for Android",
"schema": 1750809904356,
"status": "current",
"schema": 1753574703338,
"status": "esr",
"version": "140",
"browserid": "icecat_android",
"id": "29671e58-5233-4969-8f3a-b3208e3b8f17",
"last_modified": 1750835286562
"last_modified": 1754642891016
},
{
"name": "IceCat",
"schema": 1750809903978,
"status": "current",
"schema": 1753496133120,
"status": "esr",
"version": "140",
"browserid": "icecat",
"id": "9949da65-f6be-41f4-9c9d-73bc27b4d2a0",
"last_modified": 1750835286558
},
{
"name": "Chrome",
"schema": 1750809903230,
"status": "current",
"version": "138",
"browserid": "chrome",
"id": "ddeb0464-e5e9-4b00-816f-211de9a4e818",
"last_modified": 1750835286555
"last_modified": 1754642891013
},
{
"name": "Opera Android",
@ -297,33 +369,6 @@
"id": "1f2765cf-a177-4249-b5f9-fdf271727bb7",
"last_modified": 1748854785996
},
{
"name": "Opera",
"schema": 1747440304496,
"status": "nightly",
"version": "121",
"browserid": "opera",
"id": "f6db5e03-957c-4d2b-a74b-d537ea26be3f",
"last_modified": 1747642859915
},
{
"name": "Opera",
"schema": 1747440304433,
"status": "beta",
"version": "120",
"browserid": "opera",
"id": "24abaee4-eb98-4eee-8b27-209a3dedac71",
"last_modified": 1747642859900
},
{
"name": "Opera",
"schema": 1747440304368,
"status": "current",
"version": "119",
"browserid": "opera",
"id": "06763118-b650-4937-8d4c-55de017faa53",
"last_modified": 1747642859896
},
{
"name": "Node.js",
"schema": 1747181110151,
@ -352,5 +397,5 @@
"last_modified": 1665656484764
}
],
"timestamp": 1751266171953
"timestamp": 1754902587193
}

View file

@ -4287,7 +4287,7 @@
},
"id": "04e99a38-13ee-47d8-8aa4-64482b3dea99",
"identifier": "ddg",
"last_modified": 1756,
"last_modified": 1757,
"recordType": "engine",
"schema": 1718698362015,
"variants": [
@ -4301,7 +4301,7 @@
{
"globalDefault": "ddg",
"id": "f3891684-2348-4e7a-9765-0c5d2d0ab1b9",
"last_modified": 1755,
"last_modified": 1756,
"recordType": "defaultEngines",
"schema": 1702901837584,
"specificDefaults": []

View file

@ -361,7 +361,7 @@
"id": "wikipedia@search.mozilla.org"
},
"id": "3f3beb1d-e32e-40a4-b6ed-56741803e1d8",
"last_modified": 1756
"last_modified": 1757
},
{
"params": {
@ -404,8 +404,8 @@
"id": "ddg@search.mozilla.org"
},
"id": "c0b26c0e-63e6-4235-b2ce-5f16b6a8bf87",
"last_modified": 1755
"last_modified": 1756
}
],
"timestamp": 1756
"timestamp": 1757
}

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,869 @@
{
"data": [
{
"name": "model.enja.intgemm.alphas.bin",
"schema": 1753211565728,
"toLang": "ja",
"version": "2.2",
"fileType": "model",
"fromLang": "en",
"attachment": {
"hash": "8b0206fb47ecad88870f0a43cf907213fe354b14b746d4d53a8c5221aba2c34a",
"size": 43849787,
"filename": "model.enja.intgemm.alphas.bin",
"location": "main-workspace/translations-models/b20957ca-7001-4bb1-9609-3a88c22456fc.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "cbb59785-6779-46f0-8c6a-211d6da17712",
"last_modified": 1753213325774
},
{
"name": "trgvocab.enja.spm",
"schema": 1753211592191,
"toLang": "ja",
"version": "2.2",
"fileType": "trgvocab",
"fromLang": "en",
"attachment": {
"hash": "3b3d9f8f3a034d98d0a476f1794fa79c01e4e98a967ceb6777a66ba2d03ec1e1",
"size": 827144,
"filename": "trgvocab.enja.spm",
"location": "main-workspace/translations-models/950ee1e7-7829-4822-a0dd-89137cb56914.spm",
"mimetype": "text/plain"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "b7458df3-693c-4e2a-a747-6a95d7c1ee16",
"last_modified": 1753213325766
},
{
"name": "lex.50.50.enru.s2t.bin",
"schema": 1753211506309,
"toLang": "ru",
"version": "2.1",
"fileType": "lex",
"fromLang": "en",
"attachment": {
"hash": "4d91839726b960e70b6d05c53d0cffd16262832b1c0e1ea99d66f412dcc6a239",
"size": 2774540,
"filename": "lex.50.50.enru.s2t.bin",
"location": "main-workspace/translations-models/e88cc45c-0e0b-45d3-a957-8d1ba3a9b5aa.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "e2879167-64d6-4e4f-b42b-470ce160614c",
"last_modified": 1753213325759
},
{
"name": "vocab.zhen.spm",
"schema": 1753211664028,
"toLang": "en",
"version": "2.1",
"fileType": "vocab",
"fromLang": "zh-Hans",
"attachment": {
"hash": "dff594318ab7d8b7b60b844ab98ebe6b932ae8045fab15235404c787715965b3",
"size": 1359697,
"filename": "vocab.zhen.spm",
"location": "main-workspace/translations-models/17ff5d42-6d4c-42f8-ad3c-b8042b5bafa7.spm",
"mimetype": "text/plain"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "1a4f9d3a-5bd4-4f95-b131-2498f7881479",
"last_modified": 1753213325754
},
{
"name": "model.zhen.intgemm.alphas.bin",
"schema": 1753211657032,
"toLang": "en",
"version": "2.1",
"fileType": "model",
"fromLang": "zh-Hans",
"attachment": {
"hash": "5cd149601802fc8a18124a1c1306144dbbedc058630c4ddb2d53aa76fa9c7c06",
"size": 43977787,
"filename": "model.zhen.intgemm.alphas.bin",
"location": "main-workspace/translations-models/715efbde-c974-4696-981a-83c0c5f82ad5.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "059aad51-2c2a-47da-8a41-6087f4c0af04",
"last_modified": 1753213325749
},
{
"name": "lex.50.50.zhen.s2t.bin",
"schema": 1753211645124,
"toLang": "en",
"version": "2.1",
"fileType": "lex",
"fromLang": "zh-Hans",
"attachment": {
"hash": "8524dd4c93ffd7f0ae7be32f77a7c14fea7cdbbebe34ea6ad0ec368d5ddd8b13",
"size": 9219192,
"filename": "lex.50.50.zhen.s2t.bin",
"location": "main-workspace/translations-models/ae5f53d2-59ec-4aad-944d-999e50d6a65c.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "0e4e57bd-95b4-4c37-b24a-1b38ba634b8b",
"last_modified": 1753213325742
},
{
"name": "model.koen.intgemm.alphas.bin",
"schema": 1753211638260,
"toLang": "en",
"version": "2.1",
"fileType": "model",
"fromLang": "ko",
"attachment": {
"hash": "7cb30cbc0a86e242084756445268a2346136771c92b884d9b4ebb077f67d5507",
"size": 43977787,
"filename": "model.koen.intgemm.alphas.bin",
"location": "main-workspace/translations-models/bf6d1f85-351f-4934-934d-8a7b0d118270.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "56981ef1-5afa-407c-8233-c0e7ceb3a812",
"last_modified": 1753213325735
},
{
"name": "lex.50.50.koen.s2t.bin",
"schema": 1753211631975,
"toLang": "en",
"version": "2.1",
"fileType": "lex",
"fromLang": "ko",
"attachment": {
"hash": "b26291f063ce216a74239275f0485534a38111203e59d42a2a56ba62d6eeb196",
"size": 8617516,
"filename": "lex.50.50.koen.s2t.bin",
"location": "main-workspace/translations-models/66a51334-41dd-4f08-bd22-6016035d6904.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "94dcbfef-23bb-4f45-b7e3-eee4a850e354",
"last_modified": 1753213325729
},
{
"name": "lex.50.50.jaen.s2t.bin",
"schema": 1753205001167,
"toLang": "en",
"version": "2.1",
"fileType": "lex",
"fromLang": "ja",
"attachment": {
"hash": "525f412f0d210536c2933c78ae395fa0bf2b5ee6cc5dda61ebc2e79410ebaee4",
"size": 9348172,
"filename": "lex.50.50.jaen.s2t.bin",
"location": "main-workspace/translations-models/4e6b3270-8a2f-491d-b717-f99749328622.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "6e05f7f9-b06f-4ae1-90f7-ef56d965ed67",
"last_modified": 1753213325723
},
{
"name": "lex.50.50.enzh.s2t.bin",
"schema": 1753211556573,
"toLang": "zh-Hans",
"version": "2.1",
"fileType": "lex",
"fromLang": "en",
"attachment": {
"hash": "4a5e5827788060f1d718a8132b69440929387514a045796e9b77f935db68c055",
"size": 6506248,
"filename": "lex.50.50.enzh.s2t.bin",
"location": "main-workspace/translations-models/28707551-d7ae-4825-ae68-fc21de670332.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "c2e36c44-0f0f-4d8e-88e5-9e0eb42ea2dc",
"last_modified": 1753213325717
},
{
"name": "vocab.koen.spm",
"schema": 1753211609773,
"toLang": "en",
"version": "2.1",
"fileType": "vocab",
"fromLang": "ko",
"attachment": {
"hash": "1c72b740ab793cdc3a8f16913dd6b4e806c77421077dd2d85edeb7be38418598",
"size": 1410063,
"filename": "vocab.koen.spm",
"location": "main-workspace/translations-models/409950da-3a7f-4a0a-bd3e-9f655d7150eb.spm",
"mimetype": "text/plain"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "ef9bd20f-c906-45ca-b84f-4bf45f1bb97d",
"last_modified": 1753213325711
},
{
"name": "trgvocab.enzh.spm",
"schema": 1753211534451,
"toLang": "zh-Hans",
"version": "2.1",
"fileType": "trgvocab",
"fromLang": "en",
"attachment": {
"hash": "aded6993c36e440284d11cec3f6b8aef9c0e43188a772d80be342a713adf223d",
"size": 772004,
"filename": "trgvocab.enzh.spm",
"location": "main-workspace/translations-models/fea238ef-fb47-4aaf-b463-5d314a306ee6.spm",
"mimetype": "text/plain"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "cc0610c4-48c9-420f-981a-8b3c3b24a2bd",
"last_modified": 1753213325705
},
{
"name": "vocab.enru.spm",
"schema": 1753211527241,
"toLang": "ru",
"version": "2.1",
"fileType": "vocab",
"fromLang": "en",
"attachment": {
"hash": "56ee63e14e8cb926c394242adc3ed7cc602644c3d33058cff2ce2959d52a6258",
"size": 904455,
"filename": "vocab.enru.spm",
"location": "main-workspace/translations-models/568807dd-9620-4c4d-a0b5-d651d64c0ab0.spm",
"mimetype": "text/plain"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "07333d13-cbf8-4960-970a-49513b3722ca",
"last_modified": 1753213325699
},
{
"name": "trgvocab.enko.spm",
"schema": 1753211482971,
"toLang": "ko",
"version": "2.1",
"fileType": "trgvocab",
"fromLang": "en",
"attachment": {
"hash": "2ece21b28dd7022d36127d17423a74dabf544787dfc1cf614f7b565f93a4a1d3",
"size": 815353,
"filename": "trgvocab.enko.spm",
"location": "main-workspace/translations-models/bef3bc40-bc91-4739-981d-c82a9d22fd31.spm",
"mimetype": "text/plain"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "33260652-9a66-4129-9a51-7ad408cddc36",
"last_modified": 1753213325692
},
{
"name": "model.enzh.intgemm.alphas.bin",
"schema": 1753211550167,
"toLang": "zh-Hans",
"version": "2.1",
"fileType": "model",
"fromLang": "en",
"attachment": {
"hash": "f102e513798f5c5e61621e58b08d1c8aa535189a47befdef5613d5b058983fed",
"size": 43849787,
"filename": "model.enzh.intgemm.alphas.bin",
"location": "main-workspace/translations-models/9b99b1f6-34fc-4515-8a32-41d4f1dca3dd.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "6c87da7b-57e7-4762-bf1b-ed5166f06299",
"last_modified": 1753213325686
},
{
"name": "model.jaen.intgemm.alphas.bin",
"schema": 1753211460110,
"toLang": "en",
"version": "2.1",
"fileType": "model",
"fromLang": "ja",
"attachment": {
"hash": "3a603e20bfe1be86071913f9e23ab5129075bc0a8490151020ac4821e4f17302",
"size": 43977787,
"filename": "model.jaen.intgemm.alphas.bin",
"location": "main-workspace/translations-models/2b066368-11b5-4cee-92e8-e6156b334f80.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "01236519-4cdc-46e9-aee3-e3dc20cac500",
"last_modified": 1753213325681
},
{
"name": "lex.50.50.enko.s2t.bin",
"schema": 1753211491920,
"toLang": "ko",
"version": "2.1",
"fileType": "lex",
"fromLang": "en",
"attachment": {
"hash": "96efba97d4bb93ab362e5569bea0f115184d2f68d63b67305ee663c18e32fbeb",
"size": 6449612,
"filename": "lex.50.50.enko.s2t.bin",
"location": "main-workspace/translations-models/85738400-bea4-4284-ba4c-e47e465f5331.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "2ebbdb35-6fb7-48db-9d21-6897f1c5d5e5",
"last_modified": 1753213325676
},
{
"name": "srcvocab.enko.spm",
"schema": 1753211499145,
"toLang": "ko",
"version": "2.1",
"fileType": "srcvocab",
"fromLang": "en",
"attachment": {
"hash": "8d4e3141868efd410eb86c2b60d41aa6bc6b46e4c4b2c0b85e3792493c69d802",
"size": 791280,
"filename": "srcvocab.enko.spm",
"location": "main-workspace/translations-models/3d9dfbda-cd4f-445e-a69b-19e21e071385.spm",
"mimetype": "text/plain"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "646071ce-a130-43d1-a623-7212a16c8697",
"last_modified": 1753213325670
},
{
"name": "vocab.jaen.spm",
"schema": 1753211437624,
"toLang": "en",
"version": "2.1",
"fileType": "vocab",
"fromLang": "ja",
"attachment": {
"hash": "5cb217758bae05877bb3f0c2f612e4e7c1e4cb03c10db11f4a47098d7ae62919",
"size": 1443222,
"filename": "vocab.jaen.spm",
"location": "main-workspace/translations-models/6f4898e3-ebaa-4a79-a1af-93a4f65b96fa.spm",
"mimetype": "text/plain"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "10d90b91-c666-4e5c-8664-743e35c5af4a",
"last_modified": 1753213325665
},
{
"name": "lex.50.50.enja.s2t.bin",
"schema": 1753211602555,
"toLang": "ja",
"version": "2.2",
"fileType": "lex",
"fromLang": "en",
"attachment": {
"hash": "bb7983e62705813d26a081e7a6c13abd280b51ec75966b4587b434b0dac02938",
"size": 6513960,
"filename": "lex.50.50.enja.s2t.bin",
"location": "main-workspace/translations-models/5784a05d-a89b-4464-a403-e11c1490a0be.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "d50bac3a-97df-4df6-96a5-452afa209bc0",
"last_modified": 1753213325660
},
{
"name": "lex.50.50.enuk.s2t.bin",
"schema": 1753204613648,
"toLang": "uk",
"version": "2.1",
"fileType": "lex",
"fromLang": "en",
"attachment": {
"hash": "4182e7aea8404d506bba68715b2bf3397132f087785a7c3210e48d48a8c63a1f",
"size": 2828252,
"filename": "lex.50.50.enuk.s2t.bin",
"location": "main-workspace/translations-models/07e03b31-7c99-4a17-86fb-2e299d2b3c56.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "",
"id": "fa20158c-d206-4ae3-8246-7aa4f42d84b3",
"last_modified": 1753213325655
},
{
"name": "model.slen.intgemm.alphas.bin",
"schema": 1753204617671,
"toLang": "en",
"version": "2.1",
"fileType": "model",
"fromLang": "sl",
"attachment": {
"hash": "9d15df58b60048366de4f7b6e727157ffdaea3a0fd1c1759ce232b057e2f991c",
"size": 31561787,
"filename": "model.slen.intgemm.alphas.bin",
"location": "main-workspace/translations-models/19d1f495-2dda-4dc1-829a-b463f38624ba.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "",
"id": "2fa8bb2b-c325-47ba-b306-65fc1e5ac291",
"last_modified": 1753213325650
},
{
"name": "model.ensl.intgemm.alphas.bin",
"schema": 1753204589102,
"toLang": "sl",
"version": "2.1",
"fileType": "model",
"fromLang": "en",
"attachment": {
"hash": "a34fc5cc2f52733f64e37f8512cf1ddc4723c08a7a1a59d01fc2b6e641fc2280",
"size": 31561787,
"filename": "model.ensl.intgemm.alphas.bin",
"location": "main-workspace/translations-models/610871e1-4cd4-4100-a755-a95b2d0a9d77.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "",
"id": "9646e90e-3c0d-48b8-a37d-5ff8aae76a45",
"last_modified": 1753213325645
},
{
"name": "vocab.slen.spm",
"schema": 1753204632094,
"toLang": "en",
"version": "2.1",
"fileType": "vocab",
"fromLang": "sl",
"attachment": {
"hash": "54ed331d3435e2bdc5b02462180197b77631f466fc0e61897b5469449857dd2b",
"size": 803078,
"filename": "vocab.slen.spm",
"location": "main-workspace/translations-models/696fd002-1716-48cc-adb8-b9dc5f08c2a7.spm",
"mimetype": "text/plain"
},
"filter_expression": "",
"id": "574fb6b7-6092-4c3d-85fe-1703ea1d3868",
"last_modified": 1753213325640
},
{
"name": "model.enuk.intgemm.alphas.bin",
"schema": 1753204601707,
"toLang": "uk",
"version": "2.1",
"fileType": "model",
"fromLang": "en",
"attachment": {
"hash": "f1058f92d0b3abedc978b91ce8928f9ee6403d7ea168b41a087f79d02a4b2866",
"size": 31561787,
"filename": "model.enuk.intgemm.alphas.bin",
"location": "main-workspace/translations-models/bf335732-bb60-47ce-953d-e6163f6c25a1.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "",
"id": "6087bcb3-b557-4f27-9c4a-217ed639697a",
"last_modified": 1753213325635
},
{
"name": "lex.50.50.slen.s2t.bin",
"schema": 1753204629021,
"toLang": "en",
"version": "2.1",
"fileType": "lex",
"fromLang": "sl",
"attachment": {
"hash": "f456a49e437ccb4a547e4b51480e29c8b83f11e26a3713af35b078cd4dd255cc",
"size": 4320484,
"filename": "lex.50.50.slen.s2t.bin",
"location": "main-workspace/translations-models/fdcff854-c547-423d-bc5a-147e1da06ad0.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "",
"id": "f3bfd6dc-c3b4-47c2-b8c4-f5f906ab4eef",
"last_modified": 1753213325631
},
{
"name": "model.ensk.intgemm.alphas.bin",
"schema": 1753204569078,
"toLang": "sk",
"version": "2.1",
"fileType": "model",
"fromLang": "en",
"attachment": {
"hash": "e33af359fd58c8958104b1b74b3ea302800ccba2f125c1629e09d7f9dd9a3804",
"size": 31561787,
"filename": "model.ensk.intgemm.alphas.bin",
"location": "main-workspace/translations-models/12877c48-8898-4f14-bae8-ef4cf35a54c8.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "",
"id": "55546204-532a-4e2d-891b-ad6de8d279fd",
"last_modified": 1753213325626
},
{
"name": "model.enlv.intgemm.alphas.bin",
"schema": 1753204552914,
"toLang": "lv",
"version": "2.1",
"fileType": "model",
"fromLang": "en",
"attachment": {
"hash": "715f9f444dffa0b39e71955c28bffd30afa4cc8300a192ec8fabb766cc5ba11d",
"size": 31561787,
"filename": "model.enlv.intgemm.alphas.bin",
"location": "main-workspace/translations-models/658c63b1-d9b4-45dc-b250-47f9c33c8455.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "",
"id": "a3b27e51-540a-4dec-af3b-b42f50368d0f",
"last_modified": 1753213325621
},
{
"name": "srcvocab.enja.spm",
"schema": 1753211583049,
"toLang": "ja",
"version": "2.2",
"fileType": "srcvocab",
"fromLang": "en",
"attachment": {
"hash": "970c98d174fc01e0339fbabbf45af36a4be3f26f819ec1a5ea1189f71e091889",
"size": 796275,
"filename": "srcvocab.enja.spm",
"location": "main-workspace/translations-models/227a484a-609b-45ec-8574-d36843817307.spm",
"mimetype": "text/plain"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "b5065835-5414-400f-81cb-43b9c56a0e20",
"last_modified": 1753213325616
},
{
"name": "lex.50.50.ensk.s2t.bin",
"schema": 1753204579510,
"toLang": "sk",
"version": "2.1",
"fileType": "lex",
"fromLang": "en",
"attachment": {
"hash": "f3d1aec4ee5246d6a6ee5dc7ed4c6b18f6071c7baca69bf1344aef675b95515d",
"size": 3356348,
"filename": "lex.50.50.ensk.s2t.bin",
"location": "main-workspace/translations-models/f6894c37-5ceb-4f57-82f3-9fa8ece22eaa.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "",
"id": "27b35f92-25e4-4895-a939-f7bd4b2d2aa4",
"last_modified": 1753213325612
},
{
"name": "vocab.ensk.spm",
"schema": 1753204566860,
"toLang": "sk",
"version": "2.1",
"fileType": "vocab",
"fromLang": "en",
"attachment": {
"hash": "cfa6a9e601d74686b117f041eb1ad9de94c34219110b67367d570a9e27026a46",
"size": 808888,
"filename": "vocab.ensk.spm",
"location": "main-workspace/translations-models/eabd7f47-1ca3-45a4-b04d-45b9a3e05ec0.spm",
"mimetype": "text/plain"
},
"filter_expression": "",
"id": "54a6c2c5-4c01-430c-9a4b-2f469dbbd8ae",
"last_modified": 1753213325607
},
{
"name": "vocab.enlv.spm",
"schema": 1753204550692,
"toLang": "lv",
"version": "2.1",
"fileType": "vocab",
"fromLang": "en",
"attachment": {
"hash": "63146b49ce46ba1283b6956e38efdd4899d1a409cad9d2b6a06cbd4e32ca0808",
"size": 816287,
"filename": "vocab.enlv.spm",
"location": "main-workspace/translations-models/da291a80-d6f6-4511-a5ed-1c78f27e2650.spm",
"mimetype": "text/plain"
},
"filter_expression": "",
"id": "27023e7a-1315-4aba-b7b3-867609496a31",
"last_modified": 1753213325602
},
{
"name": "lex.50.50.enlt.s2t.bin",
"schema": 1753204543969,
"toLang": "lt",
"version": "2.1",
"fileType": "lex",
"fromLang": "en",
"attachment": {
"hash": "5972c834218c7beea241dc8fe77c2e577a8d8b4eb3d3dc286d10ad890c64d374",
"size": 3421640,
"filename": "lex.50.50.enlt.s2t.bin",
"location": "main-workspace/translations-models/20a0b36e-ed89-40fd-be51-b1badb85100c.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "",
"id": "64a0ba75-e37c-4315-aa1e-0b0686780c25",
"last_modified": 1753213325596
},
{
"name": "model.enru.intgemm.alphas.bin",
"schema": 1753211518391,
"toLang": "ru",
"version": "2.1",
"fileType": "model",
"fromLang": "en",
"attachment": {
"hash": "184cb5cda528eeefc0f75f5d0035d787b71d74af135e3c5608d01ae02ecfb920",
"size": 31561787,
"filename": "model.enru.intgemm.alphas.bin",
"location": "main-workspace/translations-models/db6b48bb-b563-4ea1-bbf4-b033fa9cc482.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "46d9d154-ed71-4d5b-9c21-ca59dd300a1a",
"last_modified": 1753213325588
},
{
"name": "model.enko.intgemm.alphas.bin",
"schema": 1753211467034,
"toLang": "ko",
"version": "2.1",
"fileType": "model",
"fromLang": "en",
"attachment": {
"hash": "ffe5ef2ce3f2e944055e35310bab186f6a70d533a0ee4394adf716a0e383afbb",
"size": 43849787,
"filename": "model.enko.intgemm.alphas.bin",
"location": "main-workspace/translations-models/29e88605-8576-4a8e-be94-a5ebb4a738f7.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "d399133d-a4b4-4247-a259-2a9df4bcdbe3",
"last_modified": 1753213325582
},
{
"name": "lex.50.50.ensl.s2t.bin",
"schema": 1753204586281,
"toLang": "sl",
"version": "2.1",
"fileType": "lex",
"fromLang": "en",
"attachment": {
"hash": "2190798297bc12505f917189defcf451ab5bd2e815bc05df244dc291dc2ae63b",
"size": 3428300,
"filename": "lex.50.50.ensl.s2t.bin",
"location": "main-workspace/translations-models/2f02539c-c552-41ba-8ccc-a2c10372226f.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "",
"id": "c1d14c9a-bf4c-4e7d-b6d1-e4b622d3cdb5",
"last_modified": 1753213325577
},
{
"name": "vocab.enlt.spm",
"schema": 1753204529766,
"toLang": "lt",
"version": "2.1",
"fileType": "vocab",
"fromLang": "en",
"attachment": {
"hash": "5d38fe70ff4a50368af756b715b69519c9ee064c27cbceeabc90d4e1a10f25a8",
"size": 806827,
"filename": "vocab.enlt.spm",
"location": "main-workspace/translations-models/72ab709b-d7ed-432e-9104-4424bbd2da2e.spm",
"mimetype": "text/plain"
},
"filter_expression": "",
"id": "4c35178b-068d-4863-aecb-4effefb4647b",
"last_modified": 1753213325571
},
{
"name": "model.enlt.intgemm.alphas.bin",
"schema": 1753204532048,
"toLang": "lt",
"version": "2.1",
"fileType": "model",
"fromLang": "en",
"attachment": {
"hash": "d27c676d9d761c2abfffec83956e32b2923f3f745b56acdbd84c49d888cdc94e",
"size": 31561787,
"filename": "model.enlt.intgemm.alphas.bin",
"location": "main-workspace/translations-models/15cfcaf2-881d-4b3e-94de-7b508c001c7e.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "",
"id": "178f5f05-704a-4b3b-8e94-9e80c52dde58",
"last_modified": 1753213325566
},
{
"name": "vocab.ensl.spm",
"schema": 1753204583741,
"toLang": "sl",
"version": "2.1",
"fileType": "vocab",
"fromLang": "en",
"attachment": {
"hash": "7cd295383c46824c05a05db76b543d3595f2516537dd22b77190a45c8919224d",
"size": 803212,
"filename": "vocab.ensl.spm",
"location": "main-workspace/translations-models/9e2de2b5-cfd8-4a7a-bb2b-59300824e168.spm",
"mimetype": "text/plain"
},
"filter_expression": "",
"id": "9b73c465-1a58-4db3-9e8e-ee7686e53031",
"last_modified": 1753213325560
},
{
"name": "vocab.enar.spm",
"schema": 1753204444430,
"toLang": "ar",
"version": "2.1",
"fileType": "vocab",
"fromLang": "en",
"attachment": {
"hash": "8d93c54aa5e2044c416ec680b5ff9af0227bd698521666e8b1a1ea1b041fbae8",
"size": 863591,
"filename": "vocab.enar.spm",
"location": "main-workspace/translations-models/3c13220b-aaec-496e-be94-7570bc024dde.spm",
"mimetype": "text/plain"
},
"filter_expression": "",
"id": "e02d0e7b-c59f-4b76-9cda-ed3892515d9f",
"last_modified": 1753213325555
},
{
"name": "lex.50.50.enar.s2t.bin",
"schema": 1753204441894,
"toLang": "ar",
"version": "2.1",
"fileType": "lex",
"fromLang": "en",
"attachment": {
"hash": "ac28575c27b29839009c67ccadb3968c2bf15638dc077bbfe6b042b4e5506a6c",
"size": 3129264,
"filename": "lex.50.50.enar.s2t.bin",
"location": "main-workspace/translations-models/e1a4ed2d-8545-4954-9514-b8507cdeff5d.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "",
"id": "e99936bf-07f0-43b0-9d3d-516c729ca4ee",
"last_modified": 1753213325550
},
{
"name": "lex.50.50.aren.s2t.bin",
"schema": 1753204514752,
"toLang": "en",
"version": "2.1",
"fileType": "lex",
"fromLang": "ar",
"attachment": {
"hash": "8aef44303621870863d20a27f3606470dc4677214374ad6ba56c2abe07b4f428",
"size": 4624316,
"filename": "lex.50.50.aren.s2t.bin",
"location": "main-workspace/translations-models/9b8e8ed5-9689-4152-84e2-553cc579d430.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "",
"id": "c3c43f07-4973-466b-97a8-8e905544f3e1",
"last_modified": 1753213325544
},
{
"name": "model.enar.intgemm.alphas.bin",
"schema": 1753204432989,
"toLang": "ar",
"version": "2.1",
"fileType": "model",
"fromLang": "en",
"attachment": {
"hash": "988c78be70a37ae8a63eb8e8ecbef5fc6854522a6f3275a08e2c693e261f8518",
"size": 42992955,
"filename": "model.enar.intgemm.alphas.bin",
"location": "main-workspace/translations-models/2700fa89-002c-4528-90da-73cbe8ece263.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "",
"id": "c1b184e9-5b26-41e8-ad34-995c4d7b6def",
"last_modified": 1753213325538
},
{
"name": "srcvocab.enzh.spm",
"schema": 1753211544153,
"toLang": "zh-Hans",
"version": "2.1",
"fileType": "srcvocab",
"fromLang": "en",
"attachment": {
"hash": "bd9b65504acc6d9726dd281f7defc2adb7c2c22d0688fe2f84697de25197c8c5",
"size": 806952,
"filename": "srcvocab.enzh.spm",
"location": "main-workspace/translations-models/7aab6b99-b731-44ea-bcf6-11a0f1aebe1f.spm",
"mimetype": "text/plain"
},
"filter_expression": "env.appinfo.OS == 'Android' ",
"id": "eee6d45e-e77d-43e6-8e9a-29c6f6b2d3b1",
"last_modified": 1753213325533
},
{
"name": "vocab.aren.spm",
"schema": 1753204525767,
"toLang": "en",
"version": "2.1",
"fileType": "vocab",
"fromLang": "ar",
"attachment": {
"hash": "51b4ee3f828d10015464523d0b4f5a6c086b0b2a9bde716a581001cf6c260366",
"size": 860035,
"filename": "vocab.aren.spm",
"location": "main-workspace/translations-models/9b389db0-f36e-4f16-b656-cff2da811859.spm",
"mimetype": "text/plain"
},
"filter_expression": "",
"id": "8d453e68-a440-4ba8-b2cf-86ea47c239ad",
"last_modified": 1753213325527
},
{
"name": "vocab.enuk.spm",
"schema": 1753204611132,
"toLang": "uk",
"version": "2.1",
"fileType": "vocab",
"fromLang": "en",
"attachment": {
"hash": "330fe40da410c7a41fcbf6aa98a2e619600b235b278c186c0f04c8ad1c2fbb7d",
"size": 885736,
"filename": "vocab.enuk.spm",
"location": "main-workspace/translations-models/2b2ccdbe-d875-4a54-a29d-5ffc70a605e3.spm",
"mimetype": "text/plain"
},
"filter_expression": "",
"id": "735e7eab-5a76-4ea0-ba48-5ded95aec40e",
"last_modified": 1753213325522
},
{
"name": "model.aren.intgemm.alphas.bin",
"schema": 1753204517897,
"toLang": "en",
"version": "2.1",
"fileType": "model",
"fromLang": "ar",
"attachment": {
"hash": "f3888b9db780da4d681aaf987adfcd6ea54f82dd14ed2594b2b7ac7d253b6290",
"size": 42992955,
"filename": "model.aren.intgemm.alphas.bin",
"location": "main-workspace/translations-models/42883a95-7d08-4bb8-bc96-8fdac506cf50.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "",
"id": "87beaff4-d067-436c-b5c9-1ee24485ab1e",
"last_modified": 1753213325517
},
{
"name": "lex.50.50.enlv.s2t.bin",
"schema": 1753204548363,
"toLang": "lv",
"version": "2.1",
"fileType": "lex",
"fromLang": "en",
"attachment": {
"hash": "d54b9bc278558444c5c25df5ae7339b73eee55cf79705f19fec672b6d55d959c",
"size": 3359096,
"filename": "lex.50.50.enlv.s2t.bin",
"location": "main-workspace/translations-models/a53e1550-53ca-42ed-9c43-a9938ff1d16c.bin",
"mimetype": "application/octet-stream"
},
"filter_expression": "",
"id": "5aec2ff1-58c7-4a73-8e73-5a2ebdb9196b",
"last_modified": 1753213325511
},
{
"name": "vocab.enru.spm",
"schema": 1752267138363,
@ -8149,5 +9013,5 @@
"last_modified": 1701186751412
}
],
"timestamp": 1752267318690
"timestamp": 1753213325774
}

View file

@ -1,5 +1,15 @@
{
"changes": [
{
"last_modified": 1752529408928,
"bucket": "security-state",
"collection": "onecrl"
},
{
"last_modified": 1754146622506,
"bucket": "security-state",
"collection": "intermediates"
},
{
"last_modified": 1604940558744,
"bucket": "blocklists",
@ -11,104 +21,34 @@
"collection": "gfx"
},
{
"last_modified": 1752258970807,
"last_modified": 1754678174835,
"bucket": "blocklists",
"collection": "addons-bloomfilters"
},
{
"last_modified": 1752159422751,
"bucket": "security-state",
"collection": "intermediates"
},
{
"last_modified": 1747787134572,
"bucket": "security-state",
"collection": "onecrl"
},
{
"last_modified": 1752267318690,
"bucket": "main",
"collection": "translations-models"
},
{
"last_modified": 1743683182607,
"bucket": "main",
"collection": "password-rules"
},
{
"last_modified": 1751266171953,
"bucket": "main",
"collection": "devtools-compatibility-browsers"
},
{
"last_modified": 0,
"bucket": "main",
"collection": "search-config-overrides-v2"
},
{
"last_modified": 1725526980846,
"bucket": "main",
"collection": "cookie-banner-rules-list"
},
{
"last_modified": 1749069444811,
"bucket": "main",
"collection": "translations-wasm"
},
{
"last_modified": 1753213325774,
"bucket": "main",
"collection": "translations-models"
},
{
"last_modified": 1738775297137,
"bucket": "main",
"collection": "websites-with-shared-credential-backends"
},
{
"last_modified": 1674595048726,
"bucket": "main",
"collection": "password-recipes"
},
{
"last_modified": 0,
"bucket": "main",
"collection": "search-config-overrides"
"collection": "search-config-overrides-v2"
},
{
"last_modified": 1633983928590,
"last_modified": 1754902587193,
"bucket": "main",
"collection": "top-sites"
},
{
"last_modified": 1751891587705,
"bucket": "main",
"collection": "search-telemetry-v2"
},
{
"last_modified": 1564511755134,
"bucket": "main",
"collection": "anti-tracking-url-decoration"
},
{
"last_modified": 1544035467383,
"bucket": "main",
"collection": "sites-classification"
},
{
"last_modified": 1653469171354,
"bucket": "main",
"collection": "devtools-devices"
},
{
"last_modified": 1746562822691,
"bucket": "main",
"collection": "search-config-icons"
},
{
"last_modified": 1745933974542,
"bucket": "main",
"collection": "search-config-v2"
},
{
"last_modified": 1756,
"bucket": "main",
"collection": "search-config"
"collection": "devtools-compatibility-browsers"
},
{
"last_modified": 1739471652383,
@ -116,9 +56,44 @@
"collection": "url-classifier-skip-urls"
},
{
"last_modified": 1744749743529,
"last_modified": 1746562822691,
"bucket": "main",
"collection": "search-default-override-allowlist"
"collection": "search-config-icons"
},
{
"last_modified": 1653469171354,
"bucket": "main",
"collection": "devtools-devices"
},
{
"last_modified": 1544035467383,
"bucket": "main",
"collection": "sites-classification"
},
{
"last_modified": 1754676198505,
"bucket": "main",
"collection": "search-telemetry-v2"
},
{
"last_modified": 1674595048726,
"bucket": "main",
"collection": "password-recipes"
},
{
"last_modified": 1743683182607,
"bucket": "main",
"collection": "password-rules"
},
{
"last_modified": 0,
"bucket": "main",
"collection": "search-config-overrides"
},
{
"last_modified": 1673270322227,
"bucket": "main",
"collection": "language-dictionaries"
},
{
"last_modified": 1605801189258,
@ -126,10 +101,35 @@
"collection": "hijack-blocklists"
},
{
"last_modified": 1673270322227,
"last_modified": 1633983928590,
"bucket": "main",
"collection": "language-dictionaries"
"collection": "top-sites"
},
{
"last_modified": 1744749743529,
"bucket": "main",
"collection": "search-default-override-allowlist"
},
{
"last_modified": 1725526980846,
"bucket": "main",
"collection": "cookie-banner-rules-list"
},
{
"last_modified": 1564511755134,
"bucket": "main",
"collection": "anti-tracking-url-decoration"
},
{
"last_modified": 1757,
"bucket": "main",
"collection": "search-config"
},
{
"last_modified": 1745933974542,
"bucket": "main",
"collection": "search-config-v2"
}
],
"timestamp": 1755
"timestamp": 1756
}

View file

@ -1,5 +1,434 @@
{
"data": [
{
"schema": 1754143058430,
"derHash": "U7akmfzGwEoYpWtXRYRIQHLkowbge03XLTGxBUU6EwA=",
"attachment": {
"hash": "84020e586cedfb535e555997770004dfc4c57c5dd8074e0c9db3c46670a1dc20",
"size": 2012,
"filename": "k286j7bdZQfoDSoxYpOwRVRlptTGYpKHZ9v5bTKFt4g=.pem",
"location": "security-state-staging/intermediates/634cc7a6-833b-42ec-9d78-0b0a4ff626dc.pem",
"mimetype": "application/x-pem-file"
},
"id": "dd533c45-cd3a-4670-93f5-ef95c50c8bc6",
"last_modified": 1754146622506
},
{
"schema": 1754099861406,
"derHash": "ufEt6fG3a4amsoddbYPWXvMqdEWe6JpuGhVAp0aMi78=",
"attachment": {
"hash": "26a87683158f7e8ea7939204a9b1d8b370d474dedc645a114aca352b164f8320",
"size": 2272,
"filename": "j5TO3ZpcFovhPQUR9n6SZk6Jh2IkzvEvf865Gmf45vA=.pem",
"location": "security-state-staging/intermediates/990b1290-3366-44e4-ad82-4407c38b723b.pem",
"mimetype": "application/x-pem-file"
},
"id": "0e4a080e-9a01-4aeb-aa76-2fc838c87a33",
"last_modified": 1754103422506
},
{
"schema": 1754099860443,
"derHash": "LOBPqMMLEN6LzKGSjYTsapdVAkCO7yKDIeNGosYuk3k=",
"attachment": {
"hash": "70609e041c197839ab5bd79ac74fa0757e71fa56bcdb397ae6118f94654d323e",
"size": 2219,
"filename": "mpw6bmt-V2JbqI0bfKaJvhvLQBSDYqzsIJMgVG2bEN8=.pem",
"location": "security-state-staging/intermediates/006d8121-76a0-4863-bc61-0a2016338207.pem",
"mimetype": "application/x-pem-file"
},
"id": "96b7240f-1700-49fd-948d-e84c73668808",
"last_modified": 1754103422503
},
{
"schema": 1754099862405,
"derHash": "o/Rd5hMGLhbC+sZlphHENBvhDaHnBi2uUPpA+MZTNe0=",
"attachment": {
"hash": "6aed5faaa992731f08d8c45643ad9ee82806e96886db033748d60745d1604fda",
"size": 2219,
"filename": "RqqfkgIv6nRPPWsjw8twJ2PsbbYW1i2kQcbDvlkOZo4=.pem",
"location": "security-state-staging/intermediates/98e95549-9176-4374-a7c5-7b8f1cd3daca.pem",
"mimetype": "application/x-pem-file"
},
"id": "8962b756-2964-4875-8106-aedf7379ad07",
"last_modified": 1754103422500
},
{
"schema": 1754099858460,
"derHash": "/SN721ny2nM54hT1AHURxlrSlcJiPUXxvCXGVztq8r0=",
"attachment": {
"hash": "02b32cc5ee65ef83837d70b406311b596f3c8cf49160c9abd32eee77cfea74fd",
"size": 2219,
"filename": "jEvv7RqNEuK1Ez_1mSdBRq8MenpqMWVOYS23EsUhbUc=.pem",
"location": "security-state-staging/intermediates/c582cc96-3a66-42e8-af95-5549ae64e31f.pem",
"mimetype": "application/x-pem-file"
},
"id": "fef513f9-4afb-48c8-a729-60dcf8bc65aa",
"last_modified": 1754103422497
},
{
"schema": 1754099859478,
"derHash": "48c3vFI8BG8I84+JQQ59B7QVhOMbc0H/nUs78Y8td5U=",
"attachment": {
"hash": "1067964de7db98c936e990971da0770573448506c18a30f641aea209652554de",
"size": 1691,
"filename": "zKTraMmGIuImSHm2FWLq0TlVnJH-a2qzCB6xljFCaFU=.pem",
"location": "security-state-staging/intermediates/a278faa3-a546-4ea6-a1c0-073cb83d9688.pem",
"mimetype": "application/x-pem-file"
},
"id": "de9eabe8-807a-4c81-a4cc-5bc55fa377d0",
"last_modified": 1754103422494
},
{
"schema": 1753711059024,
"derHash": "Tl6MNoXBFfAbNjJTRF/dIx6qWYRB1Gr6aWrNuI1J81w=",
"attachment": {
"hash": "0edba18621ded61e39adc270f90f469b47be795b47d5660f93a634285ded63df",
"size": 1609,
"filename": "4cqqtU7dtaR9-WoYzYtDv0zpNfP0Gvo-osbvuHgquhk=.pem",
"location": "security-state-staging/intermediates/dfba7d0c-683e-4f46-a22d-a82ef2fb8996.pem",
"mimetype": "application/x-pem-file"
},
"id": "9fd607b9-2c24-4dbe-b3b8-56f984cc6573",
"last_modified": 1753714622204
},
{
"schema": 1752760680174,
"derHash": "q1LdL70K2cQuj3Y5lsCpQjmVJQQ0vsrtEx+UfnfXVoQ=",
"attachment": {
"hash": "c68b9be4f98f5f8e8043fcb6537fb45e296a8ed70619ac7eac2f5cda72b2c180",
"size": 1187,
"filename": "2QdsCtI22J6baJM808LUaaIimOTG5iB2FiAXhZXBsas=.pem",
"location": "security-state-staging/intermediates/e71acbb7-b367-4bb0-8c58-218de49beef9.pem",
"mimetype": "application/x-pem-file"
},
"id": "c9b80dd1-b065-446e-a290-ba6bf633a502",
"last_modified": 1752764222637
},
{
"schema": 1752760681200,
"derHash": "lOvpWKJEOrUPjhjFm/ftZOZx6NH9bZbBvOv2ZHOemvc=",
"attachment": {
"hash": "e2b3bb95c17f3b09a9793e09e675093ef6da1ce66a4b93580aab0d3555986e79",
"size": 1199,
"filename": "HUFA8EIGLPxJ-VLFc4CZBni9LOi_EHSnqGALoHvfCPw=.pem",
"location": "security-state-staging/intermediates/54bb6dcd-6060-48b9-88f7-7aa7d0a2c260.pem",
"mimetype": "application/x-pem-file"
},
"id": "75ab866e-fc4c-4aa8-97b5-b7351d3d2e3f",
"last_modified": 1752764222634
},
{
"schema": 1752760676960,
"derHash": "MSmn8WgOQ5/J3cvDU5ED+hfLcjZGGlMQNR3kQtBURrs=",
"attachment": {
"hash": "95002e51eed314248c79576099036cf25699f161f2a311371a34d7954e4407ad",
"size": 1967,
"filename": "0Mp8JBbeI6oRi2Kc1ayz8HLTP095svvHsz9VCigK6Mw=.pem",
"location": "security-state-staging/intermediates/6adedb40-d314-4a54-8a62-b7a815d7d20d.pem",
"mimetype": "application/x-pem-file"
},
"id": "1e24f00d-a580-4ebd-8d1a-118619ba5a9e",
"last_modified": 1752764222631
},
{
"schema": 1752760673868,
"derHash": "/t6XnA0W+f8cWoJN7bCvJOGvjs8gInSJAmsyEIzJxvM=",
"attachment": {
"hash": "d21fb8e894c54127389fc54aaf9cfb74a4e3cfcdf6a7ba242c1bdb1a0c0c7e75",
"size": 1171,
"filename": "uIav9YspnXZn8u7Mta9WDs_suO0tjRiYoHaRddfhfe0=.pem",
"location": "security-state-staging/intermediates/1858499b-73a3-4a8d-a084-9e016f639556.pem",
"mimetype": "application/x-pem-file"
},
"id": "804f1aaf-a3a6-453f-8f12-3b912dc6cea3",
"last_modified": 1752764222628
},
{
"schema": 1752760678989,
"derHash": "MVXwXbO6io4llzPOsVuFKpVsG0DyuU8h2Z6CubWmAhQ=",
"attachment": {
"hash": "c595569432f085bc5f08e92391ceed191e2b42709a690c1a08a098690e1437af",
"size": 1646,
"filename": "VqrndAYHqC8xqqq2rZ9ZciWIFe0WTcT1JlZ50HUz47M=.pem",
"location": "security-state-staging/intermediates/dde97d92-c593-4cbe-b360-e7198a31518d.pem",
"mimetype": "application/x-pem-file"
},
"id": "96468461-4289-4019-a564-8c116679db6d",
"last_modified": 1752764222625
},
{
"schema": 1752760675984,
"derHash": "6RJN61196oOlqgdmb4uty+iY/NhpmQJpmzBqCodoOlw=",
"attachment": {
"hash": "8b918c56f73f41f5360984369850f773adb0c3896f699c2694f9c2073833542f",
"size": 1983,
"filename": "rRjBabUiCbitmn4Ma_-8W6gvKCjRY6sR1E0bv-DG2VU=.pem",
"location": "security-state-staging/intermediates/3411e244-6b9e-46ce-93eb-4a3c7d09edba.pem",
"mimetype": "application/x-pem-file"
},
"id": "261c16a3-c870-4d77-8c90-cdf4f042361a",
"last_modified": 1752764222623
},
{
"schema": 1752760666848,
"derHash": "0bK64/9uEwfo39KB7vW6/BOqe2KWyI2HjOQhlLy/Om0=",
"attachment": {
"hash": "ac03b8a1bbc8719b5c572a8a3c527a955aadb750eec7c4d411ce58b357854221",
"size": 1642,
"filename": "fDUaTTzEu6_uBNi_33HvJhAzI9ilrEkNP5uUJ-NszYA=.pem",
"location": "security-state-staging/intermediates/7221b9c5-9dc7-45fe-aa13-3679ef02fbcb.pem",
"mimetype": "application/x-pem-file"
},
"id": "74c6d600-e3bc-4eb4-b491-c539d0c67efe",
"last_modified": 1752764222620
},
{
"schema": 1752760674954,
"derHash": "628hG+P6mJG/QdaKH23lupK1OImgFJOX6cIil5Wo4PQ=",
"attachment": {
"hash": "9c4a6406c12b2c02031c1090ae985173e44b0f6991f2279438377d7a36470b8b",
"size": 1171,
"filename": "PkI-NmL0n-hgGV4rdkVk3yC6iPg8hhHTH11f1OQ102w=.pem",
"location": "security-state-staging/intermediates/0d4aadb8-bf4e-4f5c-9342-0cb81c6440ca.pem",
"mimetype": "application/x-pem-file"
},
"id": "d179dc51-ee39-473d-b979-f63391a7640a",
"last_modified": 1752764222617
},
{
"schema": 1752760671911,
"derHash": "Wvt2BMPoP07JssMYNTRXUmqUpL0HayrWrnvrZOOHw9A=",
"attachment": {
"hash": "e7e3481580b673c89b9ce8dfde48744636bfbaf920036c136054909db91a3cb4",
"size": 2333,
"filename": "4naYYOxK0libr7tOuTJ1hCUYCe7-Z5yGm0myjCV3lF8=.pem",
"location": "security-state-staging/intermediates/6bab3dba-a226-4d20-bde0-7221c0da4ab9.pem",
"mimetype": "application/x-pem-file"
},
"id": "a492d922-3814-48fa-a687-b49df70c0501",
"last_modified": 1752764222614
},
{
"schema": 1752760669864,
"derHash": "TmuV5xQlWK7Czq/MBZMyFJjImRBzZvCompFvpVvajC4=",
"attachment": {
"hash": "d6d06a5b8466ab20097868aa2d755239dc0ef02eb4d5338deba917bc3dba1968",
"size": 2353,
"filename": "DS4YDt78h__kz9TVAfb1h7QTx0PQHfVkxGU9iOqRZOE=.pem",
"location": "security-state-staging/intermediates/5e4d3d3d-d606-4e01-be69-eb1880392d11.pem",
"mimetype": "application/x-pem-file"
},
"id": "5cff7997-667b-4def-bfdb-a404ec5c1230",
"last_modified": 1752764222611
},
{
"schema": 1752760678047,
"derHash": "/1Z9IbbZKHalKLTtzg6F4LnIkkbtJjoTGi1j7KvxZVQ=",
"attachment": {
"hash": "cf9eca655df695fd7f31d77be9de78c73f47b8be55131d986f33db587c20d613",
"size": 1971,
"filename": "f9LomjcKAL0vZKqCUKip-BTGCeTXDaurwBzGQ2c-OTI=.pem",
"location": "security-state-staging/intermediates/d44b7b67-cc46-4a06-b5bd-5072dd029ac4.pem",
"mimetype": "application/x-pem-file"
},
"id": "ff318be5-173c-485f-8692-7d7cbcc523d3",
"last_modified": 1752764222608
},
{
"schema": 1752760670823,
"derHash": "GykoAhpLic8PVyokNukU4lQSrVjt7iIebHw8VDcXmiY=",
"attachment": {
"hash": "a9981b4f25027873930aa36e8c5ff6bb8d6d0e8edd5e1e42cc9390b1f745f35e",
"size": 1650,
"filename": "Hq6EZq6muujuRFpgCLUYYYWHkzDZb2BQnuAVTByTPMM=.pem",
"location": "security-state-staging/intermediates/bf4bfb69-9add-4a6e-a3a7-bba7234f9b80.pem",
"mimetype": "application/x-pem-file"
},
"id": "68f3e25d-dc2e-44a1-a71e-5cc1389b4770",
"last_modified": 1752764222606
},
{
"schema": 1752760663521,
"derHash": "2h7jsUouVivsKtXlQ1SOC7WDKW45+t9pqKE/MPCsTcU=",
"attachment": {
"hash": "f8e35c16a45c994ea4be4f02780f8bdb790267b9d793869745379b1882a92666",
"size": 2328,
"filename": "nX2tH06F09cc0s6EeJ2K7sLATppziUDuD46OawW5_OM=.pem",
"location": "security-state-staging/intermediates/48ac94bc-4251-4cbe-9edf-7ce60684e7a8.pem",
"mimetype": "application/x-pem-file"
},
"id": "eb034811-f1c4-473e-a61a-16f23195f5a5",
"last_modified": 1752764222603
},
{
"schema": 1752760664871,
"derHash": "MJP6u7lj0/hyndyjSXL3PlYCB6BtSiYcRUVtOoWR4zI=",
"attachment": {
"hash": "c62a664b3d1b0a2b0ee284228c12a5922f2f9e4c9ce24928b167b8364097e74c",
"size": 1967,
"filename": "cGUSI-t_SEDkOrs6GJTD6AZtEmQuTHyqcwjGA3UhfaQ=.pem",
"location": "security-state-staging/intermediates/ceb71a64-07b3-499e-b70c-9e599176ba1e.pem",
"mimetype": "application/x-pem-file"
},
"id": "8a329d97-82f8-4e92-a45a-14e8ea772ce0",
"last_modified": 1752764222600
},
{
"schema": 1752760665883,
"derHash": "9RZfxiRFM2HjoTHGrZCJOo3kAViSGpTopLRFOY7t9uA=",
"attachment": {
"hash": "50f9cd7a25c8e7361bd2b7f312a5f2b775ca7650e871624ffc4f5cd598451d6e",
"size": 1642,
"filename": "biIcgxJw7HM1TbdJxioNUtXUL4DAGP3v1bLiXlQJxHw=.pem",
"location": "security-state-staging/intermediates/7032a9bd-07f1-4179-a0e1-a95d35cc88ce.pem",
"mimetype": "application/x-pem-file"
},
"id": "5a61d52c-6f54-4f2b-978a-4ed56861dc67",
"last_modified": 1752764222597
},
{
"schema": 1752760667820,
"derHash": "mj/HCPYeA2r4jOyy6Np5o7IfCSz8Fywx3VqT3PoVJI8=",
"attachment": {
"hash": "b0a816aab578e29cc6a438ab8ddba3aaa31c9c7ae702524845fac34185c2e3e6",
"size": 1658,
"filename": "QE_kU-M2VhKXMWcFBLhANOOxqfgtPAiyVRQze5nsA1Q=.pem",
"location": "security-state-staging/intermediates/87255277-a0b6-47cc-bfc2-54dbc542dade.pem",
"mimetype": "application/x-pem-file"
},
"id": "2fba131b-4694-4c22-99f2-c19b354a9174",
"last_modified": 1752764222594
},
{
"schema": 1752760668907,
"derHash": "O5dGyrTMkyeU3nbqSdmrbvWYwPE+2uGLmWwP8A2oh3s=",
"attachment": {
"hash": "ad52b20c079cdb90e018bba38afb1ad0d24606df74def1a6c074f23a247a69fc",
"size": 1983,
"filename": "MRrjK-e1pcsBMHuFbRWrf6MkRyyOlWy6eBt_MdA7SKk=.pem",
"location": "security-state-staging/intermediates/2fa751d2-fbc0-4000-ba50-9f240cc79a3c.pem",
"mimetype": "application/x-pem-file"
},
"id": "c5febe74-fbf9-4319-a280-29d1bb29f528",
"last_modified": 1752764222591
},
{
"schema": 1752760672910,
"derHash": "H6I4foI8rSMCDMYnhcj5TxXSSO+Moj5C1DhJoI94OgA=",
"attachment": {
"hash": "5ef06219f4ca26748181d498a24a67f34ef810c9fb40c9ed2114a567689c44ec",
"size": 1199,
"filename": "kX2ij5nUBgPQYzYimBXq9TB1bQSGYkYRVA22jlAfsWo=.pem",
"location": "security-state-staging/intermediates/af929937-9d24-4e1e-8988-ef2a6fa9134a.pem",
"mimetype": "application/x-pem-file"
},
"id": "7d0ae958-a1f7-44d6-886d-0613b9e60f11",
"last_modified": 1752764222588
},
{
"schema": 1752631067902,
"derHash": "0LYmyK2TliKWs5IBBu1/s4GPy5jgtz55kUG0JSEzWw8=",
"attachment": {
"hash": "e83823e094fc33d3b4af78f1e8f95390c19a2251a7d71707bc51ab535b687881",
"size": 2398,
"filename": "Vtg6Fi854KaDx08x8gXvmz8mCn0Hf4Hzg9dxrDDqdy4=.pem",
"location": "security-state-staging/intermediates/2e2ef072-843c-43ab-81c6-3ef63bec497f.pem",
"mimetype": "application/x-pem-file"
},
"id": "145fcad9-5361-4ffc-9211-df101aba2447",
"last_modified": 1752634622702
},
{
"schema": 1752631065993,
"derHash": "c+m+fVe9XHKgYwRGPTL4+F7KEuLy0oTkiug/ZT/bTrY=",
"attachment": {
"hash": "a2c755c8197181625e61972939ace42b83b548a84b87297dd3d5526e086d942c",
"size": 1248,
"filename": "d8WQ9OkyrmgWqzbQsQkl5uL-ue7f9DCEdocJUpRznGE=.pem",
"location": "security-state-staging/intermediates/333b516d-f328-45a9-a282-dd467c385449.pem",
"mimetype": "application/x-pem-file"
},
"id": "594866e3-2f79-4535-b9f1-f737fc4c4e13",
"last_modified": 1752634622699
},
{
"schema": 1752631068872,
"derHash": "0Z4fzY4SdH11t0ooMY7v3XAPYW4rIVcBu+gEw83aAns=",
"attachment": {
"hash": "3a875c4b72419f95c880d4900ecd61247f13d956dd713437be7533c89c574e45",
"size": 1272,
"filename": "7U61eZ4xMG3x6qHpfWYVmKJWTdiaYVIULIx0M_RG3a4=.pem",
"location": "security-state-staging/intermediates/acb26498-dff9-48d5-b59f-c8a69dbbb112.pem",
"mimetype": "application/x-pem-file"
},
"id": "e7da2e76-651d-463b-8d4b-54ee29f224fa",
"last_modified": 1752634622696
},
{
"schema": 1752631064983,
"derHash": "2IbCNfr63S5HNJJM9YtNjwy3Bl8PVFGz4cMI+S73sus=",
"attachment": {
"hash": "297a19d0445566ff14b3b97cf18232ec1e8ad20ffe497c86761e4aefc86460bc",
"size": 2418,
"filename": "TcwsJhAKwWICVN6Q_-7q3y7eRrrfy3jzpeQpmQQJ1xI=.pem",
"location": "security-state-staging/intermediates/a9eca34b-18e1-410c-8579-52e591e58f32.pem",
"mimetype": "application/x-pem-file"
},
"id": "53bd5549-1ff9-4d57-9424-6b771d76b60e",
"last_modified": 1752634622693
},
{
"schema": 1752631066965,
"derHash": "XrAhe5KMLeEXD84RDKzDyJpCSS5Pl/WuHrjNVPimjus=",
"attachment": {
"hash": "f6c7a0fbe0b582c8e293c787df084d869fcfbb1ed253abf042bc0822ed3d702b",
"size": 2398,
"filename": "X4AGLwdqSLcL__rYNWWFtfT1CnCt94N7jSHB6cabFBU=.pem",
"location": "security-state-staging/intermediates/c71b6605-bfbe-4e05-b6b5-330d8b8d45c6.pem",
"mimetype": "application/x-pem-file"
},
"id": "7f7bab56-8394-4df2-9fb6-38c3c73ed596",
"last_modified": 1752634622689
},
{
"schema": 1752631063928,
"derHash": "DpdeYqgwMOrj9EG6/7/XV0+3I17stQ8fdH348FBtJF4=",
"attachment": {
"hash": "427314e9b431619df2a582efee7af27462a4280becca49d6e4f1766e155b9398",
"size": 1252,
"filename": "aRfTKraYCxRcgK83CNuXDEPgOjT8-Nb6by2DridqnCQ=.pem",
"location": "security-state-staging/intermediates/56f251d4-9c5c-4fbb-9151-f0fd927bd905.pem",
"mimetype": "application/x-pem-file"
},
"id": "bb7cf118-78d3-41a2-b3be-09ec709dced8",
"last_modified": 1752634622686
},
{
"schema": 1752587864240,
"derHash": "LSCKTMC+QhaUfZZdOu+w43iX12kd3rAX5T5cB4vNNEw=",
"attachment": {
"hash": "aa8b4daa9dd2371f283c508baff98aef07de0de576c9c9d3159a823b724c7df8",
"size": 2682,
"filename": "rHb2OkbnYbWswyWXBckgy38FY9JI2NGA-TSvaAmaFfk=.pem",
"location": "security-state-staging/intermediates/26c71151-a442-4b12-a27e-16f66e950182.pem",
"mimetype": "application/x-pem-file"
},
"id": "a8c02be2-1bf2-4dd6-8294-a00fb0433d20",
"last_modified": 1752591422549
},
{
"schema": 1752587863094,
"derHash": "dotnRqKMSMw1AkEB5Y+XhvVrZ2o86UxS+WjriI3SNy4=",
"attachment": {
"hash": "360cb955c8df54989d7f9f5408472a2b6e54ca85f0318701657cb46fb8bad2bd",
"size": 2101,
"filename": "YD928oyf66g-x1HttmyNdSPqQP5J_nRCdin1Dau89Vo=.pem",
"location": "security-state-staging/intermediates/0cb909fe-022f-4ae1-8f53-5cb0d1704c56.pem",
"mimetype": "application/x-pem-file"
},
"id": "345e6ce5-5cda-4a03-ab2b-29012db8d064",
"last_modified": 1752591422546
},
{
"schema": 1752155863326,
"derHash": "dx59bC13t7kOG0/32/6j4a19JJ0Ncp7QRVZ7XBZAknY=",
@ -10110,24 +10539,6 @@
"id": "a206224b-c943-44b0-b74e-3c4bfb484c15",
"last_modified": 1690297023205
},
{
"schema": 1689929284314,
"derHash": "4O5LQh2QWSJPDNOte8kFCx3teHGKStJtjeP7QCEPH6E=",
"subject": "CN=GlobalSign Atlas R3 DV ACME CA 2023 Q4,O=GlobalSign nv-sa,C=BE",
"subjectDN": "MFkxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8wLQYDVQQDEyZHbG9iYWxTaWduIEF0bGFzIFIzIERWIEFDTUUgQ0EgMjAyMyBRNA==",
"whitelist": false,
"attachment": {
"hash": "8ad44e3b2a107c4708f63fa28c341b96ed2b6a01cd16c3ced0aee2858288515b",
"size": 1642,
"filename": "OB-rJj9cwenrStgWOxc0Kf8noe4X1ba9o2XQqsoa5jk=.pem",
"location": "security-state-staging/intermediates/6cea8a9d-7dc4-46ef-b07f-89fb4c77d86a.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "OB+rJj9cwenrStgWOxc0Kf8noe4X1ba9o2XQqsoa5jk=",
"crlite_enrolled": false,
"id": "f77f9ad4-d759-4cbd-920d-992d5b6cf0e8",
"last_modified": 1689929823491
},
{
"schema": 1689929282855,
"derHash": "5G+yp1CXo0XUJG3PRKENqnHZ/Q6/q2G6Z+bbhO5bbKs=",
@ -10146,78 +10557,6 @@
"id": "5fb08fd5-f7ee-41ca-8644-f594733c1895",
"last_modified": 1689929823489
},
{
"schema": 1689929282560,
"derHash": "uMVBjEPynSjM7mzCeVzqhNCyKUmxYll2ZveJMSbDzPU=",
"subject": "CN=GlobalSign Atlas R3 OV ACME CA 2023 Q4,O=GlobalSign nv-sa,C=BE",
"subjectDN": "MFkxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8wLQYDVQQDEyZHbG9iYWxTaWduIEF0bGFzIFIzIE9WIEFDTUUgQ0EgMjAyMyBRNA==",
"whitelist": false,
"attachment": {
"hash": "1ccf59e6615d165b2170631b72253a798e6146661b5358e41cad12d64fd6e7a3",
"size": 1642,
"filename": "Wy0iIjIgLwqOCDhp9KhOtrT36mRLAjRtIhKru02-58Y=.pem",
"location": "security-state-staging/intermediates/fe842f07-42c4-4bfb-a0f5-71c9c698b366.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "Wy0iIjIgLwqOCDhp9KhOtrT36mRLAjRtIhKru02+58Y=",
"crlite_enrolled": false,
"id": "44ccbf06-3435-4f16-aaa3-b95248156eaa",
"last_modified": 1689929823486
},
{
"schema": 1689929282136,
"derHash": "Z6n3GigsStB1hsope5FJJsLh0zHF9kpGr719Y3jYmGg=",
"subject": "CN=GlobalSign Atlas R3 OV TLS CA 2023 Q4,O=GlobalSign nv-sa,C=BE",
"subjectDN": "MFgxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS4wLAYDVQQDEyVHbG9iYWxTaWduIEF0bGFzIFIzIE9WIFRMUyBDQSAyMDIzIFE0",
"whitelist": false,
"attachment": {
"hash": "17f521d76b4ad43d738b4b2bf4e955d1e914c141b237d0478f9e40efd8dca441",
"size": 1642,
"filename": "8y6mbhF5B8zzV4nMYCIe0Ql-uu5fT77-Au4Wf7VCOhA=.pem",
"location": "security-state-staging/intermediates/912f1794-1855-42ae-89fd-fdbcf439b265.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "8y6mbhF5B8zzV4nMYCIe0Ql+uu5fT77+Au4Wf7VCOhA=",
"crlite_enrolled": false,
"id": "a056713a-fd76-406e-807e-8b7470ae43dd",
"last_modified": 1689929823483
},
{
"schema": 1689929280659,
"derHash": "uzK5BEFj1znoIjOuvH7zojVlt0gkLv4JcwmHSCh9nnY=",
"subject": "CN=GlobalSign Atlas R3 DV TLS CA 2023 Q4,O=GlobalSign nv-sa,C=BE",
"subjectDN": "MFgxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS4wLAYDVQQDEyVHbG9iYWxTaWduIEF0bGFzIFIzIERWIFRMUyBDQSAyMDIzIFE0",
"whitelist": false,
"attachment": {
"hash": "6f88b74bde982f331b5e99aed97cff1caf4a2fa3a61df425417f9b5940a2045d",
"size": 1642,
"filename": "7d8PMwb2-WiKH-yPgprnp0lC28nA19XzSAWpGeJO254=.pem",
"location": "security-state-staging/intermediates/b2dfbd08-5fdf-45f7-815f-038138005eb7.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "7d8PMwb2+WiKH+yPgprnp0lC28nA19XzSAWpGeJO254=",
"crlite_enrolled": false,
"id": "61168bfc-8a2a-41b3-a899-998bb20267b3",
"last_modified": 1689929823481
},
{
"schema": 1689929281280,
"derHash": "yQXK/e0ZurV0Lzoy9sPN76TklWSjSOqEvi0DNhCBbsY=",
"subject": "CN=GlobalSign Atlas ECCR5 OV ACME CA 2023 Q4,O=GlobalSign nv-sa,C=BE",
"subjectDN": "MFwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTIwMAYDVQQDEylHbG9iYWxTaWduIEF0bGFzIEVDQ1I1IE9WIEFDTUUgQ0EgMjAyMyBRNA==",
"whitelist": false,
"attachment": {
"hash": "182f60a8831ce67d003b467607983ca3340ee80435a2a79087ed8f31e79942d2",
"size": 1199,
"filename": "WYAZh0EyGyBR7RhWjRK4md0Y-vp6X9snRCihQFSpyzI=.pem",
"location": "security-state-staging/intermediates/4d70acd8-7983-41ee-a91b-4c61613353fd.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "WYAZh0EyGyBR7RhWjRK4md0Y+vp6X9snRCihQFSpyzI=",
"crlite_enrolled": false,
"id": "5fbce1b6-d222-468d-aaf0-12c492a56f55",
"last_modified": 1689929823478
},
{
"schema": 1689929280952,
"derHash": "P29X8f4ls9bwiPF3BPfjdq46kRUdzY4ZF8s6QXhbXw0=",
@ -10236,132 +10575,6 @@
"id": "709b3169-b97e-4d71-9fa2-836095db24eb",
"last_modified": 1689929823475
},
{
"schema": 1689929281847,
"derHash": "uX4QN+TNXAaScWAK/R/zRe6uG8LAI6X7qLFjJg/KXas=",
"subject": "CN=GlobalSign Atlas R46 EV TLS CA 2023 Q4,O=GlobalSign nv-sa,C=BE",
"subjectDN": "MFkxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8wLQYDVQQDEyZHbG9iYWxTaWduIEF0bGFzIFI0NiBFViBUTFMgQ0EgMjAyMyBRNA==",
"whitelist": false,
"attachment": {
"hash": "93fd5c1516af4e6774d20b252b76dee9908b24eba9e0e9cd2b35ba384699a7d4",
"size": 2345,
"filename": "uX3oDJ-7Djd7-44Ak5qYUVf02wuentlL6GZ1aw1YRYY=.pem",
"location": "security-state-staging/intermediates/f4c12995-d0ce-4838-976a-f97e989e87df.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "uX3oDJ+7Djd7+44Ak5qYUVf02wuentlL6GZ1aw1YRYY=",
"crlite_enrolled": false,
"id": "9e30af5c-6339-41dc-89bf-4fcd2f6b8d0b",
"last_modified": 1689929823473
},
{
"schema": 1689929284026,
"derHash": "14bSKnvWHQamhYY3bcEiYGNZL02GSsTnva5Ar7YiON0=",
"subject": "CN=GlobalSign Atlas ECCR5 DV ACME CA 2023 Q4,O=GlobalSign nv-sa,C=BE",
"subjectDN": "MFwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTIwMAYDVQQDEylHbG9iYWxTaWduIEF0bGFzIEVDQ1I1IERWIEFDTUUgQ0EgMjAyMyBRNA==",
"whitelist": false,
"attachment": {
"hash": "77eaa752cf1c30582351fb7243578535da488502544c57e92e3b3f8143dd5dd9",
"size": 1199,
"filename": "cSKPSXoZl1cGh06RPXxurEKjGQq_K_dKQCAlMuCG4l0=.pem",
"location": "security-state-staging/intermediates/d750c111-7d23-416e-8068-905f41c7e342.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "cSKPSXoZl1cGh06RPXxurEKjGQq/K/dKQCAlMuCG4l0=",
"crlite_enrolled": false,
"id": "d0ffc315-86cd-4808-be81-0b566d69392c",
"last_modified": 1689929823470
},
{
"schema": 1689929283421,
"derHash": "rU9O/t/oE3j9IW4WjuHraXK5zreWMD6Uv3bFr2NQvaM=",
"subject": "CN=GlobalSign Atlas R3 AlphaSSL CA 2023 Q4,O=GlobalSign nv-sa,C=BE",
"subjectDN": "MFoxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTAwLgYDVQQDEydHbG9iYWxTaWduIEF0bGFzIFIzIEFscGhhU1NMIENBIDIwMjMgUTQ=",
"whitelist": false,
"attachment": {
"hash": "95d4a021b1dcf98e8985e718cc9222e5ece6da54488091129f5ddf81edd7cfb9",
"size": 1642,
"filename": "Ue5JDkm1vKkgoe0owofi-323lQ57ZpDZ6Vl5Vcp4gw0=.pem",
"location": "security-state-staging/intermediates/a0cee078-bdda-427e-849d-e836836d9d2b.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "Ue5JDkm1vKkgoe0owofi+323lQ57ZpDZ6Vl5Vcp4gw0=",
"crlite_enrolled": false,
"id": "73a2be3c-bc63-47d2-91ee-1feaafae1c5a",
"last_modified": 1689929823468
},
{
"schema": 1689929283140,
"derHash": "Hf/CrVtCPcxxXf5UqhF/JSWXTZVx/qgoGSMoB/St1O4=",
"subject": "CN=GlobalSign Atlas E46 EV TLS CA 2023 Q4,O=GlobalSign nv-sa,C=BE",
"subjectDN": "MFkxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8wLQYDVQQDEyZHbG9iYWxTaWduIEF0bGFzIEU0NiBFViBUTFMgQ0EgMjAyMyBRNA==",
"whitelist": false,
"attachment": {
"hash": "e2da782c3fe2f0d5cb0a7d4b222c05af6dae3b3999e37e146324bb7e601bbf1b",
"size": 1195,
"filename": "iTrzCOTGjFPpfCYhj9X_Gett3pj5oPU6MHyfI5aK50M=.pem",
"location": "security-state-staging/intermediates/20a670fd-fde7-4163-acfe-e8a9c3f78736.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "iTrzCOTGjFPpfCYhj9X/Gett3pj5oPU6MHyfI5aK50M=",
"crlite_enrolled": false,
"id": "64b33064-84fc-47ef-a270-93f8591bf116",
"last_modified": 1689929823465
},
{
"schema": 1689929283712,
"derHash": "+79Qcw6DenQ2CFySSDVQ/WXYXg5N/xIfd88PO3xAvUw=",
"subject": "CN=GlobalSign Atlas ECCR5 OV TLS CA 2023 Q4,O=GlobalSign nv-sa,C=BE",
"subjectDN": "MFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhHbG9iYWxTaWduIEF0bGFzIEVDQ1I1IE9WIFRMUyBDQSAyMDIzIFE0",
"whitelist": false,
"attachment": {
"hash": "aa07e6585366939a0ee664715f610693fcebe885770e531776bfd3566cd643e6",
"size": 1195,
"filename": "GZFNSPIPKfNKrHiSXuWQzZ75qWd0SAHZLJ8h-n_FnlE=.pem",
"location": "security-state-staging/intermediates/b3ec6318-865f-4ab8-88c0-3a6eb9a5455f.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "GZFNSPIPKfNKrHiSXuWQzZ75qWd0SAHZLJ8h+n/FnlE=",
"crlite_enrolled": false,
"id": "322e6805-9106-4830-bbad-cdf4f7ff4c76",
"last_modified": 1689929823463
},
{
"schema": 1689929280374,
"derHash": "xayC1W89q7x9J5D/vUzWvgdXLOR63kVtsw/EjmA1LP0=",
"subject": "CN=GlobalSign Atlas ECCR5 DV TLS CA 2023 Q4,O=GlobalSign nv-sa,C=BE",
"subjectDN": "MFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhHbG9iYWxTaWduIEF0bGFzIEVDQ1I1IERWIFRMUyBDQSAyMDIzIFE0",
"whitelist": false,
"attachment": {
"hash": "c9a0fb7f0f68f8decb18ed5ea9d6ddfea81b562ffb01c0c7a465fd5e515111e0",
"size": 1199,
"filename": "Fy52G4lIb3umo5xiR8oga5RUXjqel5Lry4PvOdA58_c=.pem",
"location": "security-state-staging/intermediates/d992cc23-cd05-4cb8-8a23-c31049e5065a.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "Fy52G4lIb3umo5xiR8oga5RUXjqel5Lry4PvOdA58/c=",
"crlite_enrolled": false,
"id": "819e7f68-f9de-405e-bad6-8e6b23829b7b",
"last_modified": 1689929823460
},
{
"schema": 1689929281565,
"derHash": "SVkwa66MVI0xnRhVw0ST960Aubr4JL39lv8sPDK9ruo=",
"subject": "CN=GlobalSign Atlas R6 EV TLS CA 2023 Q4,O=GlobalSign nv-sa,C=BE",
"subjectDN": "MFgxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS4wLAYDVQQDEyVHbG9iYWxTaWduIEF0bGFzIFI2IEVWIFRMUyBDQSAyMDIzIFE0",
"whitelist": false,
"attachment": {
"hash": "22e73a22ef29b81de399719608ae4ad95852e691353a2b08dff7afb76d2c4346",
"size": 2349,
"filename": "NLdLGwnautRQRndsSeA-ENZvLXuVuwlCVRZvl5J69bo=.pem",
"location": "security-state-staging/intermediates/561aeab2-e7d3-4ade-ac89-74e25a7f9546.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "NLdLGwnautRQRndsSeA+ENZvLXuVuwlCVRZvl5J69bo=",
"crlite_enrolled": false,
"id": "3a6faa8b-f53e-4ed7-a4fa-dcc6ea82aa56",
"last_modified": 1689929823457
},
{
"schema": 1689778080731,
"derHash": "NIXD3+mMXVQoZTR5u5BidYDuiSiQpi2g2avOOiAC6OQ=",
@ -22620,42 +22833,6 @@
"id": "3c597962-3dc2-4de5-82fe-2897023b80eb",
"last_modified": 1663786626309
},
{
"schema": 1663786359609,
"derHash": "JJvmXwx6sP47dkizDODrPPaRQCxy2stAzxRinGA8ujY=",
"subject": "CN=BlackCert\\, Inc. RSA DV Certification Authority,O=BlackCert\\, Inc.,L=Denver,ST=CO,C=US",
"subjectDN": "MH4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRgwFgYDVQQKEw9CbGFja0NlcnQsIEluYy4xNzA1BgNVBAMTLkJsYWNrQ2VydCwgSW5jLiBSU0EgRFYgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHk=",
"whitelist": false,
"attachment": {
"hash": "ffb41132fe60448dca99fed8dc36b06e864ec803804810ddb99ded957920e092",
"size": 2154,
"filename": "dnTrbfgvJOGlJse4RxYg30jhwWfQfKyNYkL6SpGs_1I=.pem",
"location": "security-state-staging/intermediates/c4c47a34-c4f5-4229-ae72-be617d7272f9.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "dnTrbfgvJOGlJse4RxYg30jhwWfQfKyNYkL6SpGs/1I=",
"crlite_enrolled": false,
"id": "b3de065f-383e-4062-984d-582c5ee787af",
"last_modified": 1663786626302
},
{
"schema": 1663786358729,
"derHash": "6+ABXvZBxICVTtKmiEL8zSqKeSE67tg23fpigujqj2o=",
"subject": "CN=BlackCert\\, Inc. RSA EV Certification Authority,OU=Controlled by COMODO exclusively for BlackCert\\, Inc.,O=BlackCert\\, Inc.,L=Denver,ST=CO,C=US",
"subjectDN": "MIG9MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEYMBYGA1UEChMPQmxhY2tDZXJ0LCBJbmMuMT0wOwYDVQQLEzRDb250cm9sbGVkIGJ5IENPTU9ETyBleGNsdXNpdmVseSBmb3IgQmxhY2tDZXJ0LCBJbmMuMTcwNQYDVQQDEy5CbGFja0NlcnQsIEluYy4gUlNBIEVWIENlcnRpZmljYXRpb24gQXV0aG9yaXR5",
"whitelist": false,
"attachment": {
"hash": "102f83bddea759d6a13c4385f9633aba85ef379cd52dde79f7d2c10f4d463dcb",
"size": 2272,
"filename": "nq1PHRuOp_qQ-vlMQDWIjBXQS9CPEsH5CLd-dlkam7U=.pem",
"location": "security-state-staging/intermediates/ead2cc1f-3b5a-4901-9bef-7454e11f15e1.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "nq1PHRuOp/qQ+vlMQDWIjBXQS9CPEsH5CLd+dlkam7U=",
"crlite_enrolled": false,
"id": "3b4cd15a-23cd-4507-bbc7-c4eed10c1309",
"last_modified": 1663786626295
},
{
"schema": 1663786360454,
"derHash": "00GZhqSHZYJdE7MBVHsn3Fag7NMJGYr+mn1/qtZJaao=",
@ -22872,24 +23049,6 @@
"id": "d177b415-a735-49d3-acf1-d483a8cf8445",
"last_modified": 1663786626107
},
{
"schema": 1663786337728,
"derHash": "mHpclYS0a1mHjkJGD4Pk1h9MJyI2aUbU0hbzNqbxKPc=",
"subject": "CN=BlackCert\\, Inc. ECC DV Certification Authority,O=BlackCert\\, Inc.,L=Denver,ST=CO,C=US",
"subjectDN": "MH4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRgwFgYDVQQKEw9CbGFja0NlcnQsIEluYy4xNzA1BgNVBAMTLkJsYWNrQ2VydCwgSW5jLiBFQ0MgRFYgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHk=",
"whitelist": false,
"attachment": {
"hash": "1f922e42ebd0e6bf8d650a099283a6fce1dbaaa0d43e103c152fb431a9173a7c",
"size": 1313,
"filename": "UHhlKE9aTixVYvtmCIINV9nOgVj-gicuzrl4dZJypeA=.pem",
"location": "security-state-staging/intermediates/4a348e85-a781-41c4-b9f5-7cc66956acaf.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "UHhlKE9aTixVYvtmCIINV9nOgVj+gicuzrl4dZJypeA=",
"crlite_enrolled": false,
"id": "b7188189-ae9f-4f81-a602-7a6df6946a84",
"last_modified": 1663786626094
},
{
"schema": 1663786332479,
"derHash": "2dgcAVBdsZNxAhDZtCe2Uynv/yVhNfb7L+2+U+WTvwI=",
@ -23178,24 +23337,6 @@
"id": "5cb1707f-a3c5-4bec-93f5-ea54cf32feb3",
"last_modified": 1663786625784
},
{
"schema": 1663786291500,
"derHash": "MoTgNczXH3odBjrpjimx5ZEjEa2fbZEYhMr513HTfE0=",
"subject": "CN=BlackCert\\, Inc. RSA OV Certification Authority,O=BlackCert\\, Inc.,L=Denver,ST=CO,C=US",
"subjectDN": "MH4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRgwFgYDVQQKEw9CbGFja0NlcnQsIEluYy4xNzA1BgNVBAMTLkJsYWNrQ2VydCwgSW5jLiBSU0EgT1YgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHk=",
"whitelist": false,
"attachment": {
"hash": "35bdce85f3230d2b21cf676bcf2eb1b6f77b6324e7f590ff39e91ee3d18226f7",
"size": 2150,
"filename": "B5IV9Zui5uDR_htFQKKJviedASQLhuhY2W547xasQvc=.pem",
"location": "security-state-staging/intermediates/b12990b4-e8de-4d6b-82d3-76eb85619484.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "B5IV9Zui5uDR/htFQKKJviedASQLhuhY2W547xasQvc=",
"crlite_enrolled": false,
"id": "b5f8be2f-292a-4792-9a15-d1f31c2c9f23",
"last_modified": 1663786625756
},
{
"schema": 1663786294128,
"derHash": "XKBOk6WgfXTG+0r+Gz1NvGLCXOdNhhfH7mbLVDi6ZX8=",
@ -23610,24 +23751,6 @@
"id": "3377e410-48b3-4539-b704-678f14914f2d",
"last_modified": 1663786625358
},
{
"schema": 1663786230301,
"derHash": "OcedKkz/4Jxh3mnsFJkdjpXOcTTs9x7weZANCtVHjK0=",
"subject": "CN=BlackCert\\, Inc. ECC EV Certification Authority,OU=Controlled by COMODO exclusively for BlackCert\\, Inc.,O=BlackCert\\, Inc.,L=Denver,ST=CO,C=US",
"subjectDN": "MIG9MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEYMBYGA1UEChMPQmxhY2tDZXJ0LCBJbmMuMT0wOwYDVQQLEzRDb250cm9sbGVkIGJ5IENPTU9ETyBleGNsdXNpdmVseSBmb3IgQmxhY2tDZXJ0LCBJbmMuMTcwNQYDVQQDEy5CbGFja0NlcnQsIEluYy4gRUNDIEVWIENlcnRpZmljYXRpb24gQXV0aG9yaXR5",
"whitelist": false,
"attachment": {
"hash": "cbf77056b300bdaecc476ef372be42ee1bbb163d57247103d428fd65833bc732",
"size": 1431,
"filename": "YMJYGd5waNYmUtnRh_uwLFzS5lXUfdRoNphUMGKD7UY=.pem",
"location": "security-state-staging/intermediates/b5439e20-bf07-4d4a-8a0e-1427b2b6b0f1.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "YMJYGd5waNYmUtnRh/uwLFzS5lXUfdRoNphUMGKD7UY=",
"crlite_enrolled": false,
"id": "50d77a86-7f84-4da8-8e05-e89dfa9cd97b",
"last_modified": 1663786625337
},
{
"schema": 1663786220064,
"derHash": "qYQdLkfL5tcdj6/fODh/k/Q9dteSUE77F6IQIMWMC4k=",
@ -23988,24 +24111,6 @@
"id": "9b2f91f7-174b-43a3-8585-26d804165907",
"last_modified": 1663786624996
},
{
"schema": 1663786184777,
"derHash": "d1MwBWSsZl1W/vW9r9mciKcxwh6tjjmWyzc+ea39v9w=",
"subject": "CN=SignSec High-Assurance OV Authority,OU=SSL Department,O=FBS Inc,L=Irvine,ST=CA,C=US",
"subjectDN": "MIGEMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExDzANBgNVBAcTBklydmluZTEQMA4GA1UEChMHRkJTIEluYzEXMBUGA1UECxMOU1NMIERlcGFydG1lbnQxLDAqBgNVBAMTI1NpZ25TZWMgSGlnaC1Bc3N1cmFuY2UgT1YgQXV0aG9yaXR5",
"whitelist": false,
"attachment": {
"hash": "b3f6b2b0fcf51e58b433e5f7227ed488ff7643994e55098dff3724b805ca9a1b",
"size": 2162,
"filename": "-NJzGF6Gew8FPxWa8xRHx0tz0t0bJjNH38uDaSIgIqI=.pem",
"location": "security-state-staging/intermediates/f538856a-1986-4ea8-9af5-e9a9636d887e.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "+NJzGF6Gew8FPxWa8xRHx0tz0t0bJjNH38uDaSIgIqI=",
"crlite_enrolled": false,
"id": "30bd429d-11ce-4d9a-b5a8-5c55e73d232c",
"last_modified": 1663786624969
},
{
"schema": 1663786182228,
"derHash": "GY4zLxD6D1ivCDrpZLxkQfBs0PrTGbEjX+PtD3xur5M=",
@ -24114,24 +24219,6 @@
"id": "a5d57b58-42af-4896-8d42-5978e9342d5b",
"last_modified": 1663786624892
},
{
"schema": 1663786174523,
"derHash": "LHPumlL/rQcWa4co12gdjL79makGYzRbJarPmx7x8zM=",
"subject": "CN=SignSec Certification Authority,OU=SSL Department,O=FBS Inc,L=Irvine,ST=CA,C=US",
"subjectDN": "MIGAMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExDzANBgNVBAcTBklydmluZTEQMA4GA1UEChMHRkJTIEluYzEXMBUGA1UECxMOU1NMIERlcGFydG1lbnQxKDAmBgNVBAMTH1NpZ25TZWMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHk=",
"whitelist": false,
"attachment": {
"hash": "330eca8b3c6c71906174a6f376dd96a4be63f53fd0d56981b4dfeae2d6a7401d",
"size": 2158,
"filename": "41fzHe29HqEJ0_pGALXNvRuPsmNV1cP7w8L-2fi7OPc=.pem",
"location": "security-state-staging/intermediates/c7c190cf-5113-4753-9b26-d5f26b89127f.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "41fzHe29HqEJ0/pGALXNvRuPsmNV1cP7w8L+2fi7OPc=",
"crlite_enrolled": false,
"id": "2506e9cb-3ad3-4e08-a82b-9b825f074989",
"last_modified": 1663786624885
},
{
"schema": 1663786173668,
"derHash": "428WX/dznNkAolYnZ7Pq++Z6NMg8OoL0wh1fUcPtGR4=",
@ -24222,24 +24309,6 @@
"id": "50b8ada5-881a-4861-8618-669919d34962",
"last_modified": 1663786624771
},
{
"schema": 1663786252838,
"derHash": "PKGOHtvmhg1wkU6aoNuOYeGT5+9UfNq4tN9UX0bexrs=",
"subject": "CN=BlackCert\\, Inc. ECC OV Certification Authority,O=BlackCert\\, Inc.,L=Denver,ST=CO,C=US",
"subjectDN": "MH4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRgwFgYDVQQKEw9CbGFja0NlcnQsIEluYy4xNzA1BgNVBAMTLkJsYWNrQ2VydCwgSW5jLiBFQ0MgT1YgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHk=",
"whitelist": false,
"attachment": {
"hash": "37a914d05ca64eee1c00792d05096a08d43a4139983cca5f78abd8e569677510",
"size": 1313,
"filename": "bQkT-mQD0009MLZyZZBcx4FuOI9_hOoj322Ms-tQWFo=.pem",
"location": "security-state-staging/intermediates/6162d339-3ba2-4905-a428-441a37839f24.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "bQkT+mQD0009MLZyZZBcx4FuOI9/hOoj322Ms+tQWFo=",
"crlite_enrolled": false,
"id": "db21ebe3-6953-4f00-a637-b99d8c6ae432",
"last_modified": 1663786624754
},
{
"schema": 1663699718906,
"derHash": "LBcQZNv6KAofKU9y4qH8JMhhEbI3I9uTddMASyfnszs=",
@ -27822,24 +27891,6 @@
"id": "4ac33a0c-1052-4702-874c-dc40ae073f75",
"last_modified": 1601517441658
},
{
"schema": 1592519327482,
"derHash": "RbKwjhtYlIoCi+E6Z8DiDUskZq4rbsYlDrsQ/Wt/gjk=",
"subject": "CN=Trustwave Secure Global Extended Validation CA\\, Level 1,O=Trustwave Holdings\\, Inc.,L=Chicago,ST=Illinois,C=US",
"subjectDN": "MIG4MQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjFAMD4GA1UEAxM3VHJ1c3R3YXZlIFNlY3VyZSBHbG9iYWwgRXh0ZW5kZWQgVmFsaWRhdGlvbiBDQSwgTGV2ZWwgMTEfMB0GCSqGSIb3DQEJARYQY2FAdHJ1c3R3YXZlLmNvbQ==",
"whitelist": false,
"attachment": {
"hash": "296ea0b36874faa2487773b3da5792b5b41278241a226affe7e50a6ba22c0e72",
"size": 1784,
"filename": "jyPoX5LnCMukfvFxrxuJWUrZycp69MmdphXiTrhpMU4=.pem",
"location": "security-state-staging/intermediates/3c07694f-03e7-4fdb-b353-876f81151fda.pem",
"mimetype": "application/x-pem-file"
},
"pubKeyHash": "jyPoX5LnCMukfvFxrxuJWUrZycp69MmdphXiTrhpMU4=",
"crlite_enrolled": false,
"id": "170a74a6-1485-4c35-aecb-8b37550de004",
"last_modified": 1600461980794
},
{
"schema": 1591167038909,
"derHash": "7tCpXn3jylPkpscqhrPxZMDCPjgPj2t5o0nvF4Q0LB8=",
@ -29875,5 +29926,5 @@
"last_modified": 1559865884636
}
],
"timestamp": 1752159422751
"timestamp": 1754751422477
}

View file

@ -1,5 +1,245 @@
{
"data": [
{
"schema": 1752253362735,
"details": {
"bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1976939",
"who": "",
"why": "",
"name": "",
"created": ""
},
"enabled": false,
"issuerName": "MG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBSb290IEdDIENB",
"serialNumber": "HwAAAAfDD7xDFE07ggAAAAAABw==",
"id": "d59a7ea9-fef8-4133-886c-31a25f543e7e",
"last_modified": 1752529408928
},
{
"schema": 1752253362665,
"details": {
"bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1976939",
"who": "",
"why": "",
"name": "",
"created": ""
},
"enabled": false,
"issuerName": "MD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290",
"serialNumber": "RxrvnHcqwAoh57KRc7nqtg==",
"id": "fc0317f6-0069-43a3-aaf9-0d36dcffd324",
"last_modified": 1752529408923
},
{
"schema": 1752253362595,
"details": {
"bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1976939",
"who": "",
"why": "",
"name": "",
"created": ""
},
"enabled": false,
"issuerName": "MEcxCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDElMCMGA1UEAwwcVUNBIEV4dGVuZGVkIFZhbGlkYXRpb24gUm9vdA==",
"serialNumber": "e9IM+dbh+TTZmajWegeWGQ==",
"id": "ab55ad4b-0b23-4774-91c7-ab5193d3568e",
"last_modified": 1752529408918
},
{
"schema": 1752253362523,
"details": {
"bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1976939",
"who": "",
"why": "",
"name": "",
"created": ""
},
"enabled": false,
"issuerName": "MIGPMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHQXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UEAxMpU3RhcmZpZWxkIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzI=",
"serialNumber": "MnF9WHtYC1C4Kzig8ghKgA==",
"id": "9f4aacb8-7469-43da-87d8-c9f113589435",
"last_modified": 1752529408912
},
{
"schema": 1752253362453,
"details": {
"bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1976939",
"who": "",
"why": "",
"name": "",
"created": ""
},
"enabled": false,
"issuerName": "MHsxCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2VydmljZXM=",
"serialNumber": "dvI4YMRLl0rwkuZJqJYF0A==",
"id": "f8fc9c61-d943-40de-b3e2-9027da2ababd",
"last_modified": 1752529408907
},
{
"schema": 1752253362384,
"details": {
"bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1976939",
"who": "",
"why": "",
"name": "",
"created": ""
},
"enabled": false,
"issuerName": "MD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290",
"serialNumber": "eUUZ3aDxJMSOGz6vljjIkQ==",
"id": "18da46dc-e949-4466-8070-d54e397b4e7c",
"last_modified": 1752529408901
},
{
"schema": 1752253362313,
"details": {
"bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1976939",
"who": "",
"why": "",
"name": "",
"created": ""
},
"enabled": false,
"issuerName": "MHsxCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2VydmljZXM=",
"serialNumber": "AM9mvXf+Q8vcLtaEDy7JtYs=",
"id": "6fc15a27-f22e-414b-a8c7-93be30e2ff91",
"last_modified": 1752529408896
},
{
"schema": 1752253362243,
"details": {
"bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1976939",
"who": "",
"why": "",
"name": "",
"created": ""
},
"enabled": false,
"issuerName": "MD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290",
"serialNumber": "Q0JnvsaMKtKEa4OrcZ/esA==",
"id": "e38a7b90-5516-4383-9dc2-b0322ce1cad5",
"last_modified": 1752529408890
},
{
"schema": 1752253362101,
"details": {
"bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1976939",
"who": "",
"why": "",
"name": "",
"created": ""
},
"enabled": false,
"issuerName": "MHsxCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2VydmljZXM=",
"serialNumber": "APW9c8guN8LMJ4hGuq43ybQ=",
"id": "5c45ef72-d30c-4cf2-a596-5b22de8793b0",
"last_modified": 1752529408885
},
{
"schema": 1752253362015,
"details": {
"bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1976939",
"who": "",
"why": "",
"name": "",
"created": ""
},
"enabled": false,
"issuerName": "MGsxCzAJBgNVBAYTAklUMQ4wDAYDVQQHDAVNaWxhbjEjMCEGA1UECgwaQWN0YWxpcyBTLnAuQS4vMDMzNTg1MjA5NjcxJzAlBgNVBAMMHkFjdGFsaXMgQXV0aGVudGljYXRpb24gUm9vdCBDQQ==",
"serialNumber": "LNSK07EeD4k=",
"id": "9f83f0b8-c5af-4cc2-996d-8896890af6a5",
"last_modified": 1752529408880
},
{
"schema": 1752253361876,
"details": {
"bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1976939",
"who": "",
"why": "",
"name": "",
"created": ""
},
"enabled": false,
"issuerName": "MHsxCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2VydmljZXM=",
"serialNumber": "AL5MsT5GaLfGIuqr8kaFA/U=",
"id": "4967039d-7e90-48a7-98db-037e23ea9f9d",
"last_modified": 1752529408875
},
{
"schema": 1752253361946,
"details": {
"bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1976939",
"who": "",
"why": "",
"name": "",
"created": ""
},
"enabled": false,
"issuerName": "MHsxCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2VydmljZXM=",
"serialNumber": "Zf3g+mZYAG+ArtDLZFPqDA==",
"id": "180aa427-89bf-4bd3-8d1c-e48389ebb82c",
"last_modified": 1752529408870
},
{
"schema": 1752253362172,
"details": {
"bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1976939",
"who": "",
"why": "",
"name": "",
"created": ""
},
"enabled": false,
"issuerName": "MEcxCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDElMCMGA1UEAwwcVUNBIEV4dGVuZGVkIFZhbGlkYXRpb24gUm9vdA==",
"serialNumber": "TYuntN+eEVPhyA3uPm9Amg==",
"id": "585c193d-eae1-49ed-a91b-6041d6e8c176",
"last_modified": 1752529408864
},
{
"schema": 1752200138909,
"details": {
"bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1976939",
"who": "",
"why": "",
"name": "",
"created": ""
},
"enabled": false,
"issuerName": "MHsxCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2VydmljZXM=",
"serialNumber": "ALktcwNAMksOwBvs4gx6Bo4=",
"id": "838c6528-6ca1-4c77-afd8-1e9d02a9994a",
"last_modified": 1752529408859
},
{
"schema": 1752253361799,
"details": {
"bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1976939",
"who": "",
"why": "",
"name": "",
"created": ""
},
"enabled": false,
"issuerName": "MIGDMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHQXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5jb20sIEluYy4xMTAvBgNVBAMTKEdvIERhZGR5IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzI=",
"serialNumber": "AJ9sVRhHzcEA5yu0GD2FSTE=",
"id": "15f8501a-cc83-450f-8566-bb4c0aef37fd",
"last_modified": 1752529408853
},
{
"schema": 1752253361727,
"details": {
"bug": "https://bugzilla.mozilla.org/show_bug.cgi?id=1976939",
"who": "",
"why": "",
"name": "",
"created": ""
},
"enabled": false,
"issuerName": "MD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290",
"serialNumber": "VHq45lkYorm/2hSmjcWOsg==",
"id": "919e96e8-975a-49a0-b72e-360eec753791",
"last_modified": 1752529408848
},
{
"schema": 1747778629161,
"details": {
@ -25184,5 +25424,5 @@
"last_modified": 1480349158647
}
],
"timestamp": 1747787134572
"timestamp": 1752529408928
}

View file

@ -1,2 +1,2 @@
20250714124554
https://hg.mozilla.org/releases/mozilla-esr128/rev/81d51b1bf06d4dff8aa050ca9d4b830517b5768d
20250811113756
https://hg.mozilla.org/releases/mozilla-esr128/rev/df0b4a4887880a1b267ca2b4902afee84e80f6e9

View file

@ -35,7 +35,7 @@ RUN /usr/local/sbin/setup_packages.sh $TASKCLUSTER_ROOT_URL $DOCKER_IMAGE_PACKAG
--verbose \
buster \
/srv/buster-amd64 \
http://deb.debian.org/debian || (echo "Debootstrap failed, outputting log:" && cat /srv/buster-amd64/debootstrap/debootstrap.log && exit 1) && \
http://archive.debian.org/debian || (echo "Debootstrap failed, outputting log:" && cat /srv/buster-amd64/debootstrap/debootstrap.log && exit 1) && \
chroot /srv/buster-amd64 /bin/bash -c "\
dpkg --add-architecture arm64 && \
apt-get update && \

View file

@ -2221,6 +2221,8 @@ def build_task(config, tasks):
"kind": config.kind,
"label": task["label"],
"retrigger": "true" if attributes.get("retrigger", False) else "false",
"project": config.params["project"],
"trust-domain": config.graph_config["trust-domain"],
}
)

View file

@ -486,11 +486,6 @@ def which(cmd, mode=os.F_OK | os.X_OK, path=None, exts=None, extra_search_dirs=(
if not exts:
exts = oldexts.split(os.pathsep)
# This ensures that `cmd` without any extensions will be found.
# See: https://bugs.python.org/issue31405
if "." not in exts:
exts.append(".")
os.environ["PATHEXT"] = os.pathsep.join(exts)
try:
path = shutil_which(cmd, mode=mode, path=path)

View file

@ -5,7 +5,6 @@ import os
import sys
import mozunit
import six
from mozfile import which
here = os.path.abspath(os.path.dirname(__file__))
@ -16,10 +15,8 @@ def test_which(monkeypatch):
monkeypatch.chdir(cwd)
if sys.platform == "win32":
if six.PY3:
import winreg
else:
import _winreg as winreg
bindir = os.path.join(cwd, "win")
monkeypatch.setenv("PATH", bindir)
monkeypatch.setattr(winreg, "QueryValue", (lambda k, sk: None))
@ -27,13 +24,13 @@ def test_which(monkeypatch):
assert which("foo.exe").lower() == os.path.join(bindir, "foo.exe").lower()
assert which("foo").lower() == os.path.join(bindir, "foo.exe").lower()
assert (
which("foo", exts=[".FOO", ".BAR"]).lower()
which("foo", exts=[".FOO", ".BAR", "."]).lower()
== os.path.join(bindir, "foo").lower()
)
assert os.environ.get("PATHEXT") != [".FOO", ".BAR"]
assert which("foo.txt") is None
assert which("bar").lower() == os.path.join(bindir, "bar").lower()
assert which("bar", exts=["."]).lower() == os.path.join(bindir, "bar").lower()
assert which("baz").lower() == os.path.join(cwd, "baz.exe").lower()
registered_dir = os.path.join(cwd, "registered")

View file

@ -1,30 +1,30 @@
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQITmpQHgpujFYCAggA
MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECFapQ7gWyWd1BIIEyAQJKpUrgOnb
fgB95Ka3LwheDI2Ls1NYrzuKLTzn+M3n0nd+5ZskvrOJeCPjSCV8LMk7aqDFOAqy
LSx3IXnPK2bcbxV15sGuKkkRGQj5RFPZvvLg6+CKIER7QOfXjaZSzTF4kvsW9DvQ
lgFjFuAc31IzL7Z/yeLO/Y4TS5p1evJUEz6GLNspYmkZMguwYwwYt+pYb1pGjvBY
txMl8U3CzpliYfbrZTU2ttmvkDJGJaQmpU2ZUPJgenpkB3zKQxZDEConserGAgZn
ddlANYrGlfVBy1DL4pqOrPCjTUyifockvgXUCON0HRBELOPY4m3KvsW5zTJACQwz
81OLqgkOssQYMHz54m/bPWbCGubZ0Iz4kcasNb/ijaSbY/o+Csddf1CqvJ4S6fqb
W2nf0jsXUNjoAGxsAxWTJQsUfvwLx2I8rF2Cd9Wd2cfo84OdIKzYT7tWVhDRV7+j
lsY53plSdcJZVbvZPIV6Uxjd9X+TPGpezGG/w1/RgtPu1f/NUoQqYXzrwTSWCBEP
r5ai6nsdG1EhoXni8INIWLXMdWnPYeaJcVUfcbI5IykFRTR+PxdIXxWCLkMb5CAN
7tDCyfFmiVodXK3AUkLJTJ5aBM9wiG8L/6rFDZnqan0FCQkl+gPgw6G5JylRbncN
iI84tSF3vnI9szxHrr2mVLExRrXRCIr2gskda5gtbDfl/PjAtC3MmLIH+OUbQlf0
WPNjOV/DNMt+ceHiSGETR29RjeSXYkhcXBw9m1C7Uqi1Tc5Q8UkQlUimEa88g1vy
BoGFuyG8R+IWAbcCaimsS66Xvq/oTaq8RUT4x9EhvbQRcuxOCP6fvsddlhe9rV++
7CKmk6DJjROa4PliYK4TykpuA2Gx6lYO5UF5unaHWQrlUI6QGbCy3bMIgylU+zKk
KUqluSPXojQD2a5KlYBZUHfbvoD1OPluWimd0C2AXDCeK2Tx8JHQM3FZG8aO5T4i
wkKQSjJNR84NZYw/Ns8l6H02sX+r97Cu9JgYEI+Jf7oiCOzyMaOJCEJ0tTyoxVg7
j/nkinZysYiKJKe06x0Em49vt1DbR7ggc3y35ynSwMJbuc+NdmZ5qwWawum1RDgs
oOEZ4qX+aY6VWJbLm52BBhySjU5bb4Eqb95CTpTGeb6BGSoPADQMypre41Q0SNKf
OpygKfWVLQ2xpEgZG5puLvFphPQNDJT1b97n16EW1NIKn4tIt2vJnHGBTfvP4hL/
uvB1C4GJAmw4j9haLriefWX7OE3VvZXZBzRvVrHddPovjRxJPnBq3HWAkZ9Npn89
DIE9k8tUJTFRSidEDIIRDcMdO+wh4ozf5vuDatI5gF4fApFBryQ65HYH/A2mY80j
lZYQYnEuXr4HqZx9DdLcmelaNn8Vezjhvik4dQt9THEEOhK3rWwyifBsRS/Awdw4
umUDfq6hU96qHanJo4fHF2Cu3mTkcrTcnIZ/7nimjj5Nr7IyR0qfFdQgYHKfOAS9
Vup5j1xNmGJS7+KWy06e6M1MoC9YMRt1GiAXw9rIzMv5uYlfYUhpJl9z/QXcVNnz
lIcyHVZxf3vDQhazDSoFLGv0OkElNcgDIji1xZg8MLF9Yb/4pzipftfi6ew/zgOh
jqhELBl9yJwX+H/AORgnPQ==
MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIQ5xxSiiavZsCAggA
MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECFKM9TnbYM+OBIIEyMH5TkEN57pt
EZk850JRFQJAl1FNOpQwTIY1KysKZenigkLMaavObLdAheJVNSGWx+Wua7cgKWbc
5GBVZn+NN4CRAtPlL+xKWf0HYwr3brJn3mMWrJbfMgugB2yG9UvAL4jBmsz9eWB1
ZuoUnBa9oZPtjcROq5CnZJXdrHqHPaG5CswoSBOXn0p/nv6KSeV8BRgdj1EvAGKh
sOav2PbsaTESESnR4RP91k6hu24ZRUkfxA16L+BKb0/94ie4DErFKcZbilfI41Qv
FQTpbPLZwOywCz/VD6kjYcRAr1q26Zhv4O80/0ZL7m/OBzu38PCUKwBAduZZyCCf
1sqDyNWyPHTa9sPSY3pocpIvtzQ0UFNOhlMicHztNpNAtugJk8mPtvLyMqg02sys
GK4PZtENPPcaWCy8hBxRN5+fVXjx4RpeJJQjqwnzuQiVOKkGrDw3MxLvIh6JCV4h
RvZW25wd3Tbs2KzotKNXFZDNHRSQRJRG+j7rTVr/F92YKC2KOPWcFU/J6quLqR9d
jTpvWej3SAvBkCqPZatuOPqxnctRU4/EZdg/N7eZBRmWdXLKvD5nwgHQoPdOiywT
/eu2JuQzXQuVzVRnCAdDCvxl7/UkSkepEJbq1VAXo1rp4UTdVp6/xGOLJVdG4Yzc
Y13Zx7Y5r0rh5QUI96jogFfor57uvtiMqnxT+QpRtGxJUaRs/6svLHwDHAZhbf2f
jtn+St/c+Il1Xjpm7shQvo+pOUBG0DzcSyUXsQB58K+3Yj79M0Ff54unJQ3SCAbV
zbq9OS69VRhkMveN3RGvgQDMIlgdH9DeDdB4YGEVEvujnqOBgcnrDmLE8e8tPAjZ
90Uh1oqXdJgM5whaK3LbNs41kz482Orkv/P9L8e3MOjSuymdkgg3yJIx6ZuHNNKL
BTQTRJELyaje+px2oyaIfvzGQ0Jjnv+jTEwphbIAapCtJy61/HDvbS3F4tZ1atIh
wWjKpPRklDYD1bM1oGBUx5d24tNlTGLlhyrrV0gBteMvwPpsT3SuWPKGfSRAwygk
v4papFqnGPG+7W394x9S4NhRwlaHeG/L6qA0YNGrpeSoZSGB6k1DpInW9wylngEu
DM3j6perxmR+ZrPJo87/S2nPb3ylmZmAc6mHt0JQTKtR4s2kMoodHmqo9UIJJjnf
Z7cwPOerrsy5xwAm7nlP3ghb0Cu13VQz/QC6023TsN+O/DrUsvhFtNiQWdVwZndz
d17Vgmas+eLM3n82Xqbyxs5hoae63JSz85M/LUiT121eC1MhOUrswCyw6KKVwYoW
JmkYaGWbuJHMOPUuRpThrJdO3QzGneMCu8CNxsyJJDLUrhtXkyX/23tRhOCnOYGc
QSfxsqRoL8IodF/gDEpuugf09wKUpdwK5q7N70YdBCpgMq3jjI/4ElmkPRRUfhp1
rcNl/PtkJcUNkHwnIK3QWHhdKD56tjwBvpTNK9X1/QUqvU5stPlf4ZQM0zOsffPm
+jpauKaEzYsGSWcbhJib5WDA+j9l1EHIwVRrAiVcYi/IrYzvCVZYtC4+qrxGLxIW
3CfND5oUMsa/6sv3CWlqH6frYwLwGsy3kQLxhX56sgsvLJ9lgZBuuLlWBWptCIir
VCzo24f1epTgccd9RsHscA==
-----END ENCRYPTED PRIVATE KEY-----

View file

@ -1,54 +1,54 @@
-----BEGIN CERTIFICATE-----
MIIW5zCCFc+gAwIBAgIDBjzhMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl
Yi1wbGF0Zm9ybS10ZXN0czAeFw0yNDA4MTIwMTAxMzZaFw0yNTA4MTIwMTAxMzZa
MIIW5zCCFc+gAwIBAgIDCvpqMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl
Yi1wbGF0Zm9ybS10ZXN0czAeFw0yNTA2MTIwMTE4MzhaFw0yNjA2MTIwMTE4Mzha
MB0xGzAZBgNVBAMMEndlYi1wbGF0Zm9ybS10ZXN0czCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBALEnHTdGG/kOth+k7j34pG32Tzl+xa4ulyRLlO1mnxJx
W95B1QSiBR2J2H5c78o3gCNvLT1OvFUEYI3/as2TzraqKYctoeYjLPnyjtTL/y6N
Fn9z7F2yfZ+ulMAItWKX93QjbUnPGiBrFe1+ouVBN68q9J+iaEE8Rc2pOcyAiplE
zILeBPUIdGN8oOS09b4gqyvXNfvezrHb9e7Dvf0xzB2lZr5EliLpzNcV3hBXCpNK
Er5ritKh4/99jCdK+wNCcFafy5ciCLtOJj/XgZkicMoCX+SWaNSl8vXEYpAJo4Cv
kG5MsbZ43XUvm4fvV0a8NaB331FUxE5iVK3T/M/AU3ECAwEAAaOCFC4wghQqMAwG
A1UdEwQFMAMBAf8wHQYDVR0OBBYEFPhJdAcbTxpZeTEm+MSr1W9+ULHSMEcGA1Ud
IwRAMD6AFPhJdAcbTxpZeTEm+MSr1W9+ULHSoSGkHzAdMRswGQYDVQQDDBJ3ZWIt
cGxhdGZvcm0tdGVzdHOCAwY84TALBgNVHQ8EBAMCAgQwggoFBgNVHR4Eggn8MIIJ
+KCCCfQwE4IRd2ViLXBsYXRmb3JtLnRlc3QwF4IVd3d3LndlYi1wbGF0Zm9ybS50
ZXN0MBeCFW5vdC13ZWItcGxhdGZvcm0udGVzdDAYghZ3d3cyLndlYi1wbGF0Zm9y
bS50ZXN0MBiCFnd3dzEud2ViLXBsYXRmb3JtLnRlc3QwG4IZd3d3Lm5vdC13ZWIt
cGxhdGZvcm0udGVzdDAbghl3d3cud3d3LndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3
dy53d3cyLndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzEubm90LXdlYi1wbGF0Zm9y
bS50ZXN0MByCGnd3dzIud3d3LndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dy53d3cx
LndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0
MByCGnd3dzEud3d3LndlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3dzEud3d3MS53ZWIt
cGxhdGZvcm0udGVzdDAdght3d3cyLnd3dzEud2ViLXBsYXRmb3JtLnRlc3QwHYIb
d3d3Mi53d3cyLndlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3dzEud3d3Mi53ZWItcGxh
BQADggEPADCCAQoCggEBANYTmhz+LpdYvW+1B8BrpydNlFJO+uwlDs5mbNwP1sCP
sYeJQ6RbxFRMcJdHKL37lWzwmJR31roS7amfvl/lcanLNHslAAo0QuY8hjKm/dts
imMradgmOI7+bIx7PkeqpRnsruFSuysmRqYjMdGkV0Kod4EAUR7mskPcqGY/cabq
RFbb7Qir78j1TAlmEVIpM91DKbiymSXp9QXJd4vjGm6PpvR4x3EDic1fmLnS4AcY
la3b/vHXowIbA1AYNppWwKGyJZsUvjKm6DjzDS3VGwsz/etZHOOptprdxdfXP92Y
eHMql3oxsWUVbw2Vr+enWmUA1wmz/vb+xBH2qnb0YZECAwEAAaOCFC4wghQqMAwG
A1UdEwQFMAMBAf8wHQYDVR0OBBYEFEqAvGRgOzi2DQTi1IhLYHYa2aT7MEcGA1Ud
IwRAMD6AFEqAvGRgOzi2DQTi1IhLYHYa2aT7oSGkHzAdMRswGQYDVQQDDBJ3ZWIt
cGxhdGZvcm0tdGVzdHOCAwr6ajALBgNVHQ8EBAMCAgQwggoFBgNVHR4Eggn8MIIJ
+KCCCfQwE4IRd2ViLXBsYXRmb3JtLnRlc3QwF4IVbm90LXdlYi1wbGF0Zm9ybS50
ZXN0MBeCFXd3dy53ZWItcGxhdGZvcm0udGVzdDAYghZ3d3cxLndlYi1wbGF0Zm9y
bS50ZXN0MBiCFnd3dzIud2ViLXBsYXRmb3JtLnRlc3QwG4IZd3d3Lnd3dy53ZWIt
cGxhdGZvcm0udGVzdDAbghl3d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0MByCGnd3
dzIud3d3LndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzEud3d3LndlYi1wbGF0Zm9y
bS50ZXN0MByCGnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzEubm90
LXdlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dy53d3cxLndlYi1wbGF0Zm9ybS50ZXN0
MByCGnd3dy53d3cyLndlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3dzIud3d3MS53ZWIt
cGxhdGZvcm0udGVzdDAdght3d3cxLnd3dzIud2ViLXBsYXRmb3JtLnRlc3QwHYIb
d3d3MS53d3cxLndlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3dzIud3d3Mi53ZWItcGxh
dGZvcm0udGVzdDAfgh13d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdDAggh53
d3cud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwIIIed3d3MS53d3cubm90LXdl
d3cyLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwIIIed3d3Lnd3dzEubm90LXdl
Yi1wbGF0Zm9ybS50ZXN0MCCCHnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVz
dDAggh53d3cud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwIIIed3d3Mi53d3cu
bm90LXdlYi1wbGF0Zm9ybS50ZXN0MCGCH3d3dzIud3d3MS5ub3Qtd2ViLXBsYXRm
dDAggh53d3cxLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwIIIed3d3Lnd3dzIu
bm90LXdlYi1wbGF0Zm9ybS50ZXN0MCGCH3d3dzEud3d3Mi5ub3Qtd2ViLXBsYXRm
b3JtLnRlc3QwIYIfd3d3MS53d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdDAhgh93
d3cyLnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCGCH3d3dzEud3d3Mi5ub3Qt
d3cyLnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCGCH3d3dzIud3d3MS5ub3Qt
d2ViLXBsYXRmb3JtLnRlc3QwJIIid3d3LnhuLS1sdmUtNmxhZC53ZWItcGxhdGZv
cm0udGVzdDAkgiJ4bi0tbHZlLTZsYWQud3d3LndlYi1wbGF0Zm9ybS50ZXN0MCSC
InhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwJYIjeG4tLWx2ZS02
bGFkLnd3dzIud2ViLXBsYXRmb3JtLnRlc3QwJYIjd3d3Mi54bi0tbHZlLTZsYWQu
d2ViLXBsYXRmb3JtLnRlc3QwJYIjd3d3MS54bi0tbHZlLTZsYWQud2ViLXBsYXRm
b3JtLnRlc3QwJYIjeG4tLWx2ZS02bGFkLnd3dzEud2ViLXBsYXRmb3JtLnRlc3Qw
cm0udGVzdDAkgiJ4bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCSC
InhuLS1sdmUtNmxhZC53d3cud2ViLXBsYXRmb3JtLnRlc3QwJYIjeG4tLWx2ZS02
bGFkLnd3dzEud2ViLXBsYXRmb3JtLnRlc3QwJYIjd3d3MS54bi0tbHZlLTZsYWQu
d2ViLXBsYXRmb3JtLnRlc3QwJYIjd3d3Mi54bi0tbHZlLTZsYWQud2ViLXBsYXRm
b3JtLnRlc3QwJYIjeG4tLWx2ZS02bGFkLnd3dzIud2ViLXBsYXRmb3JtLnRlc3Qw
KIImd3d3LnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwKIImeG4t
LWx2ZS02bGFkLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYInd3d3Mi54bi0t
bHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCmCJ3huLS1sdmUtNmxhZC53
d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdDApgid4bi0tbHZlLTZsYWQud3d3MS5u
b3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYInd3d3MS54bi0tbHZlLTZsYWQubm90LXdl
LWx2ZS02bGFkLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYIneG4tLWx2ZS02
bGFkLnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCmCJ3d3dzEueG4tLWx2ZS02
bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdDApgid3d3cyLnhuLS1sdmUtNmxhZC5u
b3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYIneG4tLWx2ZS02bGFkLnd3dzEubm90LXdl
Yi1wbGF0Zm9ybS50ZXN0MCuCKXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1w
bGF0Zm9ybS50ZXN0MC2CK3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQud2ViLXBs
YXRmb3JtLnRlc3QwL4IteG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1w
bGF0Zm9ybS50ZXN0MC+CLXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dy53ZWIt
YXRmb3JtLnRlc3QwL4IteG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3LndlYi1w
bGF0Zm9ybS50ZXN0MC+CLXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWIt
cGxhdGZvcm0udGVzdDAvgi13d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi
LXBsYXRmb3JtLnRlc3QwMIIueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3Mi53
ZWItcGxhdGZvcm0udGVzdDAwgi53d3cyLnhuLS1uOGo2ZHM1M2x3d2tycWh2Mjhh
LndlYi1wbGF0Zm9ybS50ZXN0MDCCLnd3dzEueG4tLW44ajZkczUzbHd3a3JxaHYy
OGEud2ViLXBsYXRmb3JtLnRlc3QwMIIueG4tLW44ajZkczUzbHd3a3JxaHYyOGEu
d3d3MS53ZWItcGxhdGZvcm0udGVzdDAxgi94bi0tbHZlLTZsYWQueG4tLWx2ZS02
ZWItcGxhdGZvcm0udGVzdDAwgi54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cx
LndlYi1wbGF0Zm9ybS50ZXN0MDCCLnd3dzIueG4tLW44ajZkczUzbHd3a3JxaHYy
OGEud2ViLXBsYXRmb3JtLnRlc3QwMIIud3d3MS54bi0tbjhqNmRzNTNsd3drcnFo
djI4YS53ZWItcGxhdGZvcm0udGVzdDAxgi94bi0tbHZlLTZsYWQueG4tLWx2ZS02
bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdDAzgjF3d3cueG4tLW44ajZkczUzbHd3
a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0MDOCMXhuLS1uOGo2ZHM1M2x3
d2tycWh2MjhhLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwNIIyd3d3Mi54bi0t
@ -56,50 +56,50 @@ bjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwNIIyd3d3
MS54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3Qw
NIIyeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3Mi5ub3Qtd2ViLXBsYXRmb3Jt
LnRlc3QwNIIyeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3MS5ub3Qtd2ViLXBs
YXRmb3JtLnRlc3QwOII2eG4tLWx2ZS02bGFkLnhuLS1uOGo2ZHM1M2x3d2tycWh2
MjhhLndlYi1wbGF0Zm9ybS50ZXN0MDiCNnhuLS1uOGo2ZHM1M2x3d2tycWh2Mjhh
LnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdDA8gjp4bi0tbjhqNmRzNTNs
d3drcnFodjI4YS54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0MDyC
OnhuLS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBs
YXRmb3JtLnRlc3QwOII2eG4tLW44ajZkczUzbHd3a3JxaHYyOGEueG4tLWx2ZS02
bGFkLndlYi1wbGF0Zm9ybS50ZXN0MDiCNnhuLS1sdmUtNmxhZC54bi0tbjhqNmRz
NTNsd3drcnFodjI4YS53ZWItcGxhdGZvcm0udGVzdDA8gjp4bi0tbHZlLTZsYWQu
eG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0MDyC
OnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBs
YXRmb3JtLnRlc3QwQ4JBeG4tLW44ajZkczUzbHd3a3JxaHYyOGEueG4tLW44ajZk
czUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3QwR4JFeG4tLW44ajZkczUz
bHd3a3JxaHYyOGEueG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0
Zm9ybS50ZXN0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMIIJhQYDVR0RBIIJfDCCCXiC
EXdlYi1wbGF0Zm9ybS50ZXN0ghV3d3cud2ViLXBsYXRmb3JtLnRlc3SCFW5vdC13
ZWItcGxhdGZvcm0udGVzdIIWd3d3Mi53ZWItcGxhdGZvcm0udGVzdIIWd3d3MS53
ZWItcGxhdGZvcm0udGVzdIIZd3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIZd3d3
Lnd3dy53ZWItcGxhdGZvcm0udGVzdIIad3d3Lnd3dzIud2ViLXBsYXRmb3JtLnRl
c3SCGnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0ghp3d3cyLnd3dy53ZWItcGxh
dGZvcm0udGVzdIIad3d3Lnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCGnd3dzIubm90
LXdlYi1wbGF0Zm9ybS50ZXN0ghp3d3cxLnd3dy53ZWItcGxhdGZvcm0udGVzdIIb
d3d3MS53d3cxLndlYi1wbGF0Zm9ybS50ZXN0ght3d3cyLnd3dzEud2ViLXBsYXRm
b3JtLnRlc3SCG3d3dzIud3d3Mi53ZWItcGxhdGZvcm0udGVzdIIbd3d3MS53d3cy
EXdlYi1wbGF0Zm9ybS50ZXN0ghVub3Qtd2ViLXBsYXRmb3JtLnRlc3SCFXd3dy53
ZWItcGxhdGZvcm0udGVzdIIWd3d3MS53ZWItcGxhdGZvcm0udGVzdIIWd3d3Mi53
ZWItcGxhdGZvcm0udGVzdIIZd3d3Lnd3dy53ZWItcGxhdGZvcm0udGVzdIIZd3d3
Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIad3d3Mi53d3cud2ViLXBsYXRmb3JtLnRl
c3SCGnd3dzEud3d3LndlYi1wbGF0Zm9ybS50ZXN0ghp3d3cyLm5vdC13ZWItcGxh
dGZvcm0udGVzdIIad3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCGnd3dy53d3cx
LndlYi1wbGF0Zm9ybS50ZXN0ghp3d3cud3d3Mi53ZWItcGxhdGZvcm0udGVzdIIb
d3d3Mi53d3cxLndlYi1wbGF0Zm9ybS50ZXN0ght3d3cxLnd3dzIud2ViLXBsYXRm
b3JtLnRlc3SCG3d3dzEud3d3MS53ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cy
LndlYi1wbGF0Zm9ybS50ZXN0gh13d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVz
dIIed3d3Lnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh53d3cxLnd3dy5ub3Qt
dIIed3d3Mi53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh53d3cud3d3MS5ub3Qt
d2ViLXBsYXRmb3JtLnRlc3SCHnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVz
dIIed3d3Lnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh53d3cyLnd3dy5ub3Qt
d2ViLXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRl
dIIed3d3MS53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh53d3cud3d3Mi5ub3Qt
d2ViLXBsYXRmb3JtLnRlc3SCH3d3dzEud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRl
c3SCH3d3dzEud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3Mi5u
b3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzEud3d3Mi5ub3Qtd2ViLXBsYXRmb3Jt
b3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3MS5ub3Qtd2ViLXBsYXRmb3Jt
LnRlc3SCInd3dy54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCInhuLS1s
dmUtNmxhZC53d3cud2ViLXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC5ub3Qt
d2ViLXBsYXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53d3cyLndlYi1wbGF0Zm9y
bS50ZXN0giN3d3cyLnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdIIjd3d3
MS54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53
d3cxLndlYi1wbGF0Zm9ybS50ZXN0giZ3d3cueG4tLWx2ZS02bGFkLm5vdC13ZWIt
dmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC53d3cu
d2ViLXBsYXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53d3cxLndlYi1wbGF0Zm9y
bS50ZXN0giN3d3cxLnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdIIjd3d3
Mi54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53
d3cyLndlYi1wbGF0Zm9ybS50ZXN0giZ3d3cueG4tLWx2ZS02bGFkLm5vdC13ZWIt
cGxhdGZvcm0udGVzdIImeG4tLWx2ZS02bGFkLnd3dy5ub3Qtd2ViLXBsYXRmb3Jt
LnRlc3SCJ3d3dzIueG4tLWx2ZS02bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdIIn
eG4tLWx2ZS02bGFkLnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0gid4bi0tbHZl
LTZsYWQud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3d3dzEueG4tLWx2ZS02
bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdIIpeG4tLW44ajZkczUzbHd3a3JxaHYy
LnRlc3SCJ3huLS1sdmUtNmxhZC53d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIIn
d3d3MS54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0gid3d3cyLnhu
LS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3huLS1sdmUtNmxhZC53
d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdIIpeG4tLW44ajZkczUzbHd3a3JxaHYy
OGEud2ViLXBsYXRmb3JtLnRlc3SCK3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQu
d2ViLXBsYXRmb3JtLnRlc3SCLXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13
ZWItcGxhdGZvcm0udGVzdIIteG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3Lndl
d2ViLXBsYXRmb3JtLnRlc3SCLXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dy53
ZWItcGxhdGZvcm0udGVzdIIteG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdl
Yi1wbGF0Zm9ybS50ZXN0gi13d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi
LXBsYXRmb3JtLnRlc3SCLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIud2Vi
LXBsYXRmb3JtLnRlc3SCLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEud2Vi
LXBsYXRmb3JtLnRlc3SCLnd3dzIueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi
LXBsYXRmb3JtLnRlc3SCLnd3dzEueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi
LXBsYXRmb3JtLnRlc3SCLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEud2Vi
LXBsYXRmb3JtLnRlc3SCL3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQubm90LXdl
Yi1wbGF0Zm9ybS50ZXN0gjF3d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90
LXdlYi1wbGF0Zm9ybS50ZXN0gjF4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cu
@ -107,19 +107,19 @@ bm90LXdlYi1wbGF0Zm9ybS50ZXN0gjJ3d3cyLnhuLS1uOGo2ZHM1M2x3d2tycWh2
MjhhLm5vdC13ZWItcGxhdGZvcm0udGVzdIIyd3d3MS54bi0tbjhqNmRzNTNsd3dr
cnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCMnhuLS1uOGo2ZHM1M2x3d2ty
cWh2MjhhLnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjJ4bi0tbjhqNmRzNTNs
d3drcnFodjI4YS53d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdII2eG4tLWx2ZS02
bGFkLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0gjZ4
bi0tbjhqNmRzNTNsd3drcnFodjI4YS54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3Jt
LnRlc3SCOnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1sdmUtNmxhZC5ub3Qt
d2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3dr
cnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCQXhuLS1uOGo2ZHM1M2x3d2ty
d3drcnFodjI4YS53d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdII2eG4tLW44ajZk
czUzbHd3a3JxaHYyOGEueG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0gjZ4
bi0tbHZlLTZsYWQueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3Jt
LnRlc3SCOnhuLS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qt
d2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1s
dmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCQXhuLS1uOGo2ZHM1M2x3d2ty
cWh2MjhhLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0
gkV4bi0tbjhqNmRzNTNsd3drcnFodjI4YS54bi0tbjhqNmRzNTNsd3drcnFodjI4
YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJKoZIhvcNAQELBQADggEBAF/pURME
NCx2OU8SxM3naApCfB/pYEX1mZm6rPEl7WCYaZy04z/eW8QL20n6qKNOYtENMwZy
FEJyz3S0JMSJ5z/ZTWCwMbNVscIUjUT2ThXRgw7x8xLz9ob8fIxiC1Q2mVTwuVUV
eJJ2ChAr4JKiReztuqdxoCsK2mxARSr0hEhqKSD2MFZXRW2BGs1ZXlUvRWV7nVw4
/LnIdewpEOdKdDq8Z1g1eY/BXy58/HCw30zoLRdgfDOIoFrDHAcbB1oMA4U6EXcP
vw7wEpcBMKZ8h0V5+ObZgaY/+qKi0QikZZYZy5gJHAch/3+cTU23pkMsCKiJLNQI
hKcelbLd+4Arxtg=
YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJKoZIhvcNAQELBQADggEBAGevd/IN
6PpofThgH2cAwCPr13Cc+QyPXucqpv9Y01H1Yf9ZHalX6o+9OD9m3XoQqSKqnlV9
Kk/FIL9Ihb4I4QxVNeWWYJfQ1a6VZDsHFAEJCLI1gLPd09A0gh2f2d9DirDbE4OT
wKICpj+pOnJ/4UiqS1h3YjbyUNVCgJTNSUqsCUKM2OmOd6mejwRUsnP+tSU2JhfD
O6ZwV3Rq+wvgGl+bOV6UE/zng9K0YGgjVwISE4sLtq744DaXeRCqlkvC4D9dqph6
P37T/XA7oofDR7La+7gi9sHAWQmNvmF++wBIBRkIHxY9OpP+bjc/yp6u0hde6Z2z
EFlk8xJ53JMsp8Y=
-----END CERTIFICATE-----

View file

@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCpWZ4n9mkUhBok
TuG3lVduL4dZlDxb0ztgwSLDnrAiB71GMxqtcpHlT/C4rgKVytqUa73p9iIIu3Wq
cIkQBaJ5PwCsH665B3SwNuHYWlguAc+e2f4PkhB8qHhWQaSO50YT/F6NNaoc+JtY
x+PeUyY81GRnEL5fCkJsuE0Vp7giCb99OFGSB2OpXB4LWgPJ5CLMW1qt7S0e78GA
ukJLtE4aMZqLIVxkNgwJALYXDX3NJfY8P4PSeOuMu4vHUCSNBCdkhwFh5J7kkquX
Ni8b7C9Z1zGqnAip5odHkX+OOya/zJJ7iN90PWk02/vatlRqK0KSRUOkNoerAQMj
uDOoZ7jRAgMBAAECggEBAIn6LlW4+hxxFSuH6Xe+AaIQr2JY2GSoUbSfJ0fivva6
/4d2k8HFmwEOhL6zZ//LaxOKRQ2eMFSVB2V6kvGu5ZWLs2yJ072FSZlY3eF8mmPB
rftq+QiOpUgrqv/8M6sK25nlANRkaNl55HgNRKcbcAgXtEYU6kZdAYm7D3MZV3jC
zOlDl26QJ2IP+Vls6SCsqQTnu+CybXtjLO5Cb7uzzif1b+tpSEBUPAOad6Cnb0PO
ctLrQBEIa419o1BnAWpU+kOoafwGSszM7OaJc2FmKUvgbXtiUdci8AG09FRFyqrd
Y12wYJ0wAdC5GVr+EWTIOQsdjo38eJLEmsPfYaRXjMECgYEA2H72HrXlwgLx37x+
SI0bDLzqlDd9+9zvZH/0Wo8rbsothUu8PTrUGqEEuobaT1vsuMjBMFXi3yjTbVRn
Ot8eo9bUIHI+/jz2UDKNpFk2Ids9ffgQXFNVYoVoKzhV3lRTIh07eqM8Q91uKpyv
vyIYnu92XCYg1inG6MRxZIGYLMUCgYEAyEBcZEoARcKb5YxKxp8K0YM2FqQ8/pn3
HkRC+Jo1jnYkiCeqrhVluCSfA5VrsqLdp7AQrJpdzE8mpx3sYA4s1P9GJ1qKdW7d
r7z/aCGwkv+Pgx8v2HpKdaVaLxFdSAh64r9ItBasWQ9E9ZoyBKt2PPtvGtUxhtuV
5fBONFVPdJ0CgYBs37xqSVOYM97rg2GGnt+hkkft7dI/nSYOxoJeIG3ZM3ec9y9d
I36TPbKhEzwqeLIdY2g0JJ0JWQCqlK2tX5OLFXhsMMgZFxNP1XyB0BN3B0hvVxbz
Nz1TZH+0bIpSWtnL6COHUxv1jR/f8hg36K+1DfvZ75rH2Q6c9F2KC9o5eQKBgGt0
Vd+e8fx9DCimGm3wY96/GOQXZ397YOaF3KYIIdr7PGkvV+AoLTgdtpI2uN7XlDdq
O9hS0ShUBLrCTNfSY248OQnfBNM1FZI6yZa4FUccCYdj0cnI/XGZtAXzvGlt23sX
B81TKVJ05h0gi9yDoWPhy+HLKtNhu1LymxRr/sHlAoGAOKL7QvaBZRjS81PRd3IU
NvdWK4N1Crtb/4SxVRziIApCpSZkqt6qjz17nX5L3U95s1N98Z+iiJc6kbUC+G44
IQ17SFnyXb2UW43b9fqz+f046Yo0DOBOsNMolRzN204Mx7vUD97HQ2NuEnxDwb5+
dO+J6L8VI3Y7T8bkeco50s0=
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCyoagpfWeBqUrn
aTFYZUuc8DZqDqmpB+jvGNj9vU/XOctNG+0XWI/uCa9p8kS1ugu0eo+85hvqHQpL
laxI3avZp/l5HhQIUC+TjxtXNbO6bhkbhSb082qG/8zhCY08mJyob8z5ED+p7FBY
YbHmqx1yySEo6urLin49MxRnswp46Jzx2S3Oc2BmltX6dvsgPrdxxDjCXH+BD+Y/
dl5p03OxoLjkxMZHR3Qt3JLu+MpoAEteyDNqO5dIDXK9yQePhxMnf4Fg1MANhCjS
2PTu7f5VTFmoLTsCaZiZum3zNkT/UOnIhz8knUAqhtXZ2PbCiEKmVqK3k/Pj8YOS
R9lCCEa9AgMBAAECggEAGKn9wYjJTLEBdh/jSny7VXZ3VOp5s4HeQCZyo4pK5qva
AxIQM5EsrPsVB3Bbhf9OVBjjatDCLu+GjIwkccUlpWkDfEfSZUQeZZCJ/7RwVeqT
YzuIdvl7DnEYVUQP27uIpIXB9pZZ6/jZ2RzYHEIpJUBZveq9s4/c6/n3CcsXRD1C
l+rem/LDIFaO/WyDPMpK4CQ+ChgjxtAS4CkS1RsgRjyqr9chvDpm/lB8V6Kxbofh
7wR9rgm+TgzuvomY1cnWEaSgIJ8LaljSxr/cmWrzVM9LIoOKZy7uyuNxCGtToyEE
Z7Hm0etfHP0SkmWocJtwk7vWgcKmpOkqQkWFeordswKBgQDsGJY+665Y0U6WNjsK
5qgDm3/NbWnbtgq54Z8FVsuca9crRQBfNlCwWRrc/BLDn4i3/eb2KU3CpfKv498S
M5BMgaPUvrMxZIagn5ydjoMAEoP8y4om7NcSlUY5lnemPLbX/tsoBsypPrDkXFPW
592UgaQNbDzwLoQzv7TnqACtPwKBgQDBsN9aXkXNm4F2g8S4c0JISApohYEPYBqC
Pxv3wzflfiAsPK7tecv8zYsHg0yZHcie7b4YqccFFlhk39EqP2d1RjhEhTjpD+pc
hruF1isLPmdJ5fL/fKGntlYFNImobW/glqtMOAowYBBUU1iK4qv3jHieH307yMiM
zP4lK2cBAwKBgGFqL6wckJ6DFlryW2A/FboPUidP6urF7R0PVA7e5jpPYMOwv9uJ
TLfGvEfMFm3zCHVqZP7Swgv7buxWKHeZIQQARboFSWiq4sWptfRolfLUsPMAhKtU
89TuFMC0LgBAcu0icgjM7Wszu8cttUYp+4pIB4mmTGqJtvCnPByNfGH/AoGAKPxw
hwLj6no5jwabHhzlrb3w1eVKRiKj+WO5W1hn/5wM2s+MhJv9WmV0Qga6srvmtBrC
2x0yDBWKZu4lqLb6AYr2ZSl7vXWsth+cltmXCi4OVUjffsi0vHSNB1TyvD1MK042
uU4yecIaMn3ggqMsmJmU/IDVU01Ngt3t+ZeRmFkCgYEA5xVDH5MSYPqOiOS6wePf
TU9j7XHQUlrT7xyZCn3hAVg1ZhuVtukxSj1Wu8dpJjccEjb2MBMgWw2TJsiKaHBT
sFCevu+56UNq/YFm+8QP4ifGIeV/FCdUsgrhO6+TdRgFLrWcFjXi3CbGjb+PYhza
gfmGAxeKXDS6s73sJbHEyZo=
-----END PRIVATE KEY-----

View file

@ -1,114 +1,114 @@
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 408802 (0x63ce2)
Serial Number: 719467 (0xafa6b)
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=web-platform-tests
Validity
Not Before: Aug 12 01:01:36 2024 GMT
Not After : Aug 12 01:01:36 2025 GMT
Not Before: Jun 12 01:18:38 2025 GMT
Not After : Jun 12 01:18:38 2026 GMT
Subject: CN=web-platform.test
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Public-Key: (2048 bit)
Modulus:
00:a9:59:9e:27:f6:69:14:84:1a:24:4e:e1:b7:95:
57:6e:2f:87:59:94:3c:5b:d3:3b:60:c1:22:c3:9e:
b0:22:07:bd:46:33:1a:ad:72:91:e5:4f:f0:b8:ae:
02:95:ca:da:94:6b:bd:e9:f6:22:08:bb:75:aa:70:
89:10:05:a2:79:3f:00:ac:1f:ae:b9:07:74:b0:36:
e1:d8:5a:58:2e:01:cf:9e:d9:fe:0f:92:10:7c:a8:
78:56:41:a4:8e:e7:46:13:fc:5e:8d:35:aa:1c:f8:
9b:58:c7:e3:de:53:26:3c:d4:64:67:10:be:5f:0a:
42:6c:b8:4d:15:a7:b8:22:09:bf:7d:38:51:92:07:
63:a9:5c:1e:0b:5a:03:c9:e4:22:cc:5b:5a:ad:ed:
2d:1e:ef:c1:80:ba:42:4b:b4:4e:1a:31:9a:8b:21:
5c:64:36:0c:09:00:b6:17:0d:7d:cd:25:f6:3c:3f:
83:d2:78:eb:8c:bb:8b:c7:50:24:8d:04:27:64:87:
01:61:e4:9e:e4:92:ab:97:36:2f:1b:ec:2f:59:d7:
31:aa:9c:08:a9:e6:87:47:91:7f:8e:3b:26:bf:cc:
92:7b:88:df:74:3d:69:34:db:fb:da:b6:54:6a:2b:
42:92:45:43:a4:36:87:ab:01:03:23:b8:33:a8:67:
b8:d1
00:b2:a1:a8:29:7d:67:81:a9:4a:e7:69:31:58:65:
4b:9c:f0:36:6a:0e:a9:a9:07:e8:ef:18:d8:fd:bd:
4f:d7:39:cb:4d:1b:ed:17:58:8f:ee:09:af:69:f2:
44:b5:ba:0b:b4:7a:8f:bc:e6:1b:ea:1d:0a:4b:95:
ac:48:dd:ab:d9:a7:f9:79:1e:14:08:50:2f:93:8f:
1b:57:35:b3:ba:6e:19:1b:85:26:f4:f3:6a:86:ff:
cc:e1:09:8d:3c:98:9c:a8:6f:cc:f9:10:3f:a9:ec:
50:58:61:b1:e6:ab:1d:72:c9:21:28:ea:ea:cb:8a:
7e:3d:33:14:67:b3:0a:78:e8:9c:f1:d9:2d:ce:73:
60:66:96:d5:fa:76:fb:20:3e:b7:71:c4:38:c2:5c:
7f:81:0f:e6:3f:76:5e:69:d3:73:b1:a0:b8:e4:c4:
c6:47:47:74:2d:dc:92:ee:f8:ca:68:00:4b:5e:c8:
33:6a:3b:97:48:0d:72:bd:c9:07:8f:87:13:27:7f:
81:60:d4:c0:0d:84:28:d2:d8:f4:ee:ed:fe:55:4c:
59:a8:2d:3b:02:69:98:99:ba:6d:f3:36:44:ff:50:
e9:c8:87:3f:24:9d:40:2a:86:d5:d9:d8:f6:c2:88:
42:a6:56:a2:b7:93:f3:e3:f1:83:92:47:d9:42:08:
46:bd
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Subject Key Identifier:
66:7B:1B:9E:50:93:B0:87:2A:3D:B8:C9:9B:36:97:2C:D4:41:5C:08
D6:4A:B3:AC:80:DE:98:80:19:04:63:9C:B3:6A:0C:66:CF:B9:5F:D2
X509v3 Authority Key Identifier:
keyid:F8:49:74:07:1B:4F:1A:59:79:31:26:F8:C4:AB:D5:6F:7E:50:B1:D2
4A:80:BC:64:60:3B:38:B6:0D:04:E2:D4:88:4B:60:76:1A:D9:A4:FB
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Alternative Name:
DNS:web-platform.test, DNS:www.web-platform.test, DNS:not-web-platform.test, DNS:www2.web-platform.test, DNS:www1.web-platform.test, DNS:www.not-web-platform.test, DNS:www.www.web-platform.test, DNS:www.www2.web-platform.test, DNS:www1.not-web-platform.test, DNS:www2.www.web-platform.test, DNS:www.www1.web-platform.test, DNS:www2.not-web-platform.test, DNS:www1.www.web-platform.test, DNS:www1.www1.web-platform.test, DNS:www2.www1.web-platform.test, DNS:www2.www2.web-platform.test, DNS:www1.www2.web-platform.test, DNS:www.www.not-web-platform.test, DNS:www.www2.not-web-platform.test, DNS:www1.www.not-web-platform.test, DNS:xn--lve-6lad.web-platform.test, DNS:www.www1.not-web-platform.test, DNS:www2.www.not-web-platform.test, DNS:www2.www1.not-web-platform.test, DNS:www1.www1.not-web-platform.test, DNS:www2.www2.not-web-platform.test, DNS:www1.www2.not-web-platform.test, DNS:www.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www.web-platform.test, DNS:xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www2.web-platform.test, DNS:www2.xn--lve-6lad.web-platform.test, DNS:www1.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www1.web-platform.test, DNS:www.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www.not-web-platform.test, DNS:www2.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www2.not-web-platform.test, DNS:xn--lve-6lad.www1.not-web-platform.test, DNS:www1.xn--lve-6lad.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.not-web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.not-web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.not-web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test
DNS:web-platform.test, DNS:not-web-platform.test, DNS:www.web-platform.test, DNS:www1.web-platform.test, DNS:www2.web-platform.test, DNS:www.www.web-platform.test, DNS:www.not-web-platform.test, DNS:www2.www.web-platform.test, DNS:www1.www.web-platform.test, DNS:www2.not-web-platform.test, DNS:www1.not-web-platform.test, DNS:www.www1.web-platform.test, DNS:www.www2.web-platform.test, DNS:www2.www1.web-platform.test, DNS:www1.www2.web-platform.test, DNS:www1.www1.web-platform.test, DNS:www2.www2.web-platform.test, DNS:www.www.not-web-platform.test, DNS:www2.www.not-web-platform.test, DNS:www.www1.not-web-platform.test, DNS:xn--lve-6lad.web-platform.test, DNS:www1.www.not-web-platform.test, DNS:www.www2.not-web-platform.test, DNS:www1.www2.not-web-platform.test, DNS:www1.www1.not-web-platform.test, DNS:www2.www2.not-web-platform.test, DNS:www2.www1.not-web-platform.test, DNS:www.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www.web-platform.test, DNS:xn--lve-6lad.www1.web-platform.test, DNS:www1.xn--lve-6lad.web-platform.test, DNS:www2.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www2.web-platform.test, DNS:www.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www.not-web-platform.test, DNS:xn--lve-6lad.www2.not-web-platform.test, DNS:www1.xn--lve-6lad.not-web-platform.test, DNS:www2.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www1.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.not-web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.not-web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test
Signature Algorithm: sha256WithRSAEncryption
1f:db:5d:ea:4c:6f:5a:5b:27:70:8e:e1:37:e5:71:cc:0b:67:
65:49:f9:e7:30:0d:d2:3b:c8:a0:b5:63:42:77:3c:10:f2:79:
2b:0e:46:04:95:3e:57:46:73:62:46:28:5b:6d:f8:c8:50:2f:
23:d3:2a:aa:2f:f7:1f:b1:2e:d4:07:6f:56:f8:ab:90:f1:a5:
4b:10:a4:c7:77:72:68:a3:3e:6d:c3:0e:a1:5c:98:a9:65:83:
87:ef:a5:6d:7d:ed:d9:18:30:fb:49:87:b0:99:01:32:ad:88:
02:61:9d:ac:7f:b4:c3:34:bc:9a:83:e3:ef:8d:dc:3b:cc:18:
58:a3:69:fd:cf:fb:81:48:24:82:8e:01:92:1f:a4:95:79:3c:
2a:bc:5b:c3:7a:02:6d:7f:8b:1f:2b:4a:95:da:50:9b:d5:d3:
3c:4d:eb:6c:1f:8d:52:65:8a:c3:3c:77:7b:9a:63:f2:5c:71:
ab:77:c1:65:28:80:a6:eb:22:99:a8:95:14:4b:63:c9:77:8e:
75:a3:7b:0f:9b:66:47:74:68:10:0a:aa:4b:3c:55:b1:59:8d:
0f:24:7b:3b:93:ed:30:69:cd:08:f9:c5:90:34:fc:21:8c:cb:
9b:8b:ef:5e:4e:d3:a1:86:3b:e9:7d:1c:79:aa:a2:3e:df:b8:
09:09:01:82
Signature Value:
ad:fd:86:c0:90:e1:59:8a:1b:7d:50:fe:c8:cd:6a:26:ee:b6:
64:0b:46:92:88:10:2e:bc:8d:fd:9f:e9:72:95:56:3e:bc:4b:
a5:11:9b:ab:ec:d8:68:bc:0e:f3:0b:d0:ef:89:b3:d9:47:8a:
2f:dc:fa:84:0b:74:0e:64:e6:ae:2a:4e:46:76:0c:9c:04:86:
eb:ed:1b:d6:ca:0c:58:7b:82:a8:95:df:63:3d:0c:1b:89:91:
af:02:4c:d0:c9:4c:5d:96:e1:4a:8d:37:a8:81:54:9f:75:1c:
7d:f6:19:83:fe:b4:1c:1f:f3:5f:ae:5a:45:1c:30:99:04:14:
5f:10:55:50:8c:0a:da:61:ff:2b:f4:c7:18:fd:22:6f:3d:7d:
b8:1f:6c:de:1d:e6:be:ec:2d:72:48:4f:f5:5c:9d:eb:3b:b9:
c9:bb:55:d8:1a:c7:52:fd:9d:33:7d:74:29:7d:22:66:bf:76:
5e:dd:3d:9e:3b:a8:5d:f7:80:8a:37:d4:2e:6a:88:1e:41:ed:
a0:6e:e4:1d:d1:47:85:07:cf:ab:9f:66:b3:a6:35:5d:84:e3:
70:ac:95:f9:7a:48:fb:af:b9:93:72:5e:81:41:c0:c0:08:db:
eb:31:f7:3f:64:d2:5c:75:60:f7:8a:5c:f3:06:a8:42:e8:3c:
3d:c6:81:9b
-----BEGIN CERTIFICATE-----
MIIMsjCCC5qgAwIBAgIDBjziMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl
Yi1wbGF0Zm9ybS10ZXN0czAeFw0yNDA4MTIwMTAxMzZaFw0yNTA4MTIwMTAxMzZa
MIIMsjCCC5qgAwIBAgIDCvprMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl
Yi1wbGF0Zm9ybS10ZXN0czAeFw0yNTA2MTIwMTE4MzhaFw0yNjA2MTIwMTE4Mzha
MBwxGjAYBgNVBAMMEXdlYi1wbGF0Zm9ybS50ZXN0MIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAqVmeJ/ZpFIQaJE7ht5VXbi+HWZQ8W9M7YMEiw56wIge9
RjMarXKR5U/wuK4ClcralGu96fYiCLt1qnCJEAWieT8ArB+uuQd0sDbh2FpYLgHP
ntn+D5IQfKh4VkGkjudGE/xejTWqHPibWMfj3lMmPNRkZxC+XwpCbLhNFae4Igm/
fThRkgdjqVweC1oDyeQizFtare0tHu/BgLpCS7ROGjGaiyFcZDYMCQC2Fw19zSX2
PD+D0njrjLuLx1AkjQQnZIcBYeSe5JKrlzYvG+wvWdcxqpwIqeaHR5F/jjsmv8yS
e4jfdD1pNNv72rZUaitCkkVDpDaHqwEDI7gzqGe40QIDAQABo4IJ+jCCCfYwCQYD
VR0TBAIwADAdBgNVHQ4EFgQUZnsbnlCTsIcqPbjJmzaXLNRBXAgwHwYDVR0jBBgw
FoAU+El0BxtPGll5MSb4xKvVb35QsdIwCwYDVR0PBAQDAgXgMBMGA1UdJQQMMAoG
CCsGAQUFBwMBMIIJhQYDVR0RBIIJfDCCCXiCEXdlYi1wbGF0Zm9ybS50ZXN0ghV3
d3cud2ViLXBsYXRmb3JtLnRlc3SCFW5vdC13ZWItcGxhdGZvcm0udGVzdIIWd3d3
Mi53ZWItcGxhdGZvcm0udGVzdIIWd3d3MS53ZWItcGxhdGZvcm0udGVzdIIZd3d3
Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIZd3d3Lnd3dy53ZWItcGxhdGZvcm0udGVz
dIIad3d3Lnd3dzIud2ViLXBsYXRmb3JtLnRlc3SCGnd3dzEubm90LXdlYi1wbGF0
Zm9ybS50ZXN0ghp3d3cyLnd3dy53ZWItcGxhdGZvcm0udGVzdIIad3d3Lnd3dzEu
d2ViLXBsYXRmb3JtLnRlc3SCGnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0ghp3
d3cxLnd3dy53ZWItcGxhdGZvcm0udGVzdIIbd3d3MS53d3cxLndlYi1wbGF0Zm9y
bS50ZXN0ght3d3cyLnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCG3d3dzIud3d3Mi53
ZWItcGxhdGZvcm0udGVzdIIbd3d3MS53d3cyLndlYi1wbGF0Zm9ybS50ZXN0gh13
d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIed3d3Lnd3dzIubm90LXdlYi1w
bGF0Zm9ybS50ZXN0gh53d3cxLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCHnhu
LS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdIIed3d3Lnd3dzEubm90LXdlYi1w
bGF0Zm9ybS50ZXN0gh53d3cyLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3
dzIud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzEud3d3MS5ub3Qtd2Vi
AAOCAQ8AMIIBCgKCAQEAsqGoKX1ngalK52kxWGVLnPA2ag6pqQfo7xjY/b1P1znL
TRvtF1iP7gmvafJEtboLtHqPvOYb6h0KS5WsSN2r2af5eR4UCFAvk48bVzWzum4Z
G4Um9PNqhv/M4QmNPJicqG/M+RA/qexQWGGx5qsdcskhKOrqy4p+PTMUZ7MKeOic
8dktznNgZpbV+nb7ID63ccQ4wlx/gQ/mP3ZeadNzsaC45MTGR0d0LdyS7vjKaABL
XsgzajuXSA1yvckHj4cTJ3+BYNTADYQo0tj07u3+VUxZqC07AmmYmbpt8zZE/1Dp
yIc/JJ1AKobV2dj2wohCplait5Pz4/GDkkfZQghGvQIDAQABo4IJ+jCCCfYwCQYD
VR0TBAIwADAdBgNVHQ4EFgQU1kqzrIDemIAZBGOcs2oMZs+5X9IwHwYDVR0jBBgw
FoAUSoC8ZGA7OLYNBOLUiEtgdhrZpPswCwYDVR0PBAQDAgXgMBMGA1UdJQQMMAoG
CCsGAQUFBwMBMIIJhQYDVR0RBIIJfDCCCXiCEXdlYi1wbGF0Zm9ybS50ZXN0ghVu
b3Qtd2ViLXBsYXRmb3JtLnRlc3SCFXd3dy53ZWItcGxhdGZvcm0udGVzdIIWd3d3
MS53ZWItcGxhdGZvcm0udGVzdIIWd3d3Mi53ZWItcGxhdGZvcm0udGVzdIIZd3d3
Lnd3dy53ZWItcGxhdGZvcm0udGVzdIIZd3d3Lm5vdC13ZWItcGxhdGZvcm0udGVz
dIIad3d3Mi53d3cud2ViLXBsYXRmb3JtLnRlc3SCGnd3dzEud3d3LndlYi1wbGF0
Zm9ybS50ZXN0ghp3d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIIad3d3MS5ub3Qt
d2ViLXBsYXRmb3JtLnRlc3SCGnd3dy53d3cxLndlYi1wbGF0Zm9ybS50ZXN0ghp3
d3cud3d3Mi53ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cxLndlYi1wbGF0Zm9y
bS50ZXN0ght3d3cxLnd3dzIud2ViLXBsYXRmb3JtLnRlc3SCG3d3dzEud3d3MS53
ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cyLndlYi1wbGF0Zm9ybS50ZXN0gh13
d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIed3d3Mi53d3cubm90LXdlYi1w
bGF0Zm9ybS50ZXN0gh53d3cud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCHnhu
LS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdIIed3d3MS53d3cubm90LXdlYi1w
bGF0Zm9ybS50ZXN0gh53d3cud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3
dzEud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzEud3d3MS5ub3Qtd2Vi
LXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SC
H3d3dzEud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCInd3dy54bi0tbHZlLTZs
YWQud2ViLXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC53d3cud2ViLXBsYXRm
b3JtLnRlc3SCInhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCI3hu
LS1sdmUtNmxhZC53d3cyLndlYi1wbGF0Zm9ybS50ZXN0giN3d3cyLnhuLS1sdmUt
NmxhZC53ZWItcGxhdGZvcm0udGVzdIIjd3d3MS54bi0tbHZlLTZsYWQud2ViLXBs
YXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53d3cxLndlYi1wbGF0Zm9ybS50ZXN0
H3d3dzIud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCInd3dy54bi0tbHZlLTZs
YWQud2ViLXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRm
b3JtLnRlc3SCInhuLS1sdmUtNmxhZC53d3cud2ViLXBsYXRmb3JtLnRlc3SCI3hu
LS1sdmUtNmxhZC53d3cxLndlYi1wbGF0Zm9ybS50ZXN0giN3d3cxLnhuLS1sdmUt
NmxhZC53ZWItcGxhdGZvcm0udGVzdIIjd3d3Mi54bi0tbHZlLTZsYWQud2ViLXBs
YXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53d3cyLndlYi1wbGF0Zm9ybS50ZXN0
giZ3d3cueG4tLWx2ZS02bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdIImeG4tLWx2
ZS02bGFkLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3d3dzIueG4tLWx2ZS02
bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdIIneG4tLWx2ZS02bGFkLnd3dzIubm90
LXdlYi1wbGF0Zm9ybS50ZXN0gid4bi0tbHZlLTZsYWQud3d3MS5ub3Qtd2ViLXBs
YXRmb3JtLnRlc3SCJ3d3dzEueG4tLWx2ZS02bGFkLm5vdC13ZWItcGxhdGZvcm0u
ZS02bGFkLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3huLS1sdmUtNmxhZC53
d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIInd3d3MS54bi0tbHZlLTZsYWQubm90
LXdlYi1wbGF0Zm9ybS50ZXN0gid3d3cyLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBs
YXRmb3JtLnRlc3SCJ3huLS1sdmUtNmxhZC53d3cxLm5vdC13ZWItcGxhdGZvcm0u
dGVzdIIpeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SC
K3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCLXhu
LS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWItcGxhdGZvcm0udGVzdIIteG4t
LW44ajZkczUzbHd3a3JxaHYyOGEud3d3LndlYi1wbGF0Zm9ybS50ZXN0gi13d3cu
LS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dy53ZWItcGxhdGZvcm0udGVzdIIteG4t
LW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gi13d3cu
eG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCLnhuLS1u
OGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIud2ViLXBsYXRmb3JtLnRlc3SCLnd3dzIu
OGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIud2ViLXBsYXRmb3JtLnRlc3SCLnhuLS1u
OGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCLnd3dzIu
eG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCLnd3dzEu
eG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCLnhuLS1u
OGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCL3huLS1s
eG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCL3huLS1s
dmUtNmxhZC54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjF3d3cu
eG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjF4
bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0
@ -116,18 +116,18 @@ gjJ3d3cyLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWItcGxhdGZvcm0u
dGVzdIIyd3d3MS54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRm
b3JtLnRlc3SCMnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIubm90LXdlYi1w
bGF0Zm9ybS50ZXN0gjJ4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cxLm5vdC13
ZWItcGxhdGZvcm0udGVzdII2eG4tLWx2ZS02bGFkLnhuLS1uOGo2ZHM1M2x3d2ty
cWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0gjZ4bi0tbjhqNmRzNTNsd3drcnFodjI4
YS54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1uOGo2ZHM1M2x3
d2tycWh2MjhhLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCOnhu
LS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRm
ZWItcGxhdGZvcm0udGVzdII2eG4tLW44ajZkczUzbHd3a3JxaHYyOGEueG4tLWx2
ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0gjZ4bi0tbHZlLTZsYWQueG4tLW44ajZk
czUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1sdmUtNmxhZC54
bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCOnhu
LS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRm
b3JtLnRlc3SCQXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1uOGo2ZHM1M2x3
d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0gkV4bi0tbjhqNmRzNTNsd3drcnFo
djI4YS54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRl
c3QwDQYJKoZIhvcNAQELBQADggEBAB/bXepMb1pbJ3CO4TflccwLZ2VJ+ecwDdI7
yKC1Y0J3PBDyeSsORgSVPldGc2JGKFtt+MhQLyPTKqov9x+xLtQHb1b4q5DxpUsQ
pMd3cmijPm3DDqFcmKllg4fvpW197dkYMPtJh7CZATKtiAJhnax/tMM0vJqD4++N
3DvMGFijaf3P+4FIJIKOAZIfpJV5PCq8W8N6Am1/ix8rSpXaUJvV0zxN62wfjVJl
isM8d3uaY/Jccat3wWUogKbrIpmolRRLY8l3jnWjew+bZkd0aBAKqks8VbFZjQ8k
ezuT7TBpzQj5xZA0/CGMy5uL715O06GGO+l9HHmqoj7fuAkJAYI=
c3QwDQYJKoZIhvcNAQELBQADggEBAK39hsCQ4VmKG31Q/sjNaibutmQLRpKIEC68
jf2f6XKVVj68S6URm6vs2Gi8DvML0O+Js9lHii/c+oQLdA5k5q4qTkZ2DJwEhuvt
G9bKDFh7gqiV32M9DBuJka8CTNDJTF2W4UqNN6iBVJ91HH32GYP+tBwf81+uWkUc
MJkEFF8QVVCMCtph/yv0xxj9Im89fbgfbN4d5r7sLXJIT/Vcnes7ucm7Vdgax1L9
nTN9dCl9Ima/dl7dPZ47qF33gIo31C5qiB5B7aBu5B3RR4UHz6ufZrOmNV2E43Cs
lfl6SPuvuZNyXoFBwMAI2+sx9z9k0lx1YPeKXPMGqELoPD3GgZs=
-----END CERTIFICATE-----

View file

@ -31,7 +31,6 @@ dom/media/gmp/rlz/
dom/media/gmp/widevine-adapter/content_decryption_module_export.h
dom/media/gmp/widevine-adapter/content_decryption_module_ext.h
dom/media/gmp/widevine-adapter/content_decryption_module.h
dom/media/gmp/widevine-adapter/content_decryption_module_proxy.h
dom/media/platforms/ffmpeg/ffmpeg57/
dom/media/platforms/ffmpeg/ffmpeg58/
dom/media/platforms/ffmpeg/ffmpeg59/