diff --git a/scripts/artifacts/Ph100UFEDdevcievaluesplist.py b/scripts/artifacts/Ph100UFEDdevcievaluesplist.py index 1b39dcdb..70a2fd34 100644 --- a/scripts/artifacts/Ph100UFEDdevcievaluesplist.py +++ b/scripts/artifacts/Ph100UFEDdevcievaluesplist.py @@ -1,88 +1,77 @@ -# Author: Scott Koenig https://theforensicscooter.com/ -# Version: 1.0 -# -# Description: -# Parses basic data from */device_values.plist which is a part of a UFED Advance Logical acquisitions -# with non-encrypted backups. The parsing of this file will allow for iLEAPP to parse some basic information -# such as */PhotoData/Photos.sqlite. -# Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/ - +__artifacts_v2__ = { + 'Ph100UFEDdevicevaluesPlist': { + 'name': 'Ph100-UFED-device-values-Plist', + 'description': 'Parses basic data from */device_values.plist which is a part of a UFED Advance Logical' + ' acquisitions with non-encrypted backups. The parsing of this file will allow for iLEAPP' + ' to parse some basic information such as */PhotoData/Photos.sqlite.' + ' Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains device_values.plist', + 'category': 'Photos-Z-Settings', + 'notes': '', + 'paths': ('*/device_values.plist',), + "output_types": ["standard", "tsv", "none"] + } +} import os import plistlib import biplist import nska_deserialize as nd +from scripts.builds_ids import OS_build import scripts.artifacts.artGlobals -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, logdevinfo, tsv, is_platform_windows - +from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path -def get_ph100ufeddevicevaluesplist(files_found, report_folder, seeker, wrap_text, timezone_offset): - versionnum = 0 +@artifact_processor +def Ph100UFEDdevicevaluesPlist(files_found, report_folder, seeker, wrap_text, timezone_offset): data_list = [] - file_found = str(files_found[0]) - with open(file_found, "rb") as fp: + source_path = str(files_found[0]) + + with open(source_path, "rb") as fp: pl = plistlib.load(fp) for key, val in pl.items(): - data_list.append((key, val)) + data_list.append((key, str(val))) + if key == "ProductVersion": - scripts.artifacts.artGlobals.versionf = val + scripts.artifacts.artGlobals.versionf = str(val) logfunc(f"iOS version: {val}") - logdevinfo(f"iOS version: {val}") + device_info("devicevaluesplist-ufedadvlog", "Product Version", str(val), source_path) if key == "BuildVersion": - logdevinfo(f"BuildVersion: {val}") + logfunc(f"Build Version: {val}") + device_info("devicevaluesplist-ufedadvlog", "Build Version", str(val), source_path) if key == "ProductType": - logfunc(f"ProductType: {val}") - logdevinfo(f"ProductType: {val}") + logfunc(f"Product Type: {val}") + device_info("devicevaluesplist-ufedadvlog", "Product Type", str(val), source_path) if key == "HardwareModel": - logdevinfo(f"HardwareModel: {val}") + logfunc(f"Hardware Model: {val}") + device_info("devicevaluesplist-ufedadvlog", "Hardware Model", str(val), source_path) if key == "InternationalMobileEquipmentIdentity": - logdevinfo(f"InternationalMobileEquipmentIdentity: {val}") + logfunc(f"IMEI: {val}") + device_info("devicevaluesplist-ufedadvlog", "IMEI", str(val), source_path) if key == "SerialNumber": - logdevinfo(f"SerialNumber: {val}") + logfunc(f"Serial Number: {val}") + device_info("devicevaluesplist-ufedadvlog", "Serial Number", str(val), source_path) if key == "DeviceName": - logdevinfo(f"DeviceName: {val}") + logfunc(f"Device Name: {val}") + device_info("devicevaluesplist-ufedadvlog", "Device Name", str(val), source_path) if key == "PasswordProtected": - logdevinfo(f"PasswordProtected: {val}") + logfunc(f"Password Protected: {val}") + device_info("devicevaluesplist-ufedadvlog", "Password Protected", str(val), source_path) if key == "TimeZone": - logdevinfo(f"TimeZone: {val}") - - description = ('Parses basic data from */device_values.plist which is a part of a UFED Advance Logical' - ' acquisitions with non-encrypted backups. The parsing of this file will allow for iLEAPP' - ' to parse some basic information such as */PhotoData/Photos.sqlite.' - ' Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/') - report = ArtifactHtmlReport('Ph100-UFED-device-values-Plist') - report.start_artifact_report(report_folder, 'Ph100-UFED-device-values-Plist', description) - report.add_script() - data_headers = ('Key', 'Values') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() + logfunc(f"TimeZone: {val}") + device_info("devicevaluesplist-ufedadvlog", "TimeZone", str(val), source_path) - tsvname = 'Ph100-UFED-device-values-Plist' - tsv(report_folder, data_headers, data_list, tsvname) + else: + data_list.append((key, str(val))) - -__artifacts_v2__ = { - 'Ph100-UFED-device-values-Plist': { - 'name': 'UFED Adv Log Acquisition Ph100 UFED Device Values Plist', - 'description': 'Parses basic data from */device_values.plist which is a part of a UFED Advance Logical' - ' acquisitions with non-encrypted backups. The parsing of this file will allow for iLEAPP' - ' to parse some basic information such as */PhotoData/Photos.sqlite.' - ' Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-06-10', - 'requirements': 'Acquisition that contains device_values.plist', - 'category': 'Photos-Z-Settings', - 'notes': '', - 'paths': '*/device_values.plist', - 'function': 'get_ph100ufeddevicevaluesplist' - } -} + data_headers = ('Property','Property Value') + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph11KwrdsCapsTitlesDescripsBasicAssetData.py b/scripts/artifacts/Ph11KwrdsCapsTitlesDescripsBasicAssetData.py index 7266c4f6..435166e1 100644 --- a/scripts/artifacts/Ph11KwrdsCapsTitlesDescripsBasicAssetData.py +++ b/scripts/artifacts/Ph11KwrdsCapsTitlesDescripsBasicAssetData.py @@ -1,45 +1,55 @@ -# Photos.sqlite -# Author: Scott Koenig -# Version: 1.0 -# -# Description: -# Parses basic asset record data from */PhotoData/Photos.sqlite for assets that have Keywords, Captions, Titles, -# Descriptions, Captions and Likes. (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) -# or (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) -# or (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) -# or (zCldSharedCommentLiked.ZISLIKE = 1) -# I recommend opening the TSV generated report with Zimmerman's Tools -# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results. -# This parser is based on research and SQLite Queries written by Scott Koenig -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph11KwrdsCapsTitlesDescripsLikesBasicAsstDataPhDaPsql': { + 'name': 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql', + 'description': 'Parses basic asset record data from iOS18 *PhotoData-Photos.sqlite for assets that have' + ' Keywords, Captions, Titles, Descriptions, Captions and Likes.' + ' (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or' + ' (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or' + ' (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or' + ' (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or' + ' (zCldSharedCommentLiked.ZISLIKE = 1). I recommend opening the TSV generated report' + ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer to view,' + ' search and filter the results. This parser is based on research and SQLite Queries' + ' written by Scott Koenig https://theforensicscooter.com/', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-B-Interaction_Artifacts', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc +@artifact_processor +def Ph11KwrdsCapsTitlesDescripsLikesBasicAsstDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) -def get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf - if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for PhotoData-Photos.sqlite basic asset data from iOS " + iosversion) + if version.parse(iosversion) <= version.parse("13.7"): + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -180,127 +190,102 @@ def get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql(files_found, report_fo LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET WHERE (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or (zCldSharedCommentLiked.ZISLIKE = 1) ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70])) - - counter += 1 + ''' - description = ('Parses basic asset record data from iOS14 *PhotoData-Photos.sqlite for assets that have' - ' Keywords, Captions, Titles, Descriptions, Captions and Likes.' - ' (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or' - ' (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or' - ' (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or' - ' (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or' - ' (zCldSharedCommentLiked.ZISLIKE = 1). I recommend opening the TSV generated report' - ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer to view,' - ' search and filter the results. This parser is based on research and SQLite Queries' - ' written by Scott Koenig https://theforensicscooter.com/') - report = ArtifactHtmlReport('Ph11 Keywords Captions Titles Descriptions Likes and Basic Asset Datas') - report.start_artifact_report(report_folder, 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-EXIF-String-5', - 'zAsset-Modification Date-6', - 'zAsset-Last Shared Date-7', - 'zAsset-Trashed Date-8', - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAddAssetAttr- Creator Bundle ID-13', - 'zAsset-Saved Asset Type-14', - 'zAsset-Visibility State-15', - 'zAssetDes-Long Description-16', - 'zAddAssetAttr-Title-Comments via Cloud Website-17', - 'zAddAssetAttr-Accessibility Description-18', - 'zKeywrd-Shortcut-19', - 'zKeywrd-Title-20', - 'zCldSharedComment-Type-21', - 'zCldSharedComment-Comment Text-22', - 'zCldFeedEnt-Entry Date-23', - 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-24', - 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-25', - 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-26', - 'zCldFeedEnt-Entry Priority Number-27', - 'zCldFeedEnt-Entry Type Number-28', - 'zCldSharedComment-Cloud GUID-4TableStart-29', - 'zCldSharedComment-Date-30', - 'zCldSharedComment-Comment Client Date-31', - 'zAsset-Cloud Last Viewed Comment Date-32', - 'zCldSharedComment-Commenter Hashed Person ID-33', - 'zCldSharedComment-Batch Comment-34', - 'zCldSharedComment-Is a Caption-35', - 'zAsset-Cloud Has Comments by Me-36', - 'zCldSharedComment-Is My Comment-37', - 'zCldSharedComment-Is Deletable-38', - 'zAsset-Cloud Has Comments Conversation-39', - 'zAsset-Cloud Has Unseen Comments-40', - 'zCldSharedComment-Liked-41', - 'zAddAssetAttr-Asset Description-42', - 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-43', - 'zAsset-FOK-Cloud Feed Asset Entry Key-44', - 'zCldFeedEnt-zPK= zCldShared keys-45', - 'zCldFeedEnt-zENT-46', - 'zCldFeedEnt-zOPT-47', - 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-48', - 'zCldFeedEnt-Entry Invitation Record GUID-49', - 'zCldFeedEnt-Entry Cloud Asset GUID-50', - 'zCldSharedComment-zPK-51', - 'zCldSharedComment-zENT-52', - 'zCldSharedComment-zOPT-53', - 'zCldSharedComment-Commented Asset Key= zAsset-zPK-54', - 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-55', - 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-56', - 'zCldSharedComment-Liked Asset Key= zAsset-zPK-57', - 'zCldSharedComment-CldFeedLikeCommentEntry Key-58', - 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-59', - 'zCldSharedComment-Cloud GUID-60', - 'zKeywrd-zPK-61', - 'z1KeyWrds-36Keywords = zKeywrd-zPK-62', - 'zKeywrd-zENT-63', - 'zKeywrd-zOPT-64', - 'zKeywrd-UUID-65', - 'zAsset-zPK-66', - 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-67', - 'zAddAssetAttr-zPK-68', - 'zAsset-UUID = store.cloudphotodb-69', - 'zAddAssetAttr-Master Fingerprint-70') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70])) - else: - logfunc('No data available for iOS 14 Photos.sqlite Keywords Captions Titles Descriptions Basic Asst Data') + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + 'zAddAssetAttr- Creator Bundle ID-13', + 'zAsset-Saved Asset Type-14', + 'zAsset-Visibility State-15', + 'zAssetDes-Long Description-16', + 'zAddAssetAttr-Title-Comments via Cloud Website-17', + 'zAddAssetAttr-Accessibility Description-18', + 'zKeywrd-Shortcut-19', + 'zKeywrd-Title-20', + 'zCldSharedComment-Type-21', + 'zCldSharedComment-Comment Text-22', + ('zCldFeedEnt-Entry Date-23', 'datetime'), + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-24', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-25', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-26', + 'zCldFeedEnt-Entry Priority Number-27', + 'zCldFeedEnt-Entry Type Number-28', + 'zCldSharedComment-Cloud GUID-4TableStart-29', + ('zCldSharedComment-Date-30', 'datetime'), + ('zCldSharedComment-Comment Client Date-31', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-32', 'datetime'), + 'zCldSharedComment-Commenter Hashed Person ID-33', + 'zCldSharedComment-Batch Comment-34', + 'zCldSharedComment-Is a Caption-35', + 'zAsset-Cloud Has Comments by Me-36', + 'zCldSharedComment-Is My Comment-37', + 'zCldSharedComment-Is Deletable-38', + 'zAsset-Cloud Has Comments Conversation-39', + 'zAsset-Cloud Has Unseen Comments-40', + 'zCldSharedComment-Liked-41', + 'zAddAssetAttr-Asset Description-42', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-43', + 'zAsset-FOK-Cloud Feed Asset Entry Key-44', + 'zCldFeedEnt-zPK= zCldShared keys-45', + 'zCldFeedEnt-zENT-46', + 'zCldFeedEnt-zOPT-47', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-48', + 'zCldFeedEnt-Entry Invitation Record GUID-49', + 'zCldFeedEnt-Entry Cloud Asset GUID-50', + 'zCldSharedComment-zPK-51', + 'zCldSharedComment-zENT-52', + 'zCldSharedComment-zOPT-53', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-54', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-55', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-56', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-57', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-58', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-59', + 'zCldSharedComment-Cloud GUID-60', + 'zKeywrd-zPK-61', + 'z1KeyWrds-36Keywords = zKeywrd-zPK-62', + 'zKeywrd-zENT-63', + 'zKeywrd-zOPT-64', + 'zKeywrd-UUID-65', + 'zAsset-zPK-66', + 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-67', + 'zAddAssetAttr-zPK-68', + 'zAsset-UUID = store.cloudphotodb-69', + 'zAddAssetAttr-Master Fingerprint-70') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -465,133 +450,108 @@ def get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql(files_found, report_fo LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET WHERE (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or (zCldSharedCommentLiked.ZISLIKE = 1) ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75])) + ''' - counter += 1 - - description = ('Parses basic asset record data from iOS15 *PhotoData-Photos.sqlite for assets that have' - ' Keywords, Captions, Titles, Descriptions, Captions and Likes.' - ' (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or' - ' (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or' - ' (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or' - ' (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or' - ' (zCldSharedCommentLiked.ZISLIKE = 1). I recommend opening the TSV generated report' - ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer to view,' - ' search and filter the results. This parser is based on research and SQLite Queries' - ' written by Scott Koenig https://theforensicscooter.com/') - report = ArtifactHtmlReport('Ph11 Keywords Captions Titles Descriptions Likes and Basic Asset Data') - report.start_artifact_report(report_folder, 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-EXIF-String-5', - 'zAsset-Modification Date-6', - 'zAsset-Last Shared Date-7', - 'zAsset-Trashed Date-8', - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', - 'zAddAssetAttr- Imported by Bundle Identifier-14', - 'zAddAssetAttr- Imported By Display Name-15', - 'zAsset-Saved Asset Type-16', - 'zAsset-Syndication State-17', - 'zAsset-Bundle Scope-18', - 'zAddAssetAttr-Share Type-19', - 'zAsset-Visibility State-20', - 'zAssetDes-Long Description-21', - 'zAddAssetAttr-Title-Comments via Cloud Website-22', - 'zAddAssetAttr-Accessibility Description-23', - 'zKeywrd-Shortcut-24', - 'zKeywrd-Title-25', - 'zCldSharedComment-Type-26', - 'zCldSharedComment-Comment Text-27', - 'zCldFeedEnt-Entry Date-28', - 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-29', - 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-30', - 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-31', - 'zCldFeedEnt-Entry Priority Number-32', - 'zCldFeedEnt-Entry Type Number-33', - 'zCldSharedComment-Cloud GUID-4TableStart-34', - 'zCldSharedComment-Date-35', - 'zCldSharedComment-Comment Client Date-36', - 'zAsset-Cloud Last Viewed Comment Date-37', - 'zCldSharedComment-Commenter Hashed Person ID-38', - 'zCldSharedComment-Batch Comment-39', - 'zCldSharedComment-Is a Caption-40', - 'zAsset-Cloud Has Comments by Me-41', - 'zCldSharedComment-Is My Comment-42', - 'zCldSharedComment-Is Deletable-43', - 'zAsset-Cloud Has Comments Conversation-44', - 'zAsset-Cloud Has Unseen Comments-45', - 'zCldSharedComment-Liked-46', - 'zAddAssetAttr-Asset Description-47', - 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-48', - 'zAsset-FOK-Cloud Feed Asset Entry Key-49', - 'zCldFeedEnt-zPK= zCldShared keys-50', - 'zCldFeedEnt-zENT-51', - 'zCldFeedEnt-zOPT-52', - 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-53', - 'zCldFeedEnt-Entry Invitation Record GUID-54', - 'zCldFeedEnt-Entry Cloud Asset GUID-55', - 'zCldSharedComment-zPK-56', - 'zCldSharedComment-zENT-57', - 'zCldSharedComment-zOPT-58', - 'zCldSharedComment-Commented Asset Key= zAsset-zPK-59', - 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-60', - 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-61', - 'zCldSharedComment-Liked Asset Key= zAsset-zPK-62', - 'zCldSharedComment-CldFeedLikeCommentEntry Key-63', - 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-64', - 'zCldSharedComment-Cloud GUID-65', - 'zKeywrd-zPK-66', - 'z1KeyWrds-38Keywords = zKeywrd-zPK-67', - 'zKeywrd-zENT-68', - 'zKeywrd-zOPT-69', - 'zKeywrd-UUID-70', - 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-71', - 'zAsset-zPK-72', - 'zAddAssetAttr-zPK-73', - 'zAsset-UUID = store.cloudphotodb-74', - 'zAddAssetAttr-Master Fingerprint-75') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75])) - else: - logfunc('No data available for iOS15 Photos.sqlite Keywords Captions Titles Descriptions Basic Asst Data') + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', + 'zAddAssetAttr- Imported by Bundle Identifier-14', + 'zAddAssetAttr- Imported By Display Name-15', + 'zAsset-Saved Asset Type-16', + 'zAsset-Syndication State-17', + 'zAsset-Bundle Scope-18', + 'zAddAssetAttr-Share Type-19', + 'zAsset-Visibility State-20', + 'zAssetDes-Long Description-21', + 'zAddAssetAttr-Title-Comments via Cloud Website-22', + 'zAddAssetAttr-Accessibility Description-23', + 'zKeywrd-Shortcut-24', + 'zKeywrd-Title-25', + 'zCldSharedComment-Type-26', + 'zCldSharedComment-Comment Text-27', + ('zCldFeedEnt-Entry Date-28', 'datetime'), + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-29', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-30', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-31', + 'zCldFeedEnt-Entry Priority Number-32', + 'zCldFeedEnt-Entry Type Number-33', + 'zCldSharedComment-Cloud GUID-4TableStart-34', + ('zCldSharedComment-Date-35', 'datetime'), + ('zCldSharedComment-Comment Client Date-36', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-37', 'datetime'), + 'zCldSharedComment-Commenter Hashed Person ID-38', + 'zCldSharedComment-Batch Comment-39', + 'zCldSharedComment-Is a Caption-40', + 'zAsset-Cloud Has Comments by Me-41', + 'zCldSharedComment-Is My Comment-42', + 'zCldSharedComment-Is Deletable-43', + 'zAsset-Cloud Has Comments Conversation-44', + 'zAsset-Cloud Has Unseen Comments-45', + 'zCldSharedComment-Liked-46', + 'zAddAssetAttr-Asset Description-47', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-48', + 'zAsset-FOK-Cloud Feed Asset Entry Key-49', + 'zCldFeedEnt-zPK= zCldShared keys-50', + 'zCldFeedEnt-zENT-51', + 'zCldFeedEnt-zOPT-52', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-53', + 'zCldFeedEnt-Entry Invitation Record GUID-54', + 'zCldFeedEnt-Entry Cloud Asset GUID-55', + 'zCldSharedComment-zPK-56', + 'zCldSharedComment-zENT-57', + 'zCldSharedComment-zOPT-58', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-59', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-60', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-61', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-62', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-63', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-64', + 'zCldSharedComment-Cloud GUID-65', + 'zKeywrd-zPK-66', + 'z1KeyWrds-38Keywords = zKeywrd-zPK-67', + 'zKeywrd-zENT-68', + 'zKeywrd-zOPT-69', + 'zKeywrd-UUID-70', + 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-71', + 'zAsset-zPK-72', + 'zAddAssetAttr-zPK-73', + 'zAsset-UUID = store.cloudphotodb-74', + 'zAddAssetAttr-Master Fingerprint-75') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return + return data_headers, data_list, source_path - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -762,135 +722,110 @@ def get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql(files_found, report_fo LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET WHERE (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or (zCldSharedCommentLiked.ZISLIKE = 1) ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77])) + ''' - counter += 1 - - description = ('Parses basic asset record data from iOS16-17 *PhotoData-Photos.sqlite for assets that have' - ' Keywords, Captions, Titles, Descriptions, Captions and Likes.' - ' (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or' - ' (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or' - ' (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or' - ' (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or' - ' (zCldSharedCommentLiked.ZISLIKE = 1). I recommend opening the TSV generated report' - ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer to view,' - ' search and filter the results. This parser is based on research and SQLite Queries' - ' written by Scott Koenig https://theforensicscooter.com/') - report = ArtifactHtmlReport('Ph11 Keywords Captions Titles Descriptions Likes and Basic Asset Data') - report.start_artifact_report(report_folder, 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-EXIF-String-5', - 'zAsset-Modification Date-6', - 'zAsset-Last Shared Date-7', - 'zAsset-Trashed Date-8', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-9', - 'zAsset-Directory-Path-10', - 'zAsset-Filename-11', - 'zAddAssetAttr- Original Filename-12', - 'zCldMast- Original Filename-13', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', - 'zAddAssetAttr- Imported by Bundle Identifier-15', - 'zAddAssetAttr- Imported By Display Name-16', - 'zAsset-Saved Asset Type-17', - 'zAsset-Syndication State-18', - 'zAsset-Bundle Scope-19', - 'zAddAssetAttr-Share Type-20', - 'zAsset-Active Library Scope Participation State-21', - 'zAsset-Visibility State-22', - 'zAssetDes-Long Description-23', - 'zAddAssetAttr-Title-Comments via Cloud Website-24', - 'zAddAssetAttr-Accessibility Description-25', - 'zKeywrd-Shortcut-26', - 'zKeywrd-Title-27', - 'zCldSharedComment-Type-28', - 'zCldSharedComment-Comment Text-29', - 'zCldFeedEnt-Entry Date-30', - 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-31', - 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-32', - 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-33', - 'zCldFeedEnt-Entry Priority Number-34', - 'zCldFeedEnt-Entry Type Number-35', - 'zCldSharedComment-Cloud GUID-4TableStart-36', - 'zCldSharedComment-Date-37', - 'zCldSharedComment-Comment Client Date-38', - 'zAsset-Cloud Last Viewed Comment Date-39', - 'zCldSharedComment-Commenter Hashed Person ID-40', - 'zCldSharedComment-Batch Comment-41', - 'zCldSharedComment-Is a Caption-42', - 'zAsset-Cloud Has Comments by Me-43', - 'zCldSharedComment-Is My Comment-44', - 'zCldSharedComment-Is Deletable-45', - 'zAsset-Cloud Has Comments Conversation-46', - 'zAsset-Cloud Has Unseen Comments-47', - 'zCldSharedComment-Liked-48', - 'zAddAssetAttr-Asset Description-49', - 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-50', - 'zAsset-FOK-Cloud Feed Asset Entry Key-51', - 'zCldFeedEnt-zPK= zCldShared keys-52', - 'zCldFeedEnt-zENT-53', - 'zCldFeedEnt-zOPT-54', - 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-55', - 'zCldFeedEnt-Entry Invitation Record GUID-56', - 'zCldFeedEnt-Entry Cloud Asset GUID-57', - 'zCldSharedComment-zPK-58', - 'zCldSharedComment-zENT-59', - 'zCldSharedComment-zOPT-60', - 'zCldSharedComment-Commented Asset Key= zAsset-zPK-61', - 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-62', - 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-63', - 'zCldSharedComment-Liked Asset Key= zAsset-zPK-64', - 'zCldSharedComment-CldFeedLikeCommentEntry Key-65', - 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-66', - 'zCldSharedComment-Cloud GUID-67', - 'zKeywrd-zPK-68', - 'z1KeyWrds-40Keywords = zKeywrd-zPK-69', - 'zKeywrd-zENT-70', - 'zKeywrd-zOPT-71', - 'zKeywrd-UUID-72', - 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-73', - 'zAsset-zPK-74', - 'zAddAssetAttr-zPK-75', - 'zAsset-UUID = store.cloudphotodb-76', - 'zAddAssetAttr-Master Fingerprint-77') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - else: - logfunc('No data available for iOS16-17 Photos.sqlite Keywords Captions Titles Descriptions Basic Asst Data') + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77])) - db.close() - return + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-9', + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAddAssetAttr- Imported by Bundle Identifier-15', + 'zAddAssetAttr- Imported By Display Name-16', + 'zAsset-Saved Asset Type-17', + 'zAsset-Syndication State-18', + 'zAsset-Bundle Scope-19', + 'zAddAssetAttr-Share Type-20', + 'zAsset-Active Library Scope Participation State-21', + 'zAsset-Visibility State-22', + 'zAssetDes-Long Description-23', + 'zAddAssetAttr-Title-Comments via Cloud Website-24', + 'zAddAssetAttr-Accessibility Description-25', + 'zKeywrd-Shortcut-26', + 'zKeywrd-Title-27', + 'zCldSharedComment-Type-28', + 'zCldSharedComment-Comment Text-29', + 'zCldFeedEnt-Entry Date-30', + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-31', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-32', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-33', + 'zCldFeedEnt-Entry Priority Number-34', + 'zCldFeedEnt-Entry Type Number-35', + 'zCldSharedComment-Cloud GUID-4TableStart-36', + ('zCldSharedComment-Date-37', 'datetime'), + ('zCldSharedComment-Comment Client Date-38', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-39', 'datetime'), + 'zCldSharedComment-Commenter Hashed Person ID-40', + 'zCldSharedComment-Batch Comment-41', + 'zCldSharedComment-Is a Caption-42', + 'zAsset-Cloud Has Comments by Me-43', + 'zCldSharedComment-Is My Comment-44', + 'zCldSharedComment-Is Deletable-45', + 'zAsset-Cloud Has Comments Conversation-46', + 'zAsset-Cloud Has Unseen Comments-47', + 'zCldSharedComment-Liked-48', + 'zAddAssetAttr-Asset Description-49', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-50', + 'zAsset-FOK-Cloud Feed Asset Entry Key-51', + 'zCldFeedEnt-zPK= zCldShared keys-52', + 'zCldFeedEnt-zENT-53', + 'zCldFeedEnt-zOPT-54', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-55', + 'zCldFeedEnt-Entry Invitation Record GUID-56', + 'zCldFeedEnt-Entry Cloud Asset GUID-57', + 'zCldSharedComment-zPK-58', + 'zCldSharedComment-zENT-59', + 'zCldSharedComment-zOPT-60', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-61', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-62', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-63', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-64', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-65', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-66', + 'zCldSharedComment-Cloud GUID-67', + 'zKeywrd-zPK-68', + 'z1KeyWrds-40Keywords = zKeywrd-zPK-69', + 'zKeywrd-zENT-70', + 'zKeywrd-zOPT-71', + 'zKeywrd-UUID-72', + 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-73', + 'zAsset-zPK-74', + 'zAddAssetAttr-zPK-75', + 'zAsset-UUID = store.cloudphotodb-76', + 'zAddAssetAttr-Master Fingerprint-77') + data_list = get_sqlite_db_records(source_path, query) - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -909,11 +844,6 @@ def get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql(files_found, report_fo zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier', zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name', - CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', CASE zAsset.ZSAVEDASSETTYPE WHEN 0 THEN '0-Saved-via-other-source-0' WHEN 1 THEN '1-StillTesting-1' @@ -958,18 +888,14 @@ def get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql(files_found, report_fo WHEN 0 THEN '0-Visible-PL-CameraRoll-0' WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' - END AS 'zAsset-Visibility State', + END AS 'zAsset-Visibility State', zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description', zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', zKeywrd.ZSHORTCUT AS 'zKeywrd-Shortcut', zKeywrd.ZTITLE AS 'zKeywrd-Title', - zGeneratedAsstDescrip.ZANALYSISVERSION AS 'zGeneratedAsstDescrip-Analysis_Version', - zGeneratedAsstDescrip.ZANALYSISSOURCETYPE AS 'zGeneratedAsstDescrip-Analysis_Source_Type', - DateTime(zGeneratedAsstDescrip.ZANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zGeneratedAsstDescrip-Analysis_Timestamp', - zGeneratedAsstDescrip.ZDESCRIPTIONTEXT AS 'zGeneratedAsstDescrip-Description-Text', zCldSharedComment.ZCOMMENTTYPE AS 'zCldSharedComment-Type', - zCldSharedComment.ZCOMMENTTEXT AS 'zCldSharedComment-Comment Text', + zCldSharedComment.ZCOMMENTTEXT AS 'zCldSharedComment-Comment Text', DateTime(zCldFeedEnt.ZENTRYDATE + 978307200, 'UNIXEPOCH') AS 'zCldFeedEnt-Entry Date', zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart', zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart', @@ -1050,42 +976,31 @@ def get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql(files_found, report_fo zCldSharedCommentLiked.Z_FOK_CLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key', zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID', zKeywrd.Z_PK AS 'zKeywrd-zPK', - z1KeyWrds.Z_48KEYWORDS AS 'z1KeyWrds-48Keywords = zKeywrd-zPK', + z1KeyWrds.Z_41KEYWORDS AS 'z1KeyWrds-41Keywords = zKeywrd-zPK', zKeywrd.Z_ENT AS 'zKeywrd-zENT', zKeywrd.Z_OPT AS 'zKeywrd-zOPT', zKeywrd.ZUUID AS 'zKeywrd-UUID', z1KeyWrds.Z_1ASSETATTRIBUTES AS 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK', - zGeneratedAsstDescrip.ZASSET AS 'zGeneratedAsstDescrip-zAsset= zAsset-zPK', - zAsset.ZGENERATEDASSETDESCRIPTION AS 'zAsset-Generated Asset Description= zGeneratedAsstDescrip-zPK', - zGeneratedAsstDescrip.Z_PK AS 'zGeneratedAsstDescrip-zPK = zAsset-Generated Asset Description', - zGeneratedAsstDescrip.Z_ENT AS 'zGeneratedAsstDescrip-zENT', - zGeneratedAsstDescrip.Z_OPT AS 'zGeneratedAsstDescrip-zOPT', zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK LEFT JOIN Z_1KEYWORDS z1KeyWrds ON zAddAssetAttr.Z_PK = z1KeyWrds.Z_1ASSETATTRIBUTES - LEFT JOIN ZKEYWORD zKeywrd ON z1KeyWrds.Z_48KEYWORDS = zKeywrd.Z_PK + LEFT JOIN ZKEYWORD zKeywrd ON z1KeyWrds.Z_41KEYWORDS = zKeywrd.Z_PK LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION LEFT JOIN ZCLOUDFEEDENTRY zCldFeedEnt ON zAsset.ZCLOUDFEEDASSETSENTRY = zCldFeedEnt.Z_PK LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedComment ON zAsset.Z_PK = zCldSharedComment.ZCOMMENTEDASSET LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET - LEFT JOIN ZGENERATEDASSETDESCRIPTION zGeneratedAsstDescrip ON zAsset.ZGENERATEDASSETDESCRIPTION = zGeneratedAsstDescrip.Z_PK - WHERE (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or (zCldSharedCommentLiked.ZISLIKE = 1) or (zGeneratedAsstDescrip.ZDESCRIPTIONTEXT > 0) - ORDER BY zAsset.ZDATECREATED - """) + WHERE (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or (zCldSharedCommentLiked.ZISLIKE = 1) + ORDER BY zAsset.ZDATECREATED + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -1093,146 +1008,368 @@ def get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql(files_found, report_fo row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88])) + row[73], row[74], row[75], row[76], row[77])) - counter += 1 + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-9', + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAddAssetAttr- Imported by Bundle Identifier-15', + 'zAddAssetAttr- Imported By Display Name-16', + 'zAsset-Saved Asset Type-17', + 'zAsset-Syndication State-18', + 'zAsset-Bundle Scope-19', + 'zAddAssetAttr-Share Type-20', + 'zAsset-Active Library Scope Participation State-21', + 'zAsset-Visibility State-22', + 'zAssetDes-Long Description-23', + 'zAddAssetAttr-Title-Comments via Cloud Website-24', + 'zAddAssetAttr-Accessibility Description-25', + 'zKeywrd-Shortcut-26', + 'zKeywrd-Title-27', + 'zCldSharedComment-Type-28', + 'zCldSharedComment-Comment Text-29', + ('zCldFeedEnt-Entry Date-30', 'datetime'), + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-31', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-32', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-33', + 'zCldFeedEnt-Entry Priority Number-34', + 'zCldFeedEnt-Entry Type Number-35', + 'zCldSharedComment-Cloud GUID-4TableStart-36', + ('zCldSharedComment-Date-37', 'datetime'), + ('zCldSharedComment-Comment Client Date-38', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-39', 'datetime'), + 'zCldSharedComment-Commenter Hashed Person ID-40', + 'zCldSharedComment-Batch Comment-41', + 'zCldSharedComment-Is a Caption-42', + 'zAsset-Cloud Has Comments by Me-43', + 'zCldSharedComment-Is My Comment-44', + 'zCldSharedComment-Is Deletable-45', + 'zAsset-Cloud Has Comments Conversation-46', + 'zAsset-Cloud Has Unseen Comments-47', + 'zCldSharedComment-Liked-48', + 'zAddAssetAttr-Asset Description-49', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-50', + 'zAsset-FOK-Cloud Feed Asset Entry Key-51', + 'zCldFeedEnt-zPK= zCldShared keys-52', + 'zCldFeedEnt-zENT-53', + 'zCldFeedEnt-zOPT-54', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-55', + 'zCldFeedEnt-Entry Invitation Record GUID-56', + 'zCldFeedEnt-Entry Cloud Asset GUID-57', + 'zCldSharedComment-zPK-58', + 'zCldSharedComment-zENT-59', + 'zCldSharedComment-zOPT-60', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-61', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-62', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-63', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-64', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-65', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-66', + 'zCldSharedComment-Cloud GUID-67', + 'zKeywrd-zPK-68', + 'z1KeyWrds-41Keywords = zKeywrd-zPK-69', + 'zKeywrd-zENT-70', + 'zKeywrd-zOPT-71', + 'zKeywrd-UUID-72', + 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-73', + 'zAsset-zPK-74', + 'zAddAssetAttr-zPK-75', + 'zAsset-UUID = store.cloudphotodb-76', + 'zAddAssetAttr-Master Fingerprint-77') + data_list = get_sqlite_db_records(source_path, query) - description = ('Parses basic asset record data from iOS18 *PhotoData-Photos.sqlite for assets that have' - ' Keywords, Captions, Titles, Descriptions, Captions and Likes.' - ' (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or' - ' (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or' - ' (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or' - ' (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or' - ' (zCldSharedCommentLiked.ZISLIKE = 1). I recommend opening the TSV generated report' - ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer to view,' - ' search and filter the results. This parser is based on research and SQLite Queries' - ' written by Scott Koenig https://theforensicscooter.com/') - report = ArtifactHtmlReport('Ph11 Keywords Captions Titles Descriptions Likes and Basic Asset Data') - report.start_artifact_report(report_folder, 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-EXIF-String-5', - 'zAsset-Modification Date-6', - 'zAsset-Last Shared Date-7', - 'zAsset-Trashed Date-8', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-9', - 'zAsset-Directory-Path-10', - 'zAsset-Filename-11', - 'zAddAssetAttr- Original Filename-12', - 'zCldMast- Original Filename-13', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', - 'zAddAssetAttr- Imported by Bundle Identifier-15', - 'zAddAssetAttr- Imported By Display Name-16', - 'zAsset-Is_Recently_Saved-iOS18-17', - 'zAsset-Saved Asset Type-18', - 'zAsset-Syndication State-19', - 'zAsset-Bundle Scope-20', - 'zAddAssetAttr-Share Type-21', - 'zAsset-Active Library Scope Participation State-22', - 'zAsset-Visibility State-23', - 'zAssetDes-Long Description-24', - 'zAddAssetAttr-Title-Comments via Cloud Website-25', - 'zAddAssetAttr-Accessibility Description-26', - 'zKeywrd-Shortcut-27', - 'zKeywrd-Title-28', - 'zGeneratedAsstDescrip-Analysis_Version-29', - 'zGeneratedAsstDescrip-Analysis_Source_Type-30', - 'zGeneratedAsstDescrip-Analysis_Timestamp-31', - 'zGeneratedAsstDescrip-Description-Text-32', - 'zCldSharedComment-Type-33', - 'zCldSharedComment-Comment Text-34', - 'zCldFeedEnt-Entry Date-35', - 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-36', - 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-37', - 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-38', - 'zCldFeedEnt-Entry Priority Number-39', - 'zCldFeedEnt-Entry Type Number-40', - 'zCldSharedComment-Cloud GUID-4TableStart-41', - 'zCldSharedComment-Date-42', - 'zCldSharedComment-Comment Client Date-43', - 'zAsset-Cloud Last Viewed Comment Date-44', - 'zCldSharedComment-Commenter Hashed Person ID-45', - 'zCldSharedComment-Batch Comment-46', - 'zCldSharedComment-Is a Caption-47', - 'zAsset-Cloud Has Comments by Me-48', - 'zCldSharedComment-Is My Comment-49', - 'zCldSharedComment-Is Deletable-50', - 'zAsset-Cloud Has Comments Conversation-51', - 'zAsset-Cloud Has Unseen Comments-52', - 'zCldSharedComment-Liked-53', - 'zAddAssetAttr-Asset Description-54', - 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-55', - 'zAsset-FOK-Cloud Feed Asset Entry Key-56', - 'zCldFeedEnt-zPK= zCldShared keys-57', - 'zCldFeedEnt-zENT-58', - 'zCldFeedEnt-zOPT-59', - 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-60', - 'zCldFeedEnt-Entry Invitation Record GUID-61', - 'zCldFeedEnt-Entry Cloud Asset GUID-62', - 'zCldSharedComment-zPK-63', - 'zCldSharedComment-zENT-64', - 'zCldSharedComment-zOPT-65', - 'zCldSharedComment-Commented Asset Key= zAsset-zPK-66', - 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-67', - 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-68', - 'zCldSharedComment-Liked Asset Key= zAsset-zPK-69', - 'zCldSharedComment-CldFeedLikeCommentEntry Key-70', - 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-71', - 'zCldSharedComment-Cloud GUID-72', - 'zKeywrd-zPK-73', - 'z1KeyWrds-48Keywords = zKeywrd-zPK-74', - 'zKeywrd-zENT-75', - 'zKeywrd-zOPT-76', - 'zKeywrd-UUID-77', - 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-78', - 'zGeneratedAsstDescrip-zAsset= zAsset-zPK-79', - 'zAsset-Generated Asset Description= zGeneratedAsstDescrip-zPK-80', - 'zGeneratedAsstDescrip-zPK = zAsset-Generated Asset Description-81', - 'zGeneratedAsstDescrip-zENT-82', - 'zGeneratedAsstDescrip-zOPT-83', - 'zAsset-zPK-84', - 'zAddAssetAttr-zPK-85', - 'zAsset-UUID = store.cloudphotodb-86', - 'zAddAssetAttr-Original Stable Hash-iOS18-87', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-88') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() + return data_headers, data_list, source_path - tsvname = 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) + elif version.parse(iosversion) >= version.parse("18"): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - else: - logfunc('No data available for iOS 18 Photos.sqlite basic asset data one record per zAsset-zPK') + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name', + CASE zAsset.ZISRECENTLYSAVED + WHEN 0 THEN '0-Not_Recently_Saved-0' + WHEN 1 THEN '1-Recently_Saved-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' + END AS 'zAsset-Is_Recently_Saved', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description', + zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', + zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', + zKeywrd.ZSHORTCUT AS 'zKeywrd-Shortcut', + zKeywrd.ZTITLE AS 'zKeywrd-Title', + zCldSharedComment.ZCOMMENTTYPE AS 'zCldSharedComment-Type', + zCldSharedComment.ZCOMMENTTEXT AS 'zCldSharedComment-Comment Text', + DateTime(zCldFeedEnt.ZENTRYDATE + 978307200, 'UNIXEPOCH') AS 'zCldFeedEnt-Entry Date', + zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart', + zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart', + zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart', + CASE zCldFeedEnt.ZENTRYPRIORITYNUMBER + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYPRIORITYNUMBER || '' + END AS 'zCldFeedEnt-Entry Priority Number', + CASE zCldFeedEnt.ZENTRYTYPENUMBER + WHEN 1 THEN 'Is My Shared Asset-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-StillTesting-3' + WHEN 4 THEN 'Not My Shared Asset-4' + WHEN 5 THEN 'Asset in Album with Invite Record-5' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYTYPENUMBER || '' + END AS 'zCldFeedEnt-Entry Type Number', + zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID-4TableStart', + DateTime(zCldSharedComment.ZCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Date', + DateTime(zCldSharedComment.ZCOMMENTCLIENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Comment Client Date', + DateTime(zAsset.ZCLOUDLASTVIEWEDCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Last Viewed Comment Date', + zCldSharedComment.ZCOMMENTERHASHEDPERSONID AS 'zCldSharedComment-Commenter Hashed Person ID', + CASE zCldSharedComment.ZISBATCHCOMMENT + WHEN 0 THEN 'Not Batch Comment-0' + WHEN 1 THEN 'Batch Comment-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISBATCHCOMMENT || '' + END AS 'zCldSharedComment-Batch Comment', + CASE zCldSharedComment.ZISCAPTION + WHEN 0 THEN 'Not a Caption-0' + WHEN 1 THEN 'Caption-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISCAPTION || '' + END AS 'zCldSharedComment-Is a Caption', + CASE zAsset.ZCLOUDHASCOMMENTSBYME + WHEN 1 THEN 'Device Apple Acnt Commented-Liked Asset-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSBYME || '' + END AS 'zAsset-Cloud Has Comments by Me', + CASE zCldSharedComment.ZISMYCOMMENT + WHEN 0 THEN 'Not My Comment-0' + WHEN 1 THEN 'My Comment-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISMYCOMMENT || '' + END AS 'zCldSharedComment-Is My Comment', + CASE zCldSharedComment.ZISDELETABLE + WHEN 0 THEN 'Not Deletable-0' + WHEN 1 THEN 'Deletable-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISDELETABLE || '' + END AS 'zCldSharedComment-Is Deletable', + CASE zAsset.ZCLOUDHASCOMMENTSCONVERSATION + WHEN 1 THEN 'Device Apple Acnt Commented-Liked Conversation-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSCONVERSATION || '' + END AS 'zAsset-Cloud Has Comments Conversation', + CASE zAsset.ZCLOUDHASUNSEENCOMMENTS + WHEN 0 THEN 'zAsset No Unseen Comments-0' + WHEN 1 THEN 'zAsset Unseen Comments-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASUNSEENCOMMENTS || '' + END AS 'zAsset-Cloud Has Unseen Comments', + CASE zCldSharedCommentLiked.ZISLIKE + WHEN 0 THEN 'Asset Not Liked-0' + WHEN 1 THEN 'Asset Liked-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedCommentLiked.ZISLIKE || '' + END AS 'zCldSharedComment-Liked', + zAddAssetAttr.ZASSETDESCRIPTION AS 'zAddAssetAttr-Asset Description', + zAsset.ZCLOUDFEEDASSETSENTRY AS 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK', + zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', + zCldFeedEnt.Z_PK AS 'zCldFeedEnt-zPK= zCldShared keys', + zCldFeedEnt.Z_ENT AS 'zCldFeedEnt-zENT', + zCldFeedEnt.Z_OPT AS 'zCldFeedEnt-zOPT', + zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID', + zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID', + zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID', + zCldSharedComment.Z_PK AS 'zCldSharedComment-zPK', + zCldSharedComment.Z_ENT AS 'zCldSharedComment-zENT', + zCldSharedComment.Z_OPT AS 'zCldSharedComment-zOPT', + zCldSharedComment.ZCOMMENTEDASSET AS 'zCldSharedComment-Commented Asset Key= zAsset-zPK', + zCldSharedComment.ZCLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK', + zCldSharedComment.Z_FOK_CLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key', + zCldSharedCommentLiked.ZLIKEDASSET AS 'zCldSharedComment-Liked Asset Key= zAsset-zPK', + zCldSharedCommentLiked.ZCLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-CldFeedLikeCommentEntry Key', + zCldSharedCommentLiked.Z_FOK_CLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key', + zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID', + zKeywrd.Z_PK AS 'zKeywrd-zPK', + z1KeyWrds.Z_47KEYWORDS AS 'z1KeyWrds-47Keywords = zKeywrd-zPK', + zKeywrd.Z_ENT AS 'zKeywrd-zENT', + zKeywrd.Z_OPT AS 'zKeywrd-zOPT', + zKeywrd.ZUUID AS 'zKeywrd-UUID', + z1KeyWrds.Z_1ASSETATTRIBUTES AS 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN Z_1KEYWORDS z1KeyWrds ON zAddAssetAttr.Z_PK = z1KeyWrds.Z_1ASSETATTRIBUTES + LEFT JOIN ZKEYWORD zKeywrd ON z1KeyWrds.Z_47KEYWORDS = zKeywrd.Z_PK + LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION + LEFT JOIN ZCLOUDFEEDENTRY zCldFeedEnt ON zAsset.ZCLOUDFEEDASSETSENTRY = zCldFeedEnt.Z_PK + LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedComment ON zAsset.Z_PK = zCldSharedComment.ZCOMMENTEDASSET + LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET + WHERE (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or (zCldSharedCommentLiked.ZISLIKE = 1) + ORDER BY zAsset.ZDATECREATED + ''' - db.close() - return + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79])) + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-9', + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAddAssetAttr- Imported by Bundle Identifier-15', + 'zAddAssetAttr- Imported By Display Name-16', + 'zAsset-Is_Recently_Saved-17', + 'zAsset-Saved Asset Type-18', + 'zAsset-Syndication State-19', + 'zAsset-Bundle Scope-20', + 'zAddAssetAttr-Share Type-21', + 'zAsset-Active Library Scope Participation State-22', + 'zAsset-Visibility State-23', + 'zAssetDes-Long Description-24', + 'zAddAssetAttr-Title-Comments via Cloud Website-25', + 'zAddAssetAttr-Accessibility Description-26', + 'zKeywrd-Shortcut-27', + 'zKeywrd-Title-28', + 'zCldSharedComment-Type-29', + 'zCldSharedComment-Comment Text-30', + ('zCldFeedEnt-Entry Date-31', 'datetime'), + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-32', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-33', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-34', + 'zCldFeedEnt-Entry Priority Number-35', + 'zCldFeedEnt-Entry Type Number-36', + 'zCldSharedComment-Cloud GUID-4TableStart-37', + ('zCldSharedComment-Date-38', 'datetime'), + ('zCldSharedComment-Comment Client Date-39', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-40', 'datetime'), + 'zCldSharedComment-Commenter Hashed Person ID-41', + 'zCldSharedComment-Batch Comment-42', + 'zCldSharedComment-Is a Caption-43', + 'zAsset-Cloud Has Comments by Me-44', + 'zCldSharedComment-Is My Comment-45', + 'zCldSharedComment-Is Deletable-46', + 'zAsset-Cloud Has Comments Conversation-47', + 'zAsset-Cloud Has Unseen Comments-48', + 'zCldSharedComment-Liked-49', + 'zAddAssetAttr-Asset Description-50', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-51', + 'zAsset-FOK-Cloud Feed Asset Entry Key-52', + 'zCldFeedEnt-zPK= zCldShared keys-53', + 'zCldFeedEnt-zENT-54', + 'zCldFeedEnt-zOPT-55', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-56', + 'zCldFeedEnt-Entry Invitation Record GUID-57', + 'zCldFeedEnt-Entry Cloud Asset GUID-58', + 'zCldSharedComment-zPK-59', + 'zCldSharedComment-zENT-60', + 'zCldSharedComment-zOPT-61', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-62', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-63', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-64', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-65', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-66', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-67', + 'zCldSharedComment-Cloud GUID-68', + 'zKeywrd-zPK-69', + 'z1KeyWrds-47Keywords = zKeywrd-zPK-70', + 'zKeywrd-zENT-71', + 'zKeywrd-zOPT-72', + 'zKeywrd-UUID-73', + 'z1KeyWrds-1AssetAttributes = zAddAssetAttr-zPK-74', + 'zAsset-zPK-75', + 'zAddAssetAttr-zPK-76', + 'zAsset-UUID = store.cloudphotodb-77', + 'zAddAssetAttr-Original Stable Hash-78', + 'zAddAssetAttr.Adjusted Stable Hash-79') + data_list = get_sqlite_db_records(source_path, query) -__artifacts_v2__ = { - 'Ph11-KwrdsCapsTitlesDescripsLikesBasicAsstData-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph11 Keywords Captions Titles Descriptions Likes and Basic Asset Data', - 'description': 'Parses basic asset record data from iOS18 *PhotoData-Photos.sqlite for assets that have' - ' Keywords, Captions, Titles, Descriptions, Captions and Likes.' - ' (zAssetDes.ZLONGDESCRIPTION > 0) or (zAddAssetAttr.ZTITLE > 0) or' - ' (zAddAssetAttr.ZACCESSIBILITYDESCRIPTION > 0) or' - ' (zKeywrd.ZSHORTCUT > 0) or (zKeywrd.ZTITLE > 0) or' - ' (zCldSharedComment.ZCOMMENTTYPE > 0) or (zCldSharedComment.ZCOMMENTTEXT > 0) or' - ' (zCldSharedCommentLiked.ZISLIKE = 1). I recommend opening the TSV generated report' - ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer to view,' - ' search and filter the results. This parser is based on research and SQLite Queries' - ' written by Scott Koenig https://theforensicscooter.com/', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-06-20', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-B-Interaction_Artifacts', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph11kwrdscapstitlesdescripsbasicassetdataphdapsql' - } -} + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph15PeopleandDetFacesNAD.py b/scripts/artifacts/Ph15PeopleandDetFacesNAD.py index 82d13fe1..be681188 100644 --- a/scripts/artifacts/Ph15PeopleandDetFacesNAD.py +++ b/scripts/artifacts/Ph15PeopleandDetFacesNAD.py @@ -1,43 +1,62 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses data from Photos.sqlite for people - detected faces - face crop data supports iOS 14-18. -# The results could produce multiple records for a single asset. -# This parser is based on research and SQLite queries written by Scott Koenig -# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools -# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results. -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph15_1PeopleFacesNADPhDaPsql': { + 'name': 'Ph15.1-People & Faces NAD-PhDaPsql', + 'description': 'Parses data from PhotoData-Photos.sqlite for people - detected faces - face crop data.' + ' The results may contain multiple records per ZASSET table Z_PK value and supports iOS 14-18.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-G-People_Faces_Data', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + }, + 'Ph15_2PeopleFacesNADSyndPL': { + 'name': 'Ph15.2-People & Faces NAD-SyndPL', + 'description': 'Parses data from Syndication.photoslibrary-database-Photos.sqlite for' + ' people - detected faces - face crop data. The results may contain multiple records' + ' per ZASSET table Z_PK value and supports iOS 14-18.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', + 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import nska_deserialize as nd import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly - - -def get_ph15peopledetfacephdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import media_to_html, artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph15_1PeopleFacesNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("13.7"): - logfunc("Unsupported version for PhotoData-Photos.sqlite people - detected faces - face crop data from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT zDetFace.ZASSET AS 'zDetFace-AssetForFace= zAsset-zPK', zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key', @@ -305,179 +324,158 @@ def get_ph15peopledetfacephdapsql(files_found, report_folder, seeker, wrap_text, LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP ORDER BY zDetFace.Z_PK - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[3] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[89] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[3]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[89]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[89]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[10] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[87] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[10]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], - personcontactmatchingdictionary, - row[4], row[5], row[6], row[7], row[8], row[9], - facecropresourcedata_blob, - row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91])) - - counter += 1 - - description = 'Parses record data from PhotoData-Photos.sqlite for' \ - ' people - detected faces - face crop data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 14.' - report = ArtifactHtmlReport('Ph15.1-People & Faces NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph15.1-People & Faces NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', - 'zFaceCrop-Asset Key-1', - 'zDetFacePrint-Data-SeeRawDBData-2', - 'zPerson-Contact Matching Dictionary-3', - 'zPerson-Verified Type-4', - 'zPerson-Display Name-5', - 'zPerson-Full Name-6', - 'zPerson-Cloud Verified Type-7', - 'zFaceCrop-State-8', - 'zFaceCrop-Type-9', - 'zFaceCrop-Resource Data-10', - 'zDetFace-Confirmed Face Crop Generation State-11', - 'zDetFace-Manual-12', - 'zDetFace-VIP Model Type-13', - 'zDetFace-Name Source-14', - 'zDetFace-Cloud Name Source-15', - 'zPerson-Type-16', - 'zPerson-Gender Type-17', - 'zDetFace-Gender Type-18', - 'zDetFace-Center X-19', - 'zDetFace-Center Y-20', - 'zPerson-Age Type Estimate-21', - 'zDetFace-Age Type Estimate-22', - 'zDetFace-Hair Color Type-23', - 'zDetFace-Facial Hair Type-24', - 'zDetFace-Has Smile-25', - 'zDetFace-Smile Type-26', - 'zDetFace-Lip Makeup Type-27', - 'zDetFace-Eyes State-28', - 'zDetFace-Is Left Eye Closed-29', - 'zDetFace-Is Right Eye Closed-30', - 'zDetFace-Eye Glasses Type-31', - 'zDetFace-Eye Makeup Type-32', - 'zDetFace-Cluster Sequence Number Key-33', - 'zDetFace-Grouping ID-34', - 'zDetFace-Master ID-35', - 'zDetFace-Quality-36', - 'zDetFace-Quality Measure-37', - 'zDetFace-Source Height-38', - 'zDetFace-Source Width-39', - 'zDetFace-Asset Visible-40', - 'zDetFace-Hidden/Asset Hidden-41', - 'zDetFace-In Trash/Recently Deleted-42', - 'zDetFace-Cloud Local State-43', - 'zDetFace-Training Type-44', - 'zDetFace.Pose Yaw-45', - 'zDetFace-Roll-46', - 'zDetFace-Size-47', - 'zDetFace-Cluster Sequence Number-48', - 'zDetFace-Blur Score-49', - 'zDetFacePrint-Face Print Version-50', - 'zDetFaceGroup-UUID-51', - 'zDetFaceGroup-Person Builder State-52', - 'zDetFaceGroup-UnNamed Face Count-53', - 'zPerson-Face Count-54', - 'zDetFace-Face Algorithm Version-55', - 'zDetFace-Adjustment Version-56', - 'zPerson-In Person Naming Model-57', - 'zPerson-Key Face Pick Source Key-58', - 'zPerson-Manual Order Key-59', - 'zPerson-Question Type-60', - 'zPerson-Suggested For Client Type-61', - 'zPerson-Merge Target Person-62', - 'zPerson-Cloud Local State-63', - 'zFaceCrop-Cloud Local State-64', - 'zFaceCrop-Cloud Type-65', - 'zPerson-Cloud Delete State-66', - 'zFaceCrop-Cloud Delete State-67', - 'zDetFace-zPK-68', - 'zDetFacePrint-Face Key-69', - 'zPerson-KeyFace=zDetFace-zPK-70', - 'zFaceCrop-Face Key-71', - 'zPerson-zPK=zDetFace-Person-72', - 'zDetFace-PersonForFace= zPerson-zPK-73', - 'zDetFace-Person Being Key Face-74', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-75', - 'zDetFace-Face Print-76', - 'zDetFacePrint-zPK-77', - 'zDetFace-Face Crop-78', - 'zFaceCrop-zPK-79', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-80', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-81', - 'zPerson-Assoc Face Group Key-82', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-83', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-84', - 'zDetFaceGroup-zPK-85', - 'zDetFace-UUID-86', - 'zFaceCrop-UUID-87', - 'zFaceCrop-Invalid Merge Candidate Person UUID-88', - 'zPerson-Person UUID-89', - 'zPerson-Person URI-90', - 'zDetFaceGroup-UUID-91') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph15.1-People & Faces NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph15.1-People & Faces NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite people - detected faces - face crop data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[3] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[89] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[3]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[89]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[89]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[10] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[87] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[10]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], + personcontactmatchingdictionary, + row[4], row[5], row[6], row[7], row[8], row[9], + facecropresourcedata_blob, + row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91])) + + data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', + 'zFaceCrop-Asset Key-1', + 'zDetFacePrint-Data-SeeRawDBData-2', + 'zPerson-Contact Matching Dictionary-3', + 'zPerson-Verified Type-4', + 'zPerson-Display Name-5', + 'zPerson-Full Name-6', + 'zPerson-Cloud Verified Type-7', + 'zFaceCrop-State-8', + 'zFaceCrop-Type-9', + 'zFaceCrop-Resource Data-10', + 'zDetFace-Confirmed Face Crop Generation State-11', + 'zDetFace-Manual-12', + 'zDetFace-VIP Model Type-13', + 'zDetFace-Name Source-14', + 'zDetFace-Cloud Name Source-15', + 'zPerson-Type-16', + 'zPerson-Gender Type-17', + 'zDetFace-Gender Type-18', + 'zDetFace-Center X-19', + 'zDetFace-Center Y-20', + 'zPerson-Age Type Estimate-21', + 'zDetFace-Age Type Estimate-22', + 'zDetFace-Hair Color Type-23', + 'zDetFace-Facial Hair Type-24', + 'zDetFace-Has Smile-25', + 'zDetFace-Smile Type-26', + 'zDetFace-Lip Makeup Type-27', + 'zDetFace-Eyes State-28', + 'zDetFace-Is Left Eye Closed-29', + 'zDetFace-Is Right Eye Closed-30', + 'zDetFace-Eye Glasses Type-31', + 'zDetFace-Eye Makeup Type-32', + 'zDetFace-Cluster Sequence Number Key-33', + 'zDetFace-Grouping ID-34', + 'zDetFace-Master ID-35', + 'zDetFace-Quality-36', + 'zDetFace-Quality Measure-37', + 'zDetFace-Source Height-38', + 'zDetFace-Source Width-39', + 'zDetFace-Asset Visible-40', + 'zDetFace-Hidden/Asset Hidden-41', + 'zDetFace-In Trash/Recently Deleted-42', + 'zDetFace-Cloud Local State-43', + 'zDetFace-Training Type-44', + 'zDetFace.Pose Yaw-45', + 'zDetFace-Roll-46', + 'zDetFace-Size-47', + 'zDetFace-Cluster Sequence Number-48', + 'zDetFace-Blur Score-49', + 'zDetFacePrint-Face Print Version-50', + 'zDetFaceGroup-UUID-51', + 'zDetFaceGroup-Person Builder State-52', + 'zDetFaceGroup-UnNamed Face Count-53', + 'zPerson-Face Count-54', + 'zDetFace-Face Algorithm Version-55', + 'zDetFace-Adjustment Version-56', + 'zPerson-In Person Naming Model-57', + 'zPerson-Key Face Pick Source Key-58', + 'zPerson-Manual Order Key-59', + 'zPerson-Question Type-60', + 'zPerson-Suggested For Client Type-61', + 'zPerson-Merge Target Person-62', + 'zPerson-Cloud Local State-63', + 'zFaceCrop-Cloud Local State-64', + 'zFaceCrop-Cloud Type-65', + 'zPerson-Cloud Delete State-66', + 'zFaceCrop-Cloud Delete State-67', + 'zDetFace-zPK-68', + 'zDetFacePrint-Face Key-69', + 'zPerson-KeyFace=zDetFace-zPK-70', + 'zFaceCrop-Face Key-71', + 'zPerson-zPK=zDetFace-Person-72', + 'zDetFace-PersonForFace= zPerson-zPK-73', + 'zDetFace-Person Being Key Face-74', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-75', + 'zDetFace-Face Print-76', + 'zDetFacePrint-zPK-77', + 'zDetFace-Face Crop-78', + 'zFaceCrop-zPK-79', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-80', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-81', + 'zPerson-Assoc Face Group Key-82', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-83', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-84', + 'zDetFaceGroup-zPK-85', + 'zDetFace-UUID-86', + 'zFaceCrop-UUID-87', + 'zFaceCrop-Invalid Merge Candidate Person UUID-88', + 'zPerson-Person UUID-89', + 'zPerson-Person URI-90', + 'zDetFaceGroup-UUID-91') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT zDetFace.ZASSET AS 'zDetFace-AssetForFace= zAsset-zPK', zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key', @@ -833,196 +831,175 @@ def get_ph15peopledetfacephdapsql(files_found, report_folder, seeker, wrap_text, LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP ORDER BY zDetFace.Z_PK - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[3] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[105] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[3]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[105]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[105]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[10] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[103] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[10]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], - personcontactmatchingdictionary, - row[4], row[5], row[6], row[7], row[8], row[9], - facecropresourcedata_blob, - row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107])) - - counter += 1 - - description = 'Parses data from PhotoData-Photos.sqlite for' \ - ' people - detected faces - face crop data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 15.' - report = ArtifactHtmlReport('Ph15.1-People & Faces NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph15.1-People & Faces NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', - 'zFaceCrop-Asset Key-1', - 'zDetFacePrint-Data-SeeRawDBData-2', - 'zPerson-Contact Matching Dictionary-3', - 'zPerson-Verified Type-4', - 'zPerson-Display Name-5', - 'zPerson-Full Name-6', - 'zPerson-Cloud Verified Type-7', - 'zFaceCrop-State-8', - 'zFaceCrop-Type-9', - 'zFaceCrop-Resource Data-10', - 'zDetFace-Confirmed Face Crop Generation State-11', - 'zDetFace-Manual-12', - 'zDetFace-Detection Type-13', - 'zPerson-Detection Type-14', - 'zDetFace-VIP Model Type-15', - 'zDetFace-Name Source-16', - 'zDetFace-Cloud Name Source-17', - 'zPerson-Type-18', - 'zPerson-Gender Type-19', - 'zDetFace-Gender Type-20', - 'zDetFace-Center X-21', - 'zDetFace-Center Y-22', - 'zPerson-Age Type Estimate-23', - 'zDetFace-Age Type Estimate-24', - 'zDetFace-Ethnicity Type-25', - 'zDetFace-Skin Tone Type-26', - 'zDetFace-Hair Type-27', - 'zDetFace-Hair Color Type-28', - 'zDetFace-Head Gear Type-29', - 'zDetFace-Facial Hair Type-30', - 'zDetFace-Has Face Mask-31', - 'zDetFace-Pose Type-32', - 'zDetFace-Face Expression Type-33', - 'zDetFace-Has Smile-34', - 'zDetFace-Smile Type-35', - 'zDetFace-Lip Makeup Type-36', - 'zDetFace-Eyes State-37', - 'zDetFace-Is Left Eye Closed-38', - 'zDetFace-Is Right Eye Closed-39', - 'zDetFace-Gaze Center X-40', - 'zDetFace-Gaze Center Y-41', - 'zDetFace-Face Gaze Type-42', - 'zDetFace-Eye Glasses Type-43', - 'zDetFace-Eye Makeup Type-44', - 'zDetFace-Cluster Squence Number Key-45', - 'zDetFace-Grouping ID-46', - 'zDetFace-Master ID-47', - 'zDetFace-Quality-48', - 'zDetFace-Quality Measure-49', - 'zDetFace-Source Height-50', - 'zDetFace-Source Width-51', - 'zDetFace-Asset Visible-52', - 'zDetFace-Hidden/Asset Hidden-53', - 'zDetFace-In Trash/Recently Deleted-54', - 'zDetFace-Cloud Local State-55', - 'zDetFace-Training Type-56', - 'zDetFace.Pose Yaw-57', - 'zDetFace-Body Center X-58', - 'zDetFace-Body Center Y-59', - 'zDetFace-Body Height-60', - 'zDetFace-Body Width-61', - 'zDetFace-Roll-62', - 'zDetFace-Size-63', - 'zDetFace-Cluster Squence Number-64', - 'zDetFace-Blur Score-65', - 'zDetFacePrint-Face Print Version-66', - 'zDetFaceGroup-UUID-67', - 'zDetFaceGroup-Person Builder State-68', - 'zDetFaceGroup-UnNamed Face Count-69', - 'zPerson-Face Count-70', - 'zDetFace-Face Algorithm Version-71', - 'zDetFace-Adjustment Version-72', - 'zPerson-In Person Naming Model-73', - 'zPerson-Key Face Pick Source Key-74', - 'zPerson-Manual Order Key-75', - 'zPerson-Question Type-76', - 'zPerson-Suggested For Client Type-77', - 'zPerson-Merge Target Person-78', - 'zPerson-Cloud Local State-79', - 'zFaceCrop-Cloud Local State-80', - 'zFaceCrop-Cloud Type-81', - 'zPerson-Cloud Delete State-82', - 'zFaceCrop-Cloud Delete State-83', - 'zDetFace-zPK-84', - 'zDetFacePrint-Face Key-85', - 'zPerson-KeyFace=zDetFace-zPK-86', - 'zFaceCrop-Face Key-87', - 'zPerson-zPK=zDetFace-Person-88', - 'zDetFace-PersonForFace= zPerson-zPK-89', - 'zDetFace-Person Being Key Face-90', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-91', - 'zDetFace-Face Print-92', - 'zDetFacePrint-zPK-93', - 'zDetFace-Face Crop-94', - 'zFaceCrop-zPK-95', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-96', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-97', - 'zPerson-Assoc Face Group Key-98', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-99', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-100', - 'zDetFaceGroup-zPK-101', - 'zDetFace-UUID-102', - 'zFaceCrop-UUID-103', - 'zFaceCrop-Invalid Merge Canidate Person UUID-104', - 'zPerson-Person UUID-105', - 'zPerson-Person URI-106', - 'zDetFaceGroup-UUID-107') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph15.1-People & Faces NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph15.1-People & Faces NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite people - detected faces - face crop data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[3] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[105] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[3]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[105]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[105]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[10] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[103] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[10]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], + personcontactmatchingdictionary, + row[4], row[5], row[6], row[7], row[8], row[9], + facecropresourcedata_blob, + row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107])) + + data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', + 'zFaceCrop-Asset Key-1', + 'zDetFacePrint-Data-SeeRawDBData-2', + 'zPerson-Contact Matching Dictionary-3', + 'zPerson-Verified Type-4', + 'zPerson-Display Name-5', + 'zPerson-Full Name-6', + 'zPerson-Cloud Verified Type-7', + 'zFaceCrop-State-8', + 'zFaceCrop-Type-9', + 'zFaceCrop-Resource Data-10', + 'zDetFace-Confirmed Face Crop Generation State-11', + 'zDetFace-Manual-12', + 'zDetFace-Detection Type-13', + 'zPerson-Detection Type-14', + 'zDetFace-VIP Model Type-15', + 'zDetFace-Name Source-16', + 'zDetFace-Cloud Name Source-17', + 'zPerson-Type-18', + 'zPerson-Gender Type-19', + 'zDetFace-Gender Type-20', + 'zDetFace-Center X-21', + 'zDetFace-Center Y-22', + 'zPerson-Age Type Estimate-23', + 'zDetFace-Age Type Estimate-24', + 'zDetFace-Ethnicity Type-25', + 'zDetFace-Skin Tone Type-26', + 'zDetFace-Hair Type-27', + 'zDetFace-Hair Color Type-28', + 'zDetFace-Head Gear Type-29', + 'zDetFace-Facial Hair Type-30', + 'zDetFace-Has Face Mask-31', + 'zDetFace-Pose Type-32', + 'zDetFace-Face Expression Type-33', + 'zDetFace-Has Smile-34', + 'zDetFace-Smile Type-35', + 'zDetFace-Lip Makeup Type-36', + 'zDetFace-Eyes State-37', + 'zDetFace-Is Left Eye Closed-38', + 'zDetFace-Is Right Eye Closed-39', + 'zDetFace-Gaze Center X-40', + 'zDetFace-Gaze Center Y-41', + 'zDetFace-Face Gaze Type-42', + 'zDetFace-Eye Glasses Type-43', + 'zDetFace-Eye Makeup Type-44', + 'zDetFace-Cluster Squence Number Key-45', + 'zDetFace-Grouping ID-46', + 'zDetFace-Master ID-47', + 'zDetFace-Quality-48', + 'zDetFace-Quality Measure-49', + 'zDetFace-Source Height-50', + 'zDetFace-Source Width-51', + 'zDetFace-Asset Visible-52', + 'zDetFace-Hidden/Asset Hidden-53', + 'zDetFace-In Trash/Recently Deleted-54', + 'zDetFace-Cloud Local State-55', + 'zDetFace-Training Type-56', + 'zDetFace.Pose Yaw-57', + 'zDetFace-Body Center X-58', + 'zDetFace-Body Center Y-59', + 'zDetFace-Body Height-60', + 'zDetFace-Body Width-61', + 'zDetFace-Roll-62', + 'zDetFace-Size-63', + 'zDetFace-Cluster Squence Number-64', + 'zDetFace-Blur Score-65', + 'zDetFacePrint-Face Print Version-66', + 'zDetFaceGroup-UUID-67', + 'zDetFaceGroup-Person Builder State-68', + 'zDetFaceGroup-UnNamed Face Count-69', + 'zPerson-Face Count-70', + 'zDetFace-Face Algorithm Version-71', + 'zDetFace-Adjustment Version-72', + 'zPerson-In Person Naming Model-73', + 'zPerson-Key Face Pick Source Key-74', + 'zPerson-Manual Order Key-75', + 'zPerson-Question Type-76', + 'zPerson-Suggested For Client Type-77', + 'zPerson-Merge Target Person-78', + 'zPerson-Cloud Local State-79', + 'zFaceCrop-Cloud Local State-80', + 'zFaceCrop-Cloud Type-81', + 'zPerson-Cloud Delete State-82', + 'zFaceCrop-Cloud Delete State-83', + 'zDetFace-zPK-84', + 'zDetFacePrint-Face Key-85', + 'zPerson-KeyFace=zDetFace-zPK-86', + 'zFaceCrop-Face Key-87', + 'zPerson-zPK=zDetFace-Person-88', + 'zDetFace-PersonForFace= zPerson-zPK-89', + 'zDetFace-Person Being Key Face-90', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-91', + 'zDetFace-Face Print-92', + 'zDetFacePrint-zPK-93', + 'zDetFace-Face Crop-94', + 'zFaceCrop-zPK-95', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-96', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-97', + 'zPerson-Assoc Face Group Key-98', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-99', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-100', + 'zDetFaceGroup-zPK-101', + 'zDetFace-UUID-102', + 'zFaceCrop-UUID-103', + 'zFaceCrop-Invalid Merge Canidate Person UUID-104', + 'zPerson-Person UUID-105', + 'zPerson-Person URI-106', + 'zDetFaceGroup-UUID-107') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT zDetFace.ZASSET AS 'zDetFace-AssetForFace= zAsset-zPK', zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key', @@ -1380,199 +1357,178 @@ def get_ph15peopledetfacephdapsql(files_found, report_folder, seeker, wrap_text, LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP ORDER BY zDetFace.Z_PK - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[3] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[107] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[3]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[107]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[107]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[10] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[105] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[10]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], - personcontactmatchingdictionary, - row[4], row[5], row[6], row[7], row[8], row[9], - facecropresourcedata_blob, - row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109])) - - counter += 1 - - description = 'Parses data from PhotoData-Photos.sqlite for' \ - ' people - detected faces - face crop data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 16.' - report = ArtifactHtmlReport('Ph15.1-People & Faces NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph15.1-People & Faces NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', - 'zFaceCrop-Asset Key-1', - 'zDetFacePrint-Data-SeeRawDBData-2', - 'zPerson-Contact Matching Dictionary-3', - 'zPerson-Verified Type-4', - 'zPerson-Display Name-5', - 'zPerson-Full Name-6', - 'zPerson-Cloud Verified Type-7', - 'zFaceCrop-State-8', - 'zFaceCrop-Type-9', - 'zFaceCrop-Resource Data-10', - 'zDetFace-Confirmed Face Crop Generation State-11', - 'zDetFace-Manual-12', - 'zDetFace-Detection Type-13', - 'zPerson-Detection Type-14', - 'zDetFace-VIP Model Type-15', - 'zDetFace-Name Source-16', - 'zDetFace-Cloud Name Source-17', - 'zPerson-Merge Candidate Confidence-18', - 'zPerson-Type-19', - 'zPerson-Gender Type-20', - 'zDetFace-Gender Type-21', - 'zDetFace-Center X-22', - 'zDetFace-Center Y-23', - 'zPerson-Age Type Estimate-24', - 'zDetFace-Age Type Estimate-25', - 'zDetFace-Ethnicity Type-26', - 'zDetFace-Skin Tone Type-27', - 'zDetFace-Hair Type-28', - 'zDetFace-Hair Color Type-29', - 'zDetFace-Head Gear Type-30', - 'zDetFace-Facial Hair Type-31', - 'zDetFace-Has Face Mask-32', - 'zDetFace-Pose Type-33', - 'zDetFace-Face Expression Type-34', - 'zDetFace-Has Smile-35', - 'zDetFace-Smile Type-36', - 'zDetFace-Lip Makeup Type-37', - 'zDetFace-Eyes State-38', - 'zDetFace-Is Left Eye Closed-39', - 'zDetFace-Is Right Eye Closed-40', - 'zDetFace-Gaze Center X-41', - 'zDetFace-Gaze Center Y-42', - 'zDetFace-Face Gaze Type-43', - 'zDetFace-Eye Glasses Type-44', - 'zDetFace-Eye Makeup Type-45', - 'zDetFace-Cluster Squence Number Key-46', - 'zDetFace-Grouping ID-47', - 'zDetFace-Master ID-48', - 'zDetFace-Quality-49', - 'zDetFace-Quality Measure-50', - 'zDetFace-Source Height-51', - 'zDetFace-Source Width-52', - 'zDetFace-Asset Visible-53', - 'zDetFace-Hidden/Asset Hidden-54', - 'zDetFace-In Trash/Recently Deleted-55', - 'zDetFace-Cloud Local State-56', - 'zDetFace-Training Type-57', - 'zDetFace.Pose Yaw-58', - 'zDetFace-Body Center X-59', - 'zDetFace-Body Center Y-60', - 'zDetFace-Body Height-61', - 'zDetFace-Body Width-62', - 'zDetFace-Roll-63', - 'zDetFace-Size-64', - 'zDetFace-Cluster Sequence Number-65', - 'zDetFace-Blur Score-66', - 'zDetFacePrint-Face Print Version-67', - 'zDetFaceGroup-UUID-68', - 'zDetFaceGroup-Person Builder State-69', - 'zDetFaceGroup-UnNamed Face Count-70', - 'zPerson-Face Count-71', - 'zDetFace-Face Algorithm Version-72', - 'zDetFace-Adjustment Version-73', - 'zPerson-In Person Naming Model-74', - 'zPerson-Key Face Pick Source Key-75', - 'zPerson-Manual Order Key-76', - 'zPerson-Question Type-77', - 'zPerson-Suggested For Client Type-78', - 'zPerson-Merge Target Person-79', - 'zPerson-Cloud Local State-80', - 'zFaceCrop-Cloud Local State-81', - 'zFaceCrop-Cloud Type-82', - 'zPerson-Cloud Delete State-83', - 'zFaceCrop-Cloud Delete State-84', - 'zDetFace-zPK-85', - 'zDetFacePrint-Face Key-86', - 'zPerson-KeyFace=zDetFace-zPK-87', - 'zFaceCrop-Face Key-88', - 'zPerson-zPK=zDetFace-Person-89', - 'zDetFace-PersonForFace= zPerson-zPK-90', - 'zDetFace-Person Being Key Face-91', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-92', - 'zDetFace-Face Print-93', - 'zDetFacePrint-zPK-94', - 'zDetFace-Face Crop-95', - 'zFaceCrop-zPK-96', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-97', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-98', - 'zPerson-Assoc Face Group Key-99', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-100', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-101', - 'zDetFaceGroup-zPK-102', - 'zPerson-Share Participant= zSharePartic-zPK-103', - 'zDetFace-UUID-104', - 'zFaceCrop-UUID-105', - 'zFaceCrop-Invalid Merge Candidate Person UUID-106', - 'zPerson-Person UUID-107', - 'zPerson-Person URI-108', - 'zDetFaceGroup-UUID-109') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph15.1-People & Faces NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph15.1-People & Faces NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite people - detected faces - face crop data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[3] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[107] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[3]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[107]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[107]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[10] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[105] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[10]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], + personcontactmatchingdictionary, + row[4], row[5], row[6], row[7], row[8], row[9], + facecropresourcedata_blob, + row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109])) + + data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', + 'zFaceCrop-Asset Key-1', + 'zDetFacePrint-Data-SeeRawDBData-2', + 'zPerson-Contact Matching Dictionary-3', + 'zPerson-Verified Type-4', + 'zPerson-Display Name-5', + 'zPerson-Full Name-6', + 'zPerson-Cloud Verified Type-7', + 'zFaceCrop-State-8', + 'zFaceCrop-Type-9', + 'zFaceCrop-Resource Data-10', + 'zDetFace-Confirmed Face Crop Generation State-11', + 'zDetFace-Manual-12', + 'zDetFace-Detection Type-13', + 'zPerson-Detection Type-14', + 'zDetFace-VIP Model Type-15', + 'zDetFace-Name Source-16', + 'zDetFace-Cloud Name Source-17', + 'zPerson-Merge Candidate Confidence-18', + 'zPerson-Type-19', + 'zPerson-Gender Type-20', + 'zDetFace-Gender Type-21', + 'zDetFace-Center X-22', + 'zDetFace-Center Y-23', + 'zPerson-Age Type Estimate-24', + 'zDetFace-Age Type Estimate-25', + 'zDetFace-Ethnicity Type-26', + 'zDetFace-Skin Tone Type-27', + 'zDetFace-Hair Type-28', + 'zDetFace-Hair Color Type-29', + 'zDetFace-Head Gear Type-30', + 'zDetFace-Facial Hair Type-31', + 'zDetFace-Has Face Mask-32', + 'zDetFace-Pose Type-33', + 'zDetFace-Face Expression Type-34', + 'zDetFace-Has Smile-35', + 'zDetFace-Smile Type-36', + 'zDetFace-Lip Makeup Type-37', + 'zDetFace-Eyes State-38', + 'zDetFace-Is Left Eye Closed-39', + 'zDetFace-Is Right Eye Closed-40', + 'zDetFace-Gaze Center X-41', + 'zDetFace-Gaze Center Y-42', + 'zDetFace-Face Gaze Type-43', + 'zDetFace-Eye Glasses Type-44', + 'zDetFace-Eye Makeup Type-45', + 'zDetFace-Cluster Squence Number Key-46', + 'zDetFace-Grouping ID-47', + 'zDetFace-Master ID-48', + 'zDetFace-Quality-49', + 'zDetFace-Quality Measure-50', + 'zDetFace-Source Height-51', + 'zDetFace-Source Width-52', + 'zDetFace-Asset Visible-53', + 'zDetFace-Hidden/Asset Hidden-54', + 'zDetFace-In Trash/Recently Deleted-55', + 'zDetFace-Cloud Local State-56', + 'zDetFace-Training Type-57', + 'zDetFace.Pose Yaw-58', + 'zDetFace-Body Center X-59', + 'zDetFace-Body Center Y-60', + 'zDetFace-Body Height-61', + 'zDetFace-Body Width-62', + 'zDetFace-Roll-63', + 'zDetFace-Size-64', + 'zDetFace-Cluster Sequence Number-65', + 'zDetFace-Blur Score-66', + 'zDetFacePrint-Face Print Version-67', + 'zDetFaceGroup-UUID-68', + 'zDetFaceGroup-Person Builder State-69', + 'zDetFaceGroup-UnNamed Face Count-70', + 'zPerson-Face Count-71', + 'zDetFace-Face Algorithm Version-72', + 'zDetFace-Adjustment Version-73', + 'zPerson-In Person Naming Model-74', + 'zPerson-Key Face Pick Source Key-75', + 'zPerson-Manual Order Key-76', + 'zPerson-Question Type-77', + 'zPerson-Suggested For Client Type-78', + 'zPerson-Merge Target Person-79', + 'zPerson-Cloud Local State-80', + 'zFaceCrop-Cloud Local State-81', + 'zFaceCrop-Cloud Type-82', + 'zPerson-Cloud Delete State-83', + 'zFaceCrop-Cloud Delete State-84', + 'zDetFace-zPK-85', + 'zDetFacePrint-Face Key-86', + 'zPerson-KeyFace=zDetFace-zPK-87', + 'zFaceCrop-Face Key-88', + 'zPerson-zPK=zDetFace-Person-89', + 'zDetFace-PersonForFace= zPerson-zPK-90', + 'zDetFace-Person Being Key Face-91', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-92', + 'zDetFace-Face Print-93', + 'zDetFacePrint-zPK-94', + 'zDetFace-Face Crop-95', + 'zFaceCrop-zPK-96', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-97', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-98', + 'zPerson-Assoc Face Group Key-99', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-100', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-101', + 'zDetFaceGroup-zPK-102', + 'zPerson-Share Participant= zSharePartic-zPK-103', + 'zDetFace-UUID-104', + 'zFaceCrop-UUID-105', + 'zFaceCrop-Invalid Merge Candidate Person UUID-106', + 'zPerson-Person UUID-107', + 'zPerson-Person URI-108', + 'zDetFaceGroup-UUID-109') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT zDetFace.ZASSETFORFACE AS 'zDetFace-AssetForFace= zAsset-zPK', zDetFace.ZASSETFORTORSO AS 'zDetFace-AssetForTorso= zAsset-zPK', @@ -1934,203 +1890,182 @@ def get_ph15peopledetfacephdapsql(files_found, report_folder, seeker, wrap_text, LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP ORDER BY zDetFace.Z_PK - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[5] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[111] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[5]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[111]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[111]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[12] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[109] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[12]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], - personcontactmatchingdictionary, - row[6], row[7], row[8], row[9], row[10], row[11], - facecropresourcedata_blob, - row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113])) - - counter += 1 - - description = 'Parses data from PhotoData-Photos.sqlite for' \ - ' people - detected faces - face crop data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 17.' - report = ArtifactHtmlReport('Ph15.1-People & Faces NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph15.1-People & Faces NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', - 'zDetFace-AssetForTorso= zAsset-zPK-1', - 'zFaceCrop-Asset Key-2', - 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-3', - 'zDetFacePrint-Data-SeeRawDBData-4', - 'zPerson-Contact Matching Dictionary-5', - 'zPerson-Verified Type-6', - 'zPerson-Display Name-7', - 'zPerson-Full Name-8', - 'zPerson-Cloud Verified Type-9', - 'zFaceCrop-State-10', - 'zFaceCrop-Type-11', - 'zFaceCrop-Resource Data-12', - 'zDetFace-Confirmed Face Crop Generation State-13', - 'zDetFace-Manual-14', - 'zDetFace-Detection Type-15', - 'zPerson-Detection Type-16', - 'zDetFace-VIP Model Type-17', - 'zDetFace-Name Source-18', - 'zDetFace-Cloud Name Source-19', - 'zPerson-Merge Candidate Confidence-20', - 'zPerson-Type-21', - 'zPerson-Gender Type-22', - 'zDetFace-Gender Type-23', - 'zDetFace-Center X-24', - 'zDetFace-Center Y-25', - 'zPerson-Age Type Estimate-26', - 'zDetFace-Age Type Estimate-27', - 'zDetFace-Ethnicity Type-28', - 'zDetFace-Skin Tone Type-29', - 'zDetFace-Hair Type-30', - 'zDetFace-Hair Color Type-31', - 'zDetFace-Head Gear Type-32', - 'zDetFace-Facial Hair Type-33', - 'zDetFace-Has Face Mask-34', - 'zDetFace-Pose Type-35', - 'zDetFace-Face Expression Type-36', - 'zDetFace-Has Smile-37', - 'zDetFace-Smile Type-38', - 'zDetFace-Lip Makeup Type-39', - 'zDetFace-Eyes State-40', - 'zDetFace-Is Left Eye Closed-41', - 'zDetFace-Is Right Eye Closed-42', - 'zDetFace-Gaze Center X-43', - 'zDetFace-Gaze Center Y-44', - 'zDetFace-Face Gaze Type-45', - 'zDetFace-Eye Glasses Type-46', - 'zDetFace-Eye Makeup Type-47', - 'zDetFace-Cluster Sequence Number Key-48', - 'zDetFace-Grouping ID-49', - 'zDetFace-Master ID-50', - 'zDetFace-Quality-51', - 'zDetFace-Quality Measure-52', - 'zDetFace-Source Height-53', - 'zDetFace-Source Width-54', - 'zDetFace-Asset Visible-55', - 'zDetFace-Hidden/Asset Hidden-56', - 'zDetFace-In Trash/Recently Deleted-57', - 'zDetFace-Cloud Local State-58', - 'zDetFace-Training Type-59', - 'zDetFace.Pose Yaw-60', - 'zDetFace-Body Center X-61', - 'zDetFace-Body Center Y-62', - 'zDetFace-Body Height-63', - 'zDetFace-Body Width-64', - 'zDetFace-Roll-65', - 'zDetFace-Size-66', - 'zDetFace-Cluster Sequence Number-67', - 'zDetFace-Blur Score-68', - 'zDetFacePrint-Face Print Version-69', - 'zDetFaceGroup-UUID-70', - 'zDetFaceGroup-Person Builder State-71', - 'zDetFaceGroup-UnNamed Face Count-72', - 'zPerson-Face Count-73', - 'zDetFace-Face Algorithm Version-74', - 'zDetFace-Adjustment Version-75', - 'zPerson-In Person Naming Model-76', - 'zPerson-Key Face Pick Source Key-77', - 'zPerson-Manual Order Key-78', - 'zPerson-Question Type-79', - 'zPerson-Suggested For Client Type-80', - 'zPerson-Merge Target Person-81', - 'zPerson-Cloud Local State-82', - 'zFaceCrop-Cloud Local State-83', - 'zFaceCrop-Cloud Type-84', - 'zPerson-Cloud Delete State-85', - 'zFaceCrop-Cloud Delete State-86', - 'zDetFace-zPK-87', - 'zDetFacePrint-Face Key-88', - 'zPerson-KeyFace=zDetFace-zPK-89', - 'zFaceCrop-Face Key-90', - 'zPerson-zPK=zDetFace-Person-91', - 'zDetFace-PersonForFace= zPerson-zPK-92', - 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-93', - 'zDetFace-PersonForTorso= zPerson-zPK-94', - 'zDetFace-Person Being Key Face-95', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-96', - 'zDetFace-Face Print-97', - 'zDetFacePrint-zPK-98', - 'zDetFace-Face Crop-99', - 'zFaceCrop-zPK-100', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-101', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-102', - 'zPerson-Assoc Face Group Key-103', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-104', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-105', - 'zDetFaceGroup-zPK-106', - 'zPerson-Share Participant= zSharePartic-zPK-107', - 'zDetFace-UUID-108', - 'zFaceCrop-UUID-109', - 'zFaceCrop-Invalid Merge Candidate Person UUID-110', - 'zPerson-Person UUID-111', - 'zPerson-Person URI-112', - 'zDetFaceGroup-UUID-113') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph15.1-People & Faces NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph15.1-People & Faces NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite people - detected faces - face crop data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[5] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[111] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[5]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[111]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[111]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[12] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[109] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[12]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], row[3], row[4], + personcontactmatchingdictionary, + row[6], row[7], row[8], row[9], row[10], row[11], + facecropresourcedata_blob, + row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113])) + + data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', + 'zDetFace-AssetForTorso= zAsset-zPK-1', + 'zFaceCrop-Asset Key-2', + 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-3', + 'zDetFacePrint-Data-SeeRawDBData-4', + 'zPerson-Contact Matching Dictionary-5', + 'zPerson-Verified Type-6', + 'zPerson-Display Name-7', + 'zPerson-Full Name-8', + 'zPerson-Cloud Verified Type-9', + 'zFaceCrop-State-10', + 'zFaceCrop-Type-11', + 'zFaceCrop-Resource Data-12', + 'zDetFace-Confirmed Face Crop Generation State-13', + 'zDetFace-Manual-14', + 'zDetFace-Detection Type-15', + 'zPerson-Detection Type-16', + 'zDetFace-VIP Model Type-17', + 'zDetFace-Name Source-18', + 'zDetFace-Cloud Name Source-19', + 'zPerson-Merge Candidate Confidence-20', + 'zPerson-Type-21', + 'zPerson-Gender Type-22', + 'zDetFace-Gender Type-23', + 'zDetFace-Center X-24', + 'zDetFace-Center Y-25', + 'zPerson-Age Type Estimate-26', + 'zDetFace-Age Type Estimate-27', + 'zDetFace-Ethnicity Type-28', + 'zDetFace-Skin Tone Type-29', + 'zDetFace-Hair Type-30', + 'zDetFace-Hair Color Type-31', + 'zDetFace-Head Gear Type-32', + 'zDetFace-Facial Hair Type-33', + 'zDetFace-Has Face Mask-34', + 'zDetFace-Pose Type-35', + 'zDetFace-Face Expression Type-36', + 'zDetFace-Has Smile-37', + 'zDetFace-Smile Type-38', + 'zDetFace-Lip Makeup Type-39', + 'zDetFace-Eyes State-40', + 'zDetFace-Is Left Eye Closed-41', + 'zDetFace-Is Right Eye Closed-42', + 'zDetFace-Gaze Center X-43', + 'zDetFace-Gaze Center Y-44', + 'zDetFace-Face Gaze Type-45', + 'zDetFace-Eye Glasses Type-46', + 'zDetFace-Eye Makeup Type-47', + 'zDetFace-Cluster Sequence Number Key-48', + 'zDetFace-Grouping ID-49', + 'zDetFace-Master ID-50', + 'zDetFace-Quality-51', + 'zDetFace-Quality Measure-52', + 'zDetFace-Source Height-53', + 'zDetFace-Source Width-54', + 'zDetFace-Asset Visible-55', + 'zDetFace-Hidden/Asset Hidden-56', + 'zDetFace-In Trash/Recently Deleted-57', + 'zDetFace-Cloud Local State-58', + 'zDetFace-Training Type-59', + 'zDetFace.Pose Yaw-60', + 'zDetFace-Body Center X-61', + 'zDetFace-Body Center Y-62', + 'zDetFace-Body Height-63', + 'zDetFace-Body Width-64', + 'zDetFace-Roll-65', + 'zDetFace-Size-66', + 'zDetFace-Cluster Sequence Number-67', + 'zDetFace-Blur Score-68', + 'zDetFacePrint-Face Print Version-69', + 'zDetFaceGroup-UUID-70', + 'zDetFaceGroup-Person Builder State-71', + 'zDetFaceGroup-UnNamed Face Count-72', + 'zPerson-Face Count-73', + 'zDetFace-Face Algorithm Version-74', + 'zDetFace-Adjustment Version-75', + 'zPerson-In Person Naming Model-76', + 'zPerson-Key Face Pick Source Key-77', + 'zPerson-Manual Order Key-78', + 'zPerson-Question Type-79', + 'zPerson-Suggested For Client Type-80', + 'zPerson-Merge Target Person-81', + 'zPerson-Cloud Local State-82', + 'zFaceCrop-Cloud Local State-83', + 'zFaceCrop-Cloud Type-84', + 'zPerson-Cloud Delete State-85', + 'zFaceCrop-Cloud Delete State-86', + 'zDetFace-zPK-87', + 'zDetFacePrint-Face Key-88', + 'zPerson-KeyFace=zDetFace-zPK-89', + 'zFaceCrop-Face Key-90', + 'zPerson-zPK=zDetFace-Person-91', + 'zDetFace-PersonForFace= zPerson-zPK-92', + 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-93', + 'zDetFace-PersonForTorso= zPerson-zPK-94', + 'zDetFace-Person Being Key Face-95', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-96', + 'zDetFace-Face Print-97', + 'zDetFacePrint-zPK-98', + 'zDetFace-Face Crop-99', + 'zFaceCrop-zPK-100', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-101', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-102', + 'zPerson-Assoc Face Group Key-103', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-104', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-105', + 'zDetFaceGroup-zPK-106', + 'zPerson-Share Participant= zSharePartic-zPK-107', + 'zDetFace-UUID-108', + 'zFaceCrop-UUID-109', + 'zFaceCrop-Invalid Merge Candidate Person UUID-110', + 'zPerson-Person UUID-111', + 'zPerson-Person URI-112', + 'zDetFaceGroup-UUID-113') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT zDetFace.ZASSETFORFACE AS 'zDetFace-AssetForFace= zAsset-zPK', zDetFace.ZASSETFORTORSO AS 'zDetFace-AssetForTorso= zAsset-zPK', @@ -2146,7 +2081,7 @@ def get_ph15peopledetfacephdapsql(files_found, report_folder, seeker, wrap_text, WHEN 1 THEN '1-Has_Contact Matching_Dictionary' ELSE 'Unknown-New-Value!: ' || zPerson.ZVERIFIEDTYPE || '' END AS 'zPerson-Verified Type', - zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-iOS18', + zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence', zPerson.ZDISPLAYNAME AS 'zPerson-Display Name', zPerson.ZFULLNAME AS 'zPerson-Full Name', CASE zPerson.ZCLOUDVERIFIEDTYPE @@ -2493,218 +2428,197 @@ def get_ph15peopledetfacephdapsql(files_found, report_folder, seeker, wrap_text, LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP ORDER BY zDetFace.Z_PK - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[5] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[112] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[5]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[112]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[112]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[13] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[110] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[13]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], - personcontactmatchingdictionary, - row[6], row[7], row[8], row[9], row[10], row[11], row[12], - facecropresourcedata_blob, - row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114])) - - counter += 1 - - description = 'Parses data from PhotoData-Photos.sqlite for' \ - ' people - detected faces - face crop data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 18.' - report = ArtifactHtmlReport('Ph15.1-People & Faces NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph15.1-People & Faces NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', - 'zDetFace-AssetForTorso= zAsset-zPK-1', - 'zFaceCrop-Asset Key-2', - 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-3', - 'zDetFacePrint-Data-SeeRawDBData-4', - 'zPerson-Contact Matching Dictionary-5', - 'zPerson-Verified Type-6', - 'zPerson-Is_Me_Confidence-iOS18-7', - 'zPerson-Display Name-8', - 'zPerson-Full Name-9', - 'zPerson-Cloud Verified Type-10', - 'zFaceCrop-State-11', - 'zFaceCrop-Type-12', - 'zFaceCrop-Resource Data-13', - 'zDetFace-Confirmed Face Crop Generation State-14', - 'zDetFace-Manual-15', - 'zDetFace-Detection Type-16', - 'zPerson-Detection Type-17', - 'zDetFace-VIP Model Type-18', - 'zDetFace-Name Source-19', - 'zDetFace-Cloud Name Source-20', - 'zPerson-Merge Candidate Confidence-21', - 'zPerson-Type-22', - 'zPerson-Gender Type-23', - 'zDetFace-Gender Type-24', - 'zDetFace-Center X-25', - 'zDetFace-Center Y-26', - 'zPerson-Age Type Estimate-27', - 'zDetFace-Age Type Estimate-28', - 'zDetFace-Ethnicity Type-29', - 'zDetFace-Skin Tone Type-30', - 'zDetFace-Hair Type-31', - 'zDetFace-Hair Color Type-32', - 'zDetFace-Head Gear Type-33', - 'zDetFace-Facial Hair Type-34', - 'zDetFace-Has Face Mask-35', - 'zDetFace-Pose Type-36', - 'zDetFace-Face Expression Type-37', - 'zDetFace-Has Smile-38', - 'zDetFace-Smile Type-39', - 'zDetFace-Lip Makeup Type-40', - 'zDetFace-Eyes State-41', - 'zDetFace-Is Left Eye Closed-42', - 'zDetFace-Is Right Eye Closed-43', - 'zDetFace-Gaze Center X-44', - 'zDetFace-Gaze Center Y-45', - 'zDetFace-Face Gaze Type-46', - 'zDetFace-Eye Glasses Type-47', - 'zDetFace-Eye Makeup Type-48', - 'zDetFace-Cluster Sequence Number Key-49', - 'zDetFace-Grouping ID-50', - 'zDetFace-Master ID-51', - 'zDetFace-Quality-52', - 'zDetFace-Quality Measure-53', - 'zDetFace-Source Height-54', - 'zDetFace-Source Width-55', - 'zDetFace-Asset Visible-56', - 'zDetFace-Hidden/Asset Hidden-57', - 'zDetFace-In Trash/Recently Deleted-58', - 'zDetFace-Cloud Local State-59', - 'zDetFace-Training Type-60', - 'zDetFace.Pose Yaw-61', - 'zDetFace-Body Center X-62', - 'zDetFace-Body Center Y-63', - 'zDetFace-Body Height-64', - 'zDetFace-Body Width-65', - 'zDetFace-Roll-66', - 'zDetFace-Size-67', - 'zDetFace-Cluster Sequence Number-68', - 'zDetFace-Blur Score-69', - 'zDetFacePrint-Face Print Version-70', - 'zDetFaceGroup-UUID-71', - 'zDetFaceGroup-Person Builder State-72', - 'zDetFaceGroup-UnNamed Face Count-73', - 'zPerson-Face Count-74', - 'zDetFace-Face Algorithm Version-75', - 'zDetFace-Adjustment Version-76', - 'zPerson-In Person Naming Model-77', - 'zPerson-Key Face Pick Source Key-78', - 'zPerson-Manual Order Key-79', - 'zPerson-Question Type-80', - 'zPerson-Suggested For Client Type-81', - 'zPerson-Merge Target Person-82', - 'zPerson-Cloud Local State-83', - 'zFaceCrop-Cloud Local State-84', - 'zFaceCrop-Cloud Type-85', - 'zPerson-Cloud Delete State-86', - 'zFaceCrop-Cloud Delete State-87', - 'zDetFace-zPK-88', - 'zDetFacePrint-Face Key-89', - 'zPerson-KeyFace=zDetFace-zPK-90', - 'zFaceCrop-Face Key-91', - 'zPerson-zPK=zDetFace-Person-92', - 'zDetFace-PersonForFace= zPerson-zPK-93', - 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-94', - 'zDetFace-PersonForTorso= zPerson-zPK-95', - 'zDetFace-Person Being Key Face-96', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-97', - 'zDetFace-Face Print-98', - 'zDetFacePrint-zPK-99', - 'zDetFace-Face Crop-100', - 'zFaceCrop-zPK-101', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-102', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-103', - 'zPerson-Assoc Face Group Key-104', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-105', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-106', - 'zDetFaceGroup-zPK-107', - 'zPerson-Share Participant= zSharePartic-zPK-108', - 'zDetFace-UUID-109', - 'zFaceCrop-UUID-110', - 'zFaceCrop-Invalid Merge Candidate Person UUID-111', - 'zPerson-Person UUID-112', - 'zPerson-Person URI-113', - 'zDetFaceGroup-UUID-114') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph15.1-People & Faces NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph15.1-People & Faces NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite people - detected faces - face crop data') - - db.close() - return - - -def get_ph15peopledetfacesyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset): - - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[5] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[112] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[5]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[112]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[112]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[13] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[110] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[13]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], row[3], row[4], + personcontactmatchingdictionary, + row[6], row[7], row[8], row[9], row[10], row[11], row[12], + facecropresourcedata_blob, + row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114])) + + data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', + 'zDetFace-AssetForTorso= zAsset-zPK-1', + 'zFaceCrop-Asset Key-2', + 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-3', + 'zDetFacePrint-Data-SeeRawDBData-4', + 'zPerson-Contact Matching Dictionary-5', + 'zPerson-Verified Type-6', + 'zPerson-Is_Me_Confidence-7', + 'zPerson-Display Name-8', + 'zPerson-Full Name-9', + 'zPerson-Cloud Verified Type-10', + 'zFaceCrop-State-11', + 'zFaceCrop-Type-12', + 'zFaceCrop-Resource Data-13', + 'zDetFace-Confirmed Face Crop Generation State-14', + 'zDetFace-Manual-15', + 'zDetFace-Detection Type-16', + 'zPerson-Detection Type-17', + 'zDetFace-VIP Model Type-18', + 'zDetFace-Name Source-19', + 'zDetFace-Cloud Name Source-20', + 'zPerson-Merge Candidate Confidence-21', + 'zPerson-Type-22', + 'zPerson-Gender Type-23', + 'zDetFace-Gender Type-24', + 'zDetFace-Center X-25', + 'zDetFace-Center Y-26', + 'zPerson-Age Type Estimate-27', + 'zDetFace-Age Type Estimate-28', + 'zDetFace-Ethnicity Type-29', + 'zDetFace-Skin Tone Type-30', + 'zDetFace-Hair Type-31', + 'zDetFace-Hair Color Type-32', + 'zDetFace-Head Gear Type-33', + 'zDetFace-Facial Hair Type-34', + 'zDetFace-Has Face Mask-35', + 'zDetFace-Pose Type-36', + 'zDetFace-Face Expression Type-37', + 'zDetFace-Has Smile-38', + 'zDetFace-Smile Type-39', + 'zDetFace-Lip Makeup Type-40', + 'zDetFace-Eyes State-41', + 'zDetFace-Is Left Eye Closed-42', + 'zDetFace-Is Right Eye Closed-43', + 'zDetFace-Gaze Center X-44', + 'zDetFace-Gaze Center Y-45', + 'zDetFace-Face Gaze Type-46', + 'zDetFace-Eye Glasses Type-47', + 'zDetFace-Eye Makeup Type-48', + 'zDetFace-Cluster Sequence Number Key-49', + 'zDetFace-Grouping ID-50', + 'zDetFace-Master ID-51', + 'zDetFace-Quality-52', + 'zDetFace-Quality Measure-53', + 'zDetFace-Source Height-54', + 'zDetFace-Source Width-55', + 'zDetFace-Asset Visible-56', + 'zDetFace-Hidden/Asset Hidden-57', + 'zDetFace-In Trash/Recently Deleted-58', + 'zDetFace-Cloud Local State-59', + 'zDetFace-Training Type-60', + 'zDetFace.Pose Yaw-61', + 'zDetFace-Body Center X-62', + 'zDetFace-Body Center Y-63', + 'zDetFace-Body Height-64', + 'zDetFace-Body Width-65', + 'zDetFace-Roll-66', + 'zDetFace-Size-67', + 'zDetFace-Cluster Sequence Number-68', + 'zDetFace-Blur Score-69', + 'zDetFacePrint-Face Print Version-70', + 'zDetFaceGroup-UUID-71', + 'zDetFaceGroup-Person Builder State-72', + 'zDetFaceGroup-UnNamed Face Count-73', + 'zPerson-Face Count-74', + 'zDetFace-Face Algorithm Version-75', + 'zDetFace-Adjustment Version-76', + 'zPerson-In Person Naming Model-77', + 'zPerson-Key Face Pick Source Key-78', + 'zPerson-Manual Order Key-79', + 'zPerson-Question Type-80', + 'zPerson-Suggested For Client Type-81', + 'zPerson-Merge Target Person-82', + 'zPerson-Cloud Local State-83', + 'zFaceCrop-Cloud Local State-84', + 'zFaceCrop-Cloud Type-85', + 'zPerson-Cloud Delete State-86', + 'zFaceCrop-Cloud Delete State-87', + 'zDetFace-zPK-88', + 'zDetFacePrint-Face Key-89', + 'zPerson-KeyFace=zDetFace-zPK-90', + 'zFaceCrop-Face Key-91', + 'zPerson-zPK=zDetFace-Person-92', + 'zDetFace-PersonForFace= zPerson-zPK-93', + 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-94', + 'zDetFace-PersonForTorso= zPerson-zPK-95', + 'zDetFace-Person Being Key Face-96', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-97', + 'zDetFace-Face Print-98', + 'zDetFacePrint-zPK-99', + 'zDetFace-Face Crop-100', + 'zFaceCrop-zPK-101', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-102', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-103', + 'zPerson-Assoc Face Group Key-104', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-105', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-106', + 'zDetFaceGroup-zPK-107', + 'zPerson-Share Participant= zSharePartic-zPK-108', + 'zDetFace-UUID-109', + 'zFaceCrop-UUID-110', + 'zFaceCrop-Invalid Merge Candidate Person UUID-111', + 'zPerson-Person UUID-112', + 'zPerson-Person URI-113', + 'zDetFaceGroup-UUID-114') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + +@artifact_processor +def Ph15_2PeopleFacesNADSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) + + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("13.7"): - logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite people - detected faces - face crop data iOS " + iosversion) + logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT zDetFace.ZASSET AS 'zDetFace-AssetForFace= zAsset-zPK', zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key', @@ -2972,179 +2886,158 @@ def get_ph15peopledetfacesyndpl(files_found, report_folder, seeker, wrap_text, t LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP ORDER BY zDetFace.Z_PK - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[3] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[89] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[3]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[89]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[89]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[10] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[87] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[10]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], - personcontactmatchingdictionary, - row[4], row[5], row[6], row[7], row[8], row[9], - facecropresourcedata_blob, - row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91])) - - counter += 1 - - description = 'Parses data from Syndication.photoslibrary-database-Photos.sqlite for' \ - ' people - detected faces - face crop data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 14.' - report = ArtifactHtmlReport('Ph15.2-People & Faces NAD-SyndPL') - report.start_artifact_report(report_folder, 'Ph15.2-People & Faces NAD-SyndPL', description) - report.add_script() - data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', - 'zFaceCrop-Asset Key-1', - 'zDetFacePrint-Data-SeeRawDBData-2', - 'zPerson-Contact Matching Dictionary-3', - 'zPerson-Verified Type-4', - 'zPerson-Display Name-5', - 'zPerson-Full Name-6', - 'zPerson-Cloud Verified Type-7', - 'zFaceCrop-State-8', - 'zFaceCrop-Type-9', - 'zFaceCrop-Resource Data-10', - 'zDetFace-Confirmed Face Crop Generation State-11', - 'zDetFace-Manual-12', - 'zDetFace-VIP Model Type-13', - 'zDetFace-Name Source-14', - 'zDetFace-Cloud Name Source-15', - 'zPerson-Type-16', - 'zPerson-Gender Type-17', - 'zDetFace-Gender Type-18', - 'zDetFace-Center X-19', - 'zDetFace-Center Y-20', - 'zPerson-Age Type Estimate-21', - 'zDetFace-Age Type Estimate-22', - 'zDetFace-Hair Color Type-23', - 'zDetFace-Facial Hair Type-24', - 'zDetFace-Has Smile-25', - 'zDetFace-Smile Type-26', - 'zDetFace-Lip Makeup Type-27', - 'zDetFace-Eyes State-28', - 'zDetFace-Is Left Eye Closed-29', - 'zDetFace-Is Right Eye Closed-30', - 'zDetFace-Eye Glasses Type-31', - 'zDetFace-Eye Makeup Type-32', - 'zDetFace-Cluster Sequence Number Key-33', - 'zDetFace-Grouping ID-34', - 'zDetFace-Master ID-35', - 'zDetFace-Quality-36', - 'zDetFace-Quality Measure-37', - 'zDetFace-Source Height-38', - 'zDetFace-Source Width-39', - 'zDetFace-Asset Visible-40', - 'zDetFace-Hidden/Asset Hidden-41', - 'zDetFace-In Trash/Recently Deleted-42', - 'zDetFace-Cloud Local State-43', - 'zDetFace-Training Type-44', - 'zDetFace.Pose Yaw-45', - 'zDetFace-Roll-46', - 'zDetFace-Size-47', - 'zDetFace-Cluster Sequence Number-48', - 'zDetFace-Blur Score-49', - 'zDetFacePrint-Face Print Version-50', - 'zDetFaceGroup-UUID-51', - 'zDetFaceGroup-Person Builder State-52', - 'zDetFaceGroup-UnNamed Face Count-53', - 'zPerson-Face Count-54', - 'zDetFace-Face Algorithm Version-55', - 'zDetFace-Adjustment Version-56', - 'zPerson-In Person Naming Model-57', - 'zPerson-Key Face Pick Source Key-58', - 'zPerson-Manual Order Key-59', - 'zPerson-Question Type-60', - 'zPerson-Suggested For Client Type-61', - 'zPerson-Merge Target Person-62', - 'zPerson-Cloud Local State-63', - 'zFaceCrop-Cloud Local State-64', - 'zFaceCrop-Cloud Type-65', - 'zPerson-Cloud Delete State-66', - 'zFaceCrop-Cloud Delete State-67', - 'zDetFace-zPK-68', - 'zDetFacePrint-Face Key-69', - 'zPerson-KeyFace=zDetFace-zPK-70', - 'zFaceCrop-Face Key-71', - 'zPerson-zPK=zDetFace-Person-72', - 'zDetFace-PersonForFace= zPerson-zPK-73', - 'zDetFace-Person Being Key Face-74', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-75', - 'zDetFace-Face Print-76', - 'zDetFacePrint-zPK-77', - 'zDetFace-Face Crop-78', - 'zFaceCrop-zPK-79', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-80', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-81', - 'zPerson-Assoc Face Group Key-82', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-83', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-84', - 'zDetFaceGroup-zPK-85', - 'zDetFace-UUID-86', - 'zFaceCrop-UUID-87', - 'zFaceCrop-Invalid Merge Candidate Person UUID-88', - 'zPerson-Person UUID-89', - 'zPerson-Person URI-90', - 'zDetFaceGroup-UUID-91') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph15.2-People & Faces NAD-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph15.2-People & Faces NAD-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people - detected faces - face crop data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[3] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[89] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[3]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[89]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[89]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[10] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[87] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[10]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], + personcontactmatchingdictionary, + row[4], row[5], row[6], row[7], row[8], row[9], + facecropresourcedata_blob, + row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91])) + + data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', + 'zFaceCrop-Asset Key-1', + 'zDetFacePrint-Data-SeeRawDBData-2', + 'zPerson-Contact Matching Dictionary-3', + 'zPerson-Verified Type-4', + 'zPerson-Display Name-5', + 'zPerson-Full Name-6', + 'zPerson-Cloud Verified Type-7', + 'zFaceCrop-State-8', + 'zFaceCrop-Type-9', + 'zFaceCrop-Resource Data-10', + 'zDetFace-Confirmed Face Crop Generation State-11', + 'zDetFace-Manual-12', + 'zDetFace-VIP Model Type-13', + 'zDetFace-Name Source-14', + 'zDetFace-Cloud Name Source-15', + 'zPerson-Type-16', + 'zPerson-Gender Type-17', + 'zDetFace-Gender Type-18', + 'zDetFace-Center X-19', + 'zDetFace-Center Y-20', + 'zPerson-Age Type Estimate-21', + 'zDetFace-Age Type Estimate-22', + 'zDetFace-Hair Color Type-23', + 'zDetFace-Facial Hair Type-24', + 'zDetFace-Has Smile-25', + 'zDetFace-Smile Type-26', + 'zDetFace-Lip Makeup Type-27', + 'zDetFace-Eyes State-28', + 'zDetFace-Is Left Eye Closed-29', + 'zDetFace-Is Right Eye Closed-30', + 'zDetFace-Eye Glasses Type-31', + 'zDetFace-Eye Makeup Type-32', + 'zDetFace-Cluster Sequence Number Key-33', + 'zDetFace-Grouping ID-34', + 'zDetFace-Master ID-35', + 'zDetFace-Quality-36', + 'zDetFace-Quality Measure-37', + 'zDetFace-Source Height-38', + 'zDetFace-Source Width-39', + 'zDetFace-Asset Visible-40', + 'zDetFace-Hidden/Asset Hidden-41', + 'zDetFace-In Trash/Recently Deleted-42', + 'zDetFace-Cloud Local State-43', + 'zDetFace-Training Type-44', + 'zDetFace.Pose Yaw-45', + 'zDetFace-Roll-46', + 'zDetFace-Size-47', + 'zDetFace-Cluster Sequence Number-48', + 'zDetFace-Blur Score-49', + 'zDetFacePrint-Face Print Version-50', + 'zDetFaceGroup-UUID-51', + 'zDetFaceGroup-Person Builder State-52', + 'zDetFaceGroup-UnNamed Face Count-53', + 'zPerson-Face Count-54', + 'zDetFace-Face Algorithm Version-55', + 'zDetFace-Adjustment Version-56', + 'zPerson-In Person Naming Model-57', + 'zPerson-Key Face Pick Source Key-58', + 'zPerson-Manual Order Key-59', + 'zPerson-Question Type-60', + 'zPerson-Suggested For Client Type-61', + 'zPerson-Merge Target Person-62', + 'zPerson-Cloud Local State-63', + 'zFaceCrop-Cloud Local State-64', + 'zFaceCrop-Cloud Type-65', + 'zPerson-Cloud Delete State-66', + 'zFaceCrop-Cloud Delete State-67', + 'zDetFace-zPK-68', + 'zDetFacePrint-Face Key-69', + 'zPerson-KeyFace=zDetFace-zPK-70', + 'zFaceCrop-Face Key-71', + 'zPerson-zPK=zDetFace-Person-72', + 'zDetFace-PersonForFace= zPerson-zPK-73', + 'zDetFace-Person Being Key Face-74', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-75', + 'zDetFace-Face Print-76', + 'zDetFacePrint-zPK-77', + 'zDetFace-Face Crop-78', + 'zFaceCrop-zPK-79', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-80', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-81', + 'zPerson-Assoc Face Group Key-82', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-83', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-84', + 'zDetFaceGroup-zPK-85', + 'zDetFace-UUID-86', + 'zFaceCrop-UUID-87', + 'zFaceCrop-Invalid Merge Candidate Person UUID-88', + 'zPerson-Person UUID-89', + 'zPerson-Person URI-90', + 'zDetFaceGroup-UUID-91') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT zDetFace.ZASSET AS 'zDetFace-AssetForFace= zAsset-zPK', zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key', @@ -3500,196 +3393,175 @@ def get_ph15peopledetfacesyndpl(files_found, report_folder, seeker, wrap_text, t LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP ORDER BY zDetFace.Z_PK - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[3] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[105] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[3]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[105]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[105]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[10] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[103] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[10]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], - personcontactmatchingdictionary, - row[4], row[5], row[6], row[7], row[8], row[9], - facecropresourcedata_blob, - row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107])) - - counter += 1 - - description = 'Parses data from Syndication.photoslibrary-database-Photos.sqlite for' \ - ' people - detected faces - face crop data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 15.' - report = ArtifactHtmlReport('Ph15.2-People & Faces NAD-SyndPL') - report.start_artifact_report(report_folder, 'Ph15.2-People & Faces NAD-SyndPL', description) - report.add_script() - data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', - 'zFaceCrop-Asset Key-1', - 'zDetFacePrint-Data-SeeRawDBData-2', - 'zPerson-Contact Matching Dictionary-3', - 'zPerson-Verified Type-4', - 'zPerson-Display Name-5', - 'zPerson-Full Name-6', - 'zPerson-Cloud Verified Type-7', - 'zFaceCrop-State-8', - 'zFaceCrop-Type-9', - 'zFaceCrop-Resource Data-10', - 'zDetFace-Confirmed Face Crop Generation State-11', - 'zDetFace-Manual-12', - 'zDetFace-Detection Type-13', - 'zPerson-Detection Type-14', - 'zDetFace-VIP Model Type-15', - 'zDetFace-Name Source-16', - 'zDetFace-Cloud Name Source-17', - 'zPerson-Type-18', - 'zPerson-Gender Type-19', - 'zDetFace-Gender Type-20', - 'zDetFace-Center X-21', - 'zDetFace-Center Y-22', - 'zPerson-Age Type Estimate-23', - 'zDetFace-Age Type Estimate-24', - 'zDetFace-Ethnicity Type-25', - 'zDetFace-Skin Tone Type-26', - 'zDetFace-Hair Type-27', - 'zDetFace-Hair Color Type-28', - 'zDetFace-Head Gear Type-29', - 'zDetFace-Facial Hair Type-30', - 'zDetFace-Has Face Mask-31', - 'zDetFace-Pose Type-32', - 'zDetFace-Face Expression Type-33', - 'zDetFace-Has Smile-34', - 'zDetFace-Smile Type-35', - 'zDetFace-Lip Makeup Type-36', - 'zDetFace-Eyes State-37', - 'zDetFace-Is Left Eye Closed-38', - 'zDetFace-Is Right Eye Closed-39', - 'zDetFace-Gaze Center X-40', - 'zDetFace-Gaze Center Y-41', - 'zDetFace-Face Gaze Type-42', - 'zDetFace-Eye Glasses Type-43', - 'zDetFace-Eye Makeup Type-44', - 'zDetFace-Cluster Squence Number Key-45', - 'zDetFace-Grouping ID-46', - 'zDetFace-Master ID-47', - 'zDetFace-Quality-48', - 'zDetFace-Quality Measure-49', - 'zDetFace-Source Height-50', - 'zDetFace-Source Width-51', - 'zDetFace-Asset Visible-52', - 'zDetFace-Hidden/Asset Hidden-53', - 'zDetFace-In Trash/Recently Deleted-54', - 'zDetFace-Cloud Local State-55', - 'zDetFace-Training Type-56', - 'zDetFace.Pose Yaw-57', - 'zDetFace-Body Center X-58', - 'zDetFace-Body Center Y-59', - 'zDetFace-Body Height-60', - 'zDetFace-Body Width-61', - 'zDetFace-Roll-62', - 'zDetFace-Size-63', - 'zDetFace-Cluster Squence Number-64', - 'zDetFace-Blur Score-65', - 'zDetFacePrint-Face Print Version-66', - 'zDetFaceGroup-UUID-67', - 'zDetFaceGroup-Person Builder State-68', - 'zDetFaceGroup-UnNamed Face Count-69', - 'zPerson-Face Count-70', - 'zDetFace-Face Algorithm Version-71', - 'zDetFace-Adjustment Version-72', - 'zPerson-In Person Naming Model-73', - 'zPerson-Key Face Pick Source Key-74', - 'zPerson-Manual Order Key-75', - 'zPerson-Question Type-76', - 'zPerson-Suggested For Client Type-77', - 'zPerson-Merge Target Person-78', - 'zPerson-Cloud Local State-79', - 'zFaceCrop-Cloud Local State-80', - 'zFaceCrop-Cloud Type-81', - 'zPerson-Cloud Delete State-82', - 'zFaceCrop-Cloud Delete State-83', - 'zDetFace-zPK-84', - 'zDetFacePrint-Face Key-85', - 'zPerson-KeyFace=zDetFace-zPK-86', - 'zFaceCrop-Face Key-87', - 'zPerson-zPK=zDetFace-Person-88', - 'zDetFace-PersonForFace= zPerson-zPK-89', - 'zDetFace-Person Being Key Face-90', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-91', - 'zDetFace-Face Print-92', - 'zDetFacePrint-zPK-93', - 'zDetFace-Face Crop-94', - 'zFaceCrop-zPK-95', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-96', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-97', - 'zPerson-Assoc Face Group Key-98', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-99', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-100', - 'zDetFaceGroup-zPK-101', - 'zDetFace-UUID-102', - 'zFaceCrop-UUID-103', - 'zFaceCrop-Invalid Merge Canidate Person UUID-104', - 'zPerson-Person UUID-105', - 'zPerson-Person URI-106', - 'zDetFaceGroup-UUID-107') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph15.2-People & Faces NAD-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph15.2-People & Faces NAD-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people - detected faces - face crop data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[3] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[105] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[3]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[105]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[105]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[10] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[103] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[10]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], + personcontactmatchingdictionary, + row[4], row[5], row[6], row[7], row[8], row[9], + facecropresourcedata_blob, + row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107])) + + data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', + 'zFaceCrop-Asset Key-1', + 'zDetFacePrint-Data-SeeRawDBData-2', + 'zPerson-Contact Matching Dictionary-3', + 'zPerson-Verified Type-4', + 'zPerson-Display Name-5', + 'zPerson-Full Name-6', + 'zPerson-Cloud Verified Type-7', + 'zFaceCrop-State-8', + 'zFaceCrop-Type-9', + 'zFaceCrop-Resource Data-10', + 'zDetFace-Confirmed Face Crop Generation State-11', + 'zDetFace-Manual-12', + 'zDetFace-Detection Type-13', + 'zPerson-Detection Type-14', + 'zDetFace-VIP Model Type-15', + 'zDetFace-Name Source-16', + 'zDetFace-Cloud Name Source-17', + 'zPerson-Type-18', + 'zPerson-Gender Type-19', + 'zDetFace-Gender Type-20', + 'zDetFace-Center X-21', + 'zDetFace-Center Y-22', + 'zPerson-Age Type Estimate-23', + 'zDetFace-Age Type Estimate-24', + 'zDetFace-Ethnicity Type-25', + 'zDetFace-Skin Tone Type-26', + 'zDetFace-Hair Type-27', + 'zDetFace-Hair Color Type-28', + 'zDetFace-Head Gear Type-29', + 'zDetFace-Facial Hair Type-30', + 'zDetFace-Has Face Mask-31', + 'zDetFace-Pose Type-32', + 'zDetFace-Face Expression Type-33', + 'zDetFace-Has Smile-34', + 'zDetFace-Smile Type-35', + 'zDetFace-Lip Makeup Type-36', + 'zDetFace-Eyes State-37', + 'zDetFace-Is Left Eye Closed-38', + 'zDetFace-Is Right Eye Closed-39', + 'zDetFace-Gaze Center X-40', + 'zDetFace-Gaze Center Y-41', + 'zDetFace-Face Gaze Type-42', + 'zDetFace-Eye Glasses Type-43', + 'zDetFace-Eye Makeup Type-44', + 'zDetFace-Cluster Squence Number Key-45', + 'zDetFace-Grouping ID-46', + 'zDetFace-Master ID-47', + 'zDetFace-Quality-48', + 'zDetFace-Quality Measure-49', + 'zDetFace-Source Height-50', + 'zDetFace-Source Width-51', + 'zDetFace-Asset Visible-52', + 'zDetFace-Hidden/Asset Hidden-53', + 'zDetFace-In Trash/Recently Deleted-54', + 'zDetFace-Cloud Local State-55', + 'zDetFace-Training Type-56', + 'zDetFace.Pose Yaw-57', + 'zDetFace-Body Center X-58', + 'zDetFace-Body Center Y-59', + 'zDetFace-Body Height-60', + 'zDetFace-Body Width-61', + 'zDetFace-Roll-62', + 'zDetFace-Size-63', + 'zDetFace-Cluster Squence Number-64', + 'zDetFace-Blur Score-65', + 'zDetFacePrint-Face Print Version-66', + 'zDetFaceGroup-UUID-67', + 'zDetFaceGroup-Person Builder State-68', + 'zDetFaceGroup-UnNamed Face Count-69', + 'zPerson-Face Count-70', + 'zDetFace-Face Algorithm Version-71', + 'zDetFace-Adjustment Version-72', + 'zPerson-In Person Naming Model-73', + 'zPerson-Key Face Pick Source Key-74', + 'zPerson-Manual Order Key-75', + 'zPerson-Question Type-76', + 'zPerson-Suggested For Client Type-77', + 'zPerson-Merge Target Person-78', + 'zPerson-Cloud Local State-79', + 'zFaceCrop-Cloud Local State-80', + 'zFaceCrop-Cloud Type-81', + 'zPerson-Cloud Delete State-82', + 'zFaceCrop-Cloud Delete State-83', + 'zDetFace-zPK-84', + 'zDetFacePrint-Face Key-85', + 'zPerson-KeyFace=zDetFace-zPK-86', + 'zFaceCrop-Face Key-87', + 'zPerson-zPK=zDetFace-Person-88', + 'zDetFace-PersonForFace= zPerson-zPK-89', + 'zDetFace-Person Being Key Face-90', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-91', + 'zDetFace-Face Print-92', + 'zDetFacePrint-zPK-93', + 'zDetFace-Face Crop-94', + 'zFaceCrop-zPK-95', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-96', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-97', + 'zPerson-Assoc Face Group Key-98', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-99', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-100', + 'zDetFaceGroup-zPK-101', + 'zDetFace-UUID-102', + 'zFaceCrop-UUID-103', + 'zFaceCrop-Invalid Merge Canidate Person UUID-104', + 'zPerson-Person UUID-105', + 'zPerson-Person URI-106', + 'zDetFaceGroup-UUID-107') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT zDetFace.ZASSET AS 'zDetFace-AssetForFace= zAsset-zPK', zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key', @@ -4047,199 +3919,178 @@ def get_ph15peopledetfacesyndpl(files_found, report_folder, seeker, wrap_text, t LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP ORDER BY zDetFace.Z_PK - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[3] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[107] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[3]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[107]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[107]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[10] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[105] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[10]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], - personcontactmatchingdictionary, - row[4], row[5], row[6], row[7], row[8], row[9], - facecropresourcedata_blob, - row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109])) - - counter += 1 - - description = 'Parses data from Syndication.photoslibrary-database-Photos.sqlite for' \ - ' people - detected faces - face crop data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 16.' - report = ArtifactHtmlReport('Ph15.2-People & Faces NAD-SyndPL') - report.start_artifact_report(report_folder, 'Ph15.2-People & Faces NAD-SyndPL', description) - report.add_script() - data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', - 'zFaceCrop-Asset Key-1', - 'zDetFacePrint-Data-SeeRawDBData-2', - 'zPerson-Contact Matching Dictionary-3', - 'zPerson-Verified Type-4', - 'zPerson-Display Name-5', - 'zPerson-Full Name-6', - 'zPerson-Cloud Verified Type-7', - 'zFaceCrop-State-8', - 'zFaceCrop-Type-9', - 'zFaceCrop-Resource Data-10', - 'zDetFace-Confirmed Face Crop Generation State-11', - 'zDetFace-Manual-12', - 'zDetFace-Detection Type-13', - 'zPerson-Detection Type-14', - 'zDetFace-VIP Model Type-15', - 'zDetFace-Name Source-16', - 'zDetFace-Cloud Name Source-17', - 'zPerson-Merge Candidate Confidence-18', - 'zPerson-Type-19', - 'zPerson-Gender Type-20', - 'zDetFace-Gender Type-21', - 'zDetFace-Center X-22', - 'zDetFace-Center Y-23', - 'zPerson-Age Type Estimate-24', - 'zDetFace-Age Type Estimate-25', - 'zDetFace-Ethnicity Type-26', - 'zDetFace-Skin Tone Type-27', - 'zDetFace-Hair Type-28', - 'zDetFace-Hair Color Type-29', - 'zDetFace-Head Gear Type-30', - 'zDetFace-Facial Hair Type-31', - 'zDetFace-Has Face Mask-32', - 'zDetFace-Pose Type-33', - 'zDetFace-Face Expression Type-34', - 'zDetFace-Has Smile-35', - 'zDetFace-Smile Type-36', - 'zDetFace-Lip Makeup Type-37', - 'zDetFace-Eyes State-38', - 'zDetFace-Is Left Eye Closed-39', - 'zDetFace-Is Right Eye Closed-40', - 'zDetFace-Gaze Center X-41', - 'zDetFace-Gaze Center Y-42', - 'zDetFace-Face Gaze Type-43', - 'zDetFace-Eye Glasses Type-44', - 'zDetFace-Eye Makeup Type-45', - 'zDetFace-Cluster Squence Number Key-46', - 'zDetFace-Grouping ID-47', - 'zDetFace-Master ID-48', - 'zDetFace-Quality-49', - 'zDetFace-Quality Measure-50', - 'zDetFace-Source Height-51', - 'zDetFace-Source Width-52', - 'zDetFace-Asset Visible-53', - 'zDetFace-Hidden/Asset Hidden-54', - 'zDetFace-In Trash/Recently Deleted-55', - 'zDetFace-Cloud Local State-56', - 'zDetFace-Training Type-57', - 'zDetFace.Pose Yaw-58', - 'zDetFace-Body Center X-59', - 'zDetFace-Body Center Y-60', - 'zDetFace-Body Height-61', - 'zDetFace-Body Width-62', - 'zDetFace-Roll-63', - 'zDetFace-Size-64', - 'zDetFace-Cluster Squence Number-65', - 'zDetFace-Blur Score-66', - 'zDetFacePrint-Face Print Version-67', - 'zDetFaceGroup-UUID-68', - 'zDetFaceGroup-Person Builder State-69', - 'zDetFaceGroup-UnNamed Face Count-70', - 'zPerson-Face Count-71', - 'zDetFace-Face Algorithm Version-72', - 'zDetFace-Adjustment Version-73', - 'zPerson-In Person Naming Model-74', - 'zPerson-Key Face Pick Source Key-75', - 'zPerson-Manual Order Key-76', - 'zPerson-Question Type-77', - 'zPerson-Suggested For Client Type-78', - 'zPerson-Merge Target Person-79', - 'zPerson-Cloud Local State-80', - 'zFaceCrop-Cloud Local State-81', - 'zFaceCrop-Cloud Type-82', - 'zPerson-Cloud Delete State-83', - 'zFaceCrop-Cloud Delete State-84', - 'zDetFace-zPK-85', - 'zDetFacePrint-Face Key-86', - 'zPerson-KeyFace=zDetFace-zPK-87', - 'zFaceCrop-Face Key-88', - 'zPerson-zPK=zDetFace-Person-89', - 'zDetFace-PersonForFace= zPerson-zPK-90', - 'zDetFace-Person Being Key Face-91', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-92', - 'zDetFace-Face Print-93', - 'zDetFacePrint-zPK-94', - 'zDetFace-Face Crop-95', - 'zFaceCrop-zPK-96', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-97', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-98', - 'zPerson-Assoc Face Group Key-99', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-100', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-101', - 'zDetFaceGroup-zPK-102', - 'zPerson-Share Participant= zSharePartic-zPK-103', - 'zDetFace-UUID-104', - 'zFaceCrop-UUID-105', - 'zFaceCrop-Invalid Merge Canidate Person UUID-106', - 'zPerson-Person UUID-107', - 'zPerson-Person URI-108', - 'zDetFaceGroup-UUID-109') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph15.2-People & Faces NAD-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph15.2-People & Faces NAD-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people - detected faces - face crop data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[3] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[107] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[3]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[107]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[107]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[10] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[105] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[10]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], + personcontactmatchingdictionary, + row[4], row[5], row[6], row[7], row[8], row[9], + facecropresourcedata_blob, + row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109])) + + data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', + 'zFaceCrop-Asset Key-1', + 'zDetFacePrint-Data-SeeRawDBData-2', + 'zPerson-Contact Matching Dictionary-3', + 'zPerson-Verified Type-4', + 'zPerson-Display Name-5', + 'zPerson-Full Name-6', + 'zPerson-Cloud Verified Type-7', + 'zFaceCrop-State-8', + 'zFaceCrop-Type-9', + 'zFaceCrop-Resource Data-10', + 'zDetFace-Confirmed Face Crop Generation State-11', + 'zDetFace-Manual-12', + 'zDetFace-Detection Type-13', + 'zPerson-Detection Type-14', + 'zDetFace-VIP Model Type-15', + 'zDetFace-Name Source-16', + 'zDetFace-Cloud Name Source-17', + 'zPerson-Merge Candidate Confidence-18', + 'zPerson-Type-19', + 'zPerson-Gender Type-20', + 'zDetFace-Gender Type-21', + 'zDetFace-Center X-22', + 'zDetFace-Center Y-23', + 'zPerson-Age Type Estimate-24', + 'zDetFace-Age Type Estimate-25', + 'zDetFace-Ethnicity Type-26', + 'zDetFace-Skin Tone Type-27', + 'zDetFace-Hair Type-28', + 'zDetFace-Hair Color Type-29', + 'zDetFace-Head Gear Type-30', + 'zDetFace-Facial Hair Type-31', + 'zDetFace-Has Face Mask-32', + 'zDetFace-Pose Type-33', + 'zDetFace-Face Expression Type-34', + 'zDetFace-Has Smile-35', + 'zDetFace-Smile Type-36', + 'zDetFace-Lip Makeup Type-37', + 'zDetFace-Eyes State-38', + 'zDetFace-Is Left Eye Closed-39', + 'zDetFace-Is Right Eye Closed-40', + 'zDetFace-Gaze Center X-41', + 'zDetFace-Gaze Center Y-42', + 'zDetFace-Face Gaze Type-43', + 'zDetFace-Eye Glasses Type-44', + 'zDetFace-Eye Makeup Type-45', + 'zDetFace-Cluster Squence Number Key-46', + 'zDetFace-Grouping ID-47', + 'zDetFace-Master ID-48', + 'zDetFace-Quality-49', + 'zDetFace-Quality Measure-50', + 'zDetFace-Source Height-51', + 'zDetFace-Source Width-52', + 'zDetFace-Asset Visible-53', + 'zDetFace-Hidden/Asset Hidden-54', + 'zDetFace-In Trash/Recently Deleted-55', + 'zDetFace-Cloud Local State-56', + 'zDetFace-Training Type-57', + 'zDetFace.Pose Yaw-58', + 'zDetFace-Body Center X-59', + 'zDetFace-Body Center Y-60', + 'zDetFace-Body Height-61', + 'zDetFace-Body Width-62', + 'zDetFace-Roll-63', + 'zDetFace-Size-64', + 'zDetFace-Cluster Squence Number-65', + 'zDetFace-Blur Score-66', + 'zDetFacePrint-Face Print Version-67', + 'zDetFaceGroup-UUID-68', + 'zDetFaceGroup-Person Builder State-69', + 'zDetFaceGroup-UnNamed Face Count-70', + 'zPerson-Face Count-71', + 'zDetFace-Face Algorithm Version-72', + 'zDetFace-Adjustment Version-73', + 'zPerson-In Person Naming Model-74', + 'zPerson-Key Face Pick Source Key-75', + 'zPerson-Manual Order Key-76', + 'zPerson-Question Type-77', + 'zPerson-Suggested For Client Type-78', + 'zPerson-Merge Target Person-79', + 'zPerson-Cloud Local State-80', + 'zFaceCrop-Cloud Local State-81', + 'zFaceCrop-Cloud Type-82', + 'zPerson-Cloud Delete State-83', + 'zFaceCrop-Cloud Delete State-84', + 'zDetFace-zPK-85', + 'zDetFacePrint-Face Key-86', + 'zPerson-KeyFace=zDetFace-zPK-87', + 'zFaceCrop-Face Key-88', + 'zPerson-zPK=zDetFace-Person-89', + 'zDetFace-PersonForFace= zPerson-zPK-90', + 'zDetFace-Person Being Key Face-91', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-92', + 'zDetFace-Face Print-93', + 'zDetFacePrint-zPK-94', + 'zDetFace-Face Crop-95', + 'zFaceCrop-zPK-96', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-97', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-98', + 'zPerson-Assoc Face Group Key-99', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-100', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-101', + 'zDetFaceGroup-zPK-102', + 'zPerson-Share Participant= zSharePartic-zPK-103', + 'zDetFace-UUID-104', + 'zFaceCrop-UUID-105', + 'zFaceCrop-Invalid Merge Canidate Person UUID-106', + 'zPerson-Person UUID-107', + 'zPerson-Person URI-108', + 'zDetFaceGroup-UUID-109') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT zDetFace.ZASSETFORFACE AS 'zDetFace-AssetForFace= zAsset-zPK', zDetFace.ZASSETFORTORSO AS 'zDetFace-AssetForTorso= zAsset-zPK', @@ -4601,203 +4452,182 @@ def get_ph15peopledetfacesyndpl(files_found, report_folder, seeker, wrap_text, t LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP ORDER BY zDetFace.Z_PK - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[5] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[111] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[5]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[111]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[111]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[12] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[109] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[12]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], - personcontactmatchingdictionary, - row[6], row[7], row[8], row[9], row[10], row[11], - facecropresourcedata_blob, - row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113])) - - counter += 1 - - description = 'Parses data from Syndication.photoslibrary-database-Photos.sqlite for' \ - ' people - detected faces - face crop data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 17.' - report = ArtifactHtmlReport('Ph15.2-People & Faces NAD-SyndPL') - report.start_artifact_report(report_folder, 'Ph15.2-People & Faces NAD-SyndPL', description) - report.add_script() - data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', - 'zDetFace-AssetForTorso= zAsset-zPK-1', - 'zFaceCrop-Asset Key-2', - 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-3', - 'zDetFacePrint-Data-SeeRawDBData-4', - 'zPerson-Contact Matching Dictionary-5', - 'zPerson-Verified Type-6', - 'zPerson-Display Name-7', - 'zPerson-Full Name-8', - 'zPerson-Cloud Verified Type-9', - 'zFaceCrop-State-10', - 'zFaceCrop-Type-11', - 'zFaceCrop-Resource Data-12', - 'zDetFace-Confirmed Face Crop Generation State-13', - 'zDetFace-Manual-14', - 'zDetFace-Detection Type-15', - 'zPerson-Detection Type-16', - 'zDetFace-VIP Model Type-17', - 'zDetFace-Name Source-18', - 'zDetFace-Cloud Name Source-19', - 'zPerson-Merge Candidate Confidence-20', - 'zPerson-Type-21', - 'zPerson-Gender Type-22', - 'zDetFace-Gender Type-23', - 'zDetFace-Center X-24', - 'zDetFace-Center Y-25', - 'zPerson-Age Type Estimate-26', - 'zDetFace-Age Type Estimate-27', - 'zDetFace-Ethnicity Type-28', - 'zDetFace-Skin Tone Type-29', - 'zDetFace-Hair Type-30', - 'zDetFace-Hair Color Type-31', - 'zDetFace-Head Gear Type-32', - 'zDetFace-Facial Hair Type-33', - 'zDetFace-Has Face Mask-34', - 'zDetFace-Pose Type-35', - 'zDetFace-Face Expression Type-36', - 'zDetFace-Has Smile-37', - 'zDetFace-Smile Type-38', - 'zDetFace-Lip Makeup Type-39', - 'zDetFace-Eyes State-40', - 'zDetFace-Is Left Eye Closed-41', - 'zDetFace-Is Right Eye Closed-42', - 'zDetFace-Gaze Center X-43', - 'zDetFace-Gaze Center Y-44', - 'zDetFace-Face Gaze Type-45', - 'zDetFace-Eye Glasses Type-46', - 'zDetFace-Eye Makeup Type-47', - 'zDetFace-Cluster Squence Number Key-48', - 'zDetFace-Grouping ID-49', - 'zDetFace-Master ID-50', - 'zDetFace-Quality-51', - 'zDetFace-Quality Measure-52', - 'zDetFace-Source Height-53', - 'zDetFace-Source Width-54', - 'zDetFace-Asset Visible-55', - 'zDetFace-Hidden/Asset Hidden-56', - 'zDetFace-In Trash/Recently Deleted-57', - 'zDetFace-Cloud Local State-58', - 'zDetFace-Training Type-59', - 'zDetFace.Pose Yaw-60', - 'zDetFace-Body Center X-61', - 'zDetFace-Body Center Y-62', - 'zDetFace-Body Height-63', - 'zDetFace-Body Width-64', - 'zDetFace-Roll-65', - 'zDetFace-Size-66', - 'zDetFace-Cluster Squence Number-67', - 'zDetFace-Blur Score-68', - 'zDetFacePrint-Face Print Version-69', - 'zDetFaceGroup-UUID-70', - 'zDetFaceGroup-Person Builder State-71', - 'zDetFaceGroup-UnNamed Face Count-72', - 'zPerson-Face Count-73', - 'zDetFace-Face Algorithm Version-74', - 'zDetFace-Adjustment Version-75', - 'zPerson-In Person Naming Model-76', - 'zPerson-Key Face Pick Source Key-77', - 'zPerson-Manual Order Key-78', - 'zPerson-Question Type-79', - 'zPerson-Suggested For Client Type-80', - 'zPerson-Merge Target Person-81', - 'zPerson-Cloud Local State-82', - 'zFaceCrop-Cloud Local State-83', - 'zFaceCrop-Cloud Type-84', - 'zPerson-Cloud Delete State-85', - 'zFaceCrop-Cloud Delete State-86', - 'zDetFace-zPK-87', - 'zDetFacePrint-Face Key-88', - 'zPerson-KeyFace=zDetFace-zPK-89', - 'zFaceCrop-Face Key-90', - 'zPerson-zPK=zDetFace-Person-91', - 'zDetFace-PersonForFace= zPerson-zPK-92', - 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-93', - 'zDetFace-PersonForTorso= zPerson-zPK-94', - 'zDetFace-Person Being Key Face-95', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-96', - 'zDetFace-Face Print-97', - 'zDetFacePrint-zPK-98', - 'zDetFace-Face Crop-99', - 'zFaceCrop-zPK-100', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-101', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-102', - 'zPerson-Assoc Face Group Key-103', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-104', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-105', - 'zDetFaceGroup-zPK-106', - 'zPerson-Share Participant= zSharePartic-zPK-107', - 'zDetFace-UUID-108', - 'zFaceCrop-UUID-109', - 'zFaceCrop-Invalid Merge Canidate Person UUID-110', - 'zPerson-Person UUID-111', - 'zPerson-Person URI-112', - 'zDetFaceGroup-UUID-113') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph15.2-People & Faces NAD-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph15.2-People & Faces NAD-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people - detected faces - face crop data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[5] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[111] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[5]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[111]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[111]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[12] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[109] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[12]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], row[3], row[4], + personcontactmatchingdictionary, + row[6], row[7], row[8], row[9], row[10], row[11], + facecropresourcedata_blob, + row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113])) + + data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', + 'zDetFace-AssetForTorso= zAsset-zPK-1', + 'zFaceCrop-Asset Key-2', + 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-3', + 'zDetFacePrint-Data-SeeRawDBData-4', + 'zPerson-Contact Matching Dictionary-5', + 'zPerson-Verified Type-6', + 'zPerson-Display Name-7', + 'zPerson-Full Name-8', + 'zPerson-Cloud Verified Type-9', + 'zFaceCrop-State-10', + 'zFaceCrop-Type-11', + 'zFaceCrop-Resource Data-12', + 'zDetFace-Confirmed Face Crop Generation State-13', + 'zDetFace-Manual-14', + 'zDetFace-Detection Type-15', + 'zPerson-Detection Type-16', + 'zDetFace-VIP Model Type-17', + 'zDetFace-Name Source-18', + 'zDetFace-Cloud Name Source-19', + 'zPerson-Merge Candidate Confidence-20', + 'zPerson-Type-21', + 'zPerson-Gender Type-22', + 'zDetFace-Gender Type-23', + 'zDetFace-Center X-24', + 'zDetFace-Center Y-25', + 'zPerson-Age Type Estimate-26', + 'zDetFace-Age Type Estimate-27', + 'zDetFace-Ethnicity Type-28', + 'zDetFace-Skin Tone Type-29', + 'zDetFace-Hair Type-30', + 'zDetFace-Hair Color Type-31', + 'zDetFace-Head Gear Type-32', + 'zDetFace-Facial Hair Type-33', + 'zDetFace-Has Face Mask-34', + 'zDetFace-Pose Type-35', + 'zDetFace-Face Expression Type-36', + 'zDetFace-Has Smile-37', + 'zDetFace-Smile Type-38', + 'zDetFace-Lip Makeup Type-39', + 'zDetFace-Eyes State-40', + 'zDetFace-Is Left Eye Closed-41', + 'zDetFace-Is Right Eye Closed-42', + 'zDetFace-Gaze Center X-43', + 'zDetFace-Gaze Center Y-44', + 'zDetFace-Face Gaze Type-45', + 'zDetFace-Eye Glasses Type-46', + 'zDetFace-Eye Makeup Type-47', + 'zDetFace-Cluster Squence Number Key-48', + 'zDetFace-Grouping ID-49', + 'zDetFace-Master ID-50', + 'zDetFace-Quality-51', + 'zDetFace-Quality Measure-52', + 'zDetFace-Source Height-53', + 'zDetFace-Source Width-54', + 'zDetFace-Asset Visible-55', + 'zDetFace-Hidden/Asset Hidden-56', + 'zDetFace-In Trash/Recently Deleted-57', + 'zDetFace-Cloud Local State-58', + 'zDetFace-Training Type-59', + 'zDetFace.Pose Yaw-60', + 'zDetFace-Body Center X-61', + 'zDetFace-Body Center Y-62', + 'zDetFace-Body Height-63', + 'zDetFace-Body Width-64', + 'zDetFace-Roll-65', + 'zDetFace-Size-66', + 'zDetFace-Cluster Squence Number-67', + 'zDetFace-Blur Score-68', + 'zDetFacePrint-Face Print Version-69', + 'zDetFaceGroup-UUID-70', + 'zDetFaceGroup-Person Builder State-71', + 'zDetFaceGroup-UnNamed Face Count-72', + 'zPerson-Face Count-73', + 'zDetFace-Face Algorithm Version-74', + 'zDetFace-Adjustment Version-75', + 'zPerson-In Person Naming Model-76', + 'zPerson-Key Face Pick Source Key-77', + 'zPerson-Manual Order Key-78', + 'zPerson-Question Type-79', + 'zPerson-Suggested For Client Type-80', + 'zPerson-Merge Target Person-81', + 'zPerson-Cloud Local State-82', + 'zFaceCrop-Cloud Local State-83', + 'zFaceCrop-Cloud Type-84', + 'zPerson-Cloud Delete State-85', + 'zFaceCrop-Cloud Delete State-86', + 'zDetFace-zPK-87', + 'zDetFacePrint-Face Key-88', + 'zPerson-KeyFace=zDetFace-zPK-89', + 'zFaceCrop-Face Key-90', + 'zPerson-zPK=zDetFace-Person-91', + 'zDetFace-PersonForFace= zPerson-zPK-92', + 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-93', + 'zDetFace-PersonForTorso= zPerson-zPK-94', + 'zDetFace-Person Being Key Face-95', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-96', + 'zDetFace-Face Print-97', + 'zDetFacePrint-zPK-98', + 'zDetFace-Face Crop-99', + 'zFaceCrop-zPK-100', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-101', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-102', + 'zPerson-Assoc Face Group Key-103', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-104', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-105', + 'zDetFaceGroup-zPK-106', + 'zPerson-Share Participant= zSharePartic-zPK-107', + 'zDetFace-UUID-108', + 'zFaceCrop-UUID-109', + 'zFaceCrop-Invalid Merge Canidate Person UUID-110', + 'zPerson-Person UUID-111', + 'zPerson-Person URI-112', + 'zDetFaceGroup-UUID-113') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT zDetFace.ZASSETFORFACE AS 'zDetFace-AssetForFace= zAsset-zPK', zDetFace.ZASSETFORTORSO AS 'zDetFace-AssetForTorso= zAsset-zPK', @@ -4813,7 +4643,7 @@ def get_ph15peopledetfacesyndpl(files_found, report_folder, seeker, wrap_text, t WHEN 1 THEN '1-Has_Contact Matching_Dictionary' ELSE 'Unknown-New-Value!: ' || zPerson.ZVERIFIEDTYPE || '' END AS 'zPerson-Verified Type', - zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-iOS18', + zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence', zPerson.ZDISPLAYNAME AS 'zPerson-Display Name', zPerson.ZFULLNAME AS 'zPerson-Full Name', CASE zPerson.ZCLOUDVERIFIEDTYPE @@ -5160,226 +4990,175 @@ def get_ph15peopledetfacesyndpl(files_found, report_folder, seeker, wrap_text, t LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP ORDER BY zDetFace.Z_PK - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[5] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[112] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[5]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[112]) - else: - logfunc( - 'Error reading exported plist from zPerson-Contact Matching Dictionary' + row[112]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[13] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[110] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[13]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[5] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[112] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[5]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[112]) + else: + logfunc( + 'Error reading exported plist from zPerson-Contact Matching Dictionary' + row[112]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[13] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[110] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[13]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], row[3], row[4], + personcontactmatchingdictionary, + row[6], row[7], row[8], row[9], row[10], row[11], row[12], + facecropresourcedata_blob, + row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114])) + + data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', + 'zDetFace-AssetForTorso= zAsset-zPK-1', + 'zFaceCrop-Asset Key-2', + 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-3', + 'zDetFacePrint-Data-SeeRawDBData-4', + 'zPerson-Contact Matching Dictionary-5', + 'zPerson-Verified Type-6', + 'zPerson-Is_Me_Confidence-7', + 'zPerson-Display Name-8', + 'zPerson-Full Name-9', + 'zPerson-Cloud Verified Type-10', + 'zFaceCrop-State-11', + 'zFaceCrop-Type-12', + 'zFaceCrop-Resource Data-13', + 'zDetFace-Confirmed Face Crop Generation State-14', + 'zDetFace-Manual-15', + 'zDetFace-Detection Type-16', + 'zPerson-Detection Type-17', + 'zDetFace-VIP Model Type-18', + 'zDetFace-Name Source-19', + 'zDetFace-Cloud Name Source-20', + 'zPerson-Merge Candidate Confidence-21', + 'zPerson-Type-22', + 'zPerson-Gender Type-23', + 'zDetFace-Gender Type-24', + 'zDetFace-Center X-25', + 'zDetFace-Center Y-26', + 'zPerson-Age Type Estimate-27', + 'zDetFace-Age Type Estimate-28', + 'zDetFace-Ethnicity Type-29', + 'zDetFace-Skin Tone Type-30', + 'zDetFace-Hair Type-31', + 'zDetFace-Hair Color Type-32', + 'zDetFace-Head Gear Type-33', + 'zDetFace-Facial Hair Type-34', + 'zDetFace-Has Face Mask-35', + 'zDetFace-Pose Type-36', + 'zDetFace-Face Expression Type-37', + 'zDetFace-Has Smile-38', + 'zDetFace-Smile Type-39', + 'zDetFace-Lip Makeup Type-40', + 'zDetFace-Eyes State-41', + 'zDetFace-Is Left Eye Closed-42', + 'zDetFace-Is Right Eye Closed-43', + 'zDetFace-Gaze Center X-44', + 'zDetFace-Gaze Center Y-45', + 'zDetFace-Face Gaze Type-46', + 'zDetFace-Eye Glasses Type-47', + 'zDetFace-Eye Makeup Type-48', + 'zDetFace-Cluster Sequence Number Key-49', + 'zDetFace-Grouping ID-50', + 'zDetFace-Master ID-51', + 'zDetFace-Quality-52', + 'zDetFace-Quality Measure-53', + 'zDetFace-Source Height-54', + 'zDetFace-Source Width-55', + 'zDetFace-Asset Visible-56', + 'zDetFace-Hidden/Asset Hidden-57', + 'zDetFace-In Trash/Recently Deleted-58', + 'zDetFace-Cloud Local State-59', + 'zDetFace-Training Type-60', + 'zDetFace.Pose Yaw-61', + 'zDetFace-Body Center X-62', + 'zDetFace-Body Center Y-63', + 'zDetFace-Body Height-64', + 'zDetFace-Body Width-65', + 'zDetFace-Roll-66', + 'zDetFace-Size-67', + 'zDetFace-Cluster Sequence Number-68', + 'zDetFace-Blur Score-69', + 'zDetFacePrint-Face Print Version-70', + 'zDetFaceGroup-UUID-71', + 'zDetFaceGroup-Person Builder State-72', + 'zDetFaceGroup-UnNamed Face Count-73', + 'zPerson-Face Count-74', + 'zDetFace-Face Algorithm Version-75', + 'zDetFace-Adjustment Version-76', + 'zPerson-In Person Naming Model-77', + 'zPerson-Key Face Pick Source Key-78', + 'zPerson-Manual Order Key-79', + 'zPerson-Question Type-80', + 'zPerson-Suggested For Client Type-81', + 'zPerson-Merge Target Person-82', + 'zPerson-Cloud Local State-83', + 'zFaceCrop-Cloud Local State-84', + 'zFaceCrop-Cloud Type-85', + 'zPerson-Cloud Delete State-86', + 'zFaceCrop-Cloud Delete State-87', + 'zDetFace-zPK-88', + 'zDetFacePrint-Face Key-89', + 'zPerson-KeyFace=zDetFace-zPK-90', + 'zFaceCrop-Face Key-91', + 'zPerson-zPK=zDetFace-Person-92', + 'zDetFace-PersonForFace= zPerson-zPK-93', + 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-94', + 'zDetFace-PersonForTorso= zPerson-zPK-95', + 'zDetFace-Person Being Key Face-96', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-97', + 'zDetFace-Face Print-98', + 'zDetFacePrint-zPK-99', + 'zDetFace-Face Crop-100', + 'zFaceCrop-zPK-101', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-102', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-103', + 'zPerson-Assoc Face Group Key-104', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-105', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-106', + 'zDetFaceGroup-zPK-107', + 'zPerson-Share Participant= zSharePartic-zPK-108', + 'zDetFace-UUID-109', + 'zFaceCrop-UUID-110', + 'zFaceCrop-Invalid Merge Candidate Person UUID-111', + 'zPerson-Person UUID-112', + 'zPerson-Person URI-113', + 'zDetFaceGroup-UUID-114') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path - data_list.append((row[0], row[1], row[2], row[3], row[4], - personcontactmatchingdictionary, - row[6], row[7], row[8], row[9], row[10], row[11], row[12], - facecropresourcedata_blob, - row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114])) - counter += 1 - description = 'Parses data from Syndication.photoslibrary-database-Photos.sqlite for' \ - ' people - detected faces - face crop data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 18.' - report = ArtifactHtmlReport('Ph15.2-People & Faces NAD-SyndPL') - report.start_artifact_report(report_folder, 'Ph15.2-People & Faces NAD-SyndPL', description) - report.add_script() - data_headers = ('zDetFace-AssetForFace= zAsset-zPK-0', - 'zDetFace-AssetForTorso= zAsset-zPK-1', - 'zFaceCrop-Asset Key-2', - 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-3', - 'zDetFacePrint-Data-SeeRawDBData-4', - 'zPerson-Contact Matching Dictionary-5', - 'zPerson-Verified Type-6', - 'zPerson-Is_Me_Confidence-iOS18-7', - 'zPerson-Display Name-8', - 'zPerson-Full Name-9', - 'zPerson-Cloud Verified Type-10', - 'zFaceCrop-State-11', - 'zFaceCrop-Type-12', - 'zFaceCrop-Resource Data-13', - 'zDetFace-Confirmed Face Crop Generation State-14', - 'zDetFace-Manual-15', - 'zDetFace-Detection Type-16', - 'zPerson-Detection Type-17', - 'zDetFace-VIP Model Type-18', - 'zDetFace-Name Source-19', - 'zDetFace-Cloud Name Source-20', - 'zPerson-Merge Candidate Confidence-21', - 'zPerson-Type-22', - 'zPerson-Gender Type-23', - 'zDetFace-Gender Type-24', - 'zDetFace-Center X-25', - 'zDetFace-Center Y-26', - 'zPerson-Age Type Estimate-27', - 'zDetFace-Age Type Estimate-28', - 'zDetFace-Ethnicity Type-29', - 'zDetFace-Skin Tone Type-30', - 'zDetFace-Hair Type-31', - 'zDetFace-Hair Color Type-32', - 'zDetFace-Head Gear Type-33', - 'zDetFace-Facial Hair Type-34', - 'zDetFace-Has Face Mask-35', - 'zDetFace-Pose Type-36', - 'zDetFace-Face Expression Type-37', - 'zDetFace-Has Smile-38', - 'zDetFace-Smile Type-39', - 'zDetFace-Lip Makeup Type-40', - 'zDetFace-Eyes State-41', - 'zDetFace-Is Left Eye Closed-42', - 'zDetFace-Is Right Eye Closed-43', - 'zDetFace-Gaze Center X-44', - 'zDetFace-Gaze Center Y-45', - 'zDetFace-Face Gaze Type-46', - 'zDetFace-Eye Glasses Type-47', - 'zDetFace-Eye Makeup Type-48', - 'zDetFace-Cluster Sequence Number Key-49', - 'zDetFace-Grouping ID-50', - 'zDetFace-Master ID-51', - 'zDetFace-Quality-52', - 'zDetFace-Quality Measure-53', - 'zDetFace-Source Height-54', - 'zDetFace-Source Width-55', - 'zDetFace-Asset Visible-56', - 'zDetFace-Hidden/Asset Hidden-57', - 'zDetFace-In Trash/Recently Deleted-58', - 'zDetFace-Cloud Local State-59', - 'zDetFace-Training Type-60', - 'zDetFace.Pose Yaw-61', - 'zDetFace-Body Center X-62', - 'zDetFace-Body Center Y-63', - 'zDetFace-Body Height-64', - 'zDetFace-Body Width-65', - 'zDetFace-Roll-66', - 'zDetFace-Size-67', - 'zDetFace-Cluster Sequence Number-68', - 'zDetFace-Blur Score-69', - 'zDetFacePrint-Face Print Version-70', - 'zDetFaceGroup-UUID-71', - 'zDetFaceGroup-Person Builder State-72', - 'zDetFaceGroup-UnNamed Face Count-73', - 'zPerson-Face Count-74', - 'zDetFace-Face Algorithm Version-75', - 'zDetFace-Adjustment Version-76', - 'zPerson-In Person Naming Model-77', - 'zPerson-Key Face Pick Source Key-78', - 'zPerson-Manual Order Key-79', - 'zPerson-Question Type-80', - 'zPerson-Suggested For Client Type-81', - 'zPerson-Merge Target Person-82', - 'zPerson-Cloud Local State-83', - 'zFaceCrop-Cloud Local State-84', - 'zFaceCrop-Cloud Type-85', - 'zPerson-Cloud Delete State-86', - 'zFaceCrop-Cloud Delete State-87', - 'zDetFace-zPK-88', - 'zDetFacePrint-Face Key-89', - 'zPerson-KeyFace=zDetFace-zPK-90', - 'zFaceCrop-Face Key-91', - 'zPerson-zPK=zDetFace-Person-92', - 'zDetFace-PersonForFace= zPerson-zPK-93', - 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-94', - 'zDetFace-PersonForTorso= zPerson-zPK-95', - 'zDetFace-Person Being Key Face-96', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-97', - 'zDetFace-Face Print-98', - 'zDetFacePrint-zPK-99', - 'zDetFace-Face Crop-100', - 'zFaceCrop-zPK-101', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-102', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-103', - 'zPerson-Assoc Face Group Key-104', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-105', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-106', - 'zDetFaceGroup-zPK-107', - 'zPerson-Share Participant= zSharePartic-zPK-108', - 'zDetFace-UUID-109', - 'zFaceCrop-UUID-110', - 'zFaceCrop-Invalid Merge Candidate Person UUID-111', - 'zPerson-Person UUID-112', - 'zPerson-Person URI-113', - 'zDetFaceGroup-UUID-114') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph15.2-People & Faces NAD-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph15.2-People & Faces NAD-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people - detected faces - face crop data') - - db.close() - return - - -__artifacts_v2__ = { - 'Ph15-1-People & Faces NAD-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite 15.1 People and Faces Data No Asset Data', - 'description': 'Parses data from PhotoData-Photos.sqlite for people - detected faces - face crop data.' - ' The results may contain multiple records per ZASSET table Z_PK value and supports iOS 14-18.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-G-People_Faces_Data', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph15peopledetfacephdapsql' - }, - 'Ph15-2-People & Faces NAD-SyndPL': { - 'name': 'SyndPL Photos.sqlite 15.2 People and Faces Data No Asset Data', - 'description': 'Parses data from Syndication.photoslibrary-database-Photos.sqlite for' - ' people - detected faces - face crop data. The results may contain multiple records' - ' per ZASSET table Z_PK value and supports iOS 14-18.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', - 'notes': '', - 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*', - 'function': 'get_ph15peopledetfacesyndpl' - } -} diff --git a/scripts/artifacts/Ph16AssetPeopleandDetFaces.py b/scripts/artifacts/Ph16AssetPeopleandDetFaces.py index 24f9907f..50c0a0f3 100644 --- a/scripts/artifacts/Ph16AssetPeopleandDetFaces.py +++ b/scripts/artifacts/Ph16AssetPeopleandDetFaces.py @@ -1,43 +1,63 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses basic asset record data from Photos.sqlite to include people and detected face data supports iOS 14-18. -# The results could produce multiple records for a single asset. -# This parser is based on research and SQLite queries written by Scott Koenig -# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools -# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results. -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph16_1PeopleFacesAssetDataPhDaPsql': { + 'name': 'Ph16.1-People & Faces Asset Data-PhDaPsql', + 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for basic asset' + ' people and faces data. The results may contain multiple records per ZASSET table Z_PK value' + ' and supports iOS 14-18.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-G-People_Faces_Data', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + }, + 'Ph16_2PeopleFacesAssetDataSyndPL': { + 'name': 'Ph16.2-People & Faces Asset Data-SyndPL', + 'description': 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite' + ' for basic asset people and faces data. The results may contain multiple records' + ' per ZASSET table Z_PK value and supports iOS 14-18.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', + 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import nska_deserialize as nd import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly - - -def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import media_to_html, artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph16_1PeopleFacesAssetDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("13.7"): - logfunc("Unsupported version for PhotoData-Photos.sqlite basic asset people and face data from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -354,207 +374,186 @@ def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_ LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP WHERE zDetFace.Z_PK > 0 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[22] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[108] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[22]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[108]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[108]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[29] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[106] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[29]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], - personcontactmatchingdictionary, - row[23], row[24], row[25], row[26], row[27], row[28], - facecropresourcedata_blob, - row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' basic asset, people and detected faces data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 14.' - report = ArtifactHtmlReport('Ph16.1-People & Faces Asset Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph16.1-People & Faces Asset Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zAsset-Trashed Date-11', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-12', - 'zAddAssetAttr-Creator Bundle ID-13', - 'zAddAssetAttr-Imported By Display Name-14', - 'zCldMast-Imported by Bundle ID-15', - 'zCldMast-Imported by Display Name-16', - 'zAsset-Visibility State-17', - 'zFaceCrop-Face Area Points-18', - 'zAsset-Face Adjustment Version-19', - 'zAddAssetAttr-Face_Regions-SeeRawDBData-20', - 'zDetFacePrint-Data-SeeRawDBData-21', - 'zPerson-Contact Matching Dictionary-22', - 'zPerson-Verified Type-23', - 'zPerson-Display Name-24', - 'zPerson-Full Name-25', - 'zPerson-Cloud Verified Type-26', - 'zFaceCrop-State-27', - 'zFaceCrop-Type-28', - 'zFaceCrop-Resource Data-29', - 'zDetFace-Confirmed Face Crop Generation State-30', - 'zDetFace-Manual-31', - 'zDetFace-VIP Model Type-32', - 'zDetFace-Name Source-33', - 'zDetFace-Cloud Name Source-34', - 'zPerson-Type-35', - 'zPerson-Gender Type-36', - 'zDetFace-Gender Type-37', - 'zDetFace-Center X-38', - 'zDetFace-Center Y-39', - 'zPerson-Age Type Estimate-40', - 'zDetFace-Age Type Estimate-41', - 'zDetFace-Hair Color Type-42', - 'zDetFace-Facial Hair Type-43', - 'zDetFace-Has Smile-44', - 'zDetFace-Smile Type-45', - 'zDetFace-Lip Makeup Type-46', - 'zDetFace-Eyes State-47', - 'zDetFace-Is Left Eye Closed-48', - 'zDetFace-Is Right Eye Closed-49', - 'zDetFace-Eye Glasses Type-50', - 'zDetFace-Eye Makeup Type-51', - 'zDetFace-Cluster Sequence Number Key-52', - 'zDetFace-Grouping ID-53', - 'zDetFace-Master ID-54', - 'zDetFace-Quality-55', - 'zDetFace-Quality Measure-56', - 'zDetFace-Source Height-57', - 'zDetFace-Source Width-58', - 'zDetFace-Asset Visible-59', - 'zDetFace-Hidden/Asset Hidden-60', - 'zDetFace-In Trash/Recently Deleted-61', - 'zDetFace-Cloud Local State-62', - 'zDetFace-Training Type-63', - 'zDetFace.Pose Yaw-64', - 'zDetFace-Roll-65', - 'zDetFace-Size-66', - 'zDetFace-Cluster Sequence Number-67', - 'zDetFace-Blur Score-68', - 'zDetFacePrint-Face Print Version-69', - 'zDetFaceGroup-UUID-70', - 'zDetFaceGroup-Person Builder State-71', - 'zDetFaceGroup-UnNamed Face Count-72', - 'zPerson-Face Count-73', - 'zDetFace-Face Algorithm Version-74', - 'zDetFace-Adjustment Version-75', - 'zPerson-In Person Naming Model-76', - 'zPerson-Key Face Pick Source Key-77', - 'zPerson-Manual Order Key-78', - 'zPerson-Question Type-79', - 'zPerson-Suggested For Client Type-80', - 'zPerson-Merge Target Person-81', - 'zPerson-Cloud Local State-82', - 'zFaceCrop-Cloud Local State-83', - 'zFaceCrop-Cloud Type-84', - 'zPerson-Cloud Delete State-85', - 'zFaceCrop-Cloud Delete State-86', - 'zDetFace-zPK-87', - 'zDetFacePrint-Face Key-88', - 'zPerson-KeyFace=zDetFace-zPK-89', - 'zFaceCrop-Face Key-90', - 'zPerson-zPK=zDetFace-Person-91', - 'zDetFace-PersonForFace= zPerson-zPK-92', - 'zDetFace-Person Being Key Face-93', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-94', - 'zDetFace-Face Print-95', - 'zDetFacePrint-zPK-96', - 'zDetFace-Face Crop-97', - 'zFaceCrop-zPK-98', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-99', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-100', - 'zPerson-Assoc Face Group Key-101', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-102', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-103', - 'zDetFaceGroup-zPK-104', - 'zDetFace-UUID-105', - 'zFaceCrop-UUID-106', - 'zFaceCrop-Invalid Merge Candidate Person UUID-107', - 'zPerson-Person UUID-108', - 'zPerson-Person URI-109', - 'zDetFaceGroup-UUID-110', - 'zDetFace-AssetForFace= zAsset-zPK-111', - 'zFaceCrop-Asset Key-112', - 'zAsset-zPK-113', - 'zAddAssetAttr-zPK-114', - 'zAsset-UUID = store.cloudphotodb-115', - 'zAddAssetAttr-Master Fingerprint-116') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph16.1-People & Faces Asset Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph16.1-People & Faces Asset Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite people faces and basic asset data data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[22] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[108] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[22]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[108]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[108]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[29] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[106] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[29]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], + personcontactmatchingdictionary, + row[23], row[24], row[25], row[26], row[27], row[28], + facecropresourcedata_blob, + row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + ('zAsset-Trashed Date-11', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-12', + 'zAddAssetAttr-Creator Bundle ID-13', + 'zAddAssetAttr-Imported By Display Name-14', + 'zCldMast-Imported by Bundle ID-15', + 'zCldMast-Imported by Display Name-16', + 'zAsset-Visibility State-17', + 'zFaceCrop-Face Area Points-18', + 'zAsset-Face Adjustment Version-19', + 'zAddAssetAttr-Face_Regions-SeeRawDBData-20', + 'zDetFacePrint-Data-SeeRawDBData-21', + 'zPerson-Contact Matching Dictionary-22', + 'zPerson-Verified Type-23', + 'zPerson-Display Name-24', + 'zPerson-Full Name-25', + 'zPerson-Cloud Verified Type-26', + 'zFaceCrop-State-27', + 'zFaceCrop-Type-28', + 'zFaceCrop-Resource Data-29', + 'zDetFace-Confirmed Face Crop Generation State-30', + 'zDetFace-Manual-31', + 'zDetFace-VIP Model Type-32', + 'zDetFace-Name Source-33', + 'zDetFace-Cloud Name Source-34', + 'zPerson-Type-35', + 'zPerson-Gender Type-36', + 'zDetFace-Gender Type-37', + 'zDetFace-Center X-38', + 'zDetFace-Center Y-39', + 'zPerson-Age Type Estimate-40', + 'zDetFace-Age Type Estimate-41', + 'zDetFace-Hair Color Type-42', + 'zDetFace-Facial Hair Type-43', + 'zDetFace-Has Smile-44', + 'zDetFace-Smile Type-45', + 'zDetFace-Lip Makeup Type-46', + 'zDetFace-Eyes State-47', + 'zDetFace-Is Left Eye Closed-48', + 'zDetFace-Is Right Eye Closed-49', + 'zDetFace-Eye Glasses Type-50', + 'zDetFace-Eye Makeup Type-51', + 'zDetFace-Cluster Sequence Number Key-52', + 'zDetFace-Grouping ID-53', + 'zDetFace-Master ID-54', + 'zDetFace-Quality-55', + 'zDetFace-Quality Measure-56', + 'zDetFace-Source Height-57', + 'zDetFace-Source Width-58', + 'zDetFace-Asset Visible-59', + 'zDetFace-Hidden/Asset Hidden-60', + 'zDetFace-In Trash/Recently Deleted-61', + 'zDetFace-Cloud Local State-62', + 'zDetFace-Training Type-63', + 'zDetFace.Pose Yaw-64', + 'zDetFace-Roll-65', + 'zDetFace-Size-66', + 'zDetFace-Cluster Sequence Number-67', + 'zDetFace-Blur Score-68', + 'zDetFacePrint-Face Print Version-69', + 'zDetFaceGroup-UUID-70', + 'zDetFaceGroup-Person Builder State-71', + 'zDetFaceGroup-UnNamed Face Count-72', + 'zPerson-Face Count-73', + 'zDetFace-Face Algorithm Version-74', + 'zDetFace-Adjustment Version-75', + 'zPerson-In Person Naming Model-76', + 'zPerson-Key Face Pick Source Key-77', + 'zPerson-Manual Order Key-78', + 'zPerson-Question Type-79', + 'zPerson-Suggested For Client Type-80', + 'zPerson-Merge Target Person-81', + 'zPerson-Cloud Local State-82', + 'zFaceCrop-Cloud Local State-83', + 'zFaceCrop-Cloud Type-84', + 'zPerson-Cloud Delete State-85', + 'zFaceCrop-Cloud Delete State-86', + 'zDetFace-zPK-87', + 'zDetFacePrint-Face Key-88', + 'zPerson-KeyFace=zDetFace-zPK-89', + 'zFaceCrop-Face Key-90', + 'zPerson-zPK=zDetFace-Person-91', + 'zDetFace-PersonForFace= zPerson-zPK-92', + 'zDetFace-Person Being Key Face-93', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-94', + 'zDetFace-Face Print-95', + 'zDetFacePrint-zPK-96', + 'zDetFace-Face Crop-97', + 'zFaceCrop-zPK-98', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-99', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-100', + 'zPerson-Assoc Face Group Key-101', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-102', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-103', + 'zDetFaceGroup-zPK-104', + 'zDetFace-UUID-105', + 'zFaceCrop-UUID-106', + 'zFaceCrop-Invalid Merge Candidate Person UUID-107', + 'zPerson-Person UUID-108', + 'zPerson-Person URI-109', + 'zDetFaceGroup-UUID-110', + 'zDetFace-AssetForFace= zAsset-zPK-111', + 'zFaceCrop-Asset Key-112', + 'zAsset-zPK-113', + 'zAddAssetAttr-zPK-114', + 'zAsset-UUID = store.cloudphotodb-115', + 'zAddAssetAttr-Master Fingerprint-116') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -962,229 +961,208 @@ def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_ LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP WHERE zDetFace.Z_PK > 0 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[25] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[127] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[25]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[127]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[127]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[32] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[125] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[32]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], - personcontactmatchingdictionary, - row[26], row[27], - row[28], row[29], row[30], row[31], - facecropresourcedata_blob, - row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' basic asset, people and detected faces data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 15.' - report = ArtifactHtmlReport('Ph16.1-People & Faces Asset Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph16.1-People & Faces Asset Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', - 'zAsset- Conversation= zGenAlbum_zPK-12', - 'zAsset-Trashed Date-13', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', - 'zAddAssetAttr-Imported by Bundle ID-15', - 'zAddAssetAttr-Imported By Display Name-16', - 'zCldMast-Imported by Bundle ID-17', - 'zCldMast-Imported by Display Name-18', - 'zAsset-Visibility State-19', - 'zFaceCrop-Face Area Points-20', - 'zAsset-Face Adjustment Version-21', - 'zAddAssetAttr-Face_Regions-SeeRawDBData-22', - 'zAddAssetAttr-Face Analysis Version-23', - 'zDetFacePrint-Data-SeeRawDBData-24', - 'zPerson-Contact Matching Dictionary-25', - 'zPerson-Verified Type-26', - 'zPerson-Display Name-27', - 'zPerson-Full Name-28', - 'zPerson-Cloud Verified Type-29', - 'zFaceCrop-State-30', - 'zFaceCrop-Type-31', - 'zFaceCrop-Resource Data-32', - 'zDetFace-Confirmed Face Crop Generation State-33', - 'zDetFace-Manual-34', - 'zDetFace-Detection Type-35', - 'zPerson-Detection Type-36', - 'zDetFace-VIP Model Type-37', - 'zDetFace-Name Source-38', - 'zDetFace-Cloud Name Source-39', - 'zPerson-Type-40', - 'zPerson-Gender Type-41', - 'zDetFace-Gender Type-42', - 'zDetFace-Center X-43', - 'zDetFace-Center Y-44', - 'zPerson-Age Type Estimate-45', - 'zDetFace-Age Type Estimate-46', - 'zDetFace-Ethnicity Type-47', - 'zDetFace-Skin Tone Type-48', - 'zDetFace-Hair Type-49', - 'zDetFace-Hair Color Type-50', - 'zDetFace-Head Gear Type-51', - 'zDetFace-Facial Hair Type-52', - 'zDetFace-Has Face Mask-53', - 'zDetFace-Pose Type-54', - 'zDetFace-Face Expression Type-55', - 'zDetFace-Has Smile-56', - 'zDetFace-Smile Type-57', - 'zDetFace-Lip Makeup Type-58', - 'zDetFace-Eyes State-59', - 'zDetFace-Is Left Eye Closed-60', - 'zDetFace-Is Right Eye Closed-61', - 'zDetFace-Gaze Center X-62', - 'zDetFace-Gaze Center Y-63', - 'zDetFace-Face Gaze Type-64', - 'zDetFace-Eye Glasses Type-65', - 'zDetFace-Eye Makeup Type-66', - 'zDetFace-Cluster Sequence Number Key-67', - 'zDetFace-Grouping ID-68', - 'zDetFace-Master ID-69', - 'zDetFace-Quality-70', - 'zDetFace-Quality Measure-71', - 'zDetFace-Source Height-72', - 'zDetFace-Source Width-73', - 'zDetFace-Asset Visible-74', - 'zDetFace-Hidden/Asset Hidden-75', - 'zDetFace-In Trash/Recently Deleted-76', - 'zDetFace-Cloud Local State-77', - 'zDetFace-Training Type-78', - 'zDetFace.Pose Yaw-79', - 'zDetFace-Body Center X-80', - 'zDetFace-Body Center Y-81', - 'zDetFace-Body Height-82', - 'zDetFace-Body Width-83', - 'zDetFace-Roll-84', - 'zDetFace-Size-85', - 'zDetFace-Cluster Sequence Number-86', - 'zDetFace-Blur Score-87', - 'zDetFacePrint-Face Print Version-88', - 'zDetFaceGroup-UUID-89', - 'zDetFaceGroup-Person Builder State-90', - 'zDetFaceGroup-UnNamed Face Count-91', - 'zPerson-Face Count-92', - 'zDetFace-Face Algorithm Version-93', - 'zDetFace-Adjustment Version-94', - 'zPerson-In Person Naming Model-95', - 'zPerson-Key Face Pick Source Key-96', - 'zPerson-Manual Order Key-97', - 'zPerson-Question Type-98', - 'zPerson-Suggested For Client Type-99', - 'zPerson-Merge Target Person-100', - 'zPerson-Cloud Local State-101', - 'zFaceCrop-Cloud Local State-102', - 'zFaceCrop-Cloud Type-103', - 'zPerson-Cloud Delete State-104', - 'zFaceCrop-Cloud Delete State-105', - 'zDetFace-zPK-106', - 'zDetFacePrint-Face Key-107', - 'zPerson-KeyFace=zDetFace-zPK-108', - 'zFaceCrop-Face Key-109', - 'zPerson-zPK=zDetFace-Person-110', - 'zDetFace-PersonForFace= zPerson-zPK-111', - 'zDetFace-Person Being Key Face-112', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-113', - 'zDetFace-Face Print-114', - 'zDetFacePrint-zPK-115', - 'zDetFace-Face Crop-116', - 'zFaceCrop-zPK-117', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-118', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-119', - 'zPerson-Assoc Face Group Key-120', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-121', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-122', - 'zDetFaceGroup-zPK-123', - 'zDetFace-UUID-124', - 'zFaceCrop-UUID-125', - 'zFaceCrop-Invalid Merge Candidate Person UUID-126', - 'zPerson-Person UUID-127', - 'zPerson-Person URI-128', - 'zDetFaceGroup-UUID-129', - 'zDetFace-AssetForFace= zAsset-zPK-130', - 'zFaceCrop-Asset Key-131', - 'zAsset-zPK-132', - 'zAddAssetAttr-zPK-133', - 'zAsset-UUID = store.cloudphotodb-134', - 'zAddAssetAttr-Master Fingerprint-135') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph16.1-People & Faces Asset Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph16.1-People & Faces Asset Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite people faces and basic asset data data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[25] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[127] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[25]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[127]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[127]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[32] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[125] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[32]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], + personcontactmatchingdictionary, + row[26], row[27], + row[28], row[29], row[30], row[31], + facecropresourcedata_blob, + row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', + 'zAsset- Conversation= zGenAlbum_zPK-12', + ('zAsset-Trashed Date-13', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', + 'zAddAssetAttr-Imported by Bundle ID-15', + 'zAddAssetAttr-Imported By Display Name-16', + 'zCldMast-Imported by Bundle ID-17', + 'zCldMast-Imported by Display Name-18', + 'zAsset-Visibility State-19', + 'zFaceCrop-Face Area Points-20', + 'zAsset-Face Adjustment Version-21', + 'zAddAssetAttr-Face_Regions-SeeRawDBData-22', + 'zAddAssetAttr-Face Analysis Version-23', + 'zDetFacePrint-Data-SeeRawDBData-24', + 'zPerson-Contact Matching Dictionary-25', + 'zPerson-Verified Type-26', + 'zPerson-Display Name-27', + 'zPerson-Full Name-28', + 'zPerson-Cloud Verified Type-29', + 'zFaceCrop-State-30', + 'zFaceCrop-Type-31', + 'zFaceCrop-Resource Data-32', + 'zDetFace-Confirmed Face Crop Generation State-33', + 'zDetFace-Manual-34', + 'zDetFace-Detection Type-35', + 'zPerson-Detection Type-36', + 'zDetFace-VIP Model Type-37', + 'zDetFace-Name Source-38', + 'zDetFace-Cloud Name Source-39', + 'zPerson-Type-40', + 'zPerson-Gender Type-41', + 'zDetFace-Gender Type-42', + 'zDetFace-Center X-43', + 'zDetFace-Center Y-44', + 'zPerson-Age Type Estimate-45', + 'zDetFace-Age Type Estimate-46', + 'zDetFace-Ethnicity Type-47', + 'zDetFace-Skin Tone Type-48', + 'zDetFace-Hair Type-49', + 'zDetFace-Hair Color Type-50', + 'zDetFace-Head Gear Type-51', + 'zDetFace-Facial Hair Type-52', + 'zDetFace-Has Face Mask-53', + 'zDetFace-Pose Type-54', + 'zDetFace-Face Expression Type-55', + 'zDetFace-Has Smile-56', + 'zDetFace-Smile Type-57', + 'zDetFace-Lip Makeup Type-58', + 'zDetFace-Eyes State-59', + 'zDetFace-Is Left Eye Closed-60', + 'zDetFace-Is Right Eye Closed-61', + 'zDetFace-Gaze Center X-62', + 'zDetFace-Gaze Center Y-63', + 'zDetFace-Face Gaze Type-64', + 'zDetFace-Eye Glasses Type-65', + 'zDetFace-Eye Makeup Type-66', + 'zDetFace-Cluster Sequence Number Key-67', + 'zDetFace-Grouping ID-68', + 'zDetFace-Master ID-69', + 'zDetFace-Quality-70', + 'zDetFace-Quality Measure-71', + 'zDetFace-Source Height-72', + 'zDetFace-Source Width-73', + 'zDetFace-Asset Visible-74', + 'zDetFace-Hidden/Asset Hidden-75', + 'zDetFace-In Trash/Recently Deleted-76', + 'zDetFace-Cloud Local State-77', + 'zDetFace-Training Type-78', + 'zDetFace.Pose Yaw-79', + 'zDetFace-Body Center X-80', + 'zDetFace-Body Center Y-81', + 'zDetFace-Body Height-82', + 'zDetFace-Body Width-83', + 'zDetFace-Roll-84', + 'zDetFace-Size-85', + 'zDetFace-Cluster Sequence Number-86', + 'zDetFace-Blur Score-87', + 'zDetFacePrint-Face Print Version-88', + 'zDetFaceGroup-UUID-89', + 'zDetFaceGroup-Person Builder State-90', + 'zDetFaceGroup-UnNamed Face Count-91', + 'zPerson-Face Count-92', + 'zDetFace-Face Algorithm Version-93', + 'zDetFace-Adjustment Version-94', + 'zPerson-In Person Naming Model-95', + 'zPerson-Key Face Pick Source Key-96', + 'zPerson-Manual Order Key-97', + 'zPerson-Question Type-98', + 'zPerson-Suggested For Client Type-99', + 'zPerson-Merge Target Person-100', + 'zPerson-Cloud Local State-101', + 'zFaceCrop-Cloud Local State-102', + 'zFaceCrop-Cloud Type-103', + 'zPerson-Cloud Delete State-104', + 'zFaceCrop-Cloud Delete State-105', + 'zDetFace-zPK-106', + 'zDetFacePrint-Face Key-107', + 'zPerson-KeyFace=zDetFace-zPK-108', + 'zFaceCrop-Face Key-109', + 'zPerson-zPK=zDetFace-Person-110', + 'zDetFace-PersonForFace= zPerson-zPK-111', + 'zDetFace-Person Being Key Face-112', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-113', + 'zDetFace-Face Print-114', + 'zDetFacePrint-zPK-115', + 'zDetFace-Face Crop-116', + 'zFaceCrop-zPK-117', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-118', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-119', + 'zPerson-Assoc Face Group Key-120', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-121', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-122', + 'zDetFaceGroup-zPK-123', + 'zDetFace-UUID-124', + 'zFaceCrop-UUID-125', + 'zFaceCrop-Invalid Merge Candidate Person UUID-126', + 'zPerson-Person UUID-127', + 'zPerson-Person URI-128', + 'zDetFaceGroup-UUID-129', + 'zDetFace-AssetForFace= zAsset-zPK-130', + 'zFaceCrop-Asset Key-131', + 'zAsset-zPK-132', + 'zAddAssetAttr-zPK-133', + 'zAsset-UUID = store.cloudphotodb-134', + 'zAddAssetAttr-Master Fingerprint-135') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -1595,231 +1573,210 @@ def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_ LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP WHERE zDetFace.Z_PK > 0 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[26] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[130] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[26]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[130]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[130]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[33] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[128] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[33]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], - personcontactmatchingdictionary, - row[27], row[28], row[29], row[30], row[31], row[32], - facecropresourcedata_blob, - row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' basic asset, people and detected faces data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 16.' - report = ArtifactHtmlReport('Ph16.1-People & Faces Asset Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph16.1-People & Faces Asset Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', - 'zAsset- Conversation= zGenAlbum_zPK-12', - 'zAsset-Trashed Date-13', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-15', - 'zAddAssetAttr-Imported by Bundle ID-16', - 'zAddAssetAttr-Imported By Display Name-17', - 'zCldMast-Imported by Bundle ID-18', - 'zCldMast-Imported by Display Name-19', - 'zAsset-Visibility State-20', - 'zFaceCrop-Face Area Points-21', - 'zAsset-Face Adjustment Version-22', - 'zAddAssetAttr-Face_Regions-SeeRawDBData-23', - 'zAddAssetAttr-Face Analysis Version-24', - 'zDetFacePrint-Data-SeeRawDBData-25', - 'zPerson-Contact Matching Dictionary-26', - 'zPerson-Verified Type-27', - 'zPerson-Display Name-28', - 'zPerson-Full Name-29', - 'zPerson-Cloud Verified Type-30', - 'zFaceCrop-State-31', - 'zFaceCrop-Type-32', - 'zFaceCrop-Resource Data-33', - 'zDetFace-Confirmed Face Crop Generation State-34', - 'zDetFace-Manual-35', - 'zDetFace-Detection Type-36', - 'zPerson-Detection Type-37', - 'zDetFace-VIP Model Type-38', - 'zDetFace-Name Source-39', - 'zDetFace-Cloud Name Source-40', - 'zPerson-Merge Candidate Confidence-41', - 'zPerson-Type-42', - 'zPerson-Gender Type-43', - 'zDetFace-Gender Type-44', - 'zDetFace-Center X-45', - 'zDetFace-Center Y-46', - 'zPerson-Age Type Estimate-47', - 'zDetFace-Age Type Estimate-48', - 'zDetFace-Ethnicity Type-49', - 'zDetFace-Skin Tone Type-50', - 'zDetFace-Hair Type-51', - 'zDetFace-Hair Color Type-52', - 'zDetFace-Head Gear Type-53', - 'zDetFace-Facial Hair Type-54', - 'zDetFace-Has Face Mask-55', - 'zDetFace-Pose Type-56', - 'zDetFace-Face Expression Type-57', - 'zDetFace-Has Smile-58', - 'zDetFace-Smile Type-59', - 'zDetFace-Lip Makeup Type-60', - 'zDetFace-Eyes State-61', - 'zDetFace-Is Left Eye Closed-62', - 'zDetFace-Is Right Eye Closed-63', - 'zDetFace-Gaze Center X-64', - 'zDetFace-Gaze Center Y-65', - 'zDetFace-Face Gaze Type-66', - 'zDetFace-Eye Glasses Type-67', - 'zDetFace-Eye Makeup Type-68', - 'zDetFace-Cluster Sequence Number Key-69', - 'zDetFace-Grouping ID-70', - 'zDetFace-Master ID-71', - 'zDetFace-Quality-72', - 'zDetFace-Quality Measure-73', - 'zDetFace-Source Height-74', - 'zDetFace-Source Width-75', - 'zDetFace-Asset Visible-76', - 'zDetFace-Hidden/Asset Hidden-77', - 'zDetFace-In Trash/Recently Deleted-78', - 'zDetFace-Cloud Local State-79', - 'zDetFace-Training Type-80', - 'zDetFace.Pose Yaw-81', - 'zDetFace-Body Center X-82', - 'zDetFace-Body Center Y-83', - 'zDetFace-Body Height-84', - 'zDetFace-Body Width-85', - 'zDetFace-Roll-86', - 'zDetFace-Size-87', - 'zDetFace-Cluster Sequence Number-88', - 'zDetFace-Blur Score-89', - 'zDetFacePrint-Face Print Version-90', - 'zDetFaceGroup-UUID-91', - 'zDetFaceGroup-Person Builder State-92', - 'zDetFaceGroup-UnNamed Face Count-93', - 'zPerson-Face Count-94', - 'zDetFace-Face Algorithm Version-95', - 'zDetFace-Adjustment Version-96', - 'zPerson-In Person Naming Model-97', - 'zPerson-Key Face Pick Source Key-98', - 'zPerson-Manual Order Key-99', - 'zPerson-Question Type-100', - 'zPerson-Suggested For Client Type-101', - 'zPerson-Merge Target Person-102', - 'zPerson-Cloud Local State-103', - 'zFaceCrop-Cloud Local State-104', - 'zFaceCrop-Cloud Type-105', - 'zPerson-Cloud Delete State-106', - 'zFaceCrop-Cloud Delete State-107', - 'zDetFace-zPK-108', - 'zDetFacePrint-Face Key-109', - 'zPerson-KeyFace=zDetFace-zPK-110', - 'zFaceCrop-Face Key-111', - 'zPerson-zPK=zDetFace-Person-112', - 'zDetFace-PersonForFace= zPerson-zPK-113', - 'zDetFace-Person Being Key Face-114', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-115', - 'zDetFace-Face Print-116', - 'zDetFacePrint-zPK-117', - 'zDetFace-Face Crop-118', - 'zFaceCrop-zPK-119', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-120', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-121', - 'zPerson-Assoc Face Group Key-122', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-123', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-124', - 'zDetFaceGroup-zPK-125', - 'zPerson-Share Participant= zSharePartic-zPK-126', - 'zDetFace-UUID-127', - 'zFaceCrop-UUID-128', - 'zFaceCrop-Invalid Merge Candidate Person UUID-129', - 'zPerson-Person UUID-130', - 'zPerson-Person URI-131', - 'zDetFaceGroup-UUID-132', - 'zDetFace-AssetForFace= zAsset-zPK-133', - 'zFaceCrop-Asset Key-134', - 'zAsset-zPK-135', - 'zAddAssetAttr-zPK-136', - 'zAsset-UUID = store.cloudphotodb-137', - 'zAddAssetAttr-Master Fingerprint-138') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph16.1-People & Faces Asset Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph16.1-People & Faces Asset Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite people faces and basic asset data data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[26] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[130] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[26]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[130]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[130]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[33] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[128] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[33]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], + personcontactmatchingdictionary, + row[27], row[28], row[29], row[30], row[31], row[32], + facecropresourcedata_blob, + row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', + 'zAsset- Conversation= zGenAlbum_zPK-12', + ('zAsset-Trashed Date-13', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-15', + 'zAddAssetAttr-Imported by Bundle ID-16', + 'zAddAssetAttr-Imported By Display Name-17', + 'zCldMast-Imported by Bundle ID-18', + 'zCldMast-Imported by Display Name-19', + 'zAsset-Visibility State-20', + 'zFaceCrop-Face Area Points-21', + 'zAsset-Face Adjustment Version-22', + 'zAddAssetAttr-Face_Regions-SeeRawDBData-23', + 'zAddAssetAttr-Face Analysis Version-24', + 'zDetFacePrint-Data-SeeRawDBData-25', + 'zPerson-Contact Matching Dictionary-26', + 'zPerson-Verified Type-27', + 'zPerson-Display Name-28', + 'zPerson-Full Name-29', + 'zPerson-Cloud Verified Type-30', + 'zFaceCrop-State-31', + 'zFaceCrop-Type-32', + 'zFaceCrop-Resource Data-33', + 'zDetFace-Confirmed Face Crop Generation State-34', + 'zDetFace-Manual-35', + 'zDetFace-Detection Type-36', + 'zPerson-Detection Type-37', + 'zDetFace-VIP Model Type-38', + 'zDetFace-Name Source-39', + 'zDetFace-Cloud Name Source-40', + 'zPerson-Merge Candidate Confidence-41', + 'zPerson-Type-42', + 'zPerson-Gender Type-43', + 'zDetFace-Gender Type-44', + 'zDetFace-Center X-45', + 'zDetFace-Center Y-46', + 'zPerson-Age Type Estimate-47', + 'zDetFace-Age Type Estimate-48', + 'zDetFace-Ethnicity Type-49', + 'zDetFace-Skin Tone Type-50', + 'zDetFace-Hair Type-51', + 'zDetFace-Hair Color Type-52', + 'zDetFace-Head Gear Type-53', + 'zDetFace-Facial Hair Type-54', + 'zDetFace-Has Face Mask-55', + 'zDetFace-Pose Type-56', + 'zDetFace-Face Expression Type-57', + 'zDetFace-Has Smile-58', + 'zDetFace-Smile Type-59', + 'zDetFace-Lip Makeup Type-60', + 'zDetFace-Eyes State-61', + 'zDetFace-Is Left Eye Closed-62', + 'zDetFace-Is Right Eye Closed-63', + 'zDetFace-Gaze Center X-64', + 'zDetFace-Gaze Center Y-65', + 'zDetFace-Face Gaze Type-66', + 'zDetFace-Eye Glasses Type-67', + 'zDetFace-Eye Makeup Type-68', + 'zDetFace-Cluster Sequence Number Key-69', + 'zDetFace-Grouping ID-70', + 'zDetFace-Master ID-71', + 'zDetFace-Quality-72', + 'zDetFace-Quality Measure-73', + 'zDetFace-Source Height-74', + 'zDetFace-Source Width-75', + 'zDetFace-Asset Visible-76', + 'zDetFace-Hidden/Asset Hidden-77', + 'zDetFace-In Trash/Recently Deleted-78', + 'zDetFace-Cloud Local State-79', + 'zDetFace-Training Type-80', + 'zDetFace.Pose Yaw-81', + 'zDetFace-Body Center X-82', + 'zDetFace-Body Center Y-83', + 'zDetFace-Body Height-84', + 'zDetFace-Body Width-85', + 'zDetFace-Roll-86', + 'zDetFace-Size-87', + 'zDetFace-Cluster Sequence Number-88', + 'zDetFace-Blur Score-89', + 'zDetFacePrint-Face Print Version-90', + 'zDetFaceGroup-UUID-91', + 'zDetFaceGroup-Person Builder State-92', + 'zDetFaceGroup-UnNamed Face Count-93', + 'zPerson-Face Count-94', + 'zDetFace-Face Algorithm Version-95', + 'zDetFace-Adjustment Version-96', + 'zPerson-In Person Naming Model-97', + 'zPerson-Key Face Pick Source Key-98', + 'zPerson-Manual Order Key-99', + 'zPerson-Question Type-100', + 'zPerson-Suggested For Client Type-101', + 'zPerson-Merge Target Person-102', + 'zPerson-Cloud Local State-103', + 'zFaceCrop-Cloud Local State-104', + 'zFaceCrop-Cloud Type-105', + 'zPerson-Cloud Delete State-106', + 'zFaceCrop-Cloud Delete State-107', + 'zDetFace-zPK-108', + 'zDetFacePrint-Face Key-109', + 'zPerson-KeyFace=zDetFace-zPK-110', + 'zFaceCrop-Face Key-111', + 'zPerson-zPK=zDetFace-Person-112', + 'zDetFace-PersonForFace= zPerson-zPK-113', + 'zDetFace-Person Being Key Face-114', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-115', + 'zDetFace-Face Print-116', + 'zDetFacePrint-zPK-117', + 'zDetFace-Face Crop-118', + 'zFaceCrop-zPK-119', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-120', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-121', + 'zPerson-Assoc Face Group Key-122', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-123', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-124', + 'zDetFaceGroup-zPK-125', + 'zPerson-Share Participant= zSharePartic-zPK-126', + 'zDetFace-UUID-127', + 'zFaceCrop-UUID-128', + 'zFaceCrop-Invalid Merge Candidate Person UUID-129', + 'zPerson-Person UUID-130', + 'zPerson-Person URI-131', + 'zDetFaceGroup-UUID-132', + 'zDetFace-AssetForFace= zAsset-zPK-133', + 'zFaceCrop-Asset Key-134', + 'zAsset-zPK-135', + 'zAddAssetAttr-zPK-136', + 'zAsset-UUID = store.cloudphotodb-137', + 'zAddAssetAttr-Master Fingerprint-138') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -2234,236 +2191,215 @@ def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_ LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP WHERE zDetFace.Z_PK > 0 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[27] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[133] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[27]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[133]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[133]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[34] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[131] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[34]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], - personcontactmatchingdictionary, - row[28], row[29], row[30], row[31], row[32], row[33], - facecropresourcedata_blob, - row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' basic asset, people and detected faces data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 17.' - report = ArtifactHtmlReport('Ph16.1-People & Faces Asset Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph16.1-People & Faces Asset Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', - 'zAsset- Conversation= zGenAlbum_zPK-12', - 'zAsset-Trashed Date-13', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-15', - 'zAddAssetAttr-Imported by Bundle ID-16', - 'zAddAssetAttr-Imported By Display Name-17', - 'zCldMast-Imported by Bundle ID-18', - 'zCldMast-Imported by Display Name-19', - 'zAsset-Visibility State-20', - 'zFaceCrop-Face Area Points-21', - 'zAsset-Face Adjustment Version-22', - 'zAddAssetAttr-Face_Regions-SeeRawDBData-23', - 'zAddAssetAttr-Face Analysis Version-24', - 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-25', - 'zDetFacePrint-Data-SeeRawDBData-26', - 'zPerson-Contact Matching Dictionary-27', - 'zPerson-Verified Type-28', - 'zPerson-Display Name-29', - 'zPerson-Full Name-30', - 'zPerson-Cloud Verified Type-31', - 'zFaceCrop-State-32', - 'zFaceCrop-Type-33', - 'zFaceCrop-Resource Data-34', - 'zDetFace-Confirmed Face Crop Generation State-35', - 'zDetFace-Manual-36', - 'zDetFace-Detection Type-37', - 'zPerson-Detection Type-38', - 'zDetFace-VIP Model Type-39', - 'zDetFace-Name Source-40', - 'zDetFace-Cloud Name Source-41', - 'zPerson-Merge Candidate Confidence-42', - 'zPerson-Type-43', - 'zPerson-Gender Type-44', - 'zDetFace-Gender Type-45', - 'zDetFace-Center X-46', - 'zDetFace-Center Y-47', - 'zPerson-Age Type Estimate-48', - 'zDetFace-Age Type Estimate-49', - 'zDetFace-Ethnicity Type-50', - 'zDetFace-Skin Tone Type-51', - 'zDetFace-Hair Type-52', - 'zDetFace-Hair Color Type-53', - 'zDetFace-Head Gear Type-54', - 'zDetFace-Facial Hair Type-55', - 'zDetFace-Has Face Mask-56', - 'zDetFace-Pose Type-57', - 'zDetFace-Face Expression Type-58', - 'zDetFace-Has Smile-59', - 'zDetFace-Smile Type-60', - 'zDetFace-Lip Makeup Type-61', - 'zDetFace-Eyes State-62', - 'zDetFace-Is Left Eye Closed-63', - 'zDetFace-Is Right Eye Closed-64', - 'zDetFace-Gaze Center X-65', - 'zDetFace-Gaze Center Y-66', - 'zDetFace-Face Gaze Type-67', - 'zDetFace-Eye Glasses Type-68', - 'zDetFace-Eye Makeup Type-69', - 'zDetFace-Cluster Squence Number Key-70', - 'zDetFace-Grouping ID-71', - 'zDetFace-Master ID-72', - 'zDetFace-Quality-73', - 'zDetFace-Quality Measure-74', - 'zDetFace-Source Height-75', - 'zDetFace-Source Width-76', - 'zDetFace-Asset Visible-77', - 'zDetFace-Hidden/Asset Hidden-78', - 'zDetFace-In Trash/Recently Deleted-79', - 'zDetFace-Cloud Local State-80', - 'zDetFace-Training Type-81', - 'zDetFace.Pose Yaw-82', - 'zDetFace-Body Center X-83', - 'zDetFace-Body Center Y-84', - 'zDetFace-Body Height-85', - 'zDetFace-Body Width-86', - 'zDetFace-Roll-87', - 'zDetFace-Size-88', - 'zDetFace-Cluster Sequence Number-89', - 'zDetFace-Blur Score-90', - 'zDetFacePrint-Face Print Version-91', - 'zDetFaceGroup-UUID-92', - 'zDetFaceGroup-Person Builder State-93', - 'zDetFaceGroup-UnNamed Face Count-94', - 'zPerson-Face Count-95', - 'zDetFace-Face Algorithm Version-96', - 'zDetFace-Adjustment Version-97', - 'zPerson-In Person Naming Model-98', - 'zPerson-Key Face Pick Source Key-99', - 'zPerson-Manual Order Key-100', - 'zPerson-Question Type-101', - 'zPerson-Suggested For Client Type-102', - 'zPerson-Merge Target Person-103', - 'zPerson-Cloud Local State-104', - 'zFaceCrop-Cloud Local State-105', - 'zFaceCrop-Cloud Type-106', - 'zPerson-Cloud Delete State-107', - 'zFaceCrop-Cloud Delete State-108', - 'zDetFace-zPK-109', - 'zDetFacePrint-Face Key-110', - 'zPerson-KeyFace=zDetFace-zPK-111', - 'zFaceCrop-Face Key-112', - 'zPerson-zPK=zDetFace-Person-113', - 'zDetFace-PersonForFace= zPerson-zPK-114', - 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-115', - 'zDetFace-PersonForTorso= zPerson-zPK-116', - 'zDetFace-Person Being Key Face-117', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-118', - 'zDetFace-Face Print-119', - 'zDetFacePrint-zPK-120', - 'zDetFace-Face Crop-121', - 'zFaceCrop-zPK-122', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-123', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-124', - 'zPerson-Assoc Face Group Key-125', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-126', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-127', - 'zDetFaceGroup-zPK-128', - 'zPerson-Share Participant= zSharePartic-zPK-129', - 'zDetFace-UUID-130', - 'zFaceCrop-UUID-131', - 'zFaceCrop-Invalid Merge Candidate Person UUID-132', - 'zPerson-Person UUID-133', - 'zPerson-Person URI-134', - 'zDetFaceGroup-UUID-135', - 'zDetFace-AssetForFace= zAsset-zPK-136', - 'zDetFace-AssetForTorso= zAsset-zPK-137', - 'zFaceCrop-Asset Key-138', - 'zAsset-zPK-139', - 'zAddAssetAttr-zPK-140', - 'zAsset-UUID = store.cloudphotodb-141', - 'zAddAssetAttr-Master Fingerprint-142') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph16.1-People & Faces Asset Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph16.1-People & Faces Asset Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite people faces and basic asset data data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[27] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[133] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[27]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[133]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[133]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[34] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[131] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[34]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], + personcontactmatchingdictionary, + row[28], row[29], row[30], row[31], row[32], row[33], + facecropresourcedata_blob, + row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', + 'zAsset- Conversation= zGenAlbum_zPK-12', + ('zAsset-Trashed Date-13', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-15', + 'zAddAssetAttr-Imported by Bundle ID-16', + 'zAddAssetAttr-Imported By Display Name-17', + 'zCldMast-Imported by Bundle ID-18', + 'zCldMast-Imported by Display Name-19', + 'zAsset-Visibility State-20', + 'zFaceCrop-Face Area Points-21', + 'zAsset-Face Adjustment Version-22', + 'zAddAssetAttr-Face_Regions-SeeRawDBData-23', + 'zAddAssetAttr-Face Analysis Version-24', + 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-25', + 'zDetFacePrint-Data-SeeRawDBData-26', + 'zPerson-Contact Matching Dictionary-27', + 'zPerson-Verified Type-28', + 'zPerson-Display Name-29', + 'zPerson-Full Name-30', + 'zPerson-Cloud Verified Type-31', + 'zFaceCrop-State-32', + 'zFaceCrop-Type-33', + 'zFaceCrop-Resource Data-34', + 'zDetFace-Confirmed Face Crop Generation State-35', + 'zDetFace-Manual-36', + 'zDetFace-Detection Type-37', + 'zPerson-Detection Type-38', + 'zDetFace-VIP Model Type-39', + 'zDetFace-Name Source-40', + 'zDetFace-Cloud Name Source-41', + 'zPerson-Merge Candidate Confidence-42', + 'zPerson-Type-43', + 'zPerson-Gender Type-44', + 'zDetFace-Gender Type-45', + 'zDetFace-Center X-46', + 'zDetFace-Center Y-47', + 'zPerson-Age Type Estimate-48', + 'zDetFace-Age Type Estimate-49', + 'zDetFace-Ethnicity Type-50', + 'zDetFace-Skin Tone Type-51', + 'zDetFace-Hair Type-52', + 'zDetFace-Hair Color Type-53', + 'zDetFace-Head Gear Type-54', + 'zDetFace-Facial Hair Type-55', + 'zDetFace-Has Face Mask-56', + 'zDetFace-Pose Type-57', + 'zDetFace-Face Expression Type-58', + 'zDetFace-Has Smile-59', + 'zDetFace-Smile Type-60', + 'zDetFace-Lip Makeup Type-61', + 'zDetFace-Eyes State-62', + 'zDetFace-Is Left Eye Closed-63', + 'zDetFace-Is Right Eye Closed-64', + 'zDetFace-Gaze Center X-65', + 'zDetFace-Gaze Center Y-66', + 'zDetFace-Face Gaze Type-67', + 'zDetFace-Eye Glasses Type-68', + 'zDetFace-Eye Makeup Type-69', + 'zDetFace-Cluster Squence Number Key-70', + 'zDetFace-Grouping ID-71', + 'zDetFace-Master ID-72', + 'zDetFace-Quality-73', + 'zDetFace-Quality Measure-74', + 'zDetFace-Source Height-75', + 'zDetFace-Source Width-76', + 'zDetFace-Asset Visible-77', + 'zDetFace-Hidden/Asset Hidden-78', + 'zDetFace-In Trash/Recently Deleted-79', + 'zDetFace-Cloud Local State-80', + 'zDetFace-Training Type-81', + 'zDetFace.Pose Yaw-82', + 'zDetFace-Body Center X-83', + 'zDetFace-Body Center Y-84', + 'zDetFace-Body Height-85', + 'zDetFace-Body Width-86', + 'zDetFace-Roll-87', + 'zDetFace-Size-88', + 'zDetFace-Cluster Sequence Number-89', + 'zDetFace-Blur Score-90', + 'zDetFacePrint-Face Print Version-91', + 'zDetFaceGroup-UUID-92', + 'zDetFaceGroup-Person Builder State-93', + 'zDetFaceGroup-UnNamed Face Count-94', + 'zPerson-Face Count-95', + 'zDetFace-Face Algorithm Version-96', + 'zDetFace-Adjustment Version-97', + 'zPerson-In Person Naming Model-98', + 'zPerson-Key Face Pick Source Key-99', + 'zPerson-Manual Order Key-100', + 'zPerson-Question Type-101', + 'zPerson-Suggested For Client Type-102', + 'zPerson-Merge Target Person-103', + 'zPerson-Cloud Local State-104', + 'zFaceCrop-Cloud Local State-105', + 'zFaceCrop-Cloud Type-106', + 'zPerson-Cloud Delete State-107', + 'zFaceCrop-Cloud Delete State-108', + 'zDetFace-zPK-109', + 'zDetFacePrint-Face Key-110', + 'zPerson-KeyFace=zDetFace-zPK-111', + 'zFaceCrop-Face Key-112', + 'zPerson-zPK=zDetFace-Person-113', + 'zDetFace-PersonForFace= zPerson-zPK-114', + 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-115', + 'zDetFace-PersonForTorso= zPerson-zPK-116', + 'zDetFace-Person Being Key Face-117', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-118', + 'zDetFace-Face Print-119', + 'zDetFacePrint-zPK-120', + 'zDetFace-Face Crop-121', + 'zFaceCrop-zPK-122', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-123', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-124', + 'zPerson-Assoc Face Group Key-125', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-126', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-127', + 'zDetFaceGroup-zPK-128', + 'zPerson-Share Participant= zSharePartic-zPK-129', + 'zDetFace-UUID-130', + 'zFaceCrop-UUID-131', + 'zFaceCrop-Invalid Merge Candidate Person UUID-132', + 'zPerson-Person UUID-133', + 'zPerson-Person URI-134', + 'zDetFaceGroup-UUID-135', + 'zDetFace-AssetForFace= zAsset-zPK-136', + 'zDetFace-AssetForTorso= zAsset-zPK-137', + 'zFaceCrop-Asset Key-138', + 'zAsset-zPK-139', + 'zAddAssetAttr-zPK-140', + 'zAsset-UUID = store.cloudphotodb-141', + 'zAddAssetAttr-Master Fingerprint-142') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -2507,7 +2443,7 @@ def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_ WHEN 0 THEN '0-Obs in iOS 18 still testing-0' WHEN 1 THEN '1-Obs in iOS 18 still testing-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZHASPEOPLESCENEMIDORGREATERCONFIDENCE || '' - END AS 'zAddAssetAttr-Has_People_Scene Mid_Or_Greater_Confidence-iOS18', + END AS 'zAddAssetAttr-Has_People_Scene Mid_Or_Greater_Confidence', zAddAssetAttr.ZFACEANALYSISVERSION AS 'zAddAssetAttr-Face Analysis Version', zDetFace.ZASSETFORTEMPORALDETECTEDFACES AS 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK', CASE @@ -2520,7 +2456,7 @@ def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_ WHEN 1 THEN '1-Has_Contact Matching_Dictionary' ELSE 'Unknown-New-Value!: ' || zPerson.ZVERIFIEDTYPE || '' END AS 'zPerson-Verified Type', - zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-iOS18', + zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence', zPerson.ZDISPLAYNAME AS 'zPerson-Display Name', zPerson.ZFULLNAME AS 'zPerson-Full Name', CASE zPerson.ZCLOUDVERIFIEDTYPE @@ -2867,8 +2803,8 @@ def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_ zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES @@ -2885,252 +2821,231 @@ def get_ph16assetpeopledetfacephdapsql(files_found, report_folder, seeker, wrap_ LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP WHERE zDetFace.Z_PK > 0 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[28] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[135] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[28]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[135]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[135]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[36] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[133] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[36]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - personcontactmatchingdictionary, - row[29], row[30], row[31], row[32], row[33], row[34], row[35], - facecropresourcedata_blob, - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' basic asset, people and detected faces data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 18.' - report = ArtifactHtmlReport('Ph16.1-People & Faces Asset Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph16.1-People & Faces Asset Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', - 'zAsset- Conversation= zGenAlbum_zPK-12', - 'zAsset-Trashed Date-13', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-15', - 'zAddAssetAttr-Imported by Bundle ID-16', - 'zAddAssetAttr-Imported By Display Name-17', - 'zCldMast-Imported by Bundle ID-18', - 'zCldMast-Imported by Display Name-19', - 'zAsset-Visibility State-20', - 'zFaceCrop-Face Area Points-21', - 'zAddAssetAttr-Has_People_Scene Mid_Or_Greater_Confidence-iOS18-22', - 'zAsset-Face Adjustment Version-23', - 'zAddAssetAttr-Face_Regions-SeeRawDBData-24', - 'zAddAssetAttr-Face Analysis Version-25', - 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-26', - 'zDetFacePrint-Data-SeeRawDBData-27', - 'zPerson-Contact Matching Dictionary-28', - 'zPerson-Verified Type-29', - 'zPerson-Is_Me_Confidence-iOS18-30', - 'zPerson-Display Name-31', - 'zPerson-Full Name-32', - 'zPerson-Cloud Verified Type-33', - 'zFaceCrop-State-34', - 'zFaceCrop-Type-35', - 'zFaceCrop-Resource Data-36', - 'zDetFace-Confirmed Face Crop Generation State-37', - 'zDetFace-Manual-38', - 'zDetFace-Detection Type-39', - 'zPerson-Detection Type-40', - 'zDetFace-VIP Model Type-41', - 'zDetFace-Name Source-42', - 'zDetFace-Cloud Name Source-43', - 'zPerson-Merge Candidate Confidence-44', - 'zPerson-Type-45', - 'zPerson-Gender Type-46', - 'zDetFace-Gender Type-47', - 'zDetFace-Center X-48', - 'zDetFace-Center Y-49', - 'zPerson-Age Type Estimate-50', - 'zDetFace-Age Type Estimate-51', - 'zDetFace-Ethnicity Type-52', - 'zDetFace-Skin Tone Type-53', - 'zDetFace-Hair Type-54', - 'zDetFace-Hair Color Type-55', - 'zDetFace-Head Gear Type-56', - 'zDetFace-Facial Hair Type-57', - 'zDetFace-Has Face Mask-58', - 'zDetFace-Pose Type-59', - 'zDetFace-Face Expression Type-60', - 'zDetFace-Has Smile-61', - 'zDetFace-Smile Type-62', - 'zDetFace-Lip Makeup Type-63', - 'zDetFace-Eyes State-64', - 'zDetFace-Is Left Eye Closed-65', - 'zDetFace-Is Right Eye Closed-66', - 'zDetFace-Gaze Center X-67', - 'zDetFace-Gaze Center Y-68', - 'zDetFace-Face Gaze Type-69', - 'zDetFace-Eye Glasses Type-70', - 'zDetFace-Eye Makeup Type-71', - 'zDetFace-Cluster Squence Number Key-72', - 'zDetFace-Grouping ID-73', - 'zDetFace-Master ID-74', - 'zDetFace-Quality-75', - 'zDetFace-Quality Measure-76', - 'zDetFace-Source Height-77', - 'zDetFace-Source Width-78', - 'zDetFace-Asset Visible-79', - 'zDetFace-Hidden/Asset Hidden-80', - 'zDetFace-In Trash/Recently Deleted-81', - 'zDetFace-Cloud Local State-82', - 'zDetFace-Training Type-83', - 'zDetFace.Pose Yaw-84', - 'zDetFace-Body Center X-85', - 'zDetFace-Body Center Y-86', - 'zDetFace-Body Height-87', - 'zDetFace-Body Width-88', - 'zDetFace-Roll-89', - 'zDetFace-Size-90', - 'zDetFace-Cluster Sequence Number-91', - 'zDetFace-Blur Score-92', - 'zDetFacePrint-Face Print Version-93', - 'zDetFaceGroup-UUID-94', - 'zDetFaceGroup-Person Builder State-95', - 'zDetFaceGroup-UnNamed Face Count-96', - 'zPerson-Face Count-97', - 'zDetFace-Face Algorithm Version-98', - 'zDetFace-Adjustment Version-99', - 'zPerson-In Person Naming Model-100', - 'zPerson-Key Face Pick Source Key-101', - 'zPerson-Manual Order Key-102', - 'zPerson-Question Type-103', - 'zPerson-Suggested For Client Type-104', - 'zPerson-Merge Target Person-105', - 'zPerson-Cloud Local State-106', - 'zFaceCrop-Cloud Local State-107', - 'zFaceCrop-Cloud Type-108', - 'zPerson-Cloud Delete State-109', - 'zFaceCrop-Cloud Delete State-110', - 'zDetFace-zPK-111', - 'zDetFacePrint-Face Key-112', - 'zPerson-KeyFace=zDetFace-zPK-113', - 'zFaceCrop-Face Key-114', - 'zPerson-zPK=zDetFace-Person-115', - 'zDetFace-PersonForFace= zPerson-zPK-116', - 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-117', - 'zDetFace-PersonForTorso= zPerson-zPK-118', - 'zDetFace-Person Being Key Face-119', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-120', - 'zDetFace-Face Print-121', - 'zDetFacePrint-zPK-122', - 'zDetFace-Face Crop-123', - 'zFaceCrop-zPK-124', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-125', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-126', - 'zPerson-Assoc Face Group Key-127', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-128', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-129', - 'zDetFaceGroup-zPK-130', - 'zPerson-Share Participant= zSharePartic-zPK-131', - 'zDetFace-UUID-132', - 'zFaceCrop-UUID-133', - 'zFaceCrop-Invalid Merge Candidate Person UUID-134', - 'zPerson-Person UUID-135', - 'zPerson-Person URI-136', - 'zDetFaceGroup-UUID-137', - 'zDetFace-AssetForFace= zAsset-zPK-138', - 'zDetFace-AssetForTorso= zAsset-zPK-139', - 'zFaceCrop-Asset Key-140', - 'zAsset-zPK-141', - 'zAddAssetAttr-zPK-142', - 'zAsset-UUID = store.cloudphotodb-143', - 'zAddAssetAttr-Original Stable Hash-iOS18-144', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-145') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph16.1-People & Faces Asset Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph16.1-People & Faces Asset Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite people faces and basic asset data data') - - db.close() - return - - -def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset): - - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[28] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[135] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[28]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[135]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[135]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[36] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[133] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[36]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + personcontactmatchingdictionary, + row[29], row[30], row[31], row[32], row[33], row[34], row[35], + facecropresourcedata_blob, + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', + 'zAsset- Conversation= zGenAlbum_zPK-12', + ('zAsset-Trashed Date-13', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-15', + 'zAddAssetAttr-Imported by Bundle ID-16', + 'zAddAssetAttr-Imported By Display Name-17', + 'zCldMast-Imported by Bundle ID-18', + 'zCldMast-Imported by Display Name-19', + 'zAsset-Visibility State-20', + 'zFaceCrop-Face Area Points-21', + 'zAddAssetAttr-Has_People_Scene Mid_Or_Greater_Confidence-22', + 'zAsset-Face Adjustment Version-23', + 'zAddAssetAttr-Face_Regions-SeeRawDBData-24', + 'zAddAssetAttr-Face Analysis Version-25', + 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-26', + 'zDetFacePrint-Data-SeeRawDBData-27', + 'zPerson-Contact Matching Dictionary-28', + 'zPerson-Verified Type-29', + 'zPerson-Is_Me_Confidence-30', + 'zPerson-Display Name-31', + 'zPerson-Full Name-32', + 'zPerson-Cloud Verified Type-33', + 'zFaceCrop-State-34', + 'zFaceCrop-Type-35', + 'zFaceCrop-Resource Data-36', + 'zDetFace-Confirmed Face Crop Generation State-37', + 'zDetFace-Manual-38', + 'zDetFace-Detection Type-39', + 'zPerson-Detection Type-40', + 'zDetFace-VIP Model Type-41', + 'zDetFace-Name Source-42', + 'zDetFace-Cloud Name Source-43', + 'zPerson-Merge Candidate Confidence-44', + 'zPerson-Type-45', + 'zPerson-Gender Type-46', + 'zDetFace-Gender Type-47', + 'zDetFace-Center X-48', + 'zDetFace-Center Y-49', + 'zPerson-Age Type Estimate-50', + 'zDetFace-Age Type Estimate-51', + 'zDetFace-Ethnicity Type-52', + 'zDetFace-Skin Tone Type-53', + 'zDetFace-Hair Type-54', + 'zDetFace-Hair Color Type-55', + 'zDetFace-Head Gear Type-56', + 'zDetFace-Facial Hair Type-57', + 'zDetFace-Has Face Mask-58', + 'zDetFace-Pose Type-59', + 'zDetFace-Face Expression Type-60', + 'zDetFace-Has Smile-61', + 'zDetFace-Smile Type-62', + 'zDetFace-Lip Makeup Type-63', + 'zDetFace-Eyes State-64', + 'zDetFace-Is Left Eye Closed-65', + 'zDetFace-Is Right Eye Closed-66', + 'zDetFace-Gaze Center X-67', + 'zDetFace-Gaze Center Y-68', + 'zDetFace-Face Gaze Type-69', + 'zDetFace-Eye Glasses Type-70', + 'zDetFace-Eye Makeup Type-71', + 'zDetFace-Cluster Squence Number Key-72', + 'zDetFace-Grouping ID-73', + 'zDetFace-Master ID-74', + 'zDetFace-Quality-75', + 'zDetFace-Quality Measure-76', + 'zDetFace-Source Height-77', + 'zDetFace-Source Width-78', + 'zDetFace-Asset Visible-79', + 'zDetFace-Hidden/Asset Hidden-80', + 'zDetFace-In Trash/Recently Deleted-81', + 'zDetFace-Cloud Local State-82', + 'zDetFace-Training Type-83', + 'zDetFace.Pose Yaw-84', + 'zDetFace-Body Center X-85', + 'zDetFace-Body Center Y-86', + 'zDetFace-Body Height-87', + 'zDetFace-Body Width-88', + 'zDetFace-Roll-89', + 'zDetFace-Size-90', + 'zDetFace-Cluster Sequence Number-91', + 'zDetFace-Blur Score-92', + 'zDetFacePrint-Face Print Version-93', + 'zDetFaceGroup-UUID-94', + 'zDetFaceGroup-Person Builder State-95', + 'zDetFaceGroup-UnNamed Face Count-96', + 'zPerson-Face Count-97', + 'zDetFace-Face Algorithm Version-98', + 'zDetFace-Adjustment Version-99', + 'zPerson-In Person Naming Model-100', + 'zPerson-Key Face Pick Source Key-101', + 'zPerson-Manual Order Key-102', + 'zPerson-Question Type-103', + 'zPerson-Suggested For Client Type-104', + 'zPerson-Merge Target Person-105', + 'zPerson-Cloud Local State-106', + 'zFaceCrop-Cloud Local State-107', + 'zFaceCrop-Cloud Type-108', + 'zPerson-Cloud Delete State-109', + 'zFaceCrop-Cloud Delete State-110', + 'zDetFace-zPK-111', + 'zDetFacePrint-Face Key-112', + 'zPerson-KeyFace=zDetFace-zPK-113', + 'zFaceCrop-Face Key-114', + 'zPerson-zPK=zDetFace-Person-115', + 'zDetFace-PersonForFace= zPerson-zPK-116', + 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-117', + 'zDetFace-PersonForTorso= zPerson-zPK-118', + 'zDetFace-Person Being Key Face-119', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-120', + 'zDetFace-Face Print-121', + 'zDetFacePrint-zPK-122', + 'zDetFace-Face Crop-123', + 'zFaceCrop-zPK-124', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-125', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-126', + 'zPerson-Assoc Face Group Key-127', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-128', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-129', + 'zDetFaceGroup-zPK-130', + 'zPerson-Share Participant= zSharePartic-zPK-131', + 'zDetFace-UUID-132', + 'zFaceCrop-UUID-133', + 'zFaceCrop-Invalid Merge Candidate Person UUID-134', + 'zPerson-Person UUID-135', + 'zPerson-Person URI-136', + 'zDetFaceGroup-UUID-137', + 'zDetFace-AssetForFace= zAsset-zPK-138', + 'zDetFace-AssetForTorso= zAsset-zPK-139', + 'zFaceCrop-Asset Key-140', + 'zAsset-zPK-141', + 'zAddAssetAttr-zPK-142', + 'zAsset-UUID = store.cloudphotodb-143', + 'zAddAssetAttr-Original Stable Hash-144', + 'zAddAssetAttr.Adjusted Stable Hash-145') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + +@artifact_processor +def Ph16_2PeopleFacesAssetDataSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) + + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("13.7"): - logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite basic asset people and face data iOS " + iosversion) + logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -3447,207 +3362,186 @@ def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_te LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP WHERE zDetFace.Z_PK > 0 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[22] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[108] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[22]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[108]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[108]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[29] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[106] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[29]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], - personcontactmatchingdictionary, - row[23], row[24], row[25], row[26], row[27], row[28], - facecropresourcedata_blob, - row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite for' \ - ' basic asset, people and detected faces data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 14.' - report = ArtifactHtmlReport('Ph16.2-People & Faces Asset Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph16.2-People & Faces Asset Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zAsset-Trashed Date-11', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-12', - 'zAddAssetAttr-Creator Bundle ID-13', - 'zAddAssetAttr-Imported By Display Name-14', - 'zCldMast-Imported by Bundle ID-15', - 'zCldMast-Imported by Display Name-16', - 'zAsset-Visibility State-17', - 'zFaceCrop-Face Area Points-18', - 'zAsset-Face Adjustment Version-19', - 'zAddAssetAttr-Face_Regions-SeeRawDBData-20', - 'zDetFacePrint-Data-SeeRawDBData-21', - 'zPerson-Contact Matching Dictionary-22', - 'zPerson-Verified Type-23', - 'zPerson-Display Name-24', - 'zPerson-Full Name-25', - 'zPerson-Cloud Verified Type-26', - 'zFaceCrop-State-27', - 'zFaceCrop-Type-28', - 'zFaceCrop-Resource Data-29', - 'zDetFace-Confirmed Face Crop Generation State-30', - 'zDetFace-Manual-31', - 'zDetFace-VIP Model Type-32', - 'zDetFace-Name Source-33', - 'zDetFace-Cloud Name Source-34', - 'zPerson-Type-35', - 'zPerson-Gender Type-36', - 'zDetFace-Gender Type-37', - 'zDetFace-Center X-38', - 'zDetFace-Center Y-39', - 'zPerson-Age Type Estimate-40', - 'zDetFace-Age Type Estimate-41', - 'zDetFace-Hair Color Type-42', - 'zDetFace-Facial Hair Type-43', - 'zDetFace-Has Smile-44', - 'zDetFace-Smile Type-45', - 'zDetFace-Lip Makeup Type-46', - 'zDetFace-Eyes State-47', - 'zDetFace-Is Left Eye Closed-48', - 'zDetFace-Is Right Eye Closed-49', - 'zDetFace-Eye Glasses Type-50', - 'zDetFace-Eye Makeup Type-51', - 'zDetFace-Cluster Sequence Number Key-52', - 'zDetFace-Grouping ID-53', - 'zDetFace-Master ID-54', - 'zDetFace-Quality-55', - 'zDetFace-Quality Measure-56', - 'zDetFace-Source Height-57', - 'zDetFace-Source Width-58', - 'zDetFace-Asset Visible-59', - 'zDetFace-Hidden/Asset Hidden-60', - 'zDetFace-In Trash/Recently Deleted-61', - 'zDetFace-Cloud Local State-62', - 'zDetFace-Training Type-63', - 'zDetFace.Pose Yaw-64', - 'zDetFace-Roll-65', - 'zDetFace-Size-66', - 'zDetFace-Cluster Sequence Number-67', - 'zDetFace-Blur Score-68', - 'zDetFacePrint-Face Print Version-69', - 'zDetFaceGroup-UUID-70', - 'zDetFaceGroup-Person Builder State-71', - 'zDetFaceGroup-UnNamed Face Count-72', - 'zPerson-Face Count-73', - 'zDetFace-Face Algorithm Version-74', - 'zDetFace-Adjustment Version-75', - 'zPerson-In Person Naming Model-76', - 'zPerson-Key Face Pick Source Key-77', - 'zPerson-Manual Order Key-78', - 'zPerson-Question Type-79', - 'zPerson-Suggested For Client Type-80', - 'zPerson-Merge Target Person-81', - 'zPerson-Cloud Local State-82', - 'zFaceCrop-Cloud Local State-83', - 'zFaceCrop-Cloud Type-84', - 'zPerson-Cloud Delete State-85', - 'zFaceCrop-Cloud Delete State-86', - 'zDetFace-zPK-87', - 'zDetFacePrint-Face Key-88', - 'zPerson-KeyFace=zDetFace-zPK-89', - 'zFaceCrop-Face Key-90', - 'zPerson-zPK=zDetFace-Person-91', - 'zDetFace-PersonForFace= zPerson-zPK-92', - 'zDetFace-Person Being Key Face-93', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-94', - 'zDetFace-Face Print-95', - 'zDetFacePrint-zPK-96', - 'zDetFace-Face Crop-97', - 'zFaceCrop-zPK-98', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-99', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-100', - 'zPerson-Assoc Face Group Key-101', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-102', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-103', - 'zDetFaceGroup-zPK-104', - 'zDetFace-UUID-105', - 'zFaceCrop-UUID-106', - 'zFaceCrop-Invalid Merge Candidate Person UUID-107', - 'zPerson-Person UUID-108', - 'zPerson-Person URI-109', - 'zDetFaceGroup-UUID-110', - 'zDetFace-AssetForFace= zAsset-zPK-111', - 'zFaceCrop-Asset Key-112', - 'zAsset-zPK-113', - 'zAddAssetAttr-zPK-114', - 'zAsset-UUID = store.cloudphotodb-115', - 'zAddAssetAttr-Master Fingerprint-116') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph16.2-People & Faces Asset Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph16.2-People & Faces Asset Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people faces and basic asset data data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[22] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[108] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[22]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[108]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[108]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[29] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[106] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[29]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], + personcontactmatchingdictionary, + row[23], row[24], row[25], row[26], row[27], row[28], + facecropresourcedata_blob, + row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + ('zAsset-Trashed Date-11', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-12', + 'zAddAssetAttr-Creator Bundle ID-13', + 'zAddAssetAttr-Imported By Display Name-14', + 'zCldMast-Imported by Bundle ID-15', + 'zCldMast-Imported by Display Name-16', + 'zAsset-Visibility State-17', + 'zFaceCrop-Face Area Points-18', + 'zAsset-Face Adjustment Version-19', + 'zAddAssetAttr-Face_Regions-SeeRawDBData-20', + 'zDetFacePrint-Data-SeeRawDBData-21', + 'zPerson-Contact Matching Dictionary-22', + 'zPerson-Verified Type-23', + 'zPerson-Display Name-24', + 'zPerson-Full Name-25', + 'zPerson-Cloud Verified Type-26', + 'zFaceCrop-State-27', + 'zFaceCrop-Type-28', + 'zFaceCrop-Resource Data-29', + 'zDetFace-Confirmed Face Crop Generation State-30', + 'zDetFace-Manual-31', + 'zDetFace-VIP Model Type-32', + 'zDetFace-Name Source-33', + 'zDetFace-Cloud Name Source-34', + 'zPerson-Type-35', + 'zPerson-Gender Type-36', + 'zDetFace-Gender Type-37', + 'zDetFace-Center X-38', + 'zDetFace-Center Y-39', + 'zPerson-Age Type Estimate-40', + 'zDetFace-Age Type Estimate-41', + 'zDetFace-Hair Color Type-42', + 'zDetFace-Facial Hair Type-43', + 'zDetFace-Has Smile-44', + 'zDetFace-Smile Type-45', + 'zDetFace-Lip Makeup Type-46', + 'zDetFace-Eyes State-47', + 'zDetFace-Is Left Eye Closed-48', + 'zDetFace-Is Right Eye Closed-49', + 'zDetFace-Eye Glasses Type-50', + 'zDetFace-Eye Makeup Type-51', + 'zDetFace-Cluster Sequence Number Key-52', + 'zDetFace-Grouping ID-53', + 'zDetFace-Master ID-54', + 'zDetFace-Quality-55', + 'zDetFace-Quality Measure-56', + 'zDetFace-Source Height-57', + 'zDetFace-Source Width-58', + 'zDetFace-Asset Visible-59', + 'zDetFace-Hidden/Asset Hidden-60', + 'zDetFace-In Trash/Recently Deleted-61', + 'zDetFace-Cloud Local State-62', + 'zDetFace-Training Type-63', + 'zDetFace.Pose Yaw-64', + 'zDetFace-Roll-65', + 'zDetFace-Size-66', + 'zDetFace-Cluster Sequence Number-67', + 'zDetFace-Blur Score-68', + 'zDetFacePrint-Face Print Version-69', + 'zDetFaceGroup-UUID-70', + 'zDetFaceGroup-Person Builder State-71', + 'zDetFaceGroup-UnNamed Face Count-72', + 'zPerson-Face Count-73', + 'zDetFace-Face Algorithm Version-74', + 'zDetFace-Adjustment Version-75', + 'zPerson-In Person Naming Model-76', + 'zPerson-Key Face Pick Source Key-77', + 'zPerson-Manual Order Key-78', + 'zPerson-Question Type-79', + 'zPerson-Suggested For Client Type-80', + 'zPerson-Merge Target Person-81', + 'zPerson-Cloud Local State-82', + 'zFaceCrop-Cloud Local State-83', + 'zFaceCrop-Cloud Type-84', + 'zPerson-Cloud Delete State-85', + 'zFaceCrop-Cloud Delete State-86', + 'zDetFace-zPK-87', + 'zDetFacePrint-Face Key-88', + 'zPerson-KeyFace=zDetFace-zPK-89', + 'zFaceCrop-Face Key-90', + 'zPerson-zPK=zDetFace-Person-91', + 'zDetFace-PersonForFace= zPerson-zPK-92', + 'zDetFace-Person Being Key Face-93', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-94', + 'zDetFace-Face Print-95', + 'zDetFacePrint-zPK-96', + 'zDetFace-Face Crop-97', + 'zFaceCrop-zPK-98', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-99', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-100', + 'zPerson-Assoc Face Group Key-101', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-102', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-103', + 'zDetFaceGroup-zPK-104', + 'zDetFace-UUID-105', + 'zFaceCrop-UUID-106', + 'zFaceCrop-Invalid Merge Candidate Person UUID-107', + 'zPerson-Person UUID-108', + 'zPerson-Person URI-109', + 'zDetFaceGroup-UUID-110', + 'zDetFace-AssetForFace= zAsset-zPK-111', + 'zFaceCrop-Asset Key-112', + 'zAsset-zPK-113', + 'zAddAssetAttr-zPK-114', + 'zAsset-UUID = store.cloudphotodb-115', + 'zAddAssetAttr-Master Fingerprint-116') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -4055,229 +3949,208 @@ def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_te LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP WHERE zDetFace.Z_PK > 0 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[25] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[127] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[25]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[127]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[127]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[32] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[125] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[32]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], - personcontactmatchingdictionary, - row[26], row[27], - row[28], row[29], row[30], row[31], - facecropresourcedata_blob, - row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite for' \ - ' basic asset, people and detected faces data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 15.' - report = ArtifactHtmlReport('Ph16.2-People & Faces Asset Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph16.2-People & Faces Asset Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', - 'zAsset- Conversation= zGenAlbum_zPK-12', - 'zAsset-Trashed Date-13', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', - 'zAddAssetAttr-Imported by Bundle ID-15', - 'zAddAssetAttr-Imported By Display Name-16', - 'zCldMast-Imported by Bundle ID-17', - 'zCldMast-Imported by Display Name-18', - 'zAsset-Visibility State-19', - 'zFaceCrop-Face Area Points-20', - 'zAsset-Face Adjustment Version-21', - 'zAddAssetAttr-Face_Regions-SeeRawDBData-22', - 'zAddAssetAttr-Face Analysis Version-23', - 'zDetFacePrint-Data-SeeRawDBData-24', - 'zPerson-Contact Matching Dictionary-25', - 'zPerson-Verified Type-26', - 'zPerson-Display Name-27', - 'zPerson-Full Name-28', - 'zPerson-Cloud Verified Type-29', - 'zFaceCrop-State-30', - 'zFaceCrop-Type-31', - 'zFaceCrop-Resource Data-32', - 'zDetFace-Confirmed Face Crop Generation State-33', - 'zDetFace-Manual-34', - 'zDetFace-Detection Type-35', - 'zPerson-Detection Type-36', - 'zDetFace-VIP Model Type-37', - 'zDetFace-Name Source-38', - 'zDetFace-Cloud Name Source-39', - 'zPerson-Type-40', - 'zPerson-Gender Type-41', - 'zDetFace-Gender Type-42', - 'zDetFace-Center X-43', - 'zDetFace-Center Y-44', - 'zPerson-Age Type Estimate-45', - 'zDetFace-Age Type Estimate-46', - 'zDetFace-Ethnicity Type-47', - 'zDetFace-Skin Tone Type-48', - 'zDetFace-Hair Type-49', - 'zDetFace-Hair Color Type-50', - 'zDetFace-Head Gear Type-51', - 'zDetFace-Facial Hair Type-52', - 'zDetFace-Has Face Mask-53', - 'zDetFace-Pose Type-54', - 'zDetFace-Face Expression Type-55', - 'zDetFace-Has Smile-56', - 'zDetFace-Smile Type-57', - 'zDetFace-Lip Makeup Type-58', - 'zDetFace-Eyes State-59', - 'zDetFace-Is Left Eye Closed-60', - 'zDetFace-Is Right Eye Closed-61', - 'zDetFace-Gaze Center X-62', - 'zDetFace-Gaze Center Y-63', - 'zDetFace-Face Gaze Type-64', - 'zDetFace-Eye Glasses Type-65', - 'zDetFace-Eye Makeup Type-66', - 'zDetFace-Cluster Sequence Number Key-67', - 'zDetFace-Grouping ID-68', - 'zDetFace-Master ID-69', - 'zDetFace-Quality-70', - 'zDetFace-Quality Measure-71', - 'zDetFace-Source Height-72', - 'zDetFace-Source Width-73', - 'zDetFace-Asset Visible-74', - 'zDetFace-Hidden/Asset Hidden-75', - 'zDetFace-In Trash/Recently Deleted-76', - 'zDetFace-Cloud Local State-77', - 'zDetFace-Training Type-78', - 'zDetFace.Pose Yaw-79', - 'zDetFace-Body Center X-80', - 'zDetFace-Body Center Y-81', - 'zDetFace-Body Height-82', - 'zDetFace-Body Width-83', - 'zDetFace-Roll-84', - 'zDetFace-Size-85', - 'zDetFace-Cluster Squence Number-86', - 'zDetFace-Blur Score-87', - 'zDetFacePrint-Face Print Version-88', - 'zDetFaceGroup-UUID-89', - 'zDetFaceGroup-Person Builder State-90', - 'zDetFaceGroup-UnNamed Face Count-91', - 'zPerson-Face Count-92', - 'zDetFace-Face Algorithm Version-93', - 'zDetFace-Adjustment Version-94', - 'zPerson-In Person Naming Model-95', - 'zPerson-Key Face Pick Source Key-96', - 'zPerson-Manual Order Key-97', - 'zPerson-Question Type-98', - 'zPerson-Suggested For Client Type-99', - 'zPerson-Merge Target Person-100', - 'zPerson-Cloud Local State-101', - 'zFaceCrop-Cloud Local State-102', - 'zFaceCrop-Cloud Type-103', - 'zPerson-Cloud Delete State-104', - 'zFaceCrop-Cloud Delete State-105', - 'zDetFace-zPK-106', - 'zDetFacePrint-Face Key-107', - 'zPerson-KeyFace=zDetFace-zPK-108', - 'zFaceCrop-Face Key-109', - 'zPerson-zPK=zDetFace-Person-110', - 'zDetFace-PersonForFace= zPerson-zPK-111', - 'zDetFace-Person Being Key Face-112', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-113', - 'zDetFace-Face Print-114', - 'zDetFacePrint-zPK-115', - 'zDetFace-Face Crop-116', - 'zFaceCrop-zPK-117', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-118', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-119', - 'zPerson-Assoc Face Group Key-120', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-121', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-122', - 'zDetFaceGroup-zPK-123', - 'zDetFace-UUID-124', - 'zFaceCrop-UUID-125', - 'zFaceCrop-Invalid Merge Candidate Person UUID-126', - 'zPerson-Person UUID-127', - 'zPerson-Person URI-128', - 'zDetFaceGroup-UUID-129', - 'zDetFace-AssetForFace= zAsset-zPK-130', - 'zFaceCrop-Asset Key-131', - 'zAsset-zPK-132', - 'zAddAssetAttr-zPK-133', - 'zAsset-UUID = store.cloudphotodb-134', - 'zAddAssetAttr-Master Fingerprint-135') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph16.2-People & Faces Asset Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph16.2-People & Faces Asset Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people faces and basic asset data data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[25] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[127] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[25]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[127]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[127]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[32] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[125] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[32]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], + personcontactmatchingdictionary, + row[26], row[27], + row[28], row[29], row[30], row[31], + facecropresourcedata_blob, + row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', + 'zAsset- Conversation= zGenAlbum_zPK-12', + ('zAsset-Trashed Date-13', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', + 'zAddAssetAttr-Imported by Bundle ID-15', + 'zAddAssetAttr-Imported By Display Name-16', + 'zCldMast-Imported by Bundle ID-17', + 'zCldMast-Imported by Display Name-18', + 'zAsset-Visibility State-19', + 'zFaceCrop-Face Area Points-20', + 'zAsset-Face Adjustment Version-21', + 'zAddAssetAttr-Face_Regions-SeeRawDBData-22', + 'zAddAssetAttr-Face Analysis Version-23', + 'zDetFacePrint-Data-SeeRawDBData-24', + 'zPerson-Contact Matching Dictionary-25', + 'zPerson-Verified Type-26', + 'zPerson-Display Name-27', + 'zPerson-Full Name-28', + 'zPerson-Cloud Verified Type-29', + 'zFaceCrop-State-30', + 'zFaceCrop-Type-31', + 'zFaceCrop-Resource Data-32', + 'zDetFace-Confirmed Face Crop Generation State-33', + 'zDetFace-Manual-34', + 'zDetFace-Detection Type-35', + 'zPerson-Detection Type-36', + 'zDetFace-VIP Model Type-37', + 'zDetFace-Name Source-38', + 'zDetFace-Cloud Name Source-39', + 'zPerson-Type-40', + 'zPerson-Gender Type-41', + 'zDetFace-Gender Type-42', + 'zDetFace-Center X-43', + 'zDetFace-Center Y-44', + 'zPerson-Age Type Estimate-45', + 'zDetFace-Age Type Estimate-46', + 'zDetFace-Ethnicity Type-47', + 'zDetFace-Skin Tone Type-48', + 'zDetFace-Hair Type-49', + 'zDetFace-Hair Color Type-50', + 'zDetFace-Head Gear Type-51', + 'zDetFace-Facial Hair Type-52', + 'zDetFace-Has Face Mask-53', + 'zDetFace-Pose Type-54', + 'zDetFace-Face Expression Type-55', + 'zDetFace-Has Smile-56', + 'zDetFace-Smile Type-57', + 'zDetFace-Lip Makeup Type-58', + 'zDetFace-Eyes State-59', + 'zDetFace-Is Left Eye Closed-60', + 'zDetFace-Is Right Eye Closed-61', + 'zDetFace-Gaze Center X-62', + 'zDetFace-Gaze Center Y-63', + 'zDetFace-Face Gaze Type-64', + 'zDetFace-Eye Glasses Type-65', + 'zDetFace-Eye Makeup Type-66', + 'zDetFace-Cluster Sequence Number Key-67', + 'zDetFace-Grouping ID-68', + 'zDetFace-Master ID-69', + 'zDetFace-Quality-70', + 'zDetFace-Quality Measure-71', + 'zDetFace-Source Height-72', + 'zDetFace-Source Width-73', + 'zDetFace-Asset Visible-74', + 'zDetFace-Hidden/Asset Hidden-75', + 'zDetFace-In Trash/Recently Deleted-76', + 'zDetFace-Cloud Local State-77', + 'zDetFace-Training Type-78', + 'zDetFace.Pose Yaw-79', + 'zDetFace-Body Center X-80', + 'zDetFace-Body Center Y-81', + 'zDetFace-Body Height-82', + 'zDetFace-Body Width-83', + 'zDetFace-Roll-84', + 'zDetFace-Size-85', + 'zDetFace-Cluster Squence Number-86', + 'zDetFace-Blur Score-87', + 'zDetFacePrint-Face Print Version-88', + 'zDetFaceGroup-UUID-89', + 'zDetFaceGroup-Person Builder State-90', + 'zDetFaceGroup-UnNamed Face Count-91', + 'zPerson-Face Count-92', + 'zDetFace-Face Algorithm Version-93', + 'zDetFace-Adjustment Version-94', + 'zPerson-In Person Naming Model-95', + 'zPerson-Key Face Pick Source Key-96', + 'zPerson-Manual Order Key-97', + 'zPerson-Question Type-98', + 'zPerson-Suggested For Client Type-99', + 'zPerson-Merge Target Person-100', + 'zPerson-Cloud Local State-101', + 'zFaceCrop-Cloud Local State-102', + 'zFaceCrop-Cloud Type-103', + 'zPerson-Cloud Delete State-104', + 'zFaceCrop-Cloud Delete State-105', + 'zDetFace-zPK-106', + 'zDetFacePrint-Face Key-107', + 'zPerson-KeyFace=zDetFace-zPK-108', + 'zFaceCrop-Face Key-109', + 'zPerson-zPK=zDetFace-Person-110', + 'zDetFace-PersonForFace= zPerson-zPK-111', + 'zDetFace-Person Being Key Face-112', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-113', + 'zDetFace-Face Print-114', + 'zDetFacePrint-zPK-115', + 'zDetFace-Face Crop-116', + 'zFaceCrop-zPK-117', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-118', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-119', + 'zPerson-Assoc Face Group Key-120', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-121', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-122', + 'zDetFaceGroup-zPK-123', + 'zDetFace-UUID-124', + 'zFaceCrop-UUID-125', + 'zFaceCrop-Invalid Merge Candidate Person UUID-126', + 'zPerson-Person UUID-127', + 'zPerson-Person URI-128', + 'zDetFaceGroup-UUID-129', + 'zDetFace-AssetForFace= zAsset-zPK-130', + 'zFaceCrop-Asset Key-131', + 'zAsset-zPK-132', + 'zAddAssetAttr-zPK-133', + 'zAsset-UUID = store.cloudphotodb-134', + 'zAddAssetAttr-Master Fingerprint-135') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -4688,231 +4561,210 @@ def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_te LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP WHERE zDetFace.Z_PK > 0 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[26] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[130] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[26]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[130]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[130]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[33] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[128] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[33]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], - personcontactmatchingdictionary, - row[27], row[28], row[29], row[30], row[31], row[32], - facecropresourcedata_blob, - row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite for' \ - ' basic asset, people and detected faces data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 16.' - report = ArtifactHtmlReport('Ph16.2-People & Faces Asset Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph16.2-People & Faces Asset Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', - 'zAsset- Conversation= zGenAlbum_zPK-12', - 'zAsset-Trashed Date-13', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-15', - 'zAddAssetAttr-Imported by Bundle ID-16', - 'zAddAssetAttr-Imported By Display Name-17', - 'zCldMast-Imported by Bundle ID-18', - 'zCldMast-Imported by Display Name-19', - 'zAsset-Visibility State-20', - 'zFaceCrop-Face Area Points-21', - 'zAsset-Face Adjustment Version-22', - 'zAddAssetAttr-Face_Regions-SeeRawDBData-23', - 'zAddAssetAttr-Face Analysis Version-24', - 'zDetFacePrint-Data-SeeRawDBData-25', - 'zPerson-Contact Matching Dictionary-26', - 'zPerson-Verified Type-27', - 'zPerson-Display Name-28', - 'zPerson-Full Name-29', - 'zPerson-Cloud Verified Type-30', - 'zFaceCrop-State-31', - 'zFaceCrop-Type-32', - 'zFaceCrop-Resource Data-33', - 'zDetFace-Confirmed Face Crop Generation State-34', - 'zDetFace-Manual-35', - 'zDetFace-Detection Type-36', - 'zPerson-Detection Type-37', - 'zDetFace-VIP Model Type-38', - 'zDetFace-Name Source-39', - 'zDetFace-Cloud Name Source-40', - 'zPerson-Merge Candidate Confidence-41', - 'zPerson-Type-42', - 'zPerson-Gender Type-43', - 'zDetFace-Gender Type-44', - 'zDetFace-Center X-45', - 'zDetFace-Center Y-46', - 'zPerson-Age Type Estimate-47', - 'zDetFace-Age Type Estimate-48', - 'zDetFace-Ethnicity Type-49', - 'zDetFace-Skin Tone Type-50', - 'zDetFace-Hair Type-51', - 'zDetFace-Hair Color Type-52', - 'zDetFace-Head Gear Type-53', - 'zDetFace-Facial Hair Type-54', - 'zDetFace-Has Face Mask-55', - 'zDetFace-Pose Type-56', - 'zDetFace-Face Expression Type-57', - 'zDetFace-Has Smile-58', - 'zDetFace-Smile Type-59', - 'zDetFace-Lip Makeup Type-60', - 'zDetFace-Eyes State-61', - 'zDetFace-Is Left Eye Closed-62', - 'zDetFace-Is Right Eye Closed-63', - 'zDetFace-Gaze Center X-64', - 'zDetFace-Gaze Center Y-65', - 'zDetFace-Face Gaze Type-66', - 'zDetFace-Eye Glasses Type-67', - 'zDetFace-Eye Makeup Type-68', - 'zDetFace-Cluster Sequence Number Key-69', - 'zDetFace-Grouping ID-70', - 'zDetFace-Master ID-71', - 'zDetFace-Quality-72', - 'zDetFace-Quality Measure-73', - 'zDetFace-Source Height-74', - 'zDetFace-Source Width-75', - 'zDetFace-Asset Visible-76', - 'zDetFace-Hidden/Asset Hidden-77', - 'zDetFace-In Trash/Recently Deleted-78', - 'zDetFace-Cloud Local State-79', - 'zDetFace-Training Type-80', - 'zDetFace.Pose Yaw-81', - 'zDetFace-Body Center X-82', - 'zDetFace-Body Center Y-83', - 'zDetFace-Body Height-84', - 'zDetFace-Body Width-85', - 'zDetFace-Roll-86', - 'zDetFace-Size-87', - 'zDetFace-Cluster Sequence Number-88', - 'zDetFace-Blur Score-89', - 'zDetFacePrint-Face Print Version-90', - 'zDetFaceGroup-UUID-91', - 'zDetFaceGroup-Person Builder State-92', - 'zDetFaceGroup-UnNamed Face Count-93', - 'zPerson-Face Count-94', - 'zDetFace-Face Algorithm Version-95', - 'zDetFace-Adjustment Version-96', - 'zPerson-In Person Naming Model-97', - 'zPerson-Key Face Pick Source Key-98', - 'zPerson-Manual Order Key-99', - 'zPerson-Question Type-100', - 'zPerson-Suggested For Client Type-101', - 'zPerson-Merge Target Person-102', - 'zPerson-Cloud Local State-103', - 'zFaceCrop-Cloud Local State-104', - 'zFaceCrop-Cloud Type-105', - 'zPerson-Cloud Delete State-106', - 'zFaceCrop-Cloud Delete State-107', - 'zDetFace-zPK-108', - 'zDetFacePrint-Face Key-109', - 'zPerson-KeyFace=zDetFace-zPK-110', - 'zFaceCrop-Face Key-111', - 'zPerson-zPK=zDetFace-Person-112', - 'zDetFace-PersonForFace= zPerson-zPK-113', - 'zDetFace-Person Being Key Face-114', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-115', - 'zDetFace-Face Print-116', - 'zDetFacePrint-zPK-117', - 'zDetFace-Face Crop-118', - 'zFaceCrop-zPK-119', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-120', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-121', - 'zPerson-Assoc Face Group Key-122', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-123', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-124', - 'zDetFaceGroup-zPK-125', - 'zPerson-Share Participant= zSharePartic-zPK-126', - 'zDetFace-UUID-127', - 'zFaceCrop-UUID-128', - 'zFaceCrop-Invalid Merge Candidate Person UUID-129', - 'zPerson-Person UUID-130', - 'zPerson-Person URI-131', - 'zDetFaceGroup-UUID-132', - 'zDetFace-AssetForFace= zAsset-zPK-133', - 'zFaceCrop-Asset Key-134', - 'zAsset-zPK-135', - 'zAddAssetAttr-zPK-136', - 'zAsset-UUID = store.cloudphotodb-137', - 'zAddAssetAttr-Master Fingerprint-138') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph16.2-People & Faces Asset Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph16.2-People & Faces Asset Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people faces and basic asset data data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[26] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[130] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[26]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[130]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[130]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[33] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[128] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[33]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], + personcontactmatchingdictionary, + row[27], row[28], row[29], row[30], row[31], row[32], + facecropresourcedata_blob, + row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', + 'zAsset- Conversation= zGenAlbum_zPK-12', + ('zAsset-Trashed Date-13', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-15', + 'zAddAssetAttr-Imported by Bundle ID-16', + 'zAddAssetAttr-Imported By Display Name-17', + 'zCldMast-Imported by Bundle ID-18', + 'zCldMast-Imported by Display Name-19', + 'zAsset-Visibility State-20', + 'zFaceCrop-Face Area Points-21', + 'zAsset-Face Adjustment Version-22', + 'zAddAssetAttr-Face_Regions-SeeRawDBData-23', + 'zAddAssetAttr-Face Analysis Version-24', + 'zDetFacePrint-Data-SeeRawDBData-25', + 'zPerson-Contact Matching Dictionary-26', + 'zPerson-Verified Type-27', + 'zPerson-Display Name-28', + 'zPerson-Full Name-29', + 'zPerson-Cloud Verified Type-30', + 'zFaceCrop-State-31', + 'zFaceCrop-Type-32', + 'zFaceCrop-Resource Data-33', + 'zDetFace-Confirmed Face Crop Generation State-34', + 'zDetFace-Manual-35', + 'zDetFace-Detection Type-36', + 'zPerson-Detection Type-37', + 'zDetFace-VIP Model Type-38', + 'zDetFace-Name Source-39', + 'zDetFace-Cloud Name Source-40', + 'zPerson-Merge Candidate Confidence-41', + 'zPerson-Type-42', + 'zPerson-Gender Type-43', + 'zDetFace-Gender Type-44', + 'zDetFace-Center X-45', + 'zDetFace-Center Y-46', + 'zPerson-Age Type Estimate-47', + 'zDetFace-Age Type Estimate-48', + 'zDetFace-Ethnicity Type-49', + 'zDetFace-Skin Tone Type-50', + 'zDetFace-Hair Type-51', + 'zDetFace-Hair Color Type-52', + 'zDetFace-Head Gear Type-53', + 'zDetFace-Facial Hair Type-54', + 'zDetFace-Has Face Mask-55', + 'zDetFace-Pose Type-56', + 'zDetFace-Face Expression Type-57', + 'zDetFace-Has Smile-58', + 'zDetFace-Smile Type-59', + 'zDetFace-Lip Makeup Type-60', + 'zDetFace-Eyes State-61', + 'zDetFace-Is Left Eye Closed-62', + 'zDetFace-Is Right Eye Closed-63', + 'zDetFace-Gaze Center X-64', + 'zDetFace-Gaze Center Y-65', + 'zDetFace-Face Gaze Type-66', + 'zDetFace-Eye Glasses Type-67', + 'zDetFace-Eye Makeup Type-68', + 'zDetFace-Cluster Sequence Number Key-69', + 'zDetFace-Grouping ID-70', + 'zDetFace-Master ID-71', + 'zDetFace-Quality-72', + 'zDetFace-Quality Measure-73', + 'zDetFace-Source Height-74', + 'zDetFace-Source Width-75', + 'zDetFace-Asset Visible-76', + 'zDetFace-Hidden/Asset Hidden-77', + 'zDetFace-In Trash/Recently Deleted-78', + 'zDetFace-Cloud Local State-79', + 'zDetFace-Training Type-80', + 'zDetFace.Pose Yaw-81', + 'zDetFace-Body Center X-82', + 'zDetFace-Body Center Y-83', + 'zDetFace-Body Height-84', + 'zDetFace-Body Width-85', + 'zDetFace-Roll-86', + 'zDetFace-Size-87', + 'zDetFace-Cluster Sequence Number-88', + 'zDetFace-Blur Score-89', + 'zDetFacePrint-Face Print Version-90', + 'zDetFaceGroup-UUID-91', + 'zDetFaceGroup-Person Builder State-92', + 'zDetFaceGroup-UnNamed Face Count-93', + 'zPerson-Face Count-94', + 'zDetFace-Face Algorithm Version-95', + 'zDetFace-Adjustment Version-96', + 'zPerson-In Person Naming Model-97', + 'zPerson-Key Face Pick Source Key-98', + 'zPerson-Manual Order Key-99', + 'zPerson-Question Type-100', + 'zPerson-Suggested For Client Type-101', + 'zPerson-Merge Target Person-102', + 'zPerson-Cloud Local State-103', + 'zFaceCrop-Cloud Local State-104', + 'zFaceCrop-Cloud Type-105', + 'zPerson-Cloud Delete State-106', + 'zFaceCrop-Cloud Delete State-107', + 'zDetFace-zPK-108', + 'zDetFacePrint-Face Key-109', + 'zPerson-KeyFace=zDetFace-zPK-110', + 'zFaceCrop-Face Key-111', + 'zPerson-zPK=zDetFace-Person-112', + 'zDetFace-PersonForFace= zPerson-zPK-113', + 'zDetFace-Person Being Key Face-114', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-115', + 'zDetFace-Face Print-116', + 'zDetFacePrint-zPK-117', + 'zDetFace-Face Crop-118', + 'zFaceCrop-zPK-119', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-120', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-121', + 'zPerson-Assoc Face Group Key-122', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-123', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-124', + 'zDetFaceGroup-zPK-125', + 'zPerson-Share Participant= zSharePartic-zPK-126', + 'zDetFace-UUID-127', + 'zFaceCrop-UUID-128', + 'zFaceCrop-Invalid Merge Candidate Person UUID-129', + 'zPerson-Person UUID-130', + 'zPerson-Person URI-131', + 'zDetFaceGroup-UUID-132', + 'zDetFace-AssetForFace= zAsset-zPK-133', + 'zFaceCrop-Asset Key-134', + 'zAsset-zPK-135', + 'zAddAssetAttr-zPK-136', + 'zAsset-UUID = store.cloudphotodb-137', + 'zAddAssetAttr-Master Fingerprint-138') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -5327,236 +5179,215 @@ def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_te LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP WHERE zDetFace.Z_PK > 0 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[27] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[133] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[27]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[133]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[133]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[34] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[131] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[34]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], - personcontactmatchingdictionary, - row[28], row[29], row[30], row[31], row[32], row[33], - facecropresourcedata_blob, - row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite for' \ - ' basic asset, people and detected faces data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 17.' - report = ArtifactHtmlReport('Ph16.2-People & Faces Asset Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph16.2-People & Faces Asset Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', - 'zAsset- Conversation= zGenAlbum_zPK-12', - 'zAsset-Trashed Date-13', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-15', - 'zAddAssetAttr-Imported by Bundle ID-16', - 'zAddAssetAttr-Imported By Display Name-17', - 'zCldMast-Imported by Bundle ID-18', - 'zCldMast-Imported by Display Name-19', - 'zAsset-Visibility State-20', - 'zFaceCrop-Face Area Points-21', - 'zAsset-Face Adjustment Version-22', - 'zAddAssetAttr-Face_Regions-SeeRawDBData-23', - 'zAddAssetAttr-Face Analysis Version-24', - 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-25', - 'zDetFacePrint-Data-SeeRawDBData-26', - 'zPerson-Contact Matching Dictionary-27', - 'zPerson-Verified Type-28', - 'zPerson-Display Name-29', - 'zPerson-Full Name-30', - 'zPerson-Cloud Verified Type-31', - 'zFaceCrop-State-32', - 'zFaceCrop-Type-33', - 'zFaceCrop-Resource Data-34', - 'zDetFace-Confirmed Face Crop Generation State-35', - 'zDetFace-Manual-36', - 'zDetFace-Detection Type-37', - 'zPerson-Detection Type-38', - 'zDetFace-VIP Model Type-39', - 'zDetFace-Name Source-40', - 'zDetFace-Cloud Name Source-41', - 'zPerson-Merge Candidate Confidence-42', - 'zPerson-Type-43', - 'zPerson-Gender Type-44', - 'zDetFace-Gender Type-45', - 'zDetFace-Center X-46', - 'zDetFace-Center Y-47', - 'zPerson-Age Type Estimate-48', - 'zDetFace-Age Type Estimate-49', - 'zDetFace-Ethnicity Type-50', - 'zDetFace-Skin Tone Type-51', - 'zDetFace-Hair Type-52', - 'zDetFace-Hair Color Type-53', - 'zDetFace-Head Gear Type-54', - 'zDetFace-Facial Hair Type-55', - 'zDetFace-Has Face Mask-56', - 'zDetFace-Pose Type-57', - 'zDetFace-Face Expression Type-58', - 'zDetFace-Has Smile-59', - 'zDetFace-Smile Type-60', - 'zDetFace-Lip Makeup Type-61', - 'zDetFace-Eyes State-62', - 'zDetFace-Is Left Eye Closed-63', - 'zDetFace-Is Right Eye Closed-64', - 'zDetFace-Gaze Center X-65', - 'zDetFace-Gaze Center Y-66', - 'zDetFace-Face Gaze Type-67', - 'zDetFace-Eye Glasses Type-68', - 'zDetFace-Eye Makeup Type-69', - 'zDetFace-Cluster Squence Number Key-70', - 'zDetFace-Grouping ID-71', - 'zDetFace-Master ID-72', - 'zDetFace-Quality-73', - 'zDetFace-Quality Measure-74', - 'zDetFace-Source Height-75', - 'zDetFace-Source Width-76', - 'zDetFace-Asset Visible-77', - 'zDetFace-Hidden/Asset Hidden-78', - 'zDetFace-In Trash/Recently Deleted-79', - 'zDetFace-Cloud Local State-80', - 'zDetFace-Training Type-81', - 'zDetFace.Pose Yaw-82', - 'zDetFace-Body Center X-83', - 'zDetFace-Body Center Y-84', - 'zDetFace-Body Height-85', - 'zDetFace-Body Width-86', - 'zDetFace-Roll-87', - 'zDetFace-Size-88', - 'zDetFace-Cluster Sequence Number-89', - 'zDetFace-Blur Score-90', - 'zDetFacePrint-Face Print Version-91', - 'zDetFaceGroup-UUID-92', - 'zDetFaceGroup-Person Builder State-93', - 'zDetFaceGroup-UnNamed Face Count-94', - 'zPerson-Face Count-95', - 'zDetFace-Face Algorithm Version-96', - 'zDetFace-Adjustment Version-97', - 'zPerson-In Person Naming Model-98', - 'zPerson-Key Face Pick Source Key-99', - 'zPerson-Manual Order Key-100', - 'zPerson-Question Type-101', - 'zPerson-Suggested For Client Type-102', - 'zPerson-Merge Target Person-103', - 'zPerson-Cloud Local State-104', - 'zFaceCrop-Cloud Local State-105', - 'zFaceCrop-Cloud Type-106', - 'zPerson-Cloud Delete State-107', - 'zFaceCrop-Cloud Delete State-108', - 'zDetFace-zPK-109', - 'zDetFacePrint-Face Key-110', - 'zPerson-KeyFace=zDetFace-zPK-111', - 'zFaceCrop-Face Key-112', - 'zPerson-zPK=zDetFace-Person-113', - 'zDetFace-PersonForFace= zPerson-zPK-114', - 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-115', - 'zDetFace-PersonForTorso= zPerson-zPK-116', - 'zDetFace-Person Being Key Face-117', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-118', - 'zDetFace-Face Print-119', - 'zDetFacePrint-zPK-120', - 'zDetFace-Face Crop-121', - 'zFaceCrop-zPK-122', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-123', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-124', - 'zPerson-Assoc Face Group Key-125', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-126', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-127', - 'zDetFaceGroup-zPK-128', - 'zPerson-Share Participant= zSharePartic-zPK-129', - 'zDetFace-UUID-130', - 'zFaceCrop-UUID-131', - 'zFaceCrop-Invalid Merge Candidate Person UUID-132', - 'zPerson-Person UUID-133', - 'zPerson-Person URI-134', - 'zDetFaceGroup-UUID-135', - 'zDetFace-AssetForFace= zAsset-zPK-136', - 'zDetFace-AssetForTorso= zAsset-zPK-137', - 'zFaceCrop-Asset Key-138', - 'zAsset-zPK-139', - 'zAddAssetAttr-zPK-140', - 'zAsset-UUID = store.cloudphotodb-141', - 'zAddAssetAttr-Master Fingerprint-142') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph16.2-People & Faces Asset Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph16.2-People & Faces Asset Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people faces and basic asset data data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[27] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[133] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[27]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[133]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[133]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[34] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[131] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[34]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], + personcontactmatchingdictionary, + row[28], row[29], row[30], row[31], row[32], row[33], + facecropresourcedata_blob, + row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', + 'zAsset- Conversation= zGenAlbum_zPK-12', + ('zAsset-Trashed Date-13', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-15', + 'zAddAssetAttr-Imported by Bundle ID-16', + 'zAddAssetAttr-Imported By Display Name-17', + 'zCldMast-Imported by Bundle ID-18', + 'zCldMast-Imported by Display Name-19', + 'zAsset-Visibility State-20', + 'zFaceCrop-Face Area Points-21', + 'zAsset-Face Adjustment Version-22', + 'zAddAssetAttr-Face_Regions-SeeRawDBData-23', + 'zAddAssetAttr-Face Analysis Version-24', + 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-25', + 'zDetFacePrint-Data-SeeRawDBData-26', + 'zPerson-Contact Matching Dictionary-27', + 'zPerson-Verified Type-28', + 'zPerson-Display Name-29', + 'zPerson-Full Name-30', + 'zPerson-Cloud Verified Type-31', + 'zFaceCrop-State-32', + 'zFaceCrop-Type-33', + 'zFaceCrop-Resource Data-34', + 'zDetFace-Confirmed Face Crop Generation State-35', + 'zDetFace-Manual-36', + 'zDetFace-Detection Type-37', + 'zPerson-Detection Type-38', + 'zDetFace-VIP Model Type-39', + 'zDetFace-Name Source-40', + 'zDetFace-Cloud Name Source-41', + 'zPerson-Merge Candidate Confidence-42', + 'zPerson-Type-43', + 'zPerson-Gender Type-44', + 'zDetFace-Gender Type-45', + 'zDetFace-Center X-46', + 'zDetFace-Center Y-47', + 'zPerson-Age Type Estimate-48', + 'zDetFace-Age Type Estimate-49', + 'zDetFace-Ethnicity Type-50', + 'zDetFace-Skin Tone Type-51', + 'zDetFace-Hair Type-52', + 'zDetFace-Hair Color Type-53', + 'zDetFace-Head Gear Type-54', + 'zDetFace-Facial Hair Type-55', + 'zDetFace-Has Face Mask-56', + 'zDetFace-Pose Type-57', + 'zDetFace-Face Expression Type-58', + 'zDetFace-Has Smile-59', + 'zDetFace-Smile Type-60', + 'zDetFace-Lip Makeup Type-61', + 'zDetFace-Eyes State-62', + 'zDetFace-Is Left Eye Closed-63', + 'zDetFace-Is Right Eye Closed-64', + 'zDetFace-Gaze Center X-65', + 'zDetFace-Gaze Center Y-66', + 'zDetFace-Face Gaze Type-67', + 'zDetFace-Eye Glasses Type-68', + 'zDetFace-Eye Makeup Type-69', + 'zDetFace-Cluster Squence Number Key-70', + 'zDetFace-Grouping ID-71', + 'zDetFace-Master ID-72', + 'zDetFace-Quality-73', + 'zDetFace-Quality Measure-74', + 'zDetFace-Source Height-75', + 'zDetFace-Source Width-76', + 'zDetFace-Asset Visible-77', + 'zDetFace-Hidden/Asset Hidden-78', + 'zDetFace-In Trash/Recently Deleted-79', + 'zDetFace-Cloud Local State-80', + 'zDetFace-Training Type-81', + 'zDetFace.Pose Yaw-82', + 'zDetFace-Body Center X-83', + 'zDetFace-Body Center Y-84', + 'zDetFace-Body Height-85', + 'zDetFace-Body Width-86', + 'zDetFace-Roll-87', + 'zDetFace-Size-88', + 'zDetFace-Cluster Sequence Number-89', + 'zDetFace-Blur Score-90', + 'zDetFacePrint-Face Print Version-91', + 'zDetFaceGroup-UUID-92', + 'zDetFaceGroup-Person Builder State-93', + 'zDetFaceGroup-UnNamed Face Count-94', + 'zPerson-Face Count-95', + 'zDetFace-Face Algorithm Version-96', + 'zDetFace-Adjustment Version-97', + 'zPerson-In Person Naming Model-98', + 'zPerson-Key Face Pick Source Key-99', + 'zPerson-Manual Order Key-100', + 'zPerson-Question Type-101', + 'zPerson-Suggested For Client Type-102', + 'zPerson-Merge Target Person-103', + 'zPerson-Cloud Local State-104', + 'zFaceCrop-Cloud Local State-105', + 'zFaceCrop-Cloud Type-106', + 'zPerson-Cloud Delete State-107', + 'zFaceCrop-Cloud Delete State-108', + 'zDetFace-zPK-109', + 'zDetFacePrint-Face Key-110', + 'zPerson-KeyFace=zDetFace-zPK-111', + 'zFaceCrop-Face Key-112', + 'zPerson-zPK=zDetFace-Person-113', + 'zDetFace-PersonForFace= zPerson-zPK-114', + 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-115', + 'zDetFace-PersonForTorso= zPerson-zPK-116', + 'zDetFace-Person Being Key Face-117', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-118', + 'zDetFace-Face Print-119', + 'zDetFacePrint-zPK-120', + 'zDetFace-Face Crop-121', + 'zFaceCrop-zPK-122', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-123', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-124', + 'zPerson-Assoc Face Group Key-125', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-126', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-127', + 'zDetFaceGroup-zPK-128', + 'zPerson-Share Participant= zSharePartic-zPK-129', + 'zDetFace-UUID-130', + 'zFaceCrop-UUID-131', + 'zFaceCrop-Invalid Merge Candidate Person UUID-132', + 'zPerson-Person UUID-133', + 'zPerson-Person URI-134', + 'zDetFaceGroup-UUID-135', + 'zDetFace-AssetForFace= zAsset-zPK-136', + 'zDetFace-AssetForTorso= zAsset-zPK-137', + 'zFaceCrop-Asset Key-138', + 'zAsset-zPK-139', + 'zAddAssetAttr-zPK-140', + 'zAsset-UUID = store.cloudphotodb-141', + 'zAddAssetAttr-Master Fingerprint-142') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -5600,7 +5431,7 @@ def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_te WHEN 0 THEN '0-Obs in iOS 18 still testing-0' WHEN 1 THEN '1-Obs in iOS 18 still testing-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZHASPEOPLESCENEMIDORGREATERCONFIDENCE || '' - END AS 'zAddAssetAttr-Has_People_Scene Mid_Or_Greater_Confidence-iOS18', + END AS 'zAddAssetAttr-Has_People_Scene Mid_Or_Greater_Confidence', zAddAssetAttr.ZFACEANALYSISVERSION AS 'zAddAssetAttr-Face Analysis Version', zDetFace.ZASSETFORTEMPORALDETECTEDFACES AS 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK', CASE @@ -5613,7 +5444,7 @@ def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_te WHEN 1 THEN '1-Has_Contact Matching_Dictionary' ELSE 'Unknown-New-Value!: ' || zPerson.ZVERIFIEDTYPE || '' END AS 'zPerson-Verified Type', - zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-iOS18', + zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence', zPerson.ZDISPLAYNAME AS 'zPerson-Display Name', zPerson.ZFULLNAME AS 'zPerson-Full Name', CASE zPerson.ZCLOUDVERIFIEDTYPE @@ -5960,8 +5791,8 @@ def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_te zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES @@ -5978,260 +5809,205 @@ def get_ph16assetpeopledetfacesyndpl(files_found, report_folder, seeker, wrap_te LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP WHERE zDetFace.Z_PK > 0 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - personcontactmatchingdictionary = '' - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - facecropresourcedata_blob = '' - - # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST - if row[28] is not None: - pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[135] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[28]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - personcontactmatchingdictionary = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[135]) - else: - logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[135]) - - # zFaceCrop.ZRESOURCEDATA-BLOB_JPG - if row[36] is not None: - pathto = os.path.join(report_folder, 'FaceCropFor_' + row[133] + '.jpg') - with open(pathto, 'wb') as file: - file.write(row[36]) - facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - personcontactmatchingdictionary, - row[29], row[30], row[31], row[32], row[33], row[34], row[35], - facecropresourcedata_blob, - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite for' \ - ' basic asset, people and detected faces data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 18.' - report = ArtifactHtmlReport('Ph16.2-People & Faces Asset Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph16.2-People & Faces Asset Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', - 'zAsset- Conversation= zGenAlbum_zPK-12', - 'zAsset-Trashed Date-13', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-15', - 'zAddAssetAttr-Imported by Bundle ID-16', - 'zAddAssetAttr-Imported By Display Name-17', - 'zCldMast-Imported by Bundle ID-18', - 'zCldMast-Imported by Display Name-19', - 'zAsset-Visibility State-20', - 'zFaceCrop-Face Area Points-21', - 'zAddAssetAttr-Has_People_Scene Mid_Or_Greater_Confidence-iOS18-22', - 'zAsset-Face Adjustment Version-23', - 'zAddAssetAttr-Face_Regions-SeeRawDBData-24', - 'zAddAssetAttr-Face Analysis Version-25', - 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-26', - 'zDetFacePrint-Data-SeeRawDBData-27', - 'zPerson-Contact Matching Dictionary-28', - 'zPerson-Verified Type-29', - 'zPerson-Is_Me_Confidence-iOS18-30', - 'zPerson-Display Name-31', - 'zPerson-Full Name-32', - 'zPerson-Cloud Verified Type-33', - 'zFaceCrop-State-34', - 'zFaceCrop-Type-35', - 'zFaceCrop-Resource Data-36', - 'zDetFace-Confirmed Face Crop Generation State-37', - 'zDetFace-Manual-38', - 'zDetFace-Detection Type-39', - 'zPerson-Detection Type-40', - 'zDetFace-VIP Model Type-41', - 'zDetFace-Name Source-42', - 'zDetFace-Cloud Name Source-43', - 'zPerson-Merge Candidate Confidence-44', - 'zPerson-Type-45', - 'zPerson-Gender Type-46', - 'zDetFace-Gender Type-47', - 'zDetFace-Center X-48', - 'zDetFace-Center Y-49', - 'zPerson-Age Type Estimate-50', - 'zDetFace-Age Type Estimate-51', - 'zDetFace-Ethnicity Type-52', - 'zDetFace-Skin Tone Type-53', - 'zDetFace-Hair Type-54', - 'zDetFace-Hair Color Type-55', - 'zDetFace-Head Gear Type-56', - 'zDetFace-Facial Hair Type-57', - 'zDetFace-Has Face Mask-58', - 'zDetFace-Pose Type-59', - 'zDetFace-Face Expression Type-60', - 'zDetFace-Has Smile-61', - 'zDetFace-Smile Type-62', - 'zDetFace-Lip Makeup Type-63', - 'zDetFace-Eyes State-64', - 'zDetFace-Is Left Eye Closed-65', - 'zDetFace-Is Right Eye Closed-66', - 'zDetFace-Gaze Center X-67', - 'zDetFace-Gaze Center Y-68', - 'zDetFace-Face Gaze Type-69', - 'zDetFace-Eye Glasses Type-70', - 'zDetFace-Eye Makeup Type-71', - 'zDetFace-Cluster Squence Number Key-72', - 'zDetFace-Grouping ID-73', - 'zDetFace-Master ID-74', - 'zDetFace-Quality-75', - 'zDetFace-Quality Measure-76', - 'zDetFace-Source Height-77', - 'zDetFace-Source Width-78', - 'zDetFace-Asset Visible-79', - 'zDetFace-Hidden/Asset Hidden-80', - 'zDetFace-In Trash/Recently Deleted-81', - 'zDetFace-Cloud Local State-82', - 'zDetFace-Training Type-83', - 'zDetFace.Pose Yaw-84', - 'zDetFace-Body Center X-85', - 'zDetFace-Body Center Y-86', - 'zDetFace-Body Height-87', - 'zDetFace-Body Width-88', - 'zDetFace-Roll-89', - 'zDetFace-Size-90', - 'zDetFace-Cluster Sequence Number-91', - 'zDetFace-Blur Score-92', - 'zDetFacePrint-Face Print Version-93', - 'zDetFaceGroup-UUID-94', - 'zDetFaceGroup-Person Builder State-95', - 'zDetFaceGroup-UnNamed Face Count-96', - 'zPerson-Face Count-97', - 'zDetFace-Face Algorithm Version-98', - 'zDetFace-Adjustment Version-99', - 'zPerson-In Person Naming Model-100', - 'zPerson-Key Face Pick Source Key-101', - 'zPerson-Manual Order Key-102', - 'zPerson-Question Type-103', - 'zPerson-Suggested For Client Type-104', - 'zPerson-Merge Target Person-105', - 'zPerson-Cloud Local State-106', - 'zFaceCrop-Cloud Local State-107', - 'zFaceCrop-Cloud Type-108', - 'zPerson-Cloud Delete State-109', - 'zFaceCrop-Cloud Delete State-110', - 'zDetFace-zPK-111', - 'zDetFacePrint-Face Key-112', - 'zPerson-KeyFace=zDetFace-zPK-113', - 'zFaceCrop-Face Key-114', - 'zPerson-zPK=zDetFace-Person-115', - 'zDetFace-PersonForFace= zPerson-zPK-116', - 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-117', - 'zDetFace-PersonForTorso= zPerson-zPK-118', - 'zDetFace-Person Being Key Face-119', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-120', - 'zDetFace-Face Print-121', - 'zDetFacePrint-zPK-122', - 'zDetFace-Face Crop-123', - 'zFaceCrop-zPK-124', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-125', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-126', - 'zPerson-Assoc Face Group Key-127', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-128', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-129', - 'zDetFaceGroup-zPK-130', - 'zPerson-Share Participant= zSharePartic-zPK-131', - 'zDetFace-UUID-132', - 'zFaceCrop-UUID-133', - 'zFaceCrop-Invalid Merge Candidate Person UUID-134', - 'zPerson-Person UUID-135', - 'zPerson-Person URI-136', - 'zDetFaceGroup-UUID-137', - 'zDetFace-AssetForFace= zAsset-zPK-138', - 'zDetFace-AssetForTorso= zAsset-zPK-139', - 'zFaceCrop-Asset Key-140', - 'zAsset-zPK-141', - 'zAddAssetAttr-zPK-142', - 'zAsset-UUID = store.cloudphotodb-143', - 'zAddAssetAttr-Original Stable Hash-iOS18-144', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-145') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph16.2-People & Faces Asset Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph16.2-People & Faces Asset Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite people faces and basic asset data data') - - db.close() - return - - -__artifacts_v2__ = { - 'Ph16-1-People & Faces Asset Data-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite 16.1 Asset Basic People and Faces Data', - 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for basic asset' - ' people and faces data. The results may contain multiple records per ZASSET table Z_PK value' - ' and supports iOS 14-18.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-G-People_Faces_Data', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph16assetpeopledetfacephdapsql' - }, - 'Ph16-2-People & Faces Asset Data-SyndPL': { - 'name': 'SyndPL Photos.sqlite 16.2 Asset Basic People and Faces Data', - 'description': 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite' - ' for basic asset people and faces data. The results may contain multiple records' - ' per ZASSET table Z_PK value and supports iOS 14-18.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', - 'notes': '', - 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*', - 'function': 'get_ph16assetpeopledetfacesyndpl' - } -} + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + personcontactmatchingdictionary = '' + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + facecropresourcedata_blob = '' + + # zPerson.ZCONTACTMATCHINGDICTIONARY-PLIST + if row[28] is not None: + pathto = os.path.join(report_folder, 'zPerson-ContactMatchingDict_' + row[135] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[28]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + personcontactmatchingdictionary = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[135]) + else: + logfunc('Error reading exported plist from zPerson-Contact Matching Dictionary' + row[135]) + + # zFaceCrop.ZRESOURCEDATA-BLOB_JPG + if row[36] is not None: + pathto = os.path.join(report_folder, 'FaceCropFor_' + row[133] + '.jpg') + with open(pathto, 'wb') as file: + file.write(row[36]) + facecropresourcedata_blob = media_to_html(pathto, files_found, report_folder) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + personcontactmatchingdictionary, + row[29], row[30], row[31], row[32], row[33], row[34], row[35], + facecropresourcedata_blob, + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', + 'zAsset- Conversation= zGenAlbum_zPK-12', + ('zAsset-Trashed Date-13', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-15', + 'zAddAssetAttr-Imported by Bundle ID-16', + 'zAddAssetAttr-Imported By Display Name-17', + 'zCldMast-Imported by Bundle ID-18', + 'zCldMast-Imported by Display Name-19', + 'zAsset-Visibility State-20', + 'zFaceCrop-Face Area Points-21', + 'zAddAssetAttr-Has_People_Scene Mid_Or_Greater_Confidence-22', + 'zAsset-Face Adjustment Version-23', + 'zAddAssetAttr-Face_Regions-SeeRawDBData-24', + 'zAddAssetAttr-Face Analysis Version-25', + 'zDetFace-Asset For Temporal Detected Faces= zAsset-zPK-26', + 'zDetFacePrint-Data-SeeRawDBData-27', + 'zPerson-Contact Matching Dictionary-28', + 'zPerson-Verified Type-29', + 'zPerson-Is_Me_Confidence-30', + 'zPerson-Display Name-31', + 'zPerson-Full Name-32', + 'zPerson-Cloud Verified Type-33', + 'zFaceCrop-State-34', + 'zFaceCrop-Type-35', + 'zFaceCrop-Resource Data-36', + 'zDetFace-Confirmed Face Crop Generation State-37', + 'zDetFace-Manual-38', + 'zDetFace-Detection Type-39', + 'zPerson-Detection Type-40', + 'zDetFace-VIP Model Type-41', + 'zDetFace-Name Source-42', + 'zDetFace-Cloud Name Source-43', + 'zPerson-Merge Candidate Confidence-44', + 'zPerson-Type-45', + 'zPerson-Gender Type-46', + 'zDetFace-Gender Type-47', + 'zDetFace-Center X-48', + 'zDetFace-Center Y-49', + 'zPerson-Age Type Estimate-50', + 'zDetFace-Age Type Estimate-51', + 'zDetFace-Ethnicity Type-52', + 'zDetFace-Skin Tone Type-53', + 'zDetFace-Hair Type-54', + 'zDetFace-Hair Color Type-55', + 'zDetFace-Head Gear Type-56', + 'zDetFace-Facial Hair Type-57', + 'zDetFace-Has Face Mask-58', + 'zDetFace-Pose Type-59', + 'zDetFace-Face Expression Type-60', + 'zDetFace-Has Smile-61', + 'zDetFace-Smile Type-62', + 'zDetFace-Lip Makeup Type-63', + 'zDetFace-Eyes State-64', + 'zDetFace-Is Left Eye Closed-65', + 'zDetFace-Is Right Eye Closed-66', + 'zDetFace-Gaze Center X-67', + 'zDetFace-Gaze Center Y-68', + 'zDetFace-Face Gaze Type-69', + 'zDetFace-Eye Glasses Type-70', + 'zDetFace-Eye Makeup Type-71', + 'zDetFace-Cluster Squence Number Key-72', + 'zDetFace-Grouping ID-73', + 'zDetFace-Master ID-74', + 'zDetFace-Quality-75', + 'zDetFace-Quality Measure-76', + 'zDetFace-Source Height-77', + 'zDetFace-Source Width-78', + 'zDetFace-Asset Visible-79', + 'zDetFace-Hidden/Asset Hidden-80', + 'zDetFace-In Trash/Recently Deleted-81', + 'zDetFace-Cloud Local State-82', + 'zDetFace-Training Type-83', + 'zDetFace.Pose Yaw-84', + 'zDetFace-Body Center X-85', + 'zDetFace-Body Center Y-86', + 'zDetFace-Body Height-87', + 'zDetFace-Body Width-88', + 'zDetFace-Roll-89', + 'zDetFace-Size-90', + 'zDetFace-Cluster Sequence Number-91', + 'zDetFace-Blur Score-92', + 'zDetFacePrint-Face Print Version-93', + 'zDetFaceGroup-UUID-94', + 'zDetFaceGroup-Person Builder State-95', + 'zDetFaceGroup-UnNamed Face Count-96', + 'zPerson-Face Count-97', + 'zDetFace-Face Algorithm Version-98', + 'zDetFace-Adjustment Version-99', + 'zPerson-In Person Naming Model-100', + 'zPerson-Key Face Pick Source Key-101', + 'zPerson-Manual Order Key-102', + 'zPerson-Question Type-103', + 'zPerson-Suggested For Client Type-104', + 'zPerson-Merge Target Person-105', + 'zPerson-Cloud Local State-106', + 'zFaceCrop-Cloud Local State-107', + 'zFaceCrop-Cloud Type-108', + 'zPerson-Cloud Delete State-109', + 'zFaceCrop-Cloud Delete State-110', + 'zDetFace-zPK-111', + 'zDetFacePrint-Face Key-112', + 'zPerson-KeyFace=zDetFace-zPK-113', + 'zFaceCrop-Face Key-114', + 'zPerson-zPK=zDetFace-Person-115', + 'zDetFace-PersonForFace= zPerson-zPK-116', + 'zDetFace-Person for Temporal Detected Faces= zPerson-zPK-117', + 'zDetFace-PersonForTorso= zPerson-zPK-118', + 'zDetFace-Person Being Key Face-119', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-120', + 'zDetFace-Face Print-121', + 'zDetFacePrint-zPK-122', + 'zDetFace-Face Crop-123', + 'zFaceCrop-zPK-124', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-125', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-126', + 'zPerson-Assoc Face Group Key-127', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-128', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-129', + 'zDetFaceGroup-zPK-130', + 'zPerson-Share Participant= zSharePartic-zPK-131', + 'zDetFace-UUID-132', + 'zFaceCrop-UUID-133', + 'zFaceCrop-Invalid Merge Candidate Person UUID-134', + 'zPerson-Person UUID-135', + 'zPerson-Person URI-136', + 'zDetFaceGroup-UUID-137', + 'zDetFace-AssetForFace= zAsset-zPK-138', + 'zDetFace-AssetForTorso= zAsset-zPK-139', + 'zFaceCrop-Asset Key-140', + 'zAsset-zPK-141', + 'zAddAssetAttr-zPK-142', + 'zAsset-UUID = store.cloudphotodb-143', + 'zAddAssetAttr-Original Stable Hash-144', + 'zAddAssetAttr.Adjusted Stable Hash-145') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph1BasicAssetData.py b/scripts/artifacts/Ph1BasicAssetData.py index c84551f3..b764e95b 100644 --- a/scripts/artifacts/Ph1BasicAssetData.py +++ b/scripts/artifacts/Ph1BasicAssetData.py @@ -1,41 +1,60 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses basic asset record data from Photos.sqlite. The results will contain one record per ZASSET table Z_PK value -# and supports iOS 11-18. This parser is based on research and SQLite Queries written by Scott Koenig -# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools -# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results. -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph1_1AssetBasicDataPhDaPsql': { + 'name': 'Ph1.1-Asset Basic Data-PhDaPsql', + 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite.' + ' The results will contain one row per ZASSET table Z_PK value and supports iOS 11-18.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-04', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-A-Asset_Basic_Data', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + }, + 'Ph1_2AssetBasicDataSyndPL': { + 'name': 'Ph1.2-Asset Basic Data-SyndPL', + 'description': 'Parses basic asset row data from Syndication.photoslibrary-database-Photos.sqlite.' + ' The results will contain one row per ZASSET table Z_PK value and supports iOS 11-18.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-04', + 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', + 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly - +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc -def get_ph1assetbasicdataphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +@artifact_processor +def Ph1_1AssetBasicDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for PhotoData-Photos.sqlite basic asset data one record per zAsset-zPK from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -77,66 +96,47 @@ def get_ph1assetbasicdataphdapsql(files_found, report_folder, seeker, wrap_text, LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite.' \ - ' The results will contain one record per ZASSET table Z_PK value and supports iOS 11-13.' - report = ArtifactHtmlReport('Ph1.1-Asset Basic Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph1.1-Asset Basic Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-EXIF-String-5', - 'zAsset-Modification Date-6', - 'zAsset-Last Shared Date-7', - 'zAsset-Trashed Date-8', - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAddAssetAttr- Creator Bundle ID-13', - 'zAsset-Saved Asset Type-14', - 'zAsset-Visibility State-15', - 'zAsset-zPK-16', - 'zAddAssetAttr-zPK-17', - 'zAsset-UUID = store.cloudphotodb-18', - 'zAddAssetAttr-Master Fingerprint-19') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph1.1-Asset Basic Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph1.1-Asset Basic Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19])) + + data_headers = ( + ('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + 'zAddAssetAttr- Creator Bundle ID-13', + 'zAsset-Saved Asset Type-14', + 'zAsset-Visibility State-15', + 'zAsset-zPK-16', + 'zAddAssetAttr-zPK-17', + 'zAsset-UUID = store.cloudphotodb-18', + 'zAddAssetAttr-Master Fingerprint-19') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -184,68 +184,50 @@ def get_ph1assetbasicdataphdapsql(files_found, report_folder, seeker, wrap_text, LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite.' \ - ' The results will contain one record per ZASSET table Z_PK value and supports iOS 14.' - report = ArtifactHtmlReport('Ph1.1-Asset Basic Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph1.1-Asset Basic Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-EXIF-String-5', - 'zAsset-Modification Date-6', - 'zAsset-Last Shared Date-7', - 'zAsset-Trashed Date-8', - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAddAssetAttr- Creator Bundle ID-13', - 'zAddAssetAttr- Imported By Display Name-14', - 'zAsset-Saved Asset Type-15', - 'zAddAssetAttr-Share Type-16', - 'zAsset-Visibility State-17', - 'zAsset-zPK-18', - 'zAddAssetAttr-zPK-19', - 'zAsset-UUID = store.cloudphotodb-20', - 'zAddAssetAttr-Master Fingerprint-21') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph1.1-Asset Basic Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph1.1-Asset Basic Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21])) + + data_headers = ( + ('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + 'zAddAssetAttr- Creator Bundle ID-13', + 'zAddAssetAttr- Imported By Display Name-14', + 'zAsset-Saved Asset Type-15', + 'zAddAssetAttr-Share Type-16', + 'zAsset-Visibility State-17', + 'zAsset-zPK-18', + 'zAddAssetAttr-zPK-19', + 'zAsset-UUID = store.cloudphotodb-20', + 'zAddAssetAttr-Master Fingerprint-21') + + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -311,71 +293,51 @@ def get_ph1assetbasicdataphdapsql(files_found, report_folder, seeker, wrap_text, LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + ''' + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite.' \ - ' The results will contain one record per ZASSET table Z_PK value and supports iOS 15.' - report = ArtifactHtmlReport('Ph1.1-Asset Basic Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph1.1-Asset Basic Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-EXIF-String-5', - 'zAsset-Modification Date-6', - 'zAsset-Last Shared Date-7', - 'zAsset-Trashed Date-8', - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', - 'zAddAssetAttr- Imported by Bundle Identifier-14', - 'zAddAssetAttr- Imported By Display Name-15', - 'zAsset-Saved Asset Type-16', - 'zAsset-Syndication State-17', - 'zAsset-Bundle Scope-18', - 'zAddAssetAttr-Share Type-19', - 'zAsset-Visibility State-20', - 'zAsset-zPK-21', - 'zAddAssetAttr-zPK-22', - 'zAsset-UUID = store.cloudphotodb-23', - 'zAddAssetAttr-Master Fingerprint-24') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph1.1-Asset Basic Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph1.1-Asset Basic Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK') - - db.close() - return + data_headers = ( + ('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', + 'zAddAssetAttr- Imported by Bundle Identifier-14', + 'zAddAssetAttr- Imported By Display Name-15', + 'zAsset-Saved Asset Type-16', + 'zAsset-Syndication State-17', + 'zAsset-Bundle Scope-18', + 'zAddAssetAttr-Share Type-19', + 'zAsset-Visibility State-20', + 'zAsset-zPK-21', + 'zAddAssetAttr-zPK-22', + 'zAsset-UUID = store.cloudphotodb-23', + 'zAddAssetAttr-Master Fingerprint-24') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -447,73 +409,53 @@ def get_ph1assetbasicdataphdapsql(files_found, report_folder, seeker, wrap_text, LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + ''' + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite.' \ - ' The results will contain one record per ZASSET table Z_PK value and supports iOS 16-17.' - report = ArtifactHtmlReport('Ph1.1-Asset Basic Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph1.1-Asset Basic Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-EXIF-String-5', - 'zAsset-Modification Date-6', - 'zAsset-Last Shared Date-7', - 'zAsset-Trashed Date-8', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-9', - 'zAsset-Directory-Path-10', - 'zAsset-Filename-11', - 'zAddAssetAttr- Original Filename-12', - 'zCldMast- Original Filename-13', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', - 'zAddAssetAttr- Imported by Bundle Identifier-15', - 'zAddAssetAttr- Imported By Display Name-16', - 'zAsset-Saved Asset Type-17', - 'zAsset-Syndication State-18', - 'zAsset-Bundle Scope-19', - 'zAddAssetAttr-Share Type-20', - 'zAsset-Active Library Scope Participation State-21', - 'zAsset-Visibility State-22', - 'zAsset-zPK-23', - 'zAddAssetAttr-zPK-24', - 'zAsset-UUID = store.cloudphotodb-25', - 'zAddAssetAttr-Master Fingerprint-26') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph1.1-Asset Basic Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph1.1-Asset Basic Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK') - - db.close() - return + data_headers = ( + ('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-9', + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAddAssetAttr- Imported by Bundle Identifier-15', + 'zAddAssetAttr- Imported By Display Name-16', + 'zAsset-Saved Asset Type-17', + 'zAsset-Syndication State-18', + 'zAsset-Bundle Scope-19', + 'zAddAssetAttr-Share Type-20', + 'zAsset-Active Library Scope Participation State-21', + 'zAsset-Visibility State-22', + 'zAsset-zPK-23', + 'zAddAssetAttr-zPK-24', + 'zAsset-UUID = store.cloudphotodb-25', + 'zAddAssetAttr-Master Fingerprint-26') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -533,10 +475,10 @@ def get_ph1assetbasicdataphdapsql(files_found, report_folder, seeker, wrap_text, zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier', zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name', CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' + WHEN 0 THEN '0-Not_Recently_Saved_Still_Testing-0' + WHEN 1 THEN '1-Recently_Saved_Still_Testing-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', + END AS 'zAsset-Is_Recently_Saved', CASE zAsset.ZSAVEDASSETTYPE WHEN 0 THEN '0-Saved-via-other-source-0' WHEN 1 THEN '1-StillTesting-1' @@ -585,96 +527,78 @@ def get_ph1assetbasicdataphdapsql(files_found, report_folder, seeker, wrap_text, zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite.' \ - ' The results will contain one record per ZASSET table Z_PK value and supports iOS 18.' - report = ArtifactHtmlReport('Ph1.1-Asset Basic Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph1.1-Asset Basic Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-EXIF-String-5', - 'zAsset-Modification Date-6', - 'zAsset-Last Shared Date-7', - 'zAsset-Trashed Date-8', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-9', - 'zAsset-Directory-Path-10', - 'zAsset-Filename-11', - 'zAddAssetAttr- Original Filename-12', - 'zCldMast- Original Filename-13', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', - 'zAddAssetAttr- Imported by Bundle Identifier-15', - 'zAddAssetAttr- Imported By Display Name-16', - 'zAsset-Is_Recently_Saved-iOS18-17', - 'zAsset-Saved Asset Type-18', - 'zAsset-Syndication State-19', - 'zAsset-Bundle Scope-20', - 'zAddAssetAttr-Share Type-21', - 'zAsset-Active Library Scope Participation State-22', - 'zAsset-Visibility State-23', - 'zAsset-zPK-24', - 'zAddAssetAttr-zPK-25', - 'zAsset-UUID = store.cloudphotodb-26', - 'zAddAssetAttr-Original Stable Hash-iOS18-27', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-28') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph1.1-Asset Basic Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph1.1-Asset Basic Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK') - - db.close() - return - - -def get_ph1assetbasicdatasyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset): - - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + data_headers = ( + ('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-9', + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAddAssetAttr- Imported by Bundle Identifier-15', + 'zAddAssetAttr- Imported By Display Name-16', + 'zAsset-Is_Recently_Saved-17', + 'zAsset-Saved Asset Type-18', + 'zAsset-Syndication State-19', + 'zAsset-Bundle Scope-20', + 'zAddAssetAttr-Share Type-21', + 'zAsset-Active Library Scope Participation State-22', + 'zAsset-Visibility State-23', + 'zAsset-zPK-24', + 'zAddAssetAttr-zPK-25', + 'zAsset-UUID = store.cloudphotodb-26', + 'zAddAssetAttr-Original Stable Hash-27', + 'zAddAssetAttr.Adjusted Stable Hash-28') + + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + +@artifact_processor +def Ph1_2AssetBasicDataSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) + + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for Syndication.photoslibrary/database/Photos.sqlite basic asset data one record per zAsset-zPK iOS " + iosversion) + logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -716,66 +640,47 @@ def get_ph1assetbasicdatasyndpl(files_found, report_folder, seeker, wrap_text, t LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19])) - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary/database/Photos.sqlite.' \ - ' The results will contain one record per ZASSET table Z_PK value and supports iOS 11-13.' - report = ArtifactHtmlReport('Ph1.2-Asset Basic Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph1.2-Asset Basic Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-EXIF-String-5', - 'zAsset-Modification Date-6', - 'zAsset-Last Shared Date-7', - 'zAsset-Trashed Date-8', - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAddAssetAttr- Creator Bundle ID-13', - 'zAsset-Saved Asset Type-14', - 'zAsset-Visibility State-15', - 'zAsset-zPK-16', - 'zAddAssetAttr-zPK-17', - 'zAsset-UUID = store.cloudphotodb-18', - 'zAddAssetAttr-Master Fingerprint-19') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph1.2-Asset Basic Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph1.2-Asset Basic Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK') - - db.close() - return + data_headers = ( + ('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + 'zAddAssetAttr- Creator Bundle ID-13', + 'zAsset-Saved Asset Type-14', + 'zAsset-Visibility State-15', + 'zAsset-zPK-16', + 'zAddAssetAttr-zPK-17', + 'zAsset-UUID = store.cloudphotodb-18', + 'zAddAssetAttr-Master Fingerprint-19') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -823,68 +728,49 @@ def get_ph1assetbasicdatasyndpl(files_found, report_folder, seeker, wrap_text, t LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21])) - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite.' \ - ' The results will contain one record per ZASSET table Z_PK value and supports iOS 14.' - report = ArtifactHtmlReport('Ph1.2-Asset Basic Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph1.2-Asset Basic Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-EXIF-String-5', - 'zAsset-Modification Date-6', - 'zAsset-Last Shared Date-7', - 'zAsset-Trashed Date-8', - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAddAssetAttr- Creator Bundle ID-13', - 'zAddAssetAttr- Imported By Display Name-14', - 'zAsset-Saved Asset Type-15', - 'zAddAssetAttr-Share Type-16', - 'zAsset-Visibility State-17', - 'zAsset-zPK-18', - 'zAddAssetAttr-zPK-19', - 'zAsset-UUID = store.cloudphotodb-20', - 'zAddAssetAttr-Master Fingerprint-21') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph1.2-Asset Basic Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph1.2-Asset Basic Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK') - - db.close() - return + data_headers = ( + ('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + 'zAddAssetAttr- Creator Bundle ID-13', + 'zAddAssetAttr- Imported By Display Name-14', + 'zAsset-Saved Asset Type-15', + 'zAddAssetAttr-Share Type-16', + 'zAsset-Visibility State-17', + 'zAsset-zPK-18', + 'zAddAssetAttr-zPK-19', + 'zAsset-UUID = store.cloudphotodb-20', + 'zAddAssetAttr-Master Fingerprint-21') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -950,71 +836,52 @@ def get_ph1assetbasicdatasyndpl(files_found, report_folder, seeker, wrap_text, t LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24])) - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite.' \ - ' The results will contain one record per ZASSET table Z_PK value and supports iOS 15.' - report = ArtifactHtmlReport('Ph1.2-Asset Basic Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph1.2-Asset Basic Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-EXIF-String-5', - 'zAsset-Modification Date-6', - 'zAsset-Last Shared Date-7', - 'zAsset-Trashed Date-8', - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', - 'zAddAssetAttr- Imported by Bundle Identifier-14', - 'zAddAssetAttr- Imported By Display Name-15', - 'zAsset-Saved Asset Type-16', - 'zAsset-Syndication State-17', - 'zAsset-Bundle Scope-18', - 'zAddAssetAttr-Share Type-19', - 'zAsset-Visibility State-20', - 'zAsset-zPK-21', - 'zAddAssetAttr-zPK-22', - 'zAsset-UUID = store.cloudphotodb-23', - 'zAddAssetAttr-Master Fingerprint-24') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph1.2-Asset Basic Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph1.2-Asset Basic Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK') - - db.close() - return + data_headers = ( + ('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', + 'zAddAssetAttr- Imported by Bundle Identifier-14', + 'zAddAssetAttr- Imported By Display Name-15', + 'zAsset-Saved Asset Type-16', + 'zAsset-Syndication State-17', + 'zAsset-Bundle Scope-18', + 'zAddAssetAttr-Share Type-19', + 'zAsset-Visibility State-20', + 'zAsset-zPK-21', + 'zAddAssetAttr-zPK-22', + 'zAsset-UUID = store.cloudphotodb-23', + 'zAddAssetAttr-Master Fingerprint-24') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -1086,73 +953,54 @@ def get_ph1assetbasicdatasyndpl(files_found, report_folder, seeker, wrap_text, t LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26])) - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite.' \ - ' The results will contain one record per ZASSET table Z_PK value and supports iOS 16-17.' - report = ArtifactHtmlReport('Ph1.2-Asset Basic Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph1.2-Asset Basic Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-EXIF-String-5', - 'zAsset-Modification Date-6', - 'zAsset-Last Shared Date-7', - 'zAsset-Trashed Date-8', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-9', - 'zAsset-Directory-Path-10', - 'zAsset-Filename-11', - 'zAddAssetAttr- Original Filename-12', - 'zCldMast- Original Filename-13', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', - 'zAddAssetAttr- Imported by Bundle Identifier-15', - 'zAddAssetAttr- Imported By Display Name-16', - 'zAsset-Saved Asset Type-17', - 'zAsset-Syndication State-18', - 'zAsset-Bundle Scope-19', - 'zAddAssetAttr-Share Type-20', - 'zAsset-Active Library Scope Participation State-21', - 'zAsset-Visibility State-22', - 'zAsset-zPK-23', - 'zAddAssetAttr-zPK-24', - 'zAsset-UUID = store.cloudphotodb-25', - 'zAddAssetAttr-Master Fingerprint-26') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph1.2-Asset Basic Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph1.2-Asset Basic Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK') - - db.close() - return + data_headers = ( + ('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-9', + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAddAssetAttr- Imported by Bundle Identifier-15', + 'zAddAssetAttr- Imported By Display Name-16', + 'zAsset-Saved Asset Type-17', + 'zAsset-Syndication State-18', + 'zAsset-Bundle Scope-19', + 'zAddAssetAttr-Share Type-20', + 'zAsset-Active Library Scope Participation State-21', + 'zAsset-Visibility State-22', + 'zAsset-zPK-23', + 'zAddAssetAttr-zPK-24', + 'zAsset-UUID = store.cloudphotodb-25', + 'zAddAssetAttr-Master Fingerprint-26') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -1172,10 +1020,10 @@ def get_ph1assetbasicdatasyndpl(files_found, report_folder, seeker, wrap_text, t zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier', zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name', CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recenlty_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' + WHEN 0 THEN '0-Not_Recenlty_Saved_Still_Testing-0' + WHEN 1 THEN '1-Recently_Saved_Still_Testing-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', + END AS 'zAsset-Is_Recently_Saved', CASE zAsset.ZSAVEDASSETTYPE WHEN 0 THEN '0-Saved-via-other-source-0' WHEN 1 THEN '1-StillTesting-1' @@ -1224,102 +1072,51 @@ def get_ph1assetbasicdatasyndpl(files_found, report_folder, seeker, wrap_text, t zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28])) - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite.' \ - ' The results will contain one record per ZASSET table Z_PK value and supports iOS 18.' - report = ArtifactHtmlReport('Ph1.2-Asset Basic Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph1.2-Asset Basic Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-EXIF-String-5', - 'zAsset-Modification Date-6', - 'zAsset-Last Shared Date-7', - 'zAsset-Trashed Date-8', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-9', - 'zAsset-Directory-Path-10', - 'zAsset-Filename-11', - 'zAddAssetAttr- Original Filename-12', - 'zCldMast- Original Filename-13', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', - 'zAddAssetAttr- Imported by Bundle Identifier-15', - 'zAddAssetAttr- Imported By Display Name-16', - 'zAsset-Is_Recently_Saved-iOS18-17', - 'zAsset-Saved Asset Type-18', - 'zAsset-Syndication State-19', - 'zAsset-Bundle Scope-20', - 'zAddAssetAttr-Share Type-21', - 'zAsset-Active Library Scope Participation State-22', - 'zAsset-Visibility State-23', - 'zAsset-zPK-24', - 'zAddAssetAttr-zPK-25', - 'zAsset-UUID = store.cloudphotodb-26', - 'zAddAssetAttr-Original Stable Hash-iOS18-27', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-28') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph1.2-Asset Basic Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph1.2-Asset Basic Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Photos.sqlite basic asset data one record per zAsset-zPK') - - db.close() - return - - -__artifacts_v2__ = { - 'Ph1-1-Asset Basic Data-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph1.1 Asset Basic Data', - 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite.' - ' The results will contain one record per ZASSET table Z_PK value and supports iOS 11-18.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-A-Asset_Basic_Data', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph1assetbasicdataphdapsql' - }, - 'Ph1-2-Asset Basic Data-SyndPL': { - 'name': 'SyndPL Photos.sqlite Ph1.2 Asset Basic Data', - 'description': 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite.' - ' The results will contain one record per ZASSET table Z_PK value and supports iOS 11-18.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', - 'notes': '', - 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*', - 'function': 'get_ph1assetbasicdatasyndpl' - } -} + data_headers = ( + ('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-EXIF-String-5', + ('zAsset-Modification Date-6', 'datetime'), + ('zAsset-Last Shared Date-7', 'datetime'), + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-9', + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAddAssetAttr- Imported by Bundle Identifier-15', + 'zAddAssetAttr- Imported By Display Name-16', + 'zAsset-Is_Recently_Saved-17', + 'zAsset-Saved Asset Type-18', + 'zAsset-Syndication State-19', + 'zAsset-Bundle Scope-20', + 'zAddAssetAttr-Share Type-21', + 'zAsset-Active Library Scope Participation State-22', + 'zAsset-Visibility State-23', + 'zAsset-zPK-24', + 'zAddAssetAttr-zPK-25', + 'zAsset-UUID = store.cloudphotodb-26', + 'zAddAssetAttr-Original Stable Hash-27', + 'zAddAssetAttr.Adjusted Stable Hash-28') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph20AlbumsNAD.py b/scripts/artifacts/Ph20AlbumsNAD.py index e43749ae..49e8348c 100644 --- a/scripts/artifacts/Ph20AlbumsNAD.py +++ b/scripts/artifacts/Ph20AlbumsNAD.py @@ -1,44 +1,68 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses Basic Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table and supports iOS 11-18. -# Parses Album records only no asset data being parsed. -# Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums. -# Use 1505-Shared-Album-1505 in the search to view Shared Albums. -# Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You Conversation Identifiers. -# Please see the album type specific scripts to view more data for each album type. -# This parser is based on research and SQLite Queries written by Scott Koenig -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph20_1AlbumRecordswithNADPhDaPsql': { + 'name': 'Ph20.1-Album Records NAD-PhDaPsql', + 'description': 'Parses Basic Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' + ' and supports iOS 11-18. Parses Album records only no asset data being parsed.' + ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' + ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' + ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You Conversation Identifiers.' + ' Please see the album type specific scripts to view more data for each album type.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + }, + 'Ph20_2AlbumRecordswithNADSyndPL': { + 'name': 'Ph20.2-Album Records NAD-SyndPL', + 'description': 'Parses Basic Album records found in the Syndication.photoslibrary-database-Photos.sqlite' + ' ZGENERICALBUM Table and supports iOS 11-18. Parses Album records only no asset data' + ' being parsed. Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' + ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' + ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You Conversation Identifiers.' + ' Please see the album type specific scripts to view more data for each album type.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', + 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc +@artifact_processor +def Ph20_1AlbumRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) -def get_ph20albumrecordsnadphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('-') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for PhotoData-Photos.sqlite album records with no asset data" - " from on iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', @@ -72,62 +96,37 @@ def get_ph20albumrecordsnadphdapsql(files_found, report_folder, seeker, wrap_tex zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart' FROM ZGENERICALBUM zGenAlbum ORDER BY zGenAlbum.ZSTARTDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], - row[8], row[9], row[10], row[11])) - - counter += 1 - - description = 'Parses Basic Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' \ - ' and supports iOS 11-13. Parses Album records only no asset data being parsed.' \ - ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' \ - ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' \ - ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You' \ - ' Conversation Identifiers. Please see the album type specific scripts to view more data' \ - ' for each album type.' - report = ArtifactHtmlReport('Ph20.1-Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph20.1-Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Start Date', - 'zGenAlbum-End Date', - 'zGenAlbum-Album Kind', - 'zGenAlbum-Title', - 'zGenAlbum-Import Session ID', - 'zGenAlbum-Cached Photos Count', - 'zGenAlbum-Cached Videos Count', - 'zGenAlbum-Cached Count', - 'zGenAlbum-Trashed State', - 'zGenAlbum-Trash Date', - 'zGenAlbum-UUID', - 'zGenAlbum-Cloud GUID') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph20.1-Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph20.1-Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Album Records with No Asset Data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], + row[8], row[9], row[10], row[11])) + + data_headers = (('zGenAlbum-Start Date', 'datetime'), + ('zGenAlbum-End Date', 'datetime'), + 'zGenAlbum-Album Kind', + 'zGenAlbum-Title', + 'zGenAlbum-Import Session ID', + 'zGenAlbum-Cached Photos Count', + 'zGenAlbum-Cached Videos Count', + 'zGenAlbum-Cached Count', + 'zGenAlbum-Trashed State', + ('zGenAlbum-Trash Date', 'datetime'), + 'zGenAlbum-UUID', + 'zGenAlbum-Cloud GUID') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', @@ -163,64 +162,39 @@ def get_ph20albumrecordsnadphdapsql(files_found, report_folder, seeker, wrap_tex zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart' FROM ZGENERICALBUM zGenAlbum ORDER BY zGenAlbum.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], - row[8], row[9], row[10], row[11], row[12], row[13])) - - counter += 1 - - description = 'Parses Basic Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' \ - ' and supports iOS 14. Parses Album records only no asset data being parsed.' \ - ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' \ - ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' \ - ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You' \ - ' Conversation Identifiers. Please see the album type specific scripts to view more data' \ - ' for each album type.' - report = ArtifactHtmlReport('Ph20.1-Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph20.1-Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Creation Date', - 'zGenAlbum-Start Date', - 'zGenAlbum-End Date', - 'zGenAlbum-Album Kind', - 'zGenAlbum-Title', - 'zGenAlbum-Import Session ID', - 'zGenAlbum-Creator Bundle Identifier', - 'zGenAlbum-Cached Photos Count', - 'zGenAlbum-Cached Videos Count', - 'zGenAlbum-Cached Count', - 'zGenAlbum-Trashed State', - 'zGenAlbum-Trash Date', - 'zGenAlbum-UUID', - 'zGenAlbum-Cloud GUID') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph20.1-Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph20.1-Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Album Records No Asset Data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], + row[8], row[9], row[10], row[11], row[12], row[13])) + + data_headers = (('zGenAlbum-Creation Date', 'datetime'), + ('zGenAlbum-Start Date', 'datetime'), + ('zGenAlbum-End Date', 'datetime'), + 'zGenAlbum-Album Kind', + 'zGenAlbum-Title', + 'zGenAlbum-Import Session ID', + 'zGenAlbum-Creator Bundle Identifier', + 'zGenAlbum-Cached Photos Count', + 'zGenAlbum-Cached Videos Count', + 'zGenAlbum-Cached Count', + 'zGenAlbum-Trashed State', + ('zGenAlbum-Trash Date', 'datetime'), + 'zGenAlbum-UUID', + 'zGenAlbum-Cloud GUID') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', @@ -256,63 +230,39 @@ def get_ph20albumrecordsnadphdapsql(files_found, report_folder, seeker, wrap_tex zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart' FROM ZGENERICALBUM zGenAlbum ORDER BY zGenAlbum.ZCREATIONDATE - """) - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], - row[8], row[9], row[10], row[11], row[12], row[13])) - - counter += 1 - - description = 'Parses Basic Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' \ - ' and supports iOS 15-17. Parses Album records only no asset data being parsed.' \ - ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' \ - ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' \ - ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You' \ - ' Conversation Identifiers. Please see the album type specific scripts to view more data' \ - ' for each album type.' - report = ArtifactHtmlReport('Ph20.1-Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph20.1-Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Creation Date', - 'zGenAlbum-Start Date', - 'zGenAlbum-End Date', - 'zGenAlbum-Album Kind', - 'zGenAlbum-Title', - 'zGenAlbum-Import Session ID', - 'zGenAlbum-Imported by Bundle Identifier', - 'zGenAlbum-Cached Photos Count', - 'zGenAlbum-Cached Videos Count', - 'zGenAlbum-Cached Count', - 'zGenAlbum-Trashed State', - 'zGenAlbum-Trash Date', - 'zGenAlbum-UUID', - 'zGenAlbum-Cloud GUID') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph20.1-Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph20.1-Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Album Records with No Asset Data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], + row[8], row[9], row[10], row[11], row[12], row[13])) + + data_headers = (('zGenAlbum-Creation Date', 'datetime'), + ('zGenAlbum-Start Date', 'datetime'), + ('zGenAlbum-End Date', 'datetime'), + 'zGenAlbum-Album Kind', + 'zGenAlbum-Title', + 'zGenAlbum-Import Session ID', + 'zGenAlbum-Imported by Bundle Identifier', + 'zGenAlbum-Cached Photos Count', + 'zGenAlbum-Cached Videos Count', + 'zGenAlbum-Cached Count', + 'zGenAlbum-Trashed State', + ('zGenAlbum-Trash Date', 'datetime'), + 'zGenAlbum-UUID', + 'zGenAlbum-Cloud GUID') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', @@ -348,77 +298,53 @@ def get_ph20albumrecordsnadphdapsql(files_found, report_folder, seeker, wrap_tex zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart' FROM ZGENERICALBUM zGenAlbum ORDER BY zGenAlbum.ZCREATIONDATE - """) - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], - row[8], row[9], row[10], row[11], row[12], row[13])) - - counter += 1 - - description = 'Parses Basic Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' \ - ' and supports iOS 18. Parses Album records only no asset data being parsed.' \ - ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' \ - ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' \ - ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You' \ - ' Conversation Identifiers. Please see the album type specific scripts to view more data' \ - ' for each album type.' - report = ArtifactHtmlReport('Ph20.1-Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph20.1-Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Creation Date-0', - 'zGenAlbum-Start Date-1', - 'zGenAlbum-End Date-2', - 'zGenAlbum-Album Kind-3', - 'zGenAlbum-Title-4', - 'zGenAlbum-Import Session ID-5', - 'zGenAlbum-Imported by Bundle Identifier-6', - 'zGenAlbum-Cached Photos Count-7', - 'zGenAlbum-Cached Videos Count-8', - 'zGenAlbum-Cached Count-9', - 'zGenAlbum-Trashed State-10', - 'zGenAlbum-Trash Date-11', - 'zGenAlbum-UUID-12', - 'zGenAlbum-Cloud GUID-13') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph20.1-Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph20.1-Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Album Records with No Asset Data') - - db.close() - return - - -def get_ph20albumrecrodsnadsyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], + row[8], row[9], row[10], row[11], row[12], row[13])) + + data_headers = (('zGenAlbum-Creation Date-0', 'datetime'), + ('zGenAlbum-Start Date-1', 'datetime'), + ('zGenAlbum-End Date-2', 'datetime'), + 'zGenAlbum-Album Kind-3', + 'zGenAlbum-Title-4', + 'zGenAlbum-Import Session ID-5', + 'zGenAlbum-Imported by Bundle Identifier-6', + 'zGenAlbum-Cached Photos Count-7', + 'zGenAlbum-Cached Videos Count-8', + 'zGenAlbum-Cached Count-9', + 'zGenAlbum-Trashed State-10', + ('zGenAlbum-Trash Date-11', 'datetime'), + 'zGenAlbum-UUID-12', + 'zGenAlbum-Cloud GUID-13') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + +@artifact_processor +def Ph20_2AlbumRecordswithNADSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) + + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite" - " album records with no asset data on iOS " + iosversion) + logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', @@ -452,64 +378,37 @@ def get_ph20albumrecrodsnadsyndpl(files_found, report_folder, seeker, wrap_text, zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart' FROM ZGENERICALBUM zGenAlbum ORDER BY zGenAlbum.ZSTARTDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], - row[8], row[9], row[10], row[11])) - - counter += 1 - - description = 'Parses Basic Album records found in the Syndication.photoslibrary-database-Photos.sqlite' \ - ' ZGENERICALBUM Table and supports iOS 11-13.' \ - ' Parses Album records only no asset data being parsed.' \ - ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' \ - ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' \ - ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You' \ - ' Conversation Identifiers. Please see the album type specific scripts to view more data' \ - ' for each album type.' - report = ArtifactHtmlReport('Ph20.2-Album Records NAD-SyndPL') - report.start_artifact_report(report_folder, 'Ph20.2-Album Records NAD-SyndPL', description) - report.add_script() - data_headers = ('zGenAlbum-Start Date', - 'zGenAlbum-End Date', - 'zGenAlbum-Album Kind', - 'zGenAlbum-Title', - 'zGenAlbum-Import Session ID', - 'zGenAlbum-Cached Photos Count', - 'zGenAlbum-Cached Videos Count', - 'zGenAlbum-Cached Count', - 'zGenAlbum-Trashed State', - 'zGenAlbum-Trash Date', - 'zGenAlbum-UUID', - 'zGenAlbum-Cloud GUID') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph20.2-Album Records NAD-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph20.2-Album Records NAD-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' Album Records with No Asset Data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], + row[8], row[9], row[10], row[11])) + + data_headers = (('zGenAlbum-Start Date', 'datetime'), + ('zGenAlbum-End Date', 'datetime'), + 'zGenAlbum-Album Kind', + 'zGenAlbum-Title', + 'zGenAlbum-Import Session ID', + 'zGenAlbum-Cached Photos Count', + 'zGenAlbum-Cached Videos Count', + 'zGenAlbum-Cached Count', + 'zGenAlbum-Trashed State', + ('zGenAlbum-Trash Date', 'datetime'), + 'zGenAlbum-UUID', + 'zGenAlbum-Cloud GUID') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', @@ -545,66 +444,39 @@ def get_ph20albumrecrodsnadsyndpl(files_found, report_folder, seeker, wrap_text, zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart' FROM ZGENERICALBUM zGenAlbum ORDER BY zGenAlbum.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], - row[8], row[9], row[10], row[11], row[12], row[13])) - - counter += 1 - - description = 'Parses Basic Album records found in the Syndication.photoslibrary-database-Photos.sqlite' \ - ' ZGENERICALBUM Table and supports iOS 14.' \ - ' Parses Album records only no asset data being parsed.' \ - ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' \ - ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' \ - ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You' \ - ' Conversation Identifiers. Please see the album type specific scripts to view more data' \ - ' for each album type.' - report = ArtifactHtmlReport('Ph20.2-Album Records NAD-SyndPL') - report.start_artifact_report(report_folder, 'Ph20.2-Album Records NAD-SyndPL', description) - report.add_script() - data_headers = ('zGenAlbum-Creation Date', - 'zGenAlbum-Start Date', - 'zGenAlbum-End Date', - 'zGenAlbum-Album Kind', - 'zGenAlbum-Title', - 'zGenAlbum-Import Session ID', - 'zGenAlbum-Creator Bundle Identifier', - 'zGenAlbum-Cached Photos Count', - 'zGenAlbum-Cached Videos Count', - 'zGenAlbum-Cached Count', - 'zGenAlbum-Trashed State', - 'zGenAlbum-Trash Date', - 'zGenAlbum-UUID', - 'zGenAlbum-Cloud GUID') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph20.2-Album Records NAD-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph20.2-Album Records NAD-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' Album Records No Asset Data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], + row[8], row[9], row[10], row[11], row[12], row[13])) + + data_headers = (('zGenAlbum-Creation Date', 'datetime'), + ('zGenAlbum-Start Date', 'datetime'), + ('zGenAlbum-End Date', 'datetime'), + 'zGenAlbum-Album Kind', + 'zGenAlbum-Title', + 'zGenAlbum-Import Session ID', + 'zGenAlbum-Creator Bundle Identifier', + 'zGenAlbum-Cached Photos Count', + 'zGenAlbum-Cached Videos Count', + 'zGenAlbum-Cached Count', + 'zGenAlbum-Trashed State', + ('zGenAlbum-Trash Date', 'datetime'), + 'zGenAlbum-UUID', + 'zGenAlbum-Cloud GUID') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', @@ -640,65 +512,39 @@ def get_ph20albumrecrodsnadsyndpl(files_found, report_folder, seeker, wrap_text, zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart' FROM ZGENERICALBUM zGenAlbum ORDER BY zGenAlbum.ZCREATIONDATE - """) - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], - row[8], row[9], row[10], row[11], row[12], row[13])) - - counter += 1 - - description = 'Parses Basic Album records found in the Syndication.photoslibrary-database-Photos.sqlite' \ - ' ZGENERICALBUM Table and supports iOS 15-17.' \ - ' Parses Album records only no asset data being parsed.' \ - ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' \ - ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' \ - ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You' \ - ' Conversation Identifiers. Please see the album type specific scripts to view more data' \ - ' for each album type.' - report = ArtifactHtmlReport('Ph20.2-Album Records NAD-SyndPL') - report.start_artifact_report(report_folder, 'Ph20.2-Album Records NAD-SyndPL', description) - report.add_script() - data_headers = ('zGenAlbum-Creation Date', - 'zGenAlbum-Start Date', - 'zGenAlbum-End Date', - 'zGenAlbum-Album Kind', - 'zGenAlbum-Title', - 'zGenAlbum-Import Session ID', - 'zGenAlbum-Imported by Bundle Identifier', - 'zGenAlbum-Cached Photos Count', - 'zGenAlbum-Cached Videos Count', - 'zGenAlbum-Cached Count', - 'zGenAlbum-Trashed State', - 'zGenAlbum-Trash Date', - 'zGenAlbum-UUID', - 'zGenAlbum-Cloud GUID') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph20.2-Album Records NAD-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph20.2-Album Records NAD-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' Album Records with No Asset Data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], + row[8], row[9], row[10], row[11], row[12], row[13])) + + data_headers = (('zGenAlbum-Creation Date', 'datetime'), + ('zGenAlbum-Start Date', 'datetime'), + ('zGenAlbum-End Date', 'datetime'), + 'zGenAlbum-Album Kind', + 'zGenAlbum-Title', + 'zGenAlbum-Import Session ID', + 'zGenAlbum-Imported by Bundle Identifier', + 'zGenAlbum-Cached Photos Count', + 'zGenAlbum-Cached Videos Count', + 'zGenAlbum-Cached Count', + 'zGenAlbum-Trashed State', + ('zGenAlbum-Trash Date', 'datetime'), + 'zGenAlbum-UUID', + 'zGenAlbum-Cloud GUID') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', @@ -734,93 +580,27 @@ def get_ph20albumrecrodsnadsyndpl(files_found, report_folder, seeker, wrap_text, zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart' FROM ZGENERICALBUM zGenAlbum ORDER BY zGenAlbum.ZCREATIONDATE - """) - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], - row[8], row[9], row[10], row[11], row[12], row[13])) - - counter += 1 - - description = 'Parses Basic Album records found in the Syndication.photoslibrary-database-Photos.sqlite' \ - ' ZGENERICALBUM Table and supports iOS 18.' \ - ' Parses Album records only no asset data being parsed.' \ - ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' \ - ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' \ - ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You' \ - ' Conversation Identifiers. Please see the album type specific scripts to view more data' \ - ' for each album type.' - report = ArtifactHtmlReport('Ph20.2-Album Records NAD-SyndPL') - report.start_artifact_report(report_folder, 'Ph20.2-Album Records NAD-SyndPL', description) - report.add_script() - data_headers = ('zGenAlbum-Creation Date-0', - 'zGenAlbum-Start Date-1', - 'zGenAlbum-End Date-2', - 'zGenAlbum-Album Kind-3', - 'zGenAlbum-Title-4', - 'zGenAlbum-Import Session ID-5', - 'zGenAlbum-Imported by Bundle Identifier-6', - 'zGenAlbum-Cached Photos Count-7', - 'zGenAlbum-Cached Videos Count-8', - 'zGenAlbum-Cached Count-9', - 'zGenAlbum-Trashed State-10', - 'zGenAlbum-Trash Date-11', - 'zGenAlbum-UUID-12', - 'zGenAlbum-Cloud GUID-13') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph20.2-Album Records NAD-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph20.2-Album Records NAD-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' Album Records with No Asset Data') - - db.close() - return - - -__artifacts_v2__ = { - 'Ph20-1-Album Records with NAD-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph20.1 Album Records with No Asset Data', - 'description': 'Parses Basic Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' - ' and supports iOS 11-18. Parses Album records only no asset data being parsed.' - ' Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' - ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' - ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You Conversation Identifiers.' - ' Please see the album type specific scripts to view more data for each album type.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph20albumrecordsnadphdapsql' - }, - 'Ph20-2-Album Records with NAD-SyndPL': { - 'name': 'SyndPL Photos.sqlite Ph20.2 Album Records with No Asset Data', - 'description': 'Parses Basic Album records found in the Syndication.photoslibrary-database-Photos.sqlite' - ' ZGENERICALBUM Table and supports iOS 11-18. Parses Album records only no asset data' - ' being parsed. Use 2-Non-Shared-Album-2 in the search to view Non-Shared Albums.' - ' Use 1505-Shared-Album-1505 in the search to view Shared Albums.' - ' Use 1509-SWY_Synced_Conversation_Media-1509 to view Shared with You Conversation Identifiers.' - ' Please see the album type specific scripts to view more data for each album type.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', - 'notes': '', - 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*', - 'function': 'get_ph20albumrecrodsnadsyndpl' - } -} + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], + row[8], row[9], row[10], row[11], row[12], row[13])) + + data_headers = (('zGenAlbum-Creation Date-0', 'datetime'), + ('zGenAlbum-Start Date-1', 'datetime'), + ('zGenAlbum-End Date-2', 'datetime'), + 'zGenAlbum-Album Kind-3', + 'zGenAlbum-Title-4', + 'zGenAlbum-Import Session ID-5', + 'zGenAlbum-Imported by Bundle Identifier-6', + 'zGenAlbum-Cached Photos Count-7', + 'zGenAlbum-Cached Videos Count-8', + 'zGenAlbum-Cached Count-9', + 'zGenAlbum-Trashed State-10', + ('zGenAlbum-Trash Date-11', 'datetime'), + 'zGenAlbum-UUID-12', + 'zGenAlbum-Cloud GUID-13') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph21AlbumsNonSharedNAD.py b/scripts/artifacts/Ph21AlbumsNonSharedNAD.py index 53280a7c..6d4fc3e4 100644 --- a/scripts/artifacts/Ph21AlbumsNonSharedNAD.py +++ b/scripts/artifacts/Ph21AlbumsNonSharedNAD.py @@ -1,41 +1,48 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses Non-Shared Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table and supports iOS 11-18. -# Parses Non-Shared Album records only no asset data being parsed. This parser will contain parent albums and -# folders, and associated album data. -# This parser is based on research and SQLite Queries written by Scott Koenig -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph21NonSharedAlbumRecordswithNADPhDaPsql': { + 'name': 'Ph21-Non-Shared Album Records NAD-PhDaPsql', + 'description': 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' + ' and supports iOS 11-18. Parses Non-Shared Album records only, no asset data being parsed.' + ' This parser will contain parent albums and folders, and associated album data.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc +@artifact_processor +def Ph21NonSharedAlbumRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) -def get_ph21nonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for PhotoData-Photos.sqlite Non-Shared Album records with" - " no asset data from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', @@ -176,85 +183,63 @@ def get_ph21nonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_tex = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 2 ORDER BY zGenAlbum.ZSTARTDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35])) - - counter += 1 - - description = 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite from' \ - ' ZGENERICALBUM Table and supports iOS 11. Parses Non-Shared Album records only' \ - ' no asset data is being parsed in this parser. This parser will contain parent albums,' \ - ' folders, and associated album data. ' - report = ArtifactHtmlReport('Ph21-Non-Shared Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph21-Non-Shared Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Start Date', - 'zGenAlbum-End Date', - 'ParentzGenAlbum-UUID', - 'ParentzGenAlbum-Cloud GUID', - 'ParentzGenAlbum- Title', - 'zGenAlbum- Title-User&System Applied', - 'zGenAlbum-UUID', - 'zGenAlbum-Cloud GUID', - 'ParentzGenAlbum-Pending Items Count', - 'ParentzGenAlbum-Pending Items Type', - 'ParentzGenAlbum-Kind', - 'ParentzGenAlbum-Cloud-Local-State', - 'ParentzGenAlbum-Sync Event Order Key', - 'ParentzGenAlbum-Pinned', - 'ParentzGenAlbum-Custom Sort Key', - 'ParentzGenAlbum-Custom Sort Ascending', - 'ParentzGenAlbum-Custom Query Type', - 'ParentzGenAlbum-Trashed State', - 'ParentzGenAlbum-Trash Date', - 'zGenAlbum-Pending Items Count', - 'zGenAlbum-Pending Items Type', - 'zGenAlbum- Cached Photos Count', - 'zGenAlbum- Cached Videos Count', - 'zGenAlbum- Cached Count', - 'zGenAlbum-Has Unseen Content', - 'zGenAlbum-Unseen Asset Count', - 'zGenAlbum-zENT- Entity', - 'zGenAlbum-Album Kind', - 'zGenAlbum-Cloud_Local_State', - 'zGenAlbum-Sync Event Order Key', - 'zGenAlbum-Pinned', - 'zGenAlbum-Custom Sort Key', - 'zGenAlbum-Custom Sort Ascending', - 'zGenAlbum-Custom Query Type', - 'zGenAlbum-Trashed State', - 'zGenAlbum-Trash Date') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph21-Non-Shared Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph21-Non-Shared Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Non-Shared Album Records with No Asset Data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35])) + + data_headers = (('zGenAlbum-Start Date', 'datetime'), + ('zGenAlbum-End Date', 'datetime'), + 'ParentzGenAlbum-UUID', + 'ParentzGenAlbum-Cloud GUID', + 'ParentzGenAlbum- Title', + 'zGenAlbum- Title-User&System Applied', + 'zGenAlbum-UUID', + 'zGenAlbum-Cloud GUID', + 'ParentzGenAlbum-Pending Items Count', + 'ParentzGenAlbum-Pending Items Type', + 'ParentzGenAlbum-Kind', + 'ParentzGenAlbum-Cloud-Local-State', + 'ParentzGenAlbum-Sync Event Order Key', + 'ParentzGenAlbum-Pinned', + 'ParentzGenAlbum-Custom Sort Key', + 'ParentzGenAlbum-Custom Sort Ascending', + 'ParentzGenAlbum-Custom Query Type', + 'ParentzGenAlbum-Trashed State', + ('ParentzGenAlbum-Trash Date', 'datetime'), + 'zGenAlbum-Pending Items Count', + 'zGenAlbum-Pending Items Type', + 'zGenAlbum- Cached Photos Count', + 'zGenAlbum- Cached Videos Count', + 'zGenAlbum- Cached Count', + 'zGenAlbum-Has Unseen Content', + 'zGenAlbum-Unseen Asset Count', + 'zGenAlbum-zENT- Entity', + 'zGenAlbum-Album Kind', + 'zGenAlbum-Cloud_Local_State', + 'zGenAlbum-Sync Event Order Key', + 'zGenAlbum-Pinned', + 'zGenAlbum-Custom Sort Key', + 'zGenAlbum-Custom Sort Ascending', + 'zGenAlbum-Custom Query Type', + 'zGenAlbum-Trashed State', + ('zGenAlbum-Trash Date', 'datetime')) + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("12")) & (version.parse(iosversion) < version.parse("13")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', @@ -405,88 +390,66 @@ def get_ph21nonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_tex = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 2 ORDER BY zGenAlbum.ZSTARTDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37])) - - counter += 1 - - description = 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite from' \ - ' ZGENERICALBUM Table and supports iOS 12. Parses Non-Shared Album records only' \ - ' no asset data is being parsed in this parser. This parser will contain parent albums,' \ - ' folders, and associated album data. ' - report = ArtifactHtmlReport('Ph21-Non-Shared Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph21-Non-Shared Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Start Date', - 'zGenAlbum-End Date', - 'ParentzGenAlbum-UUID', - 'ParentzGenAlbum-Cloud GUID', - 'ParentzGenAlbum- Title', - 'zGenAlbum- Title-User&System Applied', - 'zGenAlbum-UUID', - 'zGenAlbum-Cloud GUID', - 'ParentzGenAlbum-Pending Items Count', - 'ParentzGenAlbum-Pending Items Type', - 'ParentzGenAlbum-Kind', - 'ParentzGenAlbum-Cloud-Local-State', - 'ParentzGenAlbum-Sync Event Order Key', - 'ParentzGenAlbum-Pinned', - 'ParentzGenAlbum-Custom Sort Key', - 'ParentzGenAlbum-Custom Sort Ascending', - 'ParentzGenAlbum-Custom Query Type', - 'ParentzGenAlbum-Trashed State', - 'ParentzGenAlbum-Trash Date', - 'ParentzGenAlbum-Cloud Delete State', - 'zGenAlbum-Pending Items Count', - 'zGenAlbum-Pending Items Type', - 'zGenAlbum- Cached Photos Count', - 'zGenAlbum- Cached Videos Count', - 'zGenAlbum- Cached Count', - 'zGenAlbum-Has Unseen Content', - 'zGenAlbum-Unseen Asset Count', - 'zGenAlbum-zENT- Entity', - 'zGenAlbum-Album Kind', - 'zGenAlbum-Cloud_Local_State', - 'zGenAlbum-Sync Event Order Key', - 'zGenAlbum-Pinned', - 'zGenAlbum-Custom Sort Key', - 'zGenAlbum-Custom Sort Ascending', - 'zGenAlbum-Custom Query Type', - 'zGenAlbum-Trashed State', - 'zGenAlbum-Trash Date', - 'zGenAlbum-Cloud Delete State') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph21-Non-Shared Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph21-Non-Shared Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Non-Shared Album Records with No Asset Data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37])) + + data_headers = (('zGenAlbum-Start Date', 'datetime'), + ('zGenAlbum-End Date', 'datetime'), + 'ParentzGenAlbum-UUID', + 'ParentzGenAlbum-Cloud GUID', + 'ParentzGenAlbum- Title', + 'zGenAlbum- Title-User&System Applied', + 'zGenAlbum-UUID', + 'zGenAlbum-Cloud GUID', + 'ParentzGenAlbum-Pending Items Count', + 'ParentzGenAlbum-Pending Items Type', + 'ParentzGenAlbum-Kind', + 'ParentzGenAlbum-Cloud-Local-State', + 'ParentzGenAlbum-Sync Event Order Key', + 'ParentzGenAlbum-Pinned', + 'ParentzGenAlbum-Custom Sort Key', + 'ParentzGenAlbum-Custom Sort Ascending', + 'ParentzGenAlbum-Custom Query Type', + 'ParentzGenAlbum-Trashed State', + ('ParentzGenAlbum-Trash Date', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State', + 'zGenAlbum-Pending Items Count', + 'zGenAlbum-Pending Items Type', + 'zGenAlbum- Cached Photos Count', + 'zGenAlbum- Cached Videos Count', + 'zGenAlbum- Cached Count', + 'zGenAlbum-Has Unseen Content', + 'zGenAlbum-Unseen Asset Count', + 'zGenAlbum-zENT- Entity', + 'zGenAlbum-Album Kind', + 'zGenAlbum-Cloud_Local_State', + 'zGenAlbum-Sync Event Order Key', + 'zGenAlbum-Pinned', + 'zGenAlbum-Custom Sort Key', + 'zGenAlbum-Custom Sort Ascending', + 'zGenAlbum-Custom Query Type', + 'zGenAlbum-Trashed State', + ('zGenAlbum-Trash Date', 'datetime'), + 'zGenAlbum-Cloud Delete State') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', @@ -647,91 +610,69 @@ def get_ph21nonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_tex = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 2 ORDER BY zGenAlbum.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40])) - - counter += 1 - - description = 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite from' \ - ' ZGENERICALBUM Table and supports iOS 13. Parses Non-Shared Album records only' \ - ' no asset data is being parsed in this parser. This parser will contain parent albums,' \ - ' folders, and associated album data. ' - report = ArtifactHtmlReport('Ph21-Non-Shared Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph21-Non-Shared Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Creation Date', - 'zGenAlbum-Start Date', - 'zGenAlbum-End Date', - 'ParentzGenAlbum-UUID', - 'ParentzGenAlbum-Cloud GUID', - 'ParentzGenAlbum- Title', - 'zGenAlbum- Title-User&System Applied', - 'zGenAlbum-UUID', - 'zGenAlbum-Cloud GUID', - 'ParentzGenAlbum-Pending Items Count', - 'ParentzGenAlbum-Pending Items Type', - 'ParentzGenAlbum-Kind', - 'ParentzGenAlbum-Cloud-Local-State', - 'ParentzGenAlbum-Sync Event Order Key', - 'ParentzGenAlbum-Pinned', - 'ParentzGenAlbum-Custom Sort Key', - 'ParentzGenAlbum-Custom Sort Ascending', - 'ParentzGenAlbum-Project Document Type', - 'ParentzGenAlbum-Custom Query Type', - 'ParentzGenAlbum-Trashed State', - 'ParentzGenAlbum-Trash Date', - 'ParentzGenAlbum-Cloud Delete State', - 'zGenAlbum-Pending Items Count', - 'zGenAlbum-Pending Items Type', - 'zGenAlbum- Cached Photos Count', - 'zGenAlbum- Cached Videos Count', - 'zGenAlbum- Cached Count', - 'zGenAlbum-Has Unseen Content', - 'zGenAlbum-Unseen Asset Count', - 'zGenAlbum-zENT- Entity', - 'zGenAlbum-Album Kind', - 'zGenAlbum-Cloud_Local_State', - 'zGenAlbum-Sync Event Order Key', - 'zGenAlbum-Pinned', - 'zGenAlbum-Custom Sort Key', - 'zGenAlbum-Custom Sort Ascending', - 'zGenAlbum-Project Document Type', - 'zGenAlbum-Custom Query Type', - 'zGenAlbum-Trashed State', - 'zGenAlbum-Trash Date', - 'zGenAlbum-Cloud Delete State') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph21-Non-Shared Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph21-Non-Shared Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Non-Shared Album Records with No Asset Data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40])) + + data_headers = (('zGenAlbum-Creation Date', 'datetime'), + ('zGenAlbum-Start Date', 'datetime'), + ('zGenAlbum-End Date', 'datetime'), + 'ParentzGenAlbum-UUID', + 'ParentzGenAlbum-Cloud GUID', + 'ParentzGenAlbum- Title', + 'zGenAlbum- Title-User&System Applied', + 'zGenAlbum-UUID', + 'zGenAlbum-Cloud GUID', + 'ParentzGenAlbum-Pending Items Count', + 'ParentzGenAlbum-Pending Items Type', + 'ParentzGenAlbum-Kind', + 'ParentzGenAlbum-Cloud-Local-State', + 'ParentzGenAlbum-Sync Event Order Key', + 'ParentzGenAlbum-Pinned', + 'ParentzGenAlbum-Custom Sort Key', + 'ParentzGenAlbum-Custom Sort Ascending', + 'ParentzGenAlbum-Project Document Type', + 'ParentzGenAlbum-Custom Query Type', + 'ParentzGenAlbum-Trashed State', + ('ParentzGenAlbum-Trash Date', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State', + 'zGenAlbum-Pending Items Count', + 'zGenAlbum-Pending Items Type', + 'zGenAlbum- Cached Photos Count', + 'zGenAlbum- Cached Videos Count', + 'zGenAlbum- Cached Count', + 'zGenAlbum-Has Unseen Content', + 'zGenAlbum-Unseen Asset Count', + 'zGenAlbum-zENT- Entity', + 'zGenAlbum-Album Kind', + 'zGenAlbum-Cloud_Local_State', + 'zGenAlbum-Sync Event Order Key', + 'zGenAlbum-Pinned', + 'zGenAlbum-Custom Sort Key', + 'zGenAlbum-Custom Sort Ascending', + 'zGenAlbum-Project Document Type', + 'zGenAlbum-Custom Query Type', + 'zGenAlbum-Trashed State', + ('zGenAlbum-Trash Date', 'datetime'), + 'zGenAlbum-Cloud Delete State') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', @@ -903,95 +844,73 @@ def get_ph21nonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_tex = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 2 ORDER BY zGenAlbum.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44])) - - counter += 1 - - description = 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite from' \ - ' ZGENERICALBUM Table and supports iOS 14. Parses Non-Shared Album records only' \ - ' no asset data is being parsed in this parser. This parser will contain parent albums,' \ - ' folders, and associated album data. ' - report = ArtifactHtmlReport('Ph21-Non-Shared Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph21-Non-Shared Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Creation Date', - 'zGenAlbum-Start Date', - 'zGenAlbum-End Date', - 'ParentzGenAlbum-UUID', - 'ParentzGenAlbum-Cloud GUID', - 'ParentzGenAlbum- Title', - 'zGenAlbum- Title-User&System Applied', - 'zGenAlbum-UUID', - 'zGenAlbum-Cloud GUID', - 'zGenAlbum-Creator Bundle Id', - 'ParentzGenAlbum-Creation Date', - 'ParentzGenAlbum-Pending Items Count', - 'ParentzGenAlbum-Pending Items Type', - 'ParentzGenAlbum-Kind', - 'ParentzGenAlbum-Cloud-Local-State', - 'ParentzGenAlbum-Sync Event Order Key', - 'ParentzGenAlbum-Pinned', - 'ParentzGenAlbum-Custom Sort Key', - 'ParentzGenAlbum-Custom Sort Ascending', - 'ParentzGenAlbum-Is Prototype', - 'ParentzGenAlbum-Project Document Type', - 'ParentzGenAlbum-Custom Query Type', - 'ParentzGenAlbum-Trashed State', - 'ParentzGenAlbum-Trash Date', - 'ParentzGenAlbum-Cloud Delete State', - 'zGenAlbum-Pending Items Count', - 'zGenAlbum-Pending Items Type', - 'zGenAlbum- Cached Photos Count', - 'zGenAlbum- Cached Videos Count', - 'zGenAlbum- Cached Count', - 'zGenAlbum-Has Unseen Content', - 'zGenAlbum-Unseen Asset Count', - 'zGenAlbum-zENT- Entity', - 'zGenAlbum-Album Kind', - 'zGenAlbum-Cloud_Local_State', - 'zGenAlbum-Sync Event Order Key', - 'zGenAlbum-Pinned', - 'zGenAlbum-Custom Sort Key', - 'zGenAlbum-Custom Sort Ascending', - 'zGenAlbum-Is Prototype', - 'zGenAlbum-Project Document Type', - 'zGenAlbum-Custom Query Type', - 'zGenAlbum-Trashed State', - 'zGenAlbum-Trash Date', - 'zGenAlbum-Cloud Delete State') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph21-Non-Shared Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph21-Non-Shared Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Non-Shared Album Records with No Asset Data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44])) + + data_headers = (('zGenAlbum-Creation Date', 'datetime'), + ('zGenAlbum-Start Date', 'datetime'), + ('zGenAlbum-End Date', 'datetime'), + 'ParentzGenAlbum-UUID', + 'ParentzGenAlbum-Cloud GUID', + 'ParentzGenAlbum- Title', + 'zGenAlbum- Title-User&System Applied', + 'zGenAlbum-UUID', + 'zGenAlbum-Cloud GUID', + 'zGenAlbum-Creator Bundle Id', + 'ParentzGenAlbum-Creation Date', + 'ParentzGenAlbum-Pending Items Count', + 'ParentzGenAlbum-Pending Items Type', + 'ParentzGenAlbum-Kind', + 'ParentzGenAlbum-Cloud-Local-State', + 'ParentzGenAlbum-Sync Event Order Key', + 'ParentzGenAlbum-Pinned', + 'ParentzGenAlbum-Custom Sort Key', + 'ParentzGenAlbum-Custom Sort Ascending', + 'ParentzGenAlbum-Is Prototype', + 'ParentzGenAlbum-Project Document Type', + 'ParentzGenAlbum-Custom Query Type', + 'ParentzGenAlbum-Trashed State', + ('ParentzGenAlbum-Trash Date', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State', + 'zGenAlbum-Pending Items Count', + 'zGenAlbum-Pending Items Type', + 'zGenAlbum- Cached Photos Count', + 'zGenAlbum- Cached Videos Count', + 'zGenAlbum- Cached Count', + 'zGenAlbum-Has Unseen Content', + 'zGenAlbum-Unseen Asset Count', + 'zGenAlbum-zENT- Entity', + 'zGenAlbum-Album Kind', + 'zGenAlbum-Cloud_Local_State', + 'zGenAlbum-Sync Event Order Key', + 'zGenAlbum-Pinned', + 'zGenAlbum-Custom Sort Key', + 'zGenAlbum-Custom Sort Ascending', + 'zGenAlbum-Is Prototype', + 'zGenAlbum-Project Document Type', + 'zGenAlbum-Custom Query Type', + 'zGenAlbum-Trashed State', + ('zGenAlbum-Trash Date', 'datetime'), + 'zGenAlbum-Cloud Delete State') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', @@ -1163,95 +1082,73 @@ def get_ph21nonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_tex = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 2 ORDER BY zGenAlbum.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44])) + + data_headers = (('zGenAlbum-Creation Date', 'datetime'), + ('zGenAlbum-Start Date', 'datetime'), + ('zGenAlbum-End Date', 'datetime'), + 'ParentzGenAlbum-UUID', + 'ParentzGenAlbum-Cloud GUID', + 'ParentzGenAlbum- Title', + 'zGenAlbum- Title-User&System Applied', + 'zGenAlbum-UUID', + 'zGenAlbum-Cloud GUID', + 'zGenAlbum-Imported by Bundle Identifier', + ('ParentzGenAlbum-Creation Date', 'datetime'), + 'ParentzGenAlbum-Pending Items Count', + 'ParentzGenAlbum-Pending Items Type', + 'ParentzGenAlbum-Kind', + 'ParentzGenAlbum-Cloud-Local-State', + 'ParentzGenAlbum-Sync Event Order Key', + 'ParentzGenAlbum-Pinned', + 'ParentzGenAlbum-Custom Sort Key', + 'ParentzGenAlbum-Custom Sort Ascending', + 'ParentzGenAlbum-Is Prototype', + 'ParentzGenAlbum-Project Document Type', + 'ParentzGenAlbum-Custom Query Type', + 'ParentzGenAlbum-Trashed State', + ('ParentzGenAlbum-Trash Date', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State', + 'zGenAlbum-Pending Items Count', + 'zGenAlbum-Pending Items Type', + 'zGenAlbum- Cached Photos Count', + 'zGenAlbum- Cached Videos Count', + 'zGenAlbum- Cached Count', + 'zGenAlbum-Has Unseen Content', + 'zGenAlbum-Unseen Asset Count', + 'zGenAlbum-zENT- Entity', + 'zGenAlbum-Album Kind', + 'zGenAlbum-Cloud_Local_State', + 'zGenAlbum-Sync Event Order Key', + 'zGenAlbum-Pinned', + 'zGenAlbum-Custom Sort Key', + 'zGenAlbum-Custom Sort Ascending', + 'zGenAlbum-Is Prototype', + 'zGenAlbum-Project Document Type', + 'zGenAlbum-Custom Query Type', + 'zGenAlbum-Trashed State', + ('zGenAlbum-Trash Date', 'datetime'), + 'zGenAlbum-Cloud Delete State') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44])) - - counter += 1 - - description = 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite from' \ - ' ZGENERICALBUM Table and supports iOS 15. Parses Non-Shared Album records only' \ - ' no asset data is being parsed in this parser. This parser will contain parent albums,' \ - ' folders, and associated album data. ' - report = ArtifactHtmlReport('Ph21-Non-Shared Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph21-Non-Shared Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Creation Date', - 'zGenAlbum-Start Date', - 'zGenAlbum-End Date', - 'ParentzGenAlbum-UUID', - 'ParentzGenAlbum-Cloud GUID', - 'ParentzGenAlbum- Title', - 'zGenAlbum- Title-User&System Applied', - 'zGenAlbum-UUID', - 'zGenAlbum-Cloud GUID', - 'zGenAlbum-Imported by Bundle Identifier', - 'ParentzGenAlbum-Creation Date', - 'ParentzGenAlbum-Pending Items Count', - 'ParentzGenAlbum-Pending Items Type', - 'ParentzGenAlbum-Kind', - 'ParentzGenAlbum-Cloud-Local-State', - 'ParentzGenAlbum-Sync Event Order Key', - 'ParentzGenAlbum-Pinned', - 'ParentzGenAlbum-Custom Sort Key', - 'ParentzGenAlbum-Custom Sort Ascending', - 'ParentzGenAlbum-Is Prototype', - 'ParentzGenAlbum-Project Document Type', - 'ParentzGenAlbum-Custom Query Type', - 'ParentzGenAlbum-Trashed State', - 'ParentzGenAlbum-Trash Date', - 'ParentzGenAlbum-Cloud Delete State', - 'zGenAlbum-Pending Items Count', - 'zGenAlbum-Pending Items Type', - 'zGenAlbum- Cached Photos Count', - 'zGenAlbum- Cached Videos Count', - 'zGenAlbum- Cached Count', - 'zGenAlbum-Has Unseen Content', - 'zGenAlbum-Unseen Asset Count', - 'zGenAlbum-zENT- Entity', - 'zGenAlbum-Album Kind', - 'zGenAlbum-Cloud_Local_State', - 'zGenAlbum-Sync Event Order Key', - 'zGenAlbum-Pinned', - 'zGenAlbum-Custom Sort Key', - 'zGenAlbum-Custom Sort Ascending', - 'zGenAlbum-Is Prototype', - 'zGenAlbum-Project Document Type', - 'zGenAlbum-Custom Query Type', - 'zGenAlbum-Trashed State', - 'zGenAlbum-Trash Date', - 'zGenAlbum-Cloud Delete State') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph21-Non-Shared Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph21-Non-Shared Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - else: - logfunc('No data available for PhotoData-Photos.sqlite Non-Shared Album Records with No Asset Data') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', @@ -1441,99 +1338,77 @@ def get_ph21nonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_tex = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 2 ORDER BY zGenAlbum.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47])) + + data_headers = (('zGenAlbum-Creation Date-0', 'datetime'), + ('zGenAlbum-Start Date-1', 'datetime'), + ('zGenAlbum-End Date-2', 'datetime'), + 'ParentzGenAlbum-UUID-3', + 'ParentzGenAlbum-Cloud GUID-4', + 'ParentzGenAlbum- Title-5', + 'zGenAlbum- Title-User&System Applied-6', + 'zGenAlbum-UUID-7', + 'zGenAlbum-Cloud GUID-8', + 'zGenAlbum-Imported by Bundle Identifier-9', + ('ParentzGenAlbum-Creation Date-10', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-11', + 'ParentzGenAlbum-Pending Items Type-12', + 'ParentzGenAlbum-Kind-13', + 'ParentzGenAlbum-Cloud-Local-State-14', + 'ParentzGenAlbum-Sync Event Order Key-15', + 'ParentzGenAlbum-Pinned-16', + 'ParentzGenAlbum-Custom Sort Key-17', + 'ParentzGenAlbum-Custom Sort Ascending-18', + 'ParentzGenAlbum-Is Prototype-19', + 'ParentzGenAlbum-Project Document Type-20', + 'ParentzGenAlbum-Custom Query Type-21', + 'ParentzGenAlbum-Trashed State-22', + ('ParentzGenAlbum-Trash Date-23', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-24', + 'zGenAlbum-Pending Items Count-25', + 'zGenAlbum-Pending Items Type-26', + 'zGenAlbum- Cached Photos Count-27', + 'zGenAlbum- Cached Videos Count-28', + 'zGenAlbum- Cached Count-29', + 'zGenAlbum-Has Unseen Content-30', + 'zGenAlbum-Unseen Asset Count-31', + 'zGenAlbum-zENT- Entity-32', + 'zGenAlbum-Album Kind-33', + 'zGenAlbum-Cloud_Local_State-34', + 'zGenAlbum-Sync Event Order Key-35', + 'zGenAlbum-Pinned-36', + 'zGenAlbum-Custom Sort Key-37', + 'zGenAlbum-Custom Sort Ascending-38', + 'zGenAlbum-Is Prototype-39', + 'zGenAlbum-Project Document Type-40', + 'zGenAlbum-Custom Query Type-41', + 'zGenAlbum-Trashed State-42', + ('zGenAlbum-Trash Date-43', 'datetime'), + 'zGenAlbum-Cloud Delete State-44', + 'zGenAlbum-Search Index Rebuild State-45', + 'zGenAlbum-Duplicate Type-46', + 'zGenAlbum-Privacy State-47') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47])) - - counter += 1 - - description = 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite from' \ - ' ZGENERICALBUM Table and supports iOS 16-17. Parses Non-Shared Album records only' \ - ' no asset data is being parsed in this parser. This parser will contain parent albums,' \ - ' folders, and associated album data. ' - report = ArtifactHtmlReport('Ph21-Non-Shared Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph21-Non-Shared Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Creation Date-0', - 'zGenAlbum-Start Date-1', - 'zGenAlbum-End Date-2', - 'ParentzGenAlbum-UUID-3', - 'ParentzGenAlbum-Cloud GUID-4', - 'ParentzGenAlbum- Title-5', - 'zGenAlbum- Title-User&System Applied-6', - 'zGenAlbum-UUID-7', - 'zGenAlbum-Cloud GUID-8', - 'zGenAlbum-Imported by Bundle Identifier-9', - 'ParentzGenAlbum-Creation Date-10', - 'ParentzGenAlbum-Pending Items Count-11', - 'ParentzGenAlbum-Pending Items Type-12', - 'ParentzGenAlbum-Kind-13', - 'ParentzGenAlbum-Cloud-Local-State-14', - 'ParentzGenAlbum-Sync Event Order Key-15', - 'ParentzGenAlbum-Pinned-16', - 'ParentzGenAlbum-Custom Sort Key-17', - 'ParentzGenAlbum-Custom Sort Ascending-18', - 'ParentzGenAlbum-Is Prototype-19', - 'ParentzGenAlbum-Project Document Type-20', - 'ParentzGenAlbum-Custom Query Type-21', - 'ParentzGenAlbum-Trashed State-22', - 'ParentzGenAlbum-Trash Date-23', - 'ParentzGenAlbum-Cloud Delete State-24', - 'zGenAlbum-Pending Items Count-25', - 'zGenAlbum-Pending Items Type-26', - 'zGenAlbum- Cached Photos Count-27', - 'zGenAlbum- Cached Videos Count-28', - 'zGenAlbum- Cached Count-29', - 'zGenAlbum-Has Unseen Content-30', - 'zGenAlbum-Unseen Asset Count-31', - 'zGenAlbum-zENT- Entity-32', - 'zGenAlbum-Album Kind-33', - 'zGenAlbum-Cloud_Local_State-34', - 'zGenAlbum-Sync Event Order Key-35', - 'zGenAlbum-Pinned-36', - 'zGenAlbum-Custom Sort Key-37', - 'zGenAlbum-Custom Sort Ascending-38', - 'zGenAlbum-Is Prototype-39', - 'zGenAlbum-Project Document Type-40', - 'zGenAlbum-Custom Query Type-41', - 'zGenAlbum-Trashed State-42', - 'zGenAlbum-Trash Date-43', - 'zGenAlbum-Cloud Delete State-44', - 'zGenAlbum-Search Index Rebuild State-45', - 'zGenAlbum-Duplicate Type-46', - 'zGenAlbum-Privacy State-47') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph21-Non-Shared Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph21-Non-Shared Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Non-Shared Album Records with No Asset Data') - - db.close() - return - - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', @@ -1717,113 +1592,331 @@ def get_ph21nonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_tex END AS 'zGenAlbum-Privacy State' FROM ZGENERICALBUM zGenAlbum LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER - LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = zGenAlbum.Z_PK - LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS + LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 2 ORDER BY zGenAlbum.ZCREATIONDATE - """) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47])) + + data_headers = (('zGenAlbum-Creation Date-0', 'datetime'), + ('zGenAlbum-Start Date-1', 'datetime'), + ('zGenAlbum-End Date-2', 'datetime'), + 'ParentzGenAlbum-UUID-3', + 'ParentzGenAlbum-Cloud GUID-4', + 'ParentzGenAlbum- Title-5', + 'zGenAlbum- Title-User&System Applied-6', + 'zGenAlbum-UUID-7', + 'zGenAlbum-Cloud GUID-8', + 'zGenAlbum-Imported by Bundle Identifier-9', + ('ParentzGenAlbum-Creation Date-10', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-11', + 'ParentzGenAlbum-Pending Items Type-12', + 'ParentzGenAlbum-Kind-13', + 'ParentzGenAlbum-Cloud-Local-State-14', + 'ParentzGenAlbum-Sync Event Order Key-15', + 'ParentzGenAlbum-Pinned-16', + 'ParentzGenAlbum-Custom Sort Key-17', + 'ParentzGenAlbum-Custom Sort Ascending-18', + 'ParentzGenAlbum-Is Prototype-19', + 'ParentzGenAlbum-Project Document Type-20', + 'ParentzGenAlbum-Custom Query Type-21', + 'ParentzGenAlbum-Trashed State-22', + ('ParentzGenAlbum-Trash Date-23', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-24', + 'zGenAlbum-Pending Items Count-25', + 'zGenAlbum-Pending Items Type-26', + 'zGenAlbum- Cached Photos Count-27', + 'zGenAlbum- Cached Videos Count-28', + 'zGenAlbum- Cached Count-29', + 'zGenAlbum-Has Unseen Content-30', + 'zGenAlbum-Unseen Asset Count-31', + 'zGenAlbum-zENT- Entity-32', + 'zGenAlbum-Album Kind-33', + 'zGenAlbum-Cloud_Local_State-34', + 'zGenAlbum-Sync Event Order Key-35', + 'zGenAlbum-Pinned-36', + 'zGenAlbum-Custom Sort Key-37', + 'zGenAlbum-Custom Sort Ascending-38', + 'zGenAlbum-Is Prototype-39', + 'zGenAlbum-Project Document Type-40', + 'zGenAlbum-Custom Query Type-41', + 'zGenAlbum-Trashed State-42', + ('zGenAlbum-Trash Date-43', 'datetime'), + 'zGenAlbum-Cloud Delete State-44', + 'zGenAlbum-Search Index Rebuild State-45', + 'zGenAlbum-Duplicate Type-46', + 'zGenAlbum-Privacy State-47') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path - all_rows = cursor.fetchall() - usageentries = len(all_rows) + elif version.parse(iosversion) >= version.parse("18"): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47])) - - counter += 1 - - description = 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite from' \ - ' ZGENERICALBUM Table and supports iOS 18. Parses Non-Shared Album records only' \ - ' no asset data is being parsed in this parser. This parser will contain parent albums,' \ - ' folders, and associated album data. ' - report = ArtifactHtmlReport('Ph21-Non-Shared Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph21-Non-Shared Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Creation Date-0', - 'zGenAlbum-Start Date-1', - 'zGenAlbum-End Date-2', - 'ParentzGenAlbum-UUID-3', - 'ParentzGenAlbum-Cloud GUID-4', - 'ParentzGenAlbum- Title-5', - 'zGenAlbum- Title-User&System Applied-6', - 'zGenAlbum-UUID-7', - 'zGenAlbum-Cloud GUID-8', - 'zGenAlbum-Imported by Bundle Identifier-9', - 'ParentzGenAlbum-Creation Date-10', - 'ParentzGenAlbum-Pending Items Count-11', - 'ParentzGenAlbum-Pending Items Type-12', - 'ParentzGenAlbum-Kind-13', - 'ParentzGenAlbum-Cloud-Local-State-14', - 'ParentzGenAlbum-Sync Event Order Key-15', - 'ParentzGenAlbum-Pinned-16', - 'ParentzGenAlbum-Custom Sort Key-17', - 'ParentzGenAlbum-Custom Sort Ascending-18', - 'ParentzGenAlbum-Is Prototype-19', - 'ParentzGenAlbum-Project Document Type-20', - 'ParentzGenAlbum-Custom Query Type-21', - 'ParentzGenAlbum-Trashed State-22', - 'ParentzGenAlbum-Trash Date-23', - 'ParentzGenAlbum-Cloud Delete State-24', - 'zGenAlbum-Pending Items Count-25', - 'zGenAlbum-Pending Items Type-26', - 'zGenAlbum- Cached Photos Count-27', - 'zGenAlbum- Cached Videos Count-28', - 'zGenAlbum- Cached Count-29', - 'zGenAlbum-Has Unseen Content-30', - 'zGenAlbum-Unseen Asset Count-31', - 'zGenAlbum-zENT- Entity-32', - 'zGenAlbum-Album Kind-33', - 'zGenAlbum-Cloud_Local_State-34', - 'zGenAlbum-Sync Event Order Key-35', - 'zGenAlbum-Pinned-36', - 'zGenAlbum-Custom Sort Key-37', - 'zGenAlbum-Custom Sort Ascending-38', - 'zGenAlbum-Is Prototype-39', - 'zGenAlbum-Project Document Type-40', - 'zGenAlbum-Custom Query Type-41', - 'zGenAlbum-Trashed State-42', - 'zGenAlbum-Trash Date-43', - 'zGenAlbum-Cloud Delete State-44', - 'zGenAlbum-Search Index Rebuild State-45', - 'zGenAlbum-Duplicate Type-46', - 'zGenAlbum-Privacy State-47') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph21-Non-Shared Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph21-Non-Shared Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Non-Shared Album Records with No Asset Data') - - db.close() - return - -__artifacts_v2__ = { - 'Ph21-Non-Shared Album Records with NAD-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph21 Non-Shared Album Records with No Asset Data', - 'description': 'Parses Non-Shared Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' - ' and supports iOS 11-18. Parses Non-Shared Album records only, no asset data being parsed.' - ' This parser will contain parent albums and folders, and associated album data.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph21nonsharedalbumsphdapsql' - } -} + query = ''' + SELECT + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', + ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID', + ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID', + ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title', + zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier', + DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Creation Date', + ParentzGenAlbum.ZPENDINGITEMSCOUNT AS 'ParentzGenAlbum-Pending Items Count', + CASE ParentzGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'ParentzGenAlbum-Pending Items Type', + CASE ParentzGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || '' + END AS 'ParentzGenAlbum-Kind', + CASE ParentzGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'ParentzGenAlbum-Cloud-Local-State', + ParentzGenAlbum.ZSYNCEVENTORDERKEY AS 'ParentzGenAlbum-Sync Event Order Key', + CASE ParentzGenAlbum.ZISPINNED + WHEN 0 THEN '0-ParentzGenAlbum Not Pinned-0' + WHEN 1 THEN '1-ParentzGenAlbum Pinned-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPINNED || '' + END AS 'ParentzGenAlbum-Pinned', + CASE ParentzGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'ParentzGenAlbum-Custom Sort Key', + CASE ParentzGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'ParentzGenAlbum-Custom Sort Ascending', + CASE ParentzGenAlbum.ZISPROTOTYPE + WHEN 0 THEN '0-ParentzGenAlbum Not Prototype-0' + WHEN 1 THEN '1-ParentzGenAlbum Prototype-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPROTOTYPE || '' + END AS 'ParentzGenAlbum-Is Prototype', + CASE ParentzGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'ParentzGenAlbum-Project Document Type', + CASE ParentzGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'ParentzGenAlbum-Custom Query Type', + CASE ParentzGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN '0-ParentzGenAlbum Not In Trash-0' + WHEN 1 THEN '1-ParentzGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZTRASHEDSTATE || '' + END AS 'ParentzGenAlbum-Trashed State', + DateTime(ParentzGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Trash Date', + CASE ParentzGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN '0-ParentzGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN '1-ParentzGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'ParentzGenAlbum-Cloud Delete State', + zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count', + CASE zGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'zGenAlbum-Pending Items Type', + zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count', + zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count', + zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count', + CASE zGenAlbum.ZHASUNSEENCONTENT + WHEN 0 THEN 'No Unseen Content-StillTesting-0' + WHEN 1 THEN 'Unseen Content-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || '' + END AS 'zGenAlbum-Has Unseen Content', + zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count', + CASE zGenAlbum.Z_ENT + WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27' + WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28' + WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29' + WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30' + WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || '' + END AS 'zGenAlbum-zENT- Entity', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind', + CASE zGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'zGenAlbum-Cloud_Local_State', + zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key', + CASE zGenAlbum.ZISPINNED + WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'zGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || '' + END AS 'zGenAlbum-Pinned', + CASE zGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'zGenAlbum-Custom Sort Key', + CASE zGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'zGenAlbum-Custom Sort Ascending', + CASE zGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'zGenAlbum-Not Prototype-0' + WHEN 1 THEN 'zGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || '' + END AS 'zGenAlbum-Is Prototype', + CASE zGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'zGenAlbum-Project Document Type', + CASE zGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'zGenAlbum-Custom Query Type', + CASE zGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'zGenAlbum Not In Trash-0' + WHEN 1 THEN 'zGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || '' + END AS 'zGenAlbum-Trashed State', + DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date', + CASE zGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'zGenAlbum-Cloud Delete State', + CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zGenAlbum-Search Index Rebuild State', + CASE zGenAlbum.ZDUPLICATETYPE + WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0' + WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1' + WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || '' + END AS 'zGenAlbum-Duplicate Type', + CASE zGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || '' + END AS 'zGenAlbum-Privacy State' + FROM ZGENERICALBUM zGenAlbum + LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER + LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK + = zCldShareAlbumInvRec.ZALBUM + WHERE zGenAlbum.ZKIND = 2 + ORDER BY zGenAlbum.ZCREATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47])) + + data_headers = (('zGenAlbum-Creation Date-0', 'datetime'), + ('zGenAlbum-Start Date-1', 'datetime'), + ('zGenAlbum-End Date-2', 'datetime'), + 'ParentzGenAlbum-UUID-3', + 'ParentzGenAlbum-Cloud GUID-4', + 'ParentzGenAlbum- Title-5', + 'zGenAlbum- Title-User&System Applied-6', + 'zGenAlbum-UUID-7', + 'zGenAlbum-Cloud GUID-8', + 'zGenAlbum-Imported by Bundle Identifier-9', + ('ParentzGenAlbum-Creation Date-10', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-11', + 'ParentzGenAlbum-Pending Items Type-12', + 'ParentzGenAlbum-Kind-13', + 'ParentzGenAlbum-Cloud-Local-State-14', + 'ParentzGenAlbum-Sync Event Order Key-15', + 'ParentzGenAlbum-Pinned-16', + 'ParentzGenAlbum-Custom Sort Key-17', + 'ParentzGenAlbum-Custom Sort Ascending-18', + 'ParentzGenAlbum-Is Prototype-19', + 'ParentzGenAlbum-Project Document Type-20', + 'ParentzGenAlbum-Custom Query Type-21', + 'ParentzGenAlbum-Trashed State-22', + ('ParentzGenAlbum-Trash Date-23', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-24', + 'zGenAlbum-Pending Items Count-25', + 'zGenAlbum-Pending Items Type-26', + 'zGenAlbum- Cached Photos Count-27', + 'zGenAlbum- Cached Videos Count-28', + 'zGenAlbum- Cached Count-29', + 'zGenAlbum-Has Unseen Content-30', + 'zGenAlbum-Unseen Asset Count-31', + 'zGenAlbum-zENT- Entity-32', + 'zGenAlbum-Album Kind-33', + 'zGenAlbum-Cloud_Local_State-34', + 'zGenAlbum-Sync Event Order Key-35', + 'zGenAlbum-Pinned-36', + 'zGenAlbum-Custom Sort Key-37', + 'zGenAlbum-Custom Sort Ascending-38', + 'zGenAlbum-Is Prototype-39', + 'zGenAlbum-Project Document Type-40', + 'zGenAlbum-Custom Query Type-41', + 'zGenAlbum-Trashed State-42', + ('zGenAlbum-Trash Date-43', 'datetime'), + 'zGenAlbum-Cloud Delete State-44', + 'zGenAlbum-Search Index Rebuild State-45', + 'zGenAlbum-Duplicate Type-46', + 'zGenAlbum-Privacy State-47') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph22AssetsInNonSharedAlbums.py b/scripts/artifacts/Ph22AssetsInNonSharedAlbums.py index f414af1c..c33e9de4 100644 --- a/scripts/artifacts/Ph22AssetsInNonSharedAlbums.py +++ b/scripts/artifacts/Ph22AssetsInNonSharedAlbums.py @@ -1,41 +1,47 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses Assets associated with Non-Shared Albums found in the PhotoData-Photos.sqlite and supports iOS 11-18. -# Parses limited assets data with full non-shared album data. -# This parser is based on research and SQLite Queries written by Scott Koenig -# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools -# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results. -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph22AssetsinNonSharedAlbumsPhDaPsql': { + 'name': 'Ph22-Assets in Non-Shared Albums-PhDaPsql', + 'description': 'Parses Assets associated with Non-Shared Albums found in PhotoData-Photos.sqlite and' + ' supports iOS 11-18. Parses limited assets data with full non-shared album data.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-E-Asset_In_Albums', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc +@artifact_processor +def Ph22AssetsinNonSharedAlbumsPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) -def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for PhotoData-Photos.sqlite assets in Non-Shared Albums from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', zAsset.Z_PK AS 'zAsset-zPK', @@ -214,106 +220,86 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker, LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zGenAlbum.ZKIND = 2 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55])) - - counter += 1 - - description = 'Parses Assets associated with Non-Shared Albums found in the PhotoData-Photos.sqlite' \ - ' from iOS 11. Parses limited asset data with full non-shared album data.' - report = ArtifactHtmlReport('Ph22-Assets in Non-Shared Albums-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph22-Assets in Non-Shared Albums-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-zPK-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zAddAssetAttr- Creator Bundle ID-6', - 'zAsset-Visibility State-7', - 'zAsset-Saved Asset Type-8', - 'zAsset- SortToken -CameraRoll-9', - 'zAsset-Added Date-10', - 'zCldMast-Creation Date-11', - 'zAddAssetAttr-Time Zone Name-12', - 'zAddAssetAttr-EXIF-String-13', - 'zAsset-Modification Date-14', - 'zAsset-Last Shared Date-15', - 'zAsset-Trashed Date-16', - 'zAddAssetAttr-zPK-17', - 'zAsset-UUID = store.cloudphotodb-18', - 'zAddAssetAttr-Master Fingerprint-19', - 'zGenAlbum-Start Date-20', - 'zGenAlbum-End Date-21', - 'ParentzGenAlbum-UUID-22', - 'ParentzGenAlbum-Cloud GUID-23', - 'ParentzGenAlbum- Title-24', - 'zGenAlbum- Title-User&System Applied-25', - 'zGenAlbum-UUID-26', - 'zGenAlbum-Cloud GUID-27', - 'ParentzGenAlbum-Pending Items Count-28', - 'ParentzGenAlbum-Pending Items Type-29', - 'ParentzGenAlbum-Kind-30', - 'ParentzGenAlbum-Cloud-Local-State-31', - 'ParentzGenAlbum-Sync Event Order Key-32', - 'ParentzGenAlbum-Pinned-33', - 'ParentzGenAlbum-Custom Sort Key-34', - 'ParentzGenAlbum-Custom Sort Ascending-35', - 'ParentzGenAlbum-Custom Query Type-36', - 'ParentzGenAlbum-Trashed State-37', - 'ParentzGenAlbum-Trash Date-38', - 'zGenAlbum-Pending Items Count-39', - 'zGenAlbum-Pending Items Type-40', - 'zGenAlbum- Cached Photos Count-41', - 'zGenAlbum- Cached Videos Count-42', - 'zGenAlbum- Cached Count-43', - 'zGenAlbum-Has Unseen Content-44', - 'zGenAlbum-Unseen Asset Count-45', - 'zGenAlbum-zENT- Entity-46', - 'zGenAlbum-Album Kind-47', - 'zGenAlbum-Cloud_Local_State-48', - 'zGenAlbum-Sync Event Order Key-49', - 'zGenAlbum-Pinned-50', - 'zGenAlbum-Custom Sort Key-51', - 'zGenAlbum-Custom Sort Ascending-52', - 'zGenAlbum-Custom Query Type-53', - 'zGenAlbum-Trashed State-54', - 'zGenAlbum-Trash Date-55') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph22-Assets in Non-Shared Albums-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph22-Assets in Non-Shared Albums-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available from PhotoData-Photos.sqlite for Assets in Non-Shared Albums') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Creator Bundle ID-6', + 'zAsset-Visibility State-7', + 'zAsset-Saved Asset Type-8', + ('zAsset- SortToken -CameraRoll-9', 'datetime'), + ('zAsset-Added Date-10', 'datetime'), + ('zCldMast-Creation Date-11', 'datetime'), + 'zAddAssetAttr-Time Zone Name-12', + 'zAddAssetAttr-EXIF-String-13', + ('zAsset-Modification Date-14', 'datetime'), + ('zAsset-Last Shared Date-15', 'datetime'), + ('zAsset-Trashed Date-16', 'datetime'), + 'zAddAssetAttr-zPK-17', + 'zAsset-UUID = store.cloudphotodb-18', + 'zAddAssetAttr-Master Fingerprint-19', + ('zGenAlbum-Start Date-20', 'datetime'), + ('zGenAlbum-End Date-21', 'datetime'), + 'ParentzGenAlbum-UUID-22', + 'ParentzGenAlbum-Cloud GUID-23', + 'ParentzGenAlbum- Title-24', + 'zGenAlbum- Title-User&System Applied-25', + 'zGenAlbum-UUID-26', + 'zGenAlbum-Cloud GUID-27', + 'ParentzGenAlbum-Pending Items Count-28', + 'ParentzGenAlbum-Pending Items Type-29', + 'ParentzGenAlbum-Kind-30', + 'ParentzGenAlbum-Cloud-Local-State-31', + 'ParentzGenAlbum-Sync Event Order Key-32', + 'ParentzGenAlbum-Pinned-33', + 'ParentzGenAlbum-Custom Sort Key-34', + 'ParentzGenAlbum-Custom Sort Ascending-35', + 'ParentzGenAlbum-Custom Query Type-36', + 'ParentzGenAlbum-Trashed State-37', + ('ParentzGenAlbum-Trash Date-38', 'datetime'), + 'zGenAlbum-Pending Items Count-39', + 'zGenAlbum-Pending Items Type-40', + 'zGenAlbum- Cached Photos Count-41', + 'zGenAlbum- Cached Videos Count-42', + 'zGenAlbum- Cached Count-43', + 'zGenAlbum-Has Unseen Content-44', + 'zGenAlbum-Unseen Asset Count-45', + 'zGenAlbum-zENT- Entity-46', + 'zGenAlbum-Album Kind-47', + 'zGenAlbum-Cloud_Local_State-48', + 'zGenAlbum-Sync Event Order Key-49', + 'zGenAlbum-Pinned-50', + 'zGenAlbum-Custom Sort Key-51', + 'zGenAlbum-Custom Sort Ascending-52', + 'zGenAlbum-Custom Query Type-53', + 'zGenAlbum-Trashed State-54', + ('zGenAlbum-Trash Date-55', 'datetime')) + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("12")) & (version.parse(iosversion) < version.parse("13")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', zAsset.Z_PK AS 'zAsset-zPK', @@ -502,108 +488,88 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker, LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zGenAlbum.ZKIND = 2 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57])) - - counter += 1 - - description = 'Parses Assets associated with Non-Shared Albums found in the PhotoData-Photos.sqlite' \ - ' from iOS 12. Parses limited asset data with full non-shared album data.' - report = ArtifactHtmlReport('Ph22-Assets in Non-Shared Albums-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph22-Assets in Non-Shared Albums-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-zPK-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zAddAssetAttr- Creator Bundle ID-6', - 'zAsset-Visibility State-7', - 'zAsset-Saved Asset Type-8', - 'zAsset- SortToken -CameraRoll-9', - 'zAsset-Added Date-10', - 'zCldMast-Creation Date-11', - 'zAddAssetAttr-Time Zone Name-12', - 'zAddAssetAttr-EXIF-String-13', - 'zAsset-Modification Date-14', - 'zAsset-Last Shared Date-15', - 'zAsset-Trashed Date-16', - 'zAddAssetAttr-zPK-17', - 'zAsset-UUID = store.cloudphotodb-18', - 'zAddAssetAttr-Master Fingerprint-19', - 'zGenAlbum-Start Date-20', - 'zGenAlbum-End Date-21', - 'ParentzGenAlbum-UUID-22', - 'ParentzGenAlbum-Cloud GUID-23', - 'ParentzGenAlbum- Title-24', - 'zGenAlbum- Title-User&System Applied-25', - 'zGenAlbum-UUID-26', - 'zGenAlbum-Cloud GUID-27', - 'ParentzGenAlbum-Pending Items Count-28', - 'ParentzGenAlbum-Pending Items Type-29', - 'ParentzGenAlbum-Kind-30', - 'ParentzGenAlbum-Cloud-Local-State-31', - 'ParentzGenAlbum-Sync Event Order Key-32', - 'ParentzGenAlbum-Pinned-33', - 'ParentzGenAlbum-Custom Sort Key-34', - 'ParentzGenAlbum-Custom Sort Ascending-35', - 'ParentzGenAlbum-Custom Query Type-36', - 'ParentzGenAlbum-Trashed State-37', - 'ParentzGenAlbum-Trash Date-38', - 'ParentzGenAlbum-Cloud Delete State-39', - 'zGenAlbum-Pending Items Count-40', - 'zGenAlbum-Pending Items Type-41', - 'zGenAlbum- Cached Photos Count-42', - 'zGenAlbum- Cached Videos Count-43', - 'zGenAlbum- Cached Count-44', - 'zGenAlbum-Has Unseen Content-45', - 'zGenAlbum-Unseen Asset Count-46', - 'zGenAlbum-zENT- Entity-47', - 'zGenAlbum-Album Kind-48', - 'zGenAlbum-Cloud_Local_State-49', - 'zGenAlbum-Sync Event Order Key-50', - 'zGenAlbum-Pinned-51', - 'zGenAlbum-Custom Sort Key-52', - 'zGenAlbum-Custom Sort Ascending-53', - 'zGenAlbum-Custom Query Type-54', - 'zGenAlbum-Trashed State-55', - 'zGenAlbum-Trash Date-56', - 'zGenAlbum-Cloud Delete State-57') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph22-Assets in Non-Shared Albums-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph22-Assets in Non-Shared Albums-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available from PhotoData-Photos.sqlite for Assets in Non-Shared Albums') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Creator Bundle ID-6', + 'zAsset-Visibility State-7', + 'zAsset-Saved Asset Type-8', + ('zAsset- SortToken -CameraRoll-9', 'datetime'), + ( 'zAsset-Added Date-10', 'datetime'), + ('zCldMast-Creation Date-11', 'datetime'), + 'zAddAssetAttr-Time Zone Name-12', + 'zAddAssetAttr-EXIF-String-13', + ('zAsset-Modification Date-14', 'datetime'), + ('zAsset-Last Shared Date-15', 'datetime'), + ('zAsset-Trashed Date-16', 'datetime'), + 'zAddAssetAttr-zPK-17', + 'zAsset-UUID = store.cloudphotodb-18', + 'zAddAssetAttr-Master Fingerprint-19', + ('zGenAlbum-Start Date-20', 'datetime'), + ('zGenAlbum-End Date-21', 'datetime'), + 'ParentzGenAlbum-UUID-22', + 'ParentzGenAlbum-Cloud GUID-23', + 'ParentzGenAlbum- Title-24', + 'zGenAlbum- Title-User&System Applied-25', + 'zGenAlbum-UUID-26', + 'zGenAlbum-Cloud GUID-27', + 'ParentzGenAlbum-Pending Items Count-28', + 'ParentzGenAlbum-Pending Items Type-29', + 'ParentzGenAlbum-Kind-30', + 'ParentzGenAlbum-Cloud-Local-State-31', + 'ParentzGenAlbum-Sync Event Order Key-32', + 'ParentzGenAlbum-Pinned-33', + 'ParentzGenAlbum-Custom Sort Key-34', + 'ParentzGenAlbum-Custom Sort Ascending-35', + 'ParentzGenAlbum-Custom Query Type-36', + 'ParentzGenAlbum-Trashed State-37', + ('ParentzGenAlbum-Trash Date-38', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-39', + 'zGenAlbum-Pending Items Count-40', + 'zGenAlbum-Pending Items Type-41', + 'zGenAlbum- Cached Photos Count-42', + 'zGenAlbum- Cached Videos Count-43', + 'zGenAlbum- Cached Count-44', + 'zGenAlbum-Has Unseen Content-45', + 'zGenAlbum-Unseen Asset Count-46', + 'zGenAlbum-zENT- Entity-47', + 'zGenAlbum-Album Kind-48', + 'zGenAlbum-Cloud_Local_State-49', + 'zGenAlbum-Sync Event Order Key-50', + 'zGenAlbum-Pinned-51', + 'zGenAlbum-Custom Sort Key-52', + 'zGenAlbum-Custom Sort Ascending-53', + 'zGenAlbum-Custom Query Type-54', + 'zGenAlbum-Trashed State-55', + ('zGenAlbum-Trash Date-56', 'datetime'), + 'zGenAlbum-Cloud Delete State-57') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', zAsset.Z_PK AS 'zAsset-zPK', @@ -802,111 +768,91 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker, LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zGenAlbum.ZKIND = 2 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60])) - - counter += 1 - - description = 'Parses Assets associated with Non-Shared Albums found in the PhotoData-Photos.sqlite' \ - ' from iOS 13. Parses limited asset data with full non-shared album data.' - report = ArtifactHtmlReport('Ph22-Assets in Non-Shared Albums-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph22-Assets in Non-Shared Albums-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-zPK-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zAddAssetAttr- Creator Bundle ID-6', - 'zAsset-Visibility State-7', - 'zAsset-Saved Asset Type-8', - 'zAsset- SortToken -CameraRoll-9', - 'zAsset-Added Date-10', - 'zCldMast-Creation Date-11', - 'zAddAssetAttr-Time Zone Name-12', - 'zAddAssetAttr-EXIF-String-13', - 'zAsset-Modification Date-14', - 'zAsset-Last Shared Date-15', - 'zAsset-Trashed Date-16', - 'zAddAssetAttr-zPK-17', - 'zAsset-UUID = store.cloudphotodb-18', - 'zAddAssetAttr-Master Fingerprint-19', - 'zGenAlbum-Creation Date-20', - 'zGenAlbum-Start Date-21', - 'zGenAlbum-End Date-22', - 'ParentzGenAlbum-UUID-23', - 'ParentzGenAlbum-Cloud GUID-24', - 'ParentzGenAlbum- Title-25', - 'zGenAlbum- Title-User&System Applied-26', - 'zGenAlbum-UUID-27', - 'zGenAlbum-Cloud GUID-28', - 'ParentzGenAlbum-Pending Items Count-29', - 'ParentzGenAlbum-Pending Items Type-30', - 'ParentzGenAlbum-Kind-31', - 'ParentzGenAlbum-Cloud-Local-State-32', - 'ParentzGenAlbum-Sync Event Order Key-33', - 'ParentzGenAlbum-Pinned-34', - 'ParentzGenAlbum-Custom Sort Key-35', - 'ParentzGenAlbum-Custom Sort Ascending-36', - 'ParentzGenAlbum-Project Document Type-37', - 'ParentzGenAlbum-Custom Query Type-38', - 'ParentzGenAlbum-Trashed State-39', - 'ParentzGenAlbum-Trash Date-40', - 'ParentzGenAlbum-Cloud Delete State-41', - 'zGenAlbum-Pending Items Count-42', - 'zGenAlbum-Pending Items Type-43', - 'zGenAlbum- Cached Photos Count-44', - 'zGenAlbum- Cached Videos Count-45', - 'zGenAlbum- Cached Count-46', - 'zGenAlbum-Has Unseen Content-47', - 'zGenAlbum-Unseen Asset Count-48', - 'zGenAlbum-zENT- Entity-49', - 'zGenAlbum-Album Kind-50', - 'zGenAlbum-Cloud_Local_State-51', - 'zGenAlbum-Sync Event Order Key-52', - 'zGenAlbum-Pinned-53', - 'zGenAlbum-Custom Sort Key-54', - 'zGenAlbum-Custom Sort Ascending-55', - 'zGenAlbum-Project Document Type-56', - 'zGenAlbum-Custom Query Type-57', - 'zGenAlbum-Trashed State-58', - 'zGenAlbum-Trash Date-59', - 'zGenAlbum-Cloud Delete State-60') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph22-Assets in Non-Shared Albums-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph22-Assets in Non-Shared Albums-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available from PhotoData-Photos.sqlite for Assets in Non-Shared Albums') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Creator Bundle ID-6', + 'zAsset-Visibility State-7', + 'zAsset-Saved Asset Type-8', + ('zAsset- SortToken -CameraRoll-9', 'datetime'), + ('zAsset-Added Date-10', 'datetime'), + ('zCldMast-Creation Date-11', 'datetime'), + 'zAddAssetAttr-Time Zone Name-12', + 'zAddAssetAttr-EXIF-String-13', + ('zAsset-Modification Date-14', 'datetime'), + ('zAsset-Last Shared Date-15', 'datetime'), + ('zAsset-Trashed Date-16', 'datetime'), + 'zAddAssetAttr-zPK-17', + 'zAsset-UUID = store.cloudphotodb-18', + 'zAddAssetAttr-Master Fingerprint-19', + ('zGenAlbum-Creation Date-20', 'datetime'), + ('zGenAlbum-Start Date-21', 'datetime'), + ('zGenAlbum-End Date-22', 'datetime'), + 'ParentzGenAlbum-UUID-23', + 'ParentzGenAlbum-Cloud GUID-24', + 'ParentzGenAlbum- Title-25', + 'zGenAlbum- Title-User&System Applied-26', + 'zGenAlbum-UUID-27', + 'zGenAlbum-Cloud GUID-28', + 'ParentzGenAlbum-Pending Items Count-29', + 'ParentzGenAlbum-Pending Items Type-30', + 'ParentzGenAlbum-Kind-31', + 'ParentzGenAlbum-Cloud-Local-State-32', + 'ParentzGenAlbum-Sync Event Order Key-33', + 'ParentzGenAlbum-Pinned-34', + 'ParentzGenAlbum-Custom Sort Key-35', + 'ParentzGenAlbum-Custom Sort Ascending-36', + 'ParentzGenAlbum-Project Document Type-37', + 'ParentzGenAlbum-Custom Query Type-38', + 'ParentzGenAlbum-Trashed State-39', + ('ParentzGenAlbum-Trash Date-40', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-41', + 'zGenAlbum-Pending Items Count-42', + 'zGenAlbum-Pending Items Type-43', + 'zGenAlbum- Cached Photos Count-44', + 'zGenAlbum- Cached Videos Count-45', + 'zGenAlbum- Cached Count-46', + 'zGenAlbum-Has Unseen Content-47', + 'zGenAlbum-Unseen Asset Count-48', + 'zGenAlbum-zENT- Entity-49', + 'zGenAlbum-Album Kind-50', + 'zGenAlbum-Cloud_Local_State-51', + 'zGenAlbum-Sync Event Order Key-52', + 'zGenAlbum-Pinned-53', + 'zGenAlbum-Custom Sort Key-54', + 'zGenAlbum-Custom Sort Ascending-55', + 'zGenAlbum-Project Document Type-56', + 'zGenAlbum-Custom Query Type-57', + 'zGenAlbum-Trashed State-58', + ('zGenAlbum-Trash Date-59', 'datetime'), + 'zGenAlbum-Cloud Delete State-60') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', zAsset.Z_PK AS 'zAsset-zPK', @@ -1122,118 +1068,98 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker, LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zGenAlbum.ZKIND = 2 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66])) - - counter += 1 - - description = 'Parses Assets associated with Non-Shared Albums found in the PhotoData-Photos.sqlite' \ - ' from iOS 14. Parses limited asset data with full non-shared album data.' - report = ArtifactHtmlReport('Ph22-Assets in Non-Shared Albums-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph22-Assets in Non-Shared Albums-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-zPK-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zAddAssetAttr- Creator Bundle ID-6', - 'zAddAssetAttr-Imported By Display Name-7', - 'zAsset-Visibility State-8', - 'zAsset-Saved Asset Type-9', - 'zAddAssetAttr-Share Type-10', - 'zAsset- SortToken -CameraRoll-11', - 'zAsset-Added Date-12', - 'zCldMast-Creation Date-13', - 'zAddAssetAttr-Time Zone Name-14', - 'zAddAssetAttr-EXIF-String-15', - 'zAsset-Modification Date-16', - 'zAsset-Last Shared Date-17', - 'zAsset-Trashed Date-18', - 'zAddAssetAttr-zPK-19', - 'zAsset-UUID = store.cloudphotodb-20', - 'zAddAssetAttr-Master Fingerprint-21', - 'zGenAlbum-Creation Date-22', - 'zGenAlbum-Start Date-23', - 'zGenAlbum-End Date-24', - 'ParentzGenAlbum-UUID-25', - 'ParentzGenAlbum-Cloud GUID-26', - 'ParentzGenAlbum- Title-27', - 'zGenAlbum- Title-User&System Applied-28', - 'zGenAlbum-UUID-29', - 'zGenAlbum-Cloud GUID-30', - 'zGenAlbum-Creator Bundle Id-31', - 'ParentzGenAlbum-Creation Date-32', - 'ParentzGenAlbum-Pending Items Count-33', - 'ParentzGenAlbum-Pending Items Type-34', - 'ParentzGenAlbum-Kind-35', - 'ParentzGenAlbum-Cloud-Local-State-36', - 'ParentzGenAlbum-Sync Event Order Key-37', - 'ParentzGenAlbum-Pinned-38', - 'ParentzGenAlbum-Custom Sort Key-39', - 'ParentzGenAlbum-Custom Sort Ascending-40', - 'ParentzGenAlbum-Is Prototype-41', - 'ParentzGenAlbum-Project Document Type-42', - 'ParentzGenAlbum-Custom Query Type-43', - 'ParentzGenAlbum-Trashed State-44', - 'ParentzGenAlbum-Trash Date-45', - 'ParentzGenAlbum-Cloud Delete State-46', - 'zGenAlbum-Pending Items Count-47', - 'zGenAlbum-Pending Items Type-48', - 'zGenAlbum- Cached Photos Count-49', - 'zGenAlbum- Cached Videos Count-50', - 'zGenAlbum- Cached Count-51', - 'zGenAlbum-Has Unseen Content-52', - 'zGenAlbum-Unseen Asset Count-53', - 'zGenAlbum-zENT- Entity-54', - 'zGenAlbum-Album Kind-55', - 'zGenAlbum-Cloud_Local_State-56', - 'zGenAlbum-Sync Event Order Key-57', - 'zGenAlbum-Pinned-58', - 'zGenAlbum-Custom Sort Key-59', - 'zGenAlbum-Custom Sort Ascending-60', - 'zGenAlbum-Is Prototype-61', - 'zGenAlbum-Project Document Type-62', - 'zGenAlbum-Custom Query Type-63', - 'zGenAlbum-Trashed State-64', - 'zGenAlbum-Trash Date-65', - 'zGenAlbum-Cloud Delete State-66') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph22-Assets in Non-Shared Albums-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph22-Assets in Non-Shared Albums-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available from PhotoData-Photos.sqlite for Assets in Non-Shared Albums') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Creator Bundle ID-6', + 'zAddAssetAttr-Imported By Display Name-7', + 'zAsset-Visibility State-8', + 'zAsset-Saved Asset Type-9', + 'zAddAssetAttr-Share Type-10', + ('zAsset- SortToken -CameraRoll-11', 'datetime'), + ('zAsset-Added Date-12', 'datetime'), + ('zCldMast-Creation Date-13', 'datetime'), + 'zAddAssetAttr-Time Zone Name-14', + 'zAddAssetAttr-EXIF-String-15', + ('zAsset-Modification Date-16', 'datetime'), + ('zAsset-Last Shared Date-17', 'datetime'), + ('zAsset-Trashed Date-18', 'datetime'), + 'zAddAssetAttr-zPK-19', + 'zAsset-UUID = store.cloudphotodb-20', + 'zAddAssetAttr-Master Fingerprint-21', + ('zGenAlbum-Creation Date-22', 'datetime'), + ('zGenAlbum-Start Date-23', 'datetime'), + ('zGenAlbum-End Date-24', 'datetime'), + 'ParentzGenAlbum-UUID-25', + 'ParentzGenAlbum-Cloud GUID-26', + 'ParentzGenAlbum- Title-27', + 'zGenAlbum- Title-User&System Applied-28', + 'zGenAlbum-UUID-29', + 'zGenAlbum-Cloud GUID-30', + 'zGenAlbum-Creator Bundle Id-31', + ('ParentzGenAlbum-Creation Date-32', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-33', + 'ParentzGenAlbum-Pending Items Type-34', + 'ParentzGenAlbum-Kind-35', + 'ParentzGenAlbum-Cloud-Local-State-36', + 'ParentzGenAlbum-Sync Event Order Key-37', + 'ParentzGenAlbum-Pinned-38', + 'ParentzGenAlbum-Custom Sort Key-39', + 'ParentzGenAlbum-Custom Sort Ascending-40', + 'ParentzGenAlbum-Is Prototype-41', + 'ParentzGenAlbum-Project Document Type-42', + 'ParentzGenAlbum-Custom Query Type-43', + 'ParentzGenAlbum-Trashed State-44', + ('ParentzGenAlbum-Trash Date-45', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-46', + 'zGenAlbum-Pending Items Count-47', + 'zGenAlbum-Pending Items Type-48', + 'zGenAlbum- Cached Photos Count-49', + 'zGenAlbum- Cached Videos Count-50', + 'zGenAlbum- Cached Count-51', + 'zGenAlbum-Has Unseen Content-52', + 'zGenAlbum-Unseen Asset Count-53', + 'zGenAlbum-zENT- Entity-54', + 'zGenAlbum-Album Kind-55', + 'zGenAlbum-Cloud_Local_State-56', + 'zGenAlbum-Sync Event Order Key-57', + 'zGenAlbum-Pinned-58', + 'zGenAlbum-Custom Sort Key-59', + 'zGenAlbum-Custom Sort Ascending-60', + 'zGenAlbum-Is Prototype-61', + 'zGenAlbum-Project Document Type-62', + 'zGenAlbum-Custom Query Type-63', + 'zGenAlbum-Trashed State-64', + ('zGenAlbum-Trash Date-65', 'datetime'), + 'zGenAlbum-Cloud Delete State-66') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', zAsset.Z_PK AS 'zAsset-zPK', @@ -1468,121 +1394,101 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker, LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zGenAlbum.ZKIND = 2 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', + 'zAsset-Syndication State-7', + 'zAsset-Bundle Scope-8', + 'zAddAssetAttr- Imported by Bundle Identifier-9', + 'zAddAssetAttr-Imported By Display Name-10', + 'zAsset-Visibility State-11', + 'zAsset-Saved Asset Type-12', + 'zAddAssetAttr-Share Type-13', + ('zAsset- SortToken -CameraRoll-14', 'datetime'), + ('zAsset-Added Date-15', 'datetime'), + ('zCldMast-Creation Date-16', 'datetime'), + 'zAddAssetAttr-Time Zone Name-17', + 'zAddAssetAttr-EXIF-String-18', + ('zAsset-Modification Date-19', 'datetime'), + ('zAsset-Last Shared Date-20', 'datetime'), + ('zAsset-Trashed Date-21', 'datetime'), + 'zAddAssetAttr-zPK-22', + 'zAsset-UUID = store.cloudphotodb-23', + 'zAddAssetAttr-Master Fingerprint-24', + ('zGenAlbum-Creation Date-25', 'datetime'), + ('zGenAlbum-Start Date-26', 'datetime'), + ('zGenAlbum-End Date-27', 'datetime'), + 'ParentzGenAlbum-UUID-28', + 'ParentzGenAlbum-Cloud GUID-29', + 'ParentzGenAlbum- Title-30', + 'zGenAlbum- Title-User&System Applied-31', + 'zGenAlbum-UUID-32', + 'zGenAlbum-Cloud GUID-33', + 'zGenAlbum-Imported by Bundle Identifier-34', + ('ParentzGenAlbum-Creation Date-35', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-36', + 'ParentzGenAlbum-Pending Items Type-37', + 'ParentzGenAlbum-Kind-38', + 'ParentzGenAlbum-Cloud-Local-State-39', + 'ParentzGenAlbum-Sync Event Order Key-40', + 'ParentzGenAlbum-Pinned-41', + 'ParentzGenAlbum-Custom Sort Key-42', + 'ParentzGenAlbum-Custom Sort Ascending-43', + 'ParentzGenAlbum-Is Prototype-44', + 'ParentzGenAlbum-Project Document Type-45', + 'ParentzGenAlbum-Custom Query Type-46', + 'ParentzGenAlbum-Trashed State-47', + ('ParentzGenAlbum-Trash Date-48', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-49', + 'zGenAlbum-Pending Items Count-50', + 'zGenAlbum-Pending Items Type-51', + 'zGenAlbum- Cached Photos Count-52', + 'zGenAlbum- Cached Videos Count-53', + 'zGenAlbum- Cached Count-54', + 'zGenAlbum-Has Unseen Content-55', + 'zGenAlbum-Unseen Asset Count-56', + 'zGenAlbum-zENT- Entity-57', + 'zGenAlbum-Album Kind-58', + 'zGenAlbum-Cloud_Local_State-59', + 'zGenAlbum-Sync Event Order Key-60', + 'zGenAlbum-Pinned-61', + 'zGenAlbum-Custom Sort Key-62', + 'zGenAlbum-Custom Sort Ascending-63', + 'zGenAlbum-Is Prototype-64', + 'zGenAlbum-Project Document Type-65', + 'zGenAlbum-Custom Query Type-66', + 'zGenAlbum-Trashed State-67', + ('zGenAlbum-Trash Date-68', 'datetime'), + 'zGenAlbum-Cloud Delete State-69') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69])) - - counter += 1 - - description = 'Parses Assets associated with Non-Shared Albums found in the PhotoData-Photos.sqlite' \ - ' from iOS 15. Parses limited asset data with full non-shared album data.' - report = ArtifactHtmlReport('Ph22-Assets in Non-Shared Albums-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph22-Assets in Non-Shared Albums-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-zPK-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', - 'zAsset-Syndication State-7', - 'zAsset-Bundle Scope-8', - 'zAddAssetAttr- Imported by Bundle Identifier-9', - 'zAddAssetAttr-Imported By Display Name-10', - 'zAsset-Visibility State-11', - 'zAsset-Saved Asset Type-12', - 'zAddAssetAttr-Share Type-13', - 'zAsset- SortToken -CameraRoll-14', - 'zAsset-Added Date-15', - 'zCldMast-Creation Date-16', - 'zAddAssetAttr-Time Zone Name-17', - 'zAddAssetAttr-EXIF-String-18', - 'zAsset-Modification Date-19', - 'zAsset-Last Shared Date-20', - 'zAsset-Trashed Date-21', - 'zAddAssetAttr-zPK-22', - 'zAsset-UUID = store.cloudphotodb-23', - 'zAddAssetAttr-Master Fingerprint-24', - 'zGenAlbum-Creation Date-25', - 'zGenAlbum-Start Date-26', - 'zGenAlbum-End Date-27', - 'ParentzGenAlbum-UUID-28', - 'ParentzGenAlbum-Cloud GUID-29', - 'ParentzGenAlbum- Title-30', - 'zGenAlbum- Title-User&System Applied-31', - 'zGenAlbum-UUID-32', - 'zGenAlbum-Cloud GUID-33', - 'zGenAlbum-Imported by Bundle Identifier-34', - 'ParentzGenAlbum-Creation Date-35', - 'ParentzGenAlbum-Pending Items Count-36', - 'ParentzGenAlbum-Pending Items Type-37', - 'ParentzGenAlbum-Kind-38', - 'ParentzGenAlbum-Cloud-Local-State-39', - 'ParentzGenAlbum-Sync Event Order Key-40', - 'ParentzGenAlbum-Pinned-41', - 'ParentzGenAlbum-Custom Sort Key-42', - 'ParentzGenAlbum-Custom Sort Ascending-43', - 'ParentzGenAlbum-Is Prototype-44', - 'ParentzGenAlbum-Project Document Type-45', - 'ParentzGenAlbum-Custom Query Type-46', - 'ParentzGenAlbum-Trashed State-47', - 'ParentzGenAlbum-Trash Date-48', - 'ParentzGenAlbum-Cloud Delete State-49', - 'zGenAlbum-Pending Items Count-50', - 'zGenAlbum-Pending Items Type-51', - 'zGenAlbum- Cached Photos Count-52', - 'zGenAlbum- Cached Videos Count-53', - 'zGenAlbum- Cached Count-54', - 'zGenAlbum-Has Unseen Content-55', - 'zGenAlbum-Unseen Asset Count-56', - 'zGenAlbum-zENT- Entity-57', - 'zGenAlbum-Album Kind-58', - 'zGenAlbum-Cloud_Local_State-59', - 'zGenAlbum-Sync Event Order Key-60', - 'zGenAlbum-Pinned-61', - 'zGenAlbum-Custom Sort Key-62', - 'zGenAlbum-Custom Sort Ascending-63', - 'zGenAlbum-Is Prototype-64', - 'zGenAlbum-Project Document Type-65', - 'zGenAlbum-Custom Query Type-66', - 'zGenAlbum-Trashed State-67', - 'zGenAlbum-Trash Date-68', - 'zGenAlbum-Cloud Delete State-69') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - tsvname = 'Ph22-Assets in Non-Shared Albums-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph22-Assets in Non-Shared Albums-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available from PhotoData-Photos.sqlite for Assets in Non-Shared Albums') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', zAsset.Z_PK AS 'zAsset-zPK', @@ -1840,127 +1746,465 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker, LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zGenAlbum.ZKIND = 2 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', + 'zAsset-Syndication State-7', + 'zAsset-Bundle Scope-8', + 'zAddAssetAttr.Imported by Bundle Identifier-9', + 'zAddAssetAttr-Imported By Display Name-10', + 'zAsset-Visibility State-11', + 'zAsset-Saved Asset Type-12', + 'zAddAssetAttr-Share Type-13', + 'zAsset-Active Library Scope Participation State-14', + ('zAsset- SortToken -CameraRoll-15', 'datetime'), + ('zAsset-Added Date-16', 'datetime'), + ('zCldMast-Creation Date-17', 'datetime'), + 'zAddAssetAttr-Time Zone Name-18', + 'zAddAssetAttr-EXIF-String-19', + ('zAsset-Modification Date-20', 'datetime'), + ('zAsset-Last Shared Date-21', 'datetime'), + ('zAsset-Trashed Date-22', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-23', + 'zAddAssetAttr-zPK-24', + 'zAsset-UUID = store.cloudphotodb-25', + 'zAddAssetAttr-Master Fingerprint-26', + ('zGenAlbum-Creation Date-27', 'datetime'), + ('zGenAlbum-Start Date-28', 'datetime'), + ('zGenAlbum-End Date-29', 'datetime'), + 'ParentzGenAlbum-UUID-30', + 'ParentzGenAlbum-Cloud GUID-31', + 'ParentzGenAlbum- Title-32', + 'zGenAlbum- Title-User&System Applied-33', + 'zGenAlbum-UUID-34', + 'zGenAlbum-Cloud GUID-35', + 'zGenAlbum-Imported by Bundle Identifier-36', + ('ParentzGenAlbum-Creation Date-37', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-38', + 'ParentzGenAlbum-Pending Items Type-39', + 'ParentzGenAlbum-Kind-40', + 'ParentzGenAlbum-Cloud-Local-State-41', + 'ParentzGenAlbum-Sync Event Order Key-42', + 'ParentzGenAlbum-Pinned-43', + 'ParentzGenAlbum-Custom Sort Key-44', + 'ParentzGenAlbum-Custom Sort Ascending-45', + 'ParentzGenAlbum-Is Prototype-46', + 'ParentzGenAlbum-Project Document Type-47', + 'ParentzGenAlbum-Custom Query Type-48', + 'ParentzGenAlbum-Trashed State-49', + ('ParentzGenAlbum-Trash Date-50', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-51', + 'zGenAlbum-Pending Items Count-52', + 'zGenAlbum-Pending Items Type-53', + 'zGenAlbum- Cached Photos Count-54', + 'zGenAlbum- Cached Videos Count-55', + 'zGenAlbum- Cached Count-56', + 'zGenAlbum-Has Unseen Content-57', + 'zGenAlbum-Unseen Asset Count-58', + 'zGenAlbum-zENT- Entity-59', + 'zGenAlbum-Album Kind-60', + 'zGenAlbum-Cloud_Local_State-61', + 'zGenAlbum-Sync Event Order Key-62', + 'zGenAlbum-Pinned-63', + 'zGenAlbum-Custom Sort Key-64', + 'zGenAlbum-Custom Sort Ascending-65', + 'zGenAlbum-Is Prototype-66', + 'zGenAlbum-Project Document Type-67', + 'zGenAlbum-Custom Query Type-68', + 'zGenAlbum-Trashed State-69', + ('zGenAlbum-Trash Date-70', 'datetime'), + 'zGenAlbum-Cloud Delete State-71', + 'zGenAlbum-Search Index Rebuild State-72', + 'zGenAlbum-Duplicate Type-73', + 'zGenAlbum-Privacy State-74') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74])) - - counter += 1 - - description = 'Parses Assets associated with Non-Shared Albums found in the PhotoData-Photos.sqlite' \ - ' from iOS 16-17. Parses limited asset data with full non-shared album data.' - report = ArtifactHtmlReport('Ph22-Assets in Non-Shared Albums-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph22-Assets in Non-Shared Albums-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-zPK-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', - 'zAsset-Syndication State-7', - 'zAsset-Bundle Scope-8', - 'zAddAssetAttr.Imported by Bundle Identifier-9', - 'zAddAssetAttr-Imported By Display Name-10', - 'zAsset-Visibility State-11', - 'zAsset-Saved Asset Type-12', - 'zAddAssetAttr-Share Type-13', - 'zAsset-Active Library Scope Participation State-14', - 'zAsset- SortToken -CameraRoll-15', - 'zAsset-Added Date-16', - 'zCldMast-Creation Date-17', - 'zAddAssetAttr-Time Zone Name-18', - 'zAddAssetAttr-EXIF-String-19', - 'zAsset-Modification Date-20', - 'zAsset-Last Shared Date-21', - 'zAsset-Trashed Date-22', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-23', - 'zAddAssetAttr-zPK-24', - 'zAsset-UUID = store.cloudphotodb-25', - 'zAddAssetAttr-Master Fingerprint-26', - 'zGenAlbum-Creation Date-27', - 'zGenAlbum-Start Date-28', - 'zGenAlbum-End Date-29', - 'ParentzGenAlbum-UUID-30', - 'ParentzGenAlbum-Cloud GUID-31', - 'ParentzGenAlbum- Title-32', - 'zGenAlbum- Title-User&System Applied-33', - 'zGenAlbum-UUID-34', - 'zGenAlbum-Cloud GUID-35', - 'zGenAlbum-Imported by Bundle Identifier-36', - 'ParentzGenAlbum-Creation Date-37', - 'ParentzGenAlbum-Pending Items Count-38', - 'ParentzGenAlbum-Pending Items Type-39', - 'ParentzGenAlbum-Kind-40', - 'ParentzGenAlbum-Cloud-Local-State-41', - 'ParentzGenAlbum-Sync Event Order Key-42', - 'ParentzGenAlbum-Pinned-43', - 'ParentzGenAlbum-Custom Sort Key-44', - 'ParentzGenAlbum-Custom Sort Ascending-45', - 'ParentzGenAlbum-Is Prototype-46', - 'ParentzGenAlbum-Project Document Type-47', - 'ParentzGenAlbum-Custom Query Type-48', - 'ParentzGenAlbum-Trashed State-49', - 'ParentzGenAlbum-Trash Date-50', - 'ParentzGenAlbum-Cloud Delete State-51', - 'zGenAlbum-Pending Items Count-52', - 'zGenAlbum-Pending Items Type-53', - 'zGenAlbum- Cached Photos Count-54', - 'zGenAlbum- Cached Videos Count-55', - 'zGenAlbum- Cached Count-56', - 'zGenAlbum-Has Unseen Content-57', - 'zGenAlbum-Unseen Asset Count-58', - 'zGenAlbum-zENT- Entity-59', - 'zGenAlbum-Album Kind-60', - 'zGenAlbum-Cloud_Local_State-61', - 'zGenAlbum-Sync Event Order Key-62', - 'zGenAlbum-Pinned-63', - 'zGenAlbum-Custom Sort Key-64', - 'zGenAlbum-Custom Sort Ascending-65', - 'zGenAlbum-Is Prototype-66', - 'zGenAlbum-Project Document Type-67', - 'zGenAlbum-Custom Query Type-68', - 'zGenAlbum-Trashed State-69', - 'zGenAlbum-Trash Date-70', - 'zGenAlbum-Cloud Delete State-71', - 'zGenAlbum-Search Index Rebuild State-72', - 'zGenAlbum-Duplicate Type-73', - 'zGenAlbum-Privacy State-74') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph22-Assets in Non-Shared Albums-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - tlactivity = 'Ph22-Assets in Non-Shared Albums-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available from PhotoData-Photos.sqlite for Assets in Non-Shared Albums') - - db.close() - return + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + zAsset.Z_PK AS 'zAsset-zPK', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', + ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID', + ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID', + ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title', + zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier', + DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Creation Date', + ParentzGenAlbum.ZPENDINGITEMSCOUNT AS 'ParentzGenAlbum-Pending Items Count', + CASE ParentzGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'ParentzGenAlbum-Pending Items Type', + CASE ParentzGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || '' + END AS 'ParentzGenAlbum-Kind', + CASE ParentzGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'ParentzGenAlbum-Cloud-Local-State', + ParentzGenAlbum.ZSYNCEVENTORDERKEY AS 'ParentzGenAlbum-Sync Event Order Key', + CASE ParentzGenAlbum.ZISPINNED + WHEN 0 THEN '0-ParentzGenAlbum Not Pinned-0' + WHEN 1 THEN '1-ParentzGenAlbum Pinned-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPINNED || '' + END AS 'ParentzGenAlbum-Pinned', + CASE ParentzGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'ParentzGenAlbum-Custom Sort Key', + CASE ParentzGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'ParentzGenAlbum-Custom Sort Ascending', + CASE ParentzGenAlbum.ZISPROTOTYPE + WHEN 0 THEN '0-ParentzGenAlbum Not Prototype-0' + WHEN 1 THEN '1-ParentzGenAlbum Prototype-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPROTOTYPE || '' + END AS 'ParentzGenAlbum-Is Prototype', + CASE ParentzGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'ParentzGenAlbum-Project Document Type', + CASE ParentzGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'ParentzGenAlbum-Custom Query Type', + CASE ParentzGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN '0-ParentzGenAlbum Not In Trash-0' + WHEN 1 THEN '1-ParentzGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZTRASHEDSTATE || '' + END AS 'ParentzGenAlbum-Trashed State', + DateTime(ParentzGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Trash Date', + CASE ParentzGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN '0-ParentzGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN '1-ParentzGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'ParentzGenAlbum-Cloud Delete State', + zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count', + CASE zGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'zGenAlbum-Pending Items Type', + zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count', + zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count', + zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count', + CASE zGenAlbum.ZHASUNSEENCONTENT + WHEN 0 THEN 'No Unseen Content-StillTesting-0' + WHEN 1 THEN 'Unseen Content-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || '' + END AS 'zGenAlbum-Has Unseen Content', + zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count', + CASE zGenAlbum.Z_ENT + WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27' + WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28' + WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29' + WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30' + WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || '' + END AS 'zGenAlbum-zENT- Entity', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind', + CASE zGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'zGenAlbum-Cloud_Local_State', + zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key', + CASE zGenAlbum.ZISPINNED + WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'zGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || '' + END AS 'zGenAlbum-Pinned', + CASE zGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'zGenAlbum-Custom Sort Key', + CASE zGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'zGenAlbum-Custom Sort Ascending', + CASE zGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'zGenAlbum-Not Prototype-0' + WHEN 1 THEN 'zGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || '' + END AS 'zGenAlbum-Is Prototype', + CASE zGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'zGenAlbum-Project Document Type', + CASE zGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'zGenAlbum-Custom Query Type', + CASE zGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'zGenAlbum Not In Trash-0' + WHEN 1 THEN 'zGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || '' + END AS 'zGenAlbum-Trashed State', + DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date', + CASE zGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'zGenAlbum-Cloud Delete State', + CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zGenAlbum-Search Index Rebuild State', + CASE zGenAlbum.ZDUPLICATETYPE + WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0' + WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1' + WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || '' + END AS 'zGenAlbum-Duplicate Type', + CASE zGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || '' + END AS 'zGenAlbum-Privacy State' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z29Assets.Z_29ALBUMS + LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + WHERE zGenAlbum.ZKIND = 2 + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', + 'zAsset-Syndication State-7', + 'zAsset-Bundle Scope-8', + 'zAddAssetAttr.Imported by Bundle Identifier-9', + 'zAddAssetAttr-Imported By Display Name-10', + 'zAsset-Visibility State-11', + 'zAsset-Saved Asset Type-12', + 'zAddAssetAttr-Share Type-13', + 'zAsset-Active Library Scope Participation State-14', + ('zAsset- SortToken -CameraRoll-15', 'datetime'), + ('zAsset-Added Date-16', 'datetime'), + ('zCldMast-Creation Date-17', 'datetime'), + 'zAddAssetAttr-Time Zone Name-18', + 'zAddAssetAttr-EXIF-String-19', + ('zAsset-Modification Date-20', 'datetime'), + ('zAsset-Last Shared Date-21', 'datetime'), + ('zAsset-Trashed Date-22', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-23', + 'zAddAssetAttr-zPK-24', + 'zAsset-UUID = store.cloudphotodb-25', + 'zAddAssetAttr-Master Fingerprint-26', + ('zGenAlbum-Creation Date-27', 'datetime'), + ('zGenAlbum-Start Date-28', 'datetime'), + ('zGenAlbum-End Date-29', 'datetime'), + 'ParentzGenAlbum-UUID-30', + 'ParentzGenAlbum-Cloud GUID-31', + 'ParentzGenAlbum- Title-32', + 'zGenAlbum- Title-User&System Applied-33', + 'zGenAlbum-UUID-34', + 'zGenAlbum-Cloud GUID-35', + 'zGenAlbum-Imported by Bundle Identifier-36', + ('ParentzGenAlbum-Creation Date-37', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-38', + 'ParentzGenAlbum-Pending Items Type-39', + 'ParentzGenAlbum-Kind-40', + 'ParentzGenAlbum-Cloud-Local-State-41', + 'ParentzGenAlbum-Sync Event Order Key-42', + 'ParentzGenAlbum-Pinned-43', + 'ParentzGenAlbum-Custom Sort Key-44', + 'ParentzGenAlbum-Custom Sort Ascending-45', + 'ParentzGenAlbum-Is Prototype-46', + 'ParentzGenAlbum-Project Document Type-47', + 'ParentzGenAlbum-Custom Query Type-48', + 'ParentzGenAlbum-Trashed State-49', + ('ParentzGenAlbum-Trash Date-50', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-51', + 'zGenAlbum-Pending Items Count-52', + 'zGenAlbum-Pending Items Type-53', + 'zGenAlbum- Cached Photos Count-54', + 'zGenAlbum- Cached Videos Count-55', + 'zGenAlbum- Cached Count-56', + 'zGenAlbum-Has Unseen Content-57', + 'zGenAlbum-Unseen Asset Count-58', + 'zGenAlbum-zENT- Entity-59', + 'zGenAlbum-Album Kind-60', + 'zGenAlbum-Cloud_Local_State-61', + 'zGenAlbum-Sync Event Order Key-62', + 'zGenAlbum-Pinned-63', + 'zGenAlbum-Custom Sort Key-64', + 'zGenAlbum-Custom Sort Ascending-65', + 'zGenAlbum-Is Prototype-66', + 'zGenAlbum-Project Document Type-67', + 'zGenAlbum-Custom Query Type-68', + 'zGenAlbum-Trashed State-69', + ('zGenAlbum-Trash Date-70', 'datetime'), + 'zGenAlbum-Cloud Delete State-71', + 'zGenAlbum-Search Index Rebuild State-72', + 'zGenAlbum-Duplicate Type-73', + 'zGenAlbum-Privacy State-74') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', zAsset.Z_PK AS 'zAsset-zPK', @@ -1994,10 +2238,10 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker, ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' END AS 'zAsset-Visibility State', CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' + WHEN 0 THEN '0-Not_Recently_Saved-0' + WHEN 1 THEN '1-Recently_Saved-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', + END AS 'zAsset-Is_Recently_Saved', CASE zAsset.ZSAVEDASSETTYPE WHEN 0 THEN '0-Saved-via-other-source-0' WHEN 1 THEN '1-StillTesting-1' @@ -2032,8 +2276,8 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker, zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash', DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', @@ -2216,144 +2460,105 @@ def get_ph22assetsinnonsharedalbumsphdapsql(files_found, report_folder, seeker, END AS 'zGenAlbum-Privacy State' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN Z_31ASSETS z31Assets ON z31Assets.Z_3ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z31Assets.Z_31ALBUMS - LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = zGenAlbum.Z_PK - LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS + LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z30Assets.Z_30ALBUMS + LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zGenAlbum.ZKIND = 2 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76])) - - counter += 1 - - description = 'Parses Assets associated with Non-Shared Albums found in the PhotoData-Photos.sqlite' \ - ' from iOS 16-17. Parses limited asset data with full non-shared album data.' - report = ArtifactHtmlReport('Ph22-Assets in Non-Shared Albums-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph22-Assets in Non-Shared Albums-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-zPK-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', - 'zAsset-Syndication State-7', - 'zAsset-Bundle Scope-8', - 'zAddAssetAttr- Imported by Bundle Identifier-9', - 'zAddAssetAttr- Imported By Display Name-10', - 'zAsset-Visibility State-11', - 'zAsset-Is_Recently_Saved-iOS18-12', - 'zAsset-Saved Asset Type-13', - 'zAddAssetAttr-Share Type-14', - 'zAsset-Active Library Scope Participation State-15', - 'zAsset- SortToken -CameraRoll-16', - 'zAsset-Added Date-17', - 'zCldMast-Creation Date-18', - 'zAddAssetAttr-Time Zone Name-19', - 'zAddAssetAttr-EXIF-String-20', - 'zAsset-Modification Date-21', - 'zAsset-Last Shared Date-22', - 'zAsset-Trashed Date-23', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-24', - 'zAddAssetAttr-zPK-25', - 'zAsset-UUID = store.cloudphotodb-26', - 'zAddAssetAttr-Original Stable Hash-iOS18-27', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-28', - 'zGenAlbum-Creation Date-29', - 'zGenAlbum-Start Date-30', - 'zGenAlbum-End Date-31', - 'ParentzGenAlbum-UUID-32', - 'ParentzGenAlbum-Cloud GUID-33', - 'ParentzGenAlbum- Title-34', - 'zGenAlbum- Title-User&System Applied-35', - 'zGenAlbum-UUID-36', - 'zGenAlbum-Cloud GUID-37', - 'zGenAlbum-Imported by Bundle Identifier-38', - 'ParentzGenAlbum-Creation Date-39', - 'ParentzGenAlbum-Pending Items Count-40', - 'ParentzGenAlbum-Pending Items Type-41', - 'ParentzGenAlbum-Kind-42', - 'ParentzGenAlbum-Cloud-Local-State-43', - 'ParentzGenAlbum-Sync Event Order Key-44', - 'ParentzGenAlbum-Pinned-45', - 'ParentzGenAlbum-Custom Sort Key-46', - 'ParentzGenAlbum-Custom Sort Ascending-47', - 'ParentzGenAlbum-Is Prototype-48', - 'ParentzGenAlbum-Project Document Type-49', - 'ParentzGenAlbum-Custom Query Type-50', - 'ParentzGenAlbum-Trashed State-51', - 'ParentzGenAlbum-Trash Date-52', - 'ParentzGenAlbum-Cloud Delete State-53', - 'zGenAlbum-Pending Items Count-54', - 'zGenAlbum-Pending Items Type-55', - 'zGenAlbum- Cached Photos Count-56', - 'zGenAlbum- Cached Videos Count-57', - 'zGenAlbum- Cached Count-58', - 'zGenAlbum-Has Unseen Content-59', - 'zGenAlbum-Unseen Asset Count-60', - 'zGenAlbum-zENT- Entity-61', - 'zGenAlbum-Album Kind-62', - 'zGenAlbum-Cloud_Local_State-63', - 'zGenAlbum-Sync Event Order Key-64', - 'zGenAlbum-Pinned-65', - 'zGenAlbum-Custom Sort Key-66', - 'zGenAlbum-Custom Sort Ascending-67', - 'zGenAlbum-Is Prototype-68', - 'zGenAlbum-Project Document Type-69', - 'zGenAlbum-Custom Query Type-70', - 'zGenAlbum-Trashed State-71', - 'zGenAlbum-Trash Date-72', - 'zGenAlbum-Cloud Delete State-73', - 'zGenAlbum-Search Index Rebuild State-74', - 'zGenAlbum-Duplicate Type-75', - 'zGenAlbum-Privacy State-76') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph22-Assets in Non-Shared Albums-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph22-Assets in Non-Shared Albums-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available from PhotoData-Photos.sqlite for Assets in Non-Shared Albums') - - db.close() - return - - -__artifacts_v2__ = { - 'Ph22-Assets in Non-Shared Albums-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph22 Assets in Non-Shared Albums', - 'description': 'Parses Assets associated with Non-Shared Albums found in PhotoData-Photos.sqlite and' - ' supports iOS 11-18. Parses limited assets data with full non-shared album data.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-E-Asset_In_Albums', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph22assetsinnonsharedalbumsphdapsql' - } -} + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', + 'zAsset-Syndication State-7', + 'zAsset-Bundle Scope-8', + 'zAddAssetAttr- Imported by Bundle Identifier-9', + 'zAddAssetAttr- Imported By Display Name-10', + 'zAsset-Visibility State-11', + 'zAsset-Is_Recently_Saved-12', + 'zAsset-Saved Asset Type-13', + 'zAddAssetAttr-Share Type-14', + 'zAsset-Active Library Scope Participation State-15', + ('zAsset- SortToken -CameraRoll-16', 'datetime'), + ('zAsset-Added Date-17', 'datetime'), + ('zCldMast-Creation Date-18', 'datetime'), + 'zAddAssetAttr-Time Zone Name-19', + 'zAddAssetAttr-EXIF-String-20', + ('zAsset-Modification Date-21', 'datetime'), + ('zAsset-Last Shared Date-22', 'datetime'), + ('zAsset-Trashed Date-23', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-24', + 'zAddAssetAttr-zPK-25', + 'zAsset-UUID = store.cloudphotodb-26', + 'zAddAssetAttr-Original Stable Hash-27', + 'zAddAssetAttr.Adjusted Stable Hash-28', + ('zGenAlbum-Creation Date-29', 'datetime'), + ('zGenAlbum-Start Date-30', 'datetime'), + ('zGenAlbum-End Date-31', 'datetime'), + 'ParentzGenAlbum-UUID-32', + 'ParentzGenAlbum-Cloud GUID-33', + 'ParentzGenAlbum- Title-34', + 'zGenAlbum- Title-User&System Applied-35', + 'zGenAlbum-UUID-36', + 'zGenAlbum-Cloud GUID-37', + 'zGenAlbum-Imported by Bundle Identifier-38', + ('ParentzGenAlbum-Creation Date-39', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-40', + 'ParentzGenAlbum-Pending Items Type-41', + 'ParentzGenAlbum-Kind-42', + 'ParentzGenAlbum-Cloud-Local-State-43', + 'ParentzGenAlbum-Sync Event Order Key-44', + 'ParentzGenAlbum-Pinned-45', + 'ParentzGenAlbum-Custom Sort Key-46', + 'ParentzGenAlbum-Custom Sort Ascending-47', + 'ParentzGenAlbum-Is Prototype-48', + 'ParentzGenAlbum-Project Document Type-49', + 'ParentzGenAlbum-Custom Query Type-50', + 'ParentzGenAlbum-Trashed State-51', + ('ParentzGenAlbum-Trash Date-52', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-53', + 'zGenAlbum-Pending Items Count-54', + 'zGenAlbum-Pending Items Type-55', + 'zGenAlbum- Cached Photos Count-56', + 'zGenAlbum- Cached Videos Count-57', + 'zGenAlbum- Cached Count-58', + 'zGenAlbum-Has Unseen Content-59', + 'zGenAlbum-Unseen Asset Count-60', + 'zGenAlbum-zENT- Entity-61', + 'zGenAlbum-Album Kind-62', + 'zGenAlbum-Cloud_Local_State-63', + 'zGenAlbum-Sync Event Order Key-64', + 'zGenAlbum-Pinned-65', + 'zGenAlbum-Custom Sort Key-66', + 'zGenAlbum-Custom Sort Ascending-67', + 'zGenAlbum-Is Prototype-68', + 'zGenAlbum-Project Document Type-69', + 'zGenAlbum-Custom Query Type-70', + 'zGenAlbum-Trashed State-71', + ('zGenAlbum-Trash Date-72', 'datetime'), + 'zGenAlbum-Cloud Delete State-73', + 'zGenAlbum-Search Index Rebuild State-74', + 'zGenAlbum-Duplicate Type-75', + 'zGenAlbum-Privacy State-76') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph23AlbumsSharedNAD.py b/scripts/artifacts/Ph23AlbumsSharedNAD.py index bfcb98f7..fc63b00c 100644 --- a/scripts/artifacts/Ph23AlbumsSharedNAD.py +++ b/scripts/artifacts/Ph23AlbumsSharedNAD.py @@ -1,40 +1,48 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses Shared Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table and supports iOS 11-18. -# Parses Shared Album records only no asset data being parsed. This parser will contain albums and -# shared album invites and invite status data. -# This parser is based on research and SQLite Queries written by Scott Koenig -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph23SharedAlbumRecordsInviteswithNADPhDaPsql': { + 'name': 'Ph23-Shared Album Records & Invites NAD-PhDaPsql', + 'description': 'Parses Shared Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' + ' and supports iOS 11-18. Parses Shared Album records only, no asset data being parsed.' + ' This parser will contain shared albums, share album invites, and invite status data.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc +@artifact_processor +def Ph23SharedAlbumRecordsInviteswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) -def get_ph23sharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for PhotoData-Photos.sqlite Shared Album records with no asset data from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', @@ -215,110 +223,88 @@ def get_ph23sharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text, = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 1505 ORDER BY zGenAlbum.ZSTARTDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57])) - - counter += 1 - - description = 'Parses Shared Album records found in the PhotoData-Photos.sqlite from' \ - ' ZGENERICALBUM Table and supports iOS 11. Parses Shared Album records only' \ - ' no asset data is being parsed in this parser. This parser will contain shared albums,' \ - ' shared album invites and the invite status data.' - report = ArtifactHtmlReport('Ph23-Shared Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph23-Shared Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Cloud Creation Date-0', - 'zGenAlbum-Start Date-1', - 'zGenAlbum-End Date-2', - 'zGenAlbum-Cloud Subscription Date-3', - 'zGenAlbum- Title-User&System Applied-4', - 'zGenAlbum-UUID-5', - 'zGenAlbum-Cloud GUID-6', - 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-7', - 'zGenAlbum-Pending Items Count-8', - 'zGenAlbum-Pending Items Type-9', - 'zGenAlbum- Cached Photos Count-10', - 'zGenAlbum- Cached Videos Count-11', - 'zGenAlbum- Cached Count-12', - 'zGenAlbum-Has Unseen Content-13', - 'zGenAlbum-Unseen Asset Count-14', - 'zGenAlbum-zENT- Entity-15', - 'zGenAlbum-Album Kind-16', - 'zGenAlbum-Cloud_Local_State-17', - 'zGenAlbum-Sync Event Order Key-18', - 'zGenAlbum-is Owned-19', - 'zGenAlbum-Cloud Relationship State-20', - 'zGenAlbum-Cloud Relationship State Local-21', - 'zGenAlbum-Cloud Owner Mail Key-22', - 'zGenAlbum-Cloud Owner Frist Name-23', - 'zGenAlbum-Cloud Owner Last Name-24', - 'zGenAlbum-Cloud Owner Full Name-25', - 'zGenAlbum-Cloud Person ID-26', - 'zGenAlbum-Cloud Owner Hashed Person ID-27', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-28', - 'zGenAlbum-Cloud Multi-Contributors Enabled-29', - 'zGenAlbum-Cloud Album Sub Type-30', - 'zGenAlbum-Cloud Contribution Date-31', - 'zGenAlbum-Cloud Last Interesting Change Date-32', - 'zGenAlbum-Cloud Notification Enabled-33', - 'zGenAlbum-Pinned-34', - 'zGenAlbum-Custom Sort Key-35', - 'zGenAlbum-Custom Sort Ascending-36', - 'zGenAlbum-Custom Query Type-37', - 'zGenAlbum-Trashed State-38', - 'zGenAlbum-Trash Date-39', - 'zGenAlbum-Cloud Owner Whitelisted-40', - 'zGenAlbum-Cloud Local Public URL Enabled-41', - 'zGenAlbum-Cloud Public URL Enabled-42', - 'zGenAlbum-Public URL-43', - 'zGenAlbum-Key Asset Face Thumb Index-44', - 'zGenAlbum-Custom Query Parameters-45', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-46', - 'zCldShareAlbumInvRec-Invitation State Local-47', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-48', - 'zCldShareAlbumInvRec-Subscription Date-49', - 'zCldShareAlbumInvRec-Invitee First Name-50', - 'zCldShareAlbumInvRec-Invitee Last Name-51', - 'zCldShareAlbumInvRec-Invitee Full Name-52', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-53', - 'zCldShareAlbumInvRec-Invitee Email Key-54', - 'zCldShareAlbumInvRec-Album GUID-55', - 'zCldShareAlbumInvRec-Cloud GUID-56', - 'zAlbumList-Needs Reordering Number-57') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph23-Shared Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph23-Shared Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Shared Album Records with No Asset Data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57])) + + data_headers = (('zGenAlbum-Cloud Creation Date-0', 'datetime'), + ('zGenAlbum-Start Date-1', 'datetime'), + ('zGenAlbum-End Date-2', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-3', 'datetime'), + 'zGenAlbum- Title-User&System Applied-4', + 'zGenAlbum-UUID-5', + 'zGenAlbum-Cloud GUID-6', + 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-7', + 'zGenAlbum-Pending Items Count-8', + 'zGenAlbum-Pending Items Type-9', + 'zGenAlbum- Cached Photos Count-10', + 'zGenAlbum- Cached Videos Count-11', + 'zGenAlbum- Cached Count-12', + 'zGenAlbum-Has Unseen Content-13', + 'zGenAlbum-Unseen Asset Count-14', + 'zGenAlbum-zENT- Entity-15', + 'zGenAlbum-Album Kind-16', + 'zGenAlbum-Cloud_Local_State-17', + 'zGenAlbum-Sync Event Order Key-18', + 'zGenAlbum-is Owned-19', + 'zGenAlbum-Cloud Relationship State-20', + 'zGenAlbum-Cloud Relationship State Local-21', + 'zGenAlbum-Cloud Owner Mail Key-22', + 'zGenAlbum-Cloud Owner Frist Name-23', + 'zGenAlbum-Cloud Owner Last Name-24', + 'zGenAlbum-Cloud Owner Full Name-25', + 'zGenAlbum-Cloud Person ID-26', + 'zGenAlbum-Cloud Owner Hashed Person ID-27', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-28', + 'zGenAlbum-Cloud Multi-Contributors Enabled-29', + 'zGenAlbum-Cloud Album Sub Type-30', + ('zGenAlbum-Cloud Contribution Date-31', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-32', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-33', + 'zGenAlbum-Pinned-34', + 'zGenAlbum-Custom Sort Key-35', + 'zGenAlbum-Custom Sort Ascending-36', + 'zGenAlbum-Custom Query Type-37', + 'zGenAlbum-Trashed State-38', + ('zGenAlbum-Trash Date-39', 'datetime'), + 'zGenAlbum-Cloud Owner Whitelisted-40', + 'zGenAlbum-Cloud Local Public URL Enabled-41', + 'zGenAlbum-Cloud Public URL Enabled-42', + 'zGenAlbum-Public URL-43', + 'zGenAlbum-Key Asset Face Thumb Index-44', + 'zGenAlbum-Custom Query Parameters-45', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-46', + 'zCldShareAlbumInvRec-Invitation State Local-47', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-48', + ('zCldShareAlbumInvRec-Subscription Date-49', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-50', + 'zCldShareAlbumInvRec-Invitee Last Name-51', + 'zCldShareAlbumInvRec-Invitee Full Name-52', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-53', + 'zCldShareAlbumInvRec-Invitee Email Key-54', + 'zCldShareAlbumInvRec-Album GUID-55', + 'zCldShareAlbumInvRec-Cloud GUID-56', + 'zAlbumList-Needs Reordering Number-57') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("12")) & (version.parse(iosversion) < version.parse("13")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', @@ -503,110 +489,88 @@ def get_ph23sharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text, = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 1505 ORDER BY zGenAlbum.ZSTARTDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57])) - - counter += 1 - - description = 'Parses Shared Album records found in the PhotoData-Photos.sqlite from' \ - ' ZGENERICALBUM Table and supports iOS 12. Parses Shared Album records only' \ - ' no asset data is being parsed in this parser. This parser will contain shared albums,' \ - ' shared album invites and invite status data.' - report = ArtifactHtmlReport('Ph23-Shared Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph23-Shared Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Cloud Creation Date-0', - 'zGenAlbum-Start Date-1', - 'zGenAlbum-End Date-2', - 'zGenAlbum-Cloud Subscription Date-3', - 'zGenAlbum- Title-User&System Applied-4', - 'zGenAlbum-UUID-5', - 'zGenAlbum-Cloud GUID-6', - 'zGenAlbum-Pending Items Count-7', - 'zGenAlbum-Pending Items Type-8', - 'zGenAlbum- Cached Photos Count-9', - 'zGenAlbum- Cached Videos Count-10', - 'zGenAlbum- Cached Count-11', - 'zGenAlbum-Has Unseen Content-12', - 'zGenAlbum-Unseen Asset Count-13', - 'zGenAlbum-zENT- Entity-14', - 'zGenAlbum-Album Kind-15', - 'zGenAlbum-Cloud_Local_State-16', - 'zGenAlbum-Sync Event Order Key-17', - 'zGenAlbum-is Owned-18', - 'zGenAlbum-Cloud Relationship State-19', - 'zGenAlbum-Cloud Relationship State Local-20', - 'zGenAlbum-Cloud Owner Mail Key-21', - 'zGenAlbum-Cloud Owner First Name-22', - 'zGenAlbum-Cloud Owner Last Name-23', - 'zGenAlbum-Cloud Owner Full Name-24', - 'zGenAlbum-Cloud Person ID-25', - 'zGenAlbum-Cloud Owner Hashed Person ID-26', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-27', - 'zGenAlbum-Cloud Multi-Contributors Enabled-28', - 'zGenAlbum-Cloud Album Sub Type-29', - 'zGenAlbum-Cloud Contribution Date-30', - 'zGenAlbum-Cloud Last Interesting Change Date-31', - 'zGenAlbum-Cloud Notification Enabled-32', - 'zGenAlbum-Pinned-33', - 'zGenAlbum-Custom Sort Key-34', - 'zGenAlbum-Custom Sort Ascending-35', - 'zGenAlbum-Custom Query Type-36', - 'zGenAlbum-Trashed State-37', - 'zGenAlbum-Trash Date-38', - 'zGenAlbum-Cloud Delete State-39', - 'zGenAlbum-Cloud Owner Whitelisted-40', - 'zGenAlbum-Cloud Local Public URL Enabled-41', - 'zGenAlbum-Cloud Public URL Enabled-42', - 'zGenAlbum-Public URL-43', - 'zGenAlbum-Key Asset Face Thumb Index-44', - 'zGenAlbum-Custom Query Parameters-45', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-46', - 'zCldShareAlbumInvRec-Invitation State Local-47', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-48', - 'zCldShareAlbumInvRec-Subscription Date-49', - 'zCldShareAlbumInvRec-Invitee First Name-50', - 'zCldShareAlbumInvRec-Invitee Last Name-51', - 'zCldShareAlbumInvRec-Invitee Full Name-52', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-53', - 'zCldShareAlbumInvRec-Invitee Email Key-54', - 'zCldShareAlbumInvRec-Album GUID-55', - 'zCldShareAlbumInvRec-Cloud GUID-56', - 'zAlbumList-Needs Reordering Number-57') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph23-Shared Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph23-Shared Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Shared Album Records with No Asset Data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57])) + + data_headers = (('zGenAlbum-Cloud Creation Date-0', 'datetime'), + ('zGenAlbum-Start Date-1', 'datetime'), + ('zGenAlbum-End Date-2', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-3', 'datetime'), + 'zGenAlbum- Title-User&System Applied-4', + 'zGenAlbum-UUID-5', + 'zGenAlbum-Cloud GUID-6', + 'zGenAlbum-Pending Items Count-7', + 'zGenAlbum-Pending Items Type-8', + 'zGenAlbum- Cached Photos Count-9', + 'zGenAlbum- Cached Videos Count-10', + 'zGenAlbum- Cached Count-11', + 'zGenAlbum-Has Unseen Content-12', + 'zGenAlbum-Unseen Asset Count-13', + 'zGenAlbum-zENT- Entity-14', + 'zGenAlbum-Album Kind-15', + 'zGenAlbum-Cloud_Local_State-16', + 'zGenAlbum-Sync Event Order Key-17', + 'zGenAlbum-is Owned-18', + 'zGenAlbum-Cloud Relationship State-19', + 'zGenAlbum-Cloud Relationship State Local-20', + 'zGenAlbum-Cloud Owner Mail Key-21', + 'zGenAlbum-Cloud Owner First Name-22', + 'zGenAlbum-Cloud Owner Last Name-23', + 'zGenAlbum-Cloud Owner Full Name-24', + 'zGenAlbum-Cloud Person ID-25', + 'zGenAlbum-Cloud Owner Hashed Person ID-26', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-27', + 'zGenAlbum-Cloud Multi-Contributors Enabled-28', + 'zGenAlbum-Cloud Album Sub Type-29', + ('zGenAlbum-Cloud Contribution Date-30', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-31', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-32', + 'zGenAlbum-Pinned-33', + 'zGenAlbum-Custom Sort Key-34', + 'zGenAlbum-Custom Sort Ascending-35', + 'zGenAlbum-Custom Query Type-36', + 'zGenAlbum-Trashed State-37', + ('zGenAlbum-Trash Date-38', 'datetime'), + 'zGenAlbum-Cloud Delete State-39', + 'zGenAlbum-Cloud Owner Whitelisted-40', + 'zGenAlbum-Cloud Local Public URL Enabled-41', + 'zGenAlbum-Cloud Public URL Enabled-42', + 'zGenAlbum-Public URL-43', + 'zGenAlbum-Key Asset Face Thumb Index-44', + 'zGenAlbum-Custom Query Parameters-45', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-46', + 'zCldShareAlbumInvRec-Invitation State Local-47', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-48', + ('zCldShareAlbumInvRec-Subscription Date-49', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-50', + 'zCldShareAlbumInvRec-Invitee Last Name-51', + 'zCldShareAlbumInvRec-Invitee Full Name-52', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-53', + 'zCldShareAlbumInvRec-Invitee Email Key-54', + 'zCldShareAlbumInvRec-Album GUID-55', + 'zCldShareAlbumInvRec-Cloud GUID-56', + 'zAlbumList-Needs Reordering Number-57') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date', DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', @@ -800,116 +764,94 @@ def get_ph23sharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text, = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 1505 ORDER BY zGenAlbum.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63])) - - counter += 1 - - description = 'Parses Shared Album records found in the PhotoData-Photos.sqlite from' \ - ' ZGENERICALBUM Table and supports iOS 13. Parses Shared Album records only' \ - ' no asset data is being parsed in this parser. This parser will contain shared albums,' \ - ' shared album invites and the invite status data.' - report = ArtifactHtmlReport('Ph23-Shared Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph23-Shared Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Cloud Creation Date-0', - 'zGenAlbum-Creation Date-1', - 'zGenAlbum-Start Date-2', - 'zGenAlbum-End Date-3', - 'zGenAlbum-Cloud Subscription Date-4', - 'zGenAlbum- Title-User&System Applied-5', - 'zGenAlbum-UUID-6', - 'zGenAlbum-Cloud GUID-7', - 'zGenAlbum-Pending Items Count-8', - 'zGenAlbum-Pending Items Type-9', - 'zGenAlbum- Cached Photos Count-10', - 'zGenAlbum- Cached Videos Count-11', - 'zGenAlbum- Cached Count-12', - 'zGenAlbum-Has Unseen Content-13', - 'zGenAlbum-Unseen Asset Count-14', - 'zGenAlbum-zENT- Entity-15', - 'zGenAlbum-Album Kind-16', - 'zGenAlbum-Cloud_Local_State-17', - 'zGenAlbum-Sync Event Order Key-18', - 'zGenAlbum-is Owned-19', - 'zGenAlbum-Cloud Relationship State-20', - 'zGenAlbum-Cloud Relationship State Local-21', - 'zGenAlbum-Cloud Owner Mail Key-22', - 'zGenAlbum-Cloud Owner Frist Name-23', - 'zGenAlbum-Cloud Owner Last Name-24', - 'zGenAlbum-Cloud Owner Full Name-25', - 'zGenAlbum-Cloud Person ID-26', - 'zGenAlbum-Cloud Owner Hashed Person ID-27', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-28', - 'zGenAlbum-Cloud Multi-Contributors Enabled-29', - 'zGenAlbum-Cloud Album Sub Type-30', - 'zGenAlbum-Cloud Contribution Date-31', - 'zGenAlbum-Cloud Last Interesting Change Date-32', - 'zGenAlbum-Cloud Notification Enabled-33', - 'zGenAlbum-Pinned-34', - 'zGenAlbum-Custom Sort Key-35', - 'zGenAlbum-Custom Sort Ascending-36', - 'zGenAlbum-Project Document Type-37', - 'zGenAlbum-Custom Query Type-38', - 'zGenAlbum-Trashed State-39', - 'zGenAlbum-Trash Date-40', - 'zGenAlbum-Cloud Delete State-41', - 'zGenAlbum-Cloud Owner Whitelisted-42', - 'zGenAlbum-Cloud Local Public URL Enabled-43', - 'zGenAlbum-Cloud Public URL Enabled-44', - 'zGenAlbum-Public URL-45', - 'zGenAlbum-Key Asset Face Thumb Index-46', - 'zGenAlbum-Project Text Extension ID-47', - 'zGenAlbum-User Query Data-48', - 'zGenAlbum-Custom Query Parameters-49', - 'zGenAlbum-Project Data-50', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-51', - 'zCldShareAlbumInvRec-Invitation State Local-52', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-53', - 'zCldShareAlbumInvRec-Subscription Date-54', - 'zCldShareAlbumInvRec-Invitee First Name-55', - 'zCldShareAlbumInvRec-Invitee Last Name-56', - 'zCldShareAlbumInvRec-Invitee Full Name-57', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-58', - 'zCldShareAlbumInvRec-Invitee Email Key-59', - 'zCldShareAlbumInvRec-Album GUID-60', - 'zCldShareAlbumInvRec-Cloud GUID-61', - 'zGenAlbum-Project Render UUID-62', - 'zAlbumList-Needs Reordering Number-63') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph23-Shared Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph23-Shared Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Shared Album Records with No Asset Data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63])) + + data_headers = (('zGenAlbum-Cloud Creation Date-0', 'datetime'), + ('zGenAlbum-Creation Date-1', 'datetime'), + ('zGenAlbum-Start Date-2', 'datetime'), + ('zGenAlbum-End Date-3', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-4', 'datetime'), + 'zGenAlbum- Title-User&System Applied-5', + 'zGenAlbum-UUID-6', + 'zGenAlbum-Cloud GUID-7', + 'zGenAlbum-Pending Items Count-8', + 'zGenAlbum-Pending Items Type-9', + 'zGenAlbum- Cached Photos Count-10', + 'zGenAlbum- Cached Videos Count-11', + 'zGenAlbum- Cached Count-12', + 'zGenAlbum-Has Unseen Content-13', + 'zGenAlbum-Unseen Asset Count-14', + 'zGenAlbum-zENT- Entity-15', + 'zGenAlbum-Album Kind-16', + 'zGenAlbum-Cloud_Local_State-17', + 'zGenAlbum-Sync Event Order Key-18', + 'zGenAlbum-is Owned-19', + 'zGenAlbum-Cloud Relationship State-20', + 'zGenAlbum-Cloud Relationship State Local-21', + 'zGenAlbum-Cloud Owner Mail Key-22', + 'zGenAlbum-Cloud Owner Frist Name-23', + 'zGenAlbum-Cloud Owner Last Name-24', + 'zGenAlbum-Cloud Owner Full Name-25', + 'zGenAlbum-Cloud Person ID-26', + 'zGenAlbum-Cloud Owner Hashed Person ID-27', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-28', + 'zGenAlbum-Cloud Multi-Contributors Enabled-29', + 'zGenAlbum-Cloud Album Sub Type-30', + ('zGenAlbum-Cloud Contribution Date-31', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-32', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-33', + 'zGenAlbum-Pinned-34', + 'zGenAlbum-Custom Sort Key-35', + 'zGenAlbum-Custom Sort Ascending-36', + 'zGenAlbum-Project Document Type-37', + 'zGenAlbum-Custom Query Type-38', + 'zGenAlbum-Trashed State-39', + ('zGenAlbum-Trash Date-40', 'datetime'), + 'zGenAlbum-Cloud Delete State-41', + 'zGenAlbum-Cloud Owner Whitelisted-42', + 'zGenAlbum-Cloud Local Public URL Enabled-43', + 'zGenAlbum-Cloud Public URL Enabled-44', + 'zGenAlbum-Public URL-45', + 'zGenAlbum-Key Asset Face Thumb Index-46', + 'zGenAlbum-Project Text Extension ID-47', + 'zGenAlbum-User Query Data-48', + 'zGenAlbum-Custom Query Parameters-49', + 'zGenAlbum-Project Data-50', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-51', + 'zCldShareAlbumInvRec-Invitation State Local-52', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-53', + ('zCldShareAlbumInvRec-Subscription Date-54', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-55', + 'zCldShareAlbumInvRec-Invitee Last Name-56', + 'zCldShareAlbumInvRec-Invitee Full Name-57', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-58', + 'zCldShareAlbumInvRec-Invitee Email Key-59', + 'zCldShareAlbumInvRec-Album GUID-60', + 'zCldShareAlbumInvRec-Cloud GUID-61', + 'zGenAlbum-Project Render UUID-62', + 'zAlbumList-Needs Reordering Number-63') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date', DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', @@ -1109,119 +1051,97 @@ def get_ph23sharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text, = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 1505 ORDER BY zGenAlbum.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65])) - - counter += 1 - - description = 'Parses Shared Album records found in the PhotoData-Photos.sqlite from' \ - ' ZGENERICALBUM Table and supports iOS 14. Parses Shared Album records only' \ - ' no asset data is being parsed in this parser. This parser will contain shared albums,' \ - ' shared album invites and the invite status data.' - report = ArtifactHtmlReport('Ph23-Shared Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph23-Shared Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Cloud Creation Date-0', - 'zGenAlbum-Creation Date-1', - 'zGenAlbum-Start Date-2', - 'zGenAlbum-End Date-3', - 'zGenAlbum-Cloud Subscription Date-4', - 'zGenAlbum- Title-User&System Applied-5', - 'zGenAlbum-UUID-6', - 'zGenAlbum-Cloud GUID-7', - 'zGenAlbum-Creator Bundle ID-8', - 'zGenAlbum-Pending Items Count-9', - 'zGenAlbum-Pending Items Type-10', - 'zGenAlbum- Cached Photos Count-11', - 'zGenAlbum- Cached Videos Count-12', - 'zGenAlbum- Cached Count-13', - 'zGenAlbum-Has Unseen Content-14', - 'zGenAlbum-Unseen Asset Count-15', - 'zGenAlbum-zENT- Entity-16', - 'zGenAlbum-Album Kind-17', - 'zGenAlbum-Cloud_Local_State-18', - 'zGenAlbum-Sync Event Order Key-19', - 'zGenAlbum-is Owned-20', - 'zGenAlbum-Cloud Relationship State-21', - 'zGenAlbum-Cloud Relationship State Local-22', - 'zGenAlbum-Cloud Owner Mail Key-23', - 'zGenAlbum-Cloud Owner Frist Name-24', - 'zGenAlbum-Cloud Owner Last Name-25', - 'zGenAlbum-Cloud Owner Full Name-26', - 'zGenAlbum-Cloud Person ID-27', - 'zGenAlbum-Cloud Owner Hashed Person ID-28', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29', - 'zGenAlbum-Cloud Multi-Contributors Enabled-30', - 'zGenAlbum-Cloud Album Sub Type-31', - 'zGenAlbum-Cloud Contribution Date-32', - 'zGenAlbum-Cloud Last Interesting Change Date-33', - 'zGenAlbum-Cloud Notification Enabled-34', - 'zGenAlbum-Pinned-35', - 'zGenAlbum-Custom Sort Key-36', - 'zGenAlbum-Custom Sort Ascending-37', - 'zGenAlbum-Is Prototype-38', - 'zGenAlbum-Project Document Type-39', - 'zGenAlbum-Custom Query Type-40', - 'zGenAlbum-Trashed State-41', - 'zGenAlbum-Trash Date-42', - 'zGenAlbum-Cloud Delete State-43', - 'zGenAlbum-Cloud Owner Whitelisted-44', - 'zGenAlbum-Cloud Local Public URL Enabled-45', - 'zGenAlbum-Cloud Public URL Enabled-46', - 'zGenAlbum-Public URL-47', - 'zGenAlbum-Key Asset Face Thumb Index-48', - 'zGenAlbum-Project Text Extension ID-49', - 'zGenAlbum-User Query Data-50', - 'zGenAlbum-Custom Query Parameters-51', - 'zGenAlbum-Project Data-52', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-53', - 'zCldShareAlbumInvRec-Invitation State Local-54', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-55', - 'zCldShareAlbumInvRec-Subscription Date-56', - 'zCldShareAlbumInvRec-Invitee First Name-57', - 'zCldShareAlbumInvRec-Invitee Last Name-58', - 'zCldShareAlbumInvRec-Invitee Full Name-59', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-60', - 'zCldShareAlbumInvRec-Invitee Email Key-61', - 'zCldShareAlbumInvRec-Album GUID-62', - 'zCldShareAlbumInvRec-Cloud GUID-63', - 'zGenAlbum-Project Render UUID-64', - 'zAlbumList-Needs Reordering Number-65') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph23-Shared Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph23-Shared Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Shared Album Records with No Asset Data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65])) + + data_headers = (('zGenAlbum-Cloud Creation Date-0', 'datetime'), + ('zGenAlbum-Creation Date-1', 'datetime'), + ('zGenAlbum-Start Date-2', 'datetime'), + ('zGenAlbum-End Date-3', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-4', 'datetime'), + 'zGenAlbum- Title-User&System Applied-5', + 'zGenAlbum-UUID-6', + 'zGenAlbum-Cloud GUID-7', + 'zGenAlbum-Creator Bundle ID-8', + 'zGenAlbum-Pending Items Count-9', + 'zGenAlbum-Pending Items Type-10', + 'zGenAlbum- Cached Photos Count-11', + 'zGenAlbum- Cached Videos Count-12', + 'zGenAlbum- Cached Count-13', + 'zGenAlbum-Has Unseen Content-14', + 'zGenAlbum-Unseen Asset Count-15', + 'zGenAlbum-zENT- Entity-16', + 'zGenAlbum-Album Kind-17', + 'zGenAlbum-Cloud_Local_State-18', + 'zGenAlbum-Sync Event Order Key-19', + 'zGenAlbum-is Owned-20', + 'zGenAlbum-Cloud Relationship State-21', + 'zGenAlbum-Cloud Relationship State Local-22', + 'zGenAlbum-Cloud Owner Mail Key-23', + 'zGenAlbum-Cloud Owner Frist Name-24', + 'zGenAlbum-Cloud Owner Last Name-25', + 'zGenAlbum-Cloud Owner Full Name-26', + 'zGenAlbum-Cloud Person ID-27', + 'zGenAlbum-Cloud Owner Hashed Person ID-28', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29', + 'zGenAlbum-Cloud Multi-Contributors Enabled-30', + 'zGenAlbum-Cloud Album Sub Type-31', + ('zGenAlbum-Cloud Contribution Date-32', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-33', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-34', + 'zGenAlbum-Pinned-35', + 'zGenAlbum-Custom Sort Key-36', + 'zGenAlbum-Custom Sort Ascending-37', + 'zGenAlbum-Is Prototype-38', + 'zGenAlbum-Project Document Type-39', + 'zGenAlbum-Custom Query Type-40', + 'zGenAlbum-Trashed State-41', + ('zGenAlbum-Trash Date-42', 'datetime'), + 'zGenAlbum-Cloud Delete State-43', + 'zGenAlbum-Cloud Owner Whitelisted-44', + 'zGenAlbum-Cloud Local Public URL Enabled-45', + 'zGenAlbum-Cloud Public URL Enabled-46', + 'zGenAlbum-Public URL-47', + 'zGenAlbum-Key Asset Face Thumb Index-48', + 'zGenAlbum-Project Text Extension ID-49', + 'zGenAlbum-User Query Data-50', + 'zGenAlbum-Custom Query Parameters-51', + 'zGenAlbum-Project Data-52', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-53', + 'zCldShareAlbumInvRec-Invitation State Local-54', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-55', + ('zCldShareAlbumInvRec-Subscription Date-56', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-57', + 'zCldShareAlbumInvRec-Invitee Last Name-58', + 'zCldShareAlbumInvRec-Invitee Full Name-59', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-60', + 'zCldShareAlbumInvRec-Invitee Email Key-61', + 'zCldShareAlbumInvRec-Album GUID-62', + 'zCldShareAlbumInvRec-Cloud GUID-63', + 'zGenAlbum-Project Render UUID-64', + 'zAlbumList-Needs Reordering Number-65') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date', DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', @@ -1421,119 +1341,97 @@ def get_ph23sharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text, = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 1505 ORDER BY zGenAlbum.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65])) + + data_headers = (('zGenAlbum-Cloud Creation Date-0', 'datetime'), + ('zGenAlbum-Creation Date-1', 'datetime'), + ('zGenAlbum-Start Date-2', 'datetime'), + ('zGenAlbum-End Date-3', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-4', 'datetime'), + 'zGenAlbum- Title-User&System Applied-5', + 'zGenAlbum-UUID-6', + 'zGenAlbum-Cloud GUID-7', + 'zGenAlbum-Imported by Bundle Identifier-8', + 'zGenAlbum-Pending Items Count-9', + 'zGenAlbum-Pending Items Type-10', + 'zGenAlbum- Cached Photos Count-11', + 'zGenAlbum- Cached Videos Count-12', + 'zGenAlbum- Cached Count-13', + 'zGenAlbum-Has Unseen Content-14', + 'zGenAlbum-Unseen Asset Count-15', + 'zGenAlbum-zENT- Entity-16', + 'zGenAlbum-Album Kind-17', + 'zGenAlbum-Cloud_Local_State-18', + 'zGenAlbum-Sync Event Order Key-19', + 'zGenAlbum-is Owned-20', + 'zGenAlbum-Cloud Relationship State-21', + 'zGenAlbum-Cloud Relationship State Local-22', + 'zGenAlbum-Cloud Owner Mail Key-23', + 'zGenAlbum-Cloud Owner Frist Name-24', + 'zGenAlbum-Cloud Owner Last Name-25', + 'zGenAlbum-Cloud Owner Full Name-26', + 'zGenAlbum-Cloud Person ID-27', + 'zGenAlbum-Cloud Owner Hashed Person ID-28', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29', + 'zGenAlbum-Cloud Multi-Contributors Enabled-30', + 'zGenAlbum-Cloud Album Sub Type-31', + ('zGenAlbum-Cloud Contribution Date-32', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-33', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-34', + 'zGenAlbum-Pinned-35', + 'zGenAlbum-Custom Sort Key-36', + 'zGenAlbum-Custom Sort Ascending-37', + 'zGenAlbum-Is Prototype-38', + 'zGenAlbum-Project Document Type-39', + 'zGenAlbum-Custom Query Type-40', + 'zGenAlbum-Trashed State-41', + ('zGenAlbum-Trash Date-42', 'datetime'), + 'zGenAlbum-Cloud Delete State-43', + 'zGenAlbum-Cloud Owner Whitelisted-44', + 'zGenAlbum-Cloud Local Public URL Enabled-45', + 'zGenAlbum-Cloud Public URL Enabled-46', + 'zGenAlbum-Public URL-47', + 'zGenAlbum-Key Asset Face Thumb Index-48', + 'zGenAlbum-Project Text Extension ID-49', + 'zGenAlbum-User Query Data-50', + 'zGenAlbum-Custom Query Parameters-51', + 'zGenAlbum-Project Data-52', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-53', + 'zCldShareAlbumInvRec-Invitation State Local-54', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-55', + ('zCldShareAlbumInvRec-Subscription Date-56', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-57', + 'zCldShareAlbumInvRec-Invitee Last Name-58', + 'zCldShareAlbumInvRec-Invitee Full Name-59', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-60', + 'zCldShareAlbumInvRec-Invitee Email Key-61', + 'zCldShareAlbumInvRec-Album GUID-62', + 'zCldShareAlbumInvRec-Cloud GUID-63', + 'zGenAlbum-Project Render UUID-64', + 'zAlbumList-Needs Reordering Number-65') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65])) - - counter += 1 - - description = 'Parses Shared Album records found in the PhotoData-Photos.sqlite from' \ - ' ZGENERICALBUM Table and supports iOS 15. Parses Shared Album records only' \ - ' no asset data is being parsed in this parser. This parser will contain shared albums,' \ - ' shared album invites and the invite status data.' - report = ArtifactHtmlReport('Ph23-Shared Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph23-Shared Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Cloud Creation Date-0', - 'zGenAlbum-Creation Date-1', - 'zGenAlbum-Start Date-2', - 'zGenAlbum-End Date-3', - 'zGenAlbum-Cloud Subscription Date-4', - 'zGenAlbum- Title-User&System Applied-5', - 'zGenAlbum-UUID-6', - 'zGenAlbum-Cloud GUID-7', - 'zGenAlbum-Imported by Bundle Identifier-8', - 'zGenAlbum-Pending Items Count-9', - 'zGenAlbum-Pending Items Type-10', - 'zGenAlbum- Cached Photos Count-11', - 'zGenAlbum- Cached Videos Count-12', - 'zGenAlbum- Cached Count-13', - 'zGenAlbum-Has Unseen Content-14', - 'zGenAlbum-Unseen Asset Count-15', - 'zGenAlbum-zENT- Entity-16', - 'zGenAlbum-Album Kind-17', - 'zGenAlbum-Cloud_Local_State-18', - 'zGenAlbum-Sync Event Order Key-19', - 'zGenAlbum-is Owned-20', - 'zGenAlbum-Cloud Relationship State-21', - 'zGenAlbum-Cloud Relationship State Local-22', - 'zGenAlbum-Cloud Owner Mail Key-23', - 'zGenAlbum-Cloud Owner Frist Name-24', - 'zGenAlbum-Cloud Owner Last Name-25', - 'zGenAlbum-Cloud Owner Full Name-26', - 'zGenAlbum-Cloud Person ID-27', - 'zGenAlbum-Cloud Owner Hashed Person ID-28', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29', - 'zGenAlbum-Cloud Multi-Contributors Enabled-30', - 'zGenAlbum-Cloud Album Sub Type-31', - 'zGenAlbum-Cloud Contribution Date-32', - 'zGenAlbum-Cloud Last Interesting Change Date-33', - 'zGenAlbum-Cloud Notification Enabled-34', - 'zGenAlbum-Pinned-35', - 'zGenAlbum-Custom Sort Key-36', - 'zGenAlbum-Custom Sort Ascending-37', - 'zGenAlbum-Is Prototype-38', - 'zGenAlbum-Project Document Type-39', - 'zGenAlbum-Custom Query Type-40', - 'zGenAlbum-Trashed State-41', - 'zGenAlbum-Trash Date-42', - 'zGenAlbum-Cloud Delete State-43', - 'zGenAlbum-Cloud Owner Whitelisted-44', - 'zGenAlbum-Cloud Local Public URL Enabled-45', - 'zGenAlbum-Cloud Public URL Enabled-46', - 'zGenAlbum-Public URL-47', - 'zGenAlbum-Key Asset Face Thumb Index-48', - 'zGenAlbum-Project Text Extension ID-49', - 'zGenAlbum-User Query Data-50', - 'zGenAlbum-Custom Query Parameters-51', - 'zGenAlbum-Project Data-52', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-53', - 'zCldShareAlbumInvRec-Invitation State Local-54', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-55', - 'zCldShareAlbumInvRec-Subscription Date-56', - 'zCldShareAlbumInvRec-Invitee First Name-57', - 'zCldShareAlbumInvRec-Invitee Last Name-58', - 'zCldShareAlbumInvRec-Invitee Full Name-59', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-60', - 'zCldShareAlbumInvRec-Invitee Email Key-61', - 'zCldShareAlbumInvRec-Album GUID-62', - 'zCldShareAlbumInvRec-Cloud GUID-63', - 'zGenAlbum-Project Render UUID-64', - 'zAlbumList-Needs Reordering Number-65') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph23-Shared Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph23-Shared Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Shared Album Records with No Asset Data') - db.close() - return - - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date', DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', @@ -1752,123 +1650,101 @@ def get_ph23sharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text, = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 1505 ORDER BY zGenAlbum.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69])) + + data_headers = (('zGenAlbum-Cloud Creation Date-0', 'datetime'), + ('zGenAlbum-Creation Date-1', 'datetime'), + ('zGenAlbum-Start Date-2', 'datetime'), + ('zGenAlbum-End Date-3', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-4', 'datetime'), + 'zGenAlbum- Title-User&System Applied-5', + 'zGenAlbum-UUID-6', + 'zGenAlbum-Cloud GUID-7', + 'zGenAlbum-Imported by Bundle Identifier-8', + 'zGenAlbum-Pending Items Count-9', + 'zGenAlbum-Pending Items Type-10', + 'zGenAlbum- Cached Photos Count-11', + 'zGenAlbum- Cached Videos Count-12', + 'zGenAlbum- Cached Count-13', + 'zGenAlbum-Has Unseen Content-14', + 'zGenAlbum-Unseen Asset Count-15', + 'zGenAlbum-zENT- Entity-16', + 'zGenAlbum-Album Kind-17', + 'zGenAlbum-Cloud_Local_State-18', + 'zGenAlbum-Sync Event Order Key-19', + 'zGenAlbum-is Owned-20', + 'zGenAlbum-Cloud Relationship State-21', + 'zGenAlbum-Cloud Relationship State Local-22', + 'zGenAlbum-Cloud Owner Mail Key-23', + 'zGenAlbum-Cloud Owner First Name-24', + 'zGenAlbum-Cloud Owner Last Name-25', + 'zGenAlbum-Cloud Owner Full Name-26', + 'zGenAlbum-Cloud Person ID-27', + 'zGenAlbum-Cloud Owner Hashed Person ID-28', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29', + 'zGenAlbum-Cloud Multi-Contributors Enabled-30', + 'zGenAlbum-Cloud Album Sub Type-31', + ('zGenAlbum-Cloud Contribution Date-32', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-33', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-34', + 'zGenAlbum-Pinned-35', + 'zGenAlbum-Custom Sort Key-36', + 'zGenAlbum-Custom Sort Ascending-37', + 'zGenAlbum-Is Prototype-38', + 'zGenAlbum-Project Document Type-39', + 'zGenAlbum-Custom Query Type-40', + 'zGenAlbum-Trashed State-41', + ('zGenAlbum-Trash Date-42', 'datetime'), + 'zGenAlbum-Cloud Delete State-43', + 'zGenAlbum-Cloud Owner Whitelisted-44', + 'zGenAlbum-Cloud Local Public URL Enabled-45', + 'zGenAlbum-Cloud Public URL Enabled-46', + 'zGenAlbum-Public URL-47', + 'zGenAlbum-Key Asset Face Thumb Index-48', + 'zGenAlbum-Project Text Extension ID-49', + 'zGenAlbum-User Query Data-50', + 'zGenAlbum-Custom Query Parameters-51', + 'zGenAlbum-Project Data-52', + 'zGenAlbum-Search Index Rebuild State-53', + 'zGenAlbum-Duplicate Type-54', + 'zGenAlbum-Privacy State-55', + 'zCldShareAlbumInvRec-zUUID-56', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-57', + 'zCldShareAlbumInvRec-Invitation State Local-58', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-59', + ('zCldShareAlbumInvRec-Subscription Date-60', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-61', + 'zCldShareAlbumInvRec-Invitee Last Name-62', + 'zCldShareAlbumInvRec-Invitee Full Name-63', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-64', + 'zCldShareAlbumInvRec-Invitee Email Key-65', + 'zCldShareAlbumInvRec-Album GUID-66', + 'zCldShareAlbumInvRec-Cloud GUID-67', + 'zGenAlbum-Project Render UUID-68', + 'zAlbumList-Needs Reordering Number-69') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69])) - - counter += 1 - - description = 'Parses Shared Album records found in the PhotoData-Photos.sqlite from' \ - ' ZGENERICALBUM Table and supports iOS 16-17. Parses Shared Album records only' \ - ' no asset data is being parsed in this parser. This parser will contain shared albums,' \ - ' shared album invites and the invite status data.' - report = ArtifactHtmlReport('Ph23-Shared Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph23-Shared Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Cloud Creation Date-0', - 'zGenAlbum-Creation Date-1', - 'zGenAlbum-Start Date-2', - 'zGenAlbum-End Date-3', - 'zGenAlbum-Cloud Subscription Date-4', - 'zGenAlbum- Title-User&System Applied-5', - 'zGenAlbum-UUID-6', - 'zGenAlbum-Cloud GUID-7', - 'zGenAlbum-Imported by Bundle Identifier-8', - 'zGenAlbum-Pending Items Count-9', - 'zGenAlbum-Pending Items Type-10', - 'zGenAlbum- Cached Photos Count-11', - 'zGenAlbum- Cached Videos Count-12', - 'zGenAlbum- Cached Count-13', - 'zGenAlbum-Has Unseen Content-14', - 'zGenAlbum-Unseen Asset Count-15', - 'zGenAlbum-zENT- Entity-16', - 'zGenAlbum-Album Kind-17', - 'zGenAlbum-Cloud_Local_State-18', - 'zGenAlbum-Sync Event Order Key-19', - 'zGenAlbum-is Owned-20', - 'zGenAlbum-Cloud Relationship State-21', - 'zGenAlbum-Cloud Relationship State Local-22', - 'zGenAlbum-Cloud Owner Mail Key-23', - 'zGenAlbum-Cloud Owner First Name-24', - 'zGenAlbum-Cloud Owner Last Name-25', - 'zGenAlbum-Cloud Owner Full Name-26', - 'zGenAlbum-Cloud Person ID-27', - 'zGenAlbum-Cloud Owner Hashed Person ID-28', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29', - 'zGenAlbum-Cloud Multi-Contributors Enabled-30', - 'zGenAlbum-Cloud Album Sub Type-31', - 'zGenAlbum-Cloud Contribution Date-32', - 'zGenAlbum-Cloud Last Interesting Change Date-33', - 'zGenAlbum-Cloud Notification Enabled-34', - 'zGenAlbum-Pinned-35', - 'zGenAlbum-Custom Sort Key-36', - 'zGenAlbum-Custom Sort Ascending-37', - 'zGenAlbum-Is Prototype-38', - 'zGenAlbum-Project Document Type-39', - 'zGenAlbum-Custom Query Type-40', - 'zGenAlbum-Trashed State-41', - 'zGenAlbum-Trash Date-42', - 'zGenAlbum-Cloud Delete State-43', - 'zGenAlbum-Cloud Owner Whitelisted-44', - 'zGenAlbum-Cloud Local Public URL Enabled-45', - 'zGenAlbum-Cloud Public URL Enabled-46', - 'zGenAlbum-Public URL-47', - 'zGenAlbum-Key Asset Face Thumb Index-48', - 'zGenAlbum-Project Text Extension ID-49', - 'zGenAlbum-User Query Data-50', - 'zGenAlbum-Custom Query Parameters-51', - 'zGenAlbum-Project Data-52', - 'zGenAlbum-Search Index Rebuild State-53', - 'zGenAlbum-Duplicate Type-54', - 'zGenAlbum-Privacy State-55', - 'zCldShareAlbumInvRec-zUUID-56', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-57', - 'zCldShareAlbumInvRec-Invitation State Local-58', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-59', - 'zCldShareAlbumInvRec-Subscription Date-60', - 'zCldShareAlbumInvRec-Invitee First Name-61', - 'zCldShareAlbumInvRec-Invitee Last Name-62', - 'zCldShareAlbumInvRec-Invitee Full Name-63', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-64', - 'zCldShareAlbumInvRec-Invitee Email Key-65', - 'zCldShareAlbumInvRec-Album GUID-66', - 'zCldShareAlbumInvRec-Cloud GUID-67', - 'zGenAlbum-Project Render UUID-68', - 'zAlbumList-Needs Reordering Number-69') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph23-Shared Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph23-Shared Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Shared Album Records with No Asset Data') - - db.close() - return - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" + query = ''' SELECT DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date', DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', @@ -2081,137 +1957,408 @@ def get_ph23sharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text, END AS 'zAlbumList-Needs Reordering Number' FROM ZGENERICALBUM zGenAlbum LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER - LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = zGenAlbum.Z_PK - LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS + LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 1505 ORDER BY zGenAlbum.ZCREATIONDATE - """) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69])) + + data_headers = (('zGenAlbum-Cloud Creation Date-0', 'datetime'), + ('zGenAlbum-Creation Date-1', 'datetime'), + ('zGenAlbum-Start Date-2', 'datetime'), + ('zGenAlbum-End Date-3', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-4', 'datetime'), + 'zGenAlbum- Title-User&System Applied-5', + 'zGenAlbum-UUID-6', + 'zGenAlbum-Cloud GUID-7', + 'zGenAlbum-Imported by Bundle Identifier-8', + 'zGenAlbum-Pending Items Count-9', + 'zGenAlbum-Pending Items Type-10', + 'zGenAlbum- Cached Photos Count-11', + 'zGenAlbum- Cached Videos Count-12', + 'zGenAlbum- Cached Count-13', + 'zGenAlbum-Has Unseen Content-14', + 'zGenAlbum-Unseen Asset Count-15', + 'zGenAlbum-zENT- Entity-16', + 'zGenAlbum-Album Kind-17', + 'zGenAlbum-Cloud_Local_State-18', + 'zGenAlbum-Sync Event Order Key-19', + 'zGenAlbum-is Owned-20', + 'zGenAlbum-Cloud Relationship State-21', + 'zGenAlbum-Cloud Relationship State Local-22', + 'zGenAlbum-Cloud Owner Mail Key-23', + 'zGenAlbum-Cloud Owner First Name-24', + 'zGenAlbum-Cloud Owner Last Name-25', + 'zGenAlbum-Cloud Owner Full Name-26', + 'zGenAlbum-Cloud Person ID-27', + 'zGenAlbum-Cloud Owner Hashed Person ID-28', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29', + 'zGenAlbum-Cloud Multi-Contributors Enabled-30', + 'zGenAlbum-Cloud Album Sub Type-31', + ('zGenAlbum-Cloud Contribution Date-32', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-33', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-34', + 'zGenAlbum-Pinned-35', + 'zGenAlbum-Custom Sort Key-36', + 'zGenAlbum-Custom Sort Ascending-37', + 'zGenAlbum-Is Prototype-38', + 'zGenAlbum-Project Document Type-39', + 'zGenAlbum-Custom Query Type-40', + 'zGenAlbum-Trashed State-41', + ('zGenAlbum-Trash Date-42', 'datetime'), + 'zGenAlbum-Cloud Delete State-43', + 'zGenAlbum-Cloud Owner Whitelisted-44', + 'zGenAlbum-Cloud Local Public URL Enabled-45', + 'zGenAlbum-Cloud Public URL Enabled-46', + 'zGenAlbum-Public URL-47', + 'zGenAlbum-Key Asset Face Thumb Index-48', + 'zGenAlbum-Project Text Extension ID-49', + 'zGenAlbum-User Query Data-50', + 'zGenAlbum-Custom Query Parameters-51', + 'zGenAlbum-Project Data-52', + 'zGenAlbum-Search Index Rebuild State-53', + 'zGenAlbum-Duplicate Type-54', + 'zGenAlbum-Privacy State-55', + 'zCldShareAlbumInvRec-zUUID-56', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-57', + 'zCldShareAlbumInvRec-Invitation State Local-58', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-59', + ('zCldShareAlbumInvRec-Subscription Date-60', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-61', + 'zCldShareAlbumInvRec-Invitee Last Name-62', + 'zCldShareAlbumInvRec-Invitee Full Name-63', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-64', + 'zCldShareAlbumInvRec-Invitee Email Key-65', + 'zCldShareAlbumInvRec-Album GUID-66', + 'zCldShareAlbumInvRec-Cloud GUID-67', + 'zGenAlbum-Project Render UUID-68', + 'zAlbumList-Needs Reordering Number-69') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path - all_rows = cursor.fetchall() - usageentries = len(all_rows) + elif version.parse(iosversion) >= version.parse("18"): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69])) - - counter += 1 - - description = 'Parses Shared Album records found in the PhotoData-Photos.sqlite from' \ - ' ZGENERICALBUM Table and supports iOS 18. Parses Shared Album records only' \ - ' no asset data is being parsed in this parser. This parser will contain shared albums,' \ - ' shared album invites and the invite status data.' - report = ArtifactHtmlReport('Ph23-Shared Album Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph23-Shared Album Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zGenAlbum-Cloud Creation Date-0', - 'zGenAlbum-Creation Date-1', - 'zGenAlbum-Start Date-2', - 'zGenAlbum-End Date-3', - 'zGenAlbum-Cloud Subscription Date-4', - 'zGenAlbum- Title-User&System Applied-5', - 'zGenAlbum-UUID-6', - 'zGenAlbum-Cloud GUID-7', - 'zGenAlbum-Imported by Bundle Identifier-8', - 'zGenAlbum-Pending Items Count-9', - 'zGenAlbum-Pending Items Type-10', - 'zGenAlbum- Cached Photos Count-11', - 'zGenAlbum- Cached Videos Count-12', - 'zGenAlbum- Cached Count-13', - 'zGenAlbum-Has Unseen Content-14', - 'zGenAlbum-Unseen Asset Count-15', - 'zGenAlbum-zENT- Entity-16', - 'zGenAlbum-Album Kind-17', - 'zGenAlbum-Cloud_Local_State-18', - 'zGenAlbum-Sync Event Order Key-19', - 'zGenAlbum-is Owned-20', - 'zGenAlbum-Cloud Relationship State-21', - 'zGenAlbum-Cloud Relationship State Local-22', - 'zGenAlbum-Cloud Owner Mail Key-23', - 'zGenAlbum-Cloud Owner First Name-24', - 'zGenAlbum-Cloud Owner Last Name-25', - 'zGenAlbum-Cloud Owner Full Name-26', - 'zGenAlbum-Cloud Person ID-27', - 'zGenAlbum-Cloud Owner Hashed Person ID-28', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29', - 'zGenAlbum-Cloud Multi-Contributors Enabled-30', - 'zGenAlbum-Cloud Album Sub Type-31', - 'zGenAlbum-Cloud Contribution Date-32', - 'zGenAlbum-Cloud Last Interesting Change Date-33', - 'zGenAlbum-Cloud Notification Enabled-34', - 'zGenAlbum-Pinned-35', - 'zGenAlbum-Custom Sort Key-36', - 'zGenAlbum-Custom Sort Ascending-37', - 'zGenAlbum-Is Prototype-38', - 'zGenAlbum-Project Document Type-39', - 'zGenAlbum-Custom Query Type-40', - 'zGenAlbum-Trashed State-41', - 'zGenAlbum-Trash Date-42', - 'zGenAlbum-Cloud Delete State-43', - 'zGenAlbum-Cloud Owner Whitelisted-44', - 'zGenAlbum-Cloud Local Public URL Enabled-45', - 'zGenAlbum-Cloud Public URL Enabled-46', - 'zGenAlbum-Public URL-47', - 'zGenAlbum-Key Asset Face Thumb Index-48', - 'zGenAlbum-Project Text Extension ID-49', - 'zGenAlbum-User Query Data-50', - 'zGenAlbum-Custom Query Parameters-51', - 'zGenAlbum-Project Data-52', - 'zGenAlbum-Search Index Rebuild State-53', - 'zGenAlbum-Duplicate Type-54', - 'zGenAlbum-Privacy State-55', - 'zCldShareAlbumInvRec-zUUID-56', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-57', - 'zCldShareAlbumInvRec-Invitation State Local-58', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-59', - 'zCldShareAlbumInvRec-Subscription Date-60', - 'zCldShareAlbumInvRec-Invitee First Name-61', - 'zCldShareAlbumInvRec-Invitee Last Name-62', - 'zCldShareAlbumInvRec-Invitee Full Name-63', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-64', - 'zCldShareAlbumInvRec-Invitee Email Key-65', - 'zCldShareAlbumInvRec-Album GUID-66', - 'zCldShareAlbumInvRec-Cloud GUID-67', - 'zGenAlbum-Project Render UUID-68', - 'zAlbumList-Needs Reordering Number-69') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph23-Shared Album Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph23-Shared Album Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Shared Album Records with No Asset Data') - db.close() - return - - -__artifacts_v2__ = { - 'Ph23-Shared Album Records & Invites with NAD-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite 23 Shared Album Records with No Asset Data', - 'description': 'Parses Shared Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table' - ' and supports iOS 11-18. Parses Shared Album records only, no asset data being parsed.' - ' This parser will contain shared albums, share album invites, and invite status data.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-13', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph23sharedalbumsphdapsql' - } -} + query = ''' + SELECT + DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', + DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date', + zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier', + zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count', + CASE zGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'zGenAlbum-Pending Items Type', + zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count', + zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count', + zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count', + CASE zGenAlbum.ZHASUNSEENCONTENT + WHEN 0 THEN 'No Unseen Content-StillTesting-0' + WHEN 1 THEN 'Unseen Content-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || '' + END AS 'zGenAlbum-Has Unseen Content', + zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count', + CASE zGenAlbum.Z_ENT + WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27' + WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28' + WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29' + WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30' + WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || '' + END AS 'zGenAlbum-zENT- Entity', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind', + CASE zGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'zGenAlbum-Cloud_Local_State', + zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key', + CASE zGenAlbum.ZISOWNED + WHEN 0 THEN 'zGenAlbum-Not Owned by Device Apple Acnt-0' + WHEN 1 THEN 'zGenAlbum-Owned by Device Apple Acnt-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISOWNED || '' + END AS 'zGenAlbum-is Owned', + CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATE + WHEN 0 THEN 'zGenAlbum-Cloud Album Owned by Device Apple Acnt-0' + WHEN 2 THEN 'zGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATE || '' + END AS 'zGenAlbum-Cloud Relationship State', + CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL + WHEN 0 THEN 'zGenAlbum-Shared Album Accessible Local Device-0' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || '' + END AS 'zGenAlbum-Cloud Relationship State Local', + zGenAlbum.ZCLOUDOWNEREMAILKEY AS 'zGenAlbum-Cloud Owner Mail Key', + zGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'zGenAlbum-Cloud Owner Frist Name', + zGenAlbum.ZCLOUDOWNERLASTNAME AS 'zGenAlbum-Cloud Owner Last Name', + zGenAlbum.ZCLOUDOWNERFULLNAME AS 'zGenAlbum-Cloud Owner Full Name', + zGenAlbum.ZCLOUDPERSONID AS 'zGenAlbum-Cloud Person ID', + zGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'zGenAlbum-Cloud Owner Hashed Person ID', + CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL + WHEN 0 THEN 'zGenAlbum-Local Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'zGenAlbum-Local Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || '' + END AS 'zGenAlbum-Local Cloud Multi-Contributors Enabled', + CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED + WHEN 0 THEN 'zGenAlbum-Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'zGenAlbum-Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || '' + END AS 'zGenAlbum-Cloud Multi-Contributors Enabled', + CASE zGenAlbum.ZCLOUDALBUMSUBTYPE + WHEN 0 THEN 'zGenAlbum Multi-Contributor-0' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDALBUMSUBTYPE || '' + END AS 'zGenAlbum-Cloud Album Sub Type', + DateTime(zGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS + 'zGenAlbum-Cloud Contribution Date', + DateTime(zGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS + 'zGenAlbum-Cloud Last Interesting Change Date', + CASE zGenAlbum.ZCLOUDNOTIFICATIONSENABLED + WHEN 0 THEN 'zGenAlbum-Cloud Notifications Disabled-0' + WHEN 1 THEN 'zGenAlbum-Cloud Notifications Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDNOTIFICATIONSENABLED || '' + END AS 'zGenAlbum-Cloud Notification Enabled', + CASE zGenAlbum.ZISPINNED + WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'zGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || '' + END AS 'zGenAlbum-Pinned', + CASE zGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'zGenAlbum-Custom Sort Key', + CASE zGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'zGenAlbum-Custom Sort Ascending', + CASE zGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'zGenAlbum-Not Prototype-0' + WHEN 1 THEN 'zGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || '' + END AS 'zGenAlbum-Is Prototype', + CASE zGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'zGenAlbum-Project Document Type', + CASE zGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'zGenAlbum-Custom Query Type', + CASE zGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'zGenAlbum Not In Trash-0' + WHEN 1 THEN 'zGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || '' + END AS 'zGenAlbum-Trashed State', + DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date', + CASE zGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'zGenAlbum-Cloud Delete State', + CASE zGenAlbum.ZCLOUDOWNERISWHITELISTED + WHEN 0 THEN 'zGenAlbum Cloud Owner Not Whitelisted-0' + WHEN 1 THEN 'zGenAlbum Cloud Owner Whitelisted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDOWNERISWHITELISTED || '' + END AS 'zGenAlbum-Cloud Owner Whitelisted', + CASE zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL + WHEN 0 THEN 'zGenAlbum Cloud Local Public URL Disabled-0' + WHEN 1 THEN 'zGenAlbum Cloud Local has Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || '' + END AS 'zGenAlbum-Cloud Local Public URL Enabled', + CASE zGenAlbum.ZCLOUDPUBLICURLENABLED + WHEN 0 THEN 'zGenAlbum Cloud Public URL Disabled-0' + WHEN 1 THEN 'zGenAlbum Cloud Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLED || '' + END AS 'zGenAlbum-Cloud Public URL Enabled', + zGenAlbum.ZPUBLICURL AS 'zGenAlbum-Public URL', + zGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'zGenAlbum-Key Asset Face Thumb Index', + zGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'zGenAlbum-Project Text Extension ID', + zGenAlbum.ZUSERQUERYDATA AS 'zGenAlbum-User Query Data', + zGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'zGenAlbum-Custom Query Parameters', + zGenAlbum.ZPROJECTDATA AS 'zGenAlbum-Project Data', + CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zGenAlbum-Search Index Rebuild State', + CASE zGenAlbum.ZDUPLICATETYPE + WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0' + WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1' + WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || '' + END AS 'zGenAlbum-Duplicate Type', + CASE zGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || '' + END AS 'zGenAlbum-Privacy State', + zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID', + CASE zCldShareAlbumInvRec.ZISMINE + WHEN 0 THEN 'Not My Invitation-0' + WHEN 1 THEN 'My Invitation-1' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZISMINE || '' + END AS 'zCldShareAlbumInvRec-Is My Invitation to Shared Album', + CASE zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL || '' + END AS 'zCldShareAlbumInvRec-Invitation State Local', + CASE zCldShareAlbumInvRec.ZINVITATIONSTATE + WHEN 1 THEN 'Shared Album Invitation Pending-1' + WHEN 2 THEN 'Shared Album Invitation Accepted-2' + WHEN 3 THEN 'Shared Album Invitation Declined-3' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATE || '' + END AS 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status', + DateTime(zCldShareAlbumInvRec.ZINVITEESUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS + 'zCldShareAlbumInvRec-Subscription Date', + zCldShareAlbumInvRec.ZINVITEEFIRSTNAME AS 'zCldShareAlbumInvRec-Invitee First Name', + zCldShareAlbumInvRec.ZINVITEELASTNAME AS 'zCldShareAlbumInvRec-Invitee Last Name', + zCldShareAlbumInvRec.ZINVITEEFULLNAME AS 'zCldShareAlbumInvRec-Invitee Full Name', + zCldShareAlbumInvRec.ZINVITEEHASHEDPERSONID AS 'zCldShareAlbumInvRec-Invitee Hashed Person ID', + zCldShareAlbumInvRec.ZINVITEEEMAILKEY AS 'zCldShareAlbumInvRec-Invitee Email Key', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID', + CASE zAlbumList.ZNEEDSREORDERINGNUMBER + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAlbumList.ZNEEDSREORDERINGNUMBER || '' + END AS 'zAlbumList-Needs Reordering Number' + FROM ZGENERICALBUM zGenAlbum + LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER + LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK + = zCldShareAlbumInvRec.ZALBUM + WHERE zGenAlbum.ZKIND = 1505 + ORDER BY zGenAlbum.ZCREATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69])) + + data_headers = (('zGenAlbum-Cloud Creation Date-0', 'datetime'), + ('zGenAlbum-Creation Date-1', 'datetime'), + ('zGenAlbum-Start Date-2', 'datetime'), + ('zGenAlbum-End Date-3', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-4', 'datetime'), + 'zGenAlbum- Title-User&System Applied-5', + 'zGenAlbum-UUID-6', + 'zGenAlbum-Cloud GUID-7', + 'zGenAlbum-Imported by Bundle Identifier-8', + 'zGenAlbum-Pending Items Count-9', + 'zGenAlbum-Pending Items Type-10', + 'zGenAlbum- Cached Photos Count-11', + 'zGenAlbum- Cached Videos Count-12', + 'zGenAlbum- Cached Count-13', + 'zGenAlbum-Has Unseen Content-14', + 'zGenAlbum-Unseen Asset Count-15', + 'zGenAlbum-zENT- Entity-16', + 'zGenAlbum-Album Kind-17', + 'zGenAlbum-Cloud_Local_State-18', + 'zGenAlbum-Sync Event Order Key-19', + 'zGenAlbum-is Owned-20', + 'zGenAlbum-Cloud Relationship State-21', + 'zGenAlbum-Cloud Relationship State Local-22', + 'zGenAlbum-Cloud Owner Mail Key-23', + 'zGenAlbum-Cloud Owner First Name-24', + 'zGenAlbum-Cloud Owner Last Name-25', + 'zGenAlbum-Cloud Owner Full Name-26', + 'zGenAlbum-Cloud Person ID-27', + 'zGenAlbum-Cloud Owner Hashed Person ID-28', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-29', + 'zGenAlbum-Cloud Multi-Contributors Enabled-30', + 'zGenAlbum-Cloud Album Sub Type-31', + ('zGenAlbum-Cloud Contribution Date-32', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-33', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-34', + 'zGenAlbum-Pinned-35', + 'zGenAlbum-Custom Sort Key-36', + 'zGenAlbum-Custom Sort Ascending-37', + 'zGenAlbum-Is Prototype-38', + 'zGenAlbum-Project Document Type-39', + 'zGenAlbum-Custom Query Type-40', + 'zGenAlbum-Trashed State-41', + ('zGenAlbum-Trash Date-42', 'datetime'), + 'zGenAlbum-Cloud Delete State-43', + 'zGenAlbum-Cloud Owner Whitelisted-44', + 'zGenAlbum-Cloud Local Public URL Enabled-45', + 'zGenAlbum-Cloud Public URL Enabled-46', + 'zGenAlbum-Public URL-47', + 'zGenAlbum-Key Asset Face Thumb Index-48', + 'zGenAlbum-Project Text Extension ID-49', + 'zGenAlbum-User Query Data-50', + 'zGenAlbum-Custom Query Parameters-51', + 'zGenAlbum-Project Data-52', + 'zGenAlbum-Search Index Rebuild State-53', + 'zGenAlbum-Duplicate Type-54', + 'zGenAlbum-Privacy State-55', + 'zCldShareAlbumInvRec-zUUID-56', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-57', + 'zCldShareAlbumInvRec-Invitation State Local-58', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-59', + ('zCldShareAlbumInvRec-Subscription Date-60', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-61', + 'zCldShareAlbumInvRec-Invitee Last Name-62', + 'zCldShareAlbumInvRec-Invitee Full Name-63', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-64', + 'zCldShareAlbumInvRec-Invitee Email Key-65', + 'zCldShareAlbumInvRec-Album GUID-66', + 'zCldShareAlbumInvRec-Cloud GUID-67', + 'zGenAlbum-Project Render UUID-68', + 'zAlbumList-Needs Reordering Number-69') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph24AssetsInSharedAlbums.py b/scripts/artifacts/Ph24AssetsInSharedAlbums.py index 385cf8d1..ed5bd96a 100644 --- a/scripts/artifacts/Ph24AssetsInSharedAlbums.py +++ b/scripts/artifacts/Ph24AssetsInSharedAlbums.py @@ -1,41 +1,47 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 11-18. -# Parses limited asset data with full non-shared album data. -# This parser is based on research and SQLite Queries written by Scott Koenig -# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools -# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results. -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph24AssetinSharedAlbumsInvitesPhDaPsql': { + 'name': 'Ph24-Assets in Shared Albums & Invites-PhDaPsql', + 'description': 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 18.' + ' Parses limited asset data with full non-shared album data.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-E-Asset_In_Albums', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc +@artifact_processor +def Ph24AssetinSharedAlbumsInvitesPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) -def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for PhotoData-Photos.sqlite Assets in Shared Albums from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', zAsset.Z_PK AS 'zAsset-zPK', @@ -256,130 +262,110 @@ def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wra zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 1505 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77])) - - counter += 1 - - description = 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 11.' \ - ' Parses limited asset data with full non-shared album data.' - report = ArtifactHtmlReport('Ph24-Assets in Shared Albums-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph24-Assets in Shared Albums-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-zPK-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zAddAssetAttr- Creator Bundle ID-6', - 'zAsset-Visibility State-7', - 'zAsset-Saved Asset Type-8', - 'zAsset- SortToken -CameraRoll-9', - 'zAsset-Added Date-10', - 'zCldMast-Creation Date-11', - 'zAddAssetAttr-Time Zone Name-12', - 'zAddAssetAttr-EXIF-String-13', - 'zAsset-Modification Date-14', - 'zAsset-Last Shared Date-15', - 'zAsset-Trashed Date-16', - 'zAddAssetAttr-zPK-17', - 'zAsset-UUID = store.cloudphotodb-18', - 'zAddAssetAttr-Master Fingerprint-19', - 'zGenAlbum-Cloud Creation Date-20', - 'zGenAlbum-Start Date-21', - 'zGenAlbum-End Date-22', - 'zGenAlbum-Cloud Subscription Date-23', - 'zGenAlbum- Title-User&System Applied-24', - 'zGenAlbum-UUID-25', - 'zGenAlbum-Cloud GUID-26', - 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-27', - 'zGenAlbum-Pending Items Count-28', - 'zGenAlbum-Pending Items Type-29', - 'zGenAlbum- Cached Photos Count-30', - 'zGenAlbum- Cached Videos Count-31', - 'zGenAlbum- Cached Count-32', - 'zGenAlbum-Has Unseen Content-33', - 'zGenAlbum-Unseen Asset Count-34', - 'zGenAlbum-zENT- Entity-35', - 'zGenAlbum-Album Kind-36', - 'zGenAlbum-Cloud_Local_State-37', - 'zGenAlbum-Sync Event Order Key-38', - 'zGenAlbum-is Owned-39', - 'zGenAlbum-Cloud Relationship State-40', - 'zGenAlbum-Cloud Relationship State Local-41', - 'zGenAlbum-Cloud Owner Mail Key-42', - 'zGenAlbum-Cloud Owner First Name-43', - 'zGenAlbum-Cloud Owner Last Name-44', - 'zGenAlbum-Cloud Owner Full Name-45', - 'zGenAlbum-Cloud Person ID-46', - 'zGenAlbum-Cloud Owner Hashed Person ID-47', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-48', - 'zGenAlbum-Cloud Multi-Contributors Enabled-49', - 'zGenAlbum-Cloud Album Sub Type-50', - 'zGenAlbum-Cloud Contribution Date-51', - 'zGenAlbum-Cloud Last Interesting Change Date-52', - 'zGenAlbum-Cloud Notification Enabled-53', - 'zGenAlbum-Pinned-54', - 'zGenAlbum-Custom Sort Key-55', - 'zGenAlbum-Custom Sort Ascending-56', - 'zGenAlbum-Custom Query Type-57', - 'zGenAlbum-Trashed State-58', - 'zGenAlbum-Trash Date-59', - 'zGenAlbum-Cloud Owner Whitelisted-60', - 'zGenAlbum-Cloud Local Public URL Enabled-61', - 'zGenAlbum-Cloud Public URL Enabled-62', - 'zGenAlbum-Public URL-63', - 'zGenAlbum-Key Asset Face Thumb Index-64', - 'zGenAlbum-Custom Query Parameters-65', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-66', - 'zCldShareAlbumInvRec-Invitation State Local-67', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-68', - 'zCldShareAlbumInvRec-Subscription Date-69', - 'zCldShareAlbumInvRec-Invitee First Name-70', - 'zCldShareAlbumInvRec-Invitee Last Name-71', - 'zCldShareAlbumInvRec-Invitee Full Name-72', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-73', - 'zCldShareAlbumInvRec-Invitee Email Key-74', - 'zCldShareAlbumInvRec-Album GUID-75', - 'zCldShareAlbumInvRec-Cloud GUID-76', - 'zAlbumList-Needs Reordering Number-77') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph24-Assets in Shared Albums-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph24-Assets in Shared Albums-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No Assets in Shared Albums found in PhotoData-Photos.sqlite') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Creator Bundle ID-6', + 'zAsset-Visibility State-7', + 'zAsset-Saved Asset Type-8', + ('zAsset- SortToken -CameraRoll-9', 'datetime'), + ('zAsset-Added Date-10', 'datetime'), + ('zCldMast-Creation Date-11', 'datetime'), + 'zAddAssetAttr-Time Zone Name-12', + 'zAddAssetAttr-EXIF-String-13', + ('zAsset-Modification Date-14', 'datetime'), + ('zAsset-Last Shared Date-15', 'datetime'), + ('zAsset-Trashed Date-16', 'datetime'), + 'zAddAssetAttr-zPK-17', + 'zAsset-UUID = store.cloudphotodb-18', + 'zAddAssetAttr-Master Fingerprint-19', + ('zGenAlbum-Cloud Creation Date-20', 'datetime'), + ( 'zGenAlbum-Start Date-21', 'datetime'), + ('zGenAlbum-End Date-22', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-23', 'datetime'), + 'zGenAlbum- Title-User&System Applied-24', + 'zGenAlbum-UUID-25', + 'zGenAlbum-Cloud GUID-26', + 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-27', + 'zGenAlbum-Pending Items Count-28', + 'zGenAlbum-Pending Items Type-29', + 'zGenAlbum- Cached Photos Count-30', + 'zGenAlbum- Cached Videos Count-31', + 'zGenAlbum- Cached Count-32', + 'zGenAlbum-Has Unseen Content-33', + 'zGenAlbum-Unseen Asset Count-34', + 'zGenAlbum-zENT- Entity-35', + 'zGenAlbum-Album Kind-36', + 'zGenAlbum-Cloud_Local_State-37', + 'zGenAlbum-Sync Event Order Key-38', + 'zGenAlbum-is Owned-39', + 'zGenAlbum-Cloud Relationship State-40', + 'zGenAlbum-Cloud Relationship State Local-41', + 'zGenAlbum-Cloud Owner Mail Key-42', + 'zGenAlbum-Cloud Owner First Name-43', + 'zGenAlbum-Cloud Owner Last Name-44', + 'zGenAlbum-Cloud Owner Full Name-45', + 'zGenAlbum-Cloud Person ID-46', + 'zGenAlbum-Cloud Owner Hashed Person ID-47', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-48', + 'zGenAlbum-Cloud Multi-Contributors Enabled-49', + 'zGenAlbum-Cloud Album Sub Type-50', + ('zGenAlbum-Cloud Contribution Date-51', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-52', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-53', + 'zGenAlbum-Pinned-54', + 'zGenAlbum-Custom Sort Key-55', + 'zGenAlbum-Custom Sort Ascending-56', + 'zGenAlbum-Custom Query Type-57', + 'zGenAlbum-Trashed State-58', + ('zGenAlbum-Trash Date-59', 'datetime'), + 'zGenAlbum-Cloud Owner Whitelisted-60', + 'zGenAlbum-Cloud Local Public URL Enabled-61', + 'zGenAlbum-Cloud Public URL Enabled-62', + 'zGenAlbum-Public URL-63', + 'zGenAlbum-Key Asset Face Thumb Index-64', + 'zGenAlbum-Custom Query Parameters-65', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-66', + 'zCldShareAlbumInvRec-Invitation State Local-67', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-68', + ('zCldShareAlbumInvRec-Subscription Date-69', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-70', + 'zCldShareAlbumInvRec-Invitee Last Name-71', + 'zCldShareAlbumInvRec-Invitee Full Name-72', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-73', + 'zCldShareAlbumInvRec-Invitee Email Key-74', + 'zCldShareAlbumInvRec-Album GUID-75', + 'zCldShareAlbumInvRec-Cloud GUID-76', + 'zAlbumList-Needs Reordering Number-77') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("12")) & (version.parse(iosversion) < version.parse("13")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', zAsset.Z_PK AS 'zAsset-zPK', @@ -604,130 +590,110 @@ def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wra zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 1505 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77])) - - counter += 1 - - description = 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 12.' \ - ' Parses limited asset data with full non-shared album data.' - report = ArtifactHtmlReport('Ph24-Assets in Shared Albums-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph24-Assets in Shared Albums-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-zPK-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zAddAssetAttr- Creator Bundle ID-6', - 'zAsset-Visibility State-7', - 'zAsset-Saved Asset Type-8', - 'zAsset- SortToken -CameraRoll-9', - 'zAsset-Added Date-10', - 'zCldMast-Creation Date-11', - 'zAddAssetAttr-Time Zone Name-12', - 'zAddAssetAttr-EXIF-String-13', - 'zAsset-Modification Date-14', - 'zAsset-Last Shared Date-15', - 'zAsset-Trashed Date-16', - 'zAddAssetAttr-zPK-17', - 'zAsset-UUID = store.cloudphotodb-18', - 'zAddAssetAttr-Master Fingerprint-19', - 'zGenAlbum-Cloud Creation Date-20', - 'zGenAlbum-Start Date-21', - 'zGenAlbum-End Date-22', - 'zGenAlbum-Cloud Subscription Date-23', - 'zGenAlbum- Title-User&System Applied-24', - 'zGenAlbum-UUID-25', - 'zGenAlbum-Cloud GUID-26', - 'zGenAlbum-Pending Items Count-27', - 'zGenAlbum-Pending Items Type-28', - 'zGenAlbum- Cached Photos Count-29', - 'zGenAlbum- Cached Videos Count-30', - 'zGenAlbum- Cached Count-31', - 'zGenAlbum-Has Unseen Content-32', - 'zGenAlbum-Unseen Asset Count-33', - 'zGenAlbum-zENT- Entity-34', - 'zGenAlbum-Album Kind-35', - 'zGenAlbum-Cloud_Local_State-36', - 'zGenAlbum-Sync Event Order Key-37', - 'zGenAlbum-is Owned-38', - 'zGenAlbum-Cloud Relationship State-39', - 'zGenAlbum-Cloud Relationship State Local-40', - 'zGenAlbum-Cloud Owner Mail Key-41', - 'zGenAlbum-Cloud Owner First Name-42', - 'zGenAlbum-Cloud Owner Last Name-43', - 'zGenAlbum-Cloud Owner Full Name-44', - 'zGenAlbum-Cloud Person ID-45', - 'zGenAlbum-Cloud Owner Hashed Person ID-46', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-47', - 'zGenAlbum-Cloud Multi-Contributors Enabled-48', - 'zGenAlbum-Cloud Album Sub Type-49', - 'zGenAlbum-Cloud Contribution Date-50', - 'zGenAlbum-Cloud Last Interesting Change Date-51', - 'zGenAlbum-Cloud Notification Enabled-52', - 'zGenAlbum-Pinned-53', - 'zGenAlbum-Custom Sort Key-54', - 'zGenAlbum-Custom Sort Ascending-55', - 'zGenAlbum-Custom Query Type-56', - 'zGenAlbum-Trashed State-57', - 'zGenAlbum-Trash Date-58', - 'zGenAlbum-Cloud Delete State-59', - 'zGenAlbum-Cloud Owner Whitelisted-60', - 'zGenAlbum-Cloud Local Public URL Enabled-61', - 'zGenAlbum-Cloud Public URL Enabled-62', - 'zGenAlbum-Public URL-63', - 'zGenAlbum-Key Asset Face Thumb Index-64', - 'zGenAlbum-Custom Query Parameters-65', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-66', - 'zCldShareAlbumInvRec-Invitation State Local-67', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-68', - 'zCldShareAlbumInvRec-Subscription Date-69', - 'zCldShareAlbumInvRec-Invitee First Name-70', - 'zCldShareAlbumInvRec-Invitee Last Name-71', - 'zCldShareAlbumInvRec-Invitee Full Name-72', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-73', - 'zCldShareAlbumInvRec-Invitee Email Key-74', - 'zCldShareAlbumInvRec-Album GUID-75', - 'zCldShareAlbumInvRec-Cloud GUID-76', - 'zAlbumList-Needs Reordering Number-77') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph24-Assets in Shared Albums-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph24-Assets in Shared Albums-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No Assets in Shared Albums found in PhotoData-Photos.sqlite') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Creator Bundle ID-6', + 'zAsset-Visibility State-7', + 'zAsset-Saved Asset Type-8', + ('zAsset- SortToken -CameraRoll-9', 'datetime'), + ('zAsset-Added Date-10', 'datetime'), + ('zCldMast-Creation Date-11', 'datetime'), + 'zAddAssetAttr-Time Zone Name-12', + 'zAddAssetAttr-EXIF-String-13', + ('zAsset-Modification Date-14', 'datetime'), + ('zAsset-Last Shared Date-15', 'datetime'), + ('zAsset-Trashed Date-16', 'datetime'), + 'zAddAssetAttr-zPK-17', + 'zAsset-UUID = store.cloudphotodb-18', + 'zAddAssetAttr-Master Fingerprint-19', + ('zGenAlbum-Cloud Creation Date-20', 'datetime'), + ('zGenAlbum-Start Date-21', 'datetime'), + ('zGenAlbum-End Date-22', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-23', 'datetime'), + 'zGenAlbum- Title-User&System Applied-24', + 'zGenAlbum-UUID-25', + 'zGenAlbum-Cloud GUID-26', + 'zGenAlbum-Pending Items Count-27', + 'zGenAlbum-Pending Items Type-28', + 'zGenAlbum- Cached Photos Count-29', + 'zGenAlbum- Cached Videos Count-30', + 'zGenAlbum- Cached Count-31', + 'zGenAlbum-Has Unseen Content-32', + 'zGenAlbum-Unseen Asset Count-33', + 'zGenAlbum-zENT- Entity-34', + 'zGenAlbum-Album Kind-35', + 'zGenAlbum-Cloud_Local_State-36', + 'zGenAlbum-Sync Event Order Key-37', + 'zGenAlbum-is Owned-38', + 'zGenAlbum-Cloud Relationship State-39', + 'zGenAlbum-Cloud Relationship State Local-40', + 'zGenAlbum-Cloud Owner Mail Key-41', + 'zGenAlbum-Cloud Owner First Name-42', + 'zGenAlbum-Cloud Owner Last Name-43', + 'zGenAlbum-Cloud Owner Full Name-44', + 'zGenAlbum-Cloud Person ID-45', + 'zGenAlbum-Cloud Owner Hashed Person ID-46', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-47', + 'zGenAlbum-Cloud Multi-Contributors Enabled-48', + 'zGenAlbum-Cloud Album Sub Type-49', + ('zGenAlbum-Cloud Contribution Date-50', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-51', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-52', + 'zGenAlbum-Pinned-53', + 'zGenAlbum-Custom Sort Key-54', + 'zGenAlbum-Custom Sort Ascending-55', + 'zGenAlbum-Custom Query Type-56', + 'zGenAlbum-Trashed State-57', + ('zGenAlbum-Trash Date-58', 'datetime'), + 'zGenAlbum-Cloud Delete State-59', + 'zGenAlbum-Cloud Owner Whitelisted-60', + 'zGenAlbum-Cloud Local Public URL Enabled-61', + 'zGenAlbum-Cloud Public URL Enabled-62', + 'zGenAlbum-Public URL-63', + 'zGenAlbum-Key Asset Face Thumb Index-64', + 'zGenAlbum-Custom Query Parameters-65', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-66', + 'zCldShareAlbumInvRec-Invitation State Local-67', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-68', + ('zCldShareAlbumInvRec-Subscription Date-69', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-70', + 'zCldShareAlbumInvRec-Invitee Last Name-71', + 'zCldShareAlbumInvRec-Invitee Full Name-72', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-73', + 'zCldShareAlbumInvRec-Invitee Email Key-74', + 'zCldShareAlbumInvRec-Album GUID-75', + 'zCldShareAlbumInvRec-Cloud GUID-76', + 'zAlbumList-Needs Reordering Number-77') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', zAsset.Z_PK AS 'zAsset-zPK', @@ -961,137 +927,117 @@ def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wra zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 1505 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83])) - - counter += 1 - - description = 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 13.' \ - ' Parses limited asset data with full non-shared album data.' - report = ArtifactHtmlReport('Ph24-Assets in Shared Albums-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph24-Assets in Shared Albums-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-zPK-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zAddAssetAttr- Creator Bundle ID-6', - 'zAsset-Visibility State-7', - 'zAsset-Saved Asset Type-8', - 'zAsset- SortToken -CameraRoll-9', - 'zAsset-Added Date-10', - 'zCldMast-Creation Date-11', - 'zAddAssetAttr-Time Zone Name-12', - 'zAddAssetAttr-EXIF-String-13', - 'zAsset-Modification Date-14', - 'zAsset-Last Shared Date-15', - 'zAsset-Trashed Date-16', - 'zAddAssetAttr-zPK-17', - 'zAsset-UUID = store.cloudphotodb-18', - 'zAddAssetAttr-Master Fingerprint-19', - 'zGenAlbum-Cloud Creation Date-20', - 'zGenAlbum-Creation Date-21', - 'zGenAlbum-Start Date-22', - 'zGenAlbum-End Date-23', - 'zGenAlbum-Cloud Subscription Date-24', - 'zGenAlbum- Title-User&System Applied-25', - 'zGenAlbum-UUID-26', - 'zGenAlbum-Cloud GUID-27', - 'zGenAlbum-Pending Items Count-28', - 'zGenAlbum-Pending Items Type-29', - 'zGenAlbum- Cached Photos Count-30', - 'zGenAlbum- Cached Videos Count-31', - 'zGenAlbum- Cached Count-32', - 'zGenAlbum-Has Unseen Content-33', - 'zGenAlbum-Unseen Asset Count-34', - 'zGenAlbum-zENT- Entity-35', - 'zGenAlbum-Album Kind-36', - 'zGenAlbum-Cloud_Local_State-37', - 'zGenAlbum-Sync Event Order Key-38', - 'zGenAlbum-is Owned-39', - 'zGenAlbum-Cloud Relationship State-40', - 'zGenAlbum-Cloud Relationship State Local-41', - 'zGenAlbum-Cloud Owner Mail Key-42', - 'zGenAlbum-Cloud Owner First Name-43', - 'zGenAlbum-Cloud Owner Last Name-44', - 'zGenAlbum-Cloud Owner Full Name-45', - 'zGenAlbum-Cloud Person ID-46', - 'zGenAlbum-Cloud Owner Hashed Person ID-47', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-48', - 'zGenAlbum-Cloud Multi-Contributors Enabled-49', - 'zGenAlbum-Cloud Album Sub Type-50', - 'zGenAlbum-Cloud Contribution Date-51', - 'zGenAlbum-Cloud Last Interesting Change Date-52', - 'zGenAlbum-Cloud Notification Enabled-53', - 'zGenAlbum-Pinned-54', - 'zGenAlbum-Custom Sort Key-55', - 'zGenAlbum-Custom Sort Ascending-56', - 'zGenAlbum-Project Document Type-57', - 'zGenAlbum-Custom Query Type-58', - 'zGenAlbum-Trashed State-59', - 'zGenAlbum-Trash Date-60', - 'zGenAlbum-Cloud Delete State-61', - 'zGenAlbum-Cloud Owner Whitelisted-62', - 'zGenAlbum-Cloud Local Public URL Enabled-63', - 'zGenAlbum-Cloud Public URL Enabled-64', - 'zGenAlbum-Public URL-65', - 'zGenAlbum-Key Asset Face Thumb Index-66', - 'zGenAlbum-Project Text Extension ID-67', - 'zGenAlbum-User Query Data-68', - 'zGenAlbum-Custom Query Parameters-69', - 'zGenAlbum-Project Data-70', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-71', - 'zCldShareAlbumInvRec-Invitation State Local-72', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-73', - 'zCldShareAlbumInvRec-Subscription Date-74', - 'zCldShareAlbumInvRec-Invitee First Name-75', - 'zCldShareAlbumInvRec-Invitee Last Name-76', - 'zCldShareAlbumInvRec-Invitee Full Name-77', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-78', - 'zCldShareAlbumInvRec-Invitee Email Key-79', - 'zCldShareAlbumInvRec-Album GUID-80', - 'zCldShareAlbumInvRec-Cloud GUID-81', - 'zGenAlbum-Project Render UUID-82', - 'zAlbumList-Needs Reordering Number-83') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph24-Assets in Shared Albums-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph24-Assets in Shared Albums-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No Assets in Shared Albums found in PhotoData-Photos.sqlite') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Creator Bundle ID-6', + 'zAsset-Visibility State-7', + 'zAsset-Saved Asset Type-8', + ('zAsset- SortToken -CameraRoll-9', 'datetime'), + ('zAsset-Added Date-10', 'datetime'), + ('zCldMast-Creation Date-11', 'datetime'), + 'zAddAssetAttr-Time Zone Name-12', + 'zAddAssetAttr-EXIF-String-13', + ('zAsset-Modification Date-14', 'datetime'), + ('zAsset-Last Shared Date-15', 'datetime'), + ('zAsset-Trashed Date-16', 'datetime'), + 'zAddAssetAttr-zPK-17', + 'zAsset-UUID = store.cloudphotodb-18', + 'zAddAssetAttr-Master Fingerprint-19', + ('zGenAlbum-Cloud Creation Date-20', 'datetime'), + ('zGenAlbum-Creation Date-21', 'datetime'), + ('zGenAlbum-Start Date-22', 'datetime'), + ('zGenAlbum-End Date-23', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-24', 'datetime'), + 'zGenAlbum- Title-User&System Applied-25', + 'zGenAlbum-UUID-26', + 'zGenAlbum-Cloud GUID-27', + 'zGenAlbum-Pending Items Count-28', + 'zGenAlbum-Pending Items Type-29', + 'zGenAlbum- Cached Photos Count-30', + 'zGenAlbum- Cached Videos Count-31', + 'zGenAlbum- Cached Count-32', + 'zGenAlbum-Has Unseen Content-33', + 'zGenAlbum-Unseen Asset Count-34', + 'zGenAlbum-zENT- Entity-35', + 'zGenAlbum-Album Kind-36', + 'zGenAlbum-Cloud_Local_State-37', + 'zGenAlbum-Sync Event Order Key-38', + 'zGenAlbum-is Owned-39', + 'zGenAlbum-Cloud Relationship State-40', + 'zGenAlbum-Cloud Relationship State Local-41', + 'zGenAlbum-Cloud Owner Mail Key-42', + 'zGenAlbum-Cloud Owner First Name-43', + 'zGenAlbum-Cloud Owner Last Name-44', + 'zGenAlbum-Cloud Owner Full Name-45', + 'zGenAlbum-Cloud Person ID-46', + 'zGenAlbum-Cloud Owner Hashed Person ID-47', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-48', + 'zGenAlbum-Cloud Multi-Contributors Enabled-49', + 'zGenAlbum-Cloud Album Sub Type-50', + ('zGenAlbum-Cloud Contribution Date-51', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-52', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-53', + 'zGenAlbum-Pinned-54', + 'zGenAlbum-Custom Sort Key-55', + 'zGenAlbum-Custom Sort Ascending-56', + 'zGenAlbum-Project Document Type-57', + 'zGenAlbum-Custom Query Type-58', + 'zGenAlbum-Trashed State-59', + ('zGenAlbum-Trash Date-60', 'datetime'), + 'zGenAlbum-Cloud Delete State-61', + 'zGenAlbum-Cloud Owner Whitelisted-62', + 'zGenAlbum-Cloud Local Public URL Enabled-63', + 'zGenAlbum-Cloud Public URL Enabled-64', + 'zGenAlbum-Public URL-65', + 'zGenAlbum-Key Asset Face Thumb Index-66', + 'zGenAlbum-Project Text Extension ID-67', + 'zGenAlbum-User Query Data-68', + 'zGenAlbum-Custom Query Parameters-69', + 'zGenAlbum-Project Data-70', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-71', + 'zCldShareAlbumInvRec-Invitation State Local-72', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-73', + ('zCldShareAlbumInvRec-Subscription Date-74', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-75', + 'zCldShareAlbumInvRec-Invitee Last Name-76', + 'zCldShareAlbumInvRec-Invitee Full Name-77', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-78', + 'zCldShareAlbumInvRec-Invitee Email Key-79', + 'zCldShareAlbumInvRec-Album GUID-80', + 'zCldShareAlbumInvRec-Cloud GUID-81', + 'zGenAlbum-Project Render UUID-82', + 'zAlbumList-Needs Reordering Number-83') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', zAsset.Z_PK AS 'zAsset-zPK', @@ -1337,141 +1283,121 @@ def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wra zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 1505 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87])) - - counter += 1 - - description = 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 14.' \ - ' Parses limited asset data with full non-shared album data.' - report = ArtifactHtmlReport('Ph24-Assets in Shared Albums-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph24-Assets in Shared Albums-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-zPK-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zAddAssetAttr- Creator Bundle ID-6', - 'zAddAssetAttr-Imported By Display Name-7', - 'zAsset-Visibility State-8', - 'zAsset-Saved Asset Type-9', - 'zAddAssetAttr-Share Type-10', - 'zAsset- SortToken -CameraRoll-11', - 'zAsset-Added Date-12', - 'zCldMast-Creation Date-13', - 'zAddAssetAttr-Time Zone Name-14', - 'zAddAssetAttr-EXIF-String-15', - 'zAsset-Modification Date-16', - 'zAsset-Last Shared Date-17', - 'zAsset-Trashed Date-18', - 'zAddAssetAttr-zPK-19', - 'zAsset-UUID = store.cloudphotodb-20', - 'zAddAssetAttr-Master Fingerprint-21', - 'zGenAlbum-Cloud Creation Date-22', - 'zGenAlbum-Creation Date-23', - 'zGenAlbum-Start Date-24', - 'zGenAlbum-End Date-25', - 'zGenAlbum-Cloud Subscription Date-26', - 'zGenAlbum- Title-User&System Applied-27', - 'zGenAlbum-UUID-28', - 'zGenAlbum-Cloud GUID-29', - 'zGenAlbum-Creator Bundle ID-30', - 'zGenAlbum-Pending Items Count-31', - 'zGenAlbum-Pending Items Type-32', - 'zGenAlbum- Cached Photos Count-33', - 'zGenAlbum- Cached Videos Count-34', - 'zGenAlbum- Cached Count-35', - 'zGenAlbum-Has Unseen Content-36', - 'zGenAlbum-Unseen Asset Count-37', - 'zGenAlbum-zENT- Entity-38', - 'zGenAlbum-Album Kind-39', - 'zGenAlbum-Cloud_Local_State-40', - 'zGenAlbum-Sync Event Order Key-41', - 'zGenAlbum-is Owned-42', - 'zGenAlbum-Cloud Relationship State-43', - 'zGenAlbum-Cloud Relationship State Local-44', - 'zGenAlbum-Cloud Owner Mail Key-45', - 'zGenAlbum-Cloud Owner Frist Name-46', - 'zGenAlbum-Cloud Owner Last Name-47', - 'zGenAlbum-Cloud Owner Full Name-48', - 'zGenAlbum-Cloud Person ID-49', - 'zGenAlbum-Cloud Owner Hashed Person ID-50', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-51', - 'zGenAlbum-Cloud Multi-Contributors Enabled-52', - 'zGenAlbum-Cloud Album Sub Type-53', - 'zGenAlbum-Cloud Contribution Date-54', - 'zGenAlbum-Cloud Last Interesting Change Date-55', - 'zGenAlbum-Cloud Notification Enabled-56', - 'zGenAlbum-Pinned-57', - 'zGenAlbum-Custom Sort Key-58', - 'zGenAlbum-Custom Sort Ascending-59', - 'zGenAlbum-Is Prototype-60', - 'zGenAlbum-Project Document Type-61', - 'zGenAlbum-Custom Query Type-62', - 'zGenAlbum-Trashed State-63', - 'zGenAlbum-Trash Date-64', - 'zGenAlbum-Cloud Delete State-65', - 'zGenAlbum-Cloud Owner Whitelisted-66', - 'zGenAlbum-Cloud Local Public URL Enabled-67', - 'zGenAlbum-Cloud Public URL Enabled-68', - 'zGenAlbum-Public URL-69', - 'zGenAlbum-Key Asset Face Thumb Index-70', - 'zGenAlbum-Project Text Extension ID-71', - 'zGenAlbum-User Query Data-72', - 'zGenAlbum-Custom Query Parameters-73', - 'zGenAlbum-Project Data-74', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-75', - 'zCldShareAlbumInvRec-Invitation State Local-76', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-77', - 'zCldShareAlbumInvRec-Subscription Date-78', - 'zCldShareAlbumInvRec-Invitee First Name-79', - 'zCldShareAlbumInvRec-Invitee Last Name-80', - 'zCldShareAlbumInvRec-Invitee Full Name-81', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-82', - 'zCldShareAlbumInvRec-Invitee Email Key-83', - 'zCldShareAlbumInvRec-Album GUID-84', - 'zCldShareAlbumInvRec-Cloud GUID-85', - 'zGenAlbum-Project Render UUID-86', - 'zAlbumList-Needs Reordering Number-87') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph24-Assets in Shared Albums-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph24-Assets in Shared Albums-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No Assets in Shared Albums found in PhotoData-Photos.sqlite') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Creator Bundle ID-6', + 'zAddAssetAttr-Imported By Display Name-7', + 'zAsset-Visibility State-8', + 'zAsset-Saved Asset Type-9', + 'zAddAssetAttr-Share Type-10', + ('zAsset- SortToken -CameraRoll-11', 'datetime'), + ('zAsset-Added Date-12', 'datetime'), + ('zCldMast-Creation Date-13', 'datetime'), + 'zAddAssetAttr-Time Zone Name-14', + 'zAddAssetAttr-EXIF-String-15', + ('zAsset-Modification Date-16', 'datetime'), + ('zAsset-Last Shared Date-17', 'datetime'), + ('zAsset-Trashed Date-18', 'datetime'), + 'zAddAssetAttr-zPK-19', + 'zAsset-UUID = store.cloudphotodb-20', + 'zAddAssetAttr-Master Fingerprint-21', + ('zGenAlbum-Cloud Creation Date-22', 'datetime'), + ('zGenAlbum-Creation Date-23', 'datetime'), + ('zGenAlbum-Start Date-24', 'datetime'), + ('zGenAlbum-End Date-25', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-26', 'datetime'), + 'zGenAlbum- Title-User&System Applied-27', + 'zGenAlbum-UUID-28', + 'zGenAlbum-Cloud GUID-29', + 'zGenAlbum-Creator Bundle ID-30', + 'zGenAlbum-Pending Items Count-31', + 'zGenAlbum-Pending Items Type-32', + 'zGenAlbum- Cached Photos Count-33', + 'zGenAlbum- Cached Videos Count-34', + 'zGenAlbum- Cached Count-35', + 'zGenAlbum-Has Unseen Content-36', + 'zGenAlbum-Unseen Asset Count-37', + 'zGenAlbum-zENT- Entity-38', + 'zGenAlbum-Album Kind-39', + 'zGenAlbum-Cloud_Local_State-40', + 'zGenAlbum-Sync Event Order Key-41', + 'zGenAlbum-is Owned-42', + 'zGenAlbum-Cloud Relationship State-43', + 'zGenAlbum-Cloud Relationship State Local-44', + 'zGenAlbum-Cloud Owner Mail Key-45', + 'zGenAlbum-Cloud Owner Frist Name-46', + 'zGenAlbum-Cloud Owner Last Name-47', + 'zGenAlbum-Cloud Owner Full Name-48', + 'zGenAlbum-Cloud Person ID-49', + 'zGenAlbum-Cloud Owner Hashed Person ID-50', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-51', + 'zGenAlbum-Cloud Multi-Contributors Enabled-52', + 'zGenAlbum-Cloud Album Sub Type-53', + ('zGenAlbum-Cloud Contribution Date-54', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-55', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-56', + 'zGenAlbum-Pinned-57', + 'zGenAlbum-Custom Sort Key-58', + 'zGenAlbum-Custom Sort Ascending-59', + 'zGenAlbum-Is Prototype-60', + 'zGenAlbum-Project Document Type-61', + 'zGenAlbum-Custom Query Type-62', + 'zGenAlbum-Trashed State-63', + ('zGenAlbum-Trash Date-64', 'datetime'), + 'zGenAlbum-Cloud Delete State-65', + 'zGenAlbum-Cloud Owner Whitelisted-66', + 'zGenAlbum-Cloud Local Public URL Enabled-67', + 'zGenAlbum-Cloud Public URL Enabled-68', + 'zGenAlbum-Public URL-69', + 'zGenAlbum-Key Asset Face Thumb Index-70', + 'zGenAlbum-Project Text Extension ID-71', + 'zGenAlbum-User Query Data-72', + 'zGenAlbum-Custom Query Parameters-73', + 'zGenAlbum-Project Data-74', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-75', + 'zCldShareAlbumInvRec-Invitation State Local-76', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-77', + ('zCldShareAlbumInvRec-Subscription Date-78', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-79', + 'zCldShareAlbumInvRec-Invitee Last Name-80', + 'zCldShareAlbumInvRec-Invitee Full Name-81', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-82', + 'zCldShareAlbumInvRec-Invitee Email Key-83', + 'zCldShareAlbumInvRec-Album GUID-84', + 'zCldShareAlbumInvRec-Cloud GUID-85', + 'zGenAlbum-Project Render UUID-86', + 'zAlbumList-Needs Reordering Number-87') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', zAsset.Z_PK AS 'zAsset-zPK', @@ -1735,144 +1661,124 @@ def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wra zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 1505 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', + 'zAsset-Syndication State-7', + 'zAsset-Bundle Scope-8', + 'zAddAssetAttr- Imported by Bundle Identifier-9', + 'zAddAssetAttr-Imported By Display Name-10', + 'zAsset-Visibility State-11', + 'zAsset-Saved Asset Type-12', + 'zAddAssetAttr-Share Type-13', + ('zAsset- SortToken -CameraRoll-14', 'datetime'), + ('zAsset-Added Date-15', 'datetime'), + ('zCldMast-Creation Date-16', 'datetime'), + 'zAddAssetAttr-Time Zone Name-17', + 'zAddAssetAttr-EXIF-String-18', + ('zAsset-Modification Date-19', 'datetime'), + ('zAsset-Last Shared Date-20', 'datetime'), + ('zAsset-Trashed Date-21', 'datetime'), + 'zAddAssetAttr-zPK-22', + 'zAsset-UUID = store.cloudphotodb-23', + 'zAddAssetAttr-Master Fingerprint-24', + ('zGenAlbum-Cloud Creation Date-25', 'datetime'), + ('zGenAlbum-Creation Date-26', 'datetime'), + ('zGenAlbum-Start Date-27', 'datetime'), + ('zGenAlbum-End Date-28', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-29', 'datetime'), + 'zGenAlbum- Title-User&System Applied-30', + 'zGenAlbum-UUID-31', + 'zGenAlbum-Cloud GUID-32', + 'zGenAlbum-Imported by Bundle Identifier-33', + 'zGenAlbum-Pending Items Count-34', + 'zGenAlbum-Pending Items Type-35', + 'zGenAlbum- Cached Photos Count-36', + 'zGenAlbum- Cached Videos Count-37', + 'zGenAlbum- Cached Count-38', + 'zGenAlbum-Has Unseen Content-39', + 'zGenAlbum-Unseen Asset Count-40', + 'zGenAlbum-zENT- Entity-41', + 'zGenAlbum-Album Kind-42', + 'zGenAlbum-Cloud_Local_State-43', + 'zGenAlbum-Sync Event Order Key-44', + 'zGenAlbum-is Owned-45', + 'zGenAlbum-Cloud Relationship State-46', + 'zGenAlbum-Cloud Relationship State Local-47', + 'zGenAlbum-Cloud Owner Mail Key-48', + 'zGenAlbum-Cloud Owner Frist Name-49', + 'zGenAlbum-Cloud Owner Last Name-50', + 'zGenAlbum-Cloud Owner Full Name-51', + 'zGenAlbum-Cloud Person ID-52', + 'zGenAlbum-Cloud Owner Hashed Person ID-53', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-54', + 'zGenAlbum-Cloud Multi-Contributors Enabled-55', + 'zGenAlbum-Cloud Album Sub Type-56', + ('zGenAlbum-Cloud Contribution Date-57', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-58', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-59', + 'zGenAlbum-Pinned-60', + 'zGenAlbum-Custom Sort Key-61', + 'zGenAlbum-Custom Sort Ascending-62', + 'zGenAlbum-Is Prototype-63', + 'zGenAlbum-Project Document Type-64', + 'zGenAlbum-Custom Query Type-65', + 'zGenAlbum-Trashed State-66', + ('zGenAlbum-Trash Date-67', 'datetime'), + 'zGenAlbum-Cloud Delete State-68', + 'zGenAlbum-Cloud Owner Whitelisted-69', + 'zGenAlbum-Cloud Local Public URL Enabled-70', + 'zGenAlbum-Cloud Public URL Enabled-71', + 'zGenAlbum-Public URL-72', + 'zGenAlbum-Key Asset Face Thumb Index-73', + 'zGenAlbum-Project Text Extension ID-74', + 'zGenAlbum-User Query Data-75', + 'zGenAlbum-Custom Query Parameters-76', + 'zGenAlbum-Project Data-77', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-78', + 'zCldShareAlbumInvRec-Invitation State Local-79', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-80', + ('zCldShareAlbumInvRec-Subscription Date-81', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-82', + 'zCldShareAlbumInvRec-Invitee Last Name-83', + 'zCldShareAlbumInvRec-Invitee Full Name-84', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-85', + 'zCldShareAlbumInvRec-Invitee Email Key-86', + 'zCldShareAlbumInvRec-Album GUID-87', + 'zCldShareAlbumInvRec-Cloud GUID-88', + 'zGenAlbum-Project Render UUID-89', + 'zAlbumList-Needs Reordering Number-90') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90])) - - counter += 1 - - description = 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 15.' \ - ' Parses limited asset data with full non-shared album data.' - report = ArtifactHtmlReport('Ph24-Assets in Shared Albums-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph24-Assets in Shared Albums-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-zPK-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', - 'zAsset-Syndication State-7', - 'zAsset-Bundle Scope-8', - 'zAddAssetAttr- Imported by Bundle Identifier-9', - 'zAddAssetAttr-Imported By Display Name-10', - 'zAsset-Visibility State-11', - 'zAsset-Saved Asset Type-12', - 'zAddAssetAttr-Share Type-13', - 'zAsset- SortToken -CameraRoll-14', - 'zAsset-Added Date-15', - 'zCldMast-Creation Date-16', - 'zAddAssetAttr-Time Zone Name-17', - 'zAddAssetAttr-EXIF-String-18', - 'zAsset-Modification Date-19', - 'zAsset-Last Shared Date-20', - 'zAsset-Trashed Date-21', - 'zAddAssetAttr-zPK-22', - 'zAsset-UUID = store.cloudphotodb-23', - 'zAddAssetAttr-Master Fingerprint-24', - 'zGenAlbum-Cloud Creation Date-25', - 'zGenAlbum-Creation Date-26', - 'zGenAlbum-Start Date-27', - 'zGenAlbum-End Date-28', - 'zGenAlbum-Cloud Subscription Date-29', - 'zGenAlbum- Title-User&System Applied-30', - 'zGenAlbum-UUID-31', - 'zGenAlbum-Cloud GUID-32', - 'zGenAlbum-Imported by Bundle Identifier-33', - 'zGenAlbum-Pending Items Count-34', - 'zGenAlbum-Pending Items Type-35', - 'zGenAlbum- Cached Photos Count-36', - 'zGenAlbum- Cached Videos Count-37', - 'zGenAlbum- Cached Count-38', - 'zGenAlbum-Has Unseen Content-39', - 'zGenAlbum-Unseen Asset Count-40', - 'zGenAlbum-zENT- Entity-41', - 'zGenAlbum-Album Kind-42', - 'zGenAlbum-Cloud_Local_State-43', - 'zGenAlbum-Sync Event Order Key-44', - 'zGenAlbum-is Owned-45', - 'zGenAlbum-Cloud Relationship State-46', - 'zGenAlbum-Cloud Relationship State Local-47', - 'zGenAlbum-Cloud Owner Mail Key-48', - 'zGenAlbum-Cloud Owner Frist Name-49', - 'zGenAlbum-Cloud Owner Last Name-50', - 'zGenAlbum-Cloud Owner Full Name-51', - 'zGenAlbum-Cloud Person ID-52', - 'zGenAlbum-Cloud Owner Hashed Person ID-53', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-54', - 'zGenAlbum-Cloud Multi-Contributors Enabled-55', - 'zGenAlbum-Cloud Album Sub Type-56', - 'zGenAlbum-Cloud Contribution Date-57', - 'zGenAlbum-Cloud Last Interesting Change Date-58', - 'zGenAlbum-Cloud Notification Enabled-59', - 'zGenAlbum-Pinned-60', - 'zGenAlbum-Custom Sort Key-61', - 'zGenAlbum-Custom Sort Ascending-62', - 'zGenAlbum-Is Prototype-63', - 'zGenAlbum-Project Document Type-64', - 'zGenAlbum-Custom Query Type-65', - 'zGenAlbum-Trashed State-66', - 'zGenAlbum-Trash Date-67', - 'zGenAlbum-Cloud Delete State-68', - 'zGenAlbum-Cloud Owner Whitelisted-69', - 'zGenAlbum-Cloud Local Public URL Enabled-70', - 'zGenAlbum-Cloud Public URL Enabled-71', - 'zGenAlbum-Public URL-72', - 'zGenAlbum-Key Asset Face Thumb Index-73', - 'zGenAlbum-Project Text Extension ID-74', - 'zGenAlbum-User Query Data-75', - 'zGenAlbum-Custom Query Parameters-76', - 'zGenAlbum-Project Data-77', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-78', - 'zCldShareAlbumInvRec-Invitation State Local-79', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-80', - 'zCldShareAlbumInvRec-Subscription Date-81', - 'zCldShareAlbumInvRec-Invitee First Name-82', - 'zCldShareAlbumInvRec-Invitee Last Name-83', - 'zCldShareAlbumInvRec-Invitee Full Name-84', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-85', - 'zCldShareAlbumInvRec-Invitee Email Key-86', - 'zCldShareAlbumInvRec-Album GUID-87', - 'zCldShareAlbumInvRec-Cloud GUID-88', - 'zGenAlbum-Project Render UUID-89', - 'zAlbumList-Needs Reordering Number-90') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph24-Assets in Shared Albums-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph24-Assets in Shared Albums-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No Assets in Shared Albums found in PhotoData-Photos.sqlite') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', zAsset.Z_PK AS 'zAsset-zPK', @@ -2161,151 +2067,131 @@ def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wra zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 1505 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', + 'zAsset-Syndication State-7', + 'zAsset-Bundle Scope-8', + 'zAddAssetAttr.Imported by Bundle Identifier-9', + 'zAddAssetAttr-Imported By Display Name-10', + 'zAsset-Visibility State-11', + 'zAsset-Saved Asset Type-12', + 'zAddAssetAttr-Share Type-13', + 'zAsset-Active Library Scope Participation State-14', + ('zAsset- SortToken -CameraRoll-15', 'datetime'), + ('zAsset-Added Date-16', 'datetime'), + ('zCldMast-Creation Date-17', 'datetime'), + 'zAddAssetAttr-Time Zone Name-18', + 'zAddAssetAttr-EXIF-String-19', + ('zAsset-Modification Date-20', 'datetime'), + ('zAsset-Last Shared Date-21', 'datetime'), + ('zAsset-Trashed Date-22', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-23', + 'zAddAssetAttr-zPK-24', + 'zAsset-UUID = store.cloudphotodb-25', + 'zAddAssetAttr-Master Fingerprint-26', + ('zGenAlbum-Cloud Creation Date-27', 'datetime'), + ('zGenAlbum-Creation Date-28', 'datetime'), + ('zGenAlbum-Start Date-29', 'datetime'), + ('zGenAlbum-End Date-30', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-31', 'datetime'), + 'zGenAlbum- Title-User&System Applied-32', + 'zGenAlbum-UUID-33', + 'zGenAlbum-Cloud GUID-34', + 'zGenAlbum-Imported by Bundle Identifier-35', + 'zGenAlbum-Pending Items Count-36', + 'zGenAlbum-Pending Items Type-37', + 'zGenAlbum- Cached Photos Count-38', + 'zGenAlbum- Cached Videos Count-39', + 'zGenAlbum- Cached Count-40', + 'zGenAlbum-Has Unseen Content-41', + 'zGenAlbum-Unseen Asset Count-42', + 'zGenAlbum-zENT- Entity-43', + 'zGenAlbum-Album Kind-44', + 'zGenAlbum-Cloud_Local_State-45', + 'zGenAlbum-Sync Event Order Key-46', + 'zGenAlbum-is Owned-47', + 'zGenAlbum-Cloud Relationship State-48', + 'zGenAlbum-Cloud Relationship State Local-49', + 'zGenAlbum-Cloud Owner Mail Key-50', + 'zGenAlbum-Cloud Owner First Name-51', + 'zGenAlbum-Cloud Owner Last Name-52', + 'zGenAlbum-Cloud Owner Full Name-53', + 'zGenAlbum-Cloud Person ID-54', + 'zGenAlbum-Cloud Owner Hashed Person ID-55', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-56', + 'zGenAlbum-Cloud Multi-Contributors Enabled-57', + 'zGenAlbum-Cloud Album Sub Type-58', + ('zGenAlbum-Cloud Contribution Date-59', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-60', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-61', + 'zGenAlbum-Pinned-62', + 'zGenAlbum-Custom Sort Key-63', + 'zGenAlbum-Custom Sort Ascending-64', + 'zGenAlbum-Is Prototype-65', + 'zGenAlbum-Project Document Type-66', + 'zGenAlbum-Custom Query Type-67', + 'zGenAlbum-Trashed State-68', + ('zGenAlbum-Trash Date-69', 'datetime'), + 'zGenAlbum-Cloud Delete State-70', + 'zGenAlbum-Cloud Owner Whitelisted-71', + 'zGenAlbum-Cloud Local Public URL Enabled-72', + 'zGenAlbum-Cloud Public URL Enabled-73', + 'zGenAlbum-Public URL-74', + 'zGenAlbum-Key Asset Face Thumb Index-75', + 'zGenAlbum-Project Text Extension ID-76', + 'zGenAlbum-User Query Data-77', + 'zGenAlbum-Custom Query Parameters-78', + 'zGenAlbum-Project Data-79', + 'zGenAlbum-Search Index Rebuild State-80', + 'zGenAlbum-Duplicate Type-81', + 'zGenAlbum-Privacy State-82', + 'zCldShareAlbumInvRec-zUUID-83', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-84', + 'zCldShareAlbumInvRec-Invitation State Local-85', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-86', + ('zCldShareAlbumInvRec-Subscription Date-87', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-88', + 'zCldShareAlbumInvRec-Invitee Last Name-89', + 'zCldShareAlbumInvRec-Invitee Full Name-90', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-91', + 'zCldShareAlbumInvRec-Invitee Email Key-92', + 'zCldShareAlbumInvRec-Album GUID-93', + 'zCldShareAlbumInvRec-Cloud GUID-94', + 'zGenAlbum-Project Render UUID-95', + 'zAlbumList-Needs Reordering Number-96') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96])) - - counter += 1 - - description = 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 16-17.' \ - ' Parses limited asset data with full non-shared album data.' - report = ArtifactHtmlReport('Ph24-Assets in Shared Albums-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph24-Assets in Shared Albums-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-zPK-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', - 'zAsset-Syndication State-7', - 'zAsset-Bundle Scope-8', - 'zAddAssetAttr.Imported by Bundle Identifier-9', - 'zAddAssetAttr-Imported By Display Name-10', - 'zAsset-Visibility State-11', - 'zAsset-Saved Asset Type-12', - 'zAddAssetAttr-Share Type-13', - 'zAsset-Active Library Scope Participation State-14', - 'zAsset- SortToken -CameraRoll-15', - 'zAsset-Added Date-16', - 'zCldMast-Creation Date-17', - 'zAddAssetAttr-Time Zone Name-18', - 'zAddAssetAttr-EXIF-String-19', - 'zAsset-Modification Date-20', - 'zAsset-Last Shared Date-21', - 'zAsset-Trashed Date-22', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-23', - 'zAddAssetAttr-zPK-24', - 'zAsset-UUID = store.cloudphotodb-25', - 'zAddAssetAttr-Master Fingerprint-26', - 'zGenAlbum-Cloud Creation Date-27', - 'zGenAlbum-Creation Date-28', - 'zGenAlbum-Start Date-29', - 'zGenAlbum-End Date-30', - 'zGenAlbum-Cloud Subscription Date-31', - 'zGenAlbum- Title-User&System Applied-32', - 'zGenAlbum-UUID-33', - 'zGenAlbum-Cloud GUID-34', - 'zGenAlbum-Imported by Bundle Identifier-35', - 'zGenAlbum-Pending Items Count-36', - 'zGenAlbum-Pending Items Type-37', - 'zGenAlbum- Cached Photos Count-38', - 'zGenAlbum- Cached Videos Count-39', - 'zGenAlbum- Cached Count-40', - 'zGenAlbum-Has Unseen Content-41', - 'zGenAlbum-Unseen Asset Count-42', - 'zGenAlbum-zENT- Entity-43', - 'zGenAlbum-Album Kind-44', - 'zGenAlbum-Cloud_Local_State-45', - 'zGenAlbum-Sync Event Order Key-46', - 'zGenAlbum-is Owned-47', - 'zGenAlbum-Cloud Relationship State-48', - 'zGenAlbum-Cloud Relationship State Local-49', - 'zGenAlbum-Cloud Owner Mail Key-50', - 'zGenAlbum-Cloud Owner First Name-51', - 'zGenAlbum-Cloud Owner Last Name-52', - 'zGenAlbum-Cloud Owner Full Name-53', - 'zGenAlbum-Cloud Person ID-54', - 'zGenAlbum-Cloud Owner Hashed Person ID-55', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-56', - 'zGenAlbum-Cloud Multi-Contributors Enabled-57', - 'zGenAlbum-Cloud Album Sub Type-58', - 'zGenAlbum-Cloud Contribution Date-59', - 'zGenAlbum-Cloud Last Interesting Change Date-60', - 'zGenAlbum-Cloud Notification Enabled-61', - 'zGenAlbum-Pinned-62', - 'zGenAlbum-Custom Sort Key-63', - 'zGenAlbum-Custom Sort Ascending-64', - 'zGenAlbum-Is Prototype-65', - 'zGenAlbum-Project Document Type-66', - 'zGenAlbum-Custom Query Type-67', - 'zGenAlbum-Trashed State-68', - 'zGenAlbum-Trash Date-69', - 'zGenAlbum-Cloud Delete State-70', - 'zGenAlbum-Cloud Owner Whitelisted-71', - 'zGenAlbum-Cloud Local Public URL Enabled-72', - 'zGenAlbum-Cloud Public URL Enabled-73', - 'zGenAlbum-Public URL-74', - 'zGenAlbum-Key Asset Face Thumb Index-75', - 'zGenAlbum-Project Text Extension ID-76', - 'zGenAlbum-User Query Data-77', - 'zGenAlbum-Custom Query Parameters-78', - 'zGenAlbum-Project Data-79', - 'zGenAlbum-Search Index Rebuild State-80', - 'zGenAlbum-Duplicate Type-81', - 'zGenAlbum-Privacy State-82', - 'zCldShareAlbumInvRec-zUUID-83', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-84', - 'zCldShareAlbumInvRec-Invitation State Local-85', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-86', - 'zCldShareAlbumInvRec-Subscription Date-87', - 'zCldShareAlbumInvRec-Invitee First Name-88', - 'zCldShareAlbumInvRec-Invitee Last Name-89', - 'zCldShareAlbumInvRec-Invitee Full Name-90', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-91', - 'zCldShareAlbumInvRec-Invitee Email Key-92', - 'zCldShareAlbumInvRec-Album GUID-93', - 'zCldShareAlbumInvRec-Cloud GUID-94', - 'zGenAlbum-Project Render UUID-95', - 'zAlbumList-Needs Reordering Number-96') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph24-Assets in Shared Albums-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph24-Assets in Shared Albums-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - else: - logfunc('No Assets in Shared Albums found in PhotoData-Photos.sqlite') - - db.close() - return - - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', zAsset.Z_PK AS 'zAsset-zPK', @@ -2372,8 +2258,7 @@ def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wra zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date', DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', @@ -2585,169 +2470,544 @@ def get_ph24assetsinsharedalbumsphdapsql(files_found, report_folder, seeker, wra END AS 'zAlbumList-Needs Reordering Number' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN Z_31ASSETS z31Assets ON z31Assets.Z_3ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z31Assets.Z_31ALBUMS - LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = zGenAlbum.Z_PK - LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS + LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z29Assets.Z_29ALBUMS + LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM WHERE zGenAlbum.ZKIND = 1505 ORDER BY zAsset.ZDATECREATED - """) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', + 'zAsset-Syndication State-7', + 'zAsset-Bundle Scope-8', + 'zAddAssetAttr.Imported by Bundle Identifier-9', + 'zAddAssetAttr-Imported By Display Name-10', + 'zAsset-Visibility State-11', + 'zAsset-Saved Asset Type-12', + 'zAddAssetAttr-Share Type-13', + 'zAsset-Active Library Scope Participation State-14', + ('zAsset- SortToken -CameraRoll-15', 'datetime'), + ('zAsset-Added Date-16', 'datetime'), + ('zCldMast-Creation Date-17', 'datetime'), + 'zAddAssetAttr-Time Zone Name-18', + 'zAddAssetAttr-EXIF-String-19', + ('zAsset-Modification Date-20', 'datetime'), + ('zAsset-Last Shared Date-21', 'datetime'), + ('zAsset-Trashed Date-22', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-23', + 'zAddAssetAttr-zPK-24', + 'zAsset-UUID = store.cloudphotodb-25', + 'zAddAssetAttr-Master Fingerprint-26', + ('zGenAlbum-Cloud Creation Date-27', 'datetime'), + ('zGenAlbum-Creation Date-28', 'datetime'), + ('zGenAlbum-Start Date-29', 'datetime'), + ('zGenAlbum-End Date-30', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-31', 'datetime'), + 'zGenAlbum- Title-User&System Applied-32', + 'zGenAlbum-UUID-33', + 'zGenAlbum-Cloud GUID-34', + 'zGenAlbum-Imported by Bundle Identifier-35', + 'zGenAlbum-Pending Items Count-36', + 'zGenAlbum-Pending Items Type-37', + 'zGenAlbum- Cached Photos Count-38', + 'zGenAlbum- Cached Videos Count-39', + 'zGenAlbum- Cached Count-40', + 'zGenAlbum-Has Unseen Content-41', + 'zGenAlbum-Unseen Asset Count-42', + 'zGenAlbum-zENT- Entity-43', + 'zGenAlbum-Album Kind-44', + 'zGenAlbum-Cloud_Local_State-45', + 'zGenAlbum-Sync Event Order Key-46', + 'zGenAlbum-is Owned-47', + 'zGenAlbum-Cloud Relationship State-48', + 'zGenAlbum-Cloud Relationship State Local-49', + 'zGenAlbum-Cloud Owner Mail Key-50', + 'zGenAlbum-Cloud Owner First Name-51', + 'zGenAlbum-Cloud Owner Last Name-52', + 'zGenAlbum-Cloud Owner Full Name-53', + 'zGenAlbum-Cloud Person ID-54', + 'zGenAlbum-Cloud Owner Hashed Person ID-55', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-56', + 'zGenAlbum-Cloud Multi-Contributors Enabled-57', + 'zGenAlbum-Cloud Album Sub Type-58', + ('zGenAlbum-Cloud Contribution Date-59', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-60', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-61', + 'zGenAlbum-Pinned-62', + 'zGenAlbum-Custom Sort Key-63', + 'zGenAlbum-Custom Sort Ascending-64', + 'zGenAlbum-Is Prototype-65', + 'zGenAlbum-Project Document Type-66', + 'zGenAlbum-Custom Query Type-67', + 'zGenAlbum-Trashed State-68', + ('zGenAlbum-Trash Date-69', 'datetime'), + 'zGenAlbum-Cloud Delete State-70', + 'zGenAlbum-Cloud Owner Whitelisted-71', + 'zGenAlbum-Cloud Local Public URL Enabled-72', + 'zGenAlbum-Cloud Public URL Enabled-73', + 'zGenAlbum-Public URL-74', + 'zGenAlbum-Key Asset Face Thumb Index-75', + 'zGenAlbum-Project Text Extension ID-76', + 'zGenAlbum-User Query Data-77', + 'zGenAlbum-Custom Query Parameters-78', + 'zGenAlbum-Project Data-79', + 'zGenAlbum-Search Index Rebuild State-80', + 'zGenAlbum-Duplicate Type-81', + 'zGenAlbum-Privacy State-82', + 'zCldShareAlbumInvRec-zUUID-83', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-84', + 'zCldShareAlbumInvRec-Invitation State Local-85', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-86', + ('zCldShareAlbumInvRec-Subscription Date-87', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-88', + 'zCldShareAlbumInvRec-Invitee Last Name-89', + 'zCldShareAlbumInvRec-Invitee Full Name-90', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-91', + 'zCldShareAlbumInvRec-Invitee Email Key-92', + 'zCldShareAlbumInvRec-Album GUID-93', + 'zCldShareAlbumInvRec-Cloud GUID-94', + 'zGenAlbum-Project Render UUID-95', + 'zAlbumList-Needs Reordering Number-96') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path - all_rows = cursor.fetchall() - usageentries = len(all_rows) + elif version.parse(iosversion) >= version.parse("18"): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97])) - - counter += 1 - - description = 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 18.' \ - ' Parses limited asset data with full non-shared album data.' - report = ArtifactHtmlReport('Ph24-Assets in Shared Albums-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph24-Assets in Shared Albums-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-zPK-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', - 'zAsset-Syndication State-7', - 'zAsset-Bundle Scope-8', - 'zAddAssetAttr.Imported by Bundle Identifier-9', - 'zAddAssetAttr-Imported By Display Name-10', - 'zAsset-Visibility State-11', - 'zAsset-Saved Asset Type-12', - 'zAddAssetAttr-Share Type-13', - 'zAsset-Active Library Scope Participation State-14', - 'zAsset- SortToken -CameraRoll-15', - 'zAsset-Added Date-16', - 'zCldMast-Creation Date-17', - 'zAddAssetAttr-Time Zone Name-18', - 'zAddAssetAttr-EXIF-String-19', - 'zAsset-Modification Date-20', - 'zAsset-Last Shared Date-21', - 'zAsset-Trashed Date-22', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-23', - 'zAddAssetAttr-zPK-24', - 'zAsset-UUID = store.cloudphotodb-25', - 'zAddAssetAttr-Original Stable Hash-iOS18-26', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-27', - 'zGenAlbum-Cloud Creation Date-28', - 'zGenAlbum-Creation Date-29', - 'zGenAlbum-Start Date-30', - 'zGenAlbum-End Date-31', - 'zGenAlbum-Cloud Subscription Date-32', - 'zGenAlbum- Title-User&System Applied-33', - 'zGenAlbum-UUID-34', - 'zGenAlbum-Cloud GUID-35', - 'zGenAlbum-Imported by Bundle Identifier-36', - 'zGenAlbum-Pending Items Count-37', - 'zGenAlbum-Pending Items Type-38', - 'zGenAlbum- Cached Photos Count-39', - 'zGenAlbum- Cached Videos Count-40', - 'zGenAlbum- Cached Count-41', - 'zGenAlbum-Has Unseen Content-42', - 'zGenAlbum-Unseen Asset Count-43', - 'zGenAlbum-zENT- Entity-44', - 'zGenAlbum-Album Kind-45', - 'zGenAlbum-Cloud_Local_State-46', - 'zGenAlbum-Sync Event Order Key-47', - 'zGenAlbum-is Owned-48', - 'zGenAlbum-Cloud Relationship State-49', - 'zGenAlbum-Cloud Relationship State Local-50', - 'zGenAlbum-Cloud Owner Mail Key-51', - 'zGenAlbum-Cloud Owner First Name-52', - 'zGenAlbum-Cloud Owner Last Name-53', - 'zGenAlbum-Cloud Owner Full Name-54', - 'zGenAlbum-Cloud Person ID-55', - 'zGenAlbum-Cloud Owner Hashed Person ID-56', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-57', - 'zGenAlbum-Cloud Multi-Contributors Enabled-58', - 'zGenAlbum-Cloud Album Sub Type-59', - 'zGenAlbum-Cloud Contribution Date-60', - 'zGenAlbum-Cloud Last Interesting Change Date-61', - 'zGenAlbum-Cloud Notification Enabled-62', - 'zGenAlbum-Pinned-63', - 'zGenAlbum-Custom Sort Key-64', - 'zGenAlbum-Custom Sort Ascending-65', - 'zGenAlbum-Is Prototype-66', - 'zGenAlbum-Project Document Type-67', - 'zGenAlbum-Custom Query Type-68', - 'zGenAlbum-Trashed State-69', - 'zGenAlbum-Trash Date-70', - 'zGenAlbum-Cloud Delete State-71', - 'zGenAlbum-Cloud Owner Whitelisted-72', - 'zGenAlbum-Cloud Local Public URL Enabled-73', - 'zGenAlbum-Cloud Public URL Enabled-74', - 'zGenAlbum-Public URL-75', - 'zGenAlbum-Key Asset Face Thumb Index-76', - 'zGenAlbum-Project Text Extension ID-77', - 'zGenAlbum-User Query Data-78', - 'zGenAlbum-Custom Query Parameters-79', - 'zGenAlbum-Project Data-80', - 'zGenAlbum-Search Index Rebuild State-81', - 'zGenAlbum-Duplicate Type-82', - 'zGenAlbum-Privacy State-83', - 'zCldShareAlbumInvRec-zUUID-84', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-85', - 'zCldShareAlbumInvRec-Invitation State Local-86', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-87', - 'zCldShareAlbumInvRec-Subscription Date-88', - 'zCldShareAlbumInvRec-Invitee First Name-89', - 'zCldShareAlbumInvRec-Invitee Last Name-90', - 'zCldShareAlbumInvRec-Invitee Full Name-91', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-92', - 'zCldShareAlbumInvRec-Invitee Email Key-93', - 'zCldShareAlbumInvRec-Album GUID-94', - 'zCldShareAlbumInvRec-Cloud GUID-95', - 'zGenAlbum-Project Render UUID-96', - 'zAlbumList-Needs Reordering Number-97') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph24-Assets in Shared Albums-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph24-Assets in Shared Albums-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - else: - logfunc('No Assets in Shared Albums found in PhotoData-Photos.sqlite') - - db.close() - return - - -__artifacts_v2__ = { - 'Ph24-Asset in Shared Albums & Invites-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph24 Asset in Shared Albums with invites', - 'description': 'Parses Assets in Shared Albums found in PhotoData-Photos.sqlite and supports iOS 18.' - ' Parses limited asset data with full non-shared album data.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-13', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-E-Asset_In_Albums', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph24assetsinsharedalbumsphdapsql' - } -} + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + zAsset.Z_PK AS 'zAsset-zPK', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash', + DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', + DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date', + zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier', + zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count', + CASE zGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'zGenAlbum-Pending Items Type', + zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count', + zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count', + zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count', + CASE zGenAlbum.ZHASUNSEENCONTENT + WHEN 0 THEN 'No Unseen Content-StillTesting-0' + WHEN 1 THEN 'Unseen Content-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || '' + END AS 'zGenAlbum-Has Unseen Content', + zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count', + CASE zGenAlbum.Z_ENT + WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27' + WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28' + WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29' + WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30' + WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || '' + END AS 'zGenAlbum-zENT- Entity', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind', + CASE zGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'zGenAlbum-Cloud_Local_State', + zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key', + CASE zGenAlbum.ZISOWNED + WHEN 0 THEN 'zGenAlbum-Not Owned by Device Apple Acnt-0' + WHEN 1 THEN 'zGenAlbum-Owned by Device Apple Acnt-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISOWNED || '' + END AS 'zGenAlbum-is Owned', + CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATE + WHEN 0 THEN 'zGenAlbum-Cloud Album Owned by Device Apple Acnt-0' + WHEN 2 THEN 'zGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATE || '' + END AS 'zGenAlbum-Cloud Relationship State', + CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL + WHEN 0 THEN 'zGenAlbum-Shared Album Accessible Local Device-0' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || '' + END AS 'zGenAlbum-Cloud Relationship State Local', + zGenAlbum.ZCLOUDOWNEREMAILKEY AS 'zGenAlbum-Cloud Owner Mail Key', + zGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'zGenAlbum-Cloud Owner Frist Name', + zGenAlbum.ZCLOUDOWNERLASTNAME AS 'zGenAlbum-Cloud Owner Last Name', + zGenAlbum.ZCLOUDOWNERFULLNAME AS 'zGenAlbum-Cloud Owner Full Name', + zGenAlbum.ZCLOUDPERSONID AS 'zGenAlbum-Cloud Person ID', + zGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'zGenAlbum-Cloud Owner Hashed Person ID', + CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL + WHEN 0 THEN 'zGenAlbum-Local Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'zGenAlbum-Local Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || '' + END AS 'zGenAlbum-Local Cloud Multi-Contributors Enabled', + CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED + WHEN 0 THEN 'zGenAlbum-Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'zGenAlbum-Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || '' + END AS 'zGenAlbum-Cloud Multi-Contributors Enabled', + CASE zGenAlbum.ZCLOUDALBUMSUBTYPE + WHEN 0 THEN 'zGenAlbum Multi-Contributor-0' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDALBUMSUBTYPE || '' + END AS 'zGenAlbum-Cloud Album Sub Type', + DateTime(zGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS + 'zGenAlbum-Cloud Contribution Date', + DateTime(zGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS + 'zGenAlbum-Cloud Last Interesting Change Date', + CASE zGenAlbum.ZCLOUDNOTIFICATIONSENABLED + WHEN 0 THEN 'zGenAlbum-Cloud Notifications Disabled-0' + WHEN 1 THEN 'zGenAlbum-Cloud Notifications Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDNOTIFICATIONSENABLED || '' + END AS 'zGenAlbum-Cloud Notification Enabled', + CASE zGenAlbum.ZISPINNED + WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'zGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || '' + END AS 'zGenAlbum-Pinned', + CASE zGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'zGenAlbum-Custom Sort Key', + CASE zGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'zGenAlbum-Custom Sort Ascending', + CASE zGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'zGenAlbum-Not Prototype-0' + WHEN 1 THEN 'zGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || '' + END AS 'zGenAlbum-Is Prototype', + CASE zGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'zGenAlbum-Project Document Type', + CASE zGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'zGenAlbum-Custom Query Type', + CASE zGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'zGenAlbum Not In Trash-0' + WHEN 1 THEN 'zGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || '' + END AS 'zGenAlbum-Trashed State', + DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date', + CASE zGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'zGenAlbum-Cloud Delete State', + CASE zGenAlbum.ZCLOUDOWNERISWHITELISTED + WHEN 0 THEN 'zGenAlbum Cloud Owner Not Whitelisted-0' + WHEN 1 THEN 'zGenAlbum Cloud Owner Whitelisted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDOWNERISWHITELISTED || '' + END AS 'zGenAlbum-Cloud Owner Whitelisted', + CASE zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL + WHEN 0 THEN 'zGenAlbum Cloud Local Public URL Disabled-0' + WHEN 1 THEN 'zGenAlbum Cloud Local has Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || '' + END AS 'zGenAlbum-Cloud Local Public URL Enabled', + CASE zGenAlbum.ZCLOUDPUBLICURLENABLED + WHEN 0 THEN 'zGenAlbum Cloud Public URL Disabled-0' + WHEN 1 THEN 'zGenAlbum Cloud Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLED || '' + END AS 'zGenAlbum-Cloud Public URL Enabled', + zGenAlbum.ZPUBLICURL AS 'zGenAlbum-Public URL', + zGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'zGenAlbum-Key Asset Face Thumb Index', + zGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'zGenAlbum-Project Text Extension ID', + zGenAlbum.ZUSERQUERYDATA AS 'zGenAlbum-User Query Data', + zGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'zGenAlbum-Custom Query Parameters', + zGenAlbum.ZPROJECTDATA AS 'zGenAlbum-Project Data', + CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zGenAlbum-Search Index Rebuild State', + CASE zGenAlbum.ZDUPLICATETYPE + WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0' + WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1' + WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || '' + END AS 'zGenAlbum-Duplicate Type', + CASE zGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || '' + END AS 'zGenAlbum-Privacy State', + zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID', + CASE zCldShareAlbumInvRec.ZISMINE + WHEN 0 THEN 'Not My Invitation-0' + WHEN 1 THEN 'My Invitation-1' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZISMINE || '' + END AS 'zCldShareAlbumInvRec-Is My Invitation to Shared Album', + CASE zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL || '' + END AS 'zCldShareAlbumInvRec-Invitation State Local', + CASE zCldShareAlbumInvRec.ZINVITATIONSTATE + WHEN 1 THEN 'Shared Album Invitation Pending-1' + WHEN 2 THEN 'Shared Album Invitation Accepted-2' + WHEN 3 THEN 'Shared Album Invitation Declined-3' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATE || '' + END AS 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status', + DateTime(zCldShareAlbumInvRec.ZINVITEESUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS + 'zCldShareAlbumInvRec-Subscription Date', + zCldShareAlbumInvRec.ZINVITEEFIRSTNAME AS 'zCldShareAlbumInvRec-Invitee First Name', + zCldShareAlbumInvRec.ZINVITEELASTNAME AS 'zCldShareAlbumInvRec-Invitee Last Name', + zCldShareAlbumInvRec.ZINVITEEFULLNAME AS 'zCldShareAlbumInvRec-Invitee Full Name', + zCldShareAlbumInvRec.ZINVITEEHASHEDPERSONID AS 'zCldShareAlbumInvRec-Invitee Hashed Person ID', + zCldShareAlbumInvRec.ZINVITEEEMAILKEY AS 'zCldShareAlbumInvRec-Invitee Email Key', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID', + CASE zAlbumList.ZNEEDSREORDERINGNUMBER + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAlbumList.ZNEEDSREORDERINGNUMBER || '' + END AS 'zAlbumList-Needs Reordering Number' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z30Assets.Z_30ALBUMS + LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON + zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM + WHERE zGenAlbum.ZKIND = 1505 + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-zPK-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-6', + 'zAsset-Syndication State-7', + 'zAsset-Bundle Scope-8', + 'zAddAssetAttr.Imported by Bundle Identifier-9', + 'zAddAssetAttr-Imported By Display Name-10', + 'zAsset-Visibility State-11', + 'zAsset-Saved Asset Type-12', + 'zAddAssetAttr-Share Type-13', + 'zAsset-Active Library Scope Participation State-14', + ('zAsset- SortToken -CameraRoll-15', 'datetime'), + ('zAsset-Added Date-16', 'datetime'), + ('zCldMast-Creation Date-17', 'datetime'), + 'zAddAssetAttr-Time Zone Name-18', + 'zAddAssetAttr-EXIF-String-19', + ('zAsset-Modification Date-20', 'datetime'), + ('zAsset-Last Shared Date-21', 'datetime'), + ('zAsset-Trashed Date-22', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-23', + 'zAddAssetAttr-zPK-24', + 'zAsset-UUID = store.cloudphotodb-25', + 'zAddAssetAttr-Original Stable Hash-26', + 'zAddAssetAttr.Adjusted Stable Hash-27', + ('zGenAlbum-Cloud Creation Date-28', 'datetime'), + ('zGenAlbum-Creation Date-29', 'datetime'), + ('zGenAlbum-Start Date-30', 'datetime'), + ('zGenAlbum-End Date-31', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-32', 'datetime'), + 'zGenAlbum- Title-User&System Applied-33', + 'zGenAlbum-UUID-34', + 'zGenAlbum-Cloud GUID-35', + 'zGenAlbum-Imported by Bundle Identifier-36', + 'zGenAlbum-Pending Items Count-37', + 'zGenAlbum-Pending Items Type-38', + 'zGenAlbum- Cached Photos Count-39', + 'zGenAlbum- Cached Videos Count-40', + 'zGenAlbum- Cached Count-41', + 'zGenAlbum-Has Unseen Content-42', + 'zGenAlbum-Unseen Asset Count-43', + 'zGenAlbum-zENT- Entity-44', + 'zGenAlbum-Album Kind-45', + 'zGenAlbum-Cloud_Local_State-46', + 'zGenAlbum-Sync Event Order Key-47', + 'zGenAlbum-is Owned-48', + 'zGenAlbum-Cloud Relationship State-49', + 'zGenAlbum-Cloud Relationship State Local-50', + 'zGenAlbum-Cloud Owner Mail Key-51', + 'zGenAlbum-Cloud Owner First Name-52', + 'zGenAlbum-Cloud Owner Last Name-53', + 'zGenAlbum-Cloud Owner Full Name-54', + 'zGenAlbum-Cloud Person ID-55', + 'zGenAlbum-Cloud Owner Hashed Person ID-56', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-57', + 'zGenAlbum-Cloud Multi-Contributors Enabled-58', + 'zGenAlbum-Cloud Album Sub Type-59', + ('zGenAlbum-Cloud Contribution Date-60', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-61', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-62', + 'zGenAlbum-Pinned-63', + 'zGenAlbum-Custom Sort Key-64', + 'zGenAlbum-Custom Sort Ascending-65', + 'zGenAlbum-Is Prototype-66', + 'zGenAlbum-Project Document Type-67', + 'zGenAlbum-Custom Query Type-68', + 'zGenAlbum-Trashed State-69', + ('zGenAlbum-Trash Date-70', 'datetime'), + 'zGenAlbum-Cloud Delete State-71', + 'zGenAlbum-Cloud Owner Whitelisted-72', + 'zGenAlbum-Cloud Local Public URL Enabled-73', + 'zGenAlbum-Cloud Public URL Enabled-74', + 'zGenAlbum-Public URL-75', + 'zGenAlbum-Key Asset Face Thumb Index-76', + 'zGenAlbum-Project Text Extension ID-77', + 'zGenAlbum-User Query Data-78', + 'zGenAlbum-Custom Query Parameters-79', + 'zGenAlbum-Project Data-80', + 'zGenAlbum-Search Index Rebuild State-81', + 'zGenAlbum-Duplicate Type-82', + 'zGenAlbum-Privacy State-83', + 'zCldShareAlbumInvRec-zUUID-84', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-85', + 'zCldShareAlbumInvRec-Invitation State Local-86', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-87', + ('zCldShareAlbumInvRec-Subscription Date-88', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-89', + 'zCldShareAlbumInvRec-Invitee Last Name-90', + 'zCldShareAlbumInvRec-Invitee Full Name-91', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-92', + 'zCldShareAlbumInvRec-Invitee Email Key-93', + 'zCldShareAlbumInvRec-Album GUID-94', + 'zCldShareAlbumInvRec-Cloud GUID-95', + 'zGenAlbum-Project Render UUID-96', + 'zAlbumList-Needs Reordering Number-97') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph25SWYConvAlbumsNAD.py b/scripts/artifacts/Ph25SWYConvAlbumsNAD.py index 760d7098..c03125bd 100644 --- a/scripts/artifacts/Ph25SWYConvAlbumsNAD.py +++ b/scripts/artifacts/Ph25SWYConvAlbumsNAD.py @@ -1,43 +1,63 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses Shared with You Conversation Album records found in the PhotoData-Photos.sqlite ZGENERICALBUM Table -# and supports iOS 15-18. Parses Conversation Album records only no asset data being parsed. -# This parser is based on research and SQLite Queries written by Scott Koenig -# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools -# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results. -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph25_1SWYConversationRecordswithNADPhDaPsql': { + 'name': 'Ph25.1-SWY Conversation Records NAD-PhDaPsql', + 'description': 'Parses Shared with You Conversation Album records found in the PhotoData-Photos.sqlite' + ' ZGENERICALBUM Table and supports iOS 15-18. Parses Share with You Conversation Album' + ' records only, no asset data being parsed.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + }, + 'Ph25_2SWYConversationRecordswithNADSyndPL': { + 'name': 'Ph25.2-SWY Conversation Records NAD-SyndPL', + 'description': 'Parses SWY Conversation Album Records found in the' + ' Syndication.photoslibrary-database-Photos.sqlite ZGENERICALBUM Table and supports iOS 15-18.' + ' Parses Share with You Conversation Album records only, no asset data being parsed.', + 'author': 'Scott Koenig https://theforensicscooter.com/', + 'version': '4.0', + 'date': '2024-12-31', + 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', + 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import glob import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, kmlgen, timeline, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc +@artifact_processor +def Ph25_1SWYConversationRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) -def get_ph25swyconvalbumnadphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("14.8.1"): - logfunc("Unsupported version for PhotoData-Photos.sqlite Shared with You Conversation album records" - " with no asset data from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date', @@ -121,66 +141,44 @@ def get_ph25swyconvalbumnadphdapsql(files_found, report_folder, seeker, wrap_tex = zCldShareAlbumInvRec.ZALBUM WHERE SWYConverszGenAlbum.ZKIND = 1509 ORDER BY SWYConverszGenAlbum.ZCREATIONDATE - """) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18])) + + data_headers = (('SWYConverszGenAlbum-Creation Date', 'datetime'), + ('SWYConverszGenAlbum-Start Date', 'datetime'), + ('SWYConverszGenAlbum-End Date', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK', + 'SWYConverszGenAlbum- Import Session ID-SWY', + 'SWYzGenAlbum-Imported by Bundle Identifier', + 'SWYConverszGenAlbum-Album Kind', + 'SWYConverszGenAlbum-Cloud_Local_State', + 'SWYConverszGenAlbum- Syndicate', + 'SWYConverszGenAlbum-Sync Event Order Key', + 'SWYConverszGenAlbum-Pinned', + 'SWYConverszGenAlbum-Custom Sort Key', + 'SWYConverszGenAlbum-Custom Sort Ascending', + 'SWYConverszGenAlbum-Is Prototype', + 'SWYConverszGenAlbum-Project Document Type', + 'SWYConverszGenAlbum-Custom Query Type', + 'SWYConverszGenAlbum-Trashed State', + ('SWYConverszGenAlbum-Trash Date', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State') + data_list = get_sqlite_db_records(source_path, query) - all_rows = cursor.fetchall() - usageentries = len(all_rows) + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18])) - - counter += 1 - - description = 'Parses Shared with You Conversation Album records found in the PhotoData-Photos.sqlite' \ - ' ZGENERICALBUM Table and supports iOS 15. Parses Share with You Conversation Album' \ - ' records only, no asset data being parsed.' - report = ArtifactHtmlReport('Ph25.1-SWY Conversation Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph25.1-SWY Conversation Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('SWYConverszGenAlbum-Creation Date', - 'SWYConverszGenAlbum-Start Date', - 'SWYConverszGenAlbum-End Date', - 'zAsset- Conversation= zGenAlbum_zPK', - 'SWYConverszGenAlbum- Import Session ID-SWY', - 'SWYzGenAlbum-Imported by Bundle Identifier', - 'SWYConverszGenAlbum-Album Kind', - 'SWYConverszGenAlbum-Cloud_Local_State', - 'SWYConverszGenAlbum- Syndicate', - 'SWYConverszGenAlbum-Sync Event Order Key', - 'SWYConverszGenAlbum-Pinned', - 'SWYConverszGenAlbum-Custom Sort Key', - 'SWYConverszGenAlbum-Custom Sort Ascending', - 'SWYConverszGenAlbum-Is Prototype', - 'SWYConverszGenAlbum-Project Document Type', - 'SWYConverszGenAlbum-Custom Query Type', - 'SWYConverszGenAlbum-Trashed State', - 'SWYConverszGenAlbum-Trash Date', - 'SWYConverszGenAlbum-Cloud Delete State') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph25.1-SWY Conversation Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph25.1-SWY Conversation Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Shared with You Conversation Album Records' - ' with No Asset Data') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" + + query = ''' SELECT DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date', @@ -270,68 +268,175 @@ def get_ph25swyconvalbumnadphdapsql(files_found, report_folder, seeker, wrap_tex = zCldShareAlbumInvRec.ZALBUM WHERE SWYConverszGenAlbum.ZKIND = 1509 ORDER BY SWYConverszGenAlbum.ZCREATIONDATE - """) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19])) + + data_headers = (('SWYConverszGenAlbum-Creation Date-0', 'datetime'), + ('SWYConverszGenAlbum-Start Date-1', 'datetime'), + ('SWYConverszGenAlbum-End Date-2', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-3', + 'SWYConverszGenAlbum- Import Session ID-SWY-4', + 'SWYzGenAlbum-Imported by Bundle Identifier-5', + 'SWYConverszGenAlbum-Album Kind-6', + 'SWYConverszGenAlbum-Cloud_Local_State-7', + 'SWYConverszGenAlbum- Syndicate-8', + 'SWYConverszGenAlbum-Sync Event Order Key-9', + 'SWYConverszGenAlbum-Pinned-10', + 'SWYConverszGenAlbum-Custom Sort Key-11', + 'SWYConverszGenAlbum-Custom Sort Ascending-12', + 'SWYConverszGenAlbum-Is Prototype-13', + 'SWYConverszGenAlbum-Project Document Type-14', + 'SWYConverszGenAlbum-Custom Query Type-15', + 'SWYConverszGenAlbum-Trashed State-16', + ('SWYConverszGenAlbum-Trash Date-17', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-18', + 'SWYConverszGenAlbum-Privacy State-19') + data_list = get_sqlite_db_records(source_path, query) - all_rows = cursor.fetchall() - usageentries = len(all_rows) + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19])) - - counter += 1 - - description = 'Parses Shared with You Conversation Album records found in the PhotoData-Photos.sqlite' \ - ' ZGENERICALBUM Table and supports iOS 16-17. Parses Share with You Conversation Album' \ - ' records only, no asset data being parsed.' - report = ArtifactHtmlReport('Ph25.1-SWY Conversation Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph25.1-SWY Conversation Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('SWYConverszGenAlbum-Creation Date-0', - 'SWYConverszGenAlbum-Start Date-1', - 'SWYConverszGenAlbum-End Date-2', - 'zAsset- Conversation= zGenAlbum_zPK-3', - 'SWYConverszGenAlbum- Import Session ID-SWY-4', - 'SWYzGenAlbum-Imported by Bundle Identifier-5', - 'SWYConverszGenAlbum-Album Kind-6', - 'SWYConverszGenAlbum-Cloud_Local_State-7', - 'SWYConverszGenAlbum- Syndicate-8', - 'SWYConverszGenAlbum-Sync Event Order Key-9', - 'SWYConverszGenAlbum-Pinned-10', - 'SWYConverszGenAlbum-Custom Sort Key-11', - 'SWYConverszGenAlbum-Custom Sort Ascending-12', - 'SWYConverszGenAlbum-Is Prototype-13', - 'SWYConverszGenAlbum-Project Document Type-14', - 'SWYConverszGenAlbum-Custom Query Type-15', - 'SWYConverszGenAlbum-Trashed State-16', - 'SWYConverszGenAlbum-Trash Date-17', - 'SWYConverszGenAlbum-Cloud Delete State-18', - 'SWYConverszGenAlbum-Privacy State-19') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph25.1-SWY Conversation Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph25.1-SWY Conversation Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Shared with You Conversation Album Records' - ' with No Asset Data') - - db.close() - return + + query = ''' + SELECT + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate', + SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key', + CASE SWYConverszGenAlbum.ZISPINNED + WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || '' + END AS 'SWYConverszGenAlbum-Pinned', + CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'SWYConverszGenAlbum-Custom Sort Key', + CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'SWYConverszGenAlbum-Custom Sort Ascending', + CASE SWYConverszGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || '' + END AS 'SWYConverszGenAlbum-Is Prototype', + CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'SWYConverszGenAlbum-Project Document Type', + CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'SWYConverszGenAlbum-Custom Query Type', + CASE SWYConverszGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0' + WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || '' + END AS 'SWYConverszGenAlbum-Trashed State', + DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date', + CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Delete State', + CASE SWYConverszGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || '' + END AS 'SWYConverszGenAlbum-Privacy State' + FROM ZGENERICALBUM SWYConverszGenAlbum + LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = SWYConverszGenAlbum.ZPARENTFOLDER + LEFT JOIN ZASSET zAsset ON zAsset.ZCONVERSATION = SWYConverszGenAlbum.Z_PK + LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN Z_29ASSETS Albumsz29Assets ON Albumsz29Assets.Z_29ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON SWYConverszGenAlbum.Z_PK + = zCldShareAlbumInvRec.ZALBUM + WHERE SWYConverszGenAlbum.ZKIND = 1509 + ORDER BY SWYConverszGenAlbum.ZCREATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19])) + + data_headers = (('SWYConverszGenAlbum-Creation Date-0', 'datetime'), + ('SWYConverszGenAlbum-Start Date-1', 'datetime'), + ('SWYConverszGenAlbum-End Date-2', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-3', + 'SWYConverszGenAlbum- Import Session ID-SWY-4', + 'SWYzGenAlbum-Imported by Bundle Identifier-5', + 'SWYConverszGenAlbum-Album Kind-6', + 'SWYConverszGenAlbum-Cloud_Local_State-7', + 'SWYConverszGenAlbum- Syndicate-8', + 'SWYConverszGenAlbum-Sync Event Order Key-9', + 'SWYConverszGenAlbum-Pinned-10', + 'SWYConverszGenAlbum-Custom Sort Key-11', + 'SWYConverszGenAlbum-Custom Sort Ascending-12', + 'SWYConverszGenAlbum-Is Prototype-13', + 'SWYConverszGenAlbum-Project Document Type-14', + 'SWYConverszGenAlbum-Custom Query Type-15', + 'SWYConverszGenAlbum-Trashed State-16', + ('SWYConverszGenAlbum-Trash Date-17', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-18', + 'SWYConverszGenAlbum-Privacy State-19') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date', @@ -413,90 +518,68 @@ def get_ph25swyconvalbumnadphdapsql(files_found, report_folder, seeker, wrap_tex FROM ZGENERICALBUM SWYConverszGenAlbum LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = SWYConverszGenAlbum.ZPARENTFOLDER LEFT JOIN ZASSET zAsset ON zAsset.ZCONVERSATION = SWYConverszGenAlbum.Z_PK - LEFT JOIN Z_31ASSETS z31Assets ON z31Assets.Z_3ASSETS = zAsset.Z_PK - LEFT JOIN Z_31ASSETS Albumsz31Assets ON Albumsz31Assets.Z_31ALBUMS = SWYConverszGenAlbum.Z_PK - LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = SWYConverszGenAlbum.Z_PK - LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS + LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN Z_30ASSETS Albumsz30Assets ON Albumsz30Assets.Z_30ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON SWYConverszGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM WHERE SWYConverszGenAlbum.ZKIND = 1509 ORDER BY SWYConverszGenAlbum.ZCREATIONDATE - """) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19])) - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19])) - - counter += 1 - - description = 'Parses Shared with You Conversation Album records found in the PhotoData-Photos.sqlite' \ - ' ZGENERICALBUM Table and supports iOS 18. Parses Share with You Conversation Album' \ - ' records only, no asset data being parsed.' - report = ArtifactHtmlReport('Ph25.1-SWY Conversation Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph25.1-SWY Conversation Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('SWYConverszGenAlbum-Creation Date-0', - 'SWYConverszGenAlbum-Start Date-1', - 'SWYConverszGenAlbum-End Date-2', - 'zAsset- Conversation= zGenAlbum_zPK-3', - 'SWYConverszGenAlbum- Import Session ID-SWY-4', - 'SWYzGenAlbum-Imported by Bundle Identifier-5', - 'SWYConverszGenAlbum-Album Kind-6', - 'SWYConverszGenAlbum-Cloud_Local_State-7', - 'SWYConverszGenAlbum- Syndicate-8', - 'SWYConverszGenAlbum-Sync Event Order Key-9', - 'SWYConverszGenAlbum-Pinned-10', - 'SWYConverszGenAlbum-Custom Sort Key-11', - 'SWYConverszGenAlbum-Custom Sort Ascending-12', - 'SWYConverszGenAlbum-Is Prototype-13', - 'SWYConverszGenAlbum-Project Document Type-14', - 'SWYConverszGenAlbum-Custom Query Type-15', - 'SWYConverszGenAlbum-Trashed State-16', - 'SWYConverszGenAlbum-Trash Date-17', - 'SWYConverszGenAlbum-Cloud Delete State-18', - 'SWYConverszGenAlbum-Privacy State-19') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph25.1-SWY Conversation Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph25.1-SWY Conversation Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Shared with You Conversation Album Records' - ' with No Asset Data') - - db.close() - return - - -def get_ph25swyconvalbumnadsyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + data_headers = (('SWYConverszGenAlbum-Creation Date-0', 'datetime'), + ('SWYConverszGenAlbum-Start Date-1', 'datetime'), + ('SWYConverszGenAlbum-End Date-2', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-3', + 'SWYConverszGenAlbum- Import Session ID-SWY-4', + 'SWYzGenAlbum-Imported by Bundle Identifier-5', + 'SWYConverszGenAlbum-Album Kind-6', + 'SWYConverszGenAlbum-Cloud_Local_State-7', + 'SWYConverszGenAlbum- Syndicate-8', + 'SWYConverszGenAlbum-Sync Event Order Key-9', + 'SWYConverszGenAlbum-Pinned-10', + 'SWYConverszGenAlbum-Custom Sort Key-11', + 'SWYConverszGenAlbum-Custom Sort Ascending-12', + 'SWYConverszGenAlbum-Is Prototype-13', + 'SWYConverszGenAlbum-Project Document Type-14', + 'SWYConverszGenAlbum-Custom Query Type-15', + 'SWYConverszGenAlbum-Trashed State-16', + ('SWYConverszGenAlbum-Trash Date-17', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-18', + 'SWYConverszGenAlbum-Privacy State-19') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + +@artifact_processor +def Ph25_2SWYConversationRecordswithNADSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) + + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("14.8.1"): - logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite Shared with You Conversation" - " album records with no asset data on iOS " + iosversion) + logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date', @@ -580,67 +663,44 @@ def get_ph25swyconvalbumnadsyndpl(files_found, report_folder, seeker, wrap_text, = zCldShareAlbumInvRec.ZALBUM WHERE SWYConverszGenAlbum.ZKIND = 1509 ORDER BY SWYConverszGenAlbum.ZCREATIONDATE - """) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18])) + + data_headers = (('SWYConverszGenAlbum-Creation Date', 'datetime'), + ('SWYConverszGenAlbum-Start Date', 'datetime'), + ('SWYConverszGenAlbum-End Date', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK', + 'SWYConverszGenAlbum- Import Session ID-SWY', + 'SWYzGenAlbum-Imported by Bundle Identifier', + 'SWYConverszGenAlbum-Album Kind', + 'SWYConverszGenAlbum-Cloud_Local_State', + 'SWYConverszGenAlbum- Syndicate', + 'SWYConverszGenAlbum-Sync Event Order Key', + 'SWYConverszGenAlbum-Pinned', + 'SWYConverszGenAlbum-Custom Sort Key', + 'SWYConverszGenAlbum-Custom Sort Ascending', + 'SWYConverszGenAlbum-Is Prototype', + 'SWYConverszGenAlbum-Project Document Type', + 'SWYConverszGenAlbum-Custom Query Type', + 'SWYConverszGenAlbum-Trashed State', + ('SWYConverszGenAlbum-Trash Date', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path - all_rows = cursor.fetchall() - usageentries = len(all_rows) + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18])) - - counter += 1 - - description = 'Parses Shared with You Conversation Album records found in the' \ - ' Syndication.photoslibrary-database-Photos.sqlite ZGENERICALBUM Table and' \ - ' supports iOS 15. Parses Share with You Conversation Album' \ - ' records only, no asset data being parsed.' - report = ArtifactHtmlReport('Ph25.2-SWY Conversation Records NAD-SyndPL') - report.start_artifact_report(report_folder, 'Ph25.2-SWY Conversation Records NAD-SyndPL', description) - report.add_script() - data_headers = ('SWYConverszGenAlbum-Creation Date', - 'SWYConverszGenAlbum-Start Date', - 'SWYConverszGenAlbum-End Date', - 'zAsset- Conversation= zGenAlbum_zPK', - 'SWYConverszGenAlbum- Import Session ID-SWY', - 'SWYzGenAlbum-Imported by Bundle Identifier', - 'SWYConverszGenAlbum-Album Kind', - 'SWYConverszGenAlbum-Cloud_Local_State', - 'SWYConverszGenAlbum- Syndicate', - 'SWYConverszGenAlbum-Sync Event Order Key', - 'SWYConverszGenAlbum-Pinned', - 'SWYConverszGenAlbum-Custom Sort Key', - 'SWYConverszGenAlbum-Custom Sort Ascending', - 'SWYConverszGenAlbum-Is Prototype', - 'SWYConverszGenAlbum-Project Document Type', - 'SWYConverszGenAlbum-Custom Query Type', - 'SWYConverszGenAlbum-Trashed State', - 'SWYConverszGenAlbum-Trash Date', - 'SWYConverszGenAlbum-Cloud Delete State') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph25.2-SWY Conversation Records NAD-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph25.2-SWY Conversation Records NAD-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' Shared with You Conversation Album Records with No Asset Data') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" + + query = ''' SELECT DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date', @@ -730,69 +790,175 @@ def get_ph25swyconvalbumnadsyndpl(files_found, report_folder, seeker, wrap_text, = zCldShareAlbumInvRec.ZALBUM WHERE SWYConverszGenAlbum.ZKIND = 1509 ORDER BY SWYConverszGenAlbum.ZCREATIONDATE - """) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19])) - all_rows = cursor.fetchall() - usageentries = len(all_rows) + data_headers = (('SWYConverszGenAlbum-Creation Date-0', 'datetime'), + ('SWYConverszGenAlbum-Start Date-1', 'datetime'), + ('SWYConverszGenAlbum-End Date-2', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-3', + 'SWYConverszGenAlbum- Import Session ID-SWY-4', + 'SWYzGenAlbum-Imported by Bundle Identifier-5', + 'SWYConverszGenAlbum-Album Kind-6', + 'SWYConverszGenAlbum-Cloud_Local_State-7', + 'SWYConverszGenAlbum- Syndicate-8', + 'SWYConverszGenAlbum-Sync Event Order Key-9', + 'SWYConverszGenAlbum-Pinned-10', + 'SWYConverszGenAlbum-Custom Sort Key-11', + 'SWYConverszGenAlbum-Custom Sort Ascending-12', + 'SWYConverszGenAlbum-Is Prototype-13', + 'SWYConverszGenAlbum-Project Document Type-14', + 'SWYConverszGenAlbum-Custom Query Type-15', + 'SWYConverszGenAlbum-Trashed State-16', + ('SWYConverszGenAlbum-Trash Date-17', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-18', + 'SWYConverszGenAlbum-Privacy State-19') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19])) - - counter += 1 - - description = 'Parses Shared with You Conversation Album records found in the' \ - ' Syndication.photoslibrary-database-Photos.sqlite ZGENERICALBUM Table and' \ - ' supports iOS 16-17. Parses Share with You Conversation Album' \ - ' records only, no asset data being parsed.' - report = ArtifactHtmlReport('Ph25.2-SWY Conversation Records NAD-SyndPL') - report.start_artifact_report(report_folder, 'Ph25.2-SWY Conversation Records NAD-SyndPL', description) - report.add_script() - data_headers = ('SWYConverszGenAlbum-Creation Date-0', - 'SWYConverszGenAlbum-Start Date-1', - 'SWYConverszGenAlbum-End Date-2', - 'zAsset- Conversation= zGenAlbum_zPK-3', - 'SWYConverszGenAlbum- Import Session ID-SWY-4', - 'SWYzGenAlbum-Imported by Bundle Identifier-5', - 'SWYConverszGenAlbum-Album Kind-6', - 'SWYConverszGenAlbum-Cloud_Local_State-7', - 'SWYConverszGenAlbum- Syndicate-8', - 'SWYConverszGenAlbum-Sync Event Order Key-9', - 'SWYConverszGenAlbum-Pinned-10', - 'SWYConverszGenAlbum-Custom Sort Key-11', - 'SWYConverszGenAlbum-Custom Sort Ascending-12', - 'SWYConverszGenAlbum-Is Prototype-13', - 'SWYConverszGenAlbum-Project Document Type-14', - 'SWYConverszGenAlbum-Custom Query Type-15', - 'SWYConverszGenAlbum-Trashed State-16', - 'SWYConverszGenAlbum-Trash Date-17', - 'SWYConverszGenAlbum-Cloud Delete State-18', - 'SWYConverszGenAlbum-Privacy State-19') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph25.2-SWY Conversation Records NAD-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph25.2-SWY Conversation Records NAD-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' Shared with You Conversation Album Records with No Asset Data') - - db.close() - return + + query = ''' + SELECT + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate', + SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key', + CASE SWYConverszGenAlbum.ZISPINNED + WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || '' + END AS 'SWYConverszGenAlbum-Pinned', + CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'SWYConverszGenAlbum-Custom Sort Key', + CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'SWYConverszGenAlbum-Custom Sort Ascending', + CASE SWYConverszGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || '' + END AS 'SWYConverszGenAlbum-Is Prototype', + CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'SWYConverszGenAlbum-Project Document Type', + CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'SWYConverszGenAlbum-Custom Query Type', + CASE SWYConverszGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0' + WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || '' + END AS 'SWYConverszGenAlbum-Trashed State', + DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date', + CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Delete State', + CASE SWYConverszGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || '' + END AS 'SWYConverszGenAlbum-Privacy State' + FROM ZGENERICALBUM SWYConverszGenAlbum + LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = SWYConverszGenAlbum.ZPARENTFOLDER + LEFT JOIN ZASSET zAsset ON zAsset.ZCONVERSATION = SWYConverszGenAlbum.Z_PK + LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN Z_29ASSETS Albumsz29Assets ON Albumsz29Assets.Z_29ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON SWYConverszGenAlbum.Z_PK + = zCldShareAlbumInvRec.ZALBUM + WHERE SWYConverszGenAlbum.ZKIND = 1509 + ORDER BY SWYConverszGenAlbum.ZCREATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19])) + + data_headers = (('SWYConverszGenAlbum-Creation Date-0', 'datetime'), + ('SWYConverszGenAlbum-Start Date-1', 'datetime'), + ('SWYConverszGenAlbum-End Date-2', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-3', + 'SWYConverszGenAlbum- Import Session ID-SWY-4', + 'SWYzGenAlbum-Imported by Bundle Identifier-5', + 'SWYConverszGenAlbum-Album Kind-6', + 'SWYConverszGenAlbum-Cloud_Local_State-7', + 'SWYConverszGenAlbum- Syndicate-8', + 'SWYConverszGenAlbum-Sync Event Order Key-9', + 'SWYConverszGenAlbum-Pinned-10', + 'SWYConverszGenAlbum-Custom Sort Key-11', + 'SWYConverszGenAlbum-Custom Sort Ascending-12', + 'SWYConverszGenAlbum-Is Prototype-13', + 'SWYConverszGenAlbum-Project Document Type-14', + 'SWYConverszGenAlbum-Custom Query Type-15', + 'SWYConverszGenAlbum-Trashed State-16', + ('SWYConverszGenAlbum-Trash Date-17', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-18', + 'SWYConverszGenAlbum-Privacy State-19') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date', @@ -874,99 +1040,45 @@ def get_ph25swyconvalbumnadsyndpl(files_found, report_folder, seeker, wrap_text, FROM ZGENERICALBUM SWYConverszGenAlbum LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = SWYConverszGenAlbum.ZPARENTFOLDER LEFT JOIN ZASSET zAsset ON zAsset.ZCONVERSATION = SWYConverszGenAlbum.Z_PK - LEFT JOIN Z_31ASSETS z31Assets ON z31Assets.Z_3ASSETS = zAsset.Z_PK - LEFT JOIN Z_31ASSETS Albumsz31Assets ON Albumsz31Assets.Z_31ALBUMS = SWYConverszGenAlbum.Z_PK - LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = SWYConverszGenAlbum.Z_PK - LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS + LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN Z_30ASSETS Albumsz30Assets ON Albumsz30Assets.Z_30ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON SWYConverszGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM WHERE SWYConverszGenAlbum.ZKIND = 1509 ORDER BY SWYConverszGenAlbum.ZCREATIONDATE - """) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19])) + + data_headers = (('SWYConverszGenAlbum-Creation Date-0', 'datetime'), + ('SWYConverszGenAlbum-Start Date-1', 'datetime'), + ('SWYConverszGenAlbum-End Date-2', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-3', + 'SWYConverszGenAlbum- Import Session ID-SWY-4', + 'SWYzGenAlbum-Imported by Bundle Identifier-5', + 'SWYConverszGenAlbum-Album Kind-6', + 'SWYConverszGenAlbum-Cloud_Local_State-7', + 'SWYConverszGenAlbum- Syndicate-8', + 'SWYConverszGenAlbum-Sync Event Order Key-9', + 'SWYConverszGenAlbum-Pinned-10', + 'SWYConverszGenAlbum-Custom Sort Key-11', + 'SWYConverszGenAlbum-Custom Sort Ascending-12', + 'SWYConverszGenAlbum-Is Prototype-13', + 'SWYConverszGenAlbum-Project Document Type-14', + 'SWYConverszGenAlbum-Custom Query Type-15', + 'SWYConverszGenAlbum-Trashed State-16', + ('SWYConverszGenAlbum-Trash Date-17', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-18', + 'SWYConverszGenAlbum-Privacy State-19') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19])) - - counter += 1 - - description = 'Parses Shared with You Conversation Album records found in the' \ - ' Syndication.photoslibrary-database-Photos.sqlite ZGENERICALBUM Table and' \ - ' supports iOS 198 Parses Share with You Conversation Album' \ - ' records only, no asset data being parsed.' - report = ArtifactHtmlReport('Ph25.2-SWY Conversation Records NAD-SyndPL') - report.start_artifact_report(report_folder, 'Ph25.2-SWY Conversation Records NAD-SyndPL', description) - report.add_script() - data_headers = ('SWYConverszGenAlbum-Creation Date-0', - 'SWYConverszGenAlbum-Start Date-1', - 'SWYConverszGenAlbum-End Date-2', - 'zAsset- Conversation= zGenAlbum_zPK-3', - 'SWYConverszGenAlbum- Import Session ID-SWY-4', - 'SWYzGenAlbum-Imported by Bundle Identifier-5', - 'SWYConverszGenAlbum-Album Kind-6', - 'SWYConverszGenAlbum-Cloud_Local_State-7', - 'SWYConverszGenAlbum- Syndicate-8', - 'SWYConverszGenAlbum-Sync Event Order Key-9', - 'SWYConverszGenAlbum-Pinned-10', - 'SWYConverszGenAlbum-Custom Sort Key-11', - 'SWYConverszGenAlbum-Custom Sort Ascending-12', - 'SWYConverszGenAlbum-Is Prototype-13', - 'SWYConverszGenAlbum-Project Document Type-14', - 'SWYConverszGenAlbum-Custom Query Type-15', - 'SWYConverszGenAlbum-Trashed State-16', - 'SWYConverszGenAlbum-Trash Date-17', - 'SWYConverszGenAlbum-Cloud Delete State-18', - 'SWYConverszGenAlbum-Privacy State-19') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph25.2-SWY Conversation Records NAD-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph25.2-SWY Conversation Records NAD-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' Shared with You Conversation Album Records with No Asset Data') - - db.close() - return -__artifacts_v2__ = { - 'Ph25-1-SWY Conversation Records with NAD-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph25.1 SWY Conversation Album Records with No Asset Data', - 'description': 'Parses Shared with You Conversation Album records found in the PhotoData-Photos.sqlite' - ' ZGENERICALBUM Table and supports iOS 15-18. Parses Share with You Conversation Album' - ' records only, no asset data being parsed.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-13', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-D-Generic_Album_Records-NAD', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph25swyconvalbumnadphdapsql' - }, - 'Ph25-2-SWY Conversation Records with NAD-SyndPL': { - 'name': 'SyndPL Photos.sqlite Ph25.2 SWY Conversation Records with No Asset Data', - 'description': 'Parses SWY Conversation Album Records found in the' - ' Syndication.photoslibrary-database-Photos.sqlite ZGENERICALBUM Table and supports iOS 15-18.' - ' Parses Share with You Conversation Album records only, no asset data being parsed.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-13', - 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', - 'notes': '', - 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*', - 'function': 'get_ph25swyconvalbumnadsyndpl' - } -} diff --git a/scripts/artifacts/Ph26SyndicationPLAssets.py b/scripts/artifacts/Ph26SyndicationPLAssets.py index 1ea3d4e2..b1a4ebec 100644 --- a/scripts/artifacts/Ph26SyndicationPLAssets.py +++ b/scripts/artifacts/Ph26SyndicationPLAssets.py @@ -1,50 +1,81 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses Syndication Photos Library assets which includes Shared with You Conversation assets from -# PhotoData-Photos.sqlite and Syndication.photoslibrary-database-Photos.sqlite and supports iOS 15-18. -# Parses assets that have a ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and -# ZASSET ZSYNDICATIONSTATE fields can be used to filter those results: -# ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER: 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 -# 1-SyndPs-Sent-SWY_Synd_Asset-1 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2 -# 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8 9-SyndPs-STILLTESTING_Sent_SWY-9 -# 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10 -# ZASSET ZSAVEDASSETTYPE: 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12 -# This parser is based on research and SQLite Queries written by Scott Koenig -# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools -# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results. -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph26_1SyndicationIDAssetsPhDaPsql': { + 'name': 'Ph26.1-Syndication ID Assets-PhDaPsql', + 'description': 'Parses Syndication ID and Syndication Photos Library assets which includes' + ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' + ' Syndication.photoslibrary-database-Photos.sqlite' + ' and supports iOS 15-18. Parses assets that have a ZADDITIONALASSETATTRIBUTES' + ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields' + ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:' + ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1' + ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + ' 9-SyndPs-STILLTESTING_Sent_SWY-9' + ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ' ZASSET ZSAVEDASSETTYPE: 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-C-Other_Artifacts', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + }, + 'Ph26_2SyndicationPLAssetsSyndPL': { + 'name': 'Ph26.2-Syndication PL Assets-SyndPL', + 'description': 'Parses Syndication ID and Syndication Photos Library assets which includes' + ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' + ' Syndication.photoslibrary-database-Photos.sqlite' + ' and supports iOS 15-18. Parses assets that have a ZADDITIONALASSETATTRIBUTES' + ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields' + ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:' + ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1' + ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + ' 9-SyndPs-STILLTESTING_Sent_SWY-9' + ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ' ZASSET ZSAVEDASSETTYPE: 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', + 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import glob import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, kmlgen, timeline, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc +@artifact_processor +def Ph26_1SyndicationIDAssetsPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) -def get_ph26syndicationidassetsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("14.8.1"): - logfunc("Unsupported version for Syndication ID or Syndication Photos Library assets from" - " PhotoData-Photos.sqlite for iOS " + iosversion) + logfunc("Unsupported version from PhotoData-Photos.sqlite for iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', @@ -186,103 +217,72 @@ def get_ph26syndicationidassetsphdapsql(files_found, report_folder, seeker, wrap LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43])) - - counter += 1 - - description = 'Parses Syndication ID and Syndication Photos Library assets which includes' \ - ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' \ - ' Syndication.photoslibrary-database-Photos.sqlite' \ - ' and supports iOS 15. Parses assets that have a ZADDITIONALASSETATTRIBUTES' \ - ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields' \ - ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:' \ - ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1' \ - ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' \ - ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' \ - ' 9-SyndPs-STILLTESTING_Sent_SWY-9' \ - ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10 ZASSET ZSAVEDASSETTYPE:' \ - ' 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - report = ArtifactHtmlReport('Ph26.1-Syndication ID Assets-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph26.1-Syndication ID Assets-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'SWYConverszGenAlbum-Creation Date-1', - 'SWYConverszGenAlbum-Start Date-2', - 'SWYConverszGenAlbum-End Date-3', - 'zAsset- Conversation= zGenAlbum_zPK-4', - 'SWYConverszGenAlbum- Import Session ID-SWY-5', - 'SWYzGenAlbum-Imported by Bundle Identifier-6', - 'zAsset-zPK-7', - 'zAsset-Directory-Path-8', - 'zAsset-Filename-9', - 'zAddAssetAttr- Original Filename-10', - 'zCldMast- Original Filename-11', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', - 'zAsset-Syndication State-13', - 'zAsset-Bundle Scope-14', - 'zAddAssetAttr- Imported by Bundle Identifier-15', - 'zAddAssetAttr-Imported By Display Name-16', - 'zAsset-Visibility State-17', - 'zAsset-Saved Asset Type-18', - 'zAddAssetAttr-Share Type-19', - 'zAsset- SortToken -CameraRoll-20', - 'zAsset-Added Date-21', - 'zCldMast-Creation Date-22', - 'zAddAssetAttr-Time Zone Name-23', - 'zAddAssetAttr-EXIF-String-24', - 'zAsset-Modification Date-25', - 'zAsset-Last Shared Date-26', - 'zAsset-Trashed Date-27', - 'zAddAssetAttr-zPK-28', - 'zAsset-UUID = store.cloudphotodb-29', - 'zAddAssetAttr-Master Fingerprint-30', - 'SWYConverszGenAlbum-Album Kind-31', - 'SWYConverszGenAlbum-Cloud_Local_State-32', - 'SWYConverszGenAlbum- Syndicate-33', - 'SWYConverszGenAlbum-Sync Event Order Key-34', - 'SWYConverszGenAlbum-Pinned-35', - 'SWYConverszGenAlbum-Custom Sort Key-36', - 'SWYConverszGenAlbum-Custom Sort Ascending-37', - 'SWYConverszGenAlbum-Is Prototype-38', - 'SWYConverszGenAlbum-Project Document Type-39', - 'SWYConverszGenAlbum-Custom Query Type-40', - 'SWYConverszGenAlbum-Trashed State-41', - 'SWYConverszGenAlbum-Trash Date-42', - 'SWYConverszGenAlbum-Cloud Delete State-43') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph26.1-Syndication ID Assets-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph26.1-Syndication ID Assets-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43])) - else: - logfunc('No assets with a ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER value from' - ' PhotoData-Photos.sqlite') + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-1', 'datetime'), + ('SWYConverszGenAlbum-Start Date-2', 'datetime'), + ('SWYConverszGenAlbum-End Date-3', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-4', + 'SWYConverszGenAlbum- Import Session ID-SWY-5', + 'SWYzGenAlbum-Imported by Bundle Identifier-6', + 'zAsset-zPK-7', + 'zAsset-Directory-Path-8', + 'zAsset-Filename-9', + 'zAddAssetAttr- Original Filename-10', + 'zCldMast- Original Filename-11', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', + 'zAsset-Syndication State-13', + 'zAsset-Bundle Scope-14', + 'zAddAssetAttr- Imported by Bundle Identifier-15', + 'zAddAssetAttr-Imported By Display Name-16', + 'zAsset-Visibility State-17', + 'zAsset-Saved Asset Type-18', + 'zAddAssetAttr-Share Type-19', + ('zAsset- SortToken -CameraRoll-20', 'datetime'), + ('zAsset-Added Date-21', 'datetime'), + ('zCldMast-Creation Date-22', 'datetime'), + 'zAddAssetAttr-Time Zone Name-23', + 'zAddAssetAttr-EXIF-String-24', + ('zAsset-Modification Date-25', 'datetime'), + ('zAsset-Last Shared Date-26', 'datetime'), + ('zAsset-Trashed Date-27', 'datetime'), + 'zAddAssetAttr-zPK-28', + 'zAsset-UUID = store.cloudphotodb-29', + 'zAddAssetAttr-Master Fingerprint-30', + 'SWYConverszGenAlbum-Album Kind-31', + 'SWYConverszGenAlbum-Cloud_Local_State-32', + 'SWYConverszGenAlbum- Syndicate-33', + 'SWYConverszGenAlbum-Sync Event Order Key-34', + 'SWYConverszGenAlbum-Pinned-35', + 'SWYConverszGenAlbum-Custom Sort Key-36', + 'SWYConverszGenAlbum-Custom Sort Ascending-37', + 'SWYConverszGenAlbum-Is Prototype-38', + 'SWYConverszGenAlbum-Project Document Type-39', + 'SWYConverszGenAlbum-Custom Query Type-40', + 'SWYConverszGenAlbum-Trashed State-41', + ('SWYConverszGenAlbum-Trash Date-42', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-43') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return + return data_headers, data_list, source_path - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', @@ -436,107 +436,299 @@ def get_ph26syndicationidassetsphdapsql(files_found, report_folder, seeker, wrap LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46])) - - counter += 1 + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46])) - description = 'Parses Syndication ID and Syndication Photos Library assets which includes' \ - ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' \ - ' Syndication.photoslibrary-database-Photos.sqlite' \ - ' and supports iOS 16-17. Parses assets that have a ZADDITIONALASSETATTRIBUTES' \ - ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields' \ - ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:' \ - ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1' \ - ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' \ - ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' \ - ' 9-SyndPs-STILLTESTING_Sent_SWY-9' \ - ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10 ZASSET ZSAVEDASSETTYPE:' \ - ' 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - report = ArtifactHtmlReport('Ph26.1-Syndication ID Assets-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph26.1-Syndication ID Assets-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'SWYConverszGenAlbum-Creation Date-1', - 'SWYConverszGenAlbum-Start Date-2', - 'SWYConverszGenAlbum-End Date-3', - 'zAsset- Conversation= zGenAlbum_zPK-4', - 'SWYConverszGenAlbum- Import Session ID-SWY-5', - 'SWYzGenAlbum-Imported by Bundle Identifier-6', - 'zAsset-zPK-7', - 'zAsset-Directory-Path-8', - 'zAsset-Filename-9', - 'zAddAssetAttr- Original Filename-10', - 'zCldMast- Original Filename-11', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', - 'zAsset-Syndication State-13', - 'zAsset-Bundle Scope-14', - 'zAddAssetAttr.Imported by Bundle Identifier-15', - 'zAddAssetAttr-Imported By Display Name-16', - 'zAsset-Visibility State-17', - 'zAsset-Saved Asset Type-18', - 'zAddAssetAttr-Share Type-19', - 'zAsset-Active Library Scope Participation State-20', - 'zAsset- SortToken -CameraRoll-21', - 'zAsset-Added Date-22', - 'zCldMast-Creation Date-23', - 'zAddAssetAttr-Time Zone Name-24', - 'zAddAssetAttr-EXIF-String-25', - 'zAsset-Modification Date-26', - 'zAsset-Last Shared Date-27', - 'zAsset-Trashed Date-28', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-29', - 'zAddAssetAttr-zPK-30', - 'zAsset-UUID = store.cloudphotodb-31', - 'zAddAssetAttr-Master Fingerprint-32', - 'SWYConverszGenAlbum-Album Kind-33', - 'SWYConverszGenAlbum-Cloud_Local_State-34', - 'SWYConverszGenAlbum- Syndicate-35', - 'SWYConverszGenAlbum-Sync Event Order Key-36', - 'SWYConverszGenAlbum-Pinned-37', - 'SWYConverszGenAlbum-Custom Sort Key-38', - 'SWYConverszGenAlbum-Custom Sort Ascending-39', - 'SWYConverszGenAlbum-Is Prototype-40', - 'SWYConverszGenAlbum-Project Document Type-41', - 'SWYConverszGenAlbum-Custom Query Type-42', - 'SWYConverszGenAlbum-Trashed State-43', - 'SWYConverszGenAlbum-Trash Date-44', - 'SWYConverszGenAlbum-Cloud Delete State-45', - 'SWYConverszGenAlbum-Privacy State-46') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-1', 'datetime'), + ('SWYConverszGenAlbum-Start Date-2', 'datetime'), + ('SWYConverszGenAlbum-End Date-3', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-4', + 'SWYConverszGenAlbum- Import Session ID-SWY-5', + 'SWYzGenAlbum-Imported by Bundle Identifier-6', + 'zAsset-zPK-7', + 'zAsset-Directory-Path-8', + 'zAsset-Filename-9', + 'zAddAssetAttr- Original Filename-10', + 'zCldMast- Original Filename-11', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', + 'zAsset-Syndication State-13', + 'zAsset-Bundle Scope-14', + 'zAddAssetAttr.Imported by Bundle Identifier-15', + 'zAddAssetAttr-Imported By Display Name-16', + 'zAsset-Visibility State-17', + 'zAsset-Saved Asset Type-18', + 'zAddAssetAttr-Share Type-19', + 'zAsset-Active Library Scope Participation State-20', + ('zAsset- SortToken -CameraRoll-21', 'datetime'), + ('zAsset-Added Date-22', 'datetime'), + ('zCldMast-Creation Date-23', 'datetime'), + 'zAddAssetAttr-Time Zone Name-24', + 'zAddAssetAttr-EXIF-String-25', + ('zAsset-Modification Date-26', 'datetime'), + ('zAsset-Last Shared Date-27', 'datetime'), + ('zAsset-Trashed Date-28', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-29', + 'zAddAssetAttr-zPK-30', + 'zAsset-UUID = store.cloudphotodb-31', + 'zAddAssetAttr-Master Fingerprint-32', + 'SWYConverszGenAlbum-Album Kind-33', + 'SWYConverszGenAlbum-Cloud_Local_State-34', + 'SWYConverszGenAlbum- Syndicate-35', + 'SWYConverszGenAlbum-Sync Event Order Key-36', + 'SWYConverszGenAlbum-Pinned-37', + 'SWYConverszGenAlbum-Custom Sort Key-38', + 'SWYConverszGenAlbum-Custom Sort Ascending-39', + 'SWYConverszGenAlbum-Is Prototype-40', + 'SWYConverszGenAlbum-Project Document Type-41', + 'SWYConverszGenAlbum-Custom Query Type-42', + 'SWYConverszGenAlbum-Trashed State-43', + ('SWYConverszGenAlbum-Trash Date-44', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-45', + 'SWYConverszGenAlbum-Privacy State-46') + data_list = get_sqlite_db_records(source_path, query) - tsvname = 'Ph26.1-Syndication ID Assets-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - tlactivity = 'Ph26.1-Syndication ID Assets-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier', + zAsset.Z_PK AS 'zAsset-zPK', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate', + SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key', + CASE SWYConverszGenAlbum.ZISPINNED + WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || '' + END AS 'SWYConverszGenAlbum-Pinned', + CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'SWYConverszGenAlbum-Custom Sort Key', + CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'SWYConverszGenAlbum-Custom Sort Ascending', + CASE SWYConverszGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || '' + END AS 'SWYConverszGenAlbum-Is Prototype', + CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'SWYConverszGenAlbum-Project Document Type', + CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'SWYConverszGenAlbum-Custom Query Type', + CASE SWYConverszGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0' + WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || '' + END AS 'SWYConverszGenAlbum-Trashed State', + DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date', + CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Delete State', + CASE SWYConverszGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || '' + END AS 'SWYConverszGenAlbum-Privacy State' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION + LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46])) - else: - logfunc('No assets with a ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER value from' - ' PhotoData-Photos.sqlite') + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-1', 'datetime'), + ('SWYConverszGenAlbum-Start Date-2', 'datetime'), + ('SWYConverszGenAlbum-End Date-3', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-4', + 'SWYConverszGenAlbum- Import Session ID-SWY-5', + 'SWYzGenAlbum-Imported by Bundle Identifier-6', + 'zAsset-zPK-7', + 'zAsset-Directory-Path-8', + 'zAsset-Filename-9', + 'zAddAssetAttr- Original Filename-10', + 'zCldMast- Original Filename-11', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', + 'zAsset-Syndication State-13', + 'zAsset-Bundle Scope-14', + 'zAddAssetAttr.Imported by Bundle Identifier-15', + 'zAddAssetAttr-Imported By Display Name-16', + 'zAsset-Visibility State-17', + 'zAsset-Saved Asset Type-18', + 'zAddAssetAttr-Share Type-19', + 'zAsset-Active Library Scope Participation State-20', + ('zAsset- SortToken -CameraRoll-21', 'datetime'), + ('zAsset-Added Date-22', 'datetime'), + ('zCldMast-Creation Date-23', 'datetime'), + 'zAddAssetAttr-Time Zone Name-24', + 'zAddAssetAttr-EXIF-String-25', + ('zAsset-Modification Date-26', 'datetime'), + ('zAsset-Last Shared Date-27', 'datetime'), + ('zAsset-Trashed Date-28', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-29', + 'zAddAssetAttr-zPK-30', + 'zAsset-UUID = store.cloudphotodb-31', + 'zAddAssetAttr-Master Fingerprint-32', + 'SWYConverszGenAlbum-Album Kind-33', + 'SWYConverszGenAlbum-Cloud_Local_State-34', + 'SWYConverszGenAlbum- Syndicate-35', + 'SWYConverszGenAlbum-Sync Event Order Key-36', + 'SWYConverszGenAlbum-Pinned-37', + 'SWYConverszGenAlbum-Custom Sort Key-38', + 'SWYConverszGenAlbum-Custom Sort Ascending-39', + 'SWYConverszGenAlbum-Is Prototype-40', + 'SWYConverszGenAlbum-Project Document Type-41', + 'SWYConverszGenAlbum-Custom Query Type-42', + 'SWYConverszGenAlbum-Trashed State-43', + ('SWYConverszGenAlbum-Trash Date-44', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-45', + 'SWYConverszGenAlbum-Privacy State-46') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', @@ -609,8 +801,8 @@ def get_ph26syndicationidassetsphdapsql(files_found, report_folder, seeker, wrap zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash', CASE SWYConverszGenAlbum.ZKIND WHEN 2 THEN '2-Non-Shared-Album-2' WHEN 1505 THEN '1505-Shared-Album-1505' @@ -686,127 +878,96 @@ def get_ph26syndicationidassetsphdapsql(files_found, report_folder, seeker, wrap LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION - LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = SWYConverszGenAlbum.Z_PK - LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS + LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47])) - - counter += 1 - - description = 'Parses Syndication ID and Syndication Photos Library assets which includes' \ - ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' \ - ' Syndication.photoslibrary-database-Photos.sqlite' \ - ' and supports iOS 18. Parses assets that have a ZADDITIONALASSETATTRIBUTES' \ - ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields' \ - ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:' \ - ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1' \ - ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' \ - ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' \ - ' 9-SyndPs-STILLTESTING_Sent_SWY-9' \ - ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10 ZASSET ZSAVEDASSETTYPE:' \ - ' 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - report = ArtifactHtmlReport('Ph26.1-Syndication ID Assets-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph26.1-Syndication ID Assets-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'SWYConverszGenAlbum-Creation Date-1', - 'SWYConverszGenAlbum-Start Date-2', - 'SWYConverszGenAlbum-End Date-3', - 'zAsset- Conversation= zGenAlbum_zPK-4', - 'SWYConverszGenAlbum- Import Session ID-SWY-5', - 'SWYzGenAlbum-Imported by Bundle Identifier-6', - 'zAsset-zPK-7', - 'zAsset-Directory-Path-8', - 'zAsset-Filename-9', - 'zAddAssetAttr- Original Filename-10', - 'zCldMast- Original Filename-11', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', - 'zAsset-Syndication State-13', - 'zAsset-Bundle Scope-14', - 'zAddAssetAttr.Imported by Bundle Identifier-15', - 'zAddAssetAttr-Imported By Display Name-16', - 'zAsset-Visibility State-17', - 'zAsset-Saved Asset Type-18', - 'zAddAssetAttr-Share Type-19', - 'zAsset-Active Library Scope Participation State-20', - 'zAsset- SortToken -CameraRoll-21', - 'zAsset-Added Date-22', - 'zCldMast-Creation Date-23', - 'zAddAssetAttr-Time Zone Name-24', - 'zAddAssetAttr-EXIF-String-25', - 'zAsset-Modification Date-26', - 'zAsset-Last Shared Date-27', - 'zAsset-Trashed Date-28', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-29', - 'zAddAssetAttr-zPK-30', - 'zAsset-UUID = store.cloudphotodb-31', - 'zAddAssetAttr-Original Stable Hash-iOS18-32', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-33', - 'SWYConverszGenAlbum-Album Kind-34', - 'SWYConverszGenAlbum-Cloud_Local_State-35', - 'SWYConverszGenAlbum- Syndicate-36', - 'SWYConverszGenAlbum-Sync Event Order Key-37', - 'SWYConverszGenAlbum-Pinned-38', - 'SWYConverszGenAlbum-Custom Sort Key-39', - 'SWYConverszGenAlbum-Custom Sort Ascending-40', - 'SWYConverszGenAlbum-Is Prototype-41', - 'SWYConverszGenAlbum-Project Document Type-42', - 'SWYConverszGenAlbum-Custom Query Type-43', - 'SWYConverszGenAlbum-Trashed State-44', - 'SWYConverszGenAlbum-Trash Date-45', - 'SWYConverszGenAlbum-Cloud Delete State-46', - 'SWYConverszGenAlbum-Privacy State-47') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph26.1-Syndication ID Assets-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph26.1-Syndication ID Assets-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No assets with a ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER value from' - ' PhotoData-Photos.sqlite') + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47])) - db.close() - return + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-1', 'datetime'), + ('SWYConverszGenAlbum-Start Date-2', 'datetime'), + ('SWYConverszGenAlbum-End Date-3', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-4', + 'SWYConverszGenAlbum- Import Session ID-SWY-5', + 'SWYzGenAlbum-Imported by Bundle Identifier-6', + 'zAsset-zPK-7', + 'zAsset-Directory-Path-8', + 'zAsset-Filename-9', + 'zAddAssetAttr- Original Filename-10', + 'zCldMast- Original Filename-11', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', + 'zAsset-Syndication State-13', + 'zAsset-Bundle Scope-14', + 'zAddAssetAttr.Imported by Bundle Identifier-15', + 'zAddAssetAttr-Imported By Display Name-16', + 'zAsset-Visibility State-17', + 'zAsset-Saved Asset Type-18', + 'zAddAssetAttr-Share Type-19', + 'zAsset-Active Library Scope Participation State-20', + ('zAsset- SortToken -CameraRoll-21', 'datetime'), + ('zAsset-Added Date-22', 'datetime'), + ('zCldMast-Creation Date-23', 'datetime'), + 'zAddAssetAttr-Time Zone Name-24', + 'zAddAssetAttr-EXIF-String-25', + ('zAsset-Modification Date-26', 'datetime'), + ('zAsset-Last Shared Date-27', 'datetime'), + ('zAsset-Trashed Date-28', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-29', + 'zAddAssetAttr-zPK-30', + 'zAsset-UUID = store.cloudphotodb-31', + 'zAddAssetAttr-Original Stable Hash-32', + 'zAddAssetAttr.Adjusted Stable Hash-33', + 'SWYConverszGenAlbum-Album Kind-34', + 'SWYConverszGenAlbum-Cloud_Local_State-35', + 'SWYConverszGenAlbum- Syndicate-36', + 'SWYConverszGenAlbum-Sync Event Order Key-37', + 'SWYConverszGenAlbum-Pinned-38', + 'SWYConverszGenAlbum-Custom Sort Key-39', + 'SWYConverszGenAlbum-Custom Sort Ascending-40', + 'SWYConverszGenAlbum-Is Prototype-41', + 'SWYConverszGenAlbum-Project Document Type-42', + 'SWYConverszGenAlbum-Custom Query Type-43', + 'SWYConverszGenAlbum-Trashed State-44', + ('SWYConverszGenAlbum-Trash Date-45', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-46', + 'SWYConverszGenAlbum-Privacy State-47') + data_list = get_sqlite_db_records(source_path, query) + return data_headers, data_list, source_path -def get_ph26syndicationplassetssyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph26_2SyndicationPLAssetsSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("14.8.1"): - logfunc("Unsupported version for Syndication Photos Library assets from" - " Syndication.photoslibrary-database-Photos.sqlite for iOS " + iosversion) + logfunc("Unsupported version from Syndication.photoslibrary for iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', @@ -948,103 +1109,72 @@ def get_ph26syndicationplassetssyndpl(files_found, report_folder, seeker, wrap_t LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43])) - - counter += 1 - - description = 'Parses Syndication ID and Syndication Photos Library assets which includes' \ - ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' \ - ' Syndication.photoslibrary-database-Photos.sqlite' \ - ' and supports iOS 16-17. Parses assets that have a ZADDITIONALASSETATTRIBUTES' \ - ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields' \ - ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:' \ - ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1' \ - ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' \ - ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' \ - ' 9-SyndPs-STILLTESTING_Sent_SWY-9' \ - ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10 ZASSET ZSAVEDASSETTYPE:' \ - ' 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - report = ArtifactHtmlReport('Ph26.2-Syndication PL Assets-SyndPL') - report.start_artifact_report(report_folder, 'Ph26.2-Syndication PL Assets-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'SWYConverszGenAlbum-Creation Date-1', - 'SWYConverszGenAlbum-Start Date-2', - 'SWYConverszGenAlbum-End Date-3', - 'zAsset- Conversation= zGenAlbum_zPK-4', - 'SWYConverszGenAlbum- Import Session ID-SWY-5', - 'SWYzGenAlbum-Imported by Bundle Identifier-6', - 'zAsset-zPK-7', - 'zAsset-Directory-Path-8', - 'zAsset-Filename-9', - 'zAddAssetAttr- Original Filename-10', - 'zCldMast- Original Filename-11', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', - 'zAsset-Syndication State-13', - 'zAsset-Bundle Scope-14', - 'zAddAssetAttr- Imported by Bundle Identifier-15', - 'zAddAssetAttr-Imported By Display Name-16', - 'zAsset-Visibility State-17', - 'zAsset-Saved Asset Type-18', - 'zAddAssetAttr-Share Type-19', - 'zAsset- SortToken -CameraRoll-20', - 'zAsset-Added Date-21', - 'zCldMast-Creation Date-22', - 'zAddAssetAttr-Time Zone Name-23', - 'zAddAssetAttr-EXIF-String-24', - 'zAsset-Modification Date-25', - 'zAsset-Last Shared Date-26', - 'zAsset-Trashed Date-27', - 'zAddAssetAttr-zPK-28', - 'zAsset-UUID = store.cloudphotodb-29', - 'zAddAssetAttr-Master Fingerprint-30', - 'SWYConverszGenAlbum-Album Kind-31', - 'SWYConverszGenAlbum-Cloud_Local_State-32', - 'SWYConverszGenAlbum- Syndicate-33', - 'SWYConverszGenAlbum-Sync Event Order Key-34', - 'SWYConverszGenAlbum-Pinned-35', - 'SWYConverszGenAlbum-Custom Sort Key-36', - 'SWYConverszGenAlbum-Custom Sort Ascending-37', - 'SWYConverszGenAlbum-Is Prototype-38', - 'SWYConverszGenAlbum-Project Document Type-39', - 'SWYConverszGenAlbum-Custom Query Type-40', - 'SWYConverszGenAlbum-Trashed State-41', - 'SWYConverszGenAlbum-Trash Date-42', - 'SWYConverszGenAlbum-Cloud Delete State-43') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph26.2-Syndication PL Assets-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph26.2-Syndication PL Assets-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43])) - else: - logfunc('No assets with a ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER value from' - ' Syndication.photoslibrary-database-Photos.sqlite') + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-1', 'datetime'), + ('SWYConverszGenAlbum-Start Date-2', 'datetime'), + ('SWYConverszGenAlbum-End Date-3', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-4', + 'SWYConverszGenAlbum- Import Session ID-SWY-5', + 'SWYzGenAlbum-Imported by Bundle Identifier-6', + 'zAsset-zPK-7', + 'zAsset-Directory-Path-8', + 'zAsset-Filename-9', + 'zAddAssetAttr- Original Filename-10', + 'zCldMast- Original Filename-11', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', + 'zAsset-Syndication State-13', + 'zAsset-Bundle Scope-14', + 'zAddAssetAttr- Imported by Bundle Identifier-15', + 'zAddAssetAttr-Imported By Display Name-16', + 'zAsset-Visibility State-17', + 'zAsset-Saved Asset Type-18', + 'zAddAssetAttr-Share Type-19', + ('zAsset- SortToken -CameraRoll-20', 'datetime'), + ('zAsset-Added Date-21', 'datetime'), + ('zCldMast-Creation Date-22', 'datetime'), + 'zAddAssetAttr-Time Zone Name-23', + 'zAddAssetAttr-EXIF-String-24', + ('zAsset-Modification Date-25', 'datetime'), + ('zAsset-Last Shared Date-26', 'datetime'), + ('zAsset-Trashed Date-27', 'datetime'), + 'zAddAssetAttr-zPK-28', + 'zAsset-UUID = store.cloudphotodb-29', + 'zAddAssetAttr-Master Fingerprint-30', + 'SWYConverszGenAlbum-Album Kind-31', + 'SWYConverszGenAlbum-Cloud_Local_State-32', + 'SWYConverszGenAlbum- Syndicate-33', + 'SWYConverszGenAlbum-Sync Event Order Key-34', + 'SWYConverszGenAlbum-Pinned-35', + 'SWYConverszGenAlbum-Custom Sort Key-36', + 'SWYConverszGenAlbum-Custom Sort Ascending-37', + 'SWYConverszGenAlbum-Is Prototype-38', + 'SWYConverszGenAlbum-Project Document Type-39', + 'SWYConverszGenAlbum-Custom Query Type-40', + 'SWYConverszGenAlbum-Trashed State-41', + ('SWYConverszGenAlbum-Trash Date-42', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-43') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return + return data_headers, data_list, source_path - if (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', @@ -1198,107 +1328,299 @@ def get_ph26syndicationplassetssyndpl(files_found, report_folder, seeker, wrap_t LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46])) - - counter += 1 + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46])) - description = 'Parses Syndication ID and Syndication Photos Library assets which includes' \ - ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' \ - ' Syndication.photoslibrary-database-Photos.sqlite' \ - ' and supports iOS 16-17. Parses assets that have a ZADDITIONALASSETATTRIBUTES' \ - ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields' \ - ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:' \ - ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1' \ - ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' \ - ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' \ - ' 9-SyndPs-STILLTESTING_Sent_SWY-9' \ - ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10 ZASSET ZSAVEDASSETTYPE:' \ - ' 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - report = ArtifactHtmlReport('Ph26.2-Syndication PL Assets-SyndPL') - report.start_artifact_report(report_folder, 'Ph26.2-Syndication PL Assets-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'SWYConverszGenAlbum-Creation Date-1', - 'SWYConverszGenAlbum-Start Date-2', - 'SWYConverszGenAlbum-End Date-3', - 'zAsset- Conversation= zGenAlbum_zPK-4', - 'SWYConverszGenAlbum- Import Session ID-SWY-5', - 'SWYzGenAlbum-Imported by Bundle Identifier-6', - 'zAsset-zPK-7', - 'zAsset-Directory-Path-8', - 'zAsset-Filename-9', - 'zAddAssetAttr- Original Filename-10', - 'zCldMast- Original Filename-11', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', - 'zAsset-Syndication State-13', - 'zAsset-Bundle Scope-14', - 'zAddAssetAttr.Imported by Bundle Identifier-15', - 'zAddAssetAttr-Imported By Display Name-16', - 'zAsset-Visibility State-17', - 'zAsset-Saved Asset Type-18', - 'zAddAssetAttr-Share Type-19', - 'zAsset-Active Library Scope Participation State-20', - 'zAsset- SortToken -CameraRoll-21', - 'zAsset-Added Date-22', - 'zCldMast-Creation Date-23', - 'zAddAssetAttr-Time Zone Name-24', - 'zAddAssetAttr-EXIF-String-25', - 'zAsset-Modification Date-26', - 'zAsset-Last Shared Date-27', - 'zAsset-Trashed Date-28', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-29', - 'zAddAssetAttr-zPK-30', - 'zAsset-UUID = store.cloudphotodb-31', - 'zAddAssetAttr-Master Fingerprint-32', - 'SWYConverszGenAlbum-Album Kind-33', - 'SWYConverszGenAlbum-Cloud_Local_State-34', - 'SWYConverszGenAlbum- Syndicate-35', - 'SWYConverszGenAlbum-Sync Event Order Key-36', - 'SWYConverszGenAlbum-Pinned-37', - 'SWYConverszGenAlbum-Custom Sort Key-38', - 'SWYConverszGenAlbum-Custom Sort Ascending-39', - 'SWYConverszGenAlbum-Is Prototype-40', - 'SWYConverszGenAlbum-Project Document Type-41', - 'SWYConverszGenAlbum-Custom Query Type-42', - 'SWYConverszGenAlbum-Trashed State-43', - 'SWYConverszGenAlbum-Trash Date-44', - 'SWYConverszGenAlbum-Cloud Delete State-45', - 'SWYConverszGenAlbum-Privacy State-46') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-1', 'datetime'), + ('SWYConverszGenAlbum-Start Date-2', 'datetime'), + ('SWYConverszGenAlbum-End Date-3', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-4', + 'SWYConverszGenAlbum- Import Session ID-SWY-5', + 'SWYzGenAlbum-Imported by Bundle Identifier-6', + 'zAsset-zPK-7', + 'zAsset-Directory-Path-8', + 'zAsset-Filename-9', + 'zAddAssetAttr- Original Filename-10', + 'zCldMast- Original Filename-11', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', + 'zAsset-Syndication State-13', + 'zAsset-Bundle Scope-14', + 'zAddAssetAttr.Imported by Bundle Identifier-15', + 'zAddAssetAttr-Imported By Display Name-16', + 'zAsset-Visibility State-17', + 'zAsset-Saved Asset Type-18', + 'zAddAssetAttr-Share Type-19', + 'zAsset-Active Library Scope Participation State-20', + ('zAsset- SortToken -CameraRoll-21', 'datetime'), + ('zAsset-Added Date-22', 'datetime'), + ('zCldMast-Creation Date-23', 'datetime'), + 'zAddAssetAttr-Time Zone Name-24', + 'zAddAssetAttr-EXIF-String-25', + ('zAsset-Modification Date-26', 'datetime'), + ('zAsset-Last Shared Date-27', 'datetime'), + ('zAsset-Trashed Date-28', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-29', + 'zAddAssetAttr-zPK-30', + 'zAsset-UUID = store.cloudphotodb-31', + 'zAddAssetAttr-Master Fingerprint-32', + 'SWYConverszGenAlbum-Album Kind-33', + 'SWYConverszGenAlbum-Cloud_Local_State-34', + 'SWYConverszGenAlbum- Syndicate-35', + 'SWYConverszGenAlbum-Sync Event Order Key-36', + 'SWYConverszGenAlbum-Pinned-37', + 'SWYConverszGenAlbum-Custom Sort Key-38', + 'SWYConverszGenAlbum-Custom Sort Ascending-39', + 'SWYConverszGenAlbum-Is Prototype-40', + 'SWYConverszGenAlbum-Project Document Type-41', + 'SWYConverszGenAlbum-Custom Query Type-42', + 'SWYConverszGenAlbum-Trashed State-43', + ('SWYConverszGenAlbum-Trash Date-44', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-45', + 'SWYConverszGenAlbum-Privacy State-46') + data_list = get_sqlite_db_records(source_path, query) - tsvname = 'Ph26.2-Syndication PL Assets-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - tlactivity = 'Ph26.2-Syndication PL Assets-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier', + zAsset.Z_PK AS 'zAsset-zPK', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos.sqlite-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos.sqlite-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate', + SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key', + CASE SWYConverszGenAlbum.ZISPINNED + WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || '' + END AS 'SWYConverszGenAlbum-Pinned', + CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'SWYConverszGenAlbum-Custom Sort Key', + CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'SWYConverszGenAlbum-Custom Sort Ascending', + CASE SWYConverszGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || '' + END AS 'SWYConverszGenAlbum-Is Prototype', + CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'SWYConverszGenAlbum-Project Document Type', + CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'SWYConverszGenAlbum-Custom Query Type', + CASE SWYConverszGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0' + WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || '' + END AS 'SWYConverszGenAlbum-Trashed State', + DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date', + CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Delete State', + CASE SWYConverszGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || '' + END AS 'SWYConverszGenAlbum-Privacy State' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION + LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46])) - else: - logfunc('No assets with a ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER value from' - ' Syndication.photoslibrary-database-Photos.sqlite') + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-1', 'datetime'), + ('SWYConverszGenAlbum-Start Date-2', 'datetime'), + ('SWYConverszGenAlbum-End Date-3', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-4', + 'SWYConverszGenAlbum- Import Session ID-SWY-5', + 'SWYzGenAlbum-Imported by Bundle Identifier-6', + 'zAsset-zPK-7', + 'zAsset-Directory-Path-8', + 'zAsset-Filename-9', + 'zAddAssetAttr- Original Filename-10', + 'zCldMast- Original Filename-11', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', + 'zAsset-Syndication State-13', + 'zAsset-Bundle Scope-14', + 'zAddAssetAttr.Imported by Bundle Identifier-15', + 'zAddAssetAttr-Imported By Display Name-16', + 'zAsset-Visibility State-17', + 'zAsset-Saved Asset Type-18', + 'zAddAssetAttr-Share Type-19', + 'zAsset-Active Library Scope Participation State-20', + ('zAsset- SortToken -CameraRoll-21', 'datetime'), + ('zAsset-Added Date-22', 'datetime'), + ('zCldMast-Creation Date-23', 'datetime'), + 'zAddAssetAttr-Time Zone Name-24', + 'zAddAssetAttr-EXIF-String-25', + ('zAsset-Modification Date-26', 'datetime'), + ('zAsset-Last Shared Date-27', 'datetime'), + ('zAsset-Trashed Date-28', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-29', + 'zAddAssetAttr-zPK-30', + 'zAsset-UUID = store.cloudphotodb-31', + 'zAddAssetAttr-Master Fingerprint-32', + 'SWYConverszGenAlbum-Album Kind-33', + 'SWYConverszGenAlbum-Cloud_Local_State-34', + 'SWYConverszGenAlbum- Syndicate-35', + 'SWYConverszGenAlbum-Sync Event Order Key-36', + 'SWYConverszGenAlbum-Pinned-37', + 'SWYConverszGenAlbum-Custom Sort Key-38', + 'SWYConverszGenAlbum-Custom Sort Ascending-39', + 'SWYConverszGenAlbum-Is Prototype-40', + 'SWYConverszGenAlbum-Project Document Type-41', + 'SWYConverszGenAlbum-Custom Query Type-42', + 'SWYConverszGenAlbum-Trashed State-43', + ('SWYConverszGenAlbum-Trash Date-44', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-45', + 'SWYConverszGenAlbum-Privacy State-46') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', @@ -1371,8 +1693,8 @@ def get_ph26syndicationplassetssyndpl(files_found, report_folder, seeker, wrap_t zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash', CASE SWYConverszGenAlbum.ZKIND WHEN 2 THEN '2-Non-Shared-Album-2' WHEN 1505 THEN '1505-Shared-Album-1505' @@ -1448,153 +1770,70 @@ def get_ph26syndicationplassetssyndpl(files_found, report_folder, seeker, wrap_t LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION - LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = SWYConverszGenAlbum.Z_PK - LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS + LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = SWYConverszGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAddAssetAttr.ZSYNDICATIONIDENTIFIER IS NOT NULL ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47])) - - counter += 1 - - description = 'Parses Syndication ID and Syndication Photos Library assets which includes' \ - ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' \ - ' Syndication.photoslibrary-database-Photos.sqlite' \ - ' and supports iOS 16-17. Parses assets that have a ZADDITIONALASSETATTRIBUTES' \ - ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields' \ - ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:' \ - ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1' \ - ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' \ - ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' \ - ' 9-SyndPs-STILLTESTING_Sent_SWY-9' \ - ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10 ZASSET ZSAVEDASSETTYPE:' \ - ' 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - report = ArtifactHtmlReport('Ph26.2-Syndication PL Assets-SyndPL') - report.start_artifact_report(report_folder, 'Ph26.2-Syndication PL Assets-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'SWYConverszGenAlbum-Creation Date-1', - 'SWYConverszGenAlbum-Start Date-2', - 'SWYConverszGenAlbum-End Date-3', - 'zAsset- Conversation= zGenAlbum_zPK-4', - 'SWYConverszGenAlbum- Import Session ID-SWY-5', - 'SWYzGenAlbum-Imported by Bundle Identifier-6', - 'zAsset-zPK-7', - 'zAsset-Directory-Path-8', - 'zAsset-Filename-9', - 'zAddAssetAttr- Original Filename-10', - 'zCldMast- Original Filename-11', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', - 'zAsset-Syndication State-13', - 'zAsset-Bundle Scope-14', - 'zAddAssetAttr.Imported by Bundle Identifier-15', - 'zAddAssetAttr-Imported By Display Name-16', - 'zAsset-Visibility State-17', - 'zAsset-Saved Asset Type-18', - 'zAddAssetAttr-Share Type-19', - 'zAsset-Active Library Scope Participation State-20', - 'zAsset- SortToken -CameraRoll-21', - 'zAsset-Added Date-22', - 'zCldMast-Creation Date-23', - 'zAddAssetAttr-Time Zone Name-24', - 'zAddAssetAttr-EXIF-String-25', - 'zAsset-Modification Date-26', - 'zAsset-Last Shared Date-27', - 'zAsset-Trashed Date-28', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-29', - 'zAddAssetAttr-zPK-30', - 'zAsset-UUID = store.cloudphotodb-31', - 'zAddAssetAttr-Original Stable Hash-iOS18-32', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-33', - 'SWYConverszGenAlbum-Album Kind-34', - 'SWYConverszGenAlbum-Cloud_Local_State-35', - 'SWYConverszGenAlbum- Syndicate-36', - 'SWYConverszGenAlbum-Sync Event Order Key-37', - 'SWYConverszGenAlbum-Pinned-38', - 'SWYConverszGenAlbum-Custom Sort Key-39', - 'SWYConverszGenAlbum-Custom Sort Ascending-40', - 'SWYConverszGenAlbum-Is Prototype-41', - 'SWYConverszGenAlbum-Project Document Type-42', - 'SWYConverszGenAlbum-Custom Query Type-43', - 'SWYConverszGenAlbum-Trashed State-44', - 'SWYConverszGenAlbum-Trash Date-45', - 'SWYConverszGenAlbum-Cloud Delete State-46', - 'SWYConverszGenAlbum-Privacy State-47') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph26.2-Syndication PL Assets-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph26.2-Syndication PL Assets-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No assets with a ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER value from' - ' Syndication.photoslibrary-database-Photos.sqlite') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47])) + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-1', 'datetime'), + ('SWYConverszGenAlbum-Start Date-2', 'datetime'), + ('SWYConverszGenAlbum-End Date-3', 'datetime'), + 'zAsset- Conversation= zGenAlbum_zPK-4', + 'SWYConverszGenAlbum- Import Session ID-SWY-5', + 'SWYzGenAlbum-Imported by Bundle Identifier-6', + 'zAsset-zPK-7', + 'zAsset-Directory-Path-8', + 'zAsset-Filename-9', + 'zAddAssetAttr- Original Filename-10', + 'zCldMast- Original Filename-11', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', + 'zAsset-Syndication State-13', + 'zAsset-Bundle Scope-14', + 'zAddAssetAttr.Imported by Bundle Identifier-15', + 'zAddAssetAttr-Imported By Display Name-16', + 'zAsset-Visibility State-17', + 'zAsset-Saved Asset Type-18', + 'zAddAssetAttr-Share Type-19', + 'zAsset-Active Library Scope Participation State-20', + ('zAsset- SortToken -CameraRoll-21', 'datetime'), + ('zAsset-Added Date-22', 'datetime'), + ('zCldMast-Creation Date-23', 'datetime'), + 'zAddAssetAttr-Time Zone Name-24', + 'zAddAssetAttr-EXIF-String-25', + ('zAsset-Modification Date-26', 'datetime'), + ('zAsset-Last Shared Date-27', 'datetime'), + ('zAsset-Trashed Date-28', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-29', + 'zAddAssetAttr-zPK-30', + 'zAsset-UUID = store.cloudphotodb-31', + 'zAddAssetAttr-Original Stable Hash-32', + 'zAddAssetAttr.Adjusted Stable Hash-33', + 'SWYConverszGenAlbum-Album Kind-34', + 'SWYConverszGenAlbum-Cloud_Local_State-35', + 'SWYConverszGenAlbum- Syndicate-36', + 'SWYConverszGenAlbum-Sync Event Order Key-37', + 'SWYConverszGenAlbum-Pinned-38', + 'SWYConverszGenAlbum-Custom Sort Key-39', + 'SWYConverszGenAlbum-Custom Sort Ascending-40', + 'SWYConverszGenAlbum-Is Prototype-41', + 'SWYConverszGenAlbum-Project Document Type-42', + 'SWYConverszGenAlbum-Custom Query Type-43', + 'SWYConverszGenAlbum-Trashed State-44', + ('SWYConverszGenAlbum-Trash Date-45', 'datetime'), + 'SWYConverszGenAlbum-Cloud Delete State-46', + 'SWYConverszGenAlbum-Privacy State-47') + data_list = get_sqlite_db_records(source_path, query) -__artifacts_v2__ = { - 'Ph26-1-Syndication ID Assets-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph26.1 Syndication ID Assets', - 'description': 'Parses Syndication ID and Syndication Photos Library assets which includes' - ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' - ' Syndication.photoslibrary-database-Photos.sqlite' - ' and supports iOS 15-18. Parses assets that have a ZADDITIONALASSETATTRIBUTES' - ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields' - ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:' - ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1' - ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' - ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' - ' 9-SyndPs-STILLTESTING_Sent_SWY-9' - ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' - ' ZASSET ZSAVEDASSETTYPE: 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-13', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-C-Other_Artifacts', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph26syndicationidassetsphdapsql' - }, - 'Ph26-2-Syndication PL Assets-SyndPL': { - 'name': 'SyndPL Photos.sqlite Ph26.2 Syndication PL Assets', - 'description': 'Parses Syndication ID and Syndication Photos Library assets which includes' - ' Shared with You Conversation assets from PhotoData-Photos.sqlite and' - ' Syndication.photoslibrary-database-Photos.sqlite' - ' and supports iOS 15-18. Parses assets that have a ZADDITIONALASSETATTRIBUTES' - ' ZSYNDICATIONIDENTIFIER value. ZASSET ZSAVEDASSETTYPE and ZASSET ZSYNDICATIONSTATE fields' - ' can be used to filter those results: ZADDITIONALASSETATTRIBUTES ZSYNDICATIONIDENTIFIER:' - ' 0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0 1-SyndPs-Sent-SWY_Synd_Asset-1' - ' 2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' - ' 8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' - ' 9-SyndPs-STILLTESTING_Sent_SWY-9' - ' 10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' - ' ZASSET ZSAVEDASSETTYPE: 12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-13', - 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', - 'notes': '', - 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*', - 'function': 'get_ph26syndicationplassetssyndpl' - } -} + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph2BasicAssetandAlbumData.py b/scripts/artifacts/Ph2BasicAssetandAlbumData.py index fd359560..44152f45 100644 --- a/scripts/artifacts/Ph2BasicAssetandAlbumData.py +++ b/scripts/artifacts/Ph2BasicAssetandAlbumData.py @@ -1,45 +1,69 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses basic asset record data from Photos.sqlite to include associated album data and supports iOS 11-18. -# The results could produce multiple records for a single asset. -# Use '2-Non-Shared-Album-2' in the search box to view Assets in Non-Shared Albums. -# Use '1505-Shared-Album-1505' in the search box to view Assets in Shared Albums. -# Use '1509-SWY_Synced_Conversation_Media-1509' in the search box to view Shared with You Conversation Assets. -# This parser is based on research and SQLite queries written by Scott Koenig -# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools -# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results. -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph2_1AssetBasicGenAlbumDataPhDaPsql': { + 'name': 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', + 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for basic asset and album data.' + ' The results may contain multiple records per ZASSET table Z_PK value and supports iOS 11-18.' + ' Use 2-Non-Shared-Album-2 in the search box to view Non-Shared Albums Assets.' + ' Use 1505-Shared-Album-1505 in the search box to view Shared Albums Assets.' + ' Use 1509-SWY_Synced_Conversation_Media-1509 in the search box to view' + ' Shared with You Conversation Identifiers Assets.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-A-Asset_Basic_Data', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + }, + 'Ph2_2AssetBasicConversationDataSyndPL': { + 'name': 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', + 'description': 'Parses basic asset row data from -Syndication.photoslibrary-database-Photos.sqlite' + ' for basic asset and album data. The results may contain multiple records' + ' per ZASSET table Z_PK value and supports iOS 11-18.' + ' Use -Non-Shared-Album-2 in the search box to view Non-Shared Albums Assets.' + ' Use 1505-Shared-Album-1505 in the search box to view Shared Albums Assets.' + ' Use 1509-SWY_Synced_Conversation_Media-1509 in the search box to view' + ' Shared with You Conversation Identifiers Assets.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', + 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly - +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc -def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +@artifact_processor +def Ph2_1AssetBasicGenAlbumDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for PhotoData-Photos.sqlite basic asset and album data from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -178,102 +202,77 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr LEFT JOIN Z_20ASSETS z20Assets ON z20Assets.Z_27ASSETS = zAsset.Z_PK LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z20Assets.Z_20ALBUMS ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], row[46], row[47])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' basic asset and album data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 11.' \ - ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \ - ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \ - ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \ - ' Shared with You Conversation Identifiers Assets.' - report = ArtifactHtmlReport('Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAsset-Modification Date-5', - 'zAsset-Last Shared Date-6', - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11', - 'zAsset-Trashed Date-12', - 'zAsset-Saved Asset Type-13', - 'zAddAssetAttr- Creator Bundle ID-14', - 'zAddAssetAttr-Imported by-15', - 'zAsset-Visibility State-16', - 'zAddAssetAttr-Camera Captured Device-17', - 'zCldMast-Cloud Local State-18', - 'zCldMast-Import Date-19', - 'zCldMast-Import Session ID- AirDrop-StillTesting-20', - 'zAsset-Cloud Batch Publish Date-21', - 'zAsset-Cloud Server Publish Date-22', - 'zAsset-Cloud Download Requests-23', - 'zAsset-Cloud Batch ID-24', - 'zAsset-Latitude-25', - 'zAsset-Longitude-26', - 'zAddAssetAttr-Location Hash-27', - 'zAddAssetAttr-Shifted Location Valid-28', - 'zAddAssetAttr-Shifted Location Data-29', - 'zAddAssetAttr-Reverse Location Is Valid-30', - 'zAddAssetAttr-Reverse Location Data-31', - 'zGenAlbum-Start Date-32', - 'zGenAlbum-End Date-33', - 'zGenAlbum-Album Kind-34', - 'zGenAlbum-Title-User&System Applied-35', - 'zGenAlbum- Import Session ID-36', - 'zGenAlbum-Cached Photos Count-37', - 'zGenAlbum-Cached Videos Count-38', - 'zGenAlbum-Cached Count-39', - 'zGenAlbum-Trashed State-40', - 'zGenAlbum-Trash Date-41', - 'zGenAlbum-UUID-42', - 'zGenAlbum-Cloud GUID-43', - 'zAsset-zPK-44', - 'zAddAssetAttr-zPK-45', - 'zAsset-UUID = store.cloudphotodb-46', - 'zAddAssetAttr-Master Fingerprint-47') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite basic asset and album data') - - db.close() - return + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + ('zAsset-Modification Date-5', 'datetime'), + ('zAsset-Last Shared Date-6', 'datetime'), + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11', + ('zAsset-Trashed Date-12', 'datetime'), + 'zAsset-Saved Asset Type-13', + 'zAddAssetAttr- Creator Bundle ID-14', + 'zAddAssetAttr-Imported by-15', + 'zAsset-Visibility State-16', + 'zAddAssetAttr-Camera Captured Device-17', + 'zCldMast-Cloud Local State-18', + ('zCldMast-Import Date-19', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-20', + ('zAsset-Cloud Batch Publish Date-21', 'datetime'), + ('zAsset-Cloud Server Publish Date-22', 'datetime'), + 'zAsset-Cloud Download Requests-23', + 'zAsset-Cloud Batch ID-24', + 'zAsset-Latitude-25', + 'zAsset-Longitude-26', + 'zAddAssetAttr-Location Hash-27', + 'zAddAssetAttr-Shifted Location Valid-28', + 'zAddAssetAttr-Shifted Location Data-29', + 'zAddAssetAttr-Reverse Location Is Valid-30', + 'zAddAssetAttr-Reverse Location Data-31', + ('zGenAlbum-Start Date-32', 'datetime'), + ('zGenAlbum-End Date-33', 'datetime'), + 'zGenAlbum-Album Kind-34', + 'zGenAlbum-Title-User&System Applied-35', + 'zGenAlbum- Import Session ID-36', + 'zGenAlbum-Cached Photos Count-37', + 'zGenAlbum-Cached Videos Count-38', + 'zGenAlbum-Cached Count-39', + 'zGenAlbum-Trashed State-40', + ('zGenAlbum-Trash Date-41', 'datetime'), + 'zGenAlbum-UUID-42', + 'zGenAlbum-Cloud GUID-43', + 'zAsset-zPK-44', + 'zAddAssetAttr-zPK-45', + 'zAsset-UUID = store.cloudphotodb-46', + 'zAddAssetAttr-Master Fingerprint-47') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("12")) & (version.parse(iosversion) < version.parse("13")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -412,102 +411,77 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr LEFT JOIN Z_23ASSETS z23Assets ON z23Assets.Z_30ASSETS = zAsset.Z_PK LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z23Assets.Z_23ALBUMS ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], row[46], row[47])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' basic asset and album data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 12.' \ - ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \ - ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \ - ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \ - ' Shared with You Conversation Identifiers Assets.' - report = ArtifactHtmlReport('Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAsset-Modification Date-5', - 'zAsset-Last Shared Date-6', - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11', - 'zAsset-Trashed Date-12', - 'zAsset-Saved Asset Type-13', - 'zAddAssetAttr- Creator Bundle ID-14', - 'zAddAssetAttr-Imported by-15', - 'zAsset-Visibility State-16', - 'zAddAssetAttr-Camera Captured Device-17', - 'zCldMast-Cloud Local State-18', - 'zCldMast-Import Date-19', - 'zCldMast-Import Session ID- AirDrop-StillTesting-20', - 'zAsset-Cloud Batch Publish Date-21', - 'zAsset-Cloud Server Publish Date-22', - 'zAsset-Cloud Download Requests-23', - 'zAsset-Cloud Batch ID-24', - 'zAsset-Latitude-25', - 'zAsset-Longitude-26', - 'zAddAssetAttr-Location Hash-27', - 'zAddAssetAttr-Shifted Location Valid-28', - 'zAddAssetAttr-Shifted Location Data-29', - 'zAddAssetAttr-Reverse Location Is Valid-30', - 'zAddAssetAttr-Reverse Location Data-31', - 'zGenAlbum-Start Date-32', - 'zGenAlbum-End Date-33', - 'zGenAlbum-Album Kind-34', - 'zGenAlbum-Title-User&System Applied-35', - 'zGenAlbum- Import Session ID-36', - 'zGenAlbum-Cached Photos Count-37', - 'zGenAlbum-Cached Videos Count-38', - 'zGenAlbum-Cached Count-39', - 'zGenAlbum-Trashed State-40', - 'zGenAlbum-Trash Date-41', - 'zGenAlbum-UUID-42', - 'zGenAlbum-Cloud GUID-43', - 'zAsset-zPK-44', - 'zAddAssetAttr-zPK-45', - 'zAsset-UUID = store.cloudphotodb-46', - 'zAddAssetAttr-Master Fingerprint-47') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite basic asset and album data') - - db.close() - return + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + ('zAsset-Modification Date-5', 'datetime'), + ('zAsset-Last Shared Date-6', 'datetime'), + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11', + ('zAsset-Trashed Date-12', 'datetime'), + 'zAsset-Saved Asset Type-13', + 'zAddAssetAttr- Creator Bundle ID-14', + 'zAddAssetAttr-Imported by-15', + 'zAsset-Visibility State-16', + 'zAddAssetAttr-Camera Captured Device-17', + 'zCldMast-Cloud Local State-18', + ('zCldMast-Import Date-19', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-20', + ('zAsset-Cloud Batch Publish Date-21', 'datetime'), + ('zAsset-Cloud Server Publish Date-22', 'datetime'), + 'zAsset-Cloud Download Requests-23', + 'zAsset-Cloud Batch ID-24', + 'zAsset-Latitude-25', + 'zAsset-Longitude-26', + 'zAddAssetAttr-Location Hash-27', + 'zAddAssetAttr-Shifted Location Valid-28', + 'zAddAssetAttr-Shifted Location Data-29', + 'zAddAssetAttr-Reverse Location Is Valid-30', + 'zAddAssetAttr-Reverse Location Data-31', + ('zGenAlbum-Start Date-32', 'datetime'), + ('zGenAlbum-End Date-33', 'datetime'), + 'zGenAlbum-Album Kind-34', + 'zGenAlbum-Title-User&System Applied-35', + 'zGenAlbum- Import Session ID-36', + 'zGenAlbum-Cached Photos Count-37', + 'zGenAlbum-Cached Videos Count-38', + 'zGenAlbum-Cached Count-39', + 'zGenAlbum-Trashed State-40', + ('zGenAlbum-Trash Date-41', 'datetime'), + 'zGenAlbum-UUID-42', + 'zGenAlbum-Cloud GUID-43', + 'zAsset-zPK-44', + 'zAddAssetAttr-zPK-45', + 'zAsset-UUID = store.cloudphotodb-46', + 'zAddAssetAttr-Master Fingerprint-47') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -710,15 +684,11 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr LEFT JOIN Z_26ASSETS z26Assets ON z26Assets.Z_34ASSETS = zAsset.Z_PK LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z26Assets.Z_26ALBUMS ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -727,106 +697,84 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], row[64], row[65])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' basic asset and album data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 13.' \ - ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \ - ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \ - ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \ - ' Shared with You Conversation Identifiers Assets.' - report = ArtifactHtmlReport('Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Modification Date-7', - 'zAsset-Last Shared Date-8', - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAsset-Trashed Date-13', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', - 'zAsset-Saved Asset Type-15', - 'zAddAssetAttr- Creator Bundle ID-16', - 'zAddAssetAttr-Imported by-17', - 'zCldMast-Imported By-18', - 'zAsset-Visibility State-19', - 'zExtAttr-Camera Make-20', - 'zExtAttr-Camera Model-21', - 'zExtAttr-Lens Model-22', - 'zAddAssetAttr-Camera Captured Device-23', - 'zAddAssetAttr-Share Type-24', - 'zCldMast-Cloud Local State-25', - 'zCldMast-Import Date-26', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-27', - 'zAddAssetAttr-Import Session ID-28', - 'zAddAssetAttr-Alt Import Image Date-29', - 'zCldMast-Import Session ID- AirDrop-StillTesting-30', - 'zAsset-Cloud Batch Publish Date-31', - 'zAsset-Cloud Server Publish Date-32', - 'zAsset-Cloud Download Requests-33', - 'zAsset-Cloud Batch ID-34', - 'zAsset-Latitude-35', - 'zExtAttr-Latitude-36', - 'zAsset-Longitude-37', - 'zExtAttr-Longitude-38', - 'zAddAssetAttr-Location Hash-39', - 'zAddAssetAttr-Shifted Location Valid-40', - 'zAddAssetAttr-Shifted Location Data-41', - 'zAddAssetAttr-Reverse Location Is Valid-42', - 'zAddAssetAttr-Reverse Location Data-43', - 'AAAzCldMastMedData-zOPT-44', - 'zAddAssetAttr-Media Metadata Type-45', - 'AAAzCldMastMedData-Data-46', - 'CldMasterzCldMastMedData-zOPT-47', - 'zCldMast-Media Metadata Type-48', - 'CMzCldMastMedData-Data-49', - 'zGenAlbum-Start Date-50', - 'zGenAlbum-End Date-51', - 'zGenAlbum-Album Kind-52', - 'zGenAlbum-Title-User&System Applied-53', - 'zGenAlbum- Import Session ID-54', - 'zGenAlbum-Cached Photos Count-55', - 'zGenAlbum-Cached Videos Count-56', - 'zGenAlbum-Cached Count-57', - 'zGenAlbum-Trashed State-58', - 'zGenAlbum-Trash Date-59', - 'zGenAlbum-UUID-60', - 'zGenAlbum-Cloud GUID-61', - 'zAsset-zPK-62', - 'zAddAssetAttr-zPK-63', - 'zAsset-UUID = store.cloudphotodb-64', - 'zAddAssetAttr-Master Fingerprint-65') - - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite basic asset and album data') - - db.close() - return + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + ('zAsset-Trashed Date-13', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', + 'zAsset-Saved Asset Type-15', + 'zAddAssetAttr- Creator Bundle ID-16', + 'zAddAssetAttr-Imported by-17', + 'zCldMast-Imported By-18', + 'zAsset-Visibility State-19', + 'zExtAttr-Camera Make-20', + 'zExtAttr-Camera Model-21', + 'zExtAttr-Lens Model-22', + 'zAddAssetAttr-Camera Captured Device-23', + 'zAddAssetAttr-Share Type-24', + 'zCldMast-Cloud Local State-25', + ('zCldMast-Import Date-26', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-27', 'datetime'), + 'zAddAssetAttr-Import Session ID-28', + ('zAddAssetAttr-Alt Import Image Date-29', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-30', + ('zAsset-Cloud Batch Publish Date-31', 'datetime'), + ('zAsset-Cloud Server Publish Date-32', 'datetime'), + 'zAsset-Cloud Download Requests-33', + 'zAsset-Cloud Batch ID-34', + 'zAsset-Latitude-35', + 'zExtAttr-Latitude-36', + 'zAsset-Longitude-37', + 'zExtAttr-Longitude-38', + 'zAddAssetAttr-Location Hash-39', + 'zAddAssetAttr-Shifted Location Valid-40', + 'zAddAssetAttr-Shifted Location Data-41', + 'zAddAssetAttr-Reverse Location Is Valid-42', + 'zAddAssetAttr-Reverse Location Data-43', + 'AAAzCldMastMedData-zOPT-44', + 'zAddAssetAttr-Media Metadata Type-45', + 'AAAzCldMastMedData-Data-46', + 'CldMasterzCldMastMedData-zOPT-47', + 'zCldMast-Media Metadata Type-48', + 'CMzCldMastMedData-Data-49', + ('zGenAlbum-Start Date-50', 'datetime'), + ('zGenAlbum-End Date-51', 'datetime'), + 'zGenAlbum-Album Kind-52', + 'zGenAlbum-Title-User&System Applied-53', + 'zGenAlbum- Import Session ID-54', + 'zGenAlbum-Cached Photos Count-55', + 'zGenAlbum-Cached Videos Count-56', + 'zGenAlbum-Cached Count-57', + 'zGenAlbum-Trashed State-58', + ('zGenAlbum-Trash Date-59', 'datetime'), + 'zGenAlbum-UUID-60', + 'zGenAlbum-Cloud GUID-61', + 'zAsset-zPK-62', + 'zAddAssetAttr-zPK-63', + 'zAsset-UUID = store.cloudphotodb-64', + 'zAddAssetAttr-Master Fingerprint-65') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -1043,15 +991,11 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr LEFT JOIN Z_26ASSETS z26Assets ON z26Assets.Z_3ASSETS = zAsset.Z_PK LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z26Assets.Z_26ALBUMS ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -1060,112 +1004,91 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' basic asset and album data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 14.' \ - ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \ - ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \ - ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \ - ' Shared with You Conversation Identifiers Assets.' - report = ArtifactHtmlReport('Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Modification Date-7', - 'zAsset-Last Shared Date-8', - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAsset-Trashed Date-13', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', - 'zAsset-Saved Asset Type-15', - 'zAddAssetAttr-Creator Bundle ID-16', - 'zAddAssetAttr-Imported By Display Name-17', - 'zAddAssetAttr-Imported by-18', - 'zCldMast-Imported by Bundle ID-19', - 'zCldMast-Imported by Display Name-20', - 'zCldMast-Imported By-21', - 'zAsset-Visibility State-22', - 'zExtAttr-Camera Make-23', - 'zExtAttr-Camera Model-24', - 'zExtAttr-Lens Model-25', - 'zAsset-Derived Camera Capture Device-26', - 'zAddAssetAttr-Camera Captured Device-27', - 'zAddAssetAttr-Share Type-28', - 'zCldMast-Cloud Local State-29', - 'zCldMast-Import Date-30', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-31', - 'zAddAssetAttr-Import Session ID-32', - 'zAddAssetAttr-Alt Import Image Date-33', - 'zCldMast-Import Session ID- AirDrop-StillTesting-34', - 'zAsset-Cloud Batch Publish Date-35', - 'zAsset-Cloud Server Publish Date-36', - 'zAsset-Cloud Download Requests-37', - 'zAsset-Cloud Batch ID-38', - 'zAsset-Latitude-39', - 'zExtAttr-Latitude-40', - 'zAsset-Longitude-41', - 'zExtAttr-Longitude-42', - 'zAddAssetAttr-GPS Horizontal Accuracy-43', - 'zAddAssetAttr-Location Hash-44', - 'zAddAssetAttr-Shifted Location Valid-45', - 'zAddAssetAttr-Shifted Location Data-46', - 'zAddAssetAttr-Reverse Location Is Valid-47', - 'zAddAssetAttr-Reverse Location Data-48', - 'AAAzCldMastMedData-zOPT-49', - 'zAddAssetAttr-Media Metadata Type-50', - 'AAAzCldMastMedData-Data-51', - 'CldMasterzCldMastMedData-zOPT-52', - 'zCldMast-Media Metadata Type-53', - 'CMzCldMastMedData-Data-54', - 'zGenAlbum-Creation Date-55', - 'zGenAlbum-Start Date-56', - 'zGenAlbum-End Date-57', - 'zGenAlbum-Album Kind-58', - 'zGenAlbum-Title-User&System Applied-59', - 'zGenAlbum- Import Session ID-60', - 'zGenAlbum-Creator Bundle Identifier-61', - 'zGenAlbum-Cached Photos Count-62', - 'zGenAlbum-Cached Videos Count-63', - 'zGenAlbum-Cached Count-64', - 'zGenAlbum-Trashed State-65', - 'zGenAlbum-Trash Date-66', - 'zGenAlbum-UUID-67', - 'zGenAlbum-Cloud GUID-68', - 'zAsset-zPK-69', - 'zAddAssetAttr-zPK-70', - 'zAsset-UUID = store.cloudphotodb-71', - 'zAddAssetAttr-Master Fingerprint-72') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite basic asset and album data') - - db.close() - return + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + ('zAsset-Trashed Date-13', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', + 'zAsset-Saved Asset Type-15', + 'zAddAssetAttr-Creator Bundle ID-16', + 'zAddAssetAttr-Imported By Display Name-17', + 'zAddAssetAttr-Imported by-18', + 'zCldMast-Imported by Bundle ID-19', + 'zCldMast-Imported by Display Name-20', + 'zCldMast-Imported By-21', + 'zAsset-Visibility State-22', + 'zExtAttr-Camera Make-23', + 'zExtAttr-Camera Model-24', + 'zExtAttr-Lens Model-25', + 'zAsset-Derived Camera Capture Device-26', + 'zAddAssetAttr-Camera Captured Device-27', + 'zAddAssetAttr-Share Type-28', + 'zCldMast-Cloud Local State-29', + ('zCldMast-Import Date-30', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-31', 'datetime'), + 'zAddAssetAttr-Import Session ID-32', + ('zAddAssetAttr-Alt Import Image Date-33', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-34', + ('zAsset-Cloud Batch Publish Date-35', 'datetime'), + ('zAsset-Cloud Server Publish Date-36', 'datetime'), + 'zAsset-Cloud Download Requests-37', + 'zAsset-Cloud Batch ID-38', + 'zAsset-Latitude-39', + 'zExtAttr-Latitude-40', + 'zAsset-Longitude-41', + 'zExtAttr-Longitude-42', + 'zAddAssetAttr-GPS Horizontal Accuracy-43', + 'zAddAssetAttr-Location Hash-44', + 'zAddAssetAttr-Shifted Location Valid-45', + 'zAddAssetAttr-Shifted Location Data-46', + 'zAddAssetAttr-Reverse Location Is Valid-47', + 'zAddAssetAttr-Reverse Location Data-48', + 'AAAzCldMastMedData-zOPT-49', + 'zAddAssetAttr-Media Metadata Type-50', + 'AAAzCldMastMedData-Data-51', + 'CldMasterzCldMastMedData-zOPT-52', + 'zCldMast-Media Metadata Type-53', + 'CMzCldMastMedData-Data-54', + ('zGenAlbum-Creation Date-55', 'datetime'), + ('zGenAlbum-Start Date-56', 'datetime'), + ('zGenAlbum-End Date-57', 'datetime'), + 'zGenAlbum-Album Kind-58', + 'zGenAlbum-Title-User&System Applied-59', + 'zGenAlbum- Import Session ID-60', + 'zGenAlbum-Creator Bundle Identifier-61', + 'zGenAlbum-Cached Photos Count-62', + 'zGenAlbum-Cached Videos Count-63', + 'zGenAlbum-Cached Count-64', + 'zGenAlbum-Trashed State-65', + ('zGenAlbum-Trash Date-66', 'datetime'), + 'zGenAlbum-UUID-67', + 'zGenAlbum-Cloud GUID-68', + 'zAsset-zPK-69', + 'zAddAssetAttr-zPK-70', + 'zAsset-UUID = store.cloudphotodb-71', + 'zAddAssetAttr-Master Fingerprint-72') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -1403,15 +1326,11 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z27Assets.Z_27ALBUMS LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -1421,117 +1340,96 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], row[73], row[74], row[75], row[76], row[77])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' basic asset and album data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 15.' \ - ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \ - ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \ - ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \ - ' Shared with You Conversation Identifiers Assets.' - report = ArtifactHtmlReport('Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Modification Date-7', - 'zAsset-Last Shared Date-8', - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', - 'zAsset- Conversation= zGenAlbum_zPK-14', - 'SWYConverszGenAlbum- Import Session ID-15', - 'zAsset-Syndication State-16', - 'zAsset-Trashed Date-17', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18', - 'zAsset-Saved Asset Type-19', - 'zAddAssetAttr-Imported by Bundle ID-20', - 'zAddAssetAttr-Imported By Display Name-21', - 'zAddAssetAttr-Imported by-22', - 'zCldMast-Imported by Bundle ID-23', - 'zCldMast-Imported by Display Name-24', - 'zCldMast-Imported By-25', - 'zAsset-Visibility State-26', - 'zExtAttr-Camera Make-27', - 'zExtAttr-Camera Model-28', - 'zExtAttr-Lens Model-29', - 'zAsset-Derived Camera Capture Device-30', - 'zAddAssetAttr-Camera Captured Device-31', - 'zAddAssetAttr-Share Type-32', - 'zCldMast-Cloud Local State-33', - 'zCldMast-Import Date-34', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-35', - 'zAddAssetAttr-Import Session ID-36', - 'zAddAssetAttr-Alt Import Image Date-37', - 'zCldMast-Import Session ID- AirDrop-StillTesting-38', - 'zAsset-Cloud Batch Publish Date-39', - 'zAsset-Cloud Server Publish Date-40', - 'zAsset-Cloud Download Requests-41', - 'zAsset-Cloud Batch ID-42', - 'zAsset-Latitude-43', - 'zExtAttr-Latitude-44', - 'zAsset-Longitude-45', - 'zExtAttr-Longitude-46', - 'zAddAssetAttr-GPS Horizontal Accuracy-47', - 'zAddAssetAttr-Location Hash-48', - 'zAddAssetAttr-Shifted Location Valid-49', - 'zAddAssetAttr-Shifted Location Data-50', - 'zAddAssetAttr-Reverse Location Is Valid-51', - 'zAddAssetAttr-Reverse Location Data-52', - 'AAAzCldMastMedData-zOPT-53', - 'zAddAssetAttr-Media Metadata Type-54', - 'AAAzCldMastMedData-Data-55', - 'CldMasterzCldMastMedData-zOPT-56', - 'zCldMast-Media Metadata Type-57', - 'CMzCldMastMedData-Data-58', - 'zAsset-Bundle Scope-59', - 'zGenAlbum-Creation Date-60', - 'zGenAlbum-Start Date-61', - 'zGenAlbum-End Date-62', - 'zGenAlbum-Album Kind-63', - 'zGenAlbum-Title-User&System Applied-64', - 'zGenAlbum- Import Session ID-65', - 'zGenAlbum-Imported by Bundle Identifier-66', - 'zGenAlbum-Cached Photos Count-67', - 'zGenAlbum-Cached Videos Count-68', - 'zGenAlbum-Cached Count-69', - 'zGenAlbum-Trashed State-70', - 'zGenAlbum-Trash Date-71', - 'zGenAlbum-UUID-72', - 'zGenAlbum-Cloud GUID-73', - 'zAsset-zPK-74', - 'zAddAssetAttr-zPK-75', - 'zAsset-UUID = store.cloudphotodb-76', - 'zAddAssetAttr-Master Fingerprint-77') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite basic asset and album data') - - db.close() - return + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', + 'zAsset- Conversation= zGenAlbum_zPK-14', + 'SWYConverszGenAlbum- Import Session ID-15', + 'zAsset-Syndication State-16', + ('zAsset-Trashed Date-17', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18', + 'zAsset-Saved Asset Type-19', + 'zAddAssetAttr-Imported by Bundle ID-20', + 'zAddAssetAttr-Imported By Display Name-21', + 'zAddAssetAttr-Imported by-22', + 'zCldMast-Imported by Bundle ID-23', + 'zCldMast-Imported by Display Name-24', + 'zCldMast-Imported By-25', + 'zAsset-Visibility State-26', + 'zExtAttr-Camera Make-27', + 'zExtAttr-Camera Model-28', + 'zExtAttr-Lens Model-29', + 'zAsset-Derived Camera Capture Device-30', + 'zAddAssetAttr-Camera Captured Device-31', + 'zAddAssetAttr-Share Type-32', + 'zCldMast-Cloud Local State-33', + ('zCldMast-Import Date-34', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-35', 'datetime'), + 'zAddAssetAttr-Import Session ID-36', + ('zAddAssetAttr-Alt Import Image Date-37', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-38', + ('zAsset-Cloud Batch Publish Date-39', 'datetime'), + ('zAsset-Cloud Server Publish Date-40', 'datetime'), + 'zAsset-Cloud Download Requests-41', + 'zAsset-Cloud Batch ID-42', + 'zAsset-Latitude-43', + 'zExtAttr-Latitude-44', + 'zAsset-Longitude-45', + 'zExtAttr-Longitude-46', + 'zAddAssetAttr-GPS Horizontal Accuracy-47', + 'zAddAssetAttr-Location Hash-48', + 'zAddAssetAttr-Shifted Location Valid-49', + 'zAddAssetAttr-Shifted Location Data-50', + 'zAddAssetAttr-Reverse Location Is Valid-51', + 'zAddAssetAttr-Reverse Location Data-52', + 'AAAzCldMastMedData-zOPT-53', + 'zAddAssetAttr-Media Metadata Type-54', + 'AAAzCldMastMedData-Data-55', + 'CldMasterzCldMastMedData-zOPT-56', + 'zCldMast-Media Metadata Type-57', + 'CMzCldMastMedData-Data-58', + 'zAsset-Bundle Scope-59', + ('zGenAlbum-Creation Date-60', 'datetime'), + ('zGenAlbum-Start Date-61', 'datetime'), + ('zGenAlbum-End Date-62', 'datetime'), + 'zGenAlbum-Album Kind-63', + 'zGenAlbum-Title-User&System Applied-64', + 'zGenAlbum- Import Session ID-65', + 'zGenAlbum-Imported by Bundle Identifier-66', + 'zGenAlbum-Cached Photos Count-67', + 'zGenAlbum-Cached Videos Count-68', + 'zGenAlbum-Cached Count-69', + 'zGenAlbum-Trashed State-70', + ('zGenAlbum-Trash Date-71', 'datetime'), + 'zGenAlbum-UUID-72', + 'zGenAlbum-Cloud GUID-73', + 'zAsset-zPK-74', + 'zAddAssetAttr-zPK-75', + 'zAsset-UUID = store.cloudphotodb-76', + 'zAddAssetAttr-Master Fingerprint-77') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -1775,15 +1673,11 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -1793,119 +1687,98 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], row[73], row[74], row[75], row[76], row[77], row[78], row[79])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' basic asset and album data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 16.' \ - ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \ - ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \ - ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \ - ' Shared with You Conversation Identifiers Assets.' - report = ArtifactHtmlReport('Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Modification Date-7', - 'zAsset-Last Shared Date-8', - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', - 'zAsset- Conversation= zGenAlbum_zPK-14', - 'SWYConverszGenAlbum- Import Session ID-15', - 'zAsset-Syndication State-16', - 'zAsset-Trashed Date-17', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-19', - 'zAsset-Saved Asset Type-20', - 'zAddAssetAttr-Imported by Bundle ID-21', - 'zAddAssetAttr-Imported By Display Name-22', - 'zAddAssetAttr-Imported by-23', - 'zCldMast-Imported by Bundle ID-24', - 'zCldMast-Imported by Display Name-25', - 'zCldMast-Imported By-26', - 'zAsset-Visibility State-27', - 'zExtAttr-Camera Make-28', - 'zExtAttr-Camera Model-29', - 'zExtAttr-Lens Model-30', - 'zAsset-Derived Camera Capture Device-31', - 'zAddAssetAttr-Camera Captured Device-32', - 'zAddAssetAttr-Share Type-33', - 'zCldMast-Cloud Local State-34', - 'zCldMast-Import Date-35', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-36', - 'zAddAssetAttr-Import Session ID-37', - 'zAddAssetAttr-Alt Import Image Date-38', - 'zCldMast-Import Session ID- AirDrop-StillTesting-39', - 'zAsset-Cloud Batch Publish Date-40', - 'zAsset-Cloud Server Publish Date-41', - 'zAsset-Cloud Download Requests-42', - 'zAsset-Cloud Batch ID-43', - 'zAsset-Latitude-44', - 'zExtAttr-Latitude-45', - 'zAsset-Longitude-46', - 'zExtAttr-Longitude-47', - 'zAddAssetAttr-GPS Horizontal Accuracy-48', - 'zAddAssetAttr-Location Hash-49', - 'zAddAssetAttr-Shifted Location Valid-50', - 'zAddAssetAttr-Shifted Location Data-51', - 'zAddAssetAttr-Reverse Location Is Valid-52', - 'zAddAssetAttr-Reverse Location Data-53', - 'AAAzCldMastMedData-zOPT-54', - 'zAddAssetAttr-Media Metadata Type-55', - 'AAAzCldMastMedData-Data-56', - 'CldMasterzCldMastMedData-zOPT-57', - 'zCldMast-Media Metadata Type-58', - 'CMzCldMastMedData-Data-59', - 'zAsset-Bundle Scope-60', - 'zGenAlbum-Creation Date-61', - 'zGenAlbum-Start Date-62', - 'zGenAlbum-End Date-63', - 'zGenAlbum-Album Kind-64', - 'zGenAlbum-Title-User&System Applied-65', - 'zGenAlbum- Import Session ID-66', - 'zGenAlbum-Imported by Bundle Identifier-67', - 'zGenAlbum-Cached Photos Count-68', - 'zGenAlbum-Cached Videos Count-69', - 'zGenAlbum-Cached Count-70', - 'zGenAlbum-Trashed State-71', - 'zGenAlbum-Trash Date-72', - 'zGenAlbum-UUID-73', - 'zGenAlbum-Cloud GUID-74', - 'zAsset-Active Library Scope Participation State-75', - 'zAsset-zPK-76', - 'zAddAssetAttr-zPK-77', - 'zAsset-UUID = store.cloudphotodb-78', - 'zAddAssetAttr-Master Fingerprint-79') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite basic asset and album data') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', + 'zAsset- Conversation= zGenAlbum_zPK-14', + 'SWYConverszGenAlbum- Import Session ID-15', + 'zAsset-Syndication State-16', + ('zAsset-Trashed Date-17', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-19', + 'zAsset-Saved Asset Type-20', + 'zAddAssetAttr-Imported by Bundle ID-21', + 'zAddAssetAttr-Imported By Display Name-22', + 'zAddAssetAttr-Imported by-23', + 'zCldMast-Imported by Bundle ID-24', + 'zCldMast-Imported by Display Name-25', + 'zCldMast-Imported By-26', + 'zAsset-Visibility State-27', + 'zExtAttr-Camera Make-28', + 'zExtAttr-Camera Model-29', + 'zExtAttr-Lens Model-30', + 'zAsset-Derived Camera Capture Device-31', + 'zAddAssetAttr-Camera Captured Device-32', + 'zAddAssetAttr-Share Type-33', + 'zCldMast-Cloud Local State-34', + ('zCldMast-Import Date-35', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-36', 'datetime'), + 'zAddAssetAttr-Import Session ID-37', + ('zAddAssetAttr-Alt Import Image Date-38', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-39', + ('zAsset-Cloud Batch Publish Date-40', 'datetime'), + ('zAsset-Cloud Server Publish Date-41', 'datetime'), + 'zAsset-Cloud Download Requests-42', + 'zAsset-Cloud Batch ID-43', + 'zAsset-Latitude-44', + 'zExtAttr-Latitude-45', + 'zAsset-Longitude-46', + 'zExtAttr-Longitude-47', + 'zAddAssetAttr-GPS Horizontal Accuracy-48', + 'zAddAssetAttr-Location Hash-49', + 'zAddAssetAttr-Shifted Location Valid-50', + 'zAddAssetAttr-Shifted Location Data-51', + 'zAddAssetAttr-Reverse Location Is Valid-52', + 'zAddAssetAttr-Reverse Location Data-53', + 'AAAzCldMastMedData-zOPT-54', + 'zAddAssetAttr-Media Metadata Type-55', + 'AAAzCldMastMedData-Data-56', + 'CldMasterzCldMastMedData-zOPT-57', + 'zCldMast-Media Metadata Type-58', + 'CMzCldMastMedData-Data-59', + 'zAsset-Bundle Scope-60', + ('zGenAlbum-Creation Date-61', 'datetime'), + ('zGenAlbum-Start Date-62', 'datetime'), + ('zGenAlbum-End Date-63', 'datetime'), + 'zGenAlbum-Album Kind-64', + 'zGenAlbum-Title-User&System Applied-65', + 'zGenAlbum- Import Session ID-66', + 'zGenAlbum-Imported by Bundle Identifier-67', + 'zGenAlbum-Cached Photos Count-68', + 'zGenAlbum-Cached Videos Count-69', + 'zGenAlbum-Cached Count-70', + 'zGenAlbum-Trashed State-71', + ('zGenAlbum-Trash Date-72', 'datetime'), + 'zGenAlbum-UUID-73', + 'zGenAlbum-Cloud GUID-74', + 'zAsset-Active Library Scope Participation State-75', + 'zAsset-zPK-76', + 'zAddAssetAttr-zPK-77', + 'zAsset-UUID = store.cloudphotodb-78', + 'zAddAssetAttr-Master Fingerprint-79') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -2150,15 +2023,11 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -2168,120 +2037,99 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' basic asset and album data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 17.' \ - ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \ - ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \ - ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \ - ' Shared with You Conversation Identifiers Assets.' - report = ArtifactHtmlReport('Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Modification Date-7', - 'zAsset-Last Shared Date-8', - 'zAddAssetAttr-Last Viewed Date-9', - 'zAsset-Directory-Path-10', - 'zAsset-Filename-11', - 'zAddAssetAttr- Original Filename-12', - 'zCldMast- Original Filename-13', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', - 'zAsset- Conversation= zGenAlbum_zPK-15', - 'SWYConverszGenAlbum- Import Session ID-16', - 'zAsset-Syndication State-17', - 'zAsset-Trashed Date-18', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-20', - 'zAsset-Saved Asset Type-21', - 'zAddAssetAttr-Imported by Bundle ID-22', - 'zAddAssetAttr-Imported By Display Name-23', - 'zAddAssetAttr-Imported by-24', - 'zCldMast-Imported by Bundle ID-25', - 'zCldMast-Imported by Display Name-26', - 'zCldMast-Imported By-27', - 'zAsset-Visibility State-28', - 'zExtAttr-Camera Make-29', - 'zExtAttr-Camera Model-30', - 'zExtAttr-Lens Model-31', - 'zAsset-Derived Camera Capture Device-32', - 'zAddAssetAttr-Camera Captured Device-33', - 'zAddAssetAttr-Share Type-34', - 'zCldMast-Cloud Local State-35', - 'zCldMast-Import Date-36', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-37', - 'zAddAssetAttr-Import Session ID-38', - 'zAddAssetAttr-Alt Import Image Date-39', - 'zCldMast-Import Session ID- AirDrop-StillTesting-40', - 'zAsset-Cloud Batch Publish Date-41', - 'zAsset-Cloud Server Publish Date-42', - 'zAsset-Cloud Download Requests-43', - 'zAsset-Cloud Batch ID-44', - 'zAsset-Latitude-45', - 'zExtAttr-Latitude-46', - 'zAsset-Longitude-47', - 'zExtAttr-Longitude-48', - 'zAddAssetAttr-GPS Horizontal Accuracy-49', - 'zAddAssetAttr-Location Hash-50', - 'zAddAssetAttr-Shifted Location Valid-51', - 'zAddAssetAttr-Shifted Location Data-52', - 'zAddAssetAttr-Reverse Location Is Valid-53', - 'zAddAssetAttr-Reverse Location Data-54', - 'AAAzCldMastMedData-zOPT-55', - 'zAddAssetAttr-Media Metadata Type-56', - 'AAAzCldMastMedData-Data-57', - 'CldMasterzCldMastMedData-zOPT-58', - 'zCldMast-Media Metadata Type-59', - 'CMzCldMastMedData-Data-60', - 'zAsset-Bundle Scope-61', - 'zGenAlbum-Creation Date-62', - 'zGenAlbum-Start Date-63', - 'zGenAlbum-End Date-64', - 'zGenAlbum-Album Kind-65', - 'zGenAlbum-Title-User&System Applied-66', - 'zGenAlbum- Import Session ID-67', - 'zGenAlbum-Imported by Bundle Identifier-68', - 'zGenAlbum-Cached Photos Count-69', - 'zGenAlbum-Cached Videos Count-70', - 'zGenAlbum-Cached Count-71', - 'zGenAlbum-Trashed State-72', - 'zGenAlbum-Trash Date-73', - 'zGenAlbum-UUID-74', - 'zGenAlbum-Cloud GUID-75', - 'zAsset-Active Library Scope Participation State-76', - 'zAsset-zPK-77', - 'zAddAssetAttr-zPK-78', - 'zAsset-UUID = store.cloudphotodb-79', - 'zAddAssetAttr-Master Fingerprint-80') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite basic asset and album data') - - db.close() - return - - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + ('zAddAssetAttr-Last Viewed Date-9', 'datetime'), + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAsset- Conversation= zGenAlbum_zPK-15', + 'SWYConverszGenAlbum- Import Session ID-16', + 'zAsset-Syndication State-17', + ('zAsset-Trashed Date-18', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-20', + 'zAsset-Saved Asset Type-21', + 'zAddAssetAttr-Imported by Bundle ID-22', + 'zAddAssetAttr-Imported By Display Name-23', + 'zAddAssetAttr-Imported by-24', + 'zCldMast-Imported by Bundle ID-25', + 'zCldMast-Imported by Display Name-26', + 'zCldMast-Imported By-27', + 'zAsset-Visibility State-28', + 'zExtAttr-Camera Make-29', + 'zExtAttr-Camera Model-30', + 'zExtAttr-Lens Model-31', + 'zAsset-Derived Camera Capture Device-32', + 'zAddAssetAttr-Camera Captured Device-33', + 'zAddAssetAttr-Share Type-34', + 'zCldMast-Cloud Local State-35', + ('zCldMast-Import Date-36', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-37', 'datetime'), + 'zAddAssetAttr-Import Session ID-38', + ('zAddAssetAttr-Alt Import Image Date-39', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-40', + ('zAsset-Cloud Batch Publish Date-41', 'datetime'), + ('zAsset-Cloud Server Publish Date-42', 'datetime'), + 'zAsset-Cloud Download Requests-43', + 'zAsset-Cloud Batch ID-44', + 'zAsset-Latitude-45', + 'zExtAttr-Latitude-46', + 'zAsset-Longitude-47', + 'zExtAttr-Longitude-48', + 'zAddAssetAttr-GPS Horizontal Accuracy-49', + 'zAddAssetAttr-Location Hash-50', + 'zAddAssetAttr-Shifted Location Valid-51', + 'zAddAssetAttr-Shifted Location Data-52', + 'zAddAssetAttr-Reverse Location Is Valid-53', + 'zAddAssetAttr-Reverse Location Data-54', + 'AAAzCldMastMedData-zOPT-55', + 'zAddAssetAttr-Media Metadata Type-56', + 'AAAzCldMastMedData-Data-57', + 'CldMasterzCldMastMedData-zOPT-58', + 'zCldMast-Media Metadata Type-59', + 'CMzCldMastMedData-Data-60', + 'zAsset-Bundle Scope-61', + ('zGenAlbum-Creation Date-62', 'datetime'), + ('zGenAlbum-Start Date-63', 'datetime'), + ('zGenAlbum-End Date-64', 'datetime'), + 'zGenAlbum-Album Kind-65', + 'zGenAlbum-Title-User&System Applied-66', + 'zGenAlbum- Import Session ID-67', + 'zGenAlbum-Imported by Bundle Identifier-68', + 'zGenAlbum-Cached Photos Count-69', + 'zGenAlbum-Cached Videos Count-70', + 'zGenAlbum-Cached Count-71', + 'zGenAlbum-Trashed State-72', + ('zGenAlbum-Trash Date-73', 'datetime'), + 'zGenAlbum-UUID-74', + 'zGenAlbum-Cloud GUID-75', + 'zAsset-Active Library Scope Participation State-76', + 'zAsset-zPK-77', + 'zAddAssetAttr-zPK-78', + 'zAsset-UUID = store.cloudphotodb-79', + 'zAddAssetAttr-Master Fingerprint-80') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -2292,7 +2140,7 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date', + DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date', zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', zAsset.ZFILENAME AS 'zAsset-Filename', zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', @@ -2317,11 +2165,6 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', - CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recenlty_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', CASE zAsset.ZSAVEDASSETTYPE WHEN 0 THEN '0-Saved-via-other-source-0' WHEN 1 THEN '1-StillTesting-1' @@ -2388,8 +2231,7 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr WHEN 0 THEN '0-Back-Camera-Other-0' WHEN 1 THEN '1-Front-Camera-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' - END AS 'zAddAssetAttr-Camera Captured Device', - zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier-iOS18', + END AS 'zAddAssetAttr-Camera Captured Device', CASE zAddAssetAttr.ZSHARETYPE WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' @@ -2519,13 +2361,12 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN Z_31ASSETS z31Assets ON z31Assets.Z_3ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z31Assets.Z_31ALBUMS + LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z29Assets.Z_29ALBUMS LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA @@ -2533,15 +2374,11 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -2549,158 +2386,141 @@ def get_ph2assetbasicandalbumdataphdapsql(files_found, report_folder, seeker, wr row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' basic asset and album data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 18.' \ - ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \ - ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \ - ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \ - ' Shared with You Conversation Identifiers Assets.' - report = ArtifactHtmlReport('Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Modification Date-7', - 'zAsset-Last Shared Date-8', - 'zAddAssetAttr-Last Viewed Date-9', - 'zAsset-Directory-Path-10', - 'zAsset-Filename-11', - 'zAddAssetAttr- Original Filename-12', - 'zCldMast- Original Filename-13', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', - 'zAsset- Conversation= zGenAlbum_zPK-15', - 'SWYConverszGenAlbum- Import Session ID-16', - 'zAsset-Syndication State-17', - 'zAsset-Trashed Date-18', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-20', - 'zAsset-Is_Recently_Saved-iOS18-21', - 'zAsset-Saved Asset Type-22', - 'zAddAssetAttr-Imported by Bundle ID-23', - 'zAddAssetAttr-Imported By Display Name-24', - 'zAddAssetAttr-Imported by-25', - 'zCldMast-Imported by Bundle ID-26', - 'zCldMast-Imported by Display Name-27', - 'zCldMast-Imported By-28', - 'zAsset-Visibility State-29', - 'zExtAttr-Camera Make-30', - 'zExtAttr-Camera Model-31', - 'zExtAttr-Lens Model-32', - 'zAsset-Derived Camera Capture Device-33', - 'zAddAssetAttr-Camera Captured Device-34', - 'zAsset-Capture_Session_Identifier-iOS18-35', - 'zAddAssetAttr-Share Type-36', - 'zCldMast-Cloud Local State-37', - 'zCldMast-Import Date-38', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-39', - 'zAddAssetAttr-Import Session ID-40', - 'zAddAssetAttr-Alt Import Image Date-41', - 'zCldMast-Import Session ID- AirDrop-StillTesting-42', - 'zAsset-Cloud Batch Publish Date-43', - 'zAsset-Cloud Server Publish Date-44', - 'zAsset-Cloud Download Requests-45', - 'zAsset-Cloud Batch ID-46', - 'zAsset-Latitude-47', - 'zExtAttr-Latitude-48', - 'zAsset-Longitude-49', - 'zExtAttr-Longitude-50', - 'zAddAssetAttr-GPS Horizontal Accuracy-51', - 'zAddAssetAttr-Location Hash-52', - 'zAddAssetAttr-Shifted Location Valid-53', - 'zAddAssetAttr-Shifted Location Data-54', - 'zAddAssetAttr-Reverse Location Is Valid-55', - 'zAddAssetAttr-Reverse Location Data-56', - 'AAAzCldMastMedData-zOPT-57', - 'zAddAssetAttr-Media Metadata Type-58', - 'AAAzCldMastMedData-Data-59', - 'CldMasterzCldMastMedData-zOPT-60', - 'zCldMast-Media Metadata Type-61', - 'CMzCldMastMedData-Data-62', - 'zAsset-Bundle Scope-63', - 'zGenAlbum-Creation Date-64', - 'zGenAlbum-Start Date-65', - 'zGenAlbum-End Date-66', - 'zGenAlbum-Album Kind-67', - 'zGenAlbum-Title-User&System Applied-68', - 'zGenAlbum- Import Session ID-69', - 'zGenAlbum-Imported by Bundle Identifier-70', - 'zGenAlbum-Cached Photos Count-71', - 'zGenAlbum-Cached Videos Count-72', - 'zGenAlbum-Cached Count-73', - 'zGenAlbum-Trashed State-74', - 'zGenAlbum-Trash Date-75', - 'zGenAlbum-UUID-76', - 'zGenAlbum-Cloud GUID-77', - 'zAsset-Active Library Scope Participation State-78', - 'zAsset-zPK-79', - 'zAddAssetAttr-zPK-80', - 'zAsset-UUID = store.cloudphotodb-81', - 'zAddAssetAttr-Original Stable Hash-iOS18-82', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-83') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph2.1-Asset Basic Data & GenAlbum Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite basic asset and album data') - - db.close() - return - - -def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset): - - for file_found in files_found: - file_found = str(file_found) + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80])) - if file_found.endswith('.sqlite'): - break + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + ('zAddAssetAttr-Last Viewed Date-9', 'datetime'), + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAsset- Conversation= zGenAlbum_zPK-15', + 'SWYConverszGenAlbum- Import Session ID-16', + 'zAsset-Syndication State-17', + ('zAsset-Trashed Date-18', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-20', + 'zAsset-Saved Asset Type-21', + 'zAddAssetAttr-Imported by Bundle ID-22', + 'zAddAssetAttr-Imported By Display Name-23', + 'zAddAssetAttr-Imported by-24', + 'zCldMast-Imported by Bundle ID-25', + 'zCldMast-Imported by Display Name-26', + 'zCldMast-Imported By-27', + 'zAsset-Visibility State-28', + 'zExtAttr-Camera Make-29', + 'zExtAttr-Camera Model-30', + 'zExtAttr-Lens Model-31', + 'zAsset-Derived Camera Capture Device-32', + 'zAddAssetAttr-Camera Captured Device-33', + 'zAddAssetAttr-Share Type-34', + 'zCldMast-Cloud Local State-35', + ('zCldMast-Import Date-36', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-37', 'datetime'), + 'zAddAssetAttr-Import Session ID-38', + ('zAddAssetAttr-Alt Import Image Date-39', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-40', + ('zAsset-Cloud Batch Publish Date-41', 'datetime'), + ('zAsset-Cloud Server Publish Date-42', 'datetime'), + 'zAsset-Cloud Download Requests-43', + 'zAsset-Cloud Batch ID-44', + 'zAsset-Latitude-45', + 'zExtAttr-Latitude-46', + 'zAsset-Longitude-47', + 'zExtAttr-Longitude-48', + 'zAddAssetAttr-GPS Horizontal Accuracy-49', + 'zAddAssetAttr-Location Hash-50', + 'zAddAssetAttr-Shifted Location Valid-51', + 'zAddAssetAttr-Shifted Location Data-52', + 'zAddAssetAttr-Reverse Location Is Valid-53', + 'zAddAssetAttr-Reverse Location Data-54', + 'AAAzCldMastMedData-zOPT-55', + 'zAddAssetAttr-Media Metadata Type-56', + 'AAAzCldMastMedData-Data-57', + 'CldMasterzCldMastMedData-zOPT-58', + 'zCldMast-Media Metadata Type-59', + 'CMzCldMastMedData-Data-60', + 'zAsset-Bundle Scope-61', + ('zGenAlbum-Creation Date-62', 'datetime'), + ('zGenAlbum-Start Date-63', 'datetime'), + ('zGenAlbum-End Date-64', 'datetime'), + 'zGenAlbum-Album Kind-65', + 'zGenAlbum-Title-User&System Applied-66', + 'zGenAlbum- Import Session ID-67', + 'zGenAlbum-Imported by Bundle Identifier-68', + 'zGenAlbum-Cached Photos Count-69', + 'zGenAlbum-Cached Videos Count-70', + 'zGenAlbum-Cached Count-71', + 'zGenAlbum-Trashed State-72', + ('zGenAlbum-Trash Date-73', 'datetime'), + 'zGenAlbum-UUID-74', + 'zGenAlbum-Cloud GUID-75', + 'zAsset-Active Library Scope Participation State-76', + 'zAsset-zPK-77', + 'zAddAssetAttr-zPK-78', + 'zAsset-UUID = store.cloudphotodb-79', + 'zAddAssetAttr-Master Fingerprint-80') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path - if report_folder.endswith('/') or report_folder.endswith('\\'): - report_folder = report_folder[:-1] - iosversion = scripts.artifacts.artGlobals.versionf - if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite basic asset and album data iOS " + iosversion) - if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + elif version.parse(iosversion) >= version.parse("18"): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date', zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', zAsset.ZFILENAME AS 'zAsset-Filename', zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK ', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', CASE zAsset.ZTRASHEDSTATE WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', - DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + CASE zAsset.ZISRECENTLYSAVED + WHEN 0 THEN '0-Not_Recenlty_Saved_Still_Testing-0' + WHEN 1 THEN '1-Recently_Saved_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' + END AS 'zAsset-Is_Recently_Saved', CASE zAsset.ZSAVEDASSETTYPE WHEN 0 THEN '0-Saved-via-other-source-0' WHEN 1 THEN '1-StillTesting-1' @@ -2713,8 +2533,9 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - zAddAssetAttr.ZCREATORBUNDLEID AS 'zAddAssetAttr- Creator Bundle ID', + END AS 'zAsset-Saved Asset Type', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr-Imported by Bundle ID', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', CASE zAddAssetAttr.ZIMPORTEDBY WHEN 0 THEN '0-Cloud-Other-0' WHEN 1 THEN '1-Native-Back-Camera-1' @@ -2731,16 +2552,48 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr WHEN 12 THEN '12-SWY_Syndication_PL-12' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' END AS 'zAddAssetAttr-Imported by', + zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', + zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', + CASE zCldMast.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' + END AS 'zCldMast-Imported By', CASE zAsset.ZVISIBILITYSTATE WHEN 0 THEN '0-Visible-PL-CameraRoll-0' WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' END AS 'zAsset-Visibility State', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', + CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' + END AS 'zAsset-Derived Camera Capture Device', CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE WHEN 0 THEN '0-Back-Camera-Other-0' WHEN 1 THEN '1-Front-Camera-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' - END AS 'zAddAssetAttr-Camera Captured Device', + END AS 'zAddAssetAttr-Camera Captured Device', + zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', CASE zCldMast.ZCLOUDLOCALSTATE WHEN 0 THEN '0-Not Synced with Cloud-0' WHEN 1 THEN '1-Pending Upload-1' @@ -2749,6 +2602,11 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' END AS 'zCldMast-Cloud Local State', DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') + AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') + AS 'zAddAssetAttr-Alt Import Image Date', zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', @@ -2758,10 +2616,16 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr WHEN -180.0 THEN '-180.0' ELSE zAsset.ZLATITUDE END AS 'zAsset-Latitude', + zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', CASE zAsset.ZLONGITUDE WHEN -180.0 THEN '-180.0' ELSE zAsset.ZLONGITUDE END AS 'zAsset-Longitude', + zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', + CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY + END AS 'zAddAssetAttr-GPS Horizontal Accuracy', zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID WHEN 0 THEN '0-Shifted Location Not Valid-0' @@ -2781,6 +2645,40 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' END AS 'zAddAssetAttr-Reverse Location Data', + CASE AAAzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Cloud-1' + WHEN 2 THEN '2-StillTesting-This Device-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' + END AS 'AAAzCldMastMedData-zOPT', + zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', + CASE + WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' + ELSE 'AAAzCldMastMedData-Data_Empty-NULL' + END AS 'AAAzCldMastMedData-Data', + CASE CMzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' + WHEN 2 THEN '2-StillTesting-Local_Asset-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' + END AS 'CldMasterzCldMastMedData-zOPT', + zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', + CASE + WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' + ELSE 'CMzCldMastMedData-Data_Empty-NULL' + END AS 'CMzCldMastMedData-Data', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', CASE zGenAlbum.ZKIND @@ -2799,7 +2697,8 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' END AS 'zGenAlbum-Album Kind', zGenAlbum.ZTITLE AS 'zGenAlbum-Title-User&System Applied', - zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum- Import Session ID', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum- Import Session ID', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier', zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum-Cached Photos Count', zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum-Cached Videos Count', zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum-Cached Count', @@ -2810,117 +2709,155 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr END AS 'zGenAlbum-Trashed State', DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date', zGenAlbum.ZUUID AS 'zGenAlbum-UUID', - zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZGENERICASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON - zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z30Assets.Z_30ALBUMS LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN Z_20ASSETS z20Assets ON z20Assets.Z_27ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z20Assets.Z_20ALBUMS + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON + AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON + CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA + LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47])) - - counter += 1 - - description = 'Parses basic asset record data from' \ - ' Syndication.photoslibrary-database-Photos.sqlite' \ - ' for basic asset and album data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 11.' \ - ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \ - ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \ - ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \ - ' Shared with You Conversation Identifiers Assets.' - report = ArtifactHtmlReport('Ph2.2-Asset Basic Data & Convers Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAsset-Modification Date-5', - 'zAsset-Last Shared Date-6', - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11', - 'zAsset-Trashed Date-12', - 'zAsset-Saved Asset Type-13', - 'zAddAssetAttr- Creator Bundle ID-14', - 'zAddAssetAttr-Imported by-15', - 'zAsset-Visibility State-16', - 'zAddAssetAttr-Camera Captured Device-17', - 'zCldMast-Cloud Local State-18', - 'zCldMast-Import Date-19', - 'zCldMast-Import Session ID- AirDrop-StillTesting-20', - 'zAsset-Cloud Batch Publish Date-21', - 'zAsset-Cloud Server Publish Date-22', - 'zAsset-Cloud Download Requests-23', - 'zAsset-Cloud Batch ID-24', - 'zAsset-Latitude-25', - 'zAsset-Longitude-26', - 'zAddAssetAttr-Location Hash-27', - 'zAddAssetAttr-Shifted Location Valid-28', - 'zAddAssetAttr-Shifted Location Data-29', - 'zAddAssetAttr-Reverse Location Is Valid-30', - 'zAddAssetAttr-Reverse Location Data-31', - 'zGenAlbum-Start Date-32', - 'zGenAlbum-End Date-33', - 'zGenAlbum-Album Kind-34', - 'zGenAlbum-Title-User&System Applied-35', - 'zGenAlbum- Import Session ID-36', - 'zGenAlbum-Cached Photos Count-37', - 'zGenAlbum-Cached Videos Count-38', - 'zGenAlbum-Cached Count-39', - 'zGenAlbum-Trashed State-40', - 'zGenAlbum-Trash Date-41', - 'zGenAlbum-UUID-42', - 'zGenAlbum-Cloud GUID-43', - 'zAsset-zPK-44', - 'zAddAssetAttr-zPK-45', - 'zAsset-UUID = store.cloudphotodb-46', - 'zAddAssetAttr-Master Fingerprint-47') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' basic asset and album data') + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83])) - db.close() - return + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + ('zAddAssetAttr-Last Viewed Date-9', 'datetime'), + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAsset- Conversation= zGenAlbum_zPK-15', + 'SWYConverszGenAlbum- Import Session ID-16', + 'zAsset-Syndication State-17', + ('zAsset-Trashed Date-18', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-20', + 'zAsset-Is_Recently_Saved-21', + 'zAsset-Saved Asset Type-22', + 'zAddAssetAttr-Imported by Bundle ID-23', + 'zAddAssetAttr-Imported By Display Name-24', + 'zAddAssetAttr-Imported by-25', + 'zCldMast-Imported by Bundle ID-26', + 'zCldMast-Imported by Display Name-27', + 'zCldMast-Imported By-28', + 'zAsset-Visibility State-29', + 'zExtAttr-Camera Make-30', + 'zExtAttr-Camera Model-31', + 'zExtAttr-Lens Model-32', + 'zAsset-Derived Camera Capture Device-33', + 'zAddAssetAttr-Camera Captured Device-34', + 'zAsset-Capture_Session_Identifier-35', + 'zAddAssetAttr-Share Type-36', + 'zCldMast-Cloud Local State-37', + ('zCldMast-Import Date-38', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-39', 'datetime'), + 'zAddAssetAttr-Import Session ID-40', + ('zAddAssetAttr-Alt Import Image Date-41', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-42', + ('zAsset-Cloud Batch Publish Date-43', 'datetime'), + ('zAsset-Cloud Server Publish Date-44', 'datetime'), + 'zAsset-Cloud Download Requests-45', + 'zAsset-Cloud Batch ID-46', + 'zAsset-Latitude-47', + 'zExtAttr-Latitude-48', + 'zAsset-Longitude-49', + 'zExtAttr-Longitude-50', + 'zAddAssetAttr-GPS Horizontal Accuracy-51', + 'zAddAssetAttr-Location Hash-52', + 'zAddAssetAttr-Shifted Location Valid-53', + 'zAddAssetAttr-Shifted Location Data-54', + 'zAddAssetAttr-Reverse Location Is Valid-55', + 'zAddAssetAttr-Reverse Location Data-56', + 'AAAzCldMastMedData-zOPT-57', + 'zAddAssetAttr-Media Metadata Type-58', + 'AAAzCldMastMedData-Data-59', + 'CldMasterzCldMastMedData-zOPT-60', + 'zCldMast-Media Metadata Type-61', + 'CMzCldMastMedData-Data-62', + 'zAsset-Bundle Scope-63', + ('zGenAlbum-Creation Date-64', 'datetime'), + ('zGenAlbum-Start Date-65', 'datetime'), + ('zGenAlbum-End Date-66', 'datetime'), + 'zGenAlbum-Album Kind-67', + 'zGenAlbum-Title-User&System Applied-68', + 'zGenAlbum- Import Session ID-69', + 'zGenAlbum-Imported by Bundle Identifier-70', + 'zGenAlbum-Cached Photos Count-71', + 'zGenAlbum-Cached Videos Count-72', + 'zGenAlbum-Cached Count-73', + 'zGenAlbum-Trashed State-74', + ('zGenAlbum-Trash Date-75', 'datetime'), + 'zGenAlbum-UUID-76', + 'zGenAlbum-Cloud GUID-77', + 'zAsset-Active Library Scope Participation State-78', + 'zAsset-zPK-79', + 'zAddAssetAttr-zPK-80', + 'zAsset-UUID = store.cloudphotodb-81', + 'zAddAssetAttr-Original Stable Hash-82', + 'zAddAssetAttr.Adjusted Stable Hash-83') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + +@artifact_processor +def Ph2_2AssetBasicConversationDataSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) + + if source_path.endswith('.sqlite'): + break - elif (version.parse(iosversion) >= version.parse("12")) & (version.parse(iosversion) < version.parse("13")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + if report_folder.endswith('/') or report_folder.endswith('\\'): + report_folder = report_folder[:-1] + iosversion = scripts.artifacts.artGlobals.versionf + if version.parse(iosversion) <= version.parse("10.3.4"): + logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) + return (), [], source_path + if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("12")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" - SELECT + query = ''' + SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', @@ -3056,107 +2993,290 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN Z_23ASSETS z23Assets ON z23Assets.Z_30ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z23Assets.Z_23ALBUMS + LEFT JOIN Z_20ASSETS z20Assets ON z20Assets.Z_27ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z20Assets.Z_20ALBUMS ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], row[46], row[47])) - counter += 1 + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + ('zAsset-Modification Date-5', 'datetime'), + ('zAsset-Last Shared Date-6', 'datetime'), + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11', + ('zAsset-Trashed Date-12', 'datetime'), + 'zAsset-Saved Asset Type-13', + 'zAddAssetAttr- Creator Bundle ID-14', + 'zAddAssetAttr-Imported by-15', + 'zAsset-Visibility State-16', + 'zAddAssetAttr-Camera Captured Device-17', + 'zCldMast-Cloud Local State-18', + ('zCldMast-Import Date-19', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-20', + ('zAsset-Cloud Batch Publish Date-21', 'datetime'), + ('zAsset-Cloud Server Publish Date-22', 'datetime'), + 'zAsset-Cloud Download Requests-23', + 'zAsset-Cloud Batch ID-24', + 'zAsset-Latitude-25', + 'zAsset-Longitude-26', + 'zAddAssetAttr-Location Hash-27', + 'zAddAssetAttr-Shifted Location Valid-28', + 'zAddAssetAttr-Shifted Location Data-29', + 'zAddAssetAttr-Reverse Location Is Valid-30', + 'zAddAssetAttr-Reverse Location Data-31', + ('zGenAlbum-Start Date-32', 'datetime'), + ('zGenAlbum-End Date-33', 'datetime'), + 'zGenAlbum-Album Kind-34', + 'zGenAlbum-Title-User&System Applied-35', + 'zGenAlbum- Import Session ID-36', + 'zGenAlbum-Cached Photos Count-37', + 'zGenAlbum-Cached Videos Count-38', + 'zGenAlbum-Cached Count-39', + 'zGenAlbum-Trashed State-40', + ('zGenAlbum-Trash Date-41', 'datetime'), + 'zGenAlbum-UUID-42', + 'zGenAlbum-Cloud GUID-43', + 'zAsset-zPK-44', + 'zAddAssetAttr-zPK-45', + 'zAsset-UUID = store.cloudphotodb-46', + 'zAddAssetAttr-Master Fingerprint-47') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path - description = 'Parses basic asset record data from' \ - ' Syndication.photoslibrary-database-Photos.sqlite' \ - ' for basic asset and album data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 12.' \ - ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \ - ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \ - ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \ - ' Shared with You Conversation Identifiers Assets.' - report = ArtifactHtmlReport('Ph2.2-Asset Basic Data & Convers Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAsset-Modification Date-5', - 'zAsset-Last Shared Date-6', - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11', - 'zAsset-Trashed Date-12', - 'zAsset-Saved Asset Type-13', - 'zAddAssetAttr- Creator Bundle ID-14', - 'zAddAssetAttr-Imported by-15', - 'zAsset-Visibility State-16', - 'zAddAssetAttr-Camera Captured Device-17', - 'zCldMast-Cloud Local State-18', - 'zCldMast-Import Date-19', - 'zCldMast-Import Session ID- AirDrop-StillTesting-20', - 'zAsset-Cloud Batch Publish Date-21', - 'zAsset-Cloud Server Publish Date-22', - 'zAsset-Cloud Download Requests-23', - 'zAsset-Cloud Batch ID-24', - 'zAsset-Latitude-25', - 'zAsset-Longitude-26', - 'zAddAssetAttr-Location Hash-27', - 'zAddAssetAttr-Shifted Location Valid-28', - 'zAddAssetAttr-Shifted Location Data-29', - 'zAddAssetAttr-Reverse Location Is Valid-30', - 'zAddAssetAttr-Reverse Location Data-31', - 'zGenAlbum-Start Date-32', - 'zGenAlbum-End Date-33', - 'zGenAlbum-Album Kind-34', - 'zGenAlbum-Title-User&System Applied-35', - 'zGenAlbum- Import Session ID-36', - 'zGenAlbum-Cached Photos Count-37', - 'zGenAlbum-Cached Videos Count-38', - 'zGenAlbum-Cached Count-39', - 'zGenAlbum-Trashed State-40', - 'zGenAlbum-Trash Date-41', - 'zGenAlbum-UUID-42', - 'zGenAlbum-Cloud GUID-43', - 'zAsset-zPK-44', - 'zAddAssetAttr-zPK-45', - 'zAsset-UUID = store.cloudphotodb-46', - 'zAddAssetAttr-Master Fingerprint-47') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) + elif (version.parse(iosversion) >= version.parse("12")) & (version.parse(iosversion) < version.parse("13")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - tlactivity = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + zAddAssetAttr.ZCREATORBUNDLEID AS 'zAddAssetAttr- Creator Bundle ID', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' + END AS 'zAddAssetAttr-Camera Captured Device', + CASE zCldMast.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-Not Synced with Cloud-0' + WHEN 1 THEN '1-Pending Upload-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-Synced with Cloud-3' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' + END AS 'zCldMast-Cloud Local State', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', + zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', + zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', + CASE zAsset.ZLATITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLATITUDE + END AS 'zAsset-Latitude', + CASE zAsset.ZLONGITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLONGITUDE + END AS 'zAsset-Longitude', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID + WHEN 0 THEN '0-Shifted Location Not Valid-0' + WHEN 1 THEN '1-Shifted Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' + END AS 'zAddAssetAttr-Shifted Location Valid', + CASE + WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' + ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Shifted Location Data', + CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID + WHEN 0 THEN '0-Reverse Location Not Valid-0' + WHEN 1 THEN '1-Reverse Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' + END AS 'zAddAssetAttr-Reverse Location Is Valid', + CASE + WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Reverse Location Data', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind', + zGenAlbum.ZTITLE AS 'zGenAlbum-Title-User&System Applied', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum- Import Session ID', + zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum-Cached Photos Count', + zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum-Cached Videos Count', + zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum-Cached Count', + CASE zGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'zGenAlbum Not In Trash-0' + WHEN 1 THEN 'zGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || '' + END AS 'zGenAlbum-Trashed State', + DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' + FROM ZGENERICASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON + zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN Z_23ASSETS z23Assets ON z23Assets.Z_30ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z23Assets.Z_23ALBUMS + ORDER BY zAsset.ZDATECREATED + ''' - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' basic asset and album data') + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47])) - db.close() - return + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + ('zAsset-Modification Date-5', 'datetime'), + ('zAsset-Last Shared Date-6', 'datetime'), + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-11', + ('zAsset-Trashed Date-12', 'datetime'), + 'zAsset-Saved Asset Type-13', + 'zAddAssetAttr- Creator Bundle ID-14', + 'zAddAssetAttr-Imported by-15', + 'zAsset-Visibility State-16', + 'zAddAssetAttr-Camera Captured Device-17', + 'zCldMast-Cloud Local State-18', + ('zCldMast-Import Date-19', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-20', + ('zAsset-Cloud Batch Publish Date-21', 'datetime'), + ('zAsset-Cloud Server Publish Date-22', 'datetime'), + 'zAsset-Cloud Download Requests-23', + 'zAsset-Cloud Batch ID-24', + 'zAsset-Latitude-25', + 'zAsset-Longitude-26', + 'zAddAssetAttr-Location Hash-27', + 'zAddAssetAttr-Shifted Location Valid-28', + 'zAddAssetAttr-Shifted Location Data-29', + 'zAddAssetAttr-Reverse Location Is Valid-30', + 'zAddAssetAttr-Reverse Location Data-31', + ('zGenAlbum-Start Date-32', 'datetime'), + ('zGenAlbum-End Date-33', 'datetime'), + 'zGenAlbum-Album Kind-34', + 'zGenAlbum-Title-User&System Applied-35', + 'zGenAlbum- Import Session ID-36', + 'zGenAlbum-Cached Photos Count-37', + 'zGenAlbum-Cached Videos Count-38', + 'zGenAlbum-Cached Count-39', + 'zGenAlbum-Trashed State-40', + ('zGenAlbum-Trash Date-41', 'datetime'), + 'zGenAlbum-UUID-42', + 'zGenAlbum-Cloud GUID-43', + 'zAsset-zPK-44', + 'zAddAssetAttr-zPK-45', + 'zAsset-UUID = store.cloudphotodb-46', + 'zAddAssetAttr-Master Fingerprint-47') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -3360,15 +3480,11 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr LEFT JOIN Z_26ASSETS z26Assets ON z26Assets.Z_34ASSETS = zAsset.Z_PK LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z26Assets.Z_26ALBUMS ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -3377,107 +3493,84 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], row[64], row[65])) - counter += 1 - - description = 'Parses basic asset record data from' \ - ' Syndication.photoslibrary-database-Photos.sqlite' \ - ' for basic asset and album data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 13.' \ - ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \ - ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \ - ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \ - ' Shared with You Conversation Identifiers Assets.' - report = ArtifactHtmlReport('Ph2.2-Asset Basic Data & Convers Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Modification Date-7', - 'zAsset-Last Shared Date-8', - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAsset-Trashed Date-13', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', - 'zAsset-Saved Asset Type-15', - 'zAddAssetAttr- Creator Bundle ID-16', - 'zAddAssetAttr-Imported by-17', - 'zCldMast-Imported By-18', - 'zAsset-Visibility State-19', - 'zExtAttr-Camera Make-20', - 'zExtAttr-Camera Model-21', - 'zExtAttr-Lens Model-22', - 'zAddAssetAttr-Camera Captured Device-23', - 'zAddAssetAttr-Share Type-24', - 'zCldMast-Cloud Local State-25', - 'zCldMast-Import Date-26', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-27', - 'zAddAssetAttr-Import Session ID-28', - 'zAddAssetAttr-Alt Import Image Date-29', - 'zCldMast-Import Session ID- AirDrop-StillTesting-30', - 'zAsset-Cloud Batch Publish Date-31', - 'zAsset-Cloud Server Publish Date-32', - 'zAsset-Cloud Download Requests-33', - 'zAsset-Cloud Batch ID-34', - 'zAsset-Latitude-35', - 'zExtAttr-Latitude-36', - 'zAsset-Longitude-37', - 'zExtAttr-Longitude-38', - 'zAddAssetAttr-Location Hash-39', - 'zAddAssetAttr-Shifted Location Valid-40', - 'zAddAssetAttr-Shifted Location Data-41', - 'zAddAssetAttr-Reverse Location Is Valid-42', - 'zAddAssetAttr-Reverse Location Data-43', - 'AAAzCldMastMedData-zOPT-44', - 'zAddAssetAttr-Media Metadata Type-45', - 'AAAzCldMastMedData-Data-46', - 'CldMasterzCldMastMedData-zOPT-47', - 'zCldMast-Media Metadata Type-48', - 'CMzCldMastMedData-Data-49', - 'zGenAlbum-Start Date-50', - 'zGenAlbum-End Date-51', - 'zGenAlbum-Album Kind-52', - 'zGenAlbum-Title-User&System Applied-53', - 'zGenAlbum- Import Session ID-54', - 'zGenAlbum-Cached Photos Count-55', - 'zGenAlbum-Cached Videos Count-56', - 'zGenAlbum-Cached Count-57', - 'zGenAlbum-Trashed State-58', - 'zGenAlbum-Trash Date-59', - 'zGenAlbum-UUID-60', - 'zGenAlbum-Cloud GUID-61', - 'zAsset-zPK-62', - 'zAddAssetAttr-zPK-63', - 'zAsset-UUID = store.cloudphotodb-64', - 'zAddAssetAttr-Master Fingerprint-65') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' basic asset and album data') - - db.close() - return + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + ('zAsset-Trashed Date-13', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', + 'zAsset-Saved Asset Type-15', + 'zAddAssetAttr- Creator Bundle ID-16', + 'zAddAssetAttr-Imported by-17', + 'zCldMast-Imported By-18', + 'zAsset-Visibility State-19', + 'zExtAttr-Camera Make-20', + 'zExtAttr-Camera Model-21', + 'zExtAttr-Lens Model-22', + 'zAddAssetAttr-Camera Captured Device-23', + 'zAddAssetAttr-Share Type-24', + 'zCldMast-Cloud Local State-25', + ('zCldMast-Import Date-26', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-27', 'datetime'), + 'zAddAssetAttr-Import Session ID-28', + 'zAddAssetAttr-Alt Import Image Date-29', + 'zCldMast-Import Session ID- AirDrop-StillTesting-30', + ('zAsset-Cloud Batch Publish Date-31', 'datetime'), + ('zAsset-Cloud Server Publish Date-32', 'datetime'), + 'zAsset-Cloud Download Requests-33', + 'zAsset-Cloud Batch ID-34', + 'zAsset-Latitude-35', + 'zExtAttr-Latitude-36', + 'zAsset-Longitude-37', + 'zExtAttr-Longitude-38', + 'zAddAssetAttr-Location Hash-39', + 'zAddAssetAttr-Shifted Location Valid-40', + 'zAddAssetAttr-Shifted Location Data-41', + 'zAddAssetAttr-Reverse Location Is Valid-42', + 'zAddAssetAttr-Reverse Location Data-43', + 'AAAzCldMastMedData-zOPT-44', + 'zAddAssetAttr-Media Metadata Type-45', + 'AAAzCldMastMedData-Data-46', + 'CldMasterzCldMastMedData-zOPT-47', + 'zCldMast-Media Metadata Type-48', + 'CMzCldMastMedData-Data-49', + ('zGenAlbum-Start Date-50', 'datetime'), + ('zGenAlbum-End Date-51', 'datetime'), + 'zGenAlbum-Album Kind-52', + 'zGenAlbum-Title-User&System Applied-53', + 'zGenAlbum- Import Session ID-54', + 'zGenAlbum-Cached Photos Count-55', + 'zGenAlbum-Cached Videos Count-56', + 'zGenAlbum-Cached Count-57', + 'zGenAlbum-Trashed State-58', + ('zGenAlbum-Trash Date-59', 'datetime'), + 'zGenAlbum-UUID-60', + 'zGenAlbum-Cloud GUID-61', + 'zAsset-zPK-62', + 'zAddAssetAttr-zPK-63', + 'zAsset-UUID = store.cloudphotodb-64', + 'zAddAssetAttr-Master Fingerprint-65') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -3695,15 +3788,10 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr LEFT JOIN Z_26ASSETS z26Assets ON z26Assets.Z_3ASSETS = zAsset.Z_PK LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z26Assets.Z_26ALBUMS ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + ''' + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -3712,114 +3800,91 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72])) - counter += 1 - - description = 'Parses basic asset record data from' \ - ' Syndication.photoslibrary-database-Photos.sqlite' \ - ' for basic asset and album data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 14.' \ - ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \ - ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \ - ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \ - ' Shared with You Conversation Identifiers Assets.' - report = ArtifactHtmlReport('Ph2.2-Asset Basic Data & Convers Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Modification Date-7', - 'zAsset-Last Shared Date-8', - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAsset-Trashed Date-13', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', - 'zAsset-Saved Asset Type-15', - 'zAddAssetAttr-Creator Bundle ID-16', - 'zAddAssetAttr-Imported By Display Name-17', - 'zAddAssetAttr-Imported by-18', - 'zCldMast-Imported by Bundle ID-19', - 'zCldMast-Imported by Display Name-20', - 'zCldMast-Imported By-21', - 'zAsset-Visibility State-22', - 'zExtAttr-Camera Make-23', - 'zExtAttr-Camera Model-24', - 'zExtAttr-Lens Model-25', - 'zAsset-Derived Camera Capture Device-26', - 'zAddAssetAttr-Camera Captured Device-27', - 'zAddAssetAttr-Share Type-28', - 'zCldMast-Cloud Local State-29', - 'zCldMast-Import Date-30', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-31', - 'zAddAssetAttr-Import Session ID-32', - 'zAddAssetAttr-Alt Import Image Date-33', - 'zCldMast-Import Session ID- AirDrop-StillTesting-34', - 'zAsset-Cloud Batch Publish Date-35', - 'zAsset-Cloud Server Publish Date-36', - 'zAsset-Cloud Download Requests-37', - 'zAsset-Cloud Batch ID-38', - 'zAsset-Latitude-39', - 'zExtAttr-Latitude-40', - 'zAsset-Longitude-41', - 'zExtAttr-Longitude-42', - 'zAddAssetAttr-GPS Horizontal Accuracy-43', - 'zAddAssetAttr-Location Hash-44', - 'zAddAssetAttr-Shifted Location Valid-45', - 'zAddAssetAttr-Shifted Location Data-46', - 'zAddAssetAttr-Reverse Location Is Valid-47', - 'zAddAssetAttr-Reverse Location Data-48', - 'AAAzCldMastMedData-zOPT-49', - 'zAddAssetAttr-Media Metadata Type-50', - 'AAAzCldMastMedData-Data-51', - 'CldMasterzCldMastMedData-zOPT-52', - 'zCldMast-Media Metadata Type-53', - 'CMzCldMastMedData-Data-54', - 'zGenAlbum-Creation Date-55', - 'zGenAlbum-Start Date-56', - 'zGenAlbum-End Date-57', - 'zGenAlbum-Album Kind-58', - 'zGenAlbum-Title-User&System Applied-59', - 'zGenAlbum- Import Session ID-60', - 'zGenAlbum-Creator Bundle Identifier-61', - 'zGenAlbum-Cached Photos Count-62', - 'zGenAlbum-Cached Videos Count-63', - 'zGenAlbum-Cached Count-64', - 'zGenAlbum-Trashed State-65', - 'zGenAlbum-Trash Date-66', - 'zGenAlbum-UUID-67', - 'zGenAlbum-Cloud GUID-68', - 'zAsset-zPK-69', - 'zAddAssetAttr-zPK-70', - 'zAsset-UUID = store.cloudphotodb-71', - 'zAddAssetAttr-Master Fingerprint-72') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' basic asset and album data') - - db.close() - return + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + ('zAsset-Trashed Date-13', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-14', + 'zAsset-Saved Asset Type-15', + 'zAddAssetAttr-Creator Bundle ID-16', + 'zAddAssetAttr-Imported By Display Name-17', + 'zAddAssetAttr-Imported by-18', + 'zCldMast-Imported by Bundle ID-19', + 'zCldMast-Imported by Display Name-20', + 'zCldMast-Imported By-21', + 'zAsset-Visibility State-22', + 'zExtAttr-Camera Make-23', + 'zExtAttr-Camera Model-24', + 'zExtAttr-Lens Model-25', + 'zAsset-Derived Camera Capture Device-26', + 'zAddAssetAttr-Camera Captured Device-27', + 'zAddAssetAttr-Share Type-28', + 'zCldMast-Cloud Local State-29', + ('zCldMast-Import Date-30', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-31', 'datetime'), + 'zAddAssetAttr-Import Session ID-32', + ('zAddAssetAttr-Alt Import Image Date-33', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-34', + ('zAsset-Cloud Batch Publish Date-35', 'datetime'), + ('zAsset-Cloud Server Publish Date-36', 'datetime'), + 'zAsset-Cloud Download Requests-37', + 'zAsset-Cloud Batch ID-38', + 'zAsset-Latitude-39', + 'zExtAttr-Latitude-40', + 'zAsset-Longitude-41', + 'zExtAttr-Longitude-42', + 'zAddAssetAttr-GPS Horizontal Accuracy-43', + 'zAddAssetAttr-Location Hash-44', + 'zAddAssetAttr-Shifted Location Valid-45', + 'zAddAssetAttr-Shifted Location Data-46', + 'zAddAssetAttr-Reverse Location Is Valid-47', + 'zAddAssetAttr-Reverse Location Data-48', + 'AAAzCldMastMedData-zOPT-49', + 'zAddAssetAttr-Media Metadata Type-50', + 'AAAzCldMastMedData-Data-51', + 'CldMasterzCldMastMedData-zOPT-52', + 'zCldMast-Media Metadata Type-53', + 'CMzCldMastMedData-Data-54', + ('zGenAlbum-Creation Date-55', 'datetime'), + ('zGenAlbum-Start Date-56', 'datetime'), + ('zGenAlbum-End Date-57', 'datetime'), + 'zGenAlbum-Album Kind-58', + 'zGenAlbum-Title-User&System Applied-59', + 'zGenAlbum- Import Session ID-60', + 'zGenAlbum-Creator Bundle Identifier-61', + 'zGenAlbum-Cached Photos Count-62', + 'zGenAlbum-Cached Videos Count-63', + 'zGenAlbum-Cached Count-64', + 'zGenAlbum-Trashed State-65', + ('zGenAlbum-Trash Date-66', 'datetime'), + 'zGenAlbum-UUID-67', + 'zGenAlbum-Cloud GUID-68', + 'zAsset-zPK-69', + 'zAddAssetAttr-zPK-70', + 'zAsset-UUID = store.cloudphotodb-71', + 'zAddAssetAttr-Master Fingerprint-72') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -4058,15 +4123,11 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z27Assets.Z_27ALBUMS LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -4076,119 +4137,96 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], row[73], row[74], row[75], row[76], row[77])) - counter += 1 - - description = 'Parses basic asset record data from' \ - ' Syndication.photoslibrary-database-Photos.sqlite' \ - ' for basic asset and album data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 15.' \ - ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \ - ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \ - ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \ - ' Shared with You Conversation Identifiers Assets.' - report = ArtifactHtmlReport('Ph2.2-Asset Basic Data & Convers Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Modification Date-7', - 'zAsset-Last Shared Date-8', - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', - 'zAsset- Conversation= zGenAlbum_zPK-14', - 'SWYConverszGenAlbum- Import Session ID-15', - 'zAsset-Syndication State-16', - 'zAsset-Trashed Date-17', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18', - 'zAsset-Saved Asset Type-19', - 'zAddAssetAttr-Imported by Bundle ID-20', - 'zAddAssetAttr-Imported By Display Name-21', - 'zAddAssetAttr-Imported by-22', - 'zCldMast-Imported by Bundle ID-23', - 'zCldMast-Imported by Display Name-24', - 'zCldMast-Imported By-25', - 'zAsset-Visibility State-26', - 'zExtAttr-Camera Make-27', - 'zExtAttr-Camera Model-28', - 'zExtAttr-Lens Model-29', - 'zAsset-Derived Camera Capture Device-30', - 'zAddAssetAttr-Camera Captured Device-31', - 'zAddAssetAttr-Share Type-32', - 'zCldMast-Cloud Local State-33', - 'zCldMast-Import Date-34', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-35', - 'zAddAssetAttr-Import Session ID-36', - 'zAddAssetAttr-Alt Import Image Date-37', - 'zCldMast-Import Session ID- AirDrop-StillTesting-38', - 'zAsset-Cloud Batch Publish Date-39', - 'zAsset-Cloud Server Publish Date-40', - 'zAsset-Cloud Download Requests-41', - 'zAsset-Cloud Batch ID-42', - 'zAsset-Latitude-43', - 'zExtAttr-Latitude-44', - 'zAsset-Longitude-45', - 'zExtAttr-Longitude-46', - 'zAddAssetAttr-GPS Horizontal Accuracy-47', - 'zAddAssetAttr-Location Hash-48', - 'zAddAssetAttr-Shifted Location Valid-49', - 'zAddAssetAttr-Shifted Location Data-50', - 'zAddAssetAttr-Reverse Location Is Valid-51', - 'zAddAssetAttr-Reverse Location Data-52', - 'AAAzCldMastMedData-zOPT-53', - 'zAddAssetAttr-Media Metadata Type-54', - 'AAAzCldMastMedData-Data-55', - 'CldMasterzCldMastMedData-zOPT-56', - 'zCldMast-Media Metadata Type-57', - 'CMzCldMastMedData-Data-58', - 'zAsset-Bundle Scope-59', - 'zGenAlbum-Creation Date-60', - 'zGenAlbum-Start Date-61', - 'zGenAlbum-End Date-62', - 'zGenAlbum-Album Kind-63', - 'zGenAlbum-Title-User&System Applied-64', - 'zGenAlbum- Import Session ID-65', - 'zGenAlbum-Imported by Bundle Identifier-66', - 'zGenAlbum-Cached Photos Count-67', - 'zGenAlbum-Cached Videos Count-68', - 'zGenAlbum-Cached Count-69', - 'zGenAlbum-Trashed State-70', - 'zGenAlbum-Trash Date-71', - 'zGenAlbum-UUID-72', - 'zGenAlbum-Cloud GUID-73', - 'zAsset-zPK-74', - 'zAddAssetAttr-zPK-75', - 'zAsset-UUID = store.cloudphotodb-76', - 'zAddAssetAttr-Master Fingerprint-77') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' basic asset and album data') - - db.close() - return + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', + 'zAsset- Conversation= zGenAlbum_zPK-14', + 'SWYConverszGenAlbum- Import Session ID-15', + 'zAsset-Syndication State-16', + ('zAsset-Trashed Date-17', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18', + 'zAsset-Saved Asset Type-19', + 'zAddAssetAttr-Imported by Bundle ID-20', + 'zAddAssetAttr-Imported By Display Name-21', + 'zAddAssetAttr-Imported by-22', + 'zCldMast-Imported by Bundle ID-23', + 'zCldMast-Imported by Display Name-24', + 'zCldMast-Imported By-25', + 'zAsset-Visibility State-26', + 'zExtAttr-Camera Make-27', + 'zExtAttr-Camera Model-28', + 'zExtAttr-Lens Model-29', + 'zAsset-Derived Camera Capture Device-30', + 'zAddAssetAttr-Camera Captured Device-31', + 'zAddAssetAttr-Share Type-32', + 'zCldMast-Cloud Local State-33', + ('zCldMast-Import Date-34', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-35', 'datetime'), + 'zAddAssetAttr-Import Session ID-36', + ('zAddAssetAttr-Alt Import Image Date-37', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-38', + ('zAsset-Cloud Batch Publish Date-39', 'datetime'), + ('zAsset-Cloud Server Publish Date-40', 'datetime'), + 'zAsset-Cloud Download Requests-41', + 'zAsset-Cloud Batch ID-42', + 'zAsset-Latitude-43', + 'zExtAttr-Latitude-44', + 'zAsset-Longitude-45', + 'zExtAttr-Longitude-46', + 'zAddAssetAttr-GPS Horizontal Accuracy-47', + 'zAddAssetAttr-Location Hash-48', + 'zAddAssetAttr-Shifted Location Valid-49', + 'zAddAssetAttr-Shifted Location Data-50', + 'zAddAssetAttr-Reverse Location Is Valid-51', + 'zAddAssetAttr-Reverse Location Data-52', + 'AAAzCldMastMedData-zOPT-53', + 'zAddAssetAttr-Media Metadata Type-54', + 'AAAzCldMastMedData-Data-55', + 'CldMasterzCldMastMedData-zOPT-56', + 'zCldMast-Media Metadata Type-57', + 'CMzCldMastMedData-Data-58', + 'zAsset-Bundle Scope-59', + ('zGenAlbum-Creation Date-60', 'datetime'), + ('zGenAlbum-Start Date-61', 'datetime'), + ('zGenAlbum-End Date-62', 'datetime'), + 'zGenAlbum-Album Kind-63', + 'zGenAlbum-Title-User&System Applied-64', + 'zGenAlbum- Import Session ID-65', + 'zGenAlbum-Imported by Bundle Identifier-66', + 'zGenAlbum-Cached Photos Count-67', + 'zGenAlbum-Cached Videos Count-68', + 'zGenAlbum-Cached Count-69', + 'zGenAlbum-Trashed State-70', + ('zGenAlbum-Trash Date-71', 'datetime'), + 'zGenAlbum-UUID-72', + 'zGenAlbum-Cloud GUID-73', + 'zAsset-zPK-74', + 'zAddAssetAttr-zPK-75', + 'zAsset-UUID = store.cloudphotodb-76', + 'zAddAssetAttr-Master Fingerprint-77') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -4433,15 +4471,11 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -4451,121 +4485,98 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], row[73], row[74], row[75], row[76], row[77], row[78], row[79])) - counter += 1 - - description = 'Parses basic asset record data from' \ - ' Syndication.photoslibrary-database-Photos.sqlite' \ - ' for basic asset and album data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 16.' \ - ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \ - ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \ - ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \ - ' Shared with You Conversation Identifiers Assets.' - report = ArtifactHtmlReport('Ph2.2-Asset Basic Data & Convers Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Modification Date-7', - 'zAsset-Last Shared Date-8', - 'zAsset-Directory-Path-9', - 'zAsset-Filename-10', - 'zAddAssetAttr- Original Filename-11', - 'zCldMast- Original Filename-12', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', - 'zAsset- Conversation= zGenAlbum_zPK-14', - 'SWYConverszGenAlbum- Import Session ID-15', - 'zAsset-Syndication State-16', - 'zAsset-Trashed Date-17', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-19', - 'zAsset-Saved Asset Type-20', - 'zAddAssetAttr-Imported by Bundle ID-21', - 'zAddAssetAttr-Imported By Display Name-22', - 'zAddAssetAttr-Imported by-23', - 'zCldMast-Imported by Bundle ID-24', - 'zCldMast-Imported by Display Name-25', - 'zCldMast-Imported By-26', - 'zAsset-Visibility State-27', - 'zExtAttr-Camera Make-28', - 'zExtAttr-Camera Model-29', - 'zExtAttr-Lens Model-30', - 'zAsset-Derived Camera Capture Device-31', - 'zAddAssetAttr-Camera Captured Device-32', - 'zAddAssetAttr-Share Type-33', - 'zCldMast-Cloud Local State-34', - 'zCldMast-Import Date-35', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-36', - 'zAddAssetAttr-Import Session ID-37', - 'zAddAssetAttr-Alt Import Image Date-38', - 'zCldMast-Import Session ID- AirDrop-StillTesting-39', - 'zAsset-Cloud Batch Publish Date-40', - 'zAsset-Cloud Server Publish Date-41', - 'zAsset-Cloud Download Requests-42', - 'zAsset-Cloud Batch ID-43', - 'zAsset-Latitude-44', - 'zExtAttr-Latitude-45', - 'zAsset-Longitude-46', - 'zExtAttr-Longitude-47', - 'zAddAssetAttr-GPS Horizontal Accuracy-48', - 'zAddAssetAttr-Location Hash-49', - 'zAddAssetAttr-Shifted Location Valid-50', - 'zAddAssetAttr-Shifted Location Data-51', - 'zAddAssetAttr-Reverse Location Is Valid-52', - 'zAddAssetAttr-Reverse Location Data-53', - 'AAAzCldMastMedData-zOPT-54', - 'zAddAssetAttr-Media Metadata Type-55', - 'AAAzCldMastMedData-Data-56', - 'CldMasterzCldMastMedData-zOPT-57', - 'zCldMast-Media Metadata Type-58', - 'CMzCldMastMedData-Data-59', - 'zAsset-Bundle Scope-60', - 'zGenAlbum-Creation Date-61', - 'zGenAlbum-Start Date-62', - 'zGenAlbum-End Date-63', - 'zGenAlbum-Album Kind-64', - 'zGenAlbum-Title-User&System Applied-65', - 'zGenAlbum- Import Session ID-66', - 'zGenAlbum-Imported by Bundle Identifier-67', - 'zGenAlbum-Cached Photos Count-68', - 'zGenAlbum-Cached Videos Count-69', - 'zGenAlbum-Cached Count-70', - 'zGenAlbum-Trashed State-71', - 'zGenAlbum-Trash Date-72', - 'zGenAlbum-UUID-73', - 'zGenAlbum-Cloud GUID-74', - 'zAsset-Active Library Scope Participation State-75', - 'zAsset-zPK-76', - 'zAddAssetAttr-zPK-77', - 'zAsset-UUID = store.cloudphotodb-78', - 'zAddAssetAttr-Master Fingerprint-79') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' basic asset and album data') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + 'zAsset-Directory-Path-9', + 'zAsset-Filename-10', + 'zAddAssetAttr- Original Filename-11', + 'zCldMast- Original Filename-12', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', + 'zAsset- Conversation= zGenAlbum_zPK-14', + 'SWYConverszGenAlbum- Import Session ID-15', + 'zAsset-Syndication State-16', + ('zAsset-Trashed Date-17', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-18', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-19', + 'zAsset-Saved Asset Type-20', + 'zAddAssetAttr-Imported by Bundle ID-21', + 'zAddAssetAttr-Imported By Display Name-22', + 'zAddAssetAttr-Imported by-23', + 'zCldMast-Imported by Bundle ID-24', + 'zCldMast-Imported by Display Name-25', + 'zCldMast-Imported By-26', + 'zAsset-Visibility State-27', + 'zExtAttr-Camera Make-28', + 'zExtAttr-Camera Model-29', + 'zExtAttr-Lens Model-30', + 'zAsset-Derived Camera Capture Device-31', + 'zAddAssetAttr-Camera Captured Device-32', + 'zAddAssetAttr-Share Type-33', + 'zCldMast-Cloud Local State-34', + ('zCldMast-Import Date-35', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-36', 'datetime'), + 'zAddAssetAttr-Import Session ID-37', + ('zAddAssetAttr-Alt Import Image Date-38', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-39', + ('zAsset-Cloud Batch Publish Date-40', 'datetime'), + ('zAsset-Cloud Server Publish Date-41', 'datetime'), + ('zAsset-Cloud Download Requests-42', 'datetime'), + 'zAsset-Cloud Batch ID-43', + 'zAsset-Latitude-44', + 'zExtAttr-Latitude-45', + 'zAsset-Longitude-46', + 'zExtAttr-Longitude-47', + 'zAddAssetAttr-GPS Horizontal Accuracy-48', + 'zAddAssetAttr-Location Hash-49', + 'zAddAssetAttr-Shifted Location Valid-50', + 'zAddAssetAttr-Shifted Location Data-51', + 'zAddAssetAttr-Reverse Location Is Valid-52', + 'zAddAssetAttr-Reverse Location Data-53', + 'AAAzCldMastMedData-zOPT-54', + 'zAddAssetAttr-Media Metadata Type-55', + 'AAAzCldMastMedData-Data-56', + 'CldMasterzCldMastMedData-zOPT-57', + 'zCldMast-Media Metadata Type-58', + 'CMzCldMastMedData-Data-59', + 'zAsset-Bundle Scope-60', + ('zGenAlbum-Creation Date-61', 'datetime'), + ('zGenAlbum-Start Date-62', 'datetime'), + ('zGenAlbum-End Date-63', 'datetime'), + 'zGenAlbum-Album Kind-64', + 'zGenAlbum-Title-User&System Applied-65', + 'zGenAlbum- Import Session ID-66', + 'zGenAlbum-Imported by Bundle Identifier-67', + 'zGenAlbum-Cached Photos Count-68', + 'zGenAlbum-Cached Videos Count-69', + 'zGenAlbum-Cached Count-70', + 'zGenAlbum-Trashed State-71', + ('zGenAlbum-Trash Date-72', 'datetime'), + 'zGenAlbum-UUID-73', + 'zGenAlbum-Cloud GUID-74', + 'zAsset-Active Library Scope Participation State-75', + 'zAsset-zPK-76', + 'zAddAssetAttr-zPK-77', + 'zAsset-UUID = store.cloudphotodb-78', + 'zAddAssetAttr-Master Fingerprint-79') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -4810,15 +4821,11 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -4828,122 +4835,450 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80])) - counter += 1 - - description = 'Parses basic asset record data from' \ - ' Syndication.photoslibrary-database-Photos.sqlite' \ - ' for basic asset and album data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 17.' \ - ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \ - ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \ - ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \ - ' Shared with You Conversation Identifiers Assets.' - report = ArtifactHtmlReport('Ph2.2-Asset Basic Data & Convers Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Modification Date-7', - 'zAsset-Last Shared Date-8', - 'zAddAssetAttr-Last Viewed Date-9', - 'zAsset-Directory-Path-10', - 'zAsset-Filename-11', - 'zAddAssetAttr- Original Filename-12', - 'zCldMast- Original Filename-13', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', - 'zAsset- Conversation= zGenAlbum_zPK-15', - 'SWYConverszGenAlbum- Import Session ID-16', - 'zAsset-Syndication State-17', - 'zAsset-Trashed Date-18', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-20', - 'zAsset-Saved Asset Type-21', - 'zAddAssetAttr-Imported by Bundle ID-22', - 'zAddAssetAttr-Imported By Display Name-23', - 'zAddAssetAttr-Imported by-24', - 'zCldMast-Imported by Bundle ID-25', - 'zCldMast-Imported by Display Name-26', - 'zCldMast-Imported By-27', - 'zAsset-Visibility State-28', - 'zExtAttr-Camera Make-29', - 'zExtAttr-Camera Model-30', - 'zExtAttr-Lens Model-31', - 'zAsset-Derived Camera Capture Device-32', - 'zAddAssetAttr-Camera Captured Device-33', - 'zAddAssetAttr-Share Type-34', - 'zCldMast-Cloud Local State-35', - 'zCldMast-Import Date-36', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-37', - 'zAddAssetAttr-Import Session ID-38', - 'zAddAssetAttr-Alt Import Image Date-39', - 'zCldMast-Import Session ID- AirDrop-StillTesting-40', - 'zAsset-Cloud Batch Publish Date-41', - 'zAsset-Cloud Server Publish Date-42', - 'zAsset-Cloud Download Requests-43', - 'zAsset-Cloud Batch ID-44', - 'zAsset-Latitude-45', - 'zExtAttr-Latitude-46', - 'zAsset-Longitude-47', - 'zExtAttr-Longitude-48', - 'zAddAssetAttr-GPS Horizontal Accuracy-49', - 'zAddAssetAttr-Location Hash-50', - 'zAddAssetAttr-Shifted Location Valid-51', - 'zAddAssetAttr-Shifted Location Data-52', - 'zAddAssetAttr-Reverse Location Is Valid-53', - 'zAddAssetAttr-Reverse Location Data-54', - 'AAAzCldMastMedData-zOPT-55', - 'zAddAssetAttr-Media Metadata Type-56', - 'AAAzCldMastMedData-Data-57', - 'CldMasterzCldMastMedData-zOPT-58', - 'zCldMast-Media Metadata Type-59', - 'CMzCldMastMedData-Data-60', - 'zAsset-Bundle Scope-61', - 'zGenAlbum-Creation Date-62', - 'zGenAlbum-Start Date-63', - 'zGenAlbum-End Date-64', - 'zGenAlbum-Album Kind-65', - 'zGenAlbum-Title-User&System Applied-66', - 'zGenAlbum- Import Session ID-67', - 'zGenAlbum-Imported by Bundle Identifier-68', - 'zGenAlbum-Cached Photos Count-69', - 'zGenAlbum-Cached Videos Count-70', - 'zGenAlbum-Cached Count-71', - 'zGenAlbum-Trashed State-72', - 'zGenAlbum-Trash Date-73', - 'zGenAlbum-UUID-74', - 'zGenAlbum-Cloud GUID-75', - 'zAsset-Active Library Scope Participation State-76', - 'zAsset-zPK-77', - 'zAddAssetAttr-zPK-78', - 'zAsset-UUID = store.cloudphotodb-79', - 'zAddAssetAttr-Master Fingerprint-80') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + ('zAddAssetAttr-Last Viewed Date-9', 'datetime'), + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAsset- Conversation= zGenAlbum_zPK-15', + 'SWYConverszGenAlbum- Import Session ID-16', + 'zAsset-Syndication State-17', + ('zAsset-Trashed Date-18', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-20', + 'zAsset-Saved Asset Type-21', + 'zAddAssetAttr-Imported by Bundle ID-22', + 'zAddAssetAttr-Imported By Display Name-23', + 'zAddAssetAttr-Imported by-24', + 'zCldMast-Imported by Bundle ID-25', + 'zCldMast-Imported by Display Name-26', + 'zCldMast-Imported By-27', + 'zAsset-Visibility State-28', + 'zExtAttr-Camera Make-29', + 'zExtAttr-Camera Model-30', + 'zExtAttr-Lens Model-31', + 'zAsset-Derived Camera Capture Device-32', + 'zAddAssetAttr-Camera Captured Device-33', + 'zAddAssetAttr-Share Type-34', + 'zCldMast-Cloud Local State-35', + ('zCldMast-Import Date-36', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-37', 'datetime'), + 'zAddAssetAttr-Import Session ID-38', + ('zAddAssetAttr-Alt Import Image Date-39', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-40', + ('zAsset-Cloud Batch Publish Date-41', 'datetime'), + ('zAsset-Cloud Server Publish Date-42', 'datetime'), + 'zAsset-Cloud Download Requests-43', + 'zAsset-Cloud Batch ID-44', + 'zAsset-Latitude-45', + 'zExtAttr-Latitude-46', + 'zAsset-Longitude-47', + 'zExtAttr-Longitude-48', + 'zAddAssetAttr-GPS Horizontal Accuracy-49', + 'zAddAssetAttr-Location Hash-50', + 'zAddAssetAttr-Shifted Location Valid-51', + 'zAddAssetAttr-Shifted Location Data-52', + 'zAddAssetAttr-Reverse Location Is Valid-53', + 'zAddAssetAttr-Reverse Location Data-54', + 'AAAzCldMastMedData-zOPT-55', + 'zAddAssetAttr-Media Metadata Type-56', + 'AAAzCldMastMedData-Data-57', + 'CldMasterzCldMastMedData-zOPT-58', + 'zCldMast-Media Metadata Type-59', + 'CMzCldMastMedData-Data-60', + 'zAsset-Bundle Scope-61', + ('zGenAlbum-Creation Date-62', 'datetime'), + ('zGenAlbum-Start Date-63', 'datetime'), + ('zGenAlbum-End Date-64', 'datetime'), + 'zGenAlbum-Album Kind-65', + 'zGenAlbum-Title-User&System Applied-66', + 'zGenAlbum- Import Session ID-67', + 'zGenAlbum-Imported by Bundle Identifier-68', + 'zGenAlbum-Cached Photos Count-69', + 'zGenAlbum-Cached Videos Count-70', + 'zGenAlbum-Cached Count-71', + 'zGenAlbum-Trashed State-72', + ('zGenAlbum-Trash Date-73', 'datetime'), + 'zGenAlbum-UUID-74', + 'zGenAlbum-Cloud GUID-75', + 'zAsset-Active Library Scope Participation State-76', + 'zAsset-zPK-77', + 'zAddAssetAttr-zPK-78', + 'zAsset-UUID = store.cloudphotodb-79', + 'zAddAssetAttr-Master Fingerprint-80') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - tlactivity = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK ', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr-Imported by Bundle ID', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', + zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', + CASE zCldMast.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' + END AS 'zCldMast-Imported By', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', + CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' + END AS 'zAsset-Derived Camera Capture Device', + CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' + END AS 'zAddAssetAttr-Camera Captured Device', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zCldMast.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-Not Synced with Cloud-0' + WHEN 1 THEN '1-Pending Upload-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-Synced with Cloud-3' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' + END AS 'zCldMast-Cloud Local State', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') + AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') + AS 'zAddAssetAttr-Alt Import Image Date', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', + zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', + zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', + CASE zAsset.ZLATITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLATITUDE + END AS 'zAsset-Latitude', + zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', + CASE zAsset.ZLONGITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLONGITUDE + END AS 'zAsset-Longitude', + zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', + CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY + END AS 'zAddAssetAttr-GPS Horizontal Accuracy', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID + WHEN 0 THEN '0-Shifted Location Not Valid-0' + WHEN 1 THEN '1-Shifted Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' + END AS 'zAddAssetAttr-Shifted Location Valid', + CASE + WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' + ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Shifted Location Data', + CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID + WHEN 0 THEN '0-Reverse Location Not Valid-0' + WHEN 1 THEN '1-Reverse Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' + END AS 'zAddAssetAttr-Reverse Location Is Valid', + CASE + WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Reverse Location Data', + CASE AAAzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Cloud-1' + WHEN 2 THEN '2-StillTesting-This Device-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' + END AS 'AAAzCldMastMedData-zOPT', + zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', + CASE + WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' + ELSE 'AAAzCldMastMedData-Data_Empty-NULL' + END AS 'AAAzCldMastMedData-Data', + CASE CMzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' + WHEN 2 THEN '2-StillTesting-Local_Asset-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' + END AS 'CldMasterzCldMastMedData-zOPT', + zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', + CASE + WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' + ELSE 'CMzCldMastMedData-Data_Empty-NULL' + END AS 'CMzCldMastMedData-Data', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind', + zGenAlbum.ZTITLE AS 'zGenAlbum-Title-User&System Applied', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum- Import Session ID', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier', + zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum-Cached Photos Count', + zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum-Cached Videos Count', + zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum-Cached Count', + CASE zGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'zGenAlbum Not In Trash-0' + WHEN 1 THEN 'zGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || '' + END AS 'zGenAlbum-Trashed State', + DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z29Assets.Z_29ALBUMS + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON + AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON + CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA + LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION + ORDER BY zAsset.ZDATECREATED + ''' - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' basic asset and album data') + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80])) - db.close() - return + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + ('zAddAssetAttr-Last Viewed Date-9', 'datetime'), + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAsset- Conversation= zGenAlbum_zPK-15', + 'SWYConverszGenAlbum- Import Session ID-16', + 'zAsset-Syndication State-17', + ('zAsset-Trashed Date-18', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-20', + 'zAsset-Saved Asset Type-21', + 'zAddAssetAttr-Imported by Bundle ID-22', + 'zAddAssetAttr-Imported By Display Name-23', + 'zAddAssetAttr-Imported by-24', + 'zCldMast-Imported by Bundle ID-25', + 'zCldMast-Imported by Display Name-26', + 'zCldMast-Imported By-27', + 'zAsset-Visibility State-28', + 'zExtAttr-Camera Make-29', + 'zExtAttr-Camera Model-30', + 'zExtAttr-Lens Model-31', + 'zAsset-Derived Camera Capture Device-32', + 'zAddAssetAttr-Camera Captured Device-33', + 'zAddAssetAttr-Share Type-34', + 'zCldMast-Cloud Local State-35', + ('zCldMast-Import Date-36', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-37', 'datetime'), + 'zAddAssetAttr-Import Session ID-38', + ('zAddAssetAttr-Alt Import Image Date-39', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-40', + ('zAsset-Cloud Batch Publish Date-41', 'datetime'), + ('zAsset-Cloud Server Publish Date-42', 'datetime'), + 'zAsset-Cloud Download Requests-43', + 'zAsset-Cloud Batch ID-44', + 'zAsset-Latitude-45', + 'zExtAttr-Latitude-46', + 'zAsset-Longitude-47', + 'zExtAttr-Longitude-48', + 'zAddAssetAttr-GPS Horizontal Accuracy-49', + 'zAddAssetAttr-Location Hash-50', + 'zAddAssetAttr-Shifted Location Valid-51', + 'zAddAssetAttr-Shifted Location Data-52', + 'zAddAssetAttr-Reverse Location Is Valid-53', + 'zAddAssetAttr-Reverse Location Data-54', + 'AAAzCldMastMedData-zOPT-55', + 'zAddAssetAttr-Media Metadata Type-56', + 'AAAzCldMastMedData-Data-57', + 'CldMasterzCldMastMedData-zOPT-58', + 'zCldMast-Media Metadata Type-59', + 'CMzCldMastMedData-Data-60', + 'zAsset-Bundle Scope-61', + ('zGenAlbum-Creation Date-62', 'datetime'), + ('zGenAlbum-Start Date-63', 'datetime'), + ('zGenAlbum-End Date-64', 'datetime'), + 'zGenAlbum-Album Kind-65', + 'zGenAlbum-Title-User&System Applied-66', + 'zGenAlbum- Import Session ID-67', + 'zGenAlbum-Imported by Bundle Identifier-68', + 'zGenAlbum-Cached Photos Count-69', + 'zGenAlbum-Cached Videos Count-70', + 'zGenAlbum-Cached Count-71', + 'zGenAlbum-Trashed State-72', + ('zGenAlbum-Trash Date-73', 'datetime'), + 'zGenAlbum-UUID-74', + 'zGenAlbum-Cloud GUID-75', + 'zAsset-Active Library Scope Participation State-76', + 'zAsset-zPK-77', + 'zAddAssetAttr-zPK-78', + 'zAsset-UUID = store.cloudphotodb-79', + 'zAddAssetAttr-Master Fingerprint-80') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -4980,10 +5315,10 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recenlty_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' + WHEN 0 THEN '0-Not_Recenlty_Saved_Still_Testing-0' + WHEN 1 THEN '1-Recently_Saved_Still_Testing-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', + END AS 'zAsset-Is_Recently_Saved', CASE zAsset.ZSAVEDASSETTYPE WHEN 0 THEN '0-Saved-via-other-source-0' WHEN 1 THEN '1-StillTesting-1' @@ -5051,7 +5386,7 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr WHEN 1 THEN '1-Front-Camera-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' END AS 'zAddAssetAttr-Camera Captured Device', - zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier-iOS18', + zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier', CASE zAddAssetAttr.ZSHARETYPE WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' @@ -5181,13 +5516,13 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN Z_31ASSETS z31Assets ON z31Assets.Z_3ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z31Assets.Z_31ALBUMS + LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z30Assets.Z_30ALBUMS LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA @@ -5195,15 +5530,11 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION ORDER BY zAsset.ZDATECREATED - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -5214,154 +5545,90 @@ def get_ph2asserbasicandconversdatasyndpl(files_found, report_folder, seeker, wr row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], row[82], row[83])) - counter += 1 - - description = 'Parses basic asset record data from' \ - ' Syndication.photoslibrary-database-Photos.sqlite' \ - ' for basic asset and album data. The results may contain multiple records' \ - ' per ZASSET table Z_PK value and supports iOS 18.' \ - ' Use "2-Non-Shared-Album-2" in the search box to view Non-Shared Albums Assets.' \ - ' Use "1505-Shared-Album-1505" in the search box to view Shared Albums Assets.' \ - ' Use "1509-SWY_Synced_Conversation_Media-1509" in the search box to view' \ - ' Shared with You Conversation Identifiers Assets.' - report = ArtifactHtmlReport('Ph2.2-Asset Basic Data & Convers Data-SyndPL') - report.start_artifact_report(report_folder, 'Ph2.2-Asset Basic Data & Convers Data-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset-Added Date-2', - 'zCldMast-Creation Date-3', - 'zAddAssetAttr-Time Zone Name-4', - 'zAddAssetAttr-Time Zone Offset-5', - 'zAddAssetAttr-EXIF-String-6', - 'zAsset-Modification Date-7', - 'zAsset-Last Shared Date-8', - 'zAddAssetAttr-Last Viewed Date-9', - 'zAsset-Directory-Path-10', - 'zAsset-Filename-11', - 'zAddAssetAttr- Original Filename-12', - 'zCldMast- Original Filename-13', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', - 'zAsset- Conversation= zGenAlbum_zPK-15', - 'SWYConverszGenAlbum- Import Session ID-16', - 'zAsset-Syndication State-17', - 'zAsset-Trashed Date-18', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-20', - 'zAsset-Is_Recently_Saved-iOS18-21', - 'zAsset-Saved Asset Type-22', - 'zAddAssetAttr-Imported by Bundle ID-23', - 'zAddAssetAttr-Imported By Display Name-24', - 'zAddAssetAttr-Imported by-25', - 'zCldMast-Imported by Bundle ID-26', - 'zCldMast-Imported by Display Name-27', - 'zCldMast-Imported By-28', - 'zAsset-Visibility State-29', - 'zExtAttr-Camera Make-30', - 'zExtAttr-Camera Model-31', - 'zExtAttr-Lens Model-32', - 'zAsset-Derived Camera Capture Device-33', - 'zAddAssetAttr-Camera Captured Device-34', - 'zAsset-Capture_Session_Identifier-iOS18-35', - 'zAddAssetAttr-Share Type-36', - 'zCldMast-Cloud Local State-37', - 'zCldMast-Import Date-38', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-39', - 'zAddAssetAttr-Import Session ID-40', - 'zAddAssetAttr-Alt Import Image Date-41', - 'zCldMast-Import Session ID- AirDrop-StillTesting-42', - 'zAsset-Cloud Batch Publish Date-43', - 'zAsset-Cloud Server Publish Date-44', - 'zAsset-Cloud Download Requests-45', - 'zAsset-Cloud Batch ID-46', - 'zAsset-Latitude-47', - 'zExtAttr-Latitude-48', - 'zAsset-Longitude-49', - 'zExtAttr-Longitude-50', - 'zAddAssetAttr-GPS Horizontal Accuracy-51', - 'zAddAssetAttr-Location Hash-52', - 'zAddAssetAttr-Shifted Location Valid-53', - 'zAddAssetAttr-Shifted Location Data-54', - 'zAddAssetAttr-Reverse Location Is Valid-55', - 'zAddAssetAttr-Reverse Location Data-56', - 'AAAzCldMastMedData-zOPT-57', - 'zAddAssetAttr-Media Metadata Type-58', - 'AAAzCldMastMedData-Data-59', - 'CldMasterzCldMastMedData-zOPT-60', - 'zCldMast-Media Metadata Type-61', - 'CMzCldMastMedData-Data-62', - 'zAsset-Bundle Scope-63', - 'zGenAlbum-Creation Date-64', - 'zGenAlbum-Start Date-65', - 'zGenAlbum-End Date-66', - 'zGenAlbum-Album Kind-67', - 'zGenAlbum-Title-User&System Applied-68', - 'zGenAlbum- Import Session ID-69', - 'zGenAlbum-Imported by Bundle Identifier-70', - 'zGenAlbum-Cached Photos Count-71', - 'zGenAlbum-Cached Videos Count-72', - 'zGenAlbum-Cached Count-73', - 'zGenAlbum-Trashed State-74', - 'zGenAlbum-Trash Date-75', - 'zGenAlbum-UUID-76', - 'zGenAlbum-Cloud GUID-77', - 'zAsset-Active Library Scope Participation State-78', - 'zAsset-zPK-79', - 'zAddAssetAttr-zPK-80', - 'zAsset-UUID = store.cloudphotodb-81', - 'zAddAssetAttr-Original Stable Hash-iOS18-82', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-83') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph2.2-Asset Basic Data & Convers Data-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' basic asset and album data') - - db.close() - return - - -__artifacts_v2__ = { - 'Ph2-1-Asset Basic & GenAlbum Data-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite 2.1 Asset Basic & Generic Album Data', - 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for basic asset and album data.' - ' The results may contain multiple records per ZASSET table Z_PK value and supports iOS 11-18.' - ' Use 2-Non-Shared-Album-2 in the search box to view Non-Shared Albums Assets.' - ' Use 1505-Shared-Album-1505 in the search box to view Shared Albums Assets.' - ' Use 1509-SWY_Synced_Conversation_Media-1509 in the search box to view' - ' Shared with You Conversation Identifiers Assets.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-A-Asset_Basic_Data', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph2assetbasicandalbumdataphdapsql' - }, - 'Ph2-2-Asset Basic & Conversation Data-SyndPL': { - 'name': 'SyndPL Photos.sqlite 2.2 Asset Basic and Conversation Data', - 'description': 'Parses basic asset record data from -Syndication.photoslibrary-database-Photos.sqlite' - ' for basic asset and album data. The results may contain multiple records' - ' per ZASSET table Z_PK value and supports iOS 11-18.' - ' Use -Non-Shared-Album-2 in the search box to view Non-Shared Albums Assets.' - ' Use 1505-Shared-Album-1505 in the search box to view Shared Albums Assets.' - ' Use 1509-SWY_Synced_Conversation_Media-1509 in the search box to view' - ' Shared with You Conversation Identifiers Assets.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', - 'notes': '', - 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*', - 'function': 'get_ph2asserbasicandconversdatasyndpl' - } -} + data_headers = (('zAsset-Date Created-0', 'datetime'), + ('zAsset- SortToken -CameraRoll-1', 'datetime'), + ('zAsset-Added Date-2', 'datetime'), + ('zCldMast-Creation Date-3', 'datetime'), + 'zAddAssetAttr-Time Zone Name-4', + 'zAddAssetAttr-Time Zone Offset-5', + 'zAddAssetAttr-EXIF-String-6', + ('zAsset-Modification Date-7', 'datetime'), + ('zAsset-Last Shared Date-8', 'datetime'), + ('zAddAssetAttr-Last Viewed Date-9', 'datetime'), + 'zAsset-Directory-Path-10', + 'zAsset-Filename-11', + 'zAddAssetAttr- Original Filename-12', + 'zCldMast- Original Filename-13', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-14', + 'zAsset- Conversation= zGenAlbum_zPK-15', + 'SWYConverszGenAlbum- Import Session ID-16', + 'zAsset-Syndication State-17', + ('zAsset-Trashed Date-18', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-19', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-20', + 'zAsset-Is_Recently_Saved-21', + 'zAsset-Saved Asset Type-22', + 'zAddAssetAttr-Imported by Bundle ID-23', + 'zAddAssetAttr-Imported By Display Name-24', + 'zAddAssetAttr-Imported by-25', + 'zCldMast-Imported by Bundle ID-26', + 'zCldMast-Imported by Display Name-27', + 'zCldMast-Imported By-28', + 'zAsset-Visibility State-29', + 'zExtAttr-Camera Make-30', + 'zExtAttr-Camera Model-31', + 'zExtAttr-Lens Model-32', + 'zAsset-Derived Camera Capture Device-33', + 'zAddAssetAttr-Camera Captured Device-34', + 'zAsset-Capture_Session_Identifier-35', + 'zAddAssetAttr-Share Type-36', + 'zCldMast-Cloud Local State-37', + ('zCldMast-Import Date-38', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-39', 'datetime'), + 'zAddAssetAttr-Import Session ID-40', + ('zAddAssetAttr-Alt Import Image Date-41', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-42', + ('zAsset-Cloud Batch Publish Date-43', 'datetime'), + ('zAsset-Cloud Server Publish Date-44', 'datetime'), + 'zAsset-Cloud Download Requests-45', + 'zAsset-Cloud Batch ID-46', + 'zAsset-Latitude-47', + 'zExtAttr-Latitude-48', + 'zAsset-Longitude-49', + 'zExtAttr-Longitude-50', + 'zAddAssetAttr-GPS Horizontal Accuracy-51', + 'zAddAssetAttr-Location Hash-52', + 'zAddAssetAttr-Shifted Location Valid-53', + 'zAddAssetAttr-Shifted Location Data-54', + 'zAddAssetAttr-Reverse Location Is Valid-55', + 'zAddAssetAttr-Reverse Location Data-56', + 'AAAzCldMastMedData-zOPT-57', + 'zAddAssetAttr-Media Metadata Type-58', + 'AAAzCldMastMedData-Data-59', + 'CldMasterzCldMastMedData-zOPT-60', + 'zCldMast-Media Metadata Type-61', + 'CMzCldMastMedData-Data-62', + 'zAsset-Bundle Scope-63', + ('zGenAlbum-Creation Date-64', 'datetime'), + ('zGenAlbum-Start Date-65', 'datetime'), + ('zGenAlbum-End Date-66', 'datetime'), + 'zGenAlbum-Album Kind-67', + 'zGenAlbum-Title-User&System Applied-68', + 'zGenAlbum- Import Session ID-69', + 'zGenAlbum-Imported by Bundle Identifier-70', + 'zGenAlbum-Cached Photos Count-71', + 'zGenAlbum-Cached Videos Count-72', + 'zGenAlbum-Cached Count-73', + 'zGenAlbum-Trashed State-74', + ('zGenAlbum-Trash Date-75', 'datetime'), + 'zGenAlbum-UUID-76', + 'zGenAlbum-Cloud GUID-77', + 'zAsset-Active Library Scope Participation State-78', + 'zAsset-zPK-79', + 'zAddAssetAttr-zPK-80', + 'zAsset-UUID = store.cloudphotodb-81', + 'zAddAssetAttr-Original Stable Hash-82', + 'zAddAssetAttr.Adjusted Stable Hash-83') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph30iCloudShareMethodsNAD.py b/scripts/artifacts/Ph30iCloudShareMethodsNAD.py index cfaf3c04..b43d93ef 100644 --- a/scripts/artifacts/Ph30iCloudShareMethodsNAD.py +++ b/scripts/artifacts/Ph30iCloudShareMethodsNAD.py @@ -1,42 +1,50 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses records for different methods which media files have been shared via iCloud Share -# found in the PhotoData-Photos.sqlite ZSHARE Table and supports iOS 14-18. Parses iCloud Share Methods and -# Participant records only no asset data being parsed. The iCloud Share methods being stored in these records include -# Shred iCloud Links Cloud Master Moments-CMM and Shared iCloud Photo Library (SPL). -# This parser is based on research and SQLite Queries written by Scott Koenig -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph30iCloudSharedMethodswithNADPhDaPsql': { + 'name': 'Ph30-iCloud Shared Methods NAD-PhDaPsql', + 'description': 'Parses records for different methods which media files have been shared via iCloud Share' + ' found in the PhotoData-Photos.sqlite ZSHARE Table and supports iOS 14-18.' + ' Parses iCloud Share Methods and Participant records only no asset data being parsed.' + ' The iCloud Share methods being stored in these records include' + ' Shred iCloud Links Cloud Master Moments-CMM and Shared iCloud Photo Library SPL.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc +@artifact_processor +def Ph30iCloudSharedMethodswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) -def get_ph30icldsharemethphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("13.7"): - logfunc("Unsupported version for PhotoData-Photos.sqlite zSHARE iCloud Shared Method records" - " with no asset data on iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', @@ -60,7 +68,7 @@ def get_ph30icldsharemethphdapsql(files_found, report_folder, seeker, wrap_text, zShare.ZPHOTOSCOUNT AS 'zShare-Photos Count', zShare.ZUPLOADEDPHOTOSCOUNT AS 'zShare-Uploaded Photos Count', zShare.ZVIDEOSCOUNT AS 'zShare-Videos Count', - zShare.ZUPLOADEDVIDEOSCOUNT AS 'zShare-Uploaded Videos Count', + zShare.ZUPLOADEDVIDEOSCOUNT AS 'zShare-Uploaded Videos Count', zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID', zShare.ZTITLE AS 'zShare-Title-SPL', zShare.ZSHAREURL AS 'zShare-Share URL', @@ -116,90 +124,66 @@ def get_ph30icldsharemethphdapsql(files_found, report_folder, seeker, wrap_text, CASE zShare.Z_ENT WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' END AS 'zShare-zENT' FROM ZSHARE zShare LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK ORDER BY zShare.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31])) - - counter += 1 - - description = 'Parses records for different methods which media files have been shared via iCloud Share' \ - ' found in the PhotoData-Photos.sqlite ZSHARE Table and supports iOS 14-15.' \ - ' Parses iCloud Share Methods and Participant records only no asset data being parsed.' \ - ' The iCloud Share methods being stored in these records include' \ - ' Shred iCloud Links Cloud Master Moments-CMM and Shared iCloud Photo Library SPL.' - report = ArtifactHtmlReport('Ph30-iCld Share Methods NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph30-iCld Share Methods NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zShare-Creation Date-0', - 'zShare-Start Date-1', - 'zShare-End Date-2', - 'zShare-Expiry Date-3', - 'zShare-UUID-4', - 'zShare-Originating Scope ID-5', - 'zShare-Status-6', - 'zShare-Scope Type-7', - 'zShare-Asset Count-8', - 'zShare-Force Sync Attempted-9', - 'zShare-Photos Count-10', - 'zShare-Uploaded Photos Count-11', - 'zShare-Videos Count-12', - 'zShare-Uploaded Videos Count-13', - 'zShare-Scope ID-14', - 'zShare-Title-SPL-15', - 'zShare-Share URL-16', - 'zShare-Local Publish State-17', - 'zShare-Public Permission-18', - 'zSharePartic-Acceptance Status-19', - 'zSharePartic-User ID-20', - 'zSharePartic-zPK-21', - 'zSharePartic-Email Address-22', - 'zSharePartic-Phone Number-23', - 'zSharePartic-Is Current User-24', - 'zSharePartic-Role-25', - 'zSharePartic-Premission-26', - 'zShare-Should Notify On Upload Completion-27', - 'zShare-Should Ignore Budgets-28', - 'zShare-Trashed State-29', - 'zShare-Cloud Delete State-30', - 'zShare-zENT-31') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph30-iCld Share Methods NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph30-iCld Share Methods NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31])) - else: - logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Share Method icld links and SPL' - ' Records with No Asset Data') + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + 'zShare-UUID-4', + 'zShare-Originating Scope ID-5', + 'zShare-Status-6', + 'zShare-Scope Type-7', + 'zShare-Asset Count-8', + 'zShare-Force Sync Attempted-9', + 'zShare-Photos Count-10', + 'zShare-Uploaded Photos Count-11', + 'zShare-Videos Count-12', + 'zShare-Uploaded Videos Count-13', + 'zShare-Scope ID-14', + 'zShare-Title-SPL-15', + 'zShare-Share URL-16', + 'zShare-Local Publish State-17', + 'zShare-Public Permission-18', + 'zSharePartic-Acceptance Status-19', + 'zSharePartic-User ID-20', + 'zSharePartic-zPK-21', + 'zSharePartic-Email Address-22', + 'zSharePartic-Phone Number-23', + 'zSharePartic-Is Current User-24', + 'zSharePartic-Role-25', + 'zSharePartic-Premission-26', + 'zShare-Should Notify On Upload Completion-27', + 'zShare-Should Ignore Budgets-28', + 'zShare-Trashed State-29', + 'zShare-Cloud Delete State-30', + 'zShare-zENT-31') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return + return data_headers, data_list, source_path - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', @@ -210,8 +194,8 @@ def get_ph30icldsharemethphdapsql(files_found, report_folder, seeker, wrap_text, CASE zSharePartic.Z54_SHARE WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zSharePartic.Z54_SHARE || '' END AS 'zSharePartic-z54SHARE', CASE zShare.ZSTATUS @@ -332,110 +316,298 @@ def get_ph30icldsharemethphdapsql(files_found, report_folder, seeker, wrap_text, CASE zShare.Z_ENT WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' END AS 'zShare-zENT' FROM ZSHARE zShare LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK ORDER BY zShare.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49])) - - counter += 1 + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49])) - description = 'Parses records for different methods which media files have been shared via iCloud Share' \ - ' found in the PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-17.' \ - ' Parses iCloud Share Methods and Participant records only no asset data being parsed.' \ - ' The iCloud Share methods being stored in these records include' \ - ' Shred iCloud Links Cloud Master Moments-CMM and Shared iCloud Photo Library SPL.' - report = ArtifactHtmlReport('Ph30-iCld Share Methods NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph30-iCld Share Methods NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zShare-Creation Date-0', - 'zShare-Start Date-1', - 'zShare-End Date-2', - 'zShare-Expiry Date-3', - 'zShare-UUID-4', - 'zShare-Originating Scope ID-5', - 'zSharePartic-z54SHARE-6', - 'zShare-Status-7', - 'zShare-Scope Type-8', - 'zShare-Cloud Photo Count-9', - 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10', - 'zShare-Cloud Video Count-11', - 'zShare-Asset Count-12', - 'zShare-Force Sync Attempted-13', - 'zShare-Photos Count-14', - 'zShare-Uploaded Photos Count-15', - 'zShare-Videos Count-16', - 'zShare-Uploaded Videos Count-17', - 'zShare-Scope ID-18', - 'zShare-Title-SPL-19', - 'zShare-Share URL-20', - 'zShare-Local Publish State-21', - 'zShare-Public Permission-22', - 'zShare-Cloud Local State-23', - 'zShare-Scope Syncing State-24', - 'zShare-Auto Share Policy-25', - 'zSharePartic-Acceptance Status-26', - 'zSharePartic-User ID-27', - 'zSharePartic-zPK-28', - 'zSharePartic-Email Address-29', - 'zSharePartic-Phone Number-30', - 'zSharePartic-Participant ID-31', - 'zSharePartic-UUID-32', - 'zSharePartic-Is Current User-33', - 'zSharePartic-Role-34', - 'zSharePartic-Permission-35', - 'zShare-Participant Cloud Update State-36', - 'zSharePartic-Exit State-37', - 'zShare-Preview State-38', - 'zShare-Should Notify On Upload Completion-39', - 'zShare-Should Ignore Budgets-40', - 'zShare-Exit Source-41', - 'zShare-Exit State-42', - 'zShare-Exit Type-43', - 'zShare-Trashed State-44', - 'zShare-Cloud Delete State-45', - 'zShare-Trashed Date-46', - 'zShare-LastParticipant Asset Trash Notification Date-47', - 'zShare-Last Participant Asset Trash Notification View Date-48', - 'zShare-zENT-49') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + 'zShare-UUID-4', + 'zShare-Originating Scope ID-5', + 'zSharePartic-z54SHARE-6', + 'zShare-Status-7', + 'zShare-Scope Type-8', + 'zShare-Cloud Photo Count-9', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10', + 'zShare-Cloud Video Count-11', + 'zShare-Asset Count-12', + 'zShare-Force Sync Attempted-13', + 'zShare-Photos Count-14', + 'zShare-Uploaded Photos Count-15', + 'zShare-Videos Count-16', + 'zShare-Uploaded Videos Count-17', + 'zShare-Scope ID-18', + 'zShare-Title-SPL-19', + 'zShare-Share URL-20', + 'zShare-Local Publish State-21', + 'zShare-Public Permission-22', + 'zShare-Cloud Local State-23', + 'zShare-Scope Syncing State-24', + 'zShare-Auto Share Policy-25', + 'zSharePartic-Acceptance Status-26', + 'zSharePartic-User ID-27', + 'zSharePartic-zPK-28', + 'zSharePartic-Email Address-29', + 'zSharePartic-Phone Number-30', + 'zSharePartic-Participant ID-31', + 'zSharePartic-UUID-32', + 'zSharePartic-Is Current User-33', + 'zSharePartic-Role-34', + 'zSharePartic-Permission-35', + 'zShare-Participant Cloud Update State-36', + 'zSharePartic-Exit State-37', + 'zShare-Preview State-38', + 'zShare-Should Notify On Upload Completion-39', + 'zShare-Should Ignore Budgets-40', + 'zShare-Exit Source-41', + 'zShare-Exit State-42', + 'zShare-Exit Type-43', + 'zShare-Trashed State-44', + 'zShare-Cloud Delete State-45', + ('zShare-Trashed Date-46', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-47', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-48', 'datetime'), + 'zShare-zENT-49') + data_list = get_sqlite_db_records(source_path, query) - tsvname = 'Ph30-iCld Share Methods NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - tlactivity = 'Ph30-iCld Share Methods NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + query = ''' + SELECT + DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', + DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', + DateTime(zShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-End Date', + DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date', + zShare.ZUUID AS 'zShare-UUID', + zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID', + CASE zSharePartic.Z55_SHARE + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z55_SHARE || '' + END AS 'zSharePartic-z55SHARE', + CASE zShare.ZSTATUS + WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' + WHEN 3 THEN '3-SPL-Actively-Sharing-3' + ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || '' + END AS 'zShare-Status', + CASE zShare.ZSCOPETYPE + WHEN 2 THEN '2-iCloudLink-CMMoment-2' + WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4' + WHEN 5 THEN '5-SPL-Active-Participant-5' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || '' + END AS 'zShare-Scope Type', + zShare.ZCLOUDPHOTOCOUNT AS 'zShare-Cloud Photo Count', + zShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare', + zShare.ZCLOUDVIDEOCOUNT AS 'zShare-Cloud Video Count', + zShare.ZASSETCOUNT AS 'zShare-Asset Count', + zShare.ZFORCESYNCATTEMPTED AS 'zShare-Force Sync Attempted', + zShare.ZPHOTOSCOUNT AS 'zShare-Photos Count', + zShare.ZUPLOADEDPHOTOSCOUNT AS 'zShare-Uploaded Photos Count', + zShare.ZVIDEOSCOUNT AS 'zShare-Videos Count', + zShare.ZUPLOADEDVIDEOSCOUNT AS 'zShare-Uploaded Videos Count', + zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID', + zShare.ZTITLE AS 'zShare-Title-SPL', + zShare.ZSHAREURL AS 'zShare-Share URL', + CASE zShare.ZLOCALPUBLISHSTATE + WHEN 2 THEN '2-Published-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZLOCALPUBLISHSTATE || '' + END AS 'zShare-Local Publish State', + CASE zShare.ZPUBLICPERMISSION + WHEN 1 THEN '1-Public_Permission_Denied-Private-1' + WHEN 2 THEN '2-Public_Permission_Granted-Public-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPUBLICPERMISSION || '' + END AS 'zShare-Public Permission', + CASE zShare.ZCLOUDLOCALSTATE + WHEN 1 THEN '1-Local-and-Cloud-SPL-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDLOCALSTATE || '' + END AS 'zShare-Cloud Local State', + CASE zShare.ZSCOPESYNCINGSTATE + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE || '' + END AS 'zShare-Scope Syncing State', + CASE zShare.ZAUTOSHAREPOLICY + WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZAUTOSHAREPOLICY || '' + END AS 'zShare-Auto Share Policy', + CASE zSharePartic.ZACCEPTANCESTATUS + WHEN 1 THEN '1-Invite-Pending_or_Declined-1' + WHEN 2 THEN '2-Invite-Accepted-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' + END AS 'zSharePartic-Acceptance Status', + zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', + zSharePartic.Z_PK AS 'zSharePartic-zPK', + zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', + zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', + zSharePartic.ZPARTICIPANTID AS 'zSharePartic-Participant ID', + zSharePartic.ZUUID AS 'zSharePartic-UUID', + CASE zSharePartic.ZISCURRENTUSER + WHEN 0 THEN '0-SPL_Not_This_User-CMM_NotCldStorageOwner-0' + WHEN 1 THEN '1-SPL_Is_This_User-CMM_IsCldStorageOwner-1' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' + END AS 'zSharePartic-Is Current User', + CASE zSharePartic.ZROLE + WHEN 1 THEN '1-Participant-is-Owner-Role-1' + WHEN 2 THEN '2-Participant-is-Invitee-Role-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' + END AS 'zSharePartic-Role', + CASE zSharePartic.ZPERMISSION + WHEN 3 THEN '3-Participant-has-Full-Permissions-3' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZPERMISSION || '' + END AS 'zSharePartic-Permission', + CASE zShare.ZPARTICIPANTCLOUDUPDATESTATE + WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPARTICIPANTCLOUDUPDATESTATE || '' + END AS 'zShare-Participant Cloud Update State', + CASE zSharePartic.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZEXITSTATE || '' + END AS 'zSharePartic-Exit State', + CASE zShare.ZPREVIEWSTATE + WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZPREVIEWSTATE || '' + END AS 'zShare-Preview State', + CASE zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION + WHEN 0 THEN '0-DoNotNotify-SPL-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || '' + END AS 'zShare-Should Notify On Upload Completion', + CASE zShare.ZSHOULDIGNOREBUDGETS + WHEN 1 THEN '1-StillTesting-CMM-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDIGNOREBUDGETS || '' + END AS 'zShare-Should Ignore Budgets', + CASE zShare.ZEXITSOURCE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSOURCE || '' + END AS 'zShare-Exit Source', + CASE zShare.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSTATE || '' + END AS 'zShare-Exit State', + CASE zShare.ZEXITTYPE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITTYPE || '' + END AS 'zShare-Exit Type', + CASE zShare.ZTRASHEDSTATE + WHEN 0 THEN '0-Not_in_Trash-0' + WHEN 1 THEN '1-In_Trash-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZTRASHEDSTATE || '' + END AS 'zShare-Trashed State', + CASE zShare.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Not Deleted-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDDELETESTATE || '' + END AS 'zShare-Cloud Delete State', + DateTime(zShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Trashed Date', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS + 'zShare-LastParticipant Asset Trash Notification Date', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS + 'zShare-Last Participant Asset Trash Notification View Date', + CASE zShare.Z_ENT + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' + END AS 'zShare-zENT' + FROM ZSHARE zShare + LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK + ORDER BY zShare.ZCREATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49])) - else: - logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Share Method icld links and SPL' - ' Records with No Asset Data') + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + 'zShare-UUID-4', + 'zShare-Originating Scope ID-5', + 'zSharePartic-z55SHARE-6', + 'zShare-Status-7', + 'zShare-Scope Type-8', + 'zShare-Cloud Photo Count-9', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10', + 'zShare-Cloud Video Count-11', + 'zShare-Asset Count-12', + 'zShare-Force Sync Attempted-13', + 'zShare-Photos Count-14', + 'zShare-Uploaded Photos Count-15', + 'zShare-Videos Count-16', + 'zShare-Uploaded Videos Count-17', + 'zShare-Scope ID-18', + 'zShare-Title-SPL-19', + 'zShare-Share URL-20', + 'zShare-Local Publish State-21', + 'zShare-Public Permission-22', + 'zShare-Cloud Local State-23', + 'zShare-Scope Syncing State-24', + 'zShare-Auto Share Policy-25', + 'zSharePartic-Acceptance Status-26', + 'zSharePartic-User ID-27', + 'zSharePartic-zPK-28', + 'zSharePartic-Email Address-29', + 'zSharePartic-Phone Number-30', + 'zSharePartic-Participant ID-31', + 'zSharePartic-UUID-32', + 'zSharePartic-Is Current User-33', + 'zSharePartic-Role-34', + 'zSharePartic-Permission-35', + 'zShare-Participant Cloud Update State-36', + 'zSharePartic-Exit State-37', + 'zShare-Preview State-38', + 'zShare-Should Notify On Upload Completion-39', + 'zShare-Should Ignore Budgets-40', + 'zShare-Exit Source-41', + 'zShare-Exit State-42', + 'zShare-Exit Type-43', + 'zShare-Trashed State-44', + 'zShare-Cloud Delete State-45', + ('zShare-Trashed Date-46', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-47', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-48', 'datetime'), + 'zShare-zENT-49') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', @@ -443,13 +615,13 @@ def get_ph30icldsharemethphdapsql(files_found, report_folder, seeker, wrap_text, DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date', zShare.ZUUID AS 'zShare-UUID', zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID', - CASE zSharePartic.Z62_SHARE + CASE zSharePartic.Z61_SHARE WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' - ELSE 'Unknown-New-Value!: ' || zSharePartic.Z62_SHARE || '' - END AS 'zSharePartic-z62SHARE', + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z61_SHARE || '' + END AS 'zSharePartic-z61SHARE', CASE zShare.ZSTATUS WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' WHEN 3 THEN '3-SPL-Actively-Sharing-3' @@ -568,120 +740,74 @@ def get_ph30icldsharemethphdapsql(files_found, report_folder, seeker, wrap_text, CASE zShare.Z_ENT WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' END AS 'zShare-zENT' FROM ZSHARE zShare LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK ORDER BY zShare.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49])) - - counter += 1 - - description = 'Parses records for different methods which media files have been shared via iCloud Share' \ - ' found in the PhotoData-Photos.sqlite ZSHARE Table and supports iOS 18.' \ - ' Parses iCloud Share Methods and Participant records only no asset data being parsed.' \ - ' The iCloud Share methods being stored in these records include' \ - ' Shred iCloud Links Cloud Master Moments-CMM and Shared iCloud Photo Library SPL.' - report = ArtifactHtmlReport('Ph30-iCld Share Methods NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph30-iCld Share Methods NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zShare-Creation Date-0', - 'zShare-Start Date-1', - 'zShare-End Date-2', - 'zShare-Expiry Date-3', - 'zShare-UUID-4', - 'zShare-Originating Scope ID-5', - 'zSharePartic-z62SHARE-6', - 'zShare-Status-7', - 'zShare-Scope Type-8', - 'zShare-Cloud Photo Count-9', - 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10', - 'zShare-Cloud Video Count-11', - 'zShare-Asset Count-12', - 'zShare-Force Sync Attempted-13', - 'zShare-Photos Count-14', - 'zShare-Uploaded Photos Count-15', - 'zShare-Videos Count-16', - 'zShare-Uploaded Videos Count-17', - 'zShare-Scope ID-18', - 'zShare-Title-SPL-19', - 'zShare-Share URL-20', - 'zShare-Local Publish State-21', - 'zShare-Public Permission-22', - 'zShare-Cloud Local State-23', - 'zShare-Scope Syncing State-24', - 'zShare-Auto Share Policy-25', - 'zSharePartic-Acceptance Status-26', - 'zSharePartic-User ID-27', - 'zSharePartic-zPK-28', - 'zSharePartic-Email Address-29', - 'zSharePartic-Phone Number-30', - 'zSharePartic-Participant ID-31', - 'zSharePartic-UUID-32', - 'zSharePartic-Is Current User-33', - 'zSharePartic-Role-34', - 'zSharePartic-Permission-35', - 'zShare-Participant Cloud Update State-36', - 'zSharePartic-Exit State-37', - 'zShare-Preview State-38', - 'zShare-Should Notify On Upload Completion-39', - 'zShare-Should Ignore Budgets-40', - 'zShare-Exit Source-41', - 'zShare-Exit State-42', - 'zShare-Exit Type-43', - 'zShare-Trashed State-44', - 'zShare-Cloud Delete State-45', - 'zShare-Trashed Date-46', - 'zShare-LastParticipant Asset Trash Notification Date-47', - 'zShare-Last Participant Asset Trash Notification View Date-48', - 'zShare-zENT-49') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph30-iCld Share Methods NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph30-iCld Share Methods NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Share Method icld links and SPL' - ' Records with No Asset Data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49])) + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + 'zShare-UUID-4', + 'zShare-Originating Scope ID-5', + 'zSharePartic-z61SHARE-6', + 'zShare-Status-7', + 'zShare-Scope Type-8', + 'zShare-Cloud Photo Count-9', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10', + 'zShare-Cloud Video Count-11', + 'zShare-Asset Count-12', + 'zShare-Force Sync Attempted-13', + 'zShare-Photos Count-14', + 'zShare-Uploaded Photos Count-15', + 'zShare-Videos Count-16', + 'zShare-Uploaded Videos Count-17', + 'zShare-Scope ID-18', + 'zShare-Title-SPL-19', + 'zShare-Share URL-20', + 'zShare-Local Publish State-21', + 'zShare-Public Permission-22', + 'zShare-Cloud Local State-23', + 'zShare-Scope Syncing State-24', + 'zShare-Auto Share Policy-25', + 'zSharePartic-Acceptance Status-26', + 'zSharePartic-User ID-27', + 'zSharePartic-zPK-28', + 'zSharePartic-Email Address-29', + 'zSharePartic-Phone Number-30', + 'zSharePartic-Participant ID-31', + 'zSharePartic-UUID-32', + 'zSharePartic-Is Current User-33', + 'zSharePartic-Role-34', + 'zSharePartic-Permission-35', + 'zShare-Participant Cloud Update State-36', + 'zSharePartic-Exit State-37', + 'zShare-Preview State-38', + 'zShare-Should Notify On Upload Completion-39', + 'zShare-Should Ignore Budgets-40', + 'zShare-Exit Source-41', + 'zShare-Exit State-42', + 'zShare-Exit Type-43', + 'zShare-Trashed State-44', + 'zShare-Cloud Delete State-45', + ('zShare-Trashed Date-46', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-47', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-48', 'datetime'), + 'zShare-zENT-49') + data_list = get_sqlite_db_records(source_path, query) -__artifacts_v2__ = { - 'Ph30-iCloud Shared Methods with NAD-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph30 iCld Share Methods with No Asset Data', - 'description': 'Parses records for different methods which media files have been shared via iCloud Share' - ' found in the PhotoData-Photos.sqlite ZSHARE Table and supports iOS 14-18.' - ' Parses iCloud Share Methods and Participant records only no asset data being parsed.' - ' The iCloud Share methods being stored in these records include' - ' Shred iCloud Links Cloud Master Moments-CMM and Shared iCloud Photo Library SPL.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-13', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph30icldsharemethphdapsql' - } -} + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph31iCloudSharePhotoLibraryNAD.py b/scripts/artifacts/Ph31iCloudSharePhotoLibraryNAD.py index 2b1c1cc0..f4754ecd 100644 --- a/scripts/artifacts/Ph31iCloudSharePhotoLibraryNAD.py +++ b/scripts/artifacts/Ph31iCloudSharePhotoLibraryNAD.py @@ -1,40 +1,48 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses iCloud Shared Photo Library records and invites from the PhotoData-Photos.sqlite ZSHARE Table -# and supports iOS 14-18. Parses iCloud SPL and Participant information records only no asset data being parsed. -# This parser is based on research and SQLite Queries written by Scott Koenig -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph31iCloudSPLwithParticipantswithNADPhDaPsql': { + 'name': 'Ph31-iCloud SPL with Participants NAD-PhDaPsql', + 'description': 'Parses iCloud Shared Photo Library records and invites from the PhotoData-Photos.sqlite' + ' ZSHARE Table and supports iOS 14-18. Parses iCloud SPL and Participant information' + ' records only no asset data being parsed.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc +@artifact_processor +def Ph31iCloudSPLwithParticipantswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) -def get_ph31icldsharephotolibphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("13.7"): - logfunc("Unsupported version for PhotoData-Photos.sqlite zSHARE iCloud Shared Photo Library records" - " with no asset data from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', @@ -108,82 +116,60 @@ def get_ph31icldsharephotolibphdapsql(files_found, report_folder, seeker, wrap_t CASE zShare.Z_ENT WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' END AS 'zShare-zENT' FROM ZSHARE zShare LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK WHERE zShare.ZSCOPETYPE IN (4, 5) ORDER BY zShare.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25])) - - counter += 1 - - description = 'Parses iCloud Shared Photo Library records and invites from the PhotoData-Photos.sqlite' \ - ' ZSHARE Table and supports iOS 14-15. Parses iCloud SPL and Participant information' \ - ' records only no asset data being parsed.' - report = ArtifactHtmlReport('Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zShare-Creation Date-0', - 'zShare-Start Date-1', - 'zShare-End Date-2', - 'zShare-Expiry Date-3', - 'zShare-UUID-4', - 'zShare-Originating Scope ID-5', - 'zShare-Status-6', - 'zShare-Scope Type-7', - 'zShare-Scope ID-8', - 'zShare-Title-SPL-9', - 'zShare-Share URL-10', - 'zShare-Local Publish State-11', - 'zShare-Public Permission-12', - 'zSharePartic-Acceptance Status-13', - 'zSharePartic-User ID-14', - 'zSharePartic-zPK-15', - 'zSharePartic-Email Address-16', - 'zSharePartic-Phone Number-17', - 'zSharePartic-Is Current User-18', - 'zSharePartic-Role-19', - 'zSharePartic-Premission-20', - 'zShare-Should Notify On Upload Completion-21', - 'zShare-Should Ignore Budgets-22', - 'zShare-Trashed State-23', - 'zShare-Cloud Delete State-24', - 'zShare-zENT-25') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25])) - else: - logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Shared Photo Library Records' - ' with No Asset Data') + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + 'zShare-UUID-4', + 'zShare-Originating Scope ID-5', + 'zShare-Status-6', + 'zShare-Scope Type-7', + 'zShare-Scope ID-8', + 'zShare-Title-SPL-9', + 'zShare-Share URL-10', + 'zShare-Local Publish State-11', + 'zShare-Public Permission-12', + 'zSharePartic-Acceptance Status-13', + 'zSharePartic-User ID-14', + 'zSharePartic-zPK-15', + 'zSharePartic-Email Address-16', + 'zSharePartic-Phone Number-17', + 'zSharePartic-Is Current User-18', + 'zSharePartic-Role-19', + 'zSharePartic-Premission-20', + 'zShare-Should Notify On Upload Completion-21', + 'zShare-Should Ignore Budgets-22', + 'zShare-Trashed State-23', + 'zShare-Cloud Delete State-24', + 'zShare-zENT-25') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return + return data_headers, data_list, source_path - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', @@ -194,8 +180,8 @@ def get_ph31icldsharephotolibphdapsql(files_found, report_folder, seeker, wrap_t CASE zSharePartic.Z54_SHARE WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zSharePartic.Z54_SHARE || '' END AS 'zSharePartic-z54SHARE', CASE zShare.ZSTATUS @@ -310,102 +296,280 @@ def get_ph31icldsharephotolibphdapsql(files_found, report_folder, seeker, wrap_t CASE zShare.Z_ENT WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' END AS 'zShare-zENT' FROM ZSHARE zShare LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK WHERE zShare.ZSCOPETYPE IN (4, 5) ORDER BY zShare.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43])) - - counter += 1 + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43])) - description = 'Parses iCloud Shared Photo Library records and invites from the PhotoData-Photos.sqlite' \ - ' ZSHARE Table and supports iOS 16-17. Parses iCloud SPL and Participant information' \ - ' records only no asset data being parsed.' - report = ArtifactHtmlReport('Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zShare-Creation Date-0', - 'zShare-Start Date-1', - 'zShare-End Date-2', - 'zShare-Expiry Date-3', - 'zShare-UUID-4', - 'zShare-Originating Scope ID-5', - 'zSharePartic-z54SHARE-6', - 'zShare-Status-7', - 'zShare-Scope Type-8', - 'zShare-Cloud Photo Count-9', - 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10', - 'zShare-Cloud Video Count-11', - 'zShare-Scope ID-12', - 'zShare-Title-SPL-13', - 'zShare-Share URL-14', - 'zShare-Local Publish State-15', - 'zShare-Public Permission-16', - 'zShare-Cloud Local State-17', - 'zShare-Scope Syncing State-18', - 'zShare-Auto Share Policy-19', - 'zSharePartic-Acceptance Status-20', - 'zSharePartic-User ID-21', - 'zSharePartic-zPK-22', - 'zSharePartic-Email Address-23', - 'zSharePartic-Phone Number-24', - 'zSharePartic-Participant ID-25', - 'zSharePartic-UUID-26', - 'zSharePartic-Is Current User-27', - 'zSharePartic-Role-28', - 'zSharePartic-Premission-29', - 'zShare-Participant Cloud Update State-30', - 'zSharePartic-Exit State-31', - 'zShare-Preview State-32', - 'zShare-Should Notify On Upload Completion-33', - 'zShare-Should Ignore Budgets-34', - 'zShare-Exit Source-35', - 'zShare-Exit State-36', - 'zShare-Exit Type-37', - 'zShare-Trashed State-38', - 'zShare-Cloud Delete State-39', - 'zShare-Trashed Date-40', - 'zShare-LastParticipant Asset Trash Notification Date-41', - 'zShare-Last Participant Asset Trash Notification View Date-42', - 'zShare-zENT-43') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + 'zShare-UUID-4', + 'zShare-Originating Scope ID-5', + 'zSharePartic-z54SHARE-6', + 'zShare-Status-7', + 'zShare-Scope Type-8', + 'zShare-Cloud Photo Count-9', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10', + 'zShare-Cloud Video Count-11', + 'zShare-Scope ID-12', + 'zShare-Title-SPL-13', + 'zShare-Share URL-14', + 'zShare-Local Publish State-15', + 'zShare-Public Permission-16', + 'zShare-Cloud Local State-17', + 'zShare-Scope Syncing State-18', + 'zShare-Auto Share Policy-19', + 'zSharePartic-Acceptance Status-20', + 'zSharePartic-User ID-21', + 'zSharePartic-zPK-22', + 'zSharePartic-Email Address-23', + 'zSharePartic-Phone Number-24', + 'zSharePartic-Participant ID-25', + 'zSharePartic-UUID-26', + 'zSharePartic-Is Current User-27', + 'zSharePartic-Role-28', + 'zSharePartic-Premission-29', + 'zShare-Participant Cloud Update State-30', + 'zSharePartic-Exit State-31', + 'zShare-Preview State-32', + 'zShare-Should Notify On Upload Completion-33', + 'zShare-Should Ignore Budgets-34', + 'zShare-Exit Source-35', + 'zShare-Exit State-36', + 'zShare-Exit Type-37', + 'zShare-Trashed State-38', + 'zShare-Cloud Delete State-39', + ('zShare-Trashed Date-40', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-41', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-42', 'datetime'), + 'zShare-zENT-43') + data_list = get_sqlite_db_records(source_path, query) - tsvname = 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - tlactivity = 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + query = ''' + SELECT + DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', + DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', + DateTime(zShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-End Date', + DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date', + zShare.ZUUID AS 'zShare-UUID', + zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID', + CASE zSharePartic.Z55_SHARE + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z55_SHARE || '' + END AS 'zSharePartic-z55SHARE', + CASE zShare.ZSTATUS + WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' + WHEN 3 THEN '3-SPL-Actively-Sharing-3' + ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || '' + END AS 'zShare-Status', + CASE zShare.ZSCOPETYPE + WHEN 2 THEN '2-iCloudLink-CMMoment-2' + WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4' + WHEN 5 THEN '5-SPL-Active-Participant-5' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || '' + END AS 'zShare-Scope Type', + zShare.ZCLOUDPHOTOCOUNT AS 'zShare-Cloud Photo Count', + zShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare', + zShare.ZCLOUDVIDEOCOUNT AS 'zShare-Cloud Video Count', + zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID', + zShare.ZTITLE AS 'zShare-Title-SPL', + zShare.ZSHAREURL AS 'zShare-Share URL', + CASE zShare.ZLOCALPUBLISHSTATE + WHEN 2 THEN '2-Published-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZLOCALPUBLISHSTATE || '' + END AS 'zShare-Local Publish State', + CASE zShare.ZPUBLICPERMISSION + WHEN 1 THEN '1-Public_Premission_Denied-Private-1' + WHEN 2 THEN '2-Public_Premission_Granted-Public-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPUBLICPERMISSION || '' + END AS 'zShare-Public Permission', + CASE zShare.ZCLOUDLOCALSTATE + WHEN 1 THEN '1-LocalandCloud-SPL-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDLOCALSTATE || '' + END AS 'zShare-Cloud Local State', + CASE zShare.ZSCOPESYNCINGSTATE + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE || '' + END AS 'zShare-Scope Syncing State', + CASE zShare.ZAUTOSHAREPOLICY + WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZAUTOSHAREPOLICY || '' + END AS 'zShare-Auto Share Policy', + CASE zSharePartic.ZACCEPTANCESTATUS + WHEN 1 THEN '1-Invite-Pending_or_Declined-1' + WHEN 2 THEN '2-Invite-Accepted-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' + END AS 'zSharePartic-Acceptance Status', + zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', + zSharePartic.Z_PK AS 'zSharePartic-zPK', + zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', + zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', + zSharePartic.ZPARTICIPANTID AS 'zSharePartic-Participant ID', + zSharePartic.ZUUID AS 'zSharePartic-UUID', + CASE zSharePartic.ZISCURRENTUSER + WHEN 0 THEN '0-Participant-Not_This_User-0' + WHEN 1 THEN '1-Participant-Is_This_User-1' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' + END AS 'zSharePartic-Is Current User', + CASE zSharePartic.ZROLE + WHEN 1 THEN '1-Participant-is-Owner-Role-1' + WHEN 2 THEN '2-Participant-is-Invitee-Role-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' + END AS 'zSharePartic-Role', + CASE zSharePartic.ZPERMISSION + WHEN 3 THEN '3-Participant-has-Full-Permissions-3' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZPERMISSION || '' + END AS 'zSharePartic-Premission', + CASE zShare.ZPARTICIPANTCLOUDUPDATESTATE + WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPARTICIPANTCLOUDUPDATESTATE || '' + END AS 'zShare-Participant Cloud Update State', + CASE zSharePartic.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZEXITSTATE || '' + END AS 'zSharePartic-Exit State', + CASE zShare.ZPREVIEWSTATE + WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZPREVIEWSTATE || '' + END AS 'zShare-Preview State', + CASE zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION + WHEN 0 THEN '0-DoNotNotify-SPL-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || '' + END AS 'zShare-Should Notify On Upload Completion', + CASE zShare.ZSHOULDIGNOREBUDGETS + WHEN 1 THEN '1-StillTesting-CMM-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDIGNOREBUDGETS || '' + END AS 'zShare-Should Ignore Budgets', + CASE zShare.ZEXITSOURCE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSOURCE || '' + END AS 'zShare-Exit Source', + CASE zShare.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSTATE || '' + END AS 'zShare-Exit State', + CASE zShare.ZEXITTYPE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITTYPE || '' + END AS 'zShare-Exit Type', + CASE zShare.ZTRASHEDSTATE + WHEN 0 THEN '0-Not_in_Trash-0' + WHEN 1 THEN '1-In_Trash-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZTRASHEDSTATE || '' + END AS 'zShare-Trashed State', + CASE zShare.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Not Deleted-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDDELETESTATE || '' + END AS 'zShare-Cloud Delete State', + DateTime(zShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Trashed Date', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS + 'zShare-LastParticipant Asset Trash Notification Date', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS + 'zShare-Last Participant Asset Trash Notification View Date', + CASE zShare.Z_ENT + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' + END AS 'zShare-zENT' + FROM ZSHARE zShare + LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK + WHERE zShare.ZSCOPETYPE IN (4, 5) + ORDER BY zShare.ZCREATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43])) - else: - logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Shared Photo Library Records' - ' with No Asset Data') + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + 'zShare-UUID-4', + 'zShare-Originating Scope ID-5', + 'zSharePartic-z55SHARE-6', + 'zShare-Status-7', + 'zShare-Scope Type-8', + 'zShare-Cloud Photo Count-9', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10', + 'zShare-Cloud Video Count-11', + 'zShare-Scope ID-12', + 'zShare-Title-SPL-13', + 'zShare-Share URL-14', + 'zShare-Local Publish State-15', + 'zShare-Public Permission-16', + 'zShare-Cloud Local State-17', + 'zShare-Scope Syncing State-18', + 'zShare-Auto Share Policy-19', + 'zSharePartic-Acceptance Status-20', + 'zSharePartic-User ID-21', + 'zSharePartic-zPK-22', + 'zSharePartic-Email Address-23', + 'zSharePartic-Phone Number-24', + 'zSharePartic-Participant ID-25', + 'zSharePartic-UUID-26', + 'zSharePartic-Is Current User-27', + 'zSharePartic-Role-28', + 'zSharePartic-Premission-29', + 'zShare-Participant Cloud Update State-30', + 'zSharePartic-Exit State-31', + 'zShare-Preview State-32', + 'zShare-Should Notify On Upload Completion-33', + 'zShare-Should Ignore Budgets-34', + 'zShare-Exit Source-35', + 'zShare-Exit State-36', + 'zShare-Exit Type-37', + 'zShare-Trashed State-38', + 'zShare-Cloud Delete State-39', + ('zShare-Trashed Date-40', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-41', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-42', 'datetime'), + 'zShare-zENT-43') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', @@ -413,13 +577,13 @@ def get_ph31icldsharephotolibphdapsql(files_found, report_folder, seeker, wrap_t DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date', zShare.ZUUID AS 'zShare-UUID', zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID', - CASE zSharePartic.Z62_SHARE + CASE zSharePartic.Z61_SHARE WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' - ELSE 'Unknown-New-Value!: ' || zSharePartic.Z62_SHARE || '' - END AS 'zSharePartic-z62SHARE', + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z61_SHARE || '' + END AS 'zSharePartic-z61SHARE', CASE zShare.ZSTATUS WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' WHEN 3 THEN '3-SPL-Actively-Sharing-3' @@ -532,110 +696,68 @@ def get_ph31icldsharephotolibphdapsql(files_found, report_folder, seeker, wrap_t CASE zShare.Z_ENT WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' END AS 'zShare-zENT' FROM ZSHARE zShare LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK WHERE zShare.ZSCOPETYPE IN (4, 5) ORDER BY zShare.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43])) - - counter += 1 - - description = 'Parses iCloud Shared Photo Library records and invites from the PhotoData-Photos.sqlite' \ - ' ZSHARE Table and supports iOS 18. Parses iCloud SPL and Participant information' \ - ' records only no asset data being parsed.' - report = ArtifactHtmlReport('Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zShare-Creation Date-0', - 'zShare-Start Date-1', - 'zShare-End Date-2', - 'zShare-Expiry Date-3', - 'zShare-UUID-4', - 'zShare-Originating Scope ID-5', - 'zSharePartic-z62SHARE-6', - 'zShare-Status-7', - 'zShare-Scope Type-8', - 'zShare-Cloud Photo Count-9', - 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10', - 'zShare-Cloud Video Count-11', - 'zShare-Scope ID-12', - 'zShare-Title-SPL-13', - 'zShare-Share URL-14', - 'zShare-Local Publish State-15', - 'zShare-Public Permission-16', - 'zShare-Cloud Local State-17', - 'zShare-Scope Syncing State-18', - 'zShare-Auto Share Policy-19', - 'zSharePartic-Acceptance Status-20', - 'zSharePartic-User ID-21', - 'zSharePartic-zPK-22', - 'zSharePartic-Email Address-23', - 'zSharePartic-Phone Number-24', - 'zSharePartic-Participant ID-25', - 'zSharePartic-UUID-26', - 'zSharePartic-Is Current User-27', - 'zSharePartic-Role-28', - 'zSharePartic-Premission-29', - 'zShare-Participant Cloud Update State-30', - 'zSharePartic-Exit State-31', - 'zShare-Preview State-32', - 'zShare-Should Notify On Upload Completion-33', - 'zShare-Should Ignore Budgets-34', - 'zShare-Exit Source-35', - 'zShare-Exit State-36', - 'zShare-Exit Type-37', - 'zShare-Trashed State-38', - 'zShare-Cloud Delete State-39', - 'zShare-Trashed Date-40', - 'zShare-LastParticipant Asset Trash Notification Date-41', - 'zShare-Last Participant Asset Trash Notification View Date-42', - 'zShare-zENT-43') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph31-iCld Shared Photo Lib Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Shared Photo Library Records' - ' with No Asset Data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43])) + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + 'zShare-UUID-4', + 'zShare-Originating Scope ID-5', + 'zSharePartic-z61SHARE-6', + 'zShare-Status-7', + 'zShare-Scope Type-8', + 'zShare-Cloud Photo Count-9', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-10', + 'zShare-Cloud Video Count-11', + 'zShare-Scope ID-12', + 'zShare-Title-SPL-13', + 'zShare-Share URL-14', + 'zShare-Local Publish State-15', + 'zShare-Public Permission-16', + 'zShare-Cloud Local State-17', + 'zShare-Scope Syncing State-18', + 'zShare-Auto Share Policy-19', + 'zSharePartic-Acceptance Status-20', + 'zSharePartic-User ID-21', + 'zSharePartic-zPK-22', + 'zSharePartic-Email Address-23', + 'zSharePartic-Phone Number-24', + 'zSharePartic-Participant ID-25', + 'zSharePartic-UUID-26', + 'zSharePartic-Is Current User-27', + 'zSharePartic-Role-28', + 'zSharePartic-Premission-29', + 'zShare-Participant Cloud Update State-30', + 'zSharePartic-Exit State-31', + 'zShare-Preview State-32', + 'zShare-Should Notify On Upload Completion-33', + 'zShare-Should Ignore Budgets-34', + 'zShare-Exit Source-35', + 'zShare-Exit State-36', + 'zShare-Exit Type-37', + 'zShare-Trashed State-38', + 'zShare-Cloud Delete State-39', + ('zShare-Trashed Date-40', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-41', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-42', 'datetime'), + 'zShare-zENT-43') + data_list = get_sqlite_db_records(source_path, query) -__artifacts_v2__ = { - 'Ph31-iCloud SPL with Participants with NAD-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph31 iCld Shared Photo Library with Partic with No Asset Data', - 'description': 'Parses iCloud Shared Photo Library records and invites from the PhotoData-Photos.sqlite' - ' ZSHARE Table and supports iOS 14-18. Parses iCloud SPL and Participant information' - ' records only no asset data being parsed.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-13', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph31icldsharephotolibphdapsql' - } -} + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph32AssetsIniCldSPLwContrib.py b/scripts/artifacts/Ph32AssetsIniCldSPLwContrib.py index f3aec322..ee36f1cb 100644 --- a/scripts/artifacts/Ph32AssetsIniCldSPLwContrib.py +++ b/scripts/artifacts/Ph32AssetsIniCldSPLwContrib.py @@ -1,43 +1,50 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses Assets in iCloud Shared Photo Library with contributor information from PhotoData-Photos.sqlite ZSHARE Table -# and supports iOS 16-18. Parses basic asset data and iCloud SPL and contributor information. -# If you are attempting to match SPL count with results please check hidden, trashed, and burst assets. -# This parser is based on research and SQLite Queries written by Scott Koenig -# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools -# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results. -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph32iCloudSPLAssetswithContributorPhDaPsql': { + 'name': 'Ph32-iCloud SPL Assets with Contributor-PhDaPsql', + 'description': 'Parses Assets in iCloud Shared Photo Library with contributor information from' + ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-18.' + ' Parses basic asset data and iCloud SPL and contributor information.' + ' If you are attempting to match SPL count with results please check' + ' hidden, trashed, and burst assets.', + 'author': 'Scott Koenig https://theforensicscooter.com/', + 'version': '4.0', + 'date': '2024-12-31', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc +@artifact_processor +def Ph32iCloudSPLAssetswithContributorPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) -def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('-') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("15.8.2"): - logfunc("Unsupported version for iCloud Shared Photo Library assets from PhotoData-Photos.sqlite" - " from iOS " + iosversion) - if (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + logfunc("Unsupported version PhotoData-Photos.sqlite from iOS " + iosversion) + return (), [], source_path + if (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE @@ -149,12 +156,7 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text, ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', - zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', - CASE zAddAssetAttr.ZSHARETYPE - WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' - WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' - END AS 'zAddAssetAttr-Share Type', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', @@ -183,8 +185,8 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text, CASE SPLzSharePartic.Z54_SHARE WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z54_SHARE || '' END AS 'SPLzSharePartic-z54SHARE', CASE SPLzShare.ZSTATUS @@ -207,104 +209,318 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text, LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT WHERE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE = 1 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51])) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50])) - counter += 1 + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Active Library Scope Participation State-1', + 'zAsset-zPK-2', + 'zAsset-Directory-Path-3', + 'zAsset-Filename-4', + 'zAddAssetAttr- Original Filename-5', + 'zCldMast- Original Filename-6', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', + 'zAsset-Syndication State-8', + 'zAsset-Bundle Scope-9', + 'zAddAssetAttr-Imported by-10', + 'zExtAttr-Camera Make-11', + 'zExtAttr-Camera Model-12', + 'zAddAssetAttr.Imported by Bundle Identifier-13', + 'zAddAssetAttr-Imported By Display Name-14', + 'zAsset-Visibility State-15', + 'zAsset-Saved Asset Type-16', + 'zAddAssetAttr-Share Type-17', + ('zAsset- SortToken -CameraRoll-18', 'datetime'), + ('zAsset-Added Date-19', 'datetime'), + ('zCldMast-Creation Date-20', 'datetime'), + 'zAddAssetAttr-Time Zone Name-21', + 'zAddAssetAttr-EXIF-String-22', + ('zAsset-Modification Date-23', 'datetime'), + ('zAsset-Last Shared Date-24', 'datetime'), + 'zAsset-Hidden-25', + 'zAsset-Avalanche_Pick_Type-BurstAsset-26', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-27', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-28', + ('zAsset-Trashed Date-29', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-30', + 'zAddAssetAttr-zPK-31', + 'zAsset-UUID = store.cloudphotodb-32', + 'zAddAssetAttr-Master Fingerprint-33', + 'zAddAssetAttr.Adjusted Fingerprint-34', + 'SPLzSharePartic-Is Current User-35', + 'SPLzSharePartic-Role-36', + 'zAsstContrib-Participant= zSharePartic-zPK-37', + 'SPLzSharePartic-Email Address-38', + 'SPLzSharePartic-Phone Number-39', + 'SPLzShare-Title-SPL-40', + 'SPLzShare-Share URL-SPL-41', + 'SPLzShare-Scope ID-SPL-42', + ('SPLzShare-Creation Date-SPL-43', 'datetime'), + ('SPLzShare-Expiry Date-SPL-44', 'datetime'), + 'SPLzShare-Cloud Photo Count-SPL-45', + 'SPLzShare-Assets AddedByCamera SmartSharing-46', + 'SPLzShare-Cloud Video Count-SPL-47', + 'SPLzSharePartic-z54SHARE-48', + 'SPLzShare-Status-49', + 'SPLzShare-Scope Type-50') + data_list = get_sqlite_db_records(source_path, query) - description = 'Parses Assets in iCloud Shared Photo Library with contributor information from' \ - ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-17.' \ - ' Parses basic asset data and iCloud SPL and contributor information.' \ - ' If you are attempting to match SPL count with results please check' \ - ' hidden, trashed, and burst assets.' - report = ArtifactHtmlReport('Ph32-iCld Shared Photo Lib Assets-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph32-iCld Shared Photo Lib Assets-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Active Library Scope Participation State-1', - 'zAsset-zPK-2', - 'zAsset-Directory-Path-3', - 'zAsset-Filename-4', - 'zAddAssetAttr- Original Filename-5', - 'zCldMast- Original Filename-6', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', - 'zAsset-Syndication State-8', - 'zAsset-Bundle Scope-9', - 'zAddAssetAttr-Imported by-10', - 'zExtAttr-Camera Make-11', - 'zExtAttr-Camera Model-12', - 'zAddAssetAttr.Imported by Bundle Identifier-13', - 'zAddAssetAttr-Imported By Display Name-14', - 'zAsset-Visibility State-15', - 'zAsset-Saved Asset Type-16', - 'zAddAssetAttr-Share Type-17', - 'zAsset- SortToken -CameraRoll-18', - 'zAsset-Added Date-19', - 'zCldMast-Creation Date-20', - 'zAddAssetAttr-Time Zone Name-21', - 'zAddAssetAttr-EXIF-String-22', - 'zAsset-Modification Date-23', - 'zAsset-Last Shared Date-24', - 'zAsset-Hidden-25', - 'zAsset-Avalanche_Pick_Type-BurstAsset-26', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-27', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-28', - 'zAsset-Trashed Date-29', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-30', - 'zAddAssetAttr-Share Type-31', - 'zAddAssetAttr-zPK-32', - 'zAsset-UUID = store.cloudphotodb-33', - 'zAddAssetAttr-Master Fingerprint-34', - 'zAddAssetAttr.Adjusted Fingerprint-35', - 'SPLzSharePartic-Is Current User-36', - 'SPLzSharePartic-Role-37', - 'zAsstContrib-Participant= zSharePartic-zPK-38', - 'SPLzSharePartic-Email Address-39', - 'SPLzSharePartic-Phone Number-10', - 'SPLzShare-Title-SPL-41', - 'SPLzShare-Share URL-SPL-42', - 'SPLzShare-Scope ID-SPL-43', - 'SPLzShare-Creation Date-SPL-44', - 'SPLzShare-Expiry Date-SPL-45', - 'SPLzShare-Cloud Photo Count-SPL-46', - 'SPLzShare-Assets AddedByCamera SmartSharing-47', - 'SPLzShare-Cloud Video Count-SPL-48', - 'SPLzSharePartic-z54SHARE-49', - 'SPLzShare-Status-50', - 'SPLzShare-Scope Type-51') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() + return data_headers, data_list, source_path - tsvname = 'Ph32-iCld Shared Photo Lib Assets-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - tlactivity = 'Ph32-iCld Shared Photo Lib Assets-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + zAsset.Z_PK AS 'zAsset-zPK', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + CASE zAsset.ZHIDDEN + WHEN 0 THEN '0-Asset Not Hidden-0' + WHEN 1 THEN '1-Asset Hidden-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || '' + END AS 'zAsset-Hidden', + CASE zAsset.ZAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || '' + END AS 'zAsset-Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || '' + END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', + zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint', + CASE SPLzSharePartic.ZISCURRENTUSER + WHEN 0 THEN '0-Participant-Not_This_User-0' + WHEN 1 THEN '1-Participant-Is_This_User-1' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZISCURRENTUSER || '' + END AS 'SPLzSharePartic-Is Current User', + CASE SPLzSharePartic.ZROLE + WHEN 1 THEN '1-Participant-is-Owner-Role-1' + WHEN 2 THEN '2-Participant-is-Invitee-Role-2' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZROLE || '' + END AS 'SPLzSharePartic-Role', + zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK', + SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address', + SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number', + SPLzShare.ZTITLE AS 'SPLzShare-Title-SPL', + SPLzShare.ZSHAREURL AS 'SPLzShare-Share URL-SPL', + SPLzShare.ZSCOPEIDENTIFIER AS 'SPLzShare-Scope ID-SPL', + DateTime(SPLzShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Creation Date-SPL', + DateTime(SPLzShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Expiry Date-SPL', + SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL', + SPLzShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'SPLzShare-Assets AddedByCamera SmartSharing', + SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL', + CASE SPLzSharePartic.Z55_SHARE + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z55_SHARE || '' + END AS 'SPLzSharePartic-z55SHARE', + CASE SPLzShare.ZSTATUS + WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' + WHEN 3 THEN '3-SPL-Actively-Sharing-3' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSTATUS || '' + END AS 'SPLzShare-Status', + CASE SPLzShare.ZSCOPETYPE + WHEN 2 THEN '2-iCloudLink-CMMoment-2' + WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4' + WHEN 5 THEN '5-SPL-Active-Participant-5' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSCOPETYPE || '' + END AS 'SPLzShare-Scope Type' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE + LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK + LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT + WHERE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE = 1 + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50])) - else: - logfunc('No assets in iCloud Shared Photo Library found in PhotoData-Photos.sqlite ZSHARE table') + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Active Library Scope Participation State-1', + 'zAsset-zPK-2', + 'zAsset-Directory-Path-3', + 'zAsset-Filename-4', + 'zAddAssetAttr- Original Filename-5', + 'zCldMast- Original Filename-6', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', + 'zAsset-Syndication State-8', + 'zAsset-Bundle Scope-9', + 'zAddAssetAttr-Imported by-10', + 'zExtAttr-Camera Make-11', + 'zExtAttr-Camera Model-12', + 'zAddAssetAttr.Imported by Bundle Identifier-13', + 'zAddAssetAttr-Imported By Display Name-14', + 'zAsset-Visibility State-15', + 'zAsset-Saved Asset Type-16', + 'zAddAssetAttr-Share Type-17', + ('zAsset- SortToken -CameraRoll-18', 'datetime'), + ('zAsset-Added Date-19', 'datetime'), + ('zCldMast-Creation Date-20', 'datetime'), + 'zAddAssetAttr-Time Zone Name-21', + 'zAddAssetAttr-EXIF-String-22', + ('zAsset-Modification Date-23', 'datetime'), + ('zAsset-Last Shared Date-24', 'datetime'), + 'zAsset-Hidden-25', + 'zAsset-Avalanche_Pick_Type-BurstAsset-26', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-27', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-28', + ('zAsset-Trashed Date-29', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-30', + 'zAddAssetAttr-zPK-31', + 'zAsset-UUID = store.cloudphotodb-32', + 'zAddAssetAttr-Master Fingerprint-33', + 'zAddAssetAttr.Adjusted Fingerprint-34', + 'SPLzSharePartic-Is Current User-35', + 'SPLzSharePartic-Role-36', + 'zAsstContrib-Participant= zSharePartic-zPK-37', + 'SPLzSharePartic-Email Address-38', + 'SPLzSharePartic-Phone Number-39', + 'SPLzShare-Title-SPL-40', + 'SPLzShare-Share URL-SPL-41', + 'SPLzShare-Scope ID-SPL-42', + ('SPLzShare-Creation Date-SPL-43', 'datetime'), + ('SPLzShare-Expiry Date-SPL-44', 'datetime'), + 'SPLzShare-Cloud Photo Count-SPL-45', + 'SPLzShare-Assets AddedByCamera SmartSharing-46', + 'SPLzShare-Cloud Video Count-SPL-47', + 'SPLzSharePartic-z55SHARE-48', + 'SPLzShare-Status-49', + 'SPLzShare-Scope Type-50') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE @@ -361,10 +577,10 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text, ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' END AS 'zAsset-Visibility State', CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' + WHEN 0 THEN '0-Not_Recently_Saved-0' + WHEN 1 THEN '1-Recently_Saved-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', + END AS 'zAsset-Is_Recently_Saved', CASE zAsset.ZSAVEDASSETTYPE WHEN 0 THEN '0-Saved-via-other-source-0' WHEN 1 THEN '1-StillTesting-1' @@ -391,10 +607,10 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text, DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', CASE zAsset.ZISDETECTEDSCREENSHOT - WHEN 0 THEN '0-Not_Detected_Screenshot iOS18_Still_Testing-0' - WHEN 1 THEN '1-Detected_Screenshot iOS18_Still_Testing-1' + WHEN 0 THEN '0-Not_Screenshot-0' + WHEN 1 THEN '1-Screenshot-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' - END AS 'zAsset-Is_Detected_Screenshot-iOS18', + END AS 'zAsset-Is_Detected_Screenshot', CASE zAsset.ZHIDDEN WHEN 0 THEN '0-Asset Not Hidden-0' WHEN 1 THEN '1-Asset Hidden-1' @@ -402,15 +618,15 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text, END AS 'zAsset-Hidden', CASE zAsset.ZADJUSTMENTSSTATE WHEN 0 THEN '0-No-Adjustments-0' - WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2' - WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3' + WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2' + WHEN 3 THEN '3-Adjusted-Camera-lens-3' ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' - END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18', + END AS 'zAsset-Adjustments_State', CASE zAsset.ZAVALANCHEKIND WHEN 0 THEN '0-No_Avalanche iOS18_Still_Testing-0' WHEN 1 THEN '1-Is_Avalanche iOS18_Still_Testing-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEKIND || '' - END AS 'zAsset-Avalanche_Kind-iOS18', + END AS 'zAsset-Avalanche_Kind', CASE zAsset.ZAVALANCHEPICKTYPE WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' @@ -437,16 +653,11 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text, ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', - zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', - CASE zAddAssetAttr.ZSHARETYPE - WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' - WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' - END AS 'zAddAssetAttr-Share Type', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash', CASE SPLzSharePartic.ZISCURRENTUSER WHEN 0 THEN '0-Participant-Not_This_User-0' WHEN 1 THEN '1-Participant-Is_This_User-1' @@ -468,11 +679,12 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text, SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL', SPLzShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'SPLzShare-Assets AddedByCamera SmartSharing', SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL', - CASE zExtAttr.ZGENERATIVEAITYPE - WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0' + CASE zExtAttr.ZGENERATIVEAITYPE + WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0' + WHEN 2 THEN '2-CleanUp-SafetyFilter-2' ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' - END AS 'zExtAttr-Generative_AI_Type-iOS18', - zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18' + END AS 'zExtAttr-Generative_AI_Type', + zExtAttr.ZCREDIT AS 'zExtAttr-Credit' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES @@ -482,117 +694,71 @@ def get_ph32icldsplassetsphdapsql(files_found, report_folder, seeker, wrap_text, LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT WHERE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE = 1 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54])) - - counter += 1 - - description = 'Parses Assets in iCloud Shared Photo Library with contributor information from' \ - ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 18.' \ - ' Parses basic asset data and iCloud SPL and contributor information.' \ - ' If you are attempting to match SPL count with results please check' \ - ' hidden, trashed, and burst assets.' - report = ArtifactHtmlReport('Ph32-iCld Shared Photo Lib Assets-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph32-iCld Shared Photo Lib Assets-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Active Library Scope Participation State-1', - 'zAsset-zPK-2', - 'zAsset-Directory-Path-3', - 'zAsset-Filename-4', - 'zAddAssetAttr- Original Filename-5', - 'zCldMast- Original Filename-6', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', - 'zAsset-Syndication State-8', - 'zAsset-Bundle Scope-9', - 'zAddAssetAttr-Imported by-10', - 'zExtAttr-Camera Make-11', - 'zExtAttr-Camera Model-12', - 'zAddAssetAttr- Imported by Bundle Identifier-13', - 'zAddAssetAttr- Imported By Display Name-14', - 'zAsset-Visibility State-15', - 'zAsset-Is_Recently_Saved-iOS18-16', - 'zAsset-Saved Asset Type-17', - 'zAddAssetAttr-Share Type-18', - 'zAsset- SortToken -CameraRoll-19', - 'zAsset-Added Date-20', - 'zCldMast-Creation Date-21', - 'zAddAssetAttr-Time Zone Name-22', - 'zAddAssetAttr-EXIF-String-23', - 'zAsset-Modification Date-24', - 'zAsset-Last Shared Date-25', - 'zAsset-Is_Detected_Screenshot-iOS18-26', - 'zAsset-Hidden-27', - 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-28', - 'zAsset-Avalanche_Kind-iOS18-29', - 'zAsset-Avalanche_Pick_Type-BurstAsset-30', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32', - 'zAsset-Trashed Date-33', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-34', - 'zAddAssetAttr-Share Type-35', - 'zAddAssetAttr-zPK-36', - 'zAsset-UUID = store.cloudphotodb-37', - 'zAddAssetAttr-Original Stable Hash-iOS18-38', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-39', - 'SPLzSharePartic-Is Current User-40', - 'SPLzSharePartic-Role-41', - 'zAsstContrib-Participant= zSharePartic-zPK-42', - 'SPLzSharePartic-Email Address-43', - 'SPLzSharePartic-Phone Number-44', - 'SPLzShare-Title-SPL-45', - 'SPLzShare-Share URL-SPL-46', - 'SPLzShare-Scope ID-SPL-47', - 'SPLzShare-Creation Date-SPL-48', - 'SPLzShare-Expiry Date-SPL-49', - 'SPLzShare-Cloud Photo Count-SPL-50', - 'SPLzShare-Assets AddedByCamera SmartSharing-51', - 'SPLzShare-Cloud Video Count-SPL-52', - 'zExtAttr-Generative_AI_Type-iOS18-53', - 'zExtAttr-Credit-iOS18-54') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph32-iCld Shared Photo Lib Assets-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph32-iCld Shared Photo Lib Assets-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No assets in iCloud Shared Photo Library found in PhotoData-Photos.sqlite ZSHARE table') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53])) + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Active Library Scope Participation State-1', + 'zAsset-zPK-2', + 'zAsset-Directory-Path-3', + 'zAsset-Filename-4', + 'zAddAssetAttr- Original Filename-5', + 'zCldMast- Original Filename-6', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', + 'zAsset-Syndication State-8', + 'zAsset-Bundle Scope-9', + 'zAddAssetAttr-Imported by-10', + 'zExtAttr-Camera Make-11', + 'zExtAttr-Camera Model-12', + 'zAddAssetAttr- Imported by Bundle Identifier-13', + 'zAddAssetAttr- Imported By Display Name-14', + 'zAsset-Visibility State-15', + 'zAsset-Is_Recently_Saved-16', + 'zAsset-Saved Asset Type-17', + 'zAddAssetAttr-Share Type-18', + ('zAsset- SortToken -CameraRoll-19', 'datetime'), + ('zAsset-Added Date-20', 'datetime'), + ('zCldMast-Creation Date-21', 'datetime'), + 'zAddAssetAttr-Time Zone Name-22', + 'zAddAssetAttr-EXIF-String-23', + ('zAsset-Modification Date-24', 'datetime'), + ('zAsset-Last Shared Date-25', 'datetime'), + 'zAsset-Is_Detected_Screenshot-26', + 'zAsset-Hidden-27', + 'zAsset-Adjustments_State-Camera-Effects-Filters-28', + 'zAsset-Avalanche_Kind-29', + 'zAsset-Avalanche_Pick_Type-BurstAsset-30', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32', + ('zAsset-Trashed Date-33', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-34', + 'zAddAssetAttr-zPK-35', + 'zAsset-UUID = store.cloudphotodb-36', + 'zAddAssetAttr-Original Stable Hash-37', + 'zAddAssetAttr.Adjusted Stable Hash-38', + 'SPLzSharePartic-Is Current User-39', + 'SPLzSharePartic-Role-40', + 'zAsstContrib-Participant= zSharePartic-zPK-41', + 'SPLzSharePartic-Email Address-42', + 'SPLzSharePartic-Phone Number-43', + 'SPLzShare-Title-SPL-44', + 'SPLzShare-Share URL-SPL-45', + 'SPLzShare-Scope ID-SPL-46', + ('SPLzShare-Creation Date-SPL-47', 'datetime'), + ('SPLzShare-Expiry Date-SPL-48', 'datetime'), + 'SPLzShare-Cloud Photo Count-SPL-49', + 'SPLzShare-Assets AddedByCamera SmartSharing-50', + 'SPLzShare-Cloud Video Count-SPL-51', + 'zExtAttr-Generative_AI_Type-52', + 'zExtAttr-Credit-53') + data_list = get_sqlite_db_records(source_path, query) -__artifacts_v2__ = { - 'Ph32-iCloud SPL Assets with Contributor-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph32 iCld Shared Photo Library Assets with Contributor', - 'description': 'Parses Assets in iCloud Shared Photo Library with contributor information from' - ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-18.' - ' Parses basic asset data and iCloud SPL and contributor information.' - ' If you are attempting to match SPL count with results please check' - ' hidden, trashed, and burst assets.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-13', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph32icldsplassetsphdapsql' - } -} + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph33AssetsIniCldSPLfromOtherContrib.py b/scripts/artifacts/Ph33AssetsIniCldSPLfromOtherContrib.py index abb5eb31..2db9347f 100644 --- a/scripts/artifacts/Ph33AssetsIniCldSPLfromOtherContrib.py +++ b/scripts/artifacts/Ph33AssetsIniCldSPLfromOtherContrib.py @@ -1,43 +1,50 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses Assets in iCloud Shared Photo Library from other contributors from PhotoData-Photos.sqlite ZSHARE Table -# and supports iOS 16-18. Parses basic asset and iCloud SPL data for assets that were shared by other contributors. -# If you are attempting to match SPL count with results please check hidden, trashed, and burst assets. -# This parser is based on research and SQLite Queries written by Scott Koenig -# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools -# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results. -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph33iCldSPLAssetsfromothercontribPhDaPsql': { + 'name': 'Ph33-iCld SPL Assets from other contrib-PhDaPsql', + 'description': 'Parses Assets in iCloud Shared Photo Library from other contributors' + ' from PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-17.' + ' Parses basic asset and iCloud SPL data for assets that were shared by other contributors.' + ' If you are attempting to match SPL count with results please check' + ' hidden, trashed, and burst assets.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc +@artifact_processor +def Ph33iCldSPLAssetsfromothercontribPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) -def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("15.8.2"): - logfunc("Unsupported version for iCloud Shared Photo Library assets from PhotoData-Photos.sqlite" - " from iOS " + iosversion) + logfunc("Unsupported version PhotoData-Photos.sqlite from iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE @@ -150,11 +157,6 @@ def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', - CASE zAddAssetAttr.ZSHARETYPE - WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' - WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' - END AS 'zAddAssetAttr-Share Type', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', @@ -189,101 +191,77 @@ def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT WHERE SPLzSharePartic.ZISCURRENTUSER = 0 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48])) - - counter += 1 - - description = 'Parses Assets in iCloud Shared Photo Library from other contributors' \ - ' from PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-17.' \ - ' Parses basic asset and iCloud SPL data for assets that were shared by other contributors.' \ - ' If you are attempting to match SPL count with results please check' \ - ' hidden, trashed, and burst assets.' - report = ArtifactHtmlReport('Ph33-iCld SPL Assets from other contrib-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph33-iCld SPL Assets from other contrib-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Active Library Scope Participation State-1', - 'zAsset-zPK-2', - 'zAsset-Directory-Path-3', - 'zAsset-Filename-4', - 'zAddAssetAttr- Original Filename-5', - 'zCldMast- Original Filename-6', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', - 'zAsset-Syndication State-8', - 'zAsset-Bundle Scope-9', - 'zAddAssetAttr-Imported by-10', - 'zExtAttr-Camera Make-11', - 'zExtAttr-Camera Model-12', - 'zAddAssetAttr.Imported by Bundle Identifier-13', - 'zAddAssetAttr-Imported By Display Name-14', - 'zAsset-Visibility State-15', - 'zAsset-Saved Asset Type-16', - 'zAddAssetAttr-Share Type-17', - 'zAsset- SortToken -CameraRoll-18', - 'zAsset-Added Date-19', - 'zCldMast-Creation Date-20', - 'zAddAssetAttr-Time Zone Name-21', - 'zAddAssetAttr-EXIF-String-22', - 'zAsset-Modification Date-23', - 'zAsset-Last Shared Date-24', - 'zAsset-Hidden-25', - 'zAsset-Avalanche_Pick_Type-BurstAsset-26', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-27', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-28', - 'zAsset-Trashed Date-29', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-30', - 'zAddAssetAttr-Share Type-31', - 'zAddAssetAttr-zPK-32', - 'zAsset-UUID = store.cloudphotodb-33', - 'zAddAssetAttr-Master Fingerprint-34', - 'zAddAssetAttr.Adjusted Fingerprint-35', - 'SPLzSharePartic-Is Current User-36', - 'SPLzSharePartic-Role-37', - 'zAsstContrib-Participant= zSharePartic-zPK-38', - 'SPLzSharePartic-Email Address-39', - 'SPLzSharePartic-Phone Number-40', - 'SPLzShare-Title-SPL-41', - 'SPLzShare-Share URL-SPL-42', - 'SPLzShare-Scope ID-SPL-43', - 'SPLzShare-Creation Date-SPL-44', - 'SPLzShare-Expiry Date-SPL-45', - 'SPLzShare-Cloud Photo Count-SPL-46', - 'SPLzShare-Assets AddedByCamera SmartSharing-47', - 'SPLzShare-Cloud Video Count-SPL-48') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph33-iCld SPL Assets from other contrib-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph33-iCld SPL Assets from other contrib-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47])) - else: - logfunc('No iCloud SPL assets from other contributors found in PhotoData-Photos.sqlite ZSHARE table') + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Active Library Scope Participation State-1', + 'zAsset-zPK-2', + 'zAsset-Directory-Path-3', + 'zAsset-Filename-4', + 'zAddAssetAttr- Original Filename-5', + 'zCldMast- Original Filename-6', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', + 'zAsset-Syndication State-8', + 'zAsset-Bundle Scope-9', + 'zAddAssetAttr-Imported by-10', + 'zExtAttr-Camera Make-11', + 'zExtAttr-Camera Model-12', + 'zAddAssetAttr.Imported by Bundle Identifier-13', + 'zAddAssetAttr-Imported By Display Name-14', + 'zAsset-Visibility State-15', + 'zAsset-Saved Asset Type-16', + 'zAddAssetAttr-Share Type-17', + ('zAsset- SortToken -CameraRoll-18', 'datetime'), + ('zAsset-Added Date-19', 'datetime'), + ('zCldMast-Creation Date-20', 'datetime'), + 'zAddAssetAttr-Time Zone Name-21', + 'zAddAssetAttr-EXIF-String-22', + ('zAsset-Modification Date-23', 'datetime'), + ('zAsset-Last Shared Date-24', 'datetime'), + 'zAsset-Hidden-25', + 'zAsset-Avalanche_Pick_Type-BurstAsset-26', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-27', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-28', + ('zAsset-Trashed Date-29', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-30', + 'zAddAssetAttr-zPK-31', + 'zAsset-UUID = store.cloudphotodb-32', + 'zAddAssetAttr-Master Fingerprint-33', + 'zAddAssetAttr.Adjusted Fingerprint-34', + 'SPLzSharePartic-Is Current User-35', + 'SPLzSharePartic-Role-36', + 'zAsstContrib-Participant= zSharePartic-zPK-37', + 'SPLzSharePartic-Email Address-38', + 'SPLzSharePartic-Phone Number-39', + 'SPLzShare-Title-SPL-40', + 'SPLzShare-Share URL-SPL-41', + 'SPLzShare-Scope ID-SPL-42', + ('SPLzShare-Creation Date-SPL-43', 'datetime'), + ('SPLzShare-Expiry Date-SPL-44', 'datetime'), + 'SPLzShare-Cloud Photo Count-SPL-45', + 'SPLzShare-Assets AddedByCamera SmartSharing-46', + 'SPLzShare-Cloud Video Count-SPL-47') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE @@ -340,10 +318,10 @@ def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' END AS 'zAsset-Visibility State', CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' + WHEN 0 THEN '0-Not_Recently_Saved-0' + WHEN 1 THEN '1-Recently_Saved-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', + END AS 'zAsset-Is_Recently_Saved', CASE zAsset.ZSAVEDASSETTYPE WHEN 0 THEN '0-Saved-via-other-source-0' WHEN 1 THEN '1-StillTesting-1' @@ -370,10 +348,10 @@ def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', CASE zAsset.ZISDETECTEDSCREENSHOT - WHEN 0 THEN '0-Not_Detected_Screenshot iOS18_Still_Testing-0' - WHEN 1 THEN '1-Detected_Screenshot iOS18_Still_Testing-1' + WHEN 0 THEN '0-Not_Screenshot-0' + WHEN 1 THEN '1-Screenshot-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' - END AS 'zAsset-Is_Detected_Screenshot-iOS18', + END AS 'zAsset-Is_Detected_Screenshot', CASE zAsset.ZHIDDEN WHEN 0 THEN '0-Asset Not Hidden-0' WHEN 1 THEN '1-Asset Hidden-1' @@ -381,10 +359,10 @@ def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker END AS 'zAsset-Hidden', CASE zAsset.ZADJUSTMENTSSTATE WHEN 0 THEN '0-No-Adjustments-0' - WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2' - WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3' + WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2' + WHEN 3 THEN '3-Adjusted-Camera-lens-3' ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' - END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18', + END AS 'zAsset-Adjustments_State', CASE zAsset.ZAVALANCHEKIND WHEN 0 THEN '0-No_Avalanche iOS18_Still_Testing-0' WHEN 1 THEN '1-Is_Avalanche iOS18_Still_Testing-1' @@ -416,16 +394,11 @@ def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', - zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', - CASE zAddAssetAttr.ZSHARETYPE - WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' - WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' - END AS 'zAddAssetAttr-Share Type', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash', CASE SPLzSharePartic.ZISCURRENTUSER WHEN 0 THEN '0-Participant-Not_This_User-0' WHEN 1 THEN '1-Participant-Is_This_User-1' @@ -447,11 +420,12 @@ def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL', SPLzShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'SPLzShare-Assets AddedByCamera SmartSharing', SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL', - CASE zExtAttr.ZGENERATIVEAITYPE - WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0' - ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' - END AS 'zExtAttr-Generative_AI_Type-iOS18', - zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18' + CASE zExtAttr.ZGENERATIVEAITYPE + WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0' + WHEN 2 THEN '2-CleanUp-SafetyFilter-2' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' + END AS 'zExtAttr-Generative_AI_Type', + zExtAttr.ZCREDIT AS 'zExtAttr-Credit' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES @@ -461,117 +435,71 @@ def get_ph33splassetsfromothercontribphdapsql(files_found, report_folder, seeker LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT WHERE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE = 1 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54])) - - counter += 1 - - description = 'Parses Assets in iCloud Shared Photo Library from other contributors' \ - ' from PhotoData-Photos.sqlite ZSHARE Table and supports iOS 18.' \ - ' Parses basic asset and iCloud SPL data for assets that were shared by other contributors.' \ - ' If you are attempting to match SPL count with results please check' \ - ' hidden, trashed, and burst assets.' - report = ArtifactHtmlReport('Ph33-iCld SPL Assets from other contrib-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph33-iCld SPL Assets from other contrib-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Active Library Scope Participation State-1', - 'zAsset-zPK-2', - 'zAsset-Directory-Path-3', - 'zAsset-Filename-4', - 'zAddAssetAttr- Original Filename-5', - 'zCldMast- Original Filename-6', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', - 'zAsset-Syndication State-8', - 'zAsset-Bundle Scope-9', - 'zAddAssetAttr-Imported by-10', - 'zExtAttr-Camera Make-11', - 'zExtAttr-Camera Model-12', - 'zAddAssetAttr- Imported by Bundle Identifier-13', - 'zAddAssetAttr- Imported By Display Name-14', - 'zAsset-Visibility State-15', - 'zAsset-Is_Recently_Saved-iOS18-16', - 'zAsset-Saved Asset Type-17', - 'zAddAssetAttr-Share Type-18', - 'zAsset- SortToken -CameraRoll-19', - 'zAsset-Added Date-20', - 'zCldMast-Creation Date-21', - 'zAddAssetAttr-Time Zone Name-22', - 'zAddAssetAttr-EXIF-String-23', - 'zAsset-Modification Date-24', - 'zAsset-Last Shared Date-25', - 'zAsset-Is_Detected_Screenshot-iOS18-26', - 'zAsset-Hidden-27', - 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-28', - 'zAsset-Avalanche_Kind-iOS18-29', - 'zAsset-Avalanche_Pick_Type-BurstAsset-30', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32', - 'zAsset-Trashed Date-33', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-34', - 'zAddAssetAttr-Share Type-35', - 'zAddAssetAttr-zPK-36', - 'zAsset-UUID = store.cloudphotodb-37', - 'zAddAssetAttr-Original Stable Hash-iOS18-38', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-39', - 'SPLzSharePartic-Is Current User-40', - 'SPLzSharePartic-Role-41', - 'zAsstContrib-Participant= zSharePartic-zPK-42', - 'SPLzSharePartic-Email Address-43', - 'SPLzSharePartic-Phone Number-44', - 'SPLzShare-Title-SPL-45', - 'SPLzShare-Share URL-SPL-46', - 'SPLzShare-Scope ID-SPL-47', - 'SPLzShare-Creation Date-SPL-48', - 'SPLzShare-Expiry Date-SPL-49', - 'SPLzShare-Cloud Photo Count-SPL-50', - 'SPLzShare-Assets AddedByCamera SmartSharing-51', - 'SPLzShare-Cloud Video Count-SPL-52', - 'zExtAttr-Generative_AI_Type-iOS18-53', - 'zExtAttr-Credit-iOS18-54') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph33-iCld SPL Assets from other contrib-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph33-iCld SPL Assets from other contrib-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No iCloud SPL assets from other contributors found in PhotoData-Photos.sqlite ZSHARE table') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53])) + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Active Library Scope Participation State-1', + 'zAsset-zPK-2', + 'zAsset-Directory-Path-3', + 'zAsset-Filename-4', + 'zAddAssetAttr- Original Filename-5', + 'zCldMast- Original Filename-6', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', + 'zAsset-Syndication State-8', + 'zAsset-Bundle Scope-9', + 'zAddAssetAttr-Imported by-10', + 'zExtAttr-Camera Make-11', + 'zExtAttr-Camera Model-12', + 'zAddAssetAttr- Imported by Bundle Identifier-13', + 'zAddAssetAttr- Imported By Display Name-14', + 'zAsset-Visibility State-15', + 'zAsset-Is_Recently_Saved-16', + 'zAsset-Saved Asset Type-17', + 'zAddAssetAttr-Share Type-18', + ('zAsset- SortToken -CameraRoll-19', 'datetime'), + ('zAsset-Added Date-20', 'datetime'), + ('zCldMast-Creation Date-21', 'datetime'), + 'zAddAssetAttr-Time Zone Name-22', + 'zAddAssetAttr-EXIF-String-23', + ('zAsset-Modification Date-24', 'datetime'), + ('zAsset-Last Shared Date-25', 'datetime'), + 'zAsset-Is_Detected_Screenshot-26', + 'zAsset-Hidden-27', + 'zAsset-Adjustments_State-Camera-Effects-Filters-28', + 'zAsset-Avalanche_Kind-29', + 'zAsset-Avalanche_Pick_Type-BurstAsset-30', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32', + ('zAsset-Trashed Date-33', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-34', + 'zAddAssetAttr-zPK-35', + 'zAsset-UUID = store.cloudphotodb-36', + 'zAddAssetAttr-Original Stable Hash-37', + 'zAddAssetAttr.Adjusted Stable Hash-38', + 'SPLzSharePartic-Is Current User-39', + 'SPLzSharePartic-Role-40', + 'zAsstContrib-Participant= zSharePartic-zPK-41', + 'SPLzSharePartic-Email Address-42', + 'SPLzSharePartic-Phone Number-43', + 'SPLzShare-Title-SPL-44', + 'SPLzShare-Share URL-SPL-45', + 'SPLzShare-Scope ID-SPL-46', + ('SPLzShare-Creation Date-SPL-47', 'datetime'), + ('SPLzShare-Expiry Date-SPL-48', 'datetime'), + 'SPLzShare-Cloud Photo Count-SPL-49', + 'SPLzShare-Assets AddedByCamera SmartSharing-50', + 'SPLzShare-Cloud Video Count-SPL-51', + 'zExtAttr-Generative_AI_Type-52', + 'zExtAttr-Credit-53') + data_list = get_sqlite_db_records(source_path, query) -__artifacts_v2__ = { - 'Ph33-iCld SPL Assets from other contrib-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph33 iCld Shared Photo Library Assets from other Contributors', - 'description': 'Parses Assets in iCloud Shared Photo Library from other contributors' - ' from PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-17.' - ' Parses basic asset and iCloud SPL data for assets that were shared by other contributors.' - ' If you are attempting to match SPL count with results please check' - ' hidden, trashed, and burst assets.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-13', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph33splassetsfromothercontribphdapsql' - } -} + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph34iCloudSharedLinksNAD.py b/scripts/artifacts/Ph34iCloudSharedLinksNAD.py index 4acfdf9e..48457a1e 100644 --- a/scripts/artifacts/Ph34iCloudSharedLinksNAD.py +++ b/scripts/artifacts/Ph34iCloudSharedLinksNAD.py @@ -1,40 +1,47 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses iCloud Shared Link records from the PhotoData-Photos.sqlite ZSHARE Table -# and supports iOS 14-18. Parses iCloud Shared Link records only no asset data being parsed. -# This parser is based on research and SQLite Queries written by Scott Koenig -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph34iCloudSharedLinkRecordswithNADPhDaPsql': { + 'name': 'Ph34-iCloud Shared Link Records with NAD-PhDaPsql', + 'description': 'Parses iCloud Shared Link records from the PhotoData-Photos.sqlite ZSHARE Table' + ' and supports iOS 14-18. Parses iCloud Shared Link records only no asset data being parsed.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly - +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc -def get_ph34icldsharedlinksphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph34iCloudSharedLinkRecordswithNADPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("13.7"): - logfunc("Unsupported version for PhotoData-Photos.sqlite zSHARE iCloud Shared Link records" - " with no asset data from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite from iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', @@ -112,88 +119,67 @@ def get_ph34icldsharedlinksphdapsql(files_found, report_folder, seeker, wrap_tex CASE zShare.Z_ENT WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' END AS 'zShare-zENT' FROM ZSHARE zShare LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK WHERE zShare.ZSCOPETYPE = 2 ORDER BY zShare.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31])) + + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + 'zShare-UUID-4', + 'zShare-Originating Scope ID-5', + 'zShare-Status-6', + 'zShare-Scope Type-7', + 'zShare-Asset Count-CMM-8', + 'zShare-Force Sync Attempted-CMM-9', + 'zShare-Photos Count-CMM-10', + 'zShare-Uploaded Photos Count-CMM-11', + 'zShare-Videos Count-CMM-12', + 'zShare-Uploaded Videos Count-CMM-13', + 'zShare-Scope ID-14', + 'zShare-Title-SPL-15', + 'zShare-Share URL-16', + 'zShare-Local Publish State-17', + 'zShare-Public Permission-18', + 'zSharePartic-Acceptance Status-19', + 'zSharePartic-User ID-20', + 'zSharePartic-zPK-21', + 'zSharePartic-Email Address-22', + 'zSharePartic-Phone Number-23', + 'zSharePartic-Is Current User-24', + 'zSharePartic-Role-25', + 'zSharePartic-Premission-26', + 'zShare-Should Notify On Upload Completion-27', + 'zShare-Should Ignor Budgets-28', + 'zShare-Trashed State-29', + 'zShare-Cloud Delete State-30', + 'zShare-zENT-31') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31])) - counter += 1 - - description = 'Parses iCloud Shared Link records from the PhotoData-Photos.sqlite ZSHARE Table' \ - ' and supports iOS 14-15. Parses iCloud Shared Link records only no asset data being parsed.' - report = ArtifactHtmlReport('Ph34-iCld Shared Link Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph34-iCld Shared Link Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zShare-Creation Date-0', - 'zShare-Start Date-1', - 'zShare-End Date-2', - 'zShare-Expiry Date-3', - 'zShare-UUID-4', - 'zShare-Originating Scope ID-5', - 'zShare-Status-6', - 'zShare-Scope Type-7', - 'zShare-Asset Count-CMM-8', - 'zShare-Force Sync Attempted-CMM-9', - 'zShare-Photos Count-CMM-10', - 'zShare-Uploaded Photos Count-CMM-11', - 'zShare-Videos Count-CMM-12', - 'zShare-Uploaded Videos Count-CMM-13', - 'zShare-Scope ID-14', - 'zShare-Title-SPL-15', - 'zShare-Share URL-16', - 'zShare-Local Publish State-17', - 'zShare-Public Permission-18', - 'zSharePartic-Acceptance Status-19', - 'zSharePartic-User ID-20', - 'zSharePartic-zPK-21', - 'zSharePartic-Email Address-22', - 'zSharePartic-Phone Number-23', - 'zSharePartic-Is Current User-24', - 'zSharePartic-Role-25', - 'zSharePartic-Premission-26', - 'zShare-Should Notify On Upload Completion-27', - 'zShare-Should Ignor Budgets-28', - 'zShare-Trashed State-29', - 'zShare-Cloud Delete State-30', - 'zShare-zENT-31') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph34-iCld Shared Link Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph34-iCld Shared Link Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Shared Link Records' - ' with No Asset Data') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" + query = ''' SELECT DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', @@ -204,8 +190,8 @@ def get_ph34icldsharedlinksphdapsql(files_found, report_folder, seeker, wrap_tex CASE zSharePartic.Z54_SHARE WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zSharePartic.Z54_SHARE || '' END AS 'zSharePartic-z54SHARE', CASE zShare.ZSTATUS @@ -323,105 +309,84 @@ def get_ph34icldsharedlinksphdapsql(files_found, report_folder, seeker, wrap_tex CASE zShare.Z_ENT WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' END AS 'zShare-zENT' FROM ZSHARE zShare LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK WHERE zShare.ZSCOPETYPE = 2 ORDER BY zShare.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], + row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], + row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], + row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], + row[35], row[36], row[37], row[38], row[39], row[40], row[41], row[42], row[43], + row[44], row[45], row[46])) + + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + 'zShare-UUID-4', + 'zShare-Originating Scope ID-5', + 'zSharePartic-z54SHARE-6', + 'zShare-Status-7', + 'zShare-Scope Type-8', + 'zShare-Asset Count-CMM-9', + 'zShare-Force Sync Attempted-CMM-10', + 'zShare-Photos Count-CMM-11', + 'zShare-Uploaded Photos Count-CMM-12', + 'zShare-Videos Count-CMM-13', + 'zShare-Uploaded Videos Count-CMM-14', + 'zShare-Scope ID-15', + 'zShare-Title-SPL-16', + 'zShare-Share URL-17', + 'zShare-Local Publish State-18', + 'zShare-Public Permission-19', + 'zShare-Cloud Local State-20', + 'zShare-Scope Syncing State-21', + 'zShare-Auto Share Policy-22', + 'zSharePartic-Acceptance Status-23', + 'zSharePartic-User ID-24', + 'zSharePartic-zPK-25', + 'zSharePartic-Email Address-26', + 'zSharePartic-Phone Number-27', + 'zSharePartic-Participant ID-28', + 'zSharePartic-UUID-29', + 'zSharePartic-Is Current User-30', + 'zSharePartic-Role-31', + 'zSharePartic-Premission-32', + 'zShare-Participant Cloud Update State-33', + 'zSharePartic-Exit State-34', + 'zShare-Preview State-35', + 'zShare-Should Notify On Upload Completion-36', + 'zShare-Should Ignore Budgets-37', + 'zShare-Exit Source-38', + 'zShare-Exit State-39', + 'zShare-Exit Type-40', + 'zShare-Trashed State-41', + 'zShare-Cloud Delete State-42', + ('zShare-Trashed Date-43', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-44', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-45', 'datetime'), + 'zShare-zENT-46') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], - row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], - row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], - row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], - row[35], row[36], row[37], row[38], row[39], row[40], row[41], row[42], row[43], - row[44], row[45], row[46])) - - counter += 1 - - description = 'Parses iCloud Shared Link records from the PhotoData-Photos.sqlite ZSHARE Table' \ - ' and supports iOS 16-17. Parses iCloud Shared Link records only no asset data being parsed.' - report = ArtifactHtmlReport('Ph34-iCld Shared Link Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph34-iCld Shared Link Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zShare-Creation Date-0', - 'zShare-Start Date-1', - 'zShare-End Date-2', - 'zShare-Expiry Date-3', - 'zShare-UUID-4', - 'zShare-Originating Scope ID-5', - 'zSharePartic-z54SHARE-6', - 'zShare-Status-7', - 'zShare-Scope Type-8', - 'zShare-Asset Count-CMM-9', - 'zShare-Force Sync Attempted-CMM-10', - 'zShare-Photos Count-CMM-11', - 'zShare-Uploaded Photos Count-CMM-12', - 'zShare-Videos Count-CMM-13', - 'zShare-Uploaded Videos Count-CMM-14', - 'zShare-Scope ID-15', - 'zShare-Title-SPL-16', - 'zShare-Share URL-17', - 'zShare-Local Publish State-18', - 'zShare-Public Permission-19', - 'zShare-Cloud Local State-20', - 'zShare-Scope Syncing State-21', - 'zShare-Auto Share Policy-22', - 'zSharePartic-Acceptance Status-23', - 'zSharePartic-User ID-24', - 'zSharePartic-zPK-25', - 'zSharePartic-Email Address-26', - 'zSharePartic-Phone Number-27', - 'zSharePartic-Participant ID-28', - 'zSharePartic-UUID-29', - 'zSharePartic-Is Current User-30', - 'zSharePartic-Role-31', - 'zSharePartic-Premission-32', - 'zShare-Participant Cloud Update State-33', - 'zSharePartic-Exit State-34', - 'zShare-Preview State-35', - 'zShare-Should Notify On Upload Completion-36', - 'zShare-Should Ignore Budgets-37', - 'zShare-Exit Source-38', - 'zShare-Exit State-39', - 'zShare-Exit Type-40', - 'zShare-Trashed State-41', - 'zShare-Cloud Delete State-42', - 'zShare-Trashed Date-43', - 'zShare-LastParticipant Asset Trash Notification Date-44', - 'zShare-Last Participant Asset Trash Notification View Date-45', - 'zShare-zENT-46') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph34-iCld Shared Link Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - tlactivity = 'Ph34-iCld Shared Link Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Shared Link Records' - ' with No Asset Data') - - db.close() - return - - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" + query = ''' SELECT DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', @@ -429,13 +394,13 @@ def get_ph34icldsharedlinksphdapsql(files_found, report_folder, seeker, wrap_tex DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date', zShare.ZUUID AS 'zShare-UUID', zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID', - CASE zSharePartic.Z62_SHARE + CASE zSharePartic.Z55_SHARE WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' - ELSE 'Unknown-New-Value!: ' || zSharePartic.Z62_SHARE || '' - END AS 'zSharePartic-z62SHARE', + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z55_SHARE || '' + END AS 'zSharePartic-z55SHARE', CASE zShare.ZSTATUS WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' WHEN 3 THEN '3-SPL-Actively-Sharing-3' @@ -551,112 +516,279 @@ def get_ph34icldsharedlinksphdapsql(files_found, report_folder, seeker, wrap_tex CASE zShare.Z_ENT WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' END AS 'zShare-zENT' FROM ZSHARE zShare LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK WHERE zShare.ZSCOPETYPE = 2 ORDER BY zShare.ZCREATIONDATE - """) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], + row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], + row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], + row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], + row[35], row[36], row[37], row[38], row[39], row[40], row[41], row[42], row[43], + row[44], row[45], row[46])) + + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + 'zShare-UUID-4', + 'zShare-Originating Scope ID-5', + 'zSharePartic-z55SHARE-6', + 'zShare-Status-7', + 'zShare-Scope Type-8', + 'zShare-Asset Count-CMM-9', + 'zShare-Force Sync Attempted-CMM-10', + 'zShare-Photos Count-CMM-11', + 'zShare-Uploaded Photos Count-CMM-12', + 'zShare-Videos Count-CMM-13', + 'zShare-Uploaded Videos Count-CMM-14', + 'zShare-Scope ID-15', + 'zShare-Title-SPL-16', + 'zShare-Share URL-17', + 'zShare-Local Publish State-18', + 'zShare-Public Permission-19', + 'zShare-Cloud Local State-20', + 'zShare-Scope Syncing State-21', + 'zShare-Auto Share Policy-22', + 'zSharePartic-Acceptance Status-23', + 'zSharePartic-User ID-24', + 'zSharePartic-zPK-25', + 'zSharePartic-Email Address-26', + 'zSharePartic-Phone Number-27', + 'zSharePartic-Participant ID-28', + 'zSharePartic-UUID-29', + 'zSharePartic-Is Current User-30', + 'zSharePartic-Role-31', + 'zSharePartic-Premission-32', + 'zShare-Participant Cloud Update State-33', + 'zSharePartic-Exit State-34', + 'zShare-Preview State-35', + 'zShare-Should Notify On Upload Completion-36', + 'zShare-Should Ignore Budgets-37', + 'zShare-Exit Source-38', + 'zShare-Exit State-39', + 'zShare-Exit Type-40', + 'zShare-Trashed State-41', + 'zShare-Cloud Delete State-42', + ('zShare-Trashed Date-43', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-44', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-45', 'datetime'), + 'zShare-zENT-46') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path - all_rows = cursor.fetchall() - usageentries = len(all_rows) + elif version.parse(iosversion) >= version.parse("18"): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], - row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], - row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], - row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], - row[35], row[36], row[37], row[38], row[39], row[40], row[41], row[42], row[43], - row[44], row[45], row[46])) - - counter += 1 - - description = 'Parses iCloud Shared Link records from the PhotoData-Photos.sqlite ZSHARE Table' \ - ' and supports iOS 16-17. Parses iCloud Shared Link records only no asset data being parsed.' - report = ArtifactHtmlReport('Ph34-iCld Shared Link Records NAD-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph34-iCld Shared Link Records NAD-PhDaPsql', description) - report.add_script() - data_headers = ('zShare-Creation Date-0', - 'zShare-Start Date-1', - 'zShare-End Date-2', - 'zShare-Expiry Date-3', - 'zShare-UUID-4', - 'zShare-Originating Scope ID-5', - 'zSharePartic-z54SHARE-6', - 'zShare-Status-7', - 'zShare-Scope Type-8', - 'zShare-Asset Count-CMM-9', - 'zShare-Force Sync Attempted-CMM-10', - 'zShare-Photos Count-CMM-11', - 'zShare-Uploaded Photos Count-CMM-12', - 'zShare-Videos Count-CMM-13', - 'zShare-Uploaded Videos Count-CMM-14', - 'zShare-Scope ID-15', - 'zShare-Title-SPL-16', - 'zShare-Share URL-17', - 'zShare-Local Publish State-18', - 'zShare-Public Permission-19', - 'zShare-Cloud Local State-20', - 'zShare-Scope Syncing State-21', - 'zShare-Auto Share Policy-22', - 'zSharePartic-Acceptance Status-23', - 'zSharePartic-User ID-24', - 'zSharePartic-zPK-25', - 'zSharePartic-Email Address-26', - 'zSharePartic-Phone Number-27', - 'zSharePartic-Participant ID-28', - 'zSharePartic-UUID-29', - 'zSharePartic-Is Current User-30', - 'zSharePartic-Role-31', - 'zSharePartic-Premission-32', - 'zShare-Participant Cloud Update State-33', - 'zSharePartic-Exit State-34', - 'zShare-Preview State-35', - 'zShare-Should Notify On Upload Completion-36', - 'zShare-Should Ignore Budgets-37', - 'zShare-Exit Source-38', - 'zShare-Exit State-39', - 'zShare-Exit Type-40', - 'zShare-Trashed State-41', - 'zShare-Cloud Delete State-42', - 'zShare-Trashed Date-43', - 'zShare-LastParticipant Asset Trash Notification Date-44', - 'zShare-Last Participant Asset Trash Notification View Date-45', - 'zShare-zENT-46') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph34-iCld Shared Link Records NAD-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph34-iCld Shared Link Records NAD-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite ZSHARE iCloud Shared Link Records' - ' with No Asset Data') - db.close() - return - - -__artifacts_v2__ = { - 'Ph34-iCloud Shared Link Records with NAD-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph34 iCld Shared Link Records with No Asset Data', - 'description': 'Parses iCloud Shared Link records from the PhotoData-Photos.sqlite ZSHARE Table' - ' and supports iOS 14-18. Parses iCloud Shared Link records only no asset data being parsed.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-13', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph34icldsharedlinksphdapsql' - } -} + query = ''' + SELECT + DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', + DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', + DateTime(zShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-End Date', + DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date', + zShare.ZUUID AS 'zShare-UUID', + zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID', + CASE zSharePartic.Z61_SHARE + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z61_SHARE || '' + END AS 'zSharePartic-z61SHARE', + CASE zShare.ZSTATUS + WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' + WHEN 3 THEN '3-SPL-Actively-Sharing-3' + ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || '' + END AS 'zShare-Status', + CASE zShare.ZSCOPETYPE + WHEN 2 THEN '2-iCloudLink-CMMoment-2' + WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4' + WHEN 5 THEN '5-SPL-Active-Participant-5' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || '' + END AS 'zShare-Scope Type', + zShare.ZASSETCOUNT AS 'zShare-Asset Count-CMM', + zShare.ZFORCESYNCATTEMPTED AS 'zShare-Force Sync Attempted-CMM', + zShare.ZPHOTOSCOUNT AS 'zShare-Photos Count-CMM', + zShare.ZUPLOADEDPHOTOSCOUNT AS 'zShare-Uploaded Photos Count-CMM', + zShare.ZVIDEOSCOUNT AS 'zShare-Videos Count-CMM', + zShare.ZUPLOADEDVIDEOSCOUNT AS 'zShare-Uploaded Videos Count-CMM', + zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID', + zShare.ZTITLE AS 'zShare-Title-SPL', + zShare.ZSHAREURL AS 'zShare-Share URL', + CASE zShare.ZLOCALPUBLISHSTATE + WHEN 2 THEN '2-Published-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZLOCALPUBLISHSTATE || '' + END AS 'zShare-Local Publish State', + CASE zShare.ZPUBLICPERMISSION + WHEN 1 THEN '1-Public_Premission_Denied-Private-1' + WHEN 2 THEN '2-Public_Premission_Granted-Public-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPUBLICPERMISSION || '' + END AS 'zShare-Public Permission', + CASE zShare.ZCLOUDLOCALSTATE + WHEN 1 THEN '1-Local-and-Cloud-SPL-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDLOCALSTATE || '' + END AS 'zShare-Cloud Local State', + CASE zShare.ZSCOPESYNCINGSTATE + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE || '' + END AS 'zShare-Scope Syncing State', + CASE zShare.ZAUTOSHAREPOLICY + WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZAUTOSHAREPOLICY || '' + END AS 'zShare-Auto Share Policy', + CASE zSharePartic.ZACCEPTANCESTATUS + WHEN 1 THEN '1-Invite-Pending_or_Declined-1' + WHEN 2 THEN '2-Invite-Accepted-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' + END AS 'zSharePartic-Acceptance Status', + zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', + zSharePartic.Z_PK AS 'zSharePartic-zPK', + zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', + zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', + zSharePartic.ZPARTICIPANTID AS 'zSharePartic-Participant ID', + zSharePartic.ZUUID AS 'zSharePartic-UUID', + CASE zSharePartic.ZISCURRENTUSER + WHEN 0 THEN '0-Participant-Not_CloudStorageOwner-0' + WHEN 1 THEN '1-Participant-Is_CloudStorageOwner-1' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' + END AS 'zSharePartic-Is Current User', + CASE zSharePartic.ZROLE + WHEN 1 THEN '1-Participant-is-Owner-Role-1' + WHEN 2 THEN '2-Participant-is-Invitee-Role-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' + END AS 'zSharePartic-Role', + CASE zSharePartic.ZPERMISSION + WHEN 3 THEN '3-Participant-has-Full-Premissions-3' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZPERMISSION || '' + END AS 'zSharePartic-Premission', + CASE zShare.ZPARTICIPANTCLOUDUPDATESTATE + WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPARTICIPANTCLOUDUPDATESTATE || '' + END AS 'zShare-Participant Cloud Update State', + CASE zSharePartic.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZEXITSTATE || '' + END AS 'zSharePartic-Exit State', + CASE zShare.ZPREVIEWSTATE + WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZPREVIEWSTATE || '' + END AS 'zShare-Preview State', + CASE zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION + WHEN 0 THEN '0-DoNotNotify-SPL-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || '' + END AS 'zShare-Should Notify On Upload Completion', + CASE zShare.ZSHOULDIGNOREBUDGETS + WHEN 1 THEN '1-StillTesting-CMM-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDIGNOREBUDGETS || '' + END AS 'zShare-Should Ignore Budgets', + CASE zShare.ZEXITSOURCE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSOURCE || '' + END AS 'zShare-Exit Source', + CASE zShare.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSTATE || '' + END AS 'zShare-Exit State', + CASE zShare.ZEXITTYPE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITTYPE || '' + END AS 'zShare-Exit Type', + CASE zShare.ZTRASHEDSTATE + WHEN 0 THEN '0-Not_in_Trash-0' + WHEN 1 THEN '1-In_Trash-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZTRASHEDSTATE || '' + END AS 'zShare-Trashed State', + CASE zShare.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Not Deleted-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDDELETESTATE || '' + END AS 'zShare-Cloud Delete State', + DateTime(zShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Trashed Date', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS + 'zShare-LastParticipant Asset Trash Notification Date', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS + 'zShare-Last Participant Asset Trash Notification View Date', + CASE zShare.Z_ENT + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' + END AS 'zShare-zENT' + FROM ZSHARE zShare + LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK + WHERE zShare.ZSCOPETYPE = 2 + ORDER BY zShare.ZCREATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], + row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], + row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], + row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], + row[35], row[36], row[37], row[38], row[39], row[40], row[41], row[42], row[43], + row[44], row[45], row[46])) + + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + 'zShare-UUID-4', + 'zShare-Originating Scope ID-5', + 'zSharePartic-z61SHARE-6', + 'zShare-Status-7', + 'zShare-Scope Type-8', + 'zShare-Asset Count-CMM-9', + 'zShare-Force Sync Attempted-CMM-10', + 'zShare-Photos Count-CMM-11', + 'zShare-Uploaded Photos Count-CMM-12', + 'zShare-Videos Count-CMM-13', + 'zShare-Uploaded Videos Count-CMM-14', + 'zShare-Scope ID-15', + 'zShare-Title-SPL-16', + 'zShare-Share URL-17', + 'zShare-Local Publish State-18', + 'zShare-Public Permission-19', + 'zShare-Cloud Local State-20', + 'zShare-Scope Syncing State-21', + 'zShare-Auto Share Policy-22', + 'zSharePartic-Acceptance Status-23', + 'zSharePartic-User ID-24', + 'zSharePartic-zPK-25', + 'zSharePartic-Email Address-26', + 'zSharePartic-Phone Number-27', + 'zSharePartic-Participant ID-28', + 'zSharePartic-UUID-29', + 'zSharePartic-Is Current User-30', + 'zSharePartic-Role-31', + 'zSharePartic-Premission-32', + 'zShare-Participant Cloud Update State-33', + 'zSharePartic-Exit State-34', + 'zShare-Preview State-35', + 'zShare-Should Notify On Upload Completion-36', + 'zShare-Should Ignore Budgets-37', + 'zShare-Exit Source-38', + 'zShare-Exit State-39', + 'zShare-Exit Type-40', + 'zShare-Trashed State-41', + 'zShare-Cloud Delete State-42', + ('zShare-Trashed Date-43', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-44', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-45', 'datetime'), + 'zShare-zENT-46') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph35iCloudSharedLinkAssets.py b/scripts/artifacts/Ph35iCloudSharedLinkAssets.py index 11a1526f..774acb90 100644 --- a/scripts/artifacts/Ph35iCloudSharedLinkAssets.py +++ b/scripts/artifacts/Ph35iCloudSharedLinkAssets.py @@ -1,41 +1,47 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses iCloud Shared Link records and related assets from the PhotoData-Photos.sqlite ZSHARE Table -# and supports iOS 14-18. -# This parser is based on research and SQLite Queries written by Scott Koenig -# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools -# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results. -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph35iCloudSharedLinkAssetsPhDaPsql': { + 'name': 'Ph35-iCloud Shared Link Assets-PhDaPsql', + 'description': 'Parses iCloud Shared Link records and related assets from the' + ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 14-18.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc +@artifact_processor +def Ph35iCloudSharedLinkAssetsPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) -def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("13.7"): - logfunc("Unsupported version for iCloud Shared Link Assets from PhotoData-Photos.sqlite from iOS " + iosversion) + logfunc("Unsupported version PhotoData-Photos.sqlite from iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', @@ -155,8 +161,8 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra CASE zShare.Z_ENT WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' END AS 'zShare-zENT' FROM ZASSET zAsset @@ -167,103 +173,83 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK WHERE zAsset.ZSAVEDASSETTYPE = 8 ORDER BY zShare.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53])) - - counter += 1 - - description = 'Parses iCloud Shared Link records and related assets from the' \ - ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 14.' - report = ArtifactHtmlReport('Ph35-iCld Shared Link Assets-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph35-iCld Shared Link Assets-PhDaPsql', description) - report.add_script() - data_headers = ('zShare-Creation Date-0', - 'zShare-Start Date-1', - 'zShare-End Date-2', - 'zShare-Expiry Date-3', - 'zAsset-Date Created-4', - 'zAsset-zPK-5', - 'zAsset-Directory-Path-6', - 'zAsset-Filename-7', - 'zAddAssetAttr- Original Filename-8', - 'zCldMast- Original Filename-9', - 'zAddAssetAttr- Creator Bundle ID-10', - 'zAddAssetAttr-Imported By Display Name-11', - 'zAsset-Visibility State-12', - 'zAsset-Saved Asset Type-13', - 'zAddAssetAttr-Share Type-14', - 'zAsset- SortToken -CameraRoll-15', - 'zAsset-Added Date-16', - 'zCldMast-Creation Date-17', - 'zAddAssetAttr-Time Zone Name-18', - 'zAddAssetAttr-EXIF-String-19', - 'zAsset-Modification Date-20', - 'zAsset-Last Shared Date-21', - 'zAsset-Trashed Date-22', - 'zAddAssetAttr-zPK-23', - 'zAsset-UUID = store.cloudphotodb-24', - 'zAddAssetAttr-Master Fingerprint-25', - 'zShare-UUID-26', - 'zShare-Originating Scope ID-27', - 'zShare-Status-28', - 'zShare-Scope Type-29', - 'zShare-Asset Count-CMM-30', - 'zShare-Force Sync Attempted-CMM-31', - 'zShare-Photos Count-CMM-32', - 'zShare-Uploaded Photos Count-CMM-33', - 'zShare-Videos Count-CMM-34', - 'zShare-Uploaded Videos Count-CMM-35', - 'zShare-Scope ID-36', - 'zShare-Title-SPL-37', - 'zShare-Share URL-38', - 'zShare-Local Publish State-39', - 'zShare-Public Permission-40', - 'zSharePartic-Acceptance Status-41', - 'zSharePartic-User ID-42', - 'zSharePartic-zPK-43', - 'zSharePartic-Email Address-44', - 'zSharePartic-Phone Number-45', - 'zSharePartic-Is Current User-46', - 'zSharePartic-Role-47', - 'zSharePartic-Premission-48', - 'zShare-Should Notify On Upload Completion-49', - 'zShare-Should Ignor Budgets-50', - 'zShare-Trashed State-51', - 'zShare-Cloud Delete State-52', - 'zShare-zENT-53') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph35-iCld Shared Link Assets-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph35-iCld Shared Link Assets-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53])) - else: - logfunc('No iCloud Shared Link Assets found in PhotoData-Photos.sqlite ZSHARE table') + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + ('zAsset-Date Created-4', 'datetime'), + 'zAsset-zPK-5', + 'zAsset-Directory-Path-6', + 'zAsset-Filename-7', + 'zAddAssetAttr- Original Filename-8', + 'zCldMast- Original Filename-9', + 'zAddAssetAttr- Creator Bundle ID-10', + 'zAddAssetAttr-Imported By Display Name-11', + 'zAsset-Visibility State-12', + 'zAsset-Saved Asset Type-13', + 'zAddAssetAttr-Share Type-14', + ('zAsset- SortToken -CameraRoll-15', 'datetime'), + ('zAsset-Added Date-16', 'datetime'), + ('zCldMast-Creation Date-17', 'datetime'), + 'zAddAssetAttr-Time Zone Name-18', + 'zAddAssetAttr-EXIF-String-19', + ('zAsset-Modification Date-20', 'datetime'), + ('zAsset-Last Shared Date-21', 'datetime'), + ('zAsset-Trashed Date-22', 'datetime'), + 'zAddAssetAttr-zPK-23', + 'zAsset-UUID = store.cloudphotodb-24', + 'zAddAssetAttr-Master Fingerprint-25', + 'zShare-UUID-26', + 'zShare-Originating Scope ID-27', + 'zShare-Status-28', + 'zShare-Scope Type-29', + 'zShare-Asset Count-CMM-30', + 'zShare-Force Sync Attempted-CMM-31', + 'zShare-Photos Count-CMM-32', + 'zShare-Uploaded Photos Count-CMM-33', + 'zShare-Videos Count-CMM-34', + 'zShare-Uploaded Videos Count-CMM-35', + 'zShare-Scope ID-36', + 'zShare-Title-SPL-37', + 'zShare-Share URL-38', + 'zShare-Local Publish State-39', + 'zShare-Public Permission-40', + 'zSharePartic-Acceptance Status-41', + 'zSharePartic-User ID-42', + 'zSharePartic-zPK-43', + 'zSharePartic-Email Address-44', + 'zSharePartic-Phone Number-45', + 'zSharePartic-Is Current User-46', + 'zSharePartic-Role-47', + 'zSharePartic-Premission-48', + 'zShare-Should Notify On Upload Completion-49', + 'zShare-Should Ignor Budgets-50', + 'zShare-Trashed State-51', + 'zShare-Cloud Delete State-52', + 'zShare-zENT-53') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', @@ -401,8 +387,8 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra CASE zShare.Z_ENT WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' END AS 'zShare-zENT' FROM ZASSET zAsset @@ -413,107 +399,87 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK WHERE zAsset.ZSAVEDASSETTYPE = 8 ORDER BY zShare.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56])) - - counter += 1 - - description = 'Parses iCloud Shared Link records and related assets from the' \ - ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 15.' - report = ArtifactHtmlReport('Ph35-iCld Shared Link Assets-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph35-iCld Shared Link Assets-PhDaPsql', description) - report.add_script() - data_headers = ('zShare-Creation Date-0', - 'zShare-Start Date-1', - 'zShare-End Date-2', - 'zShare-Expiry Date-3', - 'zAsset-Date Created-4', - 'zAsset-zPK-5', - 'zAsset-Directory-Path-6', - 'zAsset-Filename-7', - 'zAddAssetAttr- Original Filename-8', - 'zCldMast- Original Filename-9', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-10', - 'zAsset-Syndication State-11', - 'zAsset-Bundle Scope-12', - 'zAddAssetAttr- Imported by Bundle Identifier-13', - 'zAddAssetAttr-Imported By Display Name-14', - 'zAsset-Visibility State-15', - 'zAsset-Saved Asset Type-16', - 'zAddAssetAttr-Share Type-17', - 'zAsset- SortToken -CameraRoll-18', - 'zAsset-Added Date-19', - 'zCldMast-Creation Date-20', - 'zAddAssetAttr-Time Zone Name-21', - 'zAddAssetAttr-EXIF-String-22', - 'zAsset-Modification Date-23', - 'zAsset-Last Shared Date-24', - 'zAsset-Trashed Date-25', - 'zAddAssetAttr-zPK-26', - 'zAsset-UUID = store.cloudphotodb-27', - 'zAddAssetAttr-Master Fingerprint-28', - 'zShare-UUID-29', - 'zShare-Originating Scope ID-30', - 'zShare-Status-31', - 'zShare-Scope Type-32', - 'zShare-Asset Count-CMM-33', - 'zShare-Force Sync Attempted-CMM-34', - 'zShare-Photos Count-CMM-35', - 'zShare-Uploaded Photos Count-CMM-36', - 'zShare-Videos Count-CMM-37', - 'zShare-Uploaded Videos Count-CMM-38', - 'zShare-Scope ID-39', - 'zShare-Title-SPL-40', - 'zShare-Share URL-41', - 'zShare-Local Publish State-42', - 'zShare-Public Permission-43', - 'zSharePartic-Acceptance Status-44', - 'zSharePartic-User ID-45', - 'zSharePartic-zPK-46', - 'zSharePartic-Email Address-47', - 'zSharePartic-Phone Number-48', - 'zSharePartic-Is Current User-49', - 'zSharePartic-Role-50', - 'zSharePartic-Premission-51', - 'zShare-Should Notify On Upload Completion-52', - 'zShare-Should Ignor Budgets-53', - 'zShare-Trashed State-54', - 'zShare-Cloud Delete State-55', - 'zShare-zENT-56') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph35-iCld Shared Link Assets-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph35-iCld Shared Link Assets-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56])) - else: - logfunc('No iCloud Shared Link Assets found in PhotoData-Photos.sqlite ZSHARE table') + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + ('zAsset-Date Created-4', 'datetime'), + 'zAsset-zPK-5', + 'zAsset-Directory-Path-6', + 'zAsset-Filename-7', + 'zAddAssetAttr- Original Filename-8', + 'zCldMast- Original Filename-9', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-10', + 'zAsset-Syndication State-11', + 'zAsset-Bundle Scope-12', + 'zAddAssetAttr- Imported by Bundle Identifier-13', + 'zAddAssetAttr-Imported By Display Name-14', + 'zAsset-Visibility State-15', + 'zAsset-Saved Asset Type-16', + 'zAddAssetAttr-Share Type-17', + ('zAsset- SortToken -CameraRoll-18', 'datetime'), + ('zAsset-Added Date-19', 'datetime'), + ('zCldMast-Creation Date-20', 'datetime'), + 'zAddAssetAttr-Time Zone Name-21', + 'zAddAssetAttr-EXIF-String-22', + ('zAsset-Modification Date-23', 'datetime'), + ('zAsset-Last Shared Date-24', 'datetime'), + ('zAsset-Trashed Date-25', 'datetime'), + 'zAddAssetAttr-zPK-26', + 'zAsset-UUID = store.cloudphotodb-27', + 'zAddAssetAttr-Master Fingerprint-28', + 'zShare-UUID-29', + 'zShare-Originating Scope ID-30', + 'zShare-Status-31', + 'zShare-Scope Type-32', + 'zShare-Asset Count-CMM-33', + 'zShare-Force Sync Attempted-CMM-34', + 'zShare-Photos Count-CMM-35', + 'zShare-Uploaded Photos Count-CMM-36', + 'zShare-Videos Count-CMM-37', + 'zShare-Uploaded Videos Count-CMM-38', + 'zShare-Scope ID-39', + 'zShare-Title-SPL-40', + 'zShare-Share URL-41', + 'zShare-Local Publish State-42', + 'zShare-Public Permission-43', + 'zSharePartic-Acceptance Status-44', + 'zSharePartic-User ID-45', + 'zSharePartic-zPK-46', + 'zSharePartic-Email Address-47', + 'zSharePartic-Phone Number-48', + 'zSharePartic-Is Current User-49', + 'zSharePartic-Role-50', + 'zSharePartic-Premission-51', + 'zShare-Should Notify On Upload Completion-52', + 'zShare-Should Ignor Budgets-53', + 'zShare-Trashed State-54', + 'zShare-Cloud Delete State-55', + 'zShare-zENT-56') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', @@ -634,8 +600,8 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra CASE zSharePartic.Z54_SHARE WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zSharePartic.Z54_SHARE || '' END AS 'zSharePartic-z54SHARE', CASE zShare.ZSTATUS @@ -737,8 +703,8 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra CASE zShare.Z_ENT WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' END AS 'zShare-zENT' FROM ZASSET zAsset @@ -749,15 +715,370 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK WHERE zAsset.ZSAVEDASSETTYPE = 8 ORDER BY zShare.ZCREATIONDATE - """) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76])) - all_rows = cursor.fetchall() - usageentries = len(all_rows) + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + ('zAsset-Date Created-4', 'datetime'), + 'zAsset-zPK-5', + 'zAsset-Directory-Path-6', + 'zAsset-Filename-7', + 'zAddAssetAttr- Original Filename-8', + 'zCldMast- Original Filename-9', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-10', + 'zAsset-Syndication State-11', + 'zAsset-Bundle Scope-12', + 'zAddAssetAttr-Imported by-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zAddAssetAttr- Imported by Bundle Identifier-16', + 'zAddAssetAttr- Imported By Display Name-17', + 'zAsset-Visibility State-18', + 'zAsset-Saved Asset Type-19', + 'zAddAssetAttr-Share Type-20', + ('zAsset- SortToken -CameraRoll-21', 'datetime'), + ('zAsset-Added Date-22', 'datetime'), + ('zCldMast-Creation Date-23', 'datetime'), + 'zAddAssetAttr-Time Zone Name-24', + 'zAddAssetAttr-EXIF-String-25', + ('zAsset-Modification Date-26', 'datetime'), + ('zAsset-Last Shared Date-27', 'datetime'), + 'zAsset-Hidden-28', + 'zAsset-Avalanche_Pick_Type-BurstAsset-29', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-30', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-31', + ('zAsset-Trashed Date-32', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-33', + 'zAddAssetAttr-zPK-34', + 'zAsset-UUID = store.cloudphotodb-35', + 'zAddAssetAttr-Master Fingerprint-36', + 'zAddAssetAttr.Adjusted Fingerprint-37', + 'zShare-UUID-38', + 'zShare-Originating Scope ID-39', + 'zSharePartic-z54SHARE-40', + 'zShare-Status-41', + 'zShare-Scope Type-42', + 'zShare-Asset Count-CMM-43', + 'zShare-Force Sync Attempted-CMM-44', + 'zShare-Photos Count-CMM-45', + 'zShare-Uploaded Photos Count-CMM-46', + 'zShare-Videos Count-CMM-47', + 'zShare-Uploaded Videos Count-CMM-48', + 'zShare-Scope ID-49', + 'zShare-Title-SPL-50', + 'zShare-Share URL-51', + 'zShare-Local Publish State-52', + 'zShare-Public Permission-53', + 'zShare-Cloud Local State-54', + 'zShare-Scope Syncing State-55', + 'zShare-Auto Share Policy-56', + 'zSharePartic-Acceptance Status-57', + 'zSharePartic-User ID-58', + 'zSharePartic-zPK-59', + 'zSharePartic-Email Address-60', + 'zSharePartic-Phone Number-61', + 'zSharePartic-Participant ID-62', + 'zSharePartic-UUID-63', + 'zSharePartic-Is Current User-64', + 'zSharePartic-Role-65', + 'zSharePartic-Premission-66', + 'zShare-Participant Cloud Update State-67', + 'zShare-Preview State-68', + 'zShare-Should Notify On Upload Completion-69', + 'zShare-Should Ignore Budgets-70', + 'zShare-Trashed State-71', + 'zShare-Cloud Delete State-72', + ('zShare-Trashed Date-73', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-74', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-75', 'datetime'), + 'zShare-zENT-76') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + + query = ''' + SELECT + DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', + DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', + DateTime(zShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-End Date', + DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date', + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + zAsset.Z_PK AS 'zAsset-zPK', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr- Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr- Imported By Display Name', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + CASE zAsset.ZHIDDEN + WHEN 0 THEN '0-Asset Not Hidden-0' + WHEN 1 THEN '1-Asset Hidden-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || '' + END AS 'zAsset-Hidden', + CASE zAsset.ZAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || '' + END AS 'zAsset-Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || '' + END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', + zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint', + zShare.ZUUID AS 'zShare-UUID', + zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID', + CASE zSharePartic.Z54_SHARE + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z54_SHARE || '' + END AS 'zSharePartic-z54SHARE', + CASE zShare.ZSTATUS + WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' + WHEN 3 THEN '3-SPL-Actively-Sharing-3' + ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || '' + END AS 'zShare-Status', + CASE zShare.ZSCOPETYPE + WHEN 2 THEN '2-iCloudLink-CMMoment-2' + WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4' + WHEN 5 THEN '5-SPL-Active-Participant-5' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || '' + END AS 'zShare-Scope Type', + zShare.ZASSETCOUNT AS 'zShare-Asset Count-CMM', + zShare.ZFORCESYNCATTEMPTED AS 'zShare-Force Sync Attempted-CMM', + zShare.ZPHOTOSCOUNT AS 'zShare-Photos Count-CMM', + zShare.ZUPLOADEDPHOTOSCOUNT AS 'zShare-Uploaded Photos Count-CMM', + zShare.ZVIDEOSCOUNT AS 'zShare-Videos Count-CMM', + zShare.ZUPLOADEDVIDEOSCOUNT AS 'zShare-Uploaded Videos Count-CMM', + zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID', + zShare.ZTITLE AS 'zShare-Title-SPL', + zShare.ZSHAREURL AS 'zShare-Share URL', + CASE zShare.ZLOCALPUBLISHSTATE + WHEN 2 THEN '2-Published-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZLOCALPUBLISHSTATE || '' + END AS 'zShare-Local Publish State', + CASE zShare.ZPUBLICPERMISSION + WHEN 1 THEN '1-Public_Premission_Denied-Private-1' + WHEN 2 THEN '2-Public_Premission_Granted-Public-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPUBLICPERMISSION || '' + END AS 'zShare-Public Permission', + CASE zShare.ZCLOUDLOCALSTATE + WHEN 1 THEN '1-LocalandCloud-SPL-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDLOCALSTATE || '' + END AS 'zShare-Cloud Local State', + CASE zShare.ZSCOPESYNCINGSTATE + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE || '' + END AS 'zShare-Scope Syncing State', + CASE zShare.ZAUTOSHAREPOLICY + WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZAUTOSHAREPOLICY || '' + END AS 'zShare-Auto Share Policy', + CASE zSharePartic.ZACCEPTANCESTATUS + WHEN 1 THEN '1-Invite-Pending_or_Declined-1' + WHEN 2 THEN '2-Invite-Accepted-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' + END AS 'zSharePartic-Acceptance Status', + zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', + zSharePartic.Z_PK AS 'zSharePartic-zPK', + zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', + zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', + zSharePartic.ZPARTICIPANTID AS 'zSharePartic-Participant ID', + zSharePartic.ZUUID AS 'zSharePartic-UUID', + CASE zSharePartic.ZISCURRENTUSER + WHEN 0 THEN '0-Participant-Not_CloudStorageOwner-0' + WHEN 1 THEN '1-Participant-Is_CloudStorageOwner-1' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' + END AS 'zSharePartic-Is Current User', + CASE zSharePartic.ZROLE + WHEN 1 THEN '1-Participant-is-Owner-Role-1' + WHEN 2 THEN '2-Participant-is-Invitee-Role-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' + END AS 'zSharePartic-Role', + CASE zSharePartic.ZPERMISSION + WHEN 3 THEN '3-Participant-has-Full-Permissions-3' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZPERMISSION || '' + END AS 'zSharePartic-Premission', + CASE zShare.ZPARTICIPANTCLOUDUPDATESTATE + WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPARTICIPANTCLOUDUPDATESTATE || '' + END AS 'zShare-Participant Cloud Update State', + CASE zSharePartic.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZEXITSTATE || '' + END AS 'zSharePartic-Exit State', + CASE zShare.ZPREVIEWSTATE + WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZPREVIEWSTATE || '' + END AS 'zShare-Preview State', + CASE zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION + WHEN 0 THEN '0-DoNotNotify-SPL-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || '' + END AS 'zShare-Should Notify On Upload Completion', + CASE zShare.ZSHOULDIGNOREBUDGETS + WHEN 1 THEN '1-StillTesting-CMM-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDIGNOREBUDGETS || '' + END AS 'zShare-Should Ignore Budgets', + CASE zShare.ZEXITSOURCE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSOURCE || '' + END AS 'zShare-Exit Source', + CASE zShare.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSTATE || '' + END AS 'zShare-Exit State', + CASE zShare.ZEXITTYPE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITTYPE || '' + END AS 'zShare-Exit Type', + CASE zShare.ZTRASHEDSTATE + WHEN 0 THEN '0-Not_in_Trash-0' + WHEN 1 THEN '1-In_Trash-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZTRASHEDSTATE || '' + END AS 'zShare-Trashed State', + CASE zShare.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Not Deleted-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDDELETESTATE || '' + END AS 'zShare-Cloud Delete State', + DateTime(zShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Trashed Date', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS + 'zShare-LastParticipant Asset Trash Notification Date', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS + 'zShare-Last Participant Asset Trash Notification View Date', + CASE zShare.Z_ENT + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' + END AS 'zShare-zENT' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE + LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK + WHERE zAsset.ZSAVEDASSETTYPE = 8 + ORDER BY zShare.ZCREATIONDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], @@ -765,113 +1086,102 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76])) - - counter += 1 - - description = 'Parses iCloud Shared Link records and related assets from the' \ - ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16.' - report = ArtifactHtmlReport('Ph35-iCld Shared Link Assets-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph35-iCld Shared Link Assets-PhDaPsql', description) - report.add_script() - data_headers = ('zShare-Creation Date-0', - 'zShare-Start Date-1', - 'zShare-End Date-2', - 'zShare-Expiry Date-3', - 'zAsset-Date Created-4', - 'zAsset-zPK-5', - 'zAsset-Directory-Path-6', - 'zAsset-Filename-7', - 'zAddAssetAttr- Original Filename-8', - 'zCldMast- Original Filename-9', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-10', - 'zAsset-Syndication State-11', - 'zAsset-Bundle Scope-12', - 'zAddAssetAttr-Imported by-13', - 'zExtAttr-Camera Make-14', - 'zExtAttr-Camera Model-15', - 'zAddAssetAttr- Imported by Bundle Identifier-16', - 'zAddAssetAttr- Imported By Display Name-17', - 'zAsset-Visibility State-18', - 'zAsset-Saved Asset Type-19', - 'zAddAssetAttr-Share Type-20', - 'zAsset- SortToken -CameraRoll-21', - 'zAsset-Added Date-22', - 'zCldMast-Creation Date-23', - 'zAddAssetAttr-Time Zone Name-24', - 'zAddAssetAttr-EXIF-String-25', - 'zAsset-Modification Date-26', - 'zAsset-Last Shared Date-27', - 'zAsset-Hidden-28', - 'zAsset-Avalanche_Pick_Type-BurstAsset-29', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-30', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-31', - 'zAsset-Trashed Date-32', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-33', - 'zAddAssetAttr-zPK-34', - 'zAsset-UUID = store.cloudphotodb-35', - 'zAddAssetAttr-Master Fingerprint-36', - 'zAddAssetAttr.Adjusted Fingerprint-37', - 'zShare-UUID-38', - 'zShare-Originating Scope ID-39', - 'zSharePartic-z54SHARE-40', - 'zShare-Status-41', - 'zShare-Scope Type-42', - 'zShare-Asset Count-CMM-43', - 'zShare-Force Sync Attempted-CMM-44', - 'zShare-Photos Count-CMM-45', - 'zShare-Uploaded Photos Count-CMM-46', - 'zShare-Videos Count-CMM-47', - 'zShare-Uploaded Videos Count-CMM-48', - 'zShare-Scope ID-49', - 'zShare-Title-SPL-50', - 'zShare-Share URL-51', - 'zShare-Local Publish State-52', - 'zShare-Public Permission-53', - 'zShare-Cloud Local State-54', - 'zShare-Scope Syncing State-55', - 'zShare-Auto Share Policy-56', - 'zSharePartic-Acceptance Status-57', - 'zSharePartic-User ID-58', - 'zSharePartic-zPK-59', - 'zSharePartic-Email Address-60', - 'zSharePartic-Phone Number-61', - 'zSharePartic-Participant ID-62', - 'zSharePartic-UUID-63', - 'zSharePartic-Is Current User-64', - 'zSharePartic-Role-65', - 'zSharePartic-Premission-66', - 'zShare-Participant Cloud Update State-67', - 'zShare-Preview State-68', - 'zShare-Should Notify On Upload Completion-69', - 'zShare-Should Ignore Budgets-70', - 'zShare-Trashed State-71', - 'zShare-Cloud Delete State-72', - 'zShare-Trashed Date-73', - 'zShare-LastParticipant Asset Trash Notification Date-74', - 'zShare-Last Participant Asset Trash Notification View Date-75', - 'zShare-zENT-76') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81])) - tsvname = 'Ph35-iCld Shared Link Assets-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + ('zAsset-Date Created-4', 'datetime'), + 'zAsset-zPK-5', + 'zAsset-Directory-Path-6', + 'zAsset-Filename-7', + 'zAddAssetAttr- Original Filename-8', + 'zCldMast- Original Filename-9', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-10', + 'zAsset-Syndication State-11', + 'zAsset-Bundle Scope-12', + 'zAddAssetAttr-Imported by-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zAddAssetAttr- Imported by Bundle Identifier-16', + 'zAddAssetAttr- Imported By Display Name-17', + 'zAsset-Visibility State-18', + 'zAsset-Saved Asset Type-19', + 'zAddAssetAttr-Share Type-20', + 'zAsset-Active Library Scope Participation State-21', + ('zAsset- SortToken -CameraRoll-22', 'datetime'), + ('zAsset-Added Date-23', 'datetime'), + ('zCldMast-Creation Date-24', 'datetime'), + 'zAddAssetAttr-Time Zone Name-25', + 'zAddAssetAttr-EXIF-String-26', + ('zAsset-Modification Date-27', 'datetime'), + ('zAsset-Last Shared Date-28', 'datetime'), + 'zAsset-Hidden-29', + 'zAsset-Avalanche_Pick_Type-BurstAsset-30', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32', + ('zAsset-Trashed Date-33', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-34', + 'zAddAssetAttr-zPK-35', + 'zAsset-UUID = store.cloudphotodb-36', + 'zAddAssetAttr-Master Fingerprint-37', + 'zAddAssetAttr.Adjusted Fingerprint-38', + 'zShare-UUID-39', + 'zShare-Originating Scope ID-40', + 'zSharePartic-z54SHARE-41', + 'zShare-Status-42', + 'zShare-Scope Type-43', + 'zShare-Asset Count-CMM-44', + 'zShare-Force Sync Attempted-CMM-45', + 'zShare-Photos Count-CMM-46', + 'zShare-Uploaded Photos Count-CMM-47', + 'zShare-Videos Count-CMM-48', + 'zShare-Uploaded Videos Count-CMM-49', + 'zShare-Scope ID-50', + 'zShare-Title-SPL-51', + 'zShare-Share URL-52', + 'zShare-Local Publish State-53', + 'zShare-Public Permission-54', + 'zShare-Cloud Local State-55', + 'zShare-Scope Syncing State-56', + 'zShare-Auto Share Policy-57', + 'zSharePartic-Acceptance Status-58', + 'zSharePartic-User ID-59', + 'zSharePartic-zPK-60', + 'zSharePartic-Email Address-61', + 'zSharePartic-Phone Number-62', + 'zSharePartic-Participant ID-63', + 'zSharePartic-UUID-64', + 'zSharePartic-Is Current User-65', + 'zSharePartic-Role-66', + 'zSharePartic-Premission-67', + 'zShare-Participant Cloud Update State-68', + 'zSharePartic-Exit State-69', + 'zShare-Preview State-70', + 'zShare-Should Notify On Upload Completion-71', + 'zShare-Should Ignore Budgets-72', + 'zShare-Exit Source-73', + 'zShare-Exit State-74', + 'zShare-Exit Type-75', + 'zShare-Trashed State-76', + 'zShare-Cloud Delete State-77', + ('zShare-Trashed Date-78', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-79', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-80', 'datetime'), + 'zShare-zENT-81') + data_list = get_sqlite_db_records(source_path, query) - tlactivity = 'Ph35-iCld Shared Link Assets-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No iCloud Shared Link Assets found in PhotoData-Photos.sqlite ZSHARE table') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', @@ -994,13 +1304,13 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint', zShare.ZUUID AS 'zShare-UUID', zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID', - CASE zSharePartic.Z54_SHARE + CASE zSharePartic.Z55_SHARE WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' - ELSE 'Unknown-New-Value!: ' || zSharePartic.Z54_SHARE || '' - END AS 'zSharePartic-z54SHARE', + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z55_SHARE || '' + END AS 'zSharePartic-z55SHARE', CASE zShare.ZSTATUS WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' WHEN 3 THEN '3-SPL-Actively-Sharing-3' @@ -1116,8 +1426,8 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra CASE zShare.Z_ENT WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' END AS 'zShare-zENT' FROM ZASSET zAsset @@ -1128,134 +1438,114 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK WHERE zAsset.ZSAVEDASSETTYPE = 8 ORDER BY zShare.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81])) - - counter += 1 - - description = 'Parses iCloud Shared Link records and related assets from the' \ - ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 16-17.' - report = ArtifactHtmlReport('Ph35-iCld Shared Link Assets-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph35-iCld Shared Link Assets-PhDaPsql', description) - report.add_script() - data_headers = ('zShare-Creation Date-0', - 'zShare-Start Date-1', - 'zShare-End Date-2', - 'zShare-Expiry Date-3', - 'zAsset-Date Created-4', - 'zAsset-zPK-5', - 'zAsset-Directory-Path-6', - 'zAsset-Filename-7', - 'zAddAssetAttr- Original Filename-8', - 'zCldMast- Original Filename-9', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-10', - 'zAsset-Syndication State-11', - 'zAsset-Bundle Scope-12', - 'zAddAssetAttr-Imported by-13', - 'zExtAttr-Camera Make-14', - 'zExtAttr-Camera Model-15', - 'zAddAssetAttr- Imported by Bundle Identifier-16', - 'zAddAssetAttr- Imported By Display Name-17', - 'zAsset-Visibility State-18', - 'zAsset-Saved Asset Type-19', - 'zAddAssetAttr-Share Type-20', - 'zAsset-Active Library Scope Participation State-21', - 'zAsset- SortToken -CameraRoll-22', - 'zAsset-Added Date-23', - 'zCldMast-Creation Date-24', - 'zAddAssetAttr-Time Zone Name-25', - 'zAddAssetAttr-EXIF-String-26', - 'zAsset-Modification Date-27', - 'zAsset-Last Shared Date-28', - 'zAsset-Hidden-29', - 'zAsset-Avalanche_Pick_Type-BurstAsset-30', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32', - 'zAsset-Trashed Date-33', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-34', - 'zAddAssetAttr-zPK-35', - 'zAsset-UUID = store.cloudphotodb-36', - 'zAddAssetAttr-Master Fingerprint-37', - 'zAddAssetAttr.Adjusted Fingerprint-38', - 'zShare-UUID-39', - 'zShare-Originating Scope ID-40', - 'zSharePartic-z54SHARE-41', - 'zShare-Status-42', - 'zShare-Scope Type-43', - 'zShare-Asset Count-CMM-44', - 'zShare-Force Sync Attempted-CMM-45', - 'zShare-Photos Count-CMM-46', - 'zShare-Uploaded Photos Count-CMM-47', - 'zShare-Videos Count-CMM-48', - 'zShare-Uploaded Videos Count-CMM-49', - 'zShare-Scope ID-50', - 'zShare-Title-SPL-51', - 'zShare-Share URL-52', - 'zShare-Local Publish State-53', - 'zShare-Public Permission-54', - 'zShare-Cloud Local State-55', - 'zShare-Scope Syncing State-56', - 'zShare-Auto Share Policy-57', - 'zSharePartic-Acceptance Status-58', - 'zSharePartic-User ID-59', - 'zSharePartic-zPK-60', - 'zSharePartic-Email Address-61', - 'zSharePartic-Phone Number-62', - 'zSharePartic-Participant ID-63', - 'zSharePartic-UUID-64', - 'zSharePartic-Is Current User-65', - 'zSharePartic-Role-66', - 'zSharePartic-Premission-67', - 'zShare-Participant Cloud Update State-68', - 'zSharePartic-Exit State-69', - 'zShare-Preview State-70', - 'zShare-Should Notify On Upload Completion-71', - 'zShare-Should Ignore Budgets-72', - 'zShare-Exit Source-73', - 'zShare-Exit State-74', - 'zShare-Exit Type-75', - 'zShare-Trashed State-76', - 'zShare-Cloud Delete State-77', - 'zShare-Trashed Date-78', - 'zShare-LastParticipant Asset Trash Notification Date-79', - 'zShare-Last Participant Asset Trash Notification View Date-80', - 'zShare-zENT-81') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph35-iCld Shared Link Assets-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph35-iCld Shared Link Assets-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81])) - else: - logfunc('No iCloud Shared Link Assets found in PhotoData-Photos.sqlite ZSHARE table') + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2' 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + ('zAsset-Date Created-4', 'datetime'), + 'zAsset-zPK-5', + 'zAsset-Directory-Path-6', + 'zAsset-Filename-7', + 'zAddAssetAttr- Original Filename-8', + 'zCldMast- Original Filename-9', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-10', + 'zAsset-Syndication State-11', + 'zAsset-Bundle Scope-12', + 'zAddAssetAttr-Imported by-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zAddAssetAttr- Imported by Bundle Identifier-16', + 'zAddAssetAttr- Imported By Display Name-17', + 'zAsset-Visibility State-18', + 'zAsset-Saved Asset Type-19', + 'zAddAssetAttr-Share Type-20', + 'zAsset-Active Library Scope Participation State-21', + ('zAsset- SortToken -CameraRoll-22', 'datetime'), + ('zAsset-Added Date-23', 'datetime'), + ('zCldMast-Creation Date-24', 'datetime'), + 'zAddAssetAttr-Time Zone Name-25', + 'zAddAssetAttr-EXIF-String-26', + ('zAsset-Modification Date-27', 'datetime'), + ('zAsset-Last Shared Date-28', 'datetime'), + 'zAsset-Hidden-29', + 'zAsset-Avalanche_Pick_Type-BurstAsset-30', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32', + ('zAsset-Trashed Date-33', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-34', + 'zAddAssetAttr-zPK-35', + 'zAsset-UUID = store.cloudphotodb-36', + 'zAddAssetAttr-Master Fingerprint-37', + 'zAddAssetAttr.Adjusted Fingerprint-38', + 'zShare-UUID-39', + 'zShare-Originating Scope ID-40', + 'zSharePartic-z55SHARE-41', + 'zShare-Status-42', + 'zShare-Scope Type-43', + 'zShare-Asset Count-CMM-44', + 'zShare-Force Sync Attempted-CMM-45', + 'zShare-Photos Count-CMM-46', + 'zShare-Uploaded Photos Count-CMM-47', + 'zShare-Videos Count-CMM-48', + 'zShare-Uploaded Videos Count-CMM-49', + 'zShare-Scope ID-50', + 'zShare-Title-SPL-51', + 'zShare-Share URL-52', + 'zShare-Local Publish State-53', + 'zShare-Public Permission-54', + 'zShare-Cloud Local State-55', + 'zShare-Scope Syncing State-56', + 'zShare-Auto Share Policy-57', + 'zSharePartic-Acceptance Status-58', + 'zSharePartic-User ID-59', + 'zSharePartic-zPK-60', + 'zSharePartic-Email Address-61', + 'zSharePartic-Phone Number-62', + 'zSharePartic-Participant ID-63', + 'zSharePartic-UUID-64', + 'zSharePartic-Is Current User-65', + 'zSharePartic-Role-66', + 'zSharePartic-Premission-67', + 'zShare-Participant Cloud Update State-68', + 'zSharePartic-Exit State-69', + 'zShare-Preview State-70', + 'zShare-Should Notify On Upload Completion-71', + 'zShare-Should Ignore Budgets-72', + 'zShare-Exit Source-73', + 'zShare-Exit State-74', + 'zShare-Exit Type-75', + 'zShare-Trashed State-76', + 'zShare-Cloud Delete State-77', + ('zShare-Trashed Date-78', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-79', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-80', 'datetime'), + 'zShare-zENT-81') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date', DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date', @@ -1374,17 +1664,17 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash', zShare.ZUUID AS 'zShare-UUID', zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID', - CASE zSharePartic.Z62_SHARE + CASE zSharePartic.Z61_SHARE WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' - ELSE 'Unknown-New-Value!: ' || zSharePartic.Z62_SHARE || '' - END AS 'zSharePartic-z62SHARE', + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z61_SHARE || '' + END AS 'zSharePartic-z61SHARE', CASE zShare.ZSTATUS WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' WHEN 3 THEN '3-SPL-Actively-Sharing-3' @@ -1500,8 +1790,8 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra CASE zShare.Z_ENT WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' END AS 'zShare-zENT' FROM ZASSET zAsset @@ -1512,141 +1802,102 @@ def get_ph35icldsharedlinkassetsphdapsql(files_found, report_folder, seeker, wra LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK WHERE zAsset.ZSAVEDASSETTYPE = 8 ORDER BY zShare.ZCREATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81])) - - counter += 1 - - description = 'Parses iCloud Shared Link records and related assets from the' \ - ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 18.' - report = ArtifactHtmlReport('Ph35-iCld Shared Link Assets-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph35-iCld Shared Link Assets-PhDaPsql', description) - report.add_script() - data_headers = ('zShare-Creation Date-0', - 'zShare-Start Date-1', - 'zShare-End Date-2', - 'zShare-Expiry Date-3', - 'zAsset-Date Created-4', - 'zAsset-zPK-5', - 'zAsset-Directory-Path-6', - 'zAsset-Filename-7', - 'zAddAssetAttr- Original Filename-8', - 'zCldMast- Original Filename-9', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-10', - 'zAsset-Syndication State-11', - 'zAsset-Bundle Scope-12', - 'zAddAssetAttr-Imported by-13', - 'zExtAttr-Camera Make-14', - 'zExtAttr-Camera Model-15', - 'zAddAssetAttr- Imported by Bundle Identifier-16', - 'zAddAssetAttr- Imported By Display Name-17', - 'zAsset-Visibility State-18', - 'zAsset-Saved Asset Type-19', - 'zAddAssetAttr-Share Type-20', - 'zAsset-Active Library Scope Participation State-21', - 'zAsset- SortToken -CameraRoll-22', - 'zAsset-Added Date-23', - 'zCldMast-Creation Date-24', - 'zAddAssetAttr-Time Zone Name-25', - 'zAddAssetAttr-EXIF-String-26', - 'zAsset-Modification Date-27', - 'zAsset-Last Shared Date-28', - 'zAsset-Hidden-29', - 'zAsset-Avalanche_Pick_Type-BurstAsset-30', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32', - 'zAsset-Trashed Date-33', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-34', - 'zAddAssetAttr-zPK-35', - 'zAsset-UUID = store.cloudphotodb-36', - 'zAddAssetAttr-Original Stable Hash-iOS18-37', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-38', - 'zShare-UUID-39', - 'zShare-Originating Scope ID-40', - 'zSharePartic-z62SHARE-41', - 'zShare-Status-42', - 'zShare-Scope Type-43', - 'zShare-Asset Count-CMM-44', - 'zShare-Force Sync Attempted-CMM-45', - 'zShare-Photos Count-CMM-46', - 'zShare-Uploaded Photos Count-CMM-47', - 'zShare-Videos Count-CMM-48', - 'zShare-Uploaded Videos Count-CMM-49', - 'zShare-Scope ID-50', - 'zShare-Title-SPL-51', - 'zShare-Share URL-52', - 'zShare-Local Publish State-53', - 'zShare-Public Permission-54', - 'zShare-Cloud Local State-55', - 'zShare-Scope Syncing State-56', - 'zShare-Auto Share Policy-57', - 'zSharePartic-Acceptance Status-58', - 'zSharePartic-User ID-59', - 'zSharePartic-zPK-60', - 'zSharePartic-Email Address-61', - 'zSharePartic-Phone Number-62', - 'zSharePartic-Participant ID-63', - 'zSharePartic-UUID-64', - 'zSharePartic-Is Current User-65', - 'zSharePartic-Role-66', - 'zSharePartic-Premission-67', - 'zShare-Participant Cloud Update State-68', - 'zSharePartic-Exit State-69', - 'zShare-Preview State-70', - 'zShare-Should Notify On Upload Completion-71', - 'zShare-Should Ignore Budgets-72', - 'zShare-Exit Source-73', - 'zShare-Exit State-74', - 'zShare-Exit Type-75', - 'zShare-Trashed State-76', - 'zShare-Cloud Delete State-77', - 'zShare-Trashed Date-78', - 'zShare-LastParticipant Asset Trash Notification Date-79', - 'zShare-Last Participant Asset Trash Notification View Date-80', - 'zShare-zENT-81') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph35-iCld Shared Link Assets-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph35-iCld Shared Link Assets-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No iCloud Shared Link Assets found in PhotoData-Photos.sqlite ZSHARE table') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81])) + data_headers = (('zShare-Creation Date-0', 'datetime'), + ('zShare-Start Date-1', 'datetime'), + ('zShare-End Date-2', 'datetime'), + ('zShare-Expiry Date-3', 'datetime'), + ('zAsset-Date Created-4', 'datetime'), + 'zAsset-zPK-5', + 'zAsset-Directory-Path-6', + 'zAsset-Filename-7', + 'zAddAssetAttr- Original Filename-8', + 'zCldMast- Original Filename-9', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-10', + 'zAsset-Syndication State-11', + 'zAsset-Bundle Scope-12', + 'zAddAssetAttr-Imported by-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zAddAssetAttr- Imported by Bundle Identifier-16', + 'zAddAssetAttr- Imported By Display Name-17', + 'zAsset-Visibility State-18', + 'zAsset-Saved Asset Type-19', + 'zAddAssetAttr-Share Type-20', + 'zAsset-Active Library Scope Participation State-21', + ('zAsset- SortToken -CameraRoll-22', 'datetime'), + ('zAsset-Added Date-23', 'datetime'), + ('zCldMast-Creation Date-24', 'datetime'), + 'zAddAssetAttr-Time Zone Name-25', + 'zAddAssetAttr-EXIF-String-26', + ('zAsset-Modification Date-27', 'datetime'), + ('zAsset-Last Shared Date-28', 'datetime'), + 'zAsset-Hidden-29', + 'zAsset-Avalanche_Pick_Type-BurstAsset-30', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-31', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-32', + ('zAsset-Trashed Date-33', 'datetime'), + 'zAsset-Trashed by Participant= zShareParticipant_zPK-34', + 'zAddAssetAttr-zPK-35', + 'zAsset-UUID = store.cloudphotodb-36', + 'zAddAssetAttr-Original Stable Hash-37', + 'zAddAssetAttr.Adjusted Stable Hash-38', + 'zShare-UUID-39', + 'zShare-Originating Scope ID-40', + 'zSharePartic-z61SHARE-41', + 'zShare-Status-42', + 'zShare-Scope Type-43', + 'zShare-Asset Count-CMM-44', + 'zShare-Force Sync Attempted-CMM-45', + 'zShare-Photos Count-CMM-46', + 'zShare-Uploaded Photos Count-CMM-47', + 'zShare-Videos Count-CMM-48', + 'zShare-Uploaded Videos Count-CMM-49', + 'zShare-Scope ID-50', + 'zShare-Title-SPL-51', + 'zShare-Share URL-52', + 'zShare-Local Publish State-53', + 'zShare-Public Permission-54', + 'zShare-Cloud Local State-55', + 'zShare-Scope Syncing State-56', + 'zShare-Auto Share Policy-57', + 'zSharePartic-Acceptance Status-58', + 'zSharePartic-User ID-59', + 'zSharePartic-zPK-60', + 'zSharePartic-Email Address-61', + 'zSharePartic-Phone Number-62', + 'zSharePartic-Participant ID-63', + 'zSharePartic-UUID-64', + 'zSharePartic-Is Current User-65', + 'zSharePartic-Role-66', + 'zSharePartic-Premission-67', + 'zShare-Participant Cloud Update State-68', + 'zSharePartic-Exit State-69', + 'zShare-Preview State-70', + 'zShare-Should Notify On Upload Completion-71', + 'zShare-Should Ignore Budgets-72', + 'zShare-Exit Source-73', + 'zShare-Exit State-74', + 'zShare-Exit Type-75', + 'zShare-Trashed State-76', + 'zShare-Cloud Delete State-77', + ('zShare-Trashed Date-78', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-79', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-80', 'datetime'), + 'zShare-zENT-81') + data_list = get_sqlite_db_records(source_path, query) -__artifacts_v2__ = { - 'Ph35-iCloud Shared Link Assets-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph35 iCld Shared Link Assets', - 'description': 'Parses iCloud Shared Link records and related assets from the' - ' PhotoData-Photos.sqlite ZSHARE Table and supports iOS 14-18.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-14', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-F-Cloud_Shared_Methods', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph35icldsharedlinkassetsphdapsql' - } -} + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph3TrashedRemovedfromCamRoll.py b/scripts/artifacts/Ph3TrashedRemovedfromCamRoll.py index 54f91c5a..74202af8 100644 --- a/scripts/artifacts/Ph3TrashedRemovedfromCamRoll.py +++ b/scripts/artifacts/Ph3TrashedRemovedfromCamRoll.py @@ -1,42 +1,63 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses basic asset record data from PhotoData-Photos.sqlite for recently deleted-trashed assets -# and supports iOS 11-18. SyndPL Parser parses basic asset record data from -# Syndication.photoslibrary-database-Photos.sqlite for indicators of assets removed from the camera roll -# and supports iOS 15-18. The results for these scripts will contain one record per ZASSET table Z_PK value. -# This parser is based on research and SQLite queries written by Scott Koenig -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph3_1TrashedRecentlyDeletedPhDaPsql': { + 'name': 'Ph3.1-Trashed Recently Deleted-PhDaPsql', + 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for trashed-recently deleted' + ' assets and supports iOS 11-17. The results for this script will contain one row' + ' per ZASSET table Z_PK value.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-B-Interaction_Artifacts', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + }, + 'Ph3_2RemovedfromCameraRollSyndPL': { + 'name': 'Ph3.2-Removed from Camera Roll-SyndPL', + 'description': 'Parses basic asset row data from Syndication.photoslibrary-database-Photos.sqlite' + ' for syndication PL asserts remvoed from camera roll and supports iOS 15-17.' + ' These assets may have been displayed in the camera roll, then deleted from' + ' the camera roll view. The results for this script will contain one row per asset.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', + 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc - -def get_ph3trashedphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph3_1TrashedRecentlyDeletedPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for PhotoData-Photos.sqlite recently deleted or" - " trashed assets from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', CASE zAsset.ZTRASHEDSTATE @@ -58,57 +79,36 @@ def get_ph3trashedphdapsql(files_found, report_folder, seeker, wrap_text, timezo LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAsset.ZTRASHEDSTATE = 1 ORDER BY zAsset.ZTRASHEDSTATE - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' trashed-recently deleted assets and supports iOS 11-13.' \ - ' The results for this script will contain one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph3.1-Trashed Recently Deleted-PhDaPsq') - report.start_artifact_report(report_folder, 'Ph3.1-Trashed Recently Deleted-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Trashed Date', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted', - 'zAsset-Directory-Path', - 'zAsset-Filename', - 'zAddAssetAttr- Original Filename', - 'zCldMast- Original Filename', - 'zCldMast-Import Session ID- AirDrop-StillTesting', - 'zAsset-zPK', - 'zAddAssetAttr-zPK', - 'zAsset-UUID = store.cloudphotodb', - 'zAddAssetAttr-Master Fingerprint') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph3.1-Trashed Recently Deleted-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph3.1-Trashed Recently Deleted-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Trashed Recently Deleted Assets') - - db.close() - return + data_headers = (('zAsset-Trashed Date-0', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zCldMast-Import Session ID- AirDrop-StillTesting-6', + 'zAsset-zPK-7', + 'zAddAssetAttr-zPK-8', + 'zAsset-UUID = store.cloudphotodb-9', + 'zAddAssetAttr-Master Fingerprint-10') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', CASE zAsset.ZTRASHEDSTATE @@ -130,57 +130,36 @@ def get_ph3trashedphdapsql(files_found, report_folder, seeker, wrap_text, timezo LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAsset.ZTRASHEDSTATE = 1 ORDER BY zAsset.ZTRASHEDSTATE - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' trashed-recently deleted assets and supports iOS 14.' \ - ' The results for this script will contain one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph3.1-Trashed Recently Deleted-PhDaPsq') - report.start_artifact_report(report_folder, 'Ph3.1-Trashed Recently Deleted-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Trashed Date', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted', - 'zAsset-Directory-Path', - 'zAsset-Filename', - 'zAddAssetAttr- Original Filename', - 'zCldMast- Original Filename', - 'zCldMast-Import Session ID- AirDrop-StillTesting', - 'zAsset-zPK', - 'zAddAssetAttr-zPK', - 'zAsset-UUID = store.cloudphotodb', - 'zAddAssetAttr-Master Fingerprint') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph3.1-Trashed Recently Deleted-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph3.1-Trashed Recently Deleted-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Trashed Recently Deleted Assets') - - db.close() - return + data_headers = (('zAsset-Trashed Date-0', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zCldMast-Import Session ID- AirDrop-StillTesting-6', + 'zAsset-zPK-7', + 'zAddAssetAttr-zPK-8', + 'zAsset-UUID = store.cloudphotodb-9', + 'zAddAssetAttr-Master Fingerprint-10') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', CASE zAsset.ZTRASHEDSTATE @@ -213,59 +192,38 @@ def get_ph3trashedphdapsql(files_found, report_folder, seeker, wrap_text, timezo LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAsset.ZTRASHEDSTATE = 1 ORDER BY zAsset.ZTRASHEDSTATE - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' trashed-recently deleted assets and supports iOS 15.' \ - ' The results for this script will contain one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph3.1-Trashed Recently Deleted-PhDaPsq') - report.start_artifact_report(report_folder, 'Ph3.1-Trashed Recently Deleted-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Trashed Date', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted', - 'zAsset-Directory-Path', - 'zAsset-Filename', - 'zAddAssetAttr- Original Filename', - 'zCldMast- Original Filename', - 'zCldMast-Import Session ID- AirDrop-StillTesting', - 'zAddAssetAttr- Syndication Identifier-SWY-Files', - 'zAsset-Syndication State', - 'zAsset-zPK', - 'zAddAssetAttr-zPK', - 'zAsset-UUID = store.cloudphotodb', - 'zAddAssetAttr-Master Fingerprint') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph3.1-Trashed Recently Deleted-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph3.1-Trashed Recently Deleted-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Trashed Recently Deleted Assets') - - db.close() - return + data_headers = (('zAsset-Trashed Date-0', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zCldMast-Import Session ID- AirDrop-StillTesting-6', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', + 'zAsset-Syndication State-8', + 'zAsset-zPK-9', + 'zAddAssetAttr-zPK-10', + 'zAsset-UUID = store.cloudphotodb-11', + 'zAddAssetAttr-Master Fingerprint-12') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', CASE zAsset.ZTRASHEDSTATE @@ -305,63 +263,42 @@ def get_ph3trashedphdapsql(files_found, report_folder, seeker, wrap_text, timezo LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT WHERE zAsset.ZTRASHEDSTATE = 1 ORDER BY zAsset.ZTRASHEDSTATE - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' trashed-recently deleted assets and supports iOS 16-17.' \ - ' The results for this script will contain one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph3.1-Trashed Recently Deleted-PhDaPsq') - report.start_artifact_report(report_folder, 'Ph3.1-Trashed Recently Deleted-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Trashed Date-0', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-2', - 'SPLzSharePartic-zPK= TrashedByParticipant-3', - 'SPLzSharePartic-Email Address-4', - 'SPLzSharePartic-Phone Number-5', - 'zAsset-Directory-Path-6', - 'zAsset-Filename-7', - 'zAddAssetAttr- Original Filename-8', - 'zCldMast- Original Filename-9', - 'zCldMast-Import Session ID- AirDrop-StillTesting-10', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', - 'zAsset-Syndication State-12', - 'zAsset-zPK-13', - 'zAddAssetAttr-zPK-14', - 'zAsset-UUID = store.cloudphotodb-15', - 'zAddAssetAttr-Master Fingerprint-16') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph3.1-Trashed Recently Deleted-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph3.1-Trashed Recently Deleted-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Trashed Recently Deleted Assets') - - db.close() - return + data_headers = (('zAsset-Trashed Date-0', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-2', + 'SPLzSharePartic-zPK= TrashedByParticipant-3', + 'SPLzSharePartic-Email Address-4', + 'SPLzSharePartic-Phone Number-5', + 'zAsset-Directory-Path-6', + 'zAsset-Filename-7', + 'zAddAssetAttr- Original Filename-8', + 'zCldMast- Original Filename-9', + 'zCldMast-Import Session ID- AirDrop-StillTesting-10', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', + 'zAsset-Syndication State-12', + 'zAsset-zPK-13', + 'zAddAssetAttr-zPK-14', + 'zAsset-UUID = store.cloudphotodb-15', + 'zAddAssetAttr-Master Fingerprint-16') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', CASE zAsset.ZTRASHEDSTATE @@ -392,8 +329,8 @@ def get_ph3trashedphdapsql(files_found, report_folder, seeker, wrap_text, timezo zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK @@ -402,392 +339,267 @@ def get_ph3trashedphdapsql(files_found, report_folder, seeker, wrap_text, timezo LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT WHERE zAsset.ZTRASHEDSTATE = 1 ORDER BY zAsset.ZTRASHEDSTATE - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for' \ - ' trashed-recently deleted assets and supports iOS 18.' \ - ' The results for this script will contain one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph3.1-Trashed Recently Deleted-PhDaPsq') - report.start_artifact_report(report_folder, 'Ph3.1-Trashed Recently Deleted-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Trashed Date-0', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-2', - 'SPLzSharePartic-zPK= TrashedByParticipant-3', - 'SPLzSharePartic-Email Address-4', - 'SPLzSharePartic-Phone Number-5', - 'zAsset-Directory-Path-6', - 'zAsset-Filename-7', - 'zAddAssetAttr- Original Filename-8', - 'zCldMast- Original Filename-9', - 'zCldMast-Import Session ID- AirDrop-StillTesting-10', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', - 'zAsset-Syndication State-12', - 'zAsset-zPK-13', - 'zAddAssetAttr-zPK-14', - 'zAsset-UUID = store.cloudphotodb-15', - 'zAddAssetAttr-Original Stable Hash-iOS18-16', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-17') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph3.1-Trashed Recently Deleted-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph3.1-Trashed Recently Deleted-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Trashed Recently Deleted Assets') - - db.close() - return - - -def get_ph3removedfromcamerarollsyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): - break - - if report_folder.endswith('/') or report_folder.endswith('\\'): - report_folder = report_folder[:-1] - iosversion = scripts.artifacts.artGlobals.versionf - if version.parse(iosversion) <= version.parse("14.8.1"): - logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite" - " Syndication PL assets removed from camera roll iOS " + iosversion) - if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - CASE zAsset.ZSYNDICATIONSTATE - WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' - WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' - WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' - WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' - WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' - WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' - WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' - END AS 'zAsset-Syndication State', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', - CASE zAsset.ZTRASHEDSTATE - WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' - WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' - END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - WHERE zAsset.ZSYNDICATIONSTATE IN (8, 10) - ORDER BY zAddAssetAttr.ZLASTUPLOADATTEMPTDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + data_headers = (('zAsset-Trashed Date-0', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-2', + 'SPLzSharePartic-zPK= TrashedByParticipant-3', + 'SPLzSharePartic-Email Address-4', + 'SPLzSharePartic-Phone Number-5', + 'zAsset-Directory-Path-6', + 'zAsset-Filename-7', + 'zAddAssetAttr- Original Filename-8', + 'zCldMast- Original Filename-9', + 'zCldMast-Import Session ID- AirDrop-StillTesting-10', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', + 'zAsset-Syndication State-12', + 'zAsset-zPK-13', + 'zAddAssetAttr-zPK-14', + 'zAsset-UUID = store.cloudphotodb-15', + 'zAddAssetAttr-Original Stable Hash-16', + 'zAddAssetAttr.Adjusted Stable Hash-17') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + +@artifact_processor +def Ph3_2RemovedfromCameraRollSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) + + if source_path.endswith('.sqlite'): + break + + if report_folder.endswith('/') or report_folder.endswith('\\'): + report_folder = report_folder[:-1] + iosversion = scripts.artifacts.artGlobals.versionf + if version.parse(iosversion) <= version.parse("14.8.1"): + logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) + return (), [], source_path + if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS + 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + WHERE zAsset.ZSYNDICATIONSTATE IN (8, 10) + ORDER BY zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13])) - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite' \ - ' for syndication PL asserts remvoed from camera roll and supports iOS 15.' \ - ' These assets may have been displayed in the camera roll, then deleted from' \ - ' the camera roll view. The results for this script will contain one record per asset.' - report = ArtifactHtmlReport('Ph3.2-Removed from camera roll-SyndPL') - report.start_artifact_report(report_folder, 'Ph3.2-Removed from camera roll-SyndPL', description) - report.add_script() - data_headers = ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - 'zAsset-Syndication State', - 'zAsset-Directory-Path', - 'zAsset-Filename', - 'zAddAssetAttr- Original Filename', - 'zCldMast- Original Filename', - 'zCldMast-Import Session ID- AirDrop-StillTesting', - 'zAddAssetAttr- Syndication Identifier-SWY-Files', - 'zAsset-Trashed Date', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted', - 'zAsset-zPK', - 'zAddAssetAttr-zPK', - 'zAsset-UUID = store.cloudphotodb', - 'zAddAssetAttr-Master Fingerprint') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph3.2-Removed from camera roll-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph3.2-Removed from camera roll-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' possible deleted or removed from camera roll SyndPL assets') - - db.close() - return - - elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - CASE zAsset.ZSYNDICATIONSTATE - WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' - WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' - WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' - WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' - WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' - WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' - WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' - END AS 'zAsset-Syndication State', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', - CASE zAsset.ZTRASHEDSTATE - WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' - WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' - END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', - zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', - SPLzSharePartic.Z_PK AS 'SPLzSharePartic-zPK= TrashedByParticipant', - SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address', - SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE - LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK - LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT - WHERE zAsset.ZSYNDICATIONSTATE IN (8, 10) - ORDER BY zAddAssetAttr.ZLASTUPLOADATTEMPTDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17])) + data_headers = (('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-0', 'datetime'), + 'zAsset-Syndication State-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zCldMast-Import Session ID- AirDrop-StillTesting-6', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-9', + 'zAsset-zPK-10', + 'zAddAssetAttr-zPK-11', + 'zAsset-UUID = store.cloudphotodb-12', + 'zAddAssetAttr-Master Fingerprint-13') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite' \ - ' for syndication PL asserts removed from camera roll and supports iOS 16-17.' \ - ' These assets may have been displayed in the camera roll, then deleted from' \ - ' the camera roll view. The results for this script will contain one record per asset.' - report = ArtifactHtmlReport('Ph3.2-Removed from camera roll-SyndPL') - report.start_artifact_report(report_folder, 'Ph3.2-Removed from camera roll-SyndPL', description) - report.add_script() - data_headers = ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - 'zAsset-Syndication State', - 'zAsset-Directory-Path', - 'zAsset-Filename', - 'zAddAssetAttr- Original Filename', - 'zCldMast- Original Filename', - 'zCldMast-Import Session ID- AirDrop-StillTesting', - 'zAddAssetAttr- Syndication Identifier-SWY-Files', - 'zAsset-Trashed Date', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted', - 'zAsset-Trashed by Participant= zShareParticipant_zPK', - 'SPLzSharePartic-zPK= TrashedByParticipant', - 'SPLzSharePartic-Email Address', - 'SPLzSharePartic-Phone Number', - 'zAsset-zPK', - 'zAddAssetAttr-zPK', - 'zAsset-UUID = store.cloudphotodb', - 'zAddAssetAttr-Master Fingerprint') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph3.2-Removed from camera roll-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph3.2-Removed from camera roll-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' possible deleted or removed from camera roll SyndPL assets') - - db.close() - return - - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', - CASE zAsset.ZTRASHEDSTATE - WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' - WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' - END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', - zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', - SPLzSharePartic.Z_PK AS 'SPLzSharePartic-zPK= TrashedByParticipant', - SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address', - SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZSYNDICATIONSTATE - WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' - WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' - WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' - WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' - WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' - WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' - WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' - END AS 'zAsset-Syndication State', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE - LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK - LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT - WHERE zAsset.ZTRASHEDSTATE = 1 - ORDER BY zAsset.ZTRASHEDSTATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + query = ''' + SELECT + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS + 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + SPLzSharePartic.Z_PK AS 'SPLzSharePartic-zPK= TrashedByParticipant', + SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address', + SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE + LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK + LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT + WHERE zAsset.ZSYNDICATIONSTATE IN (8, 10) + ORDER BY zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17])) - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite' \ - ' for syndication PL asserts removed from camera roll and supports iOS 18.' \ - ' These assets may have been displayed in the camera roll, then deleted from' \ - ' the camera roll view. The results for this script will contain one record per asset.' - report = ArtifactHtmlReport('Ph3.2-Removed from camera roll-SyndPL') - report.start_artifact_report(report_folder, 'Ph3.2-Removed from camera roll-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Trashed Date-0', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1', - 'zAsset-Trashed by Participant= zShareParticipant_zPK-2', - 'SPLzSharePartic-zPK= TrashedByParticipant-3', - 'SPLzSharePartic-Email Address-4', - 'SPLzSharePartic-Phone Number-5', - 'zAsset-Directory-Path-6', - 'zAsset-Filename-7', - 'zAddAssetAttr- Original Filename-8', - 'zCldMast- Original Filename-9', - 'zCldMast-Import Session ID- AirDrop-StillTesting-10', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', - 'zAsset-Syndication State-12', - 'zAsset-zPK-13', - 'zAddAssetAttr-zPK-14', - 'zAsset-UUID = store.cloudphotodb-15', - 'zAddAssetAttr-Original Stable Hash-iOS18-16', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-17') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph3.2-Removed from camera roll-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph3.2-Removed from camera roll-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-database-Photos.sqlite' - ' possible deleted or removed from camera roll SyndPL assets') - - db.close() - return + data_headers = (('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-0', 'datetime'), + 'zAsset-Syndication State-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zCldMast-Import Session ID- AirDrop-StillTesting-6', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', + ('zAsset-Trashed Date-8', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-9', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-10', + 'SPLzSharePartic-zPK= TrashedByParticipant-11', + 'SPLzSharePartic-Email Address-12', + 'SPLzSharePartic-Phone Number-13', + 'zAsset-zPK-14', + 'zAddAssetAttr-zPK-15', + 'zAsset-UUID = store.cloudphotodb-16', + 'zAddAssetAttr-Master Fingerprint-17') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + elif version.parse(iosversion) >= version.parse("18"): + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] -__artifacts_v2__ = { - 'Ph3-1-Recently Deleted Trashed-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite 3.1 Trashed Recently Deleted', - 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for trashed-recently deleted' - ' assets and supports iOS 11-17. The results for this script will contain one record' - ' per ZASSET table Z_PK value.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-B-Interaction_Artifacts', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph3trashedphdapsql' - }, - 'Ph3-2-Removed from Camera Roll-SyndPL': { - 'name': 'SyndPL Photos.sqlite 3.2 Removed from camera roll', - 'description': 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite' - ' for syndication PL asserts remvoed from camera roll and supports iOS 15-17.' - ' These assets may have been displayed in the camera roll, then deleted from' - ' the camera roll view. The results for this script will contain one record per asset.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', - 'notes': '', - 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*', - 'function': 'get_ph3removedfromcamerarollsyndpl' - } -} + query = ''' + SELECT + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zShareParticipant_zPK', + SPLzSharePartic.Z_PK AS 'SPLzSharePartic-zPK= TrashedByParticipant', + SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address', + SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE + LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK + LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.Z_PK = zAssetContrib.ZPARTICIPANT + WHERE zAsset.ZTRASHEDSTATE = 1 + ORDER BY zAsset.ZTRASHEDSTATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17])) + + data_headers = (('zAsset-Trashed Date-0', 'datetime'), + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-1', + 'zAsset-Trashed by Participant= zShareParticipant_zPK-2', + 'SPLzSharePartic-zPK= TrashedByParticipant-3', + 'SPLzSharePartic-Email Address-4', + 'SPLzSharePartic-Phone Number-5', + 'zAsset-Directory-Path-6', + 'zAsset-Filename-7', + 'zAddAssetAttr- Original Filename-8', + 'zCldMast- Original Filename-9', + 'zCldMast-Import Session ID- AirDrop-StillTesting-10', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', + 'zAsset-Syndication State-12', + 'zAsset-zPK-13', + 'zAddAssetAttr-zPK-14', + 'zAsset-UUID = store.cloudphotodb-15', + 'zAddAssetAttr-Original Stable Hash-16', + 'zAddAssetAttr.Adjusted Stable Hash-17') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph4Hidden.py b/scripts/artifacts/Ph4Hidden.py index ecdac369..6baccea2 100644 --- a/scripts/artifacts/Ph4Hidden.py +++ b/scripts/artifacts/Ph4Hidden.py @@ -1,39 +1,48 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses basic asset record data from Photos.sqlite for hidden assets and supports iOS 11-18. -# The results for this script will contain one record per ZASSET table Z_PK value. -# This parser is based on research and SQLite queries written by Scott Koenig -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph4HiddenPhDaPsql': { + 'name': 'Ph4-Hidden-PhDaPsql', + 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for hidden assets' + ' and supports iOS 11-18. The results for this script will contain' + ' one row per ZASSET table Z_PK value.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-B-Interaction_Artifacts', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly - +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc -def get_ph4hiddenphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph4HiddenPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for PhotoData-Photos.sqlite hidden assets from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], None + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', CASE zAsset.ZHIDDEN @@ -55,57 +64,36 @@ def get_ph4hiddenphdapsql(files_found, report_folder, seeker, wrap_text, timezon LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAsset.ZHIDDEN = 1 ORDER BY zAsset.ZMODIFICATIONDATE - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for hidden assets' \ - ' and supports iOS 11-13. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph4-Hidden-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph4-Hidden-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Modification Date', - 'zAsset-Hidden', - 'zAsset-Directory-Path', - 'zAsset-Filename', - 'zAddAssetAttr- Original Filename', - 'zCldMast- Original Filename', - 'zCldMast-Import Session ID- AirDrop-StillTesting', - 'zAsset-zPK', - 'zAddAssetAttr-zPK', - 'zAsset-UUID = store.cloudphotodb', - 'zAddAssetAttr-Master Fingerprint') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph4-Hidden-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph4-Hidden-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Hidden Assets') - - db.close() - return + data_headers = (('zAsset-Modification Date-0', 'datetime'), + 'zAsset-Hidden-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zCldMast-Import Session ID- AirDrop-StillTesting-6', + 'zAsset-zPK-7', + 'zAddAssetAttr-zPK-8', + 'zAsset-UUID = store.cloudphotodb-9', + 'zAddAssetAttr-Master Fingerprint-10') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], None + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', CASE zAsset.ZHIDDEN @@ -127,57 +115,36 @@ def get_ph4hiddenphdapsql(files_found, report_folder, seeker, wrap_text, timezon LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAsset.ZHIDDEN = 1 ORDER BY zAsset.ZMODIFICATIONDATE - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for hidden assets' \ - ' and supports iOS 14. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph4-Hidden-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph4-Hidden-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Modification Date', - 'zAsset-Hidden', - 'zAsset-Directory-Path', - 'zAsset-Filename', - 'zAddAssetAttr- Original Filename', - 'zCldMast- Original Filename', - 'zCldMast-Import Session ID- AirDrop-StillTesting', - 'zAsset-zPK', - 'zAddAssetAttr-zPK', - 'zAsset-UUID = store.cloudphotodb', - 'zAddAssetAttr-Master Fingerprint') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph4-Hidden-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph4-Hidden-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Hidden Assets') - - db.close() - return + data_headers = (('zAsset-Modification Date-0', 'datetime'), + 'zAsset-Hidden-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zCldMast-Import Session ID- AirDrop-StillTesting-6', + 'zAsset-zPK-7', + 'zAddAssetAttr-zPK-8', + 'zAsset-UUID = store.cloudphotodb-9', + 'zAddAssetAttr-Master Fingerprint-10') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], None + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', CASE zAsset.ZHIDDEN @@ -200,58 +167,37 @@ def get_ph4hiddenphdapsql(files_found, report_folder, seeker, wrap_text, timezon LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAsset.ZHIDDEN = 1 ORDER BY zAsset.ZMODIFICATIONDATE - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11])) - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for hidden assets' \ - ' and supports iOS 15-17. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph4-Hidden-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph4-Hidden-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Modification Date-0', - 'zAsset-Hidden-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zCldMast-Import Session ID- AirDrop-StillTesting-6', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', - 'zAsset-zPK-8', - 'zAddAssetAttr-zPK-9', - 'zAsset-UUID = store.cloudphotodb-10', - 'zAddAssetAttr-Master Fingerprint-11') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph4-Hidden-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph4-Hidden-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Hidden Assets') - - db.close() - return + data_headers = (('zAsset-Modification Date-0', 'datetime'), + 'zAsset-Hidden-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zCldMast-Import Session ID- AirDrop-StillTesting-6', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', + 'zAsset-zPK-8', + 'zAddAssetAttr-zPK-9', + 'zAsset-UUID = store.cloudphotodb-10', + 'zAddAssetAttr-Master Fingerprint-11') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], None + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', CASE zAsset.ZHIDDEN @@ -268,74 +214,33 @@ def get_ph4hiddenphdapsql(files_found, report_folder, seeker, wrap_text, timezon zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAsset.ZHIDDEN = 1 ORDER BY zAsset.ZMODIFICATIONDATE - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for hidden assets' \ - ' and supports iOS 18. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph4-Hidden-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph4-Hidden-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Modification Date-0', - 'zAsset-Hidden-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zCldMast-Import Session ID- AirDrop-StillTesting-6', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', - 'zAsset-zPK-8', - 'zAddAssetAttr-zPK-9', - 'zAsset-UUID = store.cloudphotodb-10', - 'zAddAssetAttr-Original Stable Hash-iOS18-11', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-12') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph4-Hidden-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph4-Hidden-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Hidden Assets') - - db.close() - return - - -__artifacts_v2__ = { - 'Ph4-Hidden-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite 4 Hidden Assets', - 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for hidden assets' - ' and supports iOS 11-18. The results for this script will contain' - ' one record per ZASSET table Z_PK value.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-B-Interaction_Artifacts', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph4hiddenphdapsql' - } -} + + data_headers = (('zAsset-Modification Date-0', 'datetime'), + 'zAsset-Hidden-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zCldMast-Import Session ID- AirDrop-StillTesting-6', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', + 'zAsset-zPK-8', + 'zAddAssetAttr-zPK-9', + 'zAsset-UUID = store.cloudphotodb-10', + 'zAddAssetAttr-Original Stable Hash-11', + 'zAddAssetAttr.Adjusted Stable Hash-12') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph50AssetIntResouData.py b/scripts/artifacts/Ph50AssetIntResouData.py index 1a90a347..2e602f06 100644 --- a/scripts/artifacts/Ph50AssetIntResouData.py +++ b/scripts/artifacts/Ph50AssetIntResouData.py @@ -1,42 +1,70 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses iOS 14-18 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE and other tables. -# This and other related parsers should provide data for investigative analysis of assets being stored locally -# on the device verses assets being stored in iCloud Photos as the result of optimization. -# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools -# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results. -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph50_1AssetIntResouPhDaPsql': { + 'name': 'Ph50.1-Asset_IntResou-PhDaPsql', + 'description': 'Parses iOS 14-18 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE and' + ' other tables. This and other related parsers should provide data for investigative' + ' analysis of assets being stored locally on the device verses assets being stored in' + ' iCloud Photos as the result of optimization. This is very large query and script,' + ' I recommend opening the TSV generated report with Zimmermans Tools' + ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' + ' and filter the results.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-I-Asset_IntResou-Optimization', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + }, + 'Ph50_2AssetIntResouSyndPL': { + 'name': 'Ph50.2-Asset_IntResou-SyndPL', + 'description': 'Parses iOS 14-18 asset records from Syndication.photos.library-database-Photos.sqlite' + ' ZINTERNALRESOURCE and and other tables. This and other related parsers should' + ' provide data for investigative analysis of assets being stored locally on the' + ' device verses assets being stored in iCloud Photos as the result of optimization.' + ' This is very large query and script, I recommend opening the TSV generated report' + ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer' + ' to view, search, and filter the results.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', + 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly - +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc -def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +@artifact_processor +def Ph50_1AssetIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("13.7"): - logfunc("Unsupported version for PhotoData-Photos.sqlite ZINTERNALRESOURCE table data from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite from iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -754,316 +782,291 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK ORDER BY zAsset.ZDATECREATED - """) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238])) - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238])) + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + 'zAsset-zPK-7', + 'zAddAssetAttr-zPK-8', + 'zAsset-UUID = store.cloudphotodb-9', + 'zAddAssetAttr-Master Fingerprint-10', + 'zIntResou-Fingerprint-11', + 'zIntResou-Local Availability-4QueryStart-1', + 'zIntResou-Remote Availability-4QueryStart-2', + 'zIntResou-Resource Type-4QueryStart-3', + 'zIntResou-Datastore Sub-Type-4QueryStart-4', + 'zIntResou-Recipe ID-4QueryStart-5', + 'zAsset Complete-6', + 'zAsset-Cloud is My Asset-12', + 'zAsset-Cloud is deletable-Asset-13', + 'zAsset-Cloud_Local_State-14', + 'zAsset-Visibility State-15', + 'zExtAttr-Camera Make-16', + 'zExtAttr-Camera Model-17', + 'zExtAttr-Lens Model-18', + 'zExtAttr-Flash Fired-19', + 'zExtAttr-Focal Lenght-20', + 'zAsset-Derived Camera Capture Device-21', + 'zAddAssetAttr-Camera Captured Device-22', + 'zAddAssetAttr-Imported by-23', + 'zCldMast-Imported By-24', + 'zAddAssetAttr-Creator Bundle ID-25', + 'zAddAssetAttr-Imported By Display Name-26', + 'zCldMast-Imported by Bundle ID-27', + 'zCldMast-Imported by Display Name-28', + 'zAsset-Saved Asset Type-29', + 'zAsset-Directory-Path-30', + 'zAsset-Filename-31', + 'zAddAssetAttr- Original Filename-32', + 'zCldMast- Original Filename-33', + ('zAsset-Added Date-34', 'datetime'), + ('zAsset- SortToken -CameraRoll-35', 'datetime'), + ('zAsset-Date Created-36', 'datetime'), + ('zCldMast-Creation Date-37', 'datetime'), + ('zIntResou-CldMst Date Created-38', 'datetime'), + 'zAddAssetAttr-Time Zone Name-39', + 'zAddAssetAttr-Time Zone Offset-40', + 'zAddAssetAttr-Inferred Time Zone Offset-41', + 'zAddAssetAttr-EXIF-String-42', + ('zAsset-Modification Date-43', 'datetime'), + ('zAsset-Last Shared Date-44', 'datetime'), + 'zCldMast-Cloud Local State-45', + ('zCldMast-Import Date-46', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', 'datetime'), + 'zAddAssetAttr-Import Session ID-48', + ('zAddAssetAttr-Alt Import Image Date-49', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-50', + ('zAsset-Cloud Batch Publish Date-51', 'datetime'), + ('zAsset-Cloud Server Publish Date-52', 'datetime'), + 'zAsset-Cloud Download Requests-53', + 'zAsset-Cloud Batch ID-54', + 'zAddAssetAttr-Upload Attempts-55', + 'zAsset-Latitude-56', + 'zExtAttr-Latitude-57', + 'zAsset-Longitude-58', + 'zExtAttr-Longitude-59', + 'zAddAssetAttr-GPS Horizontal Accuracy-60', + 'zAddAssetAttr-Location Hash-61', + 'zAddAssetAttr-Shifted Location Valid-62', + 'zAddAssetAttr-Shifted Location Data-63', + 'zAddAssetAttr-Reverse Location Is Valid-64', + 'zAddAssetAttr-Reverse Location Data-65', + 'AAAzCldMastMedData-zOPT-66', + 'zAddAssetAttr-Media Metadata Type-67', + 'AAAzCldMastMedData-Data-68', + 'CldMasterzCldMastMedData-zOPT-69', + 'zCldMast-Media Metadata Type-70', + 'CMzCldMastMedData-Data-71', + 'zAsset-Orientation-72', + 'zAddAssetAttr-Original Orientation-73', + 'zAsset-Kind-74', + 'zAsset-Kind-Sub-Type-75', + 'zAddAssetAttr-Cloud Kind Sub Type-76', + 'zAsset-Playback Style-77', + 'zAsset-Playback Variation-78', + 'zAsset-Video Duration-79', + 'zExtAttr-Duration-80', + 'zAsset-Video CP Duration-81', + 'zAddAssetAttr-Video CP Duration Time Scale-82', + 'zAsset-Video CP Visibility State-83', + 'zAddAssetAttr-Video CP Display Value-84', + 'zAddAssetAttr-Video CP Display Time Scale-85', + 'zIntResou-Datastore Class ID-86', + 'zAsset-Cloud Placeholder Kind-87', + 'zIntResou-Local Availability-88', + 'zIntResou-Local Availability Target-89', + 'zIntResou-Cloud Local State-90', + 'zIntResou-Remote Availability-91', + 'zIntResou-Remote Availability Target-92', + 'zIntResou-Transient Cloud Master-93', + 'zIntResou-Side Car Index-94', + 'zIntResou- File ID-95', + 'zIntResou-Version-96', + 'zAddAssetAttr- Original-File-Size-97', + 'zIntResou-Resource Type-98', + 'zIntResou-Datastore Sub-Type-99', + 'zIntResou-Cloud Source Type-100', + 'zIntResou-Data Length-101', + 'zIntResou-Recipe ID-102', + ('zIntResou-Cloud Last Prefetch Date-103', 'datetime'), + 'zIntResou-Cloud Prefetch Count-104', + ('zIntResou- Cloud-Last-OnDemand Download-Date-105', 'datetime'), + 'zAsset-Uniform Type ID-106', + 'zAsset-Original Color Space-107', + 'zCldMast-Uniform_Type_ID-108', + 'zCldMast-Full Size JPEG Source-109', + 'zAsset-HDR Gain-110', + 'zExtAttr-Codec-111', + 'zCldMast-Codec Name-112', + 'zCldMast-Video Frame Rate-113', + 'zCldMast-Placeholder State-114', + 'zAsset-Depth_Type-115', + 'zAsset-Avalanche UUID-116', + 'zAsset-Avalanche_Pick_Type-BurstAsset-117', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-118', + 'zAddAssetAttr-Cloud Recovery State-119', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-120', + 'zAsset-Deferred Processing Needed-121', + 'zAddAssetAttr-Deferred Photo Identifier-122', + 'zAddAssetAttr-Deferred Processing Candidate Options-123', + 'zAsset-Has Adjustments-Camera-Effects-Filters-124', + ('zAsset-Adjustment Timestamp-125', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-126', + 'zAddAssetAttr-Montage-127', + 'zAsset-Favorite-128', + 'zAsset-Hidden-129', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-130', + ('zAsset-Trashed Date-131', 'datetime'), + 'zIntResou-Trash State-132', + ('zIntResou-Trashed Date-133', 'datetime'), + 'zAsset-Cloud Delete State-134', + 'zIntResou-Cloud Delete State-135', + 'zAddAssetAttr-PTP Trashed State-136', + 'zIntResou-PTP Trashed State-137', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-138', + ('zMedAnlyAstAttr-Media Analysis Timestamp-139', 'datetime'), + ('zAsset-Analysis State Modificaion Date-140', 'datetime'), + 'zAddAssetAttr- Pending View Count-141', + 'zAddAssetAttr- View Count-142', + 'zAddAssetAttr- Pending Play Count-143', + 'zAddAssetAttr- Play Count-144', + 'zAddAssetAttr- Pending Share Count-145', + 'zAddAssetAttr- Share Count-146', + 'zAddAssetAttr-Allowed for Analysis-147', + 'zAddAssetAttr-Scene Analysis Version-148', + ('zAddAssetAttr-Scene Analysis Timestamp-149', 'datetime'), + 'zAddAssetAttr-Destination Asset Copy State-150', + 'zAddAssetAttr-Variation Suggestions States-151', + 'zAsset-High Frame Rate State-152', + 'zAsset-Video Key Frame Time Scale-153', + 'zAsset-Video Key Frame Value-154', + 'zExtAttr-ISO-155', + 'zExtAttr-Metering Mode-156', + 'zExtAttr-Sample Rate-157', + 'zExtAttr-Track Format-158', + 'zExtAttr-White Balance-159', + 'zExtAttr-Aperture-160', + 'zExtAttr-BitRate-161', + 'zExtAttr-Exposure Bias-162', + 'zExtAttr-Frames Per Second-163', + 'zExtAttr-Shutter Speed-164', + 'zAsset-Height-165', + 'zAddAssetAttr-Original Height-166', + 'zIntResou-Unoriented Height-167', + 'zAsset-Width-168', + 'zAddAssetAttr-Original Width-169', + 'zIntResou-Unoriented Width-170', + 'zAsset-Thumbnail Index-171', + 'zAddAssetAttr-Embedded Thumbnail Height-172', + 'zAddAssetAttr-Embedded Thumbnail Length-173', + 'zAddAssetAttr-Embedded Thumbnail Offset-174', + 'zAddAssetAttr-Embedded Thumbnail Width-175', + 'zAsset-Packed Acceptable Crop Rect-176', + 'zAsset-Packed Badge Attributes-177', + 'zAsset-Packed Preferred Crop Rect-178', + 'zAsset-Curation Score-179', + 'zAsset-Camera Processing Adjustment State-180', + 'zAsset-Depth Type-181', + 'zAddAssetAttr-Orig Resource Choice-182', + 'zAddAssetAttr-Spatial Over Capture Group ID-183', + 'zAddAssetAttr-Place Annotation Data-184', + 'zAddAssetAttr-Distance Identity-HEX-185', + 'zAddAssetAttr-Edited IPTC Attributes-186', + 'zAddAssetAttr-Title-Comments via Cloud Website-187', + 'zAddAssetAttr-Accessibility Description-188', + 'zAddAssetAttr-Photo Stream Tag ID-189', + 'zAddAssetAttr-Share Type-190', + 'zAsset-Overall Aesthetic Score-191', + 'zAsset-zENT-192', + 'zAsset-zOPT-193', + 'zAsset-Master= zCldMast-zPK-194', + 'zAsset-Extended Attributes= zExtAttr-zPK-195', + 'zAsset-Import Session Key-196', + 'zAsset-FOK-Cloud Feed Asset Entry Key-197', + 'zAsset-Computed Attributes Asset Key-198', + 'zAsset-Promotion Score-199', + 'zAsset-Media Analysis Attributes Key-200', + 'zAsset-Media Group UUID-201', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-202', + 'zAsset.Cloud Collection GUID-203', + 'zAddAssetAttr-zENT-204', + 'ZAddAssetAttr-zOPT-205', + 'zAddAssetAttr-zAsset= zAsset_zPK-206', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-207', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-208', + 'zAddAssetAttr-Public Global UUID-209', + 'zAddAssetAttr-Original Assets UUID-210', + 'zAddAssetAttr-Originating Asset Identifier-211', + 'zAddAssetAttr.Adjusted Fingerprint-212', + 'zCldMast-zPK= zAsset-Master-213', + 'zCldMast-zENT-214', + 'zCldMast-zOPT-215', + 'zCldMast-Moment Share Key= zShare-zPK-216', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-217', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-218', + 'zCldMast-Originating Asset ID-219', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-220', + 'CMzCldMastMedData-zENT-221', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-222', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-223', + 'AAAzCldMastMedData-zENT-224', + 'AAAzCldMastMedData-CldMast key-225', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-226', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-227', + 'zExtAttr-zENT-228', + 'zExtAttr-zOPT-229', + 'zExtAttr-Asset Key-230', + 'zIntResou-zPK-231', + 'zIntResou-zENT-232', + 'zIntResou-zOPT-233', + 'zIntResou-Asset= zAsset_zPK-234', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-235', + 'zMedAnlyAstAttr-zEnt-236', + 'zMedAnlyAstAttr-zOpt-237', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-238') + data_list = get_sqlite_db_records(source_path, query) - counter += 1 - - description = 'Parses iOS 14 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE and' \ - ' other tables. This and other related parsers should provide data for investigative' \ - ' analysis of assets being stored locally on the device verses assets being stored in' \ - ' iCloud Photos as the result of optimization. This is very large query and script I' \ - ' recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' - report = ArtifactHtmlReport('Ph50.1-Asset_IntResou-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph50.1-Asset_IntResou-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-4QueryStart-0', - 'zAsset-zPK-7', - 'zAddAssetAttr-zPK-8', - 'zAsset-UUID = store.cloudphotodb-9', - 'zAddAssetAttr-Master Fingerprint-10', - 'zIntResou-Fingerprint-11', - 'zIntResou-Local Availability-4QueryStart-1', - 'zIntResou-Remote Availability-4QueryStart-2', - 'zIntResou-Resource Type-4QueryStart-3', - 'zIntResou-Datastore Sub-Type-4QueryStart-4', - 'zIntResou-Recipe ID-4QueryStart-5', - 'zAsset Complete-6', - 'zAsset-Cloud is My Asset-12', - 'zAsset-Cloud is deletable-Asset-13', - 'zAsset-Cloud_Local_State-14', - 'zAsset-Visibility State-15', - 'zExtAttr-Camera Make-16', - 'zExtAttr-Camera Model-17', - 'zExtAttr-Lens Model-18', - 'zExtAttr-Flash Fired-19', - 'zExtAttr-Focal Lenght-20', - 'zAsset-Derived Camera Capture Device-21', - 'zAddAssetAttr-Camera Captured Device-22', - 'zAddAssetAttr-Imported by-23', - 'zCldMast-Imported By-24', - 'zAddAssetAttr-Creator Bundle ID-25', - 'zAddAssetAttr-Imported By Display Name-26', - 'zCldMast-Imported by Bundle ID-27', - 'zCldMast-Imported by Display Name-28', - 'zAsset-Saved Asset Type-29', - 'zAsset-Directory-Path-30', - 'zAsset-Filename-31', - 'zAddAssetAttr- Original Filename-32', - 'zCldMast- Original Filename-33', - 'zAsset-Added Date-34', - 'zAsset- SortToken -CameraRoll-35', - 'zAsset-Date Created-36', - 'zCldMast-Creation Date-37', - 'zIntResou-CldMst Date Created-38', - 'zAddAssetAttr-Time Zone Name-39', - 'zAddAssetAttr-Time Zone Offset-40', - 'zAddAssetAttr-Inferred Time Zone Offset-41', - 'zAddAssetAttr-EXIF-String-42', - 'zAsset-Modification Date-43', - 'zAsset-Last Shared Date-44', - 'zCldMast-Cloud Local State-45', - 'zCldMast-Import Date-46', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', - 'zAddAssetAttr-Import Session ID-48', - 'zAddAssetAttr-Alt Import Image Date-49', - 'zCldMast-Import Session ID- AirDrop-StillTesting-50', - 'zAsset-Cloud Batch Publish Date-51', - 'zAsset-Cloud Server Publish Date-52', - 'zAsset-Cloud Download Requests-53', - 'zAsset-Cloud Batch ID-54', - 'zAddAssetAttr-Upload Attempts-55', - 'zAsset-Latitude-56', - 'zExtAttr-Latitude-57', - 'zAsset-Longitude-58', - 'zExtAttr-Longitude-59', - 'zAddAssetAttr-GPS Horizontal Accuracy-60', - 'zAddAssetAttr-Location Hash-61', - 'zAddAssetAttr-Shifted Location Valid-62', - 'zAddAssetAttr-Shifted Location Data-63', - 'zAddAssetAttr-Reverse Location Is Valid-64', - 'zAddAssetAttr-Reverse Location Data-65', - 'AAAzCldMastMedData-zOPT-66', - 'zAddAssetAttr-Media Metadata Type-67', - 'AAAzCldMastMedData-Data-68', - 'CldMasterzCldMastMedData-zOPT-69', - 'zCldMast-Media Metadata Type-70', - 'CMzCldMastMedData-Data-71', - 'zAsset-Orientation-72', - 'zAddAssetAttr-Original Orientation-73', - 'zAsset-Kind-74', - 'zAsset-Kind-Sub-Type-75', - 'zAddAssetAttr-Cloud Kind Sub Type-76', - 'zAsset-Playback Style-77', - 'zAsset-Playback Variation-78', - 'zAsset-Video Duration-79', - 'zExtAttr-Duration-80', - 'zAsset-Video CP Duration-81', - 'zAddAssetAttr-Video CP Duration Time Scale-82', - 'zAsset-Video CP Visibility State-83', - 'zAddAssetAttr-Video CP Display Value-84', - 'zAddAssetAttr-Video CP Display Time Scale-85', - 'zIntResou-Datastore Class ID-86', - 'zAsset-Cloud Placeholder Kind-87', - 'zIntResou-Local Availability-88', - 'zIntResou-Local Availability Target-89', - 'zIntResou-Cloud Local State-90', - 'zIntResou-Remote Availability-91', - 'zIntResou-Remote Availability Target-92', - 'zIntResou-Transient Cloud Master-93', - 'zIntResou-Side Car Index-94', - 'zIntResou- File ID-95', - 'zIntResou-Version-96', - 'zAddAssetAttr- Original-File-Size-97', - 'zIntResou-Resource Type-98', - 'zIntResou-Datastore Sub-Type-99', - 'zIntResou-Cloud Source Type-100', - 'zIntResou-Data Length-101', - 'zIntResou-Recipe ID-102', - 'zIntResou-Cloud Last Prefetch Date-103', - 'zIntResou-Cloud Prefetch Count-104', - 'zIntResou- Cloud-Last-OnDemand Download-Date-105', - 'zAsset-Uniform Type ID-106', - 'zAsset-Original Color Space-107', - 'zCldMast-Uniform_Type_ID-108', - 'zCldMast-Full Size JPEG Source-109', - 'zAsset-HDR Gain-110', - 'zExtAttr-Codec-111', - 'zCldMast-Codec Name-112', - 'zCldMast-Video Frame Rate-113', - 'zCldMast-Placeholder State-114', - 'zAsset-Depth_Type-115', - 'zAsset-Avalanche UUID-116', - 'zAsset-Avalanche_Pick_Type-BurstAsset-117', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-118', - 'zAddAssetAttr-Cloud Recovery State-119', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-120', - 'zAsset-Deferred Processing Needed-121', - 'zAddAssetAttr-Deferred Photo Identifier-122', - 'zAddAssetAttr-Deferred Processing Candidate Options-123', - 'zAsset-Has Adjustments-Camera-Effects-Filters-124', - 'zAsset-Adjustment Timestamp-125', - 'zAddAssetAttr-Editor Bundle ID-126', - 'zAddAssetAttr-Montage-127', - 'zAsset-Favorite-128', - 'zAsset-Hidden-129', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-130', - 'zAsset-Trashed Date-131', - 'zIntResou-Trash State-132', - 'zIntResou-Trashed Date-133', - 'zAsset-Cloud Delete State-134', - 'zIntResou-Cloud Delete State-135', - 'zAddAssetAttr-PTP Trashed State-136', - 'zIntResou-PTP Trashed State-137', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-138', - 'zMedAnlyAstAttr-Media Analysis Timestamp-139', - 'zAsset-Analysis State Modificaion Date-140', - 'zAddAssetAttr- Pending View Count-141', - 'zAddAssetAttr- View Count-142', - 'zAddAssetAttr- Pending Play Count-143', - 'zAddAssetAttr- Play Count-144', - 'zAddAssetAttr- Pending Share Count-145', - 'zAddAssetAttr- Share Count-146', - 'zAddAssetAttr-Allowed for Analysis-147', - 'zAddAssetAttr-Scene Analysis Version-148', - 'zAddAssetAttr-Scene Analysis Timestamp-149', - 'zAddAssetAttr-Destination Asset Copy State-150', - 'zAddAssetAttr-Variation Suggestions States-151', - 'zAsset-High Frame Rate State-152', - 'zAsset-Video Key Frame Time Scale-153', - 'zAsset-Video Key Frame Value-154', - 'zExtAttr-ISO-155', - 'zExtAttr-Metering Mode-156', - 'zExtAttr-Sample Rate-157', - 'zExtAttr-Track Format-158', - 'zExtAttr-White Balance-159', - 'zExtAttr-Aperture-160', - 'zExtAttr-BitRate-161', - 'zExtAttr-Exposure Bias-162', - 'zExtAttr-Frames Per Second-163', - 'zExtAttr-Shutter Speed-164', - 'zAsset-Height-165', - 'zAddAssetAttr-Original Height-166', - 'zIntResou-Unoriented Height-167', - 'zAsset-Width-168', - 'zAddAssetAttr-Original Width-169', - 'zIntResou-Unoriented Width-170', - 'zAsset-Thumbnail Index-171', - 'zAddAssetAttr-Embedded Thumbnail Height-172', - 'zAddAssetAttr-Embedded Thumbnail Length-173', - 'zAddAssetAttr-Embedded Thumbnail Offset-174', - 'zAddAssetAttr-Embedded Thumbnail Width-175', - 'zAsset-Packed Acceptable Crop Rect-176', - 'zAsset-Packed Badge Attributes-177', - 'zAsset-Packed Preferred Crop Rect-178', - 'zAsset-Curation Score-179', - 'zAsset-Camera Processing Adjustment State-180', - 'zAsset-Depth Type-181', - 'zAddAssetAttr-Orig Resource Choice-182', - 'zAddAssetAttr-Spatial Over Capture Group ID-183', - 'zAddAssetAttr-Place Annotation Data-184', - 'zAddAssetAttr-Distance Identity-HEX-185', - 'zAddAssetAttr-Edited IPTC Attributes-186', - 'zAddAssetAttr-Title-Comments via Cloud Website-187', - 'zAddAssetAttr-Accessibility Description-188', - 'zAddAssetAttr-Photo Stream Tag ID-189', - 'zAddAssetAttr-Share Type-190', - 'zAsset-Overall Aesthetic Score-191', - 'zAsset-zENT-192', - 'zAsset-zOPT-193', - 'zAsset-Master= zCldMast-zPK-194', - 'zAsset-Extended Attributes= zExtAttr-zPK-195', - 'zAsset-Import Session Key-196', - 'zAsset-FOK-Cloud Feed Asset Entry Key-197', - 'zAsset-Computed Attributes Asset Key-198', - 'zAsset-Promotion Score-199', - 'zAsset-Media Analysis Attributes Key-200', - 'zAsset-Media Group UUID-201', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-202', - 'zAsset.Cloud Collection GUID-203', - 'zAddAssetAttr-zENT-204', - 'ZAddAssetAttr-zOPT-205', - 'zAddAssetAttr-zAsset= zAsset_zPK-206', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-207', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-208', - 'zAddAssetAttr-Public Global UUID-209', - 'zAddAssetAttr-Original Assets UUID-210', - 'zAddAssetAttr-Originating Asset Identifier-211', - 'zAddAssetAttr.Adjusted Fingerprint-212', - 'zCldMast-zPK= zAsset-Master-213', - 'zCldMast-zENT-214', - 'zCldMast-zOPT-215', - 'zCldMast-Moment Share Key= zShare-zPK-216', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-217', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-218', - 'zCldMast-Originating Asset ID-219', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-220', - 'CMzCldMastMedData-zENT-221', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-222', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-223', - 'AAAzCldMastMedData-zENT-224', - 'AAAzCldMastMedData-CldMast key-225', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-226', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-227', - 'zExtAttr-zENT-228', - 'zExtAttr-zOPT-229', - 'zExtAttr-Asset Key-230', - 'zIntResou-zPK-231', - 'zIntResou-zENT-232', - 'zIntResou-zOPT-233', - 'zIntResou-Asset= zAsset_zPK-234', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-235', - 'zMedAnlyAstAttr-zEnt-236', - 'zMedAnlyAstAttr-zOpt-237', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-238') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph50.1-Asset_IntResou-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph50.1-Asset_IntResou-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No Internal Resource data available for iOS 14 PhotoData-Photos.sqlite') - - db.close() - return + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -1863,342 +1866,318 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262])) - - counter += 1 - - description = 'Parses iOS 15 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE and' \ - ' other tables. This and other related parsers should provide data for investigative' \ - ' analysis of assets being stored locally on the device verses assets being stored in' \ - ' iCloud Photos as the result of optimization. This is very large query and script,' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search, and filter the results.' - report = ArtifactHtmlReport('Ph50.1-Asset_IntResou-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph50.1-Asset_IntResou-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-4QueryStart-0', - 'zAsset-zPK-7', - 'zAddAssetAttr-zPK-8', - 'zAsset-UUID = store.cloudphotodb-9', - 'zAddAssetAttr-Master Fingerprint-10', - 'zIntResou-Fingerprint-11', - 'zIntResou-Local Availability-4QueryStart-1', - 'zIntResou-Remote Availability-4QueryStart-2', - 'zIntResou-Resource Type-4QueryStart-3', - 'zIntResou-Datastore Sub-Type-4QueryStart-4', - 'zIntResou-Recipe ID-4QueryStart-5', - 'zAsset Complete-6', - 'zAsset-Bundle Scope-12', - 'zAsset-Syndication State-13', - 'zAsset-Cloud is My Asset-14', - 'zAsset-Cloud is deletable-Asset-15', - 'zAsset-Cloud_Local_State-16', - 'zAsset-Visibility State-17', - 'zExtAttr-Camera Make-18', - 'zExtAttr-Camera Model-19', - 'zExtAttr-Lens Model-20', - 'zExtAttr-Flash Fired-21', - 'zExtAttr-Focal Lenght-22', - 'zExtAttr-Focal Lenth in 35MM-23', - 'zExtAttr-Digital Zoom Ratio-24', - 'zAsset-Derived Camera Capture Device-25', - 'zAddAssetAttr-Camera Captured Device-26', - 'zAddAssetAttr-Imported by-27', - 'zCldMast-Imported By-28', - 'zAddAssetAttr.Imported by Bundle Identifier-29', - 'zAddAssetAttr-Imported By Display Name-30', - 'zCldMast-Imported by Bundle ID-31', - 'zCldMast-Imported by Display Name-32', - 'zAsset-Saved Asset Type-33', - 'zAsset-Directory-Path-34', - 'zAsset-Filename-35', - 'zAddAssetAttr- Original Filename-36', - 'zCldMast- Original Filename-37', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-38', - 'zAsset-Added Date-39', - 'zAsset- SortToken -CameraRoll-40', - 'zAddAssetAttr-Date Created Source-41', - 'zAsset-Date Created-42', - 'zCldMast-Creation Date-43', - 'zIntResou-CldMst Date Created-44', - 'zAddAssetAttr-Time Zone Name-45', - 'zAddAssetAttr-Time Zone Offset-46', - 'zAddAssetAttr-Inferred Time Zone Offset-47', - 'zAddAssetAttr-EXIF-String-48', - 'zAsset-Modification Date-49', - 'zAsset-Last Shared Date-50', - 'zCldMast-Cloud Local State-51', - 'zCldMast-Import Date-52', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-53', - 'zAddAssetAttr-Import Session ID-54', - 'zAddAssetAttr-Alt Import Image Date-55', - 'zCldMast-Import Session ID- AirDrop-StillTesting-56', - 'zAsset-Cloud Batch Publish Date-57', - 'zAsset-Cloud Server Publish Date-58', - 'zAsset-Cloud Download Requests-59', - 'zAsset-Cloud Batch ID-60', - 'zAddAssetAttr-Upload Attempts-61', - 'zAsset-Latitude-62', - 'zExtAttr-Latitude-63', - 'zAsset-Longitude-64', - 'zExtAttr-Longitude-65', - 'zAddAssetAttr-GPS Horizontal Accuracy-66', - 'zAddAssetAttr-Location Hash-67', - 'zAddAssetAttr-Shifted Location Valid-68', - 'zAddAssetAttr-Shifted Location Data-69', - 'zAddAssetAttr-Reverse Location Is Valid-70', - 'zAddAssetAttr-Reverse Location Data-71', - 'AAAzCldMastMedData-zOPT-72', - 'zAddAssetAttr-Media Metadata Type-73', - 'AAAzCldMastMedData-Data-74', - 'CldMasterzCldMastMedData-zOPT-75', - 'zCldMast-Media Metadata Type-76', - 'CMzCldMastMedData-Data-77', - 'zAddAssetAttr-Syndication History-78', - 'zMedAnlyAstAttr-Syndication Processing Version-79', - 'zMedAnlyAstAttr-Syndication Processing Value-80', - 'zAsset-Orientation-81', - 'zAddAssetAttr-Original Orientation-82', - 'zAsset-Kind-83', - 'zAsset-Kind-Sub-Type-84', - 'zAddAssetAttr-Cloud Kind Sub Type-85', - 'zAsset-Playback Style-86', - 'zAsset-Playback Variation-87', - 'zAsset-Video Duration-88', - 'zExtAttr-Duration-89', - 'zAsset-Video CP Duration-90', - 'zAddAssetAttr-Video CP Duration Time Scale-91', - 'zAsset-Video CP Visibility State-92', - 'zAddAssetAttr-Video CP Display Value-93', - 'zAddAssetAttr-Video CP Display Time Scale-94', - 'zIntResou-Datastore Class ID-95', - 'zAsset-Cloud Placeholder Kind-96', - 'zIntResou-Local Availability-97', - 'zIntResou-Local Availability Target-98', - 'zIntResou-Cloud Local State-99', - 'zIntResou-Remote Availability-100', - 'zIntResou-Remote Availability Target-101', - 'zIntResou-Transient Cloud Master-102', - 'zIntResou-Side Car Index-103', - 'zIntResou- File ID-104', - 'zIntResou-Version-105', - 'zAddAssetAttr- Original-File-Size-106', - 'zIntResou-Resource Type-107', - 'zIntResou-Datastore Sub-Type-108', - 'zIntResou-Cloud Source Type-109', - 'zIntResou-Data Length-110', - 'zIntResou-Recipe ID-111', - 'zIntResou-Cloud Last Prefetch Date-112', - 'zIntResou-Cloud Prefetch Count-113', - 'zIntResou- Cloud-Last-OnDemand Download-Date-114', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-115', - 'zIntResou-Compact-UTI-116', - 'zAsset-Uniform Type ID-117', - 'zAsset-Original Color Space-118', - 'zCldMast-Uniform_Type_ID-119', - 'zCldMast-Full Size JPEG Source-120', - 'zAsset-HDR Gain-121', - 'zAsset-zHDR_Type-122', - 'zExtAttr-Codec-123', - 'zIntResou-Codec Four Char Code Name-124', - 'zCldMast-Codec Name-125', - 'zCldMast-Video Frame Rate-126', - 'zCldMast-Placeholder State-127', - 'zAsset-Depth_Type-128', - 'zAsset-Avalanche UUID-129', - 'zAsset-Avalanche_Pick_Type-BurstAsset-130', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-131', - 'zAddAssetAttr-Cloud Recovery State-132', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-133', - 'zAsset-Deferred Processing Needed-134', - 'zAsset-Video Deferred Processing Needed-135', - 'zAddAssetAttr-Deferred Photo Identifier-136', - 'zAddAssetAttr-Deferred Processing Candidate Options-137', - 'zAsset-Has Adjustments-Camera-Effects-Filters-138', - 'zAsset-Adjustment Timestamp-139', - 'zAddAssetAttr-Editor Bundle ID-140', - 'zAddAssetAttr-Montage-141', - 'zAsset-Favorite-142', - 'zAsset-Hidden-143', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-144', - 'zAsset-Trashed Date-145', - 'zIntResou-Trash State-146', - 'zIntResou-Trashed Date-147', - 'zAsset-Cloud Delete State-148', - 'zIntResou-Cloud Delete State-149', - 'zAddAssetAttr-PTP Trashed State-150', - 'zIntResou-PTP Trashed State-151', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-152', - 'zMedAnlyAstAttr-Media Analysis Timestamp-153', - 'zAsset-Analysis State Modificaion Date-154', - 'zAddAssetAttr- Pending View Count-155', - 'zAddAssetAttr- View Count-156', - 'zAddAssetAttr- Pending Play Count-157', - 'zAddAssetAttr- Play Count-158', - 'zAddAssetAttr- Pending Share Count-159', - 'zAddAssetAttr- Share Count-160', - 'zAddAssetAttr-Allowed for Analysis-161', - 'zAddAssetAttr-Scene Analysis Version-162', - 'zAddAssetAttr-Scene Analysis is From Preview-163', - 'zAddAssetAttr-Scene Analysis Timestamp-164', - 'zAddAssetAttr-Destination Asset Copy State-165', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-166', - 'zCldMast-Source Master For Duplication Scope ID-167', - 'zAddAssetAttr-Source Asset For Duplication ID-168', - 'zCldMast-Source Master for Duplication ID-169', - 'zAddAssetAttr-Variation Suggestions States-170', - 'zAsset-High Frame Rate State-171', - 'zAsset-Video Key Frame Time Scale-172', - 'zAsset-Video Key Frame Value-173', - 'zExtAttr-ISO-174', - 'zExtAttr-Metering Mode-175', - 'zExtAttr-Sample Rate-176', - 'zExtAttr-Track Format-177', - 'zExtAttr-White Balance-178', - 'zExtAttr-Aperture-179', - 'zExtAttr-BitRate-180', - 'zExtAttr-Exposure Bias-181', - 'zExtAttr-Frames Per Second-182', - 'zExtAttr-Shutter Speed-183', - 'zExtAttr-Slush Scene Bias-184', - 'zExtAttr-Slush Version-185', - 'zExtAttr-Slush Preset-186', - 'zExtAttr-Slush Warm Bias-187', - 'zAsset-Height-188', - 'zAddAssetAttr-Original Height-189', - 'zIntResou-Unoriented Height-190', - 'zAsset-Width-191', - 'zAddAssetAttr-Original Width-192', - 'zIntResou-Unoriented Width-193', - 'zAsset-Thumbnail Index-194', - 'zAddAssetAttr-Embedded Thumbnail Height-195', - 'zAddAssetAttr-Embedded Thumbnail Length-196', - 'zAddAssetAttr-Embedded Thumbnail Offset-197', - 'zAddAssetAttr-Embedded Thumbnail Width-198', - 'zAsset-Packed Acceptable Crop Rect-199', - 'zAsset-Packed Badge Attributes-200', - 'zAsset-Packed Preferred Crop Rect-201', - 'zAsset-Curation Score-202', - 'zAsset-Camera Processing Adjustment State-203', - 'zAsset-Depth Type-204', - 'zAsset-Is Magic Carpet-QuicktimeMOVfile-205', - 'zAddAssetAttr-Orig Resource Choice-206', - 'zAddAssetAttr-Spatial Over Capture Group ID-207', - 'zAddAssetAttr-Place Annotation Data-208', - 'zAddAssetAttr-Distance Identity-HEX-209', - 'zAddAssetAttr-Edited IPTC Attributes-210', - 'zAddAssetAttr-Title-Comments via Cloud Website-211', - 'zAddAssetAttr-Accessibility Description-212', - 'zAddAssetAttr-Photo Stream Tag ID-213', - 'zAddAssetAttr-Share Type-214', - 'zAsset-Overall Aesthetic Score-215', - 'zAsset-zENT-216', - 'zAsset-zOPT-217', - 'zAsset-Master= zCldMast-zPK-218', - 'zAsset-Extended Attributes= zExtAttr-zPK-219', - 'zAsset-Import Session Key-220', - 'zAsset-FOK-Cloud Feed Asset Entry Key-221', - 'zAsset-Computed Attributes Asset Key-222', - 'zAsset-Promotion Score-223', - 'zAsset-Media Analysis Attributes Key-224', - 'zAsset-Media Group UUID-225', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-226', - 'zAsset.Cloud Collection GUID-227', - 'zAddAssetAttr-zENT-228', - 'ZAddAssetAttr-zOPT-229', - 'zAddAssetAttr-zAsset= zAsset_zPK-230', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-231', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-232', - 'zAddAssetAttr-Public Global UUID-233', - 'zAddAssetAttr-Original Assets UUID-234', - 'zAddAssetAttr-Originating Asset Identifier-235', - 'zAddAssetAttr.Adjusted Fingerprint-236', - 'zCldMast-zPK= zAsset-Master-237', - 'zCldMast-zENT-238', - 'zCldMast-zOPT-239', - 'zCldMast-Moment Share Key= zShare-zPK-240', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-241', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-242', - 'zCldMast-Originating Asset ID-243', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-244', - 'CMzCldMastMedData-zENT-245', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-246', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-247', - 'AAAzCldMastMedData-zENT-248', - 'AAAzCldMastMedData-CldMast key-249', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-250', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-251', - 'zExtAttr-zENT-252', - 'zExtAttr-zOPT-253', - 'zExtAttr-Asset Key-254', - 'zIntResou-zPK-255', - 'zIntResou-zENT-256', - 'zIntResou-zOPT-257', - 'zIntResou-Asset= zAsset_zPK-258', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-259', - 'zMedAnlyAstAttr-zEnt-260', - 'zMedAnlyAstAttr-zOpt-261', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-262') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph50.1-Asset_IntResou-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262])) - tlactivity = 'Ph50.1-Asset_IntResou-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + 'zAsset-zPK-7', + 'zAddAssetAttr-zPK-8', + 'zAsset-UUID = store.cloudphotodb-9', + 'zAddAssetAttr-Master Fingerprint-10', + 'zIntResou-Fingerprint-11', + 'zIntResou-Local Availability-4QueryStart-1', + 'zIntResou-Remote Availability-4QueryStart-2', + 'zIntResou-Resource Type-4QueryStart-3', + 'zIntResou-Datastore Sub-Type-4QueryStart-4', + 'zIntResou-Recipe ID-4QueryStart-5', + 'zAsset Complete-6', + 'zAsset-Bundle Scope-12', + 'zAsset-Syndication State-13', + 'zAsset-Cloud is My Asset-14', + 'zAsset-Cloud is deletable-Asset-15', + 'zAsset-Cloud_Local_State-16', + 'zAsset-Visibility State-17', + 'zExtAttr-Camera Make-18', + 'zExtAttr-Camera Model-19', + 'zExtAttr-Lens Model-20', + 'zExtAttr-Flash Fired-21', + 'zExtAttr-Focal Lenght-22', + 'zExtAttr-Focal Lenth in 35MM-23', + 'zExtAttr-Digital Zoom Ratio-24', + 'zAsset-Derived Camera Capture Device-25', + 'zAddAssetAttr-Camera Captured Device-26', + 'zAddAssetAttr-Imported by-27', + 'zCldMast-Imported By-28', + 'zAddAssetAttr.Imported by Bundle Identifier-29', + 'zAddAssetAttr-Imported By Display Name-30', + 'zCldMast-Imported by Bundle ID-31', + 'zCldMast-Imported by Display Name-32', + 'zAsset-Saved Asset Type-33', + 'zAsset-Directory-Path-34', + 'zAsset-Filename-35', + 'zAddAssetAttr- Original Filename-36', + 'zCldMast- Original Filename-37', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-38', + ('zAsset-Added Date-39', 'datetime'), + ('zAsset- SortToken -CameraRoll-40', 'datetime'), + ('zAddAssetAttr-Date Created Source-41', 'datetime'), + ('zAsset-Date Created-42', 'datetime'), + ('zCldMast-Creation Date-43', 'datetime'), + ('zIntResou-CldMst Date Created-44', 'datetime'), + 'zAddAssetAttr-Time Zone Name-45', + 'zAddAssetAttr-Time Zone Offset-46', + 'zAddAssetAttr-Inferred Time Zone Offset-47', + 'zAddAssetAttr-EXIF-String-48', + ('zAsset-Modification Date-49', 'datetime'), + ('zAsset-Last Shared Date-50', 'datetime'), + 'zCldMast-Cloud Local State-51', + ('zCldMast-Import Date-52', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-53', 'datetime'), + 'zAddAssetAttr-Import Session ID-54', + ('zAddAssetAttr-Alt Import Image Date-55', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-56', + ('zAsset-Cloud Batch Publish Date-57', 'datetime'), + ('zAsset-Cloud Server Publish Date-58', 'datetime'), + 'zAsset-Cloud Download Requests-59', + 'zAsset-Cloud Batch ID-60', + 'zAddAssetAttr-Upload Attempts-61', + 'zAsset-Latitude-62', + 'zExtAttr-Latitude-63', + 'zAsset-Longitude-64', + 'zExtAttr-Longitude-65', + 'zAddAssetAttr-GPS Horizontal Accuracy-66', + 'zAddAssetAttr-Location Hash-67', + 'zAddAssetAttr-Shifted Location Valid-68', + 'zAddAssetAttr-Shifted Location Data-69', + 'zAddAssetAttr-Reverse Location Is Valid-70', + 'zAddAssetAttr-Reverse Location Data-71', + 'AAAzCldMastMedData-zOPT-72', + 'zAddAssetAttr-Media Metadata Type-73', + 'AAAzCldMastMedData-Data-74', + 'CldMasterzCldMastMedData-zOPT-75', + 'zCldMast-Media Metadata Type-76', + 'CMzCldMastMedData-Data-77', + 'zAddAssetAttr-Syndication History-78', + 'zMedAnlyAstAttr-Syndication Processing Version-79', + 'zMedAnlyAstAttr-Syndication Processing Value-80', + 'zAsset-Orientation-81', + 'zAddAssetAttr-Original Orientation-82', + 'zAsset-Kind-83', + 'zAsset-Kind-Sub-Type-84', + 'zAddAssetAttr-Cloud Kind Sub Type-85', + 'zAsset-Playback Style-86', + 'zAsset-Playback Variation-87', + 'zAsset-Video Duration-88', + 'zExtAttr-Duration-89', + 'zAsset-Video CP Duration-90', + 'zAddAssetAttr-Video CP Duration Time Scale-91', + 'zAsset-Video CP Visibility State-92', + 'zAddAssetAttr-Video CP Display Value-93', + 'zAddAssetAttr-Video CP Display Time Scale-94', + 'zIntResou-Datastore Class ID-95', + 'zAsset-Cloud Placeholder Kind-96', + 'zIntResou-Local Availability-97', + 'zIntResou-Local Availability Target-98', + 'zIntResou-Cloud Local State-99', + 'zIntResou-Remote Availability-100', + 'zIntResou-Remote Availability Target-101', + 'zIntResou-Transient Cloud Master-102', + 'zIntResou-Side Car Index-103', + 'zIntResou- File ID-104', + 'zIntResou-Version-105', + 'zAddAssetAttr- Original-File-Size-106', + 'zIntResou-Resource Type-107', + 'zIntResou-Datastore Sub-Type-108', + 'zIntResou-Cloud Source Type-109', + 'zIntResou-Data Length-110', + 'zIntResou-Recipe ID-111', + ('zIntResou-Cloud Last Prefetch Date-112', 'datetime'), + 'zIntResou-Cloud Prefetch Count-113', + ('zIntResou- Cloud-Last-OnDemand Download-Date-114', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-115', + 'zIntResou-Compact-UTI-116', + 'zAsset-Uniform Type ID-117', + 'zAsset-Original Color Space-118', + 'zCldMast-Uniform_Type_ID-119', + 'zCldMast-Full Size JPEG Source-120', + 'zAsset-HDR Gain-121', + 'zAsset-zHDR_Type-122', + 'zExtAttr-Codec-123', + 'zIntResou-Codec Four Char Code Name-124', + 'zCldMast-Codec Name-125', + 'zCldMast-Video Frame Rate-126', + 'zCldMast-Placeholder State-127', + 'zAsset-Depth_Type-128', + 'zAsset-Avalanche UUID-129', + 'zAsset-Avalanche_Pick_Type-BurstAsset-130', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-131', + 'zAddAssetAttr-Cloud Recovery State-132', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-133', + 'zAsset-Deferred Processing Needed-134', + 'zAsset-Video Deferred Processing Needed-135', + 'zAddAssetAttr-Deferred Photo Identifier-136', + 'zAddAssetAttr-Deferred Processing Candidate Options-137', + 'zAsset-Has Adjustments-Camera-Effects-Filters-138', + ('zAsset-Adjustment Timestamp-139', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-140', + 'zAddAssetAttr-Montage-141', + 'zAsset-Favorite-142', + 'zAsset-Hidden-143', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-144', + ('zAsset-Trashed Date-145', 'datetime'), + 'zIntResou-Trash State-146', + ('zIntResou-Trashed Date-147', 'datetime'), + 'zAsset-Cloud Delete State-148', + 'zIntResou-Cloud Delete State-149', + 'zAddAssetAttr-PTP Trashed State-150', + 'zIntResou-PTP Trashed State-151', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-152', + ('zMedAnlyAstAttr-Media Analysis Timestamp-153', 'datetime'), + ('zAsset-Analysis State Modification Date-154', 'datetime'), + 'zAddAssetAttr- Pending View Count-155', + 'zAddAssetAttr- View Count-156', + 'zAddAssetAttr- Pending Play Count-157', + 'zAddAssetAttr- Play Count-158', + 'zAddAssetAttr- Pending Share Count-159', + 'zAddAssetAttr- Share Count-160', + 'zAddAssetAttr-Allowed for Analysis-161', + 'zAddAssetAttr-Scene Analysis Version-162', + 'zAddAssetAttr-Scene Analysis is From Preview-163', + ('zAddAssetAttr-Scene Analysis Timestamp-164', 'datetime'), + 'zAddAssetAttr-Destination Asset Copy State-165', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-166', + 'zCldMast-Source Master For Duplication Scope ID-167', + 'zAddAssetAttr-Source Asset For Duplication ID-168', + 'zCldMast-Source Master for Duplication ID-169', + 'zAddAssetAttr-Variation Suggestions States-170', + 'zAsset-High Frame Rate State-171', + 'zAsset-Video Key Frame Time Scale-172', + 'zAsset-Video Key Frame Value-173', + 'zExtAttr-ISO-174', + 'zExtAttr-Metering Mode-175', + 'zExtAttr-Sample Rate-176', + 'zExtAttr-Track Format-177', + 'zExtAttr-White Balance-178', + 'zExtAttr-Aperture-179', + 'zExtAttr-BitRate-180', + 'zExtAttr-Exposure Bias-181', + 'zExtAttr-Frames Per Second-182', + 'zExtAttr-Shutter Speed-183', + 'zExtAttr-Slush Scene Bias-184', + 'zExtAttr-Slush Version-185', + 'zExtAttr-Slush Preset-186', + 'zExtAttr-Slush Warm Bias-187', + 'zAsset-Height-188', + 'zAddAssetAttr-Original Height-189', + 'zIntResou-Unoriented Height-190', + 'zAsset-Width-191', + 'zAddAssetAttr-Original Width-192', + 'zIntResou-Unoriented Width-193', + 'zAsset-Thumbnail Index-194', + 'zAddAssetAttr-Embedded Thumbnail Height-195', + 'zAddAssetAttr-Embedded Thumbnail Length-196', + 'zAddAssetAttr-Embedded Thumbnail Offset-197', + 'zAddAssetAttr-Embedded Thumbnail Width-198', + 'zAsset-Packed Acceptable Crop Rect-199', + 'zAsset-Packed Badge Attributes-200', + 'zAsset-Packed Preferred Crop Rect-201', + 'zAsset-Curation Score-202', + 'zAsset-Camera Processing Adjustment State-203', + 'zAsset-Depth Type-204', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-205', + 'zAddAssetAttr-Orig Resource Choice-206', + 'zAddAssetAttr-Spatial Over Capture Group ID-207', + 'zAddAssetAttr-Place Annotation Data-208', + 'zAddAssetAttr-Distance Identity-HEX-209', + 'zAddAssetAttr-Edited IPTC Attributes-210', + 'zAddAssetAttr-Title-Comments via Cloud Website-211', + 'zAddAssetAttr-Accessibility Description-212', + 'zAddAssetAttr-Photo Stream Tag ID-213', + 'zAddAssetAttr-Share Type-214', + 'zAsset-Overall Aesthetic Score-215', + 'zAsset-zENT-216', + 'zAsset-zOPT-217', + 'zAsset-Master= zCldMast-zPK-218', + 'zAsset-Extended Attributes= zExtAttr-zPK-219', + 'zAsset-Import Session Key-220', + 'zAsset-FOK-Cloud Feed Asset Entry Key-221', + 'zAsset-Computed Attributes Asset Key-222', + 'zAsset-Promotion Score-223', + 'zAsset-Media Analysis Attributes Key-224', + 'zAsset-Media Group UUID-225', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-226', + 'zAsset.Cloud Collection GUID-227', + 'zAddAssetAttr-zENT-228', + 'ZAddAssetAttr-zOPT-229', + 'zAddAssetAttr-zAsset= zAsset_zPK-230', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-231', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-232', + 'zAddAssetAttr-Public Global UUID-233', + 'zAddAssetAttr-Original Assets UUID-234', + 'zAddAssetAttr-Originating Asset Identifier-235', + 'zAddAssetAttr.Adjusted Fingerprint-236', + 'zCldMast-zPK= zAsset-Master-237', + 'zCldMast-zENT-238', + 'zCldMast-zOPT-239', + 'zCldMast-Moment Share Key= zShare-zPK-240', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-241', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-242', + 'zCldMast-Originating Asset ID-243', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-244', + 'CMzCldMastMedData-zENT-245', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-246', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-247', + 'AAAzCldMastMedData-zENT-248', + 'AAAzCldMastMedData-CldMast key-249', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-250', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-251', + 'zExtAttr-zENT-252', + 'zExtAttr-zOPT-253', + 'zExtAttr-Asset Key-254', + 'zIntResou-zPK-255', + 'zIntResou-zENT-256', + 'zIntResou-zOPT-257', + 'zIntResou-Asset= zAsset_zPK-258', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-259', + 'zMedAnlyAstAttr-zEnt-260', + 'zMedAnlyAstAttr-zOpt-261', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-262') + data_list = get_sqlite_db_records(source_path, query) - else: - logfunc('No Internal Resource data available for iOS 15 PhotoData-Photos.sqlite') - - db.close() - return + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -3032,353 +3011,328 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK ORDER BY zAsset.ZDATECREATED - """) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271])) - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271])) + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + 'zAsset-zPK-7', + 'zAddAssetAttr-zPK-8', + 'zAsset-UUID = store.cloudphotodb-9', + 'zAddAssetAttr-Master Fingerprint-10', + 'zIntResou-Fingerprint-11', + 'zIntResou-Local Availability-4QueryStart-1', + 'zIntResou-Remote Availability-4QueryStart-2', + 'zIntResou-Resource Type-4QueryStart-3', + 'zIntResou-Datastore Sub-Type-4QueryStart-4', + 'zIntResou-Recipe ID-4QueryStart-5', + 'zAsset Complete-6', + 'zAsset-Bundle Scope-12', + 'zAsset-Syndication State-13', + 'zAsset-Cloud is My Asset-14', + 'zAsset-Cloud is deletable-Asset-15', + 'zAsset-Cloud_Local_State-16', + 'zAsset-Visibility State-17', + 'zExtAttr-Camera Make-18', + 'zExtAttr-Camera Model-19', + 'zExtAttr-Lens Model-20', + 'zExtAttr-Flash Fired-21', + 'zExtAttr-Focal Lenght-22', + 'zExtAttr-Focal Lenth in 35MM-23', + 'zExtAttr-Digital Zoom Ratio-24', + 'zAsset-Derived Camera Capture Device-25', + 'zAddAssetAttr-Camera Captured Device-26', + 'zAddAssetAttr-Imported by-27', + 'zCldMast-Imported By-28', + 'zAddAssetAttr.Imported by Bundle Identifier-29', + 'zAddAssetAttr-Imported By Display Name-30', + 'zCldMast-Imported by Bundle ID-31', + 'zCldMast-Imported by Display Name-32', + 'zAsset-Saved Asset Type-33', + 'zAsset-Directory-Path-34', + 'zAsset-Filename-35', + 'zAddAssetAttr- Original Filename-36', + 'zCldMast- Original Filename-37', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-38', + 'zAsset-Active Library Scope Participation State-39', + 'zAsset-Library Scope Share State- StillTesting-40', + ('zAsset-Added Date-41', 'datetime'), + ('zAsset- SortToken -CameraRoll-42', 'datetime'), + ('zAddAssetAttr-Date Created Source-43', 'datetime'), + ('zAsset-Date Created-44', 'datetime'), + ('zCldMast-Creation Date-45', 'datetime'), + ('zIntResou-CldMst Date Created-46', 'datetime'), + 'zAddAssetAttr-Time Zone Name-47', + 'zAddAssetAttr-Time Zone Offset-48', + 'zAddAssetAttr-Inferred Time Zone Offset-49', + 'zAddAssetAttr-EXIF-String-50', + ('zAsset-Modification Date-51', 'datetime'), + ('zAsset-Last Shared Date-52', 'datetime'), + 'zCldMast-Cloud Local State-53', + ('zCldMast-Import Date-54', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-55', 'datetime'), + 'zAddAssetAttr-Import Session ID-56', + ('zAddAssetAttr-Alt Import Image Date-57', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-58', + ('zAsset-Cloud Batch Publish Date-59', 'datetime'), + ('zAsset-Cloud Server Publish Date-60', 'datetime'), + 'zAsset-Cloud Download Requests-61', + 'zAsset-Cloud Batch ID-62', + 'zAddAssetAttr-Upload Attempts-63', + 'zAsset-Latitude-64', + 'zExtAttr-Latitude-65', + 'zAsset-Longitude-66', + 'zExtAttr-Longitude-67', + 'zAddAssetAttr-GPS Horizontal Accuracy-68', + 'zAddAssetAttr-Location Hash-69', + 'zAddAssetAttr-Shifted Location Valid-70', + 'zAddAssetAttr-Shifted Location Data-71', + 'zAddAssetAttr-Reverse Location Is Valid-72', + 'zAddAssetAttr-Reverse Location Data-73', + 'AAAzCldMastMedData-zOPT-74', + 'zAddAssetAttr-Media Metadata Type-75', + 'AAAzCldMastMedData-Data-76', + 'CldMasterzCldMastMedData-zOPT-77', + 'zCldMast-Media Metadata Type-78', + 'CMzCldMastMedData-Data-79', + 'zAsset-Search Index Rebuild State-80', + 'zAddAssetAttr-Syndication History-81', + 'zMedAnlyAstAttr-Syndication Processing Version-82', + 'zMedAnlyAstAttr-Syndication Processing Value-83', + 'zAsset-Orientation-84', + 'zAddAssetAttr-Original Orientation-85', + 'zAsset-Kind-86', + 'zAsset-Kind-Sub-Type-87', + 'zAddAssetAttr-Cloud Kind Sub Type-88', + 'zAsset-Playback Style-89', + 'zAsset-Playback Variation-90', + 'zAsset-Video Duration-91', + 'zExtAttr-Duration-92', + 'zAsset-Video CP Duration-93', + 'zAddAssetAttr-Video CP Duration Time Scale-94', + 'zAsset-Video CP Visibility State-95', + 'zAddAssetAttr-Video CP Display Value-96', + 'zAddAssetAttr-Video CP Display Time Scale-97', + 'zIntResou-Datastore Class ID-98', + 'zAsset-Cloud Placeholder Kind-99', + 'zIntResou-Local Availability-100', + 'zIntResou-Local Availability Target-101', + 'zIntResou-Cloud Local State-102', + 'zIntResou-Remote Availability-103', + 'zIntResou-Remote Availability Target-104', + 'zIntResou-Transient Cloud Master-105', + 'zIntResou-Side Car Index-106', + 'zIntResou- File ID-107', + 'zIntResou-Version-108', + 'zAddAssetAttr- Original-File-Size-109', + 'zIntResou-Resource Type-110', + 'zIntResou-Datastore Sub-Type-111', + 'zIntResou-Cloud Source Type-112', + 'zIntResou-Data Length-113', + 'zIntResou-Recipe ID-114', + ('zIntResou-Cloud Last Prefetch Date-115', 'datetime'), + 'zIntResou-Cloud Prefetch Count-116', + ('zIntResou- Cloud-Last-OnDemand Download-Date-117', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-118', + 'zIntResou-Compact-UTI-119', + 'zAsset-Uniform Type ID-120', + 'zAsset-Original Color Space-121', + 'zCldMast-Uniform_Type_ID-122', + 'zCldMast-Full Size JPEG Source-123', + 'zAsset-HDR Gain-124', + 'zAsset-zHDR_Type-125', + 'zExtAttr-Codec-126', + 'zIntResou-Codec Four Char Code Name-127', + 'zCldMast-Codec Name-128', + 'zCldMast-Video Frame Rate-129', + 'zCldMast-Placeholder State-130', + 'zAsset-Depth_Type-131', + 'zAsset-Avalanche UUID-132', + 'zAsset-Avalanche_Pick_Type-BurstAsset-133', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134', + 'zAddAssetAttr-Cloud Recovery State-135', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-136', + 'zAsset-Deferred Processing Needed-137', + 'zAsset-Video Deferred Processing Needed-138', + 'zAddAssetAttr-Deferred Photo Identifier-139', + 'zAddAssetAttr-Deferred Processing Candidate Options-140', + 'zAsset-Has Adjustments-Camera-Effects-Filters-141', + ('zAsset-Adjustment Timestamp-142', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-143', + 'zAddAssetAttr-Montage-144', + 'zAsset-Favorite-145', + 'zAsset-Hidden-146', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-147', + ('zAsset-Trashed Date-148', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-149', + 'zAsset-Delete-Reason-150', + 'zIntResou-Trash State-151', + ('zIntResou-Trashed Date-152', 'datetime'), + 'zAsset-Cloud Delete State-153', + 'zIntResou-Cloud Delete State-154', + 'zAddAssetAttr-PTP Trashed State-155', + 'zIntResou-PTP Trashed State-156', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-157', + ('zMedAnlyAstAttr-Media Analysis Timestamp-158', 'datetime'), + ('zAsset-Analysis State Modification Date-159', 'datetime'), + 'zAddAssetAttr- Pending View Count-160', + 'zAddAssetAttr- View Count-161', + 'zAddAssetAttr- Pending Play Count-162', + 'zAddAssetAttr- Play Count-163', + 'zAddAssetAttr- Pending Share Count-164', + 'zAddAssetAttr- Share Count-165', + 'zAddAssetAttr-Allowed for Analysis-166', + 'zAddAssetAttr-Scene Analysis Version-167', + 'zAddAssetAttr-Scene Analysis is From Preview-168', + ('zAddAssetAttr-Scene Analysis Timestamp-169', 'datetime'), + 'zAsset-Duplication Asset Visibility State-170', + 'zAddAssetAttr-Destination Asset Copy State-171', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-172', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-173', + 'zCldMast-Source Master For Duplication Scope ID-174', + 'zAddAssetAttr-Source Asset For Duplication ID-175', + 'zCldMast-Source Master for Duplication ID-176', + 'zAddAssetAttr-Variation Suggestions States-177', + 'zAsset-High Frame Rate State-178', + 'zAsset-Video Key Frame Time Scale-179', + 'zAsset-Video Key Frame Value-180', + 'zExtAttr-ISO-181', + 'zExtAttr-Metering Mode-182', + 'zExtAttr-Sample Rate-183', + 'zExtAttr-Track Format-184', + 'zExtAttr-White Balance-185', + 'zExtAttr-Aperture-186', + 'zExtAttr-BitRate-187', + 'zExtAttr-Exposure Bias-188', + 'zExtAttr-Frames Per Second-189', + 'zExtAttr-Shutter Speed-190', + 'zExtAttr-Slush Scene Bias-191', + 'zExtAttr-Slush Version-192', + 'zExtAttr-Slush Preset-193', + 'zExtAttr-Slush Warm Bias-194', + 'zAsset-Height-195', + 'zAddAssetAttr-Original Height-196', + 'zIntResou-Unoriented Height-197', + 'zAsset-Width-198', + 'zAddAssetAttr-Original Width-199', + 'zIntResou-Unoriented Width-200', + 'zAsset-Thumbnail Index-201', + 'zAddAssetAttr-Embedded Thumbnail Height-202', + 'zAddAssetAttr-Embedded Thumbnail Length-203', + 'zAddAssetAttr-Embedded Thumbnail Offset-204', + 'zAddAssetAttr-Embedded Thumbnail Width-205', + 'zAsset-Packed Acceptable Crop Rect-206', + 'zAsset-Packed Badge Attributes-207', + 'zAsset-Packed Preferred Crop Rect-208', + 'zAsset-Curation Score-209', + 'zAsset-Camera Processing Adjustment State-210', + 'zAsset-Depth Type-211', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-212', + 'zAddAssetAttr-Orig Resource Choice-213', + 'zAddAssetAttr-Spatial Over Capture Group ID-214', + 'zAddAssetAttr-Place Annotation Data-215', + 'zAddAssetAttr-Distance Identity-HEX-216', + 'zAddAssetAttr-Edited IPTC Attributes-217', + 'zAddAssetAttr-Title-Comments via Cloud Website-218', + 'zAddAssetAttr-Accessibility Description-219', + 'zAddAssetAttr-Photo Stream Tag ID-220', + 'zAddAssetAttr-Share Type-221', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-222', + 'zAsset-Overall Aesthetic Score-223', + 'zAsset-zENT-224', + 'zAsset-zOPT-225', + 'zAsset-Master= zCldMast-zPK-226', + 'zAsset-Extended Attributes= zExtAttr-zPK-227', + 'zAsset-Import Session Key-228', + 'zAsset-Photo Analysis Attributes Key-229', + 'zAsset-FOK-Cloud Feed Asset Entry Key-230', + 'zAsset-Computed Attributes Asset Key-231', + 'zAsset-Promotion Score-232', + 'zAsset-Media Analysis Attributes Key-233', + 'zAsset-Media Group UUID-234', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-235', + 'zAsset.Cloud Collection GUID-236', + 'zAddAssetAttr-zENT-237', + 'ZAddAssetAttr-zOPT-238', + 'zAddAssetAttr-zAsset= zAsset_zPK-239', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-240', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-241', + 'zAddAssetAttr-Public Global UUID-242', + 'zAddAssetAttr-Original Assets UUID-243', + 'zAddAssetAttr-Originating Asset Identifier-244', + 'zAddAssetAttr.Adjusted Fingerprint-245', + 'zCldMast-zPK= zAsset-Master-246', + 'zCldMast-zENT-247', + 'zCldMast-zOPT-248', + 'zCldMast-Moment Share Key= zShare-zPK-249', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-250', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-251', + 'zCldMast-Originating Asset ID-252', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-253', + 'CMzCldMastMedData-zENT-254', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-255', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-256', + 'AAAzCldMastMedData-zENT-257', + 'AAAzCldMastMedData-CldMast key-258', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-259', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-260', + 'zExtAttr-zENT-261', + 'zExtAttr-zOPT-262', + 'zExtAttr-Asset Key-263', + 'zIntResou-zPK-264', + 'zIntResou-zENT-265', + 'zIntResou-zOPT-266', + 'zIntResou-Asset= zAsset_zPK-267', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-268', + 'zMedAnlyAstAttr-zEnt-269', + 'zMedAnlyAstAttr-zOpt-270', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-271') + data_list = get_sqlite_db_records(source_path, query) - counter += 1 - - description = 'Parses iOS 16 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE and' \ - ' other tables. This and other related parsers should provide data for investigative' \ - ' analysis of assets being stored locally on the device verses assets being stored in' \ - ' iCloud Photos as the result of optimization. This is very large query and script,' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' - report = ArtifactHtmlReport('Ph50.1-Asset_IntResou-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph50.1-Asset_IntResou-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-4QueryStart-0', - 'zAsset-zPK-7', - 'zAddAssetAttr-zPK-8', - 'zAsset-UUID = store.cloudphotodb-9', - 'zAddAssetAttr-Master Fingerprint-10', - 'zIntResou-Fingerprint-11', - 'zIntResou-Local Availability-4QueryStart-1', - 'zIntResou-Remote Availability-4QueryStart-2', - 'zIntResou-Resource Type-4QueryStart-3', - 'zIntResou-Datastore Sub-Type-4QueryStart-4', - 'zIntResou-Recipe ID-4QueryStart-5', - 'zAsset Complete-6', - 'zAsset-Bundle Scope-12', - 'zAsset-Syndication State-13', - 'zAsset-Cloud is My Asset-14', - 'zAsset-Cloud is deletable-Asset-15', - 'zAsset-Cloud_Local_State-16', - 'zAsset-Visibility State-17', - 'zExtAttr-Camera Make-18', - 'zExtAttr-Camera Model-19', - 'zExtAttr-Lens Model-20', - 'zExtAttr-Flash Fired-21', - 'zExtAttr-Focal Lenght-22', - 'zExtAttr-Focal Lenth in 35MM-23', - 'zExtAttr-Digital Zoom Ratio-24', - 'zAsset-Derived Camera Capture Device-25', - 'zAddAssetAttr-Camera Captured Device-26', - 'zAddAssetAttr-Imported by-27', - 'zCldMast-Imported By-28', - 'zAddAssetAttr.Imported by Bundle Identifier-29', - 'zAddAssetAttr-Imported By Display Name-30', - 'zCldMast-Imported by Bundle ID-31', - 'zCldMast-Imported by Display Name-32', - 'zAsset-Saved Asset Type-33', - 'zAsset-Directory-Path-34', - 'zAsset-Filename-35', - 'zAddAssetAttr- Original Filename-36', - 'zCldMast- Original Filename-37', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-38', - 'zAsset-Active Library Scope Participation State-39', - 'zAsset-Library Scope Share State- StillTesting-40', - 'zAsset-Added Date-41', - 'zAsset- SortToken -CameraRoll-42', - 'zAddAssetAttr-Date Created Source-43', - 'zAsset-Date Created-44', - 'zCldMast-Creation Date-45', - 'zIntResou-CldMst Date Created-46', - 'zAddAssetAttr-Time Zone Name-47', - 'zAddAssetAttr-Time Zone Offset-48', - 'zAddAssetAttr-Inferred Time Zone Offset-49', - 'zAddAssetAttr-EXIF-String-50', - 'zAsset-Modification Date-51', - 'zAsset-Last Shared Date-52', - 'zCldMast-Cloud Local State-53', - 'zCldMast-Import Date-54', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-55', - 'zAddAssetAttr-Import Session ID-56', - 'zAddAssetAttr-Alt Import Image Date-57', - 'zCldMast-Import Session ID- AirDrop-StillTesting-58', - 'zAsset-Cloud Batch Publish Date-59', - 'zAsset-Cloud Server Publish Date-60', - 'zAsset-Cloud Download Requests-61', - 'zAsset-Cloud Batch ID-62', - 'zAddAssetAttr-Upload Attempts-63', - 'zAsset-Latitude-64', - 'zExtAttr-Latitude-65', - 'zAsset-Longitude-66', - 'zExtAttr-Longitude-67', - 'zAddAssetAttr-GPS Horizontal Accuracy-68', - 'zAddAssetAttr-Location Hash-69', - 'zAddAssetAttr-Shifted Location Valid-70', - 'zAddAssetAttr-Shifted Location Data-71', - 'zAddAssetAttr-Reverse Location Is Valid-72', - 'zAddAssetAttr-Reverse Location Data-73', - 'AAAzCldMastMedData-zOPT-74', - 'zAddAssetAttr-Media Metadata Type-75', - 'AAAzCldMastMedData-Data-76', - 'CldMasterzCldMastMedData-zOPT-77', - 'zCldMast-Media Metadata Type-78', - 'CMzCldMastMedData-Data-79', - 'zAsset-Search Index Rebuild State-80', - 'zAddAssetAttr-Syndication History-81', - 'zMedAnlyAstAttr-Syndication Processing Version-82', - 'zMedAnlyAstAttr-Syndication Processing Value-83', - 'zAsset-Orientation-84', - 'zAddAssetAttr-Original Orientation-85', - 'zAsset-Kind-86', - 'zAsset-Kind-Sub-Type-87', - 'zAddAssetAttr-Cloud Kind Sub Type-88', - 'zAsset-Playback Style-89', - 'zAsset-Playback Variation-90', - 'zAsset-Video Duration-91', - 'zExtAttr-Duration-92', - 'zAsset-Video CP Duration-93', - 'zAddAssetAttr-Video CP Duration Time Scale-94', - 'zAsset-Video CP Visibility State-95', - 'zAddAssetAttr-Video CP Display Value-96', - 'zAddAssetAttr-Video CP Display Time Scale-97', - 'zIntResou-Datastore Class ID-98', - 'zAsset-Cloud Placeholder Kind-99', - 'zIntResou-Local Availability-100', - 'zIntResou-Local Availability Target-101', - 'zIntResou-Cloud Local State-102', - 'zIntResou-Remote Availability-103', - 'zIntResou-Remote Availability Target-104', - 'zIntResou-Transient Cloud Master-105', - 'zIntResou-Side Car Index-106', - 'zIntResou- File ID-107', - 'zIntResou-Version-108', - 'zAddAssetAttr- Original-File-Size-109', - 'zIntResou-Resource Type-110', - 'zIntResou-Datastore Sub-Type-111', - 'zIntResou-Cloud Source Type-112', - 'zIntResou-Data Length-113', - 'zIntResou-Recipe ID-114', - 'zIntResou-Cloud Last Prefetch Date-115', - 'zIntResou-Cloud Prefetch Count-116', - 'zIntResou- Cloud-Last-OnDemand Download-Date-117', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-118', - 'zIntResou-Compact-UTI-119', - 'zAsset-Uniform Type ID-120', - 'zAsset-Original Color Space-121', - 'zCldMast-Uniform_Type_ID-122', - 'zCldMast-Full Size JPEG Source-123', - 'zAsset-HDR Gain-124', - 'zAsset-zHDR_Type-125', - 'zExtAttr-Codec-126', - 'zIntResou-Codec Four Char Code Name-127', - 'zCldMast-Codec Name-128', - 'zCldMast-Video Frame Rate-129', - 'zCldMast-Placeholder State-130', - 'zAsset-Depth_Type-131', - 'zAsset-Avalanche UUID-132', - 'zAsset-Avalanche_Pick_Type-BurstAsset-133', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134', - 'zAddAssetAttr-Cloud Recovery State-135', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-136', - 'zAsset-Deferred Processing Needed-137', - 'zAsset-Video Deferred Processing Needed-138', - 'zAddAssetAttr-Deferred Photo Identifier-139', - 'zAddAssetAttr-Deferred Processing Candidate Options-140', - 'zAsset-Has Adjustments-Camera-Effects-Filters-141', - 'zAsset-Adjustment Timestamp-142', - 'zAddAssetAttr-Editor Bundle ID-143', - 'zAddAssetAttr-Montage-144', - 'zAsset-Favorite-145', - 'zAsset-Hidden-146', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-147', - 'zAsset-Trashed Date-148', - 'zAsset-Trashed by Participant= zSharePartic_zPK-149', - 'zAsset-Delete-Reason-150', - 'zIntResou-Trash State-151', - 'zIntResou-Trashed Date-152', - 'zAsset-Cloud Delete State-153', - 'zIntResou-Cloud Delete State-154', - 'zAddAssetAttr-PTP Trashed State-155', - 'zIntResou-PTP Trashed State-156', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-157', - 'zMedAnlyAstAttr-Media Analysis Timestamp-158', - 'zAsset-Analysis State Modificaion Date-159', - 'zAddAssetAttr- Pending View Count-160', - 'zAddAssetAttr- View Count-161', - 'zAddAssetAttr- Pending Play Count-162', - 'zAddAssetAttr- Play Count-163', - 'zAddAssetAttr- Pending Share Count-164', - 'zAddAssetAttr- Share Count-165', - 'zAddAssetAttr-Allowed for Analysis-166', - 'zAddAssetAttr-Scene Analysis Version-167', - 'zAddAssetAttr-Scene Analysis is From Preview-168', - 'zAddAssetAttr-Scene Analysis Timestamp-169', - 'zAsset-Duplication Asset Visibility State-170', - 'zAddAssetAttr-Destination Asset Copy State-171', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-172', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-173', - 'zCldMast-Source Master For Duplication Scope ID-174', - 'zAddAssetAttr-Source Asset For Duplication ID-175', - 'zCldMast-Source Master for Duplication ID-176', - 'zAddAssetAttr-Variation Suggestions States-177', - 'zAsset-High Frame Rate State-178', - 'zAsset-Video Key Frame Time Scale-179', - 'zAsset-Video Key Frame Value-180', - 'zExtAttr-ISO-181', - 'zExtAttr-Metering Mode-182', - 'zExtAttr-Sample Rate-183', - 'zExtAttr-Track Format-184', - 'zExtAttr-White Balance-185', - 'zExtAttr-Aperture-186', - 'zExtAttr-BitRate-187', - 'zExtAttr-Exposure Bias-188', - 'zExtAttr-Frames Per Second-189', - 'zExtAttr-Shutter Speed-190', - 'zExtAttr-Slush Scene Bias-191', - 'zExtAttr-Slush Version-192', - 'zExtAttr-Slush Preset-193', - 'zExtAttr-Slush Warm Bias-194', - 'zAsset-Height-195', - 'zAddAssetAttr-Original Height-196', - 'zIntResou-Unoriented Height-197', - 'zAsset-Width-198', - 'zAddAssetAttr-Original Width-199', - 'zIntResou-Unoriented Width-200', - 'zAsset-Thumbnail Index-201', - 'zAddAssetAttr-Embedded Thumbnail Height-202', - 'zAddAssetAttr-Embedded Thumbnail Length-203', - 'zAddAssetAttr-Embedded Thumbnail Offset-204', - 'zAddAssetAttr-Embedded Thumbnail Width-205', - 'zAsset-Packed Acceptable Crop Rect-206', - 'zAsset-Packed Badge Attributes-207', - 'zAsset-Packed Preferred Crop Rect-208', - 'zAsset-Curation Score-209', - 'zAsset-Camera Processing Adjustment State-210', - 'zAsset-Depth Type-211', - 'zAsset-Is Magic Carpet-QuicktimeMOVfile-212', - 'zAddAssetAttr-Orig Resource Choice-213', - 'zAddAssetAttr-Spatial Over Capture Group ID-214', - 'zAddAssetAttr-Place Annotation Data-215', - 'zAddAssetAttr-Distance Identity-HEX-216', - 'zAddAssetAttr-Edited IPTC Attributes-217', - 'zAddAssetAttr-Title-Comments via Cloud Website-218', - 'zAddAssetAttr-Accessibility Description-219', - 'zAddAssetAttr-Photo Stream Tag ID-220', - 'zAddAssetAttr-Share Type-221', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-222', - 'zAsset-Overall Aesthetic Score-223', - 'zAsset-zENT-224', - 'zAsset-zOPT-225', - 'zAsset-Master= zCldMast-zPK-226', - 'zAsset-Extended Attributes= zExtAttr-zPK-227', - 'zAsset-Import Session Key-228', - 'zAsset-Photo Analysis Attributes Key-229', - 'zAsset-FOK-Cloud Feed Asset Entry Key-230', - 'zAsset-Computed Attributes Asset Key-231', - 'zAsset-Promotion Score-232', - 'zAsset-Media Analysis Attributes Key-233', - 'zAsset-Media Group UUID-234', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-235', - 'zAsset.Cloud Collection GUID-236', - 'zAddAssetAttr-zENT-237', - 'ZAddAssetAttr-zOPT-238', - 'zAddAssetAttr-zAsset= zAsset_zPK-239', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-240', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-241', - 'zAddAssetAttr-Public Global UUID-242', - 'zAddAssetAttr-Original Assets UUID-243', - 'zAddAssetAttr-Originating Asset Identifier-244', - 'zAddAssetAttr.Adjusted Fingerprint-245', - 'zCldMast-zPK= zAsset-Master-246', - 'zCldMast-zENT-247', - 'zCldMast-zOPT-248', - 'zCldMast-Moment Share Key= zShare-zPK-249', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-250', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-251', - 'zCldMast-Originating Asset ID-252', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-253', - 'CMzCldMastMedData-zENT-254', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-255', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-256', - 'AAAzCldMastMedData-zENT-257', - 'AAAzCldMastMedData-CldMast key-258', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-259', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-260', - 'zExtAttr-zENT-261', - 'zExtAttr-zOPT-262', - 'zExtAttr-Asset Key-263', - 'zIntResou-zPK-264', - 'zIntResou-zENT-265', - 'zIntResou-zOPT-266', - 'zIntResou-Asset= zAsset_zPK-267', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-268', - 'zMedAnlyAstAttr-zEnt-269', - 'zMedAnlyAstAttr-zOpt-270', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-271') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph50.1-Asset_IntResou-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph50.1-Asset_IntResou-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No Internal Resource data available for iOS 16 PhotoData-Photos.sqlite') - - db.close() - return + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -4218,366 +4172,341 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274])) - - counter += 1 + ''' - description = 'Parses iOS 17 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE' \ - ' and other tables. This and other related parsers should provide data for investigative' \ - ' analysis of assets being stored locally on the device verses assets being stored in' \ - ' iCloud Photos as the result of optimization. This is very large query and script,' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' - report = ArtifactHtmlReport('Ph50.1-Asset_IntResou-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph50.1-Asset_IntResou-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-4QueryStart-0', - 'zAsset-zPK-1', - 'zAddAssetAttr-zPK-2', - 'zAsset-UUID = store.cloudphotodb-3', - 'zAddAssetAttr-Master Fingerprint-4', - 'zAddAssetAttr.Adjusted Fingerprint-5', - 'zIntResou-Fingerprint-6', - 'zIntResou-Local Availability-4QueryStart-7', - 'zIntResou-Remote Availability-4QueryStart-8', - 'zIntResou-Resource Type-4QueryStart-9', - 'zIntResou-Datastore Sub-Type-4QueryStart-10', - 'zIntResou-Recipe ID-4QueryStart-11', - 'zAsset Complete-12', - 'zAsset-Bundle Scope-13', - 'zAsset-Syndication State-14', - 'zAsset-Cloud is My Asset-15', - 'zAsset-Cloud is deletable-Asset-16', - 'zAsset-Cloud_Local_State-17', - 'zAsset-Visibility State-18', - 'zExtAttr-Camera Make-19', - 'zExtAttr-Camera Model-20', - 'zExtAttr-Lens Model-21', - 'zExtAttr-Flash Fired-22', - 'zExtAttr-Focal Lenght-23', - 'zExtAttr-Focal Length in 35MM-24', - 'zExtAttr-Digital Zoom Ratio-25', - 'zAsset-Derived Camera Capture Device-26', - 'zAddAssetAttr-Camera Captured Device-27', - 'zAddAssetAttr-Imported by-28', - 'zCldMast-Imported By-29', - 'zAddAssetAttr.Imported by Bundle Identifier-30', - 'zAddAssetAttr-Imported By Display Name-31', - 'zCldMast-Imported by Bundle ID-32', - 'zCldMast-Imported by Display Name-33', - 'zAsset-Saved Asset Type-34', - 'zAsset-Directory-Path-35', - 'zAsset-Filename-36', - 'zAddAssetAttr- Original Filename-37', - 'zCldMast- Original Filename-38', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-39', - 'zAsset-Active Library Scope Participation State-40', - 'zAsset-Library Scope Share State- StillTesting-41', - 'zAsset-Added Date-42', - 'zAsset- SortToken -CameraRoll-43', - 'zAddAssetAttr-Date Created Source-44', - 'zAsset-Date Created-45', - 'zCldMast-Creation Date-46', - 'zIntResou-CldMst Date Created-47', - 'zAddAssetAttr-Time Zone Name-48', - 'zAddAssetAttr-Time Zone Offset-49', - 'zAddAssetAttr-Inferred Time Zone Offset-50', - 'zAddAssetAttr-EXIF-String-51', - 'zAsset-Modification Date-52', - 'zAsset-Last Shared Date-53', - 'zCldMast-Cloud Local State-54', - 'zCldMast-Import Date-55', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-56', - 'zAddAssetAttr-Import Session ID-57', - 'zAddAssetAttr-Alt Import Image Date-58', - 'zCldMast-Import Session ID- AirDrop-StillTesting-59', - 'zAsset-Cloud Batch Publish Date-60', - 'zAsset-Cloud Server Publish Date-61', - 'zAsset-Cloud Download Requests-62', - 'zAsset-Cloud Batch ID-63', - 'zAddAssetAttr-Upload Attempts-64', - 'zAsset-Latitude-65', - 'zExtAttr-Latitude-66', - 'zAsset-Longitude-67', - 'zExtAttr-Longitude-68', - 'zAddAssetAttr-GPS Horizontal Accuracy-69', - 'zAddAssetAttr-Location Hash-70', - 'zAddAssetAttr-Shifted Location Valid-71', - 'zAddAssetAttr-Shifted Location Data-72', - 'zAddAssetAttr-Reverse Location Is Valid-73', - 'zAddAssetAttr-Reverse Location Data-74', - 'AAAzCldMastMedData-zOPT-75', - 'zAddAssetAttr-Media Metadata Type-76', - 'AAAzCldMastMedData-Data-77', - 'CldMasterzCldMastMedData-zOPT-78', - 'zCldMast-Media Metadata Type-79', - 'CMzCldMastMedData-Data-80', - 'zAsset-Search Index Rebuild State-81', - 'zAddAssetAttr-Syndication History-82', - 'zMedAnlyAstAttr-Syndication Processing Version-83', - 'zMedAnlyAstAttr-Syndication Processing Value-84', - 'zAsset-Orientation-85', - 'zAddAssetAttr-Original Orientation-86', - 'zAsset-Kind-87', - 'zAsset-Kind-Sub-Type-88', - 'zAddAssetAttr-Cloud Kind Sub Type-89', - 'zAsset-Playback Style-90', - 'zAsset-Playback Variation-91', - 'zAsset-Video Duration-92', - 'zExtAttr-Duration-93', - 'zAsset-Video CP Duration-94', - 'zAddAssetAttr-Video CP Duration Time Scale-95', - 'zAsset-Video CP Visibility State-96', - 'zAddAssetAttr-Video CP Display Value-97', - 'zAddAssetAttr-Video CP Display Time Scale-98', - 'zIntResou-Datastore Class ID-99', - 'zAsset-Cloud Placeholder Kind-100', - 'zIntResou-Local Availability-101', - 'zIntResou-Local Availability Target-102', - 'zIntResou-Cloud Local State-103', - 'zIntResou-Remote Availability-104', - 'zIntResou-Remote Availability Target-105', - 'zIntResou-Transient Cloud Master-106', - 'zIntResou-Side Car Index-107', - 'zIntResou- File ID-108', - 'zIntResou-Version-109', - 'zAddAssetAttr- Original-File-Size-110', - 'zIntResou-Resource Type-111', - 'zIntResou-Datastore Sub-Type-112', - 'zIntResou-Cloud Source Type-113', - 'zIntResou-Data Length-114', - 'zIntResou-Recipe ID-115', - 'zIntResou-Cloud Last Prefetch Date-116', - 'zIntResou-Cloud Prefetch Count-117', - 'zIntResou- Cloud-Last-OnDemand Download-Date-118', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-119', - 'zIntResou-Compact-UTI-120', - 'zAsset-Uniform Type ID-121', - 'zAsset-Original Color Space-122', - 'zCldMast-Uniform_Type_ID-123', - 'zCldMast-Full Size JPEG Source-124', - 'zAsset-HDR Gain-125', - 'zAsset-zHDR_Type-126', - 'zExtAttr-Codec-127', - 'zIntResou-Codec Four Char Code Name-128', - 'zCldMast-Codec Name-129', - 'zCldMast-Video Frame Rate-130', - 'zCldMast-Placeholder State-131', - 'zAsset-Depth_Type-132', - 'zAsset-Avalanche UUID-133', - 'zAsset-Avalanche_Pick_Type-BurstAsset-134', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-135', - 'zAddAssetAttr-Cloud Recovery State-136', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-137', - 'zAsset-Deferred Processing Needed-138', - 'zAsset-Video Deferred Processing Needed-139', - 'zAddAssetAttr-Deferred Photo Identifier-140', - 'zAddAssetAttr-Deferred Processing Candidate Options-141', - 'zAsset-Has Adjustments-Camera-Effects-Filters-142', - 'zAsset-Adjustment Timestamp-143', - 'zAddAssetAttr-Editor Bundle ID-144', - 'zAddAssetAttr-Montage-145', - 'zAsset-Favorite-146', - 'zAsset-Hidden-147', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-148', - 'zAsset-Trashed Date-149', - 'zAsset-Trashed by Participant= zSharePartic_zPK-150', - 'zAsset-Delete-Reason-151', - 'zIntResou-Trash State-152', - 'zIntResou-Trashed Date-153', - 'zAsset-Cloud Delete State-154', - 'zIntResou-Cloud Delete State-155', - 'zAddAssetAttr-PTP Trashed State-156', - 'zIntResou-PTP Trashed State-157', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-158', - 'zMedAnlyAstAttr-Media Analysis Timestamp-159', - 'zAsset-Analysis State Modification Date-160', - 'zAddAssetAttr- Pending View Count-161', - 'zAddAssetAttr- View Count-162', - 'zAddAssetAttr- Pending Play Count-163', - 'zAddAssetAttr- Play Count-164', - 'zAddAssetAttr- Pending Share Count-165', - 'zAddAssetAttr- Share Count-166', - 'zAddAssetAttr-Allowed for Analysis-167', - 'zAddAssetAttr-Scene Analysis Version-168', - 'zAddAssetAttr-Scene Analysis is From Preview-169', - 'zAddAssetAttr-Scene Analysis Timestamp-170', - 'zAsset-Duplication Asset Visibility State-171', - 'zAddAssetAttr-Destination Asset Copy State-172', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-173', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-174', - 'zCldMast-Source Master For Duplication Scope ID-175', - 'zAddAssetAttr-Source Asset For Duplication ID-176', - 'zCldMast-Source Master for Duplication ID-177', - 'zAddAssetAttr-Variation Suggestions States-178', - 'zAsset-High Frame Rate State-179', - 'zAsset-Video Key Frame Time Scale-180', - 'zAsset-Video Key Frame Value-181', - 'zExtAttr-ISO-182', - 'zExtAttr-Metering Mode-183', - 'zExtAttr-Sample Rate-184', - 'zExtAttr-Track Format-185', - 'zExtAttr-White Balance-186', - 'zExtAttr-Aperture-187', - 'zExtAttr-BitRate-188', - 'zExtAttr-Exposure Bias-189', - 'zExtAttr-Frames Per Second-190', - 'zExtAttr-Shutter Speed-191', - 'zExtAttr-Slush Scene Bias-192', - 'zExtAttr-Slush Version-193', - 'zExtAttr-Slush Preset-194', - 'zExtAttr-Slush Warm Bias-195', - 'zAsset-Height-196', - 'zAddAssetAttr-Original Height-197', - 'zIntResou-UnOriented Height-198', - 'zAsset-Width-199', - 'zAddAssetAttr-Original Width-200', - 'zIntResou-UnOriented Width-201', - 'zAsset-Thumbnail Index-202', - 'zAddAssetAttr-Embedded Thumbnail Height-203', - 'zAddAssetAttr-Embedded Thumbnail Length-204', - 'zAddAssetAttr-Embedded Thumbnail Offset-205', - 'zAddAssetAttr-Embedded Thumbnail Width-206', - 'zAsset-Packed Acceptable Crop Rect-207', - 'zAsset-Packed Badge Attributes-208', - 'zAsset-Packed Preferred Crop Rect-209', - 'zAsset-Curation Score-210', - 'zAsset-Camera Processing Adjustment State-211', - 'zAsset-Depth Type-212', - 'zAsset-Is Magic Carpet-Quicktime_MOV-file-213', - 'zAddAssetAttr-Orig Resource Choice-214', - 'zAsset-Spatial Type-215', - 'zAddAssetAttr-Spatial Over Capture Group ID-216', - 'zAddAssetAttr-Place Annotation Data-217', - 'zAddAssetAttr-Distance Identity-HEX-218', - 'zAddAssetAttr-Edited IPTC Attributes-219', - 'zAddAssetAttr-Title-Comments via Cloud Website-220', - 'zAddAssetAttr-Accessibility Description-221', - 'zAddAssetAttr-Photo Stream Tag ID-222', - 'zAddAssetAttr-Share Type-223', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-224', - 'zAsset-Overall Aesthetic Score-225', - 'zAsset-zENT-226', - 'zAsset-zOPT-227', - 'zAsset-Master= zCldMast-zPK-228', - 'zAsset-Extended Attributes= zExtAttr-zPK-229', - 'zAsset-Import Session Key-230', - 'zAsset-Photo Analysis Attributes Key-231', - 'zAsset-FOK-Cloud Feed Asset Entry Key-232', - 'zAsset-Computed Attributes Asset Key-233', - 'zAsset-Promotion Score-234', - 'zAsset-Iconic Score-235', - 'zAsset-Media Analysis Attributes Key-236', - 'zAsset-Media Group UUID-237', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-238', - 'zAsset.Cloud Collection GUID-239', - 'zAddAssetAttr-zENT-240', - 'ZAddAssetAttr-zOPT-241', - 'zAddAssetAttr-zAsset= zAsset_zPK-242', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-243', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-244', - 'zAddAssetAttr-Public Global UUID-245', - 'zAddAssetAttr-Original Assets UUID-246', - 'zAddAssetAttr-Originating Asset Identifier-247', - 'zAddAssetAttr.Adjusted Fingerprint-248', - 'zCldMast-zPK= zAsset-Master-249', - 'zCldMast-zENT-250', - 'zCldMast-zOPT-251', - 'zCldMast-Moment Share Key= zShare-zPK-252', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-253', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-254', - 'zCldMast-Originating Asset ID-255', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-256', - 'CMzCldMastMedData-zENT-257', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-258', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-259', - 'AAAzCldMastMedData-zENT-260', - 'AAAzCldMastMedData-CldMast key-261', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-262', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-263', - 'zExtAttr-zENT-264', - 'zExtAttr-zOPT-265', - 'zExtAttr-Asset Key-266', - 'zIntResou-zPK-267', - 'zIntResou-zENT-268', - 'zIntResou-zOPT-269', - 'zIntResou-Asset= zAsset_zPK-270', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-271', - 'zMedAnlyAstAttr-zEnt-272', - 'zMedAnlyAstAttr-zOpt-273', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-274') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274])) - tsvname = 'Ph50.1-Asset_IntResou-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + 'zAsset-zPK-1', + 'zAddAssetAttr-zPK-2', + 'zAsset-UUID = store.cloudphotodb-3', + 'zAddAssetAttr-Master Fingerprint-4', + 'zAddAssetAttr.Adjusted Fingerprint-5', + 'zIntResou-Fingerprint-6', + 'zIntResou-Local Availability-4QueryStart-7', + 'zIntResou-Remote Availability-4QueryStart-8', + 'zIntResou-Resource Type-4QueryStart-9', + 'zIntResou-Datastore Sub-Type-4QueryStart-10', + 'zIntResou-Recipe ID-4QueryStart-11', + 'zAsset Complete-12', + 'zAsset-Bundle Scope-13', + 'zAsset-Syndication State-14', + 'zAsset-Cloud is My Asset-15', + 'zAsset-Cloud is deletable-Asset-16', + 'zAsset-Cloud_Local_State-17', + 'zAsset-Visibility State-18', + 'zExtAttr-Camera Make-19', + 'zExtAttr-Camera Model-20', + 'zExtAttr-Lens Model-21', + 'zExtAttr-Flash Fired-22', + 'zExtAttr-Focal Lenght-23', + 'zExtAttr-Focal Length in 35MM-24', + 'zExtAttr-Digital Zoom Ratio-25', + 'zAsset-Derived Camera Capture Device-26', + 'zAddAssetAttr-Camera Captured Device-27', + 'zAddAssetAttr-Imported by-28', + 'zCldMast-Imported By-29', + 'zAddAssetAttr.Imported by Bundle Identifier-30', + 'zAddAssetAttr-Imported By Display Name-31', + 'zCldMast-Imported by Bundle ID-32', + 'zCldMast-Imported by Display Name-33', + 'zAsset-Saved Asset Type-34', + 'zAsset-Directory-Path-35', + 'zAsset-Filename-36', + 'zAddAssetAttr- Original Filename-37', + 'zCldMast- Original Filename-38', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-39', + 'zAsset-Active Library Scope Participation State-40', + 'zAsset-Library Scope Share State- StillTesting-41', + ('zAsset-Added Date-42', 'datetime'), + ('zAsset- SortToken -CameraRoll-43', 'datetime'), + ('zAddAssetAttr-Date Created Source-44', 'datetime'), + ('zAsset-Date Created-45', 'datetime'), + ('zCldMast-Creation Date-46', 'datetime'), + ('zIntResou-CldMst Date Created-47', 'datetime'), + 'zAddAssetAttr-Time Zone Name-48', + 'zAddAssetAttr-Time Zone Offset-49', + 'zAddAssetAttr-Inferred Time Zone Offset-50', + 'zAddAssetAttr-EXIF-String-51', + ('zAsset-Modification Date-52', 'datetime'), + ('zAsset-Last Shared Date-53', 'datetime'), + 'zCldMast-Cloud Local State-54', + ('zCldMast-Import Date-55', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-56', 'datetime'), + 'zAddAssetAttr-Import Session ID-57', + ('zAddAssetAttr-Alt Import Image Date-58', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-59', + ('zAsset-Cloud Batch Publish Date-60', 'datetime'), + ('zAsset-Cloud Server Publish Date-61', 'datetime'), + 'zAsset-Cloud Download Requests-62', + 'zAsset-Cloud Batch ID-63', + 'zAddAssetAttr-Upload Attempts-64', + 'zAsset-Latitude-65', + 'zExtAttr-Latitude-66', + 'zAsset-Longitude-67', + 'zExtAttr-Longitude-68', + 'zAddAssetAttr-GPS Horizontal Accuracy-69', + 'zAddAssetAttr-Location Hash-70', + 'zAddAssetAttr-Shifted Location Valid-71', + 'zAddAssetAttr-Shifted Location Data-72', + 'zAddAssetAttr-Reverse Location Is Valid-73', + 'zAddAssetAttr-Reverse Location Data-74', + 'AAAzCldMastMedData-zOPT-75', + 'zAddAssetAttr-Media Metadata Type-76', + 'AAAzCldMastMedData-Data-77', + 'CldMasterzCldMastMedData-zOPT-78', + 'zCldMast-Media Metadata Type-79', + 'CMzCldMastMedData-Data-80', + 'zAsset-Search Index Rebuild State-81', + 'zAddAssetAttr-Syndication History-82', + 'zMedAnlyAstAttr-Syndication Processing Version-83', + 'zMedAnlyAstAttr-Syndication Processing Value-84', + 'zAsset-Orientation-85', + 'zAddAssetAttr-Original Orientation-86', + 'zAsset-Kind-87', + 'zAsset-Kind-Sub-Type-88', + 'zAddAssetAttr-Cloud Kind Sub Type-89', + 'zAsset-Playback Style-90', + 'zAsset-Playback Variation-91', + 'zAsset-Video Duration-92', + 'zExtAttr-Duration-93', + 'zAsset-Video CP Duration-94', + 'zAddAssetAttr-Video CP Duration Time Scale-95', + 'zAsset-Video CP Visibility State-96', + 'zAddAssetAttr-Video CP Display Value-97', + 'zAddAssetAttr-Video CP Display Time Scale-98', + 'zIntResou-Datastore Class ID-99', + 'zAsset-Cloud Placeholder Kind-100', + 'zIntResou-Local Availability-101', + 'zIntResou-Local Availability Target-102', + 'zIntResou-Cloud Local State-103', + 'zIntResou-Remote Availability-104', + 'zIntResou-Remote Availability Target-105', + 'zIntResou-Transient Cloud Master-106', + 'zIntResou-Side Car Index-107', + 'zIntResou- File ID-108', + 'zIntResou-Version-109', + 'zAddAssetAttr- Original-File-Size-110', + 'zIntResou-Resource Type-111', + 'zIntResou-Datastore Sub-Type-112', + 'zIntResou-Cloud Source Type-113', + 'zIntResou-Data Length-114', + 'zIntResou-Recipe ID-115', + ('zIntResou-Cloud Last Prefetch Date-116', 'datetime'), + 'zIntResou-Cloud Prefetch Count-117', + ('zIntResou- Cloud-Last-OnDemand Download-Date-118', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-119', + 'zIntResou-Compact-UTI-120', + 'zAsset-Uniform Type ID-121', + 'zAsset-Original Color Space-122', + 'zCldMast-Uniform_Type_ID-123', + 'zCldMast-Full Size JPEG Source-124', + 'zAsset-HDR Gain-125', + 'zAsset-zHDR_Type-126', + 'zExtAttr-Codec-127', + 'zIntResou-Codec Four Char Code Name-128', + 'zCldMast-Codec Name-129', + 'zCldMast-Video Frame Rate-130', + 'zCldMast-Placeholder State-131', + 'zAsset-Depth_Type-132', + 'zAsset-Avalanche UUID-133', + 'zAsset-Avalanche_Pick_Type-BurstAsset-134', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-135', + 'zAddAssetAttr-Cloud Recovery State-136', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-137', + 'zAsset-Deferred Processing Needed-138', + 'zAsset-Video Deferred Processing Needed-139', + 'zAddAssetAttr-Deferred Photo Identifier-140', + 'zAddAssetAttr-Deferred Processing Candidate Options-141', + 'zAsset-Has Adjustments-Camera-Effects-Filters-142', + ('zAsset-Adjustment Timestamp-143', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-144', + 'zAddAssetAttr-Montage-145', + 'zAsset-Favorite-146', + 'zAsset-Hidden-147', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-148', + ('zAsset-Trashed Date-149', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-150', + 'zAsset-Delete-Reason-151', + 'zIntResou-Trash State-152', + ('zIntResou-Trashed Date-153', 'datetime'), + 'zAsset-Cloud Delete State-154', + 'zIntResou-Cloud Delete State-155', + 'zAddAssetAttr-PTP Trashed State-156', + 'zIntResou-PTP Trashed State-157', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-158', + ('zMedAnlyAstAttr-Media Analysis Timestamp-159', 'datetime'), + ('zAsset-Analysis State Modification Date-160', 'datetime'), + 'zAddAssetAttr- Pending View Count-161', + 'zAddAssetAttr- View Count-162', + 'zAddAssetAttr- Pending Play Count-163', + 'zAddAssetAttr- Play Count-164', + 'zAddAssetAttr- Pending Share Count-165', + 'zAddAssetAttr- Share Count-166', + 'zAddAssetAttr-Allowed for Analysis-167', + 'zAddAssetAttr-Scene Analysis Version-168', + 'zAddAssetAttr-Scene Analysis is From Preview-169', + ('zAddAssetAttr-Scene Analysis Timestamp-170', 'datetime'), + 'zAsset-Duplication Asset Visibility State-171', + 'zAddAssetAttr-Destination Asset Copy State-172', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-173', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-174', + 'zCldMast-Source Master For Duplication Scope ID-175', + 'zAddAssetAttr-Source Asset For Duplication ID-176', + 'zCldMast-Source Master for Duplication ID-177', + 'zAddAssetAttr-Variation Suggestions States-178', + 'zAsset-High Frame Rate State-179', + 'zAsset-Video Key Frame Time Scale-180', + 'zAsset-Video Key Frame Value-181', + 'zExtAttr-ISO-182', + 'zExtAttr-Metering Mode-183', + 'zExtAttr-Sample Rate-184', + 'zExtAttr-Track Format-185', + 'zExtAttr-White Balance-186', + 'zExtAttr-Aperture-187', + 'zExtAttr-BitRate-188', + 'zExtAttr-Exposure Bias-189', + 'zExtAttr-Frames Per Second-190', + 'zExtAttr-Shutter Speed-191', + 'zExtAttr-Slush Scene Bias-192', + 'zExtAttr-Slush Version-193', + 'zExtAttr-Slush Preset-194', + 'zExtAttr-Slush Warm Bias-195', + 'zAsset-Height-196', + 'zAddAssetAttr-Original Height-197', + 'zIntResou-UnOriented Height-198', + 'zAsset-Width-199', + 'zAddAssetAttr-Original Width-200', + 'zIntResou-UnOriented Width-201', + 'zAsset-Thumbnail Index-202', + 'zAddAssetAttr-Embedded Thumbnail Height-203', + 'zAddAssetAttr-Embedded Thumbnail Length-204', + 'zAddAssetAttr-Embedded Thumbnail Offset-205', + 'zAddAssetAttr-Embedded Thumbnail Width-206', + 'zAsset-Packed Acceptable Crop Rect-207', + 'zAsset-Packed Badge Attributes-208', + 'zAsset-Packed Preferred Crop Rect-209', + 'zAsset-Curation Score-210', + 'zAsset-Camera Processing Adjustment State-211', + 'zAsset-Depth Type-212', + 'zAsset-Is Magic Carpet-Quicktime_MOV-file-213', + 'zAddAssetAttr-Orig Resource Choice-214', + 'zAsset-Spatial Type-215', + 'zAddAssetAttr-Spatial Over Capture Group ID-216', + 'zAddAssetAttr-Place Annotation Data-217', + 'zAddAssetAttr-Distance Identity-HEX-218', + 'zAddAssetAttr-Edited IPTC Attributes-219', + 'zAddAssetAttr-Title-Comments via Cloud Website-220', + 'zAddAssetAttr-Accessibility Description-221', + 'zAddAssetAttr-Photo Stream Tag ID-222', + 'zAddAssetAttr-Share Type-223', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-224', + 'zAsset-Overall Aesthetic Score-225', + 'zAsset-zENT-226', + 'zAsset-zOPT-227', + 'zAsset-Master= zCldMast-zPK-228', + 'zAsset-Extended Attributes= zExtAttr-zPK-229', + 'zAsset-Import Session Key-230', + 'zAsset-Photo Analysis Attributes Key-231', + 'zAsset-FOK-Cloud Feed Asset Entry Key-232', + 'zAsset-Computed Attributes Asset Key-233', + 'zAsset-Promotion Score-234', + 'zAsset-Iconic Score-235', + 'zAsset-Media Analysis Attributes Key-236', + 'zAsset-Media Group UUID-237', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-238', + 'zAsset.Cloud Collection GUID-239', + 'zAddAssetAttr-zENT-240', + 'ZAddAssetAttr-zOPT-241', + 'zAddAssetAttr-zAsset= zAsset_zPK-242', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-243', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-244', + 'zAddAssetAttr-Public Global UUID-245', + 'zAddAssetAttr-Original Assets UUID-246', + 'zAddAssetAttr-Originating Asset Identifier-247', + 'zAddAssetAttr.Adjusted Fingerprint-248', + 'zCldMast-zPK= zAsset-Master-249', + 'zCldMast-zENT-250', + 'zCldMast-zOPT-251', + 'zCldMast-Moment Share Key= zShare-zPK-252', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-253', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-254', + 'zCldMast-Originating Asset ID-255', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-256', + 'CMzCldMastMedData-zENT-257', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-258', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-259', + 'AAAzCldMastMedData-zENT-260', + 'AAAzCldMastMedData-CldMast key-261', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-262', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-263', + 'zExtAttr-zENT-264', + 'zExtAttr-zOPT-265', + 'zExtAttr-Asset Key-266', + 'zIntResou-zPK-267', + 'zIntResou-zENT-268', + 'zIntResou-zOPT-269', + 'zIntResou-Asset= zAsset_zPK-270', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-271', + 'zMedAnlyAstAttr-zEnt-272', + 'zMedAnlyAstAttr-zOpt-273', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-274') + data_list = get_sqlite_db_records(source_path, query) - tlactivity = 'Ph50.1-Asset_IntResou-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No Internal Resource data available for iOS 17 PhotoData-Photos.sqlite') - - db.close() - return + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18', - zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18', - zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash', + zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash', CASE zIntResou.ZLOCALAVAILABILITY WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' @@ -4703,11 +4632,12 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_ zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Length', zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Length in 35MM', zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', - CASE zExtAttr.ZGENERATIVEAITYPE - WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0' + CASE zExtAttr.ZGENERATIVEAITYPE + WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0' + WHEN 2 THEN '2-CleanUp-SafetyFilter-2' ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' - END AS 'zExtAttr-Generative_AI_Type-iOS18', - zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18', + END AS 'zExtAttr-Generative_AI_Type', + zExtAttr.ZCREDIT AS 'zExtAttr-Credit', CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE WHEN 0 THEN '0-Back-Camera-Other-0' WHEN 1 THEN '1-Front-Camera-1' @@ -4718,7 +4648,7 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_ WHEN 1 THEN '1-Front-Camera-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' END AS 'zAddAssetAttr-Camera Captured Device', - zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier-iOS18', + zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier', CASE zAddAssetAttr.ZIMPORTEDBY WHEN 0 THEN '0-Cloud-Other-0' WHEN 1 THEN '1-Native-Back-Camera-1' @@ -4756,10 +4686,10 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_ zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' + WHEN 0 THEN '0-Not_Recently_Saved-0' + WHEN 1 THEN '1-Recently_Saved-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', + END AS 'zAsset-Is_Recently_Saved', CASE zAsset.ZSAVEDASSETTYPE WHEN 0 THEN '0-Saved-via-other-source-0' WHEN 1 THEN '1-StillTesting-1' @@ -4924,10 +4854,10 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_ WHEN 1 THEN '1-Video-1' END AS 'zAsset-Kind', CASE zAsset.ZISDETECTEDSCREENSHOT - WHEN 0 THEN '0-Not_Detected_Screenshot iOS18_Still_Testing-0' - WHEN 1 THEN '1-Detected_Screenshot iOS18_Still_Testing-1' + WHEN 0 THEN '0-Not_Screenshot-0' + WHEN 1 THEN '1-Screenshot-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' - END AS 'zAsset-Is_Detected_Screenshot-iOS18', + END AS 'zAsset-Is_Detected_Screenshot', CASE zAsset.ZKINDSUBTYPE WHEN 0 THEN '0-Still-Photo-0' WHEN 1 THEN '1-Panorama-1' @@ -5221,10 +5151,10 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_ zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', CASE zAsset.ZADJUSTMENTSSTATE WHEN 0 THEN '0-No-Adjustments-0' - WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2' - WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3' + WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2' + WHEN 3 THEN '3-Adjusted-Camera-lens-3' ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' - END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18', + END AS 'zAsset-Adjustments_State', DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18', zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', @@ -5370,11 +5300,6 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_ zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', - CASE zAddAssetAttr.ZIMAGEEMBEDDINGVERSION - WHEN 0 THEN '0-Obs_in_iOS18 still_testing-0' - WHEN 1 THEN '1-Obs_in_iOS18 still_testing-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMAGEEMBEDDINGVERSION || '' - END AS 'zAddAssetAttr-Image Embedding Version-iOS18', zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', @@ -5408,19 +5333,7 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_ zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18', zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version-iOS18', zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version-iOS18', - zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18', - zGenAsstDesc.ZASSET AS 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18', - zAsset.ZGENERATEDASSETDESCRIPTION AS 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18', - zGenAsstDesc.Z_PK AS 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18', - zGenAsstDesc.Z_ENT AS 'zGenAsstDesc-zENT-iOS18', - zGenAsstDesc.Z_OPT AS 'zGenAsstDesc-zOPT-iOS18', - DateTime(zGenAsstDesc.ZANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zGenAsstDesc-Analysis_Timestamp-iOS18', - CASE zGenAsstDesc.ZANALYSISSOURCETYPE - WHEN 0 THEN '0-NotYetObs iOS18_Still_Testing-0' - ELSE 'Unknown-New-Value!: ' || zGenAsstDesc.ZANALYSISSOURCETYPE || '' - END AS 'zGenAsstDesc-Analysis_Source_Type-iOS18', - zGenAsstDesc.ZANALYSISVERSION AS 'zGenAsstDesc-Analysis Version-iOS18', - zGenAsstDesc.ZDESCRIPTIONTEXT AS 'zGenAsstDesc-Description_Text-iOS18', + zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18', zAsset.Z_ENT AS 'zAsset-zENT', zAsset.Z_OPT AS 'zAsset-zOPT', zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', @@ -5486,415 +5399,378 @@ def get_ph50intresouoptimzdataphdapsql(files_found, report_folder, seeker, wrap_ LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES - LEFT JOIN ZGENERATEDASSETDESCRIPTION zGenAsstDesc ON zGenAsstDesc.Z_PK = zAsset.ZGENERATEDASSETDESCRIPTION ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], - row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], - row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], - row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], - row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], - row[308], row[309], row[310], row[311], row[312])) - - counter += 1 - - description = 'Parses iOS 18 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE' \ - ' and other tables. This and other related parsers should provide data for investigative' \ - ' analysis of assets being stored locally on the device verses assets being stored in' \ - ' iCloud Photos as the result of optimization. This is very large query and script,' \ - ' I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' - report = ArtifactHtmlReport('Ph50.1-Asset_IntResou-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph50.1-Asset_IntResou-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-4QueryStart-0', - 'zAsset-zPK-1', - 'zAddAssetAttr-zPK-2', - 'zAsset-UUID = store.cloudphotodb-3', - 'zAddAssetAttr-Original Stable Hash-iOS18-4', - 'zIntResou-Fingerprint-5', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-6', - 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-7', - 'zIntResou-Stable Hash-iOS18-8', - 'zIntResou-Local Availability-4QueryStart-9', - 'zIntResou-Remote Availability-4QueryStart-10', - 'zIntResou-Resource Type-4QueryStart-11', - 'zIntResou-Datastore Sub-Type-4QueryStart-12', - 'zIntResou-Recipe ID-4QueryStart-13', - 'zAsset Complete-14', - 'zAsset-Bundle Scope-15', - 'zAsset-Syndication State-16', - 'zAsset-Cloud is My Asset-17', - 'zAsset-Cloud is deletable-Asset-18', - 'zAsset-Cloud_Local_State-19', - 'zAsset-Visibility State-20', - 'zExtAttr-Camera Make-21', - 'zExtAttr-Camera Model-22', - 'zExtAttr-Lens Model-23', - 'zExtAttr-Flash Fired-24', - 'zExtAttr-Focal Length-25', - 'zExtAttr-Focal Length in 35MM-26', - 'zExtAttr-Digital Zoom Ratio-27', - 'zExtAttr-Generative_AI_Type-iOS18-28', - 'zExtAttr-Credit-iOS18-29', - 'zAsset-Derived Camera Capture Device-30', - 'zAddAssetAttr-Camera Captured Device-31', - 'zAsset-Capture_Session_Identifier-iOS18-32', - 'zAddAssetAttr-Imported by-33', - 'zCldMast-Imported By-34', - 'zAddAssetAttr.Imported by Bundle Identifier-35', - 'zAddAssetAttr-Imported By Display Name-36', - 'zCldMast-Imported by Bundle ID-37', - 'zCldMast-Imported by Display Name-38', - 'zAsset-Is_Recently_Saved-iOS18-39', - 'zAsset-Saved Asset Type-40', - 'zAsset-Directory-Path-41', - 'zAsset-Filename-42', - 'zAddAssetAttr- Original Filename-43', - 'zCldMast- Original Filename-44', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-45', - 'zAsset-Active Library Scope Participation State-46', - 'zAsset-Library Scope Share State- StillTesting-47', - 'zAsset-Added Date-48', - 'zAsset- SortToken -CameraRoll-49', - 'zAddAssetAttr-Date Created Source-50', - 'zAsset-Date Created-51', - 'zCldMast-Creation Date-52', - 'zIntResou-CldMst Date Created-53', - 'zAddAssetAttr-Time Zone Name-54', - 'zAddAssetAttr-Time Zone Offset-55', - 'zAddAssetAttr-Inferred Time Zone Offset-56', - 'zAddAssetAttr-EXIF-String-57', - 'zAsset-Modification Date-58', - 'zAsset-Last Shared Date-59', - 'zCldMast-Cloud Local State-60', - 'zCldMast-Import Date-61', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-62', - 'zAddAssetAttr-Import Session ID-63', - 'zAddAssetAttr-Alt Import Image Date-64', - 'zCldMast-Import Session ID- AirDrop-StillTesting-65', - 'zAsset-Cloud Batch Publish Date-66', - 'zAsset-Cloud Server Publish Date-67', - 'zAsset-Cloud Download Requests-68', - 'zAsset-Cloud Batch ID-69', - 'zAddAssetAttr-Upload Attempts-70', - 'zAsset-Latitude-71', - 'zExtAttr-Latitude-72', - 'zAsset-Longitude-73', - 'zExtAttr-Longitude-74', - 'zAddAssetAttr-GPS Horizontal Accuracy-75', - 'zAddAssetAttr-Location Hash-76', - 'zAddAssetAttr-Shifted Location Valid-77', - 'zAddAssetAttr-Shifted Location Data-78', - 'zAddAssetAttr-Reverse Location Is Valid-79', - 'zAddAssetAttr-Reverse Location Data-80', - 'AAAzCldMastMedData-zOPT-81', - 'zAddAssetAttr-Media Metadata Type-82', - 'AAAzCldMastMedData-Data-83', - 'CldMasterzCldMastMedData-zOPT-84', - 'zCldMast-Media Metadata Type-85', - 'CMzCldMastMedData-Data-86', - 'zAsset-Search Index Rebuild State-87', - 'zAddAssetAttr-Syndication History-88', - 'zMedAnlyAstAttr-Syndication Processing Version-89', - 'zMedAnlyAstAttr-Syndication Processing Value-90', - 'zAsset-Orientation-91', - 'zAddAssetAttr-Original Orientation-92', - 'zAsset-Kind-93', - 'zAsset-Is_Detected_Screenshot-iOS18-94', - 'zAsset-Kind-Sub-Type-95', - 'zAddAssetAttr-Cloud Kind Sub Type-96', - 'zAsset-Playback Style-97', - 'zAsset-Playback Variation-98', - 'zAddAssetAttr-View_Presentation-iOS18-99', - 'zAsset-Video Duration-100', - 'zExtAttr-Duration-101', - 'zAsset-Video CP Duration-102', - 'zAddAssetAttr-Video CP Duration Time Scale-103', - 'zAsset-Video CP Visibility State-104', - 'zAddAssetAttr-Video CP Display Value-105', - 'zAddAssetAttr-Video CP Display Time Scale-106', - 'zIntResou-Datastore Class ID-107', - 'zAsset-Cloud Placeholder Kind-108', - 'zIntResou-Local Availability-109', - 'zIntResou-Local Availability Target-110', - 'zIntResou-Cloud Local State-111', - 'zIntResou-Remote Availability-112', - 'zIntResou-Remote Availability Target-113', - 'zIntResou-Transient Cloud Master-114', - 'zIntResou-Side Car Index-115', - 'zIntResou- File ID-116', - 'zIntResou-Version-117', - 'zAddAssetAttr- Original-File-Size-118', - 'zIntResou-Resource Type-119', - 'zIntResou-Datastore Sub-Type-120', - 'zIntResou-Cloud Source Type-121', - 'zIntResou-Data Length-122', - 'zIntResou-Recipe ID-123', - 'zIntResou-Cloud Last Prefetch Date-124', - 'zIntResou-Cloud Prefetch Count-125', - 'zIntResou- Cloud-Last-OnDemand Download-Date-126', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-127', - 'zIntResou-Compact-UTI-128', - 'zAsset-Uniform Type ID-129', - 'zAsset-Original Color Space-130', - 'zCldMast-Uniform_Type_ID-131', - 'zCldMast-Full Size JPEG Source-132', - 'zAsset-HDR Gain-133', - 'zAsset-zHDR_Type-134', - 'zExtAttr-Codec-135', - 'zIntResou-Codec Four Char Code Name-136', - 'zCldMast-Codec Name-137', - 'zCldMast-Video Frame Rate-138', - 'zCldMast-Placeholder State-139', - 'zAsset-Depth_Type-140', - 'zAsset-Avalanche UUID-141', - 'zAsset-Avalanche_Kind-iOS18-142', - 'zAsset-Avalanche_Pick_Type-BurstAsset-143', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-144', - 'zAddAssetAttr-Cloud Recovery State-145', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-146', - 'zAsset-Deferred Processing Needed-147', - 'zAsset-Video Deferred Processing Needed-148', - 'zAddAssetAttr-Deferred Photo Identifier-149', - 'zAddAssetAttr-Deferred Processing Candidate Options-150', - 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-151', - 'zAsset-Adjustment Timestamp-152', - 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-153', - 'zAddAssetAttr-Editor Bundle ID-154', - 'zAddAssetAttr-Montage-155', - 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-156', - 'zAsset-Favorite-157', - 'zAsset-Hidden-158', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-159', - 'zAsset-Trashed Date-160', - 'zAsset-Trashed by Participant= zSharePartic_zPK-161', - 'zAsset-Delete-Reason-162', - 'zIntResou-Trash State-163', - 'zIntResou-Trashed Date-164', - 'zAsset-Cloud Delete State-165', - 'zIntResou-Cloud Delete State-166', - 'zAddAssetAttr-PTP Trashed State-167', - 'zIntResou-PTP Trashed State-168', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-169', - 'zMedAnlyAstAttr-Media Analysis Timestamp-170', - 'zAsset-Analysis State Modification Date-171', - 'zAddAssetAttr- Pending View Count-172', - 'zAddAssetAttr- View Count-173', - 'zAddAssetAttr- Pending Play Count-174', - 'zAddAssetAttr- Play Count-175', - 'zAddAssetAttr- Pending Share Count-176', - 'zAddAssetAttr- Share Count-177', - 'zAddAssetAttr-Allowed for Analysis-178', - 'zAddAssetAttr-Scene Analysis Version-179', - 'zAddAssetAttr-Scene Analysis is From Preview-180', - 'zAddAssetAttr-Scene Analysis Timestamp-181', - 'zAsset-Duplication Asset Visibility State-182', - 'zAddAssetAttr-Destination Asset Copy State-183', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-184', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-185', - 'zCldMast-Source Master For Duplication Scope ID-186', - 'zAddAssetAttr-Source Asset For Duplication ID-187', - 'zCldMast-Source Master for Duplication ID-188', - 'zAddAssetAttr-Variation Suggestions States-189', - 'zAsset-High Frame Rate State-190', - 'zAsset-Video Key Frame Time Scale-191', - 'zAsset-Video Key Frame Value-192', - 'zAsset-Current_Sleet_Cast-iOS18-193', - 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-194', - 'zExtAttr-Sleet_Rendering_Version-iOS18-195', - 'zExtAttr-Sleet_Intensity-iOS18-196', - 'zExtAttr-Sleet_Tone_Bias-iOS18-197', - 'zExtAttr-Sleet_Color_Bias-iOS18-198', - 'zExtAttr-Sleet_Cast-iOS18-199', - 'zExtAttr-ISO-200', - 'zExtAttr-Metering Mode-201', - 'zExtAttr-Sample Rate-202', - 'zExtAttr-Track Format-203', - 'zExtAttr-White Balance-204', - 'zExtAttr-Aperture-205', - 'zExtAttr-BitRate-206', - 'zExtAttr-Exposure Bias-207', - 'zExtAttr-Frames Per Second-208', - 'zExtAttr-Shutter Speed-209', - 'zExtAttr-Slush Scene Bias-210', - 'zExtAttr-Slush Version-211', - 'zExtAttr-Slush Preset-212', - 'zExtAttr-Slush Warm Bias-213', - 'zAsset-Height-214', - 'zAddAssetAttr-Original Height-215', - 'zIntResou-UnOriented Height-216', - 'zAsset-Width-217', - 'zAddAssetAttr-Original Width-218', - 'zIntResou-UnOriented Width-219', - 'zAsset-Thumbnail Index-220', - 'zAddAssetAttr-Embedded Thumbnail Height-221', - 'zAddAssetAttr-Embedded Thumbnail Length-222', - 'zAddAssetAttr-Embedded Thumbnail Offset-223', - 'zAddAssetAttr-Embedded Thumbnail Width-224', - 'zAddAssetAttr-Image Embedding Version-iOS18-225', - 'zAsset-Packed Acceptable Crop Rect-226', - 'zAsset-Packed Badge Attributes-227', - 'zAsset-Packed Preferred Crop Rect-228', - 'zAsset-Curation Score-229', - 'zAsset-Camera Processing Adjustment State-230', - 'zAsset-Depth Type-231', - 'zAsset-Is Magic Carpet-Quicktime_MOV-file-232', - 'zAddAssetAttr-Orig Resource Choice-233', - 'zAsset-Spatial Type-234', - 'zAddAssetAttr-Spatial Over Capture Group ID-235', - 'zAddAssetAttr-Place Annotation Data-236', - 'zAddAssetAttr-Distance Identity-HEX-237', - 'zAddAssetAttr-Edited IPTC Attributes-238', - 'zAddAssetAttr-Title-Comments via Cloud Website-239', - 'zAddAssetAttr-Accessibility Description-240', - 'zAddAssetAttr-Photo Stream Tag ID-241', - 'zAddAssetAttr-Share Type-242', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-243', - 'zAsset-Overall Aesthetic Score-244', - 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18-245', - 'zMedAnlyAstAttr-Image_Caption_Version-iOS18-246', - 'zMedAnlyAstAttr-Video_Caption_Version-iOS18-247', - 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18-248', - 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18-249', - 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18-250', - 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18-251', - 'zGenAsstDesc-zENT-iOS18-252', - 'zGenAsstDesc-zOPT-iOS18-253', - 'zGenAsstDesc-Analysis_Timestamp-iOS18-254', - 'zGenAsstDesc-Analysis_Source_Type-iOS18-255', - 'zGenAsstDesc-Analysis Version-iOS18-256', - 'zGenAsstDesc-Description_Text-iOS18-257', - 'zAsset-zENT-258', - 'zAsset-zOPT-259', - 'zAsset-Master= zCldMast-zPK-260', - 'zAsset-Extended Attributes= zExtAttr-zPK-261', - 'zAsset-Import Session Key-262', - 'zAsset-Photo Analysis Attributes Key-263', - 'zAsset-FOK-Cloud Feed Asset Entry Key-264', - 'zAsset-Computed Attributes Asset Key-265', - 'zAsset-Promotion Score-266', - 'zAsset-Iconic Score-267', - 'zAsset-Media Analysis Attributes Key-268', - 'zAsset-Media Group UUID-269', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-270', - 'zAsset.Cloud Collection GUID-271', - 'zAddAssetAttr-zENT-272', - 'ZAddAssetAttr-zOPT-273', - 'zAddAssetAttr-zAsset= zAsset_zPK-274', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-275', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-276', - 'zAddAssetAttr-Public Global UUID-277', - 'zAddAssetAttr-Original Assets UUID-278', - 'zAddAssetAttr-Originating Asset Identifier-279', - 'zCldMast-zPK= zAsset-Master-280', - 'zCldMast-zENT-281', - 'zCldMast-zOPT-282', - 'zCldMast-Moment Share Key= zShare-zPK-283', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-284', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-285', - 'zCldMast-Originating Asset ID-286', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-287', - 'CMzCldMastMedData-zENT-288', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-289', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-290', - 'AAAzCldMastMedData-zENT-291', - 'AAAzCldMastMedData-CldMast key-292', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-293', - 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18-294', - 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-295', - 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-296', - 'zCompSyncAttr-zENT-iOS18-297', - 'zCompSyncAttr-zOPT-iOS18-298', - 'zCompSyncAttr-Local_Analysis_Stage-iOS18-299', - 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-300', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-301', - 'zExtAttr-zENT-302', - 'zExtAttr-zOPT-303', - 'zExtAttr-Asset Key-304', - 'zIntResou-zPK-305', - 'zIntResou-zENT-306', - 'zIntResou-zOPT-307', - 'zIntResou-Asset= zAsset_zPK-308', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-309', - 'zMedAnlyAstAttr-zEnt-310', - 'zMedAnlyAstAttr-zOpt-311', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-312') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph50.1-Asset_IntResou-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) + ''' - tlactivity = 'Ph50.1-Asset_IntResou-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No Internal Resource data available for iOS 18 PhotoData-Photos.sqlite') - - db.close() - return + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302])) + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + 'zAsset-zPK-1', + 'zAddAssetAttr-zPK-2', + 'zAsset-UUID = store.cloudphotodb-3', + 'zAddAssetAttr-Original Stable Hash-iOS18-4', + 'zIntResou-Fingerprint-5', + 'zAddAssetAttr.Adjusted Stable Hash-iOS18-6', + 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-7', + 'zIntResou-Stable Hash-iOS18-8', + 'zIntResou-Local Availability-4QueryStart-9', + 'zIntResou-Remote Availability-4QueryStart-10', + 'zIntResou-Resource Type-4QueryStart-11', + 'zIntResou-Datastore Sub-Type-4QueryStart-12', + 'zIntResou-Recipe ID-4QueryStart-13', + 'zAsset Complete-14', + 'zAsset-Bundle Scope-15', + 'zAsset-Syndication State-16', + 'zAsset-Cloud is My Asset-17', + 'zAsset-Cloud is deletable-Asset-18', + 'zAsset-Cloud_Local_State-19', + 'zAsset-Visibility State-20', + 'zExtAttr-Camera Make-21', + 'zExtAttr-Camera Model-22', + 'zExtAttr-Lens Model-23', + 'zExtAttr-Flash Fired-24', + 'zExtAttr-Focal Length-25', + 'zExtAttr-Focal Length in 35MM-26', + 'zExtAttr-Digital Zoom Ratio-27', + 'zExtAttr-Generative_AI_Type-iOS18-28', + 'zExtAttr-Credit-iOS18-29', + 'zAsset-Derived Camera Capture Device-30', + 'zAddAssetAttr-Camera Captured Device-31', + 'zAsset-Capture_Session_Identifier-iOS18-32', + 'zAddAssetAttr-Imported by-33', + 'zCldMast-Imported By-34', + 'zAddAssetAttr.Imported by Bundle Identifier-35', + 'zAddAssetAttr-Imported By Display Name-36', + 'zCldMast-Imported by Bundle ID-37', + 'zCldMast-Imported by Display Name-38', + 'zAsset-Is_Recently_Saved-iOS18-39', + 'zAsset-Saved Asset Type-40', + 'zAsset-Directory-Path-41', + 'zAsset-Filename-42', + 'zAddAssetAttr- Original Filename-43', + 'zCldMast- Original Filename-44', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-45', + 'zAsset-Active Library Scope Participation State-46', + 'zAsset-Library Scope Share State- StillTesting-47', + ('zAsset-Added Date-48', 'datetime'), + ('zAsset- SortToken -CameraRoll-49', 'datetime'), + ('zAddAssetAttr-Date Created Source-50', 'datetime'), + ('zAsset-Date Created-51', 'datetime'), + ('zCldMast-Creation Date-52', 'datetime'), + ('zIntResou-CldMst Date Created-53', 'datetime'), + 'zAddAssetAttr-Time Zone Name-54', + 'zAddAssetAttr-Time Zone Offset-55', + 'zAddAssetAttr-Inferred Time Zone Offset-56', + 'zAddAssetAttr-EXIF-String-57', + ('zAsset-Modification Date-58', 'datetime'), + ('zAsset-Last Shared Date-59', 'datetime'), + 'zCldMast-Cloud Local State-60', + ('zCldMast-Import Date-61', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-62', 'datetime'), + 'zAddAssetAttr-Import Session ID-63', + ('zAddAssetAttr-Alt Import Image Date-64', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-65', + ('zAsset-Cloud Batch Publish Date-66', 'datetime'), + ('zAsset-Cloud Server Publish Date-67', 'datetime'), + 'zAsset-Cloud Download Requests-68', + 'zAsset-Cloud Batch ID-69', + 'zAddAssetAttr-Upload Attempts-70', + 'zAsset-Latitude-71', + 'zExtAttr-Latitude-72', + 'zAsset-Longitude-73', + 'zExtAttr-Longitude-74', + 'zAddAssetAttr-GPS Horizontal Accuracy-75', + 'zAddAssetAttr-Location Hash-76', + 'zAddAssetAttr-Shifted Location Valid-77', + 'zAddAssetAttr-Shifted Location Data-78', + 'zAddAssetAttr-Reverse Location Is Valid-79', + 'zAddAssetAttr-Reverse Location Data-80', + 'AAAzCldMastMedData-zOPT-81', + 'zAddAssetAttr-Media Metadata Type-82', + 'AAAzCldMastMedData-Data-83', + 'CldMasterzCldMastMedData-zOPT-84', + 'zCldMast-Media Metadata Type-85', + 'CMzCldMastMedData-Data-86', + 'zAsset-Search Index Rebuild State-87', + 'zAddAssetAttr-Syndication History-88', + 'zMedAnlyAstAttr-Syndication Processing Version-89', + 'zMedAnlyAstAttr-Syndication Processing Value-90', + 'zAsset-Orientation-91', + 'zAddAssetAttr-Original Orientation-92', + 'zAsset-Kind-93', + 'zAsset-Is_Detected_Screenshot-iOS18-94', + 'zAsset-Kind-Sub-Type-95', + 'zAddAssetAttr-Cloud Kind Sub Type-96', + 'zAsset-Playback Style-97', + 'zAsset-Playback Variation-98', + 'zAddAssetAttr-View_Presentation-iOS18-99', + 'zAsset-Video Duration-100', + 'zExtAttr-Duration-101', + 'zAsset-Video CP Duration-102', + 'zAddAssetAttr-Video CP Duration Time Scale-103', + 'zAsset-Video CP Visibility State-104', + 'zAddAssetAttr-Video CP Display Value-105', + 'zAddAssetAttr-Video CP Display Time Scale-106', + 'zIntResou-Datastore Class ID-107', + 'zAsset-Cloud Placeholder Kind-108', + 'zIntResou-Local Availability-109', + 'zIntResou-Local Availability Target-110', + 'zIntResou-Cloud Local State-111', + 'zIntResou-Remote Availability-112', + 'zIntResou-Remote Availability Target-113', + 'zIntResou-Transient Cloud Master-114', + 'zIntResou-Side Car Index-115', + 'zIntResou- File ID-116', + 'zIntResou-Version-117', + 'zAddAssetAttr- Original-File-Size-118', + 'zIntResou-Resource Type-119', + 'zIntResou-Datastore Sub-Type-120', + 'zIntResou-Cloud Source Type-121', + 'zIntResou-Data Length-122', + 'zIntResou-Recipe ID-123', + ('zIntResou-Cloud Last Prefetch Date-124', 'datetime'), + 'zIntResou-Cloud Prefetch Count-125', + ('zIntResou- Cloud-Last-OnDemand Download-Date-126', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-127', + 'zIntResou-Compact-UTI-128', + 'zAsset-Uniform Type ID-129', + 'zAsset-Original Color Space-130', + 'zCldMast-Uniform_Type_ID-131', + 'zCldMast-Full Size JPEG Source-132', + 'zAsset-HDR Gain-133', + 'zAsset-zHDR_Type-134', + 'zExtAttr-Codec-135', + 'zIntResou-Codec Four Char Code Name-136', + 'zCldMast-Codec Name-137', + 'zCldMast-Video Frame Rate-138', + 'zCldMast-Placeholder State-139', + 'zAsset-Depth_Type-140', + 'zAsset-Avalanche UUID-141', + 'zAsset-Avalanche_Kind-iOS18-142', + 'zAsset-Avalanche_Pick_Type-BurstAsset-143', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-144', + 'zAddAssetAttr-Cloud Recovery State-145', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-146', + 'zAsset-Deferred Processing Needed-147', + 'zAsset-Video Deferred Processing Needed-148', + 'zAddAssetAttr-Deferred Photo Identifier-149', + 'zAddAssetAttr-Deferred Processing Candidate Options-150', + 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-151', + ('zAsset-Adjustment Timestamp-152', 'datetime'), + 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-153', + 'zAddAssetAttr-Editor Bundle ID-154', + 'zAddAssetAttr-Montage-155', + 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-156', + 'zAsset-Favorite-157', + 'zAsset-Hidden-158', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-159', + ('zAsset-Trashed Date-160', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-161', + 'zAsset-Delete-Reason-162', + 'zIntResou-Trash State-163', + ('zIntResou-Trashed Date-164', 'datetime'), + 'zAsset-Cloud Delete State-165', + 'zIntResou-Cloud Delete State-166', + 'zAddAssetAttr-PTP Trashed State-167', + 'zIntResou-PTP Trashed State-168', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-169', + ('zMedAnlyAstAttr-Media Analysis Timestamp-170', 'datetime'), + ('zAsset-Analysis State Modification Date-171', 'datetime'), + 'zAddAssetAttr- Pending View Count-172', + 'zAddAssetAttr- View Count-173', + 'zAddAssetAttr- Pending Play Count-174', + 'zAddAssetAttr- Play Count-175', + 'zAddAssetAttr- Pending Share Count-176', + 'zAddAssetAttr- Share Count-177', + 'zAddAssetAttr-Allowed for Analysis-178', + 'zAddAssetAttr-Scene Analysis Version-179', + 'zAddAssetAttr-Scene Analysis is From Preview-180', + ('zAddAssetAttr-Scene Analysis Timestamp-181', 'datetime'), + 'zAsset-Duplication Asset Visibility State-182', + 'zAddAssetAttr-Destination Asset Copy State-183', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-184', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-185', + 'zCldMast-Source Master For Duplication Scope ID-186', + 'zAddAssetAttr-Source Asset For Duplication ID-187', + 'zCldMast-Source Master for Duplication ID-188', + 'zAddAssetAttr-Variation Suggestions States-189', + 'zAsset-High Frame Rate State-190', + 'zAsset-Video Key Frame Time Scale-191', + 'zAsset-Video Key Frame Value-192', + 'zAsset-Current_Sleet_Cast-iOS18-193', + 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-194', + 'zExtAttr-Sleet_Rendering_Version-iOS18-195', + 'zExtAttr-Sleet_Intensity-iOS18-196', + 'zExtAttr-Sleet_Tone_Bias-iOS18-197', + 'zExtAttr-Sleet_Color_Bias-iOS18-198', + 'zExtAttr-Sleet_Cast-iOS18-199', + 'zExtAttr-ISO-200', + 'zExtAttr-Metering Mode-201', + 'zExtAttr-Sample Rate-202', + 'zExtAttr-Track Format-203', + 'zExtAttr-White Balance-204', + 'zExtAttr-Aperture-205', + 'zExtAttr-BitRate-206', + 'zExtAttr-Exposure Bias-207', + 'zExtAttr-Frames Per Second-208', + 'zExtAttr-Shutter Speed-209', + 'zExtAttr-Slush Scene Bias-210', + 'zExtAttr-Slush Version-211', + 'zExtAttr-Slush Preset-212', + 'zExtAttr-Slush Warm Bias-213', + 'zAsset-Height-214', + 'zAddAssetAttr-Original Height-215', + 'zIntResou-UnOriented Height-216', + 'zAsset-Width-217', + 'zAddAssetAttr-Original Width-218', + 'zIntResou-UnOriented Width-219', + 'zAsset-Thumbnail Index-220', + 'zAddAssetAttr-Embedded Thumbnail Height-221', + 'zAddAssetAttr-Embedded Thumbnail Length-222', + 'zAddAssetAttr-Embedded Thumbnail Offset-223', + 'zAddAssetAttr-Embedded Thumbnail Width-224', + 'zAsset-Packed Acceptable Crop Rect-226', + 'zAsset-Packed Badge Attributes-227', + 'zAsset-Packed Preferred Crop Rect-228', + 'zAsset-Curation Score-229', + 'zAsset-Camera Processing Adjustment State-230', + 'zAsset-Depth Type-231', + 'zAsset-Is Magic Carpet-Quicktime_MOV-file-232', + 'zAddAssetAttr-Orig Resource Choice-233', + 'zAsset-Spatial Type-234', + 'zAddAssetAttr-Spatial Over Capture Group ID-235', + 'zAddAssetAttr-Place Annotation Data-236', + 'zAddAssetAttr-Distance Identity-HEX-237', + 'zAddAssetAttr-Edited IPTC Attributes-238', + 'zAddAssetAttr-Title-Comments via Cloud Website-239', + 'zAddAssetAttr-Accessibility Description-240', + 'zAddAssetAttr-Photo Stream Tag ID-241', + 'zAddAssetAttr-Share Type-242', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-243', + 'zAsset-Overall Aesthetic Score-244', + 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18-245', + 'zMedAnlyAstAttr-Image_Caption_Version-iOS18-246', + 'zMedAnlyAstAttr-Video_Caption_Version-iOS18-247', + 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18-248', + 'zAsset-zENT-249', + 'zAsset-zOPT-250', + 'zAsset-Master= zCldMast-zPK-251', + 'zAsset-Extended Attributes= zExtAttr-zPK-252', + 'zAsset-Import Session Key-253', + 'zAsset-Photo Analysis Attributes Key-254', + 'zAsset-FOK-Cloud Feed Asset Entry Key-255', + 'zAsset-Computed Attributes Asset Key-256', + 'zAsset-Promotion Score-257', + 'zAsset-Iconic Score-258', + 'zAsset-Media Analysis Attributes Key-259', + 'zAsset-Media Group UUID-260', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-261', + 'zAsset.Cloud Collection GUID-262', + 'zAddAssetAttr-zENT-263', + 'ZAddAssetAttr-zOPT-264', + 'zAddAssetAttr-zAsset= zAsset_zPK-265', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-266', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-267', + 'zAddAssetAttr-Public Global UUID-268', + 'zAddAssetAttr-Original Assets UUID-269', + 'zAddAssetAttr-Originating Asset Identifier-270', + 'zCldMast-zPK= zAsset-Master-271', + 'zCldMast-zENT-272', + 'zCldMast-zOPT-273', + 'zCldMast-Moment Share Key= zShare-zPK-274', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-275', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-276', + 'zCldMast-Originating Asset ID-277', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-278', + 'CMzCldMastMedData-zENT-279', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-280', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-281', + 'AAAzCldMastMedData-zENT-282', + 'AAAzCldMastMedData-CldMast key-283', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-284', + 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-285', + 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-286', + 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-287', + 'zCompSyncAttr-zENT-iOS18-288', + 'zCompSyncAttr-zOPT-iOS18-289', + 'zCompSyncAttr-Local_Analysis_Stage-iOS18-290', + 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-291', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-292', + 'zExtAttr-zENT-293', + 'zExtAttr-zOPT-294', + 'zExtAttr-Asset Key-295', + 'zIntResou-zPK-296', + 'zIntResou-zENT-297', + 'zIntResou-zOPT-298', + 'zIntResou-Asset= zAsset_zPK-299', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-300', + 'zMedAnlyAstAttr-zEnt-301', + 'zMedAnlyAstAttr-zOpt-302', + 'zMedAnlyAstAttr-Asset= zAsset-Zpk-303') + data_list = get_sqlite_db_records(source_path, query) -def get_ph50intresouoptimzdatasyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset): + return data_headers, data_list, source_path - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph50_2AssetIntResouSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("13.7"): - logfunc("Unsupported version for SyndicationPL-Photos.sqlite ZINTERNALRESOURCE table data from iOS " + iosversion) + logfunc("Unsupported version for SyndicationPL-Photos.sqlite from iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -6612,316 +6488,291 @@ def get_ph50intresouoptimzdatasyndpl(files_found, report_folder, seeker, wrap_te LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238])) - - counter += 1 + ''' - description = 'Parses iOS 14 asset records from Syndication.photos.library-database-Photos.sqlite' \ - ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide' \ - ' data for investigative analysis of assets being stored locally on the device verses' \ - ' assets being stored in iCloud Photos as the result of optimization. This is very' \ - ' large query and script, I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' - report = ArtifactHtmlReport('Ph50.2-Asset_IntResou-SyndPL') - report.start_artifact_report(report_folder, 'Ph50.2-Asset_IntResou-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-4QueryStart-0', - 'zAsset-zPK-7', - 'zAddAssetAttr-zPK-8', - 'zAsset-UUID = store.cloudphotodb-9', - 'zAddAssetAttr-Master Fingerprint-10', - 'zIntResou-Fingerprint-11', - 'zIntResou-Local Availability-4QueryStart-1', - 'zIntResou-Remote Availability-4QueryStart-2', - 'zIntResou-Resource Type-4QueryStart-3', - 'zIntResou-Datastore Sub-Type-4QueryStart-4', - 'zIntResou-Recipe ID-4QueryStart-5', - 'zAsset Complete-6', - 'zAsset-Cloud is My Asset-12', - 'zAsset-Cloud is deletable-Asset-13', - 'zAsset-Cloud_Local_State-14', - 'zAsset-Visibility State-15', - 'zExtAttr-Camera Make-16', - 'zExtAttr-Camera Model-17', - 'zExtAttr-Lens Model-18', - 'zExtAttr-Flash Fired-19', - 'zExtAttr-Focal Lenght-20', - 'zAsset-Derived Camera Capture Device-21', - 'zAddAssetAttr-Camera Captured Device-22', - 'zAddAssetAttr-Imported by-23', - 'zCldMast-Imported By-24', - 'zAddAssetAttr-Creator Bundle ID-25', - 'zAddAssetAttr-Imported By Display Name-26', - 'zCldMast-Imported by Bundle ID-27', - 'zCldMast-Imported by Display Name-28', - 'zAsset-Saved Asset Type-29', - 'zAsset-Directory-Path-30', - 'zAsset-Filename-31', - 'zAddAssetAttr- Original Filename-32', - 'zCldMast- Original Filename-33', - 'zAsset-Added Date-34', - 'zAsset- SortToken -CameraRoll-35', - 'zAsset-Date Created-36', - 'zCldMast-Creation Date-37', - 'zIntResou-CldMst Date Created-38', - 'zAddAssetAttr-Time Zone Name-39', - 'zAddAssetAttr-Time Zone Offset-40', - 'zAddAssetAttr-Inferred Time Zone Offset-41', - 'zAddAssetAttr-EXIF-String-42', - 'zAsset-Modification Date-43', - 'zAsset-Last Shared Date-44', - 'zCldMast-Cloud Local State-45', - 'zCldMast-Import Date-46', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', - 'zAddAssetAttr-Import Session ID-48', - 'zAddAssetAttr-Alt Import Image Date-49', - 'zCldMast-Import Session ID- AirDrop-StillTesting-50', - 'zAsset-Cloud Batch Publish Date-51', - 'zAsset-Cloud Server Publish Date-52', - 'zAsset-Cloud Download Requests-53', - 'zAsset-Cloud Batch ID-54', - 'zAddAssetAttr-Upload Attempts-55', - 'zAsset-Latitude-56', - 'zExtAttr-Latitude-57', - 'zAsset-Longitude-58', - 'zExtAttr-Longitude-59', - 'zAddAssetAttr-GPS Horizontal Accuracy-60', - 'zAddAssetAttr-Location Hash-61', - 'zAddAssetAttr-Shifted Location Valid-62', - 'zAddAssetAttr-Shifted Location Data-63', - 'zAddAssetAttr-Reverse Location Is Valid-64', - 'zAddAssetAttr-Reverse Location Data-65', - 'AAAzCldMastMedData-zOPT-66', - 'zAddAssetAttr-Media Metadata Type-67', - 'AAAzCldMastMedData-Data-68', - 'CldMasterzCldMastMedData-zOPT-69', - 'zCldMast-Media Metadata Type-70', - 'CMzCldMastMedData-Data-71', - 'zAsset-Orientation-72', - 'zAddAssetAttr-Original Orientation-73', - 'zAsset-Kind-74', - 'zAsset-Kind-Sub-Type-75', - 'zAddAssetAttr-Cloud Kind Sub Type-76', - 'zAsset-Playback Style-77', - 'zAsset-Playback Variation-78', - 'zAsset-Video Duration-79', - 'zExtAttr-Duration-80', - 'zAsset-Video CP Duration-81', - 'zAddAssetAttr-Video CP Duration Time Scale-82', - 'zAsset-Video CP Visibility State-83', - 'zAddAssetAttr-Video CP Display Value-84', - 'zAddAssetAttr-Video CP Display Time Scale-85', - 'zIntResou-Datastore Class ID-86', - 'zAsset-Cloud Placeholder Kind-87', - 'zIntResou-Local Availability-88', - 'zIntResou-Local Availability Target-89', - 'zIntResou-Cloud Local State-90', - 'zIntResou-Remote Availability-91', - 'zIntResou-Remote Availability Target-92', - 'zIntResou-Transient Cloud Master-93', - 'zIntResou-Side Car Index-94', - 'zIntResou- File ID-95', - 'zIntResou-Version-96', - 'zAddAssetAttr- Original-File-Size-97', - 'zIntResou-Resource Type-98', - 'zIntResou-Datastore Sub-Type-99', - 'zIntResou-Cloud Source Type-100', - 'zIntResou-Data Length-101', - 'zIntResou-Recipe ID-102', - 'zIntResou-Cloud Last Prefetch Date-103', - 'zIntResou-Cloud Prefetch Count-104', - 'zIntResou- Cloud-Last-OnDemand Download-Date-105', - 'zAsset-Uniform Type ID-106', - 'zAsset-Original Color Space-107', - 'zCldMast-Uniform_Type_ID-108', - 'zCldMast-Full Size JPEG Source-109', - 'zAsset-HDR Gain-110', - 'zExtAttr-Codec-111', - 'zCldMast-Codec Name-112', - 'zCldMast-Video Frame Rate-113', - 'zCldMast-Placeholder State-114', - 'zAsset-Depth_Type-115', - 'zAsset-Avalanche UUID-116', - 'zAsset-Avalanche_Pick_Type-BurstAsset-117', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-118', - 'zAddAssetAttr-Cloud Recovery State-119', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-120', - 'zAsset-Deferred Processing Needed-121', - 'zAddAssetAttr-Deferred Photo Identifier-122', - 'zAddAssetAttr-Deferred Processing Candidate Options-123', - 'zAsset-Has Adjustments-Camera-Effects-Filters-124', - 'zAsset-Adjustment Timestamp-125', - 'zAddAssetAttr-Editor Bundle ID-126', - 'zAddAssetAttr-Montage-127', - 'zAsset-Favorite-128', - 'zAsset-Hidden-129', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-130', - 'zAsset-Trashed Date-131', - 'zIntResou-Trash State-132', - 'zIntResou-Trashed Date-133', - 'zAsset-Cloud Delete State-134', - 'zIntResou-Cloud Delete State-135', - 'zAddAssetAttr-PTP Trashed State-136', - 'zIntResou-PTP Trashed State-137', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-138', - 'zMedAnlyAstAttr-Media Analysis Timestamp-139', - 'zAsset-Analysis State Modificaion Date-140', - 'zAddAssetAttr- Pending View Count-141', - 'zAddAssetAttr- View Count-142', - 'zAddAssetAttr- Pending Play Count-143', - 'zAddAssetAttr- Play Count-144', - 'zAddAssetAttr- Pending Share Count-145', - 'zAddAssetAttr- Share Count-146', - 'zAddAssetAttr-Allowed for Analysis-147', - 'zAddAssetAttr-Scene Analysis Version-148', - 'zAddAssetAttr-Scene Analysis Timestamp-149', - 'zAddAssetAttr-Destination Asset Copy State-150', - 'zAddAssetAttr-Variation Suggestions States-151', - 'zAsset-High Frame Rate State-152', - 'zAsset-Video Key Frame Time Scale-153', - 'zAsset-Video Key Frame Value-154', - 'zExtAttr-ISO-155', - 'zExtAttr-Metering Mode-156', - 'zExtAttr-Sample Rate-157', - 'zExtAttr-Track Format-158', - 'zExtAttr-White Balance-159', - 'zExtAttr-Aperture-160', - 'zExtAttr-BitRate-161', - 'zExtAttr-Exposure Bias-162', - 'zExtAttr-Frames Per Second-163', - 'zExtAttr-Shutter Speed-164', - 'zAsset-Height-165', - 'zAddAssetAttr-Original Height-166', - 'zIntResou-Unoriented Height-167', - 'zAsset-Width-168', - 'zAddAssetAttr-Original Width-169', - 'zIntResou-Unoriented Width-170', - 'zAsset-Thumbnail Index-171', - 'zAddAssetAttr-Embedded Thumbnail Height-172', - 'zAddAssetAttr-Embedded Thumbnail Length-173', - 'zAddAssetAttr-Embedded Thumbnail Offset-174', - 'zAddAssetAttr-Embedded Thumbnail Width-175', - 'zAsset-Packed Acceptable Crop Rect-176', - 'zAsset-Packed Badge Attributes-177', - 'zAsset-Packed Preferred Crop Rect-178', - 'zAsset-Curation Score-179', - 'zAsset-Camera Processing Adjustment State-180', - 'zAsset-Depth Type-181', - 'zAddAssetAttr-Orig Resource Choice-182', - 'zAddAssetAttr-Spatial Over Capture Group ID-183', - 'zAddAssetAttr-Place Annotation Data-184', - 'zAddAssetAttr-Distance Identity-HEX-185', - 'zAddAssetAttr-Edited IPTC Attributes-186', - 'zAddAssetAttr-Title-Comments via Cloud Website-187', - 'zAddAssetAttr-Accessibility Description-188', - 'zAddAssetAttr-Photo Stream Tag ID-189', - 'zAddAssetAttr-Share Type-190', - 'zAsset-Overall Aesthetic Score-191', - 'zAsset-zENT-192', - 'zAsset-zOPT-193', - 'zAsset-Master= zCldMast-zPK-194', - 'zAsset-Extended Attributes= zExtAttr-zPK-195', - 'zAsset-Import Session Key-196', - 'zAsset-FOK-Cloud Feed Asset Entry Key-197', - 'zAsset-Computed Attributes Asset Key-198', - 'zAsset-Promotion Score-199', - 'zAsset-Media Analysis Attributes Key-200', - 'zAsset-Media Group UUID-201', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-202', - 'zAsset.Cloud Collection GUID-203', - 'zAddAssetAttr-zENT-204', - 'ZAddAssetAttr-zOPT-205', - 'zAddAssetAttr-zAsset= zAsset_zPK-206', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-207', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-208', - 'zAddAssetAttr-Public Global UUID-209', - 'zAddAssetAttr-Original Assets UUID-210', - 'zAddAssetAttr-Originating Asset Identifier-211', - 'zAddAssetAttr.Adjusted Fingerprint-212', - 'zCldMast-zPK= zAsset-Master-213', - 'zCldMast-zENT-214', - 'zCldMast-zOPT-215', - 'zCldMast-Moment Share Key= zShare-zPK-216', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-217', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-218', - 'zCldMast-Originating Asset ID-219', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-220', - 'CMzCldMastMedData-zENT-221', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-222', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-223', - 'AAAzCldMastMedData-zENT-224', - 'AAAzCldMastMedData-CldMast key-225', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-226', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-227', - 'zExtAttr-zENT-228', - 'zExtAttr-zOPT-229', - 'zExtAttr-Asset Key-230', - 'zIntResou-zPK-231', - 'zIntResou-zENT-232', - 'zIntResou-zOPT-233', - 'zIntResou-Asset= zAsset_zPK-234', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-235', - 'zMedAnlyAstAttr-zEnt-236', - 'zMedAnlyAstAttr-zOpt-237', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-238') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238])) - tsvname = 'Ph50.2-Asset_IntResou-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + 'zAsset-zPK-7', + 'zAddAssetAttr-zPK-8', + 'zAsset-UUID = store.cloudphotodb-9', + 'zAddAssetAttr-Master Fingerprint-10', + 'zIntResou-Fingerprint-11', + 'zIntResou-Local Availability-4QueryStart-1', + 'zIntResou-Remote Availability-4QueryStart-2', + 'zIntResou-Resource Type-4QueryStart-3', + 'zIntResou-Datastore Sub-Type-4QueryStart-4', + 'zIntResou-Recipe ID-4QueryStart-5', + 'zAsset Complete-6', + 'zAsset-Cloud is My Asset-12', + 'zAsset-Cloud is deletable-Asset-13', + 'zAsset-Cloud_Local_State-14', + 'zAsset-Visibility State-15', + 'zExtAttr-Camera Make-16', + 'zExtAttr-Camera Model-17', + 'zExtAttr-Lens Model-18', + 'zExtAttr-Flash Fired-19', + 'zExtAttr-Focal Lenght-20', + 'zAsset-Derived Camera Capture Device-21', + 'zAddAssetAttr-Camera Captured Device-22', + 'zAddAssetAttr-Imported by-23', + 'zCldMast-Imported By-24', + 'zAddAssetAttr-Creator Bundle ID-25', + 'zAddAssetAttr-Imported By Display Name-26', + 'zCldMast-Imported by Bundle ID-27', + 'zCldMast-Imported by Display Name-28', + 'zAsset-Saved Asset Type-29', + 'zAsset-Directory-Path-30', + 'zAsset-Filename-31', + 'zAddAssetAttr- Original Filename-32', + 'zCldMast- Original Filename-33', + ('zAsset-Added Date-34', 'datetime'), + ('zAsset- SortToken -CameraRoll-35', 'datetime'), + ('zAsset-Date Created-36', 'datetime'), + ('zCldMast-Creation Date-37', 'datetime'), + ('zIntResou-CldMst Date Created-38', 'datetime'), + 'zAddAssetAttr-Time Zone Name-39', + 'zAddAssetAttr-Time Zone Offset-40', + 'zAddAssetAttr-Inferred Time Zone Offset-41', + 'zAddAssetAttr-EXIF-String-42', + ('zAsset-Modification Date-43', 'datetime'), + ('zAsset-Last Shared Date-44', 'datetime'), + 'zCldMast-Cloud Local State-45', + ('zCldMast-Import Date-46', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', 'datetime'), + 'zAddAssetAttr-Import Session ID-48', + ('zAddAssetAttr-Alt Import Image Date-49', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-50', + ('zAsset-Cloud Batch Publish Date-51', 'datetime'), + ('zAsset-Cloud Server Publish Date-52', 'datetime'), + 'zAsset-Cloud Download Requests-53', + 'zAsset-Cloud Batch ID-54', + 'zAddAssetAttr-Upload Attempts-55', + 'zAsset-Latitude-56', + 'zExtAttr-Latitude-57', + 'zAsset-Longitude-58', + 'zExtAttr-Longitude-59', + 'zAddAssetAttr-GPS Horizontal Accuracy-60', + 'zAddAssetAttr-Location Hash-61', + 'zAddAssetAttr-Shifted Location Valid-62', + 'zAddAssetAttr-Shifted Location Data-63', + 'zAddAssetAttr-Reverse Location Is Valid-64', + 'zAddAssetAttr-Reverse Location Data-65', + 'AAAzCldMastMedData-zOPT-66', + 'zAddAssetAttr-Media Metadata Type-67', + 'AAAzCldMastMedData-Data-68', + 'CldMasterzCldMastMedData-zOPT-69', + 'zCldMast-Media Metadata Type-70', + 'CMzCldMastMedData-Data-71', + 'zAsset-Orientation-72', + 'zAddAssetAttr-Original Orientation-73', + 'zAsset-Kind-74', + 'zAsset-Kind-Sub-Type-75', + 'zAddAssetAttr-Cloud Kind Sub Type-76', + 'zAsset-Playback Style-77', + 'zAsset-Playback Variation-78', + 'zAsset-Video Duration-79', + 'zExtAttr-Duration-80', + 'zAsset-Video CP Duration-81', + 'zAddAssetAttr-Video CP Duration Time Scale-82', + 'zAsset-Video CP Visibility State-83', + 'zAddAssetAttr-Video CP Display Value-84', + 'zAddAssetAttr-Video CP Display Time Scale-85', + 'zIntResou-Datastore Class ID-86', + 'zAsset-Cloud Placeholder Kind-87', + 'zIntResou-Local Availability-88', + 'zIntResou-Local Availability Target-89', + 'zIntResou-Cloud Local State-90', + 'zIntResou-Remote Availability-91', + 'zIntResou-Remote Availability Target-92', + 'zIntResou-Transient Cloud Master-93', + 'zIntResou-Side Car Index-94', + 'zIntResou- File ID-95', + 'zIntResou-Version-96', + 'zAddAssetAttr- Original-File-Size-97', + 'zIntResou-Resource Type-98', + 'zIntResou-Datastore Sub-Type-99', + 'zIntResou-Cloud Source Type-100', + 'zIntResou-Data Length-101', + 'zIntResou-Recipe ID-102', + ('zIntResou-Cloud Last Prefetch Date-103', 'datetime'), + 'zIntResou-Cloud Prefetch Count-104', + ('zIntResou- Cloud-Last-OnDemand Download-Date-105', 'datetime'), + 'zAsset-Uniform Type ID-106', + 'zAsset-Original Color Space-107', + 'zCldMast-Uniform_Type_ID-108', + 'zCldMast-Full Size JPEG Source-109', + 'zAsset-HDR Gain-110', + 'zExtAttr-Codec-111', + 'zCldMast-Codec Name-112', + 'zCldMast-Video Frame Rate-113', + 'zCldMast-Placeholder State-114', + 'zAsset-Depth_Type-115', + 'zAsset-Avalanche UUID-116', + 'zAsset-Avalanche_Pick_Type-BurstAsset-117', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-118', + 'zAddAssetAttr-Cloud Recovery State-119', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-120', + 'zAsset-Deferred Processing Needed-121', + 'zAddAssetAttr-Deferred Photo Identifier-122', + 'zAddAssetAttr-Deferred Processing Candidate Options-123', + 'zAsset-Has Adjustments-Camera-Effects-Filters-124', + ('zAsset-Adjustment Timestamp-125', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-126', + 'zAddAssetAttr-Montage-127', + 'zAsset-Favorite-128', + 'zAsset-Hidden-129', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-130', + ('zAsset-Trashed Date-131', 'datetime'), + 'zIntResou-Trash State-132', + ('zIntResou-Trashed Date-133', 'datetime'), + 'zAsset-Cloud Delete State-134', + 'zIntResou-Cloud Delete State-135', + 'zAddAssetAttr-PTP Trashed State-136', + 'zIntResou-PTP Trashed State-137', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-138', + ('zMedAnlyAstAttr-Media Analysis Timestamp-139', 'datetime'), + ('zAsset-Analysis State Modification Date-140', 'datetime'), + 'zAddAssetAttr- Pending View Count-141', + 'zAddAssetAttr- View Count-142', + 'zAddAssetAttr- Pending Play Count-143', + 'zAddAssetAttr- Play Count-144', + 'zAddAssetAttr- Pending Share Count-145', + 'zAddAssetAttr- Share Count-146', + 'zAddAssetAttr-Allowed for Analysis-147', + 'zAddAssetAttr-Scene Analysis Version-148', + ('zAddAssetAttr-Scene Analysis Timestamp-149', 'datetime'), + 'zAddAssetAttr-Destination Asset Copy State-150', + 'zAddAssetAttr-Variation Suggestions States-151', + 'zAsset-High Frame Rate State-152', + 'zAsset-Video Key Frame Time Scale-153', + 'zAsset-Video Key Frame Value-154', + 'zExtAttr-ISO-155', + 'zExtAttr-Metering Mode-156', + 'zExtAttr-Sample Rate-157', + 'zExtAttr-Track Format-158', + 'zExtAttr-White Balance-159', + 'zExtAttr-Aperture-160', + 'zExtAttr-BitRate-161', + 'zExtAttr-Exposure Bias-162', + 'zExtAttr-Frames Per Second-163', + 'zExtAttr-Shutter Speed-164', + 'zAsset-Height-165', + 'zAddAssetAttr-Original Height-166', + 'zIntResou-Unoriented Height-167', + 'zAsset-Width-168', + 'zAddAssetAttr-Original Width-169', + 'zIntResou-Unoriented Width-170', + 'zAsset-Thumbnail Index-171', + 'zAddAssetAttr-Embedded Thumbnail Height-172', + 'zAddAssetAttr-Embedded Thumbnail Length-173', + 'zAddAssetAttr-Embedded Thumbnail Offset-174', + 'zAddAssetAttr-Embedded Thumbnail Width-175', + 'zAsset-Packed Acceptable Crop Rect-176', + 'zAsset-Packed Badge Attributes-177', + 'zAsset-Packed Preferred Crop Rect-178', + 'zAsset-Curation Score-179', + 'zAsset-Camera Processing Adjustment State-180', + 'zAsset-Depth Type-181', + 'zAddAssetAttr-Orig Resource Choice-182', + 'zAddAssetAttr-Spatial Over Capture Group ID-183', + 'zAddAssetAttr-Place Annotation Data-184', + 'zAddAssetAttr-Distance Identity-HEX-185', + 'zAddAssetAttr-Edited IPTC Attributes-186', + 'zAddAssetAttr-Title-Comments via Cloud Website-187', + 'zAddAssetAttr-Accessibility Description-188', + 'zAddAssetAttr-Photo Stream Tag ID-189', + 'zAddAssetAttr-Share Type-190', + 'zAsset-Overall Aesthetic Score-191', + 'zAsset-zENT-192', + 'zAsset-zOPT-193', + 'zAsset-Master= zCldMast-zPK-194', + 'zAsset-Extended Attributes= zExtAttr-zPK-195', + 'zAsset-Import Session Key-196', + 'zAsset-FOK-Cloud Feed Asset Entry Key-197', + 'zAsset-Computed Attributes Asset Key-198', + 'zAsset-Promotion Score-199', + 'zAsset-Media Analysis Attributes Key-200', + 'zAsset-Media Group UUID-201', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-202', + 'zAsset.Cloud Collection GUID-203', + 'zAddAssetAttr-zENT-204', + 'ZAddAssetAttr-zOPT-205', + 'zAddAssetAttr-zAsset= zAsset_zPK-206', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-207', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-208', + 'zAddAssetAttr-Public Global UUID-209', + 'zAddAssetAttr-Original Assets UUID-210', + 'zAddAssetAttr-Originating Asset Identifier-211', + 'zAddAssetAttr.Adjusted Fingerprint-212', + 'zCldMast-zPK= zAsset-Master-213', + 'zCldMast-zENT-214', + 'zCldMast-zOPT-215', + 'zCldMast-Moment Share Key= zShare-zPK-216', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-217', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-218', + 'zCldMast-Originating Asset ID-219', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-220', + 'CMzCldMastMedData-zENT-221', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-222', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-223', + 'AAAzCldMastMedData-zENT-224', + 'AAAzCldMastMedData-CldMast key-225', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-226', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-227', + 'zExtAttr-zENT-228', + 'zExtAttr-zOPT-229', + 'zExtAttr-Asset Key-230', + 'zIntResou-zPK-231', + 'zIntResou-zENT-232', + 'zIntResou-zOPT-233', + 'zIntResou-Asset= zAsset_zPK-234', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-235', + 'zMedAnlyAstAttr-zEnt-236', + 'zMedAnlyAstAttr-zOpt-237', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-238') + data_list = get_sqlite_db_records(source_path, query) - tlactivity = 'Ph50.2-Asset_IntResou-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No Internal Resource data available for iOS 14 Syndication Photos Library Photos.sqlite') - - db.close() - return + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -7721,343 +7572,318 @@ def get_ph50intresouoptimzdatasyndpl(files_found, report_folder, seeker, wrap_te LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262])) - - counter += 1 - - description = 'Parses iOS 15 asset records from Syndication.photos.library-database-Photos.sqlite' \ - ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide' \ - ' data for investigative analysis of assets being stored locally on the device verses' \ - ' assets being stored in iCloud Photos as the result of optimization. This is very large' \ - ' query and script, I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' - report = ArtifactHtmlReport('Ph50.2-Asset_IntResou-SyndPL') - report.start_artifact_report(report_folder, 'Ph50.2-Asset_IntResou-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-4QueryStart-0', - 'zAsset-zPK-7', - 'zAddAssetAttr-zPK-8', - 'zAsset-UUID = store.cloudphotodb-9', - 'zAddAssetAttr-Master Fingerprint-10', - 'zIntResou-Fingerprint-11', - 'zIntResou-Local Availability-4QueryStart-1', - 'zIntResou-Remote Availability-4QueryStart-2', - 'zIntResou-Resource Type-4QueryStart-3', - 'zIntResou-Datastore Sub-Type-4QueryStart-4', - 'zIntResou-Recipe ID-4QueryStart-5', - 'zAsset Complete-6', - 'zAsset-Bundle Scope-12', - 'zAsset-Syndication State-13', - 'zAsset-Cloud is My Asset-14', - 'zAsset-Cloud is deletable-Asset-15', - 'zAsset-Cloud_Local_State-16', - 'zAsset-Visibility State-17', - 'zExtAttr-Camera Make-18', - 'zExtAttr-Camera Model-19', - 'zExtAttr-Lens Model-20', - 'zExtAttr-Flash Fired-21', - 'zExtAttr-Focal Lenght-22', - 'zExtAttr-Focal Lenth in 35MM-23', - 'zExtAttr-Digital Zoom Ratio-24', - 'zAsset-Derived Camera Capture Device-25', - 'zAddAssetAttr-Camera Captured Device-26', - 'zAddAssetAttr-Imported by-27', - 'zCldMast-Imported By-28', - 'zAddAssetAttr.Imported by Bundle Identifier-29', - 'zAddAssetAttr-Imported By Display Name-30', - 'zCldMast-Imported by Bundle ID-31', - 'zCldMast-Imported by Display Name-32', - 'zAsset-Saved Asset Type-33', - 'zAsset-Directory-Path-34', - 'zAsset-Filename-35', - 'zAddAssetAttr- Original Filename-36', - 'zCldMast- Original Filename-37', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-38', - 'zAsset-Added Date-39', - 'zAsset- SortToken -CameraRoll-40', - 'zAddAssetAttr-Date Created Source-41', - 'zAsset-Date Created-42', - 'zCldMast-Creation Date-43', - 'zIntResou-CldMst Date Created-44', - 'zAddAssetAttr-Time Zone Name-45', - 'zAddAssetAttr-Time Zone Offset-46', - 'zAddAssetAttr-Inferred Time Zone Offset-47', - 'zAddAssetAttr-EXIF-String-48', - 'zAsset-Modification Date-49', - 'zAsset-Last Shared Date-50', - 'zCldMast-Cloud Local State-51', - 'zCldMast-Import Date-52', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-53', - 'zAddAssetAttr-Import Session ID-54', - 'zAddAssetAttr-Alt Import Image Date-55', - 'zCldMast-Import Session ID- AirDrop-StillTesting-56', - 'zAsset-Cloud Batch Publish Date-57', - 'zAsset-Cloud Server Publish Date-58', - 'zAsset-Cloud Download Requests-59', - 'zAsset-Cloud Batch ID-60', - 'zAddAssetAttr-Upload Attempts-61', - 'zAsset-Latitude-62', - 'zExtAttr-Latitude-63', - 'zAsset-Longitude-64', - 'zExtAttr-Longitude-65', - 'zAddAssetAttr-GPS Horizontal Accuracy-66', - 'zAddAssetAttr-Location Hash-67', - 'zAddAssetAttr-Shifted Location Valid-68', - 'zAddAssetAttr-Shifted Location Data-69', - 'zAddAssetAttr-Reverse Location Is Valid-70', - 'zAddAssetAttr-Reverse Location Data-71', - 'AAAzCldMastMedData-zOPT-72', - 'zAddAssetAttr-Media Metadata Type-73', - 'AAAzCldMastMedData-Data-74', - 'CldMasterzCldMastMedData-zOPT-75', - 'zCldMast-Media Metadata Type-76', - 'CMzCldMastMedData-Data-77', - 'zAddAssetAttr-Syndication History-78', - 'zMedAnlyAstAttr-Syndication Processing Version-79', - 'zMedAnlyAstAttr-Syndication Processing Value-80', - 'zAsset-Orientation-81', - 'zAddAssetAttr-Original Orientation-82', - 'zAsset-Kind-83', - 'zAsset-Kind-Sub-Type-84', - 'zAddAssetAttr-Cloud Kind Sub Type-85', - 'zAsset-Playback Style-86', - 'zAsset-Playback Variation-87', - 'zAsset-Video Duration-88', - 'zExtAttr-Duration-89', - 'zAsset-Video CP Duration-90', - 'zAddAssetAttr-Video CP Duration Time Scale-91', - 'zAsset-Video CP Visibility State-92', - 'zAddAssetAttr-Video CP Display Value-93', - 'zAddAssetAttr-Video CP Display Time Scale-94', - 'zIntResou-Datastore Class ID-95', - 'zAsset-Cloud Placeholder Kind-96', - 'zIntResou-Local Availability-97', - 'zIntResou-Local Availability Target-98', - 'zIntResou-Cloud Local State-99', - 'zIntResou-Remote Availability-100', - 'zIntResou-Remote Availability Target-101', - 'zIntResou-Transient Cloud Master-102', - 'zIntResou-Side Car Index-103', - 'zIntResou- File ID-104', - 'zIntResou-Version-105', - 'zAddAssetAttr- Original-File-Size-106', - 'zIntResou-Resource Type-107', - 'zIntResou-Datastore Sub-Type-108', - 'zIntResou-Cloud Source Type-109', - 'zIntResou-Data Length-110', - 'zIntResou-Recipe ID-111', - 'zIntResou-Cloud Last Prefetch Date-112', - 'zIntResou-Cloud Prefetch Count-113', - 'zIntResou- Cloud-Last-OnDemand Download-Date-114', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-115', - 'zIntResou-Compact-UTI-116', - 'zAsset-Uniform Type ID-117', - 'zAsset-Original Color Space-118', - 'zCldMast-Uniform_Type_ID-119', - 'zCldMast-Full Size JPEG Source-120', - 'zAsset-HDR Gain-121', - 'zAsset-zHDR_Type-122', - 'zExtAttr-Codec-123', - 'zIntResou-Codec Four Char Code Name-124', - 'zCldMast-Codec Name-125', - 'zCldMast-Video Frame Rate-126', - 'zCldMast-Placeholder State-127', - 'zAsset-Depth_Type-128', - 'zAsset-Avalanche UUID-129', - 'zAsset-Avalanche_Pick_Type-BurstAsset-130', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-131', - 'zAddAssetAttr-Cloud Recovery State-132', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-133', - 'zAsset-Deferred Processing Needed-134', - 'zAsset-Video Deferred Processing Needed-135', - 'zAddAssetAttr-Deferred Photo Identifier-136', - 'zAddAssetAttr-Deferred Processing Candidate Options-137', - 'zAsset-Has Adjustments-Camera-Effects-Filters-138', - 'zAsset-Adjustment Timestamp-139', - 'zAddAssetAttr-Editor Bundle ID-140', - 'zAddAssetAttr-Montage-141', - 'zAsset-Favorite-142', - 'zAsset-Hidden-143', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-144', - 'zAsset-Trashed Date-145', - 'zIntResou-Trash State-146', - 'zIntResou-Trashed Date-147', - 'zAsset-Cloud Delete State-148', - 'zIntResou-Cloud Delete State-149', - 'zAddAssetAttr-PTP Trashed State-150', - 'zIntResou-PTP Trashed State-151', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-152', - 'zMedAnlyAstAttr-Media Analysis Timestamp-153', - 'zAsset-Analysis State Modificaion Date-154', - 'zAddAssetAttr- Pending View Count-155', - 'zAddAssetAttr- View Count-156', - 'zAddAssetAttr- Pending Play Count-157', - 'zAddAssetAttr- Play Count-158', - 'zAddAssetAttr- Pending Share Count-159', - 'zAddAssetAttr- Share Count-160', - 'zAddAssetAttr-Allowed for Analysis-161', - 'zAddAssetAttr-Scene Analysis Version-162', - 'zAddAssetAttr-Scene Analysis is From Preview-163', - 'zAddAssetAttr-Scene Analysis Timestamp-164', - 'zAddAssetAttr-Destination Asset Copy State-165', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-166', - 'zCldMast-Source Master For Duplication Scope ID-167', - 'zAddAssetAttr-Source Asset For Duplication ID-168', - 'zCldMast-Source Master for Duplication ID-169', - 'zAddAssetAttr-Variation Suggestions States-170', - 'zAsset-High Frame Rate State-171', - 'zAsset-Video Key Frame Time Scale-172', - 'zAsset-Video Key Frame Value-173', - 'zExtAttr-ISO-174', - 'zExtAttr-Metering Mode-175', - 'zExtAttr-Sample Rate-176', - 'zExtAttr-Track Format-177', - 'zExtAttr-White Balance-178', - 'zExtAttr-Aperture-179', - 'zExtAttr-BitRate-180', - 'zExtAttr-Exposure Bias-181', - 'zExtAttr-Frames Per Second-182', - 'zExtAttr-Shutter Speed-183', - 'zExtAttr-Slush Scene Bias-184', - 'zExtAttr-Slush Version-185', - 'zExtAttr-Slush Preset-186', - 'zExtAttr-Slush Warm Bias-187', - 'zAsset-Height-188', - 'zAddAssetAttr-Original Height-189', - 'zIntResou-Unoriented Height-190', - 'zAsset-Width-191', - 'zAddAssetAttr-Original Width-192', - 'zIntResou-Unoriented Width-193', - 'zAsset-Thumbnail Index-194', - 'zAddAssetAttr-Embedded Thumbnail Height-195', - 'zAddAssetAttr-Embedded Thumbnail Length-196', - 'zAddAssetAttr-Embedded Thumbnail Offset-197', - 'zAddAssetAttr-Embedded Thumbnail Width-198', - 'zAsset-Packed Acceptable Crop Rect-199', - 'zAsset-Packed Badge Attributes-200', - 'zAsset-Packed Preferred Crop Rect-201', - 'zAsset-Curation Score-202', - 'zAsset-Camera Processing Adjustment State-203', - 'zAsset-Depth Type-204', - 'zAsset-Is Magic Carpet-QuicktimeMOVfile-205', - 'zAddAssetAttr-Orig Resource Choice-206', - 'zAddAssetAttr-Spatial Over Capture Group ID-207', - 'zAddAssetAttr-Place Annotation Data-208', - 'zAddAssetAttr-Distance Identity-HEX-209', - 'zAddAssetAttr-Edited IPTC Attributes-210', - 'zAddAssetAttr-Title-Comments via Cloud Website-211', - 'zAddAssetAttr-Accessibility Description-212', - 'zAddAssetAttr-Photo Stream Tag ID-213', - 'zAddAssetAttr-Share Type-214', - 'zAsset-Overall Aesthetic Score-215', - 'zAsset-zENT-216', - 'zAsset-zOPT-217', - 'zAsset-Master= zCldMast-zPK-218', - 'zAsset-Extended Attributes= zExtAttr-zPK-219', - 'zAsset-Import Session Key-220', - 'zAsset-FOK-Cloud Feed Asset Entry Key-221', - 'zAsset-Computed Attributes Asset Key-222', - 'zAsset-Promotion Score-223', - 'zAsset-Media Analysis Attributes Key-224', - 'zAsset-Media Group UUID-225', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-226', - 'zAsset.Cloud Collection GUID-227', - 'zAddAssetAttr-zENT-228', - 'ZAddAssetAttr-zOPT-229', - 'zAddAssetAttr-zAsset= zAsset_zPK-230', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-231', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-232', - 'zAddAssetAttr-Public Global UUID-233', - 'zAddAssetAttr-Original Assets UUID-234', - 'zAddAssetAttr-Originating Asset Identifier-235', - 'zAddAssetAttr.Adjusted Fingerprint-236', - 'zCldMast-zPK= zAsset-Master-237', - 'zCldMast-zENT-238', - 'zCldMast-zOPT-239', - 'zCldMast-Moment Share Key= zShare-zPK-240', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-241', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-242', - 'zCldMast-Originating Asset ID-243', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-244', - 'CMzCldMastMedData-zENT-245', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-246', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-247', - 'AAAzCldMastMedData-zENT-248', - 'AAAzCldMastMedData-CldMast key-249', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-250', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-251', - 'zExtAttr-zENT-252', - 'zExtAttr-zOPT-253', - 'zExtAttr-Asset Key-254', - 'zIntResou-zPK-255', - 'zIntResou-zENT-256', - 'zIntResou-zOPT-257', - 'zIntResou-Asset= zAsset_zPK-258', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-259', - 'zMedAnlyAstAttr-zEnt-260', - 'zMedAnlyAstAttr-zOpt-261', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-262') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() + ''' - tsvname = 'Ph50.2-Asset_IntResou-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262])) - tlactivity = 'Ph50.2-Asset_IntResou-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + 'zAsset-zPK-7', + 'zAddAssetAttr-zPK-8', + 'zAsset-UUID = store.cloudphotodb-9', + 'zAddAssetAttr-Master Fingerprint-10', + 'zIntResou-Fingerprint-11', + 'zIntResou-Local Availability-4QueryStart-1', + 'zIntResou-Remote Availability-4QueryStart-2', + 'zIntResou-Resource Type-4QueryStart-3', + 'zIntResou-Datastore Sub-Type-4QueryStart-4', + 'zIntResou-Recipe ID-4QueryStart-5', + 'zAsset Complete-6', + 'zAsset-Bundle Scope-12', + 'zAsset-Syndication State-13', + 'zAsset-Cloud is My Asset-14', + 'zAsset-Cloud is deletable-Asset-15', + 'zAsset-Cloud_Local_State-16', + 'zAsset-Visibility State-17', + 'zExtAttr-Camera Make-18', + 'zExtAttr-Camera Model-19', + 'zExtAttr-Lens Model-20', + 'zExtAttr-Flash Fired-21', + 'zExtAttr-Focal Lenght-22', + 'zExtAttr-Focal Lenth in 35MM-23', + 'zExtAttr-Digital Zoom Ratio-24', + 'zAsset-Derived Camera Capture Device-25', + 'zAddAssetAttr-Camera Captured Device-26', + 'zAddAssetAttr-Imported by-27', + 'zCldMast-Imported By-28', + 'zAddAssetAttr.Imported by Bundle Identifier-29', + 'zAddAssetAttr-Imported By Display Name-30', + 'zCldMast-Imported by Bundle ID-31', + 'zCldMast-Imported by Display Name-32', + 'zAsset-Saved Asset Type-33', + 'zAsset-Directory-Path-34', + 'zAsset-Filename-35', + 'zAddAssetAttr- Original Filename-36', + 'zCldMast- Original Filename-37', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-38', + ('zAsset-Added Date-39', 'datetime'), + ('zAsset- SortToken -CameraRoll-40', 'datetime'), + ('zAddAssetAttr-Date Created Source-41', 'datetime'), + ('zAsset-Date Created-42', 'datetime'), + ('zCldMast-Creation Date-43', 'datetime'), + ('zIntResou-CldMst Date Created-44', 'datetime'), + 'zAddAssetAttr-Time Zone Name-45', + 'zAddAssetAttr-Time Zone Offset-46', + 'zAddAssetAttr-Inferred Time Zone Offset-47', + 'zAddAssetAttr-EXIF-String-48', + ('zAsset-Modification Date-49', 'datetime'), + ('zAsset-Last Shared Date-50', 'datetime'), + 'zCldMast-Cloud Local State-51', + ('zCldMast-Import Date-52', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-53', 'datetime'), + 'zAddAssetAttr-Import Session ID-54', + ('zAddAssetAttr-Alt Import Image Date-55', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-56', + ('zAsset-Cloud Batch Publish Date-57', 'datetime'), + ('zAsset-Cloud Server Publish Date-58', 'datetime'), + 'zAsset-Cloud Download Requests-59', + 'zAsset-Cloud Batch ID-60', + 'zAddAssetAttr-Upload Attempts-61', + 'zAsset-Latitude-62', + 'zExtAttr-Latitude-63', + 'zAsset-Longitude-64', + 'zExtAttr-Longitude-65', + 'zAddAssetAttr-GPS Horizontal Accuracy-66', + 'zAddAssetAttr-Location Hash-67', + 'zAddAssetAttr-Shifted Location Valid-68', + 'zAddAssetAttr-Shifted Location Data-69', + 'zAddAssetAttr-Reverse Location Is Valid-70', + 'zAddAssetAttr-Reverse Location Data-71', + 'AAAzCldMastMedData-zOPT-72', + 'zAddAssetAttr-Media Metadata Type-73', + 'AAAzCldMastMedData-Data-74', + 'CldMasterzCldMastMedData-zOPT-75', + 'zCldMast-Media Metadata Type-76', + 'CMzCldMastMedData-Data-77', + 'zAddAssetAttr-Syndication History-78', + 'zMedAnlyAstAttr-Syndication Processing Version-79', + 'zMedAnlyAstAttr-Syndication Processing Value-80', + 'zAsset-Orientation-81', + 'zAddAssetAttr-Original Orientation-82', + 'zAsset-Kind-83', + 'zAsset-Kind-Sub-Type-84', + 'zAddAssetAttr-Cloud Kind Sub Type-85', + 'zAsset-Playback Style-86', + 'zAsset-Playback Variation-87', + 'zAsset-Video Duration-88', + 'zExtAttr-Duration-89', + 'zAsset-Video CP Duration-90', + 'zAddAssetAttr-Video CP Duration Time Scale-91', + 'zAsset-Video CP Visibility State-92', + 'zAddAssetAttr-Video CP Display Value-93', + 'zAddAssetAttr-Video CP Display Time Scale-94', + 'zIntResou-Datastore Class ID-95', + 'zAsset-Cloud Placeholder Kind-96', + 'zIntResou-Local Availability-97', + 'zIntResou-Local Availability Target-98', + 'zIntResou-Cloud Local State-99', + 'zIntResou-Remote Availability-100', + 'zIntResou-Remote Availability Target-101', + 'zIntResou-Transient Cloud Master-102', + 'zIntResou-Side Car Index-103', + 'zIntResou- File ID-104', + 'zIntResou-Version-105', + 'zAddAssetAttr- Original-File-Size-106', + 'zIntResou-Resource Type-107', + 'zIntResou-Datastore Sub-Type-108', + 'zIntResou-Cloud Source Type-109', + 'zIntResou-Data Length-110', + 'zIntResou-Recipe ID-111', + ('zIntResou-Cloud Last Prefetch Date-112', 'datetime'), + 'zIntResou-Cloud Prefetch Count-113', + ('zIntResou- Cloud-Last-OnDemand Download-Date-114', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-115', + 'zIntResou-Compact-UTI-116', + 'zAsset-Uniform Type ID-117', + 'zAsset-Original Color Space-118', + 'zCldMast-Uniform_Type_ID-119', + 'zCldMast-Full Size JPEG Source-120', + 'zAsset-HDR Gain-121', + 'zAsset-zHDR_Type-122', + 'zExtAttr-Codec-123', + 'zIntResou-Codec Four Char Code Name-124', + 'zCldMast-Codec Name-125', + 'zCldMast-Video Frame Rate-126', + 'zCldMast-Placeholder State-127', + 'zAsset-Depth_Type-128', + 'zAsset-Avalanche UUID-129', + 'zAsset-Avalanche_Pick_Type-BurstAsset-130', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-131', + 'zAddAssetAttr-Cloud Recovery State-132', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-133', + 'zAsset-Deferred Processing Needed-134', + 'zAsset-Video Deferred Processing Needed-135', + 'zAddAssetAttr-Deferred Photo Identifier-136', + 'zAddAssetAttr-Deferred Processing Candidate Options-137', + 'zAsset-Has Adjustments-Camera-Effects-Filters-138', + ('zAsset-Adjustment Timestamp-139', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-140', + 'zAddAssetAttr-Montage-141', + 'zAsset-Favorite-142', + 'zAsset-Hidden-143', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-144', + ('zAsset-Trashed Date-145', 'datetime'), + 'zIntResou-Trash State-146', + ('zIntResou-Trashed Date-147', 'datetime'), + 'zAsset-Cloud Delete State-148', + 'zIntResou-Cloud Delete State-149', + 'zAddAssetAttr-PTP Trashed State-150', + 'zIntResou-PTP Trashed State-151', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-152', + ('zMedAnlyAstAttr-Media Analysis Timestamp-153', 'datetime'), + ('zAsset-Analysis State Modification Date-154', 'datetime'), + 'zAddAssetAttr- Pending View Count-155', + 'zAddAssetAttr- View Count-156', + 'zAddAssetAttr- Pending Play Count-157', + 'zAddAssetAttr- Play Count-158', + 'zAddAssetAttr- Pending Share Count-159', + 'zAddAssetAttr- Share Count-160', + 'zAddAssetAttr-Allowed for Analysis-161', + 'zAddAssetAttr-Scene Analysis Version-162', + 'zAddAssetAttr-Scene Analysis is From Preview-163', + ('zAddAssetAttr-Scene Analysis Timestamp-164', 'datetime'), + 'zAddAssetAttr-Destination Asset Copy State-165', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-166', + 'zCldMast-Source Master For Duplication Scope ID-167', + 'zAddAssetAttr-Source Asset For Duplication ID-168', + 'zCldMast-Source Master for Duplication ID-169', + 'zAddAssetAttr-Variation Suggestions States-170', + 'zAsset-High Frame Rate State-171', + 'zAsset-Video Key Frame Time Scale-172', + 'zAsset-Video Key Frame Value-173', + 'zExtAttr-ISO-174', + 'zExtAttr-Metering Mode-175', + 'zExtAttr-Sample Rate-176', + 'zExtAttr-Track Format-177', + 'zExtAttr-White Balance-178', + 'zExtAttr-Aperture-179', + 'zExtAttr-BitRate-180', + 'zExtAttr-Exposure Bias-181', + 'zExtAttr-Frames Per Second-182', + 'zExtAttr-Shutter Speed-183', + 'zExtAttr-Slush Scene Bias-184', + 'zExtAttr-Slush Version-185', + 'zExtAttr-Slush Preset-186', + 'zExtAttr-Slush Warm Bias-187', + 'zAsset-Height-188', + 'zAddAssetAttr-Original Height-189', + 'zIntResou-Unoriented Height-190', + 'zAsset-Width-191', + 'zAddAssetAttr-Original Width-192', + 'zIntResou-Unoriented Width-193', + 'zAsset-Thumbnail Index-194', + 'zAddAssetAttr-Embedded Thumbnail Height-195', + 'zAddAssetAttr-Embedded Thumbnail Length-196', + 'zAddAssetAttr-Embedded Thumbnail Offset-197', + 'zAddAssetAttr-Embedded Thumbnail Width-198', + 'zAsset-Packed Acceptable Crop Rect-199', + 'zAsset-Packed Badge Attributes-200', + 'zAsset-Packed Preferred Crop Rect-201', + 'zAsset-Curation Score-202', + 'zAsset-Camera Processing Adjustment State-203', + 'zAsset-Depth Type-204', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-205', + 'zAddAssetAttr-Orig Resource Choice-206', + 'zAddAssetAttr-Spatial Over Capture Group ID-207', + 'zAddAssetAttr-Place Annotation Data-208', + 'zAddAssetAttr-Distance Identity-HEX-209', + 'zAddAssetAttr-Edited IPTC Attributes-210', + 'zAddAssetAttr-Title-Comments via Cloud Website-211', + 'zAddAssetAttr-Accessibility Description-212', + 'zAddAssetAttr-Photo Stream Tag ID-213', + 'zAddAssetAttr-Share Type-214', + 'zAsset-Overall Aesthetic Score-215', + 'zAsset-zENT-216', + 'zAsset-zOPT-217', + 'zAsset-Master= zCldMast-zPK-218', + 'zAsset-Extended Attributes= zExtAttr-zPK-219', + 'zAsset-Import Session Key-220', + 'zAsset-FOK-Cloud Feed Asset Entry Key-221', + 'zAsset-Computed Attributes Asset Key-222', + 'zAsset-Promotion Score-223', + 'zAsset-Media Analysis Attributes Key-224', + 'zAsset-Media Group UUID-225', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-226', + 'zAsset.Cloud Collection GUID-227', + 'zAddAssetAttr-zENT-228', + 'ZAddAssetAttr-zOPT-229', + 'zAddAssetAttr-zAsset= zAsset_zPK-230', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-231', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-232', + 'zAddAssetAttr-Public Global UUID-233', + 'zAddAssetAttr-Original Assets UUID-234', + 'zAddAssetAttr-Originating Asset Identifier-235', + 'zAddAssetAttr.Adjusted Fingerprint-236', + 'zCldMast-zPK= zAsset-Master-237', + 'zCldMast-zENT-238', + 'zCldMast-zOPT-239', + 'zCldMast-Moment Share Key= zShare-zPK-240', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-241', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-242', + 'zCldMast-Originating Asset ID-243', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-244', + 'CMzCldMastMedData-zENT-245', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-246', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-247', + 'AAAzCldMastMedData-zENT-248', + 'AAAzCldMastMedData-CldMast key-249', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-250', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-251', + 'zExtAttr-zENT-252', + 'zExtAttr-zOPT-253', + 'zExtAttr-Asset Key-254', + 'zIntResou-zPK-255', + 'zIntResou-zENT-256', + 'zIntResou-zOPT-257', + 'zIntResou-Asset= zAsset_zPK-258', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-259', + 'zMedAnlyAstAttr-zEnt-260', + 'zMedAnlyAstAttr-zOpt-261', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-262') + data_list = get_sqlite_db_records(source_path, query) - else: - logfunc('No Internal Resource data available for iOS 15 Syndication Photos Library Photos.sqlite') - - db.close() - return + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -8891,353 +8717,328 @@ def get_ph50intresouoptimzdatasyndpl(files_found, report_folder, seeker, wrap_te LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271])) - - counter += 1 - - description = 'Parses iOS 16 asset records from Syndication.photos.library-database-Photos.sqlite' \ - ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide' \ - ' data for investigative analysis of assets being stored locally on the device verses' \ - ' assets being stored in iCloud Photos as the result of optimization. This is very large' \ - ' query and script, I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' - report = ArtifactHtmlReport('Ph50.2-Asset_IntResou-SyndPL') - report.start_artifact_report(report_folder, 'Ph50.2-Asset_IntResou-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-4QueryStart-0', - 'zAsset-zPK-7', - 'zAddAssetAttr-zPK-8', - 'zAsset-UUID = store.cloudphotodb-9', - 'zAddAssetAttr-Master Fingerprint-10', - 'zIntResou-Fingerprint-11', - 'zIntResou-Local Availability-4QueryStart-1', - 'zIntResou-Remote Availability-4QueryStart-2', - 'zIntResou-Resource Type-4QueryStart-3', - 'zIntResou-Datastore Sub-Type-4QueryStart-4', - 'zIntResou-Recipe ID-4QueryStart-5', - 'zAsset Complete-6', - 'zAsset-Bundle Scope-12', - 'zAsset-Syndication State-13', - 'zAsset-Cloud is My Asset-14', - 'zAsset-Cloud is deletable-Asset-15', - 'zAsset-Cloud_Local_State-16', - 'zAsset-Visibility State-17', - 'zExtAttr-Camera Make-18', - 'zExtAttr-Camera Model-19', - 'zExtAttr-Lens Model-20', - 'zExtAttr-Flash Fired-21', - 'zExtAttr-Focal Lenght-22', - 'zExtAttr-Focal Lenth in 35MM-23', - 'zExtAttr-Digital Zoom Ratio-24', - 'zAsset-Derived Camera Capture Device-25', - 'zAddAssetAttr-Camera Captured Device-26', - 'zAddAssetAttr-Imported by-27', - 'zCldMast-Imported By-28', - 'zAddAssetAttr.Imported by Bundle Identifier-29', - 'zAddAssetAttr-Imported By Display Name-30', - 'zCldMast-Imported by Bundle ID-31', - 'zCldMast-Imported by Display Name-32', - 'zAsset-Saved Asset Type-33', - 'zAsset-Directory-Path-34', - 'zAsset-Filename-35', - 'zAddAssetAttr- Original Filename-36', - 'zCldMast- Original Filename-37', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-38', - 'zAsset-Active Library Scope Participation State-39', - 'zAsset-Library Scope Share State- StillTesting-40', - 'zAsset-Added Date-41', - 'zAsset- SortToken -CameraRoll-42', - 'zAddAssetAttr-Date Created Source-43', - 'zAsset-Date Created-44', - 'zCldMast-Creation Date-45', - 'zIntResou-CldMst Date Created-46', - 'zAddAssetAttr-Time Zone Name-47', - 'zAddAssetAttr-Time Zone Offset-48', - 'zAddAssetAttr-Inferred Time Zone Offset-49', - 'zAddAssetAttr-EXIF-String-50', - 'zAsset-Modification Date-51', - 'zAsset-Last Shared Date-52', - 'zCldMast-Cloud Local State-53', - 'zCldMast-Import Date-54', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-55', - 'zAddAssetAttr-Import Session ID-56', - 'zAddAssetAttr-Alt Import Image Date-57', - 'zCldMast-Import Session ID- AirDrop-StillTesting-58', - 'zAsset-Cloud Batch Publish Date-59', - 'zAsset-Cloud Server Publish Date-60', - 'zAsset-Cloud Download Requests-61', - 'zAsset-Cloud Batch ID-62', - 'zAddAssetAttr-Upload Attempts-63', - 'zAsset-Latitude-64', - 'zExtAttr-Latitude-65', - 'zAsset-Longitude-66', - 'zExtAttr-Longitude-67', - 'zAddAssetAttr-GPS Horizontal Accuracy-68', - 'zAddAssetAttr-Location Hash-69', - 'zAddAssetAttr-Shifted Location Valid-70', - 'zAddAssetAttr-Shifted Location Data-71', - 'zAddAssetAttr-Reverse Location Is Valid-72', - 'zAddAssetAttr-Reverse Location Data-73', - 'AAAzCldMastMedData-zOPT-74', - 'zAddAssetAttr-Media Metadata Type-75', - 'AAAzCldMastMedData-Data-76', - 'CldMasterzCldMastMedData-zOPT-77', - 'zCldMast-Media Metadata Type-78', - 'CMzCldMastMedData-Data-79', - 'zAsset-Search Index Rebuild State-80', - 'zAddAssetAttr-Syndication History-81', - 'zMedAnlyAstAttr-Syndication Processing Version-82', - 'zMedAnlyAstAttr-Syndication Processing Value-83', - 'zAsset-Orientation-84', - 'zAddAssetAttr-Original Orientation-85', - 'zAsset-Kind-86', - 'zAsset-Kind-Sub-Type-87', - 'zAddAssetAttr-Cloud Kind Sub Type-88', - 'zAsset-Playback Style-89', - 'zAsset-Playback Variation-90', - 'zAsset-Video Duration-91', - 'zExtAttr-Duration-92', - 'zAsset-Video CP Duration-93', - 'zAddAssetAttr-Video CP Duration Time Scale-94', - 'zAsset-Video CP Visibility State-95', - 'zAddAssetAttr-Video CP Display Value-96', - 'zAddAssetAttr-Video CP Display Time Scale-97', - 'zIntResou-Datastore Class ID-98', - 'zAsset-Cloud Placeholder Kind-99', - 'zIntResou-Local Availability-100', - 'zIntResou-Local Availability Target-101', - 'zIntResou-Cloud Local State-102', - 'zIntResou-Remote Availability-103', - 'zIntResou-Remote Availability Target-104', - 'zIntResou-Transient Cloud Master-105', - 'zIntResou-Side Car Index-106', - 'zIntResou- File ID-107', - 'zIntResou-Version-108', - 'zAddAssetAttr- Original-File-Size-109', - 'zIntResou-Resource Type-110', - 'zIntResou-Datastore Sub-Type-111', - 'zIntResou-Cloud Source Type-112', - 'zIntResou-Data Length-113', - 'zIntResou-Recipe ID-114', - 'zIntResou-Cloud Last Prefetch Date-115', - 'zIntResou-Cloud Prefetch Count-116', - 'zIntResou- Cloud-Last-OnDemand Download-Date-117', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-118', - 'zIntResou-Compact-UTI-119', - 'zAsset-Uniform Type ID-120', - 'zAsset-Original Color Space-121', - 'zCldMast-Uniform_Type_ID-122', - 'zCldMast-Full Size JPEG Source-123', - 'zAsset-HDR Gain-124', - 'zAsset-zHDR_Type-125', - 'zExtAttr-Codec-126', - 'zIntResou-Codec Four Char Code Name-127', - 'zCldMast-Codec Name-128', - 'zCldMast-Video Frame Rate-129', - 'zCldMast-Placeholder State-130', - 'zAsset-Depth_Type-131', - 'zAsset-Avalanche UUID-132', - 'zAsset-Avalanche_Pick_Type-BurstAsset-133', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134', - 'zAddAssetAttr-Cloud Recovery State-135', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-136', - 'zAsset-Deferred Processing Needed-137', - 'zAsset-Video Deferred Processing Needed-138', - 'zAddAssetAttr-Deferred Photo Identifier-139', - 'zAddAssetAttr-Deferred Processing Candidate Options-140', - 'zAsset-Has Adjustments-Camera-Effects-Filters-141', - 'zAsset-Adjustment Timestamp-142', - 'zAddAssetAttr-Editor Bundle ID-143', - 'zAddAssetAttr-Montage-144', - 'zAsset-Favorite-145', - 'zAsset-Hidden-146', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-147', - 'zAsset-Trashed Date-148', - 'zAsset-Trashed by Participant= zSharePartic_zPK-149', - 'zAsset-Delete-Reason-150', - 'zIntResou-Trash State-151', - 'zIntResou-Trashed Date-152', - 'zAsset-Cloud Delete State-153', - 'zIntResou-Cloud Delete State-154', - 'zAddAssetAttr-PTP Trashed State-155', - 'zIntResou-PTP Trashed State-156', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-157', - 'zMedAnlyAstAttr-Media Analysis Timestamp-158', - 'zAsset-Analysis State Modificaion Date-159', - 'zAddAssetAttr- Pending View Count-160', - 'zAddAssetAttr- View Count-161', - 'zAddAssetAttr- Pending Play Count-162', - 'zAddAssetAttr- Play Count-163', - 'zAddAssetAttr- Pending Share Count-164', - 'zAddAssetAttr- Share Count-165', - 'zAddAssetAttr-Allowed for Analysis-166', - 'zAddAssetAttr-Scene Analysis Version-167', - 'zAddAssetAttr-Scene Analysis is From Preview-168', - 'zAddAssetAttr-Scene Analysis Timestamp-169', - 'zAsset-Duplication Asset Visibility State-170', - 'zAddAssetAttr-Destination Asset Copy State-171', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-172', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-173', - 'zCldMast-Source Master For Duplication Scope ID-174', - 'zAddAssetAttr-Source Asset For Duplication ID-175', - 'zCldMast-Source Master for Duplication ID-176', - 'zAddAssetAttr-Variation Suggestions States-177', - 'zAsset-High Frame Rate State-178', - 'zAsset-Video Key Frame Time Scale-179', - 'zAsset-Video Key Frame Value-180', - 'zExtAttr-ISO-181', - 'zExtAttr-Metering Mode-182', - 'zExtAttr-Sample Rate-183', - 'zExtAttr-Track Format-184', - 'zExtAttr-White Balance-185', - 'zExtAttr-Aperture-186', - 'zExtAttr-BitRate-187', - 'zExtAttr-Exposure Bias-188', - 'zExtAttr-Frames Per Second-189', - 'zExtAttr-Shutter Speed-190', - 'zExtAttr-Slush Scene Bias-191', - 'zExtAttr-Slush Version-192', - 'zExtAttr-Slush Preset-193', - 'zExtAttr-Slush Warm Bias-194', - 'zAsset-Height-195', - 'zAddAssetAttr-Original Height-196', - 'zIntResou-Unoriented Height-197', - 'zAsset-Width-198', - 'zAddAssetAttr-Original Width-199', - 'zIntResou-Unoriented Width-200', - 'zAsset-Thumbnail Index-201', - 'zAddAssetAttr-Embedded Thumbnail Height-202', - 'zAddAssetAttr-Embedded Thumbnail Length-203', - 'zAddAssetAttr-Embedded Thumbnail Offset-204', - 'zAddAssetAttr-Embedded Thumbnail Width-205', - 'zAsset-Packed Acceptable Crop Rect-206', - 'zAsset-Packed Badge Attributes-207', - 'zAsset-Packed Preferred Crop Rect-208', - 'zAsset-Curation Score-209', - 'zAsset-Camera Processing Adjustment State-210', - 'zAsset-Depth Type-211', - 'zAsset-Is Magic Carpet-QuicktimeMOVfile-212', - 'zAddAssetAttr-Orig Resource Choice-213', - 'zAddAssetAttr-Spatial Over Capture Group ID-214', - 'zAddAssetAttr-Place Annotation Data-215', - 'zAddAssetAttr-Distance Identity-HEX-216', - 'zAddAssetAttr-Edited IPTC Attributes-217', - 'zAddAssetAttr-Title-Comments via Cloud Website-218', - 'zAddAssetAttr-Accessibility Description-219', - 'zAddAssetAttr-Photo Stream Tag ID-220', - 'zAddAssetAttr-Share Type-221', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-222', - 'zAsset-Overall Aesthetic Score-223', - 'zAsset-zENT-224', - 'zAsset-zOPT-225', - 'zAsset-Master= zCldMast-zPK-226', - 'zAsset-Extended Attributes= zExtAttr-zPK-227', - 'zAsset-Import Session Key-228', - 'zAsset-Photo Analysis Attributes Key-229', - 'zAsset-FOK-Cloud Feed Asset Entry Key-230', - 'zAsset-Computed Attributes Asset Key-231', - 'zAsset-Promotion Score-232', - 'zAsset-Media Analysis Attributes Key-233', - 'zAsset-Media Group UUID-234', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-235', - 'zAsset.Cloud Collection GUID-236', - 'zAddAssetAttr-zENT-237', - 'ZAddAssetAttr-zOPT-238', - 'zAddAssetAttr-zAsset= zAsset_zPK-239', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-240', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-241', - 'zAddAssetAttr-Public Global UUID-242', - 'zAddAssetAttr-Original Assets UUID-243', - 'zAddAssetAttr-Originating Asset Identifier-244', - 'zAddAssetAttr.Adjusted Fingerprint-245', - 'zCldMast-zPK= zAsset-Master-246', - 'zCldMast-zENT-247', - 'zCldMast-zOPT-248', - 'zCldMast-Moment Share Key= zShare-zPK-249', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-250', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-251', - 'zCldMast-Originating Asset ID-252', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-253', - 'CMzCldMastMedData-zENT-254', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-255', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-256', - 'AAAzCldMastMedData-zENT-257', - 'AAAzCldMastMedData-CldMast key-258', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-259', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-260', - 'zExtAttr-zENT-261', - 'zExtAttr-zOPT-262', - 'zExtAttr-Asset Key-263', - 'zIntResou-zPK-264', - 'zIntResou-zENT-265', - 'zIntResou-zOPT-266', - 'zIntResou-Asset= zAsset_zPK-267', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-268', - 'zMedAnlyAstAttr-zEnt-269', - 'zMedAnlyAstAttr-zOpt-270', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-271') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() + ''' - tsvname = 'Ph50.2-Asset_IntResou-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271])) - tlactivity = 'Ph50.2-Asset_IntResou-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + 'zAsset-zPK-7', + 'zAddAssetAttr-zPK-8', + 'zAsset-UUID = store.cloudphotodb-9', + 'zAddAssetAttr-Master Fingerprint-10', + 'zIntResou-Fingerprint-11', + 'zIntResou-Local Availability-4QueryStart-1', + 'zIntResou-Remote Availability-4QueryStart-2', + 'zIntResou-Resource Type-4QueryStart-3', + 'zIntResou-Datastore Sub-Type-4QueryStart-4', + 'zIntResou-Recipe ID-4QueryStart-5', + 'zAsset Complete-6', + 'zAsset-Bundle Scope-12', + 'zAsset-Syndication State-13', + 'zAsset-Cloud is My Asset-14', + 'zAsset-Cloud is deletable-Asset-15', + 'zAsset-Cloud_Local_State-16', + 'zAsset-Visibility State-17', + 'zExtAttr-Camera Make-18', + 'zExtAttr-Camera Model-19', + 'zExtAttr-Lens Model-20', + 'zExtAttr-Flash Fired-21', + 'zExtAttr-Focal Lenght-22', + 'zExtAttr-Focal Lenth in 35MM-23', + 'zExtAttr-Digital Zoom Ratio-24', + 'zAsset-Derived Camera Capture Device-25', + 'zAddAssetAttr-Camera Captured Device-26', + 'zAddAssetAttr-Imported by-27', + 'zCldMast-Imported By-28', + 'zAddAssetAttr.Imported by Bundle Identifier-29', + 'zAddAssetAttr-Imported By Display Name-30', + 'zCldMast-Imported by Bundle ID-31', + 'zCldMast-Imported by Display Name-32', + 'zAsset-Saved Asset Type-33', + 'zAsset-Directory-Path-34', + 'zAsset-Filename-35', + 'zAddAssetAttr- Original Filename-36', + 'zCldMast- Original Filename-37', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-38', + 'zAsset-Active Library Scope Participation State-39', + 'zAsset-Library Scope Share State- StillTesting-40', + ('zAsset-Added Date-41', 'datetime'), + ('zAsset- SortToken -CameraRoll-42', 'datetime'), + ('zAddAssetAttr-Date Created Source-43', 'datetime'), + ('zAsset-Date Created-44', 'datetime'), + ('zCldMast-Creation Date-45', 'datetime'), + ('zIntResou-CldMst Date Created-46', 'datetime'), + 'zAddAssetAttr-Time Zone Name-47', + 'zAddAssetAttr-Time Zone Offset-48', + 'zAddAssetAttr-Inferred Time Zone Offset-49', + 'zAddAssetAttr-EXIF-String-50', + ('zAsset-Modification Date-51', 'datetime'), + ('zAsset-Last Shared Date-52', 'datetime'), + 'zCldMast-Cloud Local State-53', + ('zCldMast-Import Date-54', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-55', 'datetime'), + 'zAddAssetAttr-Import Session ID-56', + ('zAddAssetAttr-Alt Import Image Date-57', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-58', + ('zAsset-Cloud Batch Publish Date-59', 'datetime'), + ('zAsset-Cloud Server Publish Date-60', 'datetime'), + 'zAsset-Cloud Download Requests-61', + 'zAsset-Cloud Batch ID-62', + 'zAddAssetAttr-Upload Attempts-63', + 'zAsset-Latitude-64', + 'zExtAttr-Latitude-65', + 'zAsset-Longitude-66', + 'zExtAttr-Longitude-67', + 'zAddAssetAttr-GPS Horizontal Accuracy-68', + 'zAddAssetAttr-Location Hash-69', + 'zAddAssetAttr-Shifted Location Valid-70', + 'zAddAssetAttr-Shifted Location Data-71', + 'zAddAssetAttr-Reverse Location Is Valid-72', + 'zAddAssetAttr-Reverse Location Data-73', + 'AAAzCldMastMedData-zOPT-74', + 'zAddAssetAttr-Media Metadata Type-75', + 'AAAzCldMastMedData-Data-76', + 'CldMasterzCldMastMedData-zOPT-77', + 'zCldMast-Media Metadata Type-78', + 'CMzCldMastMedData-Data-79', + 'zAsset-Search Index Rebuild State-80', + 'zAddAssetAttr-Syndication History-81', + 'zMedAnlyAstAttr-Syndication Processing Version-82', + 'zMedAnlyAstAttr-Syndication Processing Value-83', + 'zAsset-Orientation-84', + 'zAddAssetAttr-Original Orientation-85', + 'zAsset-Kind-86', + 'zAsset-Kind-Sub-Type-87', + 'zAddAssetAttr-Cloud Kind Sub Type-88', + 'zAsset-Playback Style-89', + 'zAsset-Playback Variation-90', + 'zAsset-Video Duration-91', + 'zExtAttr-Duration-92', + 'zAsset-Video CP Duration-93', + 'zAddAssetAttr-Video CP Duration Time Scale-94', + 'zAsset-Video CP Visibility State-95', + 'zAddAssetAttr-Video CP Display Value-96', + 'zAddAssetAttr-Video CP Display Time Scale-97', + 'zIntResou-Datastore Class ID-98', + 'zAsset-Cloud Placeholder Kind-99', + 'zIntResou-Local Availability-100', + 'zIntResou-Local Availability Target-101', + 'zIntResou-Cloud Local State-102', + 'zIntResou-Remote Availability-103', + 'zIntResou-Remote Availability Target-104', + 'zIntResou-Transient Cloud Master-105', + 'zIntResou-Side Car Index-106', + 'zIntResou- File ID-107', + 'zIntResou-Version-108', + 'zAddAssetAttr- Original-File-Size-109', + 'zIntResou-Resource Type-110', + 'zIntResou-Datastore Sub-Type-111', + 'zIntResou-Cloud Source Type-112', + 'zIntResou-Data Length-113', + 'zIntResou-Recipe ID-114', + ('zIntResou-Cloud Last Prefetch Date-115', 'datetime'), + 'zIntResou-Cloud Prefetch Count-116', + ('zIntResou- Cloud-Last-OnDemand Download-Date-117', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-118', + 'zIntResou-Compact-UTI-119', + 'zAsset-Uniform Type ID-120', + 'zAsset-Original Color Space-121', + 'zCldMast-Uniform_Type_ID-122', + 'zCldMast-Full Size JPEG Source-123', + 'zAsset-HDR Gain-124', + 'zAsset-zHDR_Type-125', + 'zExtAttr-Codec-126', + 'zIntResou-Codec Four Char Code Name-127', + 'zCldMast-Codec Name-128', + 'zCldMast-Video Frame Rate-129', + 'zCldMast-Placeholder State-130', + 'zAsset-Depth_Type-131', + 'zAsset-Avalanche UUID-132', + 'zAsset-Avalanche_Pick_Type-BurstAsset-133', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134', + 'zAddAssetAttr-Cloud Recovery State-135', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-136', + 'zAsset-Deferred Processing Needed-137', + 'zAsset-Video Deferred Processing Needed-138', + 'zAddAssetAttr-Deferred Photo Identifier-139', + 'zAddAssetAttr-Deferred Processing Candidate Options-140', + 'zAsset-Has Adjustments-Camera-Effects-Filters-141', + ('zAsset-Adjustment Timestamp-142', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-143', + 'zAddAssetAttr-Montage-144', + 'zAsset-Favorite-145', + 'zAsset-Hidden-146', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-147', + ('zAsset-Trashed Date-148', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-149', + 'zAsset-Delete-Reason-150', + 'zIntResou-Trash State-151', + ('zIntResou-Trashed Date-152', 'datetime'), + 'zAsset-Cloud Delete State-153', + 'zIntResou-Cloud Delete State-154', + 'zAddAssetAttr-PTP Trashed State-155', + 'zIntResou-PTP Trashed State-156', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-157', + ('zMedAnlyAstAttr-Media Analysis Timestamp-158', 'datetime'), + ('zAsset-Analysis State Modification Date-159', 'datetime'), + 'zAddAssetAttr- Pending View Count-160', + 'zAddAssetAttr- View Count-161', + 'zAddAssetAttr- Pending Play Count-162', + 'zAddAssetAttr- Play Count-163', + 'zAddAssetAttr- Pending Share Count-164', + 'zAddAssetAttr- Share Count-165', + 'zAddAssetAttr-Allowed for Analysis-166', + 'zAddAssetAttr-Scene Analysis Version-167', + 'zAddAssetAttr-Scene Analysis is From Preview-168', + ('zAddAssetAttr-Scene Analysis Timestamp-169', 'datetime'), + 'zAsset-Duplication Asset Visibility State-170', + 'zAddAssetAttr-Destination Asset Copy State-171', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-172', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-173', + 'zCldMast-Source Master For Duplication Scope ID-174', + 'zAddAssetAttr-Source Asset For Duplication ID-175', + 'zCldMast-Source Master for Duplication ID-176', + 'zAddAssetAttr-Variation Suggestions States-177', + 'zAsset-High Frame Rate State-178', + 'zAsset-Video Key Frame Time Scale-179', + 'zAsset-Video Key Frame Value-180', + 'zExtAttr-ISO-181', + 'zExtAttr-Metering Mode-182', + 'zExtAttr-Sample Rate-183', + 'zExtAttr-Track Format-184', + 'zExtAttr-White Balance-185', + 'zExtAttr-Aperture-186', + 'zExtAttr-BitRate-187', + 'zExtAttr-Exposure Bias-188', + 'zExtAttr-Frames Per Second-189', + 'zExtAttr-Shutter Speed-190', + 'zExtAttr-Slush Scene Bias-191', + 'zExtAttr-Slush Version-192', + 'zExtAttr-Slush Preset-193', + 'zExtAttr-Slush Warm Bias-194', + 'zAsset-Height-195', + 'zAddAssetAttr-Original Height-196', + 'zIntResou-Unoriented Height-197', + 'zAsset-Width-198', + 'zAddAssetAttr-Original Width-199', + 'zIntResou-Unoriented Width-200', + 'zAsset-Thumbnail Index-201', + 'zAddAssetAttr-Embedded Thumbnail Height-202', + 'zAddAssetAttr-Embedded Thumbnail Length-203', + 'zAddAssetAttr-Embedded Thumbnail Offset-204', + 'zAddAssetAttr-Embedded Thumbnail Width-205', + 'zAsset-Packed Acceptable Crop Rect-206', + 'zAsset-Packed Badge Attributes-207', + 'zAsset-Packed Preferred Crop Rect-208', + 'zAsset-Curation Score-209', + 'zAsset-Camera Processing Adjustment State-210', + 'zAsset-Depth Type-211', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-212', + 'zAddAssetAttr-Orig Resource Choice-213', + 'zAddAssetAttr-Spatial Over Capture Group ID-214', + 'zAddAssetAttr-Place Annotation Data-215', + 'zAddAssetAttr-Distance Identity-HEX-216', + 'zAddAssetAttr-Edited IPTC Attributes-217', + 'zAddAssetAttr-Title-Comments via Cloud Website-218', + 'zAddAssetAttr-Accessibility Description-219', + 'zAddAssetAttr-Photo Stream Tag ID-220', + 'zAddAssetAttr-Share Type-221', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-222', + 'zAsset-Overall Aesthetic Score-223', + 'zAsset-zENT-224', + 'zAsset-zOPT-225', + 'zAsset-Master= zCldMast-zPK-226', + 'zAsset-Extended Attributes= zExtAttr-zPK-227', + 'zAsset-Import Session Key-228', + 'zAsset-Photo Analysis Attributes Key-229', + 'zAsset-FOK-Cloud Feed Asset Entry Key-230', + 'zAsset-Computed Attributes Asset Key-231', + 'zAsset-Promotion Score-232', + 'zAsset-Media Analysis Attributes Key-233', + 'zAsset-Media Group UUID-234', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-235', + 'zAsset.Cloud Collection GUID-236', + 'zAddAssetAttr-zENT-237', + 'ZAddAssetAttr-zOPT-238', + 'zAddAssetAttr-zAsset= zAsset_zPK-239', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-240', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-241', + 'zAddAssetAttr-Public Global UUID-242', + 'zAddAssetAttr-Original Assets UUID-243', + 'zAddAssetAttr-Originating Asset Identifier-244', + 'zAddAssetAttr.Adjusted Fingerprint-245', + 'zCldMast-zPK= zAsset-Master-246', + 'zCldMast-zENT-247', + 'zCldMast-zOPT-248', + 'zCldMast-Moment Share Key= zShare-zPK-249', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-250', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-251', + 'zCldMast-Originating Asset ID-252', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-253', + 'CMzCldMastMedData-zENT-254', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-255', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-256', + 'AAAzCldMastMedData-zENT-257', + 'AAAzCldMastMedData-CldMast key-258', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-259', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-260', + 'zExtAttr-zENT-261', + 'zExtAttr-zOPT-262', + 'zExtAttr-Asset Key-263', + 'zIntResou-zPK-264', + 'zIntResou-zENT-265', + 'zIntResou-zOPT-266', + 'zIntResou-Asset= zAsset_zPK-267', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-268', + 'zMedAnlyAstAttr-zEnt-269', + 'zMedAnlyAstAttr-zOpt-270', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-271') + data_list = get_sqlite_db_records(source_path, query) - else: - logfunc('No Internal Resource data available for iOS 16 Syndication Photos Library Photos.sqlite') - - db.close() - return + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -10077,356 +9878,331 @@ def get_ph50intresouoptimzdatasyndpl(files_found, report_folder, seeker, wrap_te LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274])) - - counter += 1 - - description = 'Parses iOS 17 asset records from Syndication.photos.library-database-Photos.sqlite' \ - ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide' \ - ' data for investigative analysis of assets being stored locally on the device verses' \ - ' assets being stored in iCloud Photos as the result of optimization. This is very large' \ - ' query and script, I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' - report = ArtifactHtmlReport('Ph50.2-Asset_IntResou-SyndPL') - report.start_artifact_report(report_folder, 'Ph50.2-Asset_IntResou-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-4QueryStart-0', - 'zAsset-zPK-1', - 'zAddAssetAttr-zPK-2', - 'zAsset-UUID = store.cloudphotodb-3', - 'zAddAssetAttr-Master Fingerprint-4', - 'zAddAssetAttr.Adjusted Fingerprint-5', - 'zIntResou-Fingerprint-6', - 'zIntResou-Local Availability-4QueryStart-7', - 'zIntResou-Remote Availability-4QueryStart-8', - 'zIntResou-Resource Type-4QueryStart-9', - 'zIntResou-Datastore Sub-Type-4QueryStart-10', - 'zIntResou-Recipe ID-4QueryStart-11', - 'zAsset Complete-12', - 'zAsset-Bundle Scope-13', - 'zAsset-Syndication State-14', - 'zAsset-Cloud is My Asset-15', - 'zAsset-Cloud is deletable-Asset-16', - 'zAsset-Cloud_Local_State-17', - 'zAsset-Visibility State-18', - 'zExtAttr-Camera Make-19', - 'zExtAttr-Camera Model-20', - 'zExtAttr-Lens Model-21', - 'zExtAttr-Flash Fired-22', - 'zExtAttr-Focal Lenght-23', - 'zExtAttr-Focal Length in 35MM-24', - 'zExtAttr-Digital Zoom Ratio-25', - 'zAsset-Derived Camera Capture Device-26', - 'zAddAssetAttr-Camera Captured Device-27', - 'zAddAssetAttr-Imported by-28', - 'zCldMast-Imported By-29', - 'zAddAssetAttr.Imported by Bundle Identifier-30', - 'zAddAssetAttr-Imported By Display Name-31', - 'zCldMast-Imported by Bundle ID-32', - 'zCldMast-Imported by Display Name-33', - 'zAsset-Saved Asset Type-34', - 'zAsset-Directory-Path-35', - 'zAsset-Filename-36', - 'zAddAssetAttr- Original Filename-37', - 'zCldMast- Original Filename-38', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-39', - 'zAsset-Active Library Scope Participation State-40', - 'zAsset-Library Scope Share State- StillTesting-41', - 'zAsset-Added Date-42', - 'zAsset- SortToken -CameraRoll-43', - 'zAddAssetAttr-Date Created Source-44', - 'zAsset-Date Created-45', - 'zCldMast-Creation Date-46', - 'zIntResou-CldMst Date Created-47', - 'zAddAssetAttr-Time Zone Name-48', - 'zAddAssetAttr-Time Zone Offset-49', - 'zAddAssetAttr-Inferred Time Zone Offset-50', - 'zAddAssetAttr-EXIF-String-51', - 'zAsset-Modification Date-52', - 'zAsset-Last Shared Date-53', - 'zCldMast-Cloud Local State-54', - 'zCldMast-Import Date-55', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-56', - 'zAddAssetAttr-Import Session ID-57', - 'zAddAssetAttr-Alt Import Image Date-58', - 'zCldMast-Import Session ID- AirDrop-StillTesting-59', - 'zAsset-Cloud Batch Publish Date-60', - 'zAsset-Cloud Server Publish Date-61', - 'zAsset-Cloud Download Requests-62', - 'zAsset-Cloud Batch ID-63', - 'zAddAssetAttr-Upload Attempts-64', - 'zAsset-Latitude-65', - 'zExtAttr-Latitude-66', - 'zAsset-Longitude-67', - 'zExtAttr-Longitude-68', - 'zAddAssetAttr-GPS Horizontal Accuracy-69', - 'zAddAssetAttr-Location Hash-70', - 'zAddAssetAttr-Shifted Location Valid-71', - 'zAddAssetAttr-Shifted Location Data-72', - 'zAddAssetAttr-Reverse Location Is Valid-73', - 'zAddAssetAttr-Reverse Location Data-74', - 'AAAzCldMastMedData-zOPT-75', - 'zAddAssetAttr-Media Metadata Type-76', - 'AAAzCldMastMedData-Data-77', - 'CldMasterzCldMastMedData-zOPT-78', - 'zCldMast-Media Metadata Type-79', - 'CMzCldMastMedData-Data-80', - 'zAsset-Search Index Rebuild State-81', - 'zAddAssetAttr-Syndication History-82', - 'zMedAnlyAstAttr-Syndication Processing Version-83', - 'zMedAnlyAstAttr-Syndication Processing Value-84', - 'zAsset-Orientation-85', - 'zAddAssetAttr-Original Orientation-86', - 'zAsset-Kind-87', - 'zAsset-Kind-Sub-Type-88', - 'zAddAssetAttr-Cloud Kind Sub Type-89', - 'zAsset-Playback Style-90', - 'zAsset-Playback Variation-91', - 'zAsset-Video Duration-92', - 'zExtAttr-Duration-93', - 'zAsset-Video CP Duration-94', - 'zAddAssetAttr-Video CP Duration Time Scale-95', - 'zAsset-Video CP Visibility State-96', - 'zAddAssetAttr-Video CP Display Value-97', - 'zAddAssetAttr-Video CP Display Time Scale-98', - 'zIntResou-Datastore Class ID-99', - 'zAsset-Cloud Placeholder Kind-100', - 'zIntResou-Local Availability-101', - 'zIntResou-Local Availability Target-102', - 'zIntResou-Cloud Local State-103', - 'zIntResou-Remote Availability-104', - 'zIntResou-Remote Availability Target-105', - 'zIntResou-Transient Cloud Master-106', - 'zIntResou-Side Car Index-107', - 'zIntResou- File ID-108', - 'zIntResou-Version-109', - 'zAddAssetAttr- Original-File-Size-110', - 'zIntResou-Resource Type-111', - 'zIntResou-Datastore Sub-Type-112', - 'zIntResou-Cloud Source Type-113', - 'zIntResou-Data Length-114', - 'zIntResou-Recipe ID-115', - 'zIntResou-Cloud Last Prefetch Date-116', - 'zIntResou-Cloud Prefetch Count-117', - 'zIntResou- Cloud-Last-OnDemand Download-Date-118', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-119', - 'zIntResou-Compact-UTI-120', - 'zAsset-Uniform Type ID-121', - 'zAsset-Original Color Space-122', - 'zCldMast-Uniform_Type_ID-123', - 'zCldMast-Full Size JPEG Source-124', - 'zAsset-HDR Gain-125', - 'zAsset-zHDR_Type-126', - 'zExtAttr-Codec-127', - 'zIntResou-Codec Four Char Code Name-128', - 'zCldMast-Codec Name-129', - 'zCldMast-Video Frame Rate-130', - 'zCldMast-Placeholder State-131', - 'zAsset-Depth_Type-132', - 'zAsset-Avalanche UUID-133', - 'zAsset-Avalanche_Pick_Type-BurstAsset-134', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-135', - 'zAddAssetAttr-Cloud Recovery State-136', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-137', - 'zAsset-Deferred Processing Needed-138', - 'zAsset-Video Deferred Processing Needed-139', - 'zAddAssetAttr-Deferred Photo Identifier-140', - 'zAddAssetAttr-Deferred Processing Candidate Options-141', - 'zAsset-Has Adjustments-Camera-Effects-Filters-142', - 'zAsset-Adjustment Timestamp-143', - 'zAddAssetAttr-Editor Bundle ID-144', - 'zAddAssetAttr-Montage-145', - 'zAsset-Favorite-146', - 'zAsset-Hidden-147', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-148', - 'zAsset-Trashed Date-149', - 'zAsset-Trashed by Participant= zSharePartic_zPK-150', - 'zAsset-Delete-Reason-151', - 'zIntResou-Trash State-152', - 'zIntResou-Trashed Date-153', - 'zAsset-Cloud Delete State-154', - 'zIntResou-Cloud Delete State-155', - 'zAddAssetAttr-PTP Trashed State-156', - 'zIntResou-PTP Trashed State-157', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-158', - 'zMedAnlyAstAttr-Media Analysis Timestamp-159', - 'zAsset-Analysis State Modification Date-160', - 'zAddAssetAttr- Pending View Count-161', - 'zAddAssetAttr- View Count-162', - 'zAddAssetAttr- Pending Play Count-163', - 'zAddAssetAttr- Play Count-164', - 'zAddAssetAttr- Pending Share Count-165', - 'zAddAssetAttr- Share Count-166', - 'zAddAssetAttr-Allowed for Analysis-167', - 'zAddAssetAttr-Scene Analysis Version-168', - 'zAddAssetAttr-Scene Analysis is From Preview-169', - 'zAddAssetAttr-Scene Analysis Timestamp-170', - 'zAsset-Duplication Asset Visibility State-171', - 'zAddAssetAttr-Destination Asset Copy State-172', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-173', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-174', - 'zCldMast-Source Master For Duplication Scope ID-175', - 'zAddAssetAttr-Source Asset For Duplication ID-176', - 'zCldMast-Source Master for Duplication ID-177', - 'zAddAssetAttr-Variation Suggestions States-178', - 'zAsset-High Frame Rate State-179', - 'zAsset-Video Key Frame Time Scale-180', - 'zAsset-Video Key Frame Value-181', - 'zExtAttr-ISO-182', - 'zExtAttr-Metering Mode-183', - 'zExtAttr-Sample Rate-184', - 'zExtAttr-Track Format-185', - 'zExtAttr-White Balance-186', - 'zExtAttr-Aperture-187', - 'zExtAttr-BitRate-188', - 'zExtAttr-Exposure Bias-189', - 'zExtAttr-Frames Per Second-190', - 'zExtAttr-Shutter Speed-191', - 'zExtAttr-Slush Scene Bias-192', - 'zExtAttr-Slush Version-193', - 'zExtAttr-Slush Preset-194', - 'zExtAttr-Slush Warm Bias-195', - 'zAsset-Height-196', - 'zAddAssetAttr-Original Height-197', - 'zIntResou-UnOriented Height-198', - 'zAsset-Width-199', - 'zAddAssetAttr-Original Width-200', - 'zIntResou-UnOriented Width-201', - 'zAsset-Thumbnail Index-202', - 'zAddAssetAttr-Embedded Thumbnail Height-203', - 'zAddAssetAttr-Embedded Thumbnail Length-204', - 'zAddAssetAttr-Embedded Thumbnail Offset-205', - 'zAddAssetAttr-Embedded Thumbnail Width-206', - 'zAsset-Packed Acceptable Crop Rect-207', - 'zAsset-Packed Badge Attributes-208', - 'zAsset-Packed Preferred Crop Rect-209', - 'zAsset-Curation Score-210', - 'zAsset-Camera Processing Adjustment State-211', - 'zAsset-Depth Type-212', - 'zAsset-Is Magic Carpet-Quicktime_MOV-file-213', - 'zAddAssetAttr-Orig Resource Choice-214', - 'zAsset-Spatial Type-215', - 'zAddAssetAttr-Spatial Over Capture Group ID-216', - 'zAddAssetAttr-Place Annotation Data-217', - 'zAddAssetAttr-Distance Identity-HEX-218', - 'zAddAssetAttr-Edited IPTC Attributes-219', - 'zAddAssetAttr-Title-Comments via Cloud Website-220', - 'zAddAssetAttr-Accessibility Description-221', - 'zAddAssetAttr-Photo Stream Tag ID-222', - 'zAddAssetAttr-Share Type-223', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-224', - 'zAsset-Overall Aesthetic Score-225', - 'zAsset-zENT-226', - 'zAsset-zOPT-227', - 'zAsset-Master= zCldMast-zPK-228', - 'zAsset-Extended Attributes= zExtAttr-zPK-229', - 'zAsset-Import Session Key-230', - 'zAsset-Photo Analysis Attributes Key-231', - 'zAsset-FOK-Cloud Feed Asset Entry Key-232', - 'zAsset-Computed Attributes Asset Key-233', - 'zAsset-Promotion Score-234', - 'zAsset-Iconic Score-235', - 'zAsset-Media Analysis Attributes Key-236', - 'zAsset-Media Group UUID-237', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-238', - 'zAsset.Cloud Collection GUID-239', - 'zAddAssetAttr-zENT-240', - 'ZAddAssetAttr-zOPT-241', - 'zAddAssetAttr-zAsset= zAsset_zPK-242', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-243', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-244', - 'zAddAssetAttr-Public Global UUID-245', - 'zAddAssetAttr-Original Assets UUID-246', - 'zAddAssetAttr-Originating Asset Identifier-247', - 'zAddAssetAttr.Adjusted Fingerprint-248', - 'zCldMast-zPK= zAsset-Master-249', - 'zCldMast-zENT-250', - 'zCldMast-zOPT-251', - 'zCldMast-Moment Share Key= zShare-zPK-252', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-253', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-254', - 'zCldMast-Originating Asset ID-255', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-256', - 'CMzCldMastMedData-zENT-257', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-258', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-259', - 'AAAzCldMastMedData-zENT-260', - 'AAAzCldMastMedData-CldMast key-261', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-262', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-263', - 'zExtAttr-zENT-264', - 'zExtAttr-zOPT-265', - 'zExtAttr-Asset Key-266', - 'zIntResou-zPK-267', - 'zIntResou-zENT-268', - 'zIntResou-zOPT-269', - 'zIntResou-Asset= zAsset_zPK-270', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-271', - 'zMedAnlyAstAttr-zEnt-272', - 'zMedAnlyAstAttr-zOpt-273', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-274') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph50.2-Asset_IntResou-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) + ''' - tlactivity = 'Ph50.2-Asset_IntResou-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274])) - else: - logfunc('No Internal Resource data available for iOS 17 Syndication Photos Library Photos.sqlite') + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + 'zAsset-zPK-1', + 'zAddAssetAttr-zPK-2', + 'zAsset-UUID = store.cloudphotodb-3', + 'zAddAssetAttr-Master Fingerprint-4', + 'zAddAssetAttr.Adjusted Fingerprint-5', + 'zIntResou-Fingerprint-6', + 'zIntResou-Local Availability-4QueryStart-7', + 'zIntResou-Remote Availability-4QueryStart-8', + 'zIntResou-Resource Type-4QueryStart-9', + 'zIntResou-Datastore Sub-Type-4QueryStart-10', + 'zIntResou-Recipe ID-4QueryStart-11', + 'zAsset Complete-12', + 'zAsset-Bundle Scope-13', + 'zAsset-Syndication State-14', + 'zAsset-Cloud is My Asset-15', + 'zAsset-Cloud is deletable-Asset-16', + 'zAsset-Cloud_Local_State-17', + 'zAsset-Visibility State-18', + 'zExtAttr-Camera Make-19', + 'zExtAttr-Camera Model-20', + 'zExtAttr-Lens Model-21', + 'zExtAttr-Flash Fired-22', + 'zExtAttr-Focal Lenght-23', + 'zExtAttr-Focal Length in 35MM-24', + 'zExtAttr-Digital Zoom Ratio-25', + 'zAsset-Derived Camera Capture Device-26', + 'zAddAssetAttr-Camera Captured Device-27', + 'zAddAssetAttr-Imported by-28', + 'zCldMast-Imported By-29', + 'zAddAssetAttr.Imported by Bundle Identifier-30', + 'zAddAssetAttr-Imported By Display Name-31', + 'zCldMast-Imported by Bundle ID-32', + 'zCldMast-Imported by Display Name-33', + 'zAsset-Saved Asset Type-34', + 'zAsset-Directory-Path-35', + 'zAsset-Filename-36', + 'zAddAssetAttr- Original Filename-37', + 'zCldMast- Original Filename-38', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-39', + 'zAsset-Active Library Scope Participation State-40', + 'zAsset-Library Scope Share State- StillTesting-41', + ('zAsset-Added Date-42', 'datetime'), + ('zAsset- SortToken -CameraRoll-43', 'datetime'), + ('zAddAssetAttr-Date Created Source-44', 'datetime'), + ('zAsset-Date Created-45', 'datetime'), + ('zCldMast-Creation Date-46', 'datetime'), + ('zIntResou-CldMst Date Created-47', 'datetime'), + 'zAddAssetAttr-Time Zone Name-48', + 'zAddAssetAttr-Time Zone Offset-49', + 'zAddAssetAttr-Inferred Time Zone Offset-50', + 'zAddAssetAttr-EXIF-String-51', + ('zAsset-Modification Date-52', 'datetime'), + ('zAsset-Last Shared Date-53', 'datetime'), + 'zCldMast-Cloud Local State-54', + ('zCldMast-Import Date-55', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-56', 'datetime'), + 'zAddAssetAttr-Import Session ID-57', + ('zAddAssetAttr-Alt Import Image Date-58', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-59', + ('zAsset-Cloud Batch Publish Date-60', 'datetime'), + ('zAsset-Cloud Server Publish Date-61', 'datetime'), + 'zAsset-Cloud Download Requests-62', + 'zAsset-Cloud Batch ID-63', + 'zAddAssetAttr-Upload Attempts-64', + 'zAsset-Latitude-65', + 'zExtAttr-Latitude-66', + 'zAsset-Longitude-67', + 'zExtAttr-Longitude-68', + 'zAddAssetAttr-GPS Horizontal Accuracy-69', + 'zAddAssetAttr-Location Hash-70', + 'zAddAssetAttr-Shifted Location Valid-71', + 'zAddAssetAttr-Shifted Location Data-72', + 'zAddAssetAttr-Reverse Location Is Valid-73', + 'zAddAssetAttr-Reverse Location Data-74', + 'AAAzCldMastMedData-zOPT-75', + 'zAddAssetAttr-Media Metadata Type-76', + 'AAAzCldMastMedData-Data-77', + 'CldMasterzCldMastMedData-zOPT-78', + 'zCldMast-Media Metadata Type-79', + 'CMzCldMastMedData-Data-80', + 'zAsset-Search Index Rebuild State-81', + 'zAddAssetAttr-Syndication History-82', + 'zMedAnlyAstAttr-Syndication Processing Version-83', + 'zMedAnlyAstAttr-Syndication Processing Value-84', + 'zAsset-Orientation-85', + 'zAddAssetAttr-Original Orientation-86', + 'zAsset-Kind-87', + 'zAsset-Kind-Sub-Type-88', + 'zAddAssetAttr-Cloud Kind Sub Type-89', + 'zAsset-Playback Style-90', + 'zAsset-Playback Variation-91', + 'zAsset-Video Duration-92', + 'zExtAttr-Duration-93', + 'zAsset-Video CP Duration-94', + 'zAddAssetAttr-Video CP Duration Time Scale-95', + 'zAsset-Video CP Visibility State-96', + 'zAddAssetAttr-Video CP Display Value-97', + 'zAddAssetAttr-Video CP Display Time Scale-98', + 'zIntResou-Datastore Class ID-99', + 'zAsset-Cloud Placeholder Kind-100', + 'zIntResou-Local Availability-101', + 'zIntResou-Local Availability Target-102', + 'zIntResou-Cloud Local State-103', + 'zIntResou-Remote Availability-104', + 'zIntResou-Remote Availability Target-105', + 'zIntResou-Transient Cloud Master-106', + 'zIntResou-Side Car Index-107', + 'zIntResou- File ID-108', + 'zIntResou-Version-109', + 'zAddAssetAttr- Original-File-Size-110', + 'zIntResou-Resource Type-111', + 'zIntResou-Datastore Sub-Type-112', + 'zIntResou-Cloud Source Type-113', + 'zIntResou-Data Length-114', + 'zIntResou-Recipe ID-115', + ('zIntResou-Cloud Last Prefetch Date-116', 'datetime'), + 'zIntResou-Cloud Prefetch Count-117', + ('zIntResou- Cloud-Last-OnDemand Download-Date-118', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-119', + 'zIntResou-Compact-UTI-120', + 'zAsset-Uniform Type ID-121', + 'zAsset-Original Color Space-122', + 'zCldMast-Uniform_Type_ID-123', + 'zCldMast-Full Size JPEG Source-124', + 'zAsset-HDR Gain-125', + 'zAsset-zHDR_Type-126', + 'zExtAttr-Codec-127', + 'zIntResou-Codec Four Char Code Name-128', + 'zCldMast-Codec Name-129', + 'zCldMast-Video Frame Rate-130', + 'zCldMast-Placeholder State-131', + 'zAsset-Depth_Type-132', + 'zAsset-Avalanche UUID-133', + 'zAsset-Avalanche_Pick_Type-BurstAsset-134', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-135', + 'zAddAssetAttr-Cloud Recovery State-136', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-137', + 'zAsset-Deferred Processing Needed-138', + 'zAsset-Video Deferred Processing Needed-139', + 'zAddAssetAttr-Deferred Photo Identifier-140', + 'zAddAssetAttr-Deferred Processing Candidate Options-141', + 'zAsset-Has Adjustments-Camera-Effects-Filters-142', + ('zAsset-Adjustment Timestamp-143', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-144', + 'zAddAssetAttr-Montage-145', + 'zAsset-Favorite-146', + 'zAsset-Hidden-147', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-148', + ('zAsset-Trashed Date-149', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-150', + 'zAsset-Delete-Reason-151', + 'zIntResou-Trash State-152', + ('zIntResou-Trashed Date-153', 'datetime'), + 'zAsset-Cloud Delete State-154', + 'zIntResou-Cloud Delete State-155', + 'zAddAssetAttr-PTP Trashed State-156', + 'zIntResou-PTP Trashed State-157', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-158', + ('zMedAnlyAstAttr-Media Analysis Timestamp-159', 'datetime'), + ('zAsset-Analysis State Modification Date-160', 'datetime'), + 'zAddAssetAttr- Pending View Count-161', + 'zAddAssetAttr- View Count-162', + 'zAddAssetAttr- Pending Play Count-163', + 'zAddAssetAttr- Play Count-164', + 'zAddAssetAttr- Pending Share Count-165', + 'zAddAssetAttr- Share Count-166', + 'zAddAssetAttr-Allowed for Analysis-167', + 'zAddAssetAttr-Scene Analysis Version-168', + 'zAddAssetAttr-Scene Analysis is From Preview-169', + ('zAddAssetAttr-Scene Analysis Timestamp-170', 'datetime'), + 'zAsset-Duplication Asset Visibility State-171', + 'zAddAssetAttr-Destination Asset Copy State-172', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-173', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-174', + 'zCldMast-Source Master For Duplication Scope ID-175', + 'zAddAssetAttr-Source Asset For Duplication ID-176', + 'zCldMast-Source Master for Duplication ID-177', + 'zAddAssetAttr-Variation Suggestions States-178', + 'zAsset-High Frame Rate State-179', + 'zAsset-Video Key Frame Time Scale-180', + 'zAsset-Video Key Frame Value-181', + 'zExtAttr-ISO-182', + 'zExtAttr-Metering Mode-183', + 'zExtAttr-Sample Rate-184', + 'zExtAttr-Track Format-185', + 'zExtAttr-White Balance-186', + 'zExtAttr-Aperture-187', + 'zExtAttr-BitRate-188', + 'zExtAttr-Exposure Bias-189', + 'zExtAttr-Frames Per Second-190', + 'zExtAttr-Shutter Speed-191', + 'zExtAttr-Slush Scene Bias-192', + 'zExtAttr-Slush Version-193', + 'zExtAttr-Slush Preset-194', + 'zExtAttr-Slush Warm Bias-195', + 'zAsset-Height-196', + 'zAddAssetAttr-Original Height-197', + 'zIntResou-UnOriented Height-198', + 'zAsset-Width-199', + 'zAddAssetAttr-Original Width-200', + 'zIntResou-UnOriented Width-201', + 'zAsset-Thumbnail Index-202', + 'zAddAssetAttr-Embedded Thumbnail Height-203', + 'zAddAssetAttr-Embedded Thumbnail Length-204', + 'zAddAssetAttr-Embedded Thumbnail Offset-205', + 'zAddAssetAttr-Embedded Thumbnail Width-206', + 'zAsset-Packed Acceptable Crop Rect-207', + 'zAsset-Packed Badge Attributes-208', + 'zAsset-Packed Preferred Crop Rect-209', + 'zAsset-Curation Score-210', + 'zAsset-Camera Processing Adjustment State-211', + 'zAsset-Depth Type-212', + 'zAsset-Is Magic Carpet-Quicktime_MOV-file-213', + 'zAddAssetAttr-Orig Resource Choice-214', + 'zAsset-Spatial Type-215', + 'zAddAssetAttr-Spatial Over Capture Group ID-216', + 'zAddAssetAttr-Place Annotation Data-217', + 'zAddAssetAttr-Distance Identity-HEX-218', + 'zAddAssetAttr-Edited IPTC Attributes-219', + 'zAddAssetAttr-Title-Comments via Cloud Website-220', + 'zAddAssetAttr-Accessibility Description-221', + 'zAddAssetAttr-Photo Stream Tag ID-222', + 'zAddAssetAttr-Share Type-223', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-224', + 'zAsset-Overall Aesthetic Score-225', + 'zAsset-zENT-226', + 'zAsset-zOPT-227', + 'zAsset-Master= zCldMast-zPK-228', + 'zAsset-Extended Attributes= zExtAttr-zPK-229', + 'zAsset-Import Session Key-230', + 'zAsset-Photo Analysis Attributes Key-231', + 'zAsset-FOK-Cloud Feed Asset Entry Key-232', + 'zAsset-Computed Attributes Asset Key-233', + 'zAsset-Promotion Score-234', + 'zAsset-Iconic Score-235', + 'zAsset-Media Analysis Attributes Key-236', + 'zAsset-Media Group UUID-237', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-238', + 'zAsset.Cloud Collection GUID-239', + 'zAddAssetAttr-zENT-240', + 'ZAddAssetAttr-zOPT-241', + 'zAddAssetAttr-zAsset= zAsset_zPK-242', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-243', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-244', + 'zAddAssetAttr-Public Global UUID-245', + 'zAddAssetAttr-Original Assets UUID-246', + 'zAddAssetAttr-Originating Asset Identifier-247', + 'zAddAssetAttr.Adjusted Fingerprint-248', + 'zCldMast-zPK= zAsset-Master-249', + 'zCldMast-zENT-250', + 'zCldMast-zOPT-251', + 'zCldMast-Moment Share Key= zShare-zPK-252', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-253', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-254', + 'zCldMast-Originating Asset ID-255', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-256', + 'CMzCldMastMedData-zENT-257', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-258', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-259', + 'AAAzCldMastMedData-zENT-260', + 'AAAzCldMastMedData-CldMast key-261', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-262', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-263', + 'zExtAttr-zENT-264', + 'zExtAttr-zOPT-265', + 'zExtAttr-Asset Key-266', + 'zIntResou-zPK-267', + 'zIntResou-zENT-268', + 'zIntResou-zOPT-269', + 'zIntResou-Asset= zAsset_zPK-270', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-271', + 'zMedAnlyAstAttr-zEnt-272', + 'zMedAnlyAstAttr-zOpt-273', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-274') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -11229,11 +11005,6 @@ def get_ph50intresouoptimzdatasyndpl(files_found, report_folder, seeker, wrap_te zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', - CASE zAddAssetAttr.ZIMAGEEMBEDDINGVERSION - WHEN 0 THEN '0-Obs_in_iOS18 still_testing-0' - WHEN 1 THEN '1-Obs_in_iOS18 still_testing-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMAGEEMBEDDINGVERSION || '' - END AS 'zAddAssetAttr-Image Embedding Version-iOS18', zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', @@ -11267,19 +11038,7 @@ def get_ph50intresouoptimzdatasyndpl(files_found, report_folder, seeker, wrap_te zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18', zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version-iOS18', zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version-iOS18', - zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18', - zGenAsstDesc.ZASSET AS 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18', - zAsset.ZGENERATEDASSETDESCRIPTION AS 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18', - zGenAsstDesc.Z_PK AS 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18', - zGenAsstDesc.Z_ENT AS 'zGenAsstDesc-zENT-iOS18', - zGenAsstDesc.Z_OPT AS 'zGenAsstDesc-zOPT-iOS18', - DateTime(zGenAsstDesc.ZANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zGenAsstDesc-Analysis_Timestamp-iOS18', - CASE zGenAsstDesc.ZANALYSISSOURCETYPE - WHEN 0 THEN '0-NotYetObs iOS18_Still_Testing-0' - ELSE 'Unknown-New-Value!: ' || zGenAsstDesc.ZANALYSISSOURCETYPE || '' - END AS 'zGenAsstDesc-Analysis_Source_Type-iOS18', - zGenAsstDesc.ZANALYSISVERSION AS 'zGenAsstDesc-Analysis Version-iOS18', - zGenAsstDesc.ZDESCRIPTIONTEXT AS 'zGenAsstDesc-Description_Text-iOS18', + zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18', zAsset.Z_ENT AS 'zAsset-zENT', zAsset.Z_OPT AS 'zAsset-zOPT', zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', @@ -11345,431 +11104,352 @@ def get_ph50intresouoptimzdatasyndpl(files_found, report_folder, seeker, wrap_te LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES - LEFT JOIN ZGENERATEDASSETDESCRIPTION zGenAsstDesc ON zGenAsstDesc.Z_PK = zAsset.ZGENERATEDASSETDESCRIPTION ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], - row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], - row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], - row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], - row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], - row[308], row[309], row[310], row[311], row[312])) + ''' - counter += 1 - - description = 'Parses iOS 18 asset records from Syndication.photos.library-database-Photos.sqlite' \ - ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide' \ - ' data for investigative analysis of assets being stored locally on the device verses' \ - ' assets being stored in iCloud Photos as the result of optimization. This is very large' \ - ' query and script, I recommend opening the TSV generated report with Zimmermans Tools' \ - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' \ - ' and filter the results.' - report = ArtifactHtmlReport('Ph50.2-Asset_IntResou-SyndPL') - report.start_artifact_report(report_folder, 'Ph50.2-Asset_IntResou-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-4QueryStart-0', - 'zAsset-zPK-1', - 'zAddAssetAttr-zPK-2', - 'zAsset-UUID = store.cloudphotodb-3', - 'zAddAssetAttr-Original Stable Hash-iOS18-4', - 'zIntResou-Fingerprint-iOS18-5', - 'zIntResou-Stable Hash-iOS18-6', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-7', - 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-8', - 'zIntResou-Local Availability-4QueryStart-9', - 'zIntResou-Remote Availability-4QueryStart-10', - 'zIntResou-Resource Type-4QueryStart-11', - 'zIntResou-Datastore Sub-Type-4QueryStart-12', - 'zIntResou-Recipe ID-4QueryStart-13', - 'zAsset Complete-14', - 'zAsset-Bundle Scope-15', - 'zAsset-Syndication State-16', - 'zAsset-Cloud is My Asset-17', - 'zAsset-Cloud is deletable-Asset-18', - 'zAsset-Cloud_Local_State-19', - 'zAsset-Visibility State-20', - 'zExtAttr-Camera Make-21', - 'zExtAttr-Camera Model-22', - 'zExtAttr-Lens Model-23', - 'zExtAttr-Flash Fired-24', - 'zExtAttr-Focal Length-25', - 'zExtAttr-Focal Length in 35MM-26', - 'zExtAttr-Digital Zoom Ratio-27', - 'zExtAttr-Generative_AI_Type-iOS18-28', - 'zExtAttr-Credit-iOS18-29', - 'zAsset-Derived Camera Capture Device-30', - 'zAddAssetAttr-Camera Captured Device-31', - 'zAsset-Capture_Session_Identifier-iOS18-32', - 'zAddAssetAttr-Imported by-33', - 'zCldMast-Imported By-34', - 'zAddAssetAttr.Imported by Bundle Identifier-35', - 'zAddAssetAttr-Imported By Display Name-36', - 'zCldMast-Imported by Bundle ID-37', - 'zCldMast-Imported by Display Name-38', - 'zAsset-Is_Recently_Saved-iOS18-39', - 'zAsset-Saved Asset Type-40', - 'zAsset-Directory-Path-41', - 'zAsset-Filename-42', - 'zAddAssetAttr- Original Filename-43', - 'zCldMast- Original Filename-44', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-45', - 'zAsset-Active Library Scope Participation State-46', - 'zAsset-Library Scope Share State- StillTesting-47', - 'zAsset-Added Date-48', - 'zAsset- SortToken -CameraRoll-49', - 'zAddAssetAttr-Date Created Source-50', - 'zAsset-Date Created-51', - 'zCldMast-Creation Date-52', - 'zIntResou-CldMst Date Created-53', - 'zAddAssetAttr-Time Zone Name-54', - 'zAddAssetAttr-Time Zone Offset-55', - 'zAddAssetAttr-Inferred Time Zone Offset-56', - 'zAddAssetAttr-EXIF-String-57', - 'zAsset-Modification Date-58', - 'zAsset-Last Shared Date-59', - 'zCldMast-Cloud Local State-60', - 'zCldMast-Import Date-61', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-62', - 'zAddAssetAttr-Import Session ID-63', - 'zAddAssetAttr-Alt Import Image Date-64', - 'zCldMast-Import Session ID- AirDrop-StillTesting-65', - 'zAsset-Cloud Batch Publish Date-66', - 'zAsset-Cloud Server Publish Date-67', - 'zAsset-Cloud Download Requests-68', - 'zAsset-Cloud Batch ID-69', - 'zAddAssetAttr-Upload Attempts-70', - 'zAsset-Latitude-71', - 'zExtAttr-Latitude-72', - 'zAsset-Longitude-73', - 'zExtAttr-Longitude-74', - 'zAddAssetAttr-GPS Horizontal Accuracy-75', - 'zAddAssetAttr-Location Hash-76', - 'zAddAssetAttr-Shifted Location Valid-77', - 'zAddAssetAttr-Shifted Location Data-78', - 'zAddAssetAttr-Reverse Location Is Valid-79', - 'zAddAssetAttr-Reverse Location Data-80', - 'AAAzCldMastMedData-zOPT-81', - 'zAddAssetAttr-Media Metadata Type-82', - 'AAAzCldMastMedData-Data-83', - 'CldMasterzCldMastMedData-zOPT-84', - 'zCldMast-Media Metadata Type-85', - 'CMzCldMastMedData-Data-86', - 'zAsset-Search Index Rebuild State-87', - 'zAddAssetAttr-Syndication History-88', - 'zMedAnlyAstAttr-Syndication Processing Version-89', - 'zMedAnlyAstAttr-Syndication Processing Value-90', - 'zAsset-Orientation-91', - 'zAddAssetAttr-Original Orientation-92', - 'zAsset-Kind-93', - 'zAsset-Is_Detected_Screenshot-iOS18-94', - 'zAsset-Kind-Sub-Type-95', - 'zAddAssetAttr-Cloud Kind Sub Type-96', - 'zAsset-Playback Style-97', - 'zAsset-Playback Variation-98', - 'zAddAssetAttr-View_Presentation-iOS18-99', - 'zAsset-Video Duration-100', - 'zExtAttr-Duration-101', - 'zAsset-Video CP Duration-102', - 'zAddAssetAttr-Video CP Duration Time Scale-103', - 'zAsset-Video CP Visibility State-104', - 'zAddAssetAttr-Video CP Display Value-105', - 'zAddAssetAttr-Video CP Display Time Scale-106', - 'zIntResou-Datastore Class ID-107', - 'zAsset-Cloud Placeholder Kind-108', - 'zIntResou-Local Availability-109', - 'zIntResou-Local Availability Target-110', - 'zIntResou-Cloud Local State-111', - 'zIntResou-Remote Availability-112', - 'zIntResou-Remote Availability Target-113', - 'zIntResou-Transient Cloud Master-114', - 'zIntResou-Side Car Index-115', - 'zIntResou- File ID-116', - 'zIntResou-Version-117', - 'zAddAssetAttr- Original-File-Size-118', - 'zIntResou-Resource Type-119', - 'zIntResou-Datastore Sub-Type-120', - 'zIntResou-Cloud Source Type-121', - 'zIntResou-Data Length-122', - 'zIntResou-Recipe ID-123', - 'zIntResou-Cloud Last Prefetch Date-124', - 'zIntResou-Cloud Prefetch Count-125', - 'zIntResou- Cloud-Last-OnDemand Download-Date-126', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-127', - 'zIntResou-Compact-UTI-128', - 'zAsset-Uniform Type ID-129', - 'zAsset-Original Color Space-130', - 'zCldMast-Uniform_Type_ID-131', - 'zCldMast-Full Size JPEG Source-132', - 'zAsset-HDR Gain-133', - 'zAsset-zHDR_Type-134', - 'zExtAttr-Codec-135', - 'zIntResou-Codec Four Char Code Name-136', - 'zCldMast-Codec Name-137', - 'zCldMast-Video Frame Rate-138', - 'zCldMast-Placeholder State-139', - 'zAsset-Depth_Type-140', - 'zAsset-Avalanche UUID-141', - 'zAsset-Avalanche_Kind-iOS18-142', - 'zAsset-Avalanche_Pick_Type-BurstAsset-143', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-144', - 'zAddAssetAttr-Cloud Recovery State-145', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-146', - 'zAsset-Deferred Processing Needed-147', - 'zAsset-Video Deferred Processing Needed-148', - 'zAddAssetAttr-Deferred Photo Identifier-149', - 'zAddAssetAttr-Deferred Processing Candidate Options-150', - 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-151', - 'zAsset-Adjustment Timestamp-152', - 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-153', - 'zAddAssetAttr-Editor Bundle ID-154', - 'zAddAssetAttr-Montage-155', - 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-156', - 'zAsset-Favorite-157', - 'zAsset-Hidden-158', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-159', - 'zAsset-Trashed Date-160', - 'zAsset-Trashed by Participant= zSharePartic_zPK-161', - 'zAsset-Delete-Reason-162', - 'zIntResou-Trash State-163', - 'zIntResou-Trashed Date-164', - 'zAsset-Cloud Delete State-165', - 'zIntResou-Cloud Delete State-166', - 'zAddAssetAttr-PTP Trashed State-167', - 'zIntResou-PTP Trashed State-168', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-169', - 'zMedAnlyAstAttr-Media Analysis Timestamp-170', - 'zAsset-Analysis State Modification Date-171', - 'zAddAssetAttr- Pending View Count-172', - 'zAddAssetAttr- View Count-173', - 'zAddAssetAttr- Pending Play Count-174', - 'zAddAssetAttr- Play Count-175', - 'zAddAssetAttr- Pending Share Count-176', - 'zAddAssetAttr- Share Count-177', - 'zAddAssetAttr-Allowed for Analysis-178', - 'zAddAssetAttr-Scene Analysis Version-179', - 'zAddAssetAttr-Scene Analysis is From Preview-180', - 'zAddAssetAttr-Scene Analysis Timestamp-181', - 'zAsset-Duplication Asset Visibility State-182', - 'zAddAssetAttr-Destination Asset Copy State-183', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-184', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-185', - 'zCldMast-Source Master For Duplication Scope ID-186', - 'zAddAssetAttr-Source Asset For Duplication ID-187', - 'zCldMast-Source Master for Duplication ID-188', - 'zAddAssetAttr-Variation Suggestions States-189', - 'zAsset-High Frame Rate State-190', - 'zAsset-Video Key Frame Time Scale-191', - 'zAsset-Video Key Frame Value-192', - 'zAsset-Current_Sleet_Cast-iOS18-193', - 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-194', - 'zExtAttr-Sleet_Rendering_Version-iOS18-195', - 'zExtAttr-Sleet_Intensity-iOS18-196', - 'zExtAttr-Sleet_Tone_Bias-iOS18-197', - 'zExtAttr-Sleet_Color_Bias-iOS18-198', - 'zExtAttr-Sleet_Cast-iOS18-199', - 'zExtAttr-ISO-200', - 'zExtAttr-Metering Mode-201', - 'zExtAttr-Sample Rate-202', - 'zExtAttr-Track Format-203', - 'zExtAttr-White Balance-204', - 'zExtAttr-Aperture-205', - 'zExtAttr-BitRate-206', - 'zExtAttr-Exposure Bias-207', - 'zExtAttr-Frames Per Second-208', - 'zExtAttr-Shutter Speed-209', - 'zExtAttr-Slush Scene Bias-210', - 'zExtAttr-Slush Version-211', - 'zExtAttr-Slush Preset-212', - 'zExtAttr-Slush Warm Bias-213', - 'zAsset-Height-214', - 'zAddAssetAttr-Original Height-215', - 'zIntResou-UnOriented Height-216', - 'zAsset-Width-217', - 'zAddAssetAttr-Original Width-218', - 'zIntResou-UnOriented Width-219', - 'zAsset-Thumbnail Index-220', - 'zAddAssetAttr-Embedded Thumbnail Height-221', - 'zAddAssetAttr-Embedded Thumbnail Length-222', - 'zAddAssetAttr-Embedded Thumbnail Offset-223', - 'zAddAssetAttr-Embedded Thumbnail Width-224', - 'zAddAssetAttr-Image Embedding Version-iOS18-225', - 'zAsset-Packed Acceptable Crop Rect-226', - 'zAsset-Packed Badge Attributes-227', - 'zAsset-Packed Preferred Crop Rect-228', - 'zAsset-Curation Score-229', - 'zAsset-Camera Processing Adjustment State-230', - 'zAsset-Depth Type-231', - 'zAsset-Is Magic Carpet-Quicktime_MOV-file-232', - 'zAddAssetAttr-Orig Resource Choice-233', - 'zAsset-Spatial Type-234', - 'zAddAssetAttr-Spatial Over Capture Group ID-235', - 'zAddAssetAttr-Place Annotation Data-236', - 'zAddAssetAttr-Distance Identity-HEX-237', - 'zAddAssetAttr-Edited IPTC Attributes-238', - 'zAddAssetAttr-Title-Comments via Cloud Website-239', - 'zAddAssetAttr-Accessibility Description-240', - 'zAddAssetAttr-Photo Stream Tag ID-241', - 'zAddAssetAttr-Share Type-242', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-243', - 'zAsset-Overall Aesthetic Score-244', - 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18-245', - 'zMedAnlyAstAttr-Image_Caption_Version-iOS18-246', - 'zMedAnlyAstAttr-Video_Caption_Version-iOS18-247', - 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18-248', - 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18-249', - 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18-250', - 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18-251', - 'zGenAsstDesc-zENT-iOS18-252', - 'zGenAsstDesc-zOPT-iOS18-253', - 'zGenAsstDesc-Analysis_Timestamp-iOS18-254', - 'zGenAsstDesc-Analysis_Source_Type-iOS18-255', - 'zGenAsstDesc-Analysis Version-iOS18-256', - 'zGenAsstDesc-Description_Text-iOS18-257', - 'zAsset-zENT-258', - 'zAsset-zOPT-259', - 'zAsset-Master= zCldMast-zPK-260', - 'zAsset-Extended Attributes= zExtAttr-zPK-261', - 'zAsset-Import Session Key-262', - 'zAsset-Photo Analysis Attributes Key-263', - 'zAsset-FOK-Cloud Feed Asset Entry Key-264', - 'zAsset-Computed Attributes Asset Key-265', - 'zAsset-Promotion Score-266', - 'zAsset-Iconic Score-267', - 'zAsset-Media Analysis Attributes Key-268', - 'zAsset-Media Group UUID-269', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-270', - 'zAsset.Cloud Collection GUID-271', - 'zAddAssetAttr-zENT-272', - 'ZAddAssetAttr-zOPT-273', - 'zAddAssetAttr-zAsset= zAsset_zPK-274', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-275', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-276', - 'zAddAssetAttr-Public Global UUID-277', - 'zAddAssetAttr-Original Assets UUID-278', - 'zAddAssetAttr-Originating Asset Identifier-279', - 'zCldMast-zPK= zAsset-Master-280', - 'zCldMast-zENT-281', - 'zCldMast-zOPT-282', - 'zCldMast-Moment Share Key= zShare-zPK-283', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-284', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-285', - 'zCldMast-Originating Asset ID-286', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-287', - 'CMzCldMastMedData-zENT-288', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-289', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-290', - 'AAAzCldMastMedData-zENT-291', - 'AAAzCldMastMedData-CldMast key-292', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-293', - 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18-294', - 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-295', - 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-296', - 'zCompSyncAttr-zENT-iOS18-297', - 'zCompSyncAttr-zOPT-iOS18-298', - 'zCompSyncAttr-Local_Analysis_Stage-iOS18-299', - 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-300', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-301', - 'zExtAttr-zENT-302', - 'zExtAttr-zOPT-303', - 'zExtAttr-Asset Key-304', - 'zIntResou-zPK-305', - 'zIntResou-zENT-306', - 'zIntResou-zOPT-307', - 'zIntResou-Asset= zAsset_zPK-308', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-309', - 'zMedAnlyAstAttr-zEnt-310', - 'zMedAnlyAstAttr-zOpt-311', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-312') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph50.2-Asset_IntResou-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph50.2-Asset_IntResou-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No Internal Resource data available for iOS 18 Syndication Photos Library Photos.sqlite') - - db.close() - return + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302])) + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + 'zAsset-zPK-1', + 'zAddAssetAttr-zPK-2', + 'zAsset-UUID = store.cloudphotodb-3', + 'zAddAssetAttr-Original Stable Hash-iOS18-4', + 'zIntResou-Fingerprint-iOS18-5', + 'zIntResou-Stable Hash-iOS18-6', + 'zAddAssetAttr.Adjusted Stable Hash-iOS18-7', + 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-8', + 'zIntResou-Local Availability-4QueryStart-9', + 'zIntResou-Remote Availability-4QueryStart-10', + 'zIntResou-Resource Type-4QueryStart-11', + 'zIntResou-Datastore Sub-Type-4QueryStart-12', + 'zIntResou-Recipe ID-4QueryStart-13', + 'zAsset Complete-14', + 'zAsset-Bundle Scope-15', + 'zAsset-Syndication State-16', + 'zAsset-Cloud is My Asset-17', + 'zAsset-Cloud is deletable-Asset-18', + 'zAsset-Cloud_Local_State-19', + 'zAsset-Visibility State-20', + 'zExtAttr-Camera Make-21', + 'zExtAttr-Camera Model-22', + 'zExtAttr-Lens Model-23', + 'zExtAttr-Flash Fired-24', + 'zExtAttr-Focal Length-25', + 'zExtAttr-Focal Length in 35MM-26', + 'zExtAttr-Digital Zoom Ratio-27', + 'zExtAttr-Generative_AI_Type-iOS18-28', + 'zExtAttr-Credit-iOS18-29', + 'zAsset-Derived Camera Capture Device-30', + 'zAddAssetAttr-Camera Captured Device-31', + 'zAsset-Capture_Session_Identifier-iOS18-32', + 'zAddAssetAttr-Imported by-33', + 'zCldMast-Imported By-34', + 'zAddAssetAttr.Imported by Bundle Identifier-35', + 'zAddAssetAttr-Imported By Display Name-36', + 'zCldMast-Imported by Bundle ID-37', + 'zCldMast-Imported by Display Name-38', + 'zAsset-Is_Recently_Saved-iOS18-39', + 'zAsset-Saved Asset Type-40', + 'zAsset-Directory-Path-41', + 'zAsset-Filename-42', + 'zAddAssetAttr- Original Filename-43', + 'zCldMast- Original Filename-44', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-45', + 'zAsset-Active Library Scope Participation State-46', + 'zAsset-Library Scope Share State- StillTesting-47', + ('zAsset-Added Date-48', 'datetime'), + ('zAsset- SortToken -CameraRoll-49', 'datetime'), + ('zAddAssetAttr-Date Created Source-50', 'datetime'), + ('zAsset-Date Created-51', 'datetime'), + ('zCldMast-Creation Date-52', 'datetime'), + ('zIntResou-CldMst Date Created-53', 'datetime'), + 'zAddAssetAttr-Time Zone Name-54', + 'zAddAssetAttr-Time Zone Offset-55', + 'zAddAssetAttr-Inferred Time Zone Offset-56', + 'zAddAssetAttr-EXIF-String-57', + ('zAsset-Modification Date-58', 'datetime'), + ('zAsset-Last Shared Date-59', 'datetime'), + 'zCldMast-Cloud Local State-60', + ('zCldMast-Import Date-61', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-62', 'datetime'), + 'zAddAssetAttr-Import Session ID-63', + ('zAddAssetAttr-Alt Import Image Date-64', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-65', + ('zAsset-Cloud Batch Publish Date-66', 'datetime'), + ('zAsset-Cloud Server Publish Date-67', 'datetime'), + 'zAsset-Cloud Download Requests-68', + 'zAsset-Cloud Batch ID-69', + 'zAddAssetAttr-Upload Attempts-70', + 'zAsset-Latitude-71', + 'zExtAttr-Latitude-72', + 'zAsset-Longitude-73', + 'zExtAttr-Longitude-74', + 'zAddAssetAttr-GPS Horizontal Accuracy-75', + 'zAddAssetAttr-Location Hash-76', + 'zAddAssetAttr-Shifted Location Valid-77', + 'zAddAssetAttr-Shifted Location Data-78', + 'zAddAssetAttr-Reverse Location Is Valid-79', + 'zAddAssetAttr-Reverse Location Data-80', + 'AAAzCldMastMedData-zOPT-81', + 'zAddAssetAttr-Media Metadata Type-82', + 'AAAzCldMastMedData-Data-83', + 'CldMasterzCldMastMedData-zOPT-84', + 'zCldMast-Media Metadata Type-85', + 'CMzCldMastMedData-Data-86', + 'zAsset-Search Index Rebuild State-87', + 'zAddAssetAttr-Syndication History-88', + 'zMedAnlyAstAttr-Syndication Processing Version-89', + 'zMedAnlyAstAttr-Syndication Processing Value-90', + 'zAsset-Orientation-91', + 'zAddAssetAttr-Original Orientation-92', + 'zAsset-Kind-93', + 'zAsset-Is_Detected_Screenshot-iOS18-94', + 'zAsset-Kind-Sub-Type-95', + 'zAddAssetAttr-Cloud Kind Sub Type-96', + 'zAsset-Playback Style-97', + 'zAsset-Playback Variation-98', + 'zAddAssetAttr-View_Presentation-iOS18-99', + 'zAsset-Video Duration-100', + 'zExtAttr-Duration-101', + 'zAsset-Video CP Duration-102', + 'zAddAssetAttr-Video CP Duration Time Scale-103', + 'zAsset-Video CP Visibility State-104', + 'zAddAssetAttr-Video CP Display Value-105', + 'zAddAssetAttr-Video CP Display Time Scale-106', + 'zIntResou-Datastore Class ID-107', + 'zAsset-Cloud Placeholder Kind-108', + 'zIntResou-Local Availability-109', + 'zIntResou-Local Availability Target-110', + 'zIntResou-Cloud Local State-111', + 'zIntResou-Remote Availability-112', + 'zIntResou-Remote Availability Target-113', + 'zIntResou-Transient Cloud Master-114', + 'zIntResou-Side Car Index-115', + 'zIntResou- File ID-116', + 'zIntResou-Version-117', + 'zAddAssetAttr- Original-File-Size-118', + 'zIntResou-Resource Type-119', + 'zIntResou-Datastore Sub-Type-120', + 'zIntResou-Cloud Source Type-121', + 'zIntResou-Data Length-122', + 'zIntResou-Recipe ID-123', + ('zIntResou-Cloud Last Prefetch Date-124', 'datetime'), + 'zIntResou-Cloud Prefetch Count-125', + ('zIntResou- Cloud-Last-OnDemand Download-Date-126', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-127', + 'zIntResou-Compact-UTI-128', + 'zAsset-Uniform Type ID-129', + 'zAsset-Original Color Space-130', + 'zCldMast-Uniform_Type_ID-131', + 'zCldMast-Full Size JPEG Source-132', + 'zAsset-HDR Gain-133', + 'zAsset-zHDR_Type-134', + 'zExtAttr-Codec-135', + 'zIntResou-Codec Four Char Code Name-136', + 'zCldMast-Codec Name-137', + 'zCldMast-Video Frame Rate-138', + 'zCldMast-Placeholder State-139', + 'zAsset-Depth_Type-140', + 'zAsset-Avalanche UUID-141', + 'zAsset-Avalanche_Kind-iOS18-142', + 'zAsset-Avalanche_Pick_Type-BurstAsset-143', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-144', + 'zAddAssetAttr-Cloud Recovery State-145', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-146', + 'zAsset-Deferred Processing Needed-147', + 'zAsset-Video Deferred Processing Needed-148', + 'zAddAssetAttr-Deferred Photo Identifier-149', + 'zAddAssetAttr-Deferred Processing Candidate Options-150', + 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-151', + ('zAsset-Adjustment Timestamp-152', 'datetime'), + 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-153', + 'zAddAssetAttr-Editor Bundle ID-154', + 'zAddAssetAttr-Montage-155', + 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-156', + 'zAsset-Favorite-157', + 'zAsset-Hidden-158', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-159', + ('zAsset-Trashed Date-160', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-161', + 'zAsset-Delete-Reason-162', + 'zIntResou-Trash State-163', + ('zIntResou-Trashed Date-164', 'datetime'), + 'zAsset-Cloud Delete State-165', + 'zIntResou-Cloud Delete State-166', + 'zAddAssetAttr-PTP Trashed State-167', + 'zIntResou-PTP Trashed State-168', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-169', + ('zMedAnlyAstAttr-Media Analysis Timestamp-170', 'datetime'), + ('zAsset-Analysis State Modification Date-171', 'datetime'), + 'zAddAssetAttr- Pending View Count-172', + 'zAddAssetAttr- View Count-173', + 'zAddAssetAttr- Pending Play Count-174', + 'zAddAssetAttr- Play Count-175', + 'zAddAssetAttr- Pending Share Count-176', + 'zAddAssetAttr- Share Count-177', + 'zAddAssetAttr-Allowed for Analysis-178', + 'zAddAssetAttr-Scene Analysis Version-179', + 'zAddAssetAttr-Scene Analysis is From Preview-180', + ('zAddAssetAttr-Scene Analysis Timestamp-181', 'datetime'), + 'zAsset-Duplication Asset Visibility State-182', + 'zAddAssetAttr-Destination Asset Copy State-183', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-184', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-185', + 'zCldMast-Source Master For Duplication Scope ID-186', + 'zAddAssetAttr-Source Asset For Duplication ID-187', + 'zCldMast-Source Master for Duplication ID-188', + 'zAddAssetAttr-Variation Suggestions States-189', + 'zAsset-High Frame Rate State-190', + 'zAsset-Video Key Frame Time Scale-191', + 'zAsset-Video Key Frame Value-192', + 'zAsset-Current_Sleet_Cast-iOS18-193', + 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-194', + 'zExtAttr-Sleet_Rendering_Version-iOS18-195', + 'zExtAttr-Sleet_Intensity-iOS18-196', + 'zExtAttr-Sleet_Tone_Bias-iOS18-197', + 'zExtAttr-Sleet_Color_Bias-iOS18-198', + 'zExtAttr-Sleet_Cast-iOS18-199', + 'zExtAttr-ISO-200', + 'zExtAttr-Metering Mode-201', + 'zExtAttr-Sample Rate-202', + 'zExtAttr-Track Format-203', + 'zExtAttr-White Balance-204', + 'zExtAttr-Aperture-205', + 'zExtAttr-BitRate-206', + 'zExtAttr-Exposure Bias-207', + 'zExtAttr-Frames Per Second-208', + 'zExtAttr-Shutter Speed-209', + 'zExtAttr-Slush Scene Bias-210', + 'zExtAttr-Slush Version-211', + 'zExtAttr-Slush Preset-212', + 'zExtAttr-Slush Warm Bias-213', + 'zAsset-Height-214', + 'zAddAssetAttr-Original Height-215', + 'zIntResou-UnOriented Height-216', + 'zAsset-Width-217', + 'zAddAssetAttr-Original Width-218', + 'zIntResou-UnOriented Width-219', + 'zAsset-Thumbnail Index-220', + 'zAddAssetAttr-Embedded Thumbnail Height-221', + 'zAddAssetAttr-Embedded Thumbnail Length-222', + 'zAddAssetAttr-Embedded Thumbnail Offset-223', + 'zAddAssetAttr-Embedded Thumbnail Width-224', + 'zAsset-Packed Acceptable Crop Rect-226', + 'zAsset-Packed Badge Attributes-227', + 'zAsset-Packed Preferred Crop Rect-228', + 'zAsset-Curation Score-229', + 'zAsset-Camera Processing Adjustment State-230', + 'zAsset-Depth Type-231', + 'zAsset-Is Magic Carpet-Quicktime_MOV-file-232', + 'zAddAssetAttr-Orig Resource Choice-233', + 'zAsset-Spatial Type-234', + 'zAddAssetAttr-Spatial Over Capture Group ID-235', + 'zAddAssetAttr-Place Annotation Data-236', + 'zAddAssetAttr-Distance Identity-HEX-237', + 'zAddAssetAttr-Edited IPTC Attributes-238', + 'zAddAssetAttr-Title-Comments via Cloud Website-239', + 'zAddAssetAttr-Accessibility Description-240', + 'zAddAssetAttr-Photo Stream Tag ID-241', + 'zAddAssetAttr-Share Type-242', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-243', + 'zAsset-Overall Aesthetic Score-244', + 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18-245', + 'zMedAnlyAstAttr-Image_Caption_Version-iOS18-246', + 'zMedAnlyAstAttr-Video_Caption_Version-iOS18-247', + 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18-248', + 'zAsset-zENT-249', + 'zAsset-zOPT-250', + 'zAsset-Master= zCldMast-zPK-251', + 'zAsset-Extended Attributes= zExtAttr-zPK-252', + 'zAsset-Import Session Key-253', + 'zAsset-Photo Analysis Attributes Key-254', + 'zAsset-FOK-Cloud Feed Asset Entry Key-255', + 'zAsset-Computed Attributes Asset Key-256', + 'zAsset-Promotion Score-257', + 'zAsset-Iconic Score-258', + 'zAsset-Media Analysis Attributes Key-259', + 'zAsset-Media Group UUID-260', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-261', + 'zAsset.Cloud Collection GUID-262', + 'zAddAssetAttr-zENT-263', + 'ZAddAssetAttr-zOPT-264', + 'zAddAssetAttr-zAsset= zAsset_zPK-265', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-266', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-267', + 'zAddAssetAttr-Public Global UUID-268', + 'zAddAssetAttr-Original Assets UUID-269', + 'zAddAssetAttr-Originating Asset Identifier-270', + 'zCldMast-zPK= zAsset-Master-271', + 'zCldMast-zENT-272', + 'zCldMast-zOPT-273', + 'zCldMast-Moment Share Key= zShare-zPK-274', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-275', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-276', + 'zCldMast-Originating Asset ID-277', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-278', + 'CMzCldMastMedData-zENT-279', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-280', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-281', + 'AAAzCldMastMedData-zENT-282', + 'AAAzCldMastMedData-CldMast key-283', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-284', + 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-285', + 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-286', + 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-287', + 'zCompSyncAttr-zENT-iOS18-288', + 'zCompSyncAttr-zOPT-iOS18-289', + 'zCompSyncAttr-Local_Analysis_Stage-iOS18-290', + 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-291', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-292', + 'zExtAttr-zENT-293', + 'zExtAttr-zOPT-294', + 'zExtAttr-Asset Key-295', + 'zIntResou-zPK-296', + 'zIntResou-zENT-297', + 'zIntResou-zOPT-298', + 'zIntResou-Asset= zAsset_zPK-299', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-300', + 'zMedAnlyAstAttr-zEnt-301', + 'zMedAnlyAstAttr-zOpt-302', + 'zMedAnlyAstAttr-Asset= zAsset-Zpk-303') + data_list = get_sqlite_db_records(source_path, query) -__artifacts_v2__ = { - 'Ph50-1-Asset_IntResou-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph50.1 Asset IntResource Optimization Data', - 'description': 'Parses iOS 14-18 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE and' - ' other tables. This and other related parsers should provide data for investigative' - ' analysis of assets being stored locally on the device verses assets being stored in' - ' iCloud Photos as the result of optimization. This is very large query and script,' - ' I recommend opening the TSV generated report with Zimmermans Tools' - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' - ' and filter the results.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-14', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-I-Asset_IntResou-Optimization', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph50intresouoptimzdataphdapsql' - }, - 'Ph50-2-Asset_IntResou-SyndPL': { - 'name': 'SyndPL Photos.sqlite 50.2 Asset IntResource Optimization Data', - 'description': 'Parses iOS 14-18 asset records from Syndication.photos.library-database-Photos.sqlite' - ' ZINTERNALRESOURCE and and other tables. This and other related parsers should' - ' provide data for investigative analysis of assets being stored locally on the' - ' device verses assets being stored in iCloud Photos as the result of optimization.' - ' This is very large query and script, I recommend opening the TSV generated report' - ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer' - ' to view, search, and filter the results.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-14', - 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', - 'notes': '', - 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*', - 'function': 'get_ph50intresouoptimzdatasyndpl' - } -} + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph51PossOptimizedAssetsIntResouData.py b/scripts/artifacts/Ph51PossOptimizedAssetsIntResouData.py index 2a741d7d..f6487f6c 100644 --- a/scripts/artifacts/Ph51PossOptimizedAssetsIntResouData.py +++ b/scripts/artifacts/Ph51PossOptimizedAssetsIntResouData.py @@ -1,42 +1,52 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses iOS 14-18 possible optimized asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE and other tables. -# This and other related parsers should provide data for investigative analysis of assets being stored locally -# on the device verses assets being stored in iCloud Photos as the result of optimization. -# This is very large query and script, I recommend opening the TSV generated report with Zimmerman's Tools -# https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search and filter the results. -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph51PossibleOptimizedAssetsIntResouPhDaPsql': { + 'name': 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql', + 'description': 'Parses iOS 14-18 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE' + ' and other tables. This and other related parsers should provide data for investigative' + ' analysis of assets being stored locally on the device verses assets being stored in' + ' iCloud Photos as the result of optimization. This is very large query and script,' + ' I recommend opening the TSV generated report with Zimmermans Tools' + ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' + ' and filter the results.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-I-Asset_IntResou-Optimization', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly - +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc -def get_ph51possibleoptimizedassetsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +@artifact_processor +def Ph51PossibleOptimizedAssetsIntResouPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("13.7"): - logfunc("Unsupported version for PhotoData-Photos.sqlite ZINTERNALRESOURCE table data from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite from iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -739,310 +749,285 @@ def get_ph51possibleoptimizedassetsphdapsql(files_found, report_folder, seeker, LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK WHERE (zIntResou.ZDATASTORESUBTYPE = 1) & (zIntResou.ZLOCALAVAILABILITY = -1) & (zIntResou.ZFINGERPRINT IS NOT NULL) ORDER BY zAsset.ZDATECREATED - """) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233])) - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233])) - - counter += 1 - - description = 'Parses iOS 14 possible optimized asset records from PhotoData-Photos.sqlite' \ - ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide data' \ - ' for investigative analysis of assets being stored locally on the device verses' \ - ' assets being stored in iCloud Photos as the result of optimization.' \ - ' This is very large query and script, I recommend opening the TSV generated report' \ - ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \ - ' to view, search, and filter the results.' - report = ArtifactHtmlReport('Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-4QueryStart-0', - 'zAsset-zPK-7', - 'zAddAssetAttr-zPK-8', - 'zAsset-UUID = store.cloudphotodb-9', - 'zAddAssetAttr-Master Fingerprint-10', - 'zIntResou-Fingerprint-11', - 'zIntResou-Local Availability-4QueryStart-1', - 'zIntResou-Remote Availability-4QueryStart-2', - 'zIntResou-Resource Type-4QueryStart-3', - 'zIntResou-Datastore Sub-Type-4QueryStart-4', - 'zIntResou-Recipe ID-4QueryStart-5', - 'zAsset Complete-6', - 'zAsset-Cloud is My Asset-12', - 'zAsset-Cloud is deletable-Asset-13', - 'zAsset-Cloud_Local_State-14', - 'zAsset-Visibility State-15', - 'zExtAttr-Camera Make-16', - 'zExtAttr-Camera Model-17', - 'zExtAttr-Lens Model-18', - 'zExtAttr-Flash Fired-19', - 'zExtAttr-Focal Lenght-20', - 'zAsset-Derived Camera Capture Device-21', - 'zAddAssetAttr-Camera Captured Device-22', - 'zAddAssetAttr-Imported by-23', - 'zCldMast-Imported By-24', - 'zAddAssetAttr-Creator Bundle ID-25', - 'zAddAssetAttr-Imported By Display Name-26', - 'zCldMast-Imported by Bundle ID-27', - 'zCldMast-Imported by Display Name-28', - 'zAsset-Saved Asset Type-29', - 'zAsset-Directory-Path-30', - 'zAsset-Filename-31', - 'zAddAssetAttr- Original Filename-32', - 'zCldMast- Original Filename-33', - 'zAsset-Added Date-34', - 'zAsset- SortToken -CameraRoll-35', - 'zAsset-Date Created-36', - 'zCldMast-Creation Date-37', - 'zIntResou-CldMst Date Created-38', - 'zAddAssetAttr-Time Zone Name-39', - 'zAddAssetAttr-Time Zone Offset-40', - 'zAddAssetAttr-Inferred Time Zone Offset-41', - 'zAddAssetAttr-EXIF-String-42', - 'zAsset-Modification Date-43', - 'zAsset-Last Shared Date-44', - 'zCldMast-Cloud Local State-45', - 'zCldMast-Import Date-46', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', - 'zAddAssetAttr-Import Session ID-48', - 'zAddAssetAttr-Alt Import Image Date-49', - 'zCldMast-Import Session ID- AirDrop-StillTesting-50', - 'zAsset-Cloud Batch Publish Date-51', - 'zAsset-Cloud Server Publish Date-52', - 'zAsset-Cloud Download Requests-53', - 'zAsset-Cloud Batch ID-54', - 'zAddAssetAttr-Upload Attempts-55', - 'zAsset-Latitude-56', - 'zExtAttr-Latitude-57', - 'zAsset-Longitude-58', - 'zExtAttr-Longitude-59', - 'zAddAssetAttr-GPS Horizontal Accuracy-60', - 'zAddAssetAttr-Location Hash-61', - 'zAddAssetAttr-Reverse Location Is Valid-62', - 'zAddAssetAttr-Shifted Location Valid-63', - 'AAAzCldMastMedData-zOPT-64', - 'zAddAssetAttr-Media Metadata Type-65', - 'CldMasterzCldMastMedData-zOPT-66', - 'zCldMast-Media Metadata Type-67', - 'zAsset-Orientation-68', - 'zAddAssetAttr-Original Orientation-69', - 'zAsset-Kind-70', - 'zAsset-Kind-Sub-Type-71', - 'zAddAssetAttr-Cloud Kind Sub Type-72', - 'zAsset-Playback Style-73', - 'zAsset-Playback Variation-74', - 'zAsset-Video Duration-75', - 'zExtAttr-Duration-76', - 'zAsset-Video CP Duration-77', - 'zAddAssetAttr-Video CP Duration Time Scale-78', - 'zAsset-Video CP Visibility State-79', - 'zAddAssetAttr-Video CP Display Value-80', - 'zAddAssetAttr-Video CP Display Time Scale-81', - 'zIntResou-Datastore Class ID-82', - 'zAsset-Cloud Placeholder Kind-83', - 'zIntResou-Local Availability-84', - 'zIntResou-Local Availability Target-85', - 'zIntResou-Cloud Local State-86', - 'zIntResou-Remote Availability-87', - 'zIntResou-Remote Availability Target-88', - 'zIntResou-Transient Cloud Master-89', - 'zIntResou-Side Car Index-90', - 'zIntResou- File ID-91', - 'zIntResou-Version-92', - 'zAddAssetAttr- Original-File-Size-93', - 'zIntResou-Resource Type-94', - 'zIntResou-Datastore Sub-Type-95', - 'zIntResou-Cloud Source Type-96', - 'zIntResou-Data Length-97', - 'zIntResou-Recipe ID-98', - 'zIntResou-Cloud Last Prefetch Date-99', - 'zIntResou-Cloud Prefetch Count-100', - 'zIntResou- Cloud-Last-OnDemand Download-Date-101', - 'zAsset-Uniform Type ID-102', - 'zAsset-Original Color Space-103', - 'zCldMast-Uniform_Type_ID-104', - 'zCldMast-Full Size JPEG Source-105', - 'zAsset-HDR Gain-106', - 'zExtAttr-Codec-107', - 'zCldMast-Codec Name-108', - 'zCldMast-Video Frame Rate-109', - 'zCldMast-Placeholder State-110', - 'zAsset-Depth_Type-111', - 'zAsset-Avalanche UUID-112', - 'zAsset-Avalanche_Pick_Type-BurstAsset-113', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-114', - 'zAddAssetAttr-Cloud Recovery State-115', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-116', - 'zAsset-Deferred Processing Needed-117', - 'zAddAssetAttr-Deferred Photo Identifier-118', - 'zAddAssetAttr-Deferred Processing Candidate Options-119', - 'zAsset-Has Adjustments-Camera-Effects-Filters-120', - 'zAsset-Adjustment Timestamp-121', - 'zAddAssetAttr-Editor Bundle ID-122', - 'zAddAssetAttr-Montage-123', - 'zAsset-Favorite-124', - 'zAsset-Hidden-125', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-126', - 'zAsset-Trashed Date-127', - 'zIntResou-Trash State-128', - 'zIntResou-Trashed Date-129', - 'zAsset-Cloud Delete State-130', - 'zIntResou-Cloud Delete State-131', - 'zAddAssetAttr-PTP Trashed State-132', - 'zIntResou-PTP Trashed State-133', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-134', - 'zMedAnlyAstAttr-Media Analysis Timestamp-135', - 'zAsset-Analysis State Modificaion Date-136', - 'zAddAssetAttr- Pending View Count-137', - 'zAddAssetAttr- View Count-138', - 'zAddAssetAttr- Pending Play Count-139', - 'zAddAssetAttr- Play Count-140', - 'zAddAssetAttr- Pending Share Count-141', - 'zAddAssetAttr- Share Count-142', - 'zAddAssetAttr-Allowed for Analysis-143', - 'zAddAssetAttr-Scene Analysis Version-144', - 'zAddAssetAttr-Scene Analysis Timestamp-145', - 'zAddAssetAttr-Destination Asset Copy State-146', - 'zAddAssetAttr-Variation Suggestions States-147', - 'zAsset-High Frame Rate State-148', - 'zAsset-Video Key Frame Time Scale-149', - 'zAsset-Video Key Frame Value-150', - 'zExtAttr-ISO-151', - 'zExtAttr-Metering Mode-152', - 'zExtAttr-Sample Rate-153', - 'zExtAttr-Track Format-154', - 'zExtAttr-White Balance-155', - 'zExtAttr-Aperture-156', - 'zExtAttr-BitRate-157', - 'zExtAttr-Exposure Bias-158', - 'zExtAttr-Frames Per Second-159', - 'zExtAttr-Shutter Speed-160', - 'zAsset-Height-161', - 'zAddAssetAttr-Original Height-162', - 'zIntResou-Unoriented Height-163', - 'zAsset-Width-164', - 'zAddAssetAttr-Original Width-165', - 'zIntResou-Unoriented Width-166', - 'zAsset-Thumbnail Index-167', - 'zAddAssetAttr-Embedded Thumbnail Height-168', - 'zAddAssetAttr-Embedded Thumbnail Length-169', - 'zAddAssetAttr-Embedded Thumbnail Offset-170', - 'zAddAssetAttr-Embedded Thumbnail Width-171', - 'zAsset-Packed Acceptable Crop Rect-172', - 'zAsset-Packed Badge Attributes-173', - 'zAsset-Packed Preferred Crop Rect-174', - 'zAsset-Curation Score-175', - 'zAsset-Camera Processing Adjustment State-176', - 'zAsset-Depth Type-177', - 'zAddAssetAttr-Orig Resource Choice-178', - 'zAddAssetAttr-Spatial Over Capture Group ID-179', - 'zAddAssetAttr-Place Annotation Data-180', - 'zAddAssetAttr-Edited IPTC Attributes-181', - 'zAddAssetAttr-Title-Comments via Cloud Website-182', - 'zAddAssetAttr-Accessibility Description-183', - 'zAddAssetAttr-Photo Stream Tag ID-184', - 'zAddAssetAttr-Share Type-185', - 'zAsset-Overall Aesthetic Score-186', - 'zAsset-zENT-187', - 'zAsset-zOPT-188', - 'zAsset-Master= zCldMast-zPK-189', - 'zAsset-Extended Attributes= zExtAttr-zPK-190', - 'zAsset-Import Session Key-191', - 'zAsset-FOK-Cloud Feed Asset Entry Key-192', - 'zAsset-Computed Attributes Asset Key-193', - 'zAsset-Promotion Score-194', - 'zAsset-Media Analysis Attributes Key-195', - 'zAsset-Media Group UUID-196', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-197', - 'zAsset.Cloud Collection GUID-198', - 'zAddAssetAttr-zENT-199', - 'ZAddAssetAttr-zOPT-200', - 'zAddAssetAttr-zAsset= zAsset_zPK-201', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-202', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-203', - 'zAddAssetAttr-Public Global UUID-204', - 'zAddAssetAttr-Original Assets UUID-205', - 'zAddAssetAttr-Originating Asset Identifier-206', - 'zAddAssetAttr.Adjusted Fingerprint-207', - 'zCldMast-zPK= zAsset-Master-208', - 'zCldMast-zENT-209', - 'zCldMast-zOPT-210', - 'zCldMast-Moment Share Key= zShare-zPK-211', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-212', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-213', - 'zCldMast-Originating Asset ID-214', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-215', - 'CMzCldMastMedData-zENT-216', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-217', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-218', - 'AAAzCldMastMedData-zENT-219', - 'AAAzCldMastMedData-CldMast key-220', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-221', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-222', - 'zExtAttr-zENT-223', - 'zExtAttr-zOPT-224', - 'zExtAttr-Asset Key-225', - 'zIntResou-zPK-226', - 'zIntResou-zENT-227', - 'zIntResou-zOPT-228', - 'zIntResou-Asset= zAsset_zPK-229', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-230', - 'zMedAnlyAstAttr-zEnt-231', - 'zMedAnlyAstAttr-zOpt-232', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-233') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + 'zAsset-zPK-7', + 'zAddAssetAttr-zPK-8', + 'zAsset-UUID = store.cloudphotodb-9', + 'zAddAssetAttr-Master Fingerprint-10', + 'zIntResou-Fingerprint-11', + 'zIntResou-Local Availability-4QueryStart-1', + 'zIntResou-Remote Availability-4QueryStart-2', + 'zIntResou-Resource Type-4QueryStart-3', + 'zIntResou-Datastore Sub-Type-4QueryStart-4', + 'zIntResou-Recipe ID-4QueryStart-5', + 'zAsset Complete-6', + 'zAsset-Cloud is My Asset-12', + 'zAsset-Cloud is deletable-Asset-13', + 'zAsset-Cloud_Local_State-14', + 'zAsset-Visibility State-15', + 'zExtAttr-Camera Make-16', + 'zExtAttr-Camera Model-17', + 'zExtAttr-Lens Model-18', + 'zExtAttr-Flash Fired-19', + 'zExtAttr-Focal Lenght-20', + 'zAsset-Derived Camera Capture Device-21', + 'zAddAssetAttr-Camera Captured Device-22', + 'zAddAssetAttr-Imported by-23', + 'zCldMast-Imported By-24', + 'zAddAssetAttr-Creator Bundle ID-25', + 'zAddAssetAttr-Imported By Display Name-26', + 'zCldMast-Imported by Bundle ID-27', + 'zCldMast-Imported by Display Name-28', + 'zAsset-Saved Asset Type-29', + 'zAsset-Directory-Path-30', + 'zAsset-Filename-31', + 'zAddAssetAttr- Original Filename-32', + 'zCldMast- Original Filename-33', + ('zAsset-Added Date-34', 'datetime'), + ('zAsset- SortToken -CameraRoll-35', 'datetime'), + ('zAsset-Date Created-36', 'datetime'), + ('zCldMast-Creation Date-37', 'datetime'), + ('zIntResou-CldMst Date Created-38', 'datetime'), + 'zAddAssetAttr-Time Zone Name-39', + 'zAddAssetAttr-Time Zone Offset-40', + 'zAddAssetAttr-Inferred Time Zone Offset-41', + 'zAddAssetAttr-EXIF-String-42', + ('zAsset-Modification Date-43', 'datetime'), + ('zAsset-Last Shared Date-44', 'datetime'), + 'zCldMast-Cloud Local State-45', + ('zCldMast-Import Date-46', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', 'datetime'), + 'zAddAssetAttr-Import Session ID-48', + ('zAddAssetAttr-Alt Import Image Date-49', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-50', + ('zAsset-Cloud Batch Publish Date-51', 'datetime'), + ('zAsset-Cloud Server Publish Date-52', 'datetime'), + 'zAsset-Cloud Download Requests-53', + 'zAsset-Cloud Batch ID-54', + 'zAddAssetAttr-Upload Attempts-55', + 'zAsset-Latitude-56', + 'zExtAttr-Latitude-57', + 'zAsset-Longitude-58', + 'zExtAttr-Longitude-59', + 'zAddAssetAttr-GPS Horizontal Accuracy-60', + 'zAddAssetAttr-Location Hash-61', + 'zAddAssetAttr-Reverse Location Is Valid-62', + 'zAddAssetAttr-Shifted Location Valid-63', + 'AAAzCldMastMedData-zOPT-64', + 'zAddAssetAttr-Media Metadata Type-65', + 'CldMasterzCldMastMedData-zOPT-66', + 'zCldMast-Media Metadata Type-67', + 'zAsset-Orientation-68', + 'zAddAssetAttr-Original Orientation-69', + 'zAsset-Kind-70', + 'zAsset-Kind-Sub-Type-71', + 'zAddAssetAttr-Cloud Kind Sub Type-72', + 'zAsset-Playback Style-73', + 'zAsset-Playback Variation-74', + 'zAsset-Video Duration-75', + 'zExtAttr-Duration-76', + 'zAsset-Video CP Duration-77', + 'zAddAssetAttr-Video CP Duration Time Scale-78', + 'zAsset-Video CP Visibility State-79', + 'zAddAssetAttr-Video CP Display Value-80', + 'zAddAssetAttr-Video CP Display Time Scale-81', + 'zIntResou-Datastore Class ID-82', + 'zAsset-Cloud Placeholder Kind-83', + 'zIntResou-Local Availability-84', + 'zIntResou-Local Availability Target-85', + 'zIntResou-Cloud Local State-86', + 'zIntResou-Remote Availability-87', + 'zIntResou-Remote Availability Target-88', + 'zIntResou-Transient Cloud Master-89', + 'zIntResou-Side Car Index-90', + 'zIntResou- File ID-91', + 'zIntResou-Version-92', + 'zAddAssetAttr- Original-File-Size-93', + 'zIntResou-Resource Type-94', + 'zIntResou-Datastore Sub-Type-95', + 'zIntResou-Cloud Source Type-96', + 'zIntResou-Data Length-97', + 'zIntResou-Recipe ID-98', + ('zIntResou-Cloud Last Prefetch Date-99', 'datetime'), + 'zIntResou-Cloud Prefetch Count-100', + ('zIntResou- Cloud-Last-OnDemand Download-Date-101', 'datetime'), + 'zAsset-Uniform Type ID-102', + 'zAsset-Original Color Space-103', + 'zCldMast-Uniform_Type_ID-104', + 'zCldMast-Full Size JPEG Source-105', + 'zAsset-HDR Gain-106', + 'zExtAttr-Codec-107', + 'zCldMast-Codec Name-108', + 'zCldMast-Video Frame Rate-109', + 'zCldMast-Placeholder State-110', + 'zAsset-Depth_Type-111', + 'zAsset-Avalanche UUID-112', + 'zAsset-Avalanche_Pick_Type-BurstAsset-113', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-114', + 'zAddAssetAttr-Cloud Recovery State-115', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-116', + 'zAsset-Deferred Processing Needed-117', + 'zAddAssetAttr-Deferred Photo Identifier-118', + 'zAddAssetAttr-Deferred Processing Candidate Options-119', + 'zAsset-Has Adjustments-Camera-Effects-Filters-120', + ('zAsset-Adjustment Timestamp-121', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-122', + 'zAddAssetAttr-Montage-123', + 'zAsset-Favorite-124', + 'zAsset-Hidden-125', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-126', + ('zAsset-Trashed Date-127', 'datetime'), + 'zIntResou-Trash State-128', + ('zIntResou-Trashed Date-129', 'datetime'), + 'zAsset-Cloud Delete State-130', + 'zIntResou-Cloud Delete State-131', + 'zAddAssetAttr-PTP Trashed State-132', + 'zIntResou-PTP Trashed State-133', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-134', + ('zMedAnlyAstAttr-Media Analysis Timestamp-135', 'datetime'), + ('zAsset-Analysis State Modification Date-136', 'datetime'), + 'zAddAssetAttr- Pending View Count-137', + 'zAddAssetAttr- View Count-138', + 'zAddAssetAttr- Pending Play Count-139', + 'zAddAssetAttr- Play Count-140', + 'zAddAssetAttr- Pending Share Count-141', + 'zAddAssetAttr- Share Count-142', + 'zAddAssetAttr-Allowed for Analysis-143', + 'zAddAssetAttr-Scene Analysis Version-144', + ('zAddAssetAttr-Scene Analysis Timestamp-145', 'datetime'), + 'zAddAssetAttr-Destination Asset Copy State-146', + 'zAddAssetAttr-Variation Suggestions States-147', + 'zAsset-High Frame Rate State-148', + 'zAsset-Video Key Frame Time Scale-149', + 'zAsset-Video Key Frame Value-150', + 'zExtAttr-ISO-151', + 'zExtAttr-Metering Mode-152', + 'zExtAttr-Sample Rate-153', + 'zExtAttr-Track Format-154', + 'zExtAttr-White Balance-155', + 'zExtAttr-Aperture-156', + 'zExtAttr-BitRate-157', + 'zExtAttr-Exposure Bias-158', + 'zExtAttr-Frames Per Second-159', + 'zExtAttr-Shutter Speed-160', + 'zAsset-Height-161', + 'zAddAssetAttr-Original Height-162', + 'zIntResou-Unoriented Height-163', + 'zAsset-Width-164', + 'zAddAssetAttr-Original Width-165', + 'zIntResou-Unoriented Width-166', + 'zAsset-Thumbnail Index-167', + 'zAddAssetAttr-Embedded Thumbnail Height-168', + 'zAddAssetAttr-Embedded Thumbnail Length-169', + 'zAddAssetAttr-Embedded Thumbnail Offset-170', + 'zAddAssetAttr-Embedded Thumbnail Width-171', + 'zAsset-Packed Acceptable Crop Rect-172', + 'zAsset-Packed Badge Attributes-173', + 'zAsset-Packed Preferred Crop Rect-174', + 'zAsset-Curation Score-175', + 'zAsset-Camera Processing Adjustment State-176', + 'zAsset-Depth Type-177', + 'zAddAssetAttr-Orig Resource Choice-178', + 'zAddAssetAttr-Spatial Over Capture Group ID-179', + 'zAddAssetAttr-Place Annotation Data-180', + 'zAddAssetAttr-Edited IPTC Attributes-181', + 'zAddAssetAttr-Title-Comments via Cloud Website-182', + 'zAddAssetAttr-Accessibility Description-183', + 'zAddAssetAttr-Photo Stream Tag ID-184', + 'zAddAssetAttr-Share Type-185', + 'zAsset-Overall Aesthetic Score-186', + 'zAsset-zENT-187', + 'zAsset-zOPT-188', + 'zAsset-Master= zCldMast-zPK-189', + 'zAsset-Extended Attributes= zExtAttr-zPK-190', + 'zAsset-Import Session Key-191', + 'zAsset-FOK-Cloud Feed Asset Entry Key-192', + 'zAsset-Computed Attributes Asset Key-193', + 'zAsset-Promotion Score-194', + 'zAsset-Media Analysis Attributes Key-195', + 'zAsset-Media Group UUID-196', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-197', + 'zAsset.Cloud Collection GUID-198', + 'zAddAssetAttr-zENT-199', + 'ZAddAssetAttr-zOPT-200', + 'zAddAssetAttr-zAsset= zAsset_zPK-201', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-202', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-203', + 'zAddAssetAttr-Public Global UUID-204', + 'zAddAssetAttr-Original Assets UUID-205', + 'zAddAssetAttr-Originating Asset Identifier-206', + 'zAddAssetAttr.Adjusted Fingerprint-207', + 'zCldMast-zPK= zAsset-Master-208', + 'zCldMast-zENT-209', + 'zCldMast-zOPT-210', + 'zCldMast-Moment Share Key= zShare-zPK-211', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-212', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-213', + 'zCldMast-Originating Asset ID-214', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-215', + 'CMzCldMastMedData-zENT-216', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-217', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-218', + 'AAAzCldMastMedData-zENT-219', + 'AAAzCldMastMedData-CldMast key-220', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-221', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-222', + 'zExtAttr-zENT-223', + 'zExtAttr-zOPT-224', + 'zExtAttr-Asset Key-225', + 'zIntResou-zPK-226', + 'zIntResou-zENT-227', + 'zIntResou-zOPT-228', + 'zIntResou-Asset= zAsset_zPK-229', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-230', + 'zMedAnlyAstAttr-zEnt-231', + 'zMedAnlyAstAttr-zOpt-232', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-233') + data_list = get_sqlite_db_records(source_path, query) - tlactivity = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No Internal Resource data available for iOS 14 PhotoData-Photos.sqlite') - - db.close() - return + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -1827,337 +1812,312 @@ def get_ph51possibleoptimizedassetsphdapsql(files_found, report_folder, seeker, LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK WHERE (zIntResou.ZDATASTORESUBTYPE = 1) & (zIntResou.ZLOCALAVAILABILITY = -1) & (zIntResou.ZFINGERPRINT IS NOT NULL) ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257])) - - counter += 1 - - description = 'Parses iOS 15 possible optimized asset records from PhotoData-Photos.sqlite' \ - ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide data' \ - ' for investigative analysis of assets being stored locally on the device verses' \ - ' assets being stored in iCloud Photos as the result of optimization.' \ - ' This is very large query and script, I recommend opening the TSV generated report' \ - ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \ - ' to view, search, and filter the results.' - report = ArtifactHtmlReport('Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-4QueryStart-0', - 'zAsset-zPK-7', - 'zAddAssetAttr-zPK-8', - 'zAsset-UUID = store.cloudphotodb-9', - 'zAddAssetAttr-Master Fingerprint-10', - 'zIntResou-Fingerprint-11', - 'zIntResou-Local Availability-4QueryStart-1', - 'zIntResou-Remote Availability-4QueryStart-2', - 'zIntResou-Resource Type-4QueryStart-3', - 'zIntResou-Datastore Sub-Type-4QueryStart-4', - 'zIntResou-Recipe ID-4QueryStart-5', - 'zAsset Complete-6', - 'zAsset-Bundle Scope-12', - 'zAsset-Syndication State-13', - 'zAsset-Cloud is My Asset-14', - 'zAsset-Cloud is deletable-Asset-15', - 'zAsset-Cloud_Local_State-16', - 'zAsset-Visibility State-17', - 'zExtAttr-Camera Make-18', - 'zExtAttr-Camera Model-19', - 'zExtAttr-Lens Model-20', - 'zExtAttr-Flash Fired-21', - 'zExtAttr-Focal Length-22', - 'zExtAttr-Focal Length in 35MM-23', - 'zExtAttr-Digital Zoom Ratio-24', - 'zAsset-Derived Camera Capture Device-25', - 'zAddAssetAttr-Camera Captured Device-26', - 'zAddAssetAttr-Imported by-27', - 'zCldMast-Imported By-28', - 'zAddAssetAttr.Imported by Bundle Identifier-29', - 'zAddAssetAttr-Imported By Display Name-30', - 'zCldMast-Imported by Bundle ID-31', - 'zCldMast-Imported by Display Name-32', - 'zAsset-Saved Asset Type-33', - 'zAsset-Directory-Path-34', - 'zAsset-Filename-35', - 'zAddAssetAttr- Original Filename-36', - 'zCldMast- Original Filename-37', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-38', - 'zAsset-Added Date-39', - 'zAsset- SortToken -CameraRoll-40', - 'zAddAssetAttr-Date Created Source-41', - 'zAsset-Date Created-42', - 'zCldMast-Creation Date-43', - 'zIntResou-CldMst Date Created-44', - 'zAddAssetAttr-Time Zone Name-45', - 'zAddAssetAttr-Time Zone Offset-46', - 'zAddAssetAttr-Inferred Time Zone Offset-47', - 'zAddAssetAttr-EXIF-String-48', - 'zAsset-Modification Date-49', - 'zAsset-Last Shared Date-50', - 'zCldMast-Cloud Local State-51', - 'zCldMast-Import Date-52', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-53', - 'zAddAssetAttr-Import Session ID-54', - 'zAddAssetAttr-Alt Import Image Date-55', - 'zCldMast-Import Session ID- AirDrop-StillTesting-56', - 'zAsset-Cloud Batch Publish Date-57', - 'zAsset-Cloud Server Publish Date-58', - 'zAsset-Cloud Download Requests-59', - 'zAsset-Cloud Batch ID-60', - 'zAddAssetAttr-Upload Attempts-61', - 'zAsset-Latitude-62', - 'zExtAttr-Latitude-63', - 'zAsset-Longitude-64', - 'zExtAttr-Longitude-65', - 'zAddAssetAttr-GPS Horizontal Accuracy-66', - 'zAddAssetAttr-Location Hash-67', - 'zAddAssetAttr-Reverse Location Is Valid-68', - 'zAddAssetAttr-Shifted Location Valid-69', - 'AAAzCldMastMedData-zOPT-70', - 'zAddAssetAttr-Media Metadata Type-71', - 'CldMasterzCldMastMedData-zOPT-72', - 'zCldMast-Media Metadata Type-73', - 'zAddAssetAttr-Syndication History-74', - 'zMedAnlyAstAttr-Syndication Processing Version-75', - 'zMedAnlyAstAttr-Syndication Processing Value-76', - 'zAsset-Orientation-77', - 'zAddAssetAttr-Original Orientation-78', - 'zAsset-Kind-79', - 'zAsset-Kind-Sub-Type-80', - 'zAddAssetAttr-Cloud Kind Sub Type-81', - 'zAsset-Playback Style-82', - 'zAsset-Playback Variation-83', - 'zAsset-Video Duration-84', - 'zExtAttr-Duration-85', - 'zAsset-Video CP Duration-86', - 'zAddAssetAttr-Video CP Duration Time Scale-87', - 'zAsset-Video CP Visibility State-88', - 'zAddAssetAttr-Video CP Display Value-89', - 'zAddAssetAttr-Video CP Display Time Scale-90', - 'zIntResou-Datastore Class ID-91', - 'zAsset-Cloud Placeholder Kind-92', - 'zIntResou-Local Availability-93', - 'zIntResou-Local Availability Target-94', - 'zIntResou-Cloud Local State-95', - 'zIntResou-Remote Availability-96', - 'zIntResou-Remote Availability Target-97', - 'zIntResou-Transient Cloud Master-98', - 'zIntResou-Side Car Index-99', - 'zIntResou- File ID-100', - 'zIntResou-Version-101', - 'zAddAssetAttr- Original-File-Size-102', - 'zIntResou-Resource Type-103', - 'zIntResou-Datastore Sub-Type-104', - 'zIntResou-Cloud Source Type-105', - 'zIntResou-Data Length-106', - 'zIntResou-Recipe ID-107', - 'zIntResou-Cloud Last Prefetch Date-108', - 'zIntResou-Cloud Prefetch Count-109', - 'zIntResou- Cloud-Last-OnDemand Download-Date-110', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-111', - 'zIntResou-Compact-UTI-112', - 'zAsset-Uniform Type ID-113', - 'zAsset-Original Color Space-114', - 'zCldMast-Uniform_Type_ID-115', - 'zCldMast-Full Size JPEG Source-116', - 'zAsset-HDR Gain-117', - 'zAsset-zHDR_Type-118', - 'zExtAttr-Codec-119', - 'zIntResou-Codec Four Char Code Name-120', - 'zCldMast-Codec Name-121', - 'zCldMast-Video Frame Rate-122', - 'zCldMast-Placeholder State-123', - 'zAsset-Depth_Type-124', - 'zAsset-Avalanche UUID-125', - 'zAsset-Avalanche_Pick_Type-BurstAsset-126', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-127', - 'zAddAssetAttr-Cloud Recovery State-128', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-129', - 'zAsset-Deferred Processing Needed-130', - 'zAsset-Video Deferred Processing Needed-131', - 'zAddAssetAttr-Deferred Photo Identifier-132', - 'zAddAssetAttr-Deferred Processing Candidate Options-133', - 'zAsset-Has Adjustments-Camera-Effects-Filters-134', - 'zAsset-Adjustment Timestamp-135', - 'zAddAssetAttr-Editor Bundle ID-136', - 'zAddAssetAttr-Montage-137', - 'zAsset-Favorite-138', - 'zAsset-Hidden-139', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-140', - 'zAsset-Trashed Date-141', - 'zIntResou-Trash State-142', - 'zIntResou-Trashed Date-143', - 'zAsset-Cloud Delete State-144', - 'zIntResou-Cloud Delete State-145', - 'zAddAssetAttr-PTP Trashed State-146', - 'zIntResou-PTP Trashed State-147', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-148', - 'zMedAnlyAstAttr-Media Analysis Timestamp-149', - 'zAsset-Analysis State Modification Date-150', - 'zAddAssetAttr- Pending View Count-151', - 'zAddAssetAttr- View Count-152', - 'zAddAssetAttr- Pending Play Count-153', - 'zAddAssetAttr- Play Count-154', - 'zAddAssetAttr- Pending Share Count-155', - 'zAddAssetAttr- Share Count-156', - 'zAddAssetAttr-Allowed for Analysis-157', - 'zAddAssetAttr-Scene Analysis Version-158', - 'zAddAssetAttr-Scene Analysis is From Preview-159', - 'zAddAssetAttr-Scene Analysis Timestamp-160', - 'zAddAssetAttr-Destination Asset Copy State-161', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-162', - 'zCldMast-Source Master For Duplication Scope ID-163', - 'zAddAssetAttr-Source Asset For Duplication ID-164', - 'zCldMast-Source Master for Duplication ID-165', - 'zAddAssetAttr-Variation Suggestions States-166', - 'zAsset-High Frame Rate State-167', - 'zAsset-Video Key Frame Time Scale-168', - 'zAsset-Video Key Frame Value-169', - 'zExtAttr-ISO-170', - 'zExtAttr-Metering Mode-171', - 'zExtAttr-Sample Rate-172', - 'zExtAttr-Track Format-173', - 'zExtAttr-White Balance-174', - 'zExtAttr-Aperture-175', - 'zExtAttr-BitRate-176', - 'zExtAttr-Exposure Bias-177', - 'zExtAttr-Frames Per Second-178', - 'zExtAttr-Shutter Speed-179', - 'zExtAttr-Slush Scene Bias-180', - 'zExtAttr-Slush Version-181', - 'zExtAttr-Slush Preset-182', - 'zExtAttr-Slush Warm Bias-183', - 'zAsset-Height-184', - 'zAddAssetAttr-Original Height-185', - 'zIntResou-UnOriented Height-186', - 'zAsset-Width-187', - 'zAddAssetAttr-Original Width-188', - 'zIntResou-UnOriented Width-189', - 'zAsset-Thumbnail Index-190', - 'zAddAssetAttr-Embedded Thumbnail Height-191', - 'zAddAssetAttr-Embedded Thumbnail Length-192', - 'zAddAssetAttr-Embedded Thumbnail Offset-193', - 'zAddAssetAttr-Embedded Thumbnail Width-194', - 'zAsset-Packed Acceptable Crop Rect-195', - 'zAsset-Packed Badge Attributes-196', - 'zAsset-Packed Preferred Crop Rect-197', - 'zAsset-Curation Score-198', - 'zAsset-Camera Processing Adjustment State-199', - 'zAsset-Depth Type-200', - 'zAsset-Is Magic Carpet-Quicktime_MOV_file-201', - 'zAddAssetAttr-Orig Resource Choice-202', - 'zAddAssetAttr-Spatial Over Capture Group ID-203', - 'zAddAssetAttr-Place Annotation Data-204', - 'zAddAssetAttr-Edited IPTC Attributes-205', - 'zAddAssetAttr-Title-Comments via Cloud Website-206', - 'zAddAssetAttr-Accessibility Description-207', - 'zAddAssetAttr-Photo Stream Tag ID-208', - 'zAddAssetAttr-Share Type-209', - 'zAsset-Overall Aesthetic Score-210', - 'zAsset-zENT-211', - 'zAsset-zOPT-212', - 'zAsset-Master= zCldMast-zPK-213', - 'zAsset-Extended Attributes= zExtAttr-zPK-214', - 'zAsset-Import Session Key-215', - 'zAsset-FOK-Cloud Feed Asset Entry Key-216', - 'zAsset-Computed Attributes Asset Key-217', - 'zAsset-Promotion Score-218', - 'zAsset-Media Analysis Attributes Key-219', - 'zAsset-Media Group UUID-220', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-221', - 'zAsset.Cloud Collection GUID-222', - 'zAddAssetAttr-zENT-223', - 'ZAddAssetAttr-zOPT-224', - 'zAddAssetAttr-zAsset= zAsset_zPK-225', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-226', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-227', - 'zAddAssetAttr-Public Global UUID-228', - 'zAddAssetAttr-Original Assets UUID-229', - 'zAddAssetAttr-Originating Asset Identifier-230', - 'zAddAssetAttr.Adjusted Fingerprint-231', - 'zCldMast-zPK= zAsset-Master-232', - 'zCldMast-zENT-233', - 'zCldMast-zOPT-234', - 'zCldMast-Moment Share Key= zShare-zPK-235', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-236', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-237', - 'zCldMast-Originating Asset ID-238', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-239', - 'CMzCldMastMedData-zENT-240', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-241', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-242', - 'AAAzCldMastMedData-zENT-243', - 'AAAzCldMastMedData-CldMast key-244', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-245', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-246', - 'zExtAttr-zENT-247', - 'zExtAttr-zOPT-248', - 'zExtAttr-Asset Key-249', - 'zIntResou-zPK-250', - 'zIntResou-zENT-251', - 'zIntResou-zOPT-252', - 'zIntResou-Asset= zAsset_zPK-253', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-254', - 'zMedAnlyAstAttr-zEnt-255', - 'zMedAnlyAstAttr-zOpt-256', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-257') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257])) - tlactivity = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + 'zAsset-zPK-7', + 'zAddAssetAttr-zPK-8', + 'zAsset-UUID = store.cloudphotodb-9', + 'zAddAssetAttr-Master Fingerprint-10', + 'zIntResou-Fingerprint-11', + 'zIntResou-Local Availability-4QueryStart-1', + 'zIntResou-Remote Availability-4QueryStart-2', + 'zIntResou-Resource Type-4QueryStart-3', + 'zIntResou-Datastore Sub-Type-4QueryStart-4', + 'zIntResou-Recipe ID-4QueryStart-5', + 'zAsset Complete-6', + 'zAsset-Bundle Scope-12', + 'zAsset-Syndication State-13', + 'zAsset-Cloud is My Asset-14', + 'zAsset-Cloud is deletable-Asset-15', + 'zAsset-Cloud_Local_State-16', + 'zAsset-Visibility State-17', + 'zExtAttr-Camera Make-18', + 'zExtAttr-Camera Model-19', + 'zExtAttr-Lens Model-20', + 'zExtAttr-Flash Fired-21', + 'zExtAttr-Focal Length-22', + 'zExtAttr-Focal Length in 35MM-23', + 'zExtAttr-Digital Zoom Ratio-24', + 'zAsset-Derived Camera Capture Device-25', + 'zAddAssetAttr-Camera Captured Device-26', + 'zAddAssetAttr-Imported by-27', + 'zCldMast-Imported By-28', + 'zAddAssetAttr.Imported by Bundle Identifier-29', + 'zAddAssetAttr-Imported By Display Name-30', + 'zCldMast-Imported by Bundle ID-31', + 'zCldMast-Imported by Display Name-32', + 'zAsset-Saved Asset Type-33', + 'zAsset-Directory-Path-34', + 'zAsset-Filename-35', + 'zAddAssetAttr- Original Filename-36', + 'zCldMast- Original Filename-37', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-38', + ('zAsset-Added Date-39', 'datetime'), + ('zAsset- SortToken -CameraRoll-40', 'datetime'), + ('zAddAssetAttr-Date Created Source-41', 'datetime'), + ('zAsset-Date Created-42', 'datetime'), + ('zCldMast-Creation Date-43', 'datetime'), + ('zIntResou-CldMst Date Created-44', 'datetime'), + 'zAddAssetAttr-Time Zone Name-45', + 'zAddAssetAttr-Time Zone Offset-46', + 'zAddAssetAttr-Inferred Time Zone Offset-47', + 'zAddAssetAttr-EXIF-String-48', + ('zAsset-Modification Date-49', 'datetime'), + ('zAsset-Last Shared Date-50', 'datetime'), + 'zCldMast-Cloud Local State-51', + ('zCldMast-Import Date-52', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-53', 'datetime'), + 'zAddAssetAttr-Import Session ID-54', + ('zAddAssetAttr-Alt Import Image Date-55', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-56', + ('zAsset-Cloud Batch Publish Date-57', 'datetime'), + ('zAsset-Cloud Server Publish Date-58', 'datetime'), + 'zAsset-Cloud Download Requests-59', + 'zAsset-Cloud Batch ID-60', + 'zAddAssetAttr-Upload Attempts-61', + 'zAsset-Latitude-62', + 'zExtAttr-Latitude-63', + 'zAsset-Longitude-64', + 'zExtAttr-Longitude-65', + 'zAddAssetAttr-GPS Horizontal Accuracy-66', + 'zAddAssetAttr-Location Hash-67', + 'zAddAssetAttr-Reverse Location Is Valid-68', + 'zAddAssetAttr-Shifted Location Valid-69', + 'AAAzCldMastMedData-zOPT-70', + 'zAddAssetAttr-Media Metadata Type-71', + 'CldMasterzCldMastMedData-zOPT-72', + 'zCldMast-Media Metadata Type-73', + 'zAddAssetAttr-Syndication History-74', + 'zMedAnlyAstAttr-Syndication Processing Version-75', + 'zMedAnlyAstAttr-Syndication Processing Value-76', + 'zAsset-Orientation-77', + 'zAddAssetAttr-Original Orientation-78', + 'zAsset-Kind-79', + 'zAsset-Kind-Sub-Type-80', + 'zAddAssetAttr-Cloud Kind Sub Type-81', + 'zAsset-Playback Style-82', + 'zAsset-Playback Variation-83', + 'zAsset-Video Duration-84', + 'zExtAttr-Duration-85', + 'zAsset-Video CP Duration-86', + 'zAddAssetAttr-Video CP Duration Time Scale-87', + 'zAsset-Video CP Visibility State-88', + 'zAddAssetAttr-Video CP Display Value-89', + 'zAddAssetAttr-Video CP Display Time Scale-90', + 'zIntResou-Datastore Class ID-91', + 'zAsset-Cloud Placeholder Kind-92', + 'zIntResou-Local Availability-93', + 'zIntResou-Local Availability Target-94', + 'zIntResou-Cloud Local State-95', + 'zIntResou-Remote Availability-96', + 'zIntResou-Remote Availability Target-97', + 'zIntResou-Transient Cloud Master-98', + 'zIntResou-Side Car Index-99', + 'zIntResou- File ID-100', + 'zIntResou-Version-101', + 'zAddAssetAttr- Original-File-Size-102', + 'zIntResou-Resource Type-103', + 'zIntResou-Datastore Sub-Type-104', + 'zIntResou-Cloud Source Type-105', + 'zIntResou-Data Length-106', + 'zIntResou-Recipe ID-107', + ('zIntResou-Cloud Last Prefetch Date-108', 'datetime'), + 'zIntResou-Cloud Prefetch Count-109', + ('zIntResou- Cloud-Last-OnDemand Download-Date-110', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-111', + 'zIntResou-Compact-UTI-112', + 'zAsset-Uniform Type ID-113', + 'zAsset-Original Color Space-114', + 'zCldMast-Uniform_Type_ID-115', + 'zCldMast-Full Size JPEG Source-116', + 'zAsset-HDR Gain-117', + 'zAsset-zHDR_Type-118', + 'zExtAttr-Codec-119', + 'zIntResou-Codec Four Char Code Name-120', + 'zCldMast-Codec Name-121', + 'zCldMast-Video Frame Rate-122', + 'zCldMast-Placeholder State-123', + 'zAsset-Depth_Type-124', + 'zAsset-Avalanche UUID-125', + 'zAsset-Avalanche_Pick_Type-BurstAsset-126', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-127', + 'zAddAssetAttr-Cloud Recovery State-128', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-129', + 'zAsset-Deferred Processing Needed-130', + 'zAsset-Video Deferred Processing Needed-131', + 'zAddAssetAttr-Deferred Photo Identifier-132', + 'zAddAssetAttr-Deferred Processing Candidate Options-133', + 'zAsset-Has Adjustments-Camera-Effects-Filters-134', + ('zAsset-Adjustment Timestamp-135', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-136', + 'zAddAssetAttr-Montage-137', + 'zAsset-Favorite-138', + 'zAsset-Hidden-139', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-140', + ('zAsset-Trashed Date-141', 'datetime'), + 'zIntResou-Trash State-142', + ('zIntResou-Trashed Date-143', 'datetime'), + 'zAsset-Cloud Delete State-144', + 'zIntResou-Cloud Delete State-145', + 'zAddAssetAttr-PTP Trashed State-146', + 'zIntResou-PTP Trashed State-147', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-148', + ('zMedAnlyAstAttr-Media Analysis Timestamp-149', 'datetime'), + ('zAsset-Analysis State Modification Date-150', 'datetime'), + 'zAddAssetAttr- Pending View Count-151', + 'zAddAssetAttr- View Count-152', + 'zAddAssetAttr- Pending Play Count-153', + 'zAddAssetAttr- Play Count-154', + 'zAddAssetAttr- Pending Share Count-155', + 'zAddAssetAttr- Share Count-156', + 'zAddAssetAttr-Allowed for Analysis-157', + 'zAddAssetAttr-Scene Analysis Version-158', + 'zAddAssetAttr-Scene Analysis is From Preview-159', + ('zAddAssetAttr-Scene Analysis Timestamp-160', 'datetime'), + 'zAddAssetAttr-Destination Asset Copy State-161', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-162', + 'zCldMast-Source Master For Duplication Scope ID-163', + 'zAddAssetAttr-Source Asset For Duplication ID-164', + 'zCldMast-Source Master for Duplication ID-165', + 'zAddAssetAttr-Variation Suggestions States-166', + 'zAsset-High Frame Rate State-167', + 'zAsset-Video Key Frame Time Scale-168', + 'zAsset-Video Key Frame Value-169', + 'zExtAttr-ISO-170', + 'zExtAttr-Metering Mode-171', + 'zExtAttr-Sample Rate-172', + 'zExtAttr-Track Format-173', + 'zExtAttr-White Balance-174', + 'zExtAttr-Aperture-175', + 'zExtAttr-BitRate-176', + 'zExtAttr-Exposure Bias-177', + 'zExtAttr-Frames Per Second-178', + 'zExtAttr-Shutter Speed-179', + 'zExtAttr-Slush Scene Bias-180', + 'zExtAttr-Slush Version-181', + 'zExtAttr-Slush Preset-182', + 'zExtAttr-Slush Warm Bias-183', + 'zAsset-Height-184', + 'zAddAssetAttr-Original Height-185', + 'zIntResou-UnOriented Height-186', + 'zAsset-Width-187', + 'zAddAssetAttr-Original Width-188', + 'zIntResou-UnOriented Width-189', + 'zAsset-Thumbnail Index-190', + 'zAddAssetAttr-Embedded Thumbnail Height-191', + 'zAddAssetAttr-Embedded Thumbnail Length-192', + 'zAddAssetAttr-Embedded Thumbnail Offset-193', + 'zAddAssetAttr-Embedded Thumbnail Width-194', + 'zAsset-Packed Acceptable Crop Rect-195', + 'zAsset-Packed Badge Attributes-196', + 'zAsset-Packed Preferred Crop Rect-197', + 'zAsset-Curation Score-198', + 'zAsset-Camera Processing Adjustment State-199', + 'zAsset-Depth Type-200', + 'zAsset-Is Magic Carpet-Quicktime_MOV_file-201', + 'zAddAssetAttr-Orig Resource Choice-202', + 'zAddAssetAttr-Spatial Over Capture Group ID-203', + 'zAddAssetAttr-Place Annotation Data-204', + 'zAddAssetAttr-Edited IPTC Attributes-205', + 'zAddAssetAttr-Title-Comments via Cloud Website-206', + 'zAddAssetAttr-Accessibility Description-207', + 'zAddAssetAttr-Photo Stream Tag ID-208', + 'zAddAssetAttr-Share Type-209', + 'zAsset-Overall Aesthetic Score-210', + 'zAsset-zENT-211', + 'zAsset-zOPT-212', + 'zAsset-Master= zCldMast-zPK-213', + 'zAsset-Extended Attributes= zExtAttr-zPK-214', + 'zAsset-Import Session Key-215', + 'zAsset-FOK-Cloud Feed Asset Entry Key-216', + 'zAsset-Computed Attributes Asset Key-217', + 'zAsset-Promotion Score-218', + 'zAsset-Media Analysis Attributes Key-219', + 'zAsset-Media Group UUID-220', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-221', + 'zAsset.Cloud Collection GUID-222', + 'zAddAssetAttr-zENT-223', + 'ZAddAssetAttr-zOPT-224', + 'zAddAssetAttr-zAsset= zAsset_zPK-225', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-226', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-227', + 'zAddAssetAttr-Public Global UUID-228', + 'zAddAssetAttr-Original Assets UUID-229', + 'zAddAssetAttr-Originating Asset Identifier-230', + 'zAddAssetAttr.Adjusted Fingerprint-231', + 'zCldMast-zPK= zAsset-Master-232', + 'zCldMast-zENT-233', + 'zCldMast-zOPT-234', + 'zCldMast-Moment Share Key= zShare-zPK-235', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-236', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-237', + 'zCldMast-Originating Asset ID-238', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-239', + 'CMzCldMastMedData-zENT-240', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-241', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-242', + 'AAAzCldMastMedData-zENT-243', + 'AAAzCldMastMedData-CldMast key-244', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-245', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-246', + 'zExtAttr-zENT-247', + 'zExtAttr-zOPT-248', + 'zExtAttr-Asset Key-249', + 'zIntResou-zPK-250', + 'zIntResou-zENT-251', + 'zIntResou-zOPT-252', + 'zIntResou-Asset= zAsset_zPK-253', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-254', + 'zMedAnlyAstAttr-zEnt-255', + 'zMedAnlyAstAttr-zOpt-256', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-257') + data_list = get_sqlite_db_records(source_path, query) - else: - logfunc('No Internal Resource data available for iOS 15 PhotoData-Photos.sqlite') - - db.close() - return + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', zAsset.Z_PK AS 'zAsset-zPK', @@ -2976,2864 +2936,2737 @@ def get_ph51possibleoptimizedassetsphdapsql(files_found, report_folder, seeker, LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK WHERE (zIntResou.ZDATASTORESUBTYPE = 1) & (zIntResou.ZLOCALAVAILABILITY = -1) & (zIntResou.ZFINGERPRINT IS NOT NULL) ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267])) + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267])) - counter += 1 + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + 'zAsset-zPK-7', + 'zAddAssetAttr-zPK-8', + 'zAsset-UUID = store.cloudphotodb-9', + 'zAddAssetAttr-Master Fingerprint-10', + 'zIntResou-Fingerprint-11', + 'zIntResou-Local Availability-4QueryStart-1', + 'zIntResou-Remote Availability-4QueryStart-2', + 'zIntResou-Resource Type-4QueryStart-3', + 'zIntResou-Datastore Sub-Type-4QueryStart-4', + 'zIntResou-Recipe ID-4QueryStart-5', + 'zAsset Complete-6', + 'zAsset-Bundle Scope-12', + 'zAsset-Syndication State-13', + 'zAsset-Cloud is My Asset-14', + 'zAsset-Cloud is deletable-Asset-15', + 'zAsset-Cloud_Local_State-16', + 'zAsset-Visibility State-17', + 'zExtAttr-Camera Make-18', + 'zExtAttr-Camera Model-19', + 'zExtAttr-Lens Model-20', + 'zExtAttr-Flash Fired-21', + 'zExtAttr-Focal Length-22', + 'zExtAttr-Focal Length in 35MM-23', + 'zExtAttr-Digital Zoom Ratio-24', + 'zAsset-Derived Camera Capture Device-25', + 'zAddAssetAttr-Camera Captured Device-26', + 'zAddAssetAttr-Imported by-27', + 'zCldMast-Imported By-28', + 'zAddAssetAttr.Imported by Bundle Identifier-29', + 'zAddAssetAttr-Imported By Display Name-30', + 'zCldMast-Imported by Bundle ID-31', + 'zCldMast-Imported by Display Name-32', + 'zAsset-Saved Asset Type-33', + 'zAsset-Directory-Path-34', + 'zAsset-Filename-35', + 'zAddAssetAttr- Original Filename-36', + 'zCldMast- Original Filename-37', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-38', + 'zAsset-Active Library Scope Participation State-39', + 'zAsset-Library Scope Share State- StillTesting-40', + ('zAsset-Added Date-41', 'datetime'), + ('zAsset- SortToken -CameraRoll-42', 'datetime'), + ('zAddAssetAttr-Date Created Source-43', 'datetime'), + ('zAsset-Date Created-44', 'datetime'), + ('zCldMast-Creation Date-45', 'datetime'), + ('zIntResou-CldMst Date Created-46', 'datetime'), + 'zAddAssetAttr-Time Zone Name-47', + 'zAddAssetAttr-Time Zone Offset-48', + 'zAddAssetAttr-Inferred Time Zone Offset-49', + 'zAddAssetAttr-EXIF-String-50', + ('zAsset-Modification Date-51', 'datetime'), + ('zAsset-Last Shared Date-52', 'datetime'), + 'zCldMast-Cloud Local State-53', + ('zCldMast-Import Date-54', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-55', 'datetime'), + 'zAddAssetAttr-Import Session ID-56', + ('zAddAssetAttr-Alt Import Image Date-57', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-58', + ('zAsset-Cloud Batch Publish Date-59', 'datetime'), + ('zAsset-Cloud Server Publish Date-60', 'datetime'), + 'zAsset-Cloud Download Requests-61', + 'zAsset-Cloud Batch ID-62', + 'zAddAssetAttr-Upload Attempts-63', + 'zAsset-Latitude-64', + 'zExtAttr-Latitude-65', + 'zAsset-Longitude-66', + 'zExtAttr-Longitude-67', + 'zAddAssetAttr-GPS Horizontal Accuracy-68', + 'zAddAssetAttr-Location Hash-69', + 'zAddAssetAttr-Reverse Location Is Valid-70', + 'zAddAssetAttr-Shifted Location Valid-71', + 'AAAzCldMastMedData-zOPT-72', + 'zAddAssetAttr-Media Metadata Type-73', + 'CldMasterzCldMastMedData-zOPT-74', + 'zCldMast-Media Metadata Type-75', + 'zAsset-Search Index Rebuild State-76', + 'zAddAssetAttr-Syndication History-77', + 'zMedAnlyAstAttr-Syndication Processing Version-78', + 'zMedAnlyAstAttr-Syndication Processing Value-79', + 'zAsset-Orientation-80', + 'zAddAssetAttr-Original Orientation-81', + 'zAsset-Kind-82', + 'zAsset-Kind-Sub-Type-83', + 'zAddAssetAttr-Cloud Kind Sub Type-84', + 'zAsset-Playback Style-85', + 'zAsset-Playback Variation-86', + 'zAsset-Video Duration-87', + 'zExtAttr-Duration-88', + 'zAsset-Video CP Duration-89', + 'zAddAssetAttr-Video CP Duration Time Scale-90', + 'zAsset-Video CP Visibility State-91', + 'zAddAssetAttr-Video CP Display Value-92', + 'zAddAssetAttr-Video CP Display Time Scale-93', + 'zIntResou-Datastore Class ID-94', + 'zAsset-Cloud Placeholder Kind-95', + 'zIntResou-Local Availability-96', + 'zIntResou-Local Availability Target-97', + 'zIntResou-Cloud Local State-98', + 'zIntResou-Remote Availability-99', + 'zIntResou-Remote Availability Target-100', + 'zIntResou-Transient Cloud Master-101', + 'zIntResou-Side Car Index-102', + 'zIntResou- File ID-103', + 'zIntResou-Version-104', + 'zAddAssetAttr- Original-File-Size-105', + 'zIntResou-Resource Type-106', + 'zIntResou-Datastore Sub-Type-107', + 'zIntResou-Cloud Source Type-108', + 'zIntResou-Data Length-109', + 'zIntResou-Recipe ID-110', + ('zIntResou-Cloud Last Prefetch Date-111', 'datetime'), + 'zIntResou-Cloud Prefetch Count-112', + ('zIntResou- Cloud-Last-OnDemand Download-Date-113', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-114', + 'zIntResou-Compact-UTI-115', + 'zAsset-Uniform Type ID-116', + 'zAsset-Original Color Space-117', + 'zCldMast-Uniform_Type_ID-118', + 'zCldMast-Full Size JPEG Source-119', + 'zAsset-HDR Gain-120', + 'zAsset-zHDR_Type-121', + 'zExtAttr-Codec-122', + 'zIntResou-Codec Four Char Code Name-123', + 'zCldMast-Codec Name-124', + 'zCldMast-Video Frame Rate-125', + 'zCldMast-Placeholder State-126', + 'zAsset-Depth_Type-127', + 'zAsset-Avalanche UUID-128', + 'zAsset-Avalanche_Pick_Type-BurstAsset-129', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-130', + 'zAddAssetAttr-Cloud Recovery State-131', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-132', + 'zAsset-Deferred Processing Needed-133', + 'zAsset-Video Deferred Processing Needed-134', + 'zAddAssetAttr-Deferred Photo Identifier-135', + 'zAddAssetAttr-Deferred Processing Candidate Options-136', + 'zAsset-Has Adjustments-Camera-Effects-Filters-137', + ('zAsset-Adjustment Timestamp-138', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-139', + 'zAddAssetAttr-Montage-140', + 'zAsset-Favorite-141', + 'zAsset-Hidden-142', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-143', + ('zAsset-Trashed Date-144', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-145', + 'zAsset-Delete-Reason-146', + 'zIntResou-Trash State-147', + ('zIntResou-Trashed Date-148', 'datetime'), + 'zAsset-Cloud Delete State-149', + 'zIntResou-Cloud Delete State-150', + 'zAddAssetAttr-PTP Trashed State-151', + 'zIntResou-PTP Trashed State-152', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-153', + ('zMedAnlyAstAttr-Media Analysis Timestamp-154', 'datetime'), + ('zAsset-Analysis State Modification Date-155', 'datetime'), + 'zAddAssetAttr- Pending View Count-156', + 'zAddAssetAttr- View Count-157', + 'zAddAssetAttr- Pending Play Count-158', + 'zAddAssetAttr- Play Count-159', + 'zAddAssetAttr- Pending Share Count-160', + 'zAddAssetAttr- Share Count-161', + 'zAddAssetAttr-Allowed for Analysis-162', + 'zAddAssetAttr-Scene Analysis Version-163', + 'zAddAssetAttr-Scene Analysis is From Preview-164', + ('zAddAssetAttr-Scene Analysis Timestamp-165', 'datetime'), + 'zAsset-Duplication Asset Visibility State-166', + 'zAddAssetAttr-Destination Asset Copy State-167', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-168', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-169', + 'zCldMast-Source Master For Duplication Scope ID-170', + 'zAddAssetAttr-Source Asset For Duplication ID-171', + 'zCldMast-Source Master for Duplication ID-172', + 'zAddAssetAttr-Variation Suggestions States-173', + 'zAsset-High Frame Rate State-174', + 'zAsset-Video Key Frame Time Scale-175', + 'zAsset-Video Key Frame Value-176', + 'zExtAttr-ISO-177', + 'zExtAttr-Metering Mode-178', + 'zExtAttr-Sample Rate-179', + 'zExtAttr-Track Format-180', + 'zExtAttr-White Balance-181', + 'zExtAttr-Aperture-182', + 'zExtAttr-BitRate-183', + 'zExtAttr-Exposure Bias-184', + 'zExtAttr-Frames Per Second-185', + 'zExtAttr-Shutter Speed-186', + 'zExtAttr-Slush Scene Bias-187', + 'zExtAttr-Slush Version-188', + 'zExtAttr-Slush Preset-189', + 'zExtAttr-Slush Warm Bias-190', + 'zAsset-Height-191', + 'zAddAssetAttr-Original Height-192', + 'zIntResou-UnOriented Height-193', + 'zAsset-Width-194', + 'zAddAssetAttr-Original Width-195', + 'zIntResou-UnOriented Width-196', + 'zAsset-Thumbnail Index-197', + 'zAddAssetAttr-Embedded Thumbnail Height-198', + 'zAddAssetAttr-Embedded Thumbnail Length-199', + 'zAddAssetAttr-Embedded Thumbnail Offset-200', + 'zAddAssetAttr-Embedded Thumbnail Width-201', + 'zAsset-Packed Acceptable Crop Rect-202', + 'zAsset-Packed Badge Attributes-203', + 'zAsset-Packed Preferred Crop Rect-204', + 'zAsset-Curation Score-205', + 'zAsset-Camera Processing Adjustment State-206', + 'zAsset-Depth Type-207', + 'zAsset-Is Magic Carpet-Quicktime_MOV_file-208', + 'zAddAssetAttr-Orig Resource Choice-209', + 'zAddAssetAttr-Spatial Over Capture Group ID-210', + 'zAddAssetAttr-Place Annotation Data-211', + 'zAddAssetAttr-Distance Identity-HEX-212', + 'zAddAssetAttr-Edited IPTC Attributes-213', + 'zAddAssetAttr-Title-Comments via Cloud Website-214', + 'zAddAssetAttr-Accessibility Description-215', + 'zAddAssetAttr-Photo Stream Tag ID-216', + 'zAddAssetAttr-Share Type-217', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-218', + 'zAsset-Overall Aesthetic Score-219', + 'zAsset-zENT-220', + 'zAsset-zOPT-221', + 'zAsset-Master= zCldMast-zPK-222', + 'zAsset-Extended Attributes= zExtAttr-zPK-223', + 'zAsset-Import Session Key-224', + 'zAsset-Photo Analysis Attributes Key-225', + 'zAsset-FOK-Cloud Feed Asset Entry Key-226', + 'zAsset-Computed Attributes Asset Key-227', + 'zAsset-Promotion Score-228', + 'zAsset-Media Analysis Attributes Key-229', + 'zAsset-Media Group UUID-230', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-231', + 'zAsset.Cloud Collection GUID-232', + 'zAddAssetAttr-zENT-233', + 'ZAddAssetAttr-zOPT-234', + 'zAddAssetAttr-zAsset= zAsset_zPK-235', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-236', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-237', + 'zAddAssetAttr-Public Global UUID-238', + 'zAddAssetAttr-Original Assets UUID-239', + 'zAddAssetAttr-Originating Asset Identifier-240', + 'zAddAssetAttr.Adjusted Fingerprint-241', + 'zCldMast-zPK= zAsset-Master-242', + 'zCldMast-zENT-243', + 'zCldMast-zOPT-244', + 'zCldMast-Moment Share Key= zShare-zPK-245', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-246', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-247', + 'zCldMast-Originating Asset ID-248', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-249', + 'CMzCldMastMedData-zENT-250', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-251', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-252', + 'AAAzCldMastMedData-zENT-253', + 'AAAzCldMastMedData-CldMast key-254', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-255', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-256', + 'zExtAttr-zENT-257', + 'zExtAttr-zOPT-258', + 'zExtAttr-Asset Key-259', + 'zIntResou-zPK-260', + 'zIntResou-zENT-261', + 'zIntResou-zOPT-262', + 'zIntResou-Asset= zAsset_zPK-263', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-264', + 'zMedAnlyAstAttr-zEnt-265', + 'zMedAnlyAstAttr-zOpt-266', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-267') + data_list = get_sqlite_db_records(source_path, query) - description = 'Parses iOS 16 possible optimized asset records from PhotoData-Photos.sqlite' \ - ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide data' \ - ' for investigative analysis of assets being stored locally on the device verses' \ - ' assets being stored in iCloud Photos as the result of optimization.' \ - ' This is very large query and script, I recommend opening the TSV generated report' \ - ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \ - ' to view, search, and filter the results.' - report = ArtifactHtmlReport('Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-4QueryStart-0', - 'zAsset-zPK-7', - 'zAddAssetAttr-zPK-8', - 'zAsset-UUID = store.cloudphotodb-9', - 'zAddAssetAttr-Master Fingerprint-10', - 'zIntResou-Fingerprint-11', - 'zIntResou-Local Availability-4QueryStart-1', - 'zIntResou-Remote Availability-4QueryStart-2', - 'zIntResou-Resource Type-4QueryStart-3', - 'zIntResou-Datastore Sub-Type-4QueryStart-4', - 'zIntResou-Recipe ID-4QueryStart-5', - 'zAsset Complete-6', - 'zAsset-Bundle Scope-12', - 'zAsset-Syndication State-13', - 'zAsset-Cloud is My Asset-14', - 'zAsset-Cloud is deletable-Asset-15', - 'zAsset-Cloud_Local_State-16', - 'zAsset-Visibility State-17', - 'zExtAttr-Camera Make-18', - 'zExtAttr-Camera Model-19', - 'zExtAttr-Lens Model-20', - 'zExtAttr-Flash Fired-21', - 'zExtAttr-Focal Length-22', - 'zExtAttr-Focal Length in 35MM-23', - 'zExtAttr-Digital Zoom Ratio-24', - 'zAsset-Derived Camera Capture Device-25', - 'zAddAssetAttr-Camera Captured Device-26', - 'zAddAssetAttr-Imported by-27', - 'zCldMast-Imported By-28', - 'zAddAssetAttr.Imported by Bundle Identifier-29', - 'zAddAssetAttr-Imported By Display Name-30', - 'zCldMast-Imported by Bundle ID-31', - 'zCldMast-Imported by Display Name-32', - 'zAsset-Saved Asset Type-33', - 'zAsset-Directory-Path-34', - 'zAsset-Filename-35', - 'zAddAssetAttr- Original Filename-36', - 'zCldMast- Original Filename-37', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-38', - 'zAsset-Active Library Scope Participation State-39', - 'zAsset-Library Scope Share State- StillTesting-40', - 'zAsset-Added Date-41', - 'zAsset- SortToken -CameraRoll-42', - 'zAddAssetAttr-Date Created Source-43', - 'zAsset-Date Created-44', - 'zCldMast-Creation Date-45', - 'zIntResou-CldMst Date Created-46', - 'zAddAssetAttr-Time Zone Name-47', - 'zAddAssetAttr-Time Zone Offset-48', - 'zAddAssetAttr-Inferred Time Zone Offset-49', - 'zAddAssetAttr-EXIF-String-50', - 'zAsset-Modification Date-51', - 'zAsset-Last Shared Date-52', - 'zCldMast-Cloud Local State-53', - 'zCldMast-Import Date-54', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-55', - 'zAddAssetAttr-Import Session ID-56', - 'zAddAssetAttr-Alt Import Image Date-57', - 'zCldMast-Import Session ID- AirDrop-StillTesting-58', - 'zAsset-Cloud Batch Publish Date-59', - 'zAsset-Cloud Server Publish Date-60', - 'zAsset-Cloud Download Requests-61', - 'zAsset-Cloud Batch ID-62', - 'zAddAssetAttr-Upload Attempts-63', - 'zAsset-Latitude-64', - 'zExtAttr-Latitude-65', - 'zAsset-Longitude-66', - 'zExtAttr-Longitude-67', - 'zAddAssetAttr-GPS Horizontal Accuracy-68', - 'zAddAssetAttr-Location Hash-69', - 'zAddAssetAttr-Reverse Location Is Valid-70', - 'zAddAssetAttr-Shifted Location Valid-71', - 'AAAzCldMastMedData-zOPT-72', - 'zAddAssetAttr-Media Metadata Type-73', - 'CldMasterzCldMastMedData-zOPT-74', - 'zCldMast-Media Metadata Type-75', - 'zAsset-Search Index Rebuild State-76', - 'zAddAssetAttr-Syndication History-77', - 'zMedAnlyAstAttr-Syndication Processing Version-78', - 'zMedAnlyAstAttr-Syndication Processing Value-79', - 'zAsset-Orientation-80', - 'zAddAssetAttr-Original Orientation-81', - 'zAsset-Kind-82', - 'zAsset-Kind-Sub-Type-83', - 'zAddAssetAttr-Cloud Kind Sub Type-84', - 'zAsset-Playback Style-85', - 'zAsset-Playback Variation-86', - 'zAsset-Video Duration-87', - 'zExtAttr-Duration-88', - 'zAsset-Video CP Duration-89', - 'zAddAssetAttr-Video CP Duration Time Scale-90', - 'zAsset-Video CP Visibility State-91', - 'zAddAssetAttr-Video CP Display Value-92', - 'zAddAssetAttr-Video CP Display Time Scale-93', - 'zIntResou-Datastore Class ID-94', - 'zAsset-Cloud Placeholder Kind-95', - 'zIntResou-Local Availability-96', - 'zIntResou-Local Availability Target-97', - 'zIntResou-Cloud Local State-98', - 'zIntResou-Remote Availability-99', - 'zIntResou-Remote Availability Target-100', - 'zIntResou-Transient Cloud Master-101', - 'zIntResou-Side Car Index-102', - 'zIntResou- File ID-103', - 'zIntResou-Version-104', - 'zAddAssetAttr- Original-File-Size-105', - 'zIntResou-Resource Type-106', - 'zIntResou-Datastore Sub-Type-107', - 'zIntResou-Cloud Source Type-108', - 'zIntResou-Data Length-109', - 'zIntResou-Recipe ID-110', - 'zIntResou-Cloud Last Prefetch Date-111', - 'zIntResou-Cloud Prefetch Count-112', - 'zIntResou- Cloud-Last-OnDemand Download-Date-113', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-114', - 'zIntResou-Compact-UTI-115', - 'zAsset-Uniform Type ID-116', - 'zAsset-Original Color Space-117', - 'zCldMast-Uniform_Type_ID-118', - 'zCldMast-Full Size JPEG Source-119', - 'zAsset-HDR Gain-120', - 'zAsset-zHDR_Type-121', - 'zExtAttr-Codec-122', - 'zIntResou-Codec Four Char Code Name-123', - 'zCldMast-Codec Name-124', - 'zCldMast-Video Frame Rate-125', - 'zCldMast-Placeholder State-126', - 'zAsset-Depth_Type-127', - 'zAsset-Avalanche UUID-128', - 'zAsset-Avalanche_Pick_Type-BurstAsset-129', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-130', - 'zAddAssetAttr-Cloud Recovery State-131', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-132', - 'zAsset-Deferred Processing Needed-133', - 'zAsset-Video Deferred Processing Needed-134', - 'zAddAssetAttr-Deferred Photo Identifier-135', - 'zAddAssetAttr-Deferred Processing Candidate Options-136', - 'zAsset-Has Adjustments-Camera-Effects-Filters-137', - 'zAsset-Adjustment Timestamp-138', - 'zAddAssetAttr-Editor Bundle ID-139', - 'zAddAssetAttr-Montage-140', - 'zAsset-Favorite-141', - 'zAsset-Hidden-142', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-143', - 'zAsset-Trashed Date-144', - 'zAsset-Trashed by Participant= zSharePartic_zPK-145', - 'zAsset-Delete-Reason-146', - 'zIntResou-Trash State-147', - 'zIntResou-Trashed Date-148', - 'zAsset-Cloud Delete State-149', - 'zIntResou-Cloud Delete State-150', - 'zAddAssetAttr-PTP Trashed State-151', - 'zIntResou-PTP Trashed State-152', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-153', - 'zMedAnlyAstAttr-Media Analysis Timestamp-154', - 'zAsset-Analysis State Modification Date-155', - 'zAddAssetAttr- Pending View Count-156', - 'zAddAssetAttr- View Count-157', - 'zAddAssetAttr- Pending Play Count-158', - 'zAddAssetAttr- Play Count-159', - 'zAddAssetAttr- Pending Share Count-160', - 'zAddAssetAttr- Share Count-161', - 'zAddAssetAttr-Allowed for Analysis-162', - 'zAddAssetAttr-Scene Analysis Version-163', - 'zAddAssetAttr-Scene Analysis is From Preview-164', - 'zAddAssetAttr-Scene Analysis Timestamp-165', - 'zAsset-Duplication Asset Visibility State-166', - 'zAddAssetAttr-Destination Asset Copy State-167', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-168', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-169', - 'zCldMast-Source Master For Duplication Scope ID-170', - 'zAddAssetAttr-Source Asset For Duplication ID-171', - 'zCldMast-Source Master for Duplication ID-172', - 'zAddAssetAttr-Variation Suggestions States-173', - 'zAsset-High Frame Rate State-174', - 'zAsset-Video Key Frame Time Scale-175', - 'zAsset-Video Key Frame Value-176', - 'zExtAttr-ISO-177', - 'zExtAttr-Metering Mode-178', - 'zExtAttr-Sample Rate-179', - 'zExtAttr-Track Format-180', - 'zExtAttr-White Balance-181', - 'zExtAttr-Aperture-182', - 'zExtAttr-BitRate-183', - 'zExtAttr-Exposure Bias-184', - 'zExtAttr-Frames Per Second-185', - 'zExtAttr-Shutter Speed-186', - 'zExtAttr-Slush Scene Bias-187', - 'zExtAttr-Slush Version-188', - 'zExtAttr-Slush Preset-189', - 'zExtAttr-Slush Warm Bias-190', - 'zAsset-Height-191', - 'zAddAssetAttr-Original Height-192', - 'zIntResou-UnOriented Height-193', - 'zAsset-Width-194', - 'zAddAssetAttr-Original Width-195', - 'zIntResou-UnOriented Width-196', - 'zAsset-Thumbnail Index-197', - 'zAddAssetAttr-Embedded Thumbnail Height-198', - 'zAddAssetAttr-Embedded Thumbnail Length-199', - 'zAddAssetAttr-Embedded Thumbnail Offset-200', - 'zAddAssetAttr-Embedded Thumbnail Width-201', - 'zAsset-Packed Acceptable Crop Rect-202', - 'zAsset-Packed Badge Attributes-203', - 'zAsset-Packed Preferred Crop Rect-204', - 'zAsset-Curation Score-205', - 'zAsset-Camera Processing Adjustment State-206', - 'zAsset-Depth Type-207', - 'zAsset-Is Magic Carpet-Quicktime_MOV_file-208', - 'zAddAssetAttr-Orig Resource Choice-209', - 'zAddAssetAttr-Spatial Over Capture Group ID-210', - 'zAddAssetAttr-Place Annotation Data-211', - 'zAddAssetAttr-Distance Identity-HEX-212', - 'zAddAssetAttr-Edited IPTC Attributes-213', - 'zAddAssetAttr-Title-Comments via Cloud Website-214', - 'zAddAssetAttr-Accessibility Description-215', - 'zAddAssetAttr-Photo Stream Tag ID-216', - 'zAddAssetAttr-Share Type-217', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-218', - 'zAsset-Overall Aesthetic Score-219', - 'zAsset-zENT-220', - 'zAsset-zOPT-221', - 'zAsset-Master= zCldMast-zPK-222', - 'zAsset-Extended Attributes= zExtAttr-zPK-223', - 'zAsset-Import Session Key-224', - 'zAsset-Photo Analysis Attributes Key-225', - 'zAsset-FOK-Cloud Feed Asset Entry Key-226', - 'zAsset-Computed Attributes Asset Key-227', - 'zAsset-Promotion Score-228', - 'zAsset-Media Analysis Attributes Key-229', - 'zAsset-Media Group UUID-230', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-231', - 'zAsset.Cloud Collection GUID-232', - 'zAddAssetAttr-zENT-233', - 'ZAddAssetAttr-zOPT-234', - 'zAddAssetAttr-zAsset= zAsset_zPK-235', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-236', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-237', - 'zAddAssetAttr-Public Global UUID-238', - 'zAddAssetAttr-Original Assets UUID-239', - 'zAddAssetAttr-Originating Asset Identifier-240', - 'zAddAssetAttr.Adjusted Fingerprint-241', - 'zCldMast-zPK= zAsset-Master-242', - 'zCldMast-zENT-243', - 'zCldMast-zOPT-244', - 'zCldMast-Moment Share Key= zShare-zPK-245', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-246', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-247', - 'zCldMast-Originating Asset ID-248', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-249', - 'CMzCldMastMedData-zENT-250', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-251', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-252', - 'AAAzCldMastMedData-zENT-253', - 'AAAzCldMastMedData-CldMast key-254', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-255', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-256', - 'zExtAttr-zENT-257', - 'zExtAttr-zOPT-258', - 'zExtAttr-Asset Key-259', - 'zIntResou-zPK-260', - 'zIntResou-zENT-261', - 'zIntResou-zOPT-262', - 'zIntResou-Asset= zAsset_zPK-263', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-264', - 'zMedAnlyAstAttr-zEnt-265', - 'zMedAnlyAstAttr-zOpt-266', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-267') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No Internal Resource data available for iOS 16 PhotoData-Photos.sqlite') - - db.close() - return + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', - zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint', - zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint', - CASE zIntResou.ZLOCALAVAILABILITY - WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' - WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' - WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' - END AS 'zIntResou-Local Availability-4QueryStart', - CASE zIntResou.ZREMOTEAVAILABILITY - WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' - WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' - END AS 'zIntResou-Remote Availability-4QueryStart', - CASE zIntResou.ZRESOURCETYPE - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 5 THEN '5-Adjustment-Data-5' - WHEN 6 THEN '6-Screenshot-6' - WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' - WHEN 13 THEN '13-Movie-13' - WHEN 14 THEN '14-Wallpaper-14' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' - END AS 'zIntResou-Resource Type-4QueryStart', - CASE zIntResou.ZDATASTORESUBTYPE - WHEN 0 THEN '0-No Cloud Inter Resource-0' - WHEN 1 THEN '1-Main-Asset-Orig-Size-1' - WHEN 2 THEN '2-Photo-with-Adjustments-2' - WHEN 3 THEN '3-JPG-Large-Thumb-3' - WHEN 4 THEN '4-JPG-Med-Thumb-4' - WHEN 5 THEN '5-JPG-Small-Thumb-5' - WHEN 6 THEN '6-Video-Med-Data-6' - WHEN 7 THEN '7-Video-Small-Data-7' - WHEN 8 THEN '8-MP4-Cloud-Share-8' - WHEN 9 THEN '9-StillTesting' - WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' - WHEN 11 THEN '11-StillTesting' - WHEN 12 THEN '12-StillTesting' - WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' - WHEN 14 THEN '14-Wallpaper-14' - WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' - WHEN 16 THEN '16-Video-with-Adjustments-16' - WHEN 17 THEN '17-RAW_Photo-17_RT' - WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' - WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' - WHEN 20 THEN '20-StillTesting' - WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' - WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' - WHEN 23 THEN '23-StillTesting' - WHEN 24 THEN '24-StillTesting' - WHEN 25 THEN '25-StillTesting' - WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' - WHEN 27 THEN '27-StillTesting' - WHEN 28 THEN '28-MOV-Med-hdr-Data-28' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' - END AS 'zIntResou-Datastore Sub-Type-4QueryStart', - CASE zIntResou.ZRECIPEID - WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' - WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' - WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' - WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' - WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' - WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' - WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' - WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' - WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' - WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' - WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' - WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' - WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' - WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' - WHEN 131475 THEN '131475-medium-hdr-MOV-131475' - WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' - WHEN 327687 THEN '627687-WallpaperComputeResource-627687' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' - END AS 'zIntResou-Recipe ID-4QueryStart', - CASE zAsset.ZCOMPLETE - WHEN 1 THEN '1-Yes-1' - END AS 'zAsset Complete', - CASE zAsset.ZBUNDLESCOPE - WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' - WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' - WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' - WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' - ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' - END AS 'zAsset-Bundle Scope', - CASE zAsset.ZSYNDICATIONSTATE - WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' - WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' - WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' - WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' - WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' - WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' - WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' - END AS 'zAsset-Syndication State', - CASE zAsset.ZCLOUDISMYASSET - WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0' - WHEN 1 THEN '1-My_Asset_in_Shared_Album-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || '' - END AS 'zAsset-Cloud is My Asset', - CASE zAsset.ZCLOUDISDELETABLE - WHEN 0 THEN '0-No-0' - WHEN 1 THEN '1-Yes-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || '' - END AS 'zAsset-Cloud is deletable-Asset', - CASE zAsset.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0' - WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || '' - END AS 'zAsset-Cloud_Local_State', - CASE zAsset.ZVISIBILITYSTATE - WHEN 0 THEN '0-Visible-PL-CameraRoll-0' - WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' - END AS 'zAsset-Visibility State', - zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', - zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', - zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', - CASE zExtAttr.ZFLASHFIRED - WHEN 0 THEN '0-No Flash-0' - WHEN 1 THEN '1-Flash Fired-1' - ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || '' - END AS 'zExtAttr-Flash Fired', - zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Length', - zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Length in 35MM', - zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', - CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE - WHEN 0 THEN '0-Back-Camera-Other-0' - WHEN 1 THEN '1-Front-Camera-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' - END AS 'zAsset-Derived Camera Capture Device', - CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE - WHEN 0 THEN '0-Back-Camera-Other-0' - WHEN 1 THEN '1-Front-Camera-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' - END AS 'zAddAssetAttr-Camera Captured Device', - CASE zAddAssetAttr.ZIMPORTEDBY - WHEN 0 THEN '0-Cloud-Other-0' - WHEN 1 THEN '1-Native-Back-Camera-1' - WHEN 2 THEN '2-Native-Front-Camera-2' - WHEN 3 THEN '3-Third-Party-App-3' - WHEN 4 THEN '4-StillTesting-4' - WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' - WHEN 6 THEN '6-Third-Party-App-6' - WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' - WHEN 8 THEN '8-System-Package-App-8' - WHEN 9 THEN '9-Native-App-9' - WHEN 10 THEN '10-StillTesting-10' - WHEN 11 THEN '11-StillTesting-11' - WHEN 12 THEN '12-SWY_Syndication_PL-12' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' - END AS 'zAddAssetAttr-Imported by', - CASE zCldMast.ZIMPORTEDBY - WHEN 0 THEN '0-Cloud-Other-0' - WHEN 1 THEN '1-Native-Back-Camera-1' - WHEN 2 THEN '2-Native-Front-Camera-2' - WHEN 3 THEN '3-Third-Party-App-3' - WHEN 4 THEN '4-StillTesting-4' - WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' - WHEN 6 THEN '6-Third-Party-App-6' - WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' - WHEN 8 THEN '8-System-Package-App-8' - WHEN 9 THEN '9-Native-App-9' - WHEN 10 THEN '10-StillTesting-10' - WHEN 11 THEN '11-StillTesting-11' - WHEN 12 THEN '12-SWY_Syndication_PL-12' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' - END AS 'zCldMast-Imported By', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', - zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', - zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', - CASE zAsset.ZSAVEDASSETTYPE - WHEN 0 THEN '0-Saved-via-other-source-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' - WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' - WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' - WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' - WHEN 7 THEN '7-StillTesting-7' - WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' - WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE - WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' - WHEN 1 THEN '1-Asset-In-Active-SPL-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' - END AS 'zAsset-Active Library Scope Participation State', - CASE zAsset.ZLIBRARYSCOPESHARESTATE - WHEN 0 THEN '0-Asset-Not-In-SPL-0' - ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' - END AS 'zAsset-Library Scope Share State- StillTesting', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created', - zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', - zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', - zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - CASE zCldMast.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-Not Synced with Cloud-0' - WHEN 1 THEN '1-Pending Upload-1' - WHEN 2 THEN '2-StillTesting' - WHEN 3 THEN '3-Synced with Cloud-3' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' - END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', - zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', - zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', - zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts', - CASE zAsset.ZLATITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLATITUDE - END AS 'zAsset-Latitude', - zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', - CASE zAsset.ZLONGITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLONGITUDE - END AS 'zAsset-Longitude', - zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', - CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY - WHEN -1.0 THEN '-1.0' - ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY - END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data', - CASE AAAzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Cloud-1' - WHEN 2 THEN '2-StillTesting-This Device-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' - END AS 'AAAzCldMastMedData-zOPT', - zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data', - CASE zAsset.ZSEARCHINDEXREBUILDSTATE - WHEN 0 THEN '0-StillTesting-0' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || '' - END AS 'zAsset-Search Index Rebuild State', - zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History', - zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version', - CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE - WHEN 0 THEN '0-NA-0' - WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1' - WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2' - WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4' - WHEN 16 THEN '16-STILLTESTING-16' - WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024' - WHEN 2048 THEN '2048-STILLTESTING-2048' - WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096' - ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || '' - END AS 'zMedAnlyAstAttr-Syndication Processing Value', - CASE zAsset.ZORIENTATION - WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' - WHEN 2 THEN '2-Horizontal-Camera-(right)-2' - WHEN 3 THEN '3-Horizontal-Camera-(right)-3' - WHEN 4 THEN '4-Horizontal-Camera-(left)-4' - WHEN 5 THEN '5-Vertical-Camera-(top)-5' - WHEN 6 THEN '6-Vertical-Camera-(top)-6' - WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' - WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' - ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' - END AS 'zAsset-Orientation', - CASE zAddAssetAttr.ZORIGINALORIENTATION - WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' - WHEN 2 THEN '2-Horizontal-Camera-(right)-2' - WHEN 3 THEN '3-Horizontal-Camera-(right)-3' - WHEN 4 THEN '4-Horizontal-Camera-(left)-4' - WHEN 5 THEN '5-Vertical-Camera-(top)-5' - WHEN 6 THEN '6-Vertical-Camera-(top)-6' - WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' - WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' - ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' - END AS 'zAddAssetAttr-Original Orientation', - CASE zAsset.ZKIND - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - END AS 'zAsset-Kind', - CASE zAsset.ZKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Panorama-1' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' - END AS 'zAsset-Kind-Sub-Type', - CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-StillTesting' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 3 THEN '3-Screenshot-3' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' - END AS 'zAddAssetAttr-Cloud Kind Sub Type', - CASE zAsset.ZPLAYBACKSTYLE - WHEN 1 THEN '1-Image-1' - WHEN 2 THEN '2-Image-Animated-2' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 4 THEN '4-Video-4' - WHEN 5 THEN '5-Video-Looping-5' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' - END AS 'zAsset-Playback Style', - CASE zAsset.ZPLAYBACKVARIATION - WHEN 0 THEN '0-No_Playback_Variation-0' - WHEN 1 THEN '1-StillTesting_Playback_Variation-1' - WHEN 2 THEN '2-StillTesting_Playback_Variation-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' - END AS 'zAsset-Playback Variation', - zAsset.ZDURATION AS 'zAsset-Video Duration', - zExtAttr.ZDURATION AS 'zExtAttr-Duration', - zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration', - zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale', - zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State', - zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value', - zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale', - CASE zIntResou.ZDATASTORECLASSID - WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2' - WHEN 3 THEN '3-SWY_Syndication_Asset-3' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || '' - END AS 'zIntResou-Datastore Class ID', - CASE zAsset.ZCLOUDPLACEHOLDERKIND - WHEN 0 THEN '0-Local&CloudMaster Asset-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-JPG-Asset_Only_PhDa-Thumb-V2-3' - WHEN 4 THEN '4-LPL-JPG-Asset_CPLAsset-OtherType-4' - WHEN 5 THEN '5-Asset_synced_CPL_2_Device-5' - WHEN 6 THEN '6-StillTesting-6' - WHEN 7 THEN '7-LPL-poster-JPG-Asset_CPLAsset-MP4-7' - WHEN 8 THEN '8-LPL-JPG_Asset_CPLAsset-LivePhoto-MOV-8' - WHEN 9 THEN '9-CPL_MP4_Asset_Saved_2_LPL-9' - ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDPLACEHOLDERKIND || '' - END AS 'zAsset-Cloud Placeholder Kind', - CASE zIntResou.ZLOCALAVAILABILITY - WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' - WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' - WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' - END AS 'zIntResou-Local Availability', - CASE zIntResou.ZLOCALAVAILABILITYTARGET - WHEN 0 THEN '0-StillTesting-0' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || '' - END AS 'zIntResou-Local Availability Target', - CASE zIntResou.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0' - WHEN 1 THEN '1-IR_Asset_Pending-Upload-1' - WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2' - WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || '' - END AS 'zIntResou-Cloud Local State', - CASE zIntResou.ZREMOTEAVAILABILITY - WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' - WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' - END AS 'zIntResou-Remote Availability', - CASE zIntResou.ZREMOTEAVAILABILITYTARGET - WHEN 0 THEN '0-StillTesting-0' - WHEN 1 THEN '1-StillTesting-1' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || '' - END AS 'zIntResou-Remote Availability Target', - zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master', - zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index', - zIntResou.ZFILEID AS 'zIntResou- File ID', - CASE zIntResou.ZVERSION - WHEN 0 THEN '0-IR_Asset_Standard-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2' - WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || '' - END AS 'zIntResou-Version', - zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size', - CASE zIntResou.ZRESOURCETYPE - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 5 THEN '5-Adjustment-Data-5' - WHEN 6 THEN '6-Screenshot-6' - WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' - WHEN 13 THEN '13-Movie-13' - WHEN 14 THEN '14-Wallpaper-14' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' - END AS 'zIntResou-Resource Type', - CASE zIntResou.ZDATASTORESUBTYPE - WHEN 0 THEN '0-No Cloud Inter Resource-0' - WHEN 1 THEN '1-Main-Asset-Orig-Size-1' - WHEN 2 THEN '2-Photo-with-Adjustments-2' - WHEN 3 THEN '3-JPG-Large-Thumb-3' - WHEN 4 THEN '4-JPG-Med-Thumb-4' - WHEN 5 THEN '5-JPG-Small-Thumb-5' - WHEN 6 THEN '6-Video-Med-Data-6' - WHEN 7 THEN '7-Video-Small-Data-7' - WHEN 8 THEN '8-MP4-Cloud-Share-8' - WHEN 9 THEN '9-StillTesting' - WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' - WHEN 11 THEN '11-StillTesting' - WHEN 12 THEN '12-StillTesting' - WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' - WHEN 14 THEN '14-Wallpaper-14' - WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' - WHEN 16 THEN '16-Video-with-Adjustments-16' - WHEN 17 THEN '17-RAW_Photo-17_RT' - WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' - WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' - WHEN 20 THEN '20-StillTesting' - WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' - WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' - WHEN 23 THEN '23-StillTesting' - WHEN 24 THEN '24-StillTesting' - WHEN 25 THEN '25-StillTesting' - WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' - WHEN 27 THEN '27-StillTesting' - WHEN 28 THEN '28-MOV-Med-hdr-Data-28' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' - END AS 'zIntResou-Datastore Sub-Type', - CASE zIntResou.ZCLOUDSOURCETYPE - WHEN 0 THEN '0-NA-0' - WHEN 1 THEN '1-Main-Asset-Orig-Size-1' - WHEN 2 THEN '2-Photo-with-Adjustments-2' - WHEN 3 THEN '3-JPG-Large-Thumb-3' - WHEN 4 THEN '4-JPG-Med-Thumb-4' - WHEN 5 THEN '5-JPG-Small-Thumb-5' - WHEN 6 THEN '6-Video-Med-Data-6' - WHEN 7 THEN '7-Video-Small-Data-7' - WHEN 8 THEN '8-MP4-Cloud-Share-8' - WHEN 9 THEN '9-StillTesting' - WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' - WHEN 11 THEN '11-StillTesting' - WHEN 12 THEN '12-StillTesting' - WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' - WHEN 14 THEN '14-Wallpaper-14' - WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' - WHEN 16 THEN '16-Video-with-Adjustments-16' - WHEN 17 THEN '17-RAW_Photo-17_RT' - WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' - WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' - WHEN 20 THEN '20-StillTesting' - WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' - WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' - WHEN 23 THEN '23-StillTesting' - WHEN 24 THEN '24-StillTesting' - WHEN 25 THEN '25-StillTesting' - WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' - WHEN 27 THEN '27-StillTesting' - WHEN 28 THEN '28-MOV-Med-hdr-Data-28' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || '' - END AS 'zIntResou-Cloud Source Type', - zIntResou.ZDATALENGTH AS 'zIntResou-Data Length', - CASE zIntResou.ZRECIPEID - WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' - WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' - WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' - WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' - WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' - WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' - WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' - WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' - WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' - WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' - WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' - WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' - WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' - WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' - WHEN 131475 THEN '131475-medium-hdr-MOV-131475' - WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' - WHEN 327687 THEN '627687-WallpaperComputeResource-627687' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' - END AS 'zIntResou-Recipe ID', - CASE zIntResou.ZCLOUDLASTPREFETCHDATE - WHEN 0 THEN '0-NA-0' - ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH') - END AS 'zIntResou-Cloud Last Prefetch Date', - zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count', - DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date', - CASE zIntResou.ZUTICONFORMANCEHINT - WHEN 0 THEN '0-NA-Doesnt_Conform-0' - WHEN 1 THEN '1-UTTypeImage-1' - WHEN 2 THEN '2-UTTypeProRawPhoto-2' - WHEN 3 THEN '3-UTTypeMovie-3' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || '' - END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint', - CASE zIntResou.ZCOMPACTUTI - WHEN 1 THEN '1-JPEG-THM-1' - WHEN 3 THEN '3-HEIC-3' - WHEN 6 THEN '6-PNG-6' - WHEN 7 THEN '7-StillTesting' - WHEN 9 THEN '9-DNG-9' - WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23' - WHEN 24 THEN '24-MPEG4-24' - WHEN 36 THEN '36-Wallpaper-36' - WHEN 37 THEN '37-Adj-Mutation_Data-37' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || '' - END AS 'zIntResou-Compact-UTI', - zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID', - zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space', - zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID', - CASE zCldMast.ZFULLSIZEJPEGSOURCE - WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0' - WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || '' - END AS 'zCldMast-Full Size JPEG Source', - zAsset.ZHDRGAIN AS 'zAsset-HDR Gain', - CASE zAsset.ZHDRTYPE - WHEN 0 THEN '0-No-HDR-0' - WHEN 3 THEN '3-HDR_Photo-3_RT' - WHEN 4 THEN '4-Non-HDR_Version-4_RT' - WHEN 5 THEN '5-HEVC_Movie-5' - WHEN 6 THEN '6-Panorama-6_RT' - WHEN 10 THEN '10-HDR-Gain-10' - ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || '' - END AS 'zAsset-zHDR_Type', - zExtAttr.ZCODEC AS 'zExtAttr-Codec', - zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name', - zCldMast.ZCODECNAME AS 'zCldMast-Codec Name', - zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate', - zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State', - CASE zAsset.ZDEPTHTYPE - WHEN 0 THEN '0-Not_Portrait-0_RT' - ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || '' - END AS 'zAsset-Depth_Type', - zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID', - CASE zAsset.ZAVALANCHEPICKTYPE - WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' - WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' - WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' - WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' - WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' - WHEN 32 THEN '32-StillTesting-32_RT' - WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' - ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || '' - END AS 'zAsset-Avalanche_Pick_Type-BurstAsset', - CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE - WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' - WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' - WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' - WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' - WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' - WHEN 32 THEN '32-StillTesting-32_RT' - WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || '' - END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset', - CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE - WHEN 0 THEN '0-StillTesting' - WHEN 1 THEN '1-StillTesting' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || '' - END AS 'zAddAssetAttr-Cloud Recovery State', - zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count', - zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed', - zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed', - zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', - zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', - CASE zAsset.ZHASADJUSTMENTS - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 1 THEN '1-Yes-Adjustments-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || '' - END AS 'zAsset-Has Adjustments-Camera-Effects-Filters', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', - zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage', - CASE zAsset.ZFAVORITE - WHEN 0 THEN '0-Asset Not Favorite-0' - WHEN 1 THEN '1-Asset Favorite-1' - END AS 'zAsset-Favorite', - CASE zAsset.ZHIDDEN - WHEN 0 THEN '0-Asset Not Hidden-0' - WHEN 1 THEN '1-Asset Hidden-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || '' - END AS 'zAsset-Hidden', - CASE zAsset.ZTRASHEDSTATE - WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' - WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' - END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', - DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', - zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK', - CASE zAsset.ZDELETEREASON - WHEN 1 THEN '1-StillTesting Delete-Reason-1' - WHEN 2 THEN '2-StillTesting Delete-Reason-2' - WHEN 3 THEN '3-StillTesting Delete-Reason-3' - ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || '' - END AS 'zAsset-Delete-Reason', - CASE zIntResou.ZTRASHEDSTATE - WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0' - WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || '' - END AS 'zIntResou-Trash State', - DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date', - CASE zAsset.ZCLOUDDELETESTATE - WHEN 0 THEN '0-Cloud Asset Not Deleted-0' - WHEN 1 THEN '1-Cloud Asset Deleted-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || '' - END AS 'zAsset-Cloud Delete State', - CASE zIntResou.ZCLOUDDELETESTATE - WHEN 0 THEN '0-Cloud IntResou Not Deleted-0' - WHEN 1 THEN '1-Cloud IntResou Deleted-1' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || '' - END AS 'zIntResou-Cloud Delete State', - CASE zAddAssetAttr.ZPTPTRASHEDSTATE - WHEN 0 THEN '0-PTP Not in Trash-0' - WHEN 1 THEN '1-PTP In Trash-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || '' - END AS 'zAddAssetAttr-PTP Trashed State', - CASE zIntResou.ZPTPTRASHEDSTATE - WHEN 0 THEN '0-PTP IntResou Not in Trash-0' - WHEN 1 THEN '1-PTP IntResou In Trash-1' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || '' - END AS 'zIntResou-PTP Trashed State', - zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date', - zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', - zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', - zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', - zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', - zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count', - zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count', - CASE zAddAssetAttr.ZALLOWEDFORANALYSIS - WHEN 0 THEN '0-Asset Not Allowed For Analysis-0' - WHEN 1 THEN '1-Asset Allowed for Analysis-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || '' - END AS 'zAddAssetAttr-Allowed for Analysis', - zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version', - CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW - WHEN 0 THEN '0-No-0' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || '' - END AS 'zAddAssetAttr-Scene Analysis is From Preview', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE - WHEN 0 THEN '0-No-Duplicates-0' - WHEN 1 THEN '1-Has Duplicate-1' - WHEN 2 THEN '2-Is a Duplicate-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || '' - END AS 'zAsset-Duplication Asset Visibility State', - CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE - WHEN 0 THEN '0-No Copy-0' - WHEN 1 THEN '1-Has A Copy-1' - WHEN 2 THEN '2-Has A Copy-2' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || '' - END AS 'zAddAssetAttr-Destination Asset Copy State', - CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE - WHEN 0 THEN '0-Unknown-StillTesting-0' - WHEN 1 THEN '1-Unknown-StillTesting-1' - WHEN 2 THEN '2-Unknown-StillTesting-2' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || '' - END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State', - zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID', - zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID', - zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID', - zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID', - zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States', - zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State', - zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale', - zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value', - zExtAttr.ZISO AS 'zExtAttr-ISO', - zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode', - zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate', - zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format', - zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance', - zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture', - zExtAttr.ZBITRATE AS 'zExtAttr-BitRate', - zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias', - zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second', - zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed', - zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias', - zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version', - zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset', - zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias', - zAsset.ZHEIGHT AS 'zAsset-Height', - zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height', - zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height', - zAsset.ZWIDTH AS 'zAsset-Width', - zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width', - zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width', - zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index', - zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height', - zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', - zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', - zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', - zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', - zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', - zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', - zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score', - zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State', - zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type', - zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-Quicktime_MOV-file', - CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE - WHEN 0 THEN '0-JPEG Original Resource-0' - WHEN 1 THEN '1-RAW Original Resource-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || '' - END AS 'zAddAssetAttr-Orig Resource Choice', - CASE zAsset.ZSPATIALTYPE - WHEN 0 THEN '0-UnknownTesting-0' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || '' - END AS 'zAsset-Spatial Type', - zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID', - zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', - zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity-HEX', - zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes', - zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', - zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', - zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID', - CASE zAddAssetAttr.ZSHARETYPE - WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' - WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' - END AS 'zAddAssetAttr-Share Type', - zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update', - zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', - zAsset.Z_ENT AS 'zAsset-zENT', - zAsset.Z_OPT AS 'zAsset-zOPT', - zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', - zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK', - zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key', - zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key', - zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', - zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key', - zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score', - zAsset.ZICONICSCORE AS 'zAsset-Iconic Score', - zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key', - zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID', - zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb', - zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID', - zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT', - zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT', - zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK', - zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID', - zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID', - zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier', - zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint', - zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master', - zCldMast.Z_ENT AS 'zCldMast-zENT', - zCldMast.Z_OPT AS 'zCldMast-zOPT', - zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb', - zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT', - CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT', - AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key', - AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK', - zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes', - zExtAttr.Z_ENT AS 'zExtAttr-zENT', - zExtAttr.Z_OPT AS 'zExtAttr-zOPT', - zExtAttr.ZASSET AS 'zExtAttr-Asset Key', - zIntResou.Z_PK AS 'zIntResou-zPK', - zIntResou.Z_ENT AS 'zIntResou-zENT', - zIntResou.Z_OPT AS 'zIntResou-zOPT', - zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK', - zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata', - zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt', - zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt', - zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK - LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK - WHERE (zIntResou.ZDATASTORESUBTYPE = 1) & (zIntResou.ZLOCALAVAILABILITY = -1) & (zIntResou.ZFINGERPRINT IS NOT NULL) - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274])) - - counter += 1 - - description = 'Parses iOS 17 possible optimized asset records from PhotoData-Photos.sqlite' \ - ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide data' \ - ' for investigative analysis of assets being stored locally on the device verses' \ - ' assets being stored in iCloud Photos as the result of optimization.' \ - ' This is very large query and script, I recommend opening the TSV generated report' \ - ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \ - ' to view, search, and filter the results.' - report = ArtifactHtmlReport('Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-4QueryStart-0', - 'zAsset-zPK-1', - 'zAddAssetAttr-zPK-2', - 'zAsset-UUID = store.cloudphotodb-3', - 'zAddAssetAttr-Master Fingerprint-4', - 'zAddAssetAttr.Adjusted Fingerprint-5', - 'zIntResou-Fingerprint-6', - 'zIntResou-Local Availability-4QueryStart-7', - 'zIntResou-Remote Availability-4QueryStart-8', - 'zIntResou-Resource Type-4QueryStart-9', - 'zIntResou-Datastore Sub-Type-4QueryStart-10', - 'zIntResou-Recipe ID-4QueryStart-11', - 'zAsset Complete-12', - 'zAsset-Bundle Scope-13', - 'zAsset-Syndication State-14', - 'zAsset-Cloud is My Asset-15', - 'zAsset-Cloud is deletable-Asset-16', - 'zAsset-Cloud_Local_State-17', - 'zAsset-Visibility State-18', - 'zExtAttr-Camera Make-19', - 'zExtAttr-Camera Model-20', - 'zExtAttr-Lens Model-21', - 'zExtAttr-Flash Fired-22', - 'zExtAttr-Focal Lenght-23', - 'zExtAttr-Focal Length in 35MM-24', - 'zExtAttr-Digital Zoom Ratio-25', - 'zAsset-Derived Camera Capture Device-26', - 'zAddAssetAttr-Camera Captured Device-27', - 'zAddAssetAttr-Imported by-28', - 'zCldMast-Imported By-29', - 'zAddAssetAttr.Imported by Bundle Identifier-30', - 'zAddAssetAttr-Imported By Display Name-31', - 'zCldMast-Imported by Bundle ID-32', - 'zCldMast-Imported by Display Name-33', - 'zAsset-Saved Asset Type-34', - 'zAsset-Directory-Path-35', - 'zAsset-Filename-36', - 'zAddAssetAttr- Original Filename-37', - 'zCldMast- Original Filename-38', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-39', - 'zAsset-Active Library Scope Participation State-40', - 'zAsset-Library Scope Share State- StillTesting-41', - 'zAsset-Added Date-42', - 'zAsset- SortToken -CameraRoll-43', - 'zAddAssetAttr-Date Created Source-44', - 'zAsset-Date Created-45', - 'zCldMast-Creation Date-46', - 'zIntResou-CldMst Date Created-47', - 'zAddAssetAttr-Time Zone Name-48', - 'zAddAssetAttr-Time Zone Offset-49', - 'zAddAssetAttr-Inferred Time Zone Offset-50', - 'zAddAssetAttr-EXIF-String-51', - 'zAsset-Modification Date-52', - 'zAsset-Last Shared Date-53', - 'zCldMast-Cloud Local State-54', - 'zCldMast-Import Date-55', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-56', - 'zAddAssetAttr-Import Session ID-57', - 'zAddAssetAttr-Alt Import Image Date-58', - 'zCldMast-Import Session ID- AirDrop-StillTesting-59', - 'zAsset-Cloud Batch Publish Date-60', - 'zAsset-Cloud Server Publish Date-61', - 'zAsset-Cloud Download Requests-62', - 'zAsset-Cloud Batch ID-63', - 'zAddAssetAttr-Upload Attempts-64', - 'zAsset-Latitude-65', - 'zExtAttr-Latitude-66', - 'zAsset-Longitude-67', - 'zExtAttr-Longitude-68', - 'zAddAssetAttr-GPS Horizontal Accuracy-69', - 'zAddAssetAttr-Location Hash-70', - 'zAddAssetAttr-Shifted Location Valid-71', - 'zAddAssetAttr-Shifted Location Data-72', - 'zAddAssetAttr-Reverse Location Is Valid-73', - 'zAddAssetAttr-Reverse Location Data-74', - 'AAAzCldMastMedData-zOPT-75', - 'zAddAssetAttr-Media Metadata Type-76', - 'AAAzCldMastMedData-Data-77', - 'CldMasterzCldMastMedData-zOPT-78', - 'zCldMast-Media Metadata Type-79', - 'CMzCldMastMedData-Data-80', - 'zAsset-Search Index Rebuild State-81', - 'zAddAssetAttr-Syndication History-82', - 'zMedAnlyAstAttr-Syndication Processing Version-83', - 'zMedAnlyAstAttr-Syndication Processing Value-84', - 'zAsset-Orientation-85', - 'zAddAssetAttr-Original Orientation-86', - 'zAsset-Kind-87', - 'zAsset-Kind-Sub-Type-88', - 'zAddAssetAttr-Cloud Kind Sub Type-89', - 'zAsset-Playback Style-90', - 'zAsset-Playback Variation-91', - 'zAsset-Video Duration-92', - 'zExtAttr-Duration-93', - 'zAsset-Video CP Duration-94', - 'zAddAssetAttr-Video CP Duration Time Scale-95', - 'zAsset-Video CP Visibility State-96', - 'zAddAssetAttr-Video CP Display Value-97', - 'zAddAssetAttr-Video CP Display Time Scale-98', - 'zIntResou-Datastore Class ID-99', - 'zAsset-Cloud Placeholder Kind-100', - 'zIntResou-Local Availability-101', - 'zIntResou-Local Availability Target-102', - 'zIntResou-Cloud Local State-103', - 'zIntResou-Remote Availability-104', - 'zIntResou-Remote Availability Target-105', - 'zIntResou-Transient Cloud Master-106', - 'zIntResou-Side Car Index-107', - 'zIntResou- File ID-108', - 'zIntResou-Version-109', - 'zAddAssetAttr- Original-File-Size-110', - 'zIntResou-Resource Type-111', - 'zIntResou-Datastore Sub-Type-112', - 'zIntResou-Cloud Source Type-113', - 'zIntResou-Data Length-114', - 'zIntResou-Recipe ID-115', - 'zIntResou-Cloud Last Prefetch Date-116', - 'zIntResou-Cloud Prefetch Count-117', - 'zIntResou- Cloud-Last-OnDemand Download-Date-118', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-119', - 'zIntResou-Compact-UTI-120', - 'zAsset-Uniform Type ID-121', - 'zAsset-Original Color Space-122', - 'zCldMast-Uniform_Type_ID-123', - 'zCldMast-Full Size JPEG Source-124', - 'zAsset-HDR Gain-125', - 'zAsset-zHDR_Type-126', - 'zExtAttr-Codec-127', - 'zIntResou-Codec Four Char Code Name-128', - 'zCldMast-Codec Name-129', - 'zCldMast-Video Frame Rate-130', - 'zCldMast-Placeholder State-131', - 'zAsset-Depth_Type-132', - 'zAsset-Avalanche UUID-133', - 'zAsset-Avalanche_Pick_Type-BurstAsset-134', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-135', - 'zAddAssetAttr-Cloud Recovery State-136', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-137', - 'zAsset-Deferred Processing Needed-138', - 'zAsset-Video Deferred Processing Needed-139', - 'zAddAssetAttr-Deferred Photo Identifier-140', - 'zAddAssetAttr-Deferred Processing Candidate Options-141', - 'zAsset-Has Adjustments-Camera-Effects-Filters-142', - 'zAsset-Adjustment Timestamp-143', - 'zAddAssetAttr-Editor Bundle ID-144', - 'zAddAssetAttr-Montage-145', - 'zAsset-Favorite-146', - 'zAsset-Hidden-147', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-148', - 'zAsset-Trashed Date-149', - 'zAsset-Trashed by Participant= zSharePartic_zPK-150', - 'zAsset-Delete-Reason-151', - 'zIntResou-Trash State-152', - 'zIntResou-Trashed Date-153', - 'zAsset-Cloud Delete State-154', - 'zIntResou-Cloud Delete State-155', - 'zAddAssetAttr-PTP Trashed State-156', - 'zIntResou-PTP Trashed State-157', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-158', - 'zMedAnlyAstAttr-Media Analysis Timestamp-159', - 'zAsset-Analysis State Modification Date-160', - 'zAddAssetAttr- Pending View Count-161', - 'zAddAssetAttr- View Count-162', - 'zAddAssetAttr- Pending Play Count-163', - 'zAddAssetAttr- Play Count-164', - 'zAddAssetAttr- Pending Share Count-165', - 'zAddAssetAttr- Share Count-166', - 'zAddAssetAttr-Allowed for Analysis-167', - 'zAddAssetAttr-Scene Analysis Version-168', - 'zAddAssetAttr-Scene Analysis is From Preview-169', - 'zAddAssetAttr-Scene Analysis Timestamp-170', - 'zAsset-Duplication Asset Visibility State-171', - 'zAddAssetAttr-Destination Asset Copy State-172', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-173', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-174', - 'zCldMast-Source Master For Duplication Scope ID-175', - 'zAddAssetAttr-Source Asset For Duplication ID-176', - 'zCldMast-Source Master for Duplication ID-177', - 'zAddAssetAttr-Variation Suggestions States-178', - 'zAsset-High Frame Rate State-179', - 'zAsset-Video Key Frame Time Scale-180', - 'zAsset-Video Key Frame Value-181', - 'zExtAttr-ISO-182', - 'zExtAttr-Metering Mode-183', - 'zExtAttr-Sample Rate-184', - 'zExtAttr-Track Format-185', - 'zExtAttr-White Balance-186', - 'zExtAttr-Aperture-187', - 'zExtAttr-BitRate-188', - 'zExtAttr-Exposure Bias-189', - 'zExtAttr-Frames Per Second-190', - 'zExtAttr-Shutter Speed-191', - 'zExtAttr-Slush Scene Bias-192', - 'zExtAttr-Slush Version-193', - 'zExtAttr-Slush Preset-194', - 'zExtAttr-Slush Warm Bias-195', - 'zAsset-Height-196', - 'zAddAssetAttr-Original Height-197', - 'zIntResou-UnOriented Height-198', - 'zAsset-Width-199', - 'zAddAssetAttr-Original Width-200', - 'zIntResou-UnOriented Width-201', - 'zAsset-Thumbnail Index-202', - 'zAddAssetAttr-Embedded Thumbnail Height-203', - 'zAddAssetAttr-Embedded Thumbnail Length-204', - 'zAddAssetAttr-Embedded Thumbnail Offset-205', - 'zAddAssetAttr-Embedded Thumbnail Width-206', - 'zAsset-Packed Acceptable Crop Rect-207', - 'zAsset-Packed Badge Attributes-208', - 'zAsset-Packed Preferred Crop Rect-209', - 'zAsset-Curation Score-210', - 'zAsset-Camera Processing Adjustment State-211', - 'zAsset-Depth Type-212', - 'zAsset-Is Magic Carpet-Quicktime_MOV-file-213', - 'zAddAssetAttr-Orig Resource Choice-214', - 'zAsset-Spatial Type-215', - 'zAddAssetAttr-Spatial Over Capture Group ID-216', - 'zAddAssetAttr-Place Annotation Data-217', - 'zAddAssetAttr-Distance Identity-HEX-218', - 'zAddAssetAttr-Edited IPTC Attributes-219', - 'zAddAssetAttr-Title-Comments via Cloud Website-220', - 'zAddAssetAttr-Accessibility Description-221', - 'zAddAssetAttr-Photo Stream Tag ID-222', - 'zAddAssetAttr-Share Type-223', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-224', - 'zAsset-Overall Aesthetic Score-225', - 'zAsset-zENT-226', - 'zAsset-zOPT-227', - 'zAsset-Master= zCldMast-zPK-228', - 'zAsset-Extended Attributes= zExtAttr-zPK-229', - 'zAsset-Import Session Key-230', - 'zAsset-Photo Analysis Attributes Key-231', - 'zAsset-FOK-Cloud Feed Asset Entry Key-232', - 'zAsset-Computed Attributes Asset Key-233', - 'zAsset-Promotion Score-234', - 'zAsset-Iconic Score-235', - 'zAsset-Media Analysis Attributes Key-236', - 'zAsset-Media Group UUID-237', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-238', - 'zAsset.Cloud Collection GUID-239', - 'zAddAssetAttr-zENT-240', - 'ZAddAssetAttr-zOPT-241', - 'zAddAssetAttr-zAsset= zAsset_zPK-242', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-243', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-244', - 'zAddAssetAttr-Public Global UUID-245', - 'zAddAssetAttr-Original Assets UUID-246', - 'zAddAssetAttr-Originating Asset Identifier-247', - 'zAddAssetAttr.Adjusted Fingerprint-248', - 'zCldMast-zPK= zAsset-Master-249', - 'zCldMast-zENT-250', - 'zCldMast-zOPT-251', - 'zCldMast-Moment Share Key= zShare-zPK-252', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-253', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-254', - 'zCldMast-Originating Asset ID-255', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-256', - 'CMzCldMastMedData-zENT-257', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-258', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-259', - 'AAAzCldMastMedData-zENT-260', - 'AAAzCldMastMedData-CldMast key-261', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-262', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-263', - 'zExtAttr-zENT-264', - 'zExtAttr-zOPT-265', - 'zExtAttr-Asset Key-266', - 'zIntResou-zPK-267', - 'zIntResou-zENT-268', - 'zIntResou-zOPT-269', - 'zIntResou-Asset= zAsset_zPK-270', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-271', - 'zMedAnlyAstAttr-zEnt-272', - 'zMedAnlyAstAttr-zOpt-273', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-274') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No Internal Resource data available for iOS 17 PhotoData-Photos.sqlite') - - db.close() - return - - elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() - - cursor.execute(""" - SELECT - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', - zAsset.Z_PK AS 'zAsset-zPK', - zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18', - zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18', - zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18', - CASE zIntResou.ZLOCALAVAILABILITY - WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' - WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' - WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' - END AS 'zIntResou-Local Availability-4QueryStart', - CASE zIntResou.ZREMOTEAVAILABILITY - WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' - WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' - END AS 'zIntResou-Remote Availability-4QueryStart', - CASE zIntResou.ZRESOURCETYPE - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 5 THEN '5-Adjustment-Data-5' - WHEN 6 THEN '6-Screenshot-6' - WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' - WHEN 13 THEN '13-Movie-13' - WHEN 14 THEN '14-Wallpaper-14' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' - END AS 'zIntResou-Resource Type-4QueryStart', - CASE zIntResou.ZDATASTORESUBTYPE - WHEN 0 THEN '0-No Cloud Inter Resource-0' - WHEN 1 THEN '1-Main-Asset-Orig-Size-1' - WHEN 2 THEN '2-Photo-with-Adjustments-2' - WHEN 3 THEN '3-JPG-Large-Thumb-3' - WHEN 4 THEN '4-JPG-Med-Thumb-4' - WHEN 5 THEN '5-JPG-Small-Thumb-5' - WHEN 6 THEN '6-Video-Med-Data-6' - WHEN 7 THEN '7-Video-Small-Data-7' - WHEN 8 THEN '8-MP4-Cloud-Share-8' - WHEN 9 THEN '9-StillTesting' - WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' - WHEN 11 THEN '11-StillTesting' - WHEN 12 THEN '12-StillTesting' - WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' - WHEN 14 THEN '14-Wallpaper-14' - WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' - WHEN 16 THEN '16-Video-with-Adjustments-16' - WHEN 17 THEN '17-RAW_Photo-17_RT' - WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' - WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' - WHEN 20 THEN '20-StillTesting' - WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' - WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' - WHEN 23 THEN '23-StillTesting' - WHEN 24 THEN '24-StillTesting' - WHEN 25 THEN '25-StillTesting' - WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' - WHEN 27 THEN '27-StillTesting' - WHEN 28 THEN '28-MOV-Med-hdr-Data-28' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' - END AS 'zIntResou-Datastore Sub-Type-4QueryStart', - CASE zIntResou.ZRECIPEID - WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' - WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' - WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' - WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' - WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' - WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' - WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' - WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' - WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' - WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' - WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' - WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' - WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' - WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' - WHEN 131475 THEN '131475-medium-hdr-MOV-131475' - WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' - WHEN 327687 THEN '627687-WallpaperComputeResource-627687' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' - END AS 'zIntResou-Recipe ID-4QueryStart', - CASE zAsset.ZCOMPLETE - WHEN 1 THEN '1-Yes-1' - END AS 'zAsset Complete', - CASE zAsset.ZBUNDLESCOPE - WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' - WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' - WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' - WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' - ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' - END AS 'zAsset-Bundle Scope', - CASE zAsset.ZSYNDICATIONSTATE - WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' - WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' - WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' - WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' - WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' - WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' - WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' - END AS 'zAsset-Syndication State', - CASE zAsset.ZCLOUDISMYASSET - WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0' - WHEN 1 THEN '1-My_Asset_in_Shared_Album-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || '' - END AS 'zAsset-Cloud is My Asset', - CASE zAsset.ZCLOUDISDELETABLE - WHEN 0 THEN '0-No-0' - WHEN 1 THEN '1-Yes-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || '' - END AS 'zAsset-Cloud is deletable-Asset', - CASE zAsset.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0' - WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || '' - END AS 'zAsset-Cloud_Local_State', - CASE zAsset.ZVISIBILITYSTATE - WHEN 0 THEN '0-Visible-PL-CameraRoll-0' - WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' - END AS 'zAsset-Visibility State', - zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', - zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', - zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', - CASE zExtAttr.ZFLASHFIRED - WHEN 0 THEN '0-No Flash-0' - WHEN 1 THEN '1-Flash Fired-1' - ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || '' - END AS 'zExtAttr-Flash Fired', - zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Length', - zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Length in 35MM', - zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', - CASE zExtAttr.ZGENERATIVEAITYPE - WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0' - ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' - END AS 'zExtAttr-Generative_AI_Type-iOS18', - zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18', - CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE - WHEN 0 THEN '0-Back-Camera-Other-0' - WHEN 1 THEN '1-Front-Camera-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' - END AS 'zAsset-Derived Camera Capture Device', - CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE - WHEN 0 THEN '0-Back-Camera-Other-0' - WHEN 1 THEN '1-Front-Camera-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' - END AS 'zAddAssetAttr-Camera Captured Device', - zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier-iOS18', - CASE zAddAssetAttr.ZIMPORTEDBY - WHEN 0 THEN '0-Cloud-Other-0' - WHEN 1 THEN '1-Native-Back-Camera-1' - WHEN 2 THEN '2-Native-Front-Camera-2' - WHEN 3 THEN '3-Third-Party-App-3' - WHEN 4 THEN '4-StillTesting-4' - WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' - WHEN 6 THEN '6-Third-Party-App-6' - WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' - WHEN 8 THEN '8-System-Package-App-8' - WHEN 9 THEN '9-Native-App-9' - WHEN 10 THEN '10-StillTesting-10' - WHEN 11 THEN '11-StillTesting-11' - WHEN 12 THEN '12-SWY_Syndication_PL-12' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' - END AS 'zAddAssetAttr-Imported by', - CASE zCldMast.ZIMPORTEDBY - WHEN 0 THEN '0-Cloud-Other-0' - WHEN 1 THEN '1-Native-Back-Camera-1' - WHEN 2 THEN '2-Native-Front-Camera-2' - WHEN 3 THEN '3-Third-Party-App-3' - WHEN 4 THEN '4-StillTesting-4' - WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' - WHEN 6 THEN '6-Third-Party-App-6' - WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' - WHEN 8 THEN '8-System-Package-App-8' - WHEN 9 THEN '9-Native-App-9' - WHEN 10 THEN '10-StillTesting-10' - WHEN 11 THEN '11-StillTesting-11' - WHEN 12 THEN '12-SWY_Syndication_PL-12' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' - END AS 'zCldMast-Imported By', - zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', - zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', - zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', - zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', - CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', - CASE zAsset.ZSAVEDASSETTYPE - WHEN 0 THEN '0-Saved-via-other-source-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' - WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' - WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' - WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' - WHEN 7 THEN '7-StillTesting-7' - WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' - WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' - END AS 'zAsset-Saved Asset Type', - zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', - zAsset.ZFILENAME AS 'zAsset-Filename', - zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', - zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', - zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', - CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE - WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' - WHEN 1 THEN '1-Asset-In-Active-SPL-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' - END AS 'zAsset-Active Library Scope Participation State', - CASE zAsset.ZLIBRARYSCOPESHARESTATE - WHEN 0 THEN '0-Asset-Not-In-SPL-0' - ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' - END AS 'zAsset-Library Scope Share State- StillTesting', - DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', - DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', - CASE zAddAssetAttr.ZDATECREATEDSOURCE - WHEN 0 THEN '0-Cloud-Asset-0' - WHEN 1 THEN '1-Local_Asset_EXIF-1' - WHEN 3 THEN '3-Local_Asset_No_EXIF-3' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' - END AS 'zAddAssetAttr-Date Created Source', - DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', - DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', - DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created', - zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', - zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', - zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', - zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', - DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', - DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', - CASE zCldMast.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-Not Synced with Cloud-0' - WHEN 1 THEN '1-Pending Upload-1' - WHEN 2 THEN '2-StillTesting' - WHEN 3 THEN '3-Synced with Cloud-3' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' - END AS 'zCldMast-Cloud Local State', - DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', - DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', - zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', - DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', - zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', - DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', - zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', - zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', - zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts', - CASE zAsset.ZLATITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLATITUDE - END AS 'zAsset-Latitude', - zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', - CASE zAsset.ZLONGITUDE - WHEN -180.0 THEN '-180.0' - ELSE zAsset.ZLONGITUDE - END AS 'zAsset-Longitude', - zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', - CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY - WHEN -1.0 THEN '-1.0' - ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY - END AS 'zAddAssetAttr-GPS Horizontal Accuracy', - zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', - CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID - WHEN 0 THEN '0-Shifted Location Not Valid-0' - WHEN 1 THEN '1-Shifted Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' - END AS 'zAddAssetAttr-Shifted Location Valid', - CASE - WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Shifted Location Data', - CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID - WHEN 0 THEN '0-Reverse Location Not Valid-0' - WHEN 1 THEN '1-Reverse Location Valid-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' - END AS 'zAddAssetAttr-Reverse Location Is Valid', - CASE - WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' - END AS 'zAddAssetAttr-Reverse Location Data', - CASE AAAzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Cloud-1' - WHEN 2 THEN '2-StillTesting-This Device-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' - END AS 'AAAzCldMastMedData-zOPT', - zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', - CASE - WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' - ELSE 'AAAzCldMastMedData-Data_Empty-NULL' - END AS 'AAAzCldMastMedData-Data', - CASE CMzCldMastMedData.Z_OPT - WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' - WHEN 2 THEN '2-StillTesting-Local_Asset-2' - WHEN 3 THEN '3-StillTesting-Muted-3' - WHEN 4 THEN '4-StillTesting-Unknown-4' - WHEN 5 THEN '5-StillTesting-Unknown-5' - ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' - END AS 'CldMasterzCldMastMedData-zOPT', - zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - CASE - WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' - ELSE 'CMzCldMastMedData-Data_Empty-NULL' - END AS 'CMzCldMastMedData-Data', - CASE zAsset.ZSEARCHINDEXREBUILDSTATE - WHEN 0 THEN '0-StillTesting-0' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || '' - END AS 'zAsset-Search Index Rebuild State', - zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History', - zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version', - CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE - WHEN 0 THEN '0-NA-0' - WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1' - WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2' - WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4' - WHEN 16 THEN '16-STILLTESTING-16' - WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024' - WHEN 2048 THEN '2048-STILLTESTING-2048' - WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096' - ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || '' - END AS 'zMedAnlyAstAttr-Syndication Processing Value', - CASE zAsset.ZORIENTATION - WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' - WHEN 2 THEN '2-Horizontal-Camera-(right)-2' - WHEN 3 THEN '3-Horizontal-Camera-(right)-3' - WHEN 4 THEN '4-Horizontal-Camera-(left)-4' - WHEN 5 THEN '5-Vertical-Camera-(top)-5' - WHEN 6 THEN '6-Vertical-Camera-(top)-6' - WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' - WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' - ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' - END AS 'zAsset-Orientation', - CASE zAddAssetAttr.ZORIGINALORIENTATION - WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' - WHEN 2 THEN '2-Horizontal-Camera-(right)-2' - WHEN 3 THEN '3-Horizontal-Camera-(right)-3' - WHEN 4 THEN '4-Horizontal-Camera-(left)-4' - WHEN 5 THEN '5-Vertical-Camera-(top)-5' - WHEN 6 THEN '6-Vertical-Camera-(top)-6' - WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' - WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' - ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' - END AS 'zAddAssetAttr-Original Orientation', - CASE zAsset.ZKIND - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - END AS 'zAsset-Kind', - CASE zAsset.ZISDETECTEDSCREENSHOT - WHEN 0 THEN '0-Not_Detected_Screenshot iOS18_Still_Testing-0' - WHEN 1 THEN '1-Detected_Screenshot iOS18_Still_Testing-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' - END AS 'zAsset-Is_Detected_Screenshot-iOS18', - CASE zAsset.ZKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Panorama-1' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' - END AS 'zAsset-Kind-Sub-Type', - CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE - WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-StillTesting' - WHEN 2 THEN '2-Live-Photo-2' - WHEN 3 THEN '3-Screenshot-3' - WHEN 10 THEN '10-SpringBoard-Screenshot-10' - WHEN 100 THEN '100-Video-100' - WHEN 101 THEN '101-Slow-Mo-Video-101' - WHEN 102 THEN '102-Time-lapse-Video-102' - WHEN 103 THEN '103-Replay_Screen_Recording-103' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' - END AS 'zAddAssetAttr-Cloud Kind Sub Type', - CASE zAsset.ZPLAYBACKSTYLE - WHEN 1 THEN '1-Image-1' - WHEN 2 THEN '2-Image-Animated-2' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 4 THEN '4-Video-4' - WHEN 5 THEN '5-Video-Looping-5' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' - END AS 'zAsset-Playback Style', - CASE zAsset.ZPLAYBACKVARIATION - WHEN 0 THEN '0-No_Playback_Variation-0' - WHEN 1 THEN '1-StillTesting_Playback_Variation-1' - WHEN 2 THEN '2-StillTesting_Playback_Variation-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' - END AS 'zAsset-Playback Variation', - CASE zAddAssetAttr.ZVIEWPRESENTATION - WHEN 0 THEN '0-Obs in iOS 18 still testing-0' - WHEN 1 THEN '1-Obs in iOS 18 still testing-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' - END AS 'zAddAssetAttr-View_Presentation-iOS18', - zAsset.ZDURATION AS 'zAsset-Video Duration', - zExtAttr.ZDURATION AS 'zExtAttr-Duration', - zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration', - zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale', - zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State', - zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value', - zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale', - CASE zIntResou.ZDATASTORECLASSID - WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2' - WHEN 3 THEN '3-SWY_Syndication_Asset-3' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || '' - END AS 'zIntResou-Datastore Class ID', - CASE zAsset.ZCLOUDPLACEHOLDERKIND - WHEN 0 THEN '0-Local&CloudMaster Asset-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-StillTesting-2' - WHEN 3 THEN '3-JPG-Asset_Only_PhDa-Thumb-V2-3' - WHEN 4 THEN '4-LPL-JPG-Asset_CPLAsset-OtherType-4' - WHEN 5 THEN '5-Asset_synced_CPL_2_Device-5' - WHEN 6 THEN '6-StillTesting-6' - WHEN 7 THEN '7-LPL-poster-JPG-Asset_CPLAsset-MP4-7' - WHEN 8 THEN '8-LPL-JPG_Asset_CPLAsset-LivePhoto-MOV-8' - WHEN 9 THEN '9-CPL_MP4_Asset_Saved_2_LPL-9' - ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDPLACEHOLDERKIND || '' - END AS 'zAsset-Cloud Placeholder Kind', - CASE zIntResou.ZLOCALAVAILABILITY - WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' - WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' - WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' - END AS 'zIntResou-Local Availability', - CASE zIntResou.ZLOCALAVAILABILITYTARGET - WHEN 0 THEN '0-StillTesting-0' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || '' - END AS 'zIntResou-Local Availability Target', - CASE zIntResou.ZCLOUDLOCALSTATE - WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0' - WHEN 1 THEN '1-IR_Asset_Pending-Upload-1' - WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2' - WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || '' - END AS 'zIntResou-Cloud Local State', - CASE zIntResou.ZREMOTEAVAILABILITY - WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' - WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' - END AS 'zIntResou-Remote Availability', - CASE zIntResou.ZREMOTEAVAILABILITYTARGET - WHEN 0 THEN '0-StillTesting-0' - WHEN 1 THEN '1-StillTesting-1' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || '' - END AS 'zIntResou-Remote Availability Target', - zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master', - zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index', - zIntResou.ZFILEID AS 'zIntResou- File ID', - CASE zIntResou.ZVERSION - WHEN 0 THEN '0-IR_Asset_Standard-0' - WHEN 1 THEN '1-StillTesting-1' - WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2' - WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || '' - END AS 'zIntResou-Version', - zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size', - CASE zIntResou.ZRESOURCETYPE - WHEN 0 THEN '0-Photo-0' - WHEN 1 THEN '1-Video-1' - WHEN 3 THEN '3-Live-Photo-3' - WHEN 5 THEN '5-Adjustment-Data-5' - WHEN 6 THEN '6-Screenshot-6' - WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' - WHEN 13 THEN '13-Movie-13' - WHEN 14 THEN '14-Wallpaper-14' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' - END AS 'zIntResou-Resource Type', - CASE zIntResou.ZDATASTORESUBTYPE - WHEN 0 THEN '0-No Cloud Inter Resource-0' - WHEN 1 THEN '1-Main-Asset-Orig-Size-1' - WHEN 2 THEN '2-Photo-with-Adjustments-2' - WHEN 3 THEN '3-JPG-Large-Thumb-3' - WHEN 4 THEN '4-JPG-Med-Thumb-4' - WHEN 5 THEN '5-JPG-Small-Thumb-5' - WHEN 6 THEN '6-Video-Med-Data-6' - WHEN 7 THEN '7-Video-Small-Data-7' - WHEN 8 THEN '8-MP4-Cloud-Share-8' - WHEN 9 THEN '9-StillTesting' - WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' - WHEN 11 THEN '11-StillTesting' - WHEN 12 THEN '12-StillTesting' - WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' - WHEN 14 THEN '14-Wallpaper-14' - WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' - WHEN 16 THEN '16-Video-with-Adjustments-16' - WHEN 17 THEN '17-RAW_Photo-17_RT' - WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' - WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' - WHEN 20 THEN '20-StillTesting' - WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' - WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' - WHEN 23 THEN '23-StillTesting' - WHEN 24 THEN '24-StillTesting' - WHEN 25 THEN '25-StillTesting' - WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' - WHEN 27 THEN '27-StillTesting' - WHEN 28 THEN '28-MOV-Med-hdr-Data-28' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' - END AS 'zIntResou-Datastore Sub-Type', - CASE zIntResou.ZCLOUDSOURCETYPE - WHEN 0 THEN '0-NA-0' - WHEN 1 THEN '1-Main-Asset-Orig-Size-1' - WHEN 2 THEN '2-Photo-with-Adjustments-2' - WHEN 3 THEN '3-JPG-Large-Thumb-3' - WHEN 4 THEN '4-JPG-Med-Thumb-4' - WHEN 5 THEN '5-JPG-Small-Thumb-5' - WHEN 6 THEN '6-Video-Med-Data-6' - WHEN 7 THEN '7-Video-Small-Data-7' - WHEN 8 THEN '8-MP4-Cloud-Share-8' - WHEN 9 THEN '9-StillTesting' - WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' - WHEN 11 THEN '11-StillTesting' - WHEN 12 THEN '12-StillTesting' - WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' - WHEN 14 THEN '14-Wallpaper-14' - WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' - WHEN 16 THEN '16-Video-with-Adjustments-16' - WHEN 17 THEN '17-RAW_Photo-17_RT' - WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' - WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' - WHEN 20 THEN '20-StillTesting' - WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' - WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' - WHEN 23 THEN '23-StillTesting' - WHEN 24 THEN '24-StillTesting' - WHEN 25 THEN '25-StillTesting' - WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' - WHEN 27 THEN '27-StillTesting' - WHEN 28 THEN '28-MOV-Med-hdr-Data-28' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || '' - END AS 'zIntResou-Cloud Source Type', - zIntResou.ZDATALENGTH AS 'zIntResou-Data Length', - CASE zIntResou.ZRECIPEID - WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' - WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' - WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' - WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' - WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' - WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' - WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' - WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' - WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' - WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' - WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' - WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' - WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' - WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' - WHEN 131475 THEN '131475-medium-hdr-MOV-131475' - WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' - WHEN 327687 THEN '627687-WallpaperComputeResource-627687' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' - END AS 'zIntResou-Recipe ID', - CASE zIntResou.ZCLOUDLASTPREFETCHDATE - WHEN 0 THEN '0-NA-0' - ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH') - END AS 'zIntResou-Cloud Last Prefetch Date', - zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count', - DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date', - CASE zIntResou.ZUTICONFORMANCEHINT - WHEN 0 THEN '0-NA-Doesnt_Conform-0' - WHEN 1 THEN '1-UTTypeImage-1' - WHEN 2 THEN '2-UTTypeProRawPhoto-2' - WHEN 3 THEN '3-UTTypeMovie-3' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || '' - END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint', - CASE zIntResou.ZCOMPACTUTI - WHEN 1 THEN '1-JPEG-THM-1' - WHEN 3 THEN '3-HEIC-3' - WHEN 6 THEN '6-PNG-6' - WHEN 7 THEN '7-StillTesting' - WHEN 9 THEN '9-DNG-9' - WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23' - WHEN 24 THEN '24-MPEG4-24' - WHEN 36 THEN '36-Wallpaper-36' - WHEN 37 THEN '37-Adj-Mutation_Data-37' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || '' - END AS 'zIntResou-Compact-UTI', - zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID', - zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space', - zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID', - CASE zCldMast.ZFULLSIZEJPEGSOURCE - WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0' - WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1' - ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || '' - END AS 'zCldMast-Full Size JPEG Source', - zAsset.ZHDRGAIN AS 'zAsset-HDR Gain', - CASE zAsset.ZHDRTYPE - WHEN 0 THEN '0-No-HDR-0' - WHEN 3 THEN '3-HDR_Photo-3_RT' - WHEN 4 THEN '4-Non-HDR_Version-4_RT' - WHEN 5 THEN '5-HEVC_Movie-5' - WHEN 6 THEN '6-Panorama-6_RT' - WHEN 10 THEN '10-HDR-Gain-10' - ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || '' - END AS 'zAsset-zHDR_Type', - zExtAttr.ZCODEC AS 'zExtAttr-Codec', - zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name', - zCldMast.ZCODECNAME AS 'zCldMast-Codec Name', - zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate', - zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State', - CASE zAsset.ZDEPTHTYPE - WHEN 0 THEN '0-Not_Portrait-0_RT' - ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || '' - END AS 'zAsset-Depth_Type', - zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID', - CASE zAsset.ZAVALANCHEKIND - WHEN 0 THEN '0-No_Avalanche iOS18_Still_Testing-0' - WHEN 1 THEN '1-Is_Avalanche iOS18_Still_Testing-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEKIND || '' - END AS 'zAsset-Avalanche_Kind-iOS18', - CASE zAsset.ZAVALANCHEPICKTYPE - WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' - WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' - WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' - WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' - WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' - WHEN 32 THEN '32-StillTesting-32_RT' - WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' - ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || '' - END AS 'zAsset-Avalanche_Pick_Type-BurstAsset', - CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE - WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' - WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' - WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' - WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' - WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' - WHEN 32 THEN '32-StillTesting-32_RT' - WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || '' - END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset', - CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE - WHEN 0 THEN '0-StillTesting' - WHEN 1 THEN '1-StillTesting' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || '' - END AS 'zAddAssetAttr-Cloud Recovery State', - zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count', - zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed', - zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed', - zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', - zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', - CASE zAsset.ZADJUSTMENTSSTATE - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2' - WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3' - ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' - END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18', - DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', - DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18', - zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', - zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage', - CASE zCompSyncAttr.ZLOCALANALYSISMAJORVERSION - WHEN 1 THEN '1-Is_Local_Analysis_Major_Version-1' - ELSE 'Unknown-New-Value!: ' || zCompSyncAttr.ZLOCALANALYSISMAJORVERSION || '' - END AS 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18', - CASE zAsset.ZFAVORITE - WHEN 0 THEN '0-Asset Not Favorite-0' - WHEN 1 THEN '1-Asset Favorite-1' - END AS 'zAsset-Favorite', - CASE zAsset.ZHIDDEN - WHEN 0 THEN '0-Asset Not Hidden-0' - WHEN 1 THEN '1-Asset Hidden-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || '' - END AS 'zAsset-Hidden', - CASE zAsset.ZTRASHEDSTATE - WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' - WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' - END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', - DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', - zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK', - CASE zAsset.ZDELETEREASON - WHEN 1 THEN '1-StillTesting Delete-Reason-1' - WHEN 2 THEN '2-StillTesting Delete-Reason-2' - WHEN 3 THEN '3-StillTesting Delete-Reason-3' - ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || '' - END AS 'zAsset-Delete-Reason', - CASE zIntResou.ZTRASHEDSTATE - WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0' - WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || '' - END AS 'zIntResou-Trash State', - DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date', - CASE zAsset.ZCLOUDDELETESTATE - WHEN 0 THEN '0-Cloud Asset Not Deleted-0' - WHEN 1 THEN '1-Cloud Asset Deleted-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || '' - END AS 'zAsset-Cloud Delete State', - CASE zIntResou.ZCLOUDDELETESTATE - WHEN 0 THEN '0-Cloud IntResou Not Deleted-0' - WHEN 1 THEN '1-Cloud IntResou Deleted-1' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || '' - END AS 'zIntResou-Cloud Delete State', - CASE zAddAssetAttr.ZPTPTRASHEDSTATE - WHEN 0 THEN '0-PTP Not in Trash-0' - WHEN 1 THEN '1-PTP In Trash-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || '' - END AS 'zAddAssetAttr-PTP Trashed State', - CASE zIntResou.ZPTPTRASHEDSTATE - WHEN 0 THEN '0-PTP IntResou Not in Trash-0' - WHEN 1 THEN '1-PTP IntResou In Trash-1' - ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || '' - END AS 'zIntResou-PTP Trashed State', - zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', - DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', - DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date', - zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', - zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', - zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', - zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', - zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count', - zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count', - CASE zAddAssetAttr.ZALLOWEDFORANALYSIS - WHEN 0 THEN '0-Asset Not Allowed For Analysis-0' - WHEN 1 THEN '1-Asset Allowed for Analysis-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || '' - END AS 'zAddAssetAttr-Allowed for Analysis', - zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version', - CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW - WHEN 0 THEN '0-No-0' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || '' - END AS 'zAddAssetAttr-Scene Analysis is From Preview', - DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', - CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE - WHEN 0 THEN '0-No-Duplicates-0' - WHEN 1 THEN '1-Has Duplicate-1' - WHEN 2 THEN '2-Is a Duplicate-2' - ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || '' - END AS 'zAsset-Duplication Asset Visibility State', - CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE - WHEN 0 THEN '0-No Copy-0' - WHEN 1 THEN '1-Has A Copy-1' - WHEN 2 THEN '2-Has A Copy-2' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || '' - END AS 'zAddAssetAttr-Destination Asset Copy State', - CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE - WHEN 0 THEN '0-Unknown-StillTesting-0' - WHEN 1 THEN '1-Unknown-StillTesting-1' - WHEN 2 THEN '2-Unknown-StillTesting-2' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || '' - END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State', - zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID', - zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID', - zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID', - zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID', - zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States', - zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State', - zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale', - zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value', - CASE zAsset.ZCURRENTSLEETCAST - WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0' - WHEN 1 THEN '1-NotYetObs iOS18_Still_Testing-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZCURRENTSLEETCAST || '' - END AS 'zAsset-Current_Sleet_Cast-iOS18', - CASE zAddAssetAttr.ZSLEETISREVERSIBLE - WHEN 0 THEN '0-Obs in iOS 18 still testing-0' - WHEN 1 THEN '1-Obs in iOS 18 still testing-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSLEETISREVERSIBLE || '' - END AS 'zAddAssetAttr.Sleet_Is_Reversible-iOS18', - zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version-iOS18', - zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity-iOS18', - zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias-iOS18', - zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias-iOS18', - CASE zExtAttr.ZSLEETCAST - WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0' - ELSE 'Unknown-New-Value!: ' || zExtAttr.ZSLEETCAST || '' - END AS 'zExtAttr-Sleet_Cast-iOS18', - zExtAttr.ZISO AS 'zExtAttr-ISO', - zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode', - zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate', - zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format', - zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance', - zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture', - zExtAttr.ZBITRATE AS 'zExtAttr-BitRate', - zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias', - zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second', - zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed', - zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias', - zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version', - zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset', - zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias', - zAsset.ZHEIGHT AS 'zAsset-Height', - zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height', - zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height', - zAsset.ZWIDTH AS 'zAsset-Width', - zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width', - zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width', - zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index', - zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height', - zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', - zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', - zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', - CASE zAddAssetAttr.ZIMAGEEMBEDDINGVERSION - WHEN 0 THEN '0-Obs_in_iOS18 still_testing-0' - WHEN 1 THEN '1-Obs_in_iOS18 still_testing-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMAGEEMBEDDINGVERSION || '' - END AS 'zAddAssetAttr-Image Embedding Version-iOS18', - zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', - zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', - zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', - zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score', - zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State', - zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type', - zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-Quicktime_MOV-file', - CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE - WHEN 0 THEN '0-JPEG Original Resource-0' - WHEN 1 THEN '1-RAW Original Resource-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || '' - END AS 'zAddAssetAttr-Orig Resource Choice', - CASE zAsset.ZSPATIALTYPE - WHEN 0 THEN '0-UnknownTesting-0' - ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || '' - END AS 'zAsset-Spatial Type', - zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID', - zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', - zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity-HEX', - zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes', - zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', - zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', - zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID', - CASE zAddAssetAttr.ZSHARETYPE - WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' - WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' - END AS 'zAddAssetAttr-Share Type', - zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update', - zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', - zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18', - zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version-iOS18', - zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version-iOS18', - zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18', - zGenAsstDesc.ZASSET AS 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18', - zAsset.ZGENERATEDASSETDESCRIPTION AS 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18', - zGenAsstDesc.Z_PK AS 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18', - zGenAsstDesc.Z_ENT AS 'zGenAsstDesc-zENT-iOS18', - zGenAsstDesc.Z_OPT AS 'zGenAsstDesc-zOPT-iOS18', - DateTime(zGenAsstDesc.ZANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zGenAsstDesc-Analysis_Timestamp-iOS18', - CASE zGenAsstDesc.ZANALYSISSOURCETYPE - WHEN 0 THEN '0-NotYetObs iOS18_Still_Testing-0' - ELSE 'Unknown-New-Value!: ' || zGenAsstDesc.ZANALYSISSOURCETYPE || '' - END AS 'zGenAsstDesc-Analysis_Source_Type-iOS18', - zGenAsstDesc.ZANALYSISVERSION AS 'zGenAsstDesc-Analysis Version-iOS18', - zGenAsstDesc.ZDESCRIPTIONTEXT AS 'zGenAsstDesc-Description_Text-iOS18', - zAsset.Z_ENT AS 'zAsset-zENT', - zAsset.Z_OPT AS 'zAsset-zOPT', - zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', - zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK', - zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key', - zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key', - zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', - zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key', - zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score', - zAsset.ZICONICSCORE AS 'zAsset-Iconic Score', - zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key', - zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID', - zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb', - zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID', - zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT', - zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT', - zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK', - zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK', - zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', - zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID', - zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID', - zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier', - zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master', - zCldMast.Z_ENT AS 'zCldMast-zENT', - zCldMast.Z_OPT AS 'zCldMast-zOPT', - zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', - zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb', - zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID', - CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', - CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT', - CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK', - AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', - AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT', - AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key', - AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK', - zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18', - zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18', - zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18', - zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT-iOS18', - zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT-iOS18', - zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage-iOS18', - zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18', - zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes', - zExtAttr.Z_ENT AS 'zExtAttr-zENT', - zExtAttr.Z_OPT AS 'zExtAttr-zOPT', - zExtAttr.ZASSET AS 'zExtAttr-Asset Key', - zIntResou.Z_PK AS 'zIntResou-zPK', - zIntResou.Z_ENT AS 'zIntResou-zENT', - zIntResou.Z_OPT AS 'zIntResou-zOPT', - zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK', - zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata', - zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt', - zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt', - zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK' - FROM ZASSET zAsset - LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES - LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES - LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK - LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT - LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA - LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA - LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK - LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES - LEFT JOIN ZGENERATEDASSETDESCRIPTION zGenAsstDesc ON zGenAsstDesc.Z_PK = zAsset.ZGENERATEDASSETDESCRIPTION - WHERE (zIntResou.ZDATASTORESUBTYPE = 1) & (zIntResou.ZLOCALAVAILABILITY = -1) & (zIntResou.ZFINGERPRINT IS NOT NULL) - ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], - row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], - row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], - row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], - row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], - row[308], row[309], row[310], row[311], row[312])) - - counter += 1 - - description = 'Parses iOS 18 possible optimized asset records from PhotoData-Photos.sqlite' \ - ' ZINTERNALRESOURCE and other tables. This and other related parsers should provide data' \ - ' for investigative analysis of assets being stored locally on the device verses' \ - ' assets being stored in iCloud Photos as the result of optimization.' \ - ' This is very large query and script, I recommend opening the TSV generated report' \ - ' with Zimmermans Tools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \ - ' to view, search, and filter the results.' - report = ArtifactHtmlReport('Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-4QueryStart-0', - 'zAsset-zPK-1', - 'zAddAssetAttr-zPK-2', - 'zAsset-UUID = store.cloudphotodb-3', - 'zAddAssetAttr-Original Stable Hash-iOS18-4', - 'zIntResou-Fingerprint-5', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-6', - 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-7', - 'zIntResou-Stable Hash-iOS18-8', - 'zIntResou-Local Availability-4QueryStart-9', - 'zIntResou-Remote Availability-4QueryStart-10', - 'zIntResou-Resource Type-4QueryStart-11', - 'zIntResou-Datastore Sub-Type-4QueryStart-12', - 'zIntResou-Recipe ID-4QueryStart-13', - 'zAsset Complete-14', - 'zAsset-Bundle Scope-15', - 'zAsset-Syndication State-16', - 'zAsset-Cloud is My Asset-17', - 'zAsset-Cloud is deletable-Asset-18', - 'zAsset-Cloud_Local_State-19', - 'zAsset-Visibility State-20', - 'zExtAttr-Camera Make-21', - 'zExtAttr-Camera Model-22', - 'zExtAttr-Lens Model-23', - 'zExtAttr-Flash Fired-24', - 'zExtAttr-Focal Length-25', - 'zExtAttr-Focal Length in 35MM-26', - 'zExtAttr-Digital Zoom Ratio-27', - 'zExtAttr-Generative_AI_Type-iOS18-28', - 'zExtAttr-Credit-iOS18-29', - 'zAsset-Derived Camera Capture Device-30', - 'zAddAssetAttr-Camera Captured Device-31', - 'zAsset-Capture_Session_Identifier-iOS18-32', - 'zAddAssetAttr-Imported by-33', - 'zCldMast-Imported By-34', - 'zAddAssetAttr.Imported by Bundle Identifier-35', - 'zAddAssetAttr-Imported By Display Name-36', - 'zCldMast-Imported by Bundle ID-37', - 'zCldMast-Imported by Display Name-38', - 'zAsset-Is_Recently_Saved-iOS18-39', - 'zAsset-Saved Asset Type-40', - 'zAsset-Directory-Path-41', - 'zAsset-Filename-42', - 'zAddAssetAttr- Original Filename-43', - 'zCldMast- Original Filename-44', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-45', - 'zAsset-Active Library Scope Participation State-46', - 'zAsset-Library Scope Share State- StillTesting-47', - 'zAsset-Added Date-48', - 'zAsset- SortToken -CameraRoll-49', - 'zAddAssetAttr-Date Created Source-50', - 'zAsset-Date Created-51', - 'zCldMast-Creation Date-52', - 'zIntResou-CldMst Date Created-53', - 'zAddAssetAttr-Time Zone Name-54', - 'zAddAssetAttr-Time Zone Offset-55', - 'zAddAssetAttr-Inferred Time Zone Offset-56', - 'zAddAssetAttr-EXIF-String-57', - 'zAsset-Modification Date-58', - 'zAsset-Last Shared Date-59', - 'zCldMast-Cloud Local State-60', - 'zCldMast-Import Date-61', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-62', - 'zAddAssetAttr-Import Session ID-63', - 'zAddAssetAttr-Alt Import Image Date-64', - 'zCldMast-Import Session ID- AirDrop-StillTesting-65', - 'zAsset-Cloud Batch Publish Date-66', - 'zAsset-Cloud Server Publish Date-67', - 'zAsset-Cloud Download Requests-68', - 'zAsset-Cloud Batch ID-69', - 'zAddAssetAttr-Upload Attempts-70', - 'zAsset-Latitude-71', - 'zExtAttr-Latitude-72', - 'zAsset-Longitude-73', - 'zExtAttr-Longitude-74', - 'zAddAssetAttr-GPS Horizontal Accuracy-75', - 'zAddAssetAttr-Location Hash-76', - 'zAddAssetAttr-Shifted Location Valid-77', - 'zAddAssetAttr-Shifted Location Data-78', - 'zAddAssetAttr-Reverse Location Is Valid-79', - 'zAddAssetAttr-Reverse Location Data-80', - 'AAAzCldMastMedData-zOPT-81', - 'zAddAssetAttr-Media Metadata Type-82', - 'AAAzCldMastMedData-Data-83', - 'CldMasterzCldMastMedData-zOPT-84', - 'zCldMast-Media Metadata Type-85', - 'CMzCldMastMedData-Data-86', - 'zAsset-Search Index Rebuild State-87', - 'zAddAssetAttr-Syndication History-88', - 'zMedAnlyAstAttr-Syndication Processing Version-89', - 'zMedAnlyAstAttr-Syndication Processing Value-90', - 'zAsset-Orientation-91', - 'zAddAssetAttr-Original Orientation-92', - 'zAsset-Kind-93', - 'zAsset-Is_Detected_Screenshot-iOS18-94', - 'zAsset-Kind-Sub-Type-95', - 'zAddAssetAttr-Cloud Kind Sub Type-96', - 'zAsset-Playback Style-97', - 'zAsset-Playback Variation-98', - 'zAddAssetAttr-View_Presentation-iOS18-99', - 'zAsset-Video Duration-100', - 'zExtAttr-Duration-101', - 'zAsset-Video CP Duration-102', - 'zAddAssetAttr-Video CP Duration Time Scale-103', - 'zAsset-Video CP Visibility State-104', - 'zAddAssetAttr-Video CP Display Value-105', - 'zAddAssetAttr-Video CP Display Time Scale-106', - 'zIntResou-Datastore Class ID-107', - 'zAsset-Cloud Placeholder Kind-108', - 'zIntResou-Local Availability-109', - 'zIntResou-Local Availability Target-110', - 'zIntResou-Cloud Local State-111', - 'zIntResou-Remote Availability-112', - 'zIntResou-Remote Availability Target-113', - 'zIntResou-Transient Cloud Master-114', - 'zIntResou-Side Car Index-115', - 'zIntResou- File ID-116', - 'zIntResou-Version-117', - 'zAddAssetAttr- Original-File-Size-118', - 'zIntResou-Resource Type-119', - 'zIntResou-Datastore Sub-Type-120', - 'zIntResou-Cloud Source Type-121', - 'zIntResou-Data Length-122', - 'zIntResou-Recipe ID-123', - 'zIntResou-Cloud Last Prefetch Date-124', - 'zIntResou-Cloud Prefetch Count-125', - 'zIntResou- Cloud-Last-OnDemand Download-Date-126', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-127', - 'zIntResou-Compact-UTI-128', - 'zAsset-Uniform Type ID-129', - 'zAsset-Original Color Space-130', - 'zCldMast-Uniform_Type_ID-131', - 'zCldMast-Full Size JPEG Source-132', - 'zAsset-HDR Gain-133', - 'zAsset-zHDR_Type-134', - 'zExtAttr-Codec-135', - 'zIntResou-Codec Four Char Code Name-136', - 'zCldMast-Codec Name-137', - 'zCldMast-Video Frame Rate-138', - 'zCldMast-Placeholder State-139', - 'zAsset-Depth_Type-140', - 'zAsset-Avalanche UUID-141', - 'zAsset-Avalanche_Kind-iOS18-142', - 'zAsset-Avalanche_Pick_Type-BurstAsset-143', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-144', - 'zAddAssetAttr-Cloud Recovery State-145', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-146', - 'zAsset-Deferred Processing Needed-147', - 'zAsset-Video Deferred Processing Needed-148', - 'zAddAssetAttr-Deferred Photo Identifier-149', - 'zAddAssetAttr-Deferred Processing Candidate Options-150', - 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-151', - 'zAsset-Adjustment Timestamp-152', - 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-153', - 'zAddAssetAttr-Editor Bundle ID-154', - 'zAddAssetAttr-Montage-155', - 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-156', - 'zAsset-Favorite-157', - 'zAsset-Hidden-158', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-159', - 'zAsset-Trashed Date-160', - 'zAsset-Trashed by Participant= zSharePartic_zPK-161', - 'zAsset-Delete-Reason-162', - 'zIntResou-Trash State-163', - 'zIntResou-Trashed Date-164', - 'zAsset-Cloud Delete State-165', - 'zIntResou-Cloud Delete State-166', - 'zAddAssetAttr-PTP Trashed State-167', - 'zIntResou-PTP Trashed State-168', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-169', - 'zMedAnlyAstAttr-Media Analysis Timestamp-170', - 'zAsset-Analysis State Modification Date-171', - 'zAddAssetAttr- Pending View Count-172', - 'zAddAssetAttr- View Count-173', - 'zAddAssetAttr- Pending Play Count-174', - 'zAddAssetAttr- Play Count-175', - 'zAddAssetAttr- Pending Share Count-176', - 'zAddAssetAttr- Share Count-177', - 'zAddAssetAttr-Allowed for Analysis-178', - 'zAddAssetAttr-Scene Analysis Version-179', - 'zAddAssetAttr-Scene Analysis is From Preview-180', - 'zAddAssetAttr-Scene Analysis Timestamp-181', - 'zAsset-Duplication Asset Visibility State-182', - 'zAddAssetAttr-Destination Asset Copy State-183', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-184', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-185', - 'zCldMast-Source Master For Duplication Scope ID-186', - 'zAddAssetAttr-Source Asset For Duplication ID-187', - 'zCldMast-Source Master for Duplication ID-188', - 'zAddAssetAttr-Variation Suggestions States-189', - 'zAsset-High Frame Rate State-190', - 'zAsset-Video Key Frame Time Scale-191', - 'zAsset-Video Key Frame Value-192', - 'zAsset-Current_Sleet_Cast-iOS18-193', - 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-194', - 'zExtAttr-Sleet_Rendering_Version-iOS18-195', - 'zExtAttr-Sleet_Intensity-iOS18-196', - 'zExtAttr-Sleet_Tone_Bias-iOS18-197', - 'zExtAttr-Sleet_Color_Bias-iOS18-198', - 'zExtAttr-Sleet_Cast-iOS18-199', - 'zExtAttr-ISO-200', - 'zExtAttr-Metering Mode-201', - 'zExtAttr-Sample Rate-202', - 'zExtAttr-Track Format-203', - 'zExtAttr-White Balance-204', - 'zExtAttr-Aperture-205', - 'zExtAttr-BitRate-206', - 'zExtAttr-Exposure Bias-207', - 'zExtAttr-Frames Per Second-208', - 'zExtAttr-Shutter Speed-209', - 'zExtAttr-Slush Scene Bias-210', - 'zExtAttr-Slush Version-211', - 'zExtAttr-Slush Preset-212', - 'zExtAttr-Slush Warm Bias-213', - 'zAsset-Height-214', - 'zAddAssetAttr-Original Height-215', - 'zIntResou-UnOriented Height-216', - 'zAsset-Width-217', - 'zAddAssetAttr-Original Width-218', - 'zIntResou-UnOriented Width-219', - 'zAsset-Thumbnail Index-220', - 'zAddAssetAttr-Embedded Thumbnail Height-221', - 'zAddAssetAttr-Embedded Thumbnail Length-222', - 'zAddAssetAttr-Embedded Thumbnail Offset-223', - 'zAddAssetAttr-Embedded Thumbnail Width-224', - 'zAddAssetAttr-Image Embedding Version-iOS18-225', - 'zAsset-Packed Acceptable Crop Rect-226', - 'zAsset-Packed Badge Attributes-227', - 'zAsset-Packed Preferred Crop Rect-228', - 'zAsset-Curation Score-229', - 'zAsset-Camera Processing Adjustment State-230', - 'zAsset-Depth Type-231', - 'zAsset-Is Magic Carpet-Quicktime_MOV-file-232', - 'zAddAssetAttr-Orig Resource Choice-233', - 'zAsset-Spatial Type-234', - 'zAddAssetAttr-Spatial Over Capture Group ID-235', - 'zAddAssetAttr-Place Annotation Data-236', - 'zAddAssetAttr-Distance Identity-HEX-237', - 'zAddAssetAttr-Edited IPTC Attributes-238', - 'zAddAssetAttr-Title-Comments via Cloud Website-239', - 'zAddAssetAttr-Accessibility Description-240', - 'zAddAssetAttr-Photo Stream Tag ID-241', - 'zAddAssetAttr-Share Type-242', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-243', - 'zAsset-Overall Aesthetic Score-244', - 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18-245', - 'zMedAnlyAstAttr-Image_Caption_Version-iOS18-246', - 'zMedAnlyAstAttr-Video_Caption_Version-iOS18-247', - 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18-248', - 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18-249', - 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18-250', - 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18-251', - 'zGenAsstDesc-zENT-iOS18-252', - 'zGenAsstDesc-zOPT-iOS18-253', - 'zGenAsstDesc-Analysis_Timestamp-iOS18-254', - 'zGenAsstDesc-Analysis_Source_Type-iOS18-255', - 'zGenAsstDesc-Analysis Version-iOS18-256', - 'zGenAsstDesc-Description_Text-iOS18-257', - 'zAsset-zENT-258', - 'zAsset-zOPT-259', - 'zAsset-Master= zCldMast-zPK-260', - 'zAsset-Extended Attributes= zExtAttr-zPK-261', - 'zAsset-Import Session Key-262', - 'zAsset-Photo Analysis Attributes Key-263', - 'zAsset-FOK-Cloud Feed Asset Entry Key-264', - 'zAsset-Computed Attributes Asset Key-265', - 'zAsset-Promotion Score-266', - 'zAsset-Iconic Score-267', - 'zAsset-Media Analysis Attributes Key-268', - 'zAsset-Media Group UUID-269', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-270', - 'zAsset.Cloud Collection GUID-271', - 'zAddAssetAttr-zENT-272', - 'ZAddAssetAttr-zOPT-273', - 'zAddAssetAttr-zAsset= zAsset_zPK-274', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-275', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-276', - 'zAddAssetAttr-Public Global UUID-277', - 'zAddAssetAttr-Original Assets UUID-278', - 'zAddAssetAttr-Originating Asset Identifier-279', - 'zCldMast-zPK= zAsset-Master-280', - 'zCldMast-zENT-281', - 'zCldMast-zOPT-282', - 'zCldMast-Moment Share Key= zShare-zPK-283', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-284', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-285', - 'zCldMast-Originating Asset ID-286', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-287', - 'CMzCldMastMedData-zENT-288', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-289', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-290', - 'AAAzCldMastMedData-zENT-291', - 'AAAzCldMastMedData-CldMast key-292', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-293', - 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18-294', - 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-295', - 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-296', - 'zCompSyncAttr-zENT-iOS18-297', - 'zCompSyncAttr-zOPT-iOS18-298', - 'zCompSyncAttr-Local_Analysis_Stage-iOS18-299', - 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-300', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-301', - 'zExtAttr-zENT-302', - 'zExtAttr-zOPT-303', - 'zExtAttr-Asset Key-304', - 'zIntResou-zPK-305', - 'zIntResou-zENT-306', - 'zIntResou-zOPT-307', - 'zIntResou-Asset= zAsset_zPK-308', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-309', - 'zMedAnlyAstAttr-zEnt-310', - 'zMedAnlyAstAttr-zOpt-311', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-312') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No Internal Resource data available for iOS 18 PhotoData-Photos.sqlite') - - db.close() - return - -__artifacts_v2__ = { - 'Ph51-Possible_Optimized_Assets_IntResou-PhDaPsql': { - 'name': 'SyndPL Photos.sqlite Ph51 Possible Optimized Assets IntResource', - 'description': 'Parses iOS 14-18 asset records from PhotoData-Photos.sqlite ZINTERNALRESOURCE' - ' and other tables. This and other related parsers should provide data for investigative' - ' analysis of assets being stored locally on the device verses assets being stored in' - ' iCloud Photos as the result of optimization. This is very large query and script,' - ' I recommend opening the TSV generated report with Zimmermans Tools' - ' https://ericzimmerman.github.io/#!index.md TimelineExplorer to view, search,' - ' and filter the results.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-14', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-I-Asset_IntResou-Optimization', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph51possibleoptimizedassetsphdapsql' - } -} + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', + zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability-4QueryStart', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability-4QueryStart', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type-4QueryStart', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type-4QueryStart', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID-4QueryStart', + CASE zAsset.ZCOMPLETE + WHEN 1 THEN '1-Yes-1' + END AS 'zAsset Complete', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZCLOUDISMYASSET + WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0' + WHEN 1 THEN '1-My_Asset_in_Shared_Album-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || '' + END AS 'zAsset-Cloud is My Asset', + CASE zAsset.ZCLOUDISDELETABLE + WHEN 0 THEN '0-No-0' + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || '' + END AS 'zAsset-Cloud is deletable-Asset', + CASE zAsset.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0' + WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || '' + END AS 'zAsset-Cloud_Local_State', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', + CASE zExtAttr.ZFLASHFIRED + WHEN 0 THEN '0-No Flash-0' + WHEN 1 THEN '1-Flash Fired-1' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || '' + END AS 'zExtAttr-Flash Fired', + zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Length', + zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Length in 35MM', + zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', + CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' + END AS 'zAsset-Derived Camera Capture Device', + CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' + END AS 'zAddAssetAttr-Camera Captured Device', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + CASE zCldMast.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' + END AS 'zCldMast-Imported By', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', + zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', + zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + CASE zAddAssetAttr.ZDATECREATEDSOURCE + WHEN 0 THEN '0-Cloud-Asset-0' + WHEN 1 THEN '1-Local_Asset_EXIF-1' + WHEN 3 THEN '3-Local_Asset_No_EXIF-3' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' + END AS 'zAddAssetAttr-Date Created Source', + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', + zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + CASE zCldMast.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-Not Synced with Cloud-0' + WHEN 1 THEN '1-Pending Upload-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-Synced with Cloud-3' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' + END AS 'zCldMast-Cloud Local State', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', + zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', + zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', + zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts', + CASE zAsset.ZLATITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLATITUDE + END AS 'zAsset-Latitude', + zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', + CASE zAsset.ZLONGITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLONGITUDE + END AS 'zAsset-Longitude', + zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', + CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY + END AS 'zAddAssetAttr-GPS Horizontal Accuracy', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID + WHEN 0 THEN '0-Shifted Location Not Valid-0' + WHEN 1 THEN '1-Shifted Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' + END AS 'zAddAssetAttr-Shifted Location Valid', + CASE + WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Shifted Location Data', + CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID + WHEN 0 THEN '0-Reverse Location Not Valid-0' + WHEN 1 THEN '1-Reverse Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' + END AS 'zAddAssetAttr-Reverse Location Is Valid', + CASE + WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Reverse Location Data', + CASE AAAzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Cloud-1' + WHEN 2 THEN '2-StillTesting-This Device-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' + END AS 'AAAzCldMastMedData-zOPT', + zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', + CASE + WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' + ELSE 'AAAzCldMastMedData-Data_Empty-NULL' + END AS 'AAAzCldMastMedData-Data', + CASE CMzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' + WHEN 2 THEN '2-StillTesting-Local_Asset-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' + END AS 'CldMasterzCldMastMedData-zOPT', + zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', + CASE + WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' + ELSE 'CMzCldMastMedData-Data_Empty-NULL' + END AS 'CMzCldMastMedData-Data', + CASE zAsset.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zAsset-Search Index Rebuild State', + zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History', + zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version', + CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1' + WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2' + WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4' + WHEN 16 THEN '16-STILLTESTING-16' + WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024' + WHEN 2048 THEN '2048-STILLTESTING-2048' + WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096' + ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || '' + END AS 'zMedAnlyAstAttr-Syndication Processing Value', + CASE zAsset.ZORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAsset-Orientation', + CASE zAddAssetAttr.ZORIGINALORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAddAssetAttr-Original Orientation', + CASE zAsset.ZKIND + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + END AS 'zAsset-Kind', + CASE zAsset.ZKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-Panorama-1' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' + END AS 'zAsset-Kind-Sub-Type', + CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 3 THEN '3-Screenshot-3' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' + END AS 'zAddAssetAttr-Cloud Kind Sub Type', + CASE zAsset.ZPLAYBACKSTYLE + WHEN 1 THEN '1-Image-1' + WHEN 2 THEN '2-Image-Animated-2' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 4 THEN '4-Video-4' + WHEN 5 THEN '5-Video-Looping-5' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' + END AS 'zAsset-Playback Style', + CASE zAsset.ZPLAYBACKVARIATION + WHEN 0 THEN '0-No_Playback_Variation-0' + WHEN 1 THEN '1-StillTesting_Playback_Variation-1' + WHEN 2 THEN '2-StillTesting_Playback_Variation-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' + END AS 'zAsset-Playback Variation', + zAsset.ZDURATION AS 'zAsset-Video Duration', + zExtAttr.ZDURATION AS 'zExtAttr-Duration', + zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration', + zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale', + zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State', + zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value', + zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale', + CASE zIntResou.ZDATASTORECLASSID + WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2' + WHEN 3 THEN '3-SWY_Syndication_Asset-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || '' + END AS 'zIntResou-Datastore Class ID', + CASE zAsset.ZCLOUDPLACEHOLDERKIND + WHEN 0 THEN '0-Local&CloudMaster Asset-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-JPG-Asset_Only_PhDa-Thumb-V2-3' + WHEN 4 THEN '4-LPL-JPG-Asset_CPLAsset-OtherType-4' + WHEN 5 THEN '5-Asset_synced_CPL_2_Device-5' + WHEN 6 THEN '6-StillTesting-6' + WHEN 7 THEN '7-LPL-poster-JPG-Asset_CPLAsset-MP4-7' + WHEN 8 THEN '8-LPL-JPG_Asset_CPLAsset-LivePhoto-MOV-8' + WHEN 9 THEN '9-CPL_MP4_Asset_Saved_2_LPL-9' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDPLACEHOLDERKIND || '' + END AS 'zAsset-Cloud Placeholder Kind', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability', + CASE zIntResou.ZLOCALAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || '' + END AS 'zIntResou-Local Availability Target', + CASE zIntResou.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0' + WHEN 1 THEN '1-IR_Asset_Pending-Upload-1' + WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2' + WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || '' + END AS 'zIntResou-Cloud Local State', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability', + CASE zIntResou.ZREMOTEAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || '' + END AS 'zIntResou-Remote Availability Target', + zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master', + zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index', + zIntResou.ZFILEID AS 'zIntResou- File ID', + CASE zIntResou.ZVERSION + WHEN 0 THEN '0-IR_Asset_Standard-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2' + WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || '' + END AS 'zIntResou-Version', + zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type', + CASE zIntResou.ZCLOUDSOURCETYPE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || '' + END AS 'zIntResou-Cloud Source Type', + zIntResou.ZDATALENGTH AS 'zIntResou-Data Length', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID', + CASE zIntResou.ZCLOUDLASTPREFETCHDATE + WHEN 0 THEN '0-NA-0' + ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH') + END AS 'zIntResou-Cloud Last Prefetch Date', + zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count', + DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date', + CASE zIntResou.ZUTICONFORMANCEHINT + WHEN 0 THEN '0-NA-Doesnt_Conform-0' + WHEN 1 THEN '1-UTTypeImage-1' + WHEN 2 THEN '2-UTTypeProRawPhoto-2' + WHEN 3 THEN '3-UTTypeMovie-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || '' + END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint', + CASE zIntResou.ZCOMPACTUTI + WHEN 1 THEN '1-JPEG-THM-1' + WHEN 3 THEN '3-HEIC-3' + WHEN 6 THEN '6-PNG-6' + WHEN 7 THEN '7-StillTesting' + WHEN 9 THEN '9-DNG-9' + WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23' + WHEN 24 THEN '24-MPEG4-24' + WHEN 36 THEN '36-Wallpaper-36' + WHEN 37 THEN '37-Adj-Mutation_Data-37' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || '' + END AS 'zIntResou-Compact-UTI', + zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID', + zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space', + zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID', + CASE zCldMast.ZFULLSIZEJPEGSOURCE + WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0' + WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || '' + END AS 'zCldMast-Full Size JPEG Source', + zAsset.ZHDRGAIN AS 'zAsset-HDR Gain', + CASE zAsset.ZHDRTYPE + WHEN 0 THEN '0-No-HDR-0' + WHEN 3 THEN '3-HDR_Photo-3_RT' + WHEN 4 THEN '4-Non-HDR_Version-4_RT' + WHEN 5 THEN '5-HEVC_Movie-5' + WHEN 6 THEN '6-Panorama-6_RT' + WHEN 10 THEN '10-HDR-Gain-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || '' + END AS 'zAsset-zHDR_Type', + zExtAttr.ZCODEC AS 'zExtAttr-Codec', + zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name', + zCldMast.ZCODECNAME AS 'zCldMast-Codec Name', + zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate', + zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State', + CASE zAsset.ZDEPTHTYPE + WHEN 0 THEN '0-Not_Portrait-0_RT' + ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || '' + END AS 'zAsset-Depth_Type', + zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID', + CASE zAsset.ZAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || '' + END AS 'zAsset-Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || '' + END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || '' + END AS 'zAddAssetAttr-Cloud Recovery State', + zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count', + zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed', + zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed', + zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', + zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', + CASE zAsset.ZHASADJUSTMENTS + WHEN 0 THEN '0-No-Adjustments-0' + WHEN 1 THEN '1-Yes-Adjustments-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || '' + END AS 'zAsset-Has Adjustments-Camera-Effects-Filters', + DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', + zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', + zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage', + CASE zAsset.ZFAVORITE + WHEN 0 THEN '0-Asset Not Favorite-0' + WHEN 1 THEN '1-Asset Favorite-1' + END AS 'zAsset-Favorite', + CASE zAsset.ZHIDDEN + WHEN 0 THEN '0-Asset Not Hidden-0' + WHEN 1 THEN '1-Asset Hidden-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || '' + END AS 'zAsset-Hidden', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK', + CASE zAsset.ZDELETEREASON + WHEN 1 THEN '1-StillTesting Delete-Reason-1' + WHEN 2 THEN '2-StillTesting Delete-Reason-2' + WHEN 3 THEN '3-StillTesting Delete-Reason-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || '' + END AS 'zAsset-Delete-Reason', + CASE zIntResou.ZTRASHEDSTATE + WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || '' + END AS 'zIntResou-Trash State', + DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date', + CASE zAsset.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud Asset Not Deleted-0' + WHEN 1 THEN '1-Cloud Asset Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || '' + END AS 'zAsset-Cloud Delete State', + CASE zIntResou.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud IntResou Not Deleted-0' + WHEN 1 THEN '1-Cloud IntResou Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || '' + END AS 'zIntResou-Cloud Delete State', + CASE zAddAssetAttr.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP Not in Trash-0' + WHEN 1 THEN '1-PTP In Trash-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || '' + END AS 'zAddAssetAttr-PTP Trashed State', + CASE zIntResou.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP IntResou Not in Trash-0' + WHEN 1 THEN '1-PTP IntResou In Trash-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || '' + END AS 'zIntResou-PTP Trashed State', + zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', + DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count', + zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count', + CASE zAddAssetAttr.ZALLOWEDFORANALYSIS + WHEN 0 THEN '0-Asset Not Allowed For Analysis-0' + WHEN 1 THEN '1-Asset Allowed for Analysis-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || '' + END AS 'zAddAssetAttr-Allowed for Analysis', + zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version', + CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW + WHEN 0 THEN '0-No-0' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || '' + END AS 'zAddAssetAttr-Scene Analysis is From Preview', + DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', + CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE + WHEN 0 THEN '0-No-Duplicates-0' + WHEN 1 THEN '1-Has Duplicate-1' + WHEN 2 THEN '2-Is a Duplicate-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || '' + END AS 'zAsset-Duplication Asset Visibility State', + CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE + WHEN 0 THEN '0-No Copy-0' + WHEN 1 THEN '1-Has A Copy-1' + WHEN 2 THEN '2-Has A Copy-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || '' + END AS 'zAddAssetAttr-Destination Asset Copy State', + CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE + WHEN 0 THEN '0-Unknown-StillTesting-0' + WHEN 1 THEN '1-Unknown-StillTesting-1' + WHEN 2 THEN '2-Unknown-StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || '' + END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID', + zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States', + zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State', + zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale', + zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value', + zExtAttr.ZISO AS 'zExtAttr-ISO', + zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode', + zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate', + zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format', + zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance', + zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture', + zExtAttr.ZBITRATE AS 'zExtAttr-BitRate', + zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias', + zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second', + zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed', + zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias', + zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version', + zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset', + zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias', + zAsset.ZHEIGHT AS 'zAsset-Height', + zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height', + zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height', + zAsset.ZWIDTH AS 'zAsset-Width', + zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width', + zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width', + zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', + zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', + zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', + zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', + zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score', + zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State', + zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type', + zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-Quicktime_MOV-file', + CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE + WHEN 0 THEN '0-JPEG Original Resource-0' + WHEN 1 THEN '1-RAW Original Resource-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || '' + END AS 'zAddAssetAttr-Orig Resource Choice', + CASE zAsset.ZSPATIALTYPE + WHEN 0 THEN '0-UnknownTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || '' + END AS 'zAsset-Spatial Type', + zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID', + zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', + zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity-HEX', + zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes', + zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', + zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', + zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update', + zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', + zAsset.Z_ENT AS 'zAsset-zENT', + zAsset.Z_OPT AS 'zAsset-zOPT', + zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', + zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK', + zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key', + zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key', + zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', + zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key', + zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score', + zAsset.ZICONICSCORE AS 'zAsset-Iconic Score', + zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key', + zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID', + zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb', + zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID', + zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT', + zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT', + zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK', + zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK', + zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', + zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID', + zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID', + zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier', + zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint', + zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master', + zCldMast.Z_ENT AS 'zCldMast-zENT', + zCldMast.Z_OPT AS 'zCldMast-zOPT', + zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK', + zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', + zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb', + zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID', + CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', + CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT', + CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK', + AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', + AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT', + AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key', + AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK', + zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes', + zExtAttr.Z_ENT AS 'zExtAttr-zENT', + zExtAttr.Z_OPT AS 'zExtAttr-zOPT', + zExtAttr.ZASSET AS 'zExtAttr-Asset Key', + zIntResou.Z_PK AS 'zIntResou-zPK', + zIntResou.Z_ENT AS 'zIntResou-zENT', + zIntResou.Z_OPT AS 'zIntResou-zOPT', + zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK', + zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata', + zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt', + zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt', + zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK + LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA + LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK + WHERE (zIntResou.ZDATASTORESUBTYPE = 1) & (zIntResou.ZLOCALAVAILABILITY = -1) & (zIntResou.ZFINGERPRINT IS NOT NULL) + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274])) + + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + 'zAsset-zPK-1', + 'zAddAssetAttr-zPK-2', + 'zAsset-UUID = store.cloudphotodb-3', + 'zAddAssetAttr-Master Fingerprint-4', + 'zAddAssetAttr.Adjusted Fingerprint-5', + 'zIntResou-Fingerprint-6', + 'zIntResou-Local Availability-4QueryStart-7', + 'zIntResou-Remote Availability-4QueryStart-8', + 'zIntResou-Resource Type-4QueryStart-9', + 'zIntResou-Datastore Sub-Type-4QueryStart-10', + 'zIntResou-Recipe ID-4QueryStart-11', + 'zAsset Complete-12', + 'zAsset-Bundle Scope-13', + 'zAsset-Syndication State-14', + 'zAsset-Cloud is My Asset-15', + 'zAsset-Cloud is deletable-Asset-16', + 'zAsset-Cloud_Local_State-17', + 'zAsset-Visibility State-18', + 'zExtAttr-Camera Make-19', + 'zExtAttr-Camera Model-20', + 'zExtAttr-Lens Model-21', + 'zExtAttr-Flash Fired-22', + 'zExtAttr-Focal Lenght-23', + 'zExtAttr-Focal Length in 35MM-24', + 'zExtAttr-Digital Zoom Ratio-25', + 'zAsset-Derived Camera Capture Device-26', + 'zAddAssetAttr-Camera Captured Device-27', + 'zAddAssetAttr-Imported by-28', + 'zCldMast-Imported By-29', + 'zAddAssetAttr.Imported by Bundle Identifier-30', + 'zAddAssetAttr-Imported By Display Name-31', + 'zCldMast-Imported by Bundle ID-32', + 'zCldMast-Imported by Display Name-33', + 'zAsset-Saved Asset Type-34', + 'zAsset-Directory-Path-35', + 'zAsset-Filename-36', + 'zAddAssetAttr- Original Filename-37', + 'zCldMast- Original Filename-38', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-39', + 'zAsset-Active Library Scope Participation State-40', + 'zAsset-Library Scope Share State- StillTesting-41', + ('zAsset-Added Date-42', 'datetime'), + ('zAsset- SortToken -CameraRoll-43', 'datetime'), + ('zAddAssetAttr-Date Created Source-44', 'datetime'), + ('zAsset-Date Created-45', 'datetime'), + ('zCldMast-Creation Date-46', 'datetime'), + ('zIntResou-CldMst Date Created-47', 'datetime'), + 'zAddAssetAttr-Time Zone Name-48', + 'zAddAssetAttr-Time Zone Offset-49', + 'zAddAssetAttr-Inferred Time Zone Offset-50', + 'zAddAssetAttr-EXIF-String-51', + ('zAsset-Modification Date-52', 'datetime'), + ('zAsset-Last Shared Date-53', 'datetime'), + 'zCldMast-Cloud Local State-54', + ('zCldMast-Import Date-55', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-56', 'datetime'), + 'zAddAssetAttr-Import Session ID-57', + ('zAddAssetAttr-Alt Import Image Date-58', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-59', + ('zAsset-Cloud Batch Publish Date-60', 'datetime'), + ('zAsset-Cloud Server Publish Date-61', 'datetime'), + 'zAsset-Cloud Download Requests-62', + 'zAsset-Cloud Batch ID-63', + 'zAddAssetAttr-Upload Attempts-64', + 'zAsset-Latitude-65', + 'zExtAttr-Latitude-66', + 'zAsset-Longitude-67', + 'zExtAttr-Longitude-68', + 'zAddAssetAttr-GPS Horizontal Accuracy-69', + 'zAddAssetAttr-Location Hash-70', + 'zAddAssetAttr-Shifted Location Valid-71', + 'zAddAssetAttr-Shifted Location Data-72', + 'zAddAssetAttr-Reverse Location Is Valid-73', + 'zAddAssetAttr-Reverse Location Data-74', + 'AAAzCldMastMedData-zOPT-75', + 'zAddAssetAttr-Media Metadata Type-76', + 'AAAzCldMastMedData-Data-77', + 'CldMasterzCldMastMedData-zOPT-78', + 'zCldMast-Media Metadata Type-79', + 'CMzCldMastMedData-Data-80', + 'zAsset-Search Index Rebuild State-81', + 'zAddAssetAttr-Syndication History-82', + 'zMedAnlyAstAttr-Syndication Processing Version-83', + 'zMedAnlyAstAttr-Syndication Processing Value-84', + 'zAsset-Orientation-85', + 'zAddAssetAttr-Original Orientation-86', + 'zAsset-Kind-87', + 'zAsset-Kind-Sub-Type-88', + 'zAddAssetAttr-Cloud Kind Sub Type-89', + 'zAsset-Playback Style-90', + 'zAsset-Playback Variation-91', + 'zAsset-Video Duration-92', + 'zExtAttr-Duration-93', + 'zAsset-Video CP Duration-94', + 'zAddAssetAttr-Video CP Duration Time Scale-95', + 'zAsset-Video CP Visibility State-96', + 'zAddAssetAttr-Video CP Display Value-97', + 'zAddAssetAttr-Video CP Display Time Scale-98', + 'zIntResou-Datastore Class ID-99', + 'zAsset-Cloud Placeholder Kind-100', + 'zIntResou-Local Availability-101', + 'zIntResou-Local Availability Target-102', + 'zIntResou-Cloud Local State-103', + 'zIntResou-Remote Availability-104', + 'zIntResou-Remote Availability Target-105', + 'zIntResou-Transient Cloud Master-106', + 'zIntResou-Side Car Index-107', + 'zIntResou- File ID-108', + 'zIntResou-Version-109', + 'zAddAssetAttr- Original-File-Size-110', + 'zIntResou-Resource Type-111', + 'zIntResou-Datastore Sub-Type-112', + 'zIntResou-Cloud Source Type-113', + 'zIntResou-Data Length-114', + 'zIntResou-Recipe ID-115', + ('zIntResou-Cloud Last Prefetch Date-116', 'datetime'), + 'zIntResou-Cloud Prefetch Count-117', + ('zIntResou- Cloud-Last-OnDemand Download-Date-118', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-119', + 'zIntResou-Compact-UTI-120', + 'zAsset-Uniform Type ID-121', + 'zAsset-Original Color Space-122', + 'zCldMast-Uniform_Type_ID-123', + 'zCldMast-Full Size JPEG Source-124', + 'zAsset-HDR Gain-125', + 'zAsset-zHDR_Type-126', + 'zExtAttr-Codec-127', + 'zIntResou-Codec Four Char Code Name-128', + 'zCldMast-Codec Name-129', + 'zCldMast-Video Frame Rate-130', + 'zCldMast-Placeholder State-131', + 'zAsset-Depth_Type-132', + 'zAsset-Avalanche UUID-133', + 'zAsset-Avalanche_Pick_Type-BurstAsset-134', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-135', + 'zAddAssetAttr-Cloud Recovery State-136', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-137', + 'zAsset-Deferred Processing Needed-138', + 'zAsset-Video Deferred Processing Needed-139', + 'zAddAssetAttr-Deferred Photo Identifier-140', + 'zAddAssetAttr-Deferred Processing Candidate Options-141', + 'zAsset-Has Adjustments-Camera-Effects-Filters-142', + ('zAsset-Adjustment Timestamp-143', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-144', + 'zAddAssetAttr-Montage-145', + 'zAsset-Favorite-146', + 'zAsset-Hidden-147', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-148', + ('zAsset-Trashed Date-149', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-150', + 'zAsset-Delete-Reason-151', + 'zIntResou-Trash State-152', + ('zIntResou-Trashed Date-153', 'datetime'), + 'zAsset-Cloud Delete State-154', + 'zIntResou-Cloud Delete State-155', + 'zAddAssetAttr-PTP Trashed State-156', + 'zIntResou-PTP Trashed State-157', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-158', + ('zMedAnlyAstAttr-Media Analysis Timestamp-159', 'datetime'), + ('zAsset-Analysis State Modification Date-160', 'datetime'), + 'zAddAssetAttr- Pending View Count-161', + 'zAddAssetAttr- View Count-162', + 'zAddAssetAttr- Pending Play Count-163', + 'zAddAssetAttr- Play Count-164', + 'zAddAssetAttr- Pending Share Count-165', + 'zAddAssetAttr- Share Count-166', + 'zAddAssetAttr-Allowed for Analysis-167', + 'zAddAssetAttr-Scene Analysis Version-168', + 'zAddAssetAttr-Scene Analysis is From Preview-169', + ('zAddAssetAttr-Scene Analysis Timestamp-170', 'datetime'), + 'zAsset-Duplication Asset Visibility State-171', + 'zAddAssetAttr-Destination Asset Copy State-172', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-173', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-174', + 'zCldMast-Source Master For Duplication Scope ID-175', + 'zAddAssetAttr-Source Asset For Duplication ID-176', + 'zCldMast-Source Master for Duplication ID-177', + 'zAddAssetAttr-Variation Suggestions States-178', + 'zAsset-High Frame Rate State-179', + 'zAsset-Video Key Frame Time Scale-180', + 'zAsset-Video Key Frame Value-181', + 'zExtAttr-ISO-182', + 'zExtAttr-Metering Mode-183', + 'zExtAttr-Sample Rate-184', + 'zExtAttr-Track Format-185', + 'zExtAttr-White Balance-186', + 'zExtAttr-Aperture-187', + 'zExtAttr-BitRate-188', + 'zExtAttr-Exposure Bias-189', + 'zExtAttr-Frames Per Second-190', + 'zExtAttr-Shutter Speed-191', + 'zExtAttr-Slush Scene Bias-192', + 'zExtAttr-Slush Version-193', + 'zExtAttr-Slush Preset-194', + 'zExtAttr-Slush Warm Bias-195', + 'zAsset-Height-196', + 'zAddAssetAttr-Original Height-197', + 'zIntResou-UnOriented Height-198', + 'zAsset-Width-199', + 'zAddAssetAttr-Original Width-200', + 'zIntResou-UnOriented Width-201', + 'zAsset-Thumbnail Index-202', + 'zAddAssetAttr-Embedded Thumbnail Height-203', + 'zAddAssetAttr-Embedded Thumbnail Length-204', + 'zAddAssetAttr-Embedded Thumbnail Offset-205', + 'zAddAssetAttr-Embedded Thumbnail Width-206', + 'zAsset-Packed Acceptable Crop Rect-207', + 'zAsset-Packed Badge Attributes-208', + 'zAsset-Packed Preferred Crop Rect-209', + 'zAsset-Curation Score-210', + 'zAsset-Camera Processing Adjustment State-211', + 'zAsset-Depth Type-212', + 'zAsset-Is Magic Carpet-Quicktime_MOV-file-213', + 'zAddAssetAttr-Orig Resource Choice-214', + 'zAsset-Spatial Type-215', + 'zAddAssetAttr-Spatial Over Capture Group ID-216', + 'zAddAssetAttr-Place Annotation Data-217', + 'zAddAssetAttr-Distance Identity-HEX-218', + 'zAddAssetAttr-Edited IPTC Attributes-219', + 'zAddAssetAttr-Title-Comments via Cloud Website-220', + 'zAddAssetAttr-Accessibility Description-221', + 'zAddAssetAttr-Photo Stream Tag ID-222', + 'zAddAssetAttr-Share Type-223', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-224', + 'zAsset-Overall Aesthetic Score-225', + 'zAsset-zENT-226', + 'zAsset-zOPT-227', + 'zAsset-Master= zCldMast-zPK-228', + 'zAsset-Extended Attributes= zExtAttr-zPK-229', + 'zAsset-Import Session Key-230', + 'zAsset-Photo Analysis Attributes Key-231', + 'zAsset-FOK-Cloud Feed Asset Entry Key-232', + 'zAsset-Computed Attributes Asset Key-233', + 'zAsset-Promotion Score-234', + 'zAsset-Iconic Score-235', + 'zAsset-Media Analysis Attributes Key-236', + 'zAsset-Media Group UUID-237', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-238', + 'zAsset.Cloud Collection GUID-239', + 'zAddAssetAttr-zENT-240', + 'ZAddAssetAttr-zOPT-241', + 'zAddAssetAttr-zAsset= zAsset_zPK-242', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-243', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-244', + 'zAddAssetAttr-Public Global UUID-245', + 'zAddAssetAttr-Original Assets UUID-246', + 'zAddAssetAttr-Originating Asset Identifier-247', + 'zAddAssetAttr.Adjusted Fingerprint-248', + 'zCldMast-zPK= zAsset-Master-249', + 'zCldMast-zENT-250', + 'zCldMast-zOPT-251', + 'zCldMast-Moment Share Key= zShare-zPK-252', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-253', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-254', + 'zCldMast-Originating Asset ID-255', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-256', + 'CMzCldMastMedData-zENT-257', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-258', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-259', + 'AAAzCldMastMedData-zENT-260', + 'AAAzCldMastMedData-CldMast key-261', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-262', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-263', + 'zExtAttr-zENT-264', + 'zExtAttr-zOPT-265', + 'zExtAttr-Asset Key-266', + 'zIntResou-zPK-267', + 'zIntResou-zENT-268', + 'zIntResou-zOPT-269', + 'zIntResou-Asset= zAsset_zPK-270', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-271', + 'zMedAnlyAstAttr-zEnt-272', + 'zMedAnlyAstAttr-zOpt-273', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-274') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif version.parse(iosversion) >= version.parse("18"): + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created-4QueryStart', + zAsset.Z_PK AS 'zAsset-zPK', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18', + zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability-4QueryStart', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability-4QueryStart', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type-4QueryStart', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type-4QueryStart', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID-4QueryStart', + CASE zAsset.ZCOMPLETE + WHEN 1 THEN '1-Yes-1' + END AS 'zAsset Complete', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZCLOUDISMYASSET + WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0' + WHEN 1 THEN '1-My_Asset_in_Shared_Album-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || '' + END AS 'zAsset-Cloud is My Asset', + CASE zAsset.ZCLOUDISDELETABLE + WHEN 0 THEN '0-No-0' + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || '' + END AS 'zAsset-Cloud is deletable-Asset', + CASE zAsset.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0' + WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || '' + END AS 'zAsset-Cloud_Local_State', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', + CASE zExtAttr.ZFLASHFIRED + WHEN 0 THEN '0-No Flash-0' + WHEN 1 THEN '1-Flash Fired-1' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || '' + END AS 'zExtAttr-Flash Fired', + zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Length', + zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Length in 35MM', + zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', + CASE zExtAttr.ZGENERATIVEAITYPE + WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0' + WHEN 2 THEN '2-CleanUp-SafetyFilter-2' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' + END AS 'zExtAttr-Generative_AI_Type', + zExtAttr.ZCREDIT AS 'zExtAttr-Credit', + CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' + END AS 'zAsset-Derived Camera Capture Device', + CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' + END AS 'zAddAssetAttr-Camera Captured Device', + zAsset.ZCAPTURESESSIONIDENTIFIER AS 'zAsset-Capture_Session_Identifier-iOS18', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + CASE zCldMast.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' + END AS 'zCldMast-Imported By', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', + zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', + zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', + CASE zAsset.ZISRECENTLYSAVED + WHEN 0 THEN '0-Not_Recently_Saved-0' + WHEN 1 THEN '1-Recently_Saved-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' + END AS 'zAsset-Is_Recently_Saved', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting', + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + CASE zAddAssetAttr.ZDATECREATEDSOURCE + WHEN 0 THEN '0-Cloud-Asset-0' + WHEN 1 THEN '1-Local_Asset_EXIF-1' + WHEN 3 THEN '3-Local_Asset_No_EXIF-3' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' + END AS 'zAddAssetAttr-Date Created Source', + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', + zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + CASE zCldMast.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-Not Synced with Cloud-0' + WHEN 1 THEN '1-Pending Upload-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-Synced with Cloud-3' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' + END AS 'zCldMast-Cloud Local State', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', + zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', + zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', + zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts', + CASE zAsset.ZLATITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLATITUDE + END AS 'zAsset-Latitude', + zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', + CASE zAsset.ZLONGITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLONGITUDE + END AS 'zAsset-Longitude', + zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', + CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY + END AS 'zAddAssetAttr-GPS Horizontal Accuracy', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID + WHEN 0 THEN '0-Shifted Location Not Valid-0' + WHEN 1 THEN '1-Shifted Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' + END AS 'zAddAssetAttr-Shifted Location Valid', + CASE + WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Shifted Location Data', + CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID + WHEN 0 THEN '0-Reverse Location Not Valid-0' + WHEN 1 THEN '1-Reverse Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' + END AS 'zAddAssetAttr-Reverse Location Is Valid', + CASE + WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Reverse Location Data', + CASE AAAzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Cloud-1' + WHEN 2 THEN '2-StillTesting-This Device-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' + END AS 'AAAzCldMastMedData-zOPT', + zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', + CASE + WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' + ELSE 'AAAzCldMastMedData-Data_Empty-NULL' + END AS 'AAAzCldMastMedData-Data', + CASE CMzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' + WHEN 2 THEN '2-StillTesting-Local_Asset-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' + END AS 'CldMasterzCldMastMedData-zOPT', + zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', + CASE + WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' + ELSE 'CMzCldMastMedData-Data_Empty-NULL' + END AS 'CMzCldMastMedData-Data', + CASE zAsset.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zAsset-Search Index Rebuild State', + zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History', + zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version', + CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1' + WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2' + WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4' + WHEN 16 THEN '16-STILLTESTING-16' + WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024' + WHEN 2048 THEN '2048-STILLTESTING-2048' + WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096' + ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || '' + END AS 'zMedAnlyAstAttr-Syndication Processing Value', + CASE zAsset.ZORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAsset-Orientation', + CASE zAddAssetAttr.ZORIGINALORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAddAssetAttr-Original Orientation', + CASE zAsset.ZKIND + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + END AS 'zAsset-Kind', + CASE zAsset.ZISDETECTEDSCREENSHOT + WHEN 0 THEN '0-Not_Screenshot-0' + WHEN 1 THEN '1-Screenshot-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' + END AS 'zAsset-Is_Detected_Screenshot', + CASE zAsset.ZKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-Panorama-1' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' + END AS 'zAsset-Kind-Sub-Type', + CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 3 THEN '3-Screenshot-3' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' + END AS 'zAddAssetAttr-Cloud Kind Sub Type', + CASE zAsset.ZPLAYBACKSTYLE + WHEN 1 THEN '1-Image-1' + WHEN 2 THEN '2-Image-Animated-2' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 4 THEN '4-Video-4' + WHEN 5 THEN '5-Video-Looping-5' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' + END AS 'zAsset-Playback Style', + CASE zAsset.ZPLAYBACKVARIATION + WHEN 0 THEN '0-No_Playback_Variation-0' + WHEN 1 THEN '1-StillTesting_Playback_Variation-1' + WHEN 2 THEN '2-StillTesting_Playback_Variation-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' + END AS 'zAsset-Playback Variation', + CASE zAddAssetAttr.ZVIEWPRESENTATION + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' + END AS 'zAddAssetAttr-View_Presentation-iOS18', + zAsset.ZDURATION AS 'zAsset-Video Duration', + zExtAttr.ZDURATION AS 'zExtAttr-Duration', + zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration', + zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale', + zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State', + zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value', + zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale', + CASE zIntResou.ZDATASTORECLASSID + WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2' + WHEN 3 THEN '3-SWY_Syndication_Asset-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || '' + END AS 'zIntResou-Datastore Class ID', + CASE zAsset.ZCLOUDPLACEHOLDERKIND + WHEN 0 THEN '0-Local&CloudMaster Asset-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-JPG-Asset_Only_PhDa-Thumb-V2-3' + WHEN 4 THEN '4-LPL-JPG-Asset_CPLAsset-OtherType-4' + WHEN 5 THEN '5-Asset_synced_CPL_2_Device-5' + WHEN 6 THEN '6-StillTesting-6' + WHEN 7 THEN '7-LPL-poster-JPG-Asset_CPLAsset-MP4-7' + WHEN 8 THEN '8-LPL-JPG_Asset_CPLAsset-LivePhoto-MOV-8' + WHEN 9 THEN '9-CPL_MP4_Asset_Saved_2_LPL-9' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDPLACEHOLDERKIND || '' + END AS 'zAsset-Cloud Placeholder Kind', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability', + CASE zIntResou.ZLOCALAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || '' + END AS 'zIntResou-Local Availability Target', + CASE zIntResou.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0' + WHEN 1 THEN '1-IR_Asset_Pending-Upload-1' + WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2' + WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || '' + END AS 'zIntResou-Cloud Local State', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability', + CASE zIntResou.ZREMOTEAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || '' + END AS 'zIntResou-Remote Availability Target', + zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master', + zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index', + zIntResou.ZFILEID AS 'zIntResou- File ID', + CASE zIntResou.ZVERSION + WHEN 0 THEN '0-IR_Asset_Standard-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2' + WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || '' + END AS 'zIntResou-Version', + zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type', + CASE zIntResou.ZCLOUDSOURCETYPE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || '' + END AS 'zIntResou-Cloud Source Type', + zIntResou.ZDATALENGTH AS 'zIntResou-Data Length', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID', + CASE zIntResou.ZCLOUDLASTPREFETCHDATE + WHEN 0 THEN '0-NA-0' + ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH') + END AS 'zIntResou-Cloud Last Prefetch Date', + zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count', + DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date', + CASE zIntResou.ZUTICONFORMANCEHINT + WHEN 0 THEN '0-NA-Doesnt_Conform-0' + WHEN 1 THEN '1-UTTypeImage-1' + WHEN 2 THEN '2-UTTypeProRawPhoto-2' + WHEN 3 THEN '3-UTTypeMovie-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || '' + END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint', + CASE zIntResou.ZCOMPACTUTI + WHEN 1 THEN '1-JPEG-THM-1' + WHEN 3 THEN '3-HEIC-3' + WHEN 6 THEN '6-PNG-6' + WHEN 7 THEN '7-StillTesting' + WHEN 9 THEN '9-DNG-9' + WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23' + WHEN 24 THEN '24-MPEG4-24' + WHEN 36 THEN '36-Wallpaper-36' + WHEN 37 THEN '37-Adj-Mutation_Data-37' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || '' + END AS 'zIntResou-Compact-UTI', + zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID', + zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space', + zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID', + CASE zCldMast.ZFULLSIZEJPEGSOURCE + WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0' + WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || '' + END AS 'zCldMast-Full Size JPEG Source', + zAsset.ZHDRGAIN AS 'zAsset-HDR Gain', + CASE zAsset.ZHDRTYPE + WHEN 0 THEN '0-No-HDR-0' + WHEN 3 THEN '3-HDR_Photo-3_RT' + WHEN 4 THEN '4-Non-HDR_Version-4_RT' + WHEN 5 THEN '5-HEVC_Movie-5' + WHEN 6 THEN '6-Panorama-6_RT' + WHEN 10 THEN '10-HDR-Gain-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || '' + END AS 'zAsset-zHDR_Type', + zExtAttr.ZCODEC AS 'zExtAttr-Codec', + zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name', + zCldMast.ZCODECNAME AS 'zCldMast-Codec Name', + zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate', + zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State', + CASE zAsset.ZDEPTHTYPE + WHEN 0 THEN '0-Not_Portrait-0_RT' + ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || '' + END AS 'zAsset-Depth_Type', + zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID', + CASE zAsset.ZAVALANCHEKIND + WHEN 0 THEN '0-No_Avalanche iOS18_Still_Testing-0' + WHEN 1 THEN '1-Is_Avalanche iOS18_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEKIND || '' + END AS 'zAsset-Avalanche_Kind-iOS18', + CASE zAsset.ZAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || '' + END AS 'zAsset-Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || '' + END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || '' + END AS 'zAddAssetAttr-Cloud Recovery State', + zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count', + zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed', + zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed', + zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', + zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', + CASE zAsset.ZADJUSTMENTSSTATE + WHEN 0 THEN '0-No-Adjustments-0' + WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2' + WHEN 3 THEN '3-Adjusted-Camera-lens-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' + END AS 'zAsset-Adjustments_State', + DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', + DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date', + zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', + zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage', + CASE zCompSyncAttr.ZLOCALANALYSISMAJORVERSION + WHEN 1 THEN '1-Is_Local_Analysis_Major_Version-1' + ELSE 'Unknown-New-Value!: ' || zCompSyncAttr.ZLOCALANALYSISMAJORVERSION || '' + END AS 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18', + CASE zAsset.ZFAVORITE + WHEN 0 THEN '0-Asset Not Favorite-0' + WHEN 1 THEN '1-Asset Favorite-1' + END AS 'zAsset-Favorite', + CASE zAsset.ZHIDDEN + WHEN 0 THEN '0-Asset Not Hidden-0' + WHEN 1 THEN '1-Asset Hidden-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || '' + END AS 'zAsset-Hidden', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK', + CASE zAsset.ZDELETEREASON + WHEN 1 THEN '1-StillTesting Delete-Reason-1' + WHEN 2 THEN '2-StillTesting Delete-Reason-2' + WHEN 3 THEN '3-StillTesting Delete-Reason-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || '' + END AS 'zAsset-Delete-Reason', + CASE zIntResou.ZTRASHEDSTATE + WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || '' + END AS 'zIntResou-Trash State', + DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date', + CASE zAsset.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud Asset Not Deleted-0' + WHEN 1 THEN '1-Cloud Asset Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || '' + END AS 'zAsset-Cloud Delete State', + CASE zIntResou.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud IntResou Not Deleted-0' + WHEN 1 THEN '1-Cloud IntResou Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || '' + END AS 'zIntResou-Cloud Delete State', + CASE zAddAssetAttr.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP Not in Trash-0' + WHEN 1 THEN '1-PTP In Trash-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || '' + END AS 'zAddAssetAttr-PTP Trashed State', + CASE zIntResou.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP IntResou Not in Trash-0' + WHEN 1 THEN '1-PTP IntResou In Trash-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || '' + END AS 'zIntResou-PTP Trashed State', + zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', + DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modification Date', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count', + zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count', + CASE zAddAssetAttr.ZALLOWEDFORANALYSIS + WHEN 0 THEN '0-Asset Not Allowed For Analysis-0' + WHEN 1 THEN '1-Asset Allowed for Analysis-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || '' + END AS 'zAddAssetAttr-Allowed for Analysis', + zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version', + CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW + WHEN 0 THEN '0-No-0' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || '' + END AS 'zAddAssetAttr-Scene Analysis is From Preview', + DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', + CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE + WHEN 0 THEN '0-No-Duplicates-0' + WHEN 1 THEN '1-Has Duplicate-1' + WHEN 2 THEN '2-Is a Duplicate-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || '' + END AS 'zAsset-Duplication Asset Visibility State', + CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE + WHEN 0 THEN '0-No Copy-0' + WHEN 1 THEN '1-Has A Copy-1' + WHEN 2 THEN '2-Has A Copy-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || '' + END AS 'zAddAssetAttr-Destination Asset Copy State', + CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE + WHEN 0 THEN '0-Unknown-StillTesting-0' + WHEN 1 THEN '1-Unknown-StillTesting-1' + WHEN 2 THEN '2-Unknown-StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || '' + END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID', + zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States', + zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State', + zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale', + zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value', + CASE zAsset.ZCURRENTSLEETCAST + WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0' + WHEN 1 THEN '1-NotYetObs iOS18_Still_Testing-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCURRENTSLEETCAST || '' + END AS 'zAsset-Current_Sleet_Cast-iOS18', + CASE zAddAssetAttr.ZSLEETISREVERSIBLE + WHEN 0 THEN '0-Obs in iOS 18 still testing-0' + WHEN 1 THEN '1-Obs in iOS 18 still testing-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSLEETISREVERSIBLE || '' + END AS 'zAddAssetAttr.Sleet_Is_Reversible-iOS18', + zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version-iOS18', + zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity-iOS18', + zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias-iOS18', + zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias-iOS18', + CASE zExtAttr.ZSLEETCAST + WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZSLEETCAST || '' + END AS 'zExtAttr-Sleet_Cast-iOS18', + zExtAttr.ZISO AS 'zExtAttr-ISO', + zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode', + zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate', + zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format', + zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance', + zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture', + zExtAttr.ZBITRATE AS 'zExtAttr-BitRate', + zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias', + zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second', + zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed', + zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias', + zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version', + zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset', + zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias', + zAsset.ZHEIGHT AS 'zAsset-Height', + zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height', + zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height', + zAsset.ZWIDTH AS 'zAsset-Width', + zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width', + zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width', + zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', + zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', + zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', + zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', + zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score', + zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State', + zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type', + zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-Quicktime_MOV-file', + CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE + WHEN 0 THEN '0-JPEG Original Resource-0' + WHEN 1 THEN '1-RAW Original Resource-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || '' + END AS 'zAddAssetAttr-Orig Resource Choice', + CASE zAsset.ZSPATIALTYPE + WHEN 0 THEN '0-UnknownTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || '' + END AS 'zAsset-Spatial Type', + zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID', + zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', + zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity-HEX', + zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes', + zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', + zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', + zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update', + zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', + zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18', + zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version-iOS18', + zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version-iOS18', + zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18', + zAsset.Z_ENT AS 'zAsset-zENT', + zAsset.Z_OPT AS 'zAsset-zOPT', + zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', + zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK', + zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key', + zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key', + zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', + zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key', + zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score', + zAsset.ZICONICSCORE AS 'zAsset-Iconic Score', + zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key', + zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID', + zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb', + zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID', + zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT', + zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT', + zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK', + zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK', + zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', + zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID', + zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID', + zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier', + zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master', + zCldMast.Z_ENT AS 'zCldMast-zENT', + zCldMast.Z_OPT AS 'zCldMast-zOPT', + zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK', + zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', + zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb', + zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID', + CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', + CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT', + CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK', + AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', + AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT', + AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key', + AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK', + zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18', + zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18', + zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18', + zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT-iOS18', + zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT-iOS18', + zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage-iOS18', + zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18', + zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes', + zExtAttr.Z_ENT AS 'zExtAttr-zENT', + zExtAttr.Z_OPT AS 'zExtAttr-zOPT', + zExtAttr.ZASSET AS 'zExtAttr-Asset Key', + zIntResou.Z_PK AS 'zIntResou-zPK', + zIntResou.Z_ENT AS 'zIntResou-zENT', + zIntResou.Z_OPT AS 'zIntResou-zOPT', + zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK', + zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata', + zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt', + zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt', + zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK + LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA + LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK + LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES + WHERE (zIntResou.ZDATASTORESUBTYPE = 1) & (zIntResou.ZLOCALAVAILABILITY = -1) & (zIntResou.ZFINGERPRINT IS NOT NULL) + ORDER BY zAsset.ZDATECREATED + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302])) + + data_headers = (('zAsset-Date Created-4QueryStart-0', 'datetime'), + 'zAsset-zPK-1', + 'zAddAssetAttr-zPK-2', + 'zAsset-UUID = store.cloudphotodb-3', + 'zAddAssetAttr-Original Stable Hash-iOS18-4', + 'zIntResou-Fingerprint-5', + 'zAddAssetAttr.Adjusted Stable Hash-iOS18-6', + 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-7', + 'zIntResou-Stable Hash-iOS18-8', + 'zIntResou-Local Availability-4QueryStart-9', + 'zIntResou-Remote Availability-4QueryStart-10', + 'zIntResou-Resource Type-4QueryStart-11', + 'zIntResou-Datastore Sub-Type-4QueryStart-12', + 'zIntResou-Recipe ID-4QueryStart-13', + 'zAsset Complete-14', + 'zAsset-Bundle Scope-15', + 'zAsset-Syndication State-16', + 'zAsset-Cloud is My Asset-17', + 'zAsset-Cloud is deletable-Asset-18', + 'zAsset-Cloud_Local_State-19', + 'zAsset-Visibility State-20', + 'zExtAttr-Camera Make-21', + 'zExtAttr-Camera Model-22', + 'zExtAttr-Lens Model-23', + 'zExtAttr-Flash Fired-24', + 'zExtAttr-Focal Length-25', + 'zExtAttr-Focal Length in 35MM-26', + 'zExtAttr-Digital Zoom Ratio-27', + 'zExtAttr-Generative_AI_Type-iOS18-28', + 'zExtAttr-Credit-iOS18-29', + 'zAsset-Derived Camera Capture Device-30', + 'zAddAssetAttr-Camera Captured Device-31', + 'zAsset-Capture_Session_Identifier-iOS18-32', + 'zAddAssetAttr-Imported by-33', + 'zCldMast-Imported By-34', + 'zAddAssetAttr.Imported by Bundle Identifier-35', + 'zAddAssetAttr-Imported By Display Name-36', + 'zCldMast-Imported by Bundle ID-37', + 'zCldMast-Imported by Display Name-38', + 'zAsset-Is_Recently_Saved-iOS18-39', + 'zAsset-Saved Asset Type-40', + 'zAsset-Directory-Path-41', + 'zAsset-Filename-42', + 'zAddAssetAttr- Original Filename-43', + 'zCldMast- Original Filename-44', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-45', + 'zAsset-Active Library Scope Participation State-46', + 'zAsset-Library Scope Share State- StillTesting-47', + ('zAsset-Added Date-48', 'datetime'), + ('zAsset- SortToken -CameraRoll-49', 'datetime'), + ('zAddAssetAttr-Date Created Source-50', 'datetime'), + ('zAsset-Date Created-51', 'datetime'), + ('zCldMast-Creation Date-52', 'datetime'), + ('zIntResou-CldMst Date Created-53', 'datetime'), + 'zAddAssetAttr-Time Zone Name-54', + 'zAddAssetAttr-Time Zone Offset-55', + 'zAddAssetAttr-Inferred Time Zone Offset-56', + 'zAddAssetAttr-EXIF-String-57', + ('zAsset-Modification Date-58', 'datetime'), + ('zAsset-Last Shared Date-59', 'datetime'), + 'zCldMast-Cloud Local State-60', + ('zCldMast-Import Date-61', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-62', 'datetime'), + 'zAddAssetAttr-Import Session ID-63', + ('zAddAssetAttr-Alt Import Image Date-64', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting-65', + ('zAsset-Cloud Batch Publish Date-66', 'datetime'), + ('zAsset-Cloud Server Publish Date-67', 'datetime'), + 'zAsset-Cloud Download Requests-68', + 'zAsset-Cloud Batch ID-69', + 'zAddAssetAttr-Upload Attempts-70', + 'zAsset-Latitude-71', + 'zExtAttr-Latitude-72', + 'zAsset-Longitude-73', + 'zExtAttr-Longitude-74', + 'zAddAssetAttr-GPS Horizontal Accuracy-75', + 'zAddAssetAttr-Location Hash-76', + 'zAddAssetAttr-Shifted Location Valid-77', + 'zAddAssetAttr-Shifted Location Data-78', + 'zAddAssetAttr-Reverse Location Is Valid-79', + 'zAddAssetAttr-Reverse Location Data-80', + 'AAAzCldMastMedData-zOPT-81', + 'zAddAssetAttr-Media Metadata Type-82', + 'AAAzCldMastMedData-Data-83', + 'CldMasterzCldMastMedData-zOPT-84', + 'zCldMast-Media Metadata Type-85', + 'CMzCldMastMedData-Data-86', + 'zAsset-Search Index Rebuild State-87', + 'zAddAssetAttr-Syndication History-88', + 'zMedAnlyAstAttr-Syndication Processing Version-89', + 'zMedAnlyAstAttr-Syndication Processing Value-90', + 'zAsset-Orientation-91', + 'zAddAssetAttr-Original Orientation-92', + 'zAsset-Kind-93', + 'zAsset-Is_Detected_Screenshot-iOS18-94', + 'zAsset-Kind-Sub-Type-95', + 'zAddAssetAttr-Cloud Kind Sub Type-96', + 'zAsset-Playback Style-97', + 'zAsset-Playback Variation-98', + 'zAddAssetAttr-View_Presentation-iOS18-99', + 'zAsset-Video Duration-100', + 'zExtAttr-Duration-101', + 'zAsset-Video CP Duration-102', + 'zAddAssetAttr-Video CP Duration Time Scale-103', + 'zAsset-Video CP Visibility State-104', + 'zAddAssetAttr-Video CP Display Value-105', + 'zAddAssetAttr-Video CP Display Time Scale-106', + 'zIntResou-Datastore Class ID-107', + 'zAsset-Cloud Placeholder Kind-108', + 'zIntResou-Local Availability-109', + 'zIntResou-Local Availability Target-110', + 'zIntResou-Cloud Local State-111', + 'zIntResou-Remote Availability-112', + 'zIntResou-Remote Availability Target-113', + 'zIntResou-Transient Cloud Master-114', + 'zIntResou-Side Car Index-115', + 'zIntResou- File ID-116', + 'zIntResou-Version-117', + 'zAddAssetAttr- Original-File-Size-118', + 'zIntResou-Resource Type-119', + 'zIntResou-Datastore Sub-Type-120', + 'zIntResou-Cloud Source Type-121', + 'zIntResou-Data Length-122', + 'zIntResou-Recipe ID-123', + ('zIntResou-Cloud Last Prefetch Date-124', 'datetime'), + 'zIntResou-Cloud Prefetch Count-125', + ('zIntResou- Cloud-Last-OnDemand Download-Date-126', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-127', + 'zIntResou-Compact-UTI-128', + 'zAsset-Uniform Type ID-129', + 'zAsset-Original Color Space-130', + 'zCldMast-Uniform_Type_ID-131', + 'zCldMast-Full Size JPEG Source-132', + 'zAsset-HDR Gain-133', + 'zAsset-zHDR_Type-134', + 'zExtAttr-Codec-135', + 'zIntResou-Codec Four Char Code Name-136', + 'zCldMast-Codec Name-137', + 'zCldMast-Video Frame Rate-138', + 'zCldMast-Placeholder State-139', + 'zAsset-Depth_Type-140', + 'zAsset-Avalanche UUID-141', + 'zAsset-Avalanche_Kind-iOS18-142', + 'zAsset-Avalanche_Pick_Type-BurstAsset-143', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-144', + 'zAddAssetAttr-Cloud Recovery State-145', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-146', + 'zAsset-Deferred Processing Needed-147', + 'zAsset-Video Deferred Processing Needed-148', + 'zAddAssetAttr-Deferred Photo Identifier-149', + 'zAddAssetAttr-Deferred Processing Candidate Options-150', + 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-151', + ('zAsset-Adjustment Timestamp-152', 'datetime'), + 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-153', + 'zAddAssetAttr-Editor Bundle ID-154', + 'zAddAssetAttr-Montage-155', + 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-156', + 'zAsset-Favorite-157', + 'zAsset-Hidden-158', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-159', + ('zAsset-Trashed Date-160', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-161', + 'zAsset-Delete-Reason-162', + 'zIntResou-Trash State-163', + ('zIntResou-Trashed Date-164', 'datetime'), + 'zAsset-Cloud Delete State-165', + 'zIntResou-Cloud Delete State-166', + 'zAddAssetAttr-PTP Trashed State-167', + 'zIntResou-PTP Trashed State-168', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-169', + ('zMedAnlyAstAttr-Media Analysis Timestamp-170', 'datetime'), + ('zAsset-Analysis State Modification Date-171', 'datetime'), + 'zAddAssetAttr- Pending View Count-172', + 'zAddAssetAttr- View Count-173', + 'zAddAssetAttr- Pending Play Count-174', + 'zAddAssetAttr- Play Count-175', + 'zAddAssetAttr- Pending Share Count-176', + 'zAddAssetAttr- Share Count-177', + 'zAddAssetAttr-Allowed for Analysis-178', + 'zAddAssetAttr-Scene Analysis Version-179', + 'zAddAssetAttr-Scene Analysis is From Preview-180', + ('zAddAssetAttr-Scene Analysis Timestamp-181', 'datetime'), + 'zAsset-Duplication Asset Visibility State-182', + 'zAddAssetAttr-Destination Asset Copy State-183', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-184', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-185', + 'zCldMast-Source Master For Duplication Scope ID-186', + 'zAddAssetAttr-Source Asset For Duplication ID-187', + 'zCldMast-Source Master for Duplication ID-188', + 'zAddAssetAttr-Variation Suggestions States-189', + 'zAsset-High Frame Rate State-190', + 'zAsset-Video Key Frame Time Scale-191', + 'zAsset-Video Key Frame Value-192', + 'zAsset-Current_Sleet_Cast-iOS18-193', + 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-194', + 'zExtAttr-Sleet_Rendering_Version-iOS18-195', + 'zExtAttr-Sleet_Intensity-iOS18-196', + 'zExtAttr-Sleet_Tone_Bias-iOS18-197', + 'zExtAttr-Sleet_Color_Bias-iOS18-198', + 'zExtAttr-Sleet_Cast-iOS18-199', + 'zExtAttr-ISO-200', + 'zExtAttr-Metering Mode-201', + 'zExtAttr-Sample Rate-202', + 'zExtAttr-Track Format-203', + 'zExtAttr-White Balance-204', + 'zExtAttr-Aperture-205', + 'zExtAttr-BitRate-206', + 'zExtAttr-Exposure Bias-207', + 'zExtAttr-Frames Per Second-208', + 'zExtAttr-Shutter Speed-209', + 'zExtAttr-Slush Scene Bias-210', + 'zExtAttr-Slush Version-211', + 'zExtAttr-Slush Preset-212', + 'zExtAttr-Slush Warm Bias-213', + 'zAsset-Height-214', + 'zAddAssetAttr-Original Height-215', + 'zIntResou-UnOriented Height-216', + 'zAsset-Width-217', + 'zAddAssetAttr-Original Width-218', + 'zIntResou-UnOriented Width-219', + 'zAsset-Thumbnail Index-220', + 'zAddAssetAttr-Embedded Thumbnail Height-221', + 'zAddAssetAttr-Embedded Thumbnail Length-222', + 'zAddAssetAttr-Embedded Thumbnail Offset-223', + 'zAddAssetAttr-Embedded Thumbnail Width-224', + 'zAsset-Packed Acceptable Crop Rect-225', + 'zAsset-Packed Badge Attributes-226', + 'zAsset-Packed Preferred Crop Rect-227', + 'zAsset-Curation Score-228', + 'zAsset-Camera Processing Adjustment State-229', + 'zAsset-Depth Type-230', + 'zAsset-Is Magic Carpet-Quicktime_MOV-file-231', + 'zAddAssetAttr-Orig Resource Choice-232', + 'zAsset-Spatial Type-233', + 'zAddAssetAttr-Spatial Over Capture Group ID-234', + 'zAddAssetAttr-Place Annotation Data-235', + 'zAddAssetAttr-Distance Identity-HEX-236', + 'zAddAssetAttr-Edited IPTC Attributes-237', + 'zAddAssetAttr-Title-Comments via Cloud Website-238', + 'zAddAssetAttr-Accessibility Description-239', + 'zAddAssetAttr-Photo Stream Tag ID-240', + 'zAddAssetAttr-Share Type-241', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-242', + 'zAsset-Overall Aesthetic Score-243', + 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18-244', + 'zMedAnlyAstAttr-Image_Caption_Version-iOS18-245', + 'zMedAnlyAstAttr-Video_Caption_Version-iOS18-246', + 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18-247', + 'zAsset-zENT-248', + 'zAsset-zOPT-249', + 'zAsset-Master= zCldMast-zPK-250', + 'zAsset-Extended Attributes= zExtAttr-zPK-251', + 'zAsset-Import Session Key-252', + 'zAsset-Photo Analysis Attributes Key-253', + 'zAsset-FOK-Cloud Feed Asset Entry Key-254', + 'zAsset-Computed Attributes Asset Key-255', + 'zAsset-Promotion Score-256', + 'zAsset-Iconic Score-257', + 'zAsset-Media Analysis Attributes Key-258', + 'zAsset-Media Group UUID-259', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-260', + 'zAsset.Cloud Collection GUID-261', + 'zAddAssetAttr-zENT-262', + 'ZAddAssetAttr-zOPT-263', + 'zAddAssetAttr-zAsset= zAsset_zPK-264', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-265', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-266', + 'zAddAssetAttr-Public Global UUID-267', + 'zAddAssetAttr-Original Assets UUID-268', + 'zAddAssetAttr-Originating Asset Identifier-269', + 'zCldMast-zPK= zAsset-Master-270', + 'zCldMast-zENT-271', + 'zCldMast-zOPT-272', + 'zCldMast-Moment Share Key= zShare-zPK-273', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-274', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-275', + 'zCldMast-Originating Asset ID-276', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-277', + 'CMzCldMastMedData-zENT-278', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-279', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-280', + 'AAAzCldMastMedData-zENT-281', + 'AAAzCldMastMedData-CldMast key-282', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-283', + 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18-284', + 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-285', + 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-286', + 'zCompSyncAttr-zENT-iOS18-287', + 'zCompSyncAttr-zOPT-iOS18-288', + 'zCompSyncAttr-Local_Analysis_Stage-iOS18-289', + 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-290', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-291', + 'zExtAttr-zENT-292', + 'zExtAttr-zOPT-293', + 'zExtAttr-Asset Key-294', + 'zIntResou-zPK-295', + 'zIntResou-zENT-296', + 'zIntResou-zOPT-297', + 'zIntResou-Asset= zAsset_zPK-298', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-299', + 'zMedAnlyAstAttr-zEnt-300', + 'zMedAnlyAstAttr-zOpt-301', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-302') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph5HasLocations.py b/scripts/artifacts/Ph5HasLocations.py index 1529ab45..4e671f8f 100644 --- a/scripts/artifacts/Ph5HasLocations.py +++ b/scripts/artifacts/Ph5HasLocations.py @@ -1,41 +1,66 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses basic asset record data from Photos.sqlite for assets that have valid locations and supports iOS 11-18. -# The results for this script will contain one record per ZASSET table Z_PK value. -# This parser is based on research and SQLite queries written by Scott Koenig -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph5_1AssetshavevalidlocationsPhDaPsql': { + 'name': 'Ph5.1-Assets have valid locations-PhDaPsql', + 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for assets that have valid' + ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' + ' and supports iOS 11-18. The results for this script will contain' + ' one row per ZASSET table Z_PK value.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-C-Other_Artifacts', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + }, + 'Ph5_2AssetshavevalidlocationsSyndPL': { + 'name': 'Ph5.2-Assets have valid locations-SyndPL', + 'description': 'Parses basic asset row data from Syndication.photoslibrary-database-Photos.sqlite' + ' for assets that have valid locations from the ZASSET and ZEXTENDEDATTRIBUTES table' + ' ZLATITUDE fields and supports iOS 11-18. The results for this script will contain' + ' one row per ZASSET table Z_PK value.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', + 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import plistlib import nska_deserialize as nd import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc +@artifact_processor +def Ph5_1AssetshavevalidlocationsPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) -def get_ph5haslocationsphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for PhotosData-Photos.sqlite assets with valid locations from iOS " + iosversion) + logfunc("Unsupported version for PhotosData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("13")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZLATITUDE @@ -80,97 +105,75 @@ def get_ph5haslocationsphdapsql(files_found, report_folder, seeker, wrap_text, t LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAsset.ZLATITUDE > 0 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_geoplaceresult = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_geoplaceresult = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[10] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[4] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[10]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - for key, val in plist.items(): - if key == "geoPlaceResult": - aaashiftedlocation_geoplaceresult = val - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[13] is not None: - pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[4] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[13]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - for key, val in plist.items(): - if key == "geoPlaceResult": - aaareverselocation_geoplaceresult = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - aaashiftedlocation_geoplaceresult, - row[11], row[12], - aaareverselocation_geoplaceresult, - row[14], row[15], row[16], row[17])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets that have valid' \ - ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \ - ' and supports iOS 11-13. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph5.1-Has Locations-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph5.1-Has Locations-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Latitude-1', - 'zAsset-Longitude-2', - 'zAsset-Directory-Path-3', - 'zAsset-Filename-4', - 'zAddAssetAttr- Original Filename-5', - 'zCldMast- Original Filename-6', - 'zCldMast-Import Session ID- AirDrop-StillTesting-7', - 'zAddAssetAttr-Shifted Location Valid-8', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-9', - 'zAddAssetAttr-Shifted Location Data-geoPlaceResult-10', - 'zAddAssetAttr-Reverse Location Is Valid-11', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-12', - 'zAddAssetAttr-Reverse Location Data-geoPlaceResult-13', - 'zAsset-zPK-14', - 'zAddAssetAttr-zPK-15', - 'zAsset-UUID = store.cloudphotodb-16', - 'zAddAssetAttr-Master Fingerprint-17') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph5.1-Has Locations-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph5.1-Has Locations-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite assets with valid locations') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + aaashiftedlocation_geoplaceresult = '' + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + aaareverselocation_geoplaceresult = '' + + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + if row[10] is not None: + pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[4] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[10]) + + with open(pathto, "rb") as fp: + plist = plistlib.load(fp) + for key, val in plist.items(): + if key == "geoPlaceResult": + aaashiftedlocation_geoplaceresult = val + + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + if row[13] is not None: + pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[4] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[13]) + + with open(pathto, "rb") as fp: + plist = plistlib.load(fp) + for key, val in plist.items(): + if key == "geoPlaceResult": + aaareverselocation_geoplaceresult = val + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + aaashiftedlocation_geoplaceresult, + row[11], row[12], + aaareverselocation_geoplaceresult, + row[14], row[15], row[16], row[17])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Latitude-1', + 'zAsset-Longitude-2', + 'zAsset-Directory-Path-3', + 'zAsset-Filename-4', + 'zAddAssetAttr- Original Filename-5', + 'zCldMast- Original Filename-6', + 'zCldMast-Import Session ID- AirDrop-StillTesting-7', + 'zAddAssetAttr-Shifted Location Valid-8', + 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-9', + 'zAddAssetAttr-Shifted Location Data-geoPlaceResult-10', + 'zAddAssetAttr-Reverse Location Is Valid-11', + 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-12', + 'zAddAssetAttr-Reverse Location Data-geoPlaceResult-13', + 'zAsset-zPK-14', + 'zAddAssetAttr-zPK-15', + 'zAsset-UUID = store.cloudphotodb-16', + 'zAddAssetAttr-Master Fingerprint-17') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZLATITUDE @@ -245,114 +248,92 @@ def get_ph5haslocationsphdapsql(files_found, report_folder, seeker, wrap_text, t CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA WHERE zAsset.ZLATITUDE > 0 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[10] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[4] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[10]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[4]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[4]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[13] is not None: - pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[4] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[13]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[4]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[4]) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - aaashiftedlocation_postal_address, - row[11], row[12], - aaareverselocation_postal_address, - row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets that have valid' \ - ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \ - ' and supports iOS 11-13. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph5.1-Has Locations-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph5.1-Has Locations-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Latitude-1', - 'zAsset-Longitude-2', - 'zAsset-Directory-Path-3', - 'zAsset-Filename-4', - 'zAddAssetAttr- Original Filename-5', - 'zCldMast- Original Filename-6', - 'zCldMast-Import Session ID- AirDrop-StillTesting-7', - 'zAddAssetAttr-Shifted Location Valid-8', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-9', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-10', - 'zAddAssetAttr-Reverse Location Is Valid-11', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-12', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-13', - 'AAAzCldMastMedData-zOPT-14', - 'zAddAssetAttr-Media Metadata Type-15', - 'AAAzCldMastMedData-Data-16', - 'CldMasterzCldMastMedData-zOPT-17', - 'zCldMast-Media Metadata Type-18', - 'CMzCldMastMedData-Data-19', - 'zAsset-zPK-20', - 'zAddAssetAttr-zPK-21', - 'zAsset-UUID = store.cloudphotodb-22', - 'zAddAssetAttr-Master Fingerprint-23') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph5.1-Has Locations-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph5.1-Has Locations-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite assets with valid locations') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + aaashiftedlocation_postal_address = '' + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + aaareverselocation_postal_address = '' + + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + if row[10] is not None: + pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[4] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[10]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + aaashiftedlocation_postal_address = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[4]) + else: + logfunc('Error reading exported plist from zAsset-Filename ' + row[4]) + + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + if row[13] is not None: + pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[4] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[13]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + aaareverselocation_postal_address = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[4]) + else: + logfunc('Error reading exported plist from zAsset-Filename ' + row[4]) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + aaashiftedlocation_postal_address, + row[11], row[12], + aaareverselocation_postal_address, + row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Latitude-1', + 'zAsset-Longitude-2', + 'zAsset-Directory-Path-3', + 'zAsset-Filename-4', + 'zAddAssetAttr- Original Filename-5', + 'zCldMast- Original Filename-6', + 'zCldMast-Import Session ID- AirDrop-StillTesting-7', + 'zAddAssetAttr-Shifted Location Valid-8', + 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-9', + 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-10', + 'zAddAssetAttr-Reverse Location Is Valid-11', + 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-12', + 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-13', + 'AAAzCldMastMedData-zOPT-14', + 'zAddAssetAttr-Media Metadata Type-15', + 'AAAzCldMastMedData-Data-16', + 'CldMasterzCldMastMedData-zOPT-17', + 'zCldMast-Media Metadata Type-18', + 'CMzCldMastMedData-Data-19', + 'zAsset-zPK-20', + 'zAddAssetAttr-zPK-21', + 'zAsset-UUID = store.cloudphotodb-22', + 'zAddAssetAttr-Master Fingerprint-23') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZLATITUDE @@ -435,118 +416,96 @@ def get_ph5haslocationsphdapsql(files_found, report_folder, seeker, wrap_text, t WHERE (zAsset.ZLATITUDE > 0) OR (zExtAttr.ZLATITUDE > 0) ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[13] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[13]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[7]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[16] is not None: - pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[16]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[7]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], - aaashiftedlocation_postal_address, - row[14], row[15], - aaareverselocation_postal_address, - row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets that have valid' \ - ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \ - ' and supports iOS 14. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph5.1-Has Locations-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph5.1-Has Locations-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Latitude-1', - 'zExtAttr-Latitude-2', - 'zAsset-Longitude-3', - 'zExtAttr-Longitude-4', - 'zAddAssetAttr-GPS Horizontal Accuracy-5', - 'zAsset-Directory-Path-6', - 'zAsset-Filename-7', - 'zAddAssetAttr- Original Filename-8', - 'zCldMast- Original Filename-9', - 'zCldMast-Import Session ID- AirDrop-StillTesting-10', - 'zAddAssetAttr-Shifted Location Valid-11', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-12', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-13', - 'zAddAssetAttr-Reverse Location Is Valid-14', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-15', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-16', - 'AAAzCldMastMedData-zOPT-17', - 'zAddAssetAttr-Media Metadata Type-18', - 'AAAzCldMastMedData-Data-19', - 'CldMasterzCldMastMedData-zOPT-20', - 'zCldMast-Media Metadata Type-21', - 'CMzCldMastMedData-Data-22', - 'zAsset-zPK-23', - 'zAddAssetAttr-zPK-24', - 'zAsset-UUID = store.cloudphotodb-25', - 'zAddAssetAttr-Master Fingerprint-26') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph5.1-Has Locations-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph5.1-Has Locations-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite assets with valid locations') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + aaashiftedlocation_postal_address = '' + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + aaareverselocation_postal_address = '' + + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + if row[13] is not None: + pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[13]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + aaashiftedlocation_postal_address = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[7]) + else: + logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) + + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + if row[16] is not None: + pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[16]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + aaareverselocation_postal_address = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[7]) + else: + logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], + aaashiftedlocation_postal_address, + row[14], row[15], + aaareverselocation_postal_address, + row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Latitude-1', + 'zExtAttr-Latitude-2', + 'zAsset-Longitude-3', + 'zExtAttr-Longitude-4', + 'zAddAssetAttr-GPS Horizontal Accuracy-5', + 'zAsset-Directory-Path-6', + 'zAsset-Filename-7', + 'zAddAssetAttr- Original Filename-8', + 'zCldMast- Original Filename-9', + 'zCldMast-Import Session ID- AirDrop-StillTesting-10', + 'zAddAssetAttr-Shifted Location Valid-11', + 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-12', + 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-13', + 'zAddAssetAttr-Reverse Location Is Valid-14', + 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-15', + 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-16', + 'AAAzCldMastMedData-zOPT-17', + 'zAddAssetAttr-Media Metadata Type-18', + 'AAAzCldMastMedData-Data-19', + 'CldMasterzCldMastMedData-zOPT-20', + 'zCldMast-Media Metadata Type-21', + 'CMzCldMastMedData-Data-22', + 'zAsset-zPK-23', + 'zAddAssetAttr-zPK-24', + 'zAsset-UUID = store.cloudphotodb-25', + 'zAddAssetAttr-Master Fingerprint-26') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZLATITUDE @@ -630,119 +589,97 @@ def get_ph5haslocationsphdapsql(files_found, report_folder, seeker, wrap_text, t WHERE (zAsset.ZLATITUDE > 0) OR (zExtAttr.ZLATITUDE > 0) ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[14] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[14]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[7]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[17] is not None: - pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[17]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[7]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], - aaashiftedlocation_postal_address, - row[15], row[16], - aaareverselocation_postal_address, - row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], - row[26], row[27])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets that have valid' \ - ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \ - ' and supports iOS 15-17. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph5.1-Has Locations-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph5.1-Has Locations-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Latitude-1', - 'zExtAttr-Latitude-2', - 'zAsset-Longitude-3', - 'zExtAttr-Longitude-4', - 'zAddAssetAttr-GPS Horizontal Accuracy-5', - 'zAsset-Directory-Path-6', - 'zAsset-Filename-7', - 'zAddAssetAttr- Original Filename-8', - 'zCldMast- Original Filename-9', - 'zCldMast-Import Session ID- AirDrop-StillTesting-10', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', - 'zAddAssetAttr-Shifted Location Valid-12', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-13', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-14', - 'zAddAssetAttr-Reverse Location Is Valid-15', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-16', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-17', - 'AAAzCldMastMedData-zOPT-18', - 'zAddAssetAttr-Media Metadata Type-19', - 'AAAzCldMastMedData-Data-20', - 'CldMasterzCldMastMedData-zOPT-21', - 'zCldMast-Media Metadata Type-22', - 'CMzCldMastMedData-Data-23', - 'zAsset-zPK-24', - 'zAddAssetAttr-zPK-25', - 'zAsset-UUID = store.cloudphotodb-26', - 'zAddAssetAttr-Master Fingerprint-27') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph5.1-Has Locations-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph5.1-Has Locations-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite assets with valid locations') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + aaashiftedlocation_postal_address = '' + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + aaareverselocation_postal_address = '' + + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + if row[14] is not None: + pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[14]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + aaashiftedlocation_postal_address = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[7]) + else: + logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) + + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + if row[17] is not None: + pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[17]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + aaareverselocation_postal_address = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[7]) + else: + logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], + aaashiftedlocation_postal_address, + row[15], row[16], + aaareverselocation_postal_address, + row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], + row[26], row[27])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Latitude-1', + 'zExtAttr-Latitude-2', + 'zAsset-Longitude-3', + 'zExtAttr-Longitude-4', + 'zAddAssetAttr-GPS Horizontal Accuracy-5', + 'zAsset-Directory-Path-6', + 'zAsset-Filename-7', + 'zAddAssetAttr- Original Filename-8', + 'zCldMast- Original Filename-9', + 'zCldMast-Import Session ID- AirDrop-StillTesting-10', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', + 'zAddAssetAttr-Shifted Location Valid-12', + 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-13', + 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-14', + 'zAddAssetAttr-Reverse Location Is Valid-15', + 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-16', + 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-17', + 'AAAzCldMastMedData-zOPT-18', + 'zAddAssetAttr-Media Metadata Type-19', + 'AAAzCldMastMedData-Data-20', + 'CldMasterzCldMastMedData-zOPT-21', + 'zCldMast-Media Metadata Type-22', + 'CMzCldMastMedData-Data-23', + 'zAsset-zPK-24', + 'zAddAssetAttr-zPK-25', + 'zAsset-UUID = store.cloudphotodb-26', + 'zAddAssetAttr-Master Fingerprint-27') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZLATITUDE @@ -814,8 +751,8 @@ def get_ph5haslocationsphdapsql(files_found, report_folder, seeker, wrap_text, t zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES @@ -827,133 +764,112 @@ def get_ph5haslocationsphdapsql(files_found, report_folder, seeker, wrap_text, t WHERE (zAsset.ZLATITUDE > 0) OR (zExtAttr.ZLATITUDE > 0) ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[14] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[14]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[7]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[17] is not None: - pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[17]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[7]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], - aaashiftedlocation_postal_address, - row[15], row[16], - aaareverselocation_postal_address, - row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], - row[26], row[27], row[28])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets that have valid' \ - ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \ - ' and supports iOS 18. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph5.1-Has Locations-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph5.1-Has Locations-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Latitude-1', - 'zExtAttr-Latitude-2', - 'zAsset-Longitude-3', - 'zExtAttr-Longitude-4', - 'zAddAssetAttr-GPS Horizontal Accuracy-5', - 'zAsset-Directory-Path-6', - 'zAsset-Filename-7', - 'zAddAssetAttr- Original Filename-8', - 'zCldMast- Original Filename-9', - 'zCldMast-Import Session ID- AirDrop-StillTesting-10', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', - 'zAddAssetAttr-Shifted Location Valid-12', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-13', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-14', - 'zAddAssetAttr-Reverse Location Is Valid-15', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-16', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-17', - 'AAAzCldMastMedData-zOPT-18', - 'zAddAssetAttr-Media Metadata Type-19', - 'AAAzCldMastMedData-Data-20', - 'CldMasterzCldMastMedData-zOPT-21', - 'zCldMast-Media Metadata Type-22', - 'CMzCldMastMedData-Data-23', - 'zAsset-zPK-24', - 'zAddAssetAttr-zPK-25', - 'zAsset-UUID = store.cloudphotodb-26', - 'zAddAssetAttr-Original Stable Hash-iOS18-27', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-28') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph5.1-Has Locations-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph5.1-Has Locations-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite assets with valid locations') - - db.close() - return - - -def get_ph5haslocationssyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + aaashiftedlocation_postal_address = '' + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + aaareverselocation_postal_address = '' + + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + if row[14] is not None: + pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[14]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + aaashiftedlocation_postal_address = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[7]) + else: + logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) + + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + if row[17] is not None: + pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[17]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + aaareverselocation_postal_address = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[7]) + else: + logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], + aaashiftedlocation_postal_address, + row[15], row[16], + aaareverselocation_postal_address, + row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], + row[26], row[27], row[28])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Latitude-1', + 'zExtAttr-Latitude-2', + 'zAsset-Longitude-3', + 'zExtAttr-Longitude-4', + 'zAddAssetAttr-GPS Horizontal Accuracy-5', + 'zAsset-Directory-Path-6', + 'zAsset-Filename-7', + 'zAddAssetAttr- Original Filename-8', + 'zCldMast- Original Filename-9', + 'zCldMast-Import Session ID- AirDrop-StillTesting-10', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', + 'zAddAssetAttr-Shifted Location Valid-12', + 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-13', + 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-14', + 'zAddAssetAttr-Reverse Location Is Valid-15', + 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-16', + 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-17', + 'AAAzCldMastMedData-zOPT-18', + 'zAddAssetAttr-Media Metadata Type-19', + 'AAAzCldMastMedData-Data-20', + 'CldMasterzCldMastMedData-zOPT-21', + 'zCldMast-Media Metadata Type-22', + 'CMzCldMastMedData-Data-23', + 'zAsset-zPK-24', + 'zAddAssetAttr-zPK-25', + 'zAsset-UUID = store.cloudphotodb-26', + 'zAddAssetAttr-Original Stable Hash-27', + 'zAddAssetAttr.Adjusted Stable Hash-28') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + +@artifact_processor +def Ph5_2AssetshavevalidlocationsSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) + + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite assets with valid locations iOS " + iosversion) + logfunc("Unsupported version for Syndication.photoslibrary iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("13")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZLATITUDE @@ -998,98 +914,75 @@ def get_ph5haslocationssyndpl(files_found, report_folder, seeker, wrap_text, tim LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAsset.ZLATITUDE > 0 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_geoplaceresult = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_geoplaceresult = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[10] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[4] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[10]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - for key, val in plist.items(): - if key == "geoPlaceResult": - aaashiftedlocation_geoplaceresult = val - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[13] is not None: - pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[4] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[13]) - - with open(pathto, "rb") as fp: - plist = plistlib.load(fp) - for key, val in plist.items(): - if key == "geoPlaceResult": - aaareverselocation_geoplaceresult = val - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - aaashiftedlocation_geoplaceresult, - row[11], row[12], - aaareverselocation_geoplaceresult, - row[14], row[15], row[16], row[17])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite for' \ - ' assets that have valid' \ - ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \ - ' and supports iOS 11-13. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph5.2-Has Locations-SyndPL') - report.start_artifact_report(report_folder, 'Ph5.2-Has Locations-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Latitude-1', - 'zAsset-Longitude-2', - 'zAsset-Directory-Path-3', - 'zAsset-Filename-4', - 'zAddAssetAttr- Original Filename-5', - 'zCldMast- Original Filename-6', - 'zCldMast-Import Session ID- AirDrop-StillTesting-7', - 'zAddAssetAttr-Shifted Location Valid-8', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-9', - 'zAddAssetAttr-Shifted Location Data-geoPlaceResult-10', - 'zAddAssetAttr-Reverse Location Is Valid-11', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-12', - 'zAddAssetAttr-Reverse Location Data-geoPlaceResult-13', - 'zAsset-zPK-14', - 'zAddAssetAttr-zPK-15', - 'zAsset-UUID = store.cloudphotodb-16', - 'zAddAssetAttr-Master Fingerprint-17') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph5.2-Has Locations-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph5.2-Has Locations-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-Photos.sqlite assets with valid locations') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + aaashiftedlocation_geoplaceresult = '' + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + aaareverselocation_geoplaceresult = '' + + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + if row[10] is not None: + pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[4] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[10]) + + with open(pathto, "rb") as fp: + plist = plistlib.load(fp) + for key, val in plist.items(): + if key == "geoPlaceResult": + aaashiftedlocation_geoplaceresult = val + + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + if row[13] is not None: + pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[4] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[13]) + + with open(pathto, "rb") as fp: + plist = plistlib.load(fp) + for key, val in plist.items(): + if key == "geoPlaceResult": + aaareverselocation_geoplaceresult = val + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + aaashiftedlocation_geoplaceresult, + row[11], row[12], + aaareverselocation_geoplaceresult, + row[14], row[15], row[16], row[17])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Latitude-1', + 'zAsset-Longitude-2', + 'zAsset-Directory-Path-3', + 'zAsset-Filename-4', + 'zAddAssetAttr- Original Filename-5', + 'zCldMast- Original Filename-6', + 'zCldMast-Import Session ID- AirDrop-StillTesting-7', + 'zAddAssetAttr-Shifted Location Valid-8', + 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-9', + 'zAddAssetAttr-Shifted Location Data-geoPlaceResult-10', + 'zAddAssetAttr-Reverse Location Is Valid-11', + 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-12', + 'zAddAssetAttr-Reverse Location Data-geoPlaceResult-13', + 'zAsset-zPK-14', + 'zAddAssetAttr-zPK-15', + 'zAsset-UUID = store.cloudphotodb-16', + 'zAddAssetAttr-Master Fingerprint-17') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZLATITUDE @@ -1164,116 +1057,92 @@ def get_ph5haslocationssyndpl(files_found, report_folder, seeker, wrap_text, tim CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA WHERE zAsset.ZLATITUDE > 0 ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[10] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[4] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[10]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[4]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[4]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[13] is not None: - pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[4] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[13]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[4]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[4]) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - aaashiftedlocation_postal_address, - row[11], row[12], - aaareverselocation_postal_address, - row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite for' \ - ' assets that have valid' \ - ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \ - ' and supports iOS 11-13. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph5.2-Has Locations-SyndPL') - report.start_artifact_report(report_folder, 'Ph5.2-Has Locations-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Latitude-1', - 'zAsset-Longitude-2', - 'zAsset-Directory-Path-3', - 'zAsset-Filename-4', - 'zAddAssetAttr- Original Filename-5', - 'zCldMast- Original Filename-6', - 'zCldMast-Import Session ID- AirDrop-StillTesting-7', - 'zAddAssetAttr-Shifted Location Valid-8', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-9', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-10', - 'zAddAssetAttr-Reverse Location Is Valid-11', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-12', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-13', - 'AAAzCldMastMedData-zOPT-14', - 'zAddAssetAttr-Media Metadata Type-15', - 'AAAzCldMastMedData-Data-16', - 'CldMasterzCldMastMedData-zOPT-17', - 'zCldMast-Media Metadata Type-18', - 'CMzCldMastMedData-Data-19', - 'zAsset-zPK-20', - 'zAddAssetAttr-zPK-21', - 'zAsset-UUID = store.cloudphotodb-22', - 'zAddAssetAttr-Master Fingerprint-23') - - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph5.2-Has Locations-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph5.2-Has Locations-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-Photos.sqlite assets with valid locations') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + aaashiftedlocation_postal_address = '' + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + aaareverselocation_postal_address = '' + + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + if row[10] is not None: + pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[4] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[10]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + aaashiftedlocation_postal_address = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[4]) + else: + logfunc('Error reading exported plist from zAsset-Filename ' + row[4]) + + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + if row[13] is not None: + pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[4] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[13]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + aaareverselocation_postal_address = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[4]) + else: + logfunc('Error reading exported plist from zAsset-Filename ' + row[4]) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + aaashiftedlocation_postal_address, + row[11], row[12], + aaareverselocation_postal_address, + row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Latitude-1', + 'zAsset-Longitude-2', + 'zAsset-Directory-Path-3', + 'zAsset-Filename-4', + 'zAddAssetAttr- Original Filename-5', + 'zCldMast- Original Filename-6', + 'zCldMast-Import Session ID- AirDrop-StillTesting-7', + 'zAddAssetAttr-Shifted Location Valid-8', + 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-9', + 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-10', + 'zAddAssetAttr-Reverse Location Is Valid-11', + 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-12', + 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-13', + 'AAAzCldMastMedData-zOPT-14', + 'zAddAssetAttr-Media Metadata Type-15', + 'AAAzCldMastMedData-Data-16', + 'CldMasterzCldMastMedData-zOPT-17', + 'zCldMast-Media Metadata Type-18', + 'CMzCldMastMedData-Data-19', + 'zAsset-zPK-20', + 'zAddAssetAttr-zPK-21', + 'zAsset-UUID = store.cloudphotodb-22', + 'zAddAssetAttr-Master Fingerprint-23') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZLATITUDE @@ -1356,119 +1225,96 @@ def get_ph5haslocationssyndpl(files_found, report_folder, seeker, wrap_text, tim WHERE (zAsset.ZLATITUDE > 0) OR (zExtAttr.ZLATITUDE > 0) ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[13] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[13]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[7]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[16] is not None: - pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[16]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[7]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], - aaashiftedlocation_postal_address, - row[14], row[15], - aaareverselocation_postal_address, - row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite for' \ - ' assets that have valid' \ - ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \ - ' and supports iOS 14. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph5.2-Has Locations-SyndPL') - report.start_artifact_report(report_folder, 'Ph5.2-Has Locations-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Latitude-1', - 'zExtAttr-Latitude-2', - 'zAsset-Longitude-3', - 'zExtAttr-Longitude-4', - 'zAddAssetAttr-GPS Horizontal Accuracy-5', - 'zAsset-Directory-Path-6', - 'zAsset-Filename-7', - 'zAddAssetAttr- Original Filename-8', - 'zCldMast- Original Filename-9', - 'zCldMast-Import Session ID- AirDrop-StillTesting-10', - 'zAddAssetAttr-Shifted Location Valid-11', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-12', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-13', - 'zAddAssetAttr-Reverse Location Is Valid-14', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-15', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-16', - 'AAAzCldMastMedData-zOPT-17', - 'zAddAssetAttr-Media Metadata Type-18', - 'AAAzCldMastMedData-Data-19', - 'CldMasterzCldMastMedData-zOPT-20', - 'zCldMast-Media Metadata Type-21', - 'CMzCldMastMedData-Data-22', - 'zAsset-zPK-23', - 'zAddAssetAttr-zPK-24', - 'zAsset-UUID = store.cloudphotodb-25', - 'zAddAssetAttr-Master Fingerprint-26') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph5.2-Has Locations-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph5.2-Has Locations-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-Photos.sqlite assets with valid locations') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + aaashiftedlocation_postal_address = '' + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + aaareverselocation_postal_address = '' + + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + if row[13] is not None: + pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[13]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + aaashiftedlocation_postal_address = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[7]) + else: + logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) + + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + if row[16] is not None: + pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[16]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + aaareverselocation_postal_address = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[7]) + else: + logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], + aaashiftedlocation_postal_address, + row[14], row[15], + aaareverselocation_postal_address, + row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Latitude-1', + 'zExtAttr-Latitude-2', + 'zAsset-Longitude-3', + 'zExtAttr-Longitude-4', + 'zAddAssetAttr-GPS Horizontal Accuracy-5', + 'zAsset-Directory-Path-6', + 'zAsset-Filename-7', + 'zAddAssetAttr- Original Filename-8', + 'zCldMast- Original Filename-9', + 'zCldMast-Import Session ID- AirDrop-StillTesting-10', + 'zAddAssetAttr-Shifted Location Valid-11', + 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-12', + 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-13', + 'zAddAssetAttr-Reverse Location Is Valid-14', + 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-15', + 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-16', + 'AAAzCldMastMedData-zOPT-17', + 'zAddAssetAttr-Media Metadata Type-18', + 'AAAzCldMastMedData-Data-19', + 'CldMasterzCldMastMedData-zOPT-20', + 'zCldMast-Media Metadata Type-21', + 'CMzCldMastMedData-Data-22', + 'zAsset-zPK-23', + 'zAddAssetAttr-zPK-24', + 'zAsset-UUID = store.cloudphotodb-25', + 'zAddAssetAttr-Master Fingerprint-26') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZLATITUDE @@ -1552,120 +1398,97 @@ def get_ph5haslocationssyndpl(files_found, report_folder, seeker, wrap_text, tim WHERE (zAsset.ZLATITUDE > 0) OR (zExtAttr.ZLATITUDE > 0) ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[14] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[14]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[7]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[17] is not None: - pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[17]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[7]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], - aaashiftedlocation_postal_address, - row[15], row[16], - aaareverselocation_postal_address, - row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], - row[26], row[27])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite for' \ - ' assets that have valid' \ - ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \ - ' and supports iOS 15-17. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph5.2-Has Locations-SyndPL') - report.start_artifact_report(report_folder, 'Ph5.2-Has Locations-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Latitude-1', - 'zExtAttr-Latitude-2', - 'zAsset-Longitude-3', - 'zExtAttr-Longitude-4', - 'zAddAssetAttr-GPS Horizontal Accuracy-5', - 'zAsset-Directory-Path-6', - 'zAsset-Filename-7', - 'zAddAssetAttr- Original Filename-8', - 'zCldMast- Original Filename-9', - 'zCldMast-Import Session ID- AirDrop-StillTesting-10', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', - 'zAddAssetAttr-Shifted Location Valid-12', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-13', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-14', - 'zAddAssetAttr-Reverse Location Is Valid-15', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-16', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-17', - 'AAAzCldMastMedData-zOPT-18', - 'zAddAssetAttr-Media Metadata Type-19', - 'AAAzCldMastMedData-Data-20', - 'CldMasterzCldMastMedData-zOPT-21', - 'zCldMast-Media Metadata Type-22', - 'CMzCldMastMedData-Data-23', - 'zAsset-zPK-24', - 'zAddAssetAttr-zPK-25', - 'zAsset-UUID = store.cloudphotodb-26', - 'zAddAssetAttr-Master Fingerprint-27') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph5.2-Has Locations-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph5.2-Has Locations-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-Photos.sqlite assets with valid locations') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + aaashiftedlocation_postal_address = '' + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + aaareverselocation_postal_address = '' + + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + if row[14] is not None: + pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[14]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + aaashiftedlocation_postal_address = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[7]) + else: + logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) + + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + if row[17] is not None: + pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[17]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + aaareverselocation_postal_address = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[7]) + else: + logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], + aaashiftedlocation_postal_address, + row[15], row[16], + aaareverselocation_postal_address, + row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], + row[26], row[27])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Latitude-1', + 'zExtAttr-Latitude-2', + 'zAsset-Longitude-3', + 'zExtAttr-Longitude-4', + 'zAddAssetAttr-GPS Horizontal Accuracy-5', + 'zAsset-Directory-Path-6', + 'zAsset-Filename-7', + 'zAddAssetAttr- Original Filename-8', + 'zCldMast- Original Filename-9', + 'zCldMast-Import Session ID- AirDrop-StillTesting-10', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', + 'zAddAssetAttr-Shifted Location Valid-12', + 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-13', + 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-14', + 'zAddAssetAttr-Reverse Location Is Valid-15', + 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-16', + 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-17', + 'AAAzCldMastMedData-zOPT-18', + 'zAddAssetAttr-Media Metadata Type-19', + 'AAAzCldMastMedData-Data-20', + 'CldMasterzCldMastMedData-zOPT-21', + 'zCldMast-Media Metadata Type-22', + 'CMzCldMastMedData-Data-23', + 'zAsset-zPK-24', + 'zAddAssetAttr-zPK-25', + 'zAsset-UUID = store.cloudphotodb-26', + 'zAddAssetAttr-Master Fingerprint-27') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZLATITUDE @@ -1737,8 +1560,8 @@ def get_ph5haslocationssyndpl(files_found, report_folder, seeker, wrap_text, tim zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES @@ -1750,145 +1573,87 @@ def get_ph5haslocationssyndpl(files_found, report_folder, seeker, wrap_text, tim WHERE (zAsset.ZLATITUDE > 0) OR (zExtAttr.ZLATITUDE > 0) ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - aaashiftedlocation_postal_address = '' - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - aaareverselocation_postal_address = '' - - # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST - if row[14] is not None: - pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[14]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaashiftedlocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[7]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) - - # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST - if row[17] is not None: - pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist') - with open(pathto, 'ab') as wf: - wf.write(row[17]) - - with open(pathto, 'rb') as f: - try: - deserialized_plist = nd.deserialize_plist(f) - aaareverselocation_postal_address = deserialized_plist - - except (KeyError, ValueError, TypeError) as ex: - if str(ex).find("does not contain an '$archiver' key") >= 0: - logfunc('plist was Not an NSKeyedArchive ' + row[7]) - else: - logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], - aaashiftedlocation_postal_address, - row[15], row[16], - aaareverselocation_postal_address, - row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], - row[26], row[27], row[28])) - - counter += 1 - - description = 'Parses basic asset record data from Syndication.photoslibrary-Photos.sqlite for' \ - ' assets that have valid' \ - ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' \ - ' and supports iOS 15-17. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph5.2-Has Locations-SyndPL') - report.start_artifact_report(report_folder, 'Ph5.2-Has Locations-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Latitude-1', - 'zExtAttr-Latitude-2', - 'zAsset-Longitude-3', - 'zExtAttr-Longitude-4', - 'zAddAssetAttr-GPS Horizontal Accuracy-5', - 'zAsset-Directory-Path-6', - 'zAsset-Filename-7', - 'zAddAssetAttr- Original Filename-8', - 'zCldMast- Original Filename-9', - 'zCldMast-Import Session ID- AirDrop-StillTesting-10', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', - 'zAddAssetAttr-Shifted Location Valid-12', - 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-13', - 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-14', - 'zAddAssetAttr-Reverse Location Is Valid-15', - 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-16', - 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-17', - 'AAAzCldMastMedData-zOPT-18', - 'zAddAssetAttr-Media Metadata Type-19', - 'AAAzCldMastMedData-Data-20', - 'CldMasterzCldMastMedData-zOPT-21', - 'zCldMast-Media Metadata Type-22', - 'CMzCldMastMedData-Data-23', - 'zAsset-zPK-24', - 'zAddAssetAttr-zPK-25', - 'zAsset-UUID = store.cloudphotodb-26', - 'zAddAssetAttr-Original Stable Hash-iOS18-27', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-28') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph5.2-Has Locations-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph5.2-Has Locations-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for Syndication.photoslibrary-Photos.sqlite assets with valid locations') - - db.close() - return - - -__artifacts_v2__ = { - 'Ph5-1-Assets have valid locations-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite 5.1 assets have locations', - 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for assets that have valid' - ' locations from the ZASSET and ZEXTENDEDATTRIBUTES table ZLATITUDE fields' - ' and supports iOS 11-18. The results for this script will contain' - ' one record per ZASSET table Z_PK value.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-C-Other_Artifacts', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph5haslocationsphdapsql' - }, - 'Ph5-2-Assets have valid locations-SyndPL': { - 'name': 'SyndPL Photos.sqlite 5.2 assets have locations', - 'description': 'Parses basic asset record data from Syndication.photoslibrary-database-Photos.sqlite' - ' for assets that have valid locations from the ZASSET and ZEXTENDEDATTRIBUTES table' - ' ZLATITUDE fields and supports iOS 11-18. The results for this script will contain' - ' one record per ZASSET table Z_PK value.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains Syndication Photo Library Photos.sqlite', - 'category': 'Photos.sqlite-S-Syndication_PL_Artifacts', - 'notes': '', - 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*', - 'function': 'get_ph5haslocationssyndpl' - } -} + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + aaashiftedlocation_postal_address = '' + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + aaareverselocation_postal_address = '' + + # zAddAssetAttr.ZSHIFTEDLOCATIONDATA-PLIST + if row[14] is not None: + pathto = os.path.join(report_folder, 'AAA_ShiftedLocationData' + row[7] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[14]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + aaashiftedlocation_postal_address = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[7]) + else: + logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) + + # zAddAssetAttr.ZREVERSELOCATIONDATA-PLIST + if row[17] is not None: + pathto = os.path.join(report_folder, 'AAA_ReverseLocationData' + row[7] + '.plist') + with open(pathto, 'ab') as wf: + wf.write(row[17]) + + with open(pathto, 'rb') as f: + try: + deserialized_plist = nd.deserialize_plist(f) + aaareverselocation_postal_address = deserialized_plist + + except (KeyError, ValueError, TypeError) as ex: + if str(ex).find("does not contain an '$archiver' key") >= 0: + logfunc('plist was Not an NSKeyedArchive ' + row[7]) + else: + logfunc('Error reading exported plist from zAsset-Filename ' + row[7]) + + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], + aaashiftedlocation_postal_address, + row[15], row[16], + aaareverselocation_postal_address, + row[18], row[19], row[20], row[21], row[22], row[23], row[24], row[25], + row[26], row[27], row[28])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Latitude-1', + 'zExtAttr-Latitude-2', + 'zAsset-Longitude-3', + 'zExtAttr-Longitude-4', + 'zAddAssetAttr-GPS Horizontal Accuracy-5', + 'zAsset-Directory-Path-6', + 'zAsset-Filename-7', + 'zAddAssetAttr- Original Filename-8', + 'zCldMast- Original Filename-9', + 'zCldMast-Import Session ID- AirDrop-StillTesting-10', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-11', + 'zAddAssetAttr-Shifted Location Valid-12', + 'zAddAssetAttr-Shifted Location Data-HasDataIndicator-13', + 'zAddAssetAttr-Shifted Location Data-bplist_postal_address-14', + 'zAddAssetAttr-Reverse Location Is Valid-15', + 'zAddAssetAttr-Reverse Location Data-HasDataIndicator-16', + 'zAddAssetAttr-Reverse Location Data-bplist_postal_address-17', + 'AAAzCldMastMedData-zOPT-18', + 'zAddAssetAttr-Media Metadata Type-19', + 'AAAzCldMastMedData-Data-20', + 'CldMasterzCldMastMedData-zOPT-21', + 'zCldMast-Media Metadata Type-22', + 'CMzCldMastMedData-Data-23', + 'zAsset-zPK-24', + 'zAddAssetAttr-zPK-25', + 'zAsset-UUID = store.cloudphotodb-26', + 'zAddAssetAttr-Original Stable Hash-27', + 'zAddAssetAttr.Adjusted Stable Hash-28') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + diff --git a/scripts/artifacts/Ph6ViewedPlayData.py b/scripts/artifacts/Ph6ViewedPlayData.py index c09654a4..5f69d8e8 100644 --- a/scripts/artifacts/Ph6ViewedPlayData.py +++ b/scripts/artifacts/Ph6ViewedPlayData.py @@ -1,42 +1,50 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses basic asset record data from Photos.sqlite for assets with last viewed timestamp and other view and play data -# from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE and ZPLAYCOUNT fields and iOS version support varies -# but last viewed date is supported in iOS 16-18. -# The results for this script will contain one record per ZASSET table Z_PK value. -# This parser is based on research and SQLite queries written by Scott Koenig -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph6ViewandPlayDataPhDaPsql': { + 'name': 'Ph6-View and Play Data-PhDaPsql', + 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for assets with' + ' view and played data in versions 11-18. If the iOS version is greater than iOS 16.5' + ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' + ' will be included. The results for this script will contain' + ' one row per ZASSET table Z_PK value.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-B-Interaction_Artifacts', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc +@artifact_processor +def Ph6ViewandPlayDataPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) -def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for PhotosData-Photos.sqlite assets with view and" - " play data from iOS " + iosversion) + logfunc("Unsupported version for PhotosData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("13")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', @@ -58,62 +66,39 @@ def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, t WHERE (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) OR (zAddAssetAttr.ZVIEWCOUNT > 0) OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0) ORDER BY zAsset.ZMODIFICATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets with' \ - ' view and played data in versions 11-12. If the iOS version is greater than iOS 16' \ - ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' \ - ' will be included. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph6-Viewed and Played Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph6-Viewed and Played Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Modification Date', - 'zAddAssetAttr- Pending View Count', - 'zAddAssetAttr- View Count', - 'zAddAssetAttr- Pending Play Count', - 'zAddAssetAttr- Play Count', - 'zAsset-Directory-Path', - 'zAsset-Filename', - 'zAddAssetAttr- Original Filename', - 'zCldMast- Original Filename', - 'zCldMast-Import Session ID- AirDrop-StillTesting', - 'zAsset-zPK', - 'zAddAssetAttr-zPK', - 'zAsset-UUID = store.cloudphotodb', - 'zAddAssetAttr-Master Fingerprint') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph6-Viewed and Played Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph6-Viewed and Played Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite asset viewed and played data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13])) + + data_headers = (('zAsset-Modification Date', 'datetime'), + 'zAddAssetAttr- Pending View Count', + 'zAddAssetAttr- View Count', + 'zAddAssetAttr- Pending Play Count', + 'zAddAssetAttr- Play Count', + 'zAsset-Directory-Path', + 'zAsset-Filename', + 'zAddAssetAttr- Original Filename', + 'zCldMast- Original Filename', + 'zCldMast-Import Session ID- AirDrop-StillTesting', + 'zAsset-zPK', + 'zAddAssetAttr-zPK', + 'zAsset-UUID = store.cloudphotodb', + 'zAddAssetAttr-Master Fingerprint') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("13")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS @@ -137,63 +122,40 @@ def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, t WHERE (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) OR (zAddAssetAttr.ZVIEWCOUNT > 0) OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0) ORDER BY zAsset.ZMODIFICATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets with' \ - ' view and played data in versions 13. If the iOS version is greater than iOS 16' \ - ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' \ - ' will be included. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph6-Viewed and Played Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph6-Viewed and Played Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Modification Date', - 'zAsset-Analysis State Modification Date', - 'zAddAssetAttr- Pending View Count', - 'zAddAssetAttr- View Count', - 'zAddAssetAttr- Pending Play Count', - 'zAddAssetAttr- Play Count', - 'zAsset-Directory-Path', - 'zAsset-Filename', - 'zAddAssetAttr- Original Filename', - 'zCldMast- Original Filename', - 'zCldMast-Import Session ID- AirDrop-StillTesting', - 'zAsset-zPK', - 'zAddAssetAttr-zPK', - 'zAsset-UUID = store.cloudphotodb', - 'zAddAssetAttr-Master Fingerprint') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph6-Viewed and Played Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph6-Viewed and Played Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite asset viewed and played data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14])) + + data_headers = (('zAsset-Modification Date', 'datetime'), + 'zAsset-Analysis State Modification Date', + 'zAddAssetAttr- Pending View Count', + 'zAddAssetAttr- View Count', + 'zAddAssetAttr- Pending Play Count', + 'zAddAssetAttr- Play Count', + 'zAsset-Directory-Path', + 'zAsset-Filename', + 'zAddAssetAttr- Original Filename', + 'zCldMast- Original Filename', + 'zCldMast-Import Session ID- AirDrop-StillTesting', + 'zAsset-zPK', + 'zAddAssetAttr-zPK', + 'zAsset-UUID = store.cloudphotodb', + 'zAddAssetAttr-Master Fingerprint') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS @@ -217,63 +179,40 @@ def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, t WHERE (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) OR (zAddAssetAttr.ZVIEWCOUNT > 0) OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0) ORDER BY zAsset.ZMODIFICATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets with' \ - ' view and played data in versions 14. If the iOS version is greater than iOS 16' \ - ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' \ - ' will be included. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph6-Viewed and Played Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph6-Viewed and Played Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Modification Date', - 'zAsset-Analysis State Modification Date', - 'zAddAssetAttr- Pending View Count', - 'zAddAssetAttr- View Count', - 'zAddAssetAttr- Pending Play Count', - 'zAddAssetAttr- Play Count', - 'zAsset-Directory-Path', - 'zAsset-Filename', - 'zAddAssetAttr- Original Filename', - 'zCldMast- Original Filename', - 'zCldMast-Import Session ID- AirDrop-StillTesting', - 'zAsset-zPK', - 'zAddAssetAttr-zPK', - 'zAsset-UUID = store.cloudphotodb', - 'zAddAssetAttr-Master Fingerprint') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph6-Viewed and Played Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph6-Viewed and Played Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite asset viewed and played data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14])) + + data_headers = (('zAsset-Modification Date', 'datetime'), + 'zAsset-Analysis State Modification Date', + 'zAddAssetAttr- Pending View Count', + 'zAddAssetAttr- View Count', + 'zAddAssetAttr- Pending Play Count', + 'zAddAssetAttr- Play Count', + 'zAsset-Directory-Path', + 'zAsset-Filename', + 'zAddAssetAttr- Original Filename', + 'zCldMast- Original Filename', + 'zCldMast-Import Session ID- AirDrop-StillTesting', + 'zAsset-zPK', + 'zAddAssetAttr-zPK', + 'zAsset-UUID = store.cloudphotodb', + 'zAddAssetAttr-Master Fingerprint') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS @@ -298,64 +237,41 @@ def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, t WHERE (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) OR (zAddAssetAttr.ZVIEWCOUNT > 0) OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0) ORDER BY zAsset.ZMODIFICATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets with' \ - ' view and played data in versions 15. If the iOS version is greater than iOS 16' \ - ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' \ - ' will be included. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph6-Viewed and Played Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph6-Viewed and Played Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Modification Date', - 'zAsset-Analysis State Modification Date', - 'zAddAssetAttr- Pending View Count', - 'zAddAssetAttr- View Count', - 'zAddAssetAttr- Pending Play Count', - 'zAddAssetAttr- Play Count', - 'zAsset-Directory-Path', - 'zAsset-Filename', - 'zAddAssetAttr- Original Filename', - 'zCldMast- Original Filename', - 'zCldMast-Import Session ID- AirDrop-StillTesting', - 'zAddAssetAttr- Syndication Identifier-SWY-Files', - 'zAsset-zPK', - 'zAddAssetAttr-zPK', - 'zAsset-UUID = store.cloudphotodb', - 'zAddAssetAttr-Master Fingerprint') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph6-Viewed and Played Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph6-Viewed and Played Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite asset viewed and played data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15])) + + data_headers = (('zAsset-Modification Date', 'datetime'), + 'zAsset-Analysis State Modification Date', + 'zAddAssetAttr- Pending View Count', + 'zAddAssetAttr- View Count', + 'zAddAssetAttr- Pending Play Count', + 'zAddAssetAttr- Play Count', + 'zAsset-Directory-Path', + 'zAsset-Filename', + 'zAddAssetAttr- Original Filename', + 'zCldMast- Original Filename', + 'zCldMast-Import Session ID- AirDrop-StillTesting', + 'zAddAssetAttr- Syndication Identifier-SWY-Files', + 'zAsset-zPK', + 'zAddAssetAttr-zPK', + 'zAsset-UUID = store.cloudphotodb', + 'zAddAssetAttr-Master Fingerprint') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) <= version.parse("16.5.1")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS @@ -380,64 +296,41 @@ def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, t WHERE (zAddAssetAttr.ZLASTVIEWEDDATE > 0) OR (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) OR (zAddAssetAttr.ZVIEWCOUNT > 0) OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0) ORDER BY zAsset.ZMODIFICATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets with' \ - ' view and played data in versions 16-17. If the iOS version is greater than iOS 16' \ - ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' \ - ' will be included. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph6-Viewed and Played Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph6-Viewed and Played Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Modification Date', - 'zAsset-Analysis State Modification Date', - 'zAddAssetAttr- Pending View Count', - 'zAddAssetAttr- View Count', - 'zAddAssetAttr- Pending Play Count', - 'zAddAssetAttr- Play Count', - 'zAsset-Directory-Path', - 'zAsset-Filename', - 'zAddAssetAttr- Original Filename', - 'zCldMast- Original Filename', - 'zCldMast-Import Session ID- AirDrop-StillTesting', - 'zAddAssetAttr- Syndication Identifier-SWY-Files', - 'zAsset-zPK', - 'zAddAssetAttr-zPK', - 'zAsset-UUID = store.cloudphotodb', - 'zAddAssetAttr-Master Fingerprint') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph6-Viewed and Played Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph6-Viewed and Played Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite asset viewed and played data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15])) + + data_headers = (('zAsset-Modification Date', 'datetime'), + 'zAsset-Analysis State Modification Date', + 'zAddAssetAttr- Pending View Count', + 'zAddAssetAttr- View Count', + 'zAddAssetAttr- Pending Play Count', + 'zAddAssetAttr- Play Count', + 'zAsset-Directory-Path', + 'zAsset-Filename', + 'zAddAssetAttr- Original Filename', + 'zCldMast- Original Filename', + 'zCldMast-Import Session ID- AirDrop-StillTesting', + 'zAddAssetAttr- Syndication Identifier-SWY-Files', + 'zAsset-zPK', + 'zAddAssetAttr-zPK', + 'zAsset-UUID = store.cloudphotodb', + 'zAddAssetAttr-Master Fingerprint') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("16.6")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date', DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', @@ -463,65 +356,42 @@ def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, t WHERE (zAddAssetAttr.ZLASTVIEWEDDATE > 0) OR (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) OR (zAddAssetAttr.ZVIEWCOUNT > 0) OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0) ORDER BY zAsset.ZMODIFICATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets with' \ - ' view and played data in versions 16-17. If the iOS version is greater than iOS 16.5.1' \ - ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' \ - ' will be included. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph6-Viewed and Played Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph6-Viewed and Played Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAddAssetAttr-Last Viewed Date-0', - 'zAsset-Modification Date-1', - 'zAsset-Analysis State Modification Date-2', - 'zAddAssetAttr- Pending View Count-3', - 'zAddAssetAttr- View Count-4', - 'zAddAssetAttr- Pending Play Count-5', - 'zAddAssetAttr- Play Count-6', - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zCldMast-Import Session ID- AirDrop-StillTesting-11', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', - 'zAsset-zPK-13', - 'zAddAssetAttr-zPK-14', - 'zAsset-UUID = store.cloudphotodb-15', - 'zAddAssetAttr-Master Fingerprint-16') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph6-Viewed and Played Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph6-Viewed and Played Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite asset viewed and played data') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16])) + + data_headers = (('zAddAssetAttr-Last Viewed Date-0', 'datetime'), + 'zAsset-Modification Date-1', + ('zAsset-Analysis State Modification Date-2', 'datetime'), + 'zAddAssetAttr- Pending View Count-3', + 'zAddAssetAttr- View Count-4', + 'zAddAssetAttr- Pending Play Count-5', + 'zAddAssetAttr- Play Count-6', + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + 'zCldMast-Import Session ID- AirDrop-StillTesting-11', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-12', + 'zAsset-zPK-13', + 'zAddAssetAttr-zPK-14', + 'zAsset-UUID = store.cloudphotodb-15', + 'zAddAssetAttr-Master Fingerprint-16') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date', DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', @@ -535,7 +405,7 @@ def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, t WHEN 0 THEN '0-Obs in iOS 18 still testing-0' WHEN 1 THEN '1-Obs in iOS 18 still testing-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZVIEWPRESENTATION || '' - END AS 'zAddAssetAttr.View_Presentation-iOS18', + END AS 'zAddAssetAttr.View_Presentation', zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', zAsset.ZFILENAME AS 'zAsset-Filename', zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', @@ -545,85 +415,40 @@ def get_ph6viewplaydataphdapsql(files_found, report_folder, seeker, wrap_text, t zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE (zAddAssetAttr.ZLASTVIEWEDDATE > 0) OR (zAddAssetAttr.ZPENDINGVIEWCOUNT > 0) OR (zAddAssetAttr.ZVIEWCOUNT > 0) OR (zAddAssetAttr.ZPENDINGPLAYCOUNT > 0) OR (zAddAssetAttr.ZPLAYCOUNT > 0) ORDER BY zAsset.ZMODIFICATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for assets with' \ - ' view and played data in versions 18. If the iOS version is greater than iOS 16.5.1' \ - ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' \ - ' will be included. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph6-Viewed and Played Data-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph6-Viewed and Played Data-PhDaPsql', description) - report.add_script() - data_headers = ('zAddAssetAttr-Last Viewed Date-0', - 'zAsset-Modification Date-1', - 'zAsset-Analysis State Modification Date-2', - 'zAddAssetAttr- Pending View Count-3', - 'zAddAssetAttr- View Count-4', - 'zAddAssetAttr- Pending Play Count-5', - 'zAddAssetAttr- Play Count-6', - 'zAddAssetAttr.View_Presentation-iOS18-7', - 'zAsset-Directory-Path-8', - 'zAsset-Filename-9', - 'zAddAssetAttr- Original Filename-10', - 'zCldMast- Original Filename-11', - 'zCldMast-Import Session ID- AirDrop-StillTesting-12', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', - 'zAsset-zPK-14', - 'zAddAssetAttr-zPK-15', - 'zAsset-UUID = store.cloudphotodb-16', - 'zAddAssetAttr-Original Stable Hash-iOS18-17', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-18') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph6-Viewed and Played Data-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph6-Viewed and Played Data-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite asset viewed and played data') - - db.close() - return - - -__artifacts_v2__ = { - 'Ph6-View and Play Data-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph6 assets with viewed and played data', - 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for assets with' - ' view and played data in versions 11-18. If the iOS version is greater than iOS 16.5' - ' last viewed date from ZADDITTIONALASSETATTRIBUTES table ZLASTVIEWEDDATE field' - ' will be included. The results for this script will contain' - ' one record per ZASSET table Z_PK value.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-B-Interaction_Artifacts', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph6viewplaydataphdapsql' - } -} + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18])) + + data_headers = (('zAddAssetAttr-Last Viewed Date-0', 'datetime'), + 'zAsset-Modification Date-1', + ('zAsset-Analysis State Modification Date-2', 'datetime'), + 'zAddAssetAttr- Pending View Count-3', + 'zAddAssetAttr- View Count-4', + 'zAddAssetAttr- Pending Play Count-5', + 'zAddAssetAttr- Play Count-6', + 'zAddAssetAttr.View_Presentation-7', + 'zAsset-Directory-Path-8', + 'zAsset-Filename-9', + 'zAddAssetAttr- Original Filename-10', + 'zCldMast- Original Filename-11', + 'zCldMast-Import Session ID- AirDrop-StillTesting-12', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-13', + 'zAsset-zPK-14', + 'zAddAssetAttr-zPK-15', + 'zAsset-UUID = store.cloudphotodb-16', + 'zAddAssetAttr-Original Stable Hash-17', + 'zAddAssetAttr.Adjusted Stable Hash-18') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph7Favorite.py b/scripts/artifacts/Ph7Favorite.py index 66e7fee3..d914e501 100644 --- a/scripts/artifacts/Ph7Favorite.py +++ b/scripts/artifacts/Ph7Favorite.py @@ -1,40 +1,48 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses basic asset record data from Photos.sqlite for favorite assets and supports iOS 11-18. -# The results for this script will contain one record per ZASSET table Z_PK value. -# This parser is based on research and SQLite queries written by Scott Koenig -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph7FavoritePhDaPsql': { + 'name': 'Ph7-Favorite-PhDaPsql', + 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for favorite assets' + ' and supports iOS 11-18. The results for this script will contain' + ' one row per ZASSET table Z_PK value.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-B-Interaction_Artifacts', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, \ - open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc - -def get_ph7favoritephdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph7FavoritePhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for PhotoData-Photos.sqlite favorite assets from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', CASE zAsset.ZFAVORITE @@ -55,57 +63,36 @@ def get_ph7favoritephdapsql(files_found, report_folder, seeker, wrap_text, timez LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAsset.ZFAVORITE = 1 ORDER BY zAsset.ZMODIFICATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for favorite assets' \ - ' and supports iOS 11-13. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph7-Favorite-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph7-Favorite-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Modification Date', - 'zAsset-Favorite', - 'zAsset-Directory-Path', - 'zAsset-Filename', - 'zAddAssetAttr- Original Filename', - 'zCldMast- Original Filename', - 'zCldMast-Import Session ID- AirDrop-StillTesting', - 'zAsset-zPK', - 'zAddAssetAttr-zPK', - 'zAsset-UUID = store.cloudphotodb', - 'zAddAssetAttr-Master Fingerprint') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph7-Favorite-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph7-Favorite-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Favorite Assets') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10])) + + data_headers = (('zAsset-Modification Date-0', 'datetime'), + 'zAsset-Favorite-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zCldMast-Import Session ID- AirDrop-StillTesting-6', + 'zAsset-zPK-7', + 'zAddAssetAttr-zPK-8', + 'zAsset-UUID = store.cloudphotodb-9', + 'zAddAssetAttr-Master Fingerprint-10') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', CASE zAsset.ZFAVORITE @@ -126,57 +113,36 @@ def get_ph7favoritephdapsql(files_found, report_folder, seeker, wrap_text, timez LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAsset.ZFAVORITE = 1 ORDER BY zAsset.ZMODIFICATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for favorite assets' \ - ' and supports iOS 14. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph7-Favorite-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph7-Favorite-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Modification Date', - 'zAsset-Favorite', - 'zAsset-Directory-Path', - 'zAsset-Filename', - 'zAddAssetAttr- Original Filename', - 'zCldMast- Original Filename', - 'zCldMast-Import Session ID- AirDrop-StillTesting', - 'zAsset-zPK', - 'zAddAssetAttr-zPK', - 'zAsset-UUID = store.cloudphotodb', - 'zAddAssetAttr-Master Fingerprint') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph7-Favorite-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph7-Favorite-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Favorite Assets') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10])) + + data_headers = (('zAsset-Modification Date-0', 'datetime'), + 'zAsset-Favorite-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zCldMast-Import Session ID- AirDrop-StillTesting-6', + 'zAsset-zPK-7', + 'zAddAssetAttr-zPK-8', + 'zAsset-UUID = store.cloudphotodb-9', + 'zAddAssetAttr-Master Fingerprint-10') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', CASE zAsset.ZFAVORITE @@ -198,58 +164,37 @@ def get_ph7favoritephdapsql(files_found, report_folder, seeker, wrap_text, timez LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAsset.ZFAVORITE = 1 ORDER BY zAsset.ZMODIFICATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for favorite assets' \ - ' and supports iOS 15-17. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph7-Favorite-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph7-Favorite-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Modification Date-0', - 'zAsset-Favorite-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zCldMast-Import Session ID- AirDrop-StillTesting-6', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', - 'zAsset-zPK-8', - 'zAddAssetAttr-zPK-9', - 'zAsset-UUID = store.cloudphotodb-10', - 'zAddAssetAttr-Master Fingerprint-11') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph7-Favorite-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph7-Favorite-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Favorite Assets') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11])) + + data_headers = (('zAsset-Modification Date-0', 'datetime'), + 'zAsset-Favorite-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zCldMast-Import Session ID- AirDrop-StillTesting-6', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', + 'zAsset-zPK-8', + 'zAddAssetAttr-zPK-9', + 'zAsset-UUID = store.cloudphotodb-10', + 'zAddAssetAttr-Master Fingerprint-11') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', CASE zAsset.ZFAVORITE @@ -265,74 +210,33 @@ def get_ph7favoritephdapsql(files_found, report_folder, seeker, wrap_text, timez zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE zAsset.ZFAVORITE = 1 ORDER BY zAsset.ZMODIFICATIONDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for favorite assets' \ - ' and supports iOS 18. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph7-Favorite-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph7-Favorite-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Modification Date-0', - 'zAsset-Favorite-1', - 'zAsset-Directory-Path-2', - 'zAsset-Filename-3', - 'zAddAssetAttr- Original Filename-4', - 'zCldMast- Original Filename-5', - 'zCldMast-Import Session ID- AirDrop-StillTesting-6', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', - 'zAsset-zPK-8', - 'zAddAssetAttr-zPK-9', - 'zAsset-UUID = store.cloudphotodb-10', - 'zAddAssetAttr-Original Stable Hash-iOS18-11', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-12') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph7-Favorite-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph7-Favorite-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Favorite Assets') - - db.close() - return - - -__artifacts_v2__ = { - 'Ph7-Favorite-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph7 Favorite Assets', - 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for favorite assets' - ' and supports iOS 11-18. The results for this script will contain' - ' one record per ZASSET table Z_PK value.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-B-Interaction_Artifacts', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph7favoritephdapsql' - } -} + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12])) + + data_headers = (('zAsset-Modification Date-0', 'datetime'), + 'zAsset-Favorite-1', + 'zAsset-Directory-Path-2', + 'zAsset-Filename-3', + 'zAddAssetAttr- Original Filename-4', + 'zCldMast- Original Filename-5', + 'zCldMast-Import Session ID- AirDrop-StillTesting-6', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-7', + 'zAsset-zPK-8', + 'zAddAssetAttr-zPK-9', + 'zAsset-UUID = store.cloudphotodb-10', + 'zAddAssetAttr-Original Stable Hash-11', + 'zAddAssetAttr.Adjusted Stable Hash-12') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph80comappleMobileSlideShowPlist.py b/scripts/artifacts/Ph80comappleMobileSlideShowPlist.py index 14b24a6e..86317188 100644 --- a/scripts/artifacts/Ph80comappleMobileSlideShowPlist.py +++ b/scripts/artifacts/Ph80comappleMobileSlideShowPlist.py @@ -1,33 +1,45 @@ -# Author: Scott Koenig, assisted by past contributors -# Version: 1.0 -# -# Description: -# Parses basic data from com.apple.mobileslideshow.plist which contains some important data related to the Apple -# Photos Application. Additional information and explanation of some keys-fields might be found with -# research and published blogs written by Scott Koenig https://theforensicscooter.com/ +__artifacts_v2__ = { + 'Ph80ComAppleMobileSlideshowPlist': { + 'name': 'Ph80-Com-Apple-MobileSlideshow-Plist', + 'description': 'Parses basic data from com.apple.mobileslideshow.plist which contains some important' + ' data related to the Apple Photos Application. Additional information and explanation of some' + ' keys-fields might be found with research and published blogs written by' + ' Scott Koenig https://theforensicscooter.com/', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains com.apple.mobileslideshow.plist', + 'category': 'Photos-Z-Settings', + 'notes': '', + 'paths': ('*/Library/Preferences/com.apple.mobileslideshow.plist',), + "output_types": ["standard", "tsv", "none"] + } +} import datetime import os import plistlib import nska_deserialize as nd import scripts.artifacts.artGlobals -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, logdevinfo, tsv, is_platform_windows - +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path -def get_ph80comapplemobileslideshowplist(files_found, report_folder, seeker, wrap_text, time_offset): +@artifact_processor +def Ph80ComAppleMobileSlideshowPlist(files_found, report_folder, seeker, wrap_text, time_offset): data_list = [] - file_found = str(files_found[0]) - with open(file_found, "rb") as fp: + source_path = str(files_found[0]) + + with open(source_path, "rb") as fp: pl = plistlib.load(fp) for key, val in pl.items(): + if key == 'downloadAndKeepOriginals': - data_list.append(('downloadAndKeepOriginals', val)) - logdevinfo(f"comapplemobileslideshowplist-downloadAndKeepOriginals: {val}") + logfunc(f"downloadAndKeepOriginals: {val}") + device_info("com.apple.mobileslideshow.plist", "downloadAndKeepOriginals", str(val), source_path) elif key == 'PhotosSharedLibrarySyncingIsActive': - data_list.append(('PhotosSharedLibrarySyncingIsActive', val)) - logdevinfo(f"comapplemobileslideshowplist-PhotosSharedLibrarySyncingIsActive: {val}") + logfunc(f"PhotosSharedLibrarySyncingIsActive: {val}") + device_info("com.apple.mobileslideshow.plist", "PhotosSharedLibrarySyncingIsActive", str(val), source_path) elif key == 'TipKitEligibleContents-com.apple.mobileslideshow.one-up-photo': pathto = os.path.join(report_folder, 'TipKitEligibleContents-com.apple.mobileslideshow.one-up-photo' + '.bplist') @@ -47,41 +59,10 @@ def get_ph80comapplemobileslideshowplist(files_found, report_folder, seeker, wra ValueError, TypeError, OSError, OverflowError) as ex: logfunc('Had exception: ' + str(ex)) - data_list.append(('TipKitEligibleContents-com.apple.mobileslideshow.one-up-photo', val)) + data_list.append(('TipKitEligibleContents-com.apple.mobileslideshow.one-up-photo', str(val))) else: - data_list.append((key, val)) + data_list.append((key, str(val))) - if len(data_list) > 0: - description = ('Parses data from com.apple.mobileslideshow.plist which contains some important data' - ' related to the Apple Photos Application. Additional information and explanation of some' - ' keys-fields might be found with research and published blogs written by' - ' Scott Koenig https://theforensicscooter.com/') - report = ArtifactHtmlReport('Ph80-Com-Apple-MobileSlideshow-Plist') - report.start_artifact_report(report_folder, 'Ph80-Com-Apple-MobileSlideshow-Plist', description) - report.add_script() - data_headers = ('Key', 'Values') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph80-Com-Apple-MobileSlideshow-Plist' - tsv(report_folder, data_headers, data_list, tsvname) - - -__artifacts_v2__ = { - 'Ph80-Com-Apple-MobileSlideshow-Plist': { - 'name': 'Photos App Settings Ph80 com.apple.mobileslideshow-plist', - 'description': 'Parses basic data from com.apple.mobileslideshow.plist which contains some important' - ' data related to the Apple Photos Application. Additional information and explanation of some' - ' keys-fields might be found with research and published blogs written by' - ' Scott Koenig https://theforensicscooter.com/', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-06-8', - 'requirements': 'Acquisition that contains com.apple.mobileslideshow.plist', - 'category': 'Photos-Z-Settings', - 'notes': '', - 'paths': '*/Library/Preferences/com.apple.mobileslideshow.plist', - 'function': 'get_ph80comapplemobileslideshowplist' - } -} + data_headers = ('Property','Property Value') + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph81comappleCameraPlist.py b/scripts/artifacts/Ph81comappleCameraPlist.py index a7239609..d98e9598 100644 --- a/scripts/artifacts/Ph81comappleCameraPlist.py +++ b/scripts/artifacts/Ph81comappleCameraPlist.py @@ -1,26 +1,38 @@ -# Author: Scott Koenig, assisted by past contributors -# Version: 1.0 -# -# Description: -# Parses basic data from */mobile/Library/Preferences/com.apple.camera.plist which contains some important data -# related to the Apple Camera Application. Additional information and explanation of some keys-fields -# might be found with research and published blogs written by Scott Koenig https://theforensicscooter.com/ +__artifacts_v2__ = { + 'Ph81ComAppleCameraPlist': { + 'name': 'Ph81-Com-Apple-Camera-Plist', + 'description': 'Parses data from */mobile/Library/Preferences/com.apple.camera.plist which contains some' + ' important data related to the Apple Camera Application. Additional information and' + ' explanation of some keys-fields might be found with research and published blogs written by' + ' Scott Koenig https://theforensicscooter.com/', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains com.apple.camera.plist', + 'category': 'Photos-Z-Settings', + 'notes': '', + 'paths': ('*/mobile/Library/Preferences/com.apple.camera.plist',), + "output_types": ["standard", "tsv", "none"] + } +} import datetime import os import plistlib import nska_deserialize as nd import scripts.artifacts.artGlobals -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, logdevinfo, tsv, is_platform_windows - +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path -def get_81comapplecameraplist(files_found, report_folder, seeker, wrap_text, time_offset): +@artifact_processor +def Ph81ComAppleCameraPlist(files_found, report_folder, seeker, wrap_text, time_offset): data_list = [] - file_found = str(files_found[0]) - with open(file_found, "rb") as fp: + source_path = str(files_found[0]) + + with open(source_path, "rb") as fp: pl = plistlib.load(fp) for key, val in pl.items(): + if key == 'CAMUserPreferenceSharedLibraryLastDiscoveryLocation': pathto = os.path.join(report_folder, 'CAMUserPreferenceSharedLibraryLastDiscoveryLocation' + '.bplist') with open(pathto, "ab") as wf: @@ -39,7 +51,7 @@ def get_81comapplecameraplist(files_found, report_folder, seeker, wrap_text, tim ValueError, TypeError, OSError, OverflowError) as ex: logfunc('Had exception: ' + str(ex)) - data_list.append(('CAMUserPreferenceSharedLibraryLastDiscoveryLocation', val)) + data_list.append(('CAMUserPreferenceSharedLibraryLastDiscoveryLocation', str(val))) elif key == 'CAMUserPreferenceSharedLibraryLastLocation': pathto = os.path.join(report_folder, 'CAMUserPreferenceSharedLibraryLastLocation' + '.bplist') @@ -59,7 +71,7 @@ def get_81comapplecameraplist(files_found, report_folder, seeker, wrap_text, tim ValueError, TypeError, OSError, OverflowError) as ex: logfunc('Had exception: ' + str(ex)) - data_list.append(('CAMUserPreferenceSharedLibraryLastLocation', val)) + data_list.append(('CAMUserPreferenceSharedLibraryLastLocation', str(val))) elif key == 'CAMUserPreferenceSharedLibraryLastUserActionLocation': pathto = os.path.join(report_folder, 'CAMUserPreferenceSharedLibraryLastUserActionLocation' + '.bplist') @@ -79,7 +91,7 @@ def get_81comapplecameraplist(files_found, report_folder, seeker, wrap_text, tim ValueError, TypeError, OSError, OverflowError) as ex: logfunc('Had exception: ' + str(ex)) - data_list.append(('CAMUserPreferenceSharedLibraryLastUserActionLocation', val)) + data_list.append(('CAMUserPreferenceSharedLibraryLastUserActionLocation', str(val))) elif key == 'CAMUserPreferenceExposureBiasByMode': pathto = os.path.join(report_folder, 'CAMUserPreferenceExposureBiasByMode' + '.bplist') @@ -99,41 +111,10 @@ def get_81comapplecameraplist(files_found, report_folder, seeker, wrap_text, tim ValueError, TypeError, OSError, OverflowError) as ex: logfunc('Had exception: ' + str(ex)) - data_list.append(('CAMUserPreferenceExposureBiasByMode', val)) + data_list.append(('CAMUserPreferenceExposureBiasByMode', str(val))) else: - data_list.append((key, val)) - - if len(data_list) > 0: - description = ('Parses data from */mobile/Library/Preferences/com.apple.camera.plist which contains some' - ' important data related to the Apple Camera Application. Additional information and' - ' explanation of some keys-fields might be found with research and published blogs written by' - ' Scott Koenig https://theforensicscooter.com/') - report = ArtifactHtmlReport('Ph81-Com-Apple-Camera-Plist') - report.start_artifact_report(report_folder, 'Ph81-Com-Apple-Camera-Plist', description) - report.add_script() - data_headers = ('Key', 'Values') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph81-Com-Apple-Camera-Plist' - tsv(report_folder, data_headers, data_list, tsvname) - + data_list.append((key, str(val))) -__artifacts_v2__ = { - 'Ph81-Com-Apple-Camera-Plist': { - 'name': 'Camera App Settings Ph81 Com-Apple-Camera-Plist', - 'description': 'Parses data from */mobile/Library/Preferences/com.apple.camera.plist which contains some' - ' important data related to the Apple Camera Application. Additional information and' - ' explanation of some keys-fields might be found with research and published blogs written by' - ' Scott Koenig https://theforensicscooter.com/', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-06-1', - 'requirements': 'Acquisition that contains com.apple.camera.plist', - 'category': 'Photos-Z-Settings', - 'notes': '', - 'paths': '*/mobile/Library/Preferences/com.apple.camera.plist', - 'function': 'get_81comapplecameraplist' - } -} + data_headers = ('Property','Property Value') + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph82comappleMediaAnalysisDPlist.py b/scripts/artifacts/Ph82comappleMediaAnalysisDPlist.py index 3bec86ee..59ddfb70 100644 --- a/scripts/artifacts/Ph82comappleMediaAnalysisDPlist.py +++ b/scripts/artifacts/Ph82comappleMediaAnalysisDPlist.py @@ -1,61 +1,39 @@ -# Author: Scott Koenig, assisted by past contributors -# Version: 1.0 -# -# Description: -# Parses basic data from */mobile/Library/Preferences/com.apple.mediaanalysisd.plist which contains -# some important data related to Apple Photos Libraries storage locations and Media Analysis Completion. -# Additional information and explanation of some keys-fields -# might be found with research and published blogs written by Scott Koenig https://theforensicscooter.com/ - -import datetime -import os -import plistlib -import nska_deserialize as nd -import scripts.artifacts.artGlobals -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, logdevinfo, tsv, is_platform_windows - - -def get_82comapplemediaanalysisdplist(files_found, report_folder, seeker, wrap_text, time_offset): - data_list = [] - file_found = str(files_found[0]) - with open(file_found, "rb") as fp: - pl = plistlib.load(fp) - for key, val in pl.items(): - data_list.append((key, val)) - - if len(data_list) > 0: - description = ('Parses basic data from */mobile/Library/Preferences/com.apple.mediaanalysisd.plist which' - ' contains some important data related to Apple Photos Libraries storage locations and' - ' Media Analysis Completion. Additional information and explanation of some keys-fields' - ' might be found with research and published blogs written by' - ' Scott Koenig https://theforensicscooter.com/') - report = ArtifactHtmlReport('Ph82-Com-Apple-MediaAnalysisD-Plist') - report.start_artifact_report(report_folder, 'Ph82-Com-Apple-MediaAnalysisD-Plist', description) - report.add_script() - data_headers = ('Key', 'Values') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph82-Com-Apple-MediaAnalysisD-Plist' - tsv(report_folder, data_headers, data_list, tsvname) - - __artifacts_v2__ = { - 'Ph82-Com-Apple-MediaAnalysisD-Plist': { - 'name': 'Photo Libraries and Media Analysis Completion Ph82 Com-Apple-MediaAnalysisD-Plist', + 'Ph82ComAppleMediaAnalysisDPlist': { + 'name': 'Ph82-Com-Apple-MediaAnalysisD-Plist', 'description': 'Parses basic data from */mobile/Library/Preferences/com.apple.mediaanalysisd.plist which' ' contains some important data related to Apple Photos Libraries storage locations and' ' Media Analysis Completion. Additional information and explanation of some keys-fields' ' might be found with research and published blogs written by' ' Scott Koenig https://theforensicscooter.com/', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-06-1', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', 'requirements': 'Acquisition that contains com.apple.mediaanalysisd.plist', 'category': 'Photos-Z-Settings', 'notes': '', - 'paths': '*/mobile/Library/Preferences/com.apple.mediaanalysisd.plist', - 'function': 'get_82comapplemediaanalysisdplist' + 'paths': ('*/mobile/Library/Preferences/com.apple.mediaanalysisd.plist',), + "output_types": ["standard", "tsv", "none"] } } + +import datetime +import os +import plistlib +import nska_deserialize as nd +import scripts.artifacts.artGlobals +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path + +@artifact_processor +def Ph82ComAppleMediaAnalysisDPlist(files_found, report_folder, seeker, wrap_text, time_offset): + data_list = [] + source_path = str(files_found[0]) + + with open(source_path, "rb") as fp: + pl = plistlib.load(fp) + for key, val in pl.items(): + data_list.append((key, str(val))) + + data_headers = ('Property','Property Value') + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph83comapplePurpleBuddyPlist.py b/scripts/artifacts/Ph83comapplePurpleBuddyPlist.py index a6ee5be4..2e604ea2 100644 --- a/scripts/artifacts/Ph83comapplePurpleBuddyPlist.py +++ b/scripts/artifacts/Ph83comapplePurpleBuddyPlist.py @@ -1,57 +1,42 @@ -# Author: Scott Koenig, assisted by past contributors -# Version: 1.0 -# -# Description: -# Parses basic data from com.apple.purplebuddy.plist which contains some important data related to device restore. +__artifacts_v2__ = { + 'Ph83ComApplePurpleBuddyPlist': { + 'name': 'Ph83-Com-Apple-PurpleBuddy-Plist', + 'description': 'Parses basic data from com.apple.purplebuddy.plist which contains some important data' + ' related to device restore.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains com.apple.purplebuddy.plist', + 'category': 'Photos-Z-Settings', + 'notes': '', + 'paths': ('*/Library/Preferences/com.apple.purplebuddy.plist',), + "output_types": ["standard", "tsv", "none"] + } +} import datetime import os import plistlib import nska_deserialize as nd import scripts.artifacts.artGlobals -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, logdevinfo, tsv, is_platform_windows - +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path -def get_ph83comapplepurplebuddyplist(files_found, report_folder, seeker, wrap_text, time_offset): +@artifact_processor +def Ph83ComApplePurpleBuddyPlist(files_found, report_folder, seeker, wrap_text, time_offset): data_list = [] - file_found = str(files_found[0]) - with open(file_found, "rb") as fp: + source_path = str(files_found[0]) + + with open(source_path, "rb") as fp: pl = plistlib.load(fp) for key, val in pl.items(): + if key == 'SetupState': - data_list.append(('SetupState', val)) - logdevinfo(f"comapplepurplebuddyplist-SetupState: {val}") + logfunc(f"SetupState: {val}") + device_info("com.apple.purplebuddy.plist", "SetupState", str(val), source_path) else: - data_list.append((key, val)) + data_list.append((key, str(val))) - if len(data_list) > 0: - description = ('Parses basic data from com.apple.purplebuddy.plist which contains some important data' - ' related to device restore.') - report = ArtifactHtmlReport('Ph83-Com-Apple-PurpleBuddy-Plist') - report.start_artifact_report(report_folder, 'Ph83-Com-Apple-PurpleBuddy-Plist', description) - report.add_script() - data_headers = ('Key', 'Values') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph83-Com-Apple-PurpleBuddy-Plist' - tsv(report_folder, data_headers, data_list, tsvname) - - -__artifacts_v2__ = { - 'Ph83-Com-Apple-PurpleBuddy-Plist': { - 'name': 'Photos App Settings Ph83 com.apple.purplebuddy-plist', - 'description': 'Parses basic data from com.apple.purplebuddy.plist which contains some important data' - ' related to device restore.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-06-8', - 'requirements': 'Acquisition that contains com.apple.purplebuddy.plist', - 'category': 'Photos-Z-Settings', - 'notes': '', - 'paths': '*/Library/Preferences/com.apple.purplebuddy.plist', - 'function': 'get_ph83comapplepurplebuddyplist' - } -} + data_headers = ('Property','Property Value') + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph84CameraSmartSharingMetadataPlist.py b/scripts/artifacts/Ph84CameraSmartSharingMetadataPlist.py index ecf2886a..28f2afea 100644 --- a/scripts/artifacts/Ph84CameraSmartSharingMetadataPlist.py +++ b/scripts/artifacts/Ph84CameraSmartSharingMetadataPlist.py @@ -1,44 +1,55 @@ -# Author: Scott Koenig https://theforensicscooter.com/ -# Version: 1.0 -# -# Description: -# Parses basic data from */PhotoData/Caches/SmartSharing/camera_smart_sharing_metadata.plist -# which contains some important data related to iCloud Shared Photos Library -# Smart Camera Settings and auto sharing. Additional information and -# explanation of some keys-fields might be found with research and published blogs written by -# Scott Koenig https://theforensicscooter.com/ +__artifacts_v2__ = { + 'Ph84CameraSmartSharingMetadataPlist': { + 'name': 'Ph84-Camera-Smart-Sharing-Metadata-Plist', + 'description': 'Parses basic data from */PhotoData/Caches/SmartSharing/camera_smart_sharing_metadata.plist' + ' which contains some important data related to iCloud Shared Photos Library' + ' Smart Camera Settings and auto sharing. Additional information and' + ' explanation of some keys-fields might be found with research and published blogs written by' + ' Scott Koenig https://theforensicscooter.com/', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains camera_smart_sharing_metadata.plist', + 'category': 'Photos-Z-Settings', + 'notes': '', + 'paths': ('*/PhotoData/Caches/SmartSharing/camera_smart_sharing_metadata.plist',), + "output_types": ["standard", "tsv", "none"] + } +} +import datetime import os import plistlib -import biplist import nska_deserialize as nd -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, logdevinfo, tsv, is_platform_windows +import scripts.artifacts.artGlobals +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path - -def get_ph84camerasmartsharingmetadataplist(files_found, report_folder, seeker, wrap_text, timezone_offset): +@artifact_processor +def Ph84CameraSmartSharingMetadataPlist(files_found, report_folder, seeker, wrap_text, timezone_offset): data_list = [] - file_found = str(files_found[0]) - if file_found.endswith('camera_smart_sharing_metadata.plist'): - with open(file_found, 'rb') as f: + source_path = str(files_found[0]) + + if source_path.endswith('camera_smart_sharing_metadata.plist'): + with open(source_path, 'rb') as f: try: deserialized_plist = nd.deserialize_plist(f) plist = deserialized_plist - for key, value in plist.items(): - if key == 'homeLocations': - homelocations = value + for key, val in plist.items(): if key == 'creationDate': - creationdate = value + creationdate = val + if key == 'homeLocations': + homelocations = val if key == 'frequentLocations': - frequentlocations = value + frequentlocations = val if key == 'identities': - identities = value + identities = val if key == 'locationShiftingRequired': - locationshiftingrequired = value + locationshiftingrequired = val if key == 'version': - version = value + version = val if key == 'libraryScopeLocalIdentifier': - libraryscopelocalidentifier = value + libraryscopelocalidentifier = val except (nd.DeserializeError, nd.biplist.NotBinaryPlistException, @@ -49,39 +60,17 @@ def get_ph84camerasmartsharingmetadataplist(files_found, report_folder, seeker, TypeError, OSError, OverflowError) as ex: logfunc('Had exception: ' + str(ex)) - data_list.append((homelocations, creationdate, frequentlocations, identities, locationshiftingrequired, + data_list.append((creationdate, homelocations, frequentlocations, identities, locationshiftingrequired, version, libraryscopelocalidentifier)) - description = ('Parses basic data from */PhotoData/Caches/SmartSharing/camera_smart_sharing_metadata.plist' - ' which contains some important data related to iCloud Shared Photos Library Smart' - ' Camera Settings and auto sharing.') - report = ArtifactHtmlReport('Ph84-Camera-Smart-Sharing-Metadata-Plist') - report.start_artifact_report(report_folder, 'Ph84-Camera-Smart-Sharing-Metadata-Plist', description) - report.add_script() - data_headers = ('homeLocations', 'creationDate', 'frequentLocations', 'identities', 'locationShiftingRequired', - 'version', 'libraryScopeLocalIdentifier') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph84-Camera-Smart-Sharing-Metadata-Plist' - tsv(report_folder, data_headers, data_list, tsvname) + data_headers = ( + ('creationdate', 'datetime'), + 'homelocations', + 'frequentlocations', + 'identities', + 'locationshiftingrequired', + 'version', + 'libraryscopelocalidentifier') + return data_headers, data_list, source_path -__artifacts_v2__ = { - 'Ph84-Camera-Smart-Sharing-Metadata-Plist': { - 'name': 'Camera Smart Sharing Settings Ph84 Camera Smart Sharing Metadata Plist', - 'description': 'Parses basic data from */PhotoData/Caches/SmartSharing/camera_smart_sharing_metadata.plist' - ' which contains some important data related to iCloud Shared Photos Library' - ' Smart Camera Settings and auto sharing. Additional information and' - ' explanation of some keys-fields might be found with research and published blogs written by' - ' Scott Koenig https://theforensicscooter.com/', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-06-8', - 'requirements': 'Acquisition that contains camera_smart_sharing_metadata.plist', - 'category': 'Photos-Z-Settings', - 'notes': '', - 'paths': '*/PhotoData/Caches/SmartSharing/camera_smart_sharing_metadata.plist', - 'function': 'get_ph84camerasmartsharingmetadataplist' - } -} diff --git a/scripts/artifacts/Ph85acntsdcloudServiceEnableLogplist.py b/scripts/artifacts/Ph85acntsdcloudServiceEnableLogplist.py index da3a0efe..02b1a3c8 100644 --- a/scripts/artifacts/Ph85acntsdcloudServiceEnableLogplist.py +++ b/scripts/artifacts/Ph85acntsdcloudServiceEnableLogplist.py @@ -1,24 +1,35 @@ -# Author: Scott Koenig https://theforensicscooter.com/ -# Version: 1.0 -# -# Description: -# Parses basic data from */PhotoData/private/com.apple.accountsd/cloudServiceEnableLog.plist which is a plist that -# tracks when Cloud Photos Library (CPL) and Shared Albums have been enabled. -# Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/ +__artifacts_v2__ = { + 'Ph85accountsdcloudServiceEnableLogPlist': { + 'name': 'Ph85-accountsd-cloud-Service-Enable-Log-Plist', + 'description': 'Parses basic data from */PhotoData/private/com.apple.accountsd/cloudServiceEnableLog.plist' + ' which is a plist that tracks when Cloud Photos Library (CPL) and Shared Albums have been' + ' enabled. Based on research and published blogs written by Scott Koenig' + ' https://theforensicscooter.com/', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains accountsd cloudServiceEnableLog.plist', + 'category': 'Photos-Z-Settings', + 'notes': '', + 'paths': ('*/com.apple.accountsd/cloudServiceEnableLog.plist',), + "output_types": ["standard", "tsv", "none"] + } +} +import datetime import os import plistlib -import biplist import nska_deserialize as nd import scripts.artifacts.artGlobals -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, logdevinfo, tsv, is_platform_windows +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path - -def get_ph85accountsdcldservenalogplist(files_found, report_folder, seeker, wrap_text, timezone_offset): +@artifact_processor +def Ph85accountsdcloudServiceEnableLogPlist(files_found, report_folder, seeker, wrap_text, timezone_offset): data_list = [] - file_found = str(files_found[0]) - with open(file_found, "rb") as fp: + source_path = str(files_found[0]) + + with open(source_path, "rb") as fp: pl = plistlib.load(fp) if len(pl) > 0: for key in pl: @@ -37,35 +48,8 @@ def get_ph85accountsdcldservenalogplist(files_found, report_folder, seeker, wrap data_list.append((timestamputc, servicetype, enabledstate)) - description = ('Parses basic data from */PhotoData/private/com.apple.accountsd/cloudServiceEnableLog.plist' - ' which is a plist that tracks when Cloud Photos Library (CPL) and Shared Albums have been' - ' enabled. Based on research and published blogs written by Scott Koenig' - ' https://theforensicscooter.com/') - report = ArtifactHtmlReport('Ph85-accountsd-cloud-Service-Enable-Log-Plist') - report.start_artifact_report(report_folder, 'Ph85-accountsd-cloud-Service-Enable-Log-Plist', description) - report.add_script() - data_headers = ('TimestampUTC', 'Service-Type', 'Enabled-State') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph85-accountsd-cloud-Service-Enable-Log-Plist' - tsv(report_folder, data_headers, data_list, tsvname) - - -__artifacts_v2__ = { - 'Ph85-accountsd-cloud-Service-Enable-Log-Plist': { - 'name': 'Accountsd Ph85 cloud Services Enable Log Plist', - 'description': 'Parses basic data from */PhotoData/private/com.apple.accountsd/cloudServiceEnableLog.plist' - ' which is a plist that tracks when Cloud Photos Library (CPL) and Shared Albums have been' - ' enabled. Based on research and published blogs written by Scott Koenig' - ' https://theforensicscooter.com/', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-06-20', - 'requirements': 'Acquisition that contains accountsd cloudServiceEnableLog.plist', - 'category': 'Photos-Z-Settings', - 'notes': '', - 'paths': '*/com.apple.accountsd/cloudServiceEnableLog.plist', - 'function': 'get_ph85accountsdcldservenalogplist' - } -} + data_headers = ( + 'TimestampUTC', + 'Service-Type', + 'Enabled-State') + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph86astsdcloudServiceEnableLogplist.py b/scripts/artifacts/Ph86astsdcloudServiceEnableLogplist.py index 5b27c7ab..d87c2c17 100644 --- a/scripts/artifacts/Ph86astsdcloudServiceEnableLogplist.py +++ b/scripts/artifacts/Ph86astsdcloudServiceEnableLogplist.py @@ -1,24 +1,34 @@ -# Author: Scott Koenig https://theforensicscooter.com/ -# Version: 1.0 -# -# Description: -# Parses basic data from */PhotoData/private/com.apple.assetsd/cloudServiceEnableLog.plist which is a plist that -# tracks when Cloud Photos Library (CPL) has been enabled. -# Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/ +__artifacts_v2__ = { + 'Ph86assetsdcloudServiceEnableLogPlist': { + 'name': 'Ph86-assetsd-cloud-Service-Enable-Log-Plist', + 'description': 'Parses basic data from */PhotoData/private/com.apple.accountsd/cloudServiceEnableLog.plist' + ' which is a plist that tracks when Cloud Photos Library (CPL) has been enabled.' + ' Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains assetsd cloudServiceEnableLog.plist', + 'category': 'Photos-Z-Settings', + 'notes': '', + 'paths': ('*/com.apple.assetsd/cloudServiceEnableLog.plist',), + "output_types": ["standard", "tsv", "none"] + } +} +import datetime import os import plistlib -import biplist import nska_deserialize as nd import scripts.artifacts.artGlobals -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, logdevinfo, tsv, is_platform_windows +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, logfunc, device_info, get_file_path - -def get_ph86assetsdcldservenalogplist(files_found, report_folder, seeker, wrap_text, timezone_offset): +@artifact_processor +def Ph86assetsdcloudServiceEnableLogPlist(files_found, report_folder, seeker, wrap_text, timezone_offset): data_list = [] - file_found = str(files_found[0]) - with open(file_found, "rb") as fp: + source_path = str(files_found[0]) + + with open(source_path, "rb") as fp: pl = plistlib.load(fp) if len(pl) > 0: for key in pl: @@ -37,33 +47,8 @@ def get_ph86assetsdcldservenalogplist(files_found, report_folder, seeker, wrap_t data_list.append((timestamputc, servicetype, enabledstate)) - description = ('Parses basic data from */PhotoData/private/com.apple.assetsd/cloudServiceEnableLog.plist' - ' which is a plist that tracks when Cloud Photos Library (CPL) has been enabled.' - ' Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/') - report = ArtifactHtmlReport('Ph86-assetsd-cloud-Service-Enable-Log-Plist') - report.start_artifact_report(report_folder, 'Ph86-assetsd-cloud-Service-Enable-Log-Plist', description) - report.add_script() - data_headers = ('TimestampUTC', 'Service-Type', 'Enabled-State') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph86-assetsd-cloud-Service-Enable-Log-Plist' - tsv(report_folder, data_headers, data_list, tsvname) - - -__artifacts_v2__ = { - 'Ph86-assetsd-cloud-Service-Enable-Log-Plist': { - 'name': 'Assetsd Ph86 cloud Services Enable Log Plist', - 'description': 'Parses basic data from */PhotoData/private/com.apple.accountsd/cloudServiceEnableLog.plist' - ' which is a plist that tracks when Cloud Photos Library (CPL) has been enabled.' - ' Based on research and published blogs written by Scott Koenig https://theforensicscooter.com/', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-06-20', - 'requirements': 'Acquisition that contains assetsd cloudServiceEnableLog.plist', - 'category': 'Photos-Z-Settings', - 'notes': '', - 'paths': '*/com.apple.assetsd/cloudServiceEnableLog.plist', - 'function': 'get_ph86assetsdcldservenalogplist' - } -} + data_headers = ( + 'TimestampUTC', + 'Service-Type', + 'Enabled-State') + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph8HasAdjustment.py b/scripts/artifacts/Ph8HasAdjustment.py index 71a246b3..7d6ec635 100644 --- a/scripts/artifacts/Ph8HasAdjustment.py +++ b/scripts/artifacts/Ph8HasAdjustment.py @@ -1,40 +1,48 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses basic asset record data from Photos.sqlite for adjusted assets and supports iOS 11-18. -# The results for this script will contain one record per ZASSET table Z_PK value. -# This parser is based on research and SQLite queries written by Scott Koenig -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph8HasAdjustmentPhDaPsql': { + 'name': 'Ph8-Has Adjustment-PhDaPsql', + 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for adjusted assets' + ' and supports iOS 11-18. The results for this script will contain' + ' one row per ZASSET table Z_PK value.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-B-Interaction_Artifacts', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, \ - open_sqlite_db_readonly - +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc -def get_ph8hasadjustmentphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph8HasAdjustmentPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for PhotoData-Photos.sqlite adjusted assets from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp', CASE zAsset.ZHASADJUSTMENTS @@ -82,62 +90,41 @@ def get_ph8hasadjustmentphdapsql(files_found, report_folder, seeker, wrap_text, LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK WHERE zAsset.ZHASADJUSTMENTS = 1 ORDER BY zUnmAdj.ZADJUSTMENTTIMESTAMP - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for adjusted assets' \ - ' and supports iOS 11-13. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph8-Has Adjustment-PhDaPsq') - report.start_artifact_report(report_folder, 'Ph8-Has Adjustment-PhDaPsql', description) - report.add_script() - data_headers = ('zUnmAdj-Adjustment Timestamp', - 'zAsset-Has Adjustments-Camera-Effects-Filters', - 'zAddAssetAttr-Editor Bundle ID', - 'zUnmAdj-Editor Localized Name', - 'zUnmAdj-Adjustment Format ID', - 'zUnmAdj-Adjustment Render Types', - 'zUnmAdj-Adjustment Format Version', - 'zAsset-Directory-Path', - 'zAsset-Filename', - 'zAddAssetAttr- Original Filename', - 'zCldMast- Original Filename', - 'zCldMast-Import Session ID- AirDrop-StillTesting', - 'zAsset-zPK', - 'zAddAssetAttr-zPK', - 'zAsset-UUID = store.cloudphotodb', - 'zAddAssetAttr-Master Fingerprint') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph8-Has Adjustment-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph8-Has Adjustment-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Adjusted Assets') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15])) + + data_headers = (('zUnmAdj-Adjustment Timestamp', 'datetime'), + 'zAsset-Has Adjustments-Camera-Effects-Filters', + 'zAddAssetAttr-Editor Bundle ID', + 'zUnmAdj-Editor Localized Name', + 'zUnmAdj-Adjustment Format ID', + 'zUnmAdj-Adjustment Render Types', + 'zUnmAdj-Adjustment Format Version', + 'zAsset-Directory-Path', + 'zAsset-Filename', + 'zAddAssetAttr- Original Filename', + 'zCldMast- Original Filename', + 'zCldMast-Import Session ID- AirDrop-StillTesting', + 'zAsset-zPK', + 'zAddAssetAttr-zPK', + 'zAsset-UUID = store.cloudphotodb', + 'zAddAssetAttr-Master Fingerprint') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp', CASE zAsset.ZHASADJUSTMENTS @@ -186,76 +173,55 @@ def get_ph8hasadjustmentphdapsql(files_found, report_folder, seeker, wrap_text, LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK WHERE zAsset.ZHASADJUSTMENTS = 1 ORDER BY zUnmAdj.ZADJUSTMENTTIMESTAMP - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for adjusted assets' \ - ' and supports iOS 14-17. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph8-Has Adjustment-PhDaPsq') - report.start_artifact_report(report_folder, 'Ph8-Has Adjustment-PhDaPsql', description) - report.add_script() - data_headers = ('zUnmAdj-Adjustment Timestamp-0', - 'zAsset-Has Adjustments-Camera-Effects-Filters-1', - 'zAddAssetAttr-Editor Bundle ID-2', - 'zUnmAdj-Editor Localized Name-3', - 'zUnmAdj-Adjustment Format ID-4', - 'zUnmAdj-Adjustment Render Types-5', - 'zUnmAdj-Adjustment Format Version-6', - 'zAsset-Directory-Path-7', - 'zAsset-Filename-8', - 'zAddAssetAttr- Original Filename-9', - 'zCldMast- Original Filename-10', - 'zCldMast-Import Session ID- AirDrop-StillTesting-11', - 'zAsset-zPK-12', - 'zAddAssetAttr-zPK-13', - 'zAsset-UUID = store.cloudphotodb-14', - 'zAddAssetAttr-Master Fingerprint-15', - 'zAddAssetAttr.Adjusted Fingerprint-16') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph8-Has Adjustment-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph8-Has Adjustment-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Adjusted Assets') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16])) + + data_headers = (('zUnmAdj-Adjustment Timestamp-0', 'datetime'), + 'zAsset-Has Adjustments-Camera-Effects-Filters-1', + 'zAddAssetAttr-Editor Bundle ID-2', + 'zUnmAdj-Editor Localized Name-3', + 'zUnmAdj-Adjustment Format ID-4', + 'zUnmAdj-Adjustment Render Types-5', + 'zUnmAdj-Adjustment Format Version-6', + 'zAsset-Directory-Path-7', + 'zAsset-Filename-8', + 'zAddAssetAttr- Original Filename-9', + 'zCldMast- Original Filename-10', + 'zCldMast-Import Session ID- AirDrop-StillTesting-11', + 'zAsset-zPK-12', + 'zAddAssetAttr-zPK-13', + 'zAsset-UUID = store.cloudphotodb-14', + 'zAddAssetAttr-Master Fingerprint-15', + 'zAddAssetAttr.Adjusted Fingerprint-16') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp', CASE zAsset.ZADJUSTMENTSSTATE WHEN 0 THEN '0-No-Adjustments-0' - WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2' - WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3' + WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2' + WHEN 3 THEN '3-Adjusted-Camera-lens-3' ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' - END AS 'zAsset-Adjustments_State/Camera-Effects-Filters-iOS18', - DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18', + END AS 'zAsset-Adjustments_State', + DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date', CASE zCompSyncAttr.ZLOCALANALYSISMAJORVERSION WHEN 1 THEN '1-Is_Local_Analysis_Major_Version-1' ELSE 'Unknown-New-Value!: ' || zCompSyncAttr.ZLOCALANALYSISMAJORVERSION || '' - END AS 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18', + END AS 'zCompSyncAttr-Local_Analysis_Major_Version', zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', zUnmAdj.ZEDITORLOCALIZEDNAME AS 'zUnmAdj-Editor Localized Name', zUnmAdj.ZADJUSTMENTFORMATIDENTIFIER AS 'zUnmAdj-Adjustment Format ID', @@ -282,39 +248,41 @@ def get_ph8hasadjustmentphdapsql(files_found, report_folder, seeker, wrap_text, ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTFORMATVERSION || '' END AS 'zUnmAdj-Adjustment Format Version', CASE zAsset.ZISDETECTEDSCREENSHOT - WHEN 0 THEN '0-Not_Detected_Screenshot iOS18_Still_Testing-0' - WHEN 1 THEN '1-Detected_Screenshot iOS18_Still_Testing-1' + WHEN 0 THEN '0-Not_Screenshot-0' + WHEN 1 THEN '1-Screenshot-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' - END AS 'zAsset-Is_Detected_Screenshot-iOS18', + END AS 'zAsset-Is_Detected_Screenshot', CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recently_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' + WHEN 0 THEN '0-Not_Recently_Saved-0' + WHEN 1 THEN '1-Recently_Saved-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', + END AS 'zAsset-Is_Recently_Saved', zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', zAsset.ZFILENAME AS 'zAsset-Filename', zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', - zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage-iOS18', - zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18', + zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage', + zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version', zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', - zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18', - zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18', - zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18', - zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT-iOS18', - zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT-iOS18', + zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK', + zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr', + zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK', + zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT', + zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash', zUnmAdj.ZOTHERADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Other Adjustments Fingerprint', zUnmAdj.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Similar to Orig Adjustments Fingerprint', - zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18', - CASE zExtAttr.ZGENERATIVEAITYPE - WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0' - ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' - END AS 'zExtAttr-Generative_AI_Type-iOS18' + zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint', + CASE zExtAttr.ZGENERATIVEAITYPE + WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0' + WHEN 2 THEN '2-CleanUp-SafetyFilter-2' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' + END AS 'zExtAttr-Generative_AI_Type', + zExtAttr.ZCREDIT AS 'zExtAttr-Credit' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES @@ -323,88 +291,48 @@ def get_ph8hasadjustmentphdapsql(files_found, report_folder, seeker, wrap_text, LEFT JOIN ZCOMPUTESYNCATTRIBUTES zCompSyncAttr ON zCompSyncAttr.Z_PK = zAsset.ZCOMPUTESYNCATTRIBUTES WHERE zAsset.ZADJUSTMENTSSTATE > 0 ORDER BY zUnmAdj.ZADJUSTMENTTIMESTAMP - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for adjusted assets' \ - ' and supports iOS 18. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph8-Has Adjustment-PhDaPsq') - report.start_artifact_report(report_folder, 'Ph8-Has Adjustment-PhDaPsql', description) - report.add_script() - data_headers = ('zUnmAdj-Adjustment Timestamp-0', - 'zAsset-Adjustments_State/Camera-Effects-Filters-iOS18-1', - 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-2', - 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-3', - 'zAddAssetAttr-Editor Bundle ID-4', - 'zUnmAdj-Editor Localized Name-5', - 'zUnmAdj-Adjustment Format ID-6', - 'zUnmAdj-Adjustment Render Types-7', - 'zUnmAdj-Adjustment Format Version-8', - 'zAsset-Is_Detected_Screenshot-iOS18-9', - 'zAsset-Is_Recently_Saved-iOS18-10', - 'zAsset-Directory-Path-11', - 'zAsset-Filename-12', - 'zAddAssetAttr- Original Filename-13', - 'zCldMast- Original Filename-14', - 'zCldMast-Import Session ID- AirDrop-StillTesting-15', - 'zCompSyncAttr-Local_Analysis_Stage-iOS18-16', - 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-17', - 'zAsset-zPK-18', - 'zAddAssetAttr-zPK-19', - 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18-20', - 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-21', - 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-22', - 'zCompSyncAttr-zENT-iOS18-23', - 'zCompSyncAttr-zOPT-iOS18-24', - 'zAsset-UUID = store.cloudphotodb-25', - 'zAddAssetAttr-Original Stable Hash-iOS18-26', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-27', - 'zUnmAdj-Other Adjustments Fingerprint-28', - 'zUnmAdj-Similar to Orig Adjustments Fingerprint-29', - 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-30', - 'zExtAttr-Generative_AI_Type-iOS18-31') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph8-Has Adjustment-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph8-Has Adjustment-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Adjusted Assets') - - db.close() - return - - -__artifacts_v2__ = { - 'Ph8-Has Adjustment-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph8 Adjusted Assets', - 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for adjusted assets' - ' and supports iOS 11-18. The results for this script will contain' - ' one record per ZASSET table Z_PK value.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-14', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-B-Interaction_Artifacts', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph8hasadjustmentphdapsql' - } -} + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32])) + + data_headers = (('zUnmAdj-Adjustment Timestamp-0', 'datetime'), + 'zAsset-Adjustments_State/Camera-Effects-Filters-1', + 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-2', + 'zCompSyncAttr-Local_Analysis_Major_Version-3', + 'zAddAssetAttr-Editor Bundle ID-4', + 'zUnmAdj-Editor Localized Name-5', + 'zUnmAdj-Adjustment Format ID-6', + 'zUnmAdj-Adjustment Render Types-7', + 'zUnmAdj-Adjustment Format Version-8', + 'zAsset-Is_Detected_Screenshot-9', + 'zAsset-Is_Recently_Saved-10', + 'zAsset-Directory-Path-11', + 'zAsset-Filename-12', + 'zAddAssetAttr- Original Filename-13', + 'zCldMast- Original Filename-14', + 'zCldMast-Import Session ID- AirDrop-StillTesting-15', + 'zCompSyncAttr-Local_Analysis_Stage-16', + 'zCompSyncAttr-Cloud_Compute_State_Version-17', + 'zAsset-zPK-18', + 'zAddAssetAttr-zPK-19', + 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-20', + 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-21', + 'zCompSyncAttr-zAsset= zAsset-zPK-22', + 'zCompSyncAttr-zENT-23', + 'zCompSyncAttr-zOPT-24', + 'zAsset-UUID = store.cloudphotodb-25', + 'zAddAssetAttr-Original Stable Hash-26', + 'zAddAssetAttr.Adjusted Stable Hash-27', + 'zUnmAdj-Other Adjustments Fingerprint-28', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-29', + 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-30', + 'zExtAttr-Generative_AI_Type-31', + 'zExtAttr-Credit-32') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph94Ios14REFforAssetAnalysis.py b/scripts/artifacts/Ph94Ios14REFforAssetAnalysis.py index 75a3ad6f..bd5c7327 100644 --- a/scripts/artifacts/Ph94Ios14REFforAssetAnalysis.py +++ b/scripts/artifacts/Ph94Ios14REFforAssetAnalysis.py @@ -1,41 +1,66 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 1.0 -# -# Description: -# Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest set of decoded data based on -# testing and research conducted by Scott Koenig https://theforensicscooter.com/ and -# queries found at https://github.com/ScottKjr3347. -# I recommend opening the TSV generated reports with Zimmerman's Tools https://ericzimmerman.github.io/#!index.md -# TimelineExplorer to view, search and filter the results. -# +__artifacts_v2__ = { + 'Ph94_1iOS14RefforAssetAnalysisPhDaPsql': { + 'name': 'Ph94.1-iOS14_Ref_for_Asset_Analysis-PhDaPsql', + 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' + ' set of decoded data based on testing and research conducted by Scott Koenig' + ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' + ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' + ' to view, search and filter the results.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv"] + }, + 'Ph94_2iOS14RefforAssetAnalysisSyndPL': { + 'name': 'Ph94.2-iOS14_Ref_for_Asset_Analysis-SyndPL', + 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' + ' This parser includes the largest set of decoded data based on testing and research' + ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' + ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' + ' TimelineExplorer to view, search and filter the results.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite', + 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly - - -def get_ph94ios14refforassetanalysisphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph94_1iOS14RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("15")): - logfunc("Unsupported version for PhotoData-Photos.sqlite reference for asset analysis from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite for iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -2801,7 +2826,7 @@ def get_ph94ios14refforassetanalysisphdapsql(files_found, report_folder, seeker, zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type', DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date', DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date', - zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token', + DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token', zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', zCompAssetAttr.ZBEHAVIORALSCORE AS 'zCompAssetAttr-Behavioral Score', zCompAssetAttr.ZFAILURESCORE AS 'zCompAssetAttr-Failure Score zCompAssetAttr', @@ -3091,1492 +3116,1470 @@ def get_ph94ios14refforassetanalysisphdapsql(files_found, report_folder, seeker, LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS1 = zAsset.Z_PK LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_55SUGGESTIONSBEINGREPRESENTATIVEASSETS ORDER BY zAsset.ZADDEDDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], - row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], - row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], - row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], - row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], - row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], - row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], - row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], - row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], - row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], - row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], - row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], - row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], - row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], - row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], - row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], - row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], - row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], - row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], - row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], - row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], - row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], - row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], - row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], - row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], - row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], - row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], - row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], - row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], - row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], - row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], - row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], - row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], - row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], - row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], - row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], - row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], - row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], - row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], - row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], - row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], - row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], - row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], - row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], - row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], - row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], - row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], - row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], - row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], - row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], - row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], - row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], - row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], - row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], - row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], - row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], - row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], - row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], - row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], - row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], - row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], - row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], - row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], - row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], - row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], - row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], - row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], - row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], - row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], - row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], - row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], - row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], - row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], - row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], - row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], - row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], - row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], - row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], - row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], - row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], - row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], - row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], - row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], - row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], - row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], - row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], - row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], - row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], - row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], - row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], - row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], - row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], - row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], - row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], - row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], - row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], - row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], - row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], - row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], - row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], - row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], - row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], - row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], - row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], - row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093], - row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100], - row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107], - row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114], - row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121], - row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128], - row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135], - row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142], - row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149], - row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156], - row[1157], row[1158], row[1159], row[1160], row[1161], row[1162], row[1163], - row[1164], row[1165], row[1166], row[1167], row[1168], row[1169], row[1170], - row[1171], row[1172], row[1173], row[1174], row[1175], row[1176], row[1177], - row[1178], row[1179], row[1180], row[1181], row[1182], row[1183], row[1184], - row[1185], row[1186], row[1187], row[1188], row[1189], row[1190], row[1191], - row[1192], row[1193], row[1194], row[1195], row[1196], row[1197], row[1198], - row[1199], row[1200], row[1201], row[1202], row[1203], row[1204], row[1205], - row[1206], row[1207], row[1208], row[1209], row[1210], row[1211], row[1212], - row[1213], row[1214], row[1215], row[1216], row[1217], row[1218], row[1219], - row[1220], row[1221], row[1222], row[1223], row[1224], row[1225], row[1226], - row[1227], row[1228], row[1229], row[1230], row[1231], row[1232], row[1233], - row[1234], row[1235], row[1236], row[1237], row[1238], row[1239], row[1240], - row[1241], row[1242], row[1243], row[1244], row[1245], row[1246], row[1247], - row[1248], row[1249], row[1250], row[1251], row[1252], row[1253], row[1254], - row[1255], row[1256], row[1257], row[1258], row[1259], row[1260], row[1261], - row[1262], row[1263], row[1264], row[1265], row[1266], row[1267], row[1268], - row[1269])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' \ -' set of decoded data based on testing and research conducted by Scott Koenig' \ -' https://theforensicscooter.com/. I recommend opening the TSV generated reports' \ -' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \ -' to view, search and filter the results.' - report = ArtifactHtmlReport('Ph94.1-iOS14_Ref_for_Asset_Analysis-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph94.1-iOS14_Ref_for_Asset_Analysis-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Added Date-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset Complete-2', - 'zAsset-zPK-4QueryStart-3', - 'zAddAssetAttr-zPK-4QueryStart-4', - 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', - 'zAddAssetAttr-Master Fingerprint-4TableStart-6', - 'zIntResou-Fingerprint-4TableStart-7', - 'zAsset-Cloud is My Asset-8', - 'zAsset-Cloud is deletable-Asset-9', - 'zAsset-Cloud_Local_State-10', - 'zAsset-Visibility State-11', - 'zExtAttr-Camera Make-12', - 'zExtAttr-Camera Model-13', - 'zExtAttr-Lens Model-14', - 'zExtAttr-Flash Fired-15', - 'zExtAttr-Focal Lenght-16', - 'zAsset-Derived Camera Capture Device-17', - 'zAddAssetAttr-Camera Captured Device-18', - 'zAddAssetAttr-Imported by-19', - 'zCldMast-Imported By-20', - 'zAddAssetAttr-Creator Bundle ID-21', - 'zAddAssetAttr-Imported By Display Name-22', - 'zCldMast-Imported by Bundle ID-23', - 'zCldMast-Imported by Display Name-24', - 'zAsset-Saved Asset Type-25', - 'zAsset-Directory-Path-26', - 'zAsset-Filename-27', - 'zAddAssetAttr- Original Filename-28', - 'zCldMast- Original Filename-29', - 'zAsset-Date Created-30', - 'zCldMast-Creation Date-31', - 'zIntResou-CldMst Date Created-32', - 'zAddAssetAttr-Time Zone Name-33', - 'zAddAssetAttr-Time Zone Offset-34', - 'zAddAssetAttr-Inferred Time Zone Offset-35', - 'zAddAssetAttr-EXIF-String-36', - 'zAsset-Modification Date-37', - 'zAsset-Last Shared Date-38', - 'zCldMast-Cloud Local State-39', - 'zCldMast-Import Date-40', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-41', - 'zAddAssetAttr-Import Session ID-4QueryStart-42', - 'zAddAssetAttr-Alt Import Image Date-43', - 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-44', - 'zAsset-Cloud Batch Publish Date-45', - 'zAsset-Cloud Server Publish Date-46', - 'zAsset-Cloud Download Requests-47', - 'zAsset-Cloud Batch ID-48', - 'zAddAssetAttr-Upload Attempts-49', - 'zAsset-Latitude-50', - 'zExtAttr-Latitude-51', - 'zAsset-Longitude-52', - 'zExtAttr-Longitude-53', - 'zAddAssetAttr-GPS Horizontal Accuracy-54', - 'zAddAssetAttr-Location Hash-55', - 'zAddAssetAttr-Shifted Location Valid-56', - 'zAddAssetAttr-Shifted Location Data-57', - 'zAddAssetAttr-Reverse Location Is Valid-58', - 'zAddAssetAttr-Reverse Location Data-59', - 'ParentzGenAlbum-UUID-4QueryStart-60', - 'zGenAlbum-UUID-4QueryStart-61', - 'ParentzGenAlbum-Cloud GUID-4QueryStart-62', - 'zGenAlbum-Cloud GUID-4QueryStart-63', - 'zCldShareAlbumInvRec-Album GUID-4QueryStart-64', - 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-65', - 'zGenAlbum-Project Render UUID-4QueryStart-66', - 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-67', - 'zGenAlbum-Cloud_Local_State-4QueryStart-68', - 'ParentzGenAlbum- Creation Date- 4QueryStart-69', - 'zGenAlbum- Creation Date- 4QueryStart-70', - 'zGenAlbum- Cloud Creation Date- 4QueryStart-71', - 'zGenAlbum- Start Date- 4QueryStart-72', - 'zGenAlbum- End Date- 4QueryStart-73', - 'zGenAlbum-Cloud Subscription Date- 4QueryStart-74', - 'ParentzGenAlbum- Title- 4QueryStart-75', - 'zGenAlbum- Title-User&System Applied- 4QueryStart-76', - 'zGenAlbum-Import Session ID-SWY- 4QueryStart-77', - 'zGenAlbum-Creator Bundle ID- 4QueryStart-78', - 'zGenAlbum-zENT- Entity- 4QueryStart-79', - 'ParentzGenAlbum- Kind- 4QueryStart-80', - 'zGenAlbum-Album Kind- 4QueryStart-81', - 'AAAzCldMastMedData-zOPT-82', - 'zAddAssetAttr-Media Metadata Type-83', - 'AAAzCldMastMedData-Data-84', - 'CldMasterzCldMastMedData-zOPT-85', - 'zCldMast-Media Metadata Type-86', - 'CMzCldMastMedData-Data-87', - 'zAsset-Orientation-88', - 'zAddAssetAttr-Original Orientation-89', - 'zAsset-Kind-90', - 'zAsset-Kind-Sub-Type-91', - 'zAddAssetAttr-Cloud Kind Sub Type-92', - 'zAsset-Playback Style-93', - 'zAsset-Playback Variation-94', - 'zAsset-Video Duration-95', - 'zExtAttr-Duration-96', - 'zAsset-Video CP Duration-97', - 'zAddAssetAttr-Video CP Duration Time Scale-98', - 'zAsset-Video CP Visibility State-99', - 'zAddAssetAttr-Video CP Display Value-100', - 'zAddAssetAttr-Video CP Display Time Scale-101', - 'zIntResou-Datastore Class ID-102', - 'zAsset-Cloud Placeholder Kind-103', - 'zIntResou-Local Availability-104', - 'zIntResou-Local Availability Target-105', - 'zIntResou-Cloud Local State-106', - 'zIntResou-Remote Availability-107', - 'zIntResou-Remote Availability Target-108', - 'zIntResou-Transient Cloud Master-109', - 'zIntResou-Side Car Index-110', - 'zIntResou- File ID-111', - 'zIntResou-Version-112', - 'zAddAssetAttr- Original-File-Size-113', - 'zIntResou-Resource Type-114', - 'zIntResou-Datastore Sub-Type-115', - 'zIntResou-Cloud Source Type-116', - 'zIntResou-Data Length-117', - 'zIntResou-Recipe ID-118', - 'zIntResou-Cloud Last Prefetch Date-119', - 'zIntResou-Cloud Prefetch Count-120', - 'zIntResou- Cloud-Last-OnDemand Download-Date-121', - 'zAsset-Uniform Type ID-122', - 'zAsset-Original Color Space-123', - 'zCldMast-Uniform_Type_ID-124', - 'zCldMast-Full Size JPEG Source-125', - 'zAsset-HDR Gain-126', - 'zExtAttr-Codec-127', - 'zCldMast-Codec Name-128', - 'zCldMast-Video Frame Rate-129', - 'zCldMast-Placeholder State-130', - 'zAsset-Depth_Type-131', - 'zAsset-Avalanche UUID-4TableStart-132', - 'zAsset-Avalanche_Pick_Type-BurstAsset-133', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134', - 'zAddAssetAttr-Cloud Recovery State-135', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-136', - 'zAsset-Deferred Processing Needed-137', - 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-138', - 'zAddAssetAttr-Deferred Processing Candidate Options-139', - 'zAsset-Has Adjustments-Camera-Effects-Filters-140', - 'zUnmAdj-UUID-4TableStart-141', - 'zAsset-Adjustment Timestamp-142', - 'zUnmAdj-Adjustment Timestamp-143', - 'zAddAssetAttr-Editor Bundle ID-144', - 'zUnmAdj-Editor Localized Name-145', - 'zUnmAdj-Adjustment Format ID-146', - 'zAddAssetAttr-Montage-147', - 'zUnmAdj-Adjustment Render Types-148', - 'zUnmAdj-Adjustment Format Version-149', - 'zUnmAdj-Adjustment Base Image Format-150', - 'zAsset-Favorite-151', - 'zAsset-Hidden-152', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-153', - 'zAsset-Trashed Date-154', - 'zIntResou-Trash State-155', - 'zIntResou-Trashed Date-156', - 'zAsset-Cloud Delete State-157', - 'zIntResou-Cloud Delete State-158', - 'zAddAssetAttr-PTP Trashed State-159', - 'zIntResou-PTP Trashed State-160', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-161', - 'zMedAnlyAstAttr-Media Analysis Timestamp-162', - 'zAsset-Analysis State Modificaion Date-163', - 'zAddAssetAttr- Pending View Count-164', - 'zAddAssetAttr- View Count-165', - 'zAddAssetAttr- Pending Play Count-166', - 'zAddAssetAttr- Play Count-167', - 'zAddAssetAttr- Pending Share Count-168', - 'zAddAssetAttr- Share Count-169', - 'zAddAssetAttr-Allowed for Analysis-170', - 'zAddAssetAttr-Scene Analysis Version-171', - 'zAddAssetAttr-Scene Analysis Timestamp-172', - 'zAddAssetAttr-Destination Asset Copy State-173', - 'zAddAssetAttr-Variation Suggestions States-174', - 'zAsset-High Frame Rate State-175', - 'zAsset-Video Key Frame Time Scale-176', - 'zAsset-Video Key Frame Value-177', - 'zExtAttr-ISO-178', - 'zExtAttr-Metering Mode-179', - 'zExtAttr-Sample Rate-180', - 'zExtAttr-Track Format-181', - 'zExtAttr-White Balance-182', - 'zExtAttr-Aperture-183', - 'zExtAttr-BitRate-184', - 'zExtAttr-Exposure Bias-185', - 'zExtAttr-Frames Per Second-186', - 'zExtAttr-Shutter Speed-187', - 'zAsset-Height-188', - 'zAddAssetAttr-Original Height-189', - 'zIntResou-Unoriented Height-190', - 'zAsset-Width-191', - 'zAddAssetAttr-Original Width-192', - 'zIntResou-Unoriented Width-193', - 'zShare-Thumbnail Image Data-194', - 'SPLzShare-Thumbnail Image Data-195', - 'zAsset-Thumbnail Index-196', - 'zAddAssetAttr-Embedded Thumbnail Height-197', - 'zAddAssetAttr-Embedded Thumbnail Length-198', - 'zAddAssetAttr-Embedded Thumbnail Offset-199', - 'zAddAssetAttr-Embedded Thumbnail Width-200', - 'zAsset-Packed Acceptable Crop Rect-201', - 'zAsset-Packed Badge Attributes-202', - 'zAsset-Packed Preferred Crop Rect-203', - 'zAsset-Curation Score-204', - 'zAsset-Camera Processing Adjustment State-205', - 'zAsset-Depth Type-206', - 'zAddAssetAttr-Orig Resource Choice-207', - 'zAddAssetAttr-Spatial Over Capture Group ID-208', - 'zAddAssetAttr-Place Annotation Data-209', - 'zAddAssetAttr-Distance Identity-210', - 'zAddAssetAttr-Edited IPTC Attributes-211', - 'zAssetDes-Long Description-212', - 'zAddAssetAttr-Asset Description-213', - 'zAddAssetAttr-Title-Comments via Cloud Website-214', - 'zAddAssetAttr-Accessibility Description-215', - 'zAddAssetAttr-Photo Stream Tag ID-216', - 'zCldFeedEnt-Entry Date-217', - 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-218', - 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-219', - 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-220', - 'zCldFeedEnt-Entry Priority Number-221', - 'zCldFeedEnt-Entry Type Number-222', - 'zCldSharedComment-Cloud GUID-4TableStart-223', - 'zCldSharedComment-Date-224', - 'zCldSharedComment-Comment Client Date-225', - 'zAsset-Cloud Last Viewed Comment Date-226', - 'zCldSharedComment-Type-227', - 'zCldSharedComment-Comment Text-228', - 'zCldSharedComment-Commenter Hashed Person ID-229', - 'zCldSharedComment-Batch Comment-230', - 'zCldSharedComment-Is a Caption-231', - 'zAsset-Cloud Has Comments by Me-232', - 'zCldSharedComment-Is My Comment-233', - 'zCldSharedComment-Is Deletable-234', - 'zAsset-Cloud Has Comments Conversation-235', - 'zAsset-Cloud Has Unseen Comments-236', - 'zCldSharedComment-Liked-237', - 'zAddAssetAttr-Share Type-238', - 'zShare-UUID-CMM-4TableStart-239', - 'SPLzShare-UUID-SPL-4TableStart-240', - 'zShare-zENT-CMM-241', - 'SPLzShare-zENT-SPL-242', - 'zShare-Status-CMM-243', - 'SPLzShare-Status-SPL-244', - 'zShare-Scope Type-CMM-245', - 'SPLzShare-Scope Type-SPL-246', - 'zShare-Local Publish State-CMM-247', - 'SPLzShare-Local Publish State-SPL-248', - 'zShare-Public Permission-CMM-249', - 'SPLzShare-Public Permission-SPL-250', - 'zShare-Originating Scope ID-CMM-251', - 'SPLzShare-Originating Scope ID-SPL-252', - 'zShare-Scope ID-CMM-253', - 'SPLzShare-Scope ID-SPL-254', - 'zShare-Title-CMM-255', - 'SPLzShare-Title-SPL-256', - 'zShare-Share URL-CMM-257', - 'SPLzShare-Share URL-SPL-258', - 'zShare-Creation Date-CMM-259', - 'SPLzShare-Creation Date-SPL-260', - 'zShare-Start Date-CMM-261', - 'SPLzShare-Start Date-SPL-262', - 'zShare-End Date-CMM-263', - 'SPLzShare-End Date-SPL-264', - 'zShare-Expiry Date-CMM-265', - 'SPLzShare-Expiry Date-SPL-266', - 'zShare-Asset Count-CMM-267', - 'SPLzShare-Asset Count-SPL-268', - 'zShare-Photos Count-CMM-269', - 'SPLzShare-Photos Count-CMM-SPL-270', - 'zShare-Uploaded Photos Count-CMM-271', - 'SPLzShare-Uploaded Photos Count-SPL-272', - 'zShare-Videos Count-CMM-273', - 'SPLzShare-Videos Count-SPL-274', - 'zShare-Uploaded Videos Count-CMM-275', - 'SPLzShare-Uploaded Videos Count-SPL-276', - 'zShare-Force Sync Attempted-CMM-277', - 'SPLzShare-Force Sync Attempted-SPL-278', - 'zShare-Should Notify On Upload Completion-CMM-279', - 'SPLzShare-Should Notify On Upload Completion-SPL-280', - 'zShare-Trashed State-CMM-281', - 'SPLzShare-Trashed State-SPL-282', - 'zShare-Cloud Delete State-CMM-283', - 'SPLzShare-Cloud Delete State-SPL-284', - 'zShare-Should Ignor Budgets-CMM-285', - 'SPLzShare-Should Ignor Budgets-SPL-286', - 'zSharePartic-UUID-4TableStart-287', - 'SPLzSharePartic-UUID-4TableStart-288', - 'zSharePartic-Acceptance Status-289', - 'SPLzSharePartic-Acceptance Status-290', - 'zSharePartic-Is Current User-291', - 'SPLzSharePartic-Is Current User-292', - 'zSharePartic-Role-293', - 'SPLzSharePartic-Role-294', - 'zSharePartic-Premission-295', - 'SPLzSharePartic-Premission-296', - 'zSharePartic-User ID-297', - 'SPLzSharePartic-User ID-298', - 'SPLzSharePartic-zPK-4TableStart-299', - 'zSharePartic-zPK-4TableStart-300', - 'zSharePartic-Email Address-301', - 'SPLzSharePartic-Email Address-302', - 'zSharePartic-Phone Number-303', - 'SPLzSharePartic-Phone Number-304', - 'ParentzGenAlbum-UUID-4TableStart-305', - 'zGenAlbum-UUID-4TableStart-306', - 'ParentzGenAlbum-Cloud GUID-4TableStart-307', - 'zGenAlbum-Cloud GUID-4TableStart-308', - 'zCldShareAlbumInvRec-Album GUID-4TableStart-309', - 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-310', - 'zGenAlbum-Project Render UUID-4TableStart-311', - 'zAlbumList-Needs Reordering Number-312', - 'zGenAlbum-zENT- Entity-313', - 'ParentzGenAlbum-Kind-314', - 'zGenAlbum-Album Kind-315', - 'ParentzGenAlbum-Cloud-Local-State-316', - 'zGenAlbum-Cloud_Local_State-317', - 'ParentzGenAlbum- Title-318', - 'zGenAlbum- Title-User&System Applied-319', - 'zGenAlbum-Import Session ID-SWY-320', - 'zGenAlbum-Creator Bundle ID-321', - 'ParentzGenAlbum-Creation Date-322', - 'zGenAlbum-Creation Date-323', - 'zGenAlbum-Cloud Creation Date-324', - 'zGenAlbum-Start Date-325', - 'zGenAlbum-End Date-326', - 'zGenAlbum-Cloud Subscription Date-327', - 'ParentzGenAlbum-Pending Items Count-328', - 'zGenAlbum-Pending Items Count-329', - 'ParentzGenAlbum-Pending Items Type-330', - 'zGenAlbum-Pending Items Type-331', - 'zGenAlbum- Cached Photos Count-332', - 'zGenAlbum- Cached Videos Count-333', - 'zGenAlbum- Cached Count-334', - 'ParentzGenAlbum-Sync Event Order Key-335', - 'zGenAlbum-Sync Event Order Key-336', - 'zGenAlbum-Has Unseen Content-337', - 'zGenAlbum-Unseen Asset Count-338', - 'zGenAlbum-is Owned-339', - 'zGenAlbum-Cloud Relationship State-340', - 'zGenAlbum-Cloud Relationship State Local-341', - 'zGenAlbum-Cloud Owner Mail Key-342', - 'zGenAlbum-Cloud Owner Frist Name-343', - 'zGenAlbum-Cloud Owner Last Name-344', - 'zGenAlbum-Cloud Owner Full Name-345', - 'zGenAlbum-Cloud Person ID-346', - 'zAsset-Cloud Owner Hashed Person ID-347', - 'zGenAlbum-Cloud Owner Hashed Person ID-348', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-349', - 'zGenAlbum-Cloud Multi-Contributors Enabled-350', - 'zGenAlbum-Cloud Album Sub Type-351', - 'zGenAlbum-Cloud Contribution Date-352', - 'zGenAlbum-Cloud Last Interesting Change Date-353', - 'zGenAlbum-Cloud Notification Enabled-354', - 'ParentzGenAlbum-Pinned-355', - 'zGenAlbum-Pinned-356', - 'ParentzGenAlbum-Custom Sort Key-357', - 'zGenAlbum-Custom Sort Key-358', - 'ParentzGenAlbum-Custom Sort Ascending-359', - 'zGenAlbum-Custom Sort Ascending-360', - 'ParentzGenAlbum-Is Prototype-361', - 'zGenAlbum-Is Prototype-362', - 'ParentzGenAlbum-Project Document Type-363', - 'zGenAlbum-Project Document Type-364', - 'ParentzGenAlbum-Custom Query Type-365', - 'zGenAlbum-Custom Query Type-366', - 'ParentzGenAlbum-Trashed State-367', - 'ParentzGenAlbum-Trash Date-368', - 'zGenAlbum-Trashed State-369', - 'zGenAlbum-Trash Date-370', - 'ParentzGenAlbum-Cloud Delete State-371', - 'zGenAlbum-Cloud Delete State-372', - 'zGenAlbum-Cloud Owner Whitelisted-373', - 'zGenAlbum-Cloud Local Public URL Enabled-374', - 'zGenAlbum-Cloud Public URL Enabled-375', - 'zGenAlbum-Public URL-376', - 'zGenAlbum-Key Asset Face Thumb Index-377', - 'zGenAlbum-Project Text Extension ID-378', - 'zGenAlbum-User Query Data-379', - 'zGenAlbum-Custom Query Parameters-380', - 'zGenAlbum-Project Data-381', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-382', - 'zCldShareAlbumInvRec-Invitation State Local-383', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-384', - 'zCldShareAlbumInvRec-Subscription Date-385', - 'zCldShareAlbumInvRec-Invitee First Name-386', - 'zCldShareAlbumInvRec-Invitee Last Name-387', - 'zCldShareAlbumInvRec-Invitee Full Name-388', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-389', - 'zCldShareAlbumInvRec-Invitee Email Key-390', - 'zGenAlbum-Key Asset Face ID-391', - 'zFaceCrop-Face Area Points-392', - 'zAsset-Face Adjustment Version-393', - 'zDetFace-Asset Visible-394', - 'zPerson-Face Count-395', - 'zDetFace-Face Crop-396', - 'zDetFace-Face Algorithm Version-397', - 'zDetFace-Adjustment Version-398', - 'zDetFace-UUID-4TableStart-399', - 'zPerson-Person UUID-4TableStart-400', - 'zDetFace-Confirmed Face Crop Generation State-401', - 'zDetFace-Manual-402', - 'zDetFace-VIP Model Type-403', - 'zDetFace-Name Source-404', - 'zDetFace-Cloud Name Source-405', - 'zPerson-Person URI-406', - 'zPerson-Display Name-407', - 'zPerson-Full Name-408', - 'zPerson-Cloud Verified Type-409', - 'zFaceCrop-State-410', - 'zFaceCrop-Type-411', - 'zFaceCrop-UUID-4TableStart-412', - 'zPerson-Type-413', - 'zPerson-Verified Type-414', - 'zPerson-Gender Type-415', - 'zDetFace-Gender Type-416', - 'zDetFace-Center X-417', - 'zDetFace-Center Y-418', - 'zPerson-Age Type Estimate-419', - 'zDetFace-Age Type Estimate-420', - 'zDetFace-Hair Color Type-421', - 'zDetFace-Facial Hair Type-422', - 'zDetFace-Has Smile-423', - 'zDetFace-Smile Type-424', - 'zDetFace-Lip Makeup Type-425', - 'zDetFace-Eyes State-426', - 'zDetFace-Is Left Eye Closed-427', - 'zDetFace-Is Right Eye Closed-428', - 'zDetFace-Eye Glasses Type-429', - 'zDetFace-Eye Makeup Type-430', - 'zDetFace-Cluster Squence Number Key-431', - 'zDetFace-Grouping ID-432', - 'zDetFace-Master ID-433', - 'zDetFace-Quality-434', - 'zDetFace-Quality Measure-435', - 'zDetFace-Source Height-436', - 'zDetFace-Source Width-437', - 'zDetFace-Hidden-Asset Hidden-438', - 'zDetFace-In Trash-Recently Deleted-439', - 'zDetFace-Cloud Local State-440', - 'zDetFace-Training Type-441', - 'zDetFace.Pose Yaw-442', - 'zDetFace-Roll-443', - 'zDetFace-Size-444', - 'zDetFace-Cluster Squence Number-445', - 'zDetFace-Blur Score-446', - 'zDetFacePrint-Face Print Version-447', - 'zMedAnlyAstAttr-Face Count-448', - 'zDetFaceGroup-UUID-4TableStart-449', - 'zDetFaceGroup-Person Builder State-450', - 'zDetFaceGroup-UnNamed Face Count-451', - 'zPerson-In Person Naming Model-452', - 'zPerson-Key Face Pick Source Key-453', - 'zPerson-Manual Order Key-454', - 'zPerson-Question Type-455', - 'zPerson-Suggested For Client Type-456', - 'zPerson-Merge Target Person-457', - 'zPerson-Cloud Local State-458', - 'zFaceCrop-Cloud Local State-459', - 'zFaceCrop-Cloud Type-460', - 'zPerson-Cloud Delete State-461', - 'zFaceCrop-Cloud Delete State-462', - 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-463', - 'zMemory-zPK-464', - 'z3MemoryBCAs-3CuratedAssets = zAsset-zPK-465', - 'z3MemoryBCAs-40MemoriesBeingCuratedAssets = zMemory-zPK-466', - 'z3MemoryBECAs-3ExtCuratedAssets = zAsset-zPK-467', - 'z3MemoryBECAs-40MemoriesBeingExtCuratedAssets = zMemory-zPK-468', - 'z3MemoryBMCAs-3MovieCuratedAssets = zAsset-zPK-469', - 'z3MemoryBMCAs-40MemoriesBeingMovieCuratedAssets = zMemory-zPK-470', - 'z3MemoryBRAs-3RepresentativeAssets = zAsset-zPK-471', - 'z3MemoryBRAs-40RepresentativeAssets = zMemory-zPK-472', - 'zMemory-Key Asset = zAsset-zPK-473', - 'zMemory-UUID-474', - 'zMemory-SubTitle-475', - 'zMemory-Title-476', - 'zMemory-Category-477', - 'zMemory-SubCategory-478', - 'zMemory-Creation Date-479', - 'zMemory-User Created-480', - 'zMemory-Favorite Memory-481', - 'zMemory-Score-482', - 'zMemory-View Count-483', - 'zMemory-Play Count-484', - 'zMemory-Rejected-485', - 'zMemory-Share Count-486', - 'zMemory-Last Movie Play Date-487', - 'zMemory-Last Viewed Date-488', - 'zMemory-Pending-489', - 'zMemory-Pending Play Count Memory-490', - 'zMemory-Pending Share Count Memory-491', - 'zMemory-Pending View Count Memory-492', - 'zMemory-Featured State-493', - 'zMemory-Photos Graph Version-494', - 'zMemory-AssetListPredicte-495', - 'zMemory-Notification State-496', - 'zMemory-Cloud Local State-497', - 'zMemory-Cloud Delete State-498', - 'YearzMomentList-UUID-499', - 'YearzMomentList-zPK-500', - 'zMoment-Year Moment List-501', - 'YearzMomentList-Sort Index-502', - 'YearzMomentList-Granularity Level-503', - 'YearzMomentList-Start Date-504', - 'YearzMomentList-Representative Date-505', - 'YearzMomentList-End Date-506', - 'YearzMomentList-Trashed State-507', - 'MegaYMzMomentList-UUID-508', - 'MegaYMzMomentList-zPK-509', - 'zMoment-Mega Moment List-510', - 'MegaYMzMomentList-Sort Index-511', - 'MegaYMzMomentList-Granularity Level-512', - 'MegaYMzMomentList-Start Date-513', - 'MegaYMzMomentList-Representative Date-514', - 'MegaYMzMomentList-End Date-515', - 'MegaYMzMomentList-Trashed State-516', - 'zMoment-UUID-517', - 'zMoment-zPK-518', - 'zMoment-Aggregation Score-519', - 'zMoment-Start Date-520', - 'zMoment-Representative Date-521', - 'zMoment-Timezone Offset-522', - 'zMoment-Modification Date-523', - 'zMoment-End Date-524', - 'zMoment-SubTitle-525', - 'zMoment-Title-526', - 'zMoment-Processed Location-527', - 'zMoment-Approx Latitude-528', - 'zMoment-Approx Longitude-529', - 'zMoment-GPS Horizontal Accuracy-530', - 'zMoment-Cache Count-531', - 'zMoment-Cached Photos Count-532', - 'zMoment-Cached Videos Count-533', - 'zMoment-Trashed State-534', - 'zMoment-Highlight Key-535', - 'zAsset-Highlight Visibility Score-536', - 'YearParzPhotosHigh-UUID-537', - 'YearParzPhotosHigh-zPK-538', - 'YearParzPhotosHigh-zENT-539', - 'YearParzPhotosHigh-zOPT-540', - 'YearParzPhotosHigh-Promotion Score-541', - 'YearParzPhotosHigh-Title-542', - 'YearParzPhotosHigh-Verbose Smart Description-543', - 'YearParzPhotosHigh-Start Date-544', - 'YearParzPhotosHigh-End Date-545', - 'YearParzPhotosHigh-Year Key Asset-546', - 'YearParzPhotosHigh-Is Curated-547', - 'YearParzPhotosHigh-Kind-548', - 'YearParzPhotosHigh-Category-549', - 'YearParzPhotosHigh-Visibility State-550', - 'YearParzPhotosHigh-Enrichment State-551', - 'YearParzPhotosHigh-Enrichment Version-552', - 'YearParzPhotosHigh-Highlight Version-553', - 'YMParzPhotosHigh-UUID-554', - 'YMParzPhotosHigh-zPK-555', - 'YMParzPhotosHigh-Parent PH Key-556', - 'YMParzPhotosHigh-zENT-557', - 'YMParzPhotosHigh-zOPT-558', - 'YMParzPhotosHigh-Promotion Score-559', - 'YMParzPhotosHigh-Title-560', - 'YMParzPhotosHigh-Subtitle-561', - 'YMParzPhotosHigh-Verbose Smart Description-562', - 'YMParzPhotosHigh-Start Date-563', - 'YMParzPhotosHigh-End Date-564', - 'YMParzPhotosHigh-Month First Asset-565', - 'YMParzPhotosHigh-Month Key Asset-566', - 'YMParzPhotosHigh-Is Curated-567', - 'YMParzPhotosHigh-Kind-568', - 'YMParzPhotosHigh-Category-569', - 'YMParzPhotosHigh-Visibility State-570', - 'YMParzPhotosHigh-Enrichment State-571', - 'YMParzPhotosHigh-Enrichment Version-572', - 'YMParzPhotosHigh-Highlight Version-573', - 'DGParzPhotosHigh-UUID-574', - 'DGParzPhotosHigh-zPK-575', - 'DGParzPhotosHigh-Parent PH Key-576', - 'DGParzPhotosHigh-zENT-577', - 'DGParzPhotosHigh-zOPT-578', - 'DGParzPhotosHigh-Promotion Score-579', - 'DGParzPhotosHigh-Title-580', - 'DGParzPhotosHigh-Subtitle-581', - 'DGParzPhotosHigh-Verbose Smart Description-582', - 'DGParzPhotosHigh-Start Date-583', - 'DGParzPhotosHigh-End Date-584', - 'DGParzPhotosHigh-Month First Asset-585', - 'DGParzPhotosHigh-Month Key Asset-586', - 'DGParzPhotosHigh-Is Curated-587', - 'DGParzPhotosHigh-Kind-588', - 'DGParzPhotosHigh-Category-589', - 'DGParzPhotosHigh-Visibility State-590', - 'DGParzPhotosHigh-Enrichment State-591', - 'DGParzPhotosHigh-Enrichment Version-592', - 'DGParzPhotosHigh-Highlight Version-593', - 'zAsset-Highlight Being Assets Key-594', - 'HBAzPhotosHigh-UUID-595', - 'HBAzPhotosHigh-zPK-596', - 'HBAzPhotosHigh-Parent PH Key-597', - 'HBAzPhotosHigh-zENT-598', - 'HBAzPhotosHigh-zOPT-599', - 'HBAzPhotosHigh-Promotion Score-600', - 'HBAzPhotosHigh-Title-601', - 'HBAzPhotosHigh-Subtitle-602', - 'HBAzPhotosHigh-Verbose Smart Description-603', - 'HBAzPhotosHigh-Start Date-604', - 'HBAzPhotosHigh Start-Timezone Offset-605', - 'HBAzPhotosHigh-End Timezone Offset-606', - 'HBAzPhotosHigh-End Date-607', - 'HBAzPhotosHigh-Asset Count-608', - 'HBAzPhotosHigh-Summary Count-609', - 'HBAzPhotosHigh-Extended Count-610', - 'HBAzPhotosHigh-Day Group Assets Count-611', - 'HBAzPhotosHigh-Day Group Ext Assets Count-612', - 'HBAzPhotosHigh-Day Group Summary Assets Count-613', - 'HBAzPhotosHigh-Key Asset-614', - 'HBAzPhotosHigh-Is Curated-615', - 'HBAzPhotosHigh-Type-616', - 'HBAzPhotosHigh-Kind-617', - 'HBAzPhotosHigh-Category-618', - 'HBAzPhotosHigh-Visibility State-619', - 'HBAzPhotosHigh-Mood-620', - 'HBAzPhotosHigh-Enrichment State-621', - 'HBAzPhotosHigh-Enrichment Version-622', - 'HBAzPhotosHigh-Highlight Version-623', - 'zAsset-Highlight Being Extended Assets Key-624', - 'HBEAzPhotosHigh-UUID-625', - 'HBEAzPhotosHigh-zPK-626', - 'HBEAzPhotosHigh-zENT-627', - 'HBEAzPhotosHigh-zOPT-628', - 'HBEAzPhotosHigh-Promotion Score-629', - 'HBEAzPhotosHigh-Title-630', - 'HBEAzPhotosHigh-Subtitle-631', - 'HBEAzPhotosHigh-Verbose Smart Description-632', - 'HBEAzPhotosHigh-Start Date-633', - 'HBEAzPhotosHigh-Start Timezone Offset-634', - 'HBEAzPhotosHigh-End Timezone Offset-635', - 'HBEAzPhotosHigh-End Date-636', - 'HBEAzPhotosHigh-Asset Count-637', - 'HBEAzPhotosHigh-Summary Count-638', - 'HBEAzPhotosHigh-Extended Count-639', - 'HBEAzPhotosHigh-Day Group Assets Count-640', - 'HBEAzPhotosHigh-Day Group Ext Assets Count-641', - 'HBEAzPhotosHigh-Day Group Summary Assets Count-642', - 'HBEAzPhotosHigh-Parent PH Key-643', - 'HBEAzPhotosHigh-Year Key Asset-644', - 'HBEAzPhotosHigh-Month First Asset-645', - 'HBEAzPhotosHigh-Month Key Asset-646', - 'HBEAzPhotosHigh-Key Asset-647', - 'HBEAzPhotosHigh-Parent Day Group PH Key-648', - 'HBEAzPhotosHigh-Day Group Key Asset-649', - 'HBEAzPhotosHigh-is Curated-650', - 'HBEAzPhotosHigh-Type-651', - 'HBEAzPhotosHigh-Kind-652', - 'HBEAzPhotosHigh-Category-653', - 'HBEAzPhotosHigh-Visibility State-654', - 'HBEAzPhotosHigh-Mood-655', - 'HBEAzPhotosHigh-Enrichment State-656', - 'HBEAzPhotosHigh-Enrichment Version-657', - 'HBEAzPhotosHigh-Highlight Version-658', - 'zAsset-Highlight Being Summary Assets Key-659', - 'HBSAzPhotosHigh-UUID-660', - 'HBSAzPhotosHigh-zPK-661', - 'HBSAzPhotosHigh-zENT-662', - 'HBSAzPhotosHigh-zOPT-663', - 'HBSAzPhotosHigh-Promotion Score-664', - 'HBSAzPhotosHigh-Title-665', - 'HBSAzPhotosHigh-Subtitle-666', - 'HBSAzPhotosHigh-Verbose Smart Description-667', - 'HBSAzPhotosHigh-Start Date-668', - 'HBSAzPhotosHigh-Start Timezone Offset-669', - 'HBSAzPhotosHigh-End Timezone Offset-670', - 'HBSAzPhotosHigh-End Date-671', - 'HBSAzPhotosHigh-Asset Count-672', - 'HBSAzPhotosHigh-Summary Count-673', - 'HBSAzPhotosHigh-Extended Count-674', - 'HBSAzPhotosHigh-Day Group Assets Count-675', - 'HBSAzPhotosHigh-Day Group Ext Assets Count-676', - 'HBSAzPhotosHigh-Day Group Summary Assets Count-677', - 'HBSAzPhotosHigh-Parent PH Key-678', - 'HBSAzPhotosHigh-Year Key Asset-679', - 'HBSAzPhotosHigh-Month First Asset-680', - 'HBSAzPhotosHigh-Month Key Asset-681', - 'HBSAzPhotosHigh-Key Asset-682', - 'HBSAzPhotosHigh-Parent Day Group PH Key-683', - 'HBSAzPhotosHigh-Day Group Key Asset-684', - 'HBSAzPhotosHigh-is Curated-685', - 'HBSAzPhotosHigh-Type-686', - 'HBSAzPhotosHigh-Kind-687', - 'HBSAzPhotosHigh-Category-688', - 'HBSAzPhotosHigh-Visibility State-689', - 'HBSAzPhotosHigh-Mood-690', - 'HBSAzPhotosHigh-Enrichment State-691', - 'HBSAzPhotosHigh-Enrichment Version-692', - 'HBSAzPhotosHigh-Highlight Version-693', - 'zAsset-Highlight Being Key Asset Key-694', - 'HBKAzPhotosHigh-UUID-695', - 'HBKAzPhotosHigh-zPK-696', - 'HBKAzPhotosHigh-zENT-697', - 'HBKAzPhotosHigh-zOPT-698', - 'HBKAzPhotosHigh-Promotion Score-699', - 'HBKAzPhotosHigh-Title-700', - 'HBKAzPhotosHigh-Subtitle-701', - 'HBKAzPhotosHigh-Verbose Smart Description-702', - 'HBKAzPhotosHigh-Start Date-703', - 'HBKAzPhotosHigh-Start Timezone Offset-704', - 'HBKAzPhotosHigh-End Timezone Offset-705', - 'HBKAzPhotosHigh-End Date-706', - 'HBKAzPhotosHigh-Asset Count-707', - 'HBKAzPhotosHigh-Summary Count-708', - 'HBKAzPhotosHigh-Extended Count-709', - 'HBKAzPhotosHigh-Day Group Assets Count-710', - 'HBKAzPhotosHigh-Day Group Ext Assets Count-711', - 'HBKAzPhotosHigh-Day Group Summary Assets Count-712', - 'HBKAzPhotosHigh-Parent PH Key-713', - 'HBKAzPhotosHigh-Year Key Asset-714', - 'HBKAzPhotosHigh-Month First Asset-715', - 'HBKAzPhotosHigh-Month Key Asset-716', - 'HBKAzPhotosHigh-Key Asset-717', - 'HBKAzPhotosHigh-Parent Day Group PH Key-718', - 'HBKAzPhotosHigh-Day Group Key Asset-719', - 'HBKAzPhotosHigh-is Curated-720', - 'HBKAzPhotosHigh-Type-721', - 'HBKAzPhotosHigh-Kind-722', - 'HBKAzPhotosHigh-Category-723', - 'HBKAzPhotosHigh-Visibility State-724', - 'HBKAzPhotosHigh-Mood-725', - 'HBKAzPhotosHigh-Enrichment State-726', - 'HBKAzPhotosHigh-Enrichment Version-727', - 'HBKAzPhotosHigh-Highlight Version-728', - 'zAsset-Day Group Highlight Being Assets Key-729', - 'DGHBAzPhotosHigh-UUID-730', - 'DGHBAzPhotosHigh-zPK-731', - 'DGHBAzPhotosHigh-zENT-732', - 'DGHBAzPhotosHigh-zOPT-733', - 'DGHBAzPhotosHigh-Promotion Score-734', - 'DGHBAzPhotosHigh-Title-735', - 'DGHBAzPhotosHigh-Subtitle-736', - 'DGHBAzPhotosHigh-Verbose Smart Description-737', - 'DGHBAzPhotosHigh-Start Date-738', - 'DGHBAzPhotosHigh-Start Timezone Offset-739', - 'DGHBAzPhotosHigh-End Timezone Offset-740', - 'DGHBAzPhotosHigh-End Date-741', - 'DGHBAzPhotosHigh-Asset Count-742', - 'DGHBAzPhotosHigh-Summary Count-743', - 'DGHBAzPhotosHigh-Extended Count-744', - 'DGHBAzPhotosHigh-Day Group Assets Count-745', - 'DGHBAzPhotosHigh-Day Group Ext Assets Count-746', - 'DGHBAzPhotosHigh-Day Group Summary Assets Count-747', - 'DGHBAzPhotosHigh-Parent PH Key-748', - 'DGHBAzPhotosHigh-Year Key Asset-749', - 'DGHBAzPhotosHigh-Month First Asset-750', - 'DGHBAzPhotosHigh-Month Key Asset-751', - 'DGHBAzPhotosHigh-Key Asset-752', - 'DGHBAzPhotosHigh-Parent Day Group PH Key-753', - 'DGHBAzPhotosHigh-Day Group Key Asset-754', - 'DGHBAzPhotosHigh-is Curated-755', - 'DGHBAzPhotosHigh-Type-756', - 'DGHBAzPhotosHigh-Kind-757', - 'DGHBAzPhotosHigh-Category-758', - 'DGHBAzPhotosHigh-Visibility State-759', - 'DGHBAzPhotosHigh-Mood-760', - 'DGHBAzPhotosHigh-Enrichment State-761', - 'DGHBAzPhotosHigh-Enrichment Version-762', - 'DGHBAzPhotosHigh-Highlight Version-763', - 'zAsset-Day Group Highlight Being Extended Assets Key-764', - 'DGHBEAzPhotosHigh-UUID-765', - 'DGHBEAzPhotosHigh-zPK-766', - 'DGHBEAzPhotosHigh-zENT-767', - 'DGHBEAzPhotosHigh-zOPT-768', - 'DGHBEAzPhotosHigh-Promotion Score-769', - 'DGHBEAzPhotosHigh-Title-770', - 'DGHBEAzPhotosHigh-Subtitle-771', - 'DGHBEAzPhotosHigh-Verbose Smart Description-772', - 'DGHBEAzPhotosHigh-Start Date-773', - 'DGHBEAzPhotosHigh-Start Timezone Offset-774', - 'DGHBEAzPhotosHigh-End Timezone Offset-775', - 'DGHBEAzPhotosHigh-End Date-776', - 'DGHBEAzPhotosHigh-Asset Count-777', - 'DGHBEAzPhotosHigh-Summary Count-778', - 'DGHBEAzPhotosHigh-Extended Count-779', - 'DGHBEAzPhotosHigh-Day Group Assets Count-780', - 'DGHBEAzPhotosHigh-Day Group Ext Assets Count-781', - 'DGHBEAzPhotosHigh-Day Group Summary Assets Count-782', - 'DGHBEAzPhotosHigh-Parent PH Key-783', - 'DGHBEAzPhotosHigh-Year Key Asset-784', - 'DGHBEAzPhotosHigh-Month First Asset-785', - 'DGHBEAzPhotosHigh-Month Key Asset-786', - 'DGHBEAzPhotosHigh-Key Asset-787', - 'DGHBEAzPhotosHigh-Parent Day Group PH Key-788', - 'DGHBEAzPhotosHigh-Day Group Key Asset-789', - 'DGHBEAzPhotosHigh-is Curated-790', - 'DGHBEAzPhotosHigh-Type-791', - 'DGHBEAzPhotosHigh-Kind-792', - 'DGHBEAzPhotosHigh-Category-793', - 'DGHBEAzPhotosHigh-Visibility State-794', - 'DGHBEAzPhotosHigh-Mood-795', - 'DGHBEAzPhotosHigh-Enrichment State-796', - 'DGHBEAzPhotosHigh-Enrichment Version-797', - 'DGHBEAzPhotosHigh-Highlight Version-798', - 'zAsset-Day Group Highlight Being Key Asset-799', - 'DGHBKAzPhotosHigh-UUID-800', - 'DGHBKAzPhotosHigh-zPK-801', - 'DGHBKAzPhotosHigh-zENT-802', - 'DGHBKAzPhotosHigh-zOPT-803', - 'DGHBKAzPhotosHigh-Promotion Score-804', - 'DGHBKAzPhotosHigh-Title-805', - 'DGHBKAzPhotosHigh-Subtitle-806', - 'DGHBKAzPhotosHigh-Verbose Smart Description-807', - 'DGHBKAzPhotosHigh-Start Date-808', - 'DGHBKAzPhotosHigh-Start Timezone Offset-809', - 'DGHBKAzPhotosHigh-End Timezone Offset-810', - 'DGHBKAzPhotosHigh-End Date-811', - 'DGHBKAzPhotosHigh-Asset Count-812', - 'DGHBKAzPhotosHigh-Summary Count-813', - 'DGHBKAzPhotosHigh-Extended Count-814', - 'DGHBKAzPhotosHigh-Day Group Assets Count-815', - 'DGHBKAzPhotosHigh-Day Group Ext Assets Count-816', - 'DGHBKAzPhotosHigh-Day Group Summary Assets Count-817', - 'DGHBKAzPhotosHigh-Parent PH Key-818', - 'DGHBKAzPhotosHigh-Year Key Asset-819', - 'DGHBKAzPhotosHigh-Month First Asset-820', - 'DGHBKAzPhotosHigh-Month Key Asset-821', - 'DGHBKAzPhotosHigh-Key Asset-822', - 'DGHBKAzPhotosHigh-Parent Day Group PH Key-823', - 'DGHBKAzPhotosHigh-Day Group Key Asset-824', - 'DGHBKAzPhotosHigh-is Curated-825', - 'DGHBKAzPhotosHigh-Type-826', - 'DGHBKAzPhotosHigh-Kind-827', - 'DGHBKAzPhotosHigh-Category-828', - 'DGHBKAzPhotosHigh-Visibility State-829', - 'DGHBKAzPhotosHigh-Mood-830', - 'DGHBKAzPhotosHigh-Enrichment State-831', - 'DGHBKAzPhotosHigh-Enrichment Version-832', - 'DGHBKAzPhotosHigh-Highlight Version-833', - 'zAsset-Day Group Highlight Being Summary Assets Key-834', - 'DGHBSAzPhotosHigh-UUID-835', - 'DGHBSAzPhotosHigh-zPK-836', - 'DGHBSAzPhotosHigh-zENT-837', - 'DGHBSAzPhotosHigh-zOPT-838', - 'DGHBSAzPhotosHigh-Promotion Score-839', - 'DGHBSAzPhotosHigh-Title-840', - 'DGHBSAzPhotosHigh-Subtitle-841', - 'DGHBSAzPhotosHigh-Verbose Smart Description-842', - 'DGHBSAzPhotosHigh-Start Date-843', - 'DGHBSAzPhotosHigh-Start Timezone Offset-844', - 'DGHBSAzPhotosHigh-End Timezone Offset-845', - 'DGHBSAzPhotosHigh-End Date-846', - 'DGHBSAzPhotosHigh-Asset Count-847', - 'DGHBSAzPhotosHigh-Summary Count-848', - 'DGHBSAzPhotosHigh-Extended Count-849', - 'DGHBSAzPhotosHigh-Day Group Assets Count-850', - 'DGHBSAzPhotosHigh-Day Group Ext Assets Count-851', - 'DGHBSAzPhotosHigh-Day Group Summary Assets Count-852', - 'DGHBSAzPhotosHigh-Parent PH Key-853', - 'DGHBSAzPhotosHigh-Year Key Asset-854', - 'DGHBSAzPhotosHigh-Month First Asset-855', - 'DGHBSAzPhotosHigh-Month Key Asset-856', - 'DGHBSAzPhotosHigh-Key Asset-857', - 'DGHBSAzPhotosHigh-Parent Day Group PH Key-858', - 'DGHBSAzPhotosHigh-Day Group Key Asset-859', - 'DGHBSAzPhotosHigh-is Curated-860', - 'DGHBSAzPhotosHigh-Type-861', - 'DGHBSAzPhotosHigh-Kind-862', - 'DGHBSAzPhotosHigh-Category-863', - 'DGHBSAzPhotosHigh-Visibility State-864', - 'DGHBSAzPhotosHigh-Mood-865', - 'DGHBSAzPhotosHigh-Enrichment State-866', - 'DGHBSAzPhotosHigh-Enrichment Version-867', - 'DGHBSAzPhotosHigh-Highlight Version-868', - 'zAsset-Month Highlight Being First Asset Key-869', - 'MHBFAzPhotosHigh-UUID-870', - 'MHBFAzPhotosHigh-zPK-871', - 'MHBFAzPhotosHigh-zENT-872', - 'MHBFAzPhotosHigh-zOPT-873', - 'MHBFAzPhotosHigh-Promotion Score-874', - 'MHBFAzPhotosHigh-Title-875', - 'MHBFAzPhotosHigh-Subtitle-876', - 'MHBFAzPhotosHigh-Verbose Smart Description-877', - 'MHBFAzPhotosHigh-Start Date-878', - 'MHBFAzPhotosHigh-Start Timezone Offset-879', - 'MHBFAzPhotosHigh-End Timezone Offset-880', - 'MHBFAzPhotosHigh-End Date-881', - 'MHBFAzPhotosHigh-Asset Count-882', - 'MHBFAzPhotosHigh-Summary Count-883', - 'MHBFAzPhotosHigh-Extended Count-884', - 'MHBFAzPhotosHigh-Day Group Assets Count-885', - 'MHBFAzPhotosHigh-Day Group Ext Assets Count-886', - 'MHBFAzPhotosHigh-Day Group Summary Assets Count-887', - 'MHBFAzPhotosHigh-Parent PH Key-888', - 'MHBFAzPhotosHigh-Year Key Asset-889', - 'MHBFAzPhotosHigh-Month First Asset-890', - 'MHBFAzPhotosHigh-Month Key Asset-891', - 'MHBFAzPhotosHigh-Key Asset-892', - 'MHBFAzPhotosHigh-Parent Day Group PH Key-893', - 'MHBFAzPhotosHigh-Day Group Key Asset-894', - 'MHBFAzPhotosHigh-is Curated-895', - 'MHBFAzPhotosHigh-Type-896', - 'MHBFAzPhotosHigh-Kind-897', - 'MHBFAzPhotosHigh-Category-898', - 'MHBFAzPhotosHigh-Visibility State-899', - 'MHBFAzPhotosHigh-Mood-900', - 'MHBFAzPhotosHigh-Enrichment State-901', - 'MHBFAzPhotosHigh-Enrichment Version-902', - 'MHBFAzPhotosHigh-Highlight Version-903', - 'zAsset-Month Highlight Being Key Asset-904', - 'MHBKAzPhotosHigh-UUID-905', - 'MHBKAzPhotosHigh-zPK-906', - 'MHBKAzPhotosHigh-zENT-907', - 'MHBKAzPhotosHigh-zOPT-908', - 'MHBKAzPhotosHigh-Promotion Score-909', - 'MHBKAzPhotosHigh-Title-910', - 'MHBKAzPhotosHigh-Subtitle-911', - 'MHBKAzPhotosHigh-Verbose Smart Description-912', - 'MHBKAzPhotosHigh-Start Date-913', - 'MHBKAzPhotosHigh-Start Timezone Offset-914', - 'MHBKAzPhotosHigh-End Timezone Offset-915', - 'MHBKAzPhotosHigh-End Date-916', - 'MHBKAzPhotosHigh-Asset Count-917', - 'MHBKAzPhotosHigh-Summary Count-918', - 'MHBKAzPhotosHigh-Extended Count-919', - 'MHBKAzPhotosHigh-Day Group Assets Count-920', - 'MHBKAzPhotosHigh-Day Group Ext Assets Count-921', - 'MHBKAzPhotosHigh-Day Group Summary Assets Count-922', - 'MHBKAzPhotosHigh-Parent PH Key-923', - 'MHBKAzPhotosHigh-Year Key Asset-924', - 'MHBKAzPhotosHigh-Month First Asset-925', - 'MHBKAzPhotosHigh-Month Key Asset-926', - 'MHBKAzPhotosHigh-Key Asset-927', - 'MHBKAzPhotosHigh-Parent Day Group PH Key-928', - 'MHBKAzPhotosHigh-Day Group Key Asset-929', - 'MHBKAzPhotosHigh-is Curated-930', - 'MHBKAzPhotosHigh-Type-931', - 'MHBKAzPhotosHigh-Kind-932', - 'MHBKAzPhotosHigh-Category-933', - 'MHBKAzPhotosHigh-Visibility State-934', - 'MHBKAzPhotosHigh-Mood-935', - 'MHBKAzPhotosHigh-Enrichment State-936', - 'MHBKAzPhotosHigh-Enrichment Version-937', - 'MHBKAzPhotosHigh-Highlight Version-938', - 'zAsset-Year Highlight Being Key Asset-939', - 'YHBKAzPhotosHigh-UUID-940', - 'YHBKAzPhotosHigh-zPK-941', - 'YHBKAzPhotosHigh-zENT-942', - 'YHBKAzPhotosHigh-zOPT-943', - 'YHBKAzPhotosHigh-Promotion Score-944', - 'YHBKAzPhotosHigh-Title-945', - 'YHBKAzPhotosHigh-Subtitle-946', - 'YHBKAzPhotosHigh-Verbose Smart Description-947', - 'YHBKAzPhotosHigh-Start Date-948', - 'YHBKAzPhotosHigh-Start Timezone Offset-949', - 'YHBKAzPhotosHigh-End Timezone Offset-950', - 'YHBKAzPhotosHigh-End Date-951', - 'YHBKAzPhotosHigh-Asset Count-952', - 'YHBKAzPhotosHigh-Summary Count-953', - 'YHBKAzPhotosHigh-Extended Count-954', - 'YHBKAzPhotosHigh-Day Group Assets Count-955', - 'YHBKAzPhotosHigh-Day Group Ext Assets Count-956', - 'YHBKAzPhotosHigh-Day Group Summary Assets Count-957', - 'YHBKAzPhotosHigh-Parent PH Key-958', - 'YHBKAzPhotosHigh-Year Key Asset-959', - 'YHBKAzPhotosHigh-Month First Asset-960', - 'YHBKAzPhotosHigh-Month Key Asset-961', - 'YHBKAzPhotosHigh-Key Asset-962', - 'YHBKAzPhotosHigh-Parent Day Group PH Key-963', - 'YHBKAzPhotosHigh-Day Group Key Asset-964', - 'YHBKAzPhotosHigh-is Curated-965', - 'YHBKAzPhotosHigh-Type-966', - 'YHBKAzPhotosHigh-Kind-967', - 'YHBKAzPhotosHigh-Category-968', - 'YHBKAzPhotosHigh-Visibility State-969', - 'YHBKAzPhotosHigh-Mood-970', - 'YHBKAzPhotosHigh-Enrichment State-971', - 'YHBKAzPhotosHigh-Enrichment Version-972', - 'YHBKAzPhotosHigh-Highlight Version-973', - 'z3SuggBKA-3KeyAssets = zAsset-zPK-974', - 'z3SuggBKA-55SuggBeingKeyAssets = zSugg-zPK-975', - 'SBKAzSugg-zPK-976', - 'SBKAzSugg-UUID-977', - 'SBKAzSugg-Start Date-978', - 'SBKAzSugg-State-979', - 'SBKAzSugg-Featured State-980', - 'SBKAzSugg-Notification State-981', - 'SBKAzSugg-Creation Date-982', - 'SBKAzSugg-End Date-983', - 'SBKAzSugg-Activation Date-984', - 'SBKAzSugg-Expunge Date-985', - 'SBKAzSugg-Relevant Until Date-986', - 'SBKAzSugg-Title-987', - 'SBKAzSugg-Sub Title-988', - 'SBKAzSugg-Cached Count-989', - 'SBKAzSugg-Cahed Photos Count-990', - 'SBKAzSugg-Cached Videos Count-991', - 'SBKAzSugg-Type-992', - 'SBKAzSugg-Sub Type-993', - 'SBKAzSugg-Version-994', - 'SBKAzSugg-Cloud Local State-995', - 'SBKAzSugg-Cloud Delete State-996', - 'z3SuggBRA-3RepAssets1-997', - 'z3SuggBRA-55SuggBeingRepAssets-998', - 'SBRAzSugg-zPK-999', - 'SBRAzSugg-UUID-1000', - 'SBRAzSugg-Start Date-1001', - 'SBRAzSugg-State-1002', - 'SBRAzSugg-Featured State-1003', - 'SBRAzSugg-Notification State-1004', - 'SBRAzSugg-Creation Date-1005', - 'SBRAzSugg-End Date-1006', - 'SBRAzSugg-Activation Date-1007', - 'SBRAzSugg-Expunge Date-1008', - 'SBRAzSugg-Relevant Until Date-1009', - 'SBRAzSugg-Title-1010', - 'SBRAzSugg-Sub Title-1011', - 'SBRAzSugg-Cached Count-1012', - 'SBRAzSugg-Cahed Photos Count-1013', - 'SBRAzSugg-Cached Videos Count-1014', - 'SBRAzSugg-Type-1015', - 'SBRAzSugg-Sub Type-1016', - 'SBRAzSugg-Version-1017', - 'SBRAzSugg-Cloud Local State-1018', - 'SBRAzSugg-Cloud Delete State-1019', - 'zAsset-Highlight Visibility Score-1020', - 'zMedAnlyAstAttr-Media Analysis Version-1021', - 'zMedAnlyAstAttr-Audio Classification-1022', - 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-1023', - 'zMedAnlyAstAttr-Best Video Range Start Time Scale-1024', - 'zMedAnlyAstAttr-Best Video Range Duration Value-1025', - 'zMedAnlyAstAttr-Best Video Range Start Value-1026', - 'zMedAnlyAstAttr-Packed Best Playback Rect-1027', - 'zMedAnlyAstAttr-Activity Score-1028', - 'zMedAnlyAstAttr-Video Score-1029', - 'zMedAnlyAstAttr-AutoPlay Suggestion Score-1030', - 'zMedAnlyAstAttr-Blurriness Score-1031', - 'zMedAnlyAstAttr-Exposure Score-1032', - 'zAssetAnalyState-Asset UUID-4TableStart-1033', - 'zAssetAnalyState-Analyisis State-1034', - 'zAssetAnalyState-Worker Flags-1035', - 'zAssetAnalyState-Worker Type-1036', - 'zAssetAnalyState-Ignore Until Date-1037', - 'zAssetAnalyState-Last Ignored Date-1038', - 'zAssetAnalyState-Sort Token-1039', - 'zAsset-Overall Aesthetic Score-1040', - 'zCompAssetAttr-Behavioral Score-1041', - 'zCompAssetAttr-Failure Score zCompAssetAttr-1042', - 'zCompAssetAttr-Harmonious Color Score-1043', - 'zCompAssetAttr-Immersiveness Score-1044', - 'zCompAssetAttr-Interaction Score-1045', - 'zCompAssetAttr-Intersting Subject Score-1046', - 'zCompAssetAttr-Intrusive Object Presence Score-1047', - 'zCompAssetAttr-Lively Color Score-1048', - 'zCompAssetAttr-Low Light-1049', - 'zCompAssetAttr-Noise Score-1050', - 'zCompAssetAttr-Pleasant Camera Tilt Score-1051', - 'zCompAssetAttr-Pleasant Composition Score-1052', - 'zCompAssetAttr-Pleasant Lighting Score-1053', - 'zCompAssetAttr-Pleasant Pattern Score-1054', - 'zCompAssetAttr-Pleasant Perspective Score-1055', - 'zCompAssetAttr-Pleasant Post Processing Score-1056', - 'zCompAssetAttr-Pleasant Reflection Score-1057', - 'zCompAssetAttrPleasant Symmetry Score-1058', - 'zCompAssetAttr-Sharply Focused Subject Score-1059', - 'zCompAssetAttr-Tastfully Blurred Score-1060', - 'zCompAssetAttr-Well Chosen Subject Score-1061', - 'zCompAssetAttr-Well Framed Subject Score-1062', - 'zCompAssetAttr-Well Timeed Shot Score-1063', - 'zCldRes-Asset UUID-4TableStart-1064', - 'zCldRes-Cloud Local State-1065', - 'zCldRes-File Size-1066', - 'zCldRes-Height-1067', - 'zCldRes-Is Available-1068', - 'zCldRes-Is Locally Available-1069', - 'zCldRes-Prefetch Count-1070', - 'zCldRes-Source Type-1071', - 'zCldRes-Type-1072', - 'zCldRes-Width-1073', - 'zCldRes-Date Created-1074', - 'zCldRes-Last OnDemand Download Date-1075', - 'zCldRes-Last Prefetch Date-1076', - 'zCldRes-Prunedat-1077', - 'zCldRes-File Path-1078', - 'zCldRes-Fingerprint-1079', - 'zCldRes-Item ID-1080', - 'zCldRes-UniID-1081', - 'zAddAssetAttr-zPK-1082', - 'zAddAssetAttr-zENT-1083', - 'ZAddAssetAttr-zOPT-1084', - 'zAddAssetAttr-zAsset= zAsset_zPK-1085', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-1086', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-1087', - 'zAddAssetAttr-Master Fingerprint-1088', - 'zAddAssetAttr-Public Global UUID-1089', - 'zAddAssetAttr-Deferred Photo Identifier-1090', - 'zAddAssetAttr-Original Assets UUID-1091', - 'zAddAssetAttr-Import Session ID-1092', - 'zAddAssetAttr-Originating Asset Identifier-1093', - 'zAddAssetAttr.Adjusted Fingerprint-1094', - 'zAlbumList-zPK= Album List Key-1095', - 'zAlbumList-zENT-1096', - 'zAlbumList-zOPT-1097', - 'zAlbumList-ID Key-1098', - 'zAlbumList-UUID-1099', - 'zAsset-zPK-1100', - 'zAsset-zENT-1101', - 'zAsset-zOPT-1102', - 'zAsset-Master= zCldMast-zPK-1103', - 'zAsset-Extended Attributes= zExtAttr-zPK-1104', - 'zAsset-Import Session Key-1105', - 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-1106', - 'zAsset-FOK-Cloud Feed Asset Entry Key-1107', - 'zAsset-Moment Share Key= zShare-zPK-1108', - 'zAsset-zMoment Key= zMoment-zPK-1109', - 'zAsset-Computed Attributes Asset Key-1110', - 'zAsset-Highlight Being Assets-HBA Key-1111', - 'zAsset-Highlight Being Extended Assets-HBEA Key-1112', - 'zAsset-Highligh Being Summary Assets-HBSA Key-1113', - 'zAsset-Day Group Highlight Being Assets-DGHBA Key-1114', - 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-1115', - 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-1116', - 'zAsset-Promotion Score-1117', - 'zAsset-Media Analysis Attributes Key-1118', - 'zAsset-Media Group UUID-1119', - 'zAsset-UUID = store.cloudphotodb-1120', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-1121', - 'zAsset.Cloud Collection GUID-1122', - 'zAsset-Avalanche UUID-1123', - 'zAssetAnalyState-zPK-1124', - 'zAssetAnalyState-zEnt-1125', - 'zAssetAnalyState-zOpt-1126', - 'zAssetAnalyState-Asset= zAsset-zPK-1127', - 'zAssetAnalyState-Asset UUID-1128', - 'zAssetDes-zPK-1129', - 'zAssetDes-zENT-1130', - 'zAssetDes-zOPT-1131', - 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-1132', - 'zCldFeedEnt-zPK= zCldShared keys-1133', - 'zCldFeedEnt-zENT-1134', - 'zCldFeedEnt-zOPT-1135', - 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-1136', - 'zCldFeedEnt-Entry Invitation Record GUID-1137', - 'zCldFeedEnt-Entry Cloud Asset GUID-1138', - 'zCldMast-zPK= zAsset-Master-1139', - 'zCldMast-zENT-1140', - 'zCldMast-zOPT-1141', - 'zCldMast-Moment Share Key= zShare-zPK-1142', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-1143', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-1144', - 'zCldMast-Originating Asset ID-1145', - 'zCldMast-Import Session ID- AirDrop-StillTesting-1146', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-1147', - 'CMzCldMastMedData-zENT-1148', - 'CMzCldMastMedData-zOPT-1149', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-1150', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-1151', - 'AAAzCldMastMedData-zENT-1152', - 'AAAzCldMastMedData-zOPT-1153', - 'AAAzCldMastMedData-CldMast key-1154', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-1155', - 'zCldRes-zPK-1156', - 'zCldRes-zENT-1157', - 'zCldRes-zOPT-1158', - 'zCldRes-Asset= zAsset-zPK-1159', - 'zCldRes-Cloud Master= zCldMast-zPK-1160', - 'zCldRes-Asset UUID-1161', - 'zCldShareAlbumInvRec-zPK-1162', - 'zCldShareAlbumInvRec-zEnt-1163', - 'zCldShareAlbumInvRec-zOpt-1164', - 'zCldShareAlbumInvRec-Album Key-1165', - 'zCldShareAlbumInvRec-FOK Album Key-1166', - 'zCldShareAlbumInvRec-Album GUID-1167', - 'zCldShareAlbumInvRec-Cloud GUID-1168', - 'zCldSharedComment-zPK-1169', - 'zCldSharedComment-zENT-1170', - 'zCldSharedComment-zOPT-1171', - 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1172', - 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1173', - 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1174', - 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1175', - 'zCldSharedComment-CldFeedLikeCommentEntry Key-1176', - 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1177', - 'zCldSharedComment-Cloud GUID-1178', - 'zCompAssetAttr-zPK-1179', - 'zCompAssetAttr-zEnt-1180', - 'zCompAssetAttr-zOpt-1181', - 'zCompAssetAttr-Asset Key-1182', - 'zDetFace-zPK-1183', - 'zDetFace-zEnt-1184', - 'zDetFace.zOpt-1185', - 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-1186', - 'zDetFace-Person= zPerson-zPK-1187', - 'zDetFace-Person Being Key Face-1188', - 'zDetFace-Face Print-1189', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1190', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1191', - 'zDetFace-UUID-1192', - 'zDetFaceGroup-zPK-1193', - 'zDetFaceGroup-zENT-1194', - 'zDetFaceGroup-zOPT-1195', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-1196', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-1197', - 'zDetFaceGroup-UUID-1198', - 'zDetFacePrint-zPK-1199', - 'zDetFacePrint-zEnt-1200', - 'zDetFacePrint-zOpt-1201', - 'zDetFacePrint-Face Key-1202', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-1203', - 'zExtAttr-zENT-1204', - 'zExtAttr-zOPT-1205', - 'zExtAttr-Asset Key-1206', - 'zFaceCrop-zPK-1207', - 'zFaceCrop-zEnt-1208', - 'zFaceCrop-zOpt-1209', - 'zFaceCrop-Asset Key-1210', - 'zFaceCrop-Invalid Merge Canidate Person UUID-1211', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1212', - 'zFaceCrop-Face Key-1213', - 'zFaceCrop-UUID-1214', - 'zGenAlbum-zPK=26AlbumLists= 26Albums-1215', - 'zGenAlbum-zENT-1216', - 'zGenAlbum-zOpt-1217', - 'zGenAlbum-Key Asset-Key zAsset-zPK-1218', - 'zGenAlbum-Secondary Key Asset-1219', - 'zGenAlbum-Tertiary Key Asset-1220', - 'zGenAlbum-Custom Key Asset-1221', - 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1222', - 'zGenAlbum-FOK Parent Folder-1223', - 'zGenAlbum-UUID-1224', - 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1225', - 'zGenAlbum-Project Render UUID-1226', - 'zIntResou-zPK-1227', - 'zIntResou-zENT-1228', - 'zIntResou-zOPT-1229', - 'zIntResou-Asset= zAsset_zPK-1230', - 'zIntResou-Fingerprint-1231', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-1232', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1233', - 'zMedAnlyAstAttr-zEnt-1234', - 'zMedAnlyAstAttr-zOpt-1235', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-1236', - 'zPerson-zPK=zDetFace-Person-1237', - 'zPerson-zEnt-1238', - 'zPerson-zOpt-1239', - 'zPerson-KeyFace=zDetFace-zPK-1240', - 'zPerson-Assoc Face Group Key-1241', - 'zPerson-Person UUID-1242', - 'zSceneP-zPK-1243', - 'zSceneP-zENT-1244', - 'zSceneP-zOPT-1245', - 'zShare-zPK-1246', - 'zShare-zENT-1247', - 'zShare-zOPT-1248', - 'zShare-UUID-1249', - 'SPLzShare-UUID-1250', - 'zShare-Scope ID = store.cloudphotodb-1251', - 'zSharePartic-zPK-1252', - 'zSharePartic-zENT-1253', - 'zSharePartic-zOPT-1254', - 'zSharePartic-Share Key= zShare-zPK-1255', - 'zSharePartic-UUID-1256', - 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1257', - 'zUnmAdj-zOPT-1258', - 'zUnmAdj-zENT-1259', - 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1260', - 'zUnmAdj-UUID-1261', - 'zUnmAdj-Other Adjustments Fingerprint-1262', - 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1263', - 'z25AlbumList-25Albums= zGenAlbum-zPK-1264', - 'z25AlbumList-Album List Key-1265', - 'z25AlbumList-FOK25Albums Key-1266', - 'z26Assets-26Albums= zGenAlbum-zPK-1267', - 'z26Assets-3Asset Key= zAsset-zPK in the Album-1268', - 'z26Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1269') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph94.1-iOS14_Ref_for_Asset_Analysis-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph94.1-iOS14_Ref_for_Asset_Analysis-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + ''' - else: - logfunc('No data available for iOS 14 PhotoData-Photos.sqlite') + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], + row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], + row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], + row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], + row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], + row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], + row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], + row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], + row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], + row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], + row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], + row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], + row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], + row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], + row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], + row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], + row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], + row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], + row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], + row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], + row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], + row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], + row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], + row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], + row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], + row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], + row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], + row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], + row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], + row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], + row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], + row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], + row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], + row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], + row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], + row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], + row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], + row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], + row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], + row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], + row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], + row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], + row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], + row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], + row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], + row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], + row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], + row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], + row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], + row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], + row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], + row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], + row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], + row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], + row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], + row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], + row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], + row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], + row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], + row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], + row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], + row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], + row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], + row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], + row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], + row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], + row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], + row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], + row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], + row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], + row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], + row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], + row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], + row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], + row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], + row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], + row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], + row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], + row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], + row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], + row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], + row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], + row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], + row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], + row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], + row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], + row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], + row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], + row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], + row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], + row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], + row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], + row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], + row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], + row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], + row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], + row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], + row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], + row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], + row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], + row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093], + row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100], + row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107], + row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114], + row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121], + row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128], + row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135], + row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142], + row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149], + row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156], + row[1157], row[1158], row[1159], row[1160], row[1161], row[1162], row[1163], + row[1164], row[1165], row[1166], row[1167], row[1168], row[1169], row[1170], + row[1171], row[1172], row[1173], row[1174], row[1175], row[1176], row[1177], + row[1178], row[1179], row[1180], row[1181], row[1182], row[1183], row[1184], + row[1185], row[1186], row[1187], row[1188], row[1189], row[1190], row[1191], + row[1192], row[1193], row[1194], row[1195], row[1196], row[1197], row[1198], + row[1199], row[1200], row[1201], row[1202], row[1203], row[1204], row[1205], + row[1206], row[1207], row[1208], row[1209], row[1210], row[1211], row[1212], + row[1213], row[1214], row[1215], row[1216], row[1217], row[1218], row[1219], + row[1220], row[1221], row[1222], row[1223], row[1224], row[1225], row[1226], + row[1227], row[1228], row[1229], row[1230], row[1231], row[1232], row[1233], + row[1234], row[1235], row[1236], row[1237], row[1238], row[1239], row[1240], + row[1241], row[1242], row[1243], row[1244], row[1245], row[1246], row[1247], + row[1248], row[1249], row[1250], row[1251], row[1252], row[1253], row[1254], + row[1255], row[1256], row[1257], row[1258], row[1259], row[1260], row[1261], + row[1262], row[1263], row[1264], row[1265], row[1266], row[1267], row[1268], + row[1269])) - db.close() - return + data_headers = (('zAsset-Added Date-0', 'datetime'), + 'zAsset- SortToken -CameraRoll-1', + 'zAsset Complete-2', + 'zAsset-zPK-4QueryStart-3', + 'zAddAssetAttr-zPK-4QueryStart-4', + 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', + 'zAddAssetAttr-Master Fingerprint-4TableStart-6', + 'zIntResou-Fingerprint-4TableStart-7', + 'zAsset-Cloud is My Asset-8', + 'zAsset-Cloud is deletable-Asset-9', + 'zAsset-Cloud_Local_State-10', + 'zAsset-Visibility State-11', + 'zExtAttr-Camera Make-12', + 'zExtAttr-Camera Model-13', + 'zExtAttr-Lens Model-14', + 'zExtAttr-Flash Fired-15', + 'zExtAttr-Focal Lenght-16', + 'zAsset-Derived Camera Capture Device-17', + 'zAddAssetAttr-Camera Captured Device-18', + 'zAddAssetAttr-Imported by-19', + 'zCldMast-Imported By-20', + 'zAddAssetAttr-Creator Bundle ID-21', + 'zAddAssetAttr-Imported By Display Name-22', + 'zCldMast-Imported by Bundle ID-23', + 'zCldMast-Imported by Display Name-24', + 'zAsset-Saved Asset Type-25', + 'zAsset-Directory-Path-26', + 'zAsset-Filename-27', + 'zAddAssetAttr- Original Filename-28', + 'zCldMast- Original Filename-29', + ('zAsset-Date Created-30', 'datetime'), + ('zCldMast-Creation Date-31', 'datetime'), + ('zIntResou-CldMst Date Created-32', 'datetime'), + 'zAddAssetAttr-Time Zone Name-33', + 'zAddAssetAttr-Time Zone Offset-34', + 'zAddAssetAttr-Inferred Time Zone Offset-35', + 'zAddAssetAttr-EXIF-String-36', + ('zAsset-Modification Date-37', 'datetime'), + ('zAsset-Last Shared Date-38', 'datetime'), + 'zCldMast-Cloud Local State-39', + ('zCldMast-Import Date-40', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-41', 'datetime'), + 'zAddAssetAttr-Import Session ID-4QueryStart-42', + ('zAddAssetAttr-Alt Import Image Date-43', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-44', + ('zAsset-Cloud Batch Publish Date-45', 'datetime'), + ('zAsset-Cloud Server Publish Date-46', 'datetime'), + 'zAsset-Cloud Download Requests-47', + 'zAsset-Cloud Batch ID-48', + 'zAddAssetAttr-Upload Attempts-49', + 'zAsset-Latitude-50', + 'zExtAttr-Latitude-51', + 'zAsset-Longitude-52', + 'zExtAttr-Longitude-53', + 'zAddAssetAttr-GPS Horizontal Accuracy-54', + 'zAddAssetAttr-Location Hash-55', + 'zAddAssetAttr-Shifted Location Valid-56', + 'zAddAssetAttr-Shifted Location Data-57', + 'zAddAssetAttr-Reverse Location Is Valid-58', + 'zAddAssetAttr-Reverse Location Data-59', + 'ParentzGenAlbum-UUID-4QueryStart-60', + 'zGenAlbum-UUID-4QueryStart-61', + 'ParentzGenAlbum-Cloud GUID-4QueryStart-62', + 'zGenAlbum-Cloud GUID-4QueryStart-63', + 'zCldShareAlbumInvRec-Album GUID-4QueryStart-64', + 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-65', + 'zGenAlbum-Project Render UUID-4QueryStart-66', + 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-67', + 'zGenAlbum-Cloud_Local_State-4QueryStart-68', + ('ParentzGenAlbum- Creation Date- 4QueryStart-69', 'datetime'), + ('zGenAlbum- Creation Date- 4QueryStart-70', 'datetime'), + ('zGenAlbum- Cloud Creation Date- 4QueryStart-71', 'datetime'), + ('zGenAlbum- Start Date- 4QueryStart-72', 'datetime'), + ('zGenAlbum- End Date- 4QueryStart-73', 'datetime'), + ('zGenAlbum-Cloud Subscription Date- 4QueryStart-74', 'datetime'), + 'ParentzGenAlbum- Title- 4QueryStart-75', + 'zGenAlbum- Title-User&System Applied- 4QueryStart-76', + 'zGenAlbum-Import Session ID-SWY- 4QueryStart-77', + 'zGenAlbum-Creator Bundle ID- 4QueryStart-78', + 'zGenAlbum-zENT- Entity- 4QueryStart-79', + 'ParentzGenAlbum- Kind- 4QueryStart-80', + 'zGenAlbum-Album Kind- 4QueryStart-81', + 'AAAzCldMastMedData-zOPT-82', + 'zAddAssetAttr-Media Metadata Type-83', + 'AAAzCldMastMedData-Data-84', + 'CldMasterzCldMastMedData-zOPT-85', + 'zCldMast-Media Metadata Type-86', + 'CMzCldMastMedData-Data-87', + 'zAsset-Orientation-88', + 'zAddAssetAttr-Original Orientation-89', + 'zAsset-Kind-90', + 'zAsset-Kind-Sub-Type-91', + 'zAddAssetAttr-Cloud Kind Sub Type-92', + 'zAsset-Playback Style-93', + 'zAsset-Playback Variation-94', + 'zAsset-Video Duration-95', + 'zExtAttr-Duration-96', + 'zAsset-Video CP Duration-97', + 'zAddAssetAttr-Video CP Duration Time Scale-98', + 'zAsset-Video CP Visibility State-99', + 'zAddAssetAttr-Video CP Display Value-100', + 'zAddAssetAttr-Video CP Display Time Scale-101', + 'zIntResou-Datastore Class ID-102', + 'zAsset-Cloud Placeholder Kind-103', + 'zIntResou-Local Availability-104', + 'zIntResou-Local Availability Target-105', + 'zIntResou-Cloud Local State-106', + 'zIntResou-Remote Availability-107', + 'zIntResou-Remote Availability Target-108', + 'zIntResou-Transient Cloud Master-109', + 'zIntResou-Side Car Index-110', + 'zIntResou- File ID-111', + 'zIntResou-Version-112', + 'zAddAssetAttr- Original-File-Size-113', + 'zIntResou-Resource Type-114', + 'zIntResou-Datastore Sub-Type-115', + 'zIntResou-Cloud Source Type-116', + 'zIntResou-Data Length-117', + 'zIntResou-Recipe ID-118', + ('zIntResou-Cloud Last Prefetch Date-119', 'datetime'), + 'zIntResou-Cloud Prefetch Count-120', + ('zIntResou- Cloud-Last-OnDemand Download-Date-121', 'datetime'), + 'zAsset-Uniform Type ID-122', + 'zAsset-Original Color Space-123', + 'zCldMast-Uniform_Type_ID-124', + 'zCldMast-Full Size JPEG Source-125', + 'zAsset-HDR Gain-126', + 'zExtAttr-Codec-127', + 'zCldMast-Codec Name-128', + 'zCldMast-Video Frame Rate-129', + 'zCldMast-Placeholder State-130', + 'zAsset-Depth_Type-131', + 'zAsset-Avalanche UUID-4TableStart-132', + 'zAsset-Avalanche_Pick_Type-BurstAsset-133', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134', + 'zAddAssetAttr-Cloud Recovery State-135', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-136', + 'zAsset-Deferred Processing Needed-137', + 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-138', + 'zAddAssetAttr-Deferred Processing Candidate Options-139', + 'zAsset-Has Adjustments-Camera-Effects-Filters-140', + 'zUnmAdj-UUID-4TableStart-141', + 'zAsset-Adjustment Timestamp-142', + 'zUnmAdj-Adjustment Timestamp-143', + 'zAddAssetAttr-Editor Bundle ID-144', + 'zUnmAdj-Editor Localized Name-145', + 'zUnmAdj-Adjustment Format ID-146', + 'zAddAssetAttr-Montage-147', + 'zUnmAdj-Adjustment Render Types-148', + 'zUnmAdj-Adjustment Format Version-149', + 'zUnmAdj-Adjustment Base Image Format-150', + 'zAsset-Favorite-151', + 'zAsset-Hidden-152', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-153', + ('zAsset-Trashed Date-154', 'datetime'), + 'zIntResou-Trash State-155', + ('zIntResou-Trashed Date-156', 'datetime'), + 'zAsset-Cloud Delete State-157', + 'zIntResou-Cloud Delete State-158', + 'zAddAssetAttr-PTP Trashed State-159', + 'zIntResou-PTP Trashed State-160', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-161', + 'zMedAnlyAstAttr-Media Analysis Timestamp-162', + ('zAsset-Analysis State Modification Date-163', 'datetime'), + 'zAddAssetAttr- Pending View Count-164', + 'zAddAssetAttr- View Count-165', + 'zAddAssetAttr- Pending Play Count-166', + 'zAddAssetAttr- Play Count-167', + 'zAddAssetAttr- Pending Share Count-168', + 'zAddAssetAttr- Share Count-169', + 'zAddAssetAttr-Allowed for Analysis-170', + 'zAddAssetAttr-Scene Analysis Version-171', + 'zAddAssetAttr-Scene Analysis Timestamp-172', + 'zAddAssetAttr-Destination Asset Copy State-173', + 'zAddAssetAttr-Variation Suggestions States-174', + 'zAsset-High Frame Rate State-175', + 'zAsset-Video Key Frame Time Scale-176', + 'zAsset-Video Key Frame Value-177', + 'zExtAttr-ISO-178', + 'zExtAttr-Metering Mode-179', + 'zExtAttr-Sample Rate-180', + 'zExtAttr-Track Format-181', + 'zExtAttr-White Balance-182', + 'zExtAttr-Aperture-183', + 'zExtAttr-BitRate-184', + 'zExtAttr-Exposure Bias-185', + 'zExtAttr-Frames Per Second-186', + 'zExtAttr-Shutter Speed-187', + 'zAsset-Height-188', + 'zAddAssetAttr-Original Height-189', + 'zIntResou-Unoriented Height-190', + 'zAsset-Width-191', + 'zAddAssetAttr-Original Width-192', + 'zIntResou-Unoriented Width-193', + 'zShare-Thumbnail Image Data-194', + 'SPLzShare-Thumbnail Image Data-195', + 'zAsset-Thumbnail Index-196', + 'zAddAssetAttr-Embedded Thumbnail Height-197', + 'zAddAssetAttr-Embedded Thumbnail Length-198', + 'zAddAssetAttr-Embedded Thumbnail Offset-199', + 'zAddAssetAttr-Embedded Thumbnail Width-200', + 'zAsset-Packed Acceptable Crop Rect-201', + 'zAsset-Packed Badge Attributes-202', + 'zAsset-Packed Preferred Crop Rect-203', + 'zAsset-Curation Score-204', + 'zAsset-Camera Processing Adjustment State-205', + 'zAsset-Depth Type-206', + 'zAddAssetAttr-Orig Resource Choice-207', + 'zAddAssetAttr-Spatial Over Capture Group ID-208', + 'zAddAssetAttr-Place Annotation Data-209', + 'zAddAssetAttr-Distance Identity-210', + 'zAddAssetAttr-Edited IPTC Attributes-211', + 'zAssetDes-Long Description-212', + 'zAddAssetAttr-Asset Description-213', + 'zAddAssetAttr-Title-Comments via Cloud Website-214', + 'zAddAssetAttr-Accessibility Description-215', + 'zAddAssetAttr-Photo Stream Tag ID-216', + ('zCldFeedEnt-Entry Date-217', 'datetime'), + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-218', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-219', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-220', + 'zCldFeedEnt-Entry Priority Number-221', + 'zCldFeedEnt-Entry Type Number-222', + 'zCldSharedComment-Cloud GUID-4TableStart-223', + ('zCldSharedComment-Date-224', 'datetime'), + ('zCldSharedComment-Comment Client Date-225', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-226', 'datetime'), + 'zCldSharedComment-Type-227', + 'zCldSharedComment-Comment Text-228', + 'zCldSharedComment-Commenter Hashed Person ID-229', + 'zCldSharedComment-Batch Comment-230', + 'zCldSharedComment-Is a Caption-231', + 'zAsset-Cloud Has Comments by Me-232', + 'zCldSharedComment-Is My Comment-233', + 'zCldSharedComment-Is Deletable-234', + 'zAsset-Cloud Has Comments Conversation-235', + 'zAsset-Cloud Has Unseen Comments-236', + 'zCldSharedComment-Liked-237', + 'zAddAssetAttr-Share Type-238', + 'zShare-UUID-CMM-4TableStart-239', + 'SPLzShare-UUID-SPL-4TableStart-240', + 'zShare-zENT-CMM-241', + 'SPLzShare-zENT-SPL-242', + 'zShare-Status-CMM-243', + 'SPLzShare-Status-SPL-244', + 'zShare-Scope Type-CMM-245', + 'SPLzShare-Scope Type-SPL-246', + 'zShare-Local Publish State-CMM-247', + 'SPLzShare-Local Publish State-SPL-248', + 'zShare-Public Permission-CMM-249', + 'SPLzShare-Public Permission-SPL-250', + 'zShare-Originating Scope ID-CMM-251', + 'SPLzShare-Originating Scope ID-SPL-252', + 'zShare-Scope ID-CMM-253', + 'SPLzShare-Scope ID-SPL-254', + 'zShare-Title-CMM-255', + 'SPLzShare-Title-SPL-256', + 'zShare-Share URL-CMM-257', + 'SPLzShare-Share URL-SPL-258', + ('zShare-Creation Date-CMM-259', 'datetime'), + ('SPLzShare-Creation Date-SPL-260', 'datetime'), + ('zShare-Start Date-CMM-261', 'datetime'), + ('SPLzShare-Start Date-SPL-262', 'datetime'), + ('zShare-End Date-CMM-263', 'datetime'), + ('SPLzShare-End Date-SPL-264', 'datetime'), + ('zShare-Expiry Date-CMM-265', 'datetime'), + ('SPLzShare-Expiry Date-SPL-266', 'datetime'), + 'zShare-Asset Count-CMM-267', + 'SPLzShare-Asset Count-SPL-268', + 'zShare-Photos Count-CMM-269', + 'SPLzShare-Photos Count-CMM-SPL-270', + 'zShare-Uploaded Photos Count-CMM-271', + 'SPLzShare-Uploaded Photos Count-SPL-272', + 'zShare-Videos Count-CMM-273', + 'SPLzShare-Videos Count-SPL-274', + 'zShare-Uploaded Videos Count-CMM-275', + 'SPLzShare-Uploaded Videos Count-SPL-276', + 'zShare-Force Sync Attempted-CMM-277', + 'SPLzShare-Force Sync Attempted-SPL-278', + 'zShare-Should Notify On Upload Completion-CMM-279', + 'SPLzShare-Should Notify On Upload Completion-SPL-280', + 'zShare-Trashed State-CMM-281', + 'SPLzShare-Trashed State-SPL-282', + 'zShare-Cloud Delete State-CMM-283', + 'SPLzShare-Cloud Delete State-SPL-284', + 'zShare-Should Ignor Budgets-CMM-285', + 'SPLzShare-Should Ignor Budgets-SPL-286', + 'zSharePartic-UUID-4TableStart-287', + 'SPLzSharePartic-UUID-4TableStart-288', + 'zSharePartic-Acceptance Status-289', + 'SPLzSharePartic-Acceptance Status-290', + 'zSharePartic-Is Current User-291', + 'SPLzSharePartic-Is Current User-292', + 'zSharePartic-Role-293', + 'SPLzSharePartic-Role-294', + 'zSharePartic-Premission-295', + 'SPLzSharePartic-Premission-296', + 'zSharePartic-User ID-297', + 'SPLzSharePartic-User ID-298', + 'SPLzSharePartic-zPK-4TableStart-299', + 'zSharePartic-zPK-4TableStart-300', + 'zSharePartic-Email Address-301', + 'SPLzSharePartic-Email Address-302', + 'zSharePartic-Phone Number-303', + 'SPLzSharePartic-Phone Number-304', + 'ParentzGenAlbum-UUID-4TableStart-305', + 'zGenAlbum-UUID-4TableStart-306', + 'ParentzGenAlbum-Cloud GUID-4TableStart-307', + 'zGenAlbum-Cloud GUID-4TableStart-308', + 'zCldShareAlbumInvRec-Album GUID-4TableStart-309', + 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-310', + 'zGenAlbum-Project Render UUID-4TableStart-311', + 'zAlbumList-Needs Reordering Number-312', + 'zGenAlbum-zENT- Entity-313', + 'ParentzGenAlbum-Kind-314', + 'zGenAlbum-Album Kind-315', + 'ParentzGenAlbum-Cloud-Local-State-316', + 'zGenAlbum-Cloud_Local_State-317', + 'ParentzGenAlbum- Title-318', + 'zGenAlbum- Title-User&System Applied-319', + 'zGenAlbum-Import Session ID-SWY-320', + 'zGenAlbum-Creator Bundle ID-321', + ('ParentzGenAlbum-Creation Date-322', 'datetime'), + ('zGenAlbum-Creation Date-323', 'datetime'), + ('zGenAlbum-Cloud Creation Date-324', 'datetime'), + ('zGenAlbum-Start Date-325', 'datetime'), + ('zGenAlbum-End Date-326', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-327', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-328', + 'zGenAlbum-Pending Items Count-329', + 'ParentzGenAlbum-Pending Items Type-330', + 'zGenAlbum-Pending Items Type-331', + 'zGenAlbum- Cached Photos Count-332', + 'zGenAlbum- Cached Videos Count-333', + 'zGenAlbum- Cached Count-334', + 'ParentzGenAlbum-Sync Event Order Key-335', + 'zGenAlbum-Sync Event Order Key-336', + 'zGenAlbum-Has Unseen Content-337', + 'zGenAlbum-Unseen Asset Count-338', + 'zGenAlbum-is Owned-339', + 'zGenAlbum-Cloud Relationship State-340', + 'zGenAlbum-Cloud Relationship State Local-341', + 'zGenAlbum-Cloud Owner Mail Key-342', + 'zGenAlbum-Cloud Owner Frist Name-343', + 'zGenAlbum-Cloud Owner Last Name-344', + 'zGenAlbum-Cloud Owner Full Name-345', + 'zGenAlbum-Cloud Person ID-346', + 'zAsset-Cloud Owner Hashed Person ID-347', + 'zGenAlbum-Cloud Owner Hashed Person ID-348', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-349', + 'zGenAlbum-Cloud Multi-Contributors Enabled-350', + 'zGenAlbum-Cloud Album Sub Type-351', + ('zGenAlbum-Cloud Contribution Date-352', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-353', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-354', + 'ParentzGenAlbum-Pinned-355', + 'zGenAlbum-Pinned-356', + 'ParentzGenAlbum-Custom Sort Key-357', + 'zGenAlbum-Custom Sort Key-358', + 'ParentzGenAlbum-Custom Sort Ascending-359', + 'zGenAlbum-Custom Sort Ascending-360', + 'ParentzGenAlbum-Is Prototype-361', + 'zGenAlbum-Is Prototype-362', + 'ParentzGenAlbum-Project Document Type-363', + 'zGenAlbum-Project Document Type-364', + 'ParentzGenAlbum-Custom Query Type-365', + 'zGenAlbum-Custom Query Type-366', + 'ParentzGenAlbum-Trashed State-367', + ('ParentzGenAlbum-Trash Date-368', 'datetime'), + 'zGenAlbum-Trashed State-369', + ('zGenAlbum-Trash Date-370', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-371', + 'zGenAlbum-Cloud Delete State-372', + 'zGenAlbum-Cloud Owner Whitelisted-373', + 'zGenAlbum-Cloud Local Public URL Enabled-374', + 'zGenAlbum-Cloud Public URL Enabled-375', + 'zGenAlbum-Public URL-376', + 'zGenAlbum-Key Asset Face Thumb Index-377', + 'zGenAlbum-Project Text Extension ID-378', + 'zGenAlbum-User Query Data-379', + 'zGenAlbum-Custom Query Parameters-380', + 'zGenAlbum-Project Data-381', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-382', + 'zCldShareAlbumInvRec-Invitation State Local-383', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-384', + ('zCldShareAlbumInvRec-Subscription Date-385', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-386', + 'zCldShareAlbumInvRec-Invitee Last Name-387', + 'zCldShareAlbumInvRec-Invitee Full Name-388', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-389', + 'zCldShareAlbumInvRec-Invitee Email Key-390', + 'zGenAlbum-Key Asset Face ID-391', + 'zFaceCrop-Face Area Points-392', + 'zAsset-Face Adjustment Version-393', + 'zDetFace-Asset Visible-394', + 'zPerson-Face Count-395', + 'zDetFace-Face Crop-396', + 'zDetFace-Face Algorithm Version-397', + 'zDetFace-Adjustment Version-398', + 'zDetFace-UUID-4TableStart-399', + 'zPerson-Person UUID-4TableStart-400', + 'zDetFace-Confirmed Face Crop Generation State-401', + 'zDetFace-Manual-402', + 'zDetFace-VIP Model Type-403', + 'zDetFace-Name Source-404', + 'zDetFace-Cloud Name Source-405', + 'zPerson-Person URI-406', + 'zPerson-Display Name-407', + 'zPerson-Full Name-408', + 'zPerson-Cloud Verified Type-409', + 'zFaceCrop-State-410', + 'zFaceCrop-Type-411', + 'zFaceCrop-UUID-4TableStart-412', + 'zPerson-Type-413', + 'zPerson-Verified Type-414', + 'zPerson-Gender Type-415', + 'zDetFace-Gender Type-416', + 'zDetFace-Center X-417', + 'zDetFace-Center Y-418', + 'zPerson-Age Type Estimate-419', + 'zDetFace-Age Type Estimate-420', + 'zDetFace-Hair Color Type-421', + 'zDetFace-Facial Hair Type-422', + 'zDetFace-Has Smile-423', + 'zDetFace-Smile Type-424', + 'zDetFace-Lip Makeup Type-425', + 'zDetFace-Eyes State-426', + 'zDetFace-Is Left Eye Closed-427', + 'zDetFace-Is Right Eye Closed-428', + 'zDetFace-Eye Glasses Type-429', + 'zDetFace-Eye Makeup Type-430', + 'zDetFace-Cluster Squence Number Key-431', + 'zDetFace-Grouping ID-432', + 'zDetFace-Master ID-433', + 'zDetFace-Quality-434', + 'zDetFace-Quality Measure-435', + 'zDetFace-Source Height-436', + 'zDetFace-Source Width-437', + 'zDetFace-Hidden-Asset Hidden-438', + 'zDetFace-In Trash-Recently Deleted-439', + 'zDetFace-Cloud Local State-440', + 'zDetFace-Training Type-441', + 'zDetFace.Pose Yaw-442', + 'zDetFace-Roll-443', + 'zDetFace-Size-444', + 'zDetFace-Cluster Squence Number-445', + 'zDetFace-Blur Score-446', + 'zDetFacePrint-Face Print Version-447', + 'zMedAnlyAstAttr-Face Count-448', + 'zDetFaceGroup-UUID-4TableStart-449', + 'zDetFaceGroup-Person Builder State-450', + 'zDetFaceGroup-UnNamed Face Count-451', + 'zPerson-In Person Naming Model-452', + 'zPerson-Key Face Pick Source Key-453', + 'zPerson-Manual Order Key-454', + 'zPerson-Question Type-455', + 'zPerson-Suggested For Client Type-456', + 'zPerson-Merge Target Person-457', + 'zPerson-Cloud Local State-458', + 'zFaceCrop-Cloud Local State-459', + 'zFaceCrop-Cloud Type-460', + 'zPerson-Cloud Delete State-461', + 'zFaceCrop-Cloud Delete State-462', + 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-463', + 'zMemory-zPK-464', + 'z3MemoryBCAs-3CuratedAssets = zAsset-zPK-465', + 'z3MemoryBCAs-40MemoriesBeingCuratedAssets = zMemory-zPK-466', + 'z3MemoryBECAs-3ExtCuratedAssets = zAsset-zPK-467', + 'z3MemoryBECAs-40MemoriesBeingExtCuratedAssets = zMemory-zPK-468', + 'z3MemoryBMCAs-3MovieCuratedAssets = zAsset-zPK-469', + 'z3MemoryBMCAs-40MemoriesBeingMovieCuratedAssets = zMemory-zPK-470', + 'z3MemoryBRAs-3RepresentativeAssets = zAsset-zPK-471', + 'z3MemoryBRAs-40RepresentativeAssets = zMemory-zPK-472', + 'zMemory-Key Asset = zAsset-zPK-473', + 'zMemory-UUID-474', + 'zMemory-SubTitle-475', + 'zMemory-Title-476', + 'zMemory-Category-477', + 'zMemory-SubCategory-478', + ('zMemory-Creation Date-479', 'datetime'), + 'zMemory-User Created-480', + 'zMemory-Favorite Memory-481', + 'zMemory-Score-482', + 'zMemory-View Count-483', + 'zMemory-Play Count-484', + 'zMemory-Rejected-485', + 'zMemory-Share Count-486', + ('zMemory-Last Movie Play Date-487', 'datetime'), + ('zMemory-Last Viewed Date-488', 'datetime'), + 'zMemory-Pending-489', + 'zMemory-Pending Play Count Memory-490', + 'zMemory-Pending Share Count Memory-491', + 'zMemory-Pending View Count Memory-492', + 'zMemory-Featured State-493', + 'zMemory-Photos Graph Version-494', + 'zMemory-AssetListPredicte-495', + 'zMemory-Notification State-496', + 'zMemory-Cloud Local State-497', + 'zMemory-Cloud Delete State-498', + 'YearzMomentList-UUID-499', + 'YearzMomentList-zPK-500', + 'zMoment-Year Moment List-501', + 'YearzMomentList-Sort Index-502', + 'YearzMomentList-Granularity Level-503', + ('YearzMomentList-Start Date-504', 'datetime'), + ('YearzMomentList-Representative Date-505', 'datetime'), + ('YearzMomentList-End Date-506', 'datetime'), + 'YearzMomentList-Trashed State-507', + 'MegaYMzMomentList-UUID-508', + 'MegaYMzMomentList-zPK-509', + 'zMoment-Mega Moment List-510', + 'MegaYMzMomentList-Sort Index-511', + 'MegaYMzMomentList-Granularity Level-512', + ('MegaYMzMomentList-Start Date-513', 'datetime'), + ('MegaYMzMomentList-Representative Date-514', 'datetime'), + ('MegaYMzMomentList-End Date-515', 'datetime'), + 'MegaYMzMomentList-Trashed State-516', + 'zMoment-UUID-517', + 'zMoment-zPK-518', + 'zMoment-Aggregation Score-519', + ('zMoment-Start Date-520', 'datetime'), + ('zMoment-Representative Date-521', 'datetime'), + 'zMoment-Timezone Offset-522', + ('zMoment-Modification Date-523', 'datetime'), + ('zMoment-End Date-524', 'datetime'), + 'zMoment-SubTitle-525', + 'zMoment-Title-526', + 'zMoment-Processed Location-527', + 'zMoment-Approx Latitude-528', + 'zMoment-Approx Longitude-529', + 'zMoment-GPS Horizontal Accuracy-530', + 'zMoment-Cache Count-531', + 'zMoment-Cached Photos Count-532', + 'zMoment-Cached Videos Count-533', + 'zMoment-Trashed State-534', + 'zMoment-Highlight Key-535', + 'zAsset-Highlight Visibility Score-536', + 'YearParzPhotosHigh-UUID-537', + 'YearParzPhotosHigh-zPK-538', + 'YearParzPhotosHigh-zENT-539', + 'YearParzPhotosHigh-zOPT-540', + 'YearParzPhotosHigh-Promotion Score-541', + 'YearParzPhotosHigh-Title-542', + 'YearParzPhotosHigh-Verbose Smart Description-543', + ('YearParzPhotosHigh-Start Date-544', 'datetime'), + ('YearParzPhotosHigh-End Date-545', 'datetime'), + 'YearParzPhotosHigh-Year Key Asset-546', + 'YearParzPhotosHigh-Is Curated-547', + 'YearParzPhotosHigh-Kind-548', + 'YearParzPhotosHigh-Category-549', + 'YearParzPhotosHigh-Visibility State-550', + 'YearParzPhotosHigh-Enrichment State-551', + 'YearParzPhotosHigh-Enrichment Version-552', + 'YearParzPhotosHigh-Highlight Version-553', + 'YMParzPhotosHigh-UUID-554', + 'YMParzPhotosHigh-zPK-555', + 'YMParzPhotosHigh-Parent PH Key-556', + 'YMParzPhotosHigh-zENT-557', + 'YMParzPhotosHigh-zOPT-558', + 'YMParzPhotosHigh-Promotion Score-559', + 'YMParzPhotosHigh-Title-560', + 'YMParzPhotosHigh-Subtitle-561', + 'YMParzPhotosHigh-Verbose Smart Description-562', + ('YMParzPhotosHigh-Start Date-563', 'datetime'), + ('YMParzPhotosHigh-End Date-564', 'datetime'), + 'YMParzPhotosHigh-Month First Asset-565', + 'YMParzPhotosHigh-Month Key Asset-566', + 'YMParzPhotosHigh-Is Curated-567', + 'YMParzPhotosHigh-Kind-568', + 'YMParzPhotosHigh-Category-569', + 'YMParzPhotosHigh-Visibility State-570', + 'YMParzPhotosHigh-Enrichment State-571', + 'YMParzPhotosHigh-Enrichment Version-572', + 'YMParzPhotosHigh-Highlight Version-573', + 'DGParzPhotosHigh-UUID-574', + 'DGParzPhotosHigh-zPK-575', + 'DGParzPhotosHigh-Parent PH Key-576', + 'DGParzPhotosHigh-zENT-577', + 'DGParzPhotosHigh-zOPT-578', + 'DGParzPhotosHigh-Promotion Score-579', + 'DGParzPhotosHigh-Title-580', + 'DGParzPhotosHigh-Subtitle-581', + 'DGParzPhotosHigh-Verbose Smart Description-582', + ('DGParzPhotosHigh-Start Date-583', 'datetime'), + ('DGParzPhotosHigh-End Date-584', 'datetime'), + 'DGParzPhotosHigh-Month First Asset-585', + 'DGParzPhotosHigh-Month Key Asset-586', + 'DGParzPhotosHigh-Is Curated-587', + 'DGParzPhotosHigh-Kind-588', + 'DGParzPhotosHigh-Category-589', + 'DGParzPhotosHigh-Visibility State-590', + 'DGParzPhotosHigh-Enrichment State-591', + 'DGParzPhotosHigh-Enrichment Version-592', + 'DGParzPhotosHigh-Highlight Version-593', + 'zAsset-Highlight Being Assets Key-594', + 'HBAzPhotosHigh-UUID-595', + 'HBAzPhotosHigh-zPK-596', + 'HBAzPhotosHigh-Parent PH Key-597', + 'HBAzPhotosHigh-zENT-598', + 'HBAzPhotosHigh-zOPT-599', + 'HBAzPhotosHigh-Promotion Score-600', + 'HBAzPhotosHigh-Title-601', + 'HBAzPhotosHigh-Subtitle-602', + 'HBAzPhotosHigh-Verbose Smart Description-603', + ('HBAzPhotosHigh-Start Date-604', 'datetime'), + 'HBAzPhotosHigh Start-Timezone Offset-605', + 'HBAzPhotosHigh-End Timezone Offset-606', + ('HBAzPhotosHigh-End Date-607', 'datetime'), + 'HBAzPhotosHigh-Asset Count-608', + 'HBAzPhotosHigh-Summary Count-609', + 'HBAzPhotosHigh-Extended Count-610', + 'HBAzPhotosHigh-Day Group Assets Count-611', + 'HBAzPhotosHigh-Day Group Ext Assets Count-612', + 'HBAzPhotosHigh-Day Group Summary Assets Count-613', + 'HBAzPhotosHigh-Key Asset-614', + 'HBAzPhotosHigh-Is Curated-615', + 'HBAzPhotosHigh-Type-616', + 'HBAzPhotosHigh-Kind-617', + 'HBAzPhotosHigh-Category-618', + 'HBAzPhotosHigh-Visibility State-619', + 'HBAzPhotosHigh-Mood-620', + 'HBAzPhotosHigh-Enrichment State-621', + 'HBAzPhotosHigh-Enrichment Version-622', + 'HBAzPhotosHigh-Highlight Version-623', + 'zAsset-Highlight Being Extended Assets Key-624', + 'HBEAzPhotosHigh-UUID-625', + 'HBEAzPhotosHigh-zPK-626', + 'HBEAzPhotosHigh-zENT-627', + 'HBEAzPhotosHigh-zOPT-628', + 'HBEAzPhotosHigh-Promotion Score-629', + 'HBEAzPhotosHigh-Title-630', + 'HBEAzPhotosHigh-Subtitle-631', + 'HBEAzPhotosHigh-Verbose Smart Description-632', + ('HBEAzPhotosHigh-Start Date-633', 'datetime'), + 'HBEAzPhotosHigh-Start Timezone Offset-634', + 'HBEAzPhotosHigh-End Timezone Offset-635', + ('HBEAzPhotosHigh-End Date-636', 'datetime'), + 'HBEAzPhotosHigh-Asset Count-637', + 'HBEAzPhotosHigh-Summary Count-638', + 'HBEAzPhotosHigh-Extended Count-639', + 'HBEAzPhotosHigh-Day Group Assets Count-640', + 'HBEAzPhotosHigh-Day Group Ext Assets Count-641', + 'HBEAzPhotosHigh-Day Group Summary Assets Count-642', + 'HBEAzPhotosHigh-Parent PH Key-643', + 'HBEAzPhotosHigh-Year Key Asset-644', + 'HBEAzPhotosHigh-Month First Asset-645', + 'HBEAzPhotosHigh-Month Key Asset-646', + 'HBEAzPhotosHigh-Key Asset-647', + 'HBEAzPhotosHigh-Parent Day Group PH Key-648', + 'HBEAzPhotosHigh-Day Group Key Asset-649', + 'HBEAzPhotosHigh-is Curated-650', + 'HBEAzPhotosHigh-Type-651', + 'HBEAzPhotosHigh-Kind-652', + 'HBEAzPhotosHigh-Category-653', + 'HBEAzPhotosHigh-Visibility State-654', + 'HBEAzPhotosHigh-Mood-655', + 'HBEAzPhotosHigh-Enrichment State-656', + 'HBEAzPhotosHigh-Enrichment Version-657', + 'HBEAzPhotosHigh-Highlight Version-658', + 'zAsset-Highlight Being Summary Assets Key-659', + 'HBSAzPhotosHigh-UUID-660', + 'HBSAzPhotosHigh-zPK-661', + 'HBSAzPhotosHigh-zENT-662', + 'HBSAzPhotosHigh-zOPT-663', + 'HBSAzPhotosHigh-Promotion Score-664', + 'HBSAzPhotosHigh-Title-665', + 'HBSAzPhotosHigh-Subtitle-666', + 'HBSAzPhotosHigh-Verbose Smart Description-667', + ('HBSAzPhotosHigh-Start Date-668', 'datetime'), + 'HBSAzPhotosHigh-Start Timezone Offset-669', + 'HBSAzPhotosHigh-End Timezone Offset-670', + ('HBSAzPhotosHigh-End Date-671', 'datetime'), + 'HBSAzPhotosHigh-Asset Count-672', + 'HBSAzPhotosHigh-Summary Count-673', + 'HBSAzPhotosHigh-Extended Count-674', + 'HBSAzPhotosHigh-Day Group Assets Count-675', + 'HBSAzPhotosHigh-Day Group Ext Assets Count-676', + 'HBSAzPhotosHigh-Day Group Summary Assets Count-677', + 'HBSAzPhotosHigh-Parent PH Key-678', + 'HBSAzPhotosHigh-Year Key Asset-679', + 'HBSAzPhotosHigh-Month First Asset-680', + 'HBSAzPhotosHigh-Month Key Asset-681', + 'HBSAzPhotosHigh-Key Asset-682', + 'HBSAzPhotosHigh-Parent Day Group PH Key-683', + 'HBSAzPhotosHigh-Day Group Key Asset-684', + 'HBSAzPhotosHigh-is Curated-685', + 'HBSAzPhotosHigh-Type-686', + 'HBSAzPhotosHigh-Kind-687', + 'HBSAzPhotosHigh-Category-688', + 'HBSAzPhotosHigh-Visibility State-689', + 'HBSAzPhotosHigh-Mood-690', + 'HBSAzPhotosHigh-Enrichment State-691', + 'HBSAzPhotosHigh-Enrichment Version-692', + 'HBSAzPhotosHigh-Highlight Version-693', + 'zAsset-Highlight Being Key Asset Key-694', + 'HBKAzPhotosHigh-UUID-695', + 'HBKAzPhotosHigh-zPK-696', + 'HBKAzPhotosHigh-zENT-697', + 'HBKAzPhotosHigh-zOPT-698', + 'HBKAzPhotosHigh-Promotion Score-699', + 'HBKAzPhotosHigh-Title-700', + 'HBKAzPhotosHigh-Subtitle-701', + 'HBKAzPhotosHigh-Verbose Smart Description-702', + ('HBKAzPhotosHigh-Start Date-703', 'datetime'), + 'HBKAzPhotosHigh-Start Timezone Offset-704', + 'HBKAzPhotosHigh-End Timezone Offset-705', + ('HBKAzPhotosHigh-End Date-706', 'datetime'), + 'HBKAzPhotosHigh-Asset Count-707', + 'HBKAzPhotosHigh-Summary Count-708', + 'HBKAzPhotosHigh-Extended Count-709', + 'HBKAzPhotosHigh-Day Group Assets Count-710', + 'HBKAzPhotosHigh-Day Group Ext Assets Count-711', + 'HBKAzPhotosHigh-Day Group Summary Assets Count-712', + 'HBKAzPhotosHigh-Parent PH Key-713', + 'HBKAzPhotosHigh-Year Key Asset-714', + 'HBKAzPhotosHigh-Month First Asset-715', + 'HBKAzPhotosHigh-Month Key Asset-716', + 'HBKAzPhotosHigh-Key Asset-717', + 'HBKAzPhotosHigh-Parent Day Group PH Key-718', + 'HBKAzPhotosHigh-Day Group Key Asset-719', + 'HBKAzPhotosHigh-is Curated-720', + 'HBKAzPhotosHigh-Type-721', + 'HBKAzPhotosHigh-Kind-722', + 'HBKAzPhotosHigh-Category-723', + 'HBKAzPhotosHigh-Visibility State-724', + 'HBKAzPhotosHigh-Mood-725', + 'HBKAzPhotosHigh-Enrichment State-726', + 'HBKAzPhotosHigh-Enrichment Version-727', + 'HBKAzPhotosHigh-Highlight Version-728', + 'zAsset-Day Group Highlight Being Assets Key-729', + 'DGHBAzPhotosHigh-UUID-730', + 'DGHBAzPhotosHigh-zPK-731', + 'DGHBAzPhotosHigh-zENT-732', + 'DGHBAzPhotosHigh-zOPT-733', + 'DGHBAzPhotosHigh-Promotion Score-734', + 'DGHBAzPhotosHigh-Title-735', + 'DGHBAzPhotosHigh-Subtitle-736', + 'DGHBAzPhotosHigh-Verbose Smart Description-737', + ('DGHBAzPhotosHigh-Start Date-738', 'datetime'), + 'DGHBAzPhotosHigh-Start Timezone Offset-739', + 'DGHBAzPhotosHigh-End Timezone Offset-740', + ('DGHBAzPhotosHigh-End Date-741', 'datetime'), + 'DGHBAzPhotosHigh-Asset Count-742', + 'DGHBAzPhotosHigh-Summary Count-743', + 'DGHBAzPhotosHigh-Extended Count-744', + 'DGHBAzPhotosHigh-Day Group Assets Count-745', + 'DGHBAzPhotosHigh-Day Group Ext Assets Count-746', + 'DGHBAzPhotosHigh-Day Group Summary Assets Count-747', + 'DGHBAzPhotosHigh-Parent PH Key-748', + 'DGHBAzPhotosHigh-Year Key Asset-749', + 'DGHBAzPhotosHigh-Month First Asset-750', + 'DGHBAzPhotosHigh-Month Key Asset-751', + 'DGHBAzPhotosHigh-Key Asset-752', + 'DGHBAzPhotosHigh-Parent Day Group PH Key-753', + 'DGHBAzPhotosHigh-Day Group Key Asset-754', + 'DGHBAzPhotosHigh-is Curated-755', + 'DGHBAzPhotosHigh-Type-756', + 'DGHBAzPhotosHigh-Kind-757', + 'DGHBAzPhotosHigh-Category-758', + 'DGHBAzPhotosHigh-Visibility State-759', + 'DGHBAzPhotosHigh-Mood-760', + 'DGHBAzPhotosHigh-Enrichment State-761', + 'DGHBAzPhotosHigh-Enrichment Version-762', + 'DGHBAzPhotosHigh-Highlight Version-763', + 'zAsset-Day Group Highlight Being Extended Assets Key-764', + 'DGHBEAzPhotosHigh-UUID-765', + 'DGHBEAzPhotosHigh-zPK-766', + 'DGHBEAzPhotosHigh-zENT-767', + 'DGHBEAzPhotosHigh-zOPT-768', + 'DGHBEAzPhotosHigh-Promotion Score-769', + 'DGHBEAzPhotosHigh-Title-770', + 'DGHBEAzPhotosHigh-Subtitle-771', + 'DGHBEAzPhotosHigh-Verbose Smart Description-772', + ('DGHBEAzPhotosHigh-Start Date-773', 'datetime'), + 'DGHBEAzPhotosHigh-Start Timezone Offset-774', + 'DGHBEAzPhotosHigh-End Timezone Offset-775', + ('DGHBEAzPhotosHigh-End Date-776', 'datetime'), + 'DGHBEAzPhotosHigh-Asset Count-777', + 'DGHBEAzPhotosHigh-Summary Count-778', + 'DGHBEAzPhotosHigh-Extended Count-779', + 'DGHBEAzPhotosHigh-Day Group Assets Count-780', + 'DGHBEAzPhotosHigh-Day Group Ext Assets Count-781', + 'DGHBEAzPhotosHigh-Day Group Summary Assets Count-782', + 'DGHBEAzPhotosHigh-Parent PH Key-783', + 'DGHBEAzPhotosHigh-Year Key Asset-784', + 'DGHBEAzPhotosHigh-Month First Asset-785', + 'DGHBEAzPhotosHigh-Month Key Asset-786', + 'DGHBEAzPhotosHigh-Key Asset-787', + 'DGHBEAzPhotosHigh-Parent Day Group PH Key-788', + 'DGHBEAzPhotosHigh-Day Group Key Asset-789', + 'DGHBEAzPhotosHigh-is Curated-790', + 'DGHBEAzPhotosHigh-Type-791', + 'DGHBEAzPhotosHigh-Kind-792', + 'DGHBEAzPhotosHigh-Category-793', + 'DGHBEAzPhotosHigh-Visibility State-794', + 'DGHBEAzPhotosHigh-Mood-795', + 'DGHBEAzPhotosHigh-Enrichment State-796', + 'DGHBEAzPhotosHigh-Enrichment Version-797', + 'DGHBEAzPhotosHigh-Highlight Version-798', + 'zAsset-Day Group Highlight Being Key Asset-799', + 'DGHBKAzPhotosHigh-UUID-800', + 'DGHBKAzPhotosHigh-zPK-801', + 'DGHBKAzPhotosHigh-zENT-802', + 'DGHBKAzPhotosHigh-zOPT-803', + 'DGHBKAzPhotosHigh-Promotion Score-804', + 'DGHBKAzPhotosHigh-Title-805', + 'DGHBKAzPhotosHigh-Subtitle-806', + 'DGHBKAzPhotosHigh-Verbose Smart Description-807', + ('DGHBKAzPhotosHigh-Start Date-808', 'datetime'), + 'DGHBKAzPhotosHigh-Start Timezone Offset-809', + 'DGHBKAzPhotosHigh-End Timezone Offset-810', + ('DGHBKAzPhotosHigh-End Date-811', 'datetime'), + 'DGHBKAzPhotosHigh-Asset Count-812', + 'DGHBKAzPhotosHigh-Summary Count-813', + 'DGHBKAzPhotosHigh-Extended Count-814', + 'DGHBKAzPhotosHigh-Day Group Assets Count-815', + 'DGHBKAzPhotosHigh-Day Group Ext Assets Count-816', + 'DGHBKAzPhotosHigh-Day Group Summary Assets Count-817', + 'DGHBKAzPhotosHigh-Parent PH Key-818', + 'DGHBKAzPhotosHigh-Year Key Asset-819', + 'DGHBKAzPhotosHigh-Month First Asset-820', + 'DGHBKAzPhotosHigh-Month Key Asset-821', + 'DGHBKAzPhotosHigh-Key Asset-822', + 'DGHBKAzPhotosHigh-Parent Day Group PH Key-823', + 'DGHBKAzPhotosHigh-Day Group Key Asset-824', + 'DGHBKAzPhotosHigh-is Curated-825', + 'DGHBKAzPhotosHigh-Type-826', + 'DGHBKAzPhotosHigh-Kind-827', + 'DGHBKAzPhotosHigh-Category-828', + 'DGHBKAzPhotosHigh-Visibility State-829', + 'DGHBKAzPhotosHigh-Mood-830', + 'DGHBKAzPhotosHigh-Enrichment State-831', + 'DGHBKAzPhotosHigh-Enrichment Version-832', + 'DGHBKAzPhotosHigh-Highlight Version-833', + 'zAsset-Day Group Highlight Being Summary Assets Key-834', + 'DGHBSAzPhotosHigh-UUID-835', + 'DGHBSAzPhotosHigh-zPK-836', + 'DGHBSAzPhotosHigh-zENT-837', + 'DGHBSAzPhotosHigh-zOPT-838', + 'DGHBSAzPhotosHigh-Promotion Score-839', + 'DGHBSAzPhotosHigh-Title-840', + 'DGHBSAzPhotosHigh-Subtitle-841', + 'DGHBSAzPhotosHigh-Verbose Smart Description-842', + ('DGHBSAzPhotosHigh-Start Date-843', 'datetime'), + 'DGHBSAzPhotosHigh-Start Timezone Offset-844', + 'DGHBSAzPhotosHigh-End Timezone Offset-845', + ('DGHBSAzPhotosHigh-End Date-846', 'datetime'), + 'DGHBSAzPhotosHigh-Asset Count-847', + 'DGHBSAzPhotosHigh-Summary Count-848', + 'DGHBSAzPhotosHigh-Extended Count-849', + 'DGHBSAzPhotosHigh-Day Group Assets Count-850', + 'DGHBSAzPhotosHigh-Day Group Ext Assets Count-851', + 'DGHBSAzPhotosHigh-Day Group Summary Assets Count-852', + 'DGHBSAzPhotosHigh-Parent PH Key-853', + 'DGHBSAzPhotosHigh-Year Key Asset-854', + 'DGHBSAzPhotosHigh-Month First Asset-855', + 'DGHBSAzPhotosHigh-Month Key Asset-856', + 'DGHBSAzPhotosHigh-Key Asset-857', + 'DGHBSAzPhotosHigh-Parent Day Group PH Key-858', + 'DGHBSAzPhotosHigh-Day Group Key Asset-859', + 'DGHBSAzPhotosHigh-is Curated-860', + 'DGHBSAzPhotosHigh-Type-861', + 'DGHBSAzPhotosHigh-Kind-862', + 'DGHBSAzPhotosHigh-Category-863', + 'DGHBSAzPhotosHigh-Visibility State-864', + 'DGHBSAzPhotosHigh-Mood-865', + 'DGHBSAzPhotosHigh-Enrichment State-866', + 'DGHBSAzPhotosHigh-Enrichment Version-867', + 'DGHBSAzPhotosHigh-Highlight Version-868', + 'zAsset-Month Highlight Being First Asset Key-869', + 'MHBFAzPhotosHigh-UUID-870', + 'MHBFAzPhotosHigh-zPK-871', + 'MHBFAzPhotosHigh-zENT-872', + 'MHBFAzPhotosHigh-zOPT-873', + 'MHBFAzPhotosHigh-Promotion Score-874', + 'MHBFAzPhotosHigh-Title-875', + 'MHBFAzPhotosHigh-Subtitle-876', + 'MHBFAzPhotosHigh-Verbose Smart Description-877', + ('MHBFAzPhotosHigh-Start Date-878', 'datetime'), + 'MHBFAzPhotosHigh-Start Timezone Offset-879', + 'MHBFAzPhotosHigh-End Timezone Offset-880', + ('MHBFAzPhotosHigh-End Date-881', 'datetime'), + 'MHBFAzPhotosHigh-Asset Count-882', + 'MHBFAzPhotosHigh-Summary Count-883', + 'MHBFAzPhotosHigh-Extended Count-884', + 'MHBFAzPhotosHigh-Day Group Assets Count-885', + 'MHBFAzPhotosHigh-Day Group Ext Assets Count-886', + 'MHBFAzPhotosHigh-Day Group Summary Assets Count-887', + 'MHBFAzPhotosHigh-Parent PH Key-888', + 'MHBFAzPhotosHigh-Year Key Asset-889', + 'MHBFAzPhotosHigh-Month First Asset-890', + 'MHBFAzPhotosHigh-Month Key Asset-891', + 'MHBFAzPhotosHigh-Key Asset-892', + 'MHBFAzPhotosHigh-Parent Day Group PH Key-893', + 'MHBFAzPhotosHigh-Day Group Key Asset-894', + 'MHBFAzPhotosHigh-is Curated-895', + 'MHBFAzPhotosHigh-Type-896', + 'MHBFAzPhotosHigh-Kind-897', + 'MHBFAzPhotosHigh-Category-898', + 'MHBFAzPhotosHigh-Visibility State-899', + 'MHBFAzPhotosHigh-Mood-900', + 'MHBFAzPhotosHigh-Enrichment State-901', + 'MHBFAzPhotosHigh-Enrichment Version-902', + 'MHBFAzPhotosHigh-Highlight Version-903', + 'zAsset-Month Highlight Being Key Asset-904', + 'MHBKAzPhotosHigh-UUID-905', + 'MHBKAzPhotosHigh-zPK-906', + 'MHBKAzPhotosHigh-zENT-907', + 'MHBKAzPhotosHigh-zOPT-908', + 'MHBKAzPhotosHigh-Promotion Score-909', + 'MHBKAzPhotosHigh-Title-910', + 'MHBKAzPhotosHigh-Subtitle-911', + 'MHBKAzPhotosHigh-Verbose Smart Description-912', + ('MHBKAzPhotosHigh-Start Date-913', 'datetime'), + 'MHBKAzPhotosHigh-Start Timezone Offset-914', + 'MHBKAzPhotosHigh-End Timezone Offset-915', + ('MHBKAzPhotosHigh-End Date-916', 'datetime'), + 'MHBKAzPhotosHigh-Asset Count-917', + 'MHBKAzPhotosHigh-Summary Count-918', + 'MHBKAzPhotosHigh-Extended Count-919', + 'MHBKAzPhotosHigh-Day Group Assets Count-920', + 'MHBKAzPhotosHigh-Day Group Ext Assets Count-921', + 'MHBKAzPhotosHigh-Day Group Summary Assets Count-922', + 'MHBKAzPhotosHigh-Parent PH Key-923', + 'MHBKAzPhotosHigh-Year Key Asset-924', + 'MHBKAzPhotosHigh-Month First Asset-925', + 'MHBKAzPhotosHigh-Month Key Asset-926', + 'MHBKAzPhotosHigh-Key Asset-927', + 'MHBKAzPhotosHigh-Parent Day Group PH Key-928', + 'MHBKAzPhotosHigh-Day Group Key Asset-929', + 'MHBKAzPhotosHigh-is Curated-930', + 'MHBKAzPhotosHigh-Type-931', + 'MHBKAzPhotosHigh-Kind-932', + 'MHBKAzPhotosHigh-Category-933', + 'MHBKAzPhotosHigh-Visibility State-934', + 'MHBKAzPhotosHigh-Mood-935', + 'MHBKAzPhotosHigh-Enrichment State-936', + 'MHBKAzPhotosHigh-Enrichment Version-937', + 'MHBKAzPhotosHigh-Highlight Version-938', + 'zAsset-Year Highlight Being Key Asset-939', + 'YHBKAzPhotosHigh-UUID-940', + 'YHBKAzPhotosHigh-zPK-941', + 'YHBKAzPhotosHigh-zENT-942', + 'YHBKAzPhotosHigh-zOPT-943', + 'YHBKAzPhotosHigh-Promotion Score-944', + 'YHBKAzPhotosHigh-Title-945', + 'YHBKAzPhotosHigh-Subtitle-946', + 'YHBKAzPhotosHigh-Verbose Smart Description-947', + ('YHBKAzPhotosHigh-Start Date-948', 'datetime'), + 'YHBKAzPhotosHigh-Start Timezone Offset-949', + 'YHBKAzPhotosHigh-End Timezone Offset-950', + ('YHBKAzPhotosHigh-End Date-951', 'datetime'), + 'YHBKAzPhotosHigh-Asset Count-952', + 'YHBKAzPhotosHigh-Summary Count-953', + 'YHBKAzPhotosHigh-Extended Count-954', + 'YHBKAzPhotosHigh-Day Group Assets Count-955', + 'YHBKAzPhotosHigh-Day Group Ext Assets Count-956', + 'YHBKAzPhotosHigh-Day Group Summary Assets Count-957', + 'YHBKAzPhotosHigh-Parent PH Key-958', + 'YHBKAzPhotosHigh-Year Key Asset-959', + 'YHBKAzPhotosHigh-Month First Asset-960', + 'YHBKAzPhotosHigh-Month Key Asset-961', + 'YHBKAzPhotosHigh-Key Asset-962', + 'YHBKAzPhotosHigh-Parent Day Group PH Key-963', + 'YHBKAzPhotosHigh-Day Group Key Asset-964', + 'YHBKAzPhotosHigh-is Curated-965', + 'YHBKAzPhotosHigh-Type-966', + 'YHBKAzPhotosHigh-Kind-967', + 'YHBKAzPhotosHigh-Category-968', + 'YHBKAzPhotosHigh-Visibility State-969', + 'YHBKAzPhotosHigh-Mood-970', + 'YHBKAzPhotosHigh-Enrichment State-971', + 'YHBKAzPhotosHigh-Enrichment Version-972', + 'YHBKAzPhotosHigh-Highlight Version-973', + 'z3SuggBKA-3KeyAssets = zAsset-zPK-974', + 'z3SuggBKA-55SuggBeingKeyAssets = zSugg-zPK-975', + 'SBKAzSugg-zPK-976', + 'SBKAzSugg-UUID-977', + ('SBKAzSugg-Start Date-978', 'datetime'), + 'SBKAzSugg-State-979', + 'SBKAzSugg-Featured State-980', + 'SBKAzSugg-Notification State-981', + ('SBKAzSugg-Creation Date-982', 'datetime'), + ('SBKAzSugg-End Date-983', 'datetime'), + ('SBKAzSugg-Activation Date-984', 'datetime'), + ('SBKAzSugg-Expunge Date-985', 'datetime'), + ('SBKAzSugg-Relevant Until Date-986', 'datetime'), + 'SBKAzSugg-Title-987', + 'SBKAzSugg-Sub Title-988', + 'SBKAzSugg-Cached Count-989', + 'SBKAzSugg-Cahed Photos Count-990', + 'SBKAzSugg-Cached Videos Count-991', + 'SBKAzSugg-Type-992', + 'SBKAzSugg-Sub Type-993', + 'SBKAzSugg-Version-994', + 'SBKAzSugg-Cloud Local State-995', + 'SBKAzSugg-Cloud Delete State-996', + 'z3SuggBRA-3RepAssets1-997', + 'z3SuggBRA-55SuggBeingRepAssets-998', + 'SBRAzSugg-zPK-999', + 'SBRAzSugg-UUID-1000', + ('SBRAzSugg-Start Date-1001', 'datetime'), + 'SBRAzSugg-State-1002', + 'SBRAzSugg-Featured State-1003', + 'SBRAzSugg-Notification State-1004', + ('SBRAzSugg-Creation Date-1005', 'datetime'), + ('SBRAzSugg-End Date-1006', 'datetime'), + ('SBRAzSugg-Activation Date-1007', 'datetime'), + ('SBRAzSugg-Expunge Date-1008', 'datetime'), + ('SBRAzSugg-Relevant Until Date-1009', 'datetime'), + 'SBRAzSugg-Title-1010', + 'SBRAzSugg-Sub Title-1011', + 'SBRAzSugg-Cached Count-1012', + 'SBRAzSugg-Cahed Photos Count-1013', + 'SBRAzSugg-Cached Videos Count-1014', + 'SBRAzSugg-Type-1015', + 'SBRAzSugg-Sub Type-1016', + 'SBRAzSugg-Version-1017', + 'SBRAzSugg-Cloud Local State-1018', + 'SBRAzSugg-Cloud Delete State-1019', + 'zAsset-Highlight Visibility Score-1020', + 'zMedAnlyAstAttr-Media Analysis Version-1021', + 'zMedAnlyAstAttr-Audio Classification-1022', + 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-1023', + 'zMedAnlyAstAttr-Best Video Range Start Time Scale-1024', + 'zMedAnlyAstAttr-Best Video Range Duration Value-1025', + 'zMedAnlyAstAttr-Best Video Range Start Value-1026', + 'zMedAnlyAstAttr-Packed Best Playback Rect-1027', + 'zMedAnlyAstAttr-Activity Score-1028', + 'zMedAnlyAstAttr-Video Score-1029', + 'zMedAnlyAstAttr-AutoPlay Suggestion Score-1030', + 'zMedAnlyAstAttr-Blurriness Score-1031', + 'zMedAnlyAstAttr-Exposure Score-1032', + 'zAssetAnalyState-Asset UUID-4TableStart-1033', + 'zAssetAnalyState-Analyisis State-1034', + 'zAssetAnalyState-Worker Flags-1035', + 'zAssetAnalyState-Worker Type-1036', + ('zAssetAnalyState-Ignore Until Date-1037', 'datetime'), + ('zAssetAnalyState-Last Ignored Date-1038', 'datetime'), + ('zAssetAnalyState-Sort Token-1039', 'datetime'), + 'zAsset-Overall Aesthetic Score-1040', + 'zCompAssetAttr-Behavioral Score-1041', + 'zCompAssetAttr-Failure Score zCompAssetAttr-1042', + 'zCompAssetAttr-Harmonious Color Score-1043', + 'zCompAssetAttr-Immersiveness Score-1044', + 'zCompAssetAttr-Interaction Score-1045', + 'zCompAssetAttr-Intersting Subject Score-1046', + 'zCompAssetAttr-Intrusive Object Presence Score-1047', + 'zCompAssetAttr-Lively Color Score-1048', + 'zCompAssetAttr-Low Light-1049', + 'zCompAssetAttr-Noise Score-1050', + 'zCompAssetAttr-Pleasant Camera Tilt Score-1051', + 'zCompAssetAttr-Pleasant Composition Score-1052', + 'zCompAssetAttr-Pleasant Lighting Score-1053', + 'zCompAssetAttr-Pleasant Pattern Score-1054', + 'zCompAssetAttr-Pleasant Perspective Score-1055', + 'zCompAssetAttr-Pleasant Post Processing Score-1056', + 'zCompAssetAttr-Pleasant Reflection Score-1057', + 'zCompAssetAttrPleasant Symmetry Score-1058', + 'zCompAssetAttr-Sharply Focused Subject Score-1059', + 'zCompAssetAttr-Tastfully Blurred Score-1060', + 'zCompAssetAttr-Well Chosen Subject Score-1061', + 'zCompAssetAttr-Well Framed Subject Score-1062', + 'zCompAssetAttr-Well Timeed Shot Score-1063', + 'zCldRes-Asset UUID-4TableStart-1064', + 'zCldRes-Cloud Local State-1065', + 'zCldRes-File Size-1066', + 'zCldRes-Height-1067', + 'zCldRes-Is Available-1068', + 'zCldRes-Is Locally Available-1069', + 'zCldRes-Prefetch Count-1070', + 'zCldRes-Source Type-1071', + 'zCldRes-Type-1072', + 'zCldRes-Width-1073', + ('zCldRes-Date Created-1074', 'datetime'), + ('zCldRes-Last OnDemand Download Date-1075', 'datetime'), + ('zCldRes-Last Prefetch Date-1076', 'datetime'), + 'zCldRes-Prunedat-1077', + 'zCldRes-File Path-1078', + 'zCldRes-Fingerprint-1079', + 'zCldRes-Item ID-1080', + 'zCldRes-UniID-1081', + 'zAddAssetAttr-zPK-1082', + 'zAddAssetAttr-zENT-1083', + 'ZAddAssetAttr-zOPT-1084', + 'zAddAssetAttr-zAsset= zAsset_zPK-1085', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-1086', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-1087', + 'zAddAssetAttr-Master Fingerprint-1088', + 'zAddAssetAttr-Public Global UUID-1089', + 'zAddAssetAttr-Deferred Photo Identifier-1090', + 'zAddAssetAttr-Original Assets UUID-1091', + 'zAddAssetAttr-Import Session ID-1092', + 'zAddAssetAttr-Originating Asset Identifier-1093', + 'zAddAssetAttr.Adjusted Fingerprint-1094', + 'zAlbumList-zPK= Album List Key-1095', + 'zAlbumList-zENT-1096', + 'zAlbumList-zOPT-1097', + 'zAlbumList-ID Key-1098', + 'zAlbumList-UUID-1099', + 'zAsset-zPK-1100', + 'zAsset-zENT-1101', + 'zAsset-zOPT-1102', + 'zAsset-Master= zCldMast-zPK-1103', + 'zAsset-Extended Attributes= zExtAttr-zPK-1104', + 'zAsset-Import Session Key-1105', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-1106', + 'zAsset-FOK-Cloud Feed Asset Entry Key-1107', + 'zAsset-Moment Share Key= zShare-zPK-1108', + 'zAsset-zMoment Key= zMoment-zPK-1109', + 'zAsset-Computed Attributes Asset Key-1110', + 'zAsset-Highlight Being Assets-HBA Key-1111', + 'zAsset-Highlight Being Extended Assets-HBEA Key-1112', + 'zAsset-Highligh Being Summary Assets-HBSA Key-1113', + 'zAsset-Day Group Highlight Being Assets-DGHBA Key-1114', + 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-1115', + 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-1116', + 'zAsset-Promotion Score-1117', + 'zAsset-Media Analysis Attributes Key-1118', + 'zAsset-Media Group UUID-1119', + 'zAsset-UUID = store.cloudphotodb-1120', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-1121', + 'zAsset.Cloud Collection GUID-1122', + 'zAsset-Avalanche UUID-1123', + 'zAssetAnalyState-zPK-1124', + 'zAssetAnalyState-zEnt-1125', + 'zAssetAnalyState-zOpt-1126', + 'zAssetAnalyState-Asset= zAsset-zPK-1127', + 'zAssetAnalyState-Asset UUID-1128', + 'zAssetDes-zPK-1129', + 'zAssetDes-zENT-1130', + 'zAssetDes-zOPT-1131', + 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-1132', + 'zCldFeedEnt-zPK= zCldShared keys-1133', + 'zCldFeedEnt-zENT-1134', + 'zCldFeedEnt-zOPT-1135', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-1136', + 'zCldFeedEnt-Entry Invitation Record GUID-1137', + 'zCldFeedEnt-Entry Cloud Asset GUID-1138', + 'zCldMast-zPK= zAsset-Master-1139', + 'zCldMast-zENT-1140', + 'zCldMast-zOPT-1141', + 'zCldMast-Moment Share Key= zShare-zPK-1142', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-1143', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-1144', + 'zCldMast-Originating Asset ID-1145', + 'zCldMast-Import Session ID- AirDrop-StillTesting-1146', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-1147', + 'CMzCldMastMedData-zENT-1148', + 'CMzCldMastMedData-zOPT-1149', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-1150', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-1151', + 'AAAzCldMastMedData-zENT-1152', + 'AAAzCldMastMedData-zOPT-1153', + 'AAAzCldMastMedData-CldMast key-1154', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-1155', + 'zCldRes-zPK-1156', + 'zCldRes-zENT-1157', + 'zCldRes-zOPT-1158', + 'zCldRes-Asset= zAsset-zPK-1159', + 'zCldRes-Cloud Master= zCldMast-zPK-1160', + 'zCldRes-Asset UUID-1161', + 'zCldShareAlbumInvRec-zPK-1162', + 'zCldShareAlbumInvRec-zEnt-1163', + 'zCldShareAlbumInvRec-zOpt-1164', + 'zCldShareAlbumInvRec-Album Key-1165', + 'zCldShareAlbumInvRec-FOK Album Key-1166', + 'zCldShareAlbumInvRec-Album GUID-1167', + 'zCldShareAlbumInvRec-Cloud GUID-1168', + 'zCldSharedComment-zPK-1169', + 'zCldSharedComment-zENT-1170', + 'zCldSharedComment-zOPT-1171', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1172', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1173', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1174', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1175', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-1176', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1177', + 'zCldSharedComment-Cloud GUID-1178', + 'zCompAssetAttr-zPK-1179', + 'zCompAssetAttr-zEnt-1180', + 'zCompAssetAttr-zOpt-1181', + 'zCompAssetAttr-Asset Key-1182', + 'zDetFace-zPK-1183', + 'zDetFace-zEnt-1184', + 'zDetFace.zOpt-1185', + 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-1186', + 'zDetFace-Person= zPerson-zPK-1187', + 'zDetFace-Person Being Key Face-1188', + 'zDetFace-Face Print-1189', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1190', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1191', + 'zDetFace-UUID-1192', + 'zDetFaceGroup-zPK-1193', + 'zDetFaceGroup-zENT-1194', + 'zDetFaceGroup-zOPT-1195', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-1196', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-1197', + 'zDetFaceGroup-UUID-1198', + 'zDetFacePrint-zPK-1199', + 'zDetFacePrint-zEnt-1200', + 'zDetFacePrint-zOpt-1201', + 'zDetFacePrint-Face Key-1202', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-1203', + 'zExtAttr-zENT-1204', + 'zExtAttr-zOPT-1205', + 'zExtAttr-Asset Key-1206', + 'zFaceCrop-zPK-1207', + 'zFaceCrop-zEnt-1208', + 'zFaceCrop-zOpt-1209', + 'zFaceCrop-Asset Key-1210', + 'zFaceCrop-Invalid Merge Canidate Person UUID-1211', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1212', + 'zFaceCrop-Face Key-1213', + 'zFaceCrop-UUID-1214', + 'zGenAlbum-zPK=26AlbumLists= 26Albums-1215', + 'zGenAlbum-zENT-1216', + 'zGenAlbum-zOpt-1217', + 'zGenAlbum-Key Asset-Key zAsset-zPK-1218', + 'zGenAlbum-Secondary Key Asset-1219', + 'zGenAlbum-Tertiary Key Asset-1220', + 'zGenAlbum-Custom Key Asset-1221', + 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1222', + 'zGenAlbum-FOK Parent Folder-1223', + 'zGenAlbum-UUID-1224', + 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1225', + 'zGenAlbum-Project Render UUID-1226', + 'zIntResou-zPK-1227', + 'zIntResou-zENT-1228', + 'zIntResou-zOPT-1229', + 'zIntResou-Asset= zAsset_zPK-1230', + 'zIntResou-Fingerprint-1231', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-1232', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1233', + 'zMedAnlyAstAttr-zEnt-1234', + 'zMedAnlyAstAttr-zOpt-1235', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-1236', + 'zPerson-zPK=zDetFace-Person-1237', + 'zPerson-zEnt-1238', + 'zPerson-zOpt-1239', + 'zPerson-KeyFace=zDetFace-zPK-1240', + 'zPerson-Assoc Face Group Key-1241', + 'zPerson-Person UUID-1242', + 'zSceneP-zPK-1243', + 'zSceneP-zENT-1244', + 'zSceneP-zOPT-1245', + 'zShare-zPK-1246', + 'zShare-zENT-1247', + 'zShare-zOPT-1248', + 'zShare-UUID-1249', + 'SPLzShare-UUID-1250', + 'zShare-Scope ID = store.cloudphotodb-1251', + 'zSharePartic-zPK-1252', + 'zSharePartic-zENT-1253', + 'zSharePartic-zOPT-1254', + 'zSharePartic-Share Key= zShare-zPK-1255', + 'zSharePartic-UUID-1256', + 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1257', + 'zUnmAdj-zOPT-1258', + 'zUnmAdj-zENT-1259', + 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1260', + 'zUnmAdj-UUID-1261', + 'zUnmAdj-Other Adjustments Fingerprint-1262', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1263', + 'z25AlbumList-25Albums= zGenAlbum-zPK-1264', + 'z25AlbumList-Album List Key-1265', + 'z25AlbumList-FOK25Albums Key-1266', + 'z26Assets-26Albums= zGenAlbum-zPK-1267', + 'z26Assets-3Asset Key= zAsset-zPK in the Album-1268', + 'z26Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1269') + data_list = get_sqlite_db_records(source_path, query) + return data_headers, data_list, source_path -def get_ph94ios14refforassetanalysissyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph94_2iOS14RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if (version.parse(iosversion) <= version.parse("13.7")) or (version.parse(iosversion) >= version.parse("15")): - logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite reference for asset analysis from iOS " + iosversion) + logfunc("Unsupported version for Syndication.photoslibrary for iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("15")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -7342,7 +7345,7 @@ def get_ph94ios14refforassetanalysissyndpl(files_found, report_folder, seeker, w zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type', DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date', DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date', - zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token', + DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token', zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', zCompAssetAttr.ZBEHAVIORALSCORE AS 'zCompAssetAttr-Behavioral Score', zCompAssetAttr.ZFAILURESCORE AS 'zCompAssetAttr-Failure Score zCompAssetAttr', @@ -7632,1505 +7635,1444 @@ def get_ph94ios14refforassetanalysissyndpl(files_found, report_folder, seeker, w LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS1 = zAsset.Z_PK LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_55SUGGESTIONSBEINGREPRESENTATIVEASSETS ORDER BY zAsset.ZADDEDDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], - row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], - row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], - row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], - row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], - row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], - row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], - row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], - row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], - row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], - row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], - row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], - row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], - row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], - row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], - row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], - row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], - row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], - row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], - row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], - row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], - row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], - row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], - row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], - row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], - row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], - row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], - row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], - row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], - row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], - row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], - row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], - row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], - row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], - row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], - row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], - row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], - row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], - row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], - row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], - row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], - row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], - row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], - row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], - row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], - row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], - row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], - row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], - row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], - row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], - row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], - row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], - row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], - row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], - row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], - row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], - row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], - row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], - row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], - row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], - row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], - row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], - row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], - row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], - row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], - row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], - row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], - row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], - row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], - row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], - row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], - row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], - row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], - row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], - row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], - row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], - row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], - row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], - row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], - row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], - row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], - row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], - row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], - row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], - row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], - row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], - row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], - row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], - row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], - row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], - row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], - row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], - row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], - row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], - row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], - row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], - row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], - row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], - row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], - row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], - row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], - row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], - row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], - row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], - row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093], - row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100], - row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107], - row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114], - row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121], - row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128], - row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135], - row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142], - row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149], - row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156], - row[1157], row[1158], row[1159], row[1160], row[1161], row[1162], row[1163], - row[1164], row[1165], row[1166], row[1167], row[1168], row[1169], row[1170], - row[1171], row[1172], row[1173], row[1174], row[1175], row[1176], row[1177], - row[1178], row[1179], row[1180], row[1181], row[1182], row[1183], row[1184], - row[1185], row[1186], row[1187], row[1188], row[1189], row[1190], row[1191], - row[1192], row[1193], row[1194], row[1195], row[1196], row[1197], row[1198], - row[1199], row[1200], row[1201], row[1202], row[1203], row[1204], row[1205], - row[1206], row[1207], row[1208], row[1209], row[1210], row[1211], row[1212], - row[1213], row[1214], row[1215], row[1216], row[1217], row[1218], row[1219], - row[1220], row[1221], row[1222], row[1223], row[1224], row[1225], row[1226], - row[1227], row[1228], row[1229], row[1230], row[1231], row[1232], row[1233], - row[1234], row[1235], row[1236], row[1237], row[1238], row[1239], row[1240], - row[1241], row[1242], row[1243], row[1244], row[1245], row[1246], row[1247], - row[1248], row[1249], row[1250], row[1251], row[1252], row[1253], row[1254], - row[1255], row[1256], row[1257], row[1258], row[1259], row[1260], row[1261], - row[1262], row[1263], row[1264], row[1265], row[1266], row[1267], row[1268], - row[1269])) - - counter += 1 - - description = 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' \ - ' This parser includes the largest set of decoded data based on testing and research' \ - ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' \ - ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' \ - ' TimelineExplorer to view, search and filter the results.' - report = ArtifactHtmlReport('Ph94.2-iOS14_Ref_for_Asset_Analysis-SyndPL') - report.start_artifact_report(report_folder, 'Ph94.2-iOS14_Ref_for_Asset_Analysis-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Added Date-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset Complete-2', - 'zAsset-zPK-4QueryStart-3', - 'zAddAssetAttr-zPK-4QueryStart-4', - 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', - 'zAddAssetAttr-Master Fingerprint-4TableStart-6', - 'zIntResou-Fingerprint-4TableStart-7', - 'zAsset-Cloud is My Asset-8', - 'zAsset-Cloud is deletable-Asset-9', - 'zAsset-Cloud_Local_State-10', - 'zAsset-Visibility State-11', - 'zExtAttr-Camera Make-12', - 'zExtAttr-Camera Model-13', - 'zExtAttr-Lens Model-14', - 'zExtAttr-Flash Fired-15', - 'zExtAttr-Focal Lenght-16', - 'zAsset-Derived Camera Capture Device-17', - 'zAddAssetAttr-Camera Captured Device-18', - 'zAddAssetAttr-Imported by-19', - 'zCldMast-Imported By-20', - 'zAddAssetAttr-Creator Bundle ID-21', - 'zAddAssetAttr-Imported By Display Name-22', - 'zCldMast-Imported by Bundle ID-23', - 'zCldMast-Imported by Display Name-24', - 'zAsset-Saved Asset Type-25', - 'zAsset-Directory-Path-26', - 'zAsset-Filename-27', - 'zAddAssetAttr- Original Filename-28', - 'zCldMast- Original Filename-29', - 'zAsset-Date Created-30', - 'zCldMast-Creation Date-31', - 'zIntResou-CldMst Date Created-32', - 'zAddAssetAttr-Time Zone Name-33', - 'zAddAssetAttr-Time Zone Offset-34', - 'zAddAssetAttr-Inferred Time Zone Offset-35', - 'zAddAssetAttr-EXIF-String-36', - 'zAsset-Modification Date-37', - 'zAsset-Last Shared Date-38', - 'zCldMast-Cloud Local State-39', - 'zCldMast-Import Date-40', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-41', - 'zAddAssetAttr-Import Session ID-4QueryStart-42', - 'zAddAssetAttr-Alt Import Image Date-43', - 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-44', - 'zAsset-Cloud Batch Publish Date-45', - 'zAsset-Cloud Server Publish Date-46', - 'zAsset-Cloud Download Requests-47', - 'zAsset-Cloud Batch ID-48', - 'zAddAssetAttr-Upload Attempts-49', - 'zAsset-Latitude-50', - 'zExtAttr-Latitude-51', - 'zAsset-Longitude-52', - 'zExtAttr-Longitude-53', - 'zAddAssetAttr-GPS Horizontal Accuracy-54', - 'zAddAssetAttr-Location Hash-55', - 'zAddAssetAttr-Shifted Location Valid-56', - 'zAddAssetAttr-Shifted Location Data-57', - 'zAddAssetAttr-Reverse Location Is Valid-58', - 'zAddAssetAttr-Reverse Location Data-59', - 'ParentzGenAlbum-UUID-4QueryStart-60', - 'zGenAlbum-UUID-4QueryStart-61', - 'ParentzGenAlbum-Cloud GUID-4QueryStart-62', - 'zGenAlbum-Cloud GUID-4QueryStart-63', - 'zCldShareAlbumInvRec-Album GUID-4QueryStart-64', - 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-65', - 'zGenAlbum-Project Render UUID-4QueryStart-66', - 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-67', - 'zGenAlbum-Cloud_Local_State-4QueryStart-68', - 'ParentzGenAlbum- Creation Date- 4QueryStart-69', - 'zGenAlbum- Creation Date- 4QueryStart-70', - 'zGenAlbum- Cloud Creation Date- 4QueryStart-71', - 'zGenAlbum- Start Date- 4QueryStart-72', - 'zGenAlbum- End Date- 4QueryStart-73', - 'zGenAlbum-Cloud Subscription Date- 4QueryStart-74', - 'ParentzGenAlbum- Title- 4QueryStart-75', - 'zGenAlbum- Title-User&System Applied- 4QueryStart-76', - 'zGenAlbum-Import Session ID-SWY- 4QueryStart-77', - 'zGenAlbum-Creator Bundle ID- 4QueryStart-78', - 'zGenAlbum-zENT- Entity- 4QueryStart-79', - 'ParentzGenAlbum- Kind- 4QueryStart-80', - 'zGenAlbum-Album Kind- 4QueryStart-81', - 'AAAzCldMastMedData-zOPT-82', - 'zAddAssetAttr-Media Metadata Type-83', - 'AAAzCldMastMedData-Data-84', - 'CldMasterzCldMastMedData-zOPT-85', - 'zCldMast-Media Metadata Type-86', - 'CMzCldMastMedData-Data-87', - 'zAsset-Orientation-88', - 'zAddAssetAttr-Original Orientation-89', - 'zAsset-Kind-90', - 'zAsset-Kind-Sub-Type-91', - 'zAddAssetAttr-Cloud Kind Sub Type-92', - 'zAsset-Playback Style-93', - 'zAsset-Playback Variation-94', - 'zAsset-Video Duration-95', - 'zExtAttr-Duration-96', - 'zAsset-Video CP Duration-97', - 'zAddAssetAttr-Video CP Duration Time Scale-98', - 'zAsset-Video CP Visibility State-99', - 'zAddAssetAttr-Video CP Display Value-100', - 'zAddAssetAttr-Video CP Display Time Scale-101', - 'zIntResou-Datastore Class ID-102', - 'zAsset-Cloud Placeholder Kind-103', - 'zIntResou-Local Availability-104', - 'zIntResou-Local Availability Target-105', - 'zIntResou-Cloud Local State-106', - 'zIntResou-Remote Availability-107', - 'zIntResou-Remote Availability Target-108', - 'zIntResou-Transient Cloud Master-109', - 'zIntResou-Side Car Index-110', - 'zIntResou- File ID-111', - 'zIntResou-Version-112', - 'zAddAssetAttr- Original-File-Size-113', - 'zIntResou-Resource Type-114', - 'zIntResou-Datastore Sub-Type-115', - 'zIntResou-Cloud Source Type-116', - 'zIntResou-Data Length-117', - 'zIntResou-Recipe ID-118', - 'zIntResou-Cloud Last Prefetch Date-119', - 'zIntResou-Cloud Prefetch Count-120', - 'zIntResou- Cloud-Last-OnDemand Download-Date-121', - 'zAsset-Uniform Type ID-122', - 'zAsset-Original Color Space-123', - 'zCldMast-Uniform_Type_ID-124', - 'zCldMast-Full Size JPEG Source-125', - 'zAsset-HDR Gain-126', - 'zExtAttr-Codec-127', - 'zCldMast-Codec Name-128', - 'zCldMast-Video Frame Rate-129', - 'zCldMast-Placeholder State-130', - 'zAsset-Depth_Type-131', - 'zAsset-Avalanche UUID-4TableStart-132', - 'zAsset-Avalanche_Pick_Type-BurstAsset-133', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134', - 'zAddAssetAttr-Cloud Recovery State-135', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-136', - 'zAsset-Deferred Processing Needed-137', - 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-138', - 'zAddAssetAttr-Deferred Processing Candidate Options-139', - 'zAsset-Has Adjustments-Camera-Effects-Filters-140', - 'zUnmAdj-UUID-4TableStart-141', - 'zAsset-Adjustment Timestamp-142', - 'zUnmAdj-Adjustment Timestamp-143', - 'zAddAssetAttr-Editor Bundle ID-144', - 'zUnmAdj-Editor Localized Name-145', - 'zUnmAdj-Adjustment Format ID-146', - 'zAddAssetAttr-Montage-147', - 'zUnmAdj-Adjustment Render Types-148', - 'zUnmAdj-Adjustment Format Version-149', - 'zUnmAdj-Adjustment Base Image Format-150', - 'zAsset-Favorite-151', - 'zAsset-Hidden-152', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-153', - 'zAsset-Trashed Date-154', - 'zIntResou-Trash State-155', - 'zIntResou-Trashed Date-156', - 'zAsset-Cloud Delete State-157', - 'zIntResou-Cloud Delete State-158', - 'zAddAssetAttr-PTP Trashed State-159', - 'zIntResou-PTP Trashed State-160', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-161', - 'zMedAnlyAstAttr-Media Analysis Timestamp-162', - 'zAsset-Analysis State Modificaion Date-163', - 'zAddAssetAttr- Pending View Count-164', - 'zAddAssetAttr- View Count-165', - 'zAddAssetAttr- Pending Play Count-166', - 'zAddAssetAttr- Play Count-167', - 'zAddAssetAttr- Pending Share Count-168', - 'zAddAssetAttr- Share Count-169', - 'zAddAssetAttr-Allowed for Analysis-170', - 'zAddAssetAttr-Scene Analysis Version-171', - 'zAddAssetAttr-Scene Analysis Timestamp-172', - 'zAddAssetAttr-Destination Asset Copy State-173', - 'zAddAssetAttr-Variation Suggestions States-174', - 'zAsset-High Frame Rate State-175', - 'zAsset-Video Key Frame Time Scale-176', - 'zAsset-Video Key Frame Value-177', - 'zExtAttr-ISO-178', - 'zExtAttr-Metering Mode-179', - 'zExtAttr-Sample Rate-180', - 'zExtAttr-Track Format-181', - 'zExtAttr-White Balance-182', - 'zExtAttr-Aperture-183', - 'zExtAttr-BitRate-184', - 'zExtAttr-Exposure Bias-185', - 'zExtAttr-Frames Per Second-186', - 'zExtAttr-Shutter Speed-187', - 'zAsset-Height-188', - 'zAddAssetAttr-Original Height-189', - 'zIntResou-Unoriented Height-190', - 'zAsset-Width-191', - 'zAddAssetAttr-Original Width-192', - 'zIntResou-Unoriented Width-193', - 'zShare-Thumbnail Image Data-194', - 'SPLzShare-Thumbnail Image Data-195', - 'zAsset-Thumbnail Index-196', - 'zAddAssetAttr-Embedded Thumbnail Height-197', - 'zAddAssetAttr-Embedded Thumbnail Length-198', - 'zAddAssetAttr-Embedded Thumbnail Offset-199', - 'zAddAssetAttr-Embedded Thumbnail Width-200', - 'zAsset-Packed Acceptable Crop Rect-201', - 'zAsset-Packed Badge Attributes-202', - 'zAsset-Packed Preferred Crop Rect-203', - 'zAsset-Curation Score-204', - 'zAsset-Camera Processing Adjustment State-205', - 'zAsset-Depth Type-206', - 'zAddAssetAttr-Orig Resource Choice-207', - 'zAddAssetAttr-Spatial Over Capture Group ID-208', - 'zAddAssetAttr-Place Annotation Data-209', - 'zAddAssetAttr-Distance Identity-210', - 'zAddAssetAttr-Edited IPTC Attributes-211', - 'zAssetDes-Long Description-212', - 'zAddAssetAttr-Asset Description-213', - 'zAddAssetAttr-Title-Comments via Cloud Website-214', - 'zAddAssetAttr-Accessibility Description-215', - 'zAddAssetAttr-Photo Stream Tag ID-216', - 'zCldFeedEnt-Entry Date-217', - 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-218', - 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-219', - 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-220', - 'zCldFeedEnt-Entry Priority Number-221', - 'zCldFeedEnt-Entry Type Number-222', - 'zCldSharedComment-Cloud GUID-4TableStart-223', - 'zCldSharedComment-Date-224', - 'zCldSharedComment-Comment Client Date-225', - 'zAsset-Cloud Last Viewed Comment Date-226', - 'zCldSharedComment-Type-227', - 'zCldSharedComment-Comment Text-228', - 'zCldSharedComment-Commenter Hashed Person ID-229', - 'zCldSharedComment-Batch Comment-230', - 'zCldSharedComment-Is a Caption-231', - 'zAsset-Cloud Has Comments by Me-232', - 'zCldSharedComment-Is My Comment-233', - 'zCldSharedComment-Is Deletable-234', - 'zAsset-Cloud Has Comments Conversation-235', - 'zAsset-Cloud Has Unseen Comments-236', - 'zCldSharedComment-Liked-237', - 'zAddAssetAttr-Share Type-238', - 'zShare-UUID-CMM-4TableStart-239', - 'SPLzShare-UUID-SPL-4TableStart-240', - 'zShare-zENT-CMM-241', - 'SPLzShare-zENT-SPL-242', - 'zShare-Status-CMM-243', - 'SPLzShare-Status-SPL-244', - 'zShare-Scope Type-CMM-245', - 'SPLzShare-Scope Type-SPL-246', - 'zShare-Local Publish State-CMM-247', - 'SPLzShare-Local Publish State-SPL-248', - 'zShare-Public Permission-CMM-249', - 'SPLzShare-Public Permission-SPL-250', - 'zShare-Originating Scope ID-CMM-251', - 'SPLzShare-Originating Scope ID-SPL-252', - 'zShare-Scope ID-CMM-253', - 'SPLzShare-Scope ID-SPL-254', - 'zShare-Title-CMM-255', - 'SPLzShare-Title-SPL-256', - 'zShare-Share URL-CMM-257', - 'SPLzShare-Share URL-SPL-258', - 'zShare-Creation Date-CMM-259', - 'SPLzShare-Creation Date-SPL-260', - 'zShare-Start Date-CMM-261', - 'SPLzShare-Start Date-SPL-262', - 'zShare-End Date-CMM-263', - 'SPLzShare-End Date-SPL-264', - 'zShare-Expiry Date-CMM-265', - 'SPLzShare-Expiry Date-SPL-266', - 'zShare-Asset Count-CMM-267', - 'SPLzShare-Asset Count-SPL-268', - 'zShare-Photos Count-CMM-269', - 'SPLzShare-Photos Count-CMM-SPL-270', - 'zShare-Uploaded Photos Count-CMM-271', - 'SPLzShare-Uploaded Photos Count-SPL-272', - 'zShare-Videos Count-CMM-273', - 'SPLzShare-Videos Count-SPL-274', - 'zShare-Uploaded Videos Count-CMM-275', - 'SPLzShare-Uploaded Videos Count-SPL-276', - 'zShare-Force Sync Attempted-CMM-277', - 'SPLzShare-Force Sync Attempted-SPL-278', - 'zShare-Should Notify On Upload Completion-CMM-279', - 'SPLzShare-Should Notify On Upload Completion-SPL-280', - 'zShare-Trashed State-CMM-281', - 'SPLzShare-Trashed State-SPL-282', - 'zShare-Cloud Delete State-CMM-283', - 'SPLzShare-Cloud Delete State-SPL-284', - 'zShare-Should Ignor Budgets-CMM-285', - 'SPLzShare-Should Ignor Budgets-SPL-286', - 'zSharePartic-UUID-4TableStart-287', - 'SPLzSharePartic-UUID-4TableStart-288', - 'zSharePartic-Acceptance Status-289', - 'SPLzSharePartic-Acceptance Status-290', - 'zSharePartic-Is Current User-291', - 'SPLzSharePartic-Is Current User-292', - 'zSharePartic-Role-293', - 'SPLzSharePartic-Role-294', - 'zSharePartic-Premission-295', - 'SPLzSharePartic-Premission-296', - 'zSharePartic-User ID-297', - 'SPLzSharePartic-User ID-298', - 'SPLzSharePartic-zPK-4TableStart-299', - 'zSharePartic-zPK-4TableStart-300', - 'zSharePartic-Email Address-301', - 'SPLzSharePartic-Email Address-302', - 'zSharePartic-Phone Number-303', - 'SPLzSharePartic-Phone Number-304', - 'ParentzGenAlbum-UUID-4TableStart-305', - 'zGenAlbum-UUID-4TableStart-306', - 'ParentzGenAlbum-Cloud GUID-4TableStart-307', - 'zGenAlbum-Cloud GUID-4TableStart-308', - 'zCldShareAlbumInvRec-Album GUID-4TableStart-309', - 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-310', - 'zGenAlbum-Project Render UUID-4TableStart-311', - 'zAlbumList-Needs Reordering Number-312', - 'zGenAlbum-zENT- Entity-313', - 'ParentzGenAlbum-Kind-314', - 'zGenAlbum-Album Kind-315', - 'ParentzGenAlbum-Cloud-Local-State-316', - 'zGenAlbum-Cloud_Local_State-317', - 'ParentzGenAlbum- Title-318', - 'zGenAlbum- Title-User&System Applied-319', - 'zGenAlbum-Import Session ID-SWY-320', - 'zGenAlbum-Creator Bundle ID-321', - 'ParentzGenAlbum-Creation Date-322', - 'zGenAlbum-Creation Date-323', - 'zGenAlbum-Cloud Creation Date-324', - 'zGenAlbum-Start Date-325', - 'zGenAlbum-End Date-326', - 'zGenAlbum-Cloud Subscription Date-327', - 'ParentzGenAlbum-Pending Items Count-328', - 'zGenAlbum-Pending Items Count-329', - 'ParentzGenAlbum-Pending Items Type-330', - 'zGenAlbum-Pending Items Type-331', - 'zGenAlbum- Cached Photos Count-332', - 'zGenAlbum- Cached Videos Count-333', - 'zGenAlbum- Cached Count-334', - 'ParentzGenAlbum-Sync Event Order Key-335', - 'zGenAlbum-Sync Event Order Key-336', - 'zGenAlbum-Has Unseen Content-337', - 'zGenAlbum-Unseen Asset Count-338', - 'zGenAlbum-is Owned-339', - 'zGenAlbum-Cloud Relationship State-340', - 'zGenAlbum-Cloud Relationship State Local-341', - 'zGenAlbum-Cloud Owner Mail Key-342', - 'zGenAlbum-Cloud Owner Frist Name-343', - 'zGenAlbum-Cloud Owner Last Name-344', - 'zGenAlbum-Cloud Owner Full Name-345', - 'zGenAlbum-Cloud Person ID-346', - 'zAsset-Cloud Owner Hashed Person ID-347', - 'zGenAlbum-Cloud Owner Hashed Person ID-348', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-349', - 'zGenAlbum-Cloud Multi-Contributors Enabled-350', - 'zGenAlbum-Cloud Album Sub Type-351', - 'zGenAlbum-Cloud Contribution Date-352', - 'zGenAlbum-Cloud Last Interesting Change Date-353', - 'zGenAlbum-Cloud Notification Enabled-354', - 'ParentzGenAlbum-Pinned-355', - 'zGenAlbum-Pinned-356', - 'ParentzGenAlbum-Custom Sort Key-357', - 'zGenAlbum-Custom Sort Key-358', - 'ParentzGenAlbum-Custom Sort Ascending-359', - 'zGenAlbum-Custom Sort Ascending-360', - 'ParentzGenAlbum-Is Prototype-361', - 'zGenAlbum-Is Prototype-362', - 'ParentzGenAlbum-Project Document Type-363', - 'zGenAlbum-Project Document Type-364', - 'ParentzGenAlbum-Custom Query Type-365', - 'zGenAlbum-Custom Query Type-366', - 'ParentzGenAlbum-Trashed State-367', - 'ParentzGenAlbum-Trash Date-368', - 'zGenAlbum-Trashed State-369', - 'zGenAlbum-Trash Date-370', - 'ParentzGenAlbum-Cloud Delete State-371', - 'zGenAlbum-Cloud Delete State-372', - 'zGenAlbum-Cloud Owner Whitelisted-373', - 'zGenAlbum-Cloud Local Public URL Enabled-374', - 'zGenAlbum-Cloud Public URL Enabled-375', - 'zGenAlbum-Public URL-376', - 'zGenAlbum-Key Asset Face Thumb Index-377', - 'zGenAlbum-Project Text Extension ID-378', - 'zGenAlbum-User Query Data-379', - 'zGenAlbum-Custom Query Parameters-380', - 'zGenAlbum-Project Data-381', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-382', - 'zCldShareAlbumInvRec-Invitation State Local-383', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-384', - 'zCldShareAlbumInvRec-Subscription Date-385', - 'zCldShareAlbumInvRec-Invitee First Name-386', - 'zCldShareAlbumInvRec-Invitee Last Name-387', - 'zCldShareAlbumInvRec-Invitee Full Name-388', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-389', - 'zCldShareAlbumInvRec-Invitee Email Key-390', - 'zGenAlbum-Key Asset Face ID-391', - 'zFaceCrop-Face Area Points-392', - 'zAsset-Face Adjustment Version-393', - 'zDetFace-Asset Visible-394', - 'zPerson-Face Count-395', - 'zDetFace-Face Crop-396', - 'zDetFace-Face Algorithm Version-397', - 'zDetFace-Adjustment Version-398', - 'zDetFace-UUID-4TableStart-399', - 'zPerson-Person UUID-4TableStart-400', - 'zDetFace-Confirmed Face Crop Generation State-401', - 'zDetFace-Manual-402', - 'zDetFace-VIP Model Type-403', - 'zDetFace-Name Source-404', - 'zDetFace-Cloud Name Source-405', - 'zPerson-Person URI-406', - 'zPerson-Display Name-407', - 'zPerson-Full Name-408', - 'zPerson-Cloud Verified Type-409', - 'zFaceCrop-State-410', - 'zFaceCrop-Type-411', - 'zFaceCrop-UUID-4TableStart-412', - 'zPerson-Type-413', - 'zPerson-Verified Type-414', - 'zPerson-Gender Type-415', - 'zDetFace-Gender Type-416', - 'zDetFace-Center X-417', - 'zDetFace-Center Y-418', - 'zPerson-Age Type Estimate-419', - 'zDetFace-Age Type Estimate-420', - 'zDetFace-Hair Color Type-421', - 'zDetFace-Facial Hair Type-422', - 'zDetFace-Has Smile-423', - 'zDetFace-Smile Type-424', - 'zDetFace-Lip Makeup Type-425', - 'zDetFace-Eyes State-426', - 'zDetFace-Is Left Eye Closed-427', - 'zDetFace-Is Right Eye Closed-428', - 'zDetFace-Eye Glasses Type-429', - 'zDetFace-Eye Makeup Type-430', - 'zDetFace-Cluster Squence Number Key-431', - 'zDetFace-Grouping ID-432', - 'zDetFace-Master ID-433', - 'zDetFace-Quality-434', - 'zDetFace-Quality Measure-435', - 'zDetFace-Source Height-436', - 'zDetFace-Source Width-437', - 'zDetFace-Hidden-Asset Hidden-438', - 'zDetFace-In Trash-Recently Deleted-439', - 'zDetFace-Cloud Local State-440', - 'zDetFace-Training Type-441', - 'zDetFace.Pose Yaw-442', - 'zDetFace-Roll-443', - 'zDetFace-Size-444', - 'zDetFace-Cluster Squence Number-445', - 'zDetFace-Blur Score-446', - 'zDetFacePrint-Face Print Version-447', - 'zMedAnlyAstAttr-Face Count-448', - 'zDetFaceGroup-UUID-4TableStart-449', - 'zDetFaceGroup-Person Builder State-450', - 'zDetFaceGroup-UnNamed Face Count-451', - 'zPerson-In Person Naming Model-452', - 'zPerson-Key Face Pick Source Key-453', - 'zPerson-Manual Order Key-454', - 'zPerson-Question Type-455', - 'zPerson-Suggested For Client Type-456', - 'zPerson-Merge Target Person-457', - 'zPerson-Cloud Local State-458', - 'zFaceCrop-Cloud Local State-459', - 'zFaceCrop-Cloud Type-460', - 'zPerson-Cloud Delete State-461', - 'zFaceCrop-Cloud Delete State-462', - 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-463', - 'zMemory-zPK-464', - 'z3MemoryBCAs-3CuratedAssets = zAsset-zPK-465', - 'z3MemoryBCAs-40MemoriesBeingCuratedAssets = zMemory-zPK-466', - 'z3MemoryBECAs-3ExtCuratedAssets = zAsset-zPK-467', - 'z3MemoryBECAs-40MemoriesBeingExtCuratedAssets = zMemory-zPK-468', - 'z3MemoryBMCAs-3MovieCuratedAssets = zAsset-zPK-469', - 'z3MemoryBMCAs-40MemoriesBeingMovieCuratedAssets = zMemory-zPK-470', - 'z3MemoryBRAs-3RepresentativeAssets = zAsset-zPK-471', - 'z3MemoryBRAs-40RepresentativeAssets = zMemory-zPK-472', - 'zMemory-Key Asset = zAsset-zPK-473', - 'zMemory-UUID-474', - 'zMemory-SubTitle-475', - 'zMemory-Title-476', - 'zMemory-Category-477', - 'zMemory-SubCategory-478', - 'zMemory-Creation Date-479', - 'zMemory-User Created-480', - 'zMemory-Favorite Memory-481', - 'zMemory-Score-482', - 'zMemory-View Count-483', - 'zMemory-Play Count-484', - 'zMemory-Rejected-485', - 'zMemory-Share Count-486', - 'zMemory-Last Movie Play Date-487', - 'zMemory-Last Viewed Date-488', - 'zMemory-Pending-489', - 'zMemory-Pending Play Count Memory-490', - 'zMemory-Pending Share Count Memory-491', - 'zMemory-Pending View Count Memory-492', - 'zMemory-Featured State-493', - 'zMemory-Photos Graph Version-494', - 'zMemory-AssetListPredicte-495', - 'zMemory-Notification State-496', - 'zMemory-Cloud Local State-497', - 'zMemory-Cloud Delete State-498', - 'YearzMomentList-UUID-499', - 'YearzMomentList-zPK-500', - 'zMoment-Year Moment List-501', - 'YearzMomentList-Sort Index-502', - 'YearzMomentList-Granularity Level-503', - 'YearzMomentList-Start Date-504', - 'YearzMomentList-Representative Date-505', - 'YearzMomentList-End Date-506', - 'YearzMomentList-Trashed State-507', - 'MegaYMzMomentList-UUID-508', - 'MegaYMzMomentList-zPK-509', - 'zMoment-Mega Moment List-510', - 'MegaYMzMomentList-Sort Index-511', - 'MegaYMzMomentList-Granularity Level-512', - 'MegaYMzMomentList-Start Date-513', - 'MegaYMzMomentList-Representative Date-514', - 'MegaYMzMomentList-End Date-515', - 'MegaYMzMomentList-Trashed State-516', - 'zMoment-UUID-517', - 'zMoment-zPK-518', - 'zMoment-Aggregation Score-519', - 'zMoment-Start Date-520', - 'zMoment-Representative Date-521', - 'zMoment-Timezone Offset-522', - 'zMoment-Modification Date-523', - 'zMoment-End Date-524', - 'zMoment-SubTitle-525', - 'zMoment-Title-526', - 'zMoment-Processed Location-527', - 'zMoment-Approx Latitude-528', - 'zMoment-Approx Longitude-529', - 'zMoment-GPS Horizontal Accuracy-530', - 'zMoment-Cache Count-531', - 'zMoment-Cached Photos Count-532', - 'zMoment-Cached Videos Count-533', - 'zMoment-Trashed State-534', - 'zMoment-Highlight Key-535', - 'zAsset-Highlight Visibility Score-536', - 'YearParzPhotosHigh-UUID-537', - 'YearParzPhotosHigh-zPK-538', - 'YearParzPhotosHigh-zENT-539', - 'YearParzPhotosHigh-zOPT-540', - 'YearParzPhotosHigh-Promotion Score-541', - 'YearParzPhotosHigh-Title-542', - 'YearParzPhotosHigh-Verbose Smart Description-543', - 'YearParzPhotosHigh-Start Date-544', - 'YearParzPhotosHigh-End Date-545', - 'YearParzPhotosHigh-Year Key Asset-546', - 'YearParzPhotosHigh-Is Curated-547', - 'YearParzPhotosHigh-Kind-548', - 'YearParzPhotosHigh-Category-549', - 'YearParzPhotosHigh-Visibility State-550', - 'YearParzPhotosHigh-Enrichment State-551', - 'YearParzPhotosHigh-Enrichment Version-552', - 'YearParzPhotosHigh-Highlight Version-553', - 'YMParzPhotosHigh-UUID-554', - 'YMParzPhotosHigh-zPK-555', - 'YMParzPhotosHigh-Parent PH Key-556', - 'YMParzPhotosHigh-zENT-557', - 'YMParzPhotosHigh-zOPT-558', - 'YMParzPhotosHigh-Promotion Score-559', - 'YMParzPhotosHigh-Title-560', - 'YMParzPhotosHigh-Subtitle-561', - 'YMParzPhotosHigh-Verbose Smart Description-562', - 'YMParzPhotosHigh-Start Date-563', - 'YMParzPhotosHigh-End Date-564', - 'YMParzPhotosHigh-Month First Asset-565', - 'YMParzPhotosHigh-Month Key Asset-566', - 'YMParzPhotosHigh-Is Curated-567', - 'YMParzPhotosHigh-Kind-568', - 'YMParzPhotosHigh-Category-569', - 'YMParzPhotosHigh-Visibility State-570', - 'YMParzPhotosHigh-Enrichment State-571', - 'YMParzPhotosHigh-Enrichment Version-572', - 'YMParzPhotosHigh-Highlight Version-573', - 'DGParzPhotosHigh-UUID-574', - 'DGParzPhotosHigh-zPK-575', - 'DGParzPhotosHigh-Parent PH Key-576', - 'DGParzPhotosHigh-zENT-577', - 'DGParzPhotosHigh-zOPT-578', - 'DGParzPhotosHigh-Promotion Score-579', - 'DGParzPhotosHigh-Title-580', - 'DGParzPhotosHigh-Subtitle-581', - 'DGParzPhotosHigh-Verbose Smart Description-582', - 'DGParzPhotosHigh-Start Date-583', - 'DGParzPhotosHigh-End Date-584', - 'DGParzPhotosHigh-Month First Asset-585', - 'DGParzPhotosHigh-Month Key Asset-586', - 'DGParzPhotosHigh-Is Curated-587', - 'DGParzPhotosHigh-Kind-588', - 'DGParzPhotosHigh-Category-589', - 'DGParzPhotosHigh-Visibility State-590', - 'DGParzPhotosHigh-Enrichment State-591', - 'DGParzPhotosHigh-Enrichment Version-592', - 'DGParzPhotosHigh-Highlight Version-593', - 'zAsset-Highlight Being Assets Key-594', - 'HBAzPhotosHigh-UUID-595', - 'HBAzPhotosHigh-zPK-596', - 'HBAzPhotosHigh-Parent PH Key-597', - 'HBAzPhotosHigh-zENT-598', - 'HBAzPhotosHigh-zOPT-599', - 'HBAzPhotosHigh-Promotion Score-600', - 'HBAzPhotosHigh-Title-601', - 'HBAzPhotosHigh-Subtitle-602', - 'HBAzPhotosHigh-Verbose Smart Description-603', - 'HBAzPhotosHigh-Start Date-604', - 'HBAzPhotosHigh Start-Timezone Offset-605', - 'HBAzPhotosHigh-End Timezone Offset-606', - 'HBAzPhotosHigh-End Date-607', - 'HBAzPhotosHigh-Asset Count-608', - 'HBAzPhotosHigh-Summary Count-609', - 'HBAzPhotosHigh-Extended Count-610', - 'HBAzPhotosHigh-Day Group Assets Count-611', - 'HBAzPhotosHigh-Day Group Ext Assets Count-612', - 'HBAzPhotosHigh-Day Group Summary Assets Count-613', - 'HBAzPhotosHigh-Key Asset-614', - 'HBAzPhotosHigh-Is Curated-615', - 'HBAzPhotosHigh-Type-616', - 'HBAzPhotosHigh-Kind-617', - 'HBAzPhotosHigh-Category-618', - 'HBAzPhotosHigh-Visibility State-619', - 'HBAzPhotosHigh-Mood-620', - 'HBAzPhotosHigh-Enrichment State-621', - 'HBAzPhotosHigh-Enrichment Version-622', - 'HBAzPhotosHigh-Highlight Version-623', - 'zAsset-Highlight Being Extended Assets Key-624', - 'HBEAzPhotosHigh-UUID-625', - 'HBEAzPhotosHigh-zPK-626', - 'HBEAzPhotosHigh-zENT-627', - 'HBEAzPhotosHigh-zOPT-628', - 'HBEAzPhotosHigh-Promotion Score-629', - 'HBEAzPhotosHigh-Title-630', - 'HBEAzPhotosHigh-Subtitle-631', - 'HBEAzPhotosHigh-Verbose Smart Description-632', - 'HBEAzPhotosHigh-Start Date-633', - 'HBEAzPhotosHigh-Start Timezone Offset-634', - 'HBEAzPhotosHigh-End Timezone Offset-635', - 'HBEAzPhotosHigh-End Date-636', - 'HBEAzPhotosHigh-Asset Count-637', - 'HBEAzPhotosHigh-Summary Count-638', - 'HBEAzPhotosHigh-Extended Count-639', - 'HBEAzPhotosHigh-Day Group Assets Count-640', - 'HBEAzPhotosHigh-Day Group Ext Assets Count-641', - 'HBEAzPhotosHigh-Day Group Summary Assets Count-642', - 'HBEAzPhotosHigh-Parent PH Key-643', - 'HBEAzPhotosHigh-Year Key Asset-644', - 'HBEAzPhotosHigh-Month First Asset-645', - 'HBEAzPhotosHigh-Month Key Asset-646', - 'HBEAzPhotosHigh-Key Asset-647', - 'HBEAzPhotosHigh-Parent Day Group PH Key-648', - 'HBEAzPhotosHigh-Day Group Key Asset-649', - 'HBEAzPhotosHigh-is Curated-650', - 'HBEAzPhotosHigh-Type-651', - 'HBEAzPhotosHigh-Kind-652', - 'HBEAzPhotosHigh-Category-653', - 'HBEAzPhotosHigh-Visibility State-654', - 'HBEAzPhotosHigh-Mood-655', - 'HBEAzPhotosHigh-Enrichment State-656', - 'HBEAzPhotosHigh-Enrichment Version-657', - 'HBEAzPhotosHigh-Highlight Version-658', - 'zAsset-Highlight Being Summary Assets Key-659', - 'HBSAzPhotosHigh-UUID-660', - 'HBSAzPhotosHigh-zPK-661', - 'HBSAzPhotosHigh-zENT-662', - 'HBSAzPhotosHigh-zOPT-663', - 'HBSAzPhotosHigh-Promotion Score-664', - 'HBSAzPhotosHigh-Title-665', - 'HBSAzPhotosHigh-Subtitle-666', - 'HBSAzPhotosHigh-Verbose Smart Description-667', - 'HBSAzPhotosHigh-Start Date-668', - 'HBSAzPhotosHigh-Start Timezone Offset-669', - 'HBSAzPhotosHigh-End Timezone Offset-670', - 'HBSAzPhotosHigh-End Date-671', - 'HBSAzPhotosHigh-Asset Count-672', - 'HBSAzPhotosHigh-Summary Count-673', - 'HBSAzPhotosHigh-Extended Count-674', - 'HBSAzPhotosHigh-Day Group Assets Count-675', - 'HBSAzPhotosHigh-Day Group Ext Assets Count-676', - 'HBSAzPhotosHigh-Day Group Summary Assets Count-677', - 'HBSAzPhotosHigh-Parent PH Key-678', - 'HBSAzPhotosHigh-Year Key Asset-679', - 'HBSAzPhotosHigh-Month First Asset-680', - 'HBSAzPhotosHigh-Month Key Asset-681', - 'HBSAzPhotosHigh-Key Asset-682', - 'HBSAzPhotosHigh-Parent Day Group PH Key-683', - 'HBSAzPhotosHigh-Day Group Key Asset-684', - 'HBSAzPhotosHigh-is Curated-685', - 'HBSAzPhotosHigh-Type-686', - 'HBSAzPhotosHigh-Kind-687', - 'HBSAzPhotosHigh-Category-688', - 'HBSAzPhotosHigh-Visibility State-689', - 'HBSAzPhotosHigh-Mood-690', - 'HBSAzPhotosHigh-Enrichment State-691', - 'HBSAzPhotosHigh-Enrichment Version-692', - 'HBSAzPhotosHigh-Highlight Version-693', - 'zAsset-Highlight Being Key Asset Key-694', - 'HBKAzPhotosHigh-UUID-695', - 'HBKAzPhotosHigh-zPK-696', - 'HBKAzPhotosHigh-zENT-697', - 'HBKAzPhotosHigh-zOPT-698', - 'HBKAzPhotosHigh-Promotion Score-699', - 'HBKAzPhotosHigh-Title-700', - 'HBKAzPhotosHigh-Subtitle-701', - 'HBKAzPhotosHigh-Verbose Smart Description-702', - 'HBKAzPhotosHigh-Start Date-703', - 'HBKAzPhotosHigh-Start Timezone Offset-704', - 'HBKAzPhotosHigh-End Timezone Offset-705', - 'HBKAzPhotosHigh-End Date-706', - 'HBKAzPhotosHigh-Asset Count-707', - 'HBKAzPhotosHigh-Summary Count-708', - 'HBKAzPhotosHigh-Extended Count-709', - 'HBKAzPhotosHigh-Day Group Assets Count-710', - 'HBKAzPhotosHigh-Day Group Ext Assets Count-711', - 'HBKAzPhotosHigh-Day Group Summary Assets Count-712', - 'HBKAzPhotosHigh-Parent PH Key-713', - 'HBKAzPhotosHigh-Year Key Asset-714', - 'HBKAzPhotosHigh-Month First Asset-715', - 'HBKAzPhotosHigh-Month Key Asset-716', - 'HBKAzPhotosHigh-Key Asset-717', - 'HBKAzPhotosHigh-Parent Day Group PH Key-718', - 'HBKAzPhotosHigh-Day Group Key Asset-719', - 'HBKAzPhotosHigh-is Curated-720', - 'HBKAzPhotosHigh-Type-721', - 'HBKAzPhotosHigh-Kind-722', - 'HBKAzPhotosHigh-Category-723', - 'HBKAzPhotosHigh-Visibility State-724', - 'HBKAzPhotosHigh-Mood-725', - 'HBKAzPhotosHigh-Enrichment State-726', - 'HBKAzPhotosHigh-Enrichment Version-727', - 'HBKAzPhotosHigh-Highlight Version-728', - 'zAsset-Day Group Highlight Being Assets Key-729', - 'DGHBAzPhotosHigh-UUID-730', - 'DGHBAzPhotosHigh-zPK-731', - 'DGHBAzPhotosHigh-zENT-732', - 'DGHBAzPhotosHigh-zOPT-733', - 'DGHBAzPhotosHigh-Promotion Score-734', - 'DGHBAzPhotosHigh-Title-735', - 'DGHBAzPhotosHigh-Subtitle-736', - 'DGHBAzPhotosHigh-Verbose Smart Description-737', - 'DGHBAzPhotosHigh-Start Date-738', - 'DGHBAzPhotosHigh-Start Timezone Offset-739', - 'DGHBAzPhotosHigh-End Timezone Offset-740', - 'DGHBAzPhotosHigh-End Date-741', - 'DGHBAzPhotosHigh-Asset Count-742', - 'DGHBAzPhotosHigh-Summary Count-743', - 'DGHBAzPhotosHigh-Extended Count-744', - 'DGHBAzPhotosHigh-Day Group Assets Count-745', - 'DGHBAzPhotosHigh-Day Group Ext Assets Count-746', - 'DGHBAzPhotosHigh-Day Group Summary Assets Count-747', - 'DGHBAzPhotosHigh-Parent PH Key-748', - 'DGHBAzPhotosHigh-Year Key Asset-749', - 'DGHBAzPhotosHigh-Month First Asset-750', - 'DGHBAzPhotosHigh-Month Key Asset-751', - 'DGHBAzPhotosHigh-Key Asset-752', - 'DGHBAzPhotosHigh-Parent Day Group PH Key-753', - 'DGHBAzPhotosHigh-Day Group Key Asset-754', - 'DGHBAzPhotosHigh-is Curated-755', - 'DGHBAzPhotosHigh-Type-756', - 'DGHBAzPhotosHigh-Kind-757', - 'DGHBAzPhotosHigh-Category-758', - 'DGHBAzPhotosHigh-Visibility State-759', - 'DGHBAzPhotosHigh-Mood-760', - 'DGHBAzPhotosHigh-Enrichment State-761', - 'DGHBAzPhotosHigh-Enrichment Version-762', - 'DGHBAzPhotosHigh-Highlight Version-763', - 'zAsset-Day Group Highlight Being Extended Assets Key-764', - 'DGHBEAzPhotosHigh-UUID-765', - 'DGHBEAzPhotosHigh-zPK-766', - 'DGHBEAzPhotosHigh-zENT-767', - 'DGHBEAzPhotosHigh-zOPT-768', - 'DGHBEAzPhotosHigh-Promotion Score-769', - 'DGHBEAzPhotosHigh-Title-770', - 'DGHBEAzPhotosHigh-Subtitle-771', - 'DGHBEAzPhotosHigh-Verbose Smart Description-772', - 'DGHBEAzPhotosHigh-Start Date-773', - 'DGHBEAzPhotosHigh-Start Timezone Offset-774', - 'DGHBEAzPhotosHigh-End Timezone Offset-775', - 'DGHBEAzPhotosHigh-End Date-776', - 'DGHBEAzPhotosHigh-Asset Count-777', - 'DGHBEAzPhotosHigh-Summary Count-778', - 'DGHBEAzPhotosHigh-Extended Count-779', - 'DGHBEAzPhotosHigh-Day Group Assets Count-780', - 'DGHBEAzPhotosHigh-Day Group Ext Assets Count-781', - 'DGHBEAzPhotosHigh-Day Group Summary Assets Count-782', - 'DGHBEAzPhotosHigh-Parent PH Key-783', - 'DGHBEAzPhotosHigh-Year Key Asset-784', - 'DGHBEAzPhotosHigh-Month First Asset-785', - 'DGHBEAzPhotosHigh-Month Key Asset-786', - 'DGHBEAzPhotosHigh-Key Asset-787', - 'DGHBEAzPhotosHigh-Parent Day Group PH Key-788', - 'DGHBEAzPhotosHigh-Day Group Key Asset-789', - 'DGHBEAzPhotosHigh-is Curated-790', - 'DGHBEAzPhotosHigh-Type-791', - 'DGHBEAzPhotosHigh-Kind-792', - 'DGHBEAzPhotosHigh-Category-793', - 'DGHBEAzPhotosHigh-Visibility State-794', - 'DGHBEAzPhotosHigh-Mood-795', - 'DGHBEAzPhotosHigh-Enrichment State-796', - 'DGHBEAzPhotosHigh-Enrichment Version-797', - 'DGHBEAzPhotosHigh-Highlight Version-798', - 'zAsset-Day Group Highlight Being Key Asset-799', - 'DGHBKAzPhotosHigh-UUID-800', - 'DGHBKAzPhotosHigh-zPK-801', - 'DGHBKAzPhotosHigh-zENT-802', - 'DGHBKAzPhotosHigh-zOPT-803', - 'DGHBKAzPhotosHigh-Promotion Score-804', - 'DGHBKAzPhotosHigh-Title-805', - 'DGHBKAzPhotosHigh-Subtitle-806', - 'DGHBKAzPhotosHigh-Verbose Smart Description-807', - 'DGHBKAzPhotosHigh-Start Date-808', - 'DGHBKAzPhotosHigh-Start Timezone Offset-809', - 'DGHBKAzPhotosHigh-End Timezone Offset-810', - 'DGHBKAzPhotosHigh-End Date-811', - 'DGHBKAzPhotosHigh-Asset Count-812', - 'DGHBKAzPhotosHigh-Summary Count-813', - 'DGHBKAzPhotosHigh-Extended Count-814', - 'DGHBKAzPhotosHigh-Day Group Assets Count-815', - 'DGHBKAzPhotosHigh-Day Group Ext Assets Count-816', - 'DGHBKAzPhotosHigh-Day Group Summary Assets Count-817', - 'DGHBKAzPhotosHigh-Parent PH Key-818', - 'DGHBKAzPhotosHigh-Year Key Asset-819', - 'DGHBKAzPhotosHigh-Month First Asset-820', - 'DGHBKAzPhotosHigh-Month Key Asset-821', - 'DGHBKAzPhotosHigh-Key Asset-822', - 'DGHBKAzPhotosHigh-Parent Day Group PH Key-823', - 'DGHBKAzPhotosHigh-Day Group Key Asset-824', - 'DGHBKAzPhotosHigh-is Curated-825', - 'DGHBKAzPhotosHigh-Type-826', - 'DGHBKAzPhotosHigh-Kind-827', - 'DGHBKAzPhotosHigh-Category-828', - 'DGHBKAzPhotosHigh-Visibility State-829', - 'DGHBKAzPhotosHigh-Mood-830', - 'DGHBKAzPhotosHigh-Enrichment State-831', - 'DGHBKAzPhotosHigh-Enrichment Version-832', - 'DGHBKAzPhotosHigh-Highlight Version-833', - 'zAsset-Day Group Highlight Being Summary Assets Key-834', - 'DGHBSAzPhotosHigh-UUID-835', - 'DGHBSAzPhotosHigh-zPK-836', - 'DGHBSAzPhotosHigh-zENT-837', - 'DGHBSAzPhotosHigh-zOPT-838', - 'DGHBSAzPhotosHigh-Promotion Score-839', - 'DGHBSAzPhotosHigh-Title-840', - 'DGHBSAzPhotosHigh-Subtitle-841', - 'DGHBSAzPhotosHigh-Verbose Smart Description-842', - 'DGHBSAzPhotosHigh-Start Date-843', - 'DGHBSAzPhotosHigh-Start Timezone Offset-844', - 'DGHBSAzPhotosHigh-End Timezone Offset-845', - 'DGHBSAzPhotosHigh-End Date-846', - 'DGHBSAzPhotosHigh-Asset Count-847', - 'DGHBSAzPhotosHigh-Summary Count-848', - 'DGHBSAzPhotosHigh-Extended Count-849', - 'DGHBSAzPhotosHigh-Day Group Assets Count-850', - 'DGHBSAzPhotosHigh-Day Group Ext Assets Count-851', - 'DGHBSAzPhotosHigh-Day Group Summary Assets Count-852', - 'DGHBSAzPhotosHigh-Parent PH Key-853', - 'DGHBSAzPhotosHigh-Year Key Asset-854', - 'DGHBSAzPhotosHigh-Month First Asset-855', - 'DGHBSAzPhotosHigh-Month Key Asset-856', - 'DGHBSAzPhotosHigh-Key Asset-857', - 'DGHBSAzPhotosHigh-Parent Day Group PH Key-858', - 'DGHBSAzPhotosHigh-Day Group Key Asset-859', - 'DGHBSAzPhotosHigh-is Curated-860', - 'DGHBSAzPhotosHigh-Type-861', - 'DGHBSAzPhotosHigh-Kind-862', - 'DGHBSAzPhotosHigh-Category-863', - 'DGHBSAzPhotosHigh-Visibility State-864', - 'DGHBSAzPhotosHigh-Mood-865', - 'DGHBSAzPhotosHigh-Enrichment State-866', - 'DGHBSAzPhotosHigh-Enrichment Version-867', - 'DGHBSAzPhotosHigh-Highlight Version-868', - 'zAsset-Month Highlight Being First Asset Key-869', - 'MHBFAzPhotosHigh-UUID-870', - 'MHBFAzPhotosHigh-zPK-871', - 'MHBFAzPhotosHigh-zENT-872', - 'MHBFAzPhotosHigh-zOPT-873', - 'MHBFAzPhotosHigh-Promotion Score-874', - 'MHBFAzPhotosHigh-Title-875', - 'MHBFAzPhotosHigh-Subtitle-876', - 'MHBFAzPhotosHigh-Verbose Smart Description-877', - 'MHBFAzPhotosHigh-Start Date-878', - 'MHBFAzPhotosHigh-Start Timezone Offset-879', - 'MHBFAzPhotosHigh-End Timezone Offset-880', - 'MHBFAzPhotosHigh-End Date-881', - 'MHBFAzPhotosHigh-Asset Count-882', - 'MHBFAzPhotosHigh-Summary Count-883', - 'MHBFAzPhotosHigh-Extended Count-884', - 'MHBFAzPhotosHigh-Day Group Assets Count-885', - 'MHBFAzPhotosHigh-Day Group Ext Assets Count-886', - 'MHBFAzPhotosHigh-Day Group Summary Assets Count-887', - 'MHBFAzPhotosHigh-Parent PH Key-888', - 'MHBFAzPhotosHigh-Year Key Asset-889', - 'MHBFAzPhotosHigh-Month First Asset-890', - 'MHBFAzPhotosHigh-Month Key Asset-891', - 'MHBFAzPhotosHigh-Key Asset-892', - 'MHBFAzPhotosHigh-Parent Day Group PH Key-893', - 'MHBFAzPhotosHigh-Day Group Key Asset-894', - 'MHBFAzPhotosHigh-is Curated-895', - 'MHBFAzPhotosHigh-Type-896', - 'MHBFAzPhotosHigh-Kind-897', - 'MHBFAzPhotosHigh-Category-898', - 'MHBFAzPhotosHigh-Visibility State-899', - 'MHBFAzPhotosHigh-Mood-900', - 'MHBFAzPhotosHigh-Enrichment State-901', - 'MHBFAzPhotosHigh-Enrichment Version-902', - 'MHBFAzPhotosHigh-Highlight Version-903', - 'zAsset-Month Highlight Being Key Asset-904', - 'MHBKAzPhotosHigh-UUID-905', - 'MHBKAzPhotosHigh-zPK-906', - 'MHBKAzPhotosHigh-zENT-907', - 'MHBKAzPhotosHigh-zOPT-908', - 'MHBKAzPhotosHigh-Promotion Score-909', - 'MHBKAzPhotosHigh-Title-910', - 'MHBKAzPhotosHigh-Subtitle-911', - 'MHBKAzPhotosHigh-Verbose Smart Description-912', - 'MHBKAzPhotosHigh-Start Date-913', - 'MHBKAzPhotosHigh-Start Timezone Offset-914', - 'MHBKAzPhotosHigh-End Timezone Offset-915', - 'MHBKAzPhotosHigh-End Date-916', - 'MHBKAzPhotosHigh-Asset Count-917', - 'MHBKAzPhotosHigh-Summary Count-918', - 'MHBKAzPhotosHigh-Extended Count-919', - 'MHBKAzPhotosHigh-Day Group Assets Count-920', - 'MHBKAzPhotosHigh-Day Group Ext Assets Count-921', - 'MHBKAzPhotosHigh-Day Group Summary Assets Count-922', - 'MHBKAzPhotosHigh-Parent PH Key-923', - 'MHBKAzPhotosHigh-Year Key Asset-924', - 'MHBKAzPhotosHigh-Month First Asset-925', - 'MHBKAzPhotosHigh-Month Key Asset-926', - 'MHBKAzPhotosHigh-Key Asset-927', - 'MHBKAzPhotosHigh-Parent Day Group PH Key-928', - 'MHBKAzPhotosHigh-Day Group Key Asset-929', - 'MHBKAzPhotosHigh-is Curated-930', - 'MHBKAzPhotosHigh-Type-931', - 'MHBKAzPhotosHigh-Kind-932', - 'MHBKAzPhotosHigh-Category-933', - 'MHBKAzPhotosHigh-Visibility State-934', - 'MHBKAzPhotosHigh-Mood-935', - 'MHBKAzPhotosHigh-Enrichment State-936', - 'MHBKAzPhotosHigh-Enrichment Version-937', - 'MHBKAzPhotosHigh-Highlight Version-938', - 'zAsset-Year Highlight Being Key Asset-939', - 'YHBKAzPhotosHigh-UUID-940', - 'YHBKAzPhotosHigh-zPK-941', - 'YHBKAzPhotosHigh-zENT-942', - 'YHBKAzPhotosHigh-zOPT-943', - 'YHBKAzPhotosHigh-Promotion Score-944', - 'YHBKAzPhotosHigh-Title-945', - 'YHBKAzPhotosHigh-Subtitle-946', - 'YHBKAzPhotosHigh-Verbose Smart Description-947', - 'YHBKAzPhotosHigh-Start Date-948', - 'YHBKAzPhotosHigh-Start Timezone Offset-949', - 'YHBKAzPhotosHigh-End Timezone Offset-950', - 'YHBKAzPhotosHigh-End Date-951', - 'YHBKAzPhotosHigh-Asset Count-952', - 'YHBKAzPhotosHigh-Summary Count-953', - 'YHBKAzPhotosHigh-Extended Count-954', - 'YHBKAzPhotosHigh-Day Group Assets Count-955', - 'YHBKAzPhotosHigh-Day Group Ext Assets Count-956', - 'YHBKAzPhotosHigh-Day Group Summary Assets Count-957', - 'YHBKAzPhotosHigh-Parent PH Key-958', - 'YHBKAzPhotosHigh-Year Key Asset-959', - 'YHBKAzPhotosHigh-Month First Asset-960', - 'YHBKAzPhotosHigh-Month Key Asset-961', - 'YHBKAzPhotosHigh-Key Asset-962', - 'YHBKAzPhotosHigh-Parent Day Group PH Key-963', - 'YHBKAzPhotosHigh-Day Group Key Asset-964', - 'YHBKAzPhotosHigh-is Curated-965', - 'YHBKAzPhotosHigh-Type-966', - 'YHBKAzPhotosHigh-Kind-967', - 'YHBKAzPhotosHigh-Category-968', - 'YHBKAzPhotosHigh-Visibility State-969', - 'YHBKAzPhotosHigh-Mood-970', - 'YHBKAzPhotosHigh-Enrichment State-971', - 'YHBKAzPhotosHigh-Enrichment Version-972', - 'YHBKAzPhotosHigh-Highlight Version-973', - 'z3SuggBKA-3KeyAssets = zAsset-zPK-974', - 'z3SuggBKA-55SuggBeingKeyAssets = zSugg-zPK-975', - 'SBKAzSugg-zPK-976', - 'SBKAzSugg-UUID-977', - 'SBKAzSugg-Start Date-978', - 'SBKAzSugg-State-979', - 'SBKAzSugg-Featured State-980', - 'SBKAzSugg-Notification State-981', - 'SBKAzSugg-Creation Date-982', - 'SBKAzSugg-End Date-983', - 'SBKAzSugg-Activation Date-984', - 'SBKAzSugg-Expunge Date-985', - 'SBKAzSugg-Relevant Until Date-986', - 'SBKAzSugg-Title-987', - 'SBKAzSugg-Sub Title-988', - 'SBKAzSugg-Cached Count-989', - 'SBKAzSugg-Cahed Photos Count-990', - 'SBKAzSugg-Cached Videos Count-991', - 'SBKAzSugg-Type-992', - 'SBKAzSugg-Sub Type-993', - 'SBKAzSugg-Version-994', - 'SBKAzSugg-Cloud Local State-995', - 'SBKAzSugg-Cloud Delete State-996', - 'z3SuggBRA-3RepAssets1-997', - 'z3SuggBRA-55SuggBeingRepAssets-998', - 'SBRAzSugg-zPK-999', - 'SBRAzSugg-UUID-1000', - 'SBRAzSugg-Start Date-1001', - 'SBRAzSugg-State-1002', - 'SBRAzSugg-Featured State-1003', - 'SBRAzSugg-Notification State-1004', - 'SBRAzSugg-Creation Date-1005', - 'SBRAzSugg-End Date-1006', - 'SBRAzSugg-Activation Date-1007', - 'SBRAzSugg-Expunge Date-1008', - 'SBRAzSugg-Relevant Until Date-1009', - 'SBRAzSugg-Title-1010', - 'SBRAzSugg-Sub Title-1011', - 'SBRAzSugg-Cached Count-1012', - 'SBRAzSugg-Cahed Photos Count-1013', - 'SBRAzSugg-Cached Videos Count-1014', - 'SBRAzSugg-Type-1015', - 'SBRAzSugg-Sub Type-1016', - 'SBRAzSugg-Version-1017', - 'SBRAzSugg-Cloud Local State-1018', - 'SBRAzSugg-Cloud Delete State-1019', - 'zAsset-Highlight Visibility Score-1020', - 'zMedAnlyAstAttr-Media Analysis Version-1021', - 'zMedAnlyAstAttr-Audio Classification-1022', - 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-1023', - 'zMedAnlyAstAttr-Best Video Range Start Time Scale-1024', - 'zMedAnlyAstAttr-Best Video Range Duration Value-1025', - 'zMedAnlyAstAttr-Best Video Range Start Value-1026', - 'zMedAnlyAstAttr-Packed Best Playback Rect-1027', - 'zMedAnlyAstAttr-Activity Score-1028', - 'zMedAnlyAstAttr-Video Score-1029', - 'zMedAnlyAstAttr-AutoPlay Suggestion Score-1030', - 'zMedAnlyAstAttr-Blurriness Score-1031', - 'zMedAnlyAstAttr-Exposure Score-1032', - 'zAssetAnalyState-Asset UUID-4TableStart-1033', - 'zAssetAnalyState-Analyisis State-1034', - 'zAssetAnalyState-Worker Flags-1035', - 'zAssetAnalyState-Worker Type-1036', - 'zAssetAnalyState-Ignore Until Date-1037', - 'zAssetAnalyState-Last Ignored Date-1038', - 'zAssetAnalyState-Sort Token-1039', - 'zAsset-Overall Aesthetic Score-1040', - 'zCompAssetAttr-Behavioral Score-1041', - 'zCompAssetAttr-Failure Score zCompAssetAttr-1042', - 'zCompAssetAttr-Harmonious Color Score-1043', - 'zCompAssetAttr-Immersiveness Score-1044', - 'zCompAssetAttr-Interaction Score-1045', - 'zCompAssetAttr-Intersting Subject Score-1046', - 'zCompAssetAttr-Intrusive Object Presence Score-1047', - 'zCompAssetAttr-Lively Color Score-1048', - 'zCompAssetAttr-Low Light-1049', - 'zCompAssetAttr-Noise Score-1050', - 'zCompAssetAttr-Pleasant Camera Tilt Score-1051', - 'zCompAssetAttr-Pleasant Composition Score-1052', - 'zCompAssetAttr-Pleasant Lighting Score-1053', - 'zCompAssetAttr-Pleasant Pattern Score-1054', - 'zCompAssetAttr-Pleasant Perspective Score-1055', - 'zCompAssetAttr-Pleasant Post Processing Score-1056', - 'zCompAssetAttr-Pleasant Reflection Score-1057', - 'zCompAssetAttrPleasant Symmetry Score-1058', - 'zCompAssetAttr-Sharply Focused Subject Score-1059', - 'zCompAssetAttr-Tastfully Blurred Score-1060', - 'zCompAssetAttr-Well Chosen Subject Score-1061', - 'zCompAssetAttr-Well Framed Subject Score-1062', - 'zCompAssetAttr-Well Timeed Shot Score-1063', - 'zCldRes-Asset UUID-4TableStart-1064', - 'zCldRes-Cloud Local State-1065', - 'zCldRes-File Size-1066', - 'zCldRes-Height-1067', - 'zCldRes-Is Available-1068', - 'zCldRes-Is Locally Available-1069', - 'zCldRes-Prefetch Count-1070', - 'zCldRes-Source Type-1071', - 'zCldRes-Type-1072', - 'zCldRes-Width-1073', - 'zCldRes-Date Created-1074', - 'zCldRes-Last OnDemand Download Date-1075', - 'zCldRes-Last Prefetch Date-1076', - 'zCldRes-Prunedat-1077', - 'zCldRes-File Path-1078', - 'zCldRes-Fingerprint-1079', - 'zCldRes-Item ID-1080', - 'zCldRes-UniID-1081', - 'zAddAssetAttr-zPK-1082', - 'zAddAssetAttr-zENT-1083', - 'ZAddAssetAttr-zOPT-1084', - 'zAddAssetAttr-zAsset= zAsset_zPK-1085', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-1086', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-1087', - 'zAddAssetAttr-Master Fingerprint-1088', - 'zAddAssetAttr-Public Global UUID-1089', - 'zAddAssetAttr-Deferred Photo Identifier-1090', - 'zAddAssetAttr-Original Assets UUID-1091', - 'zAddAssetAttr-Import Session ID-1092', - 'zAddAssetAttr-Originating Asset Identifier-1093', - 'zAddAssetAttr.Adjusted Fingerprint-1094', - 'zAlbumList-zPK= Album List Key-1095', - 'zAlbumList-zENT-1096', - 'zAlbumList-zOPT-1097', - 'zAlbumList-ID Key-1098', - 'zAlbumList-UUID-1099', - 'zAsset-zPK-1100', - 'zAsset-zENT-1101', - 'zAsset-zOPT-1102', - 'zAsset-Master= zCldMast-zPK-1103', - 'zAsset-Extended Attributes= zExtAttr-zPK-1104', - 'zAsset-Import Session Key-1105', - 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-1106', - 'zAsset-FOK-Cloud Feed Asset Entry Key-1107', - 'zAsset-Moment Share Key= zShare-zPK-1108', - 'zAsset-zMoment Key= zMoment-zPK-1109', - 'zAsset-Computed Attributes Asset Key-1110', - 'zAsset-Highlight Being Assets-HBA Key-1111', - 'zAsset-Highlight Being Extended Assets-HBEA Key-1112', - 'zAsset-Highligh Being Summary Assets-HBSA Key-1113', - 'zAsset-Day Group Highlight Being Assets-DGHBA Key-1114', - 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-1115', - 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-1116', - 'zAsset-Promotion Score-1117', - 'zAsset-Media Analysis Attributes Key-1118', - 'zAsset-Media Group UUID-1119', - 'zAsset-UUID = store.cloudphotodb-1120', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-1121', - 'zAsset.Cloud Collection GUID-1122', - 'zAsset-Avalanche UUID-1123', - 'zAssetAnalyState-zPK-1124', - 'zAssetAnalyState-zEnt-1125', - 'zAssetAnalyState-zOpt-1126', - 'zAssetAnalyState-Asset= zAsset-zPK-1127', - 'zAssetAnalyState-Asset UUID-1128', - 'zAssetDes-zPK-1129', - 'zAssetDes-zENT-1130', - 'zAssetDes-zOPT-1131', - 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-1132', - 'zCldFeedEnt-zPK= zCldShared keys-1133', - 'zCldFeedEnt-zENT-1134', - 'zCldFeedEnt-zOPT-1135', - 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-1136', - 'zCldFeedEnt-Entry Invitation Record GUID-1137', - 'zCldFeedEnt-Entry Cloud Asset GUID-1138', - 'zCldMast-zPK= zAsset-Master-1139', - 'zCldMast-zENT-1140', - 'zCldMast-zOPT-1141', - 'zCldMast-Moment Share Key= zShare-zPK-1142', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-1143', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-1144', - 'zCldMast-Originating Asset ID-1145', - 'zCldMast-Import Session ID- AirDrop-StillTesting-1146', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-1147', - 'CMzCldMastMedData-zENT-1148', - 'CMzCldMastMedData-zOPT-1149', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-1150', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-1151', - 'AAAzCldMastMedData-zENT-1152', - 'AAAzCldMastMedData-zOPT-1153', - 'AAAzCldMastMedData-CldMast key-1154', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-1155', - 'zCldRes-zPK-1156', - 'zCldRes-zENT-1157', - 'zCldRes-zOPT-1158', - 'zCldRes-Asset= zAsset-zPK-1159', - 'zCldRes-Cloud Master= zCldMast-zPK-1160', - 'zCldRes-Asset UUID-1161', - 'zCldShareAlbumInvRec-zPK-1162', - 'zCldShareAlbumInvRec-zEnt-1163', - 'zCldShareAlbumInvRec-zOpt-1164', - 'zCldShareAlbumInvRec-Album Key-1165', - 'zCldShareAlbumInvRec-FOK Album Key-1166', - 'zCldShareAlbumInvRec-Album GUID-1167', - 'zCldShareAlbumInvRec-Cloud GUID-1168', - 'zCldSharedComment-zPK-1169', - 'zCldSharedComment-zENT-1170', - 'zCldSharedComment-zOPT-1171', - 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1172', - 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1173', - 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1174', - 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1175', - 'zCldSharedComment-CldFeedLikeCommentEntry Key-1176', - 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1177', - 'zCldSharedComment-Cloud GUID-1178', - 'zCompAssetAttr-zPK-1179', - 'zCompAssetAttr-zEnt-1180', - 'zCompAssetAttr-zOpt-1181', - 'zCompAssetAttr-Asset Key-1182', - 'zDetFace-zPK-1183', - 'zDetFace-zEnt-1184', - 'zDetFace.zOpt-1185', - 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-1186', - 'zDetFace-Person= zPerson-zPK-1187', - 'zDetFace-Person Being Key Face-1188', - 'zDetFace-Face Print-1189', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1190', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1191', - 'zDetFace-UUID-1192', - 'zDetFaceGroup-zPK-1193', - 'zDetFaceGroup-zENT-1194', - 'zDetFaceGroup-zOPT-1195', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-1196', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-1197', - 'zDetFaceGroup-UUID-1198', - 'zDetFacePrint-zPK-1199', - 'zDetFacePrint-zEnt-1200', - 'zDetFacePrint-zOpt-1201', - 'zDetFacePrint-Face Key-1202', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-1203', - 'zExtAttr-zENT-1204', - 'zExtAttr-zOPT-1205', - 'zExtAttr-Asset Key-1206', - 'zFaceCrop-zPK-1207', - 'zFaceCrop-zEnt-1208', - 'zFaceCrop-zOpt-1209', - 'zFaceCrop-Asset Key-1210', - 'zFaceCrop-Invalid Merge Canidate Person UUID-1211', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1212', - 'zFaceCrop-Face Key-1213', - 'zFaceCrop-UUID-1214', - 'zGenAlbum-zPK=26AlbumLists= 26Albums-1215', - 'zGenAlbum-zENT-1216', - 'zGenAlbum-zOpt-1217', - 'zGenAlbum-Key Asset-Key zAsset-zPK-1218', - 'zGenAlbum-Secondary Key Asset-1219', - 'zGenAlbum-Tertiary Key Asset-1220', - 'zGenAlbum-Custom Key Asset-1221', - 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1222', - 'zGenAlbum-FOK Parent Folder-1223', - 'zGenAlbum-UUID-1224', - 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1225', - 'zGenAlbum-Project Render UUID-1226', - 'zIntResou-zPK-1227', - 'zIntResou-zENT-1228', - 'zIntResou-zOPT-1229', - 'zIntResou-Asset= zAsset_zPK-1230', - 'zIntResou-Fingerprint-1231', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-1232', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1233', - 'zMedAnlyAstAttr-zEnt-1234', - 'zMedAnlyAstAttr-zOpt-1235', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-1236', - 'zPerson-zPK=zDetFace-Person-1237', - 'zPerson-zEnt-1238', - 'zPerson-zOpt-1239', - 'zPerson-KeyFace=zDetFace-zPK-1240', - 'zPerson-Assoc Face Group Key-1241', - 'zPerson-Person UUID-1242', - 'zSceneP-zPK-1243', - 'zSceneP-zENT-1244', - 'zSceneP-zOPT-1245', - 'zShare-zPK-1246', - 'zShare-zENT-1247', - 'zShare-zOPT-1248', - 'zShare-UUID-1249', - 'SPLzShare-UUID-1250', - 'zShare-Scope ID = store.cloudphotodb-1251', - 'zSharePartic-zPK-1252', - 'zSharePartic-zENT-1253', - 'zSharePartic-zOPT-1254', - 'zSharePartic-Share Key= zShare-zPK-1255', - 'zSharePartic-UUID-1256', - 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1257', - 'zUnmAdj-zOPT-1258', - 'zUnmAdj-zENT-1259', - 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1260', - 'zUnmAdj-UUID-1261', - 'zUnmAdj-Other Adjustments Fingerprint-1262', - 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1263', - 'z25AlbumList-25Albums= zGenAlbum-zPK-1264', - 'z25AlbumList-Album List Key-1265', - 'z25AlbumList-FOK25Albums Key-1266', - 'z26Assets-26Albums= zGenAlbum-zPK-1267', - 'z26Assets-3Asset Key= zAsset-zPK in the Album-1268', - 'z26Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1269') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph94.2-iOS14_Ref_for_Asset_Analysis-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph94.2-iOS14_Ref_for_Asset_Analysis-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) + ''' - else: - logfunc('No data available for iOS 14 Syndication.photoslibrary-database-Photos.sqlite') + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], + row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], + row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], + row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], + row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], + row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], + row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], + row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], + row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], + row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], + row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], + row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], + row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], + row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], + row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], + row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], + row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], + row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], + row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], + row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], + row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], + row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], + row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], + row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], + row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], + row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], + row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], + row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], + row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], + row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], + row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], + row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], + row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], + row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], + row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], + row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], + row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], + row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], + row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], + row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], + row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], + row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], + row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], + row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], + row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], + row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], + row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], + row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], + row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], + row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], + row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], + row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], + row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], + row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], + row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], + row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], + row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], + row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], + row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], + row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], + row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], + row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], + row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], + row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], + row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], + row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], + row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], + row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], + row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], + row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], + row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], + row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], + row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], + row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], + row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], + row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], + row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], + row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], + row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], + row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], + row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], + row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], + row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], + row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], + row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], + row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], + row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], + row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], + row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], + row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], + row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], + row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], + row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], + row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], + row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], + row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], + row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], + row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], + row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], + row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], + row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093], + row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100], + row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107], + row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114], + row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121], + row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128], + row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135], + row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142], + row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149], + row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156], + row[1157], row[1158], row[1159], row[1160], row[1161], row[1162], row[1163], + row[1164], row[1165], row[1166], row[1167], row[1168], row[1169], row[1170], + row[1171], row[1172], row[1173], row[1174], row[1175], row[1176], row[1177], + row[1178], row[1179], row[1180], row[1181], row[1182], row[1183], row[1184], + row[1185], row[1186], row[1187], row[1188], row[1189], row[1190], row[1191], + row[1192], row[1193], row[1194], row[1195], row[1196], row[1197], row[1198], + row[1199], row[1200], row[1201], row[1202], row[1203], row[1204], row[1205], + row[1206], row[1207], row[1208], row[1209], row[1210], row[1211], row[1212], + row[1213], row[1214], row[1215], row[1216], row[1217], row[1218], row[1219], + row[1220], row[1221], row[1222], row[1223], row[1224], row[1225], row[1226], + row[1227], row[1228], row[1229], row[1230], row[1231], row[1232], row[1233], + row[1234], row[1235], row[1236], row[1237], row[1238], row[1239], row[1240], + row[1241], row[1242], row[1243], row[1244], row[1245], row[1246], row[1247], + row[1248], row[1249], row[1250], row[1251], row[1252], row[1253], row[1254], + row[1255], row[1256], row[1257], row[1258], row[1259], row[1260], row[1261], + row[1262], row[1263], row[1264], row[1265], row[1266], row[1267], row[1268], + row[1269])) - db.close() - return + data_headers = (('zAsset-Added Date-0', 'datetime'), + 'zAsset- SortToken -CameraRoll-1', + 'zAsset Complete-2', + 'zAsset-zPK-4QueryStart-3', + 'zAddAssetAttr-zPK-4QueryStart-4', + 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', + 'zAddAssetAttr-Master Fingerprint-4TableStart-6', + 'zIntResou-Fingerprint-4TableStart-7', + 'zAsset-Cloud is My Asset-8', + 'zAsset-Cloud is deletable-Asset-9', + 'zAsset-Cloud_Local_State-10', + 'zAsset-Visibility State-11', + 'zExtAttr-Camera Make-12', + 'zExtAttr-Camera Model-13', + 'zExtAttr-Lens Model-14', + 'zExtAttr-Flash Fired-15', + 'zExtAttr-Focal Lenght-16', + 'zAsset-Derived Camera Capture Device-17', + 'zAddAssetAttr-Camera Captured Device-18', + 'zAddAssetAttr-Imported by-19', + 'zCldMast-Imported By-20', + 'zAddAssetAttr-Creator Bundle ID-21', + 'zAddAssetAttr-Imported By Display Name-22', + 'zCldMast-Imported by Bundle ID-23', + 'zCldMast-Imported by Display Name-24', + 'zAsset-Saved Asset Type-25', + 'zAsset-Directory-Path-26', + 'zAsset-Filename-27', + 'zAddAssetAttr- Original Filename-28', + 'zCldMast- Original Filename-29', + ('zAsset-Date Created-30', 'datetime'), + ('zCldMast-Creation Date-31', 'datetime'), + ('zIntResou-CldMst Date Created-32', 'datetime'), + 'zAddAssetAttr-Time Zone Name-33', + 'zAddAssetAttr-Time Zone Offset-34', + 'zAddAssetAttr-Inferred Time Zone Offset-35', + 'zAddAssetAttr-EXIF-String-36', + ('zAsset-Modification Date-37', 'datetime'), + ('zAsset-Last Shared Date-38', 'datetime'), + 'zCldMast-Cloud Local State-39', + ('zCldMast-Import Date-40', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-41', 'datetime'), + 'zAddAssetAttr-Import Session ID-4QueryStart-42', + ('zAddAssetAttr-Alt Import Image Date-43', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-44', + ('zAsset-Cloud Batch Publish Date-45', 'datetime'), + ('zAsset-Cloud Server Publish Date-46', 'datetime'), + 'zAsset-Cloud Download Requests-47', + 'zAsset-Cloud Batch ID-48', + 'zAddAssetAttr-Upload Attempts-49', + 'zAsset-Latitude-50', + 'zExtAttr-Latitude-51', + 'zAsset-Longitude-52', + 'zExtAttr-Longitude-53', + 'zAddAssetAttr-GPS Horizontal Accuracy-54', + 'zAddAssetAttr-Location Hash-55', + 'zAddAssetAttr-Shifted Location Valid-56', + 'zAddAssetAttr-Shifted Location Data-57', + 'zAddAssetAttr-Reverse Location Is Valid-58', + 'zAddAssetAttr-Reverse Location Data-59', + 'ParentzGenAlbum-UUID-4QueryStart-60', + 'zGenAlbum-UUID-4QueryStart-61', + 'ParentzGenAlbum-Cloud GUID-4QueryStart-62', + 'zGenAlbum-Cloud GUID-4QueryStart-63', + 'zCldShareAlbumInvRec-Album GUID-4QueryStart-64', + 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-65', + 'zGenAlbum-Project Render UUID-4QueryStart-66', + 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-67', + 'zGenAlbum-Cloud_Local_State-4QueryStart-68', + ('ParentzGenAlbum- Creation Date- 4QueryStart-69', 'datetime'), + ('zGenAlbum- Creation Date- 4QueryStart-70', 'datetime'), + ('zGenAlbum- Cloud Creation Date- 4QueryStart-71', 'datetime'), + ('zGenAlbum- Start Date- 4QueryStart-72', 'datetime'), + ('zGenAlbum- End Date- 4QueryStart-73', 'datetime'), + ('zGenAlbum-Cloud Subscription Date- 4QueryStart-74', 'datetime'), + 'ParentzGenAlbum- Title- 4QueryStart-75', + 'zGenAlbum- Title-User&System Applied- 4QueryStart-76', + 'zGenAlbum-Import Session ID-SWY- 4QueryStart-77', + 'zGenAlbum-Creator Bundle ID- 4QueryStart-78', + 'zGenAlbum-zENT- Entity- 4QueryStart-79', + 'ParentzGenAlbum- Kind- 4QueryStart-80', + 'zGenAlbum-Album Kind- 4QueryStart-81', + 'AAAzCldMastMedData-zOPT-82', + 'zAddAssetAttr-Media Metadata Type-83', + 'AAAzCldMastMedData-Data-84', + 'CldMasterzCldMastMedData-zOPT-85', + 'zCldMast-Media Metadata Type-86', + 'CMzCldMastMedData-Data-87', + 'zAsset-Orientation-88', + 'zAddAssetAttr-Original Orientation-89', + 'zAsset-Kind-90', + 'zAsset-Kind-Sub-Type-91', + 'zAddAssetAttr-Cloud Kind Sub Type-92', + 'zAsset-Playback Style-93', + 'zAsset-Playback Variation-94', + 'zAsset-Video Duration-95', + 'zExtAttr-Duration-96', + 'zAsset-Video CP Duration-97', + 'zAddAssetAttr-Video CP Duration Time Scale-98', + 'zAsset-Video CP Visibility State-99', + 'zAddAssetAttr-Video CP Display Value-100', + 'zAddAssetAttr-Video CP Display Time Scale-101', + 'zIntResou-Datastore Class ID-102', + 'zAsset-Cloud Placeholder Kind-103', + 'zIntResou-Local Availability-104', + 'zIntResou-Local Availability Target-105', + 'zIntResou-Cloud Local State-106', + 'zIntResou-Remote Availability-107', + 'zIntResou-Remote Availability Target-108', + 'zIntResou-Transient Cloud Master-109', + 'zIntResou-Side Car Index-110', + 'zIntResou- File ID-111', + 'zIntResou-Version-112', + 'zAddAssetAttr- Original-File-Size-113', + 'zIntResou-Resource Type-114', + 'zIntResou-Datastore Sub-Type-115', + 'zIntResou-Cloud Source Type-116', + 'zIntResou-Data Length-117', + 'zIntResou-Recipe ID-118', + ('zIntResou-Cloud Last Prefetch Date-119', 'datetime'), + 'zIntResou-Cloud Prefetch Count-120', + ('zIntResou- Cloud-Last-OnDemand Download-Date-121', 'datetime'), + 'zAsset-Uniform Type ID-122', + 'zAsset-Original Color Space-123', + 'zCldMast-Uniform_Type_ID-124', + 'zCldMast-Full Size JPEG Source-125', + 'zAsset-HDR Gain-126', + 'zExtAttr-Codec-127', + 'zCldMast-Codec Name-128', + 'zCldMast-Video Frame Rate-129', + 'zCldMast-Placeholder State-130', + 'zAsset-Depth_Type-131', + 'zAsset-Avalanche UUID-4TableStart-132', + 'zAsset-Avalanche_Pick_Type-BurstAsset-133', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-134', + 'zAddAssetAttr-Cloud Recovery State-135', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-136', + 'zAsset-Deferred Processing Needed-137', + 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-138', + 'zAddAssetAttr-Deferred Processing Candidate Options-139', + 'zAsset-Has Adjustments-Camera-Effects-Filters-140', + 'zUnmAdj-UUID-4TableStart-141', + 'zAsset-Adjustment Timestamp-142', + 'zUnmAdj-Adjustment Timestamp-143', + 'zAddAssetAttr-Editor Bundle ID-144', + 'zUnmAdj-Editor Localized Name-145', + 'zUnmAdj-Adjustment Format ID-146', + 'zAddAssetAttr-Montage-147', + 'zUnmAdj-Adjustment Render Types-148', + 'zUnmAdj-Adjustment Format Version-149', + 'zUnmAdj-Adjustment Base Image Format-150', + 'zAsset-Favorite-151', + 'zAsset-Hidden-152', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-153', + ('zAsset-Trashed Date-154', 'datetime'), + 'zIntResou-Trash State-155', + ('zIntResou-Trashed Date-156', 'datetime'), + 'zAsset-Cloud Delete State-157', + 'zIntResou-Cloud Delete State-158', + 'zAddAssetAttr-PTP Trashed State-159', + 'zIntResou-PTP Trashed State-160', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-161', + 'zMedAnlyAstAttr-Media Analysis Timestamp-162', + ('zAsset-Analysis State Modificaion Date-163', 'datetime'), + 'zAddAssetAttr- Pending View Count-164', + 'zAddAssetAttr- View Count-165', + 'zAddAssetAttr- Pending Play Count-166', + 'zAddAssetAttr- Play Count-167', + 'zAddAssetAttr- Pending Share Count-168', + 'zAddAssetAttr- Share Count-169', + 'zAddAssetAttr-Allowed for Analysis-170', + 'zAddAssetAttr-Scene Analysis Version-171', + 'zAddAssetAttr-Scene Analysis Timestamp-172', + 'zAddAssetAttr-Destination Asset Copy State-173', + 'zAddAssetAttr-Variation Suggestions States-174', + 'zAsset-High Frame Rate State-175', + 'zAsset-Video Key Frame Time Scale-176', + 'zAsset-Video Key Frame Value-177', + 'zExtAttr-ISO-178', + 'zExtAttr-Metering Mode-179', + 'zExtAttr-Sample Rate-180', + 'zExtAttr-Track Format-181', + 'zExtAttr-White Balance-182', + 'zExtAttr-Aperture-183', + 'zExtAttr-BitRate-184', + 'zExtAttr-Exposure Bias-185', + 'zExtAttr-Frames Per Second-186', + 'zExtAttr-Shutter Speed-187', + 'zAsset-Height-188', + 'zAddAssetAttr-Original Height-189', + 'zIntResou-Unoriented Height-190', + 'zAsset-Width-191', + 'zAddAssetAttr-Original Width-192', + 'zIntResou-Unoriented Width-193', + 'zShare-Thumbnail Image Data-194', + 'SPLzShare-Thumbnail Image Data-195', + 'zAsset-Thumbnail Index-196', + 'zAddAssetAttr-Embedded Thumbnail Height-197', + 'zAddAssetAttr-Embedded Thumbnail Length-198', + 'zAddAssetAttr-Embedded Thumbnail Offset-199', + 'zAddAssetAttr-Embedded Thumbnail Width-200', + 'zAsset-Packed Acceptable Crop Rect-201', + 'zAsset-Packed Badge Attributes-202', + 'zAsset-Packed Preferred Crop Rect-203', + 'zAsset-Curation Score-204', + 'zAsset-Camera Processing Adjustment State-205', + 'zAsset-Depth Type-206', + 'zAddAssetAttr-Orig Resource Choice-207', + 'zAddAssetAttr-Spatial Over Capture Group ID-208', + 'zAddAssetAttr-Place Annotation Data-209', + 'zAddAssetAttr-Distance Identity-210', + 'zAddAssetAttr-Edited IPTC Attributes-211', + 'zAssetDes-Long Description-212', + 'zAddAssetAttr-Asset Description-213', + 'zAddAssetAttr-Title-Comments via Cloud Website-214', + 'zAddAssetAttr-Accessibility Description-215', + 'zAddAssetAttr-Photo Stream Tag ID-216', + ('zCldFeedEnt-Entry Date-217', 'datetime'), + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-218', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-219', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-220', + 'zCldFeedEnt-Entry Priority Number-221', + 'zCldFeedEnt-Entry Type Number-222', + 'zCldSharedComment-Cloud GUID-4TableStart-223', + ('zCldSharedComment-Date-224', 'datetime'), + ('zCldSharedComment-Comment Client Date-225', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-226', 'datetime'), + 'zCldSharedComment-Type-227', + 'zCldSharedComment-Comment Text-228', + 'zCldSharedComment-Commenter Hashed Person ID-229', + 'zCldSharedComment-Batch Comment-230', + 'zCldSharedComment-Is a Caption-231', + 'zAsset-Cloud Has Comments by Me-232', + 'zCldSharedComment-Is My Comment-233', + 'zCldSharedComment-Is Deletable-234', + 'zAsset-Cloud Has Comments Conversation-235', + 'zAsset-Cloud Has Unseen Comments-236', + 'zCldSharedComment-Liked-237', + 'zAddAssetAttr-Share Type-238', + 'zShare-UUID-CMM-4TableStart-239', + 'SPLzShare-UUID-SPL-4TableStart-240', + 'zShare-zENT-CMM-241', + 'SPLzShare-zENT-SPL-242', + 'zShare-Status-CMM-243', + 'SPLzShare-Status-SPL-244', + 'zShare-Scope Type-CMM-245', + 'SPLzShare-Scope Type-SPL-246', + 'zShare-Local Publish State-CMM-247', + 'SPLzShare-Local Publish State-SPL-248', + 'zShare-Public Permission-CMM-249', + 'SPLzShare-Public Permission-SPL-250', + 'zShare-Originating Scope ID-CMM-251', + 'SPLzShare-Originating Scope ID-SPL-252', + 'zShare-Scope ID-CMM-253', + 'SPLzShare-Scope ID-SPL-254', + 'zShare-Title-CMM-255', + 'SPLzShare-Title-SPL-256', + 'zShare-Share URL-CMM-257', + 'SPLzShare-Share URL-SPL-258', + ('zShare-Creation Date-CMM-259', 'datetime'), + ('SPLzShare-Creation Date-SPL-260', 'datetime'), + ('zShare-Start Date-CMM-261', 'datetime'), + ('SPLzShare-Start Date-SPL-262', 'datetime'), + ('zShare-End Date-CMM-263', 'datetime'), + ('SPLzShare-End Date-SPL-264', 'datetime'), + ('zShare-Expiry Date-CMM-265', 'datetime'), + ('SPLzShare-Expiry Date-SPL-266', 'datetime'), + 'zShare-Asset Count-CMM-267', + 'SPLzShare-Asset Count-SPL-268', + 'zShare-Photos Count-CMM-269', + 'SPLzShare-Photos Count-CMM-SPL-270', + 'zShare-Uploaded Photos Count-CMM-271', + 'SPLzShare-Uploaded Photos Count-SPL-272', + 'zShare-Videos Count-CMM-273', + 'SPLzShare-Videos Count-SPL-274', + 'zShare-Uploaded Videos Count-CMM-275', + 'SPLzShare-Uploaded Videos Count-SPL-276', + 'zShare-Force Sync Attempted-CMM-277', + 'SPLzShare-Force Sync Attempted-SPL-278', + 'zShare-Should Notify On Upload Completion-CMM-279', + 'SPLzShare-Should Notify On Upload Completion-SPL-280', + 'zShare-Trashed State-CMM-281', + 'SPLzShare-Trashed State-SPL-282', + 'zShare-Cloud Delete State-CMM-283', + 'SPLzShare-Cloud Delete State-SPL-284', + 'zShare-Should Ignor Budgets-CMM-285', + 'SPLzShare-Should Ignor Budgets-SPL-286', + 'zSharePartic-UUID-4TableStart-287', + 'SPLzSharePartic-UUID-4TableStart-288', + 'zSharePartic-Acceptance Status-289', + 'SPLzSharePartic-Acceptance Status-290', + 'zSharePartic-Is Current User-291', + 'SPLzSharePartic-Is Current User-292', + 'zSharePartic-Role-293', + 'SPLzSharePartic-Role-294', + 'zSharePartic-Premission-295', + 'SPLzSharePartic-Premission-296', + 'zSharePartic-User ID-297', + 'SPLzSharePartic-User ID-298', + 'SPLzSharePartic-zPK-4TableStart-299', + 'zSharePartic-zPK-4TableStart-300', + 'zSharePartic-Email Address-301', + 'SPLzSharePartic-Email Address-302', + 'zSharePartic-Phone Number-303', + 'SPLzSharePartic-Phone Number-304', + 'ParentzGenAlbum-UUID-4TableStart-305', + 'zGenAlbum-UUID-4TableStart-306', + 'ParentzGenAlbum-Cloud GUID-4TableStart-307', + 'zGenAlbum-Cloud GUID-4TableStart-308', + 'zCldShareAlbumInvRec-Album GUID-4TableStart-309', + 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-310', + 'zGenAlbum-Project Render UUID-4TableStart-311', + 'zAlbumList-Needs Reordering Number-312', + 'zGenAlbum-zENT- Entity-313', + 'ParentzGenAlbum-Kind-314', + 'zGenAlbum-Album Kind-315', + 'ParentzGenAlbum-Cloud-Local-State-316', + 'zGenAlbum-Cloud_Local_State-317', + 'ParentzGenAlbum- Title-318', + 'zGenAlbum- Title-User&System Applied-319', + 'zGenAlbum-Import Session ID-SWY-320', + 'zGenAlbum-Creator Bundle ID-321', + ('ParentzGenAlbum-Creation Date-322', 'datetime'), + ('zGenAlbum-Creation Date-323', 'datetime'), + ('zGenAlbum-Cloud Creation Date-324', 'datetime'), + ('zGenAlbum-Start Date-325', 'datetime'), + ('zGenAlbum-End Date-326', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-327', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-328', + 'zGenAlbum-Pending Items Count-329', + 'ParentzGenAlbum-Pending Items Type-330', + 'zGenAlbum-Pending Items Type-331', + 'zGenAlbum- Cached Photos Count-332', + 'zGenAlbum- Cached Videos Count-333', + 'zGenAlbum- Cached Count-334', + 'ParentzGenAlbum-Sync Event Order Key-335', + 'zGenAlbum-Sync Event Order Key-336', + 'zGenAlbum-Has Unseen Content-337', + 'zGenAlbum-Unseen Asset Count-338', + 'zGenAlbum-is Owned-339', + 'zGenAlbum-Cloud Relationship State-340', + 'zGenAlbum-Cloud Relationship State Local-341', + 'zGenAlbum-Cloud Owner Mail Key-342', + 'zGenAlbum-Cloud Owner Frist Name-343', + 'zGenAlbum-Cloud Owner Last Name-344', + 'zGenAlbum-Cloud Owner Full Name-345', + 'zGenAlbum-Cloud Person ID-346', + 'zAsset-Cloud Owner Hashed Person ID-347', + 'zGenAlbum-Cloud Owner Hashed Person ID-348', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-349', + 'zGenAlbum-Cloud Multi-Contributors Enabled-350', + 'zGenAlbum-Cloud Album Sub Type-351', + ('zGenAlbum-Cloud Contribution Date-352', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-353', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-354', + 'ParentzGenAlbum-Pinned-355', + 'zGenAlbum-Pinned-356', + 'ParentzGenAlbum-Custom Sort Key-357', + 'zGenAlbum-Custom Sort Key-358', + 'ParentzGenAlbum-Custom Sort Ascending-359', + 'zGenAlbum-Custom Sort Ascending-360', + 'ParentzGenAlbum-Is Prototype-361', + 'zGenAlbum-Is Prototype-362', + 'ParentzGenAlbum-Project Document Type-363', + 'zGenAlbum-Project Document Type-364', + 'ParentzGenAlbum-Custom Query Type-365', + 'zGenAlbum-Custom Query Type-366', + 'ParentzGenAlbum-Trashed State-367', + ('ParentzGenAlbum-Trash Date-368', 'datetime'), + 'zGenAlbum-Trashed State-369', + ('zGenAlbum-Trash Date-370', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-371', + 'zGenAlbum-Cloud Delete State-372', + 'zGenAlbum-Cloud Owner Whitelisted-373', + 'zGenAlbum-Cloud Local Public URL Enabled-374', + 'zGenAlbum-Cloud Public URL Enabled-375', + 'zGenAlbum-Public URL-376', + 'zGenAlbum-Key Asset Face Thumb Index-377', + 'zGenAlbum-Project Text Extension ID-378', + 'zGenAlbum-User Query Data-379', + 'zGenAlbum-Custom Query Parameters-380', + 'zGenAlbum-Project Data-381', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-382', + 'zCldShareAlbumInvRec-Invitation State Local-383', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-384', + ('zCldShareAlbumInvRec-Subscription Date-385', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-386', + 'zCldShareAlbumInvRec-Invitee Last Name-387', + 'zCldShareAlbumInvRec-Invitee Full Name-388', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-389', + 'zCldShareAlbumInvRec-Invitee Email Key-390', + 'zGenAlbum-Key Asset Face ID-391', + 'zFaceCrop-Face Area Points-392', + 'zAsset-Face Adjustment Version-393', + 'zDetFace-Asset Visible-394', + 'zPerson-Face Count-395', + 'zDetFace-Face Crop-396', + 'zDetFace-Face Algorithm Version-397', + 'zDetFace-Adjustment Version-398', + 'zDetFace-UUID-4TableStart-399', + 'zPerson-Person UUID-4TableStart-400', + 'zDetFace-Confirmed Face Crop Generation State-401', + 'zDetFace-Manual-402', + 'zDetFace-VIP Model Type-403', + 'zDetFace-Name Source-404', + 'zDetFace-Cloud Name Source-405', + 'zPerson-Person URI-406', + 'zPerson-Display Name-407', + 'zPerson-Full Name-408', + 'zPerson-Cloud Verified Type-409', + 'zFaceCrop-State-410', + 'zFaceCrop-Type-411', + 'zFaceCrop-UUID-4TableStart-412', + 'zPerson-Type-413', + 'zPerson-Verified Type-414', + 'zPerson-Gender Type-415', + 'zDetFace-Gender Type-416', + 'zDetFace-Center X-417', + 'zDetFace-Center Y-418', + 'zPerson-Age Type Estimate-419', + 'zDetFace-Age Type Estimate-420', + 'zDetFace-Hair Color Type-421', + 'zDetFace-Facial Hair Type-422', + 'zDetFace-Has Smile-423', + 'zDetFace-Smile Type-424', + 'zDetFace-Lip Makeup Type-425', + 'zDetFace-Eyes State-426', + 'zDetFace-Is Left Eye Closed-427', + 'zDetFace-Is Right Eye Closed-428', + 'zDetFace-Eye Glasses Type-429', + 'zDetFace-Eye Makeup Type-430', + 'zDetFace-Cluster Squence Number Key-431', + 'zDetFace-Grouping ID-432', + 'zDetFace-Master ID-433', + 'zDetFace-Quality-434', + 'zDetFace-Quality Measure-435', + 'zDetFace-Source Height-436', + 'zDetFace-Source Width-437', + 'zDetFace-Hidden-Asset Hidden-438', + 'zDetFace-In Trash-Recently Deleted-439', + 'zDetFace-Cloud Local State-440', + 'zDetFace-Training Type-441', + 'zDetFace.Pose Yaw-442', + 'zDetFace-Roll-443', + 'zDetFace-Size-444', + 'zDetFace-Cluster Squence Number-445', + 'zDetFace-Blur Score-446', + 'zDetFacePrint-Face Print Version-447', + 'zMedAnlyAstAttr-Face Count-448', + 'zDetFaceGroup-UUID-4TableStart-449', + 'zDetFaceGroup-Person Builder State-450', + 'zDetFaceGroup-UnNamed Face Count-451', + 'zPerson-In Person Naming Model-452', + 'zPerson-Key Face Pick Source Key-453', + 'zPerson-Manual Order Key-454', + 'zPerson-Question Type-455', + 'zPerson-Suggested For Client Type-456', + 'zPerson-Merge Target Person-457', + 'zPerson-Cloud Local State-458', + 'zFaceCrop-Cloud Local State-459', + 'zFaceCrop-Cloud Type-460', + 'zPerson-Cloud Delete State-461', + 'zFaceCrop-Cloud Delete State-462', + 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-463', + 'zMemory-zPK-464', + 'z3MemoryBCAs-3CuratedAssets = zAsset-zPK-465', + 'z3MemoryBCAs-40MemoriesBeingCuratedAssets = zMemory-zPK-466', + 'z3MemoryBECAs-3ExtCuratedAssets = zAsset-zPK-467', + 'z3MemoryBECAs-40MemoriesBeingExtCuratedAssets = zMemory-zPK-468', + 'z3MemoryBMCAs-3MovieCuratedAssets = zAsset-zPK-469', + 'z3MemoryBMCAs-40MemoriesBeingMovieCuratedAssets = zMemory-zPK-470', + 'z3MemoryBRAs-3RepresentativeAssets = zAsset-zPK-471', + 'z3MemoryBRAs-40RepresentativeAssets = zMemory-zPK-472', + 'zMemory-Key Asset = zAsset-zPK-473', + 'zMemory-UUID-474', + 'zMemory-SubTitle-475', + 'zMemory-Title-476', + 'zMemory-Category-477', + 'zMemory-SubCategory-478', + ('zMemory-Creation Date-479', 'datetime'), + 'zMemory-User Created-480', + 'zMemory-Favorite Memory-481', + 'zMemory-Score-482', + 'zMemory-View Count-483', + 'zMemory-Play Count-484', + 'zMemory-Rejected-485', + 'zMemory-Share Count-486', + ('zMemory-Last Movie Play Date-487', 'datetime'), + ('zMemory-Last Viewed Date-488', 'datetime'), + 'zMemory-Pending-489', + 'zMemory-Pending Play Count Memory-490', + 'zMemory-Pending Share Count Memory-491', + 'zMemory-Pending View Count Memory-492', + 'zMemory-Featured State-493', + 'zMemory-Photos Graph Version-494', + 'zMemory-AssetListPredicte-495', + 'zMemory-Notification State-496', + 'zMemory-Cloud Local State-497', + 'zMemory-Cloud Delete State-498', + 'YearzMomentList-UUID-499', + 'YearzMomentList-zPK-500', + 'zMoment-Year Moment List-501', + 'YearzMomentList-Sort Index-502', + 'YearzMomentList-Granularity Level-503', + ('YearzMomentList-Start Date-504', 'datetime'), + ('YearzMomentList-Representative Date-505', 'datetime'), + ('YearzMomentList-End Date-506', 'datetime'), + 'YearzMomentList-Trashed State-507', + 'MegaYMzMomentList-UUID-508', + 'MegaYMzMomentList-zPK-509', + 'zMoment-Mega Moment List-510', + 'MegaYMzMomentList-Sort Index-511', + 'MegaYMzMomentList-Granularity Level-512', + ('MegaYMzMomentList-Start Date-513', 'datetime'), + ('MegaYMzMomentList-Representative Date-514', 'datetime'), + ('MegaYMzMomentList-End Date-515', 'datetime'), + 'MegaYMzMomentList-Trashed State-516', + 'zMoment-UUID-517', + 'zMoment-zPK-518', + 'zMoment-Aggregation Score-519', + ('zMoment-Start Date-520', 'datetime'), + ('zMoment-Representative Date-521', 'datetime'), + 'zMoment-Timezone Offset-522', + ('zMoment-Modification Date-523', 'datetime'), + ('zMoment-End Date-524', 'datetime'), + 'zMoment-SubTitle-525', + 'zMoment-Title-526', + 'zMoment-Processed Location-527', + 'zMoment-Approx Latitude-528', + 'zMoment-Approx Longitude-529', + 'zMoment-GPS Horizontal Accuracy-530', + 'zMoment-Cache Count-531', + 'zMoment-Cached Photos Count-532', + 'zMoment-Cached Videos Count-533', + 'zMoment-Trashed State-534', + 'zMoment-Highlight Key-535', + 'zAsset-Highlight Visibility Score-536', + 'YearParzPhotosHigh-UUID-537', + 'YearParzPhotosHigh-zPK-538', + 'YearParzPhotosHigh-zENT-539', + 'YearParzPhotosHigh-zOPT-540', + 'YearParzPhotosHigh-Promotion Score-541', + 'YearParzPhotosHigh-Title-542', + 'YearParzPhotosHigh-Verbose Smart Description-543', + ('YearParzPhotosHigh-Start Date-544', 'datetime'), + ('YearParzPhotosHigh-End Date-545', 'datetime'), + 'YearParzPhotosHigh-Year Key Asset-546', + 'YearParzPhotosHigh-Is Curated-547', + 'YearParzPhotosHigh-Kind-548', + 'YearParzPhotosHigh-Category-549', + 'YearParzPhotosHigh-Visibility State-550', + 'YearParzPhotosHigh-Enrichment State-551', + 'YearParzPhotosHigh-Enrichment Version-552', + 'YearParzPhotosHigh-Highlight Version-553', + 'YMParzPhotosHigh-UUID-554', + 'YMParzPhotosHigh-zPK-555', + 'YMParzPhotosHigh-Parent PH Key-556', + 'YMParzPhotosHigh-zENT-557', + 'YMParzPhotosHigh-zOPT-558', + 'YMParzPhotosHigh-Promotion Score-559', + 'YMParzPhotosHigh-Title-560', + 'YMParzPhotosHigh-Subtitle-561', + 'YMParzPhotosHigh-Verbose Smart Description-562', + ('YMParzPhotosHigh-Start Date-563', 'datetime'), + ('YMParzPhotosHigh-End Date-564', 'datetime'), + 'YMParzPhotosHigh-Month First Asset-565', + 'YMParzPhotosHigh-Month Key Asset-566', + 'YMParzPhotosHigh-Is Curated-567', + 'YMParzPhotosHigh-Kind-568', + 'YMParzPhotosHigh-Category-569', + 'YMParzPhotosHigh-Visibility State-570', + 'YMParzPhotosHigh-Enrichment State-571', + 'YMParzPhotosHigh-Enrichment Version-572', + 'YMParzPhotosHigh-Highlight Version-573', + 'DGParzPhotosHigh-UUID-574', + 'DGParzPhotosHigh-zPK-575', + 'DGParzPhotosHigh-Parent PH Key-576', + 'DGParzPhotosHigh-zENT-577', + 'DGParzPhotosHigh-zOPT-578', + 'DGParzPhotosHigh-Promotion Score-579', + 'DGParzPhotosHigh-Title-580', + 'DGParzPhotosHigh-Subtitle-581', + 'DGParzPhotosHigh-Verbose Smart Description-582', + ('DGParzPhotosHigh-Start Date-583', 'datetime'), + ('DGParzPhotosHigh-End Date-584', 'datetime'), + 'DGParzPhotosHigh-Month First Asset-585', + 'DGParzPhotosHigh-Month Key Asset-586', + 'DGParzPhotosHigh-Is Curated-587', + 'DGParzPhotosHigh-Kind-588', + 'DGParzPhotosHigh-Category-589', + 'DGParzPhotosHigh-Visibility State-590', + 'DGParzPhotosHigh-Enrichment State-591', + 'DGParzPhotosHigh-Enrichment Version-592', + 'DGParzPhotosHigh-Highlight Version-593', + 'zAsset-Highlight Being Assets Key-594', + 'HBAzPhotosHigh-UUID-595', + 'HBAzPhotosHigh-zPK-596', + 'HBAzPhotosHigh-Parent PH Key-597', + 'HBAzPhotosHigh-zENT-598', + 'HBAzPhotosHigh-zOPT-599', + 'HBAzPhotosHigh-Promotion Score-600', + 'HBAzPhotosHigh-Title-601', + 'HBAzPhotosHigh-Subtitle-602', + 'HBAzPhotosHigh-Verbose Smart Description-603', + ('HBAzPhotosHigh-Start Date-604', 'datetime'), + 'HBAzPhotosHigh Start-Timezone Offset-605', + 'HBAzPhotosHigh-End Timezone Offset-606', + ('HBAzPhotosHigh-End Date-607', 'datetime'), + 'HBAzPhotosHigh-Asset Count-608', + 'HBAzPhotosHigh-Summary Count-609', + 'HBAzPhotosHigh-Extended Count-610', + 'HBAzPhotosHigh-Day Group Assets Count-611', + 'HBAzPhotosHigh-Day Group Ext Assets Count-612', + 'HBAzPhotosHigh-Day Group Summary Assets Count-613', + 'HBAzPhotosHigh-Key Asset-614', + 'HBAzPhotosHigh-Is Curated-615', + 'HBAzPhotosHigh-Type-616', + 'HBAzPhotosHigh-Kind-617', + 'HBAzPhotosHigh-Category-618', + 'HBAzPhotosHigh-Visibility State-619', + 'HBAzPhotosHigh-Mood-620', + 'HBAzPhotosHigh-Enrichment State-621', + 'HBAzPhotosHigh-Enrichment Version-622', + 'HBAzPhotosHigh-Highlight Version-623', + 'zAsset-Highlight Being Extended Assets Key-624', + 'HBEAzPhotosHigh-UUID-625', + 'HBEAzPhotosHigh-zPK-626', + 'HBEAzPhotosHigh-zENT-627', + 'HBEAzPhotosHigh-zOPT-628', + 'HBEAzPhotosHigh-Promotion Score-629', + 'HBEAzPhotosHigh-Title-630', + 'HBEAzPhotosHigh-Subtitle-631', + 'HBEAzPhotosHigh-Verbose Smart Description-632', + ('HBEAzPhotosHigh-Start Date-633', 'datetime'), + 'HBEAzPhotosHigh-Start Timezone Offset-634', + 'HBEAzPhotosHigh-End Timezone Offset-635', + ('HBEAzPhotosHigh-End Date-636', 'datetime'), + 'HBEAzPhotosHigh-Asset Count-637', + 'HBEAzPhotosHigh-Summary Count-638', + 'HBEAzPhotosHigh-Extended Count-639', + 'HBEAzPhotosHigh-Day Group Assets Count-640', + 'HBEAzPhotosHigh-Day Group Ext Assets Count-641', + 'HBEAzPhotosHigh-Day Group Summary Assets Count-642', + 'HBEAzPhotosHigh-Parent PH Key-643', + 'HBEAzPhotosHigh-Year Key Asset-644', + 'HBEAzPhotosHigh-Month First Asset-645', + 'HBEAzPhotosHigh-Month Key Asset-646', + 'HBEAzPhotosHigh-Key Asset-647', + 'HBEAzPhotosHigh-Parent Day Group PH Key-648', + 'HBEAzPhotosHigh-Day Group Key Asset-649', + 'HBEAzPhotosHigh-is Curated-650', + 'HBEAzPhotosHigh-Type-651', + 'HBEAzPhotosHigh-Kind-652', + 'HBEAzPhotosHigh-Category-653', + 'HBEAzPhotosHigh-Visibility State-654', + 'HBEAzPhotosHigh-Mood-655', + 'HBEAzPhotosHigh-Enrichment State-656', + 'HBEAzPhotosHigh-Enrichment Version-657', + 'HBEAzPhotosHigh-Highlight Version-658', + 'zAsset-Highlight Being Summary Assets Key-659', + 'HBSAzPhotosHigh-UUID-660', + 'HBSAzPhotosHigh-zPK-661', + 'HBSAzPhotosHigh-zENT-662', + 'HBSAzPhotosHigh-zOPT-663', + 'HBSAzPhotosHigh-Promotion Score-664', + 'HBSAzPhotosHigh-Title-665', + 'HBSAzPhotosHigh-Subtitle-666', + 'HBSAzPhotosHigh-Verbose Smart Description-667', + ('HBSAzPhotosHigh-Start Date-668', 'datetime'), + 'HBSAzPhotosHigh-Start Timezone Offset-669', + 'HBSAzPhotosHigh-End Timezone Offset-670', + ('HBSAzPhotosHigh-End Date-671', 'datetime'), + 'HBSAzPhotosHigh-Asset Count-672', + 'HBSAzPhotosHigh-Summary Count-673', + 'HBSAzPhotosHigh-Extended Count-674', + 'HBSAzPhotosHigh-Day Group Assets Count-675', + 'HBSAzPhotosHigh-Day Group Ext Assets Count-676', + 'HBSAzPhotosHigh-Day Group Summary Assets Count-677', + 'HBSAzPhotosHigh-Parent PH Key-678', + 'HBSAzPhotosHigh-Year Key Asset-679', + 'HBSAzPhotosHigh-Month First Asset-680', + 'HBSAzPhotosHigh-Month Key Asset-681', + 'HBSAzPhotosHigh-Key Asset-682', + 'HBSAzPhotosHigh-Parent Day Group PH Key-683', + 'HBSAzPhotosHigh-Day Group Key Asset-684', + 'HBSAzPhotosHigh-is Curated-685', + 'HBSAzPhotosHigh-Type-686', + 'HBSAzPhotosHigh-Kind-687', + 'HBSAzPhotosHigh-Category-688', + 'HBSAzPhotosHigh-Visibility State-689', + 'HBSAzPhotosHigh-Mood-690', + 'HBSAzPhotosHigh-Enrichment State-691', + 'HBSAzPhotosHigh-Enrichment Version-692', + 'HBSAzPhotosHigh-Highlight Version-693', + 'zAsset-Highlight Being Key Asset Key-694', + 'HBKAzPhotosHigh-UUID-695', + 'HBKAzPhotosHigh-zPK-696', + 'HBKAzPhotosHigh-zENT-697', + 'HBKAzPhotosHigh-zOPT-698', + 'HBKAzPhotosHigh-Promotion Score-699', + 'HBKAzPhotosHigh-Title-700', + 'HBKAzPhotosHigh-Subtitle-701', + 'HBKAzPhotosHigh-Verbose Smart Description-702', + ('HBKAzPhotosHigh-Start Date-703', 'datetime'), + 'HBKAzPhotosHigh-Start Timezone Offset-704', + 'HBKAzPhotosHigh-End Timezone Offset-705', + ('HBKAzPhotosHigh-End Date-706', 'datetime'), + 'HBKAzPhotosHigh-Asset Count-707', + 'HBKAzPhotosHigh-Summary Count-708', + 'HBKAzPhotosHigh-Extended Count-709', + 'HBKAzPhotosHigh-Day Group Assets Count-710', + 'HBKAzPhotosHigh-Day Group Ext Assets Count-711', + 'HBKAzPhotosHigh-Day Group Summary Assets Count-712', + 'HBKAzPhotosHigh-Parent PH Key-713', + 'HBKAzPhotosHigh-Year Key Asset-714', + 'HBKAzPhotosHigh-Month First Asset-715', + 'HBKAzPhotosHigh-Month Key Asset-716', + 'HBKAzPhotosHigh-Key Asset-717', + 'HBKAzPhotosHigh-Parent Day Group PH Key-718', + 'HBKAzPhotosHigh-Day Group Key Asset-719', + 'HBKAzPhotosHigh-is Curated-720', + 'HBKAzPhotosHigh-Type-721', + 'HBKAzPhotosHigh-Kind-722', + 'HBKAzPhotosHigh-Category-723', + 'HBKAzPhotosHigh-Visibility State-724', + 'HBKAzPhotosHigh-Mood-725', + 'HBKAzPhotosHigh-Enrichment State-726', + 'HBKAzPhotosHigh-Enrichment Version-727', + 'HBKAzPhotosHigh-Highlight Version-728', + 'zAsset-Day Group Highlight Being Assets Key-729', + 'DGHBAzPhotosHigh-UUID-730', + 'DGHBAzPhotosHigh-zPK-731', + 'DGHBAzPhotosHigh-zENT-732', + 'DGHBAzPhotosHigh-zOPT-733', + 'DGHBAzPhotosHigh-Promotion Score-734', + 'DGHBAzPhotosHigh-Title-735', + 'DGHBAzPhotosHigh-Subtitle-736', + 'DGHBAzPhotosHigh-Verbose Smart Description-737', + ('DGHBAzPhotosHigh-Start Date-738', 'datetime'), + 'DGHBAzPhotosHigh-Start Timezone Offset-739', + 'DGHBAzPhotosHigh-End Timezone Offset-740', + ('DGHBAzPhotosHigh-End Date-741', 'datetime'), + 'DGHBAzPhotosHigh-Asset Count-742', + 'DGHBAzPhotosHigh-Summary Count-743', + 'DGHBAzPhotosHigh-Extended Count-744', + 'DGHBAzPhotosHigh-Day Group Assets Count-745', + 'DGHBAzPhotosHigh-Day Group Ext Assets Count-746', + 'DGHBAzPhotosHigh-Day Group Summary Assets Count-747', + 'DGHBAzPhotosHigh-Parent PH Key-748', + 'DGHBAzPhotosHigh-Year Key Asset-749', + 'DGHBAzPhotosHigh-Month First Asset-750', + 'DGHBAzPhotosHigh-Month Key Asset-751', + 'DGHBAzPhotosHigh-Key Asset-752', + 'DGHBAzPhotosHigh-Parent Day Group PH Key-753', + 'DGHBAzPhotosHigh-Day Group Key Asset-754', + 'DGHBAzPhotosHigh-is Curated-755', + 'DGHBAzPhotosHigh-Type-756', + 'DGHBAzPhotosHigh-Kind-757', + 'DGHBAzPhotosHigh-Category-758', + 'DGHBAzPhotosHigh-Visibility State-759', + 'DGHBAzPhotosHigh-Mood-760', + 'DGHBAzPhotosHigh-Enrichment State-761', + 'DGHBAzPhotosHigh-Enrichment Version-762', + 'DGHBAzPhotosHigh-Highlight Version-763', + 'zAsset-Day Group Highlight Being Extended Assets Key-764', + 'DGHBEAzPhotosHigh-UUID-765', + 'DGHBEAzPhotosHigh-zPK-766', + 'DGHBEAzPhotosHigh-zENT-767', + 'DGHBEAzPhotosHigh-zOPT-768', + 'DGHBEAzPhotosHigh-Promotion Score-769', + 'DGHBEAzPhotosHigh-Title-770', + 'DGHBEAzPhotosHigh-Subtitle-771', + 'DGHBEAzPhotosHigh-Verbose Smart Description-772', + ('DGHBEAzPhotosHigh-Start Date-773', 'datetime'), + 'DGHBEAzPhotosHigh-Start Timezone Offset-774', + 'DGHBEAzPhotosHigh-End Timezone Offset-775', + ('DGHBEAzPhotosHigh-End Date-776', 'datetime'), + 'DGHBEAzPhotosHigh-Asset Count-777', + 'DGHBEAzPhotosHigh-Summary Count-778', + 'DGHBEAzPhotosHigh-Extended Count-779', + 'DGHBEAzPhotosHigh-Day Group Assets Count-780', + 'DGHBEAzPhotosHigh-Day Group Ext Assets Count-781', + 'DGHBEAzPhotosHigh-Day Group Summary Assets Count-782', + 'DGHBEAzPhotosHigh-Parent PH Key-783', + 'DGHBEAzPhotosHigh-Year Key Asset-784', + 'DGHBEAzPhotosHigh-Month First Asset-785', + 'DGHBEAzPhotosHigh-Month Key Asset-786', + 'DGHBEAzPhotosHigh-Key Asset-787', + 'DGHBEAzPhotosHigh-Parent Day Group PH Key-788', + 'DGHBEAzPhotosHigh-Day Group Key Asset-789', + 'DGHBEAzPhotosHigh-is Curated-790', + 'DGHBEAzPhotosHigh-Type-791', + 'DGHBEAzPhotosHigh-Kind-792', + 'DGHBEAzPhotosHigh-Category-793', + 'DGHBEAzPhotosHigh-Visibility State-794', + 'DGHBEAzPhotosHigh-Mood-795', + 'DGHBEAzPhotosHigh-Enrichment State-796', + 'DGHBEAzPhotosHigh-Enrichment Version-797', + 'DGHBEAzPhotosHigh-Highlight Version-798', + 'zAsset-Day Group Highlight Being Key Asset-799', + 'DGHBKAzPhotosHigh-UUID-800', + 'DGHBKAzPhotosHigh-zPK-801', + 'DGHBKAzPhotosHigh-zENT-802', + 'DGHBKAzPhotosHigh-zOPT-803', + 'DGHBKAzPhotosHigh-Promotion Score-804', + 'DGHBKAzPhotosHigh-Title-805', + 'DGHBKAzPhotosHigh-Subtitle-806', + 'DGHBKAzPhotosHigh-Verbose Smart Description-807', + ('DGHBKAzPhotosHigh-Start Date-808', 'datetime'), + 'DGHBKAzPhotosHigh-Start Timezone Offset-809', + 'DGHBKAzPhotosHigh-End Timezone Offset-810', + ('DGHBKAzPhotosHigh-End Date-811', 'datetime'), + 'DGHBKAzPhotosHigh-Asset Count-812', + 'DGHBKAzPhotosHigh-Summary Count-813', + 'DGHBKAzPhotosHigh-Extended Count-814', + 'DGHBKAzPhotosHigh-Day Group Assets Count-815', + 'DGHBKAzPhotosHigh-Day Group Ext Assets Count-816', + 'DGHBKAzPhotosHigh-Day Group Summary Assets Count-817', + 'DGHBKAzPhotosHigh-Parent PH Key-818', + 'DGHBKAzPhotosHigh-Year Key Asset-819', + 'DGHBKAzPhotosHigh-Month First Asset-820', + 'DGHBKAzPhotosHigh-Month Key Asset-821', + 'DGHBKAzPhotosHigh-Key Asset-822', + 'DGHBKAzPhotosHigh-Parent Day Group PH Key-823', + 'DGHBKAzPhotosHigh-Day Group Key Asset-824', + 'DGHBKAzPhotosHigh-is Curated-825', + 'DGHBKAzPhotosHigh-Type-826', + 'DGHBKAzPhotosHigh-Kind-827', + 'DGHBKAzPhotosHigh-Category-828', + 'DGHBKAzPhotosHigh-Visibility State-829', + 'DGHBKAzPhotosHigh-Mood-830', + 'DGHBKAzPhotosHigh-Enrichment State-831', + 'DGHBKAzPhotosHigh-Enrichment Version-832', + 'DGHBKAzPhotosHigh-Highlight Version-833', + 'zAsset-Day Group Highlight Being Summary Assets Key-834', + 'DGHBSAzPhotosHigh-UUID-835', + 'DGHBSAzPhotosHigh-zPK-836', + 'DGHBSAzPhotosHigh-zENT-837', + 'DGHBSAzPhotosHigh-zOPT-838', + 'DGHBSAzPhotosHigh-Promotion Score-839', + 'DGHBSAzPhotosHigh-Title-840', + 'DGHBSAzPhotosHigh-Subtitle-841', + 'DGHBSAzPhotosHigh-Verbose Smart Description-842', + ('DGHBSAzPhotosHigh-Start Date-843', 'datetime'), + 'DGHBSAzPhotosHigh-Start Timezone Offset-844', + 'DGHBSAzPhotosHigh-End Timezone Offset-845', + ('DGHBSAzPhotosHigh-End Date-846', 'datetime'), + 'DGHBSAzPhotosHigh-Asset Count-847', + 'DGHBSAzPhotosHigh-Summary Count-848', + 'DGHBSAzPhotosHigh-Extended Count-849', + 'DGHBSAzPhotosHigh-Day Group Assets Count-850', + 'DGHBSAzPhotosHigh-Day Group Ext Assets Count-851', + 'DGHBSAzPhotosHigh-Day Group Summary Assets Count-852', + 'DGHBSAzPhotosHigh-Parent PH Key-853', + 'DGHBSAzPhotosHigh-Year Key Asset-854', + 'DGHBSAzPhotosHigh-Month First Asset-855', + 'DGHBSAzPhotosHigh-Month Key Asset-856', + 'DGHBSAzPhotosHigh-Key Asset-857', + 'DGHBSAzPhotosHigh-Parent Day Group PH Key-858', + 'DGHBSAzPhotosHigh-Day Group Key Asset-859', + 'DGHBSAzPhotosHigh-is Curated-860', + 'DGHBSAzPhotosHigh-Type-861', + 'DGHBSAzPhotosHigh-Kind-862', + 'DGHBSAzPhotosHigh-Category-863', + 'DGHBSAzPhotosHigh-Visibility State-864', + 'DGHBSAzPhotosHigh-Mood-865', + 'DGHBSAzPhotosHigh-Enrichment State-866', + 'DGHBSAzPhotosHigh-Enrichment Version-867', + 'DGHBSAzPhotosHigh-Highlight Version-868', + 'zAsset-Month Highlight Being First Asset Key-869', + 'MHBFAzPhotosHigh-UUID-870', + 'MHBFAzPhotosHigh-zPK-871', + 'MHBFAzPhotosHigh-zENT-872', + 'MHBFAzPhotosHigh-zOPT-873', + 'MHBFAzPhotosHigh-Promotion Score-874', + 'MHBFAzPhotosHigh-Title-875', + 'MHBFAzPhotosHigh-Subtitle-876', + 'MHBFAzPhotosHigh-Verbose Smart Description-877', + ('MHBFAzPhotosHigh-Start Date-878', 'datetime'), + 'MHBFAzPhotosHigh-Start Timezone Offset-879', + 'MHBFAzPhotosHigh-End Timezone Offset-880', + ('MHBFAzPhotosHigh-End Date-881', 'datetime'), + 'MHBFAzPhotosHigh-Asset Count-882', + 'MHBFAzPhotosHigh-Summary Count-883', + 'MHBFAzPhotosHigh-Extended Count-884', + 'MHBFAzPhotosHigh-Day Group Assets Count-885', + 'MHBFAzPhotosHigh-Day Group Ext Assets Count-886', + 'MHBFAzPhotosHigh-Day Group Summary Assets Count-887', + 'MHBFAzPhotosHigh-Parent PH Key-888', + 'MHBFAzPhotosHigh-Year Key Asset-889', + 'MHBFAzPhotosHigh-Month First Asset-890', + 'MHBFAzPhotosHigh-Month Key Asset-891', + 'MHBFAzPhotosHigh-Key Asset-892', + 'MHBFAzPhotosHigh-Parent Day Group PH Key-893', + 'MHBFAzPhotosHigh-Day Group Key Asset-894', + 'MHBFAzPhotosHigh-is Curated-895', + 'MHBFAzPhotosHigh-Type-896', + 'MHBFAzPhotosHigh-Kind-897', + 'MHBFAzPhotosHigh-Category-898', + 'MHBFAzPhotosHigh-Visibility State-899', + 'MHBFAzPhotosHigh-Mood-900', + 'MHBFAzPhotosHigh-Enrichment State-901', + 'MHBFAzPhotosHigh-Enrichment Version-902', + 'MHBFAzPhotosHigh-Highlight Version-903', + 'zAsset-Month Highlight Being Key Asset-904', + 'MHBKAzPhotosHigh-UUID-905', + 'MHBKAzPhotosHigh-zPK-906', + 'MHBKAzPhotosHigh-zENT-907', + 'MHBKAzPhotosHigh-zOPT-908', + 'MHBKAzPhotosHigh-Promotion Score-909', + 'MHBKAzPhotosHigh-Title-910', + 'MHBKAzPhotosHigh-Subtitle-911', + 'MHBKAzPhotosHigh-Verbose Smart Description-912', + ('MHBKAzPhotosHigh-Start Date-913', 'datetime'), + 'MHBKAzPhotosHigh-Start Timezone Offset-914', + 'MHBKAzPhotosHigh-End Timezone Offset-915', + ('MHBKAzPhotosHigh-End Date-916', 'datetime'), + 'MHBKAzPhotosHigh-Asset Count-917', + 'MHBKAzPhotosHigh-Summary Count-918', + 'MHBKAzPhotosHigh-Extended Count-919', + 'MHBKAzPhotosHigh-Day Group Assets Count-920', + 'MHBKAzPhotosHigh-Day Group Ext Assets Count-921', + 'MHBKAzPhotosHigh-Day Group Summary Assets Count-922', + 'MHBKAzPhotosHigh-Parent PH Key-923', + 'MHBKAzPhotosHigh-Year Key Asset-924', + 'MHBKAzPhotosHigh-Month First Asset-925', + 'MHBKAzPhotosHigh-Month Key Asset-926', + 'MHBKAzPhotosHigh-Key Asset-927', + 'MHBKAzPhotosHigh-Parent Day Group PH Key-928', + 'MHBKAzPhotosHigh-Day Group Key Asset-929', + 'MHBKAzPhotosHigh-is Curated-930', + 'MHBKAzPhotosHigh-Type-931', + 'MHBKAzPhotosHigh-Kind-932', + 'MHBKAzPhotosHigh-Category-933', + 'MHBKAzPhotosHigh-Visibility State-934', + 'MHBKAzPhotosHigh-Mood-935', + 'MHBKAzPhotosHigh-Enrichment State-936', + 'MHBKAzPhotosHigh-Enrichment Version-937', + 'MHBKAzPhotosHigh-Highlight Version-938', + 'zAsset-Year Highlight Being Key Asset-939', + 'YHBKAzPhotosHigh-UUID-940', + 'YHBKAzPhotosHigh-zPK-941', + 'YHBKAzPhotosHigh-zENT-942', + 'YHBKAzPhotosHigh-zOPT-943', + 'YHBKAzPhotosHigh-Promotion Score-944', + 'YHBKAzPhotosHigh-Title-945', + 'YHBKAzPhotosHigh-Subtitle-946', + 'YHBKAzPhotosHigh-Verbose Smart Description-947', + ('YHBKAzPhotosHigh-Start Date-948', 'datetime'), + 'YHBKAzPhotosHigh-Start Timezone Offset-949', + 'YHBKAzPhotosHigh-End Timezone Offset-950', + ('YHBKAzPhotosHigh-End Date-951', 'datetime'), + 'YHBKAzPhotosHigh-Asset Count-952', + 'YHBKAzPhotosHigh-Summary Count-953', + 'YHBKAzPhotosHigh-Extended Count-954', + 'YHBKAzPhotosHigh-Day Group Assets Count-955', + 'YHBKAzPhotosHigh-Day Group Ext Assets Count-956', + 'YHBKAzPhotosHigh-Day Group Summary Assets Count-957', + 'YHBKAzPhotosHigh-Parent PH Key-958', + 'YHBKAzPhotosHigh-Year Key Asset-959', + 'YHBKAzPhotosHigh-Month First Asset-960', + 'YHBKAzPhotosHigh-Month Key Asset-961', + 'YHBKAzPhotosHigh-Key Asset-962', + 'YHBKAzPhotosHigh-Parent Day Group PH Key-963', + 'YHBKAzPhotosHigh-Day Group Key Asset-964', + 'YHBKAzPhotosHigh-is Curated-965', + 'YHBKAzPhotosHigh-Type-966', + 'YHBKAzPhotosHigh-Kind-967', + 'YHBKAzPhotosHigh-Category-968', + 'YHBKAzPhotosHigh-Visibility State-969', + 'YHBKAzPhotosHigh-Mood-970', + 'YHBKAzPhotosHigh-Enrichment State-971', + 'YHBKAzPhotosHigh-Enrichment Version-972', + 'YHBKAzPhotosHigh-Highlight Version-973', + 'z3SuggBKA-3KeyAssets = zAsset-zPK-974', + 'z3SuggBKA-55SuggBeingKeyAssets = zSugg-zPK-975', + 'SBKAzSugg-zPK-976', + 'SBKAzSugg-UUID-977', + ('SBKAzSugg-Start Date-978', 'datetime'), + 'SBKAzSugg-State-979', + 'SBKAzSugg-Featured State-980', + 'SBKAzSugg-Notification State-981', + ('SBKAzSugg-Creation Date-982', 'datetime'), + ('SBKAzSugg-End Date-983', 'datetime'), + ('SBKAzSugg-Activation Date-984', 'datetime'), + ('SBKAzSugg-Expunge Date-985', 'datetime'), + ('SBKAzSugg-Relevant Until Date-986', 'datetime'), + 'SBKAzSugg-Title-987', + 'SBKAzSugg-Sub Title-988', + 'SBKAzSugg-Cached Count-989', + 'SBKAzSugg-Cahed Photos Count-990', + 'SBKAzSugg-Cached Videos Count-991', + 'SBKAzSugg-Type-992', + 'SBKAzSugg-Sub Type-993', + 'SBKAzSugg-Version-994', + 'SBKAzSugg-Cloud Local State-995', + 'SBKAzSugg-Cloud Delete State-996', + 'z3SuggBRA-3RepAssets1-997', + 'z3SuggBRA-55SuggBeingRepAssets-998', + 'SBRAzSugg-zPK-999', + 'SBRAzSugg-UUID-1000', + ('SBRAzSugg-Start Date-1001', 'datetime'), + 'SBRAzSugg-State-1002', + 'SBRAzSugg-Featured State-1003', + 'SBRAzSugg-Notification State-1004', + ('SBRAzSugg-Creation Date-1005', 'datetime'), + ('SBRAzSugg-End Date-1006', 'datetime'), + ('SBRAzSugg-Activation Date-1007', 'datetime'), + ('SBRAzSugg-Expunge Date-1008', 'datetime'), + ('SBRAzSugg-Relevant Until Date-1009', 'datetime'), + 'SBRAzSugg-Title-1010', + 'SBRAzSugg-Sub Title-1011', + 'SBRAzSugg-Cached Count-1012', + 'SBRAzSugg-Cahed Photos Count-1013', + 'SBRAzSugg-Cached Videos Count-1014', + 'SBRAzSugg-Type-1015', + 'SBRAzSugg-Sub Type-1016', + 'SBRAzSugg-Version-1017', + 'SBRAzSugg-Cloud Local State-1018', + 'SBRAzSugg-Cloud Delete State-1019', + 'zAsset-Highlight Visibility Score-1020', + 'zMedAnlyAstAttr-Media Analysis Version-1021', + 'zMedAnlyAstAttr-Audio Classification-1022', + 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-1023', + 'zMedAnlyAstAttr-Best Video Range Start Time Scale-1024', + 'zMedAnlyAstAttr-Best Video Range Duration Value-1025', + 'zMedAnlyAstAttr-Best Video Range Start Value-1026', + 'zMedAnlyAstAttr-Packed Best Playback Rect-1027', + 'zMedAnlyAstAttr-Activity Score-1028', + 'zMedAnlyAstAttr-Video Score-1029', + 'zMedAnlyAstAttr-AutoPlay Suggestion Score-1030', + 'zMedAnlyAstAttr-Blurriness Score-1031', + 'zMedAnlyAstAttr-Exposure Score-1032', + 'zAssetAnalyState-Asset UUID-4TableStart-1033', + 'zAssetAnalyState-Analyisis State-1034', + 'zAssetAnalyState-Worker Flags-1035', + 'zAssetAnalyState-Worker Type-1036', + ('zAssetAnalyState-Ignore Until Date-1037', 'datetime'), + ('zAssetAnalyState-Last Ignored Date-1038', 'datetime'), + ('zAssetAnalyState-Sort Token-1039', 'datetime'), + 'zAsset-Overall Aesthetic Score-1040', + 'zCompAssetAttr-Behavioral Score-1041', + 'zCompAssetAttr-Failure Score zCompAssetAttr-1042', + 'zCompAssetAttr-Harmonious Color Score-1043', + 'zCompAssetAttr-Immersiveness Score-1044', + 'zCompAssetAttr-Interaction Score-1045', + 'zCompAssetAttr-Intersting Subject Score-1046', + 'zCompAssetAttr-Intrusive Object Presence Score-1047', + 'zCompAssetAttr-Lively Color Score-1048', + 'zCompAssetAttr-Low Light-1049', + 'zCompAssetAttr-Noise Score-1050', + 'zCompAssetAttr-Pleasant Camera Tilt Score-1051', + 'zCompAssetAttr-Pleasant Composition Score-1052', + 'zCompAssetAttr-Pleasant Lighting Score-1053', + 'zCompAssetAttr-Pleasant Pattern Score-1054', + 'zCompAssetAttr-Pleasant Perspective Score-1055', + 'zCompAssetAttr-Pleasant Post Processing Score-1056', + 'zCompAssetAttr-Pleasant Reflection Score-1057', + 'zCompAssetAttrPleasant Symmetry Score-1058', + 'zCompAssetAttr-Sharply Focused Subject Score-1059', + 'zCompAssetAttr-Tastfully Blurred Score-1060', + 'zCompAssetAttr-Well Chosen Subject Score-1061', + 'zCompAssetAttr-Well Framed Subject Score-1062', + 'zCompAssetAttr-Well Timeed Shot Score-1063', + 'zCldRes-Asset UUID-4TableStart-1064', + 'zCldRes-Cloud Local State-1065', + 'zCldRes-File Size-1066', + 'zCldRes-Height-1067', + 'zCldRes-Is Available-1068', + 'zCldRes-Is Locally Available-1069', + 'zCldRes-Prefetch Count-1070', + 'zCldRes-Source Type-1071', + 'zCldRes-Type-1072', + 'zCldRes-Width-1073', + ('zCldRes-Date Created-1074', 'datetime'), + ('zCldRes-Last OnDemand Download Date-1075', 'datetime'), + ('zCldRes-Last Prefetch Date-1076', 'datetime'), + 'zCldRes-Prunedat-1077', + 'zCldRes-File Path-1078', + 'zCldRes-Fingerprint-1079', + 'zCldRes-Item ID-1080', + 'zCldRes-UniID-1081', + 'zAddAssetAttr-zPK-1082', + 'zAddAssetAttr-zENT-1083', + 'ZAddAssetAttr-zOPT-1084', + 'zAddAssetAttr-zAsset= zAsset_zPK-1085', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-1086', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-1087', + 'zAddAssetAttr-Master Fingerprint-1088', + 'zAddAssetAttr-Public Global UUID-1089', + 'zAddAssetAttr-Deferred Photo Identifier-1090', + 'zAddAssetAttr-Original Assets UUID-1091', + 'zAddAssetAttr-Import Session ID-1092', + 'zAddAssetAttr-Originating Asset Identifier-1093', + 'zAddAssetAttr.Adjusted Fingerprint-1094', + 'zAlbumList-zPK= Album List Key-1095', + 'zAlbumList-zENT-1096', + 'zAlbumList-zOPT-1097', + 'zAlbumList-ID Key-1098', + 'zAlbumList-UUID-1099', + 'zAsset-zPK-1100', + 'zAsset-zENT-1101', + 'zAsset-zOPT-1102', + 'zAsset-Master= zCldMast-zPK-1103', + 'zAsset-Extended Attributes= zExtAttr-zPK-1104', + 'zAsset-Import Session Key-1105', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-1106', + 'zAsset-FOK-Cloud Feed Asset Entry Key-1107', + 'zAsset-Moment Share Key= zShare-zPK-1108', + 'zAsset-zMoment Key= zMoment-zPK-1109', + 'zAsset-Computed Attributes Asset Key-1110', + 'zAsset-Highlight Being Assets-HBA Key-1111', + 'zAsset-Highlight Being Extended Assets-HBEA Key-1112', + 'zAsset-Highligh Being Summary Assets-HBSA Key-1113', + 'zAsset-Day Group Highlight Being Assets-DGHBA Key-1114', + 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-1115', + 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-1116', + 'zAsset-Promotion Score-1117', + 'zAsset-Media Analysis Attributes Key-1118', + 'zAsset-Media Group UUID-1119', + 'zAsset-UUID = store.cloudphotodb-1120', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-1121', + 'zAsset.Cloud Collection GUID-1122', + 'zAsset-Avalanche UUID-1123', + 'zAssetAnalyState-zPK-1124', + 'zAssetAnalyState-zEnt-1125', + 'zAssetAnalyState-zOpt-1126', + 'zAssetAnalyState-Asset= zAsset-zPK-1127', + 'zAssetAnalyState-Asset UUID-1128', + 'zAssetDes-zPK-1129', + 'zAssetDes-zENT-1130', + 'zAssetDes-zOPT-1131', + 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-1132', + 'zCldFeedEnt-zPK= zCldShared keys-1133', + 'zCldFeedEnt-zENT-1134', + 'zCldFeedEnt-zOPT-1135', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-1136', + 'zCldFeedEnt-Entry Invitation Record GUID-1137', + 'zCldFeedEnt-Entry Cloud Asset GUID-1138', + 'zCldMast-zPK= zAsset-Master-1139', + 'zCldMast-zENT-1140', + 'zCldMast-zOPT-1141', + 'zCldMast-Moment Share Key= zShare-zPK-1142', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-1143', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-1144', + 'zCldMast-Originating Asset ID-1145', + 'zCldMast-Import Session ID- AirDrop-StillTesting-1146', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-1147', + 'CMzCldMastMedData-zENT-1148', + 'CMzCldMastMedData-zOPT-1149', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-1150', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-1151', + 'AAAzCldMastMedData-zENT-1152', + 'AAAzCldMastMedData-zOPT-1153', + 'AAAzCldMastMedData-CldMast key-1154', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-1155', + 'zCldRes-zPK-1156', + 'zCldRes-zENT-1157', + 'zCldRes-zOPT-1158', + 'zCldRes-Asset= zAsset-zPK-1159', + 'zCldRes-Cloud Master= zCldMast-zPK-1160', + 'zCldRes-Asset UUID-1161', + 'zCldShareAlbumInvRec-zPK-1162', + 'zCldShareAlbumInvRec-zEnt-1163', + 'zCldShareAlbumInvRec-zOpt-1164', + 'zCldShareAlbumInvRec-Album Key-1165', + 'zCldShareAlbumInvRec-FOK Album Key-1166', + 'zCldShareAlbumInvRec-Album GUID-1167', + 'zCldShareAlbumInvRec-Cloud GUID-1168', + 'zCldSharedComment-zPK-1169', + 'zCldSharedComment-zENT-1170', + 'zCldSharedComment-zOPT-1171', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1172', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1173', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1174', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1175', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-1176', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1177', + 'zCldSharedComment-Cloud GUID-1178', + 'zCompAssetAttr-zPK-1179', + 'zCompAssetAttr-zEnt-1180', + 'zCompAssetAttr-zOpt-1181', + 'zCompAssetAttr-Asset Key-1182', + 'zDetFace-zPK-1183', + 'zDetFace-zEnt-1184', + 'zDetFace.zOpt-1185', + 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-1186', + 'zDetFace-Person= zPerson-zPK-1187', + 'zDetFace-Person Being Key Face-1188', + 'zDetFace-Face Print-1189', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1190', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1191', + 'zDetFace-UUID-1192', + 'zDetFaceGroup-zPK-1193', + 'zDetFaceGroup-zENT-1194', + 'zDetFaceGroup-zOPT-1195', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-1196', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-1197', + 'zDetFaceGroup-UUID-1198', + 'zDetFacePrint-zPK-1199', + 'zDetFacePrint-zEnt-1200', + 'zDetFacePrint-zOpt-1201', + 'zDetFacePrint-Face Key-1202', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-1203', + 'zExtAttr-zENT-1204', + 'zExtAttr-zOPT-1205', + 'zExtAttr-Asset Key-1206', + 'zFaceCrop-zPK-1207', + 'zFaceCrop-zEnt-1208', + 'zFaceCrop-zOpt-1209', + 'zFaceCrop-Asset Key-1210', + 'zFaceCrop-Invalid Merge Canidate Person UUID-1211', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1212', + 'zFaceCrop-Face Key-1213', + 'zFaceCrop-UUID-1214', + 'zGenAlbum-zPK=26AlbumLists= 26Albums-1215', + 'zGenAlbum-zENT-1216', + 'zGenAlbum-zOpt-1217', + 'zGenAlbum-Key Asset-Key zAsset-zPK-1218', + 'zGenAlbum-Secondary Key Asset-1219', + 'zGenAlbum-Tertiary Key Asset-1220', + 'zGenAlbum-Custom Key Asset-1221', + 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1222', + 'zGenAlbum-FOK Parent Folder-1223', + 'zGenAlbum-UUID-1224', + 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1225', + 'zGenAlbum-Project Render UUID-1226', + 'zIntResou-zPK-1227', + 'zIntResou-zENT-1228', + 'zIntResou-zOPT-1229', + 'zIntResou-Asset= zAsset_zPK-1230', + 'zIntResou-Fingerprint-1231', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-1232', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1233', + 'zMedAnlyAstAttr-zEnt-1234', + 'zMedAnlyAstAttr-zOpt-1235', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-1236', + 'zPerson-zPK=zDetFace-Person-1237', + 'zPerson-zEnt-1238', + 'zPerson-zOpt-1239', + 'zPerson-KeyFace=zDetFace-zPK-1240', + 'zPerson-Assoc Face Group Key-1241', + 'zPerson-Person UUID-1242', + 'zSceneP-zPK-1243', + 'zSceneP-zENT-1244', + 'zSceneP-zOPT-1245', + 'zShare-zPK-1246', + 'zShare-zENT-1247', + 'zShare-zOPT-1248', + 'zShare-UUID-1249', + 'SPLzShare-UUID-1250', + 'zShare-Scope ID = store.cloudphotodb-1251', + 'zSharePartic-zPK-1252', + 'zSharePartic-zENT-1253', + 'zSharePartic-zOPT-1254', + 'zSharePartic-Share Key= zShare-zPK-1255', + 'zSharePartic-UUID-1256', + 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1257', + 'zUnmAdj-zOPT-1258', + 'zUnmAdj-zENT-1259', + 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1260', + 'zUnmAdj-UUID-1261', + 'zUnmAdj-Other Adjustments Fingerprint-1262', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1263', + 'z25AlbumList-25Albums= zGenAlbum-zPK-1264', + 'z25AlbumList-Album List Key-1265', + 'z25AlbumList-FOK25Albums Key-1266', + 'z26Assets-26Albums= zGenAlbum-zPK-1267', + 'z26Assets-3Asset Key= zAsset-zPK in the Album-1268', + 'z26Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1269') + data_list = get_sqlite_db_records(source_path, query) - -__artifacts_v2__ = { - 'Ph94-1-iOS14_Ref_for_Asset_Analysis-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite 94.1 iOS14 Reference for Asset Analysis', - 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' - ' set of decoded data based on testing and research conducted by Scott Koenig' - ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' - ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' - ' to view, search and filter the results.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-04-19', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph94ios14refforassetanalysisphdapsql' - }, - 'Ph94-2-iOS14_Ref_for_Asset_Analysis-SyndPL': { - 'name': 'SyndPL Photos.sqlite 94.2 iOS14 Reference for Asset Analysis', - 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' - ' This parser includes the largest set of decoded data based on testing and research' - ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' - ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' - ' TimelineExplorer to view, search and filter the results.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-04-19', - 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', - 'notes': '', - 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*', - 'function': 'get_ph94ios14refforassetanalysissyndpl' - } -} + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph95iOS15REFforAssetAnalysis.py b/scripts/artifacts/Ph95iOS15REFforAssetAnalysis.py index de38abc8..ad23f6cc 100644 --- a/scripts/artifacts/Ph95iOS15REFforAssetAnalysis.py +++ b/scripts/artifacts/Ph95iOS15REFforAssetAnalysis.py @@ -1,41 +1,66 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 1.0 -# -# Description: -# Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest set of decoded data based on -# testing and research conducted by Scott Koenig https://theforensicscooter.com/ and -# queries found at https://github.com/ScottKjr3347. -# I recommend opening the TSV generated reports with Zimmerman's Tools https://ericzimmerman.github.io/#!index.md -# TimelineExplorer to view, search and filter the results. -# +__artifacts_v2__ = { + 'Ph95_1iOS15RefforAssetAnalysisPhDaPsql': { + 'name': 'Ph95.1-iOS15_Ref_for_Asset_Analysis-PhDaPsql', + 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' + ' set of decoded data based on testing and research conducted by Scott Koenig' + ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' + ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' + ' to view, search and filter the results.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + }, + 'Ph95_2iOS15RefforAssetAnalysisSyndPL': { + 'name': 'Ph95.2-iOS15_Ref_for_Asset_Analysis-SyndPL', + 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' + ' This parser includes the largest set of decoded data based on testing and research' + ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' + ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' + ' TimelineExplorer to view, search and filter the results.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite', + 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly - - -def get_ph95ios15refforassetanalysisphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph95_1iOS15RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if (version.parse(iosversion) <= version.parse("14.8.1")) or (version.parse(iosversion) >= version.parse("16")): - logfunc(f"Unsupported version for PhotoData-Photos.sqlite reference for asset analysis from iOS " + iosversion) + logfunc(f"Unsupported version for PhotoData-Photos.sqlite for iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -1830,7 +1855,7 @@ def get_ph95ios15refforassetanalysisphdapsql(files_found, report_folder, seeker, zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type', DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date', DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date', - zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token', + DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token', zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr', zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version', zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version', @@ -2115,1016 +2140,994 @@ def get_ph95ios15refforassetanalysisphdapsql(files_found, report_folder, seeker, LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP ORDER BY zAsset.ZADDEDDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], - row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], - row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], - row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], - row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], - row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], - row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], - row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], - row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], - row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], - row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], - row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], - row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], - row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], - row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], - row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], - row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], - row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], - row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], - row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], - row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], - row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], - row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], - row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], - row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], - row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], - row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], - row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], - row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], - row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], - row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], - row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], - row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], - row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], - row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], - row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], - row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], - row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], - row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], - row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], - row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], - row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], - row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], - row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], - row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], - row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], - row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], - row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], - row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], - row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], - row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], - row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], - row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], - row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], - row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], - row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], - row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], - row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], - row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], - row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], - row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], - row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], - row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], - row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], - row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], - row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], - row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], - row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], - row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], - row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], - row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], - row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], - row[844], row[845], row[846], row[847], row[848], row[849], row[850])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' \ - ' set of decoded data based on testing and research conducted by Scott Koenig' \ - ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' \ - ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \ - ' to view, search and filter the results.' - report = ArtifactHtmlReport('Ph95.1-iOS15_Ref_for_Asset_Analysis-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph95.1-iOS15_Ref_for_Asset_Analysis-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Added Date-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset Complete-2', - 'zAsset-zPK-4QueryStart-3', - 'zAddAssetAttr-zPK-4QueryStart-4', - 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', - 'zAddAssetAttr-Master Fingerprint-4TableStart-6', - 'zIntResou-Fingerprint-4TableStart-7', - 'zAsset-Bundle Scope-8', - 'zAsset-Syndication State-9', - 'zAsset-Cloud is My Asset-10', - 'zAsset-Cloud is deletable-Asset-11', - 'zAsset-Cloud_Local_State-12', - 'zAsset-Visibility State-13', - 'zExtAttr-Camera Make-14', - 'zExtAttr-Camera Model-15', - 'zExtAttr-Lens Model-16', - 'zExtAttr-Flash Fired-17', - 'zExtAttr-Focal Lenght-18', - 'zExtAttr-Focal Lenth in 35MM-19', - 'zExtAttr-Digital Zoom Ratio-20', - 'zAsset-Derived Camera Capture Device-21', - 'zAddAssetAttr-Camera Captured Device-22', - 'zAddAssetAttr-Imported by-23', - 'zCldMast-Imported By-24', - 'zAddAssetAttr.Imported by Bundle Identifier-25', - 'zAddAssetAttr-Imported By Display Name-26', - 'zCldMast-Imported by Bundle ID-27', - 'zCldMast-Imported by Display Name-28', - 'zAsset-Saved Asset Type-29', - 'zAsset-Directory-Path-30', - 'zAsset-Filename-31', - 'zAddAssetAttr- Original Filename-32', - 'zCldMast- Original Filename-33', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-34', - 'zAddAssetAttr-Date Created Source-35', - 'zAsset-Date Created-36', - 'zCldMast-Creation Date-37', - 'zIntResou-CldMst Date Created-38', - 'zAddAssetAttr-Time Zone Name-39', - 'zAddAssetAttr-Time Zone Offset-40', - 'zAddAssetAttr-Inferred Time Zone Offset-41', - 'zAddAssetAttr-EXIF-String-42', - 'zAsset-Modification Date-43', - 'zAsset-Last Shared Date-44', - 'zCldMast-Cloud Local State-45', - 'zCldMast-Import Date-46', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', - 'zAddAssetAttr-Import Session ID-4QueryStart-48', - 'zAddAssetAttr-Alt Import Image Date-49', - 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-50', - 'zAsset-Cloud Batch Publish Date-51', - 'zAsset-Cloud Server Publish Date-52', - 'zAsset-Cloud Download Requests-53', - 'zAsset-Cloud Batch ID-54', - 'zAddAssetAttr-Upload Attempts-55', - 'zAsset-Latitude-56', - 'zExtAttr-Latitude-57', - 'zAsset-Longitude-58', - 'zExtAttr-Longitude-59', - 'zAddAssetAttr-GPS Horizontal Accuracy-60', - 'zAddAssetAttr-Location Hash-61', - 'zAddAssetAttr-Shifted Location Valid-62', - 'zAddAssetAttr-Shifted Location Data-63', - 'zAddAssetAttr-Reverse Location Is Valid-64', - 'zAddAssetAttr-Reverse Location Data-65', - 'ParentzGenAlbum-UUID-4QueryStart-66', - 'zGenAlbum-UUID-4QueryStart-67', - 'SWYConverszGenAlbum-UUID-4QueryStart-68', - 'ParentzGenAlbum-Cloud GUID-4QueryStart-69', - 'zGenAlbum-Cloud GUID-4QueryStart-70', - 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-71', - 'zCldShareAlbumInvRec-Album GUID-4QueryStart-72', - 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-73', - 'zGenAlbum-Project Render UUID-4QueryStart-74', - 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-75', - 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-76', - 'zGenAlbum-Cloud_Local_State-4QueryStart-77', - 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-78', - 'ParentzGenAlbum- Creation Date- 4QueryStart-79', - 'zGenAlbum- Creation Date- 4QueryStart-80', - 'SWYConverszGenAlbum- Creation Date- 4QueryStart-81', - 'zGenAlbum- Cloud Creation Date- 4QueryStart-82', - 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-83', - 'zGenAlbum- Start Date- 4QueryStart-84', - 'SWYConverszGenAlbum- Start Date- 4QueryStart-85', - 'zGenAlbum- End Date- 4QueryStart-86', - 'SWYConverszGenAlbum- End Date- 4QueryStart-87', - 'zGenAlbum-Cloud Subscription Date- 4QueryStart-88', - 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-89', - 'ParentzGenAlbum- Title- 4QueryStart-90', - 'zGenAlbum- Title-User&System Applied- 4QueryStart-91', - 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-92', - 'zGenAlbum-Import Session ID-SWY- 4QueryStart-93', - 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-94', - 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-95', - 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-96', - 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-97', - 'SWYConverszGenAlbum- Syndicate-4QueryStart-98', - 'zGenAlbum-zENT- Entity- 4QueryStart-99', - 'ParentzGenAlbum- Kind- 4QueryStart-100', - 'zGenAlbum-Album Kind- 4QueryStart-101', - 'SWYConverszGenAlbum-Album Kind- 4QueryStart-102', - 'AAAzCldMastMedData-zOPT-103', - 'zAddAssetAttr-Media Metadata Type-104', - 'AAAzCldMastMedData-Data-105', - 'CldMasterzCldMastMedData-zOPT-106', - 'zCldMast-Media Metadata Type-107', - 'CMzCldMastMedData-Data-108', - 'zAddAssetAttr-Syndication History-109', - 'zMedAnlyAstAttr-Syndication Processing Version-110', - 'zMedAnlyAstAttr-Syndication Processing Value-111', - 'zAsset-Orientation-112', - 'zAddAssetAttr-Original Orientation-113', - 'zAsset-Kind-114', - 'zAsset-Kind-Sub-Type-115', - 'zAddAssetAttr-Cloud Kind Sub Type-116', - 'zAsset-Playback Style-117', - 'zAsset-Playback Variation-118', - 'zAsset-Video Duration-119', - 'zExtAttr-Duration-120', - 'zAsset-Video CP Duration-121', - 'zAddAssetAttr-Video CP Duration Time Scale-122', - 'zAsset-Video CP Visibility State-123', - 'zAddAssetAttr-Video CP Display Value-124', - 'zAddAssetAttr-Video CP Display Time Scale-125', - 'zIntResou-Datastore Class ID-126', - 'zAsset-Cloud Placeholder Kind-127', - 'zIntResou-Local Availability-128', - 'zIntResou-Local Availability Target-129', - 'zIntResou-Cloud Local State-130', - 'zIntResou-Remote Availability-131', - 'zIntResou-Remote Availability Target-132', - 'zIntResou-Transient Cloud Master-133', - 'zIntResou-Side Car Index-134', - 'zIntResou- File ID-135', - 'zIntResou-Version-136', - 'zAddAssetAttr- Original-File-Size-137', - 'zIntResou-Resource Type-138', - 'zIntResou-Datastore Sub-Type-139', - 'zIntResou-Cloud Source Type-140', - 'zIntResou-Data Length-141', - 'zIntResou-Recipe ID-142', - 'zIntResou-Cloud Last Prefetch Date-143', - 'zIntResou-Cloud Prefetch Count-144', - 'zIntResou- Cloud-Last-OnDemand Download-Date-145', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-146', - 'zIntResou-Compact-UTI-147', - 'zAsset-Uniform Type ID-148', - 'zAsset-Original Color Space-149', - 'zCldMast-Uniform_Type_ID-150', - 'zCldMast-Full Size JPEG Source-151', - 'zAsset-HDR Gain-152', - 'zAsset-zHDR_Type-153', - 'zExtAttr-Codec-154', - 'zIntResou-Codec Four Char Code Name-155', - 'zCldMast-Codec Name-156', - 'zCldMast-Video Frame Rate-157', - 'zCldMast-Placeholder State-158', - 'zAsset-Depth_Type-159', - 'zAsset-Avalanche UUID-4TableStart-160', - 'zAsset-Avalanche_Pick_Type-BurstAsset-161', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-162', - 'zAddAssetAttr-Cloud Recovery State-163', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-164', - 'zAsset-Deferred Processing Needed-165', - 'zAsset-Video Deferred Processing Needed-166', - 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-167', - 'zAddAssetAttr-Deferred Processing Candidate Options-168', - 'zAsset-Has Adjustments-Camera-Effects-Filters-169', - 'zUnmAdj-UUID-4TableStart-170', - 'zAsset-Adjustment Timestamp-171', - 'zUnmAdj-Adjustment Timestamp-172', - 'zAddAssetAttr-Editor Bundle ID-173', - 'zUnmAdj-Editor Localized Name-174', - 'zUnmAdj-Adjustment Format ID-175', - 'zAddAssetAttr-Montage-176', - 'zUnmAdj-Adjustment Render Types-177', - 'zUnmAdj-Adjustment Format Version-178', - 'zUnmAdj-Adjustment Base Image Format-179', - 'zAsset-Favorite-180', - 'zAsset-Hidden-181', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-182', - 'zAsset-Trashed Date-183', - 'zIntResou-Trash State-184', - 'zIntResou-Trashed Date-185', - 'zAsset-Cloud Delete State-186', - 'zIntResou-Cloud Delete State-187', - 'zAddAssetAttr-PTP Trashed State-188', - 'zIntResou-PTP Trashed State-189', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-190', - 'zMedAnlyAstAttr-Media Analysis Timestamp-191', - 'zAsset-Analysis State Modificaion Date-192', - 'zAddAssetAttr- Pending View Count-193', - 'zAddAssetAttr- View Count-194', - 'zAddAssetAttr- Pending Play Count-195', - 'zAddAssetAttr- Play Count-196', - 'zAddAssetAttr- Pending Share Count-197', - 'zAddAssetAttr- Share Count-198', - 'zAddAssetAttr-Allowed for Analysis-199', - 'zAddAssetAttr-Scene Analysis Version-200', - 'zAddAssetAttr-Scene Analysis is From Preview-201', - 'zAddAssetAttr-Scene Analysis Timestamp-202', - 'zAddAssetAttr-Destination Asset Copy State-203', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-204', - 'zCldMast-Source Master For Duplication Scope ID-205', - 'zAddAssetAttr-Source Asset For Duplication ID-206', - 'zCldMast-Source Master for Duplication ID-207', - 'zAddAssetAttr-Variation Suggestions States-208', - 'zAsset-High Frame Rate State-209', - 'zAsset-Video Key Frame Time Scale-210', - 'zAsset-Video Key Frame Value-211', - 'zExtAttr-ISO-212', - 'zExtAttr-Metering Mode-213', - 'zExtAttr-Sample Rate-214', - 'zExtAttr-Track Format-215', - 'zExtAttr-White Balance-216', - 'zExtAttr-Aperture-217', - 'zExtAttr-BitRate-218', - 'zExtAttr-Exposure Bias-219', - 'zExtAttr-Frames Per Second-220', - 'zExtAttr-Shutter Speed-221', - 'zExtAttr-Slush Scene Bias-222', - 'zExtAttr-Slush Version-223', - 'zExtAttr-Slush Preset-224', - 'zExtAttr-Slush Warm Bias-225', - 'zAsset-Height-226', - 'zAddAssetAttr-Original Height-227', - 'zIntResou-Unoriented Height-228', - 'zAsset-Width-229', - 'zAddAssetAttr-Original Width-230', - 'zIntResou-Unoriented Width-231', - 'zShare-Thumbnail Image Data-232', - 'SPLzShare-Thumbnail Image Data-233', - 'zAsset-Thumbnail Index-234', - 'zAddAssetAttr-Embedded Thumbnail Height-235', - 'zAddAssetAttr-Embedded Thumbnail Length-236', - 'zAddAssetAttr-Embedded Thumbnail Offset-237', - 'zAddAssetAttr-Embedded Thumbnail Width-238', - 'zAsset-Packed Acceptable Crop Rect-239', - 'zAsset-Packed Badge Attributes-240', - 'zAsset-Packed Preferred Crop Rect-241', - 'zAsset-Curation Score-242', - 'zAsset-Camera Processing Adjustment State-243', - 'zAsset-Depth Type-244', - 'zAsset-Is Magic Carpet-QuicktimeMOVfile-245', - 'zAddAssetAttr-Orig Resource Choice-246', - 'zAddAssetAttr-Spatial Over Capture Group ID-247', - 'zAddAssetAttr-Place Annotation Data-248', - 'zAddAssetAttr-Distance Identity-249', - 'zAddAssetAttr-Edited IPTC Attributes-250', - 'zAssetDes-Long Description-251', - 'zAddAssetAttr-Asset Description-252', - 'zAddAssetAttr-Title-Comments via Cloud Website-253', - 'zAddAssetAttr-Accessibility Description-254', - 'zAddAssetAttr-Photo Stream Tag ID-255', - 'zCldFeedEnt-Entry Date-256', - 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-257', - 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-258', - 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-259', - 'zCldFeedEnt-Entry Priority Number-260', - 'zCldFeedEnt-Entry Type Number-261', - 'zCldSharedComment-Cloud GUID-4TableStart-262', - 'zCldSharedComment-Date-263', - 'zCldSharedComment-Comment Client Date-264', - 'zAsset-Cloud Last Viewed Comment Date-265', - 'zCldSharedComment-Type-266', - 'zCldSharedComment-Comment Text-267', - 'zCldSharedComment-Commenter Hashed Person ID-268', - 'zCldSharedComment-Batch Comment-269', - 'zCldSharedComment-Is a Caption-270', - 'zAsset-Cloud Has Comments by Me-271', - 'zCldSharedComment-Is My Comment-272', - 'zCldSharedComment-Is Deletable-273', - 'zAsset-Cloud Has Comments Conversation-274', - 'zAsset-Cloud Has Unseen Comments-275', - 'zCldSharedComment-Liked-276', - 'zAddAssetAttr-Share Type-277', - 'zShare-UUID-CMM-4TableStart-278', - 'SPLzShare-UUID-SPL-4TableStart-279', - 'zShare-zENT-CMM-280', - 'SPLzShare-zENT-SPL-281', - 'zShare-Status-CMM-282', - 'SPLzShare-Status-SPL-283', - 'zShare-Scope Type-CMM-284', - 'SPLzShare-Scope Type-SPL-285', - 'zShare-Local Publish State-CMM-286', - 'SPLzShare-Local Publish State-SPL-287', - 'zShare-Public Permission-CMM-288', - 'SPLzShare-Public Permission-SPL-289', - 'zShare-Originating Scope ID-CMM-290', - 'SPLzShare-Originating Scope ID-SPL-291', - 'zShare-Scope ID-CMM-292', - 'SPLzShare-Scope ID-SPL-293', - 'zShare-Title-CMM-294', - 'SPLzShare-Title-SPL-295', - 'zShare-Share URL-CMM-296', - 'SPLzShare-Share URL-SPL-297', - 'zShare-Creation Date-CMM-298', - 'SPLzShare-Creation Date-SPL-299', - 'zShare-Start Date-CMM-300', - 'SPLzShare-Start Date-SPL-301', - 'zShare-End Date-CMM-302', - 'SPLzShare-End Date-SPL-303', - 'zShare-Expiry Date-CMM-304', - 'SPLzShare-Expiry Date-SPL-305', - 'zShare-Asset Count-CMM-306', - 'SPLzShare-Asset Count-SPL-307', - 'zShare-Photos Count-CMM-308', - 'SPLzShare-Photos Count-CMM-SPL-309', - 'zShare-Uploaded Photos Count-CMM-310', - 'SPLzShare-Uploaded Photos Count-SPL-311', - 'zShare-Videos Count-CMM-312', - 'SPLzShare-Videos Count-SPL-313', - 'zShare-Uploaded Videos Count-CMM-314', - 'SPLzShare-Uploaded Videos Count-SPL-315', - 'zShare-Force Sync Attempted-CMM-316', - 'SPLzShare-Force Sync Attempted-SPL-317', - 'zShare-Auto Share Policy-CMM-318', - 'SPLzShare-Auto Share Policy-SPL-319', - 'zShare-Should Notify On Upload Completion-CMM-320', - 'SPLzShare-Should Notify On Upload Completion-SPL-321', - 'zShare-Trashed State-CMM-322', - 'SPLzShare-Trashed State-SPL-323', - 'zShare-Cloud Delete State-CMM-324', - 'SPLzShare-Cloud Delete State-SPL-325', - 'zShare-Should Ignor Budgets-CMM-326', - 'SPLzShare-Should Ignor Budgets-SPL-327', - 'zShare-Rules-CMM-328', - 'SPLzShare-Rules-SPL-329', - 'zSharePartic-UUID-4TableStart-330', - 'SPLzSharePartic-UUID-4TableStart-331', - 'zSharePartic-Acceptance Status-332', - 'SPLzSharePartic-Acceptance Status-333', - 'zSharePartic-Is Current User-334', - 'SPLzSharePartic-Is Current User-335', - 'zSharePartic-Role-336', - 'SPLzSharePartic-Role-337', - 'zSharePartic-Premission-338', - 'SPLzSharePartic-Premission-339', - 'zSharePartic-User ID-340', - 'SPLzSharePartic-User ID-341', - 'SPLzSharePartic-zPK-4TableStart-342', - 'zSharePartic-zPK-4TableStart-343', - 'zSharePartic-Email Address-344', - 'SPLzSharePartic-Email Address-345', - 'zSharePartic-Phone Number-346', - 'SPLzSharePartic-Phone Number-347', - 'ParentzGenAlbum-UUID-4TableStart-348', - 'zGenAlbum-UUID-4TableStart-349', - 'SWYConverszGenAlbum-UUID-4TableStart-350', - 'ParentzGenAlbum-Cloud GUID-4TableStart-351', - 'zGenAlbum-Cloud GUID-4TableStart-352', - 'SWYConverszGenAlbum-Cloud GUID-4TableStart-353', - 'zCldShareAlbumInvRec-Album GUID-4TableStart-354', - 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-355', - 'zGenAlbum-Project Render UUID-4TableStart-356', - 'SWYConverszGenAlbum-Project Render UUID-4TableStart-357', - 'zAlbumList-Needs Reordering Number-358', - 'zGenAlbum-zENT- Entity-359', - 'ParentzGenAlbum-Kind-360', - 'zGenAlbum-Album Kind-361', - 'SWYConverszGenAlbum-Album Kind-362', - 'ParentzGenAlbum-Cloud-Local-State-363', - 'zGenAlbum-Cloud_Local_State-364', - 'SWYConverszGenAlbum-Cloud_Local_State-365', - 'ParentzGenAlbum- Title-366', - 'zGenAlbum- Title-User&System Applied-367', - 'SWYConverszGenAlbum- Title -User&System Applied-368', - 'zGenAlbum-Import Session ID-SWY-369', - 'zAsset- Conversation= zGenAlbum_zPK-370', - 'SWYConverszGenAlbum- Import Session ID-SWY-371', - 'zGenAlbum-Imported by Bundle Identifier-372', - 'SWYzGenAlbum-Imported by Bundle Identifier-373', - 'SWYConverszGenAlbum- Syndicate-374', - 'ParentzGenAlbum-Creation Date-375', - 'zGenAlbum-Creation Date-376', - 'SWYConverszGenAlbum-Creation Date-377', - 'zGenAlbum-Cloud Creation Date-378', - 'SWYConverszGenAlbum-Cloud Creation Date-379', - 'zGenAlbum-Start Date-380', - 'SWYConverszGenAlbum-Start Date-381', - 'zGenAlbum-End Date-382', - 'SWYConverszGenAlbum-End Date-383', - 'zGenAlbum-Cloud Subscription Date-384', - 'SWYConverszGenAlbum-Cloud Subscription Date-385', - 'ParentzGenAlbum-Pending Items Count-386', - 'zGenAlbum-Pending Items Count-387', - 'SWYConverszGenAlbum-Pending Items Count-388', - 'ParentzGenAlbum-Pending Items Type-389', - 'zGenAlbum-Pending Items Type-390', - 'SWYConverszGenAlbum-Pending Items Type-391', - 'zGenAlbum- Cached Photos Count-392', - 'SWYConverszGenAlbum- Cached Photos Count-393', - 'zGenAlbum- Cached Videos Count-394', - 'SWYConverszGenAlbum- Cached Videos Count-395', - 'zGenAlbum- Cached Count-396', - 'SWYConverszGenAlbum- Cached Count-397', - 'ParentzGenAlbum-Sync Event Order Key-398', - 'zGenAlbum-Sync Event Order Key-399', - 'SWYConverszGenAlbum-Sync Event Order Key-400', - 'zGenAlbum-Has Unseen Content-401', - 'SWYConverszGenAlbum-Has Unseen Content-402', - 'zGenAlbum-Unseen Asset Count-403', - 'SWYConverszGenAlbum-Unseen Asset Count-404', - 'zGenAlbum-is Owned-405', - 'SWYConverszGenAlbum-is Owned-406', - 'zGenAlbum-Cloud Relationship State-407', - 'SWYConverszGenAlbum-Cloud Relationship State-408', - 'zGenAlbum-Cloud Relationship State Local-409', - 'SWYConverszGenAlbum-Cloud Relationship State Local-410', - 'zGenAlbum-Cloud Owner Mail Key-411', - 'SWYConverszGenAlbum-Cloud Owner Mail Key-412', - 'zGenAlbum-Cloud Owner Frist Name-413', - 'SWYConverszGenAlbum-Cloud Owner Frist Name-414', - 'zGenAlbum-Cloud Owner Last Name-415', - 'SWYConverszGenAlbum-Cloud Owner Last Name-416', - 'zGenAlbum-Cloud Owner Full Name-417', - 'SWYConverszGenAlbum-Cloud Owner Full Name-418', - 'zGenAlbum-Cloud Person ID-419', - 'SWYConverszGenAlbum-Cloud Person ID-420', - 'zAsset-Cloud Owner Hashed Person ID-421', - 'zGenAlbum-Cloud Owner Hashed Person ID-422', - 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-423', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-424', - 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-425', - 'zGenAlbum-Cloud Multi-Contributors Enabled-426', - 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-427', - 'zGenAlbum-Cloud Album Sub Type-428', - 'SWYConverszGenAlbum-Cloud Album Sub Type-429', - 'zGenAlbum-Cloud Contribution Date-430', - 'SWYConverszGenAlbum-Cloud Contribution Date-431', - 'zGenAlbum-Cloud Last Interesting Change Date-432', - 'SWYConverszGenAlbum-Cloud Last Interesting Change Date-433', - 'zGenAlbum-Cloud Notification Enabled-434', - 'SWYConverszGenAlbum-Cloud Notification Enabled-435', - 'ParentzGenAlbum-Pinned-436', - 'zGenAlbum-Pinned-437', - 'SWYConverszGenAlbum-Pinned-438', - 'ParentzGenAlbum-Custom Sort Key-439', - 'zGenAlbum-Custom Sort Key-440', - 'SWYConverszGenAlbum-Custom Sort Key-441', - 'ParentzGenAlbum-Custom Sort Ascending-442', - 'zGenAlbum-Custom Sort Ascending-443', - 'SWYConverszGenAlbum-Custom Sort Ascending-444', - 'ParentzGenAlbum-Is Prototype-445', - 'zGenAlbum-Is Prototype-446', - 'SWYConverszGenAlbum-Is Prototype-447', - 'ParentzGenAlbum-Project Document Type-448', - 'zGenAlbum-Project Document Type-449', - 'SWYConverszGenAlbum-Project Document Type-450', - 'ParentzGenAlbum-Custom Query Type-451', - 'zGenAlbum-Custom Query Type-452', - 'SWYConverszGenAlbum-Custom Query Type-453', - 'ParentzGenAlbum-Trashed State-454', - 'ParentzGenAlbum-Trash Date-455', - 'zGenAlbum-Trashed State-456', - 'zGenAlbum-Trash Date-457', - 'SWYConverszGenAlbum-Trashed State-458', - 'SWYConverszGenAlbum-Trash Date-459', - 'ParentzGenAlbum-Cloud Delete State-460', - 'zGenAlbum-Cloud Delete State-461', - 'SWYConverszGenAlbum-Cloud Delete State-462', - 'zGenAlbum-Cloud Owner Whitelisted-463', - 'SWYConverszGenAlbum-Cloud Owner Whitelisted-464', - 'zGenAlbum-Cloud Local Public URL Enabled-465', - 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-466', - 'zGenAlbum-Cloud Public URL Enabled-467', - 'zGenAlbum-Public URL-468', - 'SWYConverszGenAlbum-Cloud Public URL Enabled-469', - 'SWYConverszGenAlbum-Public URL-470', - 'zGenAlbum-Key Asset Face Thumb Index-471', - 'SWYConverszGenAlbum-Key Asset Face Thumb Index-472', - 'zGenAlbum-Project Text Extension ID-473', - 'SWYConverszGenAlbum-Project Text Extension ID-474', - 'zGenAlbum-User Query Data-475', - 'SWYConverszGenAlbum-User Query Data-476', - 'zGenAlbum-Custom Query Parameters-477', - 'SWYConverszGenAlbum-Custom Query Parameters-478', - 'zGenAlbum-Project Data-479', - 'SWYConverszGenAlbum-Project Data-480', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-481', - 'zCldShareAlbumInvRec-Invitation State Local-482', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-483', - 'zCldShareAlbumInvRec-Subscription Date-484', - 'zCldShareAlbumInvRec-Invitee First Name-485', - 'zCldShareAlbumInvRec-Invitee Last Name-486', - 'zCldShareAlbumInvRec-Invitee Full Name-487', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-488', - 'zCldShareAlbumInvRec-Invitee Email Key-489', - 'zGenAlbum-Key Asset Face ID-490', - 'zFaceCrop-Face Area Points-491', - 'zAsset-Face Adjustment Version-492', - 'zAddAssetAttr-Face Analysis Version-493', - 'zDetFace-Asset Visible-494', - 'zPerson-Face Count-495', - 'zDetFace-Face Crop-496', - 'zDetFace-Face Algorithm Version-497', - 'zDetFace-Adjustment Version-498', - 'zDetFace-UUID-4TableStart-499', - 'zPerson-Person UUID-4TableStart-500', - 'zDetFace-Confirmed Face Crop Generation State-501', - 'zDetFace-Manual-502', - 'zDetFace-Detection Type-503', - 'zPerson-Detection Type-504', - 'zDetFace-VIP Model Type-505', - 'zDetFace-Name Source-506', - 'zDetFace-Cloud Name Source-507', - 'zPerson-Person URI-508', - 'zPerson-Display Name-509', - 'zPerson-Full Name-510', - 'zPerson-Cloud Verified Type-511', - 'zFaceCrop-State-512', - 'zFaceCrop-Type-513', - 'zFaceCrop-UUID-4TableStart-514', - 'zPerson-Type-515', - 'zPerson-Verified Type-516', - 'zPerson-Gender Type-517', - 'zDetFace-Gender Type-518', - 'zDetFace-Center X-519', - 'zDetFace-Center Y-520', - 'zPerson-Age Type Estimate-521', - 'zDetFace-Age Type Estimate-522', - 'zDetFace-Ethnicity Type-523', - 'zDetFace-Skin Tone Type-524', - 'zDetFace-Hair Type-525', - 'zDetFace-Hair Color Type-526', - 'zDetFace-Head Gear Type-527', - 'zDetFace-Facial Hair Type-528', - 'zDetFace-Has Face Mask-529', - 'zDetFace-Pose Type-530', - 'zDetFace-Face Expression Type-531', - 'zDetFace-Has Smile-532', - 'zDetFace-Smile Type-533', - 'zDetFace-Lip Makeup Type-534', - 'zDetFace-Eyes State-535', - 'zDetFace-Is Left Eye Closed-536', - 'zDetFace-Is Right Eye Closed-537', - 'zDetFace-Gaze Center X-538', - 'zDetFace-Gaze Center Y-539', - 'zDetFace-Face Gaze Type-540', - 'zDetFace-Eye Glasses Type-541', - 'zDetFace-Eye Makeup Type-542', - 'zDetFace-Cluster Squence Number Key-543', - 'zDetFace-Grouping ID-544', - 'zDetFace-Master ID-545', - 'zDetFace-Quality-546', - 'zDetFace-Quality Measure-547', - 'zDetFace-Source Height-548', - 'zDetFace-Source Width-549', - 'zDetFace-Hidden-Asset Hidden-550', - 'zDetFace-In Trash-Recently Deleted-551', - 'zDetFace-Cloud Local State-552', - 'zDetFace-Training Type-553', - 'zDetFace.Pose Yaw-554', - 'zDetFace-Body Center X-555', - 'zDetFace-Body Center Y-556', - 'zDetFace-Body Height-557', - 'zDetFace-Body Width-558', - 'zDetFace-Roll-559', - 'zDetFace-Size-560', - 'zDetFace-Cluster Squence Number-561', - 'zDetFace-Blur Score-562', - 'zDetFacePrint-Face Print Version-563', - 'zMedAnlyAstAttr-Face Count-564', - 'zDetFaceGroup-UUID-4TableStart-565', - 'zDetFaceGroup-Person Builder State-566', - 'zDetFaceGroup-UnNamed Face Count-567', - 'zPerson-In Person Naming Model-568', - 'zPerson-Key Face Pick Source Key-569', - 'zPerson-Manual Order Key-570', - 'zPerson-Question Type-571', - 'zPerson-Suggested For Client Type-572', - 'zPerson-Merge Target Person-573', - 'zPerson-Cloud Local State-574', - 'zFaceCrop-Cloud Local State-575', - 'zFaceCrop-Cloud Type-576', - 'zPerson-Cloud Delete State-577', - 'zFaceCrop-Cloud Delete State-578', - 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-579', - 'zAsset-Highlight Visibility Score-580', - 'zMedAnlyAstAttr-Media Analysis Version-581', - 'zMedAnlyAstAttr-Audio Classification-582', - 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-583', - 'zMedAnlyAstAttr-Best Video Range Start Time Scale-584', - 'zMedAnlyAstAttr-Best Video Range Duration Value-585', - 'zMedAnlyAstAttr-Best Video Range Start Value-586', - 'zMedAnlyAstAttr-Packed Best Playback Rect-587', - 'zMedAnlyAstAttr-Activity Score-588', - 'zMedAnlyAstAttr-Video Score-589', - 'zMedAnlyAstAttr-AutoPlay Suggestion Score-590', - 'zMedAnlyAstAttr-Blurriness Score-591', - 'zMedAnlyAstAttr-Exposure Score-592', - 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-593', - 'zMedAnlyAstAttr-Probable Rotation Direction-594', - 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-595', - 'zAssetAnalyState-Asset UUID-4TableStart-596', - 'zAssetAnalyState-Analyisis State-597', - 'zAssetAnalyState-Worker Flags-598', - 'zAssetAnalyState-Worker Type-599', - 'zAssetAnalyState-Ignore Until Date-600', - 'zAssetAnalyState-Last Ignored Date-601', - 'zAssetAnalyState-Sort Token-602', - 'zMedAnlyAstAttr-Character Recognition Attr-603', - 'zCharRecogAttr-Algorithm Version-604', - 'zCharRecogAttr-Adjustment Version-605', - 'zMedAnlyAstAttr-Visual Search Attributes-606', - 'zVisualSearchAttr-Algorithm Version-607', - 'zVisualSearchAttr-Adjustment Version-608', - 'zAsset-Overall Aesthetic Score-609', - 'zCompAssetAttr-Behavioral Score-610', - 'zCompAssetAttr-Failure Score zCompAssetAttr-611', - 'zCompAssetAttr-Harmonious Color Score-612', - 'zCompAssetAttr-Immersiveness Score-613', - 'zCompAssetAttr-Interaction Score-614', - 'zCompAssetAttr-Intersting Subject Score-615', - 'zCompAssetAttr-Intrusive Object Presence Score-616', - 'zCompAssetAttr-Lively Color Score-617', - 'zCompAssetAttr-Low Light-618', - 'zCompAssetAttr-Noise Score-619', - 'zCompAssetAttr-Pleasant Camera Tilt Score-620', - 'zCompAssetAttr-Pleasant Composition Score-621', - 'zCompAssetAttr-Pleasant Lighting Score-622', - 'zCompAssetAttr-Pleasant Pattern Score-623', - 'zCompAssetAttr-Pleasant Perspective Score-624', - 'zCompAssetAttr-Pleasant Post Processing Score-625', - 'zCompAssetAttr-Pleasant Reflection Score-626', - 'zCompAssetAttrPleasant Symmetry Score-627', - 'zCompAssetAttr-Sharply Focused Subject Score-628', - 'zCompAssetAttr-Tastfully Blurred Score-629', - 'zCompAssetAttr-Well Chosen Subject Score-630', - 'zCompAssetAttr-Well Framed Subject Score-631', - 'zCompAssetAttr-Well Timeed Shot Score-632', - 'zCldRes-Asset UUID-4TableStart-633', - 'zCldRes-Cloud Local State-634', - 'zCldRes-File Size-635', - 'zCldRes-Height-636', - 'zCldRes-Is Available-637', - 'zCldRes-Is Locally Available-638', - 'zCldRes-Prefetch Count-639', - 'zCldRes-Source Type-640', - 'zCldRes-Type-641', - 'zCldRes-Width-642', - 'zCldRes-Date Created-643', - 'zCldRes-Last OnDemand Download Date-644', - 'zCldRes-Last Prefetch Date-645', - 'zCldRes-Prunedat-646', - 'zCldRes-File Path-647', - 'zCldRes-Fingerprint-648', - 'zCldRes-Item ID-649', - 'zCldRes-UniID-650', - 'zAddAssetAttr-zPK-651', - 'zAddAssetAttr-zENT-652', - 'ZAddAssetAttr-zOPT-653', - 'zAddAssetAttr-zAsset= zAsset_zPK-654', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-655', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-656', - 'zAddAssetAttr-Master Fingerprint-657', - 'zAddAssetAttr-Public Global UUID-658', - 'zAddAssetAttr-Deferred Photo Identifier-659', - 'zAddAssetAttr-Original Assets UUID-660', - 'zAddAssetAttr-Import Session ID-661', - 'zAddAssetAttr-Originating Asset Identifier-662', - 'zAddAssetAttr.Adjusted Fingerprint-663', - 'zAlbumList-zPK= Album List Key-664', - 'zAlbumList-zENT-665', - 'zAlbumList-zOPT-666', - 'zAlbumList-ID Key-667', - 'zAlbumList-UUID-668', - 'zAsset-zPK-669', - 'zAsset-zENT-670', - 'zAsset-zOPT-671', - 'zAsset-Master= zCldMast-zPK-672', - 'zAsset-Extended Attributes= zExtAttr-zPK-673', - 'zAsset-Import Session Key-674', - 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-675', - 'zAsset-FOK-Cloud Feed Asset Entry Key-676', - 'zAsset-Moment Share Key= zShare-zPK-677', - 'zAsset-zMoment Key= zMoment-zPK-678', - 'zAsset-Computed Attributes Asset Key-679', - 'zAsset-Highlight Being Assets-HBA Key-680', - 'zAsset-Highlight Being Extended Assets-HBEA Key-681', - 'zAsset-Highligh Being Summary Assets-HBSA Key-682', - 'zAsset-Day Group Highlight Being Assets-DGHBA Key-683', - 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-684', - 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-685', - 'zAsset-Promotion Score-686', - 'zAsset-Media Analysis Attributes Key-687', - 'zAsset-Media Group UUID-688', - 'zAsset-UUID = store.cloudphotodb-689', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-690', - 'zAsset.Cloud Collection GUID-691', - 'zAsset-Avalanche UUID-692', - 'zAssetAnalyState-zPK-693', - 'zAssetAnalyState-zEnt-694', - 'zAssetAnalyState-zOpt-695', - 'zAssetAnalyState-Asset= zAsset-zPK-696', - 'zAssetAnalyState-Asset UUID-697', - 'zAssetDes-zPK-698', - 'zAssetDes-zENT-699', - 'zAssetDes-zOPT-700', - 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-701', - 'zCharRecogAttr-zPK-702', - 'zCharRecogAttr-zENT-703', - 'zCharRecogAttr-zOPT-704', - 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-705', - 'zCldFeedEnt-zPK= zCldShared keys-706', - 'zCldFeedEnt-zENT-707', - 'zCldFeedEnt-zOPT-708', - 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-709', - 'zCldFeedEnt-Entry Invitation Record GUID-710', - 'zCldFeedEnt-Entry Cloud Asset GUID-711', - 'zCldMast-zPK= zAsset-Master-712', - 'zCldMast-zENT-713', - 'zCldMast-zOPT-714', - 'zCldMast-Moment Share Key= zShare-zPK-715', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-716', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-717', - 'zCldMast-Originating Asset ID-718', - 'zCldMast-Import Session ID- AirDrop-StillTesting-719', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-720', - 'CMzCldMastMedData-zENT-721', - 'CMzCldMastMedData-zOPT-722', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-723', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-724', - 'AAAzCldMastMedData-zENT-725', - 'AAAzCldMastMedData-zOPT-726', - 'AAAzCldMastMedData-CldMast key-727', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-728', - 'zCldRes-zPK-729', - 'zCldRes-zENT-730', - 'zCldRes-zOPT-731', - 'zCldRes-Asset= zAsset-zPK-732', - 'zCldRes-Cloud Master= zCldMast-zPK-733', - 'zCldRes-Asset UUID-734', - 'zCldShareAlbumInvRec-zPK-735', - 'zCldShareAlbumInvRec-zEnt-736', - 'zCldShareAlbumInvRec-zOpt-737', - 'zCldShareAlbumInvRec-Album Key-738', - 'zCldShareAlbumInvRec-FOK Album Key-739', - 'zCldShareAlbumInvRec-Album GUID-740', - 'zCldShareAlbumInvRec-Cloud GUID-741', - 'zCldSharedComment-zPK-742', - 'zCldSharedComment-zENT-743', - 'zCldSharedComment-zOPT-744', - 'zCldSharedComment-Commented Asset Key= zAsset-zPK-745', - 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-746', - 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-747', - 'zCldSharedComment-Liked Asset Key= zAsset-zPK-748', - 'zCldSharedComment-CldFeedLikeCommentEntry Key-749', - 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-750', - 'zCldSharedComment-Cloud GUID-751', - 'zCompAssetAttr-zPK-752', - 'zCompAssetAttr-zEnt-753', - 'zCompAssetAttr-zOpt-754', - 'zCompAssetAttr-Asset Key-755', - 'zDetFace-zPK-756', - 'zDetFace-zEnt-757', - 'zDetFace.zOpt-758', - 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-759', - 'zDetFace-Person= zPerson-zPK-760', - 'zDetFace-Person Being Key Face-761', - 'zDetFace-Face Print-762', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-763', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-764', - 'zDetFace-UUID-765', - 'zDetFaceGroup-zPK-766', - 'zDetFaceGroup-zENT-767', - 'zDetFaceGroup-zOPT-768', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-769', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-770', - 'zDetFaceGroup-UUID-771', - 'zDetFacePrint-zPK-772', - 'zDetFacePrint-zEnt-773', - 'zDetFacePrint-zOpt-774', - 'zDetFacePrint-Face Key-775', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-776', - 'zExtAttr-zENT-777', - 'zExtAttr-zOPT-778', - 'zExtAttr-Asset Key-779', - 'zFaceCrop-zPK-780', - 'zFaceCrop-zEnt-781', - 'zFaceCrop-zOpt-782', - 'zFaceCrop-Asset Key-783', - 'zFaceCrop-Invalid Merge Canidate Person UUID-784', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-785', - 'zFaceCrop-Face Key-786', - 'zFaceCrop-UUID-787', - 'zGenAlbum-zPK=26AlbumLists= 26Albums-788', - 'zGenAlbum-zENT-789', - 'zGenAlbum-zOpt-790', - 'zGenAlbum-Key Asset-Key zAsset-zPK-791', - 'zGenAlbum-Secondary Key Asset-792', - 'zGenAlbum-Tertiary Key Asset-793', - 'zGenAlbum-Custom Key Asset-794', - 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-795', - 'zGenAlbum-FOK Parent Folder-796', - 'zGenAlbum-zSyndicate-797', - 'zGenAlbum-UUID-798', - 'SWYConverszGenAlbum-UUID-799', - 'zGenAlbum-Cloud_GUID = store.cloudphotodb-800', - 'SWYConverszGenAlbum-Cloud GUID-801', - 'zGenAlbum-Project Render UUID-802', - 'SWYConverszGenAlbum-Project Render UUID-803', - 'zIntResou-zPK-804', - 'zIntResou-zENT-805', - 'zIntResou-zOPT-806', - 'zIntResou-Asset= zAsset_zPK-807', - 'zIntResou-Fingerprint-808', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-809', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-810', - 'zMedAnlyAstAttr-zEnt-811', - 'zMedAnlyAstAttr-zOpt-812', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-813', - 'zPerson-zPK=zDetFace-Person-814', - 'zPerson-zEnt-815', - 'zPerson-zOpt-816', - 'zPerson-KeyFace=zDetFace-zPK-817', - 'zPerson-Assoc Face Group Key-818', - 'zPerson-Person UUID-819', - 'zSceneP-zPK-820', - 'zSceneP-zENT-821', - 'zSceneP-zOPT-822', - 'zShare-zPK-823', - 'zShare-zENT-824', - 'zShare-zOPT-825', - 'zShare-UUID-826', - 'SPLzShare-UUID-827', - 'zShare-Scope ID = store.cloudphotodb-828', - 'zSharePartic-zPK-829', - 'zSharePartic-zENT-830', - 'zSharePartic-zOPT-831', - 'zSharePartic-Share Key= zShare-zPK-832', - 'zSharePartic-UUID-833', - 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-834', - 'zUnmAdj-zOPT-835', - 'zUnmAdj-zENT-836', - 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-837', - 'zUnmAdj-UUID-838', - 'zUnmAdj-Other Adjustments Fingerprint-839', - 'zUnmAdj-Similar to Orig Adjustments Fingerprint-840', - 'zVisualSearchAttr-zPK-841', - 'zVisualSearchAttr-zENT-842', - 'zVisualSearchAttr-zOPT-843', - 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-844', - 'z26AlbumList-26Albums= zGenAlbum-zPK-845', - 'z26AlbumList-Album List Key-846', - 'z26AlbumList-FOK26Albums Key-847', - 'z27Assets-27Albums= zGenAlbum-zPK-848', - 'z27Assets-3Asset Key= zAsset-zPK in the Album-849', - 'z27Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-850') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph95.1-iOS15_Ref_for_Asset_Analysis-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) + ''' - tlactivity = 'Ph95.1-iOS15_Ref_for_Asset_Analysis-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: - else: - logfunc('No data available for iOS 15 PhotoData-Photos.sqlite') + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], + row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], + row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], + row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], + row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], + row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], + row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], + row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], + row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], + row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], + row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], + row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], + row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], + row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], + row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], + row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], + row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], + row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], + row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], + row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], + row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], + row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], + row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], + row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], + row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], + row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], + row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], + row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], + row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], + row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], + row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], + row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], + row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], + row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], + row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], + row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], + row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], + row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], + row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], + row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], + row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], + row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], + row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], + row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], + row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], + row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], + row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], + row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], + row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], + row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], + row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], + row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], + row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], + row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], + row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], + row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], + row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], + row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], + row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], + row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], + row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], + row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], + row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], + row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], + row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], + row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], + row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], + row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], + row[844], row[845], row[846], row[847], row[848], row[849], row[850])) - db.close() - return + data_headers = (('zAsset-Added Date-0', 'datetime'), + 'zAsset- SortToken -CameraRoll-1', + 'zAsset Complete-2', + 'zAsset-zPK-4QueryStart-3', + 'zAddAssetAttr-zPK-4QueryStart-4', + 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', + 'zAddAssetAttr-Master Fingerprint-4TableStart-6', + 'zIntResou-Fingerprint-4TableStart-7', + 'zAsset-Bundle Scope-8', + 'zAsset-Syndication State-9', + 'zAsset-Cloud is My Asset-10', + 'zAsset-Cloud is deletable-Asset-11', + 'zAsset-Cloud_Local_State-12', + 'zAsset-Visibility State-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zExtAttr-Lens Model-16', + 'zExtAttr-Flash Fired-17', + 'zExtAttr-Focal Lenght-18', + 'zExtAttr-Focal Lenth in 35MM-19', + 'zExtAttr-Digital Zoom Ratio-20', + 'zAsset-Derived Camera Capture Device-21', + 'zAddAssetAttr-Camera Captured Device-22', + 'zAddAssetAttr-Imported by-23', + 'zCldMast-Imported By-24', + 'zAddAssetAttr.Imported by Bundle Identifier-25', + 'zAddAssetAttr-Imported By Display Name-26', + 'zCldMast-Imported by Bundle ID-27', + 'zCldMast-Imported by Display Name-28', + 'zAsset-Saved Asset Type-29', + 'zAsset-Directory-Path-30', + 'zAsset-Filename-31', + 'zAddAssetAttr- Original Filename-32', + 'zCldMast- Original Filename-33', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-34', + ('zAddAssetAttr-Date Created Source-35', 'datetime'), + ('zAsset-Date Created-36', 'datetime'), + ('zCldMast-Creation Date-37', 'datetime'), + ('zIntResou-CldMst Date Created-38', 'datetime'), + 'zAddAssetAttr-Time Zone Name-39', + 'zAddAssetAttr-Time Zone Offset-40', + 'zAddAssetAttr-Inferred Time Zone Offset-41', + 'zAddAssetAttr-EXIF-String-42', + ('zAsset-Modification Date-43', 'datetime'), + ('zAsset-Last Shared Date-44', 'datetime'), + 'zCldMast-Cloud Local State-45', + ('zCldMast-Import Date-46', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', 'datetime'), + 'zAddAssetAttr-Import Session ID-4QueryStart-48', + ('zAddAssetAttr-Alt Import Image Date-49', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-50', + ('zAsset-Cloud Batch Publish Date-51', 'datetime'), + ('zAsset-Cloud Server Publish Date-52', 'datetime'), + 'zAsset-Cloud Download Requests-53', + 'zAsset-Cloud Batch ID-54', + 'zAddAssetAttr-Upload Attempts-55', + 'zAsset-Latitude-56', + 'zExtAttr-Latitude-57', + 'zAsset-Longitude-58', + 'zExtAttr-Longitude-59', + 'zAddAssetAttr-GPS Horizontal Accuracy-60', + 'zAddAssetAttr-Location Hash-61', + 'zAddAssetAttr-Shifted Location Valid-62', + 'zAddAssetAttr-Shifted Location Data-63', + 'zAddAssetAttr-Reverse Location Is Valid-64', + 'zAddAssetAttr-Reverse Location Data-65', + 'ParentzGenAlbum-UUID-4QueryStart-66', + 'zGenAlbum-UUID-4QueryStart-67', + 'SWYConverszGenAlbum-UUID-4QueryStart-68', + 'ParentzGenAlbum-Cloud GUID-4QueryStart-69', + 'zGenAlbum-Cloud GUID-4QueryStart-70', + 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-71', + 'zCldShareAlbumInvRec-Album GUID-4QueryStart-72', + 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-73', + 'zGenAlbum-Project Render UUID-4QueryStart-74', + 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-75', + 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-76', + 'zGenAlbum-Cloud_Local_State-4QueryStart-77', + 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-78', + ('ParentzGenAlbum- Creation Date- 4QueryStart-79', 'datetime'), + ('zGenAlbum- Creation Date- 4QueryStart-80', 'datetime'), + ('SWYConverszGenAlbum- Creation Date- 4QueryStart-81', 'datetime'), + ('zGenAlbum- Cloud Creation Date- 4QueryStart-82', 'datetime'), + ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-83', 'datetime'), + ('zGenAlbum- Start Date- 4QueryStart-84', 'datetime'), + ('SWYConverszGenAlbum- Start Date- 4QueryStart-85', 'datetime'), + ('zGenAlbum- End Date- 4QueryStart-86', 'datetime'), + ('SWYConverszGenAlbum- End Date- 4QueryStart-87', 'datetime'), + ('zGenAlbum-Cloud Subscription Date- 4QueryStart-88', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-89', 'datetime'), + 'ParentzGenAlbum- Title- 4QueryStart-90', + 'zGenAlbum- Title-User&System Applied- 4QueryStart-91', + 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-92', + 'zGenAlbum-Import Session ID-SWY- 4QueryStart-93', + 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-94', + 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-95', + 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-96', + 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-97', + 'SWYConverszGenAlbum- Syndicate-4QueryStart-98', + 'zGenAlbum-zENT- Entity- 4QueryStart-99', + 'ParentzGenAlbum- Kind- 4QueryStart-100', + 'zGenAlbum-Album Kind- 4QueryStart-101', + 'SWYConverszGenAlbum-Album Kind- 4QueryStart-102', + 'AAAzCldMastMedData-zOPT-103', + 'zAddAssetAttr-Media Metadata Type-104', + 'AAAzCldMastMedData-Data-105', + 'CldMasterzCldMastMedData-zOPT-106', + 'zCldMast-Media Metadata Type-107', + 'CMzCldMastMedData-Data-108', + 'zAddAssetAttr-Syndication History-109', + 'zMedAnlyAstAttr-Syndication Processing Version-110', + 'zMedAnlyAstAttr-Syndication Processing Value-111', + 'zAsset-Orientation-112', + 'zAddAssetAttr-Original Orientation-113', + 'zAsset-Kind-114', + 'zAsset-Kind-Sub-Type-115', + 'zAddAssetAttr-Cloud Kind Sub Type-116', + 'zAsset-Playback Style-117', + 'zAsset-Playback Variation-118', + 'zAsset-Video Duration-119', + 'zExtAttr-Duration-120', + 'zAsset-Video CP Duration-121', + 'zAddAssetAttr-Video CP Duration Time Scale-122', + 'zAsset-Video CP Visibility State-123', + 'zAddAssetAttr-Video CP Display Value-124', + 'zAddAssetAttr-Video CP Display Time Scale-125', + 'zIntResou-Datastore Class ID-126', + 'zAsset-Cloud Placeholder Kind-127', + 'zIntResou-Local Availability-128', + 'zIntResou-Local Availability Target-129', + 'zIntResou-Cloud Local State-130', + 'zIntResou-Remote Availability-131', + 'zIntResou-Remote Availability Target-132', + 'zIntResou-Transient Cloud Master-133', + 'zIntResou-Side Car Index-134', + 'zIntResou- File ID-135', + 'zIntResou-Version-136', + 'zAddAssetAttr- Original-File-Size-137', + 'zIntResou-Resource Type-138', + 'zIntResou-Datastore Sub-Type-139', + 'zIntResou-Cloud Source Type-140', + 'zIntResou-Data Length-141', + 'zIntResou-Recipe ID-142', + ('zIntResou-Cloud Last Prefetch Date-143', 'datetime'), + 'zIntResou-Cloud Prefetch Count-144', + ('zIntResou- Cloud-Last-OnDemand Download-Date-145', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-146', + 'zIntResou-Compact-UTI-147', + 'zAsset-Uniform Type ID-148', + 'zAsset-Original Color Space-149', + 'zCldMast-Uniform_Type_ID-150', + 'zCldMast-Full Size JPEG Source-151', + 'zAsset-HDR Gain-152', + 'zAsset-zHDR_Type-153', + 'zExtAttr-Codec-154', + 'zIntResou-Codec Four Char Code Name-155', + 'zCldMast-Codec Name-156', + 'zCldMast-Video Frame Rate-157', + 'zCldMast-Placeholder State-158', + 'zAsset-Depth_Type-159', + 'zAsset-Avalanche UUID-4TableStart-160', + 'zAsset-Avalanche_Pick_Type-BurstAsset-161', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-162', + 'zAddAssetAttr-Cloud Recovery State-163', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-164', + 'zAsset-Deferred Processing Needed-165', + 'zAsset-Video Deferred Processing Needed-166', + 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-167', + 'zAddAssetAttr-Deferred Processing Candidate Options-168', + 'zAsset-Has Adjustments-Camera-Effects-Filters-169', + 'zUnmAdj-UUID-4TableStart-170', + 'zAsset-Adjustment Timestamp-171', + 'zUnmAdj-Adjustment Timestamp-172', + 'zAddAssetAttr-Editor Bundle ID-173', + 'zUnmAdj-Editor Localized Name-174', + 'zUnmAdj-Adjustment Format ID-175', + 'zAddAssetAttr-Montage-176', + 'zUnmAdj-Adjustment Render Types-177', + 'zUnmAdj-Adjustment Format Version-178', + 'zUnmAdj-Adjustment Base Image Format-179', + 'zAsset-Favorite-180', + 'zAsset-Hidden-181', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-182', + ('zAsset-Trashed Date-183', 'datetime'), + 'zIntResou-Trash State-184', + 'zIntResou-Trashed Date-185', + 'zAsset-Cloud Delete State-186', + 'zIntResou-Cloud Delete State-187', + 'zAddAssetAttr-PTP Trashed State-188', + 'zIntResou-PTP Trashed State-189', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-190', + 'zMedAnlyAstAttr-Media Analysis Timestamp-191', + ('zAsset-Analysis State Modificaion Date-192', 'datetime'), + 'zAddAssetAttr- Pending View Count-193', + 'zAddAssetAttr- View Count-194', + 'zAddAssetAttr- Pending Play Count-195', + 'zAddAssetAttr- Play Count-196', + 'zAddAssetAttr- Pending Share Count-197', + 'zAddAssetAttr- Share Count-198', + 'zAddAssetAttr-Allowed for Analysis-199', + 'zAddAssetAttr-Scene Analysis Version-200', + 'zAddAssetAttr-Scene Analysis is From Preview-201', + 'zAddAssetAttr-Scene Analysis Timestamp-202', + 'zAddAssetAttr-Destination Asset Copy State-203', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-204', + 'zCldMast-Source Master For Duplication Scope ID-205', + 'zAddAssetAttr-Source Asset For Duplication ID-206', + 'zCldMast-Source Master for Duplication ID-207', + 'zAddAssetAttr-Variation Suggestions States-208', + 'zAsset-High Frame Rate State-209', + 'zAsset-Video Key Frame Time Scale-210', + 'zAsset-Video Key Frame Value-211', + 'zExtAttr-ISO-212', + 'zExtAttr-Metering Mode-213', + 'zExtAttr-Sample Rate-214', + 'zExtAttr-Track Format-215', + 'zExtAttr-White Balance-216', + 'zExtAttr-Aperture-217', + 'zExtAttr-BitRate-218', + 'zExtAttr-Exposure Bias-219', + 'zExtAttr-Frames Per Second-220', + 'zExtAttr-Shutter Speed-221', + 'zExtAttr-Slush Scene Bias-222', + 'zExtAttr-Slush Version-223', + 'zExtAttr-Slush Preset-224', + 'zExtAttr-Slush Warm Bias-225', + 'zAsset-Height-226', + 'zAddAssetAttr-Original Height-227', + 'zIntResou-Unoriented Height-228', + 'zAsset-Width-229', + 'zAddAssetAttr-Original Width-230', + 'zIntResou-Unoriented Width-231', + 'zShare-Thumbnail Image Data-232', + 'SPLzShare-Thumbnail Image Data-233', + 'zAsset-Thumbnail Index-234', + 'zAddAssetAttr-Embedded Thumbnail Height-235', + 'zAddAssetAttr-Embedded Thumbnail Length-236', + 'zAddAssetAttr-Embedded Thumbnail Offset-237', + 'zAddAssetAttr-Embedded Thumbnail Width-238', + 'zAsset-Packed Acceptable Crop Rect-239', + 'zAsset-Packed Badge Attributes-240', + 'zAsset-Packed Preferred Crop Rect-241', + 'zAsset-Curation Score-242', + 'zAsset-Camera Processing Adjustment State-243', + 'zAsset-Depth Type-244', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-245', + 'zAddAssetAttr-Orig Resource Choice-246', + 'zAddAssetAttr-Spatial Over Capture Group ID-247', + 'zAddAssetAttr-Place Annotation Data-248', + 'zAddAssetAttr-Distance Identity-249', + 'zAddAssetAttr-Edited IPTC Attributes-250', + 'zAssetDes-Long Description-251', + 'zAddAssetAttr-Asset Description-252', + 'zAddAssetAttr-Title-Comments via Cloud Website-253', + 'zAddAssetAttr-Accessibility Description-254', + 'zAddAssetAttr-Photo Stream Tag ID-255', + ('zCldFeedEnt-Entry Date-256', 'datetime'), + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-257', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-258', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-259', + 'zCldFeedEnt-Entry Priority Number-260', + 'zCldFeedEnt-Entry Type Number-261', + 'zCldSharedComment-Cloud GUID-4TableStart-262', + ('zCldSharedComment-Date-263', 'datetime'), + ('zCldSharedComment-Comment Client Date-264', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-265', 'datetime'), + 'zCldSharedComment-Type-266', + 'zCldSharedComment-Comment Text-267', + 'zCldSharedComment-Commenter Hashed Person ID-268', + 'zCldSharedComment-Batch Comment-269', + 'zCldSharedComment-Is a Caption-270', + 'zAsset-Cloud Has Comments by Me-271', + 'zCldSharedComment-Is My Comment-272', + 'zCldSharedComment-Is Deletable-273', + 'zAsset-Cloud Has Comments Conversation-274', + 'zAsset-Cloud Has Unseen Comments-275', + 'zCldSharedComment-Liked-276', + 'zAddAssetAttr-Share Type-277', + 'zShare-UUID-CMM-4TableStart-278', + 'SPLzShare-UUID-SPL-4TableStart-279', + 'zShare-zENT-CMM-280', + 'SPLzShare-zENT-SPL-281', + 'zShare-Status-CMM-282', + 'SPLzShare-Status-SPL-283', + 'zShare-Scope Type-CMM-284', + 'SPLzShare-Scope Type-SPL-285', + 'zShare-Local Publish State-CMM-286', + 'SPLzShare-Local Publish State-SPL-287', + 'zShare-Public Permission-CMM-288', + 'SPLzShare-Public Permission-SPL-289', + 'zShare-Originating Scope ID-CMM-290', + 'SPLzShare-Originating Scope ID-SPL-291', + 'zShare-Scope ID-CMM-292', + 'SPLzShare-Scope ID-SPL-293', + 'zShare-Title-CMM-294', + 'SPLzShare-Title-SPL-295', + 'zShare-Share URL-CMM-296', + 'SPLzShare-Share URL-SPL-297', + ('zShare-Creation Date-CMM-298', 'datetime'), + ('SPLzShare-Creation Date-SPL-299', 'datetime'), + ('zShare-Start Date-CMM-300', 'datetime'), + ('SPLzShare-Start Date-SPL-301', 'datetime'), + ('zShare-End Date-CMM-302', 'datetime'), + ('SPLzShare-End Date-SPL-303', 'datetime'), + ('zShare-Expiry Date-CMM-304', 'datetime'), + ('SPLzShare-Expiry Date-SPL-305', 'datetime'), + 'zShare-Asset Count-CMM-306', + 'SPLzShare-Asset Count-SPL-307', + 'zShare-Photos Count-CMM-308', + 'SPLzShare-Photos Count-CMM-SPL-309', + 'zShare-Uploaded Photos Count-CMM-310', + 'SPLzShare-Uploaded Photos Count-SPL-311', + 'zShare-Videos Count-CMM-312', + 'SPLzShare-Videos Count-SPL-313', + 'zShare-Uploaded Videos Count-CMM-314', + 'SPLzShare-Uploaded Videos Count-SPL-315', + 'zShare-Force Sync Attempted-CMM-316', + 'SPLzShare-Force Sync Attempted-SPL-317', + 'zShare-Auto Share Policy-CMM-318', + 'SPLzShare-Auto Share Policy-SPL-319', + 'zShare-Should Notify On Upload Completion-CMM-320', + 'SPLzShare-Should Notify On Upload Completion-SPL-321', + 'zShare-Trashed State-CMM-322', + 'SPLzShare-Trashed State-SPL-323', + 'zShare-Cloud Delete State-CMM-324', + 'SPLzShare-Cloud Delete State-SPL-325', + 'zShare-Should Ignor Budgets-CMM-326', + 'SPLzShare-Should Ignor Budgets-SPL-327', + 'zShare-Rules-CMM-328', + 'SPLzShare-Rules-SPL-329', + 'zSharePartic-UUID-4TableStart-330', + 'SPLzSharePartic-UUID-4TableStart-331', + 'zSharePartic-Acceptance Status-332', + 'SPLzSharePartic-Acceptance Status-333', + 'zSharePartic-Is Current User-334', + 'SPLzSharePartic-Is Current User-335', + 'zSharePartic-Role-336', + 'SPLzSharePartic-Role-337', + 'zSharePartic-Premission-338', + 'SPLzSharePartic-Premission-339', + 'zSharePartic-User ID-340', + 'SPLzSharePartic-User ID-341', + 'SPLzSharePartic-zPK-4TableStart-342', + 'zSharePartic-zPK-4TableStart-343', + 'zSharePartic-Email Address-344', + 'SPLzSharePartic-Email Address-345', + 'zSharePartic-Phone Number-346', + 'SPLzSharePartic-Phone Number-347', + 'ParentzGenAlbum-UUID-4TableStart-348', + 'zGenAlbum-UUID-4TableStart-349', + 'SWYConverszGenAlbum-UUID-4TableStart-350', + 'ParentzGenAlbum-Cloud GUID-4TableStart-351', + 'zGenAlbum-Cloud GUID-4TableStart-352', + 'SWYConverszGenAlbum-Cloud GUID-4TableStart-353', + 'zCldShareAlbumInvRec-Album GUID-4TableStart-354', + 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-355', + 'zGenAlbum-Project Render UUID-4TableStart-356', + 'SWYConverszGenAlbum-Project Render UUID-4TableStart-357', + 'zAlbumList-Needs Reordering Number-358', + 'zGenAlbum-zENT- Entity-359', + 'ParentzGenAlbum-Kind-360', + 'zGenAlbum-Album Kind-361', + 'SWYConverszGenAlbum-Album Kind-362', + 'ParentzGenAlbum-Cloud-Local-State-363', + 'zGenAlbum-Cloud_Local_State-364', + 'SWYConverszGenAlbum-Cloud_Local_State-365', + 'ParentzGenAlbum- Title-366', + 'zGenAlbum- Title-User&System Applied-367', + 'SWYConverszGenAlbum- Title -User&System Applied-368', + 'zGenAlbum-Import Session ID-SWY-369', + 'zAsset- Conversation= zGenAlbum_zPK-370', + 'SWYConverszGenAlbum- Import Session ID-SWY-371', + 'zGenAlbum-Imported by Bundle Identifier-372', + 'SWYzGenAlbum-Imported by Bundle Identifier-373', + 'SWYConverszGenAlbum- Syndicate-374', + ('ParentzGenAlbum-Creation Date-375', 'datetime'), + ('zGenAlbum-Creation Date-376', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-377', 'datetime'), + ('zGenAlbum-Cloud Creation Date-378', 'datetime'), + ('SWYConverszGenAlbum-Cloud Creation Date-379', 'datetime'), + ('zGenAlbum-Start Date-380', 'datetime'), + ('SWYConverszGenAlbum-Start Date-381', 'datetime'), + ('zGenAlbum-End Date-382', 'datetime'), + ('SWYConverszGenAlbum-End Date-383', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-384', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date-385', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-386', + 'zGenAlbum-Pending Items Count-387', + 'SWYConverszGenAlbum-Pending Items Count-388', + 'ParentzGenAlbum-Pending Items Type-389', + 'zGenAlbum-Pending Items Type-390', + 'SWYConverszGenAlbum-Pending Items Type-391', + 'zGenAlbum- Cached Photos Count-392', + 'SWYConverszGenAlbum- Cached Photos Count-393', + 'zGenAlbum- Cached Videos Count-394', + 'SWYConverszGenAlbum- Cached Videos Count-395', + 'zGenAlbum- Cached Count-396', + 'SWYConverszGenAlbum- Cached Count-397', + 'ParentzGenAlbum-Sync Event Order Key-398', + 'zGenAlbum-Sync Event Order Key-399', + 'SWYConverszGenAlbum-Sync Event Order Key-400', + 'zGenAlbum-Has Unseen Content-401', + 'SWYConverszGenAlbum-Has Unseen Content-402', + 'zGenAlbum-Unseen Asset Count-403', + 'SWYConverszGenAlbum-Unseen Asset Count-404', + 'zGenAlbum-is Owned-405', + 'SWYConverszGenAlbum-is Owned-406', + 'zGenAlbum-Cloud Relationship State-407', + 'SWYConverszGenAlbum-Cloud Relationship State-408', + 'zGenAlbum-Cloud Relationship State Local-409', + 'SWYConverszGenAlbum-Cloud Relationship State Local-410', + 'zGenAlbum-Cloud Owner Mail Key-411', + 'SWYConverszGenAlbum-Cloud Owner Mail Key-412', + 'zGenAlbum-Cloud Owner Frist Name-413', + 'SWYConverszGenAlbum-Cloud Owner Frist Name-414', + 'zGenAlbum-Cloud Owner Last Name-415', + 'SWYConverszGenAlbum-Cloud Owner Last Name-416', + 'zGenAlbum-Cloud Owner Full Name-417', + 'SWYConverszGenAlbum-Cloud Owner Full Name-418', + 'zGenAlbum-Cloud Person ID-419', + 'SWYConverszGenAlbum-Cloud Person ID-420', + 'zAsset-Cloud Owner Hashed Person ID-421', + 'zGenAlbum-Cloud Owner Hashed Person ID-422', + 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-423', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-424', + 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-425', + 'zGenAlbum-Cloud Multi-Contributors Enabled-426', + 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-427', + 'zGenAlbum-Cloud Album Sub Type-428', + 'SWYConverszGenAlbum-Cloud Album Sub Type-429', + ('zGenAlbum-Cloud Contribution Date-430', 'datetime'), + ('SWYConverszGenAlbum-Cloud Contribution Date-431', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-432', 'datetime'), + ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-433', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-434', + 'SWYConverszGenAlbum-Cloud Notification Enabled-435', + 'ParentzGenAlbum-Pinned-436', + 'zGenAlbum-Pinned-437', + 'SWYConverszGenAlbum-Pinned-438', + 'ParentzGenAlbum-Custom Sort Key-439', + 'zGenAlbum-Custom Sort Key-440', + 'SWYConverszGenAlbum-Custom Sort Key-441', + 'ParentzGenAlbum-Custom Sort Ascending-442', + 'zGenAlbum-Custom Sort Ascending-443', + 'SWYConverszGenAlbum-Custom Sort Ascending-444', + 'ParentzGenAlbum-Is Prototype-445', + 'zGenAlbum-Is Prototype-446', + 'SWYConverszGenAlbum-Is Prototype-447', + 'ParentzGenAlbum-Project Document Type-448', + 'zGenAlbum-Project Document Type-449', + 'SWYConverszGenAlbum-Project Document Type-450', + 'ParentzGenAlbum-Custom Query Type-451', + 'zGenAlbum-Custom Query Type-452', + 'SWYConverszGenAlbum-Custom Query Type-453', + 'ParentzGenAlbum-Trashed State-454', + ('ParentzGenAlbum-Trash Date-455', 'datetime'), + 'zGenAlbum-Trashed State-456', + ('zGenAlbum-Trash Date-457', 'datetime'), + 'SWYConverszGenAlbum-Trashed State-458', + ('SWYConverszGenAlbum-Trash Date-459', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-460', + 'zGenAlbum-Cloud Delete State-461', + 'SWYConverszGenAlbum-Cloud Delete State-462', + 'zGenAlbum-Cloud Owner Whitelisted-463', + 'SWYConverszGenAlbum-Cloud Owner Whitelisted-464', + 'zGenAlbum-Cloud Local Public URL Enabled-465', + 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-466', + 'zGenAlbum-Cloud Public URL Enabled-467', + 'zGenAlbum-Public URL-468', + 'SWYConverszGenAlbum-Cloud Public URL Enabled-469', + 'SWYConverszGenAlbum-Public URL-470', + 'zGenAlbum-Key Asset Face Thumb Index-471', + 'SWYConverszGenAlbum-Key Asset Face Thumb Index-472', + 'zGenAlbum-Project Text Extension ID-473', + 'SWYConverszGenAlbum-Project Text Extension ID-474', + 'zGenAlbum-User Query Data-475', + 'SWYConverszGenAlbum-User Query Data-476', + 'zGenAlbum-Custom Query Parameters-477', + 'SWYConverszGenAlbum-Custom Query Parameters-478', + 'zGenAlbum-Project Data-479', + 'SWYConverszGenAlbum-Project Data-480', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-481', + 'zCldShareAlbumInvRec-Invitation State Local-482', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-483', + ('zCldShareAlbumInvRec-Subscription Date-484', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-485', + 'zCldShareAlbumInvRec-Invitee Last Name-486', + 'zCldShareAlbumInvRec-Invitee Full Name-487', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-488', + 'zCldShareAlbumInvRec-Invitee Email Key-489', + 'zGenAlbum-Key Asset Face ID-490', + 'zFaceCrop-Face Area Points-491', + 'zAsset-Face Adjustment Version-492', + 'zAddAssetAttr-Face Analysis Version-493', + 'zDetFace-Asset Visible-494', + 'zPerson-Face Count-495', + 'zDetFace-Face Crop-496', + 'zDetFace-Face Algorithm Version-497', + 'zDetFace-Adjustment Version-498', + 'zDetFace-UUID-4TableStart-499', + 'zPerson-Person UUID-4TableStart-500', + 'zDetFace-Confirmed Face Crop Generation State-501', + 'zDetFace-Manual-502', + 'zDetFace-Detection Type-503', + 'zPerson-Detection Type-504', + 'zDetFace-VIP Model Type-505', + 'zDetFace-Name Source-506', + 'zDetFace-Cloud Name Source-507', + 'zPerson-Person URI-508', + 'zPerson-Display Name-509', + 'zPerson-Full Name-510', + 'zPerson-Cloud Verified Type-511', + 'zFaceCrop-State-512', + 'zFaceCrop-Type-513', + 'zFaceCrop-UUID-4TableStart-514', + 'zPerson-Type-515', + 'zPerson-Verified Type-516', + 'zPerson-Gender Type-517', + 'zDetFace-Gender Type-518', + 'zDetFace-Center X-519', + 'zDetFace-Center Y-520', + 'zPerson-Age Type Estimate-521', + 'zDetFace-Age Type Estimate-522', + 'zDetFace-Ethnicity Type-523', + 'zDetFace-Skin Tone Type-524', + 'zDetFace-Hair Type-525', + 'zDetFace-Hair Color Type-526', + 'zDetFace-Head Gear Type-527', + 'zDetFace-Facial Hair Type-528', + 'zDetFace-Has Face Mask-529', + 'zDetFace-Pose Type-530', + 'zDetFace-Face Expression Type-531', + 'zDetFace-Has Smile-532', + 'zDetFace-Smile Type-533', + 'zDetFace-Lip Makeup Type-534', + 'zDetFace-Eyes State-535', + 'zDetFace-Is Left Eye Closed-536', + 'zDetFace-Is Right Eye Closed-537', + 'zDetFace-Gaze Center X-538', + 'zDetFace-Gaze Center Y-539', + 'zDetFace-Face Gaze Type-540', + 'zDetFace-Eye Glasses Type-541', + 'zDetFace-Eye Makeup Type-542', + 'zDetFace-Cluster Squence Number Key-543', + 'zDetFace-Grouping ID-544', + 'zDetFace-Master ID-545', + 'zDetFace-Quality-546', + 'zDetFace-Quality Measure-547', + 'zDetFace-Source Height-548', + 'zDetFace-Source Width-549', + 'zDetFace-Hidden-Asset Hidden-550', + 'zDetFace-In Trash-Recently Deleted-551', + 'zDetFace-Cloud Local State-552', + 'zDetFace-Training Type-553', + 'zDetFace.Pose Yaw-554', + 'zDetFace-Body Center X-555', + 'zDetFace-Body Center Y-556', + 'zDetFace-Body Height-557', + 'zDetFace-Body Width-558', + 'zDetFace-Roll-559', + 'zDetFace-Size-560', + 'zDetFace-Cluster Squence Number-561', + 'zDetFace-Blur Score-562', + 'zDetFacePrint-Face Print Version-563', + 'zMedAnlyAstAttr-Face Count-564', + 'zDetFaceGroup-UUID-4TableStart-565', + 'zDetFaceGroup-Person Builder State-566', + 'zDetFaceGroup-UnNamed Face Count-567', + 'zPerson-In Person Naming Model-568', + 'zPerson-Key Face Pick Source Key-569', + 'zPerson-Manual Order Key-570', + 'zPerson-Question Type-571', + 'zPerson-Suggested For Client Type-572', + 'zPerson-Merge Target Person-573', + 'zPerson-Cloud Local State-574', + 'zFaceCrop-Cloud Local State-575', + 'zFaceCrop-Cloud Type-576', + 'zPerson-Cloud Delete State-577', + 'zFaceCrop-Cloud Delete State-578', + 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-579', + 'zAsset-Highlight Visibility Score-580', + 'zMedAnlyAstAttr-Media Analysis Version-581', + 'zMedAnlyAstAttr-Audio Classification-582', + 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-583', + 'zMedAnlyAstAttr-Best Video Range Start Time Scale-584', + 'zMedAnlyAstAttr-Best Video Range Duration Value-585', + 'zMedAnlyAstAttr-Best Video Range Start Value-586', + 'zMedAnlyAstAttr-Packed Best Playback Rect-587', + 'zMedAnlyAstAttr-Activity Score-588', + 'zMedAnlyAstAttr-Video Score-589', + 'zMedAnlyAstAttr-AutoPlay Suggestion Score-590', + 'zMedAnlyAstAttr-Blurriness Score-591', + 'zMedAnlyAstAttr-Exposure Score-592', + 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-593', + 'zMedAnlyAstAttr-Probable Rotation Direction-594', + 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-595', + 'zAssetAnalyState-Asset UUID-4TableStart-596', + 'zAssetAnalyState-Analyisis State-597', + 'zAssetAnalyState-Worker Flags-598', + 'zAssetAnalyState-Worker Type-599', + ('zAssetAnalyState-Ignore Until Date-600', 'datetime'), + ('zAssetAnalyState-Last Ignored Date-601', 'datetime'), + ('zAssetAnalyState-Sort Token-602', 'datetime'), + 'zMedAnlyAstAttr-Character Recognition Attr-603', + 'zCharRecogAttr-Algorithm Version-604', + 'zCharRecogAttr-Adjustment Version-605', + 'zMedAnlyAstAttr-Visual Search Attributes-606', + 'zVisualSearchAttr-Algorithm Version-607', + 'zVisualSearchAttr-Adjustment Version-608', + 'zAsset-Overall Aesthetic Score-609', + 'zCompAssetAttr-Behavioral Score-610', + 'zCompAssetAttr-Failure Score zCompAssetAttr-611', + 'zCompAssetAttr-Harmonious Color Score-612', + 'zCompAssetAttr-Immersiveness Score-613', + 'zCompAssetAttr-Interaction Score-614', + 'zCompAssetAttr-Intersting Subject Score-615', + 'zCompAssetAttr-Intrusive Object Presence Score-616', + 'zCompAssetAttr-Lively Color Score-617', + 'zCompAssetAttr-Low Light-618', + 'zCompAssetAttr-Noise Score-619', + 'zCompAssetAttr-Pleasant Camera Tilt Score-620', + 'zCompAssetAttr-Pleasant Composition Score-621', + 'zCompAssetAttr-Pleasant Lighting Score-622', + 'zCompAssetAttr-Pleasant Pattern Score-623', + 'zCompAssetAttr-Pleasant Perspective Score-624', + 'zCompAssetAttr-Pleasant Post Processing Score-625', + 'zCompAssetAttr-Pleasant Reflection Score-626', + 'zCompAssetAttrPleasant Symmetry Score-627', + 'zCompAssetAttr-Sharply Focused Subject Score-628', + 'zCompAssetAttr-Tastfully Blurred Score-629', + 'zCompAssetAttr-Well Chosen Subject Score-630', + 'zCompAssetAttr-Well Framed Subject Score-631', + 'zCompAssetAttr-Well Timeed Shot Score-632', + 'zCldRes-Asset UUID-4TableStart-633', + 'zCldRes-Cloud Local State-634', + 'zCldRes-File Size-635', + 'zCldRes-Height-636', + 'zCldRes-Is Available-637', + 'zCldRes-Is Locally Available-638', + 'zCldRes-Prefetch Count-639', + 'zCldRes-Source Type-640', + 'zCldRes-Type-641', + 'zCldRes-Width-642', + ('zCldRes-Date Created-643', 'datetime'), + ('zCldRes-Last OnDemand Download Date-644', 'datetime'), + ('zCldRes-Last Prefetch Date-645', 'datetime'), + 'zCldRes-Prunedat-646', + 'zCldRes-File Path-647', + 'zCldRes-Fingerprint-648', + 'zCldRes-Item ID-649', + 'zCldRes-UniID-650', + 'zAddAssetAttr-zPK-651', + 'zAddAssetAttr-zENT-652', + 'ZAddAssetAttr-zOPT-653', + 'zAddAssetAttr-zAsset= zAsset_zPK-654', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-655', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-656', + 'zAddAssetAttr-Master Fingerprint-657', + 'zAddAssetAttr-Public Global UUID-658', + 'zAddAssetAttr-Deferred Photo Identifier-659', + 'zAddAssetAttr-Original Assets UUID-660', + 'zAddAssetAttr-Import Session ID-661', + 'zAddAssetAttr-Originating Asset Identifier-662', + 'zAddAssetAttr.Adjusted Fingerprint-663', + 'zAlbumList-zPK= Album List Key-664', + 'zAlbumList-zENT-665', + 'zAlbumList-zOPT-666', + 'zAlbumList-ID Key-667', + 'zAlbumList-UUID-668', + 'zAsset-zPK-669', + 'zAsset-zENT-670', + 'zAsset-zOPT-671', + 'zAsset-Master= zCldMast-zPK-672', + 'zAsset-Extended Attributes= zExtAttr-zPK-673', + 'zAsset-Import Session Key-674', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-675', + 'zAsset-FOK-Cloud Feed Asset Entry Key-676', + 'zAsset-Moment Share Key= zShare-zPK-677', + 'zAsset-zMoment Key= zMoment-zPK-678', + 'zAsset-Computed Attributes Asset Key-679', + 'zAsset-Highlight Being Assets-HBA Key-680', + 'zAsset-Highlight Being Extended Assets-HBEA Key-681', + 'zAsset-Highligh Being Summary Assets-HBSA Key-682', + 'zAsset-Day Group Highlight Being Assets-DGHBA Key-683', + 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-684', + 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-685', + 'zAsset-Promotion Score-686', + 'zAsset-Media Analysis Attributes Key-687', + 'zAsset-Media Group UUID-688', + 'zAsset-UUID = store.cloudphotodb-689', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-690', + 'zAsset.Cloud Collection GUID-691', + 'zAsset-Avalanche UUID-692', + 'zAssetAnalyState-zPK-693', + 'zAssetAnalyState-zEnt-694', + 'zAssetAnalyState-zOpt-695', + 'zAssetAnalyState-Asset= zAsset-zPK-696', + 'zAssetAnalyState-Asset UUID-697', + 'zAssetDes-zPK-698', + 'zAssetDes-zENT-699', + 'zAssetDes-zOPT-700', + 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-701', + 'zCharRecogAttr-zPK-702', + 'zCharRecogAttr-zENT-703', + 'zCharRecogAttr-zOPT-704', + 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-705', + 'zCldFeedEnt-zPK= zCldShared keys-706', + 'zCldFeedEnt-zENT-707', + 'zCldFeedEnt-zOPT-708', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-709', + 'zCldFeedEnt-Entry Invitation Record GUID-710', + 'zCldFeedEnt-Entry Cloud Asset GUID-711', + 'zCldMast-zPK= zAsset-Master-712', + 'zCldMast-zENT-713', + 'zCldMast-zOPT-714', + 'zCldMast-Moment Share Key= zShare-zPK-715', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-716', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-717', + 'zCldMast-Originating Asset ID-718', + 'zCldMast-Import Session ID- AirDrop-StillTesting-719', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-720', + 'CMzCldMastMedData-zENT-721', + 'CMzCldMastMedData-zOPT-722', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-723', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-724', + 'AAAzCldMastMedData-zENT-725', + 'AAAzCldMastMedData-zOPT-726', + 'AAAzCldMastMedData-CldMast key-727', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-728', + 'zCldRes-zPK-729', + 'zCldRes-zENT-730', + 'zCldRes-zOPT-731', + 'zCldRes-Asset= zAsset-zPK-732', + 'zCldRes-Cloud Master= zCldMast-zPK-733', + 'zCldRes-Asset UUID-734', + 'zCldShareAlbumInvRec-zPK-735', + 'zCldShareAlbumInvRec-zEnt-736', + 'zCldShareAlbumInvRec-zOpt-737', + 'zCldShareAlbumInvRec-Album Key-738', + 'zCldShareAlbumInvRec-FOK Album Key-739', + 'zCldShareAlbumInvRec-Album GUID-740', + 'zCldShareAlbumInvRec-Cloud GUID-741', + 'zCldSharedComment-zPK-742', + 'zCldSharedComment-zENT-743', + 'zCldSharedComment-zOPT-744', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-745', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-746', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-747', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-748', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-749', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-750', + 'zCldSharedComment-Cloud GUID-751', + 'zCompAssetAttr-zPK-752', + 'zCompAssetAttr-zEnt-753', + 'zCompAssetAttr-zOpt-754', + 'zCompAssetAttr-Asset Key-755', + 'zDetFace-zPK-756', + 'zDetFace-zEnt-757', + 'zDetFace.zOpt-758', + 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-759', + 'zDetFace-Person= zPerson-zPK-760', + 'zDetFace-Person Being Key Face-761', + 'zDetFace-Face Print-762', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-763', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-764', + 'zDetFace-UUID-765', + 'zDetFaceGroup-zPK-766', + 'zDetFaceGroup-zENT-767', + 'zDetFaceGroup-zOPT-768', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-769', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-770', + 'zDetFaceGroup-UUID-771', + 'zDetFacePrint-zPK-772', + 'zDetFacePrint-zEnt-773', + 'zDetFacePrint-zOpt-774', + 'zDetFacePrint-Face Key-775', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-776', + 'zExtAttr-zENT-777', + 'zExtAttr-zOPT-778', + 'zExtAttr-Asset Key-779', + 'zFaceCrop-zPK-780', + 'zFaceCrop-zEnt-781', + 'zFaceCrop-zOpt-782', + 'zFaceCrop-Asset Key-783', + 'zFaceCrop-Invalid Merge Canidate Person UUID-784', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-785', + 'zFaceCrop-Face Key-786', + 'zFaceCrop-UUID-787', + 'zGenAlbum-zPK=26AlbumLists= 26Albums-788', + 'zGenAlbum-zENT-789', + 'zGenAlbum-zOpt-790', + 'zGenAlbum-Key Asset-Key zAsset-zPK-791', + 'zGenAlbum-Secondary Key Asset-792', + 'zGenAlbum-Tertiary Key Asset-793', + 'zGenAlbum-Custom Key Asset-794', + 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-795', + 'zGenAlbum-FOK Parent Folder-796', + 'zGenAlbum-zSyndicate-797', + 'zGenAlbum-UUID-798', + 'SWYConverszGenAlbum-UUID-799', + 'zGenAlbum-Cloud_GUID = store.cloudphotodb-800', + 'SWYConverszGenAlbum-Cloud GUID-801', + 'zGenAlbum-Project Render UUID-802', + 'SWYConverszGenAlbum-Project Render UUID-803', + 'zIntResou-zPK-804', + 'zIntResou-zENT-805', + 'zIntResou-zOPT-806', + 'zIntResou-Asset= zAsset_zPK-807', + 'zIntResou-Fingerprint-808', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-809', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-810', + 'zMedAnlyAstAttr-zEnt-811', + 'zMedAnlyAstAttr-zOpt-812', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-813', + 'zPerson-zPK=zDetFace-Person-814', + 'zPerson-zEnt-815', + 'zPerson-zOpt-816', + 'zPerson-KeyFace=zDetFace-zPK-817', + 'zPerson-Assoc Face Group Key-818', + 'zPerson-Person UUID-819', + 'zSceneP-zPK-820', + 'zSceneP-zENT-821', + 'zSceneP-zOPT-822', + 'zShare-zPK-823', + 'zShare-zENT-824', + 'zShare-zOPT-825', + 'zShare-UUID-826', + 'SPLzShare-UUID-827', + 'zShare-Scope ID = store.cloudphotodb-828', + 'zSharePartic-zPK-829', + 'zSharePartic-zENT-830', + 'zSharePartic-zOPT-831', + 'zSharePartic-Share Key= zShare-zPK-832', + 'zSharePartic-UUID-833', + 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-834', + 'zUnmAdj-zOPT-835', + 'zUnmAdj-zENT-836', + 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-837', + 'zUnmAdj-UUID-838', + 'zUnmAdj-Other Adjustments Fingerprint-839', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-840', + 'zVisualSearchAttr-zPK-841', + 'zVisualSearchAttr-zENT-842', + 'zVisualSearchAttr-zOPT-843', + 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-844', + 'z26AlbumList-26Albums= zGenAlbum-zPK-845', + 'z26AlbumList-Album List Key-846', + 'z26AlbumList-FOK26Albums Key-847', + 'z27Assets-27Albums= zGenAlbum-zPK-848', + 'z27Assets-3Asset Key= zAsset-zPK in the Album-849', + 'z27Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-850') + data_list = get_sqlite_db_records(source_path, query) + return data_headers, data_list, source_path -def get_ph95ios15refforassetanalysissyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph95_2iOS15RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if (version.parse(iosversion) <= version.parse("14.8.1")) or (version.parse(iosversion) >= version.parse("16")): - logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite reference for asset analysis from iOS " + iosversion) + logfunc("Unsupported version for Syndication.photoslibrary for iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("15")) & (version.parse(iosversion) < version.parse("16")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -4919,7 +4922,7 @@ def get_ph95ios15refforassetanalysissyndpl(files_found, report_folder, seeker, w zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type', DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date', DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date', - zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token', + DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token', zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr', zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version', zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version', @@ -5204,1028 +5207,967 @@ def get_ph95ios15refforassetanalysissyndpl(files_found, report_folder, seeker, w LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP ORDER BY zAsset.ZADDEDDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], - row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], - row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], - row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], - row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], - row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], - row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], - row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], - row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], - row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], - row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], - row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], - row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], - row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], - row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], - row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], - row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], - row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], - row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], - row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], - row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], - row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], - row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], - row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], - row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], - row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], - row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], - row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], - row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], - row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], - row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], - row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], - row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], - row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], - row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], - row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], - row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], - row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], - row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], - row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], - row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], - row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], - row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], - row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], - row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], - row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], - row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], - row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], - row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], - row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], - row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], - row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], - row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], - row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], - row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], - row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], - row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], - row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], - row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], - row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], - row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], - row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], - row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], - row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], - row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], - row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], - row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], - row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], - row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], - row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], - row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], - row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], - row[844], row[845], row[846], row[847], row[848], row[849], row[850])) - - counter += 1 - - description = 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' \ - ' This parser includes the largest set of decoded data based on testing and research' \ - ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' \ - ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' \ - ' TimelineExplorer to view, search and filter the results.' - report = ArtifactHtmlReport('Ph95.2-iOS15_Ref_for_Asset_Analysis-SyndPL') - report.start_artifact_report(report_folder, 'Ph95.2-iOS15_Ref_for_Asset_Analysis-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Added Date-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset Complete-2', - 'zAsset-zPK-4QueryStart-3', - 'zAddAssetAttr-zPK-4QueryStart-4', - 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', - 'zAddAssetAttr-Master Fingerprint-4TableStart-6', - 'zIntResou-Fingerprint-4TableStart-7', - 'zAsset-Bundle Scope-8', - 'zAsset-Syndication State-9', - 'zAsset-Cloud is My Asset-10', - 'zAsset-Cloud is deletable-Asset-11', - 'zAsset-Cloud_Local_State-12', - 'zAsset-Visibility State-13', - 'zExtAttr-Camera Make-14', - 'zExtAttr-Camera Model-15', - 'zExtAttr-Lens Model-16', - 'zExtAttr-Flash Fired-17', - 'zExtAttr-Focal Lenght-18', - 'zExtAttr-Focal Lenth in 35MM-19', - 'zExtAttr-Digital Zoom Ratio-20', - 'zAsset-Derived Camera Capture Device-21', - 'zAddAssetAttr-Camera Captured Device-22', - 'zAddAssetAttr-Imported by-23', - 'zCldMast-Imported By-24', - 'zAddAssetAttr.Imported by Bundle Identifier-25', - 'zAddAssetAttr-Imported By Display Name-26', - 'zCldMast-Imported by Bundle ID-27', - 'zCldMast-Imported by Display Name-28', - 'zAsset-Saved Asset Type-29', - 'zAsset-Directory-Path-30', - 'zAsset-Filename-31', - 'zAddAssetAttr- Original Filename-32', - 'zCldMast- Original Filename-33', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-34', - 'zAddAssetAttr-Date Created Source-35', - 'zAsset-Date Created-36', - 'zCldMast-Creation Date-37', - 'zIntResou-CldMst Date Created-38', - 'zAddAssetAttr-Time Zone Name-39', - 'zAddAssetAttr-Time Zone Offset-40', - 'zAddAssetAttr-Inferred Time Zone Offset-41', - 'zAddAssetAttr-EXIF-String-42', - 'zAsset-Modification Date-43', - 'zAsset-Last Shared Date-44', - 'zCldMast-Cloud Local State-45', - 'zCldMast-Import Date-46', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', - 'zAddAssetAttr-Import Session ID-4QueryStart-48', - 'zAddAssetAttr-Alt Import Image Date-49', - 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-50', - 'zAsset-Cloud Batch Publish Date-51', - 'zAsset-Cloud Server Publish Date-52', - 'zAsset-Cloud Download Requests-53', - 'zAsset-Cloud Batch ID-54', - 'zAddAssetAttr-Upload Attempts-55', - 'zAsset-Latitude-56', - 'zExtAttr-Latitude-57', - 'zAsset-Longitude-58', - 'zExtAttr-Longitude-59', - 'zAddAssetAttr-GPS Horizontal Accuracy-60', - 'zAddAssetAttr-Location Hash-61', - 'zAddAssetAttr-Shifted Location Valid-62', - 'zAddAssetAttr-Shifted Location Data-63', - 'zAddAssetAttr-Reverse Location Is Valid-64', - 'zAddAssetAttr-Reverse Location Data-65', - 'ParentzGenAlbum-UUID-4QueryStart-66', - 'zGenAlbum-UUID-4QueryStart-67', - 'SWYConverszGenAlbum-UUID-4QueryStart-68', - 'ParentzGenAlbum-Cloud GUID-4QueryStart-69', - 'zGenAlbum-Cloud GUID-4QueryStart-70', - 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-71', - 'zCldShareAlbumInvRec-Album GUID-4QueryStart-72', - 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-73', - 'zGenAlbum-Project Render UUID-4QueryStart-74', - 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-75', - 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-76', - 'zGenAlbum-Cloud_Local_State-4QueryStart-77', - 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-78', - 'ParentzGenAlbum- Creation Date- 4QueryStart-79', - 'zGenAlbum- Creation Date- 4QueryStart-80', - 'SWYConverszGenAlbum- Creation Date- 4QueryStart-81', - 'zGenAlbum- Cloud Creation Date- 4QueryStart-82', - 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-83', - 'zGenAlbum- Start Date- 4QueryStart-84', - 'SWYConverszGenAlbum- Start Date- 4QueryStart-85', - 'zGenAlbum- End Date- 4QueryStart-86', - 'SWYConverszGenAlbum- End Date- 4QueryStart-87', - 'zGenAlbum-Cloud Subscription Date- 4QueryStart-88', - 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-89', - 'ParentzGenAlbum- Title- 4QueryStart-90', - 'zGenAlbum- Title-User&System Applied- 4QueryStart-91', - 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-92', - 'zGenAlbum-Import Session ID-SWY- 4QueryStart-93', - 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-94', - 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-95', - 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-96', - 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-97', - 'SWYConverszGenAlbum- Syndicate-4QueryStart-98', - 'zGenAlbum-zENT- Entity- 4QueryStart-99', - 'ParentzGenAlbum- Kind- 4QueryStart-100', - 'zGenAlbum-Album Kind- 4QueryStart-101', - 'SWYConverszGenAlbum-Album Kind- 4QueryStart-102', - 'AAAzCldMastMedData-zOPT-103', - 'zAddAssetAttr-Media Metadata Type-104', - 'AAAzCldMastMedData-Data-105', - 'CldMasterzCldMastMedData-zOPT-106', - 'zCldMast-Media Metadata Type-107', - 'CMzCldMastMedData-Data-108', - 'zAddAssetAttr-Syndication History-109', - 'zMedAnlyAstAttr-Syndication Processing Version-110', - 'zMedAnlyAstAttr-Syndication Processing Value-111', - 'zAsset-Orientation-112', - 'zAddAssetAttr-Original Orientation-113', - 'zAsset-Kind-114', - 'zAsset-Kind-Sub-Type-115', - 'zAddAssetAttr-Cloud Kind Sub Type-116', - 'zAsset-Playback Style-117', - 'zAsset-Playback Variation-118', - 'zAsset-Video Duration-119', - 'zExtAttr-Duration-120', - 'zAsset-Video CP Duration-121', - 'zAddAssetAttr-Video CP Duration Time Scale-122', - 'zAsset-Video CP Visibility State-123', - 'zAddAssetAttr-Video CP Display Value-124', - 'zAddAssetAttr-Video CP Display Time Scale-125', - 'zIntResou-Datastore Class ID-126', - 'zAsset-Cloud Placeholder Kind-127', - 'zIntResou-Local Availability-128', - 'zIntResou-Local Availability Target-129', - 'zIntResou-Cloud Local State-130', - 'zIntResou-Remote Availability-131', - 'zIntResou-Remote Availability Target-132', - 'zIntResou-Transient Cloud Master-133', - 'zIntResou-Side Car Index-134', - 'zIntResou- File ID-135', - 'zIntResou-Version-136', - 'zAddAssetAttr- Original-File-Size-137', - 'zIntResou-Resource Type-138', - 'zIntResou-Datastore Sub-Type-139', - 'zIntResou-Cloud Source Type-140', - 'zIntResou-Data Length-141', - 'zIntResou-Recipe ID-142', - 'zIntResou-Cloud Last Prefetch Date-143', - 'zIntResou-Cloud Prefetch Count-144', - 'zIntResou- Cloud-Last-OnDemand Download-Date-145', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-146', - 'zIntResou-Compact-UTI-147', - 'zAsset-Uniform Type ID-148', - 'zAsset-Original Color Space-149', - 'zCldMast-Uniform_Type_ID-150', - 'zCldMast-Full Size JPEG Source-151', - 'zAsset-HDR Gain-152', - 'zAsset-zHDR_Type-153', - 'zExtAttr-Codec-154', - 'zIntResou-Codec Four Char Code Name-155', - 'zCldMast-Codec Name-156', - 'zCldMast-Video Frame Rate-157', - 'zCldMast-Placeholder State-158', - 'zAsset-Depth_Type-159', - 'zAsset-Avalanche UUID-4TableStart-160', - 'zAsset-Avalanche_Pick_Type-BurstAsset-161', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-162', - 'zAddAssetAttr-Cloud Recovery State-163', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-164', - 'zAsset-Deferred Processing Needed-165', - 'zAsset-Video Deferred Processing Needed-166', - 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-167', - 'zAddAssetAttr-Deferred Processing Candidate Options-168', - 'zAsset-Has Adjustments-Camera-Effects-Filters-169', - 'zUnmAdj-UUID-4TableStart-170', - 'zAsset-Adjustment Timestamp-171', - 'zUnmAdj-Adjustment Timestamp-172', - 'zAddAssetAttr-Editor Bundle ID-173', - 'zUnmAdj-Editor Localized Name-174', - 'zUnmAdj-Adjustment Format ID-175', - 'zAddAssetAttr-Montage-176', - 'zUnmAdj-Adjustment Render Types-177', - 'zUnmAdj-Adjustment Format Version-178', - 'zUnmAdj-Adjustment Base Image Format-179', - 'zAsset-Favorite-180', - 'zAsset-Hidden-181', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-182', - 'zAsset-Trashed Date-183', - 'zIntResou-Trash State-184', - 'zIntResou-Trashed Date-185', - 'zAsset-Cloud Delete State-186', - 'zIntResou-Cloud Delete State-187', - 'zAddAssetAttr-PTP Trashed State-188', - 'zIntResou-PTP Trashed State-189', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-190', - 'zMedAnlyAstAttr-Media Analysis Timestamp-191', - 'zAsset-Analysis State Modificaion Date-192', - 'zAddAssetAttr- Pending View Count-193', - 'zAddAssetAttr- View Count-194', - 'zAddAssetAttr- Pending Play Count-195', - 'zAddAssetAttr- Play Count-196', - 'zAddAssetAttr- Pending Share Count-197', - 'zAddAssetAttr- Share Count-198', - 'zAddAssetAttr-Allowed for Analysis-199', - 'zAddAssetAttr-Scene Analysis Version-200', - 'zAddAssetAttr-Scene Analysis is From Preview-201', - 'zAddAssetAttr-Scene Analysis Timestamp-202', - 'zAddAssetAttr-Destination Asset Copy State-203', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-204', - 'zCldMast-Source Master For Duplication Scope ID-205', - 'zAddAssetAttr-Source Asset For Duplication ID-206', - 'zCldMast-Source Master for Duplication ID-207', - 'zAddAssetAttr-Variation Suggestions States-208', - 'zAsset-High Frame Rate State-209', - 'zAsset-Video Key Frame Time Scale-210', - 'zAsset-Video Key Frame Value-211', - 'zExtAttr-ISO-212', - 'zExtAttr-Metering Mode-213', - 'zExtAttr-Sample Rate-214', - 'zExtAttr-Track Format-215', - 'zExtAttr-White Balance-216', - 'zExtAttr-Aperture-217', - 'zExtAttr-BitRate-218', - 'zExtAttr-Exposure Bias-219', - 'zExtAttr-Frames Per Second-220', - 'zExtAttr-Shutter Speed-221', - 'zExtAttr-Slush Scene Bias-222', - 'zExtAttr-Slush Version-223', - 'zExtAttr-Slush Preset-224', - 'zExtAttr-Slush Warm Bias-225', - 'zAsset-Height-226', - 'zAddAssetAttr-Original Height-227', - 'zIntResou-Unoriented Height-228', - 'zAsset-Width-229', - 'zAddAssetAttr-Original Width-230', - 'zIntResou-Unoriented Width-231', - 'zShare-Thumbnail Image Data-232', - 'SPLzShare-Thumbnail Image Data-233', - 'zAsset-Thumbnail Index-234', - 'zAddAssetAttr-Embedded Thumbnail Height-235', - 'zAddAssetAttr-Embedded Thumbnail Length-236', - 'zAddAssetAttr-Embedded Thumbnail Offset-237', - 'zAddAssetAttr-Embedded Thumbnail Width-238', - 'zAsset-Packed Acceptable Crop Rect-239', - 'zAsset-Packed Badge Attributes-240', - 'zAsset-Packed Preferred Crop Rect-241', - 'zAsset-Curation Score-242', - 'zAsset-Camera Processing Adjustment State-243', - 'zAsset-Depth Type-244', - 'zAsset-Is Magic Carpet-QuicktimeMOVfile-245', - 'zAddAssetAttr-Orig Resource Choice-246', - 'zAddAssetAttr-Spatial Over Capture Group ID-247', - 'zAddAssetAttr-Place Annotation Data-248', - 'zAddAssetAttr-Distance Identity-249', - 'zAddAssetAttr-Edited IPTC Attributes-250', - 'zAssetDes-Long Description-251', - 'zAddAssetAttr-Asset Description-252', - 'zAddAssetAttr-Title-Comments via Cloud Website-253', - 'zAddAssetAttr-Accessibility Description-254', - 'zAddAssetAttr-Photo Stream Tag ID-255', - 'zCldFeedEnt-Entry Date-256', - 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-257', - 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-258', - 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-259', - 'zCldFeedEnt-Entry Priority Number-260', - 'zCldFeedEnt-Entry Type Number-261', - 'zCldSharedComment-Cloud GUID-4TableStart-262', - 'zCldSharedComment-Date-263', - 'zCldSharedComment-Comment Client Date-264', - 'zAsset-Cloud Last Viewed Comment Date-265', - 'zCldSharedComment-Type-266', - 'zCldSharedComment-Comment Text-267', - 'zCldSharedComment-Commenter Hashed Person ID-268', - 'zCldSharedComment-Batch Comment-269', - 'zCldSharedComment-Is a Caption-270', - 'zAsset-Cloud Has Comments by Me-271', - 'zCldSharedComment-Is My Comment-272', - 'zCldSharedComment-Is Deletable-273', - 'zAsset-Cloud Has Comments Conversation-274', - 'zAsset-Cloud Has Unseen Comments-275', - 'zCldSharedComment-Liked-276', - 'zAddAssetAttr-Share Type-277', - 'zShare-UUID-CMM-4TableStart-278', - 'SPLzShare-UUID-SPL-4TableStart-279', - 'zShare-zENT-CMM-280', - 'SPLzShare-zENT-SPL-281', - 'zShare-Status-CMM-282', - 'SPLzShare-Status-SPL-283', - 'zShare-Scope Type-CMM-284', - 'SPLzShare-Scope Type-SPL-285', - 'zShare-Local Publish State-CMM-286', - 'SPLzShare-Local Publish State-SPL-287', - 'zShare-Public Permission-CMM-288', - 'SPLzShare-Public Permission-SPL-289', - 'zShare-Originating Scope ID-CMM-290', - 'SPLzShare-Originating Scope ID-SPL-291', - 'zShare-Scope ID-CMM-292', - 'SPLzShare-Scope ID-SPL-293', - 'zShare-Title-CMM-294', - 'SPLzShare-Title-SPL-295', - 'zShare-Share URL-CMM-296', - 'SPLzShare-Share URL-SPL-297', - 'zShare-Creation Date-CMM-298', - 'SPLzShare-Creation Date-SPL-299', - 'zShare-Start Date-CMM-300', - 'SPLzShare-Start Date-SPL-301', - 'zShare-End Date-CMM-302', - 'SPLzShare-End Date-SPL-303', - 'zShare-Expiry Date-CMM-304', - 'SPLzShare-Expiry Date-SPL-305', - 'zShare-Asset Count-CMM-306', - 'SPLzShare-Asset Count-SPL-307', - 'zShare-Photos Count-CMM-308', - 'SPLzShare-Photos Count-CMM-SPL-309', - 'zShare-Uploaded Photos Count-CMM-310', - 'SPLzShare-Uploaded Photos Count-SPL-311', - 'zShare-Videos Count-CMM-312', - 'SPLzShare-Videos Count-SPL-313', - 'zShare-Uploaded Videos Count-CMM-314', - 'SPLzShare-Uploaded Videos Count-SPL-315', - 'zShare-Force Sync Attempted-CMM-316', - 'SPLzShare-Force Sync Attempted-SPL-317', - 'zShare-Auto Share Policy-CMM-318', - 'SPLzShare-Auto Share Policy-SPL-319', - 'zShare-Should Notify On Upload Completion-CMM-320', - 'SPLzShare-Should Notify On Upload Completion-SPL-321', - 'zShare-Trashed State-CMM-322', - 'SPLzShare-Trashed State-SPL-323', - 'zShare-Cloud Delete State-CMM-324', - 'SPLzShare-Cloud Delete State-SPL-325', - 'zShare-Should Ignor Budgets-CMM-326', - 'SPLzShare-Should Ignor Budgets-SPL-327', - 'zShare-Rules-CMM-328', - 'SPLzShare-Rules-SPL-329', - 'zSharePartic-UUID-4TableStart-330', - 'SPLzSharePartic-UUID-4TableStart-331', - 'zSharePartic-Acceptance Status-332', - 'SPLzSharePartic-Acceptance Status-333', - 'zSharePartic-Is Current User-334', - 'SPLzSharePartic-Is Current User-335', - 'zSharePartic-Role-336', - 'SPLzSharePartic-Role-337', - 'zSharePartic-Premission-338', - 'SPLzSharePartic-Premission-339', - 'zSharePartic-User ID-340', - 'SPLzSharePartic-User ID-341', - 'SPLzSharePartic-zPK-4TableStart-342', - 'zSharePartic-zPK-4TableStart-343', - 'zSharePartic-Email Address-344', - 'SPLzSharePartic-Email Address-345', - 'zSharePartic-Phone Number-346', - 'SPLzSharePartic-Phone Number-347', - 'ParentzGenAlbum-UUID-4TableStart-348', - 'zGenAlbum-UUID-4TableStart-349', - 'SWYConverszGenAlbum-UUID-4TableStart-350', - 'ParentzGenAlbum-Cloud GUID-4TableStart-351', - 'zGenAlbum-Cloud GUID-4TableStart-352', - 'SWYConverszGenAlbum-Cloud GUID-4TableStart-353', - 'zCldShareAlbumInvRec-Album GUID-4TableStart-354', - 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-355', - 'zGenAlbum-Project Render UUID-4TableStart-356', - 'SWYConverszGenAlbum-Project Render UUID-4TableStart-357', - 'zAlbumList-Needs Reordering Number-358', - 'zGenAlbum-zENT- Entity-359', - 'ParentzGenAlbum-Kind-360', - 'zGenAlbum-Album Kind-361', - 'SWYConverszGenAlbum-Album Kind-362', - 'ParentzGenAlbum-Cloud-Local-State-363', - 'zGenAlbum-Cloud_Local_State-364', - 'SWYConverszGenAlbum-Cloud_Local_State-365', - 'ParentzGenAlbum- Title-366', - 'zGenAlbum- Title-User&System Applied-367', - 'SWYConverszGenAlbum- Title -User&System Applied-368', - 'zGenAlbum-Import Session ID-SWY-369', - 'zAsset- Conversation= zGenAlbum_zPK-370', - 'SWYConverszGenAlbum- Import Session ID-SWY-371', - 'zGenAlbum-Imported by Bundle Identifier-372', - 'SWYzGenAlbum-Imported by Bundle Identifier-373', - 'SWYConverszGenAlbum- Syndicate-374', - 'ParentzGenAlbum-Creation Date-375', - 'zGenAlbum-Creation Date-376', - 'SWYConverszGenAlbum-Creation Date-377', - 'zGenAlbum-Cloud Creation Date-378', - 'SWYConverszGenAlbum-Cloud Creation Date-379', - 'zGenAlbum-Start Date-380', - 'SWYConverszGenAlbum-Start Date-381', - 'zGenAlbum-End Date-382', - 'SWYConverszGenAlbum-End Date-383', - 'zGenAlbum-Cloud Subscription Date-384', - 'SWYConverszGenAlbum-Cloud Subscription Date-385', - 'ParentzGenAlbum-Pending Items Count-386', - 'zGenAlbum-Pending Items Count-387', - 'SWYConverszGenAlbum-Pending Items Count-388', - 'ParentzGenAlbum-Pending Items Type-389', - 'zGenAlbum-Pending Items Type-390', - 'SWYConverszGenAlbum-Pending Items Type-391', - 'zGenAlbum- Cached Photos Count-392', - 'SWYConverszGenAlbum- Cached Photos Count-393', - 'zGenAlbum- Cached Videos Count-394', - 'SWYConverszGenAlbum- Cached Videos Count-395', - 'zGenAlbum- Cached Count-396', - 'SWYConverszGenAlbum- Cached Count-397', - 'ParentzGenAlbum-Sync Event Order Key-398', - 'zGenAlbum-Sync Event Order Key-399', - 'SWYConverszGenAlbum-Sync Event Order Key-400', - 'zGenAlbum-Has Unseen Content-401', - 'SWYConverszGenAlbum-Has Unseen Content-402', - 'zGenAlbum-Unseen Asset Count-403', - 'SWYConverszGenAlbum-Unseen Asset Count-404', - 'zGenAlbum-is Owned-405', - 'SWYConverszGenAlbum-is Owned-406', - 'zGenAlbum-Cloud Relationship State-407', - 'SWYConverszGenAlbum-Cloud Relationship State-408', - 'zGenAlbum-Cloud Relationship State Local-409', - 'SWYConverszGenAlbum-Cloud Relationship State Local-410', - 'zGenAlbum-Cloud Owner Mail Key-411', - 'SWYConverszGenAlbum-Cloud Owner Mail Key-412', - 'zGenAlbum-Cloud Owner Frist Name-413', - 'SWYConverszGenAlbum-Cloud Owner Frist Name-414', - 'zGenAlbum-Cloud Owner Last Name-415', - 'SWYConverszGenAlbum-Cloud Owner Last Name-416', - 'zGenAlbum-Cloud Owner Full Name-417', - 'SWYConverszGenAlbum-Cloud Owner Full Name-418', - 'zGenAlbum-Cloud Person ID-419', - 'SWYConverszGenAlbum-Cloud Person ID-420', - 'zAsset-Cloud Owner Hashed Person ID-421', - 'zGenAlbum-Cloud Owner Hashed Person ID-422', - 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-423', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-424', - 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-425', - 'zGenAlbum-Cloud Multi-Contributors Enabled-426', - 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-427', - 'zGenAlbum-Cloud Album Sub Type-428', - 'SWYConverszGenAlbum-Cloud Album Sub Type-429', - 'zGenAlbum-Cloud Contribution Date-430', - 'SWYConverszGenAlbum-Cloud Contribution Date-431', - 'zGenAlbum-Cloud Last Interesting Change Date-432', - 'SWYConverszGenAlbum-Cloud Last Interesting Change Date-433', - 'zGenAlbum-Cloud Notification Enabled-434', - 'SWYConverszGenAlbum-Cloud Notification Enabled-435', - 'ParentzGenAlbum-Pinned-436', - 'zGenAlbum-Pinned-437', - 'SWYConverszGenAlbum-Pinned-438', - 'ParentzGenAlbum-Custom Sort Key-439', - 'zGenAlbum-Custom Sort Key-440', - 'SWYConverszGenAlbum-Custom Sort Key-441', - 'ParentzGenAlbum-Custom Sort Ascending-442', - 'zGenAlbum-Custom Sort Ascending-443', - 'SWYConverszGenAlbum-Custom Sort Ascending-444', - 'ParentzGenAlbum-Is Prototype-445', - 'zGenAlbum-Is Prototype-446', - 'SWYConverszGenAlbum-Is Prototype-447', - 'ParentzGenAlbum-Project Document Type-448', - 'zGenAlbum-Project Document Type-449', - 'SWYConverszGenAlbum-Project Document Type-450', - 'ParentzGenAlbum-Custom Query Type-451', - 'zGenAlbum-Custom Query Type-452', - 'SWYConverszGenAlbum-Custom Query Type-453', - 'ParentzGenAlbum-Trashed State-454', - 'ParentzGenAlbum-Trash Date-455', - 'zGenAlbum-Trashed State-456', - 'zGenAlbum-Trash Date-457', - 'SWYConverszGenAlbum-Trashed State-458', - 'SWYConverszGenAlbum-Trash Date-459', - 'ParentzGenAlbum-Cloud Delete State-460', - 'zGenAlbum-Cloud Delete State-461', - 'SWYConverszGenAlbum-Cloud Delete State-462', - 'zGenAlbum-Cloud Owner Whitelisted-463', - 'SWYConverszGenAlbum-Cloud Owner Whitelisted-464', - 'zGenAlbum-Cloud Local Public URL Enabled-465', - 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-466', - 'zGenAlbum-Cloud Public URL Enabled-467', - 'zGenAlbum-Public URL-468', - 'SWYConverszGenAlbum-Cloud Public URL Enabled-469', - 'SWYConverszGenAlbum-Public URL-470', - 'zGenAlbum-Key Asset Face Thumb Index-471', - 'SWYConverszGenAlbum-Key Asset Face Thumb Index-472', - 'zGenAlbum-Project Text Extension ID-473', - 'SWYConverszGenAlbum-Project Text Extension ID-474', - 'zGenAlbum-User Query Data-475', - 'SWYConverszGenAlbum-User Query Data-476', - 'zGenAlbum-Custom Query Parameters-477', - 'SWYConverszGenAlbum-Custom Query Parameters-478', - 'zGenAlbum-Project Data-479', - 'SWYConverszGenAlbum-Project Data-480', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-481', - 'zCldShareAlbumInvRec-Invitation State Local-482', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-483', - 'zCldShareAlbumInvRec-Subscription Date-484', - 'zCldShareAlbumInvRec-Invitee First Name-485', - 'zCldShareAlbumInvRec-Invitee Last Name-486', - 'zCldShareAlbumInvRec-Invitee Full Name-487', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-488', - 'zCldShareAlbumInvRec-Invitee Email Key-489', - 'zGenAlbum-Key Asset Face ID-490', - 'zFaceCrop-Face Area Points-491', - 'zAsset-Face Adjustment Version-492', - 'zAddAssetAttr-Face Analysis Version-493', - 'zDetFace-Asset Visible-494', - 'zPerson-Face Count-495', - 'zDetFace-Face Crop-496', - 'zDetFace-Face Algorithm Version-497', - 'zDetFace-Adjustment Version-498', - 'zDetFace-UUID-4TableStart-499', - 'zPerson-Person UUID-4TableStart-500', - 'zDetFace-Confirmed Face Crop Generation State-501', - 'zDetFace-Manual-502', - 'zDetFace-Detection Type-503', - 'zPerson-Detection Type-504', - 'zDetFace-VIP Model Type-505', - 'zDetFace-Name Source-506', - 'zDetFace-Cloud Name Source-507', - 'zPerson-Person URI-508', - 'zPerson-Display Name-509', - 'zPerson-Full Name-510', - 'zPerson-Cloud Verified Type-511', - 'zFaceCrop-State-512', - 'zFaceCrop-Type-513', - 'zFaceCrop-UUID-4TableStart-514', - 'zPerson-Type-515', - 'zPerson-Verified Type-516', - 'zPerson-Gender Type-517', - 'zDetFace-Gender Type-518', - 'zDetFace-Center X-519', - 'zDetFace-Center Y-520', - 'zPerson-Age Type Estimate-521', - 'zDetFace-Age Type Estimate-522', - 'zDetFace-Ethnicity Type-523', - 'zDetFace-Skin Tone Type-524', - 'zDetFace-Hair Type-525', - 'zDetFace-Hair Color Type-526', - 'zDetFace-Head Gear Type-527', - 'zDetFace-Facial Hair Type-528', - 'zDetFace-Has Face Mask-529', - 'zDetFace-Pose Type-530', - 'zDetFace-Face Expression Type-531', - 'zDetFace-Has Smile-532', - 'zDetFace-Smile Type-533', - 'zDetFace-Lip Makeup Type-534', - 'zDetFace-Eyes State-535', - 'zDetFace-Is Left Eye Closed-536', - 'zDetFace-Is Right Eye Closed-537', - 'zDetFace-Gaze Center X-538', - 'zDetFace-Gaze Center Y-539', - 'zDetFace-Face Gaze Type-540', - 'zDetFace-Eye Glasses Type-541', - 'zDetFace-Eye Makeup Type-542', - 'zDetFace-Cluster Squence Number Key-543', - 'zDetFace-Grouping ID-544', - 'zDetFace-Master ID-545', - 'zDetFace-Quality-546', - 'zDetFace-Quality Measure-547', - 'zDetFace-Source Height-548', - 'zDetFace-Source Width-549', - 'zDetFace-Hidden-Asset Hidden-550', - 'zDetFace-In Trash-Recently Deleted-551', - 'zDetFace-Cloud Local State-552', - 'zDetFace-Training Type-553', - 'zDetFace.Pose Yaw-554', - 'zDetFace-Body Center X-555', - 'zDetFace-Body Center Y-556', - 'zDetFace-Body Height-557', - 'zDetFace-Body Width-558', - 'zDetFace-Roll-559', - 'zDetFace-Size-560', - 'zDetFace-Cluster Squence Number-561', - 'zDetFace-Blur Score-562', - 'zDetFacePrint-Face Print Version-563', - 'zMedAnlyAstAttr-Face Count-564', - 'zDetFaceGroup-UUID-4TableStart-565', - 'zDetFaceGroup-Person Builder State-566', - 'zDetFaceGroup-UnNamed Face Count-567', - 'zPerson-In Person Naming Model-568', - 'zPerson-Key Face Pick Source Key-569', - 'zPerson-Manual Order Key-570', - 'zPerson-Question Type-571', - 'zPerson-Suggested For Client Type-572', - 'zPerson-Merge Target Person-573', - 'zPerson-Cloud Local State-574', - 'zFaceCrop-Cloud Local State-575', - 'zFaceCrop-Cloud Type-576', - 'zPerson-Cloud Delete State-577', - 'zFaceCrop-Cloud Delete State-578', - 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-579', - 'zAsset-Highlight Visibility Score-580', - 'zMedAnlyAstAttr-Media Analysis Version-581', - 'zMedAnlyAstAttr-Audio Classification-582', - 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-583', - 'zMedAnlyAstAttr-Best Video Range Start Time Scale-584', - 'zMedAnlyAstAttr-Best Video Range Duration Value-585', - 'zMedAnlyAstAttr-Best Video Range Start Value-586', - 'zMedAnlyAstAttr-Packed Best Playback Rect-587', - 'zMedAnlyAstAttr-Activity Score-588', - 'zMedAnlyAstAttr-Video Score-589', - 'zMedAnlyAstAttr-AutoPlay Suggestion Score-590', - 'zMedAnlyAstAttr-Blurriness Score-591', - 'zMedAnlyAstAttr-Exposure Score-592', - 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-593', - 'zMedAnlyAstAttr-Probable Rotation Direction-594', - 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-595', - 'zAssetAnalyState-Asset UUID-4TableStart-596', - 'zAssetAnalyState-Analyisis State-597', - 'zAssetAnalyState-Worker Flags-598', - 'zAssetAnalyState-Worker Type-599', - 'zAssetAnalyState-Ignore Until Date-600', - 'zAssetAnalyState-Last Ignored Date-601', - 'zAssetAnalyState-Sort Token-602', - 'zMedAnlyAstAttr-Character Recognition Attr-603', - 'zCharRecogAttr-Algorithm Version-604', - 'zCharRecogAttr-Adjustment Version-605', - 'zMedAnlyAstAttr-Visual Search Attributes-606', - 'zVisualSearchAttr-Algorithm Version-607', - 'zVisualSearchAttr-Adjustment Version-608', - 'zAsset-Overall Aesthetic Score-609', - 'zCompAssetAttr-Behavioral Score-610', - 'zCompAssetAttr-Failure Score zCompAssetAttr-611', - 'zCompAssetAttr-Harmonious Color Score-612', - 'zCompAssetAttr-Immersiveness Score-613', - 'zCompAssetAttr-Interaction Score-614', - 'zCompAssetAttr-Intersting Subject Score-615', - 'zCompAssetAttr-Intrusive Object Presence Score-616', - 'zCompAssetAttr-Lively Color Score-617', - 'zCompAssetAttr-Low Light-618', - 'zCompAssetAttr-Noise Score-619', - 'zCompAssetAttr-Pleasant Camera Tilt Score-620', - 'zCompAssetAttr-Pleasant Composition Score-621', - 'zCompAssetAttr-Pleasant Lighting Score-622', - 'zCompAssetAttr-Pleasant Pattern Score-623', - 'zCompAssetAttr-Pleasant Perspective Score-624', - 'zCompAssetAttr-Pleasant Post Processing Score-625', - 'zCompAssetAttr-Pleasant Reflection Score-626', - 'zCompAssetAttrPleasant Symmetry Score-627', - 'zCompAssetAttr-Sharply Focused Subject Score-628', - 'zCompAssetAttr-Tastfully Blurred Score-629', - 'zCompAssetAttr-Well Chosen Subject Score-630', - 'zCompAssetAttr-Well Framed Subject Score-631', - 'zCompAssetAttr-Well Timeed Shot Score-632', - 'zCldRes-Asset UUID-4TableStart-633', - 'zCldRes-Cloud Local State-634', - 'zCldRes-File Size-635', - 'zCldRes-Height-636', - 'zCldRes-Is Available-637', - 'zCldRes-Is Locally Available-638', - 'zCldRes-Prefetch Count-639', - 'zCldRes-Source Type-640', - 'zCldRes-Type-641', - 'zCldRes-Width-642', - 'zCldRes-Date Created-643', - 'zCldRes-Last OnDemand Download Date-644', - 'zCldRes-Last Prefetch Date-645', - 'zCldRes-Prunedat-646', - 'zCldRes-File Path-647', - 'zCldRes-Fingerprint-648', - 'zCldRes-Item ID-649', - 'zCldRes-UniID-650', - 'zAddAssetAttr-zPK-651', - 'zAddAssetAttr-zENT-652', - 'ZAddAssetAttr-zOPT-653', - 'zAddAssetAttr-zAsset= zAsset_zPK-654', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-655', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-656', - 'zAddAssetAttr-Master Fingerprint-657', - 'zAddAssetAttr-Public Global UUID-658', - 'zAddAssetAttr-Deferred Photo Identifier-659', - 'zAddAssetAttr-Original Assets UUID-660', - 'zAddAssetAttr-Import Session ID-661', - 'zAddAssetAttr-Originating Asset Identifier-662', - 'zAddAssetAttr.Adjusted Fingerprint-663', - 'zAlbumList-zPK= Album List Key-664', - 'zAlbumList-zENT-665', - 'zAlbumList-zOPT-666', - 'zAlbumList-ID Key-667', - 'zAlbumList-UUID-668', - 'zAsset-zPK-669', - 'zAsset-zENT-670', - 'zAsset-zOPT-671', - 'zAsset-Master= zCldMast-zPK-672', - 'zAsset-Extended Attributes= zExtAttr-zPK-673', - 'zAsset-Import Session Key-674', - 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-675', - 'zAsset-FOK-Cloud Feed Asset Entry Key-676', - 'zAsset-Moment Share Key= zShare-zPK-677', - 'zAsset-zMoment Key= zMoment-zPK-678', - 'zAsset-Computed Attributes Asset Key-679', - 'zAsset-Highlight Being Assets-HBA Key-680', - 'zAsset-Highlight Being Extended Assets-HBEA Key-681', - 'zAsset-Highligh Being Summary Assets-HBSA Key-682', - 'zAsset-Day Group Highlight Being Assets-DGHBA Key-683', - 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-684', - 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-685', - 'zAsset-Promotion Score-686', - 'zAsset-Media Analysis Attributes Key-687', - 'zAsset-Media Group UUID-688', - 'zAsset-UUID = store.cloudphotodb-689', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-690', - 'zAsset.Cloud Collection GUID-691', - 'zAsset-Avalanche UUID-692', - 'zAssetAnalyState-zPK-693', - 'zAssetAnalyState-zEnt-694', - 'zAssetAnalyState-zOpt-695', - 'zAssetAnalyState-Asset= zAsset-zPK-696', - 'zAssetAnalyState-Asset UUID-697', - 'zAssetDes-zPK-698', - 'zAssetDes-zENT-699', - 'zAssetDes-zOPT-700', - 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-701', - 'zCharRecogAttr-zPK-702', - 'zCharRecogAttr-zENT-703', - 'zCharRecogAttr-zOPT-704', - 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-705', - 'zCldFeedEnt-zPK= zCldShared keys-706', - 'zCldFeedEnt-zENT-707', - 'zCldFeedEnt-zOPT-708', - 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-709', - 'zCldFeedEnt-Entry Invitation Record GUID-710', - 'zCldFeedEnt-Entry Cloud Asset GUID-711', - 'zCldMast-zPK= zAsset-Master-712', - 'zCldMast-zENT-713', - 'zCldMast-zOPT-714', - 'zCldMast-Moment Share Key= zShare-zPK-715', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-716', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-717', - 'zCldMast-Originating Asset ID-718', - 'zCldMast-Import Session ID- AirDrop-StillTesting-719', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-720', - 'CMzCldMastMedData-zENT-721', - 'CMzCldMastMedData-zOPT-722', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-723', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-724', - 'AAAzCldMastMedData-zENT-725', - 'AAAzCldMastMedData-zOPT-726', - 'AAAzCldMastMedData-CldMast key-727', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-728', - 'zCldRes-zPK-729', - 'zCldRes-zENT-730', - 'zCldRes-zOPT-731', - 'zCldRes-Asset= zAsset-zPK-732', - 'zCldRes-Cloud Master= zCldMast-zPK-733', - 'zCldRes-Asset UUID-734', - 'zCldShareAlbumInvRec-zPK-735', - 'zCldShareAlbumInvRec-zEnt-736', - 'zCldShareAlbumInvRec-zOpt-737', - 'zCldShareAlbumInvRec-Album Key-738', - 'zCldShareAlbumInvRec-FOK Album Key-739', - 'zCldShareAlbumInvRec-Album GUID-740', - 'zCldShareAlbumInvRec-Cloud GUID-741', - 'zCldSharedComment-zPK-742', - 'zCldSharedComment-zENT-743', - 'zCldSharedComment-zOPT-744', - 'zCldSharedComment-Commented Asset Key= zAsset-zPK-745', - 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-746', - 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-747', - 'zCldSharedComment-Liked Asset Key= zAsset-zPK-748', - 'zCldSharedComment-CldFeedLikeCommentEntry Key-749', - 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-750', - 'zCldSharedComment-Cloud GUID-751', - 'zCompAssetAttr-zPK-752', - 'zCompAssetAttr-zEnt-753', - 'zCompAssetAttr-zOpt-754', - 'zCompAssetAttr-Asset Key-755', - 'zDetFace-zPK-756', - 'zDetFace-zEnt-757', - 'zDetFace.zOpt-758', - 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-759', - 'zDetFace-Person= zPerson-zPK-760', - 'zDetFace-Person Being Key Face-761', - 'zDetFace-Face Print-762', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-763', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-764', - 'zDetFace-UUID-765', - 'zDetFaceGroup-zPK-766', - 'zDetFaceGroup-zENT-767', - 'zDetFaceGroup-zOPT-768', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-769', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-770', - 'zDetFaceGroup-UUID-771', - 'zDetFacePrint-zPK-772', - 'zDetFacePrint-zEnt-773', - 'zDetFacePrint-zOpt-774', - 'zDetFacePrint-Face Key-775', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-776', - 'zExtAttr-zENT-777', - 'zExtAttr-zOPT-778', - 'zExtAttr-Asset Key-779', - 'zFaceCrop-zPK-780', - 'zFaceCrop-zEnt-781', - 'zFaceCrop-zOpt-782', - 'zFaceCrop-Asset Key-783', - 'zFaceCrop-Invalid Merge Canidate Person UUID-784', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-785', - 'zFaceCrop-Face Key-786', - 'zFaceCrop-UUID-787', - 'zGenAlbum-zPK=26AlbumLists= 26Albums-788', - 'zGenAlbum-zENT-789', - 'zGenAlbum-zOpt-790', - 'zGenAlbum-Key Asset-Key zAsset-zPK-791', - 'zGenAlbum-Secondary Key Asset-792', - 'zGenAlbum-Tertiary Key Asset-793', - 'zGenAlbum-Custom Key Asset-794', - 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-795', - 'zGenAlbum-FOK Parent Folder-796', - 'zGenAlbum-zSyndicate-797', - 'zGenAlbum-UUID-798', - 'SWYConverszGenAlbum-UUID-799', - 'zGenAlbum-Cloud_GUID = store.cloudphotodb-800', - 'SWYConverszGenAlbum-Cloud GUID-801', - 'zGenAlbum-Project Render UUID-802', - 'SWYConverszGenAlbum-Project Render UUID-803', - 'zIntResou-zPK-804', - 'zIntResou-zENT-805', - 'zIntResou-zOPT-806', - 'zIntResou-Asset= zAsset_zPK-807', - 'zIntResou-Fingerprint-808', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-809', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-810', - 'zMedAnlyAstAttr-zEnt-811', - 'zMedAnlyAstAttr-zOpt-812', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-813', - 'zPerson-zPK=zDetFace-Person-814', - 'zPerson-zEnt-815', - 'zPerson-zOpt-816', - 'zPerson-KeyFace=zDetFace-zPK-817', - 'zPerson-Assoc Face Group Key-818', - 'zPerson-Person UUID-819', - 'zSceneP-zPK-820', - 'zSceneP-zENT-821', - 'zSceneP-zOPT-822', - 'zShare-zPK-823', - 'zShare-zENT-824', - 'zShare-zOPT-825', - 'zShare-UUID-826', - 'SPLzShare-UUID-827', - 'zShare-Scope ID = store.cloudphotodb-828', - 'zSharePartic-zPK-829', - 'zSharePartic-zENT-830', - 'zSharePartic-zOPT-831', - 'zSharePartic-Share Key= zShare-zPK-832', - 'zSharePartic-UUID-833', - 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-834', - 'zUnmAdj-zOPT-835', - 'zUnmAdj-zENT-836', - 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-837', - 'zUnmAdj-UUID-838', - 'zUnmAdj-Other Adjustments Fingerprint-839', - 'zUnmAdj-Similar to Orig Adjustments Fingerprint-840', - 'zVisualSearchAttr-zPK-841', - 'zVisualSearchAttr-zENT-842', - 'zVisualSearchAttr-zOPT-843', - 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-844', - 'z26AlbumList-26Albums= zGenAlbum-zPK-845', - 'z26AlbumList-Album List Key-846', - 'z26AlbumList-FOK26Albums Key-847', - 'z27Assets-27Albums= zGenAlbum-zPK-848', - 'z27Assets-3Asset Key= zAsset-zPK in the Album-849', - 'z27Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-850') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph95.2-iOS15_Ref_for_Asset_Analysis-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph95.2-iOS15_Ref_for_Asset_Analysis-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) + ''' - else: - logfunc('No data available for iOS 15 Syndication.photoslibrary-database-Photos.sqlite') + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], + row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], + row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], + row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], + row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], + row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], + row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], + row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], + row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], + row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], + row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], + row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], + row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], + row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], + row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], + row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], + row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], + row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], + row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], + row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], + row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], + row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], + row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], + row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], + row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], + row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], + row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], + row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], + row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], + row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], + row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], + row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], + row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], + row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], + row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], + row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], + row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], + row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], + row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], + row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], + row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], + row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], + row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], + row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], + row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], + row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], + row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], + row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], + row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], + row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], + row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], + row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], + row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], + row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], + row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], + row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], + row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], + row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], + row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], + row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], + row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], + row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], + row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], + row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], + row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], + row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], + row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], + row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], + row[844], row[845], row[846], row[847], row[848], row[849], row[850])) - db.close() - return + data_headers = (('zAsset-Added Date-0', 'datetime'), + 'zAsset- SortToken -CameraRoll-1', + 'zAsset Complete-2', + 'zAsset-zPK-4QueryStart-3', + 'zAddAssetAttr-zPK-4QueryStart-4', + 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', + 'zAddAssetAttr-Master Fingerprint-4TableStart-6', + 'zIntResou-Fingerprint-4TableStart-7', + 'zAsset-Bundle Scope-8', + 'zAsset-Syndication State-9', + 'zAsset-Cloud is My Asset-10', + 'zAsset-Cloud is deletable-Asset-11', + 'zAsset-Cloud_Local_State-12', + 'zAsset-Visibility State-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zExtAttr-Lens Model-16', + 'zExtAttr-Flash Fired-17', + 'zExtAttr-Focal Lenght-18', + 'zExtAttr-Focal Lenth in 35MM-19', + 'zExtAttr-Digital Zoom Ratio-20', + 'zAsset-Derived Camera Capture Device-21', + 'zAddAssetAttr-Camera Captured Device-22', + 'zAddAssetAttr-Imported by-23', + 'zCldMast-Imported By-24', + 'zAddAssetAttr.Imported by Bundle Identifier-25', + 'zAddAssetAttr-Imported By Display Name-26', + 'zCldMast-Imported by Bundle ID-27', + 'zCldMast-Imported by Display Name-28', + 'zAsset-Saved Asset Type-29', + 'zAsset-Directory-Path-30', + 'zAsset-Filename-31', + 'zAddAssetAttr- Original Filename-32', + 'zCldMast- Original Filename-33', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-34', + ('zAddAssetAttr-Date Created Source-35', 'datetime'), + ('zAsset-Date Created-36', 'datetime'), + ('zCldMast-Creation Date-37', 'datetime'), + ('zIntResou-CldMst Date Created-38', 'datetime'), + 'zAddAssetAttr-Time Zone Name-39', + 'zAddAssetAttr-Time Zone Offset-40', + 'zAddAssetAttr-Inferred Time Zone Offset-41', + 'zAddAssetAttr-EXIF-String-42', + ('zAsset-Modification Date-43', 'datetime'), + ('zAsset-Last Shared Date-44', 'datetime'), + 'zCldMast-Cloud Local State-45', + ('zCldMast-Import Date-46', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-47', 'datetime'), + 'zAddAssetAttr-Import Session ID-4QueryStart-48', + ('zAddAssetAttr-Alt Import Image Date-49', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-50', + ('zAsset-Cloud Batch Publish Date-51', 'datetime'), + ('zAsset-Cloud Server Publish Date-52', 'datetime'), + 'zAsset-Cloud Download Requests-53', + 'zAsset-Cloud Batch ID-54', + 'zAddAssetAttr-Upload Attempts-55', + 'zAsset-Latitude-56', + 'zExtAttr-Latitude-57', + 'zAsset-Longitude-58', + 'zExtAttr-Longitude-59', + 'zAddAssetAttr-GPS Horizontal Accuracy-60', + 'zAddAssetAttr-Location Hash-61', + 'zAddAssetAttr-Shifted Location Valid-62', + 'zAddAssetAttr-Shifted Location Data-63', + 'zAddAssetAttr-Reverse Location Is Valid-64', + 'zAddAssetAttr-Reverse Location Data-65', + 'ParentzGenAlbum-UUID-4QueryStart-66', + 'zGenAlbum-UUID-4QueryStart-67', + 'SWYConverszGenAlbum-UUID-4QueryStart-68', + 'ParentzGenAlbum-Cloud GUID-4QueryStart-69', + 'zGenAlbum-Cloud GUID-4QueryStart-70', + 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-71', + 'zCldShareAlbumInvRec-Album GUID-4QueryStart-72', + 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-73', + 'zGenAlbum-Project Render UUID-4QueryStart-74', + 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-75', + 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-76', + 'zGenAlbum-Cloud_Local_State-4QueryStart-77', + 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-78', + ('ParentzGenAlbum- Creation Date- 4QueryStart-79', 'datetime'), + ('zGenAlbum- Creation Date- 4QueryStart-80', 'datetime'), + ('SWYConverszGenAlbum- Creation Date- 4QueryStart-81', 'datetime'), + ('zGenAlbum- Cloud Creation Date- 4QueryStart-82', 'datetime'), + ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-83', 'datetime'), + ('zGenAlbum- Start Date- 4QueryStart-84', 'datetime'), + ('SWYConverszGenAlbum- Start Date- 4QueryStart-85', 'datetime'), + ('zGenAlbum- End Date- 4QueryStart-86', 'datetime'), + ('SWYConverszGenAlbum- End Date- 4QueryStart-87', 'datetime'), + ('zGenAlbum-Cloud Subscription Date- 4QueryStart-88', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-89', 'datetime'), + 'ParentzGenAlbum- Title- 4QueryStart-90', + 'zGenAlbum- Title-User&System Applied- 4QueryStart-91', + 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-92', + 'zGenAlbum-Import Session ID-SWY- 4QueryStart-93', + 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-94', + 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-95', + 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-96', + 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-97', + 'SWYConverszGenAlbum- Syndicate-4QueryStart-98', + 'zGenAlbum-zENT- Entity- 4QueryStart-99', + 'ParentzGenAlbum- Kind- 4QueryStart-100', + 'zGenAlbum-Album Kind- 4QueryStart-101', + 'SWYConverszGenAlbum-Album Kind- 4QueryStart-102', + 'AAAzCldMastMedData-zOPT-103', + 'zAddAssetAttr-Media Metadata Type-104', + 'AAAzCldMastMedData-Data-105', + 'CldMasterzCldMastMedData-zOPT-106', + 'zCldMast-Media Metadata Type-107', + 'CMzCldMastMedData-Data-108', + 'zAddAssetAttr-Syndication History-109', + 'zMedAnlyAstAttr-Syndication Processing Version-110', + 'zMedAnlyAstAttr-Syndication Processing Value-111', + 'zAsset-Orientation-112', + 'zAddAssetAttr-Original Orientation-113', + 'zAsset-Kind-114', + 'zAsset-Kind-Sub-Type-115', + 'zAddAssetAttr-Cloud Kind Sub Type-116', + 'zAsset-Playback Style-117', + 'zAsset-Playback Variation-118', + 'zAsset-Video Duration-119', + 'zExtAttr-Duration-120', + 'zAsset-Video CP Duration-121', + 'zAddAssetAttr-Video CP Duration Time Scale-122', + 'zAsset-Video CP Visibility State-123', + 'zAddAssetAttr-Video CP Display Value-124', + 'zAddAssetAttr-Video CP Display Time Scale-125', + 'zIntResou-Datastore Class ID-126', + 'zAsset-Cloud Placeholder Kind-127', + 'zIntResou-Local Availability-128', + 'zIntResou-Local Availability Target-129', + 'zIntResou-Cloud Local State-130', + 'zIntResou-Remote Availability-131', + 'zIntResou-Remote Availability Target-132', + 'zIntResou-Transient Cloud Master-133', + 'zIntResou-Side Car Index-134', + 'zIntResou- File ID-135', + 'zIntResou-Version-136', + 'zAddAssetAttr- Original-File-Size-137', + 'zIntResou-Resource Type-138', + 'zIntResou-Datastore Sub-Type-139', + 'zIntResou-Cloud Source Type-140', + 'zIntResou-Data Length-141', + 'zIntResou-Recipe ID-142', + ('zIntResou-Cloud Last Prefetch Date-143', 'datetime'), + 'zIntResou-Cloud Prefetch Count-144', + ('zIntResou- Cloud-Last-OnDemand Download-Date-145', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-146', + 'zIntResou-Compact-UTI-147', + 'zAsset-Uniform Type ID-148', + 'zAsset-Original Color Space-149', + 'zCldMast-Uniform_Type_ID-150', + 'zCldMast-Full Size JPEG Source-151', + 'zAsset-HDR Gain-152', + 'zAsset-zHDR_Type-153', + 'zExtAttr-Codec-154', + 'zIntResou-Codec Four Char Code Name-155', + 'zCldMast-Codec Name-156', + 'zCldMast-Video Frame Rate-157', + 'zCldMast-Placeholder State-158', + 'zAsset-Depth_Type-159', + 'zAsset-Avalanche UUID-4TableStart-160', + 'zAsset-Avalanche_Pick_Type-BurstAsset-161', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-162', + 'zAddAssetAttr-Cloud Recovery State-163', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-164', + 'zAsset-Deferred Processing Needed-165', + 'zAsset-Video Deferred Processing Needed-166', + 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-167', + 'zAddAssetAttr-Deferred Processing Candidate Options-168', + 'zAsset-Has Adjustments-Camera-Effects-Filters-169', + 'zUnmAdj-UUID-4TableStart-170', + 'zAsset-Adjustment Timestamp-171', + 'zUnmAdj-Adjustment Timestamp-172', + 'zAddAssetAttr-Editor Bundle ID-173', + 'zUnmAdj-Editor Localized Name-174', + 'zUnmAdj-Adjustment Format ID-175', + 'zAddAssetAttr-Montage-176', + 'zUnmAdj-Adjustment Render Types-177', + 'zUnmAdj-Adjustment Format Version-178', + 'zUnmAdj-Adjustment Base Image Format-179', + 'zAsset-Favorite-180', + 'zAsset-Hidden-181', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-182', + ('zAsset-Trashed Date-183', 'datetime'), + 'zIntResou-Trash State-184', + ('zIntResou-Trashed Date-185', 'datetime'), + 'zAsset-Cloud Delete State-186', + 'zIntResou-Cloud Delete State-187', + 'zAddAssetAttr-PTP Trashed State-188', + 'zIntResou-PTP Trashed State-189', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-190', + 'zMedAnlyAstAttr-Media Analysis Timestamp-191', + ('zAsset-Analysis State Modification Date-192', 'datetime'), + 'zAddAssetAttr- Pending View Count-193', + 'zAddAssetAttr- View Count-194', + 'zAddAssetAttr- Pending Play Count-195', + 'zAddAssetAttr- Play Count-196', + 'zAddAssetAttr- Pending Share Count-197', + 'zAddAssetAttr- Share Count-198', + 'zAddAssetAttr-Allowed for Analysis-199', + 'zAddAssetAttr-Scene Analysis Version-200', + 'zAddAssetAttr-Scene Analysis is From Preview-201', + 'zAddAssetAttr-Scene Analysis Timestamp-202', + 'zAddAssetAttr-Destination Asset Copy State-203', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-204', + 'zCldMast-Source Master For Duplication Scope ID-205', + 'zAddAssetAttr-Source Asset For Duplication ID-206', + 'zCldMast-Source Master for Duplication ID-207', + 'zAddAssetAttr-Variation Suggestions States-208', + 'zAsset-High Frame Rate State-209', + 'zAsset-Video Key Frame Time Scale-210', + 'zAsset-Video Key Frame Value-211', + 'zExtAttr-ISO-212', + 'zExtAttr-Metering Mode-213', + 'zExtAttr-Sample Rate-214', + 'zExtAttr-Track Format-215', + 'zExtAttr-White Balance-216', + 'zExtAttr-Aperture-217', + 'zExtAttr-BitRate-218', + 'zExtAttr-Exposure Bias-219', + 'zExtAttr-Frames Per Second-220', + 'zExtAttr-Shutter Speed-221', + 'zExtAttr-Slush Scene Bias-222', + 'zExtAttr-Slush Version-223', + 'zExtAttr-Slush Preset-224', + 'zExtAttr-Slush Warm Bias-225', + 'zAsset-Height-226', + 'zAddAssetAttr-Original Height-227', + 'zIntResou-Unoriented Height-228', + 'zAsset-Width-229', + 'zAddAssetAttr-Original Width-230', + 'zIntResou-Unoriented Width-231', + 'zShare-Thumbnail Image Data-232', + 'SPLzShare-Thumbnail Image Data-233', + 'zAsset-Thumbnail Index-234', + 'zAddAssetAttr-Embedded Thumbnail Height-235', + 'zAddAssetAttr-Embedded Thumbnail Length-236', + 'zAddAssetAttr-Embedded Thumbnail Offset-237', + 'zAddAssetAttr-Embedded Thumbnail Width-238', + 'zAsset-Packed Acceptable Crop Rect-239', + 'zAsset-Packed Badge Attributes-240', + 'zAsset-Packed Preferred Crop Rect-241', + 'zAsset-Curation Score-242', + 'zAsset-Camera Processing Adjustment State-243', + 'zAsset-Depth Type-244', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-245', + 'zAddAssetAttr-Orig Resource Choice-246', + 'zAddAssetAttr-Spatial Over Capture Group ID-247', + 'zAddAssetAttr-Place Annotation Data-248', + 'zAddAssetAttr-Distance Identity-249', + 'zAddAssetAttr-Edited IPTC Attributes-250', + 'zAssetDes-Long Description-251', + 'zAddAssetAttr-Asset Description-252', + 'zAddAssetAttr-Title-Comments via Cloud Website-253', + 'zAddAssetAttr-Accessibility Description-254', + 'zAddAssetAttr-Photo Stream Tag ID-255', + ('zCldFeedEnt-Entry Date-256', 'datetime'), + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-257', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-258', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-259', + 'zCldFeedEnt-Entry Priority Number-260', + 'zCldFeedEnt-Entry Type Number-261', + 'zCldSharedComment-Cloud GUID-4TableStart-262', + ('zCldSharedComment-Date-263', 'datetime'), + ('zCldSharedComment-Comment Client Date-264', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-265', 'datetime'), + 'zCldSharedComment-Type-266', + 'zCldSharedComment-Comment Text-267', + 'zCldSharedComment-Commenter Hashed Person ID-268', + 'zCldSharedComment-Batch Comment-269', + 'zCldSharedComment-Is a Caption-270', + 'zAsset-Cloud Has Comments by Me-271', + 'zCldSharedComment-Is My Comment-272', + 'zCldSharedComment-Is Deletable-273', + 'zAsset-Cloud Has Comments Conversation-274', + 'zAsset-Cloud Has Unseen Comments-275', + 'zCldSharedComment-Liked-276', + 'zAddAssetAttr-Share Type-277', + 'zShare-UUID-CMM-4TableStart-278', + 'SPLzShare-UUID-SPL-4TableStart-279', + 'zShare-zENT-CMM-280', + 'SPLzShare-zENT-SPL-281', + 'zShare-Status-CMM-282', + 'SPLzShare-Status-SPL-283', + 'zShare-Scope Type-CMM-284', + 'SPLzShare-Scope Type-SPL-285', + 'zShare-Local Publish State-CMM-286', + 'SPLzShare-Local Publish State-SPL-287', + 'zShare-Public Permission-CMM-288', + 'SPLzShare-Public Permission-SPL-289', + 'zShare-Originating Scope ID-CMM-290', + 'SPLzShare-Originating Scope ID-SPL-291', + 'zShare-Scope ID-CMM-292', + 'SPLzShare-Scope ID-SPL-293', + 'zShare-Title-CMM-294', + 'SPLzShare-Title-SPL-295', + 'zShare-Share URL-CMM-296', + 'SPLzShare-Share URL-SPL-297', + ('zShare-Creation Date-CMM-298', 'datetime'), + ('SPLzShare-Creation Date-SPL-299', 'datetime'), + ('zShare-Start Date-CMM-300', 'datetime'), + ('SPLzShare-Start Date-SPL-301', 'datetime'), + ('zShare-End Date-CMM-302', 'datetime'), + ('SPLzShare-End Date-SPL-303', 'datetime'), + ('zShare-Expiry Date-CMM-304', 'datetime'), + ('SPLzShare-Expiry Date-SPL-305', 'datetime'), + 'zShare-Asset Count-CMM-306', + 'SPLzShare-Asset Count-SPL-307', + 'zShare-Photos Count-CMM-308', + 'SPLzShare-Photos Count-CMM-SPL-309', + 'zShare-Uploaded Photos Count-CMM-310', + 'SPLzShare-Uploaded Photos Count-SPL-311', + 'zShare-Videos Count-CMM-312', + 'SPLzShare-Videos Count-SPL-313', + 'zShare-Uploaded Videos Count-CMM-314', + 'SPLzShare-Uploaded Videos Count-SPL-315', + 'zShare-Force Sync Attempted-CMM-316', + 'SPLzShare-Force Sync Attempted-SPL-317', + 'zShare-Auto Share Policy-CMM-318', + 'SPLzShare-Auto Share Policy-SPL-319', + 'zShare-Should Notify On Upload Completion-CMM-320', + 'SPLzShare-Should Notify On Upload Completion-SPL-321', + 'zShare-Trashed State-CMM-322', + 'SPLzShare-Trashed State-SPL-323', + 'zShare-Cloud Delete State-CMM-324', + 'SPLzShare-Cloud Delete State-SPL-325', + 'zShare-Should Ignor Budgets-CMM-326', + 'SPLzShare-Should Ignor Budgets-SPL-327', + 'zShare-Rules-CMM-328', + 'SPLzShare-Rules-SPL-329', + 'zSharePartic-UUID-4TableStart-330', + 'SPLzSharePartic-UUID-4TableStart-331', + 'zSharePartic-Acceptance Status-332', + 'SPLzSharePartic-Acceptance Status-333', + 'zSharePartic-Is Current User-334', + 'SPLzSharePartic-Is Current User-335', + 'zSharePartic-Role-336', + 'SPLzSharePartic-Role-337', + 'zSharePartic-Premission-338', + 'SPLzSharePartic-Premission-339', + 'zSharePartic-User ID-340', + 'SPLzSharePartic-User ID-341', + 'SPLzSharePartic-zPK-4TableStart-342', + 'zSharePartic-zPK-4TableStart-343', + 'zSharePartic-Email Address-344', + 'SPLzSharePartic-Email Address-345', + 'zSharePartic-Phone Number-346', + 'SPLzSharePartic-Phone Number-347', + 'ParentzGenAlbum-UUID-4TableStart-348', + 'zGenAlbum-UUID-4TableStart-349', + 'SWYConverszGenAlbum-UUID-4TableStart-350', + 'ParentzGenAlbum-Cloud GUID-4TableStart-351', + 'zGenAlbum-Cloud GUID-4TableStart-352', + 'SWYConverszGenAlbum-Cloud GUID-4TableStart-353', + 'zCldShareAlbumInvRec-Album GUID-4TableStart-354', + 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-355', + 'zGenAlbum-Project Render UUID-4TableStart-356', + 'SWYConverszGenAlbum-Project Render UUID-4TableStart-357', + 'zAlbumList-Needs Reordering Number-358', + 'zGenAlbum-zENT- Entity-359', + 'ParentzGenAlbum-Kind-360', + 'zGenAlbum-Album Kind-361', + 'SWYConverszGenAlbum-Album Kind-362', + 'ParentzGenAlbum-Cloud-Local-State-363', + 'zGenAlbum-Cloud_Local_State-364', + 'SWYConverszGenAlbum-Cloud_Local_State-365', + 'ParentzGenAlbum- Title-366', + 'zGenAlbum- Title-User&System Applied-367', + 'SWYConverszGenAlbum- Title -User&System Applied-368', + 'zGenAlbum-Import Session ID-SWY-369', + 'zAsset- Conversation= zGenAlbum_zPK-370', + 'SWYConverszGenAlbum- Import Session ID-SWY-371', + 'zGenAlbum-Imported by Bundle Identifier-372', + 'SWYzGenAlbum-Imported by Bundle Identifier-373', + 'SWYConverszGenAlbum- Syndicate-374', + ('ParentzGenAlbum-Creation Date-375', 'datetime'), + ('zGenAlbum-Creation Date-376', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-377', 'datetime'), + ('zGenAlbum-Cloud Creation Date-378', 'datetime'), + ('SWYConverszGenAlbum-Cloud Creation Date-379', 'datetime'), + ('zGenAlbum-Start Date-380', 'datetime'), + ('SWYConverszGenAlbum-Start Date-381', 'datetime'), + ('zGenAlbum-End Date-382', 'datetime'), + ('SWYConverszGenAlbum-End Date-383', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-384', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date-385', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-386', + 'zGenAlbum-Pending Items Count-387', + 'SWYConverszGenAlbum-Pending Items Count-388', + 'ParentzGenAlbum-Pending Items Type-389', + 'zGenAlbum-Pending Items Type-390', + 'SWYConverszGenAlbum-Pending Items Type-391', + 'zGenAlbum- Cached Photos Count-392', + 'SWYConverszGenAlbum- Cached Photos Count-393', + 'zGenAlbum- Cached Videos Count-394', + 'SWYConverszGenAlbum- Cached Videos Count-395', + 'zGenAlbum- Cached Count-396', + 'SWYConverszGenAlbum- Cached Count-397', + 'ParentzGenAlbum-Sync Event Order Key-398', + 'zGenAlbum-Sync Event Order Key-399', + 'SWYConverszGenAlbum-Sync Event Order Key-400', + 'zGenAlbum-Has Unseen Content-401', + 'SWYConverszGenAlbum-Has Unseen Content-402', + 'zGenAlbum-Unseen Asset Count-403', + 'SWYConverszGenAlbum-Unseen Asset Count-404', + 'zGenAlbum-is Owned-405', + 'SWYConverszGenAlbum-is Owned-406', + 'zGenAlbum-Cloud Relationship State-407', + 'SWYConverszGenAlbum-Cloud Relationship State-408', + 'zGenAlbum-Cloud Relationship State Local-409', + 'SWYConverszGenAlbum-Cloud Relationship State Local-410', + 'zGenAlbum-Cloud Owner Mail Key-411', + 'SWYConverszGenAlbum-Cloud Owner Mail Key-412', + 'zGenAlbum-Cloud Owner Frist Name-413', + 'SWYConverszGenAlbum-Cloud Owner Frist Name-414', + 'zGenAlbum-Cloud Owner Last Name-415', + 'SWYConverszGenAlbum-Cloud Owner Last Name-416', + 'zGenAlbum-Cloud Owner Full Name-417', + 'SWYConverszGenAlbum-Cloud Owner Full Name-418', + 'zGenAlbum-Cloud Person ID-419', + 'SWYConverszGenAlbum-Cloud Person ID-420', + 'zAsset-Cloud Owner Hashed Person ID-421', + 'zGenAlbum-Cloud Owner Hashed Person ID-422', + 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-423', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-424', + 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-425', + 'zGenAlbum-Cloud Multi-Contributors Enabled-426', + 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-427', + 'zGenAlbum-Cloud Album Sub Type-428', + 'SWYConverszGenAlbum-Cloud Album Sub Type-429', + ('zGenAlbum-Cloud Contribution Date-430', 'datetime'), + ('SWYConverszGenAlbum-Cloud Contribution Date-431', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-432', 'datetime'), + ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-433', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-434', + 'SWYConverszGenAlbum-Cloud Notification Enabled-435', + 'ParentzGenAlbum-Pinned-436', + 'zGenAlbum-Pinned-437', + 'SWYConverszGenAlbum-Pinned-438', + 'ParentzGenAlbum-Custom Sort Key-439', + 'zGenAlbum-Custom Sort Key-440', + 'SWYConverszGenAlbum-Custom Sort Key-441', + 'ParentzGenAlbum-Custom Sort Ascending-442', + 'zGenAlbum-Custom Sort Ascending-443', + 'SWYConverszGenAlbum-Custom Sort Ascending-444', + 'ParentzGenAlbum-Is Prototype-445', + 'zGenAlbum-Is Prototype-446', + 'SWYConverszGenAlbum-Is Prototype-447', + 'ParentzGenAlbum-Project Document Type-448', + 'zGenAlbum-Project Document Type-449', + 'SWYConverszGenAlbum-Project Document Type-450', + 'ParentzGenAlbum-Custom Query Type-451', + 'zGenAlbum-Custom Query Type-452', + 'SWYConverszGenAlbum-Custom Query Type-453', + 'ParentzGenAlbum-Trashed State-454', + ('ParentzGenAlbum-Trash Date-455', 'datetime'), + 'zGenAlbum-Trashed State-456', + ('zGenAlbum-Trash Date-457', 'datetime'), + 'SWYConverszGenAlbum-Trashed State-458', + ('SWYConverszGenAlbum-Trash Date-459', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-460', + 'zGenAlbum-Cloud Delete State-461', + 'SWYConverszGenAlbum-Cloud Delete State-462', + 'zGenAlbum-Cloud Owner Whitelisted-463', + 'SWYConverszGenAlbum-Cloud Owner Whitelisted-464', + 'zGenAlbum-Cloud Local Public URL Enabled-465', + 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-466', + 'zGenAlbum-Cloud Public URL Enabled-467', + 'zGenAlbum-Public URL-468', + 'SWYConverszGenAlbum-Cloud Public URL Enabled-469', + 'SWYConverszGenAlbum-Public URL-470', + 'zGenAlbum-Key Asset Face Thumb Index-471', + 'SWYConverszGenAlbum-Key Asset Face Thumb Index-472', + 'zGenAlbum-Project Text Extension ID-473', + 'SWYConverszGenAlbum-Project Text Extension ID-474', + 'zGenAlbum-User Query Data-475', + 'SWYConverszGenAlbum-User Query Data-476', + 'zGenAlbum-Custom Query Parameters-477', + 'SWYConverszGenAlbum-Custom Query Parameters-478', + 'zGenAlbum-Project Data-479', + 'SWYConverszGenAlbum-Project Data-480', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-481', + 'zCldShareAlbumInvRec-Invitation State Local-482', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-483', + ('zCldShareAlbumInvRec-Subscription Date-484', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-485', + 'zCldShareAlbumInvRec-Invitee Last Name-486', + 'zCldShareAlbumInvRec-Invitee Full Name-487', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-488', + 'zCldShareAlbumInvRec-Invitee Email Key-489', + 'zGenAlbum-Key Asset Face ID-490', + 'zFaceCrop-Face Area Points-491', + 'zAsset-Face Adjustment Version-492', + 'zAddAssetAttr-Face Analysis Version-493', + 'zDetFace-Asset Visible-494', + 'zPerson-Face Count-495', + 'zDetFace-Face Crop-496', + 'zDetFace-Face Algorithm Version-497', + 'zDetFace-Adjustment Version-498', + 'zDetFace-UUID-4TableStart-499', + 'zPerson-Person UUID-4TableStart-500', + 'zDetFace-Confirmed Face Crop Generation State-501', + 'zDetFace-Manual-502', + 'zDetFace-Detection Type-503', + 'zPerson-Detection Type-504', + 'zDetFace-VIP Model Type-505', + 'zDetFace-Name Source-506', + 'zDetFace-Cloud Name Source-507', + 'zPerson-Person URI-508', + 'zPerson-Display Name-509', + 'zPerson-Full Name-510', + 'zPerson-Cloud Verified Type-511', + 'zFaceCrop-State-512', + 'zFaceCrop-Type-513', + 'zFaceCrop-UUID-4TableStart-514', + 'zPerson-Type-515', + 'zPerson-Verified Type-516', + 'zPerson-Gender Type-517', + 'zDetFace-Gender Type-518', + 'zDetFace-Center X-519', + 'zDetFace-Center Y-520', + 'zPerson-Age Type Estimate-521', + 'zDetFace-Age Type Estimate-522', + 'zDetFace-Ethnicity Type-523', + 'zDetFace-Skin Tone Type-524', + 'zDetFace-Hair Type-525', + 'zDetFace-Hair Color Type-526', + 'zDetFace-Head Gear Type-527', + 'zDetFace-Facial Hair Type-528', + 'zDetFace-Has Face Mask-529', + 'zDetFace-Pose Type-530', + 'zDetFace-Face Expression Type-531', + 'zDetFace-Has Smile-532', + 'zDetFace-Smile Type-533', + 'zDetFace-Lip Makeup Type-534', + 'zDetFace-Eyes State-535', + 'zDetFace-Is Left Eye Closed-536', + 'zDetFace-Is Right Eye Closed-537', + 'zDetFace-Gaze Center X-538', + 'zDetFace-Gaze Center Y-539', + 'zDetFace-Face Gaze Type-540', + 'zDetFace-Eye Glasses Type-541', + 'zDetFace-Eye Makeup Type-542', + 'zDetFace-Cluster Squence Number Key-543', + 'zDetFace-Grouping ID-544', + 'zDetFace-Master ID-545', + 'zDetFace-Quality-546', + 'zDetFace-Quality Measure-547', + 'zDetFace-Source Height-548', + 'zDetFace-Source Width-549', + 'zDetFace-Hidden-Asset Hidden-550', + 'zDetFace-In Trash-Recently Deleted-551', + 'zDetFace-Cloud Local State-552', + 'zDetFace-Training Type-553', + 'zDetFace.Pose Yaw-554', + 'zDetFace-Body Center X-555', + 'zDetFace-Body Center Y-556', + 'zDetFace-Body Height-557', + 'zDetFace-Body Width-558', + 'zDetFace-Roll-559', + 'zDetFace-Size-560', + 'zDetFace-Cluster Squence Number-561', + 'zDetFace-Blur Score-562', + 'zDetFacePrint-Face Print Version-563', + 'zMedAnlyAstAttr-Face Count-564', + 'zDetFaceGroup-UUID-4TableStart-565', + 'zDetFaceGroup-Person Builder State-566', + 'zDetFaceGroup-UnNamed Face Count-567', + 'zPerson-In Person Naming Model-568', + 'zPerson-Key Face Pick Source Key-569', + 'zPerson-Manual Order Key-570', + 'zPerson-Question Type-571', + 'zPerson-Suggested For Client Type-572', + 'zPerson-Merge Target Person-573', + 'zPerson-Cloud Local State-574', + 'zFaceCrop-Cloud Local State-575', + 'zFaceCrop-Cloud Type-576', + 'zPerson-Cloud Delete State-577', + 'zFaceCrop-Cloud Delete State-578', + 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-579', + 'zAsset-Highlight Visibility Score-580', + 'zMedAnlyAstAttr-Media Analysis Version-581', + 'zMedAnlyAstAttr-Audio Classification-582', + 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-583', + 'zMedAnlyAstAttr-Best Video Range Start Time Scale-584', + 'zMedAnlyAstAttr-Best Video Range Duration Value-585', + 'zMedAnlyAstAttr-Best Video Range Start Value-586', + 'zMedAnlyAstAttr-Packed Best Playback Rect-587', + 'zMedAnlyAstAttr-Activity Score-588', + 'zMedAnlyAstAttr-Video Score-589', + 'zMedAnlyAstAttr-AutoPlay Suggestion Score-590', + 'zMedAnlyAstAttr-Blurriness Score-591', + 'zMedAnlyAstAttr-Exposure Score-592', + 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-593', + 'zMedAnlyAstAttr-Probable Rotation Direction-594', + 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-595', + 'zAssetAnalyState-Asset UUID-4TableStart-596', + 'zAssetAnalyState-Analyisis State-597', + 'zAssetAnalyState-Worker Flags-598', + 'zAssetAnalyState-Worker Type-599', + ('zAssetAnalyState-Ignore Until Date-600', 'datetime'), + ('zAssetAnalyState-Last Ignored Date-601', 'datetime'), + ('zAssetAnalyState-Sort Token-602', 'datetime'), + 'zMedAnlyAstAttr-Character Recognition Attr-603', + 'zCharRecogAttr-Algorithm Version-604', + 'zCharRecogAttr-Adjustment Version-605', + 'zMedAnlyAstAttr-Visual Search Attributes-606', + 'zVisualSearchAttr-Algorithm Version-607', + 'zVisualSearchAttr-Adjustment Version-608', + 'zAsset-Overall Aesthetic Score-609', + 'zCompAssetAttr-Behavioral Score-610', + 'zCompAssetAttr-Failure Score zCompAssetAttr-611', + 'zCompAssetAttr-Harmonious Color Score-612', + 'zCompAssetAttr-Immersiveness Score-613', + 'zCompAssetAttr-Interaction Score-614', + 'zCompAssetAttr-Intersting Subject Score-615', + 'zCompAssetAttr-Intrusive Object Presence Score-616', + 'zCompAssetAttr-Lively Color Score-617', + 'zCompAssetAttr-Low Light-618', + 'zCompAssetAttr-Noise Score-619', + 'zCompAssetAttr-Pleasant Camera Tilt Score-620', + 'zCompAssetAttr-Pleasant Composition Score-621', + 'zCompAssetAttr-Pleasant Lighting Score-622', + 'zCompAssetAttr-Pleasant Pattern Score-623', + 'zCompAssetAttr-Pleasant Perspective Score-624', + 'zCompAssetAttr-Pleasant Post Processing Score-625', + 'zCompAssetAttr-Pleasant Reflection Score-626', + 'zCompAssetAttrPleasant Symmetry Score-627', + 'zCompAssetAttr-Sharply Focused Subject Score-628', + 'zCompAssetAttr-Tastfully Blurred Score-629', + 'zCompAssetAttr-Well Chosen Subject Score-630', + 'zCompAssetAttr-Well Framed Subject Score-631', + 'zCompAssetAttr-Well Timeed Shot Score-632', + 'zCldRes-Asset UUID-4TableStart-633', + 'zCldRes-Cloud Local State-634', + 'zCldRes-File Size-635', + 'zCldRes-Height-636', + 'zCldRes-Is Available-637', + 'zCldRes-Is Locally Available-638', + 'zCldRes-Prefetch Count-639', + 'zCldRes-Source Type-640', + 'zCldRes-Type-641', + 'zCldRes-Width-642', + ('zCldRes-Date Created-643', 'datetime'), + ('zCldRes-Last OnDemand Download Date-644', 'datetime'), + ('zCldRes-Last Prefetch Date-645', 'datetime'), + 'zCldRes-Prunedat-646', + 'zCldRes-File Path-647', + 'zCldRes-Fingerprint-648', + 'zCldRes-Item ID-649', + 'zCldRes-UniID-650', + 'zAddAssetAttr-zPK-651', + 'zAddAssetAttr-zENT-652', + 'ZAddAssetAttr-zOPT-653', + 'zAddAssetAttr-zAsset= zAsset_zPK-654', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-655', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-656', + 'zAddAssetAttr-Master Fingerprint-657', + 'zAddAssetAttr-Public Global UUID-658', + 'zAddAssetAttr-Deferred Photo Identifier-659', + 'zAddAssetAttr-Original Assets UUID-660', + 'zAddAssetAttr-Import Session ID-661', + 'zAddAssetAttr-Originating Asset Identifier-662', + 'zAddAssetAttr.Adjusted Fingerprint-663', + 'zAlbumList-zPK= Album List Key-664', + 'zAlbumList-zENT-665', + 'zAlbumList-zOPT-666', + 'zAlbumList-ID Key-667', + 'zAlbumList-UUID-668', + 'zAsset-zPK-669', + 'zAsset-zENT-670', + 'zAsset-zOPT-671', + 'zAsset-Master= zCldMast-zPK-672', + 'zAsset-Extended Attributes= zExtAttr-zPK-673', + 'zAsset-Import Session Key-674', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-675', + 'zAsset-FOK-Cloud Feed Asset Entry Key-676', + 'zAsset-Moment Share Key= zShare-zPK-677', + 'zAsset-zMoment Key= zMoment-zPK-678', + 'zAsset-Computed Attributes Asset Key-679', + 'zAsset-Highlight Being Assets-HBA Key-680', + 'zAsset-Highlight Being Extended Assets-HBEA Key-681', + 'zAsset-Highligh Being Summary Assets-HBSA Key-682', + 'zAsset-Day Group Highlight Being Assets-DGHBA Key-683', + 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-684', + 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-685', + 'zAsset-Promotion Score-686', + 'zAsset-Media Analysis Attributes Key-687', + 'zAsset-Media Group UUID-688', + 'zAsset-UUID = store.cloudphotodb-689', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-690', + 'zAsset.Cloud Collection GUID-691', + 'zAsset-Avalanche UUID-692', + 'zAssetAnalyState-zPK-693', + 'zAssetAnalyState-zEnt-694', + 'zAssetAnalyState-zOpt-695', + 'zAssetAnalyState-Asset= zAsset-zPK-696', + 'zAssetAnalyState-Asset UUID-697', + 'zAssetDes-zPK-698', + 'zAssetDes-zENT-699', + 'zAssetDes-zOPT-700', + 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-701', + 'zCharRecogAttr-zPK-702', + 'zCharRecogAttr-zENT-703', + 'zCharRecogAttr-zOPT-704', + 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-705', + 'zCldFeedEnt-zPK= zCldShared keys-706', + 'zCldFeedEnt-zENT-707', + 'zCldFeedEnt-zOPT-708', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-709', + 'zCldFeedEnt-Entry Invitation Record GUID-710', + 'zCldFeedEnt-Entry Cloud Asset GUID-711', + 'zCldMast-zPK= zAsset-Master-712', + 'zCldMast-zENT-713', + 'zCldMast-zOPT-714', + 'zCldMast-Moment Share Key= zShare-zPK-715', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-716', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-717', + 'zCldMast-Originating Asset ID-718', + 'zCldMast-Import Session ID- AirDrop-StillTesting-719', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-720', + 'CMzCldMastMedData-zENT-721', + 'CMzCldMastMedData-zOPT-722', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-723', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-724', + 'AAAzCldMastMedData-zENT-725', + 'AAAzCldMastMedData-zOPT-726', + 'AAAzCldMastMedData-CldMast key-727', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-728', + 'zCldRes-zPK-729', + 'zCldRes-zENT-730', + 'zCldRes-zOPT-731', + 'zCldRes-Asset= zAsset-zPK-732', + 'zCldRes-Cloud Master= zCldMast-zPK-733', + 'zCldRes-Asset UUID-734', + 'zCldShareAlbumInvRec-zPK-735', + 'zCldShareAlbumInvRec-zEnt-736', + 'zCldShareAlbumInvRec-zOpt-737', + 'zCldShareAlbumInvRec-Album Key-738', + 'zCldShareAlbumInvRec-FOK Album Key-739', + 'zCldShareAlbumInvRec-Album GUID-740', + 'zCldShareAlbumInvRec-Cloud GUID-741', + 'zCldSharedComment-zPK-742', + 'zCldSharedComment-zENT-743', + 'zCldSharedComment-zOPT-744', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-745', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-746', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-747', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-748', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-749', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-750', + 'zCldSharedComment-Cloud GUID-751', + 'zCompAssetAttr-zPK-752', + 'zCompAssetAttr-zEnt-753', + 'zCompAssetAttr-zOpt-754', + 'zCompAssetAttr-Asset Key-755', + 'zDetFace-zPK-756', + 'zDetFace-zEnt-757', + 'zDetFace.zOpt-758', + 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-759', + 'zDetFace-Person= zPerson-zPK-760', + 'zDetFace-Person Being Key Face-761', + 'zDetFace-Face Print-762', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-763', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-764', + 'zDetFace-UUID-765', + 'zDetFaceGroup-zPK-766', + 'zDetFaceGroup-zENT-767', + 'zDetFaceGroup-zOPT-768', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-769', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-770', + 'zDetFaceGroup-UUID-771', + 'zDetFacePrint-zPK-772', + 'zDetFacePrint-zEnt-773', + 'zDetFacePrint-zOpt-774', + 'zDetFacePrint-Face Key-775', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-776', + 'zExtAttr-zENT-777', + 'zExtAttr-zOPT-778', + 'zExtAttr-Asset Key-779', + 'zFaceCrop-zPK-780', + 'zFaceCrop-zEnt-781', + 'zFaceCrop-zOpt-782', + 'zFaceCrop-Asset Key-783', + 'zFaceCrop-Invalid Merge Canidate Person UUID-784', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-785', + 'zFaceCrop-Face Key-786', + 'zFaceCrop-UUID-787', + 'zGenAlbum-zPK=26AlbumLists= 26Albums-788', + 'zGenAlbum-zENT-789', + 'zGenAlbum-zOpt-790', + 'zGenAlbum-Key Asset-Key zAsset-zPK-791', + 'zGenAlbum-Secondary Key Asset-792', + 'zGenAlbum-Tertiary Key Asset-793', + 'zGenAlbum-Custom Key Asset-794', + 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-795', + 'zGenAlbum-FOK Parent Folder-796', + 'zGenAlbum-zSyndicate-797', + 'zGenAlbum-UUID-798', + 'SWYConverszGenAlbum-UUID-799', + 'zGenAlbum-Cloud_GUID = store.cloudphotodb-800', + 'SWYConverszGenAlbum-Cloud GUID-801', + 'zGenAlbum-Project Render UUID-802', + 'SWYConverszGenAlbum-Project Render UUID-803', + 'zIntResou-zPK-804', + 'zIntResou-zENT-805', + 'zIntResou-zOPT-806', + 'zIntResou-Asset= zAsset_zPK-807', + 'zIntResou-Fingerprint-808', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-809', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-810', + 'zMedAnlyAstAttr-zEnt-811', + 'zMedAnlyAstAttr-zOpt-812', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-813', + 'zPerson-zPK=zDetFace-Person-814', + 'zPerson-zEnt-815', + 'zPerson-zOpt-816', + 'zPerson-KeyFace=zDetFace-zPK-817', + 'zPerson-Assoc Face Group Key-818', + 'zPerson-Person UUID-819', + 'zSceneP-zPK-820', + 'zSceneP-zENT-821', + 'zSceneP-zOPT-822', + 'zShare-zPK-823', + 'zShare-zENT-824', + 'zShare-zOPT-825', + 'zShare-UUID-826', + 'SPLzShare-UUID-827', + 'zShare-Scope ID = store.cloudphotodb-828', + 'zSharePartic-zPK-829', + 'zSharePartic-zENT-830', + 'zSharePartic-zOPT-831', + 'zSharePartic-Share Key= zShare-zPK-832', + 'zSharePartic-UUID-833', + 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-834', + 'zUnmAdj-zOPT-835', + 'zUnmAdj-zENT-836', + 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-837', + 'zUnmAdj-UUID-838', + 'zUnmAdj-Other Adjustments Fingerprint-839', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-840', + 'zVisualSearchAttr-zPK-841', + 'zVisualSearchAttr-zENT-842', + 'zVisualSearchAttr-zOPT-843', + 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-844', + 'z26AlbumList-26Albums= zGenAlbum-zPK-845', + 'z26AlbumList-Album List Key-846', + 'z26AlbumList-FOK26Albums Key-847', + 'z27Assets-27Albums= zGenAlbum-zPK-848', + 'z27Assets-3Asset Key= zAsset-zPK in the Album-849', + 'z27Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-850') + data_list = get_sqlite_db_records(source_path, query) - -__artifacts_v2__ = { - 'Ph95-1-iOS15_Ref_for_Asset_Analysis-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite 95.1 iOS15 Reference for Asset Analysis', - 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' - ' set of decoded data based on testing and research conducted by Scott Koenig' - ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' - ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' - ' to view, search and filter the results.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-04-19', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph95ios15refforassetanalysisphdapsql' - }, - 'Ph95-2-iOS15_Ref_for_Asset_Analysis-SyndPL': { - 'name': 'SyndPL Photos.sqlite 95.2 iOS15 Reference for Asset Analysis', - 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' - ' This parser includes the largest set of decoded data based on testing and research' - ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' - ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' - ' TimelineExplorer to view, search and filter the results.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-04-19', - 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', - 'notes': '', - 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*', - 'function': 'get_ph95ios15refforassetanalysissyndpl' - } -} + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph96iOS16REFforAssetAnalysis.py b/scripts/artifacts/Ph96iOS16REFforAssetAnalysis.py index 93ec3266..bf01cdc9 100644 --- a/scripts/artifacts/Ph96iOS16REFforAssetAnalysis.py +++ b/scripts/artifacts/Ph96iOS16REFforAssetAnalysis.py @@ -1,41 +1,66 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 1.0 -# -# Description: -# Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest set of decoded data based on -# testing and research conducted by Scott Koenig https://theforensicscooter.com/ and -# queries found at https://github.com/ScottKjr3347. -# I recommend opening the TSV generated reports with Zimmerman's Tools https://ericzimmerman.github.io/#!index.md -# TimelineExplorer to view, search and filter the results. -# +__artifacts_v2__ = { + 'Ph96_1iOS16RefforAssetAnalysisPhDaPsql': { + 'name': 'Ph96.1-iOS16_Ref_for_Asset_Analysis-PhDaPsql', + 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' + ' set of decoded data based on testing and research conducted by Scott Koenig' + ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' + ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' + ' to view, search and filter the results.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + }, + 'Ph96_2iOS16RefforAssetAnalysisSyndPL': { + 'name': 'Ph96.2-iOS16_Ref_for_Asset_Analysis-SyndPL', + 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' + ' This parser includes the largest set of decoded data based on testing and research' + ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' + ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' + ' TimelineExplorer to view, search and filter the results.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite', + 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly - - -def get_ph96ios16refforassetanalysisphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph96_1iOS16RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if (version.parse(iosversion) <= version.parse("15.8.2")) or (version.parse(iosversion) >= version.parse("17")): - logfunc(f"Unsupported version for PhotoData-Photos.sqlite reference for asset analysis from iOS " + iosversion) + logfunc(f"Unsupported version for PhotoData-Photos.sqlite for iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -2260,7 +2285,7 @@ def get_ph96ios16refforassetanalysisphdapsql(files_found, report_folder, seeker, zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type', DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date', DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date', - zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token', + DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token', zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr', zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version', zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version', @@ -2629,1278 +2654,1256 @@ def get_ph96ios16refforassetanalysisphdapsql(files_found, report_folder, seeker, LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS1 = zAsset.Z_PK LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_58SUGGESTIONSBEINGREPRESENTATIVEASSETS ORDER BY zAsset.ZADDEDDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], - row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], - row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], - row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], - row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], - row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], - row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], - row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], - row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], - row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], - row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], - row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], - row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], - row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], - row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], - row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], - row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], - row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], - row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], - row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], - row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], - row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], - row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], - row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], - row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], - row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], - row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], - row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], - row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], - row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], - row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], - row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], - row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], - row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], - row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], - row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], - row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], - row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], - row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], - row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], - row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], - row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], - row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], - row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], - row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], - row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], - row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], - row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], - row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], - row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], - row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], - row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], - row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], - row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], - row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], - row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], - row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], - row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], - row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], - row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], - row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], - row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], - row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], - row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], - row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], - row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], - row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], - row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], - row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], - row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], - row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], - row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], - row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], - row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], - row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], - row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], - row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], - row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], - row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], - row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], - row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], - row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], - row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], - row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], - row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], - row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], - row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], - row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], - row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], - row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], - row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], - row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], - row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], - row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], - row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], - row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], - row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], - row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], - row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], - row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], - row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], - row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], - row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], - row[1080], row[1081], row[1082])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' \ - ' set of decoded data based on testing and research conducted by Scott Koenig' \ - ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' \ - ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \ - ' to view, search and filter the results.' - report = ArtifactHtmlReport('Ph96.1-iOS16_Ref_for_Asset_Analysis-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph96.1-iOS16_Ref_for_Asset_Analysis-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Added Date-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset Complete-2', - 'zAsset-zPK-4QueryStart-3', - 'zAddAssetAttr-zPK-4QueryStart-4', - 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', - 'zAddAssetAttr-Master Fingerprint-4TableStart-6', - 'zIntResou-Fingerprint-4TableStart-7', - 'zAsset-Bundle Scope-8', - 'zAsset-Syndication State-9', - 'zAsset-Cloud is My Asset-10', - 'zAsset-Cloud is deletable-Asset-11', - 'zAsset-Cloud_Local_State-12', - 'zAsset-Visibility State-13', - 'zExtAttr-Camera Make-14', - 'zExtAttr-Camera Model-15', - 'zExtAttr-Lens Model-16', - 'zExtAttr-Flash Fired-17', - 'zExtAttr-Focal Lenght-18', - 'zExtAttr-Focal Lenth in 35MM-19', - 'zExtAttr-Digital Zoom Ratio-20', - 'zAsset-Derived Camera Capture Device-21', - 'zAddAssetAttr-Camera Captured Device-22', - 'zAddAssetAttr-Imported by-23', - 'zCldMast-Imported By-24', - 'zAddAssetAttr.Imported by Bundle Identifier-25', - 'zAddAssetAttr-Imported By Display Name-26', - 'zCldMast-Imported by Bundle ID-27', - 'zCldMast-Imported by Display Name-28', - 'zAsset-Saved Asset Type-29', - 'zAsset-Directory-Path-30', - 'zAsset-Filename-31', - 'zAddAssetAttr- Original Filename-32', - 'zCldMast- Original Filename-33', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-34', - 'zAsset-Active Library Scope Participation State -4QueryStart-35', - 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36', - 'zShare-Cloud Photo Count-SPL -4QueryStart-37', - 'zShare-Cloud Video Count-SPL -4QueryStart-38', - 'zAddAssetAttr-Date Created Source-39', - 'zAsset-Date Created-40', - 'zCldMast-Creation Date-41', - 'zIntResou-CldMst Date Created-42', - 'zAddAssetAttr-Time Zone Name-43', - 'zAddAssetAttr-Time Zone Offset-44', - 'zAddAssetAttr-Inferred Time Zone Offset-45', - 'zAddAssetAttr-EXIF-String-46', - 'zAsset-Modification Date-47', - 'zAsset-Last Shared Date-48', - 'zCldMast-Cloud Local State-49', - 'zCldMast-Import Date-50', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-51', - 'zAddAssetAttr-Import Session ID-4QueryStart-52', - 'zAddAssetAttr-Alt Import Image Date-53', - 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-54', - 'zAsset-Cloud Batch Publish Date-55', - 'zAsset-Cloud Server Publish Date-56', - 'zAsset-Cloud Download Requests-57', - 'zAsset-Cloud Batch ID-58', - 'zAddAssetAttr-Upload Attempts-59', - 'zAsset-Latitude-60', - 'zExtAttr-Latitude-61', - 'zAsset-Longitude-62', - 'zExtAttr-Longitude-63', - 'zAddAssetAttr-GPS Horizontal Accuracy-64', - 'zAddAssetAttr-Location Hash-65', - 'zAddAssetAttr-Shifted Location Valid-66', - 'zAddAssetAttr-Shifted Location Data-67', - 'zAddAssetAttr-Reverse Location Is Valid-68', - 'zAddAssetAttr-Reverse Location Data-69', - 'ParentzGenAlbum-UUID-4QueryStart-70', - 'zGenAlbum-UUID-4QueryStart-71', - 'SWYConverszGenAlbum-UUID-4QueryStart-72', - 'ParentzGenAlbum-Cloud GUID-4QueryStart-73', - 'zGenAlbum-Cloud GUID-4QueryStart-74', - 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-75', - 'zCldShareAlbumInvRec-Album GUID-4QueryStart-76', - 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-77', - 'zGenAlbum-Project Render UUID-4QueryStart-78', - 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-79', - 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-80', - 'zGenAlbum-Cloud_Local_State-4QueryStart-81', - 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-82', - 'ParentzGenAlbum- Creation Date- 4QueryStart-83', - 'zGenAlbum- Creation Date- 4QueryStart-84', - 'SWYConverszGenAlbum- Creation Date- 4QueryStart-85', - 'zGenAlbum- Cloud Creation Date- 4QueryStart-86', - 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-87', - 'zGenAlbum- Start Date- 4QueryStart-88', - 'SWYConverszGenAlbum- Start Date- 4QueryStart-89', - 'zGenAlbum- End Date- 4QueryStart-90', - 'SWYConverszGenAlbum- End Date- 4QueryStart-91', - 'zGenAlbum-Cloud Subscription Date- 4QueryStart-92', - 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-93', - 'ParentzGenAlbum- Title- 4QueryStart-94', - 'zGenAlbum- Title-User&System Applied- 4QueryStart-95', - 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-96', - 'zGenAlbum-Import Session ID-SWY- 4QueryStart-97', - 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-98', - 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-99', - 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-100', - 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-101', - 'SWYConverszGenAlbum- Syndicate-4QueryStart-102', - 'zGenAlbum-zENT- Entity- 4QueryStart-103', - 'ParentzGenAlbum- Kind- 4QueryStart-104', - 'zGenAlbum-Album Kind- 4QueryStart-105', - 'SWYConverszGenAlbum-Album Kind- 4QueryStart-106', - 'AAAzCldMastMedData-zOPT-107', - 'zAddAssetAttr-Media Metadata Type-108', - 'AAAzCldMastMedData-Data-109', - 'CldMasterzCldMastMedData-zOPT-110', - 'zCldMast-Media Metadata Type-111', - 'CMzCldMastMedData-Data-112', - 'zAsset-Search Index Rebuild State-113', - 'zAddAssetAttr-Syndication History-114', - 'zMedAnlyAstAttr-Syndication Processing Version-115', - 'zMedAnlyAstAttr-Syndication Processing Value-116', - 'zAsset-Orientation-117', - 'zAddAssetAttr-Original Orientation-118', - 'zAsset-Kind-119', - 'zAsset-Kind-Sub-Type-120', - 'zAddAssetAttr-Cloud Kind Sub Type-121', - 'zAsset-Playback Style-122', - 'zAsset-Playback Variation-123', - 'zAsset-Video Duration-124', - 'zExtAttr-Duration-125', - 'zAsset-Video CP Duration-126', - 'zAddAssetAttr-Video CP Duration Time Scale-127', - 'zAsset-Video CP Visibility State-128', - 'zAddAssetAttr-Video CP Display Value-129', - 'zAddAssetAttr-Video CP Display Time Scale-130', - 'zIntResou-Datastore Class ID-131', - 'zAsset-Cloud Placeholder Kind-132', - 'zIntResou-Local Availability-133', - 'zIntResou-Local Availability Target-134', - 'zIntResou-Cloud Local State-135', - 'zIntResou-Remote Availability-136', - 'zIntResou-Remote Availability Target-137', - 'zIntResou-Transient Cloud Master-138', - 'zIntResou-Side Car Index-139', - 'zIntResou- File ID-140', - 'zIntResou-Version-141', - 'zAddAssetAttr- Original-File-Size-142', - 'zIntResou-Resource Type-143', - 'zIntResou-Datastore Sub-Type-144', - 'zIntResou-Cloud Source Type-145', - 'zIntResou-Data Length-146', - 'zIntResou-Recipe ID-147', - 'zIntResou-Cloud Last Prefetch Date-148', - 'zIntResou-Cloud Prefetch Count-149', - 'zIntResou- Cloud-Last-OnDemand Download-Date-150', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-151', - 'zIntResou-Compact-UTI-152', - 'zAsset-Uniform Type ID-153', - 'zAsset-Original Color Space-154', - 'zCldMast-Uniform_Type_ID-155', - 'zCldMast-Full Size JPEG Source-156', - 'zAsset-HDR Gain-157', - 'zAsset-zHDR_Type-158', - 'zExtAttr-Codec-159', - 'zIntResou-Codec Four Char Code Name-160', - 'zCldMast-Codec Name-161', - 'zCldMast-Video Frame Rate-162', - 'zCldMast-Placeholder State-163', - 'zAsset-Depth_Type-164', - 'zAsset-Avalanche UUID-4TableStart-165', - 'zAsset-Avalanche_Pick_Type-BurstAsset-166', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-167', - 'zAddAssetAttr-Cloud Recovery State-168', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-169', - 'zAsset-Deferred Processing Needed-170', - 'zAsset-Video Deferred Processing Needed-171', - 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-172', - 'zAddAssetAttr-Deferred Processing Candidate Options-173', - 'zAsset-Has Adjustments-Camera-Effects-Filters-174', - 'zUnmAdj-UUID-4TableStart-175', - 'zAsset-Adjustment Timestamp-176', - 'zUnmAdj-Adjustment Timestamp-177', - 'zAddAssetAttr-Editor Bundle ID-178', - 'zUnmAdj-Editor Localized Name-179', - 'zUnmAdj-Adjustment Format ID-180', - 'zAddAssetAttr-Montage-181', - 'zUnmAdj-Adjustment Render Types-182', - 'zUnmAdj-Adjustment Format Version-183', - 'zUnmAdj-Adjustment Base Image Format-184', - 'zAsset-Favorite-185', - 'zAsset-Hidden-186', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-187', - 'zAsset-Trashed Date-188', - 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-189', - 'zAsset-Delete-Reason-190', - 'zIntResou-Trash State-191', - 'zIntResou-Trashed Date-192', - 'zAsset-Cloud Delete State-193', - 'zIntResou-Cloud Delete State-194', - 'zAddAssetAttr-PTP Trashed State-195', - 'zIntResou-PTP Trashed State-196', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-197', - 'zMedAnlyAstAttr-Media Analysis Timestamp-198', - 'zAsset-Analysis State Modificaion Date-199', - 'zAddAssetAttr- Pending View Count-200', - 'zAddAssetAttr- View Count-201', - 'zAddAssetAttr- Pending Play Count-202', - 'zAddAssetAttr- Play Count-203', - 'zAddAssetAttr- Pending Share Count-204', - 'zAddAssetAttr- Share Count-205', - 'zAddAssetAttr-Allowed for Analysis-206', - 'zAddAssetAttr-Scene Analysis Version-207', - 'zAddAssetAttr-Scene Analysis is From Preview-208', - 'zAddAssetAttr-Scene Analysis Timestamp-209', - 'zAsset-Duplication Asset Visibility State-210', - 'zAddAssetAttr-Destination Asset Copy State-211', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-212', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-213', - 'zCldMast-Source Master For Duplication Scope ID-214', - 'zAddAssetAttr-Source Asset For Duplication ID-215', - 'zCldMast-Source Master for Duplication ID-216', - 'zAddAssetAttr-Variation Suggestions States-217', - 'zAsset-High Frame Rate State-218', - 'zAsset-Video Key Frame Time Scale-219', - 'zAsset-Video Key Frame Value-220', - 'zExtAttr-ISO-221', - 'zExtAttr-Metering Mode-222', - 'zExtAttr-Sample Rate-223', - 'zExtAttr-Track Format-224', - 'zExtAttr-White Balance-225', - 'zExtAttr-Aperture-226', - 'zExtAttr-BitRate-227', - 'zExtAttr-Exposure Bias-228', - 'zExtAttr-Frames Per Second-229', - 'zExtAttr-Shutter Speed-230', - 'zExtAttr-Slush Scene Bias-231', - 'zExtAttr-Slush Version-232', - 'zExtAttr-Slush Preset-233', - 'zExtAttr-Slush Warm Bias-234', - 'zAsset-Height-235', - 'zAddAssetAttr-Original Height-236', - 'zIntResou-Unoriented Height-237', - 'zAsset-Width-238', - 'zAddAssetAttr-Original Width-239', - 'zIntResou-Unoriented Width-240', - 'zShare-Thumbnail Image Data-241', - 'SPLzShare-Thumbnail Image Data-242', - 'zAsset-Thumbnail Index-243', - 'zAddAssetAttr-Embedded Thumbnail Height-244', - 'zAddAssetAttr-Embedded Thumbnail Length-245', - 'zAddAssetAttr-Embedded Thumbnail Offset-246', - 'zAddAssetAttr-Embedded Thumbnail Width-247', - 'zAsset-Packed Acceptable Crop Rect-248', - 'zAsset-Packed Badge Attributes-249', - 'zAsset-Packed Preferred Crop Rect-250', - 'zAsset-Curation Score-251', - 'zAsset-Camera Processing Adjustment State-252', - 'zAsset-Depth Type-253', - 'zAsset-Is Magic Carpet-QuicktimeMOVfile-254', - 'zAddAssetAttr-Orig Resource Choice-255', - 'zAddAssetAttr-Spatial Over Capture Group ID-256', - 'zAddAssetAttr-Place Annotation Data-257', - 'zAddAssetAttr-Distance Identity-258', - 'zAddAssetAttr-Edited IPTC Attributes-259', - 'zAssetDes-Long Description-260', - 'zAddAssetAttr-Asset Description-261', - 'zAddAssetAttr-Title-Comments via Cloud Website-262', - 'zAddAssetAttr-Accessibility Description-263', - 'zAddAssetAttr-Photo Stream Tag ID-264', - 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-265', - 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-266', - 'zCldFeedEnt-Entry Date-267', - 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-268', - 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-269', - 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-270', - 'zCldFeedEnt-Entry Priority Number-271', - 'zCldFeedEnt-Entry Type Number-272', - 'zCldSharedComment-Cloud GUID-4TableStart-273', - 'zCldSharedComment-Date-274', - 'zCldSharedComment-Comment Client Date-275', - 'zAsset-Cloud Last Viewed Comment Date-276', - 'zCldSharedComment-Type-277', - 'zCldSharedComment-Comment Text-278', - 'zCldSharedComment-Commenter Hashed Person ID-279', - 'zCldSharedComment-Batch Comment-280', - 'zCldSharedComment-Is a Caption-281', - 'zAsset-Cloud Has Comments by Me-282', - 'zCldSharedComment-Is My Comment-283', - 'zCldSharedComment-Is Deletable-284', - 'zAsset-Cloud Has Comments Conversation-285', - 'zAsset-Cloud Has Unseen Comments-286', - 'zCldSharedComment-Liked-287', - 'zAddAssetAttr-Share Type-288', - 'zAsset-Library Scope Share State- StillTesting-289', - 'zAsset-Active Library Scope Participation State-290', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-291', - 'zShare-UUID-CMM-4TableStart-292', - 'SPLzShare-UUID-SPL-4TableStart-293', - 'zShare-zENT-CMM-294', - 'SPLzShare-zENT-SPL-295', - 'zSharePartic-z54SHARE-296', - 'SPLzSharePartic-z54SHARE-297', - 'zShare-Status-CMM-298', - 'SPLzShare-Status-SPL-299', - 'zShare-Scope Type-CMM-300', - 'SPLzShare-Scope Type-SPL-301', - 'zShare-Local Publish State-CMM-302', - 'SPLzShare-Local Publish State-SPL-303', - 'zShare-Public Permission-CMM-304', - 'SPLzShare-Public Permission-SPL-305', - 'zShare-Originating Scope ID-CMM-306', - 'SPLzShare-Originating Scope ID-SPL-307', - 'zShare-Scope ID-CMM-308', - 'SPLzShare-Scope ID-SPL-309', - 'zShare-Title-CMM-310', - 'SPLzShare-Title-SPL-311', - 'zShare-Share URL-CMM-312', - 'SPLzShare-Share URL-SPL-313', - 'zShare-Creation Date-CMM-314', - 'SPLzShare-Creation Date-SPL-315', - 'zShare-Start Date-CMM-316', - 'SPLzShare-Start Date-SPL-317', - 'zShare-End Date-CMM-318', - 'SPLzShare-End Date-SPL-319', - 'zShare-Expiry Date-CMM-320', - 'SPLzShare-Expiry Date-SPL-321', - 'zShare-Cloud Item Count-CMM-322', - 'SPLzShare-Cloud Item Count-SPL-323', - 'zShare-Asset Count-CMM-324', - 'SPLzShare-Asset Count-SPL-325', - 'zShare-Cloud Photo Count-CMM-326', - 'SPLzShare-Cloud Photo Count-SPL-327', - 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-328', - 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-329', - 'zShare-Photos Count-CMM-330', - 'SPLzShare-Photos Count-CMM-SPL-331', - 'zShare-Uploaded Photos Count-CMM-332', - 'SPLzShare-Uploaded Photos Count-SPL-333', - 'zShare-Cloud Video Count-CMM-334', - 'SPLzShare-Cloud Video Count-SPL-335', - 'zShare-Videos Count-CMM-336', - 'SPLzShare-Videos Count-SPL-337', - 'zShare-Uploaded Videos Count-CMM-338', - 'SPLzShare-Uploaded Videos Count-SPL-339', - 'zShare-Force Sync Attempted-CMM-340', - 'SPLzShare-Force Sync Attempted-SPL-341', - 'zShare-Cloud Local State-CMM-342', - 'SPLzShare-Cloud Local State-SPL-343', - 'zShare-Scope Syncing State-CMM-344', - 'SPLzShare-Scope Syncing State-SPL-345', - 'zShare-Auto Share Policy-CMM-346', - 'SPLzShare-Auto Share Policy-SPL-347', - 'zShare-Should Notify On Upload Completion-CMM-348', - 'SPLzShare-Should Notify On Upload Completion-SPL-349', - 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-350', - 'zShare-Trashed State-CMM-351', - 'SPLzShare-Trashed State-SPL-352', - 'zShare-Cloud Delete State-CMM-353', - 'SPLzShare-Cloud Delete State-SPL-354', - 'zShare-Trashed Date-CMM-355', - 'SPLzShare-Trashed Date-SPL-356', - 'zShare-LastParticipant Asset Trash Notification Date-CMM-357', - 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL-358', - 'zShare-Last Participant Asset Trash Notification View Date-CMM-359', - 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL-360', - 'zShare-Exit Source-CMM-361', - 'SPLzShare-Exit Source-SPL-362', - 'zShare-SPL_Exit State-CMM-363', - 'SPLzShare-SPL_Exit State-SPL-364', - 'zShare-Exit Type-CMM-365', - 'SPLzShare-Exit Type-SPL-366', - 'zShare-Should Ignor Budgets-CMM-367', - 'SPLzShare-Should Ignor Budgets-SPL-368', - 'zShare-Preview State-CMM-369', - 'SPLzShare-Preview State-SPL-370', - 'zShare-Preview Data-CMM-371', - 'SPLzShare-Preview Data-SPL-372', - 'zShare-Rules-CMM-373', - 'SPLzShare-Rules-SPL-374', - 'zShare-Thumbnail Image Data-CMM-375', - 'SPLzShare-Thumbnail Image Data-SPL-376', - 'zShare-Participant Cloud Update State-CMM-377', - 'SPLzShare-Participant Cloud Update State-SPL-378', - 'zSharePartic-UUID-4TableStart-379', - 'SPLzSharePartic-UUID-4TableStart-380', - 'zSharePartic-Acceptance Status-381', - 'SPLzSharePartic-Acceptance Status-382', - 'zSharePartic-Is Current User-383', - 'SPLzSharePartic-Is Current User-384', - 'zSharePartic-Role-385', - 'SPLzSharePartic-Role-386', - 'zSharePartic-Premission-387', - 'SPLzSharePartic-Premission-388', - 'zSharePartic-Participant ID-389', - 'SPLzSharePartic-Participant ID-390', - 'zSharePartic-User ID-391', - 'SPLzSharePartic-User ID-392', - 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-393', - 'SPLzSharePartic-zPK-4TableStart-394', - 'zSharePartic-zPK-4TableStart-395', - 'zSharePartic-Email Address-396', - 'SPLzSharePartic-Email Address-397', - 'zSharePartic-Phone Number-398', - 'SPLzSharePartic-Phone Number-399', - 'zSharePartic-Exit State-400', - 'SPLzSharePartic-Exit State-401', - 'ParentzGenAlbum-UUID-4TableStart-402', - 'zGenAlbum-UUID-4TableStart-403', - 'SWYConverszGenAlbum-UUID-4TableStart-404', - 'ParentzGenAlbum-Cloud GUID-4TableStart-405', - 'zGenAlbum-Cloud GUID-4TableStart-406', - 'SWYConverszGenAlbum-Cloud GUID-4TableStart-407', - 'zCldShareAlbumInvRec-Album GUID-4TableStart-408', - 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-409', - 'zGenAlbum-Project Render UUID-4TableStart-410', - 'SWYConverszGenAlbum-Project Render UUID-4TableStart-411', - 'zAlbumList-Needs Reordering Number-412', - 'zGenAlbum-zENT- Entity-413', - 'ParentzGenAlbum-Kind-414', - 'zGenAlbum-Album Kind-415', - 'SWYConverszGenAlbum-Album Kind-416', - 'ParentzGenAlbum-Cloud-Local-State-417', - 'zGenAlbum-Cloud_Local_State-418', - 'SWYConverszGenAlbum-Cloud_Local_State-419', - 'ParentzGenAlbum- Title-420', - 'zGenAlbum- Title-User&System Applied-421', - 'SWYConverszGenAlbum- Title -User&System Applied-422', - 'zGenAlbum-Import Session ID-SWY-423', - 'zAsset- Conversation= zGenAlbum_zPK-424', - 'SWYConverszGenAlbum- Import Session ID-SWY-425', - 'zGenAlbum-Imported by Bundle Identifier-426', - 'SWYzGenAlbum-Imported by Bundle Identifier-427', - 'SWYConverszGenAlbum- Syndicate-428', - 'ParentzGenAlbum-Creation Date-429', - 'zGenAlbum-Creation Date-430', - 'SWYConverszGenAlbum-Creation Date-431', - 'zGenAlbum-Cloud Creation Date-432', - 'SWYConverszGenAlbum-Cloud Creation Date-433', - 'zGenAlbum-Start Date-434', - 'SWYConverszGenAlbum-Start Date-435', - 'zGenAlbum-End Date-436', - 'SWYConverszGenAlbum-End Date-437', - 'zGenAlbum-Cloud Subscription Date-438', - 'SWYConverszGenAlbum-Cloud Subscription Date-439', - 'ParentzGenAlbum-Pending Items Count-440', - 'zGenAlbum-Pending Items Count-441', - 'SWYConverszGenAlbum-Pending Items Count-442', - 'ParentzGenAlbum-Pending Items Type-443', - 'zGenAlbum-Pending Items Type-444', - 'SWYConverszGenAlbum-Pending Items Type-445', - 'zGenAlbum- Cached Photos Count-446', - 'SWYConverszGenAlbum- Cached Photos Count-447', - 'zGenAlbum- Cached Videos Count-448', - 'SWYConverszGenAlbum- Cached Videos Count-449', - 'zGenAlbum- Cached Count-450', - 'SWYConverszGenAlbum- Cached Count-451', - 'ParentzGenAlbum-Sync Event Order Key-452', - 'zGenAlbum-Sync Event Order Key-453', - 'SWYConverszGenAlbum-Sync Event Order Key-454', - 'zGenAlbum-Has Unseen Content-455', - 'SWYConverszGenAlbum-Has Unseen Content-456', - 'zGenAlbum-Unseen Asset Count-457', - 'SWYConverszGenAlbum-Unseen Asset Count-458', - 'zGenAlbum-is Owned-459', - 'SWYConverszGenAlbum-is Owned-460', - 'zGenAlbum-Cloud Relationship State-461', - 'SWYConverszGenAlbum-Cloud Relationship State-462', - 'zGenAlbum-Cloud Relationship State Local-463', - 'SWYConverszGenAlbum-Cloud Relationship State Local-464', - 'zGenAlbum-Cloud Owner Mail Key-465', - 'SWYConverszGenAlbum-Cloud Owner Mail Key-466', - 'zGenAlbum-Cloud Owner Frist Name-467', - 'SWYConverszGenAlbum-Cloud Owner Frist Name-468', - 'zGenAlbum-Cloud Owner Last Name-469', - 'SWYConverszGenAlbum-Cloud Owner Last Name-470', - 'zGenAlbum-Cloud Owner Full Name-471', - 'SWYConverszGenAlbum-Cloud Owner Full Name-472', - 'zGenAlbum-Cloud Person ID-473', - 'SWYConverszGenAlbum-Cloud Person ID-474', - 'zAsset-Cloud Owner Hashed Person ID-475', - 'zGenAlbum-Cloud Owner Hashed Person ID-476', - 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-477', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-478', - 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-479', - 'zGenAlbum-Cloud Multi-Contributors Enabled-480', - 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-481', - 'zGenAlbum-Cloud Album Sub Type-482', - 'SWYConverszGenAlbum-Cloud Album Sub Type-483', - 'zGenAlbum-Cloud Contribution Date-484', - 'SWYConverszGenAlbum-Cloud Contribution Date-485', - 'zGenAlbum-Cloud Last Interesting Change Date-486', - 'SWYConverszGenAlbum-Cloud Last Interesting Change Date-487', - 'zGenAlbum-Cloud Notification Enabled-488', - 'SWYConverszGenAlbum-Cloud Notification Enabled-489', - 'ParentzGenAlbum-Pinned-490', - 'zGenAlbum-Pinned-491', - 'SWYConverszGenAlbum-Pinned-492', - 'ParentzGenAlbum-Custom Sort Key-493', - 'zGenAlbum-Custom Sort Key-494', - 'SWYConverszGenAlbum-Custom Sort Key-495', - 'ParentzGenAlbum-Custom Sort Ascending-496', - 'zGenAlbum-Custom Sort Ascending-497', - 'SWYConverszGenAlbum-Custom Sort Ascending-498', - 'ParentzGenAlbum-Is Prototype-499', - 'zGenAlbum-Is Prototype-500', - 'SWYConverszGenAlbum-Is Prototype-501', - 'ParentzGenAlbum-Project Document Type-502', - 'zGenAlbum-Project Document Type-503', - 'SWYConverszGenAlbum-Project Document Type-504', - 'ParentzGenAlbum-Custom Query Type-505', - 'zGenAlbum-Custom Query Type-506', - 'SWYConverszGenAlbum-Custom Query Type-507', - 'ParentzGenAlbum-Trashed State-508', - 'ParentzGenAlbum-Trash Date-509', - 'zGenAlbum-Trashed State-510', - 'zGenAlbum-Trash Date-511', - 'SWYConverszGenAlbum-Trashed State-512', - 'SWYConverszGenAlbum-Trash Date-513', - 'ParentzGenAlbum-Cloud Delete State-514', - 'zGenAlbum-Cloud Delete State-515', - 'SWYConverszGenAlbum-Cloud Delete State-516', - 'zGenAlbum-Cloud Owner Whitelisted-517', - 'SWYConverszGenAlbum-Cloud Owner Whitelisted-518', - 'zGenAlbum-Cloud Local Public URL Enabled-519', - 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-520', - 'zGenAlbum-Cloud Public URL Enabled-521', - 'zGenAlbum-Public URL-522', - 'SWYConverszGenAlbum-Cloud Public URL Enabled-523', - 'SWYConverszGenAlbum-Public URL-524', - 'zGenAlbum-Key Asset Face Thumb Index-525', - 'SWYConverszGenAlbum-Key Asset Face Thumb Index-526', - 'zGenAlbum-Project Text Extension ID-527', - 'SWYConverszGenAlbum-Project Text Extension ID-528', - 'zGenAlbum-User Query Data-529', - 'SWYConverszGenAlbum-User Query Data-530', - 'zGenAlbum-Custom Query Parameters-531', - 'SWYConverszGenAlbum-Custom Query Parameters-532', - 'zGenAlbum-Project Data-533', - 'SWYConverszGenAlbum-Project Data-534', - 'zGenAlbum-Search Index Rebuild State-535', - 'SWYConverszGenAlbum-Search Index Rebuild State-536', - 'zGenAlbum-Duplicate Type-537', - 'SWYConverszGenAlbum-Duplicate Type-538', - 'zGenAlbum-Privacy State-539', - 'SWYConverszGenAlbum-Privacy State-540', - 'zCldShareAlbumInvRec-zUUID-4TableStart-541', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-542', - 'zCldShareAlbumInvRec-Invitation State Local-543', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-544', - 'zCldShareAlbumInvRec-Subscription Date-545', - 'zCldShareAlbumInvRec-Invitee First Name-546', - 'zCldShareAlbumInvRec-Invitee Last Name-547', - 'zCldShareAlbumInvRec-Invitee Full Name-548', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-549', - 'zCldShareAlbumInvRec-Invitee Email Key-550', - 'zGenAlbum-Key Asset Face ID-551', - 'zFaceCrop-Face Area Points-552', - 'zAsset-Face Adjustment Version-553', - 'zAddAssetAttr-Face Analysis Version-554', - 'zDetFace-Asset Visible-555', - 'zPerson-Face Count-556', - 'zDetFace-Face Crop-557', - 'zDetFace-Face Algorithm Version-558', - 'zDetFace-Adjustment Version-559', - 'zDetFace-UUID-4TableStart-560', - 'zPerson-Person UUID-4TableStart-561', - 'zDetFace-Confirmed Face Crop Generation State-562', - 'zDetFace-Manual-563', - 'zDetFace-Detection Type-564', - 'zPerson-Detection Type-565', - 'zDetFace-VIP Model Type-566', - 'zDetFace-Name Source-567', - 'zDetFace-Cloud Name Source-568', - 'zPerson-Merge Candidate Confidence-569', - 'zPerson-Person URI-570', - 'zPerson-Display Name-571', - 'zPerson-Full Name-572', - 'zPerson-Cloud Verified Type-573', - 'zFaceCrop-State-574', - 'zFaceCrop-Type-575', - 'zFaceCrop-UUID-4TableStart-576', - 'zPerson-Type-577', - 'zPerson-Verified Type-578', - 'zPerson-Gender Type-579', - 'zDetFace-Gender Type-580', - 'zDetFace-Center X-581', - 'zDetFace-Center Y-582', - 'zPerson-Age Type Estimate-583', - 'zDetFace-Age Type Estimate-584', - 'zDetFace-Ethnicity Type-585', - 'zDetFace-Skin Tone Type-586', - 'zDetFace-Hair Type-587', - 'zDetFace-Hair Color Type-588', - 'zDetFace-Head Gear Type-589', - 'zDetFace-Facial Hair Type-590', - 'zDetFace-Has Face Mask-591', - 'zDetFace-Pose Type-592', - 'zDetFace-Face Expression Type-593', - 'zDetFace-Has Smile-594', - 'zDetFace-Smile Type-595', - 'zDetFace-Lip Makeup Type-596', - 'zDetFace-Eyes State-597', - 'zDetFace-Is Left Eye Closed-598', - 'zDetFace-Is Right Eye Closed-599', - 'zDetFace-Gaze Center X-600', - 'zDetFace-Gaze Center Y-601', - 'zDetFace-Face Gaze Type-602', - 'zDetFace-Eye Glasses Type-603', - 'zDetFace-Eye Makeup Type-604', - 'zDetFace-Cluster Squence Number Key-605', - 'zDetFace-Grouping ID-606', - 'zDetFace-Master ID-607', - 'zDetFace-Quality-608', - 'zDetFace-Quality Measure-609', - 'zDetFace-Source Height-610', - 'zDetFace-Source Width-611', - 'zDetFace-Hidden-Asset Hidden-612', - 'zDetFace-In Trash-Recently Deleted-613', - 'zDetFace-Cloud Local State-614', - 'zDetFace-Training Type-615', - 'zDetFace.Pose Yaw-616', - 'zDetFace-Body Center X-617', - 'zDetFace-Body Center Y-618', - 'zDetFace-Body Height-619', - 'zDetFace-Body Width-620', - 'zDetFace-Roll-621', - 'zDetFace-Size-622', - 'zDetFace-Cluster Squence Number-623', - 'zDetFace-Blur Score-624', - 'zDetFacePrint-Face Print Version-625', - 'zMedAnlyAstAttr-Face Count-626', - 'zDetFaceGroup-UUID-4TableStart-627', - 'zDetFaceGroup-Person Builder State-628', - 'zDetFaceGroup-UnNamed Face Count-629', - 'zPerson-In Person Naming Model-630', - 'zPerson-Key Face Pick Source Key-631', - 'zPerson-Manual Order Key-632', - 'zPerson-Question Type-633', - 'zPerson-Suggested For Client Type-634', - 'zPerson-Merge Target Person-635', - 'zPerson-Cloud Local State-636', - 'zFaceCrop-Cloud Local State-637', - 'zFaceCrop-Cloud Type-638', - 'zPerson-Cloud Delete State-639', - 'zFaceCrop-Cloud Delete State-640', - 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-641', - 'zAsset-Highlight Visibility Score-642', - 'zMemory-UUID-4TableStart-643', - 'zMemory-AssetListPredicte-644', - 'zMemory-Score-645', - 'zMemory-SubTitle-646', - 'zMemory-Title-647', - 'zMemory-Category-648', - 'zMemory-SubCategory-649', - 'zMemory-Creation Date-650', - 'zMemory-Last Enrichment Date-651', - 'zMemory-User Action Options-652', - 'zMemory-Favorite Memory-653', - 'zMemory-View Count-654', - 'zMemory-Play Count-655', - 'zMemory-Rejected-656', - 'zMemory-Share Count-657', - 'zMemory-Sharing Composition-658', - 'zMemory-Last Movie Play Date-659', - 'zMemory-Last Viewed Date-660', - 'zMemory-Pending Play Count Memory-661', - 'zMemory-Pending Share Count Memory-662', - 'zMemory-Pending View Count Memory-663', - 'zMemory-Pending State-664', - 'zMemory-Featured State-665', - 'zMemory-Photos Graph Version-666', - 'zMemory-Graph Memory Identifier-667', - 'zMemory-Notification State-668', - 'zMemory-Cloud Local State-669', - 'zMemory-Cloud Delete State-670', - 'zMemory-Story Color Grade Kind-671', - 'zMemory-Story Serialized Title Category-672', - 'zMemory-Syndicated Content State-673', - 'zMemory-Search Index Rebuild State-674', - 'zMemory-Black Listed Feature-675', - 'zMoment-UUID-4TableStart-676', - 'zMoment-Aggregation Score-677', - 'zMoment-Start Date-678', - 'zMoment-Representative Date-679', - 'zMoment-Timezone Offset-680', - 'zMoment-Modification Date-681', - 'zMoment-End Date-682', - 'zMoment-SubTitle-683', - 'zMoment-Title-684', - 'zMoment-Originator State-685', - 'zMoment-Sharing Composition-686', - 'zMoment-Cached Count Shared-687', - 'zMoment-Processed Location-688', - 'zMoment-Approx Latitude-689', - 'zMoment-Approx Longitude-690', - 'zMoment-GPS Horizontal Accuracy-691', - 'zMoment-Cache Count-692', - 'zMoment-Cached Photos Count-693', - 'zMoment-Cached Videos Count-694', - 'zMoment-Trashed State-695', - 'SBKAzSugg-UUID-4TableStart-696', - 'SBKAzSugg-Suggestion Context-697', - 'SBKAzSugg-Sharing Composition-698', - 'SBKAzSugg-Start Date-699', - 'SBKAzSugg-State-700', - 'SBKAzSugg-Featured State-701', - 'SBKAzSugg-Notification State-702', - 'SBKAzSugg-Creation Date-703', - 'SBKAzSugg-End Date-704', - 'SBKAzSugg-Activation Date-705', - 'SBKAzSugg-Expunge Date-706', - 'SBKAzSugg-Relevant Until Date-707', - 'SBKAzSugg-Title-708', - 'SBKAzSugg-Sub Title-709', - 'SBKAzSugg-Cached Count-710', - 'SBKAzSugg-Cahed Photos Count-711', - 'SBKAzSugg-Cached Videos Count-712', - 'SBKAzSugg-Type-713', - 'SBKAzSugg-Sub Type-714', - 'SBKAzSugg-Action Data-715', - 'SBKAzSugg-Version-716', - 'SBKAzSugg-Cloud Local State-717', - 'SBKAzSugg-Cloud Delete State-718', - 'SBRAzSugg-UUID-4TableStart-719', - 'SBRAzSugg-Suggestion Context-720', - 'SBRAzSugg-Sharing Composition-721', - 'SBRAzSugg-Start Date-722', - 'SBRAzSugg-State-723', - 'SBRAzSugg-Featured State-724', - 'SBRAzSugg-Notification State-725', - 'SBRAzSugg-Creation Date-726', - 'SBRAzSugg-End Date-727', - 'SBRAzSugg-Activation Date-728', - 'SBRAzSugg-Expunge Date-729', - 'SBRAzSugg-Relevant Until Date-730', - 'SBRAzSugg-Title-731', - 'SBRAzSugg-Sub Title-732', - 'SBRAzSugg-Cached Count-733', - 'SBRAzSugg-Cahed Photos Count-734', - 'SBRAzSugg-Cached Videos Count-735', - 'SBRAzSugg-Type-736', - 'SBRAzSugg-Sub Type-737', - 'SBRAzSugg-Action Data-738', - 'SBRAzSugg-Version-739', - 'SBRAzSugg-Cloud Local State-740', - 'SBRAzSugg-Cloud Delete State-741', - 'zMedAnlyAstAttr-Media Analysis Version-742', - 'zMedAnlyAstAttr-Audio Classification-743', - 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-744', - 'zMedAnlyAstAttr-Best Video Range Start Time Scale-745', - 'zMedAnlyAstAttr-Best Video Range Duration Value-746', - 'zMedAnlyAstAttr-Best Video Range Start Value-747', - 'zMedAnlyAstAttr-Packed Best Playback Rect-748', - 'zMedAnlyAstAttr-Activity Score-749', - 'zMedAnlyAstAttr-Video Score-750', - 'zMedAnlyAstAttr-Audio Score-751', - 'zMedAnlyAstAttr-Wallpaper Score-752', - 'zMedAnlyAstAttr-AutoPlay Suggestion Score-753', - 'zMedAnlyAstAttr-Blurriness Score-754', - 'zMedAnlyAstAttr-Exposure Score-755', - 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-756', - 'zMedAnlyAstAttr-Probable Rotation Direction-757', - 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-758', - 'zAssetAnalyState-Asset UUID-4TableStart-759', - 'zAssetAnalyState-Analyisis State-760', - 'zAssetAnalyState-Worker Flags-761', - 'zAssetAnalyState-Worker Type-762', - 'zAssetAnalyState-Ignore Until Date-763', - 'zAssetAnalyState-Last Ignored Date-764', - 'zAssetAnalyState-Sort Token-765', - 'zMedAnlyAstAttr-Character Recognition Attr-766', - 'zCharRecogAttr-Algorithm Version-767', - 'zCharRecogAttr-Adjustment Version-768', - 'zMedAnlyAstAttr-Visual Search Attributes-769', - 'zVisualSearchAttr-Algorithm Version-770', - 'zVisualSearchAttr-Adjustment Version-771', - 'zAsset-Overall Aesthetic Score-772', - 'zCompAssetAttr-Behavioral Score-773', - 'zCompAssetAttr-Failure Score zCompAssetAttr-774', - 'zCompAssetAttr-Harmonious Color Score-775', - 'zCompAssetAttr-Immersiveness Score-776', - 'zCompAssetAttr-Interaction Score-777', - 'zCompAssetAttr-Intersting Subject Score-778', - 'zCompAssetAttr-Intrusive Object Presence Score-779', - 'zCompAssetAttr-Lively Color Score-780', - 'zCompAssetAttr-Low Light-781', - 'zCompAssetAttr-Noise Score-782', - 'zCompAssetAttr-Pleasant Camera Tilt Score-783', - 'zCompAssetAttr-Pleasant Composition Score-784', - 'zCompAssetAttr-Pleasant Lighting Score-785', - 'zCompAssetAttr-Pleasant Pattern Score-786', - 'zCompAssetAttr-Pleasant Perspective Score-787', - 'zCompAssetAttr-Pleasant Post Processing Score-788', - 'zCompAssetAttr-Pleasant Reflection Score-789', - 'zCompAssetAttrPleasant Symmetry Score-790', - 'zCompAssetAttr-Sharply Focused Subject Score-791', - 'zCompAssetAttr-Tastfully Blurred Score-792', - 'zCompAssetAttr-Well Chosen Subject Score-793', - 'zCompAssetAttr-Well Framed Subject Score-794', - 'zCompAssetAttr-Well Timeed Shot Score-795', - 'zCldRes-Asset UUID-4TableStart-796', - 'zCldRes-Cloud Local State-797', - 'zCldRes-File Size-798', - 'zCldRes-Height-799', - 'zCldRes-Is Available-800', - 'zCldRes-Is Locally Available-801', - 'zCldRes-Prefetch Count-802', - 'zCldRes-Source Type-803', - 'zCldRes-Type-804', - 'zCldRes-Width-805', - 'zCldRes-Date Created-806', - 'zCldRes-Last OnDemand Download Date-807', - 'zCldRes-Last Prefetch Date-808', - 'zCldRes-Prunedat-809', - 'zCldRes-File Path-810', - 'zCldRes-Fingerprint-811', - 'zCldRes-Item ID-812', - 'zCldRes-UniID-813', - 'zUserFeedback-UUID-4TableStart-814', - 'zUserFeedback-Feature-815', - 'zUserFeedback-Type-816', - 'zUserFeedback-Last Modified Date-817', - 'zUserFeedback-Context-818', - 'zUserFeedback-Cloud Local State-819', - 'zUserFeedback-Cloud Delete State-820', - 'zAddAssetAttr-zPK-821', - 'zAddAssetAttr-zENT-822', - 'ZAddAssetAttr-zOPT-823', - 'zAddAssetAttr-zAsset= zAsset_zPK-824', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-825', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-826', - 'zAddAssetAttr-Master Fingerprint-827', - 'zAddAssetAttr-Public Global UUID-828', - 'zAddAssetAttr-Deferred Photo Identifier-829', - 'zAddAssetAttr-Original Assets UUID-830', - 'zAddAssetAttr-Import Session ID-831', - 'zAddAssetAttr-Originating Asset Identifier-832', - 'zAddAssetAttr.Adjusted Fingerprint-833', - 'zAlbumList-zPK= Album List Key-834', - 'zAlbumList-zENT-835', - 'zAlbumList-zOPT-836', - 'zAlbumList-ID Key-837', - 'zAlbumList-UUID-838', - 'zAsset-zPK-839', - 'zAsset-zENT-840', - 'zAsset-zOPT-841', - 'zAsset-Master= zCldMast-zPK-842', - 'zAsset-Extended Attributes= zExtAttr-zPK-843', - 'zAsset-Import Session Key-844', - 'zAsset-Trashed by Participant= zSharePartic_zPK-845', - 'zAsset-Photo Analysis Attributes Key-846', - 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-847', - 'zAsset-FOK-Cloud Feed Asset Entry Key-848', - 'zAsset-Moment Share Key= zShare-zPK-849', - 'zAsset-zMoment Key= zMoment-zPK-850', - 'zAsset-Computed Attributes Asset Key-851', - 'zAsset-Highlight Being Assets-HBA Key-852', - 'zAsset-Highlight Being Extended Assets-HBEA Key-853', - 'zAsset-Highlight Being Key Asset Private-HBKAP Key-854', - 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-855', - 'zAsset-Highligh Being Summary Assets-HBSA Key-856', - 'zAsset-Day Group Highlight Being Assets-DGHBA Key-857', - 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-858', - 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-859', - 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-860', - 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-861', - 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-862', - 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-863', - 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-864', - 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-865', - 'zAsset-Promotion Score-866', - 'zAsset-Media Analysis Attributes Key-867', - 'zAsset-Media Group UUID-868', - 'zAsset-UUID = store.cloudphotodb-869', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-870', - 'zAsset.Cloud Collection GUID-871', - 'zAsset-Avalanche UUID-872', - 'zAssetAnalyState-zPK-873', - 'zAssetAnalyState-zEnt-874', - 'zAssetAnalyState-zOpt-875', - 'zAssetAnalyState-Asset= zAsset-zPK-876', - 'zAssetAnalyState-Asset UUID-877', - 'zAsstContrib-zPK-878', - 'zAsstContrib-zEnt-879', - 'zAsstContrib-zOpt-880', - 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-881', - 'zAsstContrib-Participant= zSharePartic-zPK-882', - 'zAssetDes-zPK-883', - 'zAssetDes-zENT-884', - 'zAssetDes-zOPT-885', - 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-886', - 'zCharRecogAttr-zPK-887', - 'zCharRecogAttr-zENT-888', - 'zCharRecogAttr-zOPT-889', - 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-890', - 'zCldFeedEnt-zPK= zCldShared keys-891', - 'zCldFeedEnt-zENT-892', - 'zCldFeedEnt-zOPT-893', - 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-894', - 'zCldFeedEnt-Entry Invitation Record GUID-895', - 'zCldFeedEnt-Entry Cloud Asset GUID-896', - 'zCldMast-zPK= zAsset-Master-897', - 'zCldMast-zENT-898', - 'zCldMast-zOPT-899', - 'zCldMast-Moment Share Key= zShare-zPK-900', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-901', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-902', - 'zCldMast-Originating Asset ID-903', - 'zCldMast-Import Session ID- AirDrop-StillTesting-904', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-905', - 'CMzCldMastMedData-zENT-906', - 'CMzCldMastMedData-zOPT-907', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-908', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-909', - 'AAAzCldMastMedData-zENT-910', - 'AAAzCldMastMedData-zOPT-911', - 'AAAzCldMastMedData-CldMast key-912', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-913', - 'zCldRes-zPK-914', - 'zCldRes-zENT-915', - 'zCldRes-zOPT-916', - 'zCldRes-Asset= zAsset-zPK-917', - 'zCldRes-Cloud Master= zCldMast-zPK-918', - 'zCldRes-Asset UUID-919', - 'zCldShareAlbumInvRec-zPK-920', - 'zCldShareAlbumInvRec-zEnt-921', - 'zCldShareAlbumInvRec-zOpt-922', - 'zCldShareAlbumInvRec-Album Key-923', - 'zCldShareAlbumInvRec-FOK Album Key-924', - 'zCldShareAlbumInvRec-Album GUID-925', - 'zCldShareAlbumInvRec-zUUID-926', - 'zCldShareAlbumInvRec-Cloud GUID-927', - 'zCldSharedComment-zPK-928', - 'zCldSharedComment-zENT-929', - 'zCldSharedComment-zOPT-930', - 'zCldSharedComment-Commented Asset Key= zAsset-zPK-931', - 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-932', - 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-933', - 'zCldSharedComment-Liked Asset Key= zAsset-zPK-934', - 'zCldSharedComment-CldFeedLikeCommentEntry Key-935', - 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-936', - 'zCldSharedComment-Cloud GUID-937', - 'zCompAssetAttr-zPK-938', - 'zCompAssetAttr-zEnt-939', - 'zCompAssetAttr-zOpt-940', - 'zCompAssetAttr-Asset Key-941', - 'zDetFace-zPK-942', - 'zDetFace-zEnt-943', - 'zDetFace.zOpt-944', - 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-945', - 'zDetFace-Person= zPerson-zPK-946', - 'zDetFace-Person Being Key Face-947', - 'zDetFace-Face Print-948', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-949', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-950', - 'zDetFace-UUID-951', - 'zDetFaceGroup-zPK-952', - 'zDetFaceGroup-zENT-953', - 'zDetFaceGroup-zOPT-954', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-955', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-956', - 'zDetFaceGroup-UUID-957', - 'zDetFacePrint-zPK-958', - 'zDetFacePrint-zEnt-959', - 'zDetFacePrint-zOpt-960', - 'zDetFacePrint-Face Key-961', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-962', - 'zExtAttr-zENT-963', - 'zExtAttr-zOPT-964', - 'zExtAttr-Asset Key-965', - 'zFaceCrop-zPK-966', - 'zFaceCrop-zEnt-967', - 'zFaceCrop-zOpt-968', - 'zFaceCrop-Asset Key-969', - 'zFaceCrop-Invalid Merge Canidate Person UUID-970', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-971', - 'zFaceCrop-Face Key-972', - 'zFaceCrop-UUID-973', - 'zGenAlbum-zPK=26AlbumLists= 26Albums-974', - 'zGenAlbum-zENT-975', - 'zGenAlbum-zOpt-976', - 'zGenAlbum-Key Asset-Key zAsset-zPK-977', - 'zGenAlbum-Secondary Key Asset-978', - 'zGenAlbum-Tertiary Key Asset-979', - 'zGenAlbum-Custom Key Asset-980', - 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-981', - 'zGenAlbum-FOK Parent Folder-982', - 'zGenAlbum-zSyndicate-983', - 'zGenAlbum-UUID-984', - 'SWYConverszGenAlbum-UUID-985', - 'zGenAlbum-Cloud_GUID = store.cloudphotodb-986', - 'SWYConverszGenAlbum-Cloud GUID-987', - 'zGenAlbum-Project Render UUID-988', - 'SWYConverszGenAlbum-Project Render UUID-989', - 'zIntResou-zPK-990', - 'zIntResou-zENT-991', - 'zIntResou-zOPT-992', - 'zIntResou-Asset= zAsset_zPK-993', - 'zIntResou-Fingerprint-994', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-995', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-996', - 'zMedAnlyAstAttr-zEnt-997', - 'zMedAnlyAstAttr-zOpt-998', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-999', - 'zMemory-zPK-1000', - 'zMemory-zENT-1001', - 'zMemory-zOPT-1002', - 'zMemory-Key Asset= zAsset-zPK-1003', - 'zMemory-UUID-1004', - 'zMoment-zPK-1005', - 'zMoment-zENT-1006', - 'zMoment-zOPT-1007', - 'zMoment-Highlight Key-1008', - 'zMoment-UUID-1009', - 'zPerson-zPK=zDetFace-Person-1010', - 'zPerson-zEnt-1011', - 'zPerson-zOpt-1012', - 'zPerson-Share Participant= zSharePartic-zPK-1013', - 'zPerson-KeyFace=zDetFace-zPK-1014', - 'zPerson-Assoc Face Group Key-1015', - 'zPerson-Person UUID-1016', - 'zPhotoAnalysisAssetAttr-zPK-1017', - 'zPhotoAnalysisAssetAttr-zEnt-1018', - 'zPhotoAnalysisAssetAttr-zOpt-1019', - 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1020', - 'zSceneP-zPK-1021', - 'zSceneP-zENT-1022', - 'zSceneP-zOPT-1023', - 'zShare-zPK-1024', - 'zShare-zENT-1025', - 'zShare-zOPT-1026', - 'zShare-UUID-1027', - 'SPLzShare-UUID-1028', - 'zShare-Scope ID = store.cloudphotodb-1029', - 'zSharePartic-zPK-1030', - 'zSharePartic-zENT-1031', - 'zSharePartic-zOPT-1032', - 'zSharePartic-Share Key= zShare-zPK-1033', - 'zSharePartic-Person= zPerson-zPK-1034', - 'zSharePartic-UUID-1035', - 'SBKAzSugg-zPK-1036', - 'SBKAzSugg-zENT-1037', - 'SBKAzSugg-zOPT-1038', - 'SBKAzSugg-UUID-1039', - 'SBRAzSugg-zPK-1040', - 'SBRAzSugg-zENT-1041', - 'SBRAzSugg-zOPT-1042', - 'SBRAzSugg-UUID-1043', - 'z3SuggBRA-3RepAssets1-1044', - 'z3SuggBRA-58SuggBeingRepAssets-1045', - 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK-1046', - 'z3SuggBKA-3KeyAssets= zAsset-zPK-1047', - 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1048', - 'zUnmAdj-zOPT-1049', - 'zUnmAdj-zENT-1050', - 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1051', - 'zUnmAdj-UUID-1052', - 'zUnmAdj-Other Adjustments Fingerprint-1053', - 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1054', - 'zUserFeedback-zPK-1055', - 'zUserFeedback-zENT-1056', - 'zUserFeedback-zOPT-1057', - 'zUserFeedback-Person= zPerson-zPK-1058', - 'zUserFeedback-Memory= zMemory-zPK-1059', - 'zUserFeedback-UUID-1060', - 'zVisualSearchAttr-zPK-1061', - 'zVisualSearchAttr-zENT-1062', - 'zVisualSearchAttr-zOPT-1063', - 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1064', - 'z27AlbumList-27Albums= zGenAlbum-zPK-1065', - 'z27AlbumList-Album List Key-1066', - 'z27AlbumList-FOK27Albums Key-1067', - 'z28Assets-28Albums= zGenAlbum-zPK-1068', - 'z28Assets-3Asset Key= zAsset-zPK in the Album-1069', - 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1070', - 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1071', - 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1072', - 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK-1073', - 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1074', - 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK-1075', - 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1076', - 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1077', - 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1078', - 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK-1079', - 'z3MemoryBCAs-44Memories Being Custom User Assets-1080', - 'z3MemoryBCAs-3Custom User Assets-1081', - 'z3MemoryBCAs-FOK-3Custom User Assets-1082') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph96.1-iOS16_Ref_for_Asset_Analysis-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph96.1-iOS16_Ref_for_Asset_Analysis-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + ''' - else: - logfunc('No data available for iOS 16 PhotoData-Photos.sqlite') + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], + row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], + row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], + row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], + row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], + row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], + row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], + row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], + row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], + row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], + row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], + row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], + row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], + row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], + row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], + row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], + row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], + row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], + row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], + row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], + row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], + row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], + row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], + row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], + row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], + row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], + row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], + row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], + row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], + row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], + row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], + row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], + row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], + row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], + row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], + row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], + row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], + row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], + row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], + row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], + row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], + row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], + row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], + row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], + row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], + row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], + row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], + row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], + row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], + row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], + row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], + row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], + row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], + row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], + row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], + row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], + row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], + row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], + row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], + row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], + row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], + row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], + row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], + row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], + row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], + row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], + row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], + row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], + row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], + row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], + row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], + row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], + row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], + row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], + row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], + row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], + row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], + row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], + row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], + row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], + row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], + row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], + row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], + row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], + row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], + row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], + row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], + row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], + row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], + row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], + row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], + row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], + row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], + row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], + row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], + row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], + row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], + row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], + row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], + row[1080], row[1081], row[1082])) - db.close() - return + data_headers = (('zAsset-Added Date-0', 'datetime'), + 'zAsset- SortToken -CameraRoll-1', + 'zAsset Complete-2', + 'zAsset-zPK-4QueryStart-3', + 'zAddAssetAttr-zPK-4QueryStart-4', + 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', + 'zAddAssetAttr-Master Fingerprint-4TableStart-6', + 'zIntResou-Fingerprint-4TableStart-7', + 'zAsset-Bundle Scope-8', + 'zAsset-Syndication State-9', + 'zAsset-Cloud is My Asset-10', + 'zAsset-Cloud is deletable-Asset-11', + 'zAsset-Cloud_Local_State-12', + 'zAsset-Visibility State-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zExtAttr-Lens Model-16', + 'zExtAttr-Flash Fired-17', + 'zExtAttr-Focal Lenght-18', + 'zExtAttr-Focal Lenth in 35MM-19', + 'zExtAttr-Digital Zoom Ratio-20', + 'zAsset-Derived Camera Capture Device-21', + 'zAddAssetAttr-Camera Captured Device-22', + 'zAddAssetAttr-Imported by-23', + 'zCldMast-Imported By-24', + 'zAddAssetAttr.Imported by Bundle Identifier-25', + 'zAddAssetAttr-Imported By Display Name-26', + 'zCldMast-Imported by Bundle ID-27', + 'zCldMast-Imported by Display Name-28', + 'zAsset-Saved Asset Type-29', + 'zAsset-Directory-Path-30', + 'zAsset-Filename-31', + 'zAddAssetAttr- Original Filename-32', + 'zCldMast- Original Filename-33', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-34', + 'zAsset-Active Library Scope Participation State -4QueryStart-35', + 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36', + 'zShare-Cloud Photo Count-SPL -4QueryStart-37', + 'zShare-Cloud Video Count-SPL -4QueryStart-38', + ('zAddAssetAttr-Date Created Source-39', 'datetime'), + ('zAsset-Date Created-40', 'datetime'), + ('zCldMast-Creation Date-41', 'datetime'), + ('zIntResou-CldMst Date Created-42', 'datetime'), + 'zAddAssetAttr-Time Zone Name-43', + 'zAddAssetAttr-Time Zone Offset-44', + 'zAddAssetAttr-Inferred Time Zone Offset-45', + 'zAddAssetAttr-EXIF-String-46', + ('zAsset-Modification Date-47', 'datetime'), + ('zAsset-Last Shared Date-48', 'datetime'), + 'zCldMast-Cloud Local State-49', + ('zCldMast-Import Date-50', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-51', 'datetime'), + 'zAddAssetAttr-Import Session ID-4QueryStart-52', + ('zAddAssetAttr-Alt Import Image Date-53', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-54', + ('zAsset-Cloud Batch Publish Date-55', 'datetime'), + ('zAsset-Cloud Server Publish Date-56', 'datetime'), + 'zAsset-Cloud Download Requests-57', + 'zAsset-Cloud Batch ID-58', + 'zAddAssetAttr-Upload Attempts-59', + 'zAsset-Latitude-60', + 'zExtAttr-Latitude-61', + 'zAsset-Longitude-62', + 'zExtAttr-Longitude-63', + 'zAddAssetAttr-GPS Horizontal Accuracy-64', + 'zAddAssetAttr-Location Hash-65', + 'zAddAssetAttr-Shifted Location Valid-66', + 'zAddAssetAttr-Shifted Location Data-67', + 'zAddAssetAttr-Reverse Location Is Valid-68', + 'zAddAssetAttr-Reverse Location Data-69', + 'ParentzGenAlbum-UUID-4QueryStart-70', + 'zGenAlbum-UUID-4QueryStart-71', + 'SWYConverszGenAlbum-UUID-4QueryStart-72', + 'ParentzGenAlbum-Cloud GUID-4QueryStart-73', + 'zGenAlbum-Cloud GUID-4QueryStart-74', + 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-75', + 'zCldShareAlbumInvRec-Album GUID-4QueryStart-76', + 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-77', + 'zGenAlbum-Project Render UUID-4QueryStart-78', + 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-79', + 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-80', + 'zGenAlbum-Cloud_Local_State-4QueryStart-81', + 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-82', + ('ParentzGenAlbum- Creation Date- 4QueryStart-83', 'datetime'), + ('zGenAlbum- Creation Date- 4QueryStart-84', 'datetime'), + ('SWYConverszGenAlbum- Creation Date- 4QueryStart-85', 'datetime'), + ('zGenAlbum- Cloud Creation Date- 4QueryStart-86', 'datetime'), + ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-87', 'datetime'), + ('zGenAlbum- Start Date- 4QueryStart-88', 'datetime'), + ('SWYConverszGenAlbum- Start Date- 4QueryStart-89', 'datetime'), + ('zGenAlbum- End Date- 4QueryStart-90', 'datetime'), + ('SWYConverszGenAlbum- End Date- 4QueryStart-91', 'datetime'), + ('zGenAlbum-Cloud Subscription Date- 4QueryStart-92', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-93', 'datetime'), + 'ParentzGenAlbum- Title- 4QueryStart-94', + 'zGenAlbum- Title-User&System Applied- 4QueryStart-95', + 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-96', + 'zGenAlbum-Import Session ID-SWY- 4QueryStart-97', + 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-98', + 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-99', + 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-100', + 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-101', + 'SWYConverszGenAlbum- Syndicate-4QueryStart-102', + 'zGenAlbum-zENT- Entity- 4QueryStart-103', + 'ParentzGenAlbum- Kind- 4QueryStart-104', + 'zGenAlbum-Album Kind- 4QueryStart-105', + 'SWYConverszGenAlbum-Album Kind- 4QueryStart-106', + 'AAAzCldMastMedData-zOPT-107', + 'zAddAssetAttr-Media Metadata Type-108', + 'AAAzCldMastMedData-Data-109', + 'CldMasterzCldMastMedData-zOPT-110', + 'zCldMast-Media Metadata Type-111', + 'CMzCldMastMedData-Data-112', + 'zAsset-Search Index Rebuild State-113', + 'zAddAssetAttr-Syndication History-114', + 'zMedAnlyAstAttr-Syndication Processing Version-115', + 'zMedAnlyAstAttr-Syndication Processing Value-116', + 'zAsset-Orientation-117', + 'zAddAssetAttr-Original Orientation-118', + 'zAsset-Kind-119', + 'zAsset-Kind-Sub-Type-120', + 'zAddAssetAttr-Cloud Kind Sub Type-121', + 'zAsset-Playback Style-122', + 'zAsset-Playback Variation-123', + 'zAsset-Video Duration-124', + 'zExtAttr-Duration-125', + 'zAsset-Video CP Duration-126', + 'zAddAssetAttr-Video CP Duration Time Scale-127', + 'zAsset-Video CP Visibility State-128', + 'zAddAssetAttr-Video CP Display Value-129', + 'zAddAssetAttr-Video CP Display Time Scale-130', + 'zIntResou-Datastore Class ID-131', + 'zAsset-Cloud Placeholder Kind-132', + 'zIntResou-Local Availability-133', + 'zIntResou-Local Availability Target-134', + 'zIntResou-Cloud Local State-135', + 'zIntResou-Remote Availability-136', + 'zIntResou-Remote Availability Target-137', + 'zIntResou-Transient Cloud Master-138', + 'zIntResou-Side Car Index-139', + 'zIntResou- File ID-140', + 'zIntResou-Version-141', + 'zAddAssetAttr- Original-File-Size-142', + 'zIntResou-Resource Type-143', + 'zIntResou-Datastore Sub-Type-144', + 'zIntResou-Cloud Source Type-145', + 'zIntResou-Data Length-146', + 'zIntResou-Recipe ID-147', + ('zIntResou-Cloud Last Prefetch Date-148', 'datetime'), + 'zIntResou-Cloud Prefetch Count-149', + ('zIntResou- Cloud-Last-OnDemand Download-Date-150', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-151', + 'zIntResou-Compact-UTI-152', + 'zAsset-Uniform Type ID-153', + 'zAsset-Original Color Space-154', + 'zCldMast-Uniform_Type_ID-155', + 'zCldMast-Full Size JPEG Source-156', + 'zAsset-HDR Gain-157', + 'zAsset-zHDR_Type-158', + 'zExtAttr-Codec-159', + 'zIntResou-Codec Four Char Code Name-160', + 'zCldMast-Codec Name-161', + 'zCldMast-Video Frame Rate-162', + 'zCldMast-Placeholder State-163', + 'zAsset-Depth_Type-164', + 'zAsset-Avalanche UUID-4TableStart-165', + 'zAsset-Avalanche_Pick_Type-BurstAsset-166', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-167', + 'zAddAssetAttr-Cloud Recovery State-168', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-169', + 'zAsset-Deferred Processing Needed-170', + 'zAsset-Video Deferred Processing Needed-171', + 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-172', + 'zAddAssetAttr-Deferred Processing Candidate Options-173', + 'zAsset-Has Adjustments-Camera-Effects-Filters-174', + 'zUnmAdj-UUID-4TableStart-175', + 'zAsset-Adjustment Timestamp-176', + 'zUnmAdj-Adjustment Timestamp-177', + 'zAddAssetAttr-Editor Bundle ID-178', + 'zUnmAdj-Editor Localized Name-179', + 'zUnmAdj-Adjustment Format ID-180', + 'zAddAssetAttr-Montage-181', + 'zUnmAdj-Adjustment Render Types-182', + 'zUnmAdj-Adjustment Format Version-183', + 'zUnmAdj-Adjustment Base Image Format-184', + 'zAsset-Favorite-185', + 'zAsset-Hidden-186', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-187', + ('zAsset-Trashed Date-188', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-189', + 'zAsset-Delete-Reason-190', + 'zIntResou-Trash State-191', + ('zIntResou-Trashed Date-192', 'datetime'), + 'zAsset-Cloud Delete State-193', + 'zIntResou-Cloud Delete State-194', + 'zAddAssetAttr-PTP Trashed State-195', + 'zIntResou-PTP Trashed State-196', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-197', + 'zMedAnlyAstAttr-Media Analysis Timestamp-198', + ('zAsset-Analysis State Modification Date-199', 'datetime'), + 'zAddAssetAttr- Pending View Count-200', + 'zAddAssetAttr- View Count-201', + 'zAddAssetAttr- Pending Play Count-202', + 'zAddAssetAttr- Play Count-203', + 'zAddAssetAttr- Pending Share Count-204', + 'zAddAssetAttr- Share Count-205', + 'zAddAssetAttr-Allowed for Analysis-206', + 'zAddAssetAttr-Scene Analysis Version-207', + 'zAddAssetAttr-Scene Analysis is From Preview-208', + 'zAddAssetAttr-Scene Analysis Timestamp-209', + 'zAsset-Duplication Asset Visibility State-210', + 'zAddAssetAttr-Destination Asset Copy State-211', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-212', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-213', + 'zCldMast-Source Master For Duplication Scope ID-214', + 'zAddAssetAttr-Source Asset For Duplication ID-215', + 'zCldMast-Source Master for Duplication ID-216', + 'zAddAssetAttr-Variation Suggestions States-217', + 'zAsset-High Frame Rate State-218', + 'zAsset-Video Key Frame Time Scale-219', + 'zAsset-Video Key Frame Value-220', + 'zExtAttr-ISO-221', + 'zExtAttr-Metering Mode-222', + 'zExtAttr-Sample Rate-223', + 'zExtAttr-Track Format-224', + 'zExtAttr-White Balance-225', + 'zExtAttr-Aperture-226', + 'zExtAttr-BitRate-227', + 'zExtAttr-Exposure Bias-228', + 'zExtAttr-Frames Per Second-229', + 'zExtAttr-Shutter Speed-230', + 'zExtAttr-Slush Scene Bias-231', + 'zExtAttr-Slush Version-232', + 'zExtAttr-Slush Preset-233', + 'zExtAttr-Slush Warm Bias-234', + 'zAsset-Height-235', + 'zAddAssetAttr-Original Height-236', + 'zIntResou-Unoriented Height-237', + 'zAsset-Width-238', + 'zAddAssetAttr-Original Width-239', + 'zIntResou-Unoriented Width-240', + 'zShare-Thumbnail Image Data-241', + 'SPLzShare-Thumbnail Image Data-242', + 'zAsset-Thumbnail Index-243', + 'zAddAssetAttr-Embedded Thumbnail Height-244', + 'zAddAssetAttr-Embedded Thumbnail Length-245', + 'zAddAssetAttr-Embedded Thumbnail Offset-246', + 'zAddAssetAttr-Embedded Thumbnail Width-247', + 'zAsset-Packed Acceptable Crop Rect-248', + 'zAsset-Packed Badge Attributes-249', + 'zAsset-Packed Preferred Crop Rect-250', + 'zAsset-Curation Score-251', + 'zAsset-Camera Processing Adjustment State-252', + 'zAsset-Depth Type-253', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-254', + 'zAddAssetAttr-Orig Resource Choice-255', + 'zAddAssetAttr-Spatial Over Capture Group ID-256', + 'zAddAssetAttr-Place Annotation Data-257', + 'zAddAssetAttr-Distance Identity-258', + 'zAddAssetAttr-Edited IPTC Attributes-259', + 'zAssetDes-Long Description-260', + 'zAddAssetAttr-Asset Description-261', + 'zAddAssetAttr-Title-Comments via Cloud Website-262', + 'zAddAssetAttr-Accessibility Description-263', + 'zAddAssetAttr-Photo Stream Tag ID-264', + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-265', + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-266', + ('zCldFeedEnt-Entry Date-267', 'datetime'), + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-268', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-269', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-270', + 'zCldFeedEnt-Entry Priority Number-271', + 'zCldFeedEnt-Entry Type Number-272', + 'zCldSharedComment-Cloud GUID-4TableStart-273', + ('zCldSharedComment-Date-274', 'datetime'), + ('zCldSharedComment-Comment Client Date-275', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-276', 'datetime'), + 'zCldSharedComment-Type-277', + 'zCldSharedComment-Comment Text-278', + 'zCldSharedComment-Commenter Hashed Person ID-279', + 'zCldSharedComment-Batch Comment-280', + 'zCldSharedComment-Is a Caption-281', + 'zAsset-Cloud Has Comments by Me-282', + 'zCldSharedComment-Is My Comment-283', + 'zCldSharedComment-Is Deletable-284', + 'zAsset-Cloud Has Comments Conversation-285', + 'zAsset-Cloud Has Unseen Comments-286', + 'zCldSharedComment-Liked-287', + 'zAddAssetAttr-Share Type-288', + 'zAsset-Library Scope Share State- StillTesting-289', + 'zAsset-Active Library Scope Participation State-290', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-291', + 'zShare-UUID-CMM-4TableStart-292', + 'SPLzShare-UUID-SPL-4TableStart-293', + 'zShare-zENT-CMM-294', + 'SPLzShare-zENT-SPL-295', + 'zSharePartic-z54SHARE-296', + 'SPLzSharePartic-z54SHARE-297', + 'zShare-Status-CMM-298', + 'SPLzShare-Status-SPL-299', + 'zShare-Scope Type-CMM-300', + 'SPLzShare-Scope Type-SPL-301', + 'zShare-Local Publish State-CMM-302', + 'SPLzShare-Local Publish State-SPL-303', + 'zShare-Public Permission-CMM-304', + 'SPLzShare-Public Permission-SPL-305', + 'zShare-Originating Scope ID-CMM-306', + 'SPLzShare-Originating Scope ID-SPL-307', + 'zShare-Scope ID-CMM-308', + 'SPLzShare-Scope ID-SPL-309', + 'zShare-Title-CMM-310', + 'SPLzShare-Title-SPL-311', + 'zShare-Share URL-CMM-312', + 'SPLzShare-Share URL-SPL-313', + ('zShare-Creation Date-CMM-314', 'datetime'), + ('SPLzShare-Creation Date-SPL-315', 'datetime'), + ('zShare-Start Date-CMM-316', 'datetime'), + ('SPLzShare-Start Date-SPL-317', 'datetime'), + ('zShare-End Date-CMM-318', 'datetime'), + ('SPLzShare-End Date-SPL-319', 'datetime'), + ('zShare-Expiry Date-CMM-320', 'datetime'), + ('SPLzShare-Expiry Date-SPL-321', 'datetime'), + 'zShare-Cloud Item Count-CMM-322', + 'SPLzShare-Cloud Item Count-SPL-323', + 'zShare-Asset Count-CMM-324', + 'SPLzShare-Asset Count-SPL-325', + 'zShare-Cloud Photo Count-CMM-326', + 'SPLzShare-Cloud Photo Count-SPL-327', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-328', + 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-329', + 'zShare-Photos Count-CMM-330', + 'SPLzShare-Photos Count-CMM-SPL-331', + 'zShare-Uploaded Photos Count-CMM-332', + 'SPLzShare-Uploaded Photos Count-SPL-333', + 'zShare-Cloud Video Count-CMM-334', + 'SPLzShare-Cloud Video Count-SPL-335', + 'zShare-Videos Count-CMM-336', + 'SPLzShare-Videos Count-SPL-337', + 'zShare-Uploaded Videos Count-CMM-338', + 'SPLzShare-Uploaded Videos Count-SPL-339', + 'zShare-Force Sync Attempted-CMM-340', + 'SPLzShare-Force Sync Attempted-SPL-341', + 'zShare-Cloud Local State-CMM-342', + 'SPLzShare-Cloud Local State-SPL-343', + 'zShare-Scope Syncing State-CMM-344', + 'SPLzShare-Scope Syncing State-SPL-345', + 'zShare-Auto Share Policy-CMM-346', + 'SPLzShare-Auto Share Policy-SPL-347', + 'zShare-Should Notify On Upload Completion-CMM-348', + 'SPLzShare-Should Notify On Upload Completion-SPL-349', + 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-350', + 'zShare-Trashed State-CMM-351', + 'SPLzShare-Trashed State-SPL-352', + 'zShare-Cloud Delete State-CMM-353', + 'SPLzShare-Cloud Delete State-SPL-354', + ('zShare-Trashed Date-CMM-355', 'datetime'), + ('SPLzShare-Trashed Date-SPL-356', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-CMM-357', 'datetime'), + ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL-358', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-CMM-359', 'datetime'), + ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL-360', 'datetime'), + 'zShare-Exit Source-CMM-361', + 'SPLzShare-Exit Source-SPL-362', + 'zShare-SPL_Exit State-CMM-363', + 'SPLzShare-SPL_Exit State-SPL-364', + 'zShare-Exit Type-CMM-365', + 'SPLzShare-Exit Type-SPL-366', + 'zShare-Should Ignor Budgets-CMM-367', + 'SPLzShare-Should Ignor Budgets-SPL-368', + 'zShare-Preview State-CMM-369', + 'SPLzShare-Preview State-SPL-370', + 'zShare-Preview Data-CMM-371', + 'SPLzShare-Preview Data-SPL-372', + 'zShare-Rules-CMM-373', + 'SPLzShare-Rules-SPL-374', + 'zShare-Thumbnail Image Data-CMM-375', + 'SPLzShare-Thumbnail Image Data-SPL-376', + 'zShare-Participant Cloud Update State-CMM-377', + 'SPLzShare-Participant Cloud Update State-SPL-378', + 'zSharePartic-UUID-4TableStart-379', + 'SPLzSharePartic-UUID-4TableStart-380', + 'zSharePartic-Acceptance Status-381', + 'SPLzSharePartic-Acceptance Status-382', + 'zSharePartic-Is Current User-383', + 'SPLzSharePartic-Is Current User-384', + 'zSharePartic-Role-385', + 'SPLzSharePartic-Role-386', + 'zSharePartic-Premission-387', + 'SPLzSharePartic-Premission-388', + 'zSharePartic-Participant ID-389', + 'SPLzSharePartic-Participant ID-390', + 'zSharePartic-User ID-391', + 'SPLzSharePartic-User ID-392', + 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-393', + 'SPLzSharePartic-zPK-4TableStart-394', + 'zSharePartic-zPK-4TableStart-395', + 'zSharePartic-Email Address-396', + 'SPLzSharePartic-Email Address-397', + 'zSharePartic-Phone Number-398', + 'SPLzSharePartic-Phone Number-399', + 'zSharePartic-Exit State-400', + 'SPLzSharePartic-Exit State-401', + 'ParentzGenAlbum-UUID-4TableStart-402', + 'zGenAlbum-UUID-4TableStart-403', + 'SWYConverszGenAlbum-UUID-4TableStart-404', + 'ParentzGenAlbum-Cloud GUID-4TableStart-405', + 'zGenAlbum-Cloud GUID-4TableStart-406', + 'SWYConverszGenAlbum-Cloud GUID-4TableStart-407', + 'zCldShareAlbumInvRec-Album GUID-4TableStart-408', + 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-409', + 'zGenAlbum-Project Render UUID-4TableStart-410', + 'SWYConverszGenAlbum-Project Render UUID-4TableStart-411', + 'zAlbumList-Needs Reordering Number-412', + 'zGenAlbum-zENT- Entity-413', + 'ParentzGenAlbum-Kind-414', + 'zGenAlbum-Album Kind-415', + 'SWYConverszGenAlbum-Album Kind-416', + 'ParentzGenAlbum-Cloud-Local-State-417', + 'zGenAlbum-Cloud_Local_State-418', + 'SWYConverszGenAlbum-Cloud_Local_State-419', + 'ParentzGenAlbum- Title-420', + 'zGenAlbum- Title-User&System Applied-421', + 'SWYConverszGenAlbum- Title -User&System Applied-422', + 'zGenAlbum-Import Session ID-SWY-423', + 'zAsset- Conversation= zGenAlbum_zPK-424', + 'SWYConverszGenAlbum- Import Session ID-SWY-425', + 'zGenAlbum-Imported by Bundle Identifier-426', + 'SWYzGenAlbum-Imported by Bundle Identifier-427', + 'SWYConverszGenAlbum- Syndicate-428', + ('ParentzGenAlbum-Creation Date-429', 'datetime'), + ('zGenAlbum-Creation Date-430', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-431', 'datetime'), + ('zGenAlbum-Cloud Creation Date-432', 'datetime'), + ('SWYConverszGenAlbum-Cloud Creation Date-433', 'datetime'), + ('zGenAlbum-Start Date-434', 'datetime'), + ('SWYConverszGenAlbum-Start Date-435', 'datetime'), + ('zGenAlbum-End Date-436', 'datetime'), + ('SWYConverszGenAlbum-End Date-437', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-438', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date-439', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-440', + 'zGenAlbum-Pending Items Count-441', + 'SWYConverszGenAlbum-Pending Items Count-442', + 'ParentzGenAlbum-Pending Items Type-443', + 'zGenAlbum-Pending Items Type-444', + 'SWYConverszGenAlbum-Pending Items Type-445', + 'zGenAlbum- Cached Photos Count-446', + 'SWYConverszGenAlbum- Cached Photos Count-447', + 'zGenAlbum- Cached Videos Count-448', + 'SWYConverszGenAlbum- Cached Videos Count-449', + 'zGenAlbum- Cached Count-450', + 'SWYConverszGenAlbum- Cached Count-451', + 'ParentzGenAlbum-Sync Event Order Key-452', + 'zGenAlbum-Sync Event Order Key-453', + 'SWYConverszGenAlbum-Sync Event Order Key-454', + 'zGenAlbum-Has Unseen Content-455', + 'SWYConverszGenAlbum-Has Unseen Content-456', + 'zGenAlbum-Unseen Asset Count-457', + 'SWYConverszGenAlbum-Unseen Asset Count-458', + 'zGenAlbum-is Owned-459', + 'SWYConverszGenAlbum-is Owned-460', + 'zGenAlbum-Cloud Relationship State-461', + 'SWYConverszGenAlbum-Cloud Relationship State-462', + 'zGenAlbum-Cloud Relationship State Local-463', + 'SWYConverszGenAlbum-Cloud Relationship State Local-464', + 'zGenAlbum-Cloud Owner Mail Key-465', + 'SWYConverszGenAlbum-Cloud Owner Mail Key-466', + 'zGenAlbum-Cloud Owner Frist Name-467', + 'SWYConverszGenAlbum-Cloud Owner Frist Name-468', + 'zGenAlbum-Cloud Owner Last Name-469', + 'SWYConverszGenAlbum-Cloud Owner Last Name-470', + 'zGenAlbum-Cloud Owner Full Name-471', + 'SWYConverszGenAlbum-Cloud Owner Full Name-472', + 'zGenAlbum-Cloud Person ID-473', + 'SWYConverszGenAlbum-Cloud Person ID-474', + 'zAsset-Cloud Owner Hashed Person ID-475', + 'zGenAlbum-Cloud Owner Hashed Person ID-476', + 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-477', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-478', + 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-479', + 'zGenAlbum-Cloud Multi-Contributors Enabled-480', + 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-481', + 'zGenAlbum-Cloud Album Sub Type-482', + 'SWYConverszGenAlbum-Cloud Album Sub Type-483', + ('zGenAlbum-Cloud Contribution Date-484', 'datetime'), + ('SWYConverszGenAlbum-Cloud Contribution Date-485', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-486', 'datetime'), + ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-487', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-488', + 'SWYConverszGenAlbum-Cloud Notification Enabled-489', + 'ParentzGenAlbum-Pinned-490', + 'zGenAlbum-Pinned-491', + 'SWYConverszGenAlbum-Pinned-492', + 'ParentzGenAlbum-Custom Sort Key-493', + 'zGenAlbum-Custom Sort Key-494', + 'SWYConverszGenAlbum-Custom Sort Key-495', + 'ParentzGenAlbum-Custom Sort Ascending-496', + 'zGenAlbum-Custom Sort Ascending-497', + 'SWYConverszGenAlbum-Custom Sort Ascending-498', + 'ParentzGenAlbum-Is Prototype-499', + 'zGenAlbum-Is Prototype-500', + 'SWYConverszGenAlbum-Is Prototype-501', + 'ParentzGenAlbum-Project Document Type-502', + 'zGenAlbum-Project Document Type-503', + 'SWYConverszGenAlbum-Project Document Type-504', + 'ParentzGenAlbum-Custom Query Type-505', + 'zGenAlbum-Custom Query Type-506', + 'SWYConverszGenAlbum-Custom Query Type-507', + 'ParentzGenAlbum-Trashed State-508', + ('ParentzGenAlbum-Trash Date-509', 'datetime'), + 'zGenAlbum-Trashed State-510', + ('zGenAlbum-Trash Date-511', 'datetime'), + 'SWYConverszGenAlbum-Trashed State-512', + ('SWYConverszGenAlbum-Trash Date-513', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-514', + 'zGenAlbum-Cloud Delete State-515', + 'SWYConverszGenAlbum-Cloud Delete State-516', + 'zGenAlbum-Cloud Owner Whitelisted-517', + 'SWYConverszGenAlbum-Cloud Owner Whitelisted-518', + 'zGenAlbum-Cloud Local Public URL Enabled-519', + 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-520', + 'zGenAlbum-Cloud Public URL Enabled-521', + 'zGenAlbum-Public URL-522', + 'SWYConverszGenAlbum-Cloud Public URL Enabled-523', + 'SWYConverszGenAlbum-Public URL-524', + 'zGenAlbum-Key Asset Face Thumb Index-525', + 'SWYConverszGenAlbum-Key Asset Face Thumb Index-526', + 'zGenAlbum-Project Text Extension ID-527', + 'SWYConverszGenAlbum-Project Text Extension ID-528', + 'zGenAlbum-User Query Data-529', + 'SWYConverszGenAlbum-User Query Data-530', + 'zGenAlbum-Custom Query Parameters-531', + 'SWYConverszGenAlbum-Custom Query Parameters-532', + 'zGenAlbum-Project Data-533', + 'SWYConverszGenAlbum-Project Data-534', + 'zGenAlbum-Search Index Rebuild State-535', + 'SWYConverszGenAlbum-Search Index Rebuild State-536', + 'zGenAlbum-Duplicate Type-537', + 'SWYConverszGenAlbum-Duplicate Type-538', + 'zGenAlbum-Privacy State-539', + 'SWYConverszGenAlbum-Privacy State-540', + 'zCldShareAlbumInvRec-zUUID-4TableStart-541', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-542', + 'zCldShareAlbumInvRec-Invitation State Local-543', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-544', + ('zCldShareAlbumInvRec-Subscription Date-545', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-546', + 'zCldShareAlbumInvRec-Invitee Last Name-547', + 'zCldShareAlbumInvRec-Invitee Full Name-548', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-549', + 'zCldShareAlbumInvRec-Invitee Email Key-550', + 'zGenAlbum-Key Asset Face ID-551', + 'zFaceCrop-Face Area Points-552', + 'zAsset-Face Adjustment Version-553', + 'zAddAssetAttr-Face Analysis Version-554', + 'zDetFace-Asset Visible-555', + 'zPerson-Face Count-556', + 'zDetFace-Face Crop-557', + 'zDetFace-Face Algorithm Version-558', + 'zDetFace-Adjustment Version-559', + 'zDetFace-UUID-4TableStart-560', + 'zPerson-Person UUID-4TableStart-561', + 'zDetFace-Confirmed Face Crop Generation State-562', + 'zDetFace-Manual-563', + 'zDetFace-Detection Type-564', + 'zPerson-Detection Type-565', + 'zDetFace-VIP Model Type-566', + 'zDetFace-Name Source-567', + 'zDetFace-Cloud Name Source-568', + 'zPerson-Merge Candidate Confidence-569', + 'zPerson-Person URI-570', + 'zPerson-Display Name-571', + 'zPerson-Full Name-572', + 'zPerson-Cloud Verified Type-573', + 'zFaceCrop-State-574', + 'zFaceCrop-Type-575', + 'zFaceCrop-UUID-4TableStart-576', + 'zPerson-Type-577', + 'zPerson-Verified Type-578', + 'zPerson-Gender Type-579', + 'zDetFace-Gender Type-580', + 'zDetFace-Center X-581', + 'zDetFace-Center Y-582', + 'zPerson-Age Type Estimate-583', + 'zDetFace-Age Type Estimate-584', + 'zDetFace-Ethnicity Type-585', + 'zDetFace-Skin Tone Type-586', + 'zDetFace-Hair Type-587', + 'zDetFace-Hair Color Type-588', + 'zDetFace-Head Gear Type-589', + 'zDetFace-Facial Hair Type-590', + 'zDetFace-Has Face Mask-591', + 'zDetFace-Pose Type-592', + 'zDetFace-Face Expression Type-593', + 'zDetFace-Has Smile-594', + 'zDetFace-Smile Type-595', + 'zDetFace-Lip Makeup Type-596', + 'zDetFace-Eyes State-597', + 'zDetFace-Is Left Eye Closed-598', + 'zDetFace-Is Right Eye Closed-599', + 'zDetFace-Gaze Center X-600', + 'zDetFace-Gaze Center Y-601', + 'zDetFace-Face Gaze Type-602', + 'zDetFace-Eye Glasses Type-603', + 'zDetFace-Eye Makeup Type-604', + 'zDetFace-Cluster Squence Number Key-605', + 'zDetFace-Grouping ID-606', + 'zDetFace-Master ID-607', + 'zDetFace-Quality-608', + 'zDetFace-Quality Measure-609', + 'zDetFace-Source Height-610', + 'zDetFace-Source Width-611', + 'zDetFace-Hidden-Asset Hidden-612', + 'zDetFace-In Trash-Recently Deleted-613', + 'zDetFace-Cloud Local State-614', + 'zDetFace-Training Type-615', + 'zDetFace.Pose Yaw-616', + 'zDetFace-Body Center X-617', + 'zDetFace-Body Center Y-618', + 'zDetFace-Body Height-619', + 'zDetFace-Body Width-620', + 'zDetFace-Roll-621', + 'zDetFace-Size-622', + 'zDetFace-Cluster Squence Number-623', + 'zDetFace-Blur Score-624', + 'zDetFacePrint-Face Print Version-625', + 'zMedAnlyAstAttr-Face Count-626', + 'zDetFaceGroup-UUID-4TableStart-627', + 'zDetFaceGroup-Person Builder State-628', + 'zDetFaceGroup-UnNamed Face Count-629', + 'zPerson-In Person Naming Model-630', + 'zPerson-Key Face Pick Source Key-631', + 'zPerson-Manual Order Key-632', + 'zPerson-Question Type-633', + 'zPerson-Suggested For Client Type-634', + 'zPerson-Merge Target Person-635', + 'zPerson-Cloud Local State-636', + 'zFaceCrop-Cloud Local State-637', + 'zFaceCrop-Cloud Type-638', + 'zPerson-Cloud Delete State-639', + 'zFaceCrop-Cloud Delete State-640', + 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-641', + 'zAsset-Highlight Visibility Score-642', + 'zMemory-UUID-4TableStart-643', + 'zMemory-AssetListPredicte-644', + 'zMemory-Score-645', + 'zMemory-SubTitle-646', + 'zMemory-Title-647', + 'zMemory-Category-648', + 'zMemory-SubCategory-649', + ('zMemory-Creation Date-650', 'datetime'), + ('zMemory-Last Enrichment Date-651', 'datetime'), + 'zMemory-User Action Options-652', + 'zMemory-Favorite Memory-653', + 'zMemory-View Count-654', + 'zMemory-Play Count-655', + 'zMemory-Rejected-656', + 'zMemory-Share Count-657', + 'zMemory-Sharing Composition-658', + ('zMemory-Last Movie Play Date-659', 'datetime'), + ('zMemory-Last Viewed Date-660', 'datetime'), + 'zMemory-Pending Play Count Memory-661', + 'zMemory-Pending Share Count Memory-662', + 'zMemory-Pending View Count Memory-663', + 'zMemory-Pending State-664', + 'zMemory-Featured State-665', + 'zMemory-Photos Graph Version-666', + 'zMemory-Graph Memory Identifier-667', + 'zMemory-Notification State-668', + 'zMemory-Cloud Local State-669', + 'zMemory-Cloud Delete State-670', + 'zMemory-Story Color Grade Kind-671', + 'zMemory-Story Serialized Title Category-672', + 'zMemory-Syndicated Content State-673', + 'zMemory-Search Index Rebuild State-674', + 'zMemory-Black Listed Feature-675', + 'zMoment-UUID-4TableStart-676', + 'zMoment-Aggregation Score-677', + ('zMoment-Start Date-678', 'datetime'), + ('zMoment-Representative Date-679', 'datetime'), + 'zMoment-Timezone Offset-680', + ('zMoment-Modification Date-681', 'datetime'), + ('zMoment-End Date-682', 'datetime'), + 'zMoment-SubTitle-683', + 'zMoment-Title-684', + 'zMoment-Originator State-685', + 'zMoment-Sharing Composition-686', + 'zMoment-Cached Count Shared-687', + 'zMoment-Processed Location-688', + 'zMoment-Approx Latitude-689', + 'zMoment-Approx Longitude-690', + 'zMoment-GPS Horizontal Accuracy-691', + 'zMoment-Cache Count-692', + 'zMoment-Cached Photos Count-693', + 'zMoment-Cached Videos Count-694', + 'zMoment-Trashed State-695', + 'SBKAzSugg-UUID-4TableStart-696', + 'SBKAzSugg-Suggestion Context-697', + 'SBKAzSugg-Sharing Composition-698', + ('SBKAzSugg-Start Date-699', 'datetime'), + 'SBKAzSugg-State-700', + 'SBKAzSugg-Featured State-701', + 'SBKAzSugg-Notification State-702', + ('SBKAzSugg-Creation Date-703', 'datetime'), + ('SBKAzSugg-End Date-704', 'datetime'), + ('SBKAzSugg-Activation Date-705', 'datetime'), + ('SBKAzSugg-Expunge Date-706', 'datetime'), + ('SBKAzSugg-Relevant Until Date-707', 'datetime'), + 'SBKAzSugg-Title-708', + 'SBKAzSugg-Sub Title-709', + 'SBKAzSugg-Cached Count-710', + 'SBKAzSugg-Cahed Photos Count-711', + 'SBKAzSugg-Cached Videos Count-712', + 'SBKAzSugg-Type-713', + 'SBKAzSugg-Sub Type-714', + 'SBKAzSugg-Action Data-715', + 'SBKAzSugg-Version-716', + 'SBKAzSugg-Cloud Local State-717', + 'SBKAzSugg-Cloud Delete State-718', + 'SBRAzSugg-UUID-4TableStart-719', + 'SBRAzSugg-Suggestion Context-720', + 'SBRAzSugg-Sharing Composition-721', + ('SBRAzSugg-Start Date-722', 'datetime'), + 'SBRAzSugg-State-723', + 'SBRAzSugg-Featured State-724', + 'SBRAzSugg-Notification State-725', + ('SBRAzSugg-Creation Date-726', 'datetime'), + ('SBRAzSugg-End Date-727', 'datetime'), + ('SBRAzSugg-Activation Date-728', 'datetime'), + ('SBRAzSugg-Expunge Date-729', 'datetime'), + ('SBRAzSugg-Relevant Until Date-730', 'datetime'), + 'SBRAzSugg-Title-731', + 'SBRAzSugg-Sub Title-732', + 'SBRAzSugg-Cached Count-733', + 'SBRAzSugg-Cahed Photos Count-734', + 'SBRAzSugg-Cached Videos Count-735', + 'SBRAzSugg-Type-736', + 'SBRAzSugg-Sub Type-737', + 'SBRAzSugg-Action Data-738', + 'SBRAzSugg-Version-739', + 'SBRAzSugg-Cloud Local State-740', + 'SBRAzSugg-Cloud Delete State-741', + 'zMedAnlyAstAttr-Media Analysis Version-742', + 'zMedAnlyAstAttr-Audio Classification-743', + 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-744', + 'zMedAnlyAstAttr-Best Video Range Start Time Scale-745', + 'zMedAnlyAstAttr-Best Video Range Duration Value-746', + 'zMedAnlyAstAttr-Best Video Range Start Value-747', + 'zMedAnlyAstAttr-Packed Best Playback Rect-748', + 'zMedAnlyAstAttr-Activity Score-749', + 'zMedAnlyAstAttr-Video Score-750', + 'zMedAnlyAstAttr-Audio Score-751', + 'zMedAnlyAstAttr-Wallpaper Score-752', + 'zMedAnlyAstAttr-AutoPlay Suggestion Score-753', + 'zMedAnlyAstAttr-Blurriness Score-754', + 'zMedAnlyAstAttr-Exposure Score-755', + 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-756', + 'zMedAnlyAstAttr-Probable Rotation Direction-757', + 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-758', + 'zAssetAnalyState-Asset UUID-4TableStart-759', + 'zAssetAnalyState-Analyisis State-760', + 'zAssetAnalyState-Worker Flags-761', + 'zAssetAnalyState-Worker Type-762', + ('zAssetAnalyState-Ignore Until Date-763', 'datetime'), + ('zAssetAnalyState-Last Ignored Date-764', 'datetime'), + ('zAssetAnalyState-Sort Token-765', 'datetime'), + 'zMedAnlyAstAttr-Character Recognition Attr-766', + 'zCharRecogAttr-Algorithm Version-767', + 'zCharRecogAttr-Adjustment Version-768', + 'zMedAnlyAstAttr-Visual Search Attributes-769', + 'zVisualSearchAttr-Algorithm Version-770', + 'zVisualSearchAttr-Adjustment Version-771', + 'zAsset-Overall Aesthetic Score-772', + 'zCompAssetAttr-Behavioral Score-773', + 'zCompAssetAttr-Failure Score zCompAssetAttr-774', + 'zCompAssetAttr-Harmonious Color Score-775', + 'zCompAssetAttr-Immersiveness Score-776', + 'zCompAssetAttr-Interaction Score-777', + 'zCompAssetAttr-Intersting Subject Score-778', + 'zCompAssetAttr-Intrusive Object Presence Score-779', + 'zCompAssetAttr-Lively Color Score-780', + 'zCompAssetAttr-Low Light-781', + 'zCompAssetAttr-Noise Score-782', + 'zCompAssetAttr-Pleasant Camera Tilt Score-783', + 'zCompAssetAttr-Pleasant Composition Score-784', + 'zCompAssetAttr-Pleasant Lighting Score-785', + 'zCompAssetAttr-Pleasant Pattern Score-786', + 'zCompAssetAttr-Pleasant Perspective Score-787', + 'zCompAssetAttr-Pleasant Post Processing Score-788', + 'zCompAssetAttr-Pleasant Reflection Score-789', + 'zCompAssetAttrPleasant Symmetry Score-790', + 'zCompAssetAttr-Sharply Focused Subject Score-791', + 'zCompAssetAttr-Tastfully Blurred Score-792', + 'zCompAssetAttr-Well Chosen Subject Score-793', + 'zCompAssetAttr-Well Framed Subject Score-794', + 'zCompAssetAttr-Well Timeed Shot Score-795', + 'zCldRes-Asset UUID-4TableStart-796', + 'zCldRes-Cloud Local State-797', + 'zCldRes-File Size-798', + 'zCldRes-Height-799', + 'zCldRes-Is Available-800', + 'zCldRes-Is Locally Available-801', + 'zCldRes-Prefetch Count-802', + 'zCldRes-Source Type-803', + 'zCldRes-Type-804', + 'zCldRes-Width-805', + ('zCldRes-Date Created-806', 'datetime'), + ('zCldRes-Last OnDemand Download Date-807', 'datetime'), + ('zCldRes-Last Prefetch Date-808', 'datetime'), + 'zCldRes-Prunedat-809', + 'zCldRes-File Path-810', + 'zCldRes-Fingerprint-811', + 'zCldRes-Item ID-812', + 'zCldRes-UniID-813', + 'zUserFeedback-UUID-4TableStart-814', + 'zUserFeedback-Feature-815', + 'zUserFeedback-Type-816', + ('zUserFeedback-Last Modified Date-817', 'datetime'), + 'zUserFeedback-Context-818', + 'zUserFeedback-Cloud Local State-819', + 'zUserFeedback-Cloud Delete State-820', + 'zAddAssetAttr-zPK-821', + 'zAddAssetAttr-zENT-822', + 'ZAddAssetAttr-zOPT-823', + 'zAddAssetAttr-zAsset= zAsset_zPK-824', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-825', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-826', + 'zAddAssetAttr-Master Fingerprint-827', + 'zAddAssetAttr-Public Global UUID-828', + 'zAddAssetAttr-Deferred Photo Identifier-829', + 'zAddAssetAttr-Original Assets UUID-830', + 'zAddAssetAttr-Import Session ID-831', + 'zAddAssetAttr-Originating Asset Identifier-832', + 'zAddAssetAttr.Adjusted Fingerprint-833', + 'zAlbumList-zPK= Album List Key-834', + 'zAlbumList-zENT-835', + 'zAlbumList-zOPT-836', + 'zAlbumList-ID Key-837', + 'zAlbumList-UUID-838', + 'zAsset-zPK-839', + 'zAsset-zENT-840', + 'zAsset-zOPT-841', + 'zAsset-Master= zCldMast-zPK-842', + 'zAsset-Extended Attributes= zExtAttr-zPK-843', + 'zAsset-Import Session Key-844', + 'zAsset-Trashed by Participant= zSharePartic_zPK-845', + 'zAsset-Photo Analysis Attributes Key-846', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-847', + 'zAsset-FOK-Cloud Feed Asset Entry Key-848', + 'zAsset-Moment Share Key= zShare-zPK-849', + 'zAsset-zMoment Key= zMoment-zPK-850', + 'zAsset-Computed Attributes Asset Key-851', + 'zAsset-Highlight Being Assets-HBA Key-852', + 'zAsset-Highlight Being Extended Assets-HBEA Key-853', + 'zAsset-Highlight Being Key Asset Private-HBKAP Key-854', + 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-855', + 'zAsset-Highligh Being Summary Assets-HBSA Key-856', + 'zAsset-Day Group Highlight Being Assets-DGHBA Key-857', + 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-858', + 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-859', + 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-860', + 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-861', + 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-862', + 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-863', + 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-864', + 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-865', + 'zAsset-Promotion Score-866', + 'zAsset-Media Analysis Attributes Key-867', + 'zAsset-Media Group UUID-868', + 'zAsset-UUID = store.cloudphotodb-869', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-870', + 'zAsset.Cloud Collection GUID-871', + 'zAsset-Avalanche UUID-872', + 'zAssetAnalyState-zPK-873', + 'zAssetAnalyState-zEnt-874', + 'zAssetAnalyState-zOpt-875', + 'zAssetAnalyState-Asset= zAsset-zPK-876', + 'zAssetAnalyState-Asset UUID-877', + 'zAsstContrib-zPK-878', + 'zAsstContrib-zEnt-879', + 'zAsstContrib-zOpt-880', + 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-881', + 'zAsstContrib-Participant= zSharePartic-zPK-882', + 'zAssetDes-zPK-883', + 'zAssetDes-zENT-884', + 'zAssetDes-zOPT-885', + 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-886', + 'zCharRecogAttr-zPK-887', + 'zCharRecogAttr-zENT-888', + 'zCharRecogAttr-zOPT-889', + 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-890', + 'zCldFeedEnt-zPK= zCldShared keys-891', + 'zCldFeedEnt-zENT-892', + 'zCldFeedEnt-zOPT-893', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-894', + 'zCldFeedEnt-Entry Invitation Record GUID-895', + 'zCldFeedEnt-Entry Cloud Asset GUID-896', + 'zCldMast-zPK= zAsset-Master-897', + 'zCldMast-zENT-898', + 'zCldMast-zOPT-899', + 'zCldMast-Moment Share Key= zShare-zPK-900', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-901', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-902', + 'zCldMast-Originating Asset ID-903', + 'zCldMast-Import Session ID- AirDrop-StillTesting-904', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-905', + 'CMzCldMastMedData-zENT-906', + 'CMzCldMastMedData-zOPT-907', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-908', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-909', + 'AAAzCldMastMedData-zENT-910', + 'AAAzCldMastMedData-zOPT-911', + 'AAAzCldMastMedData-CldMast key-912', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-913', + 'zCldRes-zPK-914', + 'zCldRes-zENT-915', + 'zCldRes-zOPT-916', + 'zCldRes-Asset= zAsset-zPK-917', + 'zCldRes-Cloud Master= zCldMast-zPK-918', + 'zCldRes-Asset UUID-919', + 'zCldShareAlbumInvRec-zPK-920', + 'zCldShareAlbumInvRec-zEnt-921', + 'zCldShareAlbumInvRec-zOpt-922', + 'zCldShareAlbumInvRec-Album Key-923', + 'zCldShareAlbumInvRec-FOK Album Key-924', + 'zCldShareAlbumInvRec-Album GUID-925', + 'zCldShareAlbumInvRec-zUUID-926', + 'zCldShareAlbumInvRec-Cloud GUID-927', + 'zCldSharedComment-zPK-928', + 'zCldSharedComment-zENT-929', + 'zCldSharedComment-zOPT-930', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-931', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-932', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-933', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-934', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-935', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-936', + 'zCldSharedComment-Cloud GUID-937', + 'zCompAssetAttr-zPK-938', + 'zCompAssetAttr-zEnt-939', + 'zCompAssetAttr-zOpt-940', + 'zCompAssetAttr-Asset Key-941', + 'zDetFace-zPK-942', + 'zDetFace-zEnt-943', + 'zDetFace.zOpt-944', + 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-945', + 'zDetFace-Person= zPerson-zPK-946', + 'zDetFace-Person Being Key Face-947', + 'zDetFace-Face Print-948', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-949', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-950', + 'zDetFace-UUID-951', + 'zDetFaceGroup-zPK-952', + 'zDetFaceGroup-zENT-953', + 'zDetFaceGroup-zOPT-954', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-955', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-956', + 'zDetFaceGroup-UUID-957', + 'zDetFacePrint-zPK-958', + 'zDetFacePrint-zEnt-959', + 'zDetFacePrint-zOpt-960', + 'zDetFacePrint-Face Key-961', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-962', + 'zExtAttr-zENT-963', + 'zExtAttr-zOPT-964', + 'zExtAttr-Asset Key-965', + 'zFaceCrop-zPK-966', + 'zFaceCrop-zEnt-967', + 'zFaceCrop-zOpt-968', + 'zFaceCrop-Asset Key-969', + 'zFaceCrop-Invalid Merge Canidate Person UUID-970', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-971', + 'zFaceCrop-Face Key-972', + 'zFaceCrop-UUID-973', + 'zGenAlbum-zPK=26AlbumLists= 26Albums-974', + 'zGenAlbum-zENT-975', + 'zGenAlbum-zOpt-976', + 'zGenAlbum-Key Asset-Key zAsset-zPK-977', + 'zGenAlbum-Secondary Key Asset-978', + 'zGenAlbum-Tertiary Key Asset-979', + 'zGenAlbum-Custom Key Asset-980', + 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-981', + 'zGenAlbum-FOK Parent Folder-982', + 'zGenAlbum-zSyndicate-983', + 'zGenAlbum-UUID-984', + 'SWYConverszGenAlbum-UUID-985', + 'zGenAlbum-Cloud_GUID = store.cloudphotodb-986', + 'SWYConverszGenAlbum-Cloud GUID-987', + 'zGenAlbum-Project Render UUID-988', + 'SWYConverszGenAlbum-Project Render UUID-989', + 'zIntResou-zPK-990', + 'zIntResou-zENT-991', + 'zIntResou-zOPT-992', + 'zIntResou-Asset= zAsset_zPK-993', + 'zIntResou-Fingerprint-994', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-995', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-996', + 'zMedAnlyAstAttr-zEnt-997', + 'zMedAnlyAstAttr-zOpt-998', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-999', + 'zMemory-zPK-1000', + 'zMemory-zENT-1001', + 'zMemory-zOPT-1002', + 'zMemory-Key Asset= zAsset-zPK-1003', + 'zMemory-UUID-1004', + 'zMoment-zPK-1005', + 'zMoment-zENT-1006', + 'zMoment-zOPT-1007', + 'zMoment-Highlight Key-1008', + 'zMoment-UUID-1009', + 'zPerson-zPK=zDetFace-Person-1010', + 'zPerson-zEnt-1011', + 'zPerson-zOpt-1012', + 'zPerson-Share Participant= zSharePartic-zPK-1013', + 'zPerson-KeyFace=zDetFace-zPK-1014', + 'zPerson-Assoc Face Group Key-1015', + 'zPerson-Person UUID-1016', + 'zPhotoAnalysisAssetAttr-zPK-1017', + 'zPhotoAnalysisAssetAttr-zEnt-1018', + 'zPhotoAnalysisAssetAttr-zOpt-1019', + 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1020', + 'zSceneP-zPK-1021', + 'zSceneP-zENT-1022', + 'zSceneP-zOPT-1023', + 'zShare-zPK-1024', + 'zShare-zENT-1025', + 'zShare-zOPT-1026', + 'zShare-UUID-1027', + 'SPLzShare-UUID-1028', + 'zShare-Scope ID = store.cloudphotodb-1029', + 'zSharePartic-zPK-1030', + 'zSharePartic-zENT-1031', + 'zSharePartic-zOPT-1032', + 'zSharePartic-Share Key= zShare-zPK-1033', + 'zSharePartic-Person= zPerson-zPK-1034', + 'zSharePartic-UUID-1035', + 'SBKAzSugg-zPK-1036', + 'SBKAzSugg-zENT-1037', + 'SBKAzSugg-zOPT-1038', + 'SBKAzSugg-UUID-1039', + 'SBRAzSugg-zPK-1040', + 'SBRAzSugg-zENT-1041', + 'SBRAzSugg-zOPT-1042', + 'SBRAzSugg-UUID-1043', + 'z3SuggBRA-3RepAssets1-1044', + 'z3SuggBRA-58SuggBeingRepAssets-1045', + 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK-1046', + 'z3SuggBKA-3KeyAssets= zAsset-zPK-1047', + 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1048', + 'zUnmAdj-zOPT-1049', + 'zUnmAdj-zENT-1050', + 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1051', + 'zUnmAdj-UUID-1052', + 'zUnmAdj-Other Adjustments Fingerprint-1053', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1054', + 'zUserFeedback-zPK-1055', + 'zUserFeedback-zENT-1056', + 'zUserFeedback-zOPT-1057', + 'zUserFeedback-Person= zPerson-zPK-1058', + 'zUserFeedback-Memory= zMemory-zPK-1059', + 'zUserFeedback-UUID-1060', + 'zVisualSearchAttr-zPK-1061', + 'zVisualSearchAttr-zENT-1062', + 'zVisualSearchAttr-zOPT-1063', + 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1064', + 'z27AlbumList-27Albums= zGenAlbum-zPK-1065', + 'z27AlbumList-Album List Key-1066', + 'z27AlbumList-FOK27Albums Key-1067', + 'z28Assets-28Albums= zGenAlbum-zPK-1068', + 'z28Assets-3Asset Key= zAsset-zPK in the Album-1069', + 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1070', + 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1071', + 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1072', + 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK-1073', + 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1074', + 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK-1075', + 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1076', + 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1077', + 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1078', + 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK-1079', + 'z3MemoryBCAs-44Memories Being Custom User Assets-1080', + 'z3MemoryBCAs-3Custom User Assets-1081', + 'z3MemoryBCAs-FOK-3Custom User Assets-1082') + data_list = get_sqlite_db_records(source_path, query) + return data_headers, data_list, source_path -def get_ph96ios16refforassetanalysissyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph96_2iOS16RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if (version.parse(iosversion) <= version.parse("15.8.2")) or (version.parse(iosversion) >= version.parse("17")): - logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite reference for asset analysis from iOS " + iosversion) + logfunc("Unsupported version for Syndication.photoslibrary for iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("16")) & (version.parse(iosversion) < version.parse("17")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -6125,7 +6128,7 @@ def get_ph96ios16refforassetanalysissyndpl(files_found, report_folder, seeker, w zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type', DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date', DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date', - zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token', + DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token', zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr', zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version', zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version', @@ -6494,1291 +6497,1230 @@ def get_ph96ios16refforassetanalysissyndpl(files_found, report_folder, seeker, w LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS1 = zAsset.Z_PK LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_58SUGGESTIONSBEINGREPRESENTATIVEASSETS ORDER BY zAsset.ZADDEDDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], - row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], - row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], - row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], - row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], - row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], - row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], - row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], - row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], - row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], - row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], - row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], - row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], - row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], - row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], - row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], - row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], - row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], - row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], - row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], - row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], - row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], - row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], - row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], - row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], - row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], - row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], - row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], - row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], - row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], - row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], - row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], - row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], - row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], - row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], - row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], - row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], - row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], - row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], - row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], - row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], - row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], - row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], - row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], - row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], - row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], - row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], - row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], - row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], - row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], - row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], - row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], - row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], - row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], - row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], - row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], - row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], - row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], - row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], - row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], - row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], - row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], - row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], - row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], - row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], - row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], - row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], - row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], - row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], - row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], - row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], - row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], - row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], - row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], - row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], - row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], - row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], - row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], - row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], - row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], - row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], - row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], - row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], - row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], - row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], - row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], - row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], - row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], - row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], - row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], - row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], - row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], - row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], - row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], - row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], - row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], - row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], - row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], - row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], - row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], - row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], - row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], - row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], - row[1080], row[1081], row[1082])) - - counter += 1 - - description = 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' \ - ' This parser includes the largest set of decoded data based on testing and research' \ - ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' \ - ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' \ - ' TimelineExplorer to view, search and filter the results.' - report = ArtifactHtmlReport('Ph96.2-iOS16_Ref_for_Asset_Analysis-SyndPL') - report.start_artifact_report(report_folder, 'Ph96.2-iOS16_Ref_for_Asset_Analysis-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Added Date-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset Complete-2', - 'zAsset-zPK-4QueryStart-3', - 'zAddAssetAttr-zPK-4QueryStart-4', - 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', - 'zAddAssetAttr-Master Fingerprint-4TableStart-6', - 'zIntResou-Fingerprint-4TableStart-7', - 'zAsset-Bundle Scope-8', - 'zAsset-Syndication State-9', - 'zAsset-Cloud is My Asset-10', - 'zAsset-Cloud is deletable-Asset-11', - 'zAsset-Cloud_Local_State-12', - 'zAsset-Visibility State-13', - 'zExtAttr-Camera Make-14', - 'zExtAttr-Camera Model-15', - 'zExtAttr-Lens Model-16', - 'zExtAttr-Flash Fired-17', - 'zExtAttr-Focal Lenght-18', - 'zExtAttr-Focal Lenth in 35MM-19', - 'zExtAttr-Digital Zoom Ratio-20', - 'zAsset-Derived Camera Capture Device-21', - 'zAddAssetAttr-Camera Captured Device-22', - 'zAddAssetAttr-Imported by-23', - 'zCldMast-Imported By-24', - 'zAddAssetAttr.Imported by Bundle Identifier-25', - 'zAddAssetAttr-Imported By Display Name-26', - 'zCldMast-Imported by Bundle ID-27', - 'zCldMast-Imported by Display Name-28', - 'zAsset-Saved Asset Type-29', - 'zAsset-Directory-Path-30', - 'zAsset-Filename-31', - 'zAddAssetAttr- Original Filename-32', - 'zCldMast- Original Filename-33', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-34', - 'zAsset-Active Library Scope Participation State -4QueryStart-35', - 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36', - 'zShare-Cloud Photo Count-SPL -4QueryStart-37', - 'zShare-Cloud Video Count-SPL -4QueryStart-38', - 'zAddAssetAttr-Date Created Source-39', - 'zAsset-Date Created-40', - 'zCldMast-Creation Date-41', - 'zIntResou-CldMst Date Created-42', - 'zAddAssetAttr-Time Zone Name-43', - 'zAddAssetAttr-Time Zone Offset-44', - 'zAddAssetAttr-Inferred Time Zone Offset-45', - 'zAddAssetAttr-EXIF-String-46', - 'zAsset-Modification Date-47', - 'zAsset-Last Shared Date-48', - 'zCldMast-Cloud Local State-49', - 'zCldMast-Import Date-50', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-51', - 'zAddAssetAttr-Import Session ID-4QueryStart-52', - 'zAddAssetAttr-Alt Import Image Date-53', - 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-54', - 'zAsset-Cloud Batch Publish Date-55', - 'zAsset-Cloud Server Publish Date-56', - 'zAsset-Cloud Download Requests-57', - 'zAsset-Cloud Batch ID-58', - 'zAddAssetAttr-Upload Attempts-59', - 'zAsset-Latitude-60', - 'zExtAttr-Latitude-61', - 'zAsset-Longitude-62', - 'zExtAttr-Longitude-63', - 'zAddAssetAttr-GPS Horizontal Accuracy-64', - 'zAddAssetAttr-Location Hash-65', - 'zAddAssetAttr-Shifted Location Valid-66', - 'zAddAssetAttr-Shifted Location Data-67', - 'zAddAssetAttr-Reverse Location Is Valid-68', - 'zAddAssetAttr-Reverse Location Data-69', - 'ParentzGenAlbum-UUID-4QueryStart-70', - 'zGenAlbum-UUID-4QueryStart-71', - 'SWYConverszGenAlbum-UUID-4QueryStart-72', - 'ParentzGenAlbum-Cloud GUID-4QueryStart-73', - 'zGenAlbum-Cloud GUID-4QueryStart-74', - 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-75', - 'zCldShareAlbumInvRec-Album GUID-4QueryStart-76', - 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-77', - 'zGenAlbum-Project Render UUID-4QueryStart-78', - 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-79', - 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-80', - 'zGenAlbum-Cloud_Local_State-4QueryStart-81', - 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-82', - 'ParentzGenAlbum- Creation Date- 4QueryStart-83', - 'zGenAlbum- Creation Date- 4QueryStart-84', - 'SWYConverszGenAlbum- Creation Date- 4QueryStart-85', - 'zGenAlbum- Cloud Creation Date- 4QueryStart-86', - 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-87', - 'zGenAlbum- Start Date- 4QueryStart-88', - 'SWYConverszGenAlbum- Start Date- 4QueryStart-89', - 'zGenAlbum- End Date- 4QueryStart-90', - 'SWYConverszGenAlbum- End Date- 4QueryStart-91', - 'zGenAlbum-Cloud Subscription Date- 4QueryStart-92', - 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-93', - 'ParentzGenAlbum- Title- 4QueryStart-94', - 'zGenAlbum- Title-User&System Applied- 4QueryStart-95', - 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-96', - 'zGenAlbum-Import Session ID-SWY- 4QueryStart-97', - 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-98', - 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-99', - 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-100', - 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-101', - 'SWYConverszGenAlbum- Syndicate-4QueryStart-102', - 'zGenAlbum-zENT- Entity- 4QueryStart-103', - 'ParentzGenAlbum- Kind- 4QueryStart-104', - 'zGenAlbum-Album Kind- 4QueryStart-105', - 'SWYConverszGenAlbum-Album Kind- 4QueryStart-106', - 'AAAzCldMastMedData-zOPT-107', - 'zAddAssetAttr-Media Metadata Type-108', - 'AAAzCldMastMedData-Data-109', - 'CldMasterzCldMastMedData-zOPT-110', - 'zCldMast-Media Metadata Type-111', - 'CMzCldMastMedData-Data-112', - 'zAsset-Search Index Rebuild State-113', - 'zAddAssetAttr-Syndication History-114', - 'zMedAnlyAstAttr-Syndication Processing Version-115', - 'zMedAnlyAstAttr-Syndication Processing Value-116', - 'zAsset-Orientation-117', - 'zAddAssetAttr-Original Orientation-118', - 'zAsset-Kind-119', - 'zAsset-Kind-Sub-Type-120', - 'zAddAssetAttr-Cloud Kind Sub Type-121', - 'zAsset-Playback Style-122', - 'zAsset-Playback Variation-123', - 'zAsset-Video Duration-124', - 'zExtAttr-Duration-125', - 'zAsset-Video CP Duration-126', - 'zAddAssetAttr-Video CP Duration Time Scale-127', - 'zAsset-Video CP Visibility State-128', - 'zAddAssetAttr-Video CP Display Value-129', - 'zAddAssetAttr-Video CP Display Time Scale-130', - 'zIntResou-Datastore Class ID-131', - 'zAsset-Cloud Placeholder Kind-132', - 'zIntResou-Local Availability-133', - 'zIntResou-Local Availability Target-134', - 'zIntResou-Cloud Local State-135', - 'zIntResou-Remote Availability-136', - 'zIntResou-Remote Availability Target-137', - 'zIntResou-Transient Cloud Master-138', - 'zIntResou-Side Car Index-139', - 'zIntResou- File ID-140', - 'zIntResou-Version-141', - 'zAddAssetAttr- Original-File-Size-142', - 'zIntResou-Resource Type-143', - 'zIntResou-Datastore Sub-Type-144', - 'zIntResou-Cloud Source Type-145', - 'zIntResou-Data Length-146', - 'zIntResou-Recipe ID-147', - 'zIntResou-Cloud Last Prefetch Date-148', - 'zIntResou-Cloud Prefetch Count-149', - 'zIntResou- Cloud-Last-OnDemand Download-Date-150', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-151', - 'zIntResou-Compact-UTI-152', - 'zAsset-Uniform Type ID-153', - 'zAsset-Original Color Space-154', - 'zCldMast-Uniform_Type_ID-155', - 'zCldMast-Full Size JPEG Source-156', - 'zAsset-HDR Gain-157', - 'zAsset-zHDR_Type-158', - 'zExtAttr-Codec-159', - 'zIntResou-Codec Four Char Code Name-160', - 'zCldMast-Codec Name-161', - 'zCldMast-Video Frame Rate-162', - 'zCldMast-Placeholder State-163', - 'zAsset-Depth_Type-164', - 'zAsset-Avalanche UUID-4TableStart-165', - 'zAsset-Avalanche_Pick_Type-BurstAsset-166', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-167', - 'zAddAssetAttr-Cloud Recovery State-168', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-169', - 'zAsset-Deferred Processing Needed-170', - 'zAsset-Video Deferred Processing Needed-171', - 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-172', - 'zAddAssetAttr-Deferred Processing Candidate Options-173', - 'zAsset-Has Adjustments-Camera-Effects-Filters-174', - 'zUnmAdj-UUID-4TableStart-175', - 'zAsset-Adjustment Timestamp-176', - 'zUnmAdj-Adjustment Timestamp-177', - 'zAddAssetAttr-Editor Bundle ID-178', - 'zUnmAdj-Editor Localized Name-179', - 'zUnmAdj-Adjustment Format ID-180', - 'zAddAssetAttr-Montage-181', - 'zUnmAdj-Adjustment Render Types-182', - 'zUnmAdj-Adjustment Format Version-183', - 'zUnmAdj-Adjustment Base Image Format-184', - 'zAsset-Favorite-185', - 'zAsset-Hidden-186', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-187', - 'zAsset-Trashed Date-188', - 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-189', - 'zAsset-Delete-Reason-190', - 'zIntResou-Trash State-191', - 'zIntResou-Trashed Date-192', - 'zAsset-Cloud Delete State-193', - 'zIntResou-Cloud Delete State-194', - 'zAddAssetAttr-PTP Trashed State-195', - 'zIntResou-PTP Trashed State-196', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-197', - 'zMedAnlyAstAttr-Media Analysis Timestamp-198', - 'zAsset-Analysis State Modificaion Date-199', - 'zAddAssetAttr- Pending View Count-200', - 'zAddAssetAttr- View Count-201', - 'zAddAssetAttr- Pending Play Count-202', - 'zAddAssetAttr- Play Count-203', - 'zAddAssetAttr- Pending Share Count-204', - 'zAddAssetAttr- Share Count-205', - 'zAddAssetAttr-Allowed for Analysis-206', - 'zAddAssetAttr-Scene Analysis Version-207', - 'zAddAssetAttr-Scene Analysis is From Preview-208', - 'zAddAssetAttr-Scene Analysis Timestamp-209', - 'zAsset-Duplication Asset Visibility State-210', - 'zAddAssetAttr-Destination Asset Copy State-211', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-212', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-213', - 'zCldMast-Source Master For Duplication Scope ID-214', - 'zAddAssetAttr-Source Asset For Duplication ID-215', - 'zCldMast-Source Master for Duplication ID-216', - 'zAddAssetAttr-Variation Suggestions States-217', - 'zAsset-High Frame Rate State-218', - 'zAsset-Video Key Frame Time Scale-219', - 'zAsset-Video Key Frame Value-220', - 'zExtAttr-ISO-221', - 'zExtAttr-Metering Mode-222', - 'zExtAttr-Sample Rate-223', - 'zExtAttr-Track Format-224', - 'zExtAttr-White Balance-225', - 'zExtAttr-Aperture-226', - 'zExtAttr-BitRate-227', - 'zExtAttr-Exposure Bias-228', - 'zExtAttr-Frames Per Second-229', - 'zExtAttr-Shutter Speed-230', - 'zExtAttr-Slush Scene Bias-231', - 'zExtAttr-Slush Version-232', - 'zExtAttr-Slush Preset-233', - 'zExtAttr-Slush Warm Bias-234', - 'zAsset-Height-235', - 'zAddAssetAttr-Original Height-236', - 'zIntResou-Unoriented Height-237', - 'zAsset-Width-238', - 'zAddAssetAttr-Original Width-239', - 'zIntResou-Unoriented Width-240', - 'zShare-Thumbnail Image Data-241', - 'SPLzShare-Thumbnail Image Data-242', - 'zAsset-Thumbnail Index-243', - 'zAddAssetAttr-Embedded Thumbnail Height-244', - 'zAddAssetAttr-Embedded Thumbnail Length-245', - 'zAddAssetAttr-Embedded Thumbnail Offset-246', - 'zAddAssetAttr-Embedded Thumbnail Width-247', - 'zAsset-Packed Acceptable Crop Rect-248', - 'zAsset-Packed Badge Attributes-249', - 'zAsset-Packed Preferred Crop Rect-250', - 'zAsset-Curation Score-251', - 'zAsset-Camera Processing Adjustment State-252', - 'zAsset-Depth Type-253', - 'zAsset-Is Magic Carpet-QuicktimeMOVfile-254', - 'zAddAssetAttr-Orig Resource Choice-255', - 'zAddAssetAttr-Spatial Over Capture Group ID-256', - 'zAddAssetAttr-Place Annotation Data-257', - 'zAddAssetAttr-Distance Identity-258', - 'zAddAssetAttr-Edited IPTC Attributes-259', - 'zAssetDes-Long Description-260', - 'zAddAssetAttr-Asset Description-261', - 'zAddAssetAttr-Title-Comments via Cloud Website-262', - 'zAddAssetAttr-Accessibility Description-263', - 'zAddAssetAttr-Photo Stream Tag ID-264', - 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-265', - 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-266', - 'zCldFeedEnt-Entry Date-267', - 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-268', - 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-269', - 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-270', - 'zCldFeedEnt-Entry Priority Number-271', - 'zCldFeedEnt-Entry Type Number-272', - 'zCldSharedComment-Cloud GUID-4TableStart-273', - 'zCldSharedComment-Date-274', - 'zCldSharedComment-Comment Client Date-275', - 'zAsset-Cloud Last Viewed Comment Date-276', - 'zCldSharedComment-Type-277', - 'zCldSharedComment-Comment Text-278', - 'zCldSharedComment-Commenter Hashed Person ID-279', - 'zCldSharedComment-Batch Comment-280', - 'zCldSharedComment-Is a Caption-281', - 'zAsset-Cloud Has Comments by Me-282', - 'zCldSharedComment-Is My Comment-283', - 'zCldSharedComment-Is Deletable-284', - 'zAsset-Cloud Has Comments Conversation-285', - 'zAsset-Cloud Has Unseen Comments-286', - 'zCldSharedComment-Liked-287', - 'zAddAssetAttr-Share Type-288', - 'zAsset-Library Scope Share State- StillTesting-289', - 'zAsset-Active Library Scope Participation State-290', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-291', - 'zShare-UUID-CMM-4TableStart-292', - 'SPLzShare-UUID-SPL-4TableStart-293', - 'zShare-zENT-CMM-294', - 'SPLzShare-zENT-SPL-295', - 'zSharePartic-z54SHARE-296', - 'SPLzSharePartic-z54SHARE-297', - 'zShare-Status-CMM-298', - 'SPLzShare-Status-SPL-299', - 'zShare-Scope Type-CMM-300', - 'SPLzShare-Scope Type-SPL-301', - 'zShare-Local Publish State-CMM-302', - 'SPLzShare-Local Publish State-SPL-303', - 'zShare-Public Permission-CMM-304', - 'SPLzShare-Public Permission-SPL-305', - 'zShare-Originating Scope ID-CMM-306', - 'SPLzShare-Originating Scope ID-SPL-307', - 'zShare-Scope ID-CMM-308', - 'SPLzShare-Scope ID-SPL-309', - 'zShare-Title-CMM-310', - 'SPLzShare-Title-SPL-311', - 'zShare-Share URL-CMM-312', - 'SPLzShare-Share URL-SPL-313', - 'zShare-Creation Date-CMM-314', - 'SPLzShare-Creation Date-SPL-315', - 'zShare-Start Date-CMM-316', - 'SPLzShare-Start Date-SPL-317', - 'zShare-End Date-CMM-318', - 'SPLzShare-End Date-SPL-319', - 'zShare-Expiry Date-CMM-320', - 'SPLzShare-Expiry Date-SPL-321', - 'zShare-Cloud Item Count-CMM-322', - 'SPLzShare-Cloud Item Count-SPL-323', - 'zShare-Asset Count-CMM-324', - 'SPLzShare-Asset Count-SPL-325', - 'zShare-Cloud Photo Count-CMM-326', - 'SPLzShare-Cloud Photo Count-SPL-327', - 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-328', - 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-329', - 'zShare-Photos Count-CMM-330', - 'SPLzShare-Photos Count-CMM-SPL-331', - 'zShare-Uploaded Photos Count-CMM-332', - 'SPLzShare-Uploaded Photos Count-SPL-333', - 'zShare-Cloud Video Count-CMM-334', - 'SPLzShare-Cloud Video Count-SPL-335', - 'zShare-Videos Count-CMM-336', - 'SPLzShare-Videos Count-SPL-337', - 'zShare-Uploaded Videos Count-CMM-338', - 'SPLzShare-Uploaded Videos Count-SPL-339', - 'zShare-Force Sync Attempted-CMM-340', - 'SPLzShare-Force Sync Attempted-SPL-341', - 'zShare-Cloud Local State-CMM-342', - 'SPLzShare-Cloud Local State-SPL-343', - 'zShare-Scope Syncing State-CMM-344', - 'SPLzShare-Scope Syncing State-SPL-345', - 'zShare-Auto Share Policy-CMM-346', - 'SPLzShare-Auto Share Policy-SPL-347', - 'zShare-Should Notify On Upload Completion-CMM-348', - 'SPLzShare-Should Notify On Upload Completion-SPL-349', - 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-350', - 'zShare-Trashed State-CMM-351', - 'SPLzShare-Trashed State-SPL-352', - 'zShare-Cloud Delete State-CMM-353', - 'SPLzShare-Cloud Delete State-SPL-354', - 'zShare-Trashed Date-CMM-355', - 'SPLzShare-Trashed Date-SPL-356', - 'zShare-LastParticipant Asset Trash Notification Date-CMM-357', - 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL-358', - 'zShare-Last Participant Asset Trash Notification View Date-CMM-359', - 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL-360', - 'zShare-Exit Source-CMM-361', - 'SPLzShare-Exit Source-SPL-362', - 'zShare-SPL_Exit State-CMM-363', - 'SPLzShare-SPL_Exit State-SPL-364', - 'zShare-Exit Type-CMM-365', - 'SPLzShare-Exit Type-SPL-366', - 'zShare-Should Ignor Budgets-CMM-367', - 'SPLzShare-Should Ignor Budgets-SPL-368', - 'zShare-Preview State-CMM-369', - 'SPLzShare-Preview State-SPL-370', - 'zShare-Preview Data-CMM-371', - 'SPLzShare-Preview Data-SPL-372', - 'zShare-Rules-CMM-373', - 'SPLzShare-Rules-SPL-374', - 'zShare-Thumbnail Image Data-CMM-375', - 'SPLzShare-Thumbnail Image Data-SPL-376', - 'zShare-Participant Cloud Update State-CMM-377', - 'SPLzShare-Participant Cloud Update State-SPL-378', - 'zSharePartic-UUID-4TableStart-379', - 'SPLzSharePartic-UUID-4TableStart-380', - 'zSharePartic-Acceptance Status-381', - 'SPLzSharePartic-Acceptance Status-382', - 'zSharePartic-Is Current User-383', - 'SPLzSharePartic-Is Current User-384', - 'zSharePartic-Role-385', - 'SPLzSharePartic-Role-386', - 'zSharePartic-Premission-387', - 'SPLzSharePartic-Premission-388', - 'zSharePartic-Participant ID-389', - 'SPLzSharePartic-Participant ID-390', - 'zSharePartic-User ID-391', - 'SPLzSharePartic-User ID-392', - 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-393', - 'SPLzSharePartic-zPK-4TableStart-394', - 'zSharePartic-zPK-4TableStart-395', - 'zSharePartic-Email Address-396', - 'SPLzSharePartic-Email Address-397', - 'zSharePartic-Phone Number-398', - 'SPLzSharePartic-Phone Number-399', - 'zSharePartic-Exit State-400', - 'SPLzSharePartic-Exit State-401', - 'ParentzGenAlbum-UUID-4TableStart-402', - 'zGenAlbum-UUID-4TableStart-403', - 'SWYConverszGenAlbum-UUID-4TableStart-404', - 'ParentzGenAlbum-Cloud GUID-4TableStart-405', - 'zGenAlbum-Cloud GUID-4TableStart-406', - 'SWYConverszGenAlbum-Cloud GUID-4TableStart-407', - 'zCldShareAlbumInvRec-Album GUID-4TableStart-408', - 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-409', - 'zGenAlbum-Project Render UUID-4TableStart-410', - 'SWYConverszGenAlbum-Project Render UUID-4TableStart-411', - 'zAlbumList-Needs Reordering Number-412', - 'zGenAlbum-zENT- Entity-413', - 'ParentzGenAlbum-Kind-414', - 'zGenAlbum-Album Kind-415', - 'SWYConverszGenAlbum-Album Kind-416', - 'ParentzGenAlbum-Cloud-Local-State-417', - 'zGenAlbum-Cloud_Local_State-418', - 'SWYConverszGenAlbum-Cloud_Local_State-419', - 'ParentzGenAlbum- Title-420', - 'zGenAlbum- Title-User&System Applied-421', - 'SWYConverszGenAlbum- Title -User&System Applied-422', - 'zGenAlbum-Import Session ID-SWY-423', - 'zAsset- Conversation= zGenAlbum_zPK-424', - 'SWYConverszGenAlbum- Import Session ID-SWY-425', - 'zGenAlbum-Imported by Bundle Identifier-426', - 'SWYzGenAlbum-Imported by Bundle Identifier-427', - 'SWYConverszGenAlbum- Syndicate-428', - 'ParentzGenAlbum-Creation Date-429', - 'zGenAlbum-Creation Date-430', - 'SWYConverszGenAlbum-Creation Date-431', - 'zGenAlbum-Cloud Creation Date-432', - 'SWYConverszGenAlbum-Cloud Creation Date-433', - 'zGenAlbum-Start Date-434', - 'SWYConverszGenAlbum-Start Date-435', - 'zGenAlbum-End Date-436', - 'SWYConverszGenAlbum-End Date-437', - 'zGenAlbum-Cloud Subscription Date-438', - 'SWYConverszGenAlbum-Cloud Subscription Date-439', - 'ParentzGenAlbum-Pending Items Count-440', - 'zGenAlbum-Pending Items Count-441', - 'SWYConverszGenAlbum-Pending Items Count-442', - 'ParentzGenAlbum-Pending Items Type-443', - 'zGenAlbum-Pending Items Type-444', - 'SWYConverszGenAlbum-Pending Items Type-445', - 'zGenAlbum- Cached Photos Count-446', - 'SWYConverszGenAlbum- Cached Photos Count-447', - 'zGenAlbum- Cached Videos Count-448', - 'SWYConverszGenAlbum- Cached Videos Count-449', - 'zGenAlbum- Cached Count-450', - 'SWYConverszGenAlbum- Cached Count-451', - 'ParentzGenAlbum-Sync Event Order Key-452', - 'zGenAlbum-Sync Event Order Key-453', - 'SWYConverszGenAlbum-Sync Event Order Key-454', - 'zGenAlbum-Has Unseen Content-455', - 'SWYConverszGenAlbum-Has Unseen Content-456', - 'zGenAlbum-Unseen Asset Count-457', - 'SWYConverszGenAlbum-Unseen Asset Count-458', - 'zGenAlbum-is Owned-459', - 'SWYConverszGenAlbum-is Owned-460', - 'zGenAlbum-Cloud Relationship State-461', - 'SWYConverszGenAlbum-Cloud Relationship State-462', - 'zGenAlbum-Cloud Relationship State Local-463', - 'SWYConverszGenAlbum-Cloud Relationship State Local-464', - 'zGenAlbum-Cloud Owner Mail Key-465', - 'SWYConverszGenAlbum-Cloud Owner Mail Key-466', - 'zGenAlbum-Cloud Owner Frist Name-467', - 'SWYConverszGenAlbum-Cloud Owner Frist Name-468', - 'zGenAlbum-Cloud Owner Last Name-469', - 'SWYConverszGenAlbum-Cloud Owner Last Name-470', - 'zGenAlbum-Cloud Owner Full Name-471', - 'SWYConverszGenAlbum-Cloud Owner Full Name-472', - 'zGenAlbum-Cloud Person ID-473', - 'SWYConverszGenAlbum-Cloud Person ID-474', - 'zAsset-Cloud Owner Hashed Person ID-475', - 'zGenAlbum-Cloud Owner Hashed Person ID-476', - 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-477', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-478', - 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-479', - 'zGenAlbum-Cloud Multi-Contributors Enabled-480', - 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-481', - 'zGenAlbum-Cloud Album Sub Type-482', - 'SWYConverszGenAlbum-Cloud Album Sub Type-483', - 'zGenAlbum-Cloud Contribution Date-484', - 'SWYConverszGenAlbum-Cloud Contribution Date-485', - 'zGenAlbum-Cloud Last Interesting Change Date-486', - 'SWYConverszGenAlbum-Cloud Last Interesting Change Date-487', - 'zGenAlbum-Cloud Notification Enabled-488', - 'SWYConverszGenAlbum-Cloud Notification Enabled-489', - 'ParentzGenAlbum-Pinned-490', - 'zGenAlbum-Pinned-491', - 'SWYConverszGenAlbum-Pinned-492', - 'ParentzGenAlbum-Custom Sort Key-493', - 'zGenAlbum-Custom Sort Key-494', - 'SWYConverszGenAlbum-Custom Sort Key-495', - 'ParentzGenAlbum-Custom Sort Ascending-496', - 'zGenAlbum-Custom Sort Ascending-497', - 'SWYConverszGenAlbum-Custom Sort Ascending-498', - 'ParentzGenAlbum-Is Prototype-499', - 'zGenAlbum-Is Prototype-500', - 'SWYConverszGenAlbum-Is Prototype-501', - 'ParentzGenAlbum-Project Document Type-502', - 'zGenAlbum-Project Document Type-503', - 'SWYConverszGenAlbum-Project Document Type-504', - 'ParentzGenAlbum-Custom Query Type-505', - 'zGenAlbum-Custom Query Type-506', - 'SWYConverszGenAlbum-Custom Query Type-507', - 'ParentzGenAlbum-Trashed State-508', - 'ParentzGenAlbum-Trash Date-509', - 'zGenAlbum-Trashed State-510', - 'zGenAlbum-Trash Date-511', - 'SWYConverszGenAlbum-Trashed State-512', - 'SWYConverszGenAlbum-Trash Date-513', - 'ParentzGenAlbum-Cloud Delete State-514', - 'zGenAlbum-Cloud Delete State-515', - 'SWYConverszGenAlbum-Cloud Delete State-516', - 'zGenAlbum-Cloud Owner Whitelisted-517', - 'SWYConverszGenAlbum-Cloud Owner Whitelisted-518', - 'zGenAlbum-Cloud Local Public URL Enabled-519', - 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-520', - 'zGenAlbum-Cloud Public URL Enabled-521', - 'zGenAlbum-Public URL-522', - 'SWYConverszGenAlbum-Cloud Public URL Enabled-523', - 'SWYConverszGenAlbum-Public URL-524', - 'zGenAlbum-Key Asset Face Thumb Index-525', - 'SWYConverszGenAlbum-Key Asset Face Thumb Index-526', - 'zGenAlbum-Project Text Extension ID-527', - 'SWYConverszGenAlbum-Project Text Extension ID-528', - 'zGenAlbum-User Query Data-529', - 'SWYConverszGenAlbum-User Query Data-530', - 'zGenAlbum-Custom Query Parameters-531', - 'SWYConverszGenAlbum-Custom Query Parameters-532', - 'zGenAlbum-Project Data-533', - 'SWYConverszGenAlbum-Project Data-534', - 'zGenAlbum-Search Index Rebuild State-535', - 'SWYConverszGenAlbum-Search Index Rebuild State-536', - 'zGenAlbum-Duplicate Type-537', - 'SWYConverszGenAlbum-Duplicate Type-538', - 'zGenAlbum-Privacy State-539', - 'SWYConverszGenAlbum-Privacy State-540', - 'zCldShareAlbumInvRec-zUUID-4TableStart-541', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-542', - 'zCldShareAlbumInvRec-Invitation State Local-543', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-544', - 'zCldShareAlbumInvRec-Subscription Date-545', - 'zCldShareAlbumInvRec-Invitee First Name-546', - 'zCldShareAlbumInvRec-Invitee Last Name-547', - 'zCldShareAlbumInvRec-Invitee Full Name-548', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-549', - 'zCldShareAlbumInvRec-Invitee Email Key-550', - 'zGenAlbum-Key Asset Face ID-551', - 'zFaceCrop-Face Area Points-552', - 'zAsset-Face Adjustment Version-553', - 'zAddAssetAttr-Face Analysis Version-554', - 'zDetFace-Asset Visible-555', - 'zPerson-Face Count-556', - 'zDetFace-Face Crop-557', - 'zDetFace-Face Algorithm Version-558', - 'zDetFace-Adjustment Version-559', - 'zDetFace-UUID-4TableStart-560', - 'zPerson-Person UUID-4TableStart-561', - 'zDetFace-Confirmed Face Crop Generation State-562', - 'zDetFace-Manual-563', - 'zDetFace-Detection Type-564', - 'zPerson-Detection Type-565', - 'zDetFace-VIP Model Type-566', - 'zDetFace-Name Source-567', - 'zDetFace-Cloud Name Source-568', - 'zPerson-Merge Candidate Confidence-569', - 'zPerson-Person URI-570', - 'zPerson-Display Name-571', - 'zPerson-Full Name-572', - 'zPerson-Cloud Verified Type-573', - 'zFaceCrop-State-574', - 'zFaceCrop-Type-575', - 'zFaceCrop-UUID-4TableStart-576', - 'zPerson-Type-577', - 'zPerson-Verified Type-578', - 'zPerson-Gender Type-579', - 'zDetFace-Gender Type-580', - 'zDetFace-Center X-581', - 'zDetFace-Center Y-582', - 'zPerson-Age Type Estimate-583', - 'zDetFace-Age Type Estimate-584', - 'zDetFace-Ethnicity Type-585', - 'zDetFace-Skin Tone Type-586', - 'zDetFace-Hair Type-587', - 'zDetFace-Hair Color Type-588', - 'zDetFace-Head Gear Type-589', - 'zDetFace-Facial Hair Type-590', - 'zDetFace-Has Face Mask-591', - 'zDetFace-Pose Type-592', - 'zDetFace-Face Expression Type-593', - 'zDetFace-Has Smile-594', - 'zDetFace-Smile Type-595', - 'zDetFace-Lip Makeup Type-596', - 'zDetFace-Eyes State-597', - 'zDetFace-Is Left Eye Closed-598', - 'zDetFace-Is Right Eye Closed-599', - 'zDetFace-Gaze Center X-600', - 'zDetFace-Gaze Center Y-601', - 'zDetFace-Face Gaze Type-602', - 'zDetFace-Eye Glasses Type-603', - 'zDetFace-Eye Makeup Type-604', - 'zDetFace-Cluster Squence Number Key-605', - 'zDetFace-Grouping ID-606', - 'zDetFace-Master ID-607', - 'zDetFace-Quality-608', - 'zDetFace-Quality Measure-609', - 'zDetFace-Source Height-610', - 'zDetFace-Source Width-611', - 'zDetFace-Hidden-Asset Hidden-612', - 'zDetFace-In Trash-Recently Deleted-613', - 'zDetFace-Cloud Local State-614', - 'zDetFace-Training Type-615', - 'zDetFace.Pose Yaw-616', - 'zDetFace-Body Center X-617', - 'zDetFace-Body Center Y-618', - 'zDetFace-Body Height-619', - 'zDetFace-Body Width-620', - 'zDetFace-Roll-621', - 'zDetFace-Size-622', - 'zDetFace-Cluster Squence Number-623', - 'zDetFace-Blur Score-624', - 'zDetFacePrint-Face Print Version-625', - 'zMedAnlyAstAttr-Face Count-626', - 'zDetFaceGroup-UUID-4TableStart-627', - 'zDetFaceGroup-Person Builder State-628', - 'zDetFaceGroup-UnNamed Face Count-629', - 'zPerson-In Person Naming Model-630', - 'zPerson-Key Face Pick Source Key-631', - 'zPerson-Manual Order Key-632', - 'zPerson-Question Type-633', - 'zPerson-Suggested For Client Type-634', - 'zPerson-Merge Target Person-635', - 'zPerson-Cloud Local State-636', - 'zFaceCrop-Cloud Local State-637', - 'zFaceCrop-Cloud Type-638', - 'zPerson-Cloud Delete State-639', - 'zFaceCrop-Cloud Delete State-640', - 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-641', - 'zAsset-Highlight Visibility Score-642', - 'zMemory-UUID-4TableStart-643', - 'zMemory-AssetListPredicte-644', - 'zMemory-Score-645', - 'zMemory-SubTitle-646', - 'zMemory-Title-647', - 'zMemory-Category-648', - 'zMemory-SubCategory-649', - 'zMemory-Creation Date-650', - 'zMemory-Last Enrichment Date-651', - 'zMemory-User Action Options-652', - 'zMemory-Favorite Memory-653', - 'zMemory-View Count-654', - 'zMemory-Play Count-655', - 'zMemory-Rejected-656', - 'zMemory-Share Count-657', - 'zMemory-Sharing Composition-658', - 'zMemory-Last Movie Play Date-659', - 'zMemory-Last Viewed Date-660', - 'zMemory-Pending Play Count Memory-661', - 'zMemory-Pending Share Count Memory-662', - 'zMemory-Pending View Count Memory-663', - 'zMemory-Pending State-664', - 'zMemory-Featured State-665', - 'zMemory-Photos Graph Version-666', - 'zMemory-Graph Memory Identifier-667', - 'zMemory-Notification State-668', - 'zMemory-Cloud Local State-669', - 'zMemory-Cloud Delete State-670', - 'zMemory-Story Color Grade Kind-671', - 'zMemory-Story Serialized Title Category-672', - 'zMemory-Syndicated Content State-673', - 'zMemory-Search Index Rebuild State-674', - 'zMemory-Black Listed Feature-675', - 'zMoment-UUID-4TableStart-676', - 'zMoment-Aggregation Score-677', - 'zMoment-Start Date-678', - 'zMoment-Representative Date-679', - 'zMoment-Timezone Offset-680', - 'zMoment-Modification Date-681', - 'zMoment-End Date-682', - 'zMoment-SubTitle-683', - 'zMoment-Title-684', - 'zMoment-Originator State-685', - 'zMoment-Sharing Composition-686', - 'zMoment-Cached Count Shared-687', - 'zMoment-Processed Location-688', - 'zMoment-Approx Latitude-689', - 'zMoment-Approx Longitude-690', - 'zMoment-GPS Horizontal Accuracy-691', - 'zMoment-Cache Count-692', - 'zMoment-Cached Photos Count-693', - 'zMoment-Cached Videos Count-694', - 'zMoment-Trashed State-695', - 'SBKAzSugg-UUID-4TableStart-696', - 'SBKAzSugg-Suggestion Context-697', - 'SBKAzSugg-Sharing Composition-698', - 'SBKAzSugg-Start Date-699', - 'SBKAzSugg-State-700', - 'SBKAzSugg-Featured State-701', - 'SBKAzSugg-Notification State-702', - 'SBKAzSugg-Creation Date-703', - 'SBKAzSugg-End Date-704', - 'SBKAzSugg-Activation Date-705', - 'SBKAzSugg-Expunge Date-706', - 'SBKAzSugg-Relevant Until Date-707', - 'SBKAzSugg-Title-708', - 'SBKAzSugg-Sub Title-709', - 'SBKAzSugg-Cached Count-710', - 'SBKAzSugg-Cahed Photos Count-711', - 'SBKAzSugg-Cached Videos Count-712', - 'SBKAzSugg-Type-713', - 'SBKAzSugg-Sub Type-714', - 'SBKAzSugg-Action Data-715', - 'SBKAzSugg-Version-716', - 'SBKAzSugg-Cloud Local State-717', - 'SBKAzSugg-Cloud Delete State-718', - 'SBRAzSugg-UUID-4TableStart-719', - 'SBRAzSugg-Suggestion Context-720', - 'SBRAzSugg-Sharing Composition-721', - 'SBRAzSugg-Start Date-722', - 'SBRAzSugg-State-723', - 'SBRAzSugg-Featured State-724', - 'SBRAzSugg-Notification State-725', - 'SBRAzSugg-Creation Date-726', - 'SBRAzSugg-End Date-727', - 'SBRAzSugg-Activation Date-728', - 'SBRAzSugg-Expunge Date-729', - 'SBRAzSugg-Relevant Until Date-730', - 'SBRAzSugg-Title-731', - 'SBRAzSugg-Sub Title-732', - 'SBRAzSugg-Cached Count-733', - 'SBRAzSugg-Cahed Photos Count-734', - 'SBRAzSugg-Cached Videos Count-735', - 'SBRAzSugg-Type-736', - 'SBRAzSugg-Sub Type-737', - 'SBRAzSugg-Action Data-738', - 'SBRAzSugg-Version-739', - 'SBRAzSugg-Cloud Local State-740', - 'SBRAzSugg-Cloud Delete State-741', - 'zMedAnlyAstAttr-Media Analysis Version-742', - 'zMedAnlyAstAttr-Audio Classification-743', - 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-744', - 'zMedAnlyAstAttr-Best Video Range Start Time Scale-745', - 'zMedAnlyAstAttr-Best Video Range Duration Value-746', - 'zMedAnlyAstAttr-Best Video Range Start Value-747', - 'zMedAnlyAstAttr-Packed Best Playback Rect-748', - 'zMedAnlyAstAttr-Activity Score-749', - 'zMedAnlyAstAttr-Video Score-750', - 'zMedAnlyAstAttr-Audio Score-751', - 'zMedAnlyAstAttr-Wallpaper Score-752', - 'zMedAnlyAstAttr-AutoPlay Suggestion Score-753', - 'zMedAnlyAstAttr-Blurriness Score-754', - 'zMedAnlyAstAttr-Exposure Score-755', - 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-756', - 'zMedAnlyAstAttr-Probable Rotation Direction-757', - 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-758', - 'zAssetAnalyState-Asset UUID-4TableStart-759', - 'zAssetAnalyState-Analyisis State-760', - 'zAssetAnalyState-Worker Flags-761', - 'zAssetAnalyState-Worker Type-762', - 'zAssetAnalyState-Ignore Until Date-763', - 'zAssetAnalyState-Last Ignored Date-764', - 'zAssetAnalyState-Sort Token-765', - 'zMedAnlyAstAttr-Character Recognition Attr-766', - 'zCharRecogAttr-Algorithm Version-767', - 'zCharRecogAttr-Adjustment Version-768', - 'zMedAnlyAstAttr-Visual Search Attributes-769', - 'zVisualSearchAttr-Algorithm Version-770', - 'zVisualSearchAttr-Adjustment Version-771', - 'zAsset-Overall Aesthetic Score-772', - 'zCompAssetAttr-Behavioral Score-773', - 'zCompAssetAttr-Failure Score zCompAssetAttr-774', - 'zCompAssetAttr-Harmonious Color Score-775', - 'zCompAssetAttr-Immersiveness Score-776', - 'zCompAssetAttr-Interaction Score-777', - 'zCompAssetAttr-Intersting Subject Score-778', - 'zCompAssetAttr-Intrusive Object Presence Score-779', - 'zCompAssetAttr-Lively Color Score-780', - 'zCompAssetAttr-Low Light-781', - 'zCompAssetAttr-Noise Score-782', - 'zCompAssetAttr-Pleasant Camera Tilt Score-783', - 'zCompAssetAttr-Pleasant Composition Score-784', - 'zCompAssetAttr-Pleasant Lighting Score-785', - 'zCompAssetAttr-Pleasant Pattern Score-786', - 'zCompAssetAttr-Pleasant Perspective Score-787', - 'zCompAssetAttr-Pleasant Post Processing Score-788', - 'zCompAssetAttr-Pleasant Reflection Score-789', - 'zCompAssetAttrPleasant Symmetry Score-790', - 'zCompAssetAttr-Sharply Focused Subject Score-791', - 'zCompAssetAttr-Tastfully Blurred Score-792', - 'zCompAssetAttr-Well Chosen Subject Score-793', - 'zCompAssetAttr-Well Framed Subject Score-794', - 'zCompAssetAttr-Well Timeed Shot Score-795', - 'zCldRes-Asset UUID-4TableStart-796', - 'zCldRes-Cloud Local State-797', - 'zCldRes-File Size-798', - 'zCldRes-Height-799', - 'zCldRes-Is Available-800', - 'zCldRes-Is Locally Available-801', - 'zCldRes-Prefetch Count-802', - 'zCldRes-Source Type-803', - 'zCldRes-Type-804', - 'zCldRes-Width-805', - 'zCldRes-Date Created-806', - 'zCldRes-Last OnDemand Download Date-807', - 'zCldRes-Last Prefetch Date-808', - 'zCldRes-Prunedat-809', - 'zCldRes-File Path-810', - 'zCldRes-Fingerprint-811', - 'zCldRes-Item ID-812', - 'zCldRes-UniID-813', - 'zUserFeedback-UUID-4TableStart-814', - 'zUserFeedback-Feature-815', - 'zUserFeedback-Type-816', - 'zUserFeedback-Last Modified Date-817', - 'zUserFeedback-Context-818', - 'zUserFeedback-Cloud Local State-819', - 'zUserFeedback-Cloud Delete State-820', - 'zAddAssetAttr-zPK-821', - 'zAddAssetAttr-zENT-822', - 'ZAddAssetAttr-zOPT-823', - 'zAddAssetAttr-zAsset= zAsset_zPK-824', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-825', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-826', - 'zAddAssetAttr-Master Fingerprint-827', - 'zAddAssetAttr-Public Global UUID-828', - 'zAddAssetAttr-Deferred Photo Identifier-829', - 'zAddAssetAttr-Original Assets UUID-830', - 'zAddAssetAttr-Import Session ID-831', - 'zAddAssetAttr-Originating Asset Identifier-832', - 'zAddAssetAttr.Adjusted Fingerprint-833', - 'zAlbumList-zPK= Album List Key-834', - 'zAlbumList-zENT-835', - 'zAlbumList-zOPT-836', - 'zAlbumList-ID Key-837', - 'zAlbumList-UUID-838', - 'zAsset-zPK-839', - 'zAsset-zENT-840', - 'zAsset-zOPT-841', - 'zAsset-Master= zCldMast-zPK-842', - 'zAsset-Extended Attributes= zExtAttr-zPK-843', - 'zAsset-Import Session Key-844', - 'zAsset-Trashed by Participant= zSharePartic_zPK-845', - 'zAsset-Photo Analysis Attributes Key-846', - 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-847', - 'zAsset-FOK-Cloud Feed Asset Entry Key-848', - 'zAsset-Moment Share Key= zShare-zPK-849', - 'zAsset-zMoment Key= zMoment-zPK-850', - 'zAsset-Computed Attributes Asset Key-851', - 'zAsset-Highlight Being Assets-HBA Key-852', - 'zAsset-Highlight Being Extended Assets-HBEA Key-853', - 'zAsset-Highlight Being Key Asset Private-HBKAP Key-854', - 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-855', - 'zAsset-Highligh Being Summary Assets-HBSA Key-856', - 'zAsset-Day Group Highlight Being Assets-DGHBA Key-857', - 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-858', - 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-859', - 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-860', - 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-861', - 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-862', - 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-863', - 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-864', - 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-865', - 'zAsset-Promotion Score-866', - 'zAsset-Media Analysis Attributes Key-867', - 'zAsset-Media Group UUID-868', - 'zAsset-UUID = store.cloudphotodb-869', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-870', - 'zAsset.Cloud Collection GUID-871', - 'zAsset-Avalanche UUID-872', - 'zAssetAnalyState-zPK-873', - 'zAssetAnalyState-zEnt-874', - 'zAssetAnalyState-zOpt-875', - 'zAssetAnalyState-Asset= zAsset-zPK-876', - 'zAssetAnalyState-Asset UUID-877', - 'zAsstContrib-zPK-878', - 'zAsstContrib-zEnt-879', - 'zAsstContrib-zOpt-880', - 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-881', - 'zAsstContrib-Participant= zSharePartic-zPK-882', - 'zAssetDes-zPK-883', - 'zAssetDes-zENT-884', - 'zAssetDes-zOPT-885', - 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-886', - 'zCharRecogAttr-zPK-887', - 'zCharRecogAttr-zENT-888', - 'zCharRecogAttr-zOPT-889', - 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-890', - 'zCldFeedEnt-zPK= zCldShared keys-891', - 'zCldFeedEnt-zENT-892', - 'zCldFeedEnt-zOPT-893', - 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-894', - 'zCldFeedEnt-Entry Invitation Record GUID-895', - 'zCldFeedEnt-Entry Cloud Asset GUID-896', - 'zCldMast-zPK= zAsset-Master-897', - 'zCldMast-zENT-898', - 'zCldMast-zOPT-899', - 'zCldMast-Moment Share Key= zShare-zPK-900', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-901', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-902', - 'zCldMast-Originating Asset ID-903', - 'zCldMast-Import Session ID- AirDrop-StillTesting-904', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-905', - 'CMzCldMastMedData-zENT-906', - 'CMzCldMastMedData-zOPT-907', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-908', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-909', - 'AAAzCldMastMedData-zENT-910', - 'AAAzCldMastMedData-zOPT-911', - 'AAAzCldMastMedData-CldMast key-912', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-913', - 'zCldRes-zPK-914', - 'zCldRes-zENT-915', - 'zCldRes-zOPT-916', - 'zCldRes-Asset= zAsset-zPK-917', - 'zCldRes-Cloud Master= zCldMast-zPK-918', - 'zCldRes-Asset UUID-919', - 'zCldShareAlbumInvRec-zPK-920', - 'zCldShareAlbumInvRec-zEnt-921', - 'zCldShareAlbumInvRec-zOpt-922', - 'zCldShareAlbumInvRec-Album Key-923', - 'zCldShareAlbumInvRec-FOK Album Key-924', - 'zCldShareAlbumInvRec-Album GUID-925', - 'zCldShareAlbumInvRec-zUUID-926', - 'zCldShareAlbumInvRec-Cloud GUID-927', - 'zCldSharedComment-zPK-928', - 'zCldSharedComment-zENT-929', - 'zCldSharedComment-zOPT-930', - 'zCldSharedComment-Commented Asset Key= zAsset-zPK-931', - 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-932', - 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-933', - 'zCldSharedComment-Liked Asset Key= zAsset-zPK-934', - 'zCldSharedComment-CldFeedLikeCommentEntry Key-935', - 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-936', - 'zCldSharedComment-Cloud GUID-937', - 'zCompAssetAttr-zPK-938', - 'zCompAssetAttr-zEnt-939', - 'zCompAssetAttr-zOpt-940', - 'zCompAssetAttr-Asset Key-941', - 'zDetFace-zPK-942', - 'zDetFace-zEnt-943', - 'zDetFace.zOpt-944', - 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-945', - 'zDetFace-Person= zPerson-zPK-946', - 'zDetFace-Person Being Key Face-947', - 'zDetFace-Face Print-948', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-949', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-950', - 'zDetFace-UUID-951', - 'zDetFaceGroup-zPK-952', - 'zDetFaceGroup-zENT-953', - 'zDetFaceGroup-zOPT-954', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-955', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-956', - 'zDetFaceGroup-UUID-957', - 'zDetFacePrint-zPK-958', - 'zDetFacePrint-zEnt-959', - 'zDetFacePrint-zOpt-960', - 'zDetFacePrint-Face Key-961', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-962', - 'zExtAttr-zENT-963', - 'zExtAttr-zOPT-964', - 'zExtAttr-Asset Key-965', - 'zFaceCrop-zPK-966', - 'zFaceCrop-zEnt-967', - 'zFaceCrop-zOpt-968', - 'zFaceCrop-Asset Key-969', - 'zFaceCrop-Invalid Merge Canidate Person UUID-970', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-971', - 'zFaceCrop-Face Key-972', - 'zFaceCrop-UUID-973', - 'zGenAlbum-zPK=26AlbumLists= 26Albums-974', - 'zGenAlbum-zENT-975', - 'zGenAlbum-zOpt-976', - 'zGenAlbum-Key Asset-Key zAsset-zPK-977', - 'zGenAlbum-Secondary Key Asset-978', - 'zGenAlbum-Tertiary Key Asset-979', - 'zGenAlbum-Custom Key Asset-980', - 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-981', - 'zGenAlbum-FOK Parent Folder-982', - 'zGenAlbum-zSyndicate-983', - 'zGenAlbum-UUID-984', - 'SWYConverszGenAlbum-UUID-985', - 'zGenAlbum-Cloud_GUID = store.cloudphotodb-986', - 'SWYConverszGenAlbum-Cloud GUID-987', - 'zGenAlbum-Project Render UUID-988', - 'SWYConverszGenAlbum-Project Render UUID-989', - 'zIntResou-zPK-990', - 'zIntResou-zENT-991', - 'zIntResou-zOPT-992', - 'zIntResou-Asset= zAsset_zPK-993', - 'zIntResou-Fingerprint-994', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-995', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-996', - 'zMedAnlyAstAttr-zEnt-997', - 'zMedAnlyAstAttr-zOpt-998', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-999', - 'zMemory-zPK-1000', - 'zMemory-zENT-1001', - 'zMemory-zOPT-1002', - 'zMemory-Key Asset= zAsset-zPK-1003', - 'zMemory-UUID-1004', - 'zMoment-zPK-1005', - 'zMoment-zENT-1006', - 'zMoment-zOPT-1007', - 'zMoment-Highlight Key-1008', - 'zMoment-UUID-1009', - 'zPerson-zPK=zDetFace-Person-1010', - 'zPerson-zEnt-1011', - 'zPerson-zOpt-1012', - 'zPerson-Share Participant= zSharePartic-zPK-1013', - 'zPerson-KeyFace=zDetFace-zPK-1014', - 'zPerson-Assoc Face Group Key-1015', - 'zPerson-Person UUID-1016', - 'zPhotoAnalysisAssetAttr-zPK-1017', - 'zPhotoAnalysisAssetAttr-zEnt-1018', - 'zPhotoAnalysisAssetAttr-zOpt-1019', - 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1020', - 'zSceneP-zPK-1021', - 'zSceneP-zENT-1022', - 'zSceneP-zOPT-1023', - 'zShare-zPK-1024', - 'zShare-zENT-1025', - 'zShare-zOPT-1026', - 'zShare-UUID-1027', - 'SPLzShare-UUID-1028', - 'zShare-Scope ID = store.cloudphotodb-1029', - 'zSharePartic-zPK-1030', - 'zSharePartic-zENT-1031', - 'zSharePartic-zOPT-1032', - 'zSharePartic-Share Key= zShare-zPK-1033', - 'zSharePartic-Person= zPerson-zPK-1034', - 'zSharePartic-UUID-1035', - 'SBKAzSugg-zPK-1036', - 'SBKAzSugg-zENT-1037', - 'SBKAzSugg-zOPT-1038', - 'SBKAzSugg-UUID-1039', - 'SBRAzSugg-zPK-1040', - 'SBRAzSugg-zENT-1041', - 'SBRAzSugg-zOPT-1042', - 'SBRAzSugg-UUID-1043', - 'z3SuggBRA-3RepAssets1-1044', - 'z3SuggBRA-58SuggBeingRepAssets-1045', - 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK-1046', - 'z3SuggBKA-3KeyAssets= zAsset-zPK-1047', - 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1048', - 'zUnmAdj-zOPT-1049', - 'zUnmAdj-zENT-1050', - 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1051', - 'zUnmAdj-UUID-1052', - 'zUnmAdj-Other Adjustments Fingerprint-1053', - 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1054', - 'zUserFeedback-zPK-1055', - 'zUserFeedback-zENT-1056', - 'zUserFeedback-zOPT-1057', - 'zUserFeedback-Person= zPerson-zPK-1058', - 'zUserFeedback-Memory= zMemory-zPK-1059', - 'zUserFeedback-UUID-1060', - 'zVisualSearchAttr-zPK-1061', - 'zVisualSearchAttr-zENT-1062', - 'zVisualSearchAttr-zOPT-1063', - 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1064', - 'z27AlbumList-27Albums= zGenAlbum-zPK-1065', - 'z27AlbumList-Album List Key-1066', - 'z27AlbumList-FOK27Albums Key-1067', - 'z28Assets-28Albums= zGenAlbum-zPK-1068', - 'z28Assets-3Asset Key= zAsset-zPK in the Album-1069', - 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1070', - 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1071', - 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1072', - 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK-1073', - 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1074', - 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK-1075', - 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1076', - 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1077', - 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1078', - 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK-1079', - 'z3MemoryBCAs-44Memories Being Custom User Assets-1080', - 'z3MemoryBCAs-3Custom User Assets-1081', - 'z3MemoryBCAs-FOK-3Custom User Assets-1082') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph96.2-iOS16_Ref_for_Asset_Analysis-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph96.2-iOS16_Ref_for_Asset_Analysis-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) + ''' - else: - logfunc('No data available for iOS 16 Syndication.photoslibrary-database-Photos.sqlite') + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], + row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], + row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], + row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], + row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], + row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], + row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], + row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], + row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], + row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], + row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], + row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], + row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], + row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], + row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], + row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], + row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], + row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], + row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], + row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], + row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], + row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], + row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], + row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], + row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], + row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], + row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], + row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], + row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], + row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], + row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], + row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], + row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], + row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], + row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], + row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], + row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], + row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], + row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], + row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], + row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], + row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], + row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], + row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], + row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], + row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], + row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], + row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], + row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], + row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], + row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], + row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], + row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], + row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], + row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], + row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], + row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], + row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], + row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], + row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], + row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], + row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], + row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], + row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], + row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], + row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], + row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], + row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], + row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], + row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], + row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], + row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], + row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], + row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], + row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], + row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], + row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], + row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], + row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], + row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], + row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], + row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], + row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], + row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], + row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], + row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], + row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], + row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], + row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], + row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], + row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], + row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], + row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], + row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], + row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], + row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], + row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], + row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], + row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], + row[1080], row[1081], row[1082])) - db.close() - return + data_headers = (('zAsset-Added Date-0', 'datetime'), + 'zAsset- SortToken -CameraRoll-1', + 'zAsset Complete-2', + 'zAsset-zPK-4QueryStart-3', + 'zAddAssetAttr-zPK-4QueryStart-4', + 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', + 'zAddAssetAttr-Master Fingerprint-4TableStart-6', + 'zIntResou-Fingerprint-4TableStart-7', + 'zAsset-Bundle Scope-8', + 'zAsset-Syndication State-9', + 'zAsset-Cloud is My Asset-10', + 'zAsset-Cloud is deletable-Asset-11', + 'zAsset-Cloud_Local_State-12', + 'zAsset-Visibility State-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zExtAttr-Lens Model-16', + 'zExtAttr-Flash Fired-17', + 'zExtAttr-Focal Lenght-18', + 'zExtAttr-Focal Lenth in 35MM-19', + 'zExtAttr-Digital Zoom Ratio-20', + 'zAsset-Derived Camera Capture Device-21', + 'zAddAssetAttr-Camera Captured Device-22', + 'zAddAssetAttr-Imported by-23', + 'zCldMast-Imported By-24', + 'zAddAssetAttr.Imported by Bundle Identifier-25', + 'zAddAssetAttr-Imported By Display Name-26', + 'zCldMast-Imported by Bundle ID-27', + 'zCldMast-Imported by Display Name-28', + 'zAsset-Saved Asset Type-29', + 'zAsset-Directory-Path-30', + 'zAsset-Filename-31', + 'zAddAssetAttr- Original Filename-32', + 'zCldMast- Original Filename-33', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-34', + 'zAsset-Active Library Scope Participation State -4QueryStart-35', + 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36', + 'zShare-Cloud Photo Count-SPL -4QueryStart-37', + 'zShare-Cloud Video Count-SPL -4QueryStart-38', + ('zAddAssetAttr-Date Created Source-39', 'datetime'), + ('zAsset-Date Created-40', 'datetime'), + ('zCldMast-Creation Date-41', 'datetime'), + ('zIntResou-CldMst Date Created-42', 'datetime'), + 'zAddAssetAttr-Time Zone Name-43', + 'zAddAssetAttr-Time Zone Offset-44', + 'zAddAssetAttr-Inferred Time Zone Offset-45', + 'zAddAssetAttr-EXIF-String-46', + ('zAsset-Modification Date-47', 'datetime'), + ('zAsset-Last Shared Date-48', 'datetime'), + 'zCldMast-Cloud Local State-49', + ('zCldMast-Import Date-50', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-51', 'datetime'), + 'zAddAssetAttr-Import Session ID-4QueryStart-52', + ('zAddAssetAttr-Alt Import Image Date-53', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-54', + ('zAsset-Cloud Batch Publish Date-55', 'datetime'), + ('zAsset-Cloud Server Publish Date-56', 'datetime'), + 'zAsset-Cloud Download Requests-57', + 'zAsset-Cloud Batch ID-58', + 'zAddAssetAttr-Upload Attempts-59', + 'zAsset-Latitude-60', + 'zExtAttr-Latitude-61', + 'zAsset-Longitude-62', + 'zExtAttr-Longitude-63', + 'zAddAssetAttr-GPS Horizontal Accuracy-64', + 'zAddAssetAttr-Location Hash-65', + 'zAddAssetAttr-Shifted Location Valid-66', + 'zAddAssetAttr-Shifted Location Data-67', + 'zAddAssetAttr-Reverse Location Is Valid-68', + 'zAddAssetAttr-Reverse Location Data-69', + 'ParentzGenAlbum-UUID-4QueryStart-70', + 'zGenAlbum-UUID-4QueryStart-71', + 'SWYConverszGenAlbum-UUID-4QueryStart-72', + 'ParentzGenAlbum-Cloud GUID-4QueryStart-73', + 'zGenAlbum-Cloud GUID-4QueryStart-74', + 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-75', + 'zCldShareAlbumInvRec-Album GUID-4QueryStart-76', + 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-77', + 'zGenAlbum-Project Render UUID-4QueryStart-78', + 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-79', + 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-80', + 'zGenAlbum-Cloud_Local_State-4QueryStart-81', + 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-82', + ('ParentzGenAlbum- Creation Date- 4QueryStart-83', 'datetime'), + ('zGenAlbum- Creation Date- 4QueryStart-84', 'datetime'), + ('SWYConverszGenAlbum- Creation Date- 4QueryStart-85', 'datetime'), + ('zGenAlbum- Cloud Creation Date- 4QueryStart-86', 'datetime'), + ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-87', 'datetime'), + ('zGenAlbum- Start Date- 4QueryStart-88', 'datetime'), + ('SWYConverszGenAlbum- Start Date- 4QueryStart-89', 'datetime'), + ('zGenAlbum- End Date- 4QueryStart-90', 'datetime'), + ('SWYConverszGenAlbum- End Date- 4QueryStart-91', 'datetime'), + ('zGenAlbum-Cloud Subscription Date- 4QueryStart-92', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-93', 'datetime'), + 'ParentzGenAlbum- Title- 4QueryStart-94', + 'zGenAlbum- Title-User&System Applied- 4QueryStart-95', + 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-96', + 'zGenAlbum-Import Session ID-SWY- 4QueryStart-97', + 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-98', + 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-99', + 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-100', + 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-101', + 'SWYConverszGenAlbum- Syndicate-4QueryStart-102', + 'zGenAlbum-zENT- Entity- 4QueryStart-103', + 'ParentzGenAlbum- Kind- 4QueryStart-104', + 'zGenAlbum-Album Kind- 4QueryStart-105', + 'SWYConverszGenAlbum-Album Kind- 4QueryStart-106', + 'AAAzCldMastMedData-zOPT-107', + 'zAddAssetAttr-Media Metadata Type-108', + 'AAAzCldMastMedData-Data-109', + 'CldMasterzCldMastMedData-zOPT-110', + 'zCldMast-Media Metadata Type-111', + 'CMzCldMastMedData-Data-112', + 'zAsset-Search Index Rebuild State-113', + 'zAddAssetAttr-Syndication History-114', + 'zMedAnlyAstAttr-Syndication Processing Version-115', + 'zMedAnlyAstAttr-Syndication Processing Value-116', + 'zAsset-Orientation-117', + 'zAddAssetAttr-Original Orientation-118', + 'zAsset-Kind-119', + 'zAsset-Kind-Sub-Type-120', + 'zAddAssetAttr-Cloud Kind Sub Type-121', + 'zAsset-Playback Style-122', + 'zAsset-Playback Variation-123', + 'zAsset-Video Duration-124', + 'zExtAttr-Duration-125', + 'zAsset-Video CP Duration-126', + 'zAddAssetAttr-Video CP Duration Time Scale-127', + 'zAsset-Video CP Visibility State-128', + 'zAddAssetAttr-Video CP Display Value-129', + 'zAddAssetAttr-Video CP Display Time Scale-130', + 'zIntResou-Datastore Class ID-131', + 'zAsset-Cloud Placeholder Kind-132', + 'zIntResou-Local Availability-133', + 'zIntResou-Local Availability Target-134', + 'zIntResou-Cloud Local State-135', + 'zIntResou-Remote Availability-136', + 'zIntResou-Remote Availability Target-137', + 'zIntResou-Transient Cloud Master-138', + 'zIntResou-Side Car Index-139', + 'zIntResou- File ID-140', + 'zIntResou-Version-141', + 'zAddAssetAttr- Original-File-Size-142', + 'zIntResou-Resource Type-143', + 'zIntResou-Datastore Sub-Type-144', + 'zIntResou-Cloud Source Type-145', + 'zIntResou-Data Length-146', + 'zIntResou-Recipe ID-147', + ('zIntResou-Cloud Last Prefetch Date-148', 'datetime'), + 'zIntResou-Cloud Prefetch Count-149', + ('zIntResou- Cloud-Last-OnDemand Download-Date-150', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-151', + 'zIntResou-Compact-UTI-152', + 'zAsset-Uniform Type ID-153', + 'zAsset-Original Color Space-154', + 'zCldMast-Uniform_Type_ID-155', + 'zCldMast-Full Size JPEG Source-156', + 'zAsset-HDR Gain-157', + 'zAsset-zHDR_Type-158', + 'zExtAttr-Codec-159', + 'zIntResou-Codec Four Char Code Name-160', + 'zCldMast-Codec Name-161', + 'zCldMast-Video Frame Rate-162', + 'zCldMast-Placeholder State-163', + 'zAsset-Depth_Type-164', + 'zAsset-Avalanche UUID-4TableStart-165', + 'zAsset-Avalanche_Pick_Type-BurstAsset-166', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-167', + 'zAddAssetAttr-Cloud Recovery State-168', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-169', + 'zAsset-Deferred Processing Needed-170', + 'zAsset-Video Deferred Processing Needed-171', + 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-172', + 'zAddAssetAttr-Deferred Processing Candidate Options-173', + 'zAsset-Has Adjustments-Camera-Effects-Filters-174', + 'zUnmAdj-UUID-4TableStart-175', + 'zAsset-Adjustment Timestamp-176', + 'zUnmAdj-Adjustment Timestamp-177', + 'zAddAssetAttr-Editor Bundle ID-178', + 'zUnmAdj-Editor Localized Name-179', + 'zUnmAdj-Adjustment Format ID-180', + 'zAddAssetAttr-Montage-181', + 'zUnmAdj-Adjustment Render Types-182', + 'zUnmAdj-Adjustment Format Version-183', + 'zUnmAdj-Adjustment Base Image Format-184', + 'zAsset-Favorite-185', + 'zAsset-Hidden-186', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-187', + ('zAsset-Trashed Date-188', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-189', + 'zAsset-Delete-Reason-190', + 'zIntResou-Trash State-191', + ('zIntResou-Trashed Date-192', 'datetime'), + 'zAsset-Cloud Delete State-193', + 'zIntResou-Cloud Delete State-194', + 'zAddAssetAttr-PTP Trashed State-195', + 'zIntResou-PTP Trashed State-196', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-197', + 'zMedAnlyAstAttr-Media Analysis Timestamp-198', + ('zAsset-Analysis State Modification Date-199', 'datetime'), + 'zAddAssetAttr- Pending View Count-200', + 'zAddAssetAttr- View Count-201', + 'zAddAssetAttr- Pending Play Count-202', + 'zAddAssetAttr- Play Count-203', + 'zAddAssetAttr- Pending Share Count-204', + 'zAddAssetAttr- Share Count-205', + 'zAddAssetAttr-Allowed for Analysis-206', + 'zAddAssetAttr-Scene Analysis Version-207', + 'zAddAssetAttr-Scene Analysis is From Preview-208', + 'zAddAssetAttr-Scene Analysis Timestamp-209', + 'zAsset-Duplication Asset Visibility State-210', + 'zAddAssetAttr-Destination Asset Copy State-211', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-212', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-213', + 'zCldMast-Source Master For Duplication Scope ID-214', + 'zAddAssetAttr-Source Asset For Duplication ID-215', + 'zCldMast-Source Master for Duplication ID-216', + 'zAddAssetAttr-Variation Suggestions States-217', + 'zAsset-High Frame Rate State-218', + 'zAsset-Video Key Frame Time Scale-219', + 'zAsset-Video Key Frame Value-220', + 'zExtAttr-ISO-221', + 'zExtAttr-Metering Mode-222', + 'zExtAttr-Sample Rate-223', + 'zExtAttr-Track Format-224', + 'zExtAttr-White Balance-225', + 'zExtAttr-Aperture-226', + 'zExtAttr-BitRate-227', + 'zExtAttr-Exposure Bias-228', + 'zExtAttr-Frames Per Second-229', + 'zExtAttr-Shutter Speed-230', + 'zExtAttr-Slush Scene Bias-231', + 'zExtAttr-Slush Version-232', + 'zExtAttr-Slush Preset-233', + 'zExtAttr-Slush Warm Bias-234', + 'zAsset-Height-235', + 'zAddAssetAttr-Original Height-236', + 'zIntResou-Unoriented Height-237', + 'zAsset-Width-238', + 'zAddAssetAttr-Original Width-239', + 'zIntResou-Unoriented Width-240', + 'zShare-Thumbnail Image Data-241', + 'SPLzShare-Thumbnail Image Data-242', + 'zAsset-Thumbnail Index-243', + 'zAddAssetAttr-Embedded Thumbnail Height-244', + 'zAddAssetAttr-Embedded Thumbnail Length-245', + 'zAddAssetAttr-Embedded Thumbnail Offset-246', + 'zAddAssetAttr-Embedded Thumbnail Width-247', + 'zAsset-Packed Acceptable Crop Rect-248', + 'zAsset-Packed Badge Attributes-249', + 'zAsset-Packed Preferred Crop Rect-250', + 'zAsset-Curation Score-251', + 'zAsset-Camera Processing Adjustment State-252', + 'zAsset-Depth Type-253', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-254', + 'zAddAssetAttr-Orig Resource Choice-255', + 'zAddAssetAttr-Spatial Over Capture Group ID-256', + 'zAddAssetAttr-Place Annotation Data-257', + 'zAddAssetAttr-Distance Identity-258', + 'zAddAssetAttr-Edited IPTC Attributes-259', + 'zAssetDes-Long Description-260', + 'zAddAssetAttr-Asset Description-261', + 'zAddAssetAttr-Title-Comments via Cloud Website-262', + 'zAddAssetAttr-Accessibility Description-263', + 'zAddAssetAttr-Photo Stream Tag ID-264', + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-265', + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-266', + ('zCldFeedEnt-Entry Date-267', 'datetime'), + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-268', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-269', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-270', + 'zCldFeedEnt-Entry Priority Number-271', + 'zCldFeedEnt-Entry Type Number-272', + 'zCldSharedComment-Cloud GUID-4TableStart-273', + ('zCldSharedComment-Date-274', 'datetime'), + ('zCldSharedComment-Comment Client Date-275', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-276', 'datetime'), + 'zCldSharedComment-Type-277', + 'zCldSharedComment-Comment Text-278', + 'zCldSharedComment-Commenter Hashed Person ID-279', + 'zCldSharedComment-Batch Comment-280', + 'zCldSharedComment-Is a Caption-281', + 'zAsset-Cloud Has Comments by Me-282', + 'zCldSharedComment-Is My Comment-283', + 'zCldSharedComment-Is Deletable-284', + 'zAsset-Cloud Has Comments Conversation-285', + 'zAsset-Cloud Has Unseen Comments-286', + 'zCldSharedComment-Liked-287', + 'zAddAssetAttr-Share Type-288', + 'zAsset-Library Scope Share State- StillTesting-289', + 'zAsset-Active Library Scope Participation State-290', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-291', + 'zShare-UUID-CMM-4TableStart-292', + 'SPLzShare-UUID-SPL-4TableStart-293', + 'zShare-zENT-CMM-294', + 'SPLzShare-zENT-SPL-295', + 'zSharePartic-z54SHARE-296', + 'SPLzSharePartic-z54SHARE-297', + 'zShare-Status-CMM-298', + 'SPLzShare-Status-SPL-299', + 'zShare-Scope Type-CMM-300', + 'SPLzShare-Scope Type-SPL-301', + 'zShare-Local Publish State-CMM-302', + 'SPLzShare-Local Publish State-SPL-303', + 'zShare-Public Permission-CMM-304', + 'SPLzShare-Public Permission-SPL-305', + 'zShare-Originating Scope ID-CMM-306', + 'SPLzShare-Originating Scope ID-SPL-307', + 'zShare-Scope ID-CMM-308', + 'SPLzShare-Scope ID-SPL-309', + 'zShare-Title-CMM-310', + 'SPLzShare-Title-SPL-311', + 'zShare-Share URL-CMM-312', + 'SPLzShare-Share URL-SPL-313', + ('zShare-Creation Date-CMM-314', 'datetime'), + ('SPLzShare-Creation Date-SPL-315', 'datetime'), + ('zShare-Start Date-CMM-316', 'datetime'), + ('SPLzShare-Start Date-SPL-317', 'datetime'), + ('zShare-End Date-CMM-318', 'datetime'), + ('SPLzShare-End Date-SPL-319', 'datetime'), + ('zShare-Expiry Date-CMM-320', 'datetime'), + ('SPLzShare-Expiry Date-SPL-321', 'datetime'), + 'zShare-Cloud Item Count-CMM-322', + 'SPLzShare-Cloud Item Count-SPL-323', + 'zShare-Asset Count-CMM-324', + 'SPLzShare-Asset Count-SPL-325', + 'zShare-Cloud Photo Count-CMM-326', + 'SPLzShare-Cloud Photo Count-SPL-327', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-328', + 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-329', + 'zShare-Photos Count-CMM-330', + 'SPLzShare-Photos Count-CMM-SPL-331', + 'zShare-Uploaded Photos Count-CMM-332', + 'SPLzShare-Uploaded Photos Count-SPL-333', + 'zShare-Cloud Video Count-CMM-334', + 'SPLzShare-Cloud Video Count-SPL-335', + 'zShare-Videos Count-CMM-336', + 'SPLzShare-Videos Count-SPL-337', + 'zShare-Uploaded Videos Count-CMM-338', + 'SPLzShare-Uploaded Videos Count-SPL-339', + 'zShare-Force Sync Attempted-CMM-340', + 'SPLzShare-Force Sync Attempted-SPL-341', + 'zShare-Cloud Local State-CMM-342', + 'SPLzShare-Cloud Local State-SPL-343', + 'zShare-Scope Syncing State-CMM-344', + 'SPLzShare-Scope Syncing State-SPL-345', + 'zShare-Auto Share Policy-CMM-346', + 'SPLzShare-Auto Share Policy-SPL-347', + 'zShare-Should Notify On Upload Completion-CMM-348', + 'SPLzShare-Should Notify On Upload Completion-SPL-349', + 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-350', + 'zShare-Trashed State-CMM-351', + 'SPLzShare-Trashed State-SPL-352', + 'zShare-Cloud Delete State-CMM-353', + 'SPLzShare-Cloud Delete State-SPL-354', + ('zShare-Trashed Date-CMM-355', 'datetime'), + ('SPLzShare-Trashed Date-SPL-356', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-CMM-357', 'datetime'), + ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL-358', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-CMM-359', 'datetime'), + ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL-360', 'datetime'), + 'zShare-Exit Source-CMM-361', + 'SPLzShare-Exit Source-SPL-362', + 'zShare-SPL_Exit State-CMM-363', + 'SPLzShare-SPL_Exit State-SPL-364', + 'zShare-Exit Type-CMM-365', + 'SPLzShare-Exit Type-SPL-366', + 'zShare-Should Ignor Budgets-CMM-367', + 'SPLzShare-Should Ignor Budgets-SPL-368', + 'zShare-Preview State-CMM-369', + 'SPLzShare-Preview State-SPL-370', + 'zShare-Preview Data-CMM-371', + 'SPLzShare-Preview Data-SPL-372', + 'zShare-Rules-CMM-373', + 'SPLzShare-Rules-SPL-374', + 'zShare-Thumbnail Image Data-CMM-375', + 'SPLzShare-Thumbnail Image Data-SPL-376', + 'zShare-Participant Cloud Update State-CMM-377', + 'SPLzShare-Participant Cloud Update State-SPL-378', + 'zSharePartic-UUID-4TableStart-379', + 'SPLzSharePartic-UUID-4TableStart-380', + 'zSharePartic-Acceptance Status-381', + 'SPLzSharePartic-Acceptance Status-382', + 'zSharePartic-Is Current User-383', + 'SPLzSharePartic-Is Current User-384', + 'zSharePartic-Role-385', + 'SPLzSharePartic-Role-386', + 'zSharePartic-Premission-387', + 'SPLzSharePartic-Premission-388', + 'zSharePartic-Participant ID-389', + 'SPLzSharePartic-Participant ID-390', + 'zSharePartic-User ID-391', + 'SPLzSharePartic-User ID-392', + 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-393', + 'SPLzSharePartic-zPK-4TableStart-394', + 'zSharePartic-zPK-4TableStart-395', + 'zSharePartic-Email Address-396', + 'SPLzSharePartic-Email Address-397', + 'zSharePartic-Phone Number-398', + 'SPLzSharePartic-Phone Number-399', + 'zSharePartic-Exit State-400', + 'SPLzSharePartic-Exit State-401', + 'ParentzGenAlbum-UUID-4TableStart-402', + 'zGenAlbum-UUID-4TableStart-403', + 'SWYConverszGenAlbum-UUID-4TableStart-404', + 'ParentzGenAlbum-Cloud GUID-4TableStart-405', + 'zGenAlbum-Cloud GUID-4TableStart-406', + 'SWYConverszGenAlbum-Cloud GUID-4TableStart-407', + 'zCldShareAlbumInvRec-Album GUID-4TableStart-408', + 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-409', + 'zGenAlbum-Project Render UUID-4TableStart-410', + 'SWYConverszGenAlbum-Project Render UUID-4TableStart-411', + 'zAlbumList-Needs Reordering Number-412', + 'zGenAlbum-zENT- Entity-413', + 'ParentzGenAlbum-Kind-414', + 'zGenAlbum-Album Kind-415', + 'SWYConverszGenAlbum-Album Kind-416', + 'ParentzGenAlbum-Cloud-Local-State-417', + 'zGenAlbum-Cloud_Local_State-418', + 'SWYConverszGenAlbum-Cloud_Local_State-419', + 'ParentzGenAlbum- Title-420', + 'zGenAlbum- Title-User&System Applied-421', + 'SWYConverszGenAlbum- Title -User&System Applied-422', + 'zGenAlbum-Import Session ID-SWY-423', + 'zAsset- Conversation= zGenAlbum_zPK-424', + 'SWYConverszGenAlbum- Import Session ID-SWY-425', + 'zGenAlbum-Imported by Bundle Identifier-426', + 'SWYzGenAlbum-Imported by Bundle Identifier-427', + 'SWYConverszGenAlbum- Syndicate-428', + ('ParentzGenAlbum-Creation Date-429', 'datetime'), + ('zGenAlbum-Creation Date-430', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-431', 'datetime'), + ('zGenAlbum-Cloud Creation Date-432', 'datetime'), + ('SWYConverszGenAlbum-Cloud Creation Date-433', 'datetime'), + ('zGenAlbum-Start Date-434', 'datetime'), + ('SWYConverszGenAlbum-Start Date-435', 'datetime'), + ('zGenAlbum-End Date-436', 'datetime'), + ('SWYConverszGenAlbum-End Date-437', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-438', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date-439', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-440', + 'zGenAlbum-Pending Items Count-441', + 'SWYConverszGenAlbum-Pending Items Count-442', + 'ParentzGenAlbum-Pending Items Type-443', + 'zGenAlbum-Pending Items Type-444', + 'SWYConverszGenAlbum-Pending Items Type-445', + 'zGenAlbum- Cached Photos Count-446', + 'SWYConverszGenAlbum- Cached Photos Count-447', + 'zGenAlbum- Cached Videos Count-448', + 'SWYConverszGenAlbum- Cached Videos Count-449', + 'zGenAlbum- Cached Count-450', + 'SWYConverszGenAlbum- Cached Count-451', + 'ParentzGenAlbum-Sync Event Order Key-452', + 'zGenAlbum-Sync Event Order Key-453', + 'SWYConverszGenAlbum-Sync Event Order Key-454', + 'zGenAlbum-Has Unseen Content-455', + 'SWYConverszGenAlbum-Has Unseen Content-456', + 'zGenAlbum-Unseen Asset Count-457', + 'SWYConverszGenAlbum-Unseen Asset Count-458', + 'zGenAlbum-is Owned-459', + 'SWYConverszGenAlbum-is Owned-460', + 'zGenAlbum-Cloud Relationship State-461', + 'SWYConverszGenAlbum-Cloud Relationship State-462', + 'zGenAlbum-Cloud Relationship State Local-463', + 'SWYConverszGenAlbum-Cloud Relationship State Local-464', + 'zGenAlbum-Cloud Owner Mail Key-465', + 'SWYConverszGenAlbum-Cloud Owner Mail Key-466', + 'zGenAlbum-Cloud Owner Frist Name-467', + 'SWYConverszGenAlbum-Cloud Owner Frist Name-468', + 'zGenAlbum-Cloud Owner Last Name-469', + 'SWYConverszGenAlbum-Cloud Owner Last Name-470', + 'zGenAlbum-Cloud Owner Full Name-471', + 'SWYConverszGenAlbum-Cloud Owner Full Name-472', + 'zGenAlbum-Cloud Person ID-473', + 'SWYConverszGenAlbum-Cloud Person ID-474', + 'zAsset-Cloud Owner Hashed Person ID-475', + 'zGenAlbum-Cloud Owner Hashed Person ID-476', + 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-477', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-478', + 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-479', + 'zGenAlbum-Cloud Multi-Contributors Enabled-480', + 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-481', + 'zGenAlbum-Cloud Album Sub Type-482', + 'SWYConverszGenAlbum-Cloud Album Sub Type-483', + ('zGenAlbum-Cloud Contribution Date-484', 'datetime'), + ('SWYConverszGenAlbum-Cloud Contribution Date-485', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-486', 'datetime'), + ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-487', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-488', + 'SWYConverszGenAlbum-Cloud Notification Enabled-489', + 'ParentzGenAlbum-Pinned-490', + 'zGenAlbum-Pinned-491', + 'SWYConverszGenAlbum-Pinned-492', + 'ParentzGenAlbum-Custom Sort Key-493', + 'zGenAlbum-Custom Sort Key-494', + 'SWYConverszGenAlbum-Custom Sort Key-495', + 'ParentzGenAlbum-Custom Sort Ascending-496', + 'zGenAlbum-Custom Sort Ascending-497', + 'SWYConverszGenAlbum-Custom Sort Ascending-498', + 'ParentzGenAlbum-Is Prototype-499', + 'zGenAlbum-Is Prototype-500', + 'SWYConverszGenAlbum-Is Prototype-501', + 'ParentzGenAlbum-Project Document Type-502', + 'zGenAlbum-Project Document Type-503', + 'SWYConverszGenAlbum-Project Document Type-504', + 'ParentzGenAlbum-Custom Query Type-505', + 'zGenAlbum-Custom Query Type-506', + 'SWYConverszGenAlbum-Custom Query Type-507', + 'ParentzGenAlbum-Trashed State-508', + ('ParentzGenAlbum-Trash Date-509', 'datetime'), + 'zGenAlbum-Trashed State-510', + ('zGenAlbum-Trash Date-511', 'datetime'), + 'SWYConverszGenAlbum-Trashed State-512', + ('SWYConverszGenAlbum-Trash Date-513', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-514', + 'zGenAlbum-Cloud Delete State-515', + 'SWYConverszGenAlbum-Cloud Delete State-516', + 'zGenAlbum-Cloud Owner Whitelisted-517', + 'SWYConverszGenAlbum-Cloud Owner Whitelisted-518', + 'zGenAlbum-Cloud Local Public URL Enabled-519', + 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-520', + 'zGenAlbum-Cloud Public URL Enabled-521', + 'zGenAlbum-Public URL-522', + 'SWYConverszGenAlbum-Cloud Public URL Enabled-523', + 'SWYConverszGenAlbum-Public URL-524', + 'zGenAlbum-Key Asset Face Thumb Index-525', + 'SWYConverszGenAlbum-Key Asset Face Thumb Index-526', + 'zGenAlbum-Project Text Extension ID-527', + 'SWYConverszGenAlbum-Project Text Extension ID-528', + 'zGenAlbum-User Query Data-529', + 'SWYConverszGenAlbum-User Query Data-530', + 'zGenAlbum-Custom Query Parameters-531', + 'SWYConverszGenAlbum-Custom Query Parameters-532', + 'zGenAlbum-Project Data-533', + 'SWYConverszGenAlbum-Project Data-534', + 'zGenAlbum-Search Index Rebuild State-535', + 'SWYConverszGenAlbum-Search Index Rebuild State-536', + 'zGenAlbum-Duplicate Type-537', + 'SWYConverszGenAlbum-Duplicate Type-538', + 'zGenAlbum-Privacy State-539', + 'SWYConverszGenAlbum-Privacy State-540', + 'zCldShareAlbumInvRec-zUUID-4TableStart-541', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-542', + 'zCldShareAlbumInvRec-Invitation State Local-543', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-544', + ('zCldShareAlbumInvRec-Subscription Date-545', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-546', + 'zCldShareAlbumInvRec-Invitee Last Name-547', + 'zCldShareAlbumInvRec-Invitee Full Name-548', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-549', + 'zCldShareAlbumInvRec-Invitee Email Key-550', + 'zGenAlbum-Key Asset Face ID-551', + 'zFaceCrop-Face Area Points-552', + 'zAsset-Face Adjustment Version-553', + 'zAddAssetAttr-Face Analysis Version-554', + 'zDetFace-Asset Visible-555', + 'zPerson-Face Count-556', + 'zDetFace-Face Crop-557', + 'zDetFace-Face Algorithm Version-558', + 'zDetFace-Adjustment Version-559', + 'zDetFace-UUID-4TableStart-560', + 'zPerson-Person UUID-4TableStart-561', + 'zDetFace-Confirmed Face Crop Generation State-562', + 'zDetFace-Manual-563', + 'zDetFace-Detection Type-564', + 'zPerson-Detection Type-565', + 'zDetFace-VIP Model Type-566', + 'zDetFace-Name Source-567', + 'zDetFace-Cloud Name Source-568', + 'zPerson-Merge Candidate Confidence-569', + 'zPerson-Person URI-570', + 'zPerson-Display Name-571', + 'zPerson-Full Name-572', + 'zPerson-Cloud Verified Type-573', + 'zFaceCrop-State-574', + 'zFaceCrop-Type-575', + 'zFaceCrop-UUID-4TableStart-576', + 'zPerson-Type-577', + 'zPerson-Verified Type-578', + 'zPerson-Gender Type-579', + 'zDetFace-Gender Type-580', + 'zDetFace-Center X-581', + 'zDetFace-Center Y-582', + 'zPerson-Age Type Estimate-583', + 'zDetFace-Age Type Estimate-584', + 'zDetFace-Ethnicity Type-585', + 'zDetFace-Skin Tone Type-586', + 'zDetFace-Hair Type-587', + 'zDetFace-Hair Color Type-588', + 'zDetFace-Head Gear Type-589', + 'zDetFace-Facial Hair Type-590', + 'zDetFace-Has Face Mask-591', + 'zDetFace-Pose Type-592', + 'zDetFace-Face Expression Type-593', + 'zDetFace-Has Smile-594', + 'zDetFace-Smile Type-595', + 'zDetFace-Lip Makeup Type-596', + 'zDetFace-Eyes State-597', + 'zDetFace-Is Left Eye Closed-598', + 'zDetFace-Is Right Eye Closed-599', + 'zDetFace-Gaze Center X-600', + 'zDetFace-Gaze Center Y-601', + 'zDetFace-Face Gaze Type-602', + 'zDetFace-Eye Glasses Type-603', + 'zDetFace-Eye Makeup Type-604', + 'zDetFace-Cluster Squence Number Key-605', + 'zDetFace-Grouping ID-606', + 'zDetFace-Master ID-607', + 'zDetFace-Quality-608', + 'zDetFace-Quality Measure-609', + 'zDetFace-Source Height-610', + 'zDetFace-Source Width-611', + 'zDetFace-Hidden-Asset Hidden-612', + 'zDetFace-In Trash-Recently Deleted-613', + 'zDetFace-Cloud Local State-614', + 'zDetFace-Training Type-615', + 'zDetFace.Pose Yaw-616', + 'zDetFace-Body Center X-617', + 'zDetFace-Body Center Y-618', + 'zDetFace-Body Height-619', + 'zDetFace-Body Width-620', + 'zDetFace-Roll-621', + 'zDetFace-Size-622', + 'zDetFace-Cluster Squence Number-623', + 'zDetFace-Blur Score-624', + 'zDetFacePrint-Face Print Version-625', + 'zMedAnlyAstAttr-Face Count-626', + 'zDetFaceGroup-UUID-4TableStart-627', + 'zDetFaceGroup-Person Builder State-628', + 'zDetFaceGroup-UnNamed Face Count-629', + 'zPerson-In Person Naming Model-630', + 'zPerson-Key Face Pick Source Key-631', + 'zPerson-Manual Order Key-632', + 'zPerson-Question Type-633', + 'zPerson-Suggested For Client Type-634', + 'zPerson-Merge Target Person-635', + 'zPerson-Cloud Local State-636', + 'zFaceCrop-Cloud Local State-637', + 'zFaceCrop-Cloud Type-638', + 'zPerson-Cloud Delete State-639', + 'zFaceCrop-Cloud Delete State-640', + 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-641', + 'zAsset-Highlight Visibility Score-642', + 'zMemory-UUID-4TableStart-643', + 'zMemory-AssetListPredicte-644', + 'zMemory-Score-645', + 'zMemory-SubTitle-646', + 'zMemory-Title-647', + 'zMemory-Category-648', + 'zMemory-SubCategory-649', + ('zMemory-Creation Date-650', 'datetime'), + ('zMemory-Last Enrichment Date-651', 'datetime'), + 'zMemory-User Action Options-652', + 'zMemory-Favorite Memory-653', + 'zMemory-View Count-654', + 'zMemory-Play Count-655', + 'zMemory-Rejected-656', + 'zMemory-Share Count-657', + 'zMemory-Sharing Composition-658', + ('zMemory-Last Movie Play Date-659', 'datetime'), + ('zMemory-Last Viewed Date-660', 'datetime'), + 'zMemory-Pending Play Count Memory-661', + 'zMemory-Pending Share Count Memory-662', + 'zMemory-Pending View Count Memory-663', + 'zMemory-Pending State-664', + 'zMemory-Featured State-665', + 'zMemory-Photos Graph Version-666', + 'zMemory-Graph Memory Identifier-667', + 'zMemory-Notification State-668', + 'zMemory-Cloud Local State-669', + 'zMemory-Cloud Delete State-670', + 'zMemory-Story Color Grade Kind-671', + 'zMemory-Story Serialized Title Category-672', + 'zMemory-Syndicated Content State-673', + 'zMemory-Search Index Rebuild State-674', + 'zMemory-Black Listed Feature-675', + 'zMoment-UUID-4TableStart-676', + 'zMoment-Aggregation Score-677', + ('zMoment-Start Date-678', 'datetime'), + ('zMoment-Representative Date-679', 'datetime'), + 'zMoment-Timezone Offset-680', + ('zMoment-Modification Date-681', 'datetime'), + ('zMoment-End Date-682', 'datetime'), + 'zMoment-SubTitle-683', + 'zMoment-Title-684', + 'zMoment-Originator State-685', + 'zMoment-Sharing Composition-686', + 'zMoment-Cached Count Shared-687', + 'zMoment-Processed Location-688', + 'zMoment-Approx Latitude-689', + 'zMoment-Approx Longitude-690', + 'zMoment-GPS Horizontal Accuracy-691', + 'zMoment-Cache Count-692', + 'zMoment-Cached Photos Count-693', + 'zMoment-Cached Videos Count-694', + 'zMoment-Trashed State-695', + 'SBKAzSugg-UUID-4TableStart-696', + 'SBKAzSugg-Suggestion Context-697', + 'SBKAzSugg-Sharing Composition-698', + ('SBKAzSugg-Start Date-699', 'datetime'), + 'SBKAzSugg-State-700', + 'SBKAzSugg-Featured State-701', + 'SBKAzSugg-Notification State-702', + ('SBKAzSugg-Creation Date-703', 'datetime'), + ('SBKAzSugg-End Date-704', 'datetime'), + ('SBKAzSugg-Activation Date-705', 'datetime'), + ('SBKAzSugg-Expunge Date-706', 'datetime'), + ('SBKAzSugg-Relevant Until Date-707', 'datetime'), + 'SBKAzSugg-Title-708', + 'SBKAzSugg-Sub Title-709', + 'SBKAzSugg-Cached Count-710', + 'SBKAzSugg-Cahed Photos Count-711', + 'SBKAzSugg-Cached Videos Count-712', + 'SBKAzSugg-Type-713', + 'SBKAzSugg-Sub Type-714', + 'SBKAzSugg-Action Data-715', + 'SBKAzSugg-Version-716', + 'SBKAzSugg-Cloud Local State-717', + 'SBKAzSugg-Cloud Delete State-718', + 'SBRAzSugg-UUID-4TableStart-719', + 'SBRAzSugg-Suggestion Context-720', + 'SBRAzSugg-Sharing Composition-721', + ('SBRAzSugg-Start Date-722', 'datetime'), + 'SBRAzSugg-State-723', + 'SBRAzSugg-Featured State-724', + 'SBRAzSugg-Notification State-725', + ('SBRAzSugg-Creation Date-726', 'datetime'), + ('SBRAzSugg-End Date-727', 'datetime'), + ('SBRAzSugg-Activation Date-728', 'datetime'), + ('SBRAzSugg-Expunge Date-729', 'datetime'), + ('SBRAzSugg-Relevant Until Date-730', 'datetime'), + 'SBRAzSugg-Title-731', + 'SBRAzSugg-Sub Title-732', + 'SBRAzSugg-Cached Count-733', + 'SBRAzSugg-Cahed Photos Count-734', + 'SBRAzSugg-Cached Videos Count-735', + 'SBRAzSugg-Type-736', + 'SBRAzSugg-Sub Type-737', + 'SBRAzSugg-Action Data-738', + 'SBRAzSugg-Version-739', + 'SBRAzSugg-Cloud Local State-740', + 'SBRAzSugg-Cloud Delete State-741', + 'zMedAnlyAstAttr-Media Analysis Version-742', + 'zMedAnlyAstAttr-Audio Classification-743', + 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-744', + 'zMedAnlyAstAttr-Best Video Range Start Time Scale-745', + 'zMedAnlyAstAttr-Best Video Range Duration Value-746', + 'zMedAnlyAstAttr-Best Video Range Start Value-747', + 'zMedAnlyAstAttr-Packed Best Playback Rect-748', + 'zMedAnlyAstAttr-Activity Score-749', + 'zMedAnlyAstAttr-Video Score-750', + 'zMedAnlyAstAttr-Audio Score-751', + 'zMedAnlyAstAttr-Wallpaper Score-752', + 'zMedAnlyAstAttr-AutoPlay Suggestion Score-753', + 'zMedAnlyAstAttr-Blurriness Score-754', + 'zMedAnlyAstAttr-Exposure Score-755', + 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-756', + 'zMedAnlyAstAttr-Probable Rotation Direction-757', + 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-758', + 'zAssetAnalyState-Asset UUID-4TableStart-759', + 'zAssetAnalyState-Analyisis State-760', + 'zAssetAnalyState-Worker Flags-761', + 'zAssetAnalyState-Worker Type-762', + ('zAssetAnalyState-Ignore Until Date-763', 'datetime'), + ('zAssetAnalyState-Last Ignored Date-764', 'datetime'), + ('zAssetAnalyState-Sort Token-765', 'datetime'), + 'zMedAnlyAstAttr-Character Recognition Attr-766', + 'zCharRecogAttr-Algorithm Version-767', + 'zCharRecogAttr-Adjustment Version-768', + 'zMedAnlyAstAttr-Visual Search Attributes-769', + 'zVisualSearchAttr-Algorithm Version-770', + 'zVisualSearchAttr-Adjustment Version-771', + 'zAsset-Overall Aesthetic Score-772', + 'zCompAssetAttr-Behavioral Score-773', + 'zCompAssetAttr-Failure Score zCompAssetAttr-774', + 'zCompAssetAttr-Harmonious Color Score-775', + 'zCompAssetAttr-Immersiveness Score-776', + 'zCompAssetAttr-Interaction Score-777', + 'zCompAssetAttr-Intersting Subject Score-778', + 'zCompAssetAttr-Intrusive Object Presence Score-779', + 'zCompAssetAttr-Lively Color Score-780', + 'zCompAssetAttr-Low Light-781', + 'zCompAssetAttr-Noise Score-782', + 'zCompAssetAttr-Pleasant Camera Tilt Score-783', + 'zCompAssetAttr-Pleasant Composition Score-784', + 'zCompAssetAttr-Pleasant Lighting Score-785', + 'zCompAssetAttr-Pleasant Pattern Score-786', + 'zCompAssetAttr-Pleasant Perspective Score-787', + 'zCompAssetAttr-Pleasant Post Processing Score-788', + 'zCompAssetAttr-Pleasant Reflection Score-789', + 'zCompAssetAttrPleasant Symmetry Score-790', + 'zCompAssetAttr-Sharply Focused Subject Score-791', + 'zCompAssetAttr-Tastfully Blurred Score-792', + 'zCompAssetAttr-Well Chosen Subject Score-793', + 'zCompAssetAttr-Well Framed Subject Score-794', + 'zCompAssetAttr-Well Timeed Shot Score-795', + 'zCldRes-Asset UUID-4TableStart-796', + 'zCldRes-Cloud Local State-797', + 'zCldRes-File Size-798', + 'zCldRes-Height-799', + 'zCldRes-Is Available-800', + 'zCldRes-Is Locally Available-801', + 'zCldRes-Prefetch Count-802', + 'zCldRes-Source Type-803', + 'zCldRes-Type-804', + 'zCldRes-Width-805', + ('zCldRes-Date Created-806', 'datetime'), + ('zCldRes-Last OnDemand Download Date-807', 'datetime'), + ('zCldRes-Last Prefetch Date-808', 'datetime'), + 'zCldRes-Prunedat-809', + 'zCldRes-File Path-810', + 'zCldRes-Fingerprint-811', + 'zCldRes-Item ID-812', + 'zCldRes-UniID-813', + 'zUserFeedback-UUID-4TableStart-814', + 'zUserFeedback-Feature-815', + 'zUserFeedback-Type-816', + ('zUserFeedback-Last Modified Date-817', 'datetime'), + 'zUserFeedback-Context-818', + 'zUserFeedback-Cloud Local State-819', + 'zUserFeedback-Cloud Delete State-820', + 'zAddAssetAttr-zPK-821', + 'zAddAssetAttr-zENT-822', + 'ZAddAssetAttr-zOPT-823', + 'zAddAssetAttr-zAsset= zAsset_zPK-824', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-825', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-826', + 'zAddAssetAttr-Master Fingerprint-827', + 'zAddAssetAttr-Public Global UUID-828', + 'zAddAssetAttr-Deferred Photo Identifier-829', + 'zAddAssetAttr-Original Assets UUID-830', + 'zAddAssetAttr-Import Session ID-831', + 'zAddAssetAttr-Originating Asset Identifier-832', + 'zAddAssetAttr.Adjusted Fingerprint-833', + 'zAlbumList-zPK= Album List Key-834', + 'zAlbumList-zENT-835', + 'zAlbumList-zOPT-836', + 'zAlbumList-ID Key-837', + 'zAlbumList-UUID-838', + 'zAsset-zPK-839', + 'zAsset-zENT-840', + 'zAsset-zOPT-841', + 'zAsset-Master= zCldMast-zPK-842', + 'zAsset-Extended Attributes= zExtAttr-zPK-843', + 'zAsset-Import Session Key-844', + 'zAsset-Trashed by Participant= zSharePartic_zPK-845', + 'zAsset-Photo Analysis Attributes Key-846', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-847', + 'zAsset-FOK-Cloud Feed Asset Entry Key-848', + 'zAsset-Moment Share Key= zShare-zPK-849', + 'zAsset-zMoment Key= zMoment-zPK-850', + 'zAsset-Computed Attributes Asset Key-851', + 'zAsset-Highlight Being Assets-HBA Key-852', + 'zAsset-Highlight Being Extended Assets-HBEA Key-853', + 'zAsset-Highlight Being Key Asset Private-HBKAP Key-854', + 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-855', + 'zAsset-Highligh Being Summary Assets-HBSA Key-856', + 'zAsset-Day Group Highlight Being Assets-DGHBA Key-857', + 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-858', + 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-859', + 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-860', + 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-861', + 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-862', + 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-863', + 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-864', + 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-865', + 'zAsset-Promotion Score-866', + 'zAsset-Media Analysis Attributes Key-867', + 'zAsset-Media Group UUID-868', + 'zAsset-UUID = store.cloudphotodb-869', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-870', + 'zAsset.Cloud Collection GUID-871', + 'zAsset-Avalanche UUID-872', + 'zAssetAnalyState-zPK-873', + 'zAssetAnalyState-zEnt-874', + 'zAssetAnalyState-zOpt-875', + 'zAssetAnalyState-Asset= zAsset-zPK-876', + 'zAssetAnalyState-Asset UUID-877', + 'zAsstContrib-zPK-878', + 'zAsstContrib-zEnt-879', + 'zAsstContrib-zOpt-880', + 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-881', + 'zAsstContrib-Participant= zSharePartic-zPK-882', + 'zAssetDes-zPK-883', + 'zAssetDes-zENT-884', + 'zAssetDes-zOPT-885', + 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-886', + 'zCharRecogAttr-zPK-887', + 'zCharRecogAttr-zENT-888', + 'zCharRecogAttr-zOPT-889', + 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-890', + 'zCldFeedEnt-zPK= zCldShared keys-891', + 'zCldFeedEnt-zENT-892', + 'zCldFeedEnt-zOPT-893', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-894', + 'zCldFeedEnt-Entry Invitation Record GUID-895', + 'zCldFeedEnt-Entry Cloud Asset GUID-896', + 'zCldMast-zPK= zAsset-Master-897', + 'zCldMast-zENT-898', + 'zCldMast-zOPT-899', + 'zCldMast-Moment Share Key= zShare-zPK-900', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-901', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-902', + 'zCldMast-Originating Asset ID-903', + 'zCldMast-Import Session ID- AirDrop-StillTesting-904', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-905', + 'CMzCldMastMedData-zENT-906', + 'CMzCldMastMedData-zOPT-907', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-908', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-909', + 'AAAzCldMastMedData-zENT-910', + 'AAAzCldMastMedData-zOPT-911', + 'AAAzCldMastMedData-CldMast key-912', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-913', + 'zCldRes-zPK-914', + 'zCldRes-zENT-915', + 'zCldRes-zOPT-916', + 'zCldRes-Asset= zAsset-zPK-917', + 'zCldRes-Cloud Master= zCldMast-zPK-918', + 'zCldRes-Asset UUID-919', + 'zCldShareAlbumInvRec-zPK-920', + 'zCldShareAlbumInvRec-zEnt-921', + 'zCldShareAlbumInvRec-zOpt-922', + 'zCldShareAlbumInvRec-Album Key-923', + 'zCldShareAlbumInvRec-FOK Album Key-924', + 'zCldShareAlbumInvRec-Album GUID-925', + 'zCldShareAlbumInvRec-zUUID-926', + 'zCldShareAlbumInvRec-Cloud GUID-927', + 'zCldSharedComment-zPK-928', + 'zCldSharedComment-zENT-929', + 'zCldSharedComment-zOPT-930', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-931', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-932', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-933', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-934', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-935', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-936', + 'zCldSharedComment-Cloud GUID-937', + 'zCompAssetAttr-zPK-938', + 'zCompAssetAttr-zEnt-939', + 'zCompAssetAttr-zOpt-940', + 'zCompAssetAttr-Asset Key-941', + 'zDetFace-zPK-942', + 'zDetFace-zEnt-943', + 'zDetFace.zOpt-944', + 'zDetFace-Asset= zAsset-zPK or Asset Containing Face-945', + 'zDetFace-Person= zPerson-zPK-946', + 'zDetFace-Person Being Key Face-947', + 'zDetFace-Face Print-948', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-949', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-950', + 'zDetFace-UUID-951', + 'zDetFaceGroup-zPK-952', + 'zDetFaceGroup-zENT-953', + 'zDetFaceGroup-zOPT-954', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-955', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-956', + 'zDetFaceGroup-UUID-957', + 'zDetFacePrint-zPK-958', + 'zDetFacePrint-zEnt-959', + 'zDetFacePrint-zOpt-960', + 'zDetFacePrint-Face Key-961', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-962', + 'zExtAttr-zENT-963', + 'zExtAttr-zOPT-964', + 'zExtAttr-Asset Key-965', + 'zFaceCrop-zPK-966', + 'zFaceCrop-zEnt-967', + 'zFaceCrop-zOpt-968', + 'zFaceCrop-Asset Key-969', + 'zFaceCrop-Invalid Merge Canidate Person UUID-970', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-971', + 'zFaceCrop-Face Key-972', + 'zFaceCrop-UUID-973', + 'zGenAlbum-zPK=26AlbumLists= 26Albums-974', + 'zGenAlbum-zENT-975', + 'zGenAlbum-zOpt-976', + 'zGenAlbum-Key Asset-Key zAsset-zPK-977', + 'zGenAlbum-Secondary Key Asset-978', + 'zGenAlbum-Tertiary Key Asset-979', + 'zGenAlbum-Custom Key Asset-980', + 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-981', + 'zGenAlbum-FOK Parent Folder-982', + 'zGenAlbum-zSyndicate-983', + 'zGenAlbum-UUID-984', + 'SWYConverszGenAlbum-UUID-985', + 'zGenAlbum-Cloud_GUID = store.cloudphotodb-986', + 'SWYConverszGenAlbum-Cloud GUID-987', + 'zGenAlbum-Project Render UUID-988', + 'SWYConverszGenAlbum-Project Render UUID-989', + 'zIntResou-zPK-990', + 'zIntResou-zENT-991', + 'zIntResou-zOPT-992', + 'zIntResou-Asset= zAsset_zPK-993', + 'zIntResou-Fingerprint-994', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-995', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-996', + 'zMedAnlyAstAttr-zEnt-997', + 'zMedAnlyAstAttr-zOpt-998', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-999', + 'zMemory-zPK-1000', + 'zMemory-zENT-1001', + 'zMemory-zOPT-1002', + 'zMemory-Key Asset= zAsset-zPK-1003', + 'zMemory-UUID-1004', + 'zMoment-zPK-1005', + 'zMoment-zENT-1006', + 'zMoment-zOPT-1007', + 'zMoment-Highlight Key-1008', + 'zMoment-UUID-1009', + 'zPerson-zPK=zDetFace-Person-1010', + 'zPerson-zEnt-1011', + 'zPerson-zOpt-1012', + 'zPerson-Share Participant= zSharePartic-zPK-1013', + 'zPerson-KeyFace=zDetFace-zPK-1014', + 'zPerson-Assoc Face Group Key-1015', + 'zPerson-Person UUID-1016', + 'zPhotoAnalysisAssetAttr-zPK-1017', + 'zPhotoAnalysisAssetAttr-zEnt-1018', + 'zPhotoAnalysisAssetAttr-zOpt-1019', + 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1020', + 'zSceneP-zPK-1021', + 'zSceneP-zENT-1022', + 'zSceneP-zOPT-1023', + 'zShare-zPK-1024', + 'zShare-zENT-1025', + 'zShare-zOPT-1026', + 'zShare-UUID-1027', + 'SPLzShare-UUID-1028', + 'zShare-Scope ID = store.cloudphotodb-1029', + 'zSharePartic-zPK-1030', + 'zSharePartic-zENT-1031', + 'zSharePartic-zOPT-1032', + 'zSharePartic-Share Key= zShare-zPK-1033', + 'zSharePartic-Person= zPerson-zPK-1034', + 'zSharePartic-UUID-1035', + 'SBKAzSugg-zPK-1036', + 'SBKAzSugg-zENT-1037', + 'SBKAzSugg-zOPT-1038', + 'SBKAzSugg-UUID-1039', + 'SBRAzSugg-zPK-1040', + 'SBRAzSugg-zENT-1041', + 'SBRAzSugg-zOPT-1042', + 'SBRAzSugg-UUID-1043', + 'z3SuggBRA-3RepAssets1-1044', + 'z3SuggBRA-58SuggBeingRepAssets-1045', + 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK-1046', + 'z3SuggBKA-3KeyAssets= zAsset-zPK-1047', + 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1048', + 'zUnmAdj-zOPT-1049', + 'zUnmAdj-zENT-1050', + 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1051', + 'zUnmAdj-UUID-1052', + 'zUnmAdj-Other Adjustments Fingerprint-1053', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1054', + 'zUserFeedback-zPK-1055', + 'zUserFeedback-zENT-1056', + 'zUserFeedback-zOPT-1057', + 'zUserFeedback-Person= zPerson-zPK-1058', + 'zUserFeedback-Memory= zMemory-zPK-1059', + 'zUserFeedback-UUID-1060', + 'zVisualSearchAttr-zPK-1061', + 'zVisualSearchAttr-zENT-1062', + 'zVisualSearchAttr-zOPT-1063', + 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1064', + 'z27AlbumList-27Albums= zGenAlbum-zPK-1065', + 'z27AlbumList-Album List Key-1066', + 'z27AlbumList-FOK27Albums Key-1067', + 'z28Assets-28Albums= zGenAlbum-zPK-1068', + 'z28Assets-3Asset Key= zAsset-zPK in the Album-1069', + 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1070', + 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1071', + 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1072', + 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK-1073', + 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1074', + 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK-1075', + 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1076', + 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1077', + 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1078', + 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK-1079', + 'z3MemoryBCAs-44Memories Being Custom User Assets-1080', + 'z3MemoryBCAs-3Custom User Assets-1081', + 'z3MemoryBCAs-FOK-3Custom User Assets-1082') + data_list = get_sqlite_db_records(source_path, query) - -__artifacts_v2__ = { - 'Ph96-1-iOS16_Ref_for_Asset_Analysis-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite 96.1 iOS16 Reference for Asset Analysis', - 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' - ' set of decoded data based on testing and research conducted by Scott Koenig' - ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' - ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' - ' to view, search and filter the results.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-04-19', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph96ios16refforassetanalysisphdapsql' - }, - 'Ph96-2-iOS16_Ref_for_Asset_Analysis-SyndPL': { - 'name': 'SyndPL Photos.sqlite 96.2 iOS16 Reference for Asset Analysis', - 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' - ' This parser includes the largest set of decoded data based on testing and research' - ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' - ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' - ' TimelineExplorer to view, search and filter the results.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-04-19', - 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', - 'notes': '', - 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*', - 'function': 'get_ph96ios16refforassetanalysissyndpl' - } -} + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph97iOS17REFforAssetAnalysis.py b/scripts/artifacts/Ph97iOS17REFforAssetAnalysis.py index bd286e87..59fc9b90 100644 --- a/scripts/artifacts/Ph97iOS17REFforAssetAnalysis.py +++ b/scripts/artifacts/Ph97iOS17REFforAssetAnalysis.py @@ -1,41 +1,66 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 1.0 -# -# Description: -# Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest set of decoded data based on -# testing and research conducted by Scott Koenig https://theforensicscooter.com/ and -# queries found at https://github.com/ScottKjr3347. -# I recommend opening the TSV generated reports with Zimmerman's Tools https://ericzimmerman.github.io/#!index.md -# TimelineExplorer to view, search and filter the results. -# +__artifacts_v2__ = { + 'Ph97_1iOS17RefforAssetAnalysisPhDaPsql': { + 'name': 'Ph97.1-iOS17_Ref_for_Asset_Analysis-PhDaPsql', + 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' + ' set of decoded data based on testing and research conducted by Scott Koenig' + ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' + ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' + ' to view, search and filter the results.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + }, + 'Ph97_2iOS17RefforAssetAnalysisSyndPL': { + 'name': 'Ph97.2-iOS17_Ref_for_Asset_Analysis-SyndPL', + 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' + ' This parser includes the largest set of decoded data based on testing and research' + ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' + ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' + ' TimelineExplorer to view, search and filter the results.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite', + 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc +@artifact_processor +def Ph97_1iOS17RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) -def get_ph97ios17refforassetanalysisphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if (version.parse(iosversion) <= version.parse("16.7.7")) or (version.parse(iosversion) >= version.parse("18")): - logfunc(f"Unsupported version for PhotoData-Photos.sqlite reference for asset analysis from iOS " + iosversion) - if (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + logfunc(f"Unsupported version for PhotoData-Photos.sqlite for iOS " + iosversion) + return (), [], source_path + if (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -2285,7 +2310,7 @@ def get_ph97ios17refforassetanalysisphdapsql(files_found, report_folder, seeker, zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type', DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date', DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date', - zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token', + DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token', zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr', zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version', zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version', @@ -2568,8 +2593,8 @@ def get_ph97ios17refforassetanalysisphdapsql(files_found, report_folder, seeker, SBRAzSugg.Z_OPT AS 'SBRAzSugg-zOPT', SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID', z3SuggBRA.Z_3REPRESENTATIVEASSETS1 AS 'z3SuggBRA-3RepAssets1', - z3SuggBRA.Z_58SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-58SuggBeingRepAssets', - z3SuggBKA.Z_58SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK', + z3SuggBRA.Z_59SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-59SuggBeingRepAssets', + z3SuggBKA.Z_59SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-59SuggBeingKeyAssets= zSugg-zPK', z3SuggBKA.Z_3KEYASSETS AS 'z3SuggBKA-3KeyAssets= zAsset-zPK', zUnmAdj.Z_PK AS 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key', zUnmAdj.Z_OPT AS 'zUnmAdj-zOPT', @@ -2653,1293 +2678,1258 @@ def get_ph97ios17refforassetanalysisphdapsql(files_found, report_folder, seeker, LEFT JOIN ZUSERFEEDBACK zUserFeedback ON zUserFeedback.ZMEMORY = zMemory.Z_PK LEFT JOIN ZMOMENT zMoment ON zMoment.Z_PK = zAsset.ZMOMENT LEFT JOIN Z_3SUGGESTIONSBEINGKEYASSETS z3SuggBKA ON z3SuggBKA.Z_3KEYASSETS = zAsset.Z_PK - LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_58SUGGESTIONSBEINGKEYASSETS + LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_59SUGGESTIONSBEINGKEYASSETS LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS1 = zAsset.Z_PK - LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_58SUGGESTIONSBEINGREPRESENTATIVEASSETS + LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_59SUGGESTIONSBEINGREPRESENTATIVEASSETS ORDER BY zAsset.ZADDEDDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], - row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], - row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], - row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], - row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], - row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], - row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], - row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], - row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], - row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], - row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], - row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], - row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], - row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], - row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], - row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], - row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], - row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], - row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], - row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], - row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], - row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], - row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], - row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], - row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], - row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], - row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], - row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], - row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], - row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], - row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], - row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], - row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], - row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], - row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], - row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], - row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], - row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], - row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], - row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], - row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], - row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], - row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], - row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], - row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], - row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], - row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], - row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], - row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], - row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], - row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], - row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], - row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], - row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], - row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], - row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], - row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], - row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], - row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], - row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], - row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], - row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], - row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], - row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], - row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], - row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], - row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], - row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], - row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], - row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], - row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], - row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], - row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], - row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], - row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], - row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], - row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], - row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], - row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], - row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], - row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], - row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], - row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], - row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], - row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], - row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], - row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], - row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], - row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], - row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], - row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], - row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], - row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], - row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], - row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], - row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], - row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], - row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], - row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], - row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], - row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], - row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], - row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], - row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], - row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093])) - - counter += 1 - - description = 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' \ - ' set of decoded data based on testing and research conducted by Scott Koenig' \ - ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' \ - ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' \ - ' to view, search and filter the results.' - report = ArtifactHtmlReport('Ph97.1-iOS17_Ref_for_Asset_Analysis-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph97.1-iOS17_Ref_for_Asset_Analysis-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Added Date-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset Complete-2', - 'zAsset-zPK-4QueryStart-3', - 'zAddAssetAttr-zPK-4QueryStart-4', - 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', - 'zAddAssetAttr-Master Fingerprint-4TableStart-6', - 'zIntResou-Fingerprint-4TableStart-7', - 'zAsset-Bundle Scope-8', - 'zAsset-Syndication State-9', - 'zAsset-Cloud is My Asset-10', - 'zAsset-Cloud is deletable-Asset-11', - 'zAsset-Cloud_Local_State-12', - 'zAsset-Visibility State-13', - 'zExtAttr-Camera Make-14', - 'zExtAttr-Camera Model-15', - 'zExtAttr-Lens Model-16', - 'zExtAttr-Flash Fired-17', - 'zExtAttr-Focal Lenght-18', - 'zExtAttr-Focal Lenth in 35MM-19', - 'zExtAttr-Digital Zoom Ratio-20', - 'zAsset-Derived Camera Capture Device-21', - 'zAddAssetAttr-Camera Captured Device-22', - 'zAddAssetAttr-Imported by-23', - 'zCldMast-Imported By-24', - 'zAddAssetAttr.Imported by Bundle Identifier-25', - 'zAddAssetAttr-Imported By Display Name-26', - 'zCldMast-Imported by Bundle ID-27', - 'zCldMast-Imported by Display Name-28', - 'zAsset-Saved Asset Type-29', - 'zAsset-Directory-Path-30', - 'zAsset-Filename-31', - 'zAddAssetAttr- Original Filename-32', - 'zCldMast- Original Filename-33', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-34', - 'zAsset-Active Library Scope Participation State -4QueryStart-35', - 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36', - 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-37', - 'SPLzShare-Cloud Video Count-SPL -4QueryStart-38', - 'zAddAssetAttr-Date Created Source-39', - 'zAsset-Date Created-40', - 'zCldMast-Creation Date-41', - 'zIntResou-CldMst Date Created-42', - 'zAddAssetAttr-Time Zone Name-43', - 'zAddAssetAttr-Time Zone Offset-44', - 'zAddAssetAttr-Inferred Time Zone Offset-45', - 'zAddAssetAttr-EXIF-String-46', - 'zAsset-Modification Date-47', - 'zAddAssetAttr-Last Viewed Date-48', - 'zAsset-Last Shared Date-49', - 'zCldMast-Cloud Local State-50', - 'zCldMast-Import Date-51', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-52', - 'zAddAssetAttr-Import Session ID-4QueryStart-53', - 'zAddAssetAttr-Alt Import Image Date-54', - 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-55', - 'zAsset-Cloud Batch Publish Date-56', - 'zAsset-Cloud Server Publish Date-57', - 'zAsset-Cloud Download Requests-58', - 'zAsset-Cloud Batch ID-59', - 'zAddAssetAttr-Upload Attempts-60', - 'zAsset-Latitude-61', - 'zExtAttr-Latitude-62', - 'zAsset-Longitude-63', - 'zExtAttr-Longitude-64', - 'zAddAssetAttr-GPS Horizontal Accuracy-65', - 'zAddAssetAttr-Location Hash-66', - 'zAddAssetAttr-Shifted Location Valid-67', - 'zAddAssetAttr-Shifted Location Data-68', - 'zAddAssetAttr-Reverse Location Is Valid-69', - 'zAddAssetAttr-Reverse Location Data-70', - 'ParentzGenAlbum-UUID-4QueryStart-71', - 'zGenAlbum-UUID-4QueryStart-72', - 'SWYConverszGenAlbum-UUID-4QueryStart-73', - 'ParentzGenAlbum-Cloud GUID-4QueryStart-74', - 'zGenAlbum-Cloud GUID-4QueryStart-75', - 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-76', - 'zCldShareAlbumInvRec-Album GUID-4QueryStart-77', - 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-78', - 'zGenAlbum-Project Render UUID-4QueryStart-79', - 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-80', - 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-81', - 'zGenAlbum-Cloud_Local_State-4QueryStart-82', - 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-83', - 'ParentzGenAlbum- Creation Date- 4QueryStart-84', - 'zGenAlbum- Creation Date- 4QueryStart-85', - 'SWYConverszGenAlbum- Creation Date- 4QueryStart-86', - 'zGenAlbum- Cloud Creation Date- 4QueryStart-87', - 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-88', - 'zGenAlbum- Start Date- 4QueryStart-89', - 'SWYConverszGenAlbum- Start Date- 4QueryStart-90', - 'zGenAlbum- End Date- 4QueryStart-91', - 'SWYConverszGenAlbum- End Date- 4QueryStart-92', - 'zGenAlbum-Cloud Subscription Date- 4QueryStart-93', - 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-94', - 'ParentzGenAlbum- Title- 4QueryStart-95', - 'zGenAlbum- Title-User&System Applied- 4QueryStart-96', - 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-97', - 'zGenAlbum-Import Session ID-SWY- 4QueryStart-98', - 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-99', - 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-100', - 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-101', - 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-102', - 'SWYConverszGenAlbum- Syndicate-4QueryStart-103', - 'zGenAlbum-zENT- Entity- 4QueryStart-104', - 'ParentzGenAlbum- Kind- 4QueryStart-105', - 'zGenAlbum-Album Kind- 4QueryStart-106', - 'SWYConverszGenAlbum-Album Kind- 4QueryStart-107', - 'AAAzCldMastMedData-zOPT-108', - 'zAddAssetAttr-Media Metadata Type-109', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-110', - 'AAAzCldMastMedData-Data-111', - 'CldMasterzCldMastMedData-zOPT-112', - 'zCldMast-Media Metadata Type-113', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-114', - 'CMzCldMastMedData-Data-115', - 'zAsset-Search Index Rebuild State-116', - 'zAddAssetAttr-Syndication History-117', - 'zMedAnlyAstAttr-Syndication Processing Version-118', - 'zMedAnlyAstAttr-Syndication Processing Value-119', - 'zAsset-Orientation-120', - 'zAddAssetAttr-Original Orientation-121', - 'zAsset-Kind-122', - 'zAsset-Kind-Sub-Type-123', - 'zAddAssetAttr-Cloud Kind Sub Type-124', - 'zAsset-Playback Style-125', - 'zAsset-Playback Variation-126', - 'zAsset-Video Duration-127', - 'zExtAttr-Duration-128', - 'zAsset-Video CP Duration-129', - 'zAddAssetAttr-Video CP Duration Time Scale-130', - 'zAsset-Video CP Visibility State-131', - 'zAddAssetAttr-Video CP Display Value-132', - 'zAddAssetAttr-Video CP Display Time Scale-133', - 'zIntResou-Datastore Class ID-134', - 'zAsset-Cloud Placeholder Kind-135', - 'zIntResou-Local Availability-136', - 'zIntResou-Local Availability Target-137', - 'zIntResou-Cloud Local State-138', - 'zIntResou-Remote Availability-139', - 'zIntResou-Remote Availability Target-140', - 'zIntResou-Transient Cloud Master-141', - 'zIntResou-Side Car Index-142', - 'zIntResou- File ID-143', - 'zIntResou-Version-144', - 'zAddAssetAttr- Original-File-Size-145', - 'zIntResou-Resource Type-146', - 'zIntResou-Datastore Sub-Type-147', - 'zIntResou-Cloud Source Type-148', - 'zIntResou-Data Length-149', - 'zIntResou-Recipe ID-150', - 'zIntResou-Cloud Last Prefetch Date-151', - 'zIntResou-Cloud Prefetch Count-152', - 'zIntResou- Cloud-Last-OnDemand Download-Date-153', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-154', - 'zIntResou-Compact-UTI-155', - 'zAsset-Uniform Type ID-156', - 'zAsset-Original Color Space-157', - 'zCldMast-Uniform_Type_ID-158', - 'zCldMast-Full Size JPEG Source-159', - 'zAsset-HDR Gain-160', - 'zAsset-zHDR_Type-161', - 'zExtAttr-Codec-162', - 'zIntResou-Codec Four Char Code Name-163', - 'zCldMast-Codec Name-164', - 'zCldMast-Video Frame Rate-165', - 'zCldMast-Placeholder State-166', - 'zAsset-Depth_Type-167', - 'zAsset-Avalanche UUID-4TableStart-168', - 'zAsset-Avalanche_Pick_Type-BurstAsset-169', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-170', - 'zAddAssetAttr-Cloud Recovery State-171', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-172', - 'zAsset-Deferred Processing Needed-173', - 'zAsset-Video Deferred Processing Needed-174', - 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-175', - 'zAddAssetAttr-Deferred Processing Candidate Options-176', - 'zAsset-Has Adjustments-Camera-Effects-Filters-177', - 'zUnmAdj-UUID-4TableStart-178', - 'zAsset-Adjustment Timestamp-179', - 'zUnmAdj-Adjustment Timestamp-180', - 'zAddAssetAttr-Editor Bundle ID-181', - 'zUnmAdj-Editor Localized Name-182', - 'zUnmAdj-Adjustment Format ID-183', - 'zAddAssetAttr-Montage-184', - 'zUnmAdj-Adjustment Render Types-185', - 'zUnmAdj-Adjustment Format Version-186', - 'zUnmAdj-Adjustment Base Image Format-187', - 'zAsset-Favorite-188', - 'zAsset-Hidden-189', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-190', - 'zAsset-Trashed Date-191', - 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-192', - 'zAsset-Delete-Reason-193', - 'zIntResou-Trash State-194', - 'zIntResou-Trashed Date-195', - 'zAsset-Cloud Delete State-196', - 'zIntResou-Cloud Delete State-197', - 'zAddAssetAttr-PTP Trashed State-198', - 'zIntResou-PTP Trashed State-199', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-200', - 'zMedAnlyAstAttr-Media Analysis Timestamp-201', - 'zAsset-Analysis State Modificaion Date-202', - 'zAddAssetAttr- Pending View Count-203', - 'zAddAssetAttr- View Count-204', - 'zAddAssetAttr- Pending Play Count-205', - 'zAddAssetAttr- Play Count-206', - 'zAddAssetAttr- Pending Share Count-207', - 'zAddAssetAttr- Share Count-208', - 'zAddAssetAttr-Allowed for Analysis-209', - 'zAddAssetAttr-Scene Analysis Version-210', - 'zAddAssetAttr-Scene Analysis is From Preview-211', - 'zAddAssetAttr-Scene Analysis Timestamp-212', - 'zAsset-Duplication Asset Visibility State-213', - 'zAddAssetAttr-Destination Asset Copy State-214', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-215', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-216', - 'zCldMast-Source Master For Duplication Scope ID-217', - 'zAddAssetAttr-Source Asset For Duplication ID-218', - 'zCldMast-Source Master for Duplication ID-219', - 'zAddAssetAttr-Variation Suggestions States-220', - 'zAsset-High Frame Rate State-221', - 'zAsset-Video Key Frame Time Scale-222', - 'zAsset-Video Key Frame Value-223', - 'zExtAttr-ISO-224', - 'zExtAttr-Metering Mode-225', - 'zExtAttr-Sample Rate-226', - 'zExtAttr-Track Format-227', - 'zExtAttr-White Balance-228', - 'zExtAttr-Aperture-229', - 'zExtAttr-BitRate-230', - 'zExtAttr-Exposure Bias-231', - 'zExtAttr-Frames Per Second-232', - 'zExtAttr-Shutter Speed-233', - 'zExtAttr-Slush Scene Bias-234', - 'zExtAttr-Slush Version-235', - 'zExtAttr-Slush Preset-236', - 'zExtAttr-Slush Warm Bias-237', - 'zAsset-Height-238', - 'zAddAssetAttr-Original Height-239', - 'zIntResou-Unoriented Height-240', - 'zAsset-Width-241', - 'zAddAssetAttr-Original Width-242', - 'zIntResou-Unoriented Width-243', - 'zShare-Thumbnail Image Data-244', - 'SPLzShare-Thumbnail Image Data-245', - 'zAsset-Thumbnail Index-246', - 'zAddAssetAttr-Embedded Thumbnail Height-247', - 'zAddAssetAttr-Embedded Thumbnail Length-248', - 'zAddAssetAttr-Embedded Thumbnail Offset-249', - 'zAddAssetAttr-Embedded Thumbnail Width-250', - 'zAsset-Packed Acceptable Crop Rect-251', - 'zAsset-Packed Badge Attributes-252', - 'zAsset-Packed Preferred Crop Rect-253', - 'zAsset-Curation Score-254', - 'zAsset-Camera Processing Adjustment State-255', - 'zAsset-Depth Type-256', - 'zAsset-Is Magic Carpet-QuicktimeMOVfile-257', - 'zAddAssetAttr-Orig Resource Choice-258', - 'zAsset-Spatial Type-259', - 'zAddAssetAttr-Spatial Over Capture Group ID-260', - 'zAddAssetAttr-Place Annotation Data-261', - 'zAddAssetAttr-Distance Identity-262', - 'zAddAssetAttr-Edited IPTC Attributes-263', - 'zAssetDes-Long Description-264', - 'zAddAssetAttr-Asset Description-265', - 'zAddAssetAttr-Title-Comments via Cloud Website-266', - 'zAddAssetAttr-Accessibility Description-267', - 'zAddAssetAttr-Photo Stream Tag ID-268', - 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-269', - 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-270', - 'zCldFeedEnt-Entry Date-271', - 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-272', - 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-273', - 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-274', - 'zCldFeedEnt-Entry Priority Number-275', - 'zCldFeedEnt-Entry Type Number-276', - 'zCldSharedComment-Cloud GUID-4TableStart-277', - 'zCldSharedComment-Date-278', - 'zCldSharedComment-Comment Client Date-279', - 'zAsset-Cloud Last Viewed Comment Date-280', - 'zCldSharedComment-Type-281', - 'zCldSharedComment-Comment Text-282', - 'zCldSharedComment-Commenter Hashed Person ID-283', - 'zCldSharedComment-Batch Comment-284', - 'zCldSharedComment-Is a Caption-285', - 'zAsset-Cloud Has Comments by Me-286', - 'zCldSharedComment-Is My Comment-287', - 'zCldSharedComment-Is Deletable-288', - 'zAsset-Cloud Has Comments Conversation-289', - 'zAsset-Cloud Has Unseen Comments-290', - 'zCldSharedComment-Liked-291', - 'zAddAssetAttr-Share Type-292', - 'zAsset-Library Scope Share State- StillTesting-293', - 'zAsset-Active Library Scope Participation State-294', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-295', - 'zShare-UUID-CMM-4TableStart-296', - 'SPLzShare-UUID-SPL-4TableStart-297', - 'zShare-zENT-CMM-298', - 'SPLzShare-zENT-SPL-299', - 'zSharePartic-z54SHARE-300', - 'SPLzSharePartic-z54SHARE-301', - 'zShare-Status-CMM-302', - 'SPLzShare-Status-SPL-303', - 'zShare-Scope Type-CMM-304', - 'SPLzShare-Scope Type-SPL-305', - 'zShare-Local Publish State-CMM-306', - 'SPLzShare-Local Publish State-SPL-307', - 'zShare-Public Permission-CMM-308', - 'SPLzShare-Public Permission-SPL-309', - 'zShare-Originating Scope ID-CMM-310', - 'SPLzShare-Originating Scope ID-SPL-311', - 'zShare-Scope ID-CMM-312', - 'SPLzShare-Scope ID-SPL-313', - 'zShare-Title-CMM-314', - 'SPLzShare-Title-SPL-315', - 'zShare-Share URL-CMM-316', - 'SPLzShare-Share URL-SPL-317', - 'zShare-Creation Date-CMM-318', - 'SPLzShare-Creation Date-SPL-319', - 'zShare-Start Date-CMM-320', - 'SPLzShare-Start Date-SPL-321', - 'zShare-End Date-CMM-322', - 'SPLzShare-End Date-SPL-323', - 'zShare-Expiry Date-CMM-324', - 'SPLzShare-Expiry Date-SPL-325', - 'zShare-Cloud Item Count-CMM-326', - 'SPLzShare-Cloud Item Count-SPL-327', - 'zShare-Asset Count-CMM-328', - 'SPLzShare-Asset Count-SPL-329', - 'zShare-Cloud Photo Count-CMM-330', - 'SPLzShare-Cloud Photo Count-SPL-331', - 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-332', - 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-333', - 'zShare-Photos Count-CMM-334', - 'SPLzShare-Photos Count-CMM-SPL-335', - 'zShare-Uploaded Photos Count-CMM-336', - 'SPLzShare-Uploaded Photos Count-SPL-337', - 'zShare-Cloud Video Count-CMM-338', - 'SPLzShare-Cloud Video Count-SPL-339', - 'zShare-Videos Count-CMM-340', - 'SPLzShare-Videos Count-SPL-341', - 'zShare-Uploaded Videos Count-CMM-342', - 'SPLzShare-Uploaded Videos Count-SPL-343', - 'zShare-Force Sync Attempted-CMM-344', - 'SPLzShare-Force Sync Attempted-SPL-345', - 'zShare-Cloud Local State-CMM-346', - 'SPLzShare-Cloud Local State-SPL-347', - 'zShare-Scope Syncing State-CMM-348', - 'SPLzShare-Scope Syncing State-SPL-349', - 'zShare-Auto Share Policy-CMM-350', - 'SPLzShare-Auto Share Policy-SPL-351', - 'zShare-Should Notify On Upload Completion-CMM-352', - 'SPLzShare-Should Notify On Upload Completion-SPL-353', - 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-354', - 'zShare-Trashed State-CMM-355', - 'SPLzShare-Trashed State-SPL-356', - 'zShare-Cloud Delete State-CMM-357', - 'SPLzShare-Cloud Delete State-SPL-358', - 'zShare-Trashed Date-CMM-359', - 'SPLzShare-Trashed Date-SPL-360', - 'zShare-LastParticipant Asset Trash Notification Date-CMM-361', - 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL-362', - 'zShare-Last Participant Asset Trash Notification View Date-CMM-363', - 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL-364', - 'zShare-Exit Source-CMM-365', - 'SPLzShare-Exit Source-SPL-366', - 'zShare-SPL_Exit State-CMM-367', - 'SPLzShare-SPL_Exit State-SPL-368', - 'zShare-Exit Type-CMM-369', - 'SPLzShare-Exit Type-SPL-370', - 'zShare-Should Ignor Budgets-CMM-371', - 'SPLzShare-Should Ignor Budgets-SPL-372', - 'zShare-Preview State-CMM-373', - 'SPLzShare-Preview State-SPL-374', - 'zShare-Preview Data-CMM-375', - 'SPLzShare-Preview Data-SPL-376', - 'zShare-Rules-CMM-377', - 'SPLzShare-Rules-SPL-378', - 'zShare-Thumbnail Image Data-CMM-379', - 'SPLzShare-Thumbnail Image Data-SPL-380', - 'zShare-Participant Cloud Update State-CMM-381', - 'SPLzShare-Participant Cloud Update State-SPL-382', - 'zSharePartic-UUID-4TableStart-383', - 'SPLzSharePartic-UUID-4TableStart-384', - 'zSharePartic-Acceptance Status-385', - 'SPLzSharePartic-Acceptance Status-386', - 'zSharePartic-Is Current User-387', - 'SPLzSharePartic-Is Current User-388', - 'zSharePartic-Role-389', - 'SPLzSharePartic-Role-390', - 'zSharePartic-Premission-391', - 'SPLzSharePartic-Premission-392', - 'zSharePartic-Participant ID-393', - 'SPLzSharePartic-Participant ID-394', - 'zSharePartic-User ID-395', - 'SPLzSharePartic-User ID-396', - 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-397', - 'SPLzSharePartic-zPK-4TableStart-398', - 'zSharePartic-zPK-4TableStart-399', - 'zSharePartic-Email Address-400', - 'SPLzSharePartic-Email Address-401', - 'zSharePartic-Phone Number-402', - 'SPLzSharePartic-Phone Number-403', - 'zSharePartic-Exit State-404', - 'SPLzSharePartic-Exit State-405', - 'ParentzGenAlbum-UUID-4TableStart-406', - 'zGenAlbum-UUID-4TableStart-407', - 'SWYConverszGenAlbum-UUID-4TableStart-408', - 'ParentzGenAlbum-Cloud GUID-4TableStart-409', - 'zGenAlbum-Cloud GUID-4TableStart-410', - 'SWYConverszGenAlbum-Cloud GUID-4TableStart-411', - 'zCldShareAlbumInvRec-Album GUID-4TableStart-412', - 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-413', - 'zGenAlbum-Project Render UUID-4TableStart-414', - 'SWYConverszGenAlbum-Project Render UUID-4TableStart-415', - 'zAlbumList-Needs Reordering Number-416', - 'zGenAlbum-zENT- Entity-417', - 'ParentzGenAlbum-Kind-418', - 'zGenAlbum-Album Kind-419', - 'SWYConverszGenAlbum-Album Kind-420', - 'ParentzGenAlbum-Cloud-Local-State-421', - 'zGenAlbum-Cloud_Local_State-422', - 'SWYConverszGenAlbum-Cloud_Local_State-423', - 'ParentzGenAlbum- Title-424', - 'zGenAlbum- Title-User&System Applied-425', - 'SWYConverszGenAlbum- Title -User&System Applied-426', - 'zGenAlbum-Import Session ID-SWY-427', - 'zAsset- Conversation= zGenAlbum_zPK-428', - 'SWYConverszGenAlbum- Import Session ID-SWY-429', - 'zGenAlbum-Imported by Bundle Identifier-430', - 'SWYzGenAlbum-Imported by Bundle Identifier-431', - 'SWYConverszGenAlbum- Syndicate-432', - 'ParentzGenAlbum-Creation Date-433', - 'zGenAlbum-Creation Date-434', - 'SWYConverszGenAlbum-Creation Date-435', - 'zGenAlbum-Cloud Creation Date-436', - 'SWYConverszGenAlbum-Cloud Creation Date-437', - 'zGenAlbum-Start Date-438', - 'SWYConverszGenAlbum-Start Date-439', - 'zGenAlbum-End Date-440', - 'SWYConverszGenAlbum-End Date-441', - 'zGenAlbum-Cloud Subscription Date-442', - 'SWYConverszGenAlbum-Cloud Subscription Date-443', - 'ParentzGenAlbum-Pending Items Count-444', - 'zGenAlbum-Pending Items Count-445', - 'SWYConverszGenAlbum-Pending Items Count-446', - 'ParentzGenAlbum-Pending Items Type-447', - 'zGenAlbum-Pending Items Type-448', - 'SWYConverszGenAlbum-Pending Items Type-449', - 'zGenAlbum- Cached Photos Count-450', - 'SWYConverszGenAlbum- Cached Photos Count-451', - 'zGenAlbum- Cached Videos Count-452', - 'SWYConverszGenAlbum- Cached Videos Count-453', - 'zGenAlbum- Cached Count-454', - 'SWYConverszGenAlbum- Cached Count-455', - 'ParentzGenAlbum-Sync Event Order Key-456', - 'zGenAlbum-Sync Event Order Key-457', - 'SWYConverszGenAlbum-Sync Event Order Key-458', - 'zGenAlbum-Has Unseen Content-459', - 'SWYConverszGenAlbum-Has Unseen Content-460', - 'zGenAlbum-Unseen Asset Count-461', - 'SWYConverszGenAlbum-Unseen Asset Count-462', - 'zGenAlbum-is Owned-463', - 'SWYConverszGenAlbum-is Owned-464', - 'zGenAlbum-Cloud Relationship State-465', - 'SWYConverszGenAlbum-Cloud Relationship State-466', - 'zGenAlbum-Cloud Relationship State Local-467', - 'SWYConverszGenAlbum-Cloud Relationship State Local-468', - 'zGenAlbum-Cloud Owner Mail Key-469', - 'SWYConverszGenAlbum-Cloud Owner Mail Key-470', - 'zGenAlbum-Cloud Owner Frist Name-471', - 'SWYConverszGenAlbum-Cloud Owner Frist Name-472', - 'zGenAlbum-Cloud Owner Last Name-473', - 'SWYConverszGenAlbum-Cloud Owner Last Name-474', - 'zGenAlbum-Cloud Owner Full Name-475', - 'SWYConverszGenAlbum-Cloud Owner Full Name-476', - 'zGenAlbum-Cloud Person ID-477', - 'SWYConverszGenAlbum-Cloud Person ID-478', - 'zAsset-Cloud Owner Hashed Person ID-479', - 'zGenAlbum-Cloud Owner Hashed Person ID-480', - 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-481', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-482', - 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-483', - 'zGenAlbum-Cloud Multi-Contributors Enabled-484', - 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-485', - 'zGenAlbum-Cloud Album Sub Type-486', - 'SWYConverszGenAlbum-Cloud Album Sub Type-487', - 'zGenAlbum-Cloud Contribution Date-488', - 'SWYConverszGenAlbum-Cloud Contribution Date-489', - 'zGenAlbum-Cloud Last Interesting Change Date-490', - 'SWYConverszGenAlbum-Cloud Last Interesting Change Date-491', - 'zGenAlbum-Cloud Notification Enabled-492', - 'SWYConverszGenAlbum-Cloud Notification Enabled-493', - 'ParentzGenAlbum-Pinned-494', - 'zGenAlbum-Pinned-495', - 'SWYConverszGenAlbum-Pinned-496', - 'ParentzGenAlbum-Custom Sort Key-497', - 'zGenAlbum-Custom Sort Key-498', - 'SWYConverszGenAlbum-Custom Sort Key-499', - 'ParentzGenAlbum-Custom Sort Ascending-500', - 'zGenAlbum-Custom Sort Ascending-501', - 'SWYConverszGenAlbum-Custom Sort Ascending-502', - 'ParentzGenAlbum-Is Prototype-503', - 'zGenAlbum-Is Prototype-504', - 'SWYConverszGenAlbum-Is Prototype-505', - 'ParentzGenAlbum-Project Document Type-506', - 'zGenAlbum-Project Document Type-507', - 'SWYConverszGenAlbum-Project Document Type-508', - 'ParentzGenAlbum-Custom Query Type-509', - 'zGenAlbum-Custom Query Type-510', - 'SWYConverszGenAlbum-Custom Query Type-511', - 'ParentzGenAlbum-Trashed State-512', - 'ParentzGenAlbum-Trash Date-513', - 'zGenAlbum-Trashed State-514', - 'zGenAlbum-Trash Date-515', - 'SWYConverszGenAlbum-Trashed State-516', - 'SWYConverszGenAlbum-Trash Date-517', - 'ParentzGenAlbum-Cloud Delete State-518', - 'zGenAlbum-Cloud Delete State-519', - 'SWYConverszGenAlbum-Cloud Delete State-520', - 'zGenAlbum-Cloud Owner Whitelisted-521', - 'SWYConverszGenAlbum-Cloud Owner Whitelisted-522', - 'zGenAlbum-Cloud Local Public URL Enabled-523', - 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-524', - 'zGenAlbum-Cloud Public URL Enabled-525', - 'zGenAlbum-Public URL-526', - 'SWYConverszGenAlbum-Cloud Public URL Enabled-527', - 'SWYConverszGenAlbum-Public URL-528', - 'zGenAlbum-Key Asset Face Thumb Index-529', - 'SWYConverszGenAlbum-Key Asset Face Thumb Index-530', - 'zGenAlbum-Project Text Extension ID-531', - 'SWYConverszGenAlbum-Project Text Extension ID-532', - 'zGenAlbum-User Query Data-533', - 'SWYConverszGenAlbum-User Query Data-534', - 'zGenAlbum-Custom Query Parameters-535', - 'SWYConverszGenAlbum-Custom Query Parameters-536', - 'zGenAlbum-Project Data-537', - 'SWYConverszGenAlbum-Project Data-538', - 'zGenAlbum-Search Index Rebuild State-539', - 'SWYConverszGenAlbum-Search Index Rebuild State-540', - 'zGenAlbum-Duplicate Type-541', - 'SWYConverszGenAlbum-Duplicate Type-542', - 'zGenAlbum-Privacy State-543', - 'SWYConverszGenAlbum-Privacy State-544', - 'zCldShareAlbumInvRec-zUUID-4TableStart-545', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-546', - 'zCldShareAlbumInvRec-Invitation State Local-547', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-548', - 'zCldShareAlbumInvRec-Subscription Date-549', - 'zCldShareAlbumInvRec-Invitee First Name-550', - 'zCldShareAlbumInvRec-Invitee Last Name-551', - 'zCldShareAlbumInvRec-Invitee Full Name-552', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-553', - 'zCldShareAlbumInvRec-Invitee Email Key-554', - 'zGenAlbum-Key Asset Face ID-555', - 'zFaceCrop-Face Area Points-556', - 'zAsset-Face Adjustment Version-557', - 'zAddAssetAttr-Face Analysis Version-558', - 'zDetFace-Asset Visible-559', - 'zPerson-Face Count-560', - 'zDetFace-Face Crop-561', - 'zDetFace-Face Algorithm Version-562', - 'zDetFace-Adjustment Version-563', - 'zDetFace-UUID-4TableStart-564', - 'zPerson-Person UUID-4TableStart-565', - 'zPerson - MD ID-566', - 'zPerson - Asset Sort Order-567', - 'zDetFace-Confirmed Face Crop Generation State-568', - 'zDetFace-Manual-569', - 'zDetFace-Detection Type-570', - 'zPerson-Detection Type-571', - 'zDetFace-VIP Model Type-572', - 'zDetFace-Name Source-573', - 'zDetFace-Cloud Name Source-574', - 'zPerson-Merge Candidate Confidence-575', - 'zPerson-Person URI-576', - 'zPerson-Display Name-577', - 'zPerson-Full Name-578', - 'zPerson-Cloud Verified Type-579', - 'zFaceCrop-State-580', - 'zFaceCrop-Type-581', - 'zFaceCrop-UUID-4TableStart-582', - 'zPerson-Type-583', - 'zPerson-Verified Type-584', - 'zPerson-Gender Type-585', - 'zDetFace-Gender Type-586', - 'zDetFace-Center X-587', - 'zDetFace-Center Y-588', - 'zPerson-Age Type Estimate-589', - 'zDetFace-Age Type Estimate-590', - 'zDetFace-Ethnicity Type-591', - 'zDetFace-Skin Tone Type-592', - 'zDetFace-Hair Type-593', - 'zDetFace-Hair Color Type-594', - 'zDetFace-Head Gear Type-595', - 'zDetFace-Facial Hair Type-596', - 'zDetFace-Has Face Mask-597', - 'zDetFace-Pose Type-598', - 'zDetFace-Face Expression Type-599', - 'zDetFace-Has Smile-600', - 'zDetFace-Smile Type-601', - 'zDetFace-Lip Makeup Type-602', - 'zDetFace-Eyes State-603', - 'zDetFace-Is Left Eye Closed-604', - 'zDetFace-Is Right Eye Closed-605', - 'zDetFace-Gaze Center X-606', - 'zDetFace-Gaze Center Y-607', - 'zDetFace-Face Gaze Type-608', - 'zDetFace-Eye Glasses Type-609', - 'zDetFace-Eye Makeup Type-610', - 'zDetFace-Cluster Squence Number Key-611', - 'zDetFace-Grouping ID-612', - 'zDetFace-Master ID-613', - 'zDetFace-Quality-614', - 'zDetFace-Quality Measure-615', - 'zDetFace-Source Height-616', - 'zDetFace-Source Width-617', - 'zDetFace-Hidden-Asset Hidden-618', - 'zDetFace-In Trash-Recently Deleted-619', - 'zDetFace-Cloud Local State-620', - 'zDetFace-Training Type-621', - 'zDetFace.Pose Yaw-622', - 'zDetFace-Body Center X-623', - 'zDetFace-Body Center Y-624', - 'zDetFace-Body Height-625', - 'zDetFace-Body Width-626', - 'zDetFace-Roll-627', - 'zDetFace-Size-628', - 'zDetFace-Cluster Squence Number-629', - 'zDetFace-Blur Score-630', - 'zDetFacePrint-Face Print Version-631', - 'zMedAnlyAstAttr-Face Count-632', - 'zDetFaceGroup-UUID-4TableStart-633', - 'zDetFaceGroup-Person Builder State-634', - 'zDetFaceGroup-UnNamed Face Count-635', - 'zPerson-In Person Naming Model-636', - 'zPerson-Key Face Pick Source Key-637', - 'zPerson-Manual Order Key-638', - 'zPerson-Question Type-639', - 'zPerson-Suggested For Client Type-640', - 'zPerson-Merge Target Person-641', - 'zPerson-Cloud Local State-642', - 'zFaceCrop-Cloud Local State-643', - 'zFaceCrop-Cloud Type-644', - 'zPerson-Cloud Delete State-645', - 'zFaceCrop-Cloud Delete State-646', - 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-647', - 'zAsset-Highlight Visibility Score-648', - 'zMemory-UUID-4TableStart-649', - 'zMemory-AssetListPredicte-650', - 'zMemory-Score-651', - 'zMemory-SubTitle-652', - 'zMemory-Title-653', - 'zMemory-Category-654', - 'zMemory-SubCategory-655', - 'zMemory-Creation Date-656', - 'zMemory-Last Enrichment Date-657', - 'zMemory-User Action Options-658', - 'zMemory-Favorite Memory-659', - 'zMemory-View Count-660', - 'zMemory-Play Count-661', - 'zMemory-Rejected-662', - 'zMemory-Share Count-663', - 'zMemory-Sharing Composition-664', - 'zMemory-Last Movie Play Date-665', - 'zMemory-Last Viewed Date-666', - 'zMemory-Pending Play Count Memory-667', - 'zMemory-Pending Share Count Memory-668', - 'zMemory-Pending View Count Memory-669', - 'zMemory-Pending State-670', - 'zMemory-Featured State-671', - 'zMemory-Photos Graph Version-672', - 'zMemory-Graph Memory Identifier-673', - 'zMemory-Notification State-674', - 'zMemory-Cloud Local State-675', - 'zMemory-Cloud Delete State-676', - 'zMemory-Story Color Grade Kind-677', - 'zMemory-Story Serialized Title Category-678', - 'zMemory-Syndicated Content State-679', - 'zMemory-Search Index Rebuild State-680', - 'zMemory-Black Listed Feature-681', - 'zMoment-UUID-4TableStart-682', - 'zMoment-Aggregation Score-683', - 'zMoment-Start Date-684', - 'zMoment-Representative Date-685', - 'zMoment-Timezone Offset-686', - 'zMoment-Modification Date-687', - 'zMoment-End Date-688', - 'zMoment-SubTitle-689', - 'zMoment-Title-690', - 'zMoment-Originator State-691', - 'zMoment-Sharing Composition-692', - 'zMoment-Cached Count Shared-693', - 'zMoment-Processed Location-694', - 'zMoment-Approx Latitude-695', - 'zMoment-Approx Longitude-696', - 'zMoment-GPS Horizontal Accuracy-697', - 'zMoment-Cache Count-698', - 'zMoment-Cached Photos Count-699', - 'zMoment-Cached Videos Count-700', - 'zMoment-Trashed State-701', - 'SBKAzSugg-UUID-4TableStart-702', - 'SBKAzSugg-Suggestion Context-703', - 'SBKAzSugg-Sharing Composition-704', - 'SBKAzSugg-Start Date-705', - 'SBKAzSugg-State-706', - 'SBKAzSugg-Featured State-707', - 'SBKAzSugg- Available Features-708', - 'SBKAzSugg-Notification State-709', - 'SBKAzSugg-Creation Date-710', - 'SBKAzSugg-End Date-711', - 'SBKAzSugg-Activation Date-712', - 'SBKAzSugg-Expunge Date-713', - 'SBKAzSugg-Relevant Until Date-714', - 'SBKAzSugg-Title-715', - 'SBKAzSugg-Sub Title-716', - 'SBKAzSugg-Cached Count-717', - 'SBKAzSugg-Cahed Photos Count-718', - 'SBKAzSugg-Cached Videos Count-719', - 'SBKAzSugg-Type-720', - 'SBKAzSugg-Sub Type-721', - 'SBKAzSugg-Action Data-722', - 'SBKAzSugg-Version-723', - 'SBKAzSugg-Cloud Local State-724', - 'SBKAzSugg-Cloud Delete State-725', - 'SBRAzSugg-UUID-4TableStart-726', - 'SBRAzSugg-Suggestion Context-727', - 'SBRAzSugg-Sharing Composition-728', - 'SBRAzSugg-Start Date-729', - 'SBRAzSugg-State-730', - 'SBRAzSugg-Featured State-731', - 'SBRAzSugg- Available Features-732', - 'SBRAzSugg-Notification State-733', - 'SBRAzSugg-Creation Date-734', - 'SBRAzSugg-End Date-735', - 'SBRAzSugg-Activation Date-736', - 'SBRAzSugg-Expunge Date-737', - 'SBRAzSugg-Relevant Until Date-738', - 'SBRAzSugg-Title-739', - 'SBRAzSugg-Sub Title-740', - 'SBRAzSugg-Cached Count-741', - 'SBRAzSugg-Cahed Photos Count-742', - 'SBRAzSugg-Cached Videos Count-743', - 'SBRAzSugg-Type-744', - 'SBRAzSugg-Sub Type-745', - 'SBRAzSugg-Action Data-746', - 'SBRAzSugg-Version-747', - 'SBRAzSugg-Cloud Local State-748', - 'SBRAzSugg-Cloud Delete State-749', - 'zMedAnlyAstAttr-Media Analysis Version-750', - 'zMedAnlyAstAttr-Audio Classification-751', - 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-752', - 'zMedAnlyAstAttr-Best Video Range Start Time Scale-753', - 'zMedAnlyAstAttr-Best Video Range Duration Value-754', - 'zMedAnlyAstAttr-Best Video Range Start Value-755', - 'zMedAnlyAstAttr-Packed Best Playback Rect-756', - 'zMedAnlyAstAttr-Activity Score-757', - 'zMedAnlyAstAttr-Video Score-758', - 'zMedAnlyAstAttr-Audio Score-759', - 'zMedAnlyAstAttr-Wallpaper Score-760', - 'zMedAnlyAstAttr-AutoPlay Suggestion Score-761', - 'zMedAnlyAstAttr-Blurriness Score-762', - 'zMedAnlyAstAttr-Exposure Score-763', - 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-764', - 'zMedAnlyAstAttr-Probable Rotation Direction-765', - 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-766', - 'zAssetAnalyState-Asset UUID-4TableStart-767', - 'zAssetAnalyState-Analyisis State-768', - 'zAssetAnalyState-Worker Flags-769', - 'zAssetAnalyState-Worker Type-770', - 'zAssetAnalyState-Ignore Until Date-771', - 'zAssetAnalyState-Last Ignored Date-772', - 'zAssetAnalyState-Sort Token-773', - 'zMedAnlyAstAttr-Character Recognition Attr-774', - 'zCharRecogAttr-Algorithm Version-775', - 'zCharRecogAttr-Adjustment Version-776', - 'zMedAnlyAstAttr-Visual Search Attributes-777', - 'zVisualSearchAttr-Algorithm Version-778', - 'zVisualSearchAttr-Adjustment Version-779', - 'zVisualSearchAttr - Sticker Confidence Algorithm Version-780', - 'zVisualSearchAttr - Sticker Confidence Score-781', - 'zAsset-Sticker Confidence Score-782', - 'zAsset-Overall Aesthetic Score-783', - 'zCompAssetAttr-Behavioral Score-784', - 'zCompAssetAttr-Failure Score zCompAssetAttr-785', - 'zCompAssetAttr-Harmonious Color Score-786', - 'zCompAssetAttr-Immersiveness Score-787', - 'zCompAssetAttr-Interaction Score-788', - 'zCompAssetAttr-Intersting Subject Score-789', - 'zCompAssetAttr-Intrusive Object Presence Score-790', - 'zCompAssetAttr-Lively Color Score-791', - 'zCompAssetAttr-Low Light-792', - 'zCompAssetAttr-Noise Score-793', - 'zCompAssetAttr-Pleasant Camera Tilt Score-794', - 'zCompAssetAttr-Pleasant Composition Score-795', - 'zCompAssetAttr-Pleasant Lighting Score-796', - 'zCompAssetAttr-Pleasant Pattern Score-797', - 'zCompAssetAttr-Pleasant Perspective Score-798', - 'zCompAssetAttr-Pleasant Post Processing Score-799', - 'zCompAssetAttr-Pleasant Reflection Score-800', - 'zCompAssetAttrPleasant Symmetry Score-801', - 'zCompAssetAttr-Sharply Focused Subject Score-802', - 'zCompAssetAttr-Tastfully Blurred Score-803', - 'zCompAssetAttr-Well Chosen Subject Score-804', - 'zCompAssetAttr-Well Framed Subject Score-805', - 'zCompAssetAttr-Well Timeed Shot Score-806', - 'zCldRes-Asset UUID-4TableStart-807', - 'zCldRes-Cloud Local State-808', - 'zCldRes-File Size-809', - 'zCldRes-Height-810', - 'zCldRes-Is Available-811', - 'zCldRes-Is Locally Available-812', - 'zCldRes-Prefetch Count-813', - 'zCldRes-Source Type-814', - 'zCldRes-Type-815', - 'zCldRes-Width-816', - 'zCldRes-Date Created-817', - 'zCldRes-Last OnDemand Download Date-818', - 'zCldRes-Last Prefetch Date-819', - 'zCldRes-Prunedat-820', - 'zCldRes-File Path-821', - 'zCldRes-Fingerprint-822', - 'zCldRes-Item ID-823', - 'zCldRes-UniID-824', - 'zUserFeedback-UUID-4TableStart-825', - 'zUserFeedback-Feature-826', - 'zUserFeedback-Type-827', - 'zUserFeedback-Last Modified Date-828', - 'zUserFeedback-Context-829', - 'zUserFeedback-Cloud Local State-830', - 'zUserFeedback-Cloud Delete State-831', - 'zUserFeedback - Creation Type-832', - 'zAddAssetAttr-zPK-833', - 'zAddAssetAttr-zENT-834', - 'ZAddAssetAttr-zOPT-835', - 'zAddAssetAttr-zAsset= zAsset_zPK-836', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-837', - 'zAddAssetAttr-Master Fingerprint-838', - 'zAddAssetAttr-Public Global UUID-839', - 'zAddAssetAttr-Deferred Photo Identifier-840', - 'zAddAssetAttr-Original Assets UUID-841', - 'zAddAssetAttr-Import Session ID-842', - 'zAddAssetAttr-Originating Asset Identifier-843', - 'zAddAssetAttr.Adjusted Fingerprint-844', - 'zAlbumList-zPK= Album List Key-845', - 'zAlbumList-zENT-846', - 'zAlbumList-zOPT-847', - 'zAlbumList-ID Key-848', - 'zAlbumList-UUID-849', - 'zAsset-zPK-850', - 'zAsset-zENT-851', - 'zAsset-zOPT-852', - 'zAsset-Master= zCldMast-zPK-853', - 'zAsset-Extended Attributes= zExtAttr-zPK-854', - 'zAsset-Import Session Key-855', - 'zAsset-Trashed by Participant= zSharePartic_zPK-856', - 'zAsset-Photo Analysis Attributes Key-857', - 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-858', - 'zAsset-FOK-Cloud Feed Asset Entry Key-859', - 'zAsset-Moment Share Key= zShare-zPK-860', - 'zAsset-zMoment Key= zMoment-zPK-861', - 'zAsset-Computed Attributes Asset Key-862', - 'zAsset-Highlight Being Assets-HBA Key-863', - 'zAsset-Highlight Being Extended Assets-HBEA Key-864', - 'zAsset-Highlight Being Key Asset Private-HBKAP Key-865', - 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-866', - 'zAsset-Highligh Being Summary Assets-HBSA Key-867', - 'zAsset-Day Group Highlight Being Assets-DGHBA Key-868', - 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-869', - 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-870', - 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-871', - 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-872', - 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-873', - 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-874', - 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-875', - 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-876', - 'zAsset-Promotion Score-877', - 'zAsset-Iconic Score-878', - 'zAsset-Media Analysis Attributes Key-879', - 'zAsset-Media Group UUID-880', - 'zAsset-UUID = store.cloudphotodb-881', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-882', - 'zAsset.Cloud Collection GUID-883', - 'zAsset-Avalanche UUID-884', - 'zAssetAnalyState-zPK-885', - 'zAssetAnalyState-zEnt-886', - 'zAssetAnalyState-zOpt-887', - 'zAssetAnalyState-Asset= zAsset-zPK-888', - 'zAssetAnalyState-Asset UUID-889', - 'zAsstContrib-zPK-890', - 'zAsstContrib-zEnt-891', - 'zAsstContrib-zOpt-892', - 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-893', - 'zAsstContrib-Participant= zSharePartic-zPK-894', - 'zAssetDes-zPK-895', - 'zAssetDes-zENT-896', - 'zAssetDes-zOPT-897', - 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-898', - 'zCharRecogAttr-zPK-899', - 'zCharRecogAttr-zENT-900', - 'zCharRecogAttr-zOPT-901', - 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-902', - 'zCldFeedEnt-zPK= zCldShared keys-903', - 'zCldFeedEnt-zENT-904', - 'zCldFeedEnt-zOPT-905', - 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-906', - 'zCldFeedEnt-Entry Invitation Record GUID-907', - 'zCldFeedEnt-Entry Cloud Asset GUID-908', - 'zCldMast-zPK= zAsset-Master-909', - 'zCldMast-zENT-910', - 'zCldMast-zOPT-911', - 'zCldMast-Moment Share Key= zShare-zPK-912', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-913', - 'zCldMast-Originating Asset ID-914', - 'zCldMast-Import Session ID- AirDrop-StillTesting-915', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-916', - 'CMzCldMastMedData-zENT-917', - 'CMzCldMastMedData-zOPT-918', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-919', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-920', - 'AAAzCldMastMedData-zENT-921', - 'AAAzCldMastMedData-zOPT-922', - 'AAAzCldMastMedData-CldMast key-923', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-924', - 'zCldRes-zPK-925', - 'zCldRes-zENT-926', - 'zCldRes-zOPT-927', - 'zCldRes-Asset= zAsset-zPK-928', - 'zCldRes-Cloud Master= zCldMast-zPK-929', - 'zCldRes-Asset UUID-930', - 'zCldShareAlbumInvRec-zPK-931', - 'zCldShareAlbumInvRec-zEnt-932', - 'zCldShareAlbumInvRec-zOpt-933', - 'zCldShareAlbumInvRec-Album Key-934', - 'zCldShareAlbumInvRec-FOK Album Key-935', - 'zCldShareAlbumInvRec-Album GUID-936', - 'zCldShareAlbumInvRec-zUUID-937', - 'zCldShareAlbumInvRec-Cloud GUID-938', - 'zCldSharedComment-zPK-939', - 'zCldSharedComment-zENT-940', - 'zCldSharedComment-zOPT-941', - 'zCldSharedComment-Commented Asset Key= zAsset-zPK-942', - 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-943', - 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-944', - 'zCldSharedComment-Liked Asset Key= zAsset-zPK-945', - 'zCldSharedComment-CldFeedLikeCommentEntry Key-946', - 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-947', - 'zCldSharedComment-Cloud GUID-948', - 'zCompAssetAttr-zPK-949', - 'zCompAssetAttr-zEnt-950', - 'zCompAssetAttr-zOpt-951', - 'zCompAssetAttr-Asset Key-952', - 'zDetFace-zPK-953', - 'zDetFace-zEnt-954', - 'zDetFace.zOpt-955', - 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-956', - 'zDetFace-PersonForFace= zPerson-zPK-957', - 'zDetFace-Person Being Key Face-958', - 'zDetFace-Face Print-959', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-960', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-961', - 'zDetFace-UUID-962', - 'zDetFaceGroup-zPK-963', - 'zDetFaceGroup-zENT-964', - 'zDetFaceGroup-zOPT-965', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-966', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-967', - 'zDetFaceGroup-UUID-968', - 'zDetFacePrint-zPK-969', - 'zDetFacePrint-zEnt-970', - 'zDetFacePrint-zOpt-971', - 'zDetFacePrint-Face Key-972', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-973', - 'zExtAttr-zENT-974', - 'zExtAttr-zOPT-975', - 'zExtAttr-Asset Key-976', - 'zFaceCrop-zPK-977', - 'zFaceCrop-zEnt-978', - 'zFaceCrop-zOpt-979', - 'zFaceCrop-Asset Key-980', - 'zFaceCrop-Invalid Merge Canidate Person UUID-981', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-982', - 'zFaceCrop-Face Key-983', - 'zFaceCrop-UUID-984', - 'zGenAlbum-zPK=26AlbumLists= 26Albums-985', - 'zGenAlbum-zENT-986', - 'zGenAlbum-zOpt-987', - 'zGenAlbum-Key Asset-Key zAsset-zPK-988', - 'zGenAlbum-Secondary Key Asset-989', - 'zGenAlbum-Tertiary Key Asset-990', - 'zGenAlbum-Custom Key Asset-991', - 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-992', - 'zGenAlbum-FOK Parent Folder-993', - 'zGenAlbum-zSyndicate-994', - 'zGenAlbum-UUID-995', - 'SWYConverszGenAlbum-UUID-996', - 'zGenAlbum-Cloud_GUID = store.cloudphotodb-997', - 'SWYConverszGenAlbum-Cloud GUID-998', - 'zGenAlbum-Project Render UUID-999', - 'SWYConverszGenAlbum-Project Render UUID-1000', - 'zIntResou-zPK-1001', - 'zIntResou-zENT-1002', - 'zIntResou-zOPT-1003', - 'zIntResou-Asset= zAsset_zPK-1004', - 'zIntResou-Fingerprint-1005', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-1006', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1007', - 'zMedAnlyAstAttr-zEnt-1008', - 'zMedAnlyAstAttr-zOpt-1009', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-1010', - 'zMemory-zPK-1011', - 'zMemory-zENT-1012', - 'zMemory-zOPT-1013', - 'zMemory-Key Asset= zAsset-zPK-1014', - 'zMemory-UUID-1015', - 'zMoment-zPK-1016', - 'zMoment-zENT-1017', - 'zMoment-zOPT-1018', - 'zMoment-Highlight Key-1019', - 'zMoment-UUID-1020', - 'zPerson-zPK=zDetFace-Person-1021', - 'zPerson-zEnt-1022', - 'zPerson-zOpt-1023', - 'zPerson-Share Participant= zSharePartic-zPK-1024', - 'zPerson-KeyFace=zDetFace-zPK-1025', - 'zPerson-Assoc Face Group Key-1026', - 'zPerson-Person UUID-1027', - 'zPhotoAnalysisAssetAttr-zPK-1028', - 'zPhotoAnalysisAssetAttr-zEnt-1029', - 'zPhotoAnalysisAssetAttr-zOpt-1030', - 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1031', - 'zSceneP-zPK-1032', - 'zSceneP-zENT-1033', - 'zSceneP-zOPT-1034', - 'zShare-zPK-1035', - 'zShare-zENT-1036', - 'zShare-zOPT-1037', - 'zShare-UUID-1038', - 'SPLzShare-UUID-1039', - 'zShare-Scope ID = store.cloudphotodb-1040', - 'zSharePartic-zPK-1041', - 'zSharePartic-zENT-1042', - 'zSharePartic-zOPT-1043', - 'zSharePartic-Share Key= zShare-zPK-1044', - 'zSharePartic-Person= zPerson-zPK-1045', - 'zSharePartic-UUID-1046', - 'SBKAzSugg-zPK-1047', - 'SBKAzSugg-zENT-1048', - 'SBKAzSugg-zOPT-1049', - 'SBKAzSugg-UUID-1050', - 'SBRAzSugg-zPK-1051', - 'SBRAzSugg-zENT-1052', - 'SBRAzSugg-zOPT-1053', - 'SBRAzSugg-UUID-1054', - 'z3SuggBRA-3RepAssets1-1055', - 'z3SuggBRA-58SuggBeingRepAssets-1056', - 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK-1057', - 'z3SuggBKA-3KeyAssets= zAsset-zPK-1058', - 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1059', - 'zUnmAdj-zOPT-1060', - 'zUnmAdj-zENT-1061', - 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1062', - 'zUnmAdj-UUID-1063', - 'zUnmAdj-Other Adjustments Fingerprint-1064', - 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1065', - 'zUserFeedback-zPK-1066', - 'zUserFeedback-zENT-1067', - 'zUserFeedback-zOPT-1068', - 'zUserFeedback-Person= zPerson-zPK-1069', - 'zUserFeedback-Memory= zMemory-zPK-1070', - 'zUserFeedback-UUID-1071', - 'zVisualSearchAttr-zPK-1072', - 'zVisualSearchAttr-zENT-1073', - 'zVisualSearchAttr-zOPT-1074', - 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1075', - 'z27AlbumList-27Albums= zGenAlbum-zPK-1076', - 'z27AlbumList-Album List Key-1077', - 'z27AlbumList-FOK27Albums Key-1078', - 'z28Assets-28Albums= zGenAlbum-zPK-1079', - 'z28Assets-3Asset Key= zAsset-zPK in the Album-1080', - 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1081', - 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1082', - 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1083', - 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK-1084', - 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1085', - 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK-1086', - 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1087', - 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1088', - 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1089', - 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK-1090', - 'z3MemoryBCAs-44Memories Being Custom User Assets-1091', - 'z3MemoryBCAs-3Custom User Assets-1092', - 'z3MemoryBCAs-FOK-3Custom User Assets-1093') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph97.1-iOS17_Ref_for_Asset_Analysis-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) + ''' - tlactivity = 'Ph97.1-iOS17_Ref_for_Asset_Analysis-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], + row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], + row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], + row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], + row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], + row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], + row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], + row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], + row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], + row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], + row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], + row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], + row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], + row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], + row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], + row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], + row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], + row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], + row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], + row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], + row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], + row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], + row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], + row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], + row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], + row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], + row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], + row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], + row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], + row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], + row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], + row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], + row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], + row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], + row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], + row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], + row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], + row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], + row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], + row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], + row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], + row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], + row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], + row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], + row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], + row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], + row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], + row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], + row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], + row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], + row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], + row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], + row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], + row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], + row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], + row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], + row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], + row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], + row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], + row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], + row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], + row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], + row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], + row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], + row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], + row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], + row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], + row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], + row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], + row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], + row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], + row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], + row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], + row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], + row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], + row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], + row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], + row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], + row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], + row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], + row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], + row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], + row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], + row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], + row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], + row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], + row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], + row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], + row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], + row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], + row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], + row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], + row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], + row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], + row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], + row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], + row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], + row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], + row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], + row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], + row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093])) - else: - logfunc('No data available for iOS 17 PhotoData-Photos.sqlite') + data_headers = (('zAsset-Added Date-0', 'datetime'), + 'zAsset- SortToken -CameraRoll-1', + 'zAsset Complete-2', + 'zAsset-zPK-4QueryStart-3', + 'zAddAssetAttr-zPK-4QueryStart-4', + 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', + 'zAddAssetAttr-Master Fingerprint-4TableStart-6', + 'zIntResou-Fingerprint-4TableStart-7', + 'zAsset-Bundle Scope-8', + 'zAsset-Syndication State-9', + 'zAsset-Cloud is My Asset-10', + 'zAsset-Cloud is deletable-Asset-11', + 'zAsset-Cloud_Local_State-12', + 'zAsset-Visibility State-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zExtAttr-Lens Model-16', + 'zExtAttr-Flash Fired-17', + 'zExtAttr-Focal Lenght-18', + 'zExtAttr-Focal Lenth in 35MM-19', + 'zExtAttr-Digital Zoom Ratio-20', + 'zAsset-Derived Camera Capture Device-21', + 'zAddAssetAttr-Camera Captured Device-22', + 'zAddAssetAttr-Imported by-23', + 'zCldMast-Imported By-24', + 'zAddAssetAttr.Imported by Bundle Identifier-25', + 'zAddAssetAttr-Imported By Display Name-26', + 'zCldMast-Imported by Bundle ID-27', + 'zCldMast-Imported by Display Name-28', + 'zAsset-Saved Asset Type-29', + 'zAsset-Directory-Path-30', + 'zAsset-Filename-31', + 'zAddAssetAttr- Original Filename-32', + 'zCldMast- Original Filename-33', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-34', + 'zAsset-Active Library Scope Participation State -4QueryStart-35', + 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36', + 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-37', + 'SPLzShare-Cloud Video Count-SPL -4QueryStart-38', + ('zAddAssetAttr-Date Created Source-39', 'datetime'), + ('zAsset-Date Created-40', 'datetime'), + ('zCldMast-Creation Date-41', 'datetime'), + ('zIntResou-CldMst Date Created-42', 'datetime'), + 'zAddAssetAttr-Time Zone Name-43', + 'zAddAssetAttr-Time Zone Offset-44', + 'zAddAssetAttr-Inferred Time Zone Offset-45', + 'zAddAssetAttr-EXIF-String-46', + ('zAsset-Modification Date-47', 'datetime'), + ('zAddAssetAttr-Last Viewed Date-48', 'datetime'), + ('zAsset-Last Shared Date-49', 'datetime'), + 'zCldMast-Cloud Local State-50', + ('zCldMast-Import Date-51', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-52', 'datetime'), + 'zAddAssetAttr-Import Session ID-4QueryStart-53', + ('zAddAssetAttr-Alt Import Image Date-54', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-55', + ('zAsset-Cloud Batch Publish Date-56', 'datetime'), + ('zAsset-Cloud Server Publish Date-57', 'datetime'), + 'zAsset-Cloud Download Requests-58', + 'zAsset-Cloud Batch ID-59', + 'zAddAssetAttr-Upload Attempts-60', + 'zAsset-Latitude-61', + 'zExtAttr-Latitude-62', + 'zAsset-Longitude-63', + 'zExtAttr-Longitude-64', + 'zAddAssetAttr-GPS Horizontal Accuracy-65', + 'zAddAssetAttr-Location Hash-66', + 'zAddAssetAttr-Shifted Location Valid-67', + 'zAddAssetAttr-Shifted Location Data-68', + 'zAddAssetAttr-Reverse Location Is Valid-69', + 'zAddAssetAttr-Reverse Location Data-70', + 'ParentzGenAlbum-UUID-4QueryStart-71', + 'zGenAlbum-UUID-4QueryStart-72', + 'SWYConverszGenAlbum-UUID-4QueryStart-73', + 'ParentzGenAlbum-Cloud GUID-4QueryStart-74', + 'zGenAlbum-Cloud GUID-4QueryStart-75', + 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-76', + 'zCldShareAlbumInvRec-Album GUID-4QueryStart-77', + 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-78', + 'zGenAlbum-Project Render UUID-4QueryStart-79', + 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-80', + 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-81', + 'zGenAlbum-Cloud_Local_State-4QueryStart-82', + 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-83', + ('ParentzGenAlbum- Creation Date- 4QueryStart-84', 'datetime'), + ('zGenAlbum- Creation Date- 4QueryStart-85', 'datetime'), + ('SWYConverszGenAlbum- Creation Date- 4QueryStart-86', 'datetime'), + ('zGenAlbum- Cloud Creation Date- 4QueryStart-87', 'datetime'), + ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-88', 'datetime'), + ('zGenAlbum- Start Date- 4QueryStart-89', 'datetime'), + ('SWYConverszGenAlbum- Start Date- 4QueryStart-90', 'datetime'), + ('zGenAlbum- End Date- 4QueryStart-91', 'datetime'), + ('SWYConverszGenAlbum- End Date- 4QueryStart-92', 'datetime'), + ('zGenAlbum-Cloud Subscription Date- 4QueryStart-93', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-94', 'datetime'), + 'ParentzGenAlbum- Title- 4QueryStart-95', + 'zGenAlbum- Title-User&System Applied- 4QueryStart-96', + 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-97', + 'zGenAlbum-Import Session ID-SWY- 4QueryStart-98', + 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-99', + 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-100', + 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-101', + 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-102', + 'SWYConverszGenAlbum- Syndicate-4QueryStart-103', + 'zGenAlbum-zENT- Entity- 4QueryStart-104', + 'ParentzGenAlbum- Kind- 4QueryStart-105', + 'zGenAlbum-Album Kind- 4QueryStart-106', + 'SWYConverszGenAlbum-Album Kind- 4QueryStart-107', + 'AAAzCldMastMedData-zOPT-108', + 'zAddAssetAttr-Media Metadata Type-109', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-110', + 'AAAzCldMastMedData-Data-111', + 'CldMasterzCldMastMedData-zOPT-112', + 'zCldMast-Media Metadata Type-113', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-114', + 'CMzCldMastMedData-Data-115', + 'zAsset-Search Index Rebuild State-116', + 'zAddAssetAttr-Syndication History-117', + 'zMedAnlyAstAttr-Syndication Processing Version-118', + 'zMedAnlyAstAttr-Syndication Processing Value-119', + 'zAsset-Orientation-120', + 'zAddAssetAttr-Original Orientation-121', + 'zAsset-Kind-122', + 'zAsset-Kind-Sub-Type-123', + 'zAddAssetAttr-Cloud Kind Sub Type-124', + 'zAsset-Playback Style-125', + 'zAsset-Playback Variation-126', + 'zAsset-Video Duration-127', + 'zExtAttr-Duration-128', + 'zAsset-Video CP Duration-129', + 'zAddAssetAttr-Video CP Duration Time Scale-130', + 'zAsset-Video CP Visibility State-131', + 'zAddAssetAttr-Video CP Display Value-132', + 'zAddAssetAttr-Video CP Display Time Scale-133', + 'zIntResou-Datastore Class ID-134', + 'zAsset-Cloud Placeholder Kind-135', + 'zIntResou-Local Availability-136', + 'zIntResou-Local Availability Target-137', + 'zIntResou-Cloud Local State-138', + 'zIntResou-Remote Availability-139', + 'zIntResou-Remote Availability Target-140', + 'zIntResou-Transient Cloud Master-141', + 'zIntResou-Side Car Index-142', + 'zIntResou- File ID-143', + 'zIntResou-Version-144', + 'zAddAssetAttr- Original-File-Size-145', + 'zIntResou-Resource Type-146', + 'zIntResou-Datastore Sub-Type-147', + 'zIntResou-Cloud Source Type-148', + 'zIntResou-Data Length-149', + 'zIntResou-Recipe ID-150', + ('zIntResou-Cloud Last Prefetch Date-151', 'datetime'), + 'zIntResou-Cloud Prefetch Count-152', + ('zIntResou- Cloud-Last-OnDemand Download-Date-153', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-154', + 'zIntResou-Compact-UTI-155', + 'zAsset-Uniform Type ID-156', + 'zAsset-Original Color Space-157', + 'zCldMast-Uniform_Type_ID-158', + 'zCldMast-Full Size JPEG Source-159', + 'zAsset-HDR Gain-160', + 'zAsset-zHDR_Type-161', + 'zExtAttr-Codec-162', + 'zIntResou-Codec Four Char Code Name-163', + 'zCldMast-Codec Name-164', + 'zCldMast-Video Frame Rate-165', + 'zCldMast-Placeholder State-166', + 'zAsset-Depth_Type-167', + 'zAsset-Avalanche UUID-4TableStart-168', + 'zAsset-Avalanche_Pick_Type-BurstAsset-169', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-170', + 'zAddAssetAttr-Cloud Recovery State-171', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-172', + 'zAsset-Deferred Processing Needed-173', + 'zAsset-Video Deferred Processing Needed-174', + 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-175', + 'zAddAssetAttr-Deferred Processing Candidate Options-176', + 'zAsset-Has Adjustments-Camera-Effects-Filters-177', + 'zUnmAdj-UUID-4TableStart-178', + ('zAsset-Adjustment Timestamp-179', 'datetime'), + ('zUnmAdj-Adjustment Timestamp-180', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-181', + 'zUnmAdj-Editor Localized Name-182', + 'zUnmAdj-Adjustment Format ID-183', + 'zAddAssetAttr-Montage-184', + 'zUnmAdj-Adjustment Render Types-185', + 'zUnmAdj-Adjustment Format Version-186', + 'zUnmAdj-Adjustment Base Image Format-187', + 'zAsset-Favorite-188', + 'zAsset-Hidden-189', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-190', + ('zAsset-Trashed Date-191', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-192', + 'zAsset-Delete-Reason-193', + 'zIntResou-Trash State-194', + ('zIntResou-Trashed Date-195', 'datetime'), + 'zAsset-Cloud Delete State-196', + 'zIntResou-Cloud Delete State-197', + 'zAddAssetAttr-PTP Trashed State-198', + 'zIntResou-PTP Trashed State-199', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-200', + ('zMedAnlyAstAttr-Media Analysis Timestamp-201', 'datetime'), + ('zAsset-Analysis State Modification Date-202', 'datetime'), + 'zAddAssetAttr- Pending View Count-203', + 'zAddAssetAttr- View Count-204', + 'zAddAssetAttr- Pending Play Count-205', + 'zAddAssetAttr- Play Count-206', + 'zAddAssetAttr- Pending Share Count-207', + 'zAddAssetAttr- Share Count-208', + 'zAddAssetAttr-Allowed for Analysis-209', + 'zAddAssetAttr-Scene Analysis Version-210', + 'zAddAssetAttr-Scene Analysis is From Preview-211', + ('zAddAssetAttr-Scene Analysis Timestamp-212', 'datetime'), + 'zAsset-Duplication Asset Visibility State-213', + 'zAddAssetAttr-Destination Asset Copy State-214', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-215', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-216', + 'zCldMast-Source Master For Duplication Scope ID-217', + 'zAddAssetAttr-Source Asset For Duplication ID-218', + 'zCldMast-Source Master for Duplication ID-219', + 'zAddAssetAttr-Variation Suggestions States-220', + 'zAsset-High Frame Rate State-221', + 'zAsset-Video Key Frame Time Scale-222', + 'zAsset-Video Key Frame Value-223', + 'zExtAttr-ISO-224', + 'zExtAttr-Metering Mode-225', + 'zExtAttr-Sample Rate-226', + 'zExtAttr-Track Format-227', + 'zExtAttr-White Balance-228', + 'zExtAttr-Aperture-229', + 'zExtAttr-BitRate-230', + 'zExtAttr-Exposure Bias-231', + 'zExtAttr-Frames Per Second-232', + 'zExtAttr-Shutter Speed-233', + 'zExtAttr-Slush Scene Bias-234', + 'zExtAttr-Slush Version-235', + 'zExtAttr-Slush Preset-236', + 'zExtAttr-Slush Warm Bias-237', + 'zAsset-Height-238', + 'zAddAssetAttr-Original Height-239', + 'zIntResou-Unoriented Height-240', + 'zAsset-Width-241', + 'zAddAssetAttr-Original Width-242', + 'zIntResou-Unoriented Width-243', + 'zShare-Thumbnail Image Data-244', + 'SPLzShare-Thumbnail Image Data-245', + 'zAsset-Thumbnail Index-246', + 'zAddAssetAttr-Embedded Thumbnail Height-247', + 'zAddAssetAttr-Embedded Thumbnail Length-248', + 'zAddAssetAttr-Embedded Thumbnail Offset-249', + 'zAddAssetAttr-Embedded Thumbnail Width-250', + 'zAsset-Packed Acceptable Crop Rect-251', + 'zAsset-Packed Badge Attributes-252', + 'zAsset-Packed Preferred Crop Rect-253', + 'zAsset-Curation Score-254', + 'zAsset-Camera Processing Adjustment State-255', + 'zAsset-Depth Type-256', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-257', + 'zAddAssetAttr-Orig Resource Choice-258', + 'zAsset-Spatial Type-259', + 'zAddAssetAttr-Spatial Over Capture Group ID-260', + 'zAddAssetAttr-Place Annotation Data-261', + 'zAddAssetAttr-Distance Identity-262', + 'zAddAssetAttr-Edited IPTC Attributes-263', + 'zAssetDes-Long Description-264', + 'zAddAssetAttr-Asset Description-265', + 'zAddAssetAttr-Title-Comments via Cloud Website-266', + 'zAddAssetAttr-Accessibility Description-267', + 'zAddAssetAttr-Photo Stream Tag ID-268', + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-269', + ('zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-270', 'datetime'), + ('zCldFeedEnt-Entry Date-271', 'datetime'), + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-272', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-273', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-274', + 'zCldFeedEnt-Entry Priority Number-275', + 'zCldFeedEnt-Entry Type Number-276', + 'zCldSharedComment-Cloud GUID-4TableStart-277', + ('zCldSharedComment-Date-278', 'datetime'), + ('zCldSharedComment-Comment Client Date-279', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-280', 'datetime'), + 'zCldSharedComment-Type-281', + 'zCldSharedComment-Comment Text-282', + 'zCldSharedComment-Commenter Hashed Person ID-283', + 'zCldSharedComment-Batch Comment-284', + 'zCldSharedComment-Is a Caption-285', + 'zAsset-Cloud Has Comments by Me-286', + 'zCldSharedComment-Is My Comment-287', + 'zCldSharedComment-Is Deletable-288', + 'zAsset-Cloud Has Comments Conversation-289', + 'zAsset-Cloud Has Unseen Comments-290', + 'zCldSharedComment-Liked-291', + 'zAddAssetAttr-Share Type-292', + 'zAsset-Library Scope Share State- StillTesting-293', + 'zAsset-Active Library Scope Participation State-294', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-295', + 'zShare-UUID-CMM-4TableStart-296', + 'SPLzShare-UUID-SPL-4TableStart-297', + 'zShare-zENT-CMM-298', + 'SPLzShare-zENT-SPL-299', + 'zSharePartic-z54SHARE-300', + 'SPLzSharePartic-z54SHARE-301', + 'zShare-Status-CMM-302', + 'SPLzShare-Status-SPL-303', + 'zShare-Scope Type-CMM-304', + 'SPLzShare-Scope Type-SPL-305', + 'zShare-Local Publish State-CMM-306', + 'SPLzShare-Local Publish State-SPL-307', + 'zShare-Public Permission-CMM-308', + 'SPLzShare-Public Permission-SPL-309', + 'zShare-Originating Scope ID-CMM-310', + 'SPLzShare-Originating Scope ID-SPL-311', + 'zShare-Scope ID-CMM-312', + 'SPLzShare-Scope ID-SPL-313', + 'zShare-Title-CMM-314', + 'SPLzShare-Title-SPL-315', + 'zShare-Share URL-CMM-316', + 'SPLzShare-Share URL-SPL-317', + ('zShare-Creation Date-CMM-318', 'datetime'), + ('SPLzShare-Creation Date-SPL-319', 'datetime'), + ('zShare-Start Date-CMM-320', 'datetime'), + ('SPLzShare-Start Date-SPL-321', 'datetime'), + ('zShare-End Date-CMM-322', 'datetime'), + ('SPLzShare-End Date-SPL-323', 'datetime'), + ('zShare-Expiry Date-CMM-324', 'datetime'), + ('SPLzShare-Expiry Date-SPL-325', 'datetime'), + 'zShare-Cloud Item Count-CMM-326', + 'SPLzShare-Cloud Item Count-SPL-327', + 'zShare-Asset Count-CMM-328', + 'SPLzShare-Asset Count-SPL-329', + 'zShare-Cloud Photo Count-CMM-330', + 'SPLzShare-Cloud Photo Count-SPL-331', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-332', + 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-333', + 'zShare-Photos Count-CMM-334', + 'SPLzShare-Photos Count-CMM-SPL-335', + 'zShare-Uploaded Photos Count-CMM-336', + 'SPLzShare-Uploaded Photos Count-SPL-337', + 'zShare-Cloud Video Count-CMM-338', + 'SPLzShare-Cloud Video Count-SPL-339', + 'zShare-Videos Count-CMM-340', + 'SPLzShare-Videos Count-SPL-341', + 'zShare-Uploaded Videos Count-CMM-342', + 'SPLzShare-Uploaded Videos Count-SPL-343', + 'zShare-Force Sync Attempted-CMM-344', + 'SPLzShare-Force Sync Attempted-SPL-345', + 'zShare-Cloud Local State-CMM-346', + 'SPLzShare-Cloud Local State-SPL-347', + 'zShare-Scope Syncing State-CMM-348', + 'SPLzShare-Scope Syncing State-SPL-349', + 'zShare-Auto Share Policy-CMM-350', + 'SPLzShare-Auto Share Policy-SPL-351', + 'zShare-Should Notify On Upload Completion-CMM-352', + 'SPLzShare-Should Notify On Upload Completion-SPL-353', + 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-354', + 'zShare-Trashed State-CMM-355', + 'SPLzShare-Trashed State-SPL-356', + 'zShare-Cloud Delete State-CMM-357', + 'SPLzShare-Cloud Delete State-SPL-358', + ('zShare-Trashed Date-CMM-359', 'datetime'), + ('SPLzShare-Trashed Date-SPL-360', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-CMM-361', 'datetime'), + ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL-362', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-CMM-363', 'datetime'), + ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL-364', 'datetime'), + 'zShare-Exit Source-CMM-365', + 'SPLzShare-Exit Source-SPL-366', + 'zShare-SPL_Exit State-CMM-367', + 'SPLzShare-SPL_Exit State-SPL-368', + 'zShare-Exit Type-CMM-369', + 'SPLzShare-Exit Type-SPL-370', + 'zShare-Should Ignor Budgets-CMM-371', + 'SPLzShare-Should Ignor Budgets-SPL-372', + 'zShare-Preview State-CMM-373', + 'SPLzShare-Preview State-SPL-374', + 'zShare-Preview Data-CMM-375', + 'SPLzShare-Preview Data-SPL-376', + 'zShare-Rules-CMM-377', + 'SPLzShare-Rules-SPL-378', + 'zShare-Thumbnail Image Data-CMM-379', + 'SPLzShare-Thumbnail Image Data-SPL-380', + 'zShare-Participant Cloud Update State-CMM-381', + 'SPLzShare-Participant Cloud Update State-SPL-382', + 'zSharePartic-UUID-4TableStart-383', + 'SPLzSharePartic-UUID-4TableStart-384', + 'zSharePartic-Acceptance Status-385', + 'SPLzSharePartic-Acceptance Status-386', + 'zSharePartic-Is Current User-387', + 'SPLzSharePartic-Is Current User-388', + 'zSharePartic-Role-389', + 'SPLzSharePartic-Role-390', + 'zSharePartic-Premission-391', + 'SPLzSharePartic-Premission-392', + 'zSharePartic-Participant ID-393', + 'SPLzSharePartic-Participant ID-394', + 'zSharePartic-User ID-395', + 'SPLzSharePartic-User ID-396', + 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-397', + 'SPLzSharePartic-zPK-4TableStart-398', + 'zSharePartic-zPK-4TableStart-399', + 'zSharePartic-Email Address-400', + 'SPLzSharePartic-Email Address-401', + 'zSharePartic-Phone Number-402', + 'SPLzSharePartic-Phone Number-403', + 'zSharePartic-Exit State-404', + 'SPLzSharePartic-Exit State-405', + 'ParentzGenAlbum-UUID-4TableStart-406', + 'zGenAlbum-UUID-4TableStart-407', + 'SWYConverszGenAlbum-UUID-4TableStart-408', + 'ParentzGenAlbum-Cloud GUID-4TableStart-409', + 'zGenAlbum-Cloud GUID-4TableStart-410', + 'SWYConverszGenAlbum-Cloud GUID-4TableStart-411', + 'zCldShareAlbumInvRec-Album GUID-4TableStart-412', + 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-413', + 'zGenAlbum-Project Render UUID-4TableStart-414', + 'SWYConverszGenAlbum-Project Render UUID-4TableStart-415', + 'zAlbumList-Needs Reordering Number-416', + 'zGenAlbum-zENT- Entity-417', + 'ParentzGenAlbum-Kind-418', + 'zGenAlbum-Album Kind-419', + 'SWYConverszGenAlbum-Album Kind-420', + 'ParentzGenAlbum-Cloud-Local-State-421', + 'zGenAlbum-Cloud_Local_State-422', + 'SWYConverszGenAlbum-Cloud_Local_State-423', + 'ParentzGenAlbum- Title-424', + 'zGenAlbum- Title-User&System Applied-425', + 'SWYConverszGenAlbum- Title -User&System Applied-426', + 'zGenAlbum-Import Session ID-SWY-427', + 'zAsset- Conversation= zGenAlbum_zPK-428', + 'SWYConverszGenAlbum- Import Session ID-SWY-429', + 'zGenAlbum-Imported by Bundle Identifier-430', + 'SWYzGenAlbum-Imported by Bundle Identifier-431', + 'SWYConverszGenAlbum- Syndicate-432', + ('ParentzGenAlbum-Creation Date-433', 'datetime'), + ('zGenAlbum-Creation Date-434', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-435', 'datetime'), + ('zGenAlbum-Cloud Creation Date-436', 'datetime'), + ('SWYConverszGenAlbum-Cloud Creation Date-437', 'datetime'), + ('zGenAlbum-Start Date-438', 'datetime'), + ('SWYConverszGenAlbum-Start Date-439', 'datetime'), + ('zGenAlbum-End Date-440', 'datetime'), + ('SWYConverszGenAlbum-End Date-441', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-442', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date-443', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-444', + 'zGenAlbum-Pending Items Count-445', + 'SWYConverszGenAlbum-Pending Items Count-446', + 'ParentzGenAlbum-Pending Items Type-447', + 'zGenAlbum-Pending Items Type-448', + 'SWYConverszGenAlbum-Pending Items Type-449', + 'zGenAlbum- Cached Photos Count-450', + 'SWYConverszGenAlbum- Cached Photos Count-451', + 'zGenAlbum- Cached Videos Count-452', + 'SWYConverszGenAlbum- Cached Videos Count-453', + 'zGenAlbum- Cached Count-454', + 'SWYConverszGenAlbum- Cached Count-455', + 'ParentzGenAlbum-Sync Event Order Key-456', + 'zGenAlbum-Sync Event Order Key-457', + 'SWYConverszGenAlbum-Sync Event Order Key-458', + 'zGenAlbum-Has Unseen Content-459', + 'SWYConverszGenAlbum-Has Unseen Content-460', + 'zGenAlbum-Unseen Asset Count-461', + 'SWYConverszGenAlbum-Unseen Asset Count-462', + 'zGenAlbum-is Owned-463', + 'SWYConverszGenAlbum-is Owned-464', + 'zGenAlbum-Cloud Relationship State-465', + 'SWYConverszGenAlbum-Cloud Relationship State-466', + 'zGenAlbum-Cloud Relationship State Local-467', + 'SWYConverszGenAlbum-Cloud Relationship State Local-468', + 'zGenAlbum-Cloud Owner Mail Key-469', + 'SWYConverszGenAlbum-Cloud Owner Mail Key-470', + 'zGenAlbum-Cloud Owner Frist Name-471', + 'SWYConverszGenAlbum-Cloud Owner Frist Name-472', + 'zGenAlbum-Cloud Owner Last Name-473', + 'SWYConverszGenAlbum-Cloud Owner Last Name-474', + 'zGenAlbum-Cloud Owner Full Name-475', + 'SWYConverszGenAlbum-Cloud Owner Full Name-476', + 'zGenAlbum-Cloud Person ID-477', + 'SWYConverszGenAlbum-Cloud Person ID-478', + 'zAsset-Cloud Owner Hashed Person ID-479', + 'zGenAlbum-Cloud Owner Hashed Person ID-480', + 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-481', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-482', + 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-483', + 'zGenAlbum-Cloud Multi-Contributors Enabled-484', + 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-485', + 'zGenAlbum-Cloud Album Sub Type-486', + 'SWYConverszGenAlbum-Cloud Album Sub Type-487', + ('zGenAlbum-Cloud Contribution Date-488', 'datetime'), + ('SWYConverszGenAlbum-Cloud Contribution Date-489', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-490', 'datetime'), + ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-491', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-492', + 'SWYConverszGenAlbum-Cloud Notification Enabled-493', + 'ParentzGenAlbum-Pinned-494', + 'zGenAlbum-Pinned-495', + 'SWYConverszGenAlbum-Pinned-496', + 'ParentzGenAlbum-Custom Sort Key-497', + 'zGenAlbum-Custom Sort Key-498', + 'SWYConverszGenAlbum-Custom Sort Key-499', + 'ParentzGenAlbum-Custom Sort Ascending-500', + 'zGenAlbum-Custom Sort Ascending-501', + 'SWYConverszGenAlbum-Custom Sort Ascending-502', + 'ParentzGenAlbum-Is Prototype-503', + 'zGenAlbum-Is Prototype-504', + 'SWYConverszGenAlbum-Is Prototype-505', + 'ParentzGenAlbum-Project Document Type-506', + 'zGenAlbum-Project Document Type-507', + 'SWYConverszGenAlbum-Project Document Type-508', + 'ParentzGenAlbum-Custom Query Type-509', + 'zGenAlbum-Custom Query Type-510', + 'SWYConverszGenAlbum-Custom Query Type-511', + 'ParentzGenAlbum-Trashed State-512', + ('ParentzGenAlbum-Trash Date-513', 'datetime'), + 'zGenAlbum-Trashed State-514', + ('zGenAlbum-Trash Date-515', 'datetime'), + 'SWYConverszGenAlbum-Trashed State-516', + ('SWYConverszGenAlbum-Trash Date-517', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-518', + 'zGenAlbum-Cloud Delete State-519', + 'SWYConverszGenAlbum-Cloud Delete State-520', + 'zGenAlbum-Cloud Owner Whitelisted-521', + 'SWYConverszGenAlbum-Cloud Owner Whitelisted-522', + 'zGenAlbum-Cloud Local Public URL Enabled-523', + 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-524', + 'zGenAlbum-Cloud Public URL Enabled-525', + 'zGenAlbum-Public URL-526', + 'SWYConverszGenAlbum-Cloud Public URL Enabled-527', + 'SWYConverszGenAlbum-Public URL-528', + 'zGenAlbum-Key Asset Face Thumb Index-529', + 'SWYConverszGenAlbum-Key Asset Face Thumb Index-530', + 'zGenAlbum-Project Text Extension ID-531', + 'SWYConverszGenAlbum-Project Text Extension ID-532', + 'zGenAlbum-User Query Data-533', + 'SWYConverszGenAlbum-User Query Data-534', + 'zGenAlbum-Custom Query Parameters-535', + 'SWYConverszGenAlbum-Custom Query Parameters-536', + 'zGenAlbum-Project Data-537', + 'SWYConverszGenAlbum-Project Data-538', + 'zGenAlbum-Search Index Rebuild State-539', + 'SWYConverszGenAlbum-Search Index Rebuild State-540', + 'zGenAlbum-Duplicate Type-541', + 'SWYConverszGenAlbum-Duplicate Type-542', + 'zGenAlbum-Privacy State-543', + 'SWYConverszGenAlbum-Privacy State-544', + 'zCldShareAlbumInvRec-zUUID-4TableStart-545', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-546', + 'zCldShareAlbumInvRec-Invitation State Local-547', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-548', + ('zCldShareAlbumInvRec-Subscription Date-549', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-550', + 'zCldShareAlbumInvRec-Invitee Last Name-551', + 'zCldShareAlbumInvRec-Invitee Full Name-552', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-553', + 'zCldShareAlbumInvRec-Invitee Email Key-554', + 'zGenAlbum-Key Asset Face ID-555', + 'zFaceCrop-Face Area Points-556', + 'zAsset-Face Adjustment Version-557', + 'zAddAssetAttr-Face Analysis Version-558', + 'zDetFace-Asset Visible-559', + 'zPerson-Face Count-560', + 'zDetFace-Face Crop-561', + 'zDetFace-Face Algorithm Version-562', + 'zDetFace-Adjustment Version-563', + 'zDetFace-UUID-4TableStart-564', + 'zPerson-Person UUID-4TableStart-565', + 'zPerson - MD ID-566', + 'zPerson - Asset Sort Order-567', + 'zDetFace-Confirmed Face Crop Generation State-568', + 'zDetFace-Manual-569', + 'zDetFace-Detection Type-570', + 'zPerson-Detection Type-571', + 'zDetFace-VIP Model Type-572', + 'zDetFace-Name Source-573', + 'zDetFace-Cloud Name Source-574', + 'zPerson-Merge Candidate Confidence-575', + 'zPerson-Person URI-576', + 'zPerson-Display Name-577', + 'zPerson-Full Name-578', + 'zPerson-Cloud Verified Type-579', + 'zFaceCrop-State-580', + 'zFaceCrop-Type-581', + 'zFaceCrop-UUID-4TableStart-582', + 'zPerson-Type-583', + 'zPerson-Verified Type-584', + 'zPerson-Gender Type-585', + 'zDetFace-Gender Type-586', + 'zDetFace-Center X-587', + 'zDetFace-Center Y-588', + 'zPerson-Age Type Estimate-589', + 'zDetFace-Age Type Estimate-590', + 'zDetFace-Ethnicity Type-591', + 'zDetFace-Skin Tone Type-592', + 'zDetFace-Hair Type-593', + 'zDetFace-Hair Color Type-594', + 'zDetFace-Head Gear Type-595', + 'zDetFace-Facial Hair Type-596', + 'zDetFace-Has Face Mask-597', + 'zDetFace-Pose Type-598', + 'zDetFace-Face Expression Type-599', + 'zDetFace-Has Smile-600', + 'zDetFace-Smile Type-601', + 'zDetFace-Lip Makeup Type-602', + 'zDetFace-Eyes State-603', + 'zDetFace-Is Left Eye Closed-604', + 'zDetFace-Is Right Eye Closed-605', + 'zDetFace-Gaze Center X-606', + 'zDetFace-Gaze Center Y-607', + 'zDetFace-Face Gaze Type-608', + 'zDetFace-Eye Glasses Type-609', + 'zDetFace-Eye Makeup Type-610', + 'zDetFace-Cluster Squence Number Key-611', + 'zDetFace-Grouping ID-612', + 'zDetFace-Master ID-613', + 'zDetFace-Quality-614', + 'zDetFace-Quality Measure-615', + 'zDetFace-Source Height-616', + 'zDetFace-Source Width-617', + 'zDetFace-Hidden-Asset Hidden-618', + 'zDetFace-In Trash-Recently Deleted-619', + 'zDetFace-Cloud Local State-620', + 'zDetFace-Training Type-621', + 'zDetFace.Pose Yaw-622', + 'zDetFace-Body Center X-623', + 'zDetFace-Body Center Y-624', + 'zDetFace-Body Height-625', + 'zDetFace-Body Width-626', + 'zDetFace-Roll-627', + 'zDetFace-Size-628', + 'zDetFace-Cluster Squence Number-629', + 'zDetFace-Blur Score-630', + 'zDetFacePrint-Face Print Version-631', + 'zMedAnlyAstAttr-Face Count-632', + 'zDetFaceGroup-UUID-4TableStart-633', + 'zDetFaceGroup-Person Builder State-634', + 'zDetFaceGroup-UnNamed Face Count-635', + 'zPerson-In Person Naming Model-636', + 'zPerson-Key Face Pick Source Key-637', + 'zPerson-Manual Order Key-638', + 'zPerson-Question Type-639', + 'zPerson-Suggested For Client Type-640', + 'zPerson-Merge Target Person-641', + 'zPerson-Cloud Local State-642', + 'zFaceCrop-Cloud Local State-643', + 'zFaceCrop-Cloud Type-644', + 'zPerson-Cloud Delete State-645', + 'zFaceCrop-Cloud Delete State-646', + 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-647', + 'zAsset-Highlight Visibility Score-648', + 'zMemory-UUID-4TableStart-649', + 'zMemory-AssetListPredicte-650', + 'zMemory-Score-651', + 'zMemory-SubTitle-652', + 'zMemory-Title-653', + 'zMemory-Category-654', + 'zMemory-SubCategory-655', + ('zMemory-Creation Date-656', 'datetime'), + ('zMemory-Last Enrichment Date-657', 'datetime'), + 'zMemory-User Action Options-658', + 'zMemory-Favorite Memory-659', + 'zMemory-View Count-660', + 'zMemory-Play Count-661', + 'zMemory-Rejected-662', + 'zMemory-Share Count-663', + 'zMemory-Sharing Composition-664', + ('zMemory-Last Movie Play Date-665', 'datetime'), + ('zMemory-Last Viewed Date-666', 'datetime'), + 'zMemory-Pending Play Count Memory-667', + 'zMemory-Pending Share Count Memory-668', + 'zMemory-Pending View Count Memory-669', + 'zMemory-Pending State-670', + 'zMemory-Featured State-671', + 'zMemory-Photos Graph Version-672', + 'zMemory-Graph Memory Identifier-673', + 'zMemory-Notification State-674', + 'zMemory-Cloud Local State-675', + 'zMemory-Cloud Delete State-676', + 'zMemory-Story Color Grade Kind-677', + 'zMemory-Story Serialized Title Category-678', + 'zMemory-Syndicated Content State-679', + 'zMemory-Search Index Rebuild State-680', + 'zMemory-Black Listed Feature-681', + 'zMoment-UUID-4TableStart-682', + 'zMoment-Aggregation Score-683', + ('zMoment-Start Date-684', 'datetime'), + ('zMoment-Representative Date-685', 'datetime'), + 'zMoment-Timezone Offset-686', + ('zMoment-Modification Date-687', 'datetime'), + ('zMoment-End Date-688', 'datetime'), + 'zMoment-SubTitle-689', + 'zMoment-Title-690', + 'zMoment-Originator State-691', + 'zMoment-Sharing Composition-692', + 'zMoment-Cached Count Shared-693', + 'zMoment-Processed Location-694', + 'zMoment-Approx Latitude-695', + 'zMoment-Approx Longitude-696', + 'zMoment-GPS Horizontal Accuracy-697', + 'zMoment-Cache Count-698', + 'zMoment-Cached Photos Count-699', + 'zMoment-Cached Videos Count-700', + 'zMoment-Trashed State-701', + 'SBKAzSugg-UUID-4TableStart-702', + 'SBKAzSugg-Suggestion Context-703', + 'SBKAzSugg-Sharing Composition-704', + ('SBKAzSugg-Start Date-705', 'datetime'), + 'SBKAzSugg-State-706', + 'SBKAzSugg-Featured State-707', + 'SBKAzSugg- Available Features-708', + 'SBKAzSugg-Notification State-709', + ('SBKAzSugg-Creation Date-710', 'datetime'), + ('SBKAzSugg-End Date-711', 'datetime'), + ('SBKAzSugg-Activation Date-712', 'datetime'), + ('SBKAzSugg-Expunge Date-713', 'datetime'), + ('SBKAzSugg-Relevant Until Date-714', 'datetime'), + 'SBKAzSugg-Title-715', + 'SBKAzSugg-Sub Title-716', + 'SBKAzSugg-Cached Count-717', + 'SBKAzSugg-Cahed Photos Count-718', + 'SBKAzSugg-Cached Videos Count-719', + 'SBKAzSugg-Type-720', + 'SBKAzSugg-Sub Type-721', + 'SBKAzSugg-Action Data-722', + 'SBKAzSugg-Version-723', + 'SBKAzSugg-Cloud Local State-724', + 'SBKAzSugg-Cloud Delete State-725', + 'SBRAzSugg-UUID-4TableStart-726', + 'SBRAzSugg-Suggestion Context-727', + 'SBRAzSugg-Sharing Composition-728', + ('SBRAzSugg-Start Date-729', 'datetime'), + 'SBRAzSugg-State-730', + 'SBRAzSugg-Featured State-731', + 'SBRAzSugg- Available Features-732', + 'SBRAzSugg-Notification State-733', + ('SBRAzSugg-Creation Date-734', 'datetime'), + ('SBRAzSugg-End Date-735', 'datetime'), + ('SBRAzSugg-Activation Date-736', 'datetime'), + ('SBRAzSugg-Expunge Date-737', 'datetime'), + ('SBRAzSugg-Relevant Until Date-738', 'datetime'), + 'SBRAzSugg-Title-739', + 'SBRAzSugg-Sub Title-740', + 'SBRAzSugg-Cached Count-741', + 'SBRAzSugg-Cahed Photos Count-742', + 'SBRAzSugg-Cached Videos Count-743', + 'SBRAzSugg-Type-744', + 'SBRAzSugg-Sub Type-745', + 'SBRAzSugg-Action Data-746', + 'SBRAzSugg-Version-747', + 'SBRAzSugg-Cloud Local State-748', + 'SBRAzSugg-Cloud Delete State-749', + 'zMedAnlyAstAttr-Media Analysis Version-750', + 'zMedAnlyAstAttr-Audio Classification-751', + 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-752', + 'zMedAnlyAstAttr-Best Video Range Start Time Scale-753', + 'zMedAnlyAstAttr-Best Video Range Duration Value-754', + 'zMedAnlyAstAttr-Best Video Range Start Value-755', + 'zMedAnlyAstAttr-Packed Best Playback Rect-756', + 'zMedAnlyAstAttr-Activity Score-757', + 'zMedAnlyAstAttr-Video Score-758', + 'zMedAnlyAstAttr-Audio Score-759', + 'zMedAnlyAstAttr-Wallpaper Score-760', + 'zMedAnlyAstAttr-AutoPlay Suggestion Score-761', + 'zMedAnlyAstAttr-Blurriness Score-762', + 'zMedAnlyAstAttr-Exposure Score-763', + 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-764', + 'zMedAnlyAstAttr-Probable Rotation Direction-765', + 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-766', + 'zAssetAnalyState-Asset UUID-4TableStart-767', + 'zAssetAnalyState-Analyisis State-768', + 'zAssetAnalyState-Worker Flags-769', + 'zAssetAnalyState-Worker Type-770', + ('zAssetAnalyState-Ignore Until Date-771', 'datetime'), + ('zAssetAnalyState-Last Ignored Date-772', 'datetime'), + ('zAssetAnalyState-Sort Token-773', 'datetime'), + 'zMedAnlyAstAttr-Character Recognition Attr-774', + 'zCharRecogAttr-Algorithm Version-775', + 'zCharRecogAttr-Adjustment Version-776', + 'zMedAnlyAstAttr-Visual Search Attributes-777', + 'zVisualSearchAttr-Algorithm Version-778', + 'zVisualSearchAttr-Adjustment Version-779', + 'zVisualSearchAttr - Sticker Confidence Algorithm Version-780', + 'zVisualSearchAttr - Sticker Confidence Score-781', + 'zAsset-Sticker Confidence Score-782', + 'zAsset-Overall Aesthetic Score-783', + 'zCompAssetAttr-Behavioral Score-784', + 'zCompAssetAttr-Failure Score zCompAssetAttr-785', + 'zCompAssetAttr-Harmonious Color Score-786', + 'zCompAssetAttr-Immersiveness Score-787', + 'zCompAssetAttr-Interaction Score-788', + 'zCompAssetAttr-Intersting Subject Score-789', + 'zCompAssetAttr-Intrusive Object Presence Score-790', + 'zCompAssetAttr-Lively Color Score-791', + 'zCompAssetAttr-Low Light-792', + 'zCompAssetAttr-Noise Score-793', + 'zCompAssetAttr-Pleasant Camera Tilt Score-794', + 'zCompAssetAttr-Pleasant Composition Score-795', + 'zCompAssetAttr-Pleasant Lighting Score-796', + 'zCompAssetAttr-Pleasant Pattern Score-797', + 'zCompAssetAttr-Pleasant Perspective Score-798', + 'zCompAssetAttr-Pleasant Post Processing Score-799', + 'zCompAssetAttr-Pleasant Reflection Score-800', + 'zCompAssetAttrPleasant Symmetry Score-801', + 'zCompAssetAttr-Sharply Focused Subject Score-802', + 'zCompAssetAttr-Tastfully Blurred Score-803', + 'zCompAssetAttr-Well Chosen Subject Score-804', + 'zCompAssetAttr-Well Framed Subject Score-805', + 'zCompAssetAttr-Well Timeed Shot Score-806', + 'zCldRes-Asset UUID-4TableStart-807', + 'zCldRes-Cloud Local State-808', + 'zCldRes-File Size-809', + 'zCldRes-Height-810', + 'zCldRes-Is Available-811', + 'zCldRes-Is Locally Available-812', + 'zCldRes-Prefetch Count-813', + 'zCldRes-Source Type-814', + 'zCldRes-Type-815', + 'zCldRes-Width-816', + ('zCldRes-Date Created-817', 'datetime'), + ('zCldRes-Last OnDemand Download Date-818', 'datetime'), + ('zCldRes-Last Prefetch Date-819', 'datetime'), + 'zCldRes-Prunedat-820', + 'zCldRes-File Path-821', + 'zCldRes-Fingerprint-822', + 'zCldRes-Item ID-823', + 'zCldRes-UniID-824', + 'zUserFeedback-UUID-4TableStart-825', + 'zUserFeedback-Feature-826', + 'zUserFeedback-Type-827', + ('zUserFeedback-Last Modified Date-828', 'datetime'), + 'zUserFeedback-Context-829', + 'zUserFeedback-Cloud Local State-830', + 'zUserFeedback-Cloud Delete State-831', + 'zUserFeedback - Creation Type-832', + 'zAddAssetAttr-zPK-833', + 'zAddAssetAttr-zENT-834', + 'ZAddAssetAttr-zOPT-835', + 'zAddAssetAttr-zAsset= zAsset_zPK-836', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-837', + 'zAddAssetAttr-Master Fingerprint-838', + 'zAddAssetAttr-Public Global UUID-839', + 'zAddAssetAttr-Deferred Photo Identifier-840', + 'zAddAssetAttr-Original Assets UUID-841', + 'zAddAssetAttr-Import Session ID-842', + 'zAddAssetAttr-Originating Asset Identifier-843', + 'zAddAssetAttr.Adjusted Fingerprint-844', + 'zAlbumList-zPK= Album List Key-845', + 'zAlbumList-zENT-846', + 'zAlbumList-zOPT-847', + 'zAlbumList-ID Key-848', + 'zAlbumList-UUID-849', + 'zAsset-zPK-850', + 'zAsset-zENT-851', + 'zAsset-zOPT-852', + 'zAsset-Master= zCldMast-zPK-853', + 'zAsset-Extended Attributes= zExtAttr-zPK-854', + 'zAsset-Import Session Key-855', + 'zAsset-Trashed by Participant= zSharePartic_zPK-856', + 'zAsset-Photo Analysis Attributes Key-857', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-858', + 'zAsset-FOK-Cloud Feed Asset Entry Key-859', + 'zAsset-Moment Share Key= zShare-zPK-860', + 'zAsset-zMoment Key= zMoment-zPK-861', + 'zAsset-Computed Attributes Asset Key-862', + 'zAsset-Highlight Being Assets-HBA Key-863', + 'zAsset-Highlight Being Extended Assets-HBEA Key-864', + 'zAsset-Highlight Being Key Asset Private-HBKAP Key-865', + 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-866', + 'zAsset-Highligh Being Summary Assets-HBSA Key-867', + 'zAsset-Day Group Highlight Being Assets-DGHBA Key-868', + 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-869', + 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-870', + 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-871', + 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-872', + 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-873', + 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-874', + 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-875', + 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-876', + 'zAsset-Promotion Score-877', + 'zAsset-Iconic Score-878', + 'zAsset-Media Analysis Attributes Key-879', + 'zAsset-Media Group UUID-880', + 'zAsset-UUID = store.cloudphotodb-881', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-882', + 'zAsset.Cloud Collection GUID-883', + 'zAsset-Avalanche UUID-884', + 'zAssetAnalyState-zPK-885', + 'zAssetAnalyState-zEnt-886', + 'zAssetAnalyState-zOpt-887', + 'zAssetAnalyState-Asset= zAsset-zPK-888', + 'zAssetAnalyState-Asset UUID-889', + 'zAsstContrib-zPK-890', + 'zAsstContrib-zEnt-891', + 'zAsstContrib-zOpt-892', + 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-893', + 'zAsstContrib-Participant= zSharePartic-zPK-894', + 'zAssetDes-zPK-895', + 'zAssetDes-zENT-896', + 'zAssetDes-zOPT-897', + 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-898', + 'zCharRecogAttr-zPK-899', + 'zCharRecogAttr-zENT-900', + 'zCharRecogAttr-zOPT-901', + 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-902', + 'zCldFeedEnt-zPK= zCldShared keys-903', + 'zCldFeedEnt-zENT-904', + 'zCldFeedEnt-zOPT-905', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-906', + 'zCldFeedEnt-Entry Invitation Record GUID-907', + 'zCldFeedEnt-Entry Cloud Asset GUID-908', + 'zCldMast-zPK= zAsset-Master-909', + 'zCldMast-zENT-910', + 'zCldMast-zOPT-911', + 'zCldMast-Moment Share Key= zShare-zPK-912', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-913', + 'zCldMast-Originating Asset ID-914', + 'zCldMast-Import Session ID- AirDrop-StillTesting-915', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-916', + 'CMzCldMastMedData-zENT-917', + 'CMzCldMastMedData-zOPT-918', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-919', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-920', + 'AAAzCldMastMedData-zENT-921', + 'AAAzCldMastMedData-zOPT-922', + 'AAAzCldMastMedData-CldMast key-923', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-924', + 'zCldRes-zPK-925', + 'zCldRes-zENT-926', + 'zCldRes-zOPT-927', + 'zCldRes-Asset= zAsset-zPK-928', + 'zCldRes-Cloud Master= zCldMast-zPK-929', + 'zCldRes-Asset UUID-930', + 'zCldShareAlbumInvRec-zPK-931', + 'zCldShareAlbumInvRec-zEnt-932', + 'zCldShareAlbumInvRec-zOpt-933', + 'zCldShareAlbumInvRec-Album Key-934', + 'zCldShareAlbumInvRec-FOK Album Key-935', + 'zCldShareAlbumInvRec-Album GUID-936', + 'zCldShareAlbumInvRec-zUUID-937', + 'zCldShareAlbumInvRec-Cloud GUID-938', + 'zCldSharedComment-zPK-939', + 'zCldSharedComment-zENT-940', + 'zCldSharedComment-zOPT-941', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-942', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-943', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-944', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-945', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-946', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-947', + 'zCldSharedComment-Cloud GUID-948', + 'zCompAssetAttr-zPK-949', + 'zCompAssetAttr-zEnt-950', + 'zCompAssetAttr-zOpt-951', + 'zCompAssetAttr-Asset Key-952', + 'zDetFace-zPK-953', + 'zDetFace-zEnt-954', + 'zDetFace.zOpt-955', + 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-956', + 'zDetFace-PersonForFace= zPerson-zPK-957', + 'zDetFace-Person Being Key Face-958', + 'zDetFace-Face Print-959', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-960', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-961', + 'zDetFace-UUID-962', + 'zDetFaceGroup-zPK-963', + 'zDetFaceGroup-zENT-964', + 'zDetFaceGroup-zOPT-965', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-966', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-967', + 'zDetFaceGroup-UUID-968', + 'zDetFacePrint-zPK-969', + 'zDetFacePrint-zEnt-970', + 'zDetFacePrint-zOpt-971', + 'zDetFacePrint-Face Key-972', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-973', + 'zExtAttr-zENT-974', + 'zExtAttr-zOPT-975', + 'zExtAttr-Asset Key-976', + 'zFaceCrop-zPK-977', + 'zFaceCrop-zEnt-978', + 'zFaceCrop-zOpt-979', + 'zFaceCrop-Asset Key-980', + 'zFaceCrop-Invalid Merge Canidate Person UUID-981', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-982', + 'zFaceCrop-Face Key-983', + 'zFaceCrop-UUID-984', + 'zGenAlbum-zPK=26AlbumLists= 26Albums-985', + 'zGenAlbum-zENT-986', + 'zGenAlbum-zOpt-987', + 'zGenAlbum-Key Asset-Key zAsset-zPK-988', + 'zGenAlbum-Secondary Key Asset-989', + 'zGenAlbum-Tertiary Key Asset-990', + 'zGenAlbum-Custom Key Asset-991', + 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-992', + 'zGenAlbum-FOK Parent Folder-993', + 'zGenAlbum-zSyndicate-994', + 'zGenAlbum-UUID-995', + 'SWYConverszGenAlbum-UUID-996', + 'zGenAlbum-Cloud_GUID = store.cloudphotodb-997', + 'SWYConverszGenAlbum-Cloud GUID-998', + 'zGenAlbum-Project Render UUID-999', + 'SWYConverszGenAlbum-Project Render UUID-1000', + 'zIntResou-zPK-1001', + 'zIntResou-zENT-1002', + 'zIntResou-zOPT-1003', + 'zIntResou-Asset= zAsset_zPK-1004', + 'zIntResou-Fingerprint-1005', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-1006', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1007', + 'zMedAnlyAstAttr-zEnt-1008', + 'zMedAnlyAstAttr-zOpt-1009', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-1010', + 'zMemory-zPK-1011', + 'zMemory-zENT-1012', + 'zMemory-zOPT-1013', + 'zMemory-Key Asset= zAsset-zPK-1014', + 'zMemory-UUID-1015', + 'zMoment-zPK-1016', + 'zMoment-zENT-1017', + 'zMoment-zOPT-1018', + 'zMoment-Highlight Key-1019', + 'zMoment-UUID-1020', + 'zPerson-zPK=zDetFace-Person-1021', + 'zPerson-zEnt-1022', + 'zPerson-zOpt-1023', + 'zPerson-Share Participant= zSharePartic-zPK-1024', + 'zPerson-KeyFace=zDetFace-zPK-1025', + 'zPerson-Assoc Face Group Key-1026', + 'zPerson-Person UUID-1027', + 'zPhotoAnalysisAssetAttr-zPK-1028', + 'zPhotoAnalysisAssetAttr-zEnt-1029', + 'zPhotoAnalysisAssetAttr-zOpt-1030', + 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1031', + 'zSceneP-zPK-1032', + 'zSceneP-zENT-1033', + 'zSceneP-zOPT-1034', + 'zShare-zPK-1035', + 'zShare-zENT-1036', + 'zShare-zOPT-1037', + 'zShare-UUID-1038', + 'SPLzShare-UUID-1039', + 'zShare-Scope ID = store.cloudphotodb-1040', + 'zSharePartic-zPK-1041', + 'zSharePartic-zENT-1042', + 'zSharePartic-zOPT-1043', + 'zSharePartic-Share Key= zShare-zPK-1044', + 'zSharePartic-Person= zPerson-zPK-1045', + 'zSharePartic-UUID-1046', + 'SBKAzSugg-zPK-1047', + 'SBKAzSugg-zENT-1048', + 'SBKAzSugg-zOPT-1049', + 'SBKAzSugg-UUID-1050', + 'SBRAzSugg-zPK-1051', + 'SBRAzSugg-zENT-1052', + 'SBRAzSugg-zOPT-1053', + 'SBRAzSugg-UUID-1054', + 'z3SuggBRA-3RepAssets1-1055', + 'z3SuggBRA-58SuggBeingRepAssets-1056', + 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK-1057', + 'z3SuggBKA-3KeyAssets= zAsset-zPK-1058', + 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1059', + 'zUnmAdj-zOPT-1060', + 'zUnmAdj-zENT-1061', + 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1062', + 'zUnmAdj-UUID-1063', + 'zUnmAdj-Other Adjustments Fingerprint-1064', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1065', + 'zUserFeedback-zPK-1066', + 'zUserFeedback-zENT-1067', + 'zUserFeedback-zOPT-1068', + 'zUserFeedback-Person= zPerson-zPK-1069', + 'zUserFeedback-Memory= zMemory-zPK-1070', + 'zUserFeedback-UUID-1071', + 'zVisualSearchAttr-zPK-1072', + 'zVisualSearchAttr-zENT-1073', + 'zVisualSearchAttr-zOPT-1074', + 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1075', + 'z27AlbumList-27Albums= zGenAlbum-zPK-1076', + 'z27AlbumList-Album List Key-1077', + 'z27AlbumList-FOK27Albums Key-1078', + 'z28Assets-28Albums= zGenAlbum-zPK-1079', + 'z28Assets-3Asset Key= zAsset-zPK in the Album-1080', + 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1081', + 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1082', + 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1083', + 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK-1084', + 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1085', + 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK-1086', + 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1087', + 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1088', + 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1089', + 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK-1090', + 'z3MemoryBCAs-44Memories Being Custom User Assets-1091', + 'z3MemoryBCAs-3Custom User Assets-1092', + 'z3MemoryBCAs-FOK-3Custom User Assets-1093') + data_list = get_sqlite_db_records(source_path, query) - db.close() - return - - -def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): - break - if report_folder.endswith('/') or report_folder.endswith('\\'): - report_folder = report_folder[:-1] - iosversion = scripts.artifacts.artGlobals.versionf - if (version.parse(iosversion) <= version.parse("16.7.7")) or (version.parse(iosversion) >= version.parse("18")): - logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite reference for asset analysis from iOS " + iosversion) - if (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', @@ -4129,7 +4119,7 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w END AS 'zAddAssetAttr-Shifted Location Valid', CASE WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' - ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' + ELSE 'zAddAssetArrt-Shifted_Location_Data_Empty-NULL' END AS 'zAddAssetAttr-Shifted Location Data', CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID WHEN 0 THEN '0-Reverse Location Not Valid-0' @@ -4264,7 +4254,7 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' END AS 'CldMasterzCldMastMedData-zOPT', zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', - zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData-zPK', + zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData.zPK', CASE WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' ELSE 'CMzCldMastMedData-Data_Empty-NULL' @@ -4278,7 +4268,7 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE WHEN 0 THEN '0-NA-0' WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1' - WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2' + WHEN 2 THEN '2-STILLTESTING_Telephoto_Camear_Lens-2' WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4' WHEN 16 THEN '16-STILLTESTING-16' WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024' @@ -4314,7 +4304,7 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w END AS 'zAsset-Kind', CASE zAsset.ZKINDSUBTYPE WHEN 0 THEN '0-Still-Photo-0' - WHEN 1 THEN '1-Panorama-1' + WHEN 1 THEN '1-Paorama-1' WHEN 2 THEN '2-Live-Photo-2' WHEN 10 THEN '10-SpringBoard-Screenshot-10' WHEN 100 THEN '100-Video-100' @@ -4388,7 +4378,7 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w END AS 'zIntResou-Local Availability Target', CASE zIntResou.ZCLOUDLOCALSTATE WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0' - WHEN 1 THEN '1-IR_Asset_Pending-Upload-1' + WHEN 1 THEN '1-IR_Asset_Pening-Upload-1' WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2' WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3' ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || '' @@ -4418,7 +4408,7 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w WHEN 0 THEN '0-Photo-0' WHEN 1 THEN '1-Video-1' WHEN 3 THEN '3-Live-Photo-3' - WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 5 THEN '5-Adjustement-Data-5' WHEN 6 THEN '6-Screenshot-6' WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' WHEN 13 THEN '13-Movie-13' @@ -4738,10 +4728,10 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias', zAsset.ZHEIGHT AS 'zAsset-Height', zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height', - zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height', + zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-Unoriented Height', zAsset.ZWIDTH AS 'zAsset-Width', zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width', - zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width', + zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-Unoriented Width', zShare.ZTHUMBNAILIMAGEDATA AS 'zShare-Thumbnail Image Data', SPLzShare.ZTHUMBNAILIMAGEDATA AS 'SPLzShare-Thumbnail Image Data', zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index', @@ -4869,20 +4859,20 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' ELSE 'Unknown-New-Value!: ' || SPLzShare.Z_ENT || '' END AS 'SPLzShare-zENT-SPL', - CASE zSharePartic.Z54_SHARE + CASE zSharePartic.Z55_SHARE WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' - ELSE 'Unknown-New-Value!: ' || zSharePartic.Z54_SHARE || '' - END AS 'zSharePartic-z54SHARE', - CASE SPLzSharePartic.Z54_SHARE + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z55_SHARE || '' + END AS 'zSharePartic-z55SHARE', + CASE SPLzSharePartic.Z55_SHARE WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' - ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z54_SHARE || '' - END AS 'SPLzSharePartic-z54SHARE', + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z55_SHARE || '' + END AS 'SPLzSharePartic-z55SHARE', CASE zShare.ZSTATUS WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || '' @@ -6189,7 +6179,7 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type', DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date', DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date', - zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token', + DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token', zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr', zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version', zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version', @@ -6472,8 +6462,8 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w SBRAzSugg.Z_OPT AS 'SBRAzSugg-zOPT', SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID', z3SuggBRA.Z_3REPRESENTATIVEASSETS1 AS 'z3SuggBRA-3RepAssets1', - z3SuggBRA.Z_58SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-58SuggBeingRepAssets', - z3SuggBKA.Z_58SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK', + z3SuggBRA.Z_59SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-59SuggBeingRepAssets', + z3SuggBKA.Z_59SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-59SuggBeingKeyAssets= zSugg-zPK', z3SuggBKA.Z_3KEYASSETS AS 'z3SuggBKA-3KeyAssets= zAsset-zPK', zUnmAdj.Z_PK AS 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key', zUnmAdj.Z_OPT AS 'zUnmAdj-zOPT', @@ -6492,22 +6482,22 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w zVisualSearchAttr.Z_ENT AS 'zVisualSearchAttr-zENT', zVisualSearchAttr.Z_OPT AS 'zVisualSearchAttr-zOPT', zVisualSearchAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK', - z27AlbumLists.Z_27ALBUMS AS 'z27AlbumList-27Albums= zGenAlbum-zPK', - z27AlbumLists.Z_2ALBUMLISTS AS 'z27AlbumList-Album List Key', - z27AlbumLists.Z_FOK_27ALBUMS AS 'z27AlbumList-FOK27Albums Key', - z28Assets.Z_28ALBUMS AS 'z28Assets-28Albums= zGenAlbum-zPK', - z28Assets.Z_3ASSETS AS 'z28Assets-3Asset Key= zAsset-zPK in the Album', - z28Assets.Z_FOK_3ASSETS AS 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY', + z28AlbumLists.Z_28ALBUMS AS 'z28AlbumList-28Albums= zGenAlbum-zPK', + z28AlbumLists.Z_2ALBUMLISTS AS 'z28AlbumList-Album List Key', + z28AlbumLists.Z_FOK_28ALBUMS AS 'z28AlbumList-FOK28Albums Key', + z29Assets.Z_29ALBUMS AS 'z29Assets-29Albums= zGenAlbum-zPK', + z29Assets.Z_3ASSETS AS 'z29Assets-3Asset Key= zAsset-zPK in the Album', + z29Assets.Z_FOK_3ASSETS AS 'z29Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY', z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AS 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK', z3MemoryBCAs.Z_3CURATEDASSETS AS 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK', - z3MemoryBCAs.Z_44MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK', + z3MemoryBCAs.Z_45MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-45MemoriesBeingCuratedAssets= zMemory-zPK', z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK', - z3MemoryBECAs.Z_44MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK', + z3MemoryBECAs.Z_45MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-45MemoriesBeingExtCuratedAssets= zMemory-zPK', z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AS 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK', - z3MemoryBRAs.Z_44MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK', + z3MemoryBRAs.Z_45MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-45RepresentativeAssets= zMemory-zPK', z3MemoryBUCAs.Z_3USERCURATEDASSETS AS 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK', - z3MemoryBUCAs.Z_44MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK', - z3MemoryBCUAs.Z_44MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-44Memories Being Custom User Assets', + z3MemoryBUCAs.Z_45MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-45MemoriesBeingUserCuratedAssets= zMemory-zPK', + z3MemoryBCUAs.Z_45MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-45Memories Being Custom User Assets', z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-3Custom User Assets', z3MemoryBCUAs.Z_FOK_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-FOK-3Custom User Assets' FROM ZASSET zAsset @@ -6515,11 +6505,11 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT - LEFT JOIN Z_28ASSETS z28Assets ON z28Assets.Z_3ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z28Assets.Z_28ALBUMS + LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z29Assets.Z_29ALBUMS LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK - LEFT JOIN Z_27ALBUMLISTS z27AlbumLists ON z27AlbumLists.Z_27ALBUMS = zGenAlbum.Z_PK - LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z27AlbumLists.Z_2ALBUMLISTS + LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION @@ -6548,1316 +6538,9006 @@ def get_ph97ios17refforassetanalysissyndpl(files_found, report_folder, seeker, w LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP LEFT JOIN Z_3MEMORIESBEINGCURATEDASSETS z3MemoryBCAs ON zAsset.Z_PK = z3MemoryBCAs.Z_3CURATEDASSETS - LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_44MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK - LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_44MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK - LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_44MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK - LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_44MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK - LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AND z3MemoryBRAs.Z_44MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK - LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_44MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK + LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_45MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_45MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_45MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_45MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AND z3MemoryBRAs.Z_45MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_45MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK LEFT JOIN ZUSERFEEDBACK zUserFeedback ON zUserFeedback.ZMEMORY = zMemory.Z_PK LEFT JOIN ZMOMENT zMoment ON zMoment.Z_PK = zAsset.ZMOMENT LEFT JOIN Z_3SUGGESTIONSBEINGKEYASSETS z3SuggBKA ON z3SuggBKA.Z_3KEYASSETS = zAsset.Z_PK - LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_58SUGGESTIONSBEINGKEYASSETS + LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_59SUGGESTIONSBEINGKEYASSETS LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS1 = zAsset.Z_PK - LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_58SUGGESTIONSBEINGREPRESENTATIVEASSETS + LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_59SUGGESTIONSBEINGREPRESENTATIVEASSETS ORDER BY zAsset.ZADDEDDATE - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], - row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], - row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], - row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], - row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], - row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], - row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], - row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], - row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], - row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], - row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], - row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], - row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], - row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], - row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], - row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], - row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], - row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], - row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], - row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], - row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], - row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], - row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], - row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], - row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], - row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], - row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], - row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], - row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], - row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], - row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], - row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], - row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], - row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], - row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], - row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], - row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], - row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], - row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], - row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], - row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], - row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], - row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], - row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], - row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], - row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], - row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], - row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], - row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], - row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], - row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], - row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], - row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], - row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], - row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], - row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], - row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], - row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], - row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], - row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], - row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], - row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], - row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], - row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], - row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], - row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], - row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], - row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], - row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], - row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], - row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], - row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], - row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], - row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], - row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], - row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], - row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], - row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], - row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], - row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], - row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], - row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], - row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], - row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], - row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], - row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], - row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], - row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], - row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], - row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], - row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], - row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], - row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], - row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], - row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], - row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], - row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], - row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], - row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], - row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], - row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], - row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], - row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], - row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], - row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093])) - - counter += 1 - - description = 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' \ - ' This parser includes the largest set of decoded data based on testing and research' \ - ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' \ - ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' \ - ' TimelineExplorer to view, search and filter the results.' - report = ArtifactHtmlReport('Ph97.2-iOS17_Ref_for_Asset_Analysis-SyndPL') - report.start_artifact_report(report_folder, 'Ph97.2-iOS17_Ref_for_Asset_Analysis-SyndPL', description) - report.add_script() - data_headers = ('zAsset-Added Date-0', - 'zAsset- SortToken -CameraRoll-1', - 'zAsset Complete-2', - 'zAsset-zPK-4QueryStart-3', - 'zAddAssetAttr-zPK-4QueryStart-4', - 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', - 'zAddAssetAttr-Master Fingerprint-4TableStart-6', - 'zIntResou-Fingerprint-4TableStart-7', - 'zAsset-Bundle Scope-8', - 'zAsset-Syndication State-9', - 'zAsset-Cloud is My Asset-10', - 'zAsset-Cloud is deletable-Asset-11', - 'zAsset-Cloud_Local_State-12', - 'zAsset-Visibility State-13', - 'zExtAttr-Camera Make-14', - 'zExtAttr-Camera Model-15', - 'zExtAttr-Lens Model-16', - 'zExtAttr-Flash Fired-17', - 'zExtAttr-Focal Lenght-18', - 'zExtAttr-Focal Lenth in 35MM-19', - 'zExtAttr-Digital Zoom Ratio-20', - 'zAsset-Derived Camera Capture Device-21', - 'zAddAssetAttr-Camera Captured Device-22', - 'zAddAssetAttr-Imported by-23', - 'zCldMast-Imported By-24', - 'zAddAssetAttr.Imported by Bundle Identifier-25', - 'zAddAssetAttr-Imported By Display Name-26', - 'zCldMast-Imported by Bundle ID-27', - 'zCldMast-Imported by Display Name-28', - 'zAsset-Saved Asset Type-29', - 'zAsset-Directory-Path-30', - 'zAsset-Filename-31', - 'zAddAssetAttr- Original Filename-32', - 'zCldMast- Original Filename-33', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-34', - 'zAsset-Active Library Scope Participation State -4QueryStart-35', - 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36', - 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-37', - 'SPLzShare-Cloud Video Count-SPL -4QueryStart-38', - 'zAddAssetAttr-Date Created Source-39', - 'zAsset-Date Created-40', - 'zCldMast-Creation Date-41', - 'zIntResou-CldMst Date Created-42', - 'zAddAssetAttr-Time Zone Name-43', - 'zAddAssetAttr-Time Zone Offset-44', - 'zAddAssetAttr-Inferred Time Zone Offset-45', - 'zAddAssetAttr-EXIF-String-46', - 'zAsset-Modification Date-47', - 'zAddAssetAttr-Last Viewed Date-48', - 'zAsset-Last Shared Date-49', - 'zCldMast-Cloud Local State-50', - 'zCldMast-Import Date-51', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-52', - 'zAddAssetAttr-Import Session ID-4QueryStart-53', - 'zAddAssetAttr-Alt Import Image Date-54', - 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-55', - 'zAsset-Cloud Batch Publish Date-56', - 'zAsset-Cloud Server Publish Date-57', - 'zAsset-Cloud Download Requests-58', - 'zAsset-Cloud Batch ID-59', - 'zAddAssetAttr-Upload Attempts-60', - 'zAsset-Latitude-61', - 'zExtAttr-Latitude-62', - 'zAsset-Longitude-63', - 'zExtAttr-Longitude-64', - 'zAddAssetAttr-GPS Horizontal Accuracy-65', - 'zAddAssetAttr-Location Hash-66', - 'zAddAssetAttr-Shifted Location Valid-67', - 'zAddAssetAttr-Shifted Location Data-68', - 'zAddAssetAttr-Reverse Location Is Valid-69', - 'zAddAssetAttr-Reverse Location Data-70', - 'ParentzGenAlbum-UUID-4QueryStart-71', - 'zGenAlbum-UUID-4QueryStart-72', - 'SWYConverszGenAlbum-UUID-4QueryStart-73', - 'ParentzGenAlbum-Cloud GUID-4QueryStart-74', - 'zGenAlbum-Cloud GUID-4QueryStart-75', - 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-76', - 'zCldShareAlbumInvRec-Album GUID-4QueryStart-77', - 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-78', - 'zGenAlbum-Project Render UUID-4QueryStart-79', - 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-80', - 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-81', - 'zGenAlbum-Cloud_Local_State-4QueryStart-82', - 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-83', - 'ParentzGenAlbum- Creation Date- 4QueryStart-84', - 'zGenAlbum- Creation Date- 4QueryStart-85', - 'SWYConverszGenAlbum- Creation Date- 4QueryStart-86', - 'zGenAlbum- Cloud Creation Date- 4QueryStart-87', - 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-88', - 'zGenAlbum- Start Date- 4QueryStart-89', - 'SWYConverszGenAlbum- Start Date- 4QueryStart-90', - 'zGenAlbum- End Date- 4QueryStart-91', - 'SWYConverszGenAlbum- End Date- 4QueryStart-92', - 'zGenAlbum-Cloud Subscription Date- 4QueryStart-93', - 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-94', - 'ParentzGenAlbum- Title- 4QueryStart-95', - 'zGenAlbum- Title-User&System Applied- 4QueryStart-96', - 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-97', - 'zGenAlbum-Import Session ID-SWY- 4QueryStart-98', - 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-99', - 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-100', - 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-101', - 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-102', - 'SWYConverszGenAlbum- Syndicate-4QueryStart-103', - 'zGenAlbum-zENT- Entity- 4QueryStart-104', - 'ParentzGenAlbum- Kind- 4QueryStart-105', - 'zGenAlbum-Album Kind- 4QueryStart-106', - 'SWYConverszGenAlbum-Album Kind- 4QueryStart-107', - 'AAAzCldMastMedData-zOPT-108', - 'zAddAssetAttr-Media Metadata Type-109', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-110', - 'AAAzCldMastMedData-Data-111', - 'CldMasterzCldMastMedData-zOPT-112', - 'zCldMast-Media Metadata Type-113', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-114', - 'CMzCldMastMedData-Data-115', - 'zAsset-Search Index Rebuild State-116', - 'zAddAssetAttr-Syndication History-117', - 'zMedAnlyAstAttr-Syndication Processing Version-118', - 'zMedAnlyAstAttr-Syndication Processing Value-119', - 'zAsset-Orientation-120', - 'zAddAssetAttr-Original Orientation-121', - 'zAsset-Kind-122', - 'zAsset-Kind-Sub-Type-123', - 'zAddAssetAttr-Cloud Kind Sub Type-124', - 'zAsset-Playback Style-125', - 'zAsset-Playback Variation-126', - 'zAsset-Video Duration-127', - 'zExtAttr-Duration-128', - 'zAsset-Video CP Duration-129', - 'zAddAssetAttr-Video CP Duration Time Scale-130', - 'zAsset-Video CP Visibility State-131', - 'zAddAssetAttr-Video CP Display Value-132', - 'zAddAssetAttr-Video CP Display Time Scale-133', - 'zIntResou-Datastore Class ID-134', - 'zAsset-Cloud Placeholder Kind-135', - 'zIntResou-Local Availability-136', - 'zIntResou-Local Availability Target-137', - 'zIntResou-Cloud Local State-138', - 'zIntResou-Remote Availability-139', - 'zIntResou-Remote Availability Target-140', - 'zIntResou-Transient Cloud Master-141', - 'zIntResou-Side Car Index-142', - 'zIntResou- File ID-143', - 'zIntResou-Version-144', - 'zAddAssetAttr- Original-File-Size-145', - 'zIntResou-Resource Type-146', - 'zIntResou-Datastore Sub-Type-147', - 'zIntResou-Cloud Source Type-148', - 'zIntResou-Data Length-149', - 'zIntResou-Recipe ID-150', - 'zIntResou-Cloud Last Prefetch Date-151', - 'zIntResou-Cloud Prefetch Count-152', - 'zIntResou- Cloud-Last-OnDemand Download-Date-153', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-154', - 'zIntResou-Compact-UTI-155', - 'zAsset-Uniform Type ID-156', - 'zAsset-Original Color Space-157', - 'zCldMast-Uniform_Type_ID-158', - 'zCldMast-Full Size JPEG Source-159', - 'zAsset-HDR Gain-160', - 'zAsset-zHDR_Type-161', - 'zExtAttr-Codec-162', - 'zIntResou-Codec Four Char Code Name-163', - 'zCldMast-Codec Name-164', - 'zCldMast-Video Frame Rate-165', - 'zCldMast-Placeholder State-166', - 'zAsset-Depth_Type-167', - 'zAsset-Avalanche UUID-4TableStart-168', - 'zAsset-Avalanche_Pick_Type-BurstAsset-169', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-170', - 'zAddAssetAttr-Cloud Recovery State-171', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-172', - 'zAsset-Deferred Processing Needed-173', - 'zAsset-Video Deferred Processing Needed-174', - 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-175', - 'zAddAssetAttr-Deferred Processing Candidate Options-176', - 'zAsset-Has Adjustments-Camera-Effects-Filters-177', - 'zUnmAdj-UUID-4TableStart-178', - 'zAsset-Adjustment Timestamp-179', - 'zUnmAdj-Adjustment Timestamp-180', - 'zAddAssetAttr-Editor Bundle ID-181', - 'zUnmAdj-Editor Localized Name-182', - 'zUnmAdj-Adjustment Format ID-183', - 'zAddAssetAttr-Montage-184', - 'zUnmAdj-Adjustment Render Types-185', - 'zUnmAdj-Adjustment Format Version-186', - 'zUnmAdj-Adjustment Base Image Format-187', - 'zAsset-Favorite-188', - 'zAsset-Hidden-189', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-190', - 'zAsset-Trashed Date-191', - 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-192', - 'zAsset-Delete-Reason-193', - 'zIntResou-Trash State-194', - 'zIntResou-Trashed Date-195', - 'zAsset-Cloud Delete State-196', - 'zIntResou-Cloud Delete State-197', - 'zAddAssetAttr-PTP Trashed State-198', - 'zIntResou-PTP Trashed State-199', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-200', - 'zMedAnlyAstAttr-Media Analysis Timestamp-201', - 'zAsset-Analysis State Modificaion Date-202', - 'zAddAssetAttr- Pending View Count-203', - 'zAddAssetAttr- View Count-204', - 'zAddAssetAttr- Pending Play Count-205', - 'zAddAssetAttr- Play Count-206', - 'zAddAssetAttr- Pending Share Count-207', - 'zAddAssetAttr- Share Count-208', - 'zAddAssetAttr-Allowed for Analysis-209', - 'zAddAssetAttr-Scene Analysis Version-210', - 'zAddAssetAttr-Scene Analysis is From Preview-211', - 'zAddAssetAttr-Scene Analysis Timestamp-212', - 'zAsset-Duplication Asset Visibility State-213', - 'zAddAssetAttr-Destination Asset Copy State-214', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-215', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-216', - 'zCldMast-Source Master For Duplication Scope ID-217', - 'zAddAssetAttr-Source Asset For Duplication ID-218', - 'zCldMast-Source Master for Duplication ID-219', - 'zAddAssetAttr-Variation Suggestions States-220', - 'zAsset-High Frame Rate State-221', - 'zAsset-Video Key Frame Time Scale-222', - 'zAsset-Video Key Frame Value-223', - 'zExtAttr-ISO-224', - 'zExtAttr-Metering Mode-225', - 'zExtAttr-Sample Rate-226', - 'zExtAttr-Track Format-227', - 'zExtAttr-White Balance-228', - 'zExtAttr-Aperture-229', - 'zExtAttr-BitRate-230', - 'zExtAttr-Exposure Bias-231', - 'zExtAttr-Frames Per Second-232', - 'zExtAttr-Shutter Speed-233', - 'zExtAttr-Slush Scene Bias-234', - 'zExtAttr-Slush Version-235', - 'zExtAttr-Slush Preset-236', - 'zExtAttr-Slush Warm Bias-237', - 'zAsset-Height-238', - 'zAddAssetAttr-Original Height-239', - 'zIntResou-Unoriented Height-240', - 'zAsset-Width-241', - 'zAddAssetAttr-Original Width-242', - 'zIntResou-Unoriented Width-243', - 'zShare-Thumbnail Image Data-244', - 'SPLzShare-Thumbnail Image Data-245', - 'zAsset-Thumbnail Index-246', - 'zAddAssetAttr-Embedded Thumbnail Height-247', - 'zAddAssetAttr-Embedded Thumbnail Length-248', - 'zAddAssetAttr-Embedded Thumbnail Offset-249', - 'zAddAssetAttr-Embedded Thumbnail Width-250', - 'zAsset-Packed Acceptable Crop Rect-251', - 'zAsset-Packed Badge Attributes-252', - 'zAsset-Packed Preferred Crop Rect-253', - 'zAsset-Curation Score-254', - 'zAsset-Camera Processing Adjustment State-255', - 'zAsset-Depth Type-256', - 'zAsset-Is Magic Carpet-QuicktimeMOVfile-257', - 'zAddAssetAttr-Orig Resource Choice-258', - 'zAsset-Spatial Type-259', - 'zAddAssetAttr-Spatial Over Capture Group ID-260', - 'zAddAssetAttr-Place Annotation Data-261', - 'zAddAssetAttr-Distance Identity-262', - 'zAddAssetAttr-Edited IPTC Attributes-263', - 'zAssetDes-Long Description-264', - 'zAddAssetAttr-Asset Description-265', - 'zAddAssetAttr-Title-Comments via Cloud Website-266', - 'zAddAssetAttr-Accessibility Description-267', - 'zAddAssetAttr-Photo Stream Tag ID-268', - 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-269', - 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-270', - 'zCldFeedEnt-Entry Date-271', - 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-272', - 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-273', - 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-274', - 'zCldFeedEnt-Entry Priority Number-275', - 'zCldFeedEnt-Entry Type Number-276', - 'zCldSharedComment-Cloud GUID-4TableStart-277', - 'zCldSharedComment-Date-278', - 'zCldSharedComment-Comment Client Date-279', - 'zAsset-Cloud Last Viewed Comment Date-280', - 'zCldSharedComment-Type-281', - 'zCldSharedComment-Comment Text-282', - 'zCldSharedComment-Commenter Hashed Person ID-283', - 'zCldSharedComment-Batch Comment-284', - 'zCldSharedComment-Is a Caption-285', - 'zAsset-Cloud Has Comments by Me-286', - 'zCldSharedComment-Is My Comment-287', - 'zCldSharedComment-Is Deletable-288', - 'zAsset-Cloud Has Comments Conversation-289', - 'zAsset-Cloud Has Unseen Comments-290', - 'zCldSharedComment-Liked-291', - 'zAddAssetAttr-Share Type-292', - 'zAsset-Library Scope Share State- StillTesting-293', - 'zAsset-Active Library Scope Participation State-294', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-295', - 'zShare-UUID-CMM-4TableStart-296', - 'SPLzShare-UUID-SPL-4TableStart-297', - 'zShare-zENT-CMM-298', - 'SPLzShare-zENT-SPL-299', - 'zSharePartic-z54SHARE-300', - 'SPLzSharePartic-z54SHARE-301', - 'zShare-Status-CMM-302', - 'SPLzShare-Status-SPL-303', - 'zShare-Scope Type-CMM-304', - 'SPLzShare-Scope Type-SPL-305', - 'zShare-Local Publish State-CMM-306', - 'SPLzShare-Local Publish State-SPL-307', - 'zShare-Public Permission-CMM-308', - 'SPLzShare-Public Permission-SPL-309', - 'zShare-Originating Scope ID-CMM-310', - 'SPLzShare-Originating Scope ID-SPL-311', - 'zShare-Scope ID-CMM-312', - 'SPLzShare-Scope ID-SPL-313', - 'zShare-Title-CMM-314', - 'SPLzShare-Title-SPL-315', - 'zShare-Share URL-CMM-316', - 'SPLzShare-Share URL-SPL-317', - 'zShare-Creation Date-CMM-318', - 'SPLzShare-Creation Date-SPL-319', - 'zShare-Start Date-CMM-320', - 'SPLzShare-Start Date-SPL-321', - 'zShare-End Date-CMM-322', - 'SPLzShare-End Date-SPL-323', - 'zShare-Expiry Date-CMM-324', - 'SPLzShare-Expiry Date-SPL-325', - 'zShare-Cloud Item Count-CMM-326', - 'SPLzShare-Cloud Item Count-SPL-327', - 'zShare-Asset Count-CMM-328', - 'SPLzShare-Asset Count-SPL-329', - 'zShare-Cloud Photo Count-CMM-330', - 'SPLzShare-Cloud Photo Count-SPL-331', - 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-332', - 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-333', - 'zShare-Photos Count-CMM-334', - 'SPLzShare-Photos Count-CMM-SPL-335', - 'zShare-Uploaded Photos Count-CMM-336', - 'SPLzShare-Uploaded Photos Count-SPL-337', - 'zShare-Cloud Video Count-CMM-338', - 'SPLzShare-Cloud Video Count-SPL-339', - 'zShare-Videos Count-CMM-340', - 'SPLzShare-Videos Count-SPL-341', - 'zShare-Uploaded Videos Count-CMM-342', - 'SPLzShare-Uploaded Videos Count-SPL-343', - 'zShare-Force Sync Attempted-CMM-344', - 'SPLzShare-Force Sync Attempted-SPL-345', - 'zShare-Cloud Local State-CMM-346', - 'SPLzShare-Cloud Local State-SPL-347', - 'zShare-Scope Syncing State-CMM-348', - 'SPLzShare-Scope Syncing State-SPL-349', - 'zShare-Auto Share Policy-CMM-350', - 'SPLzShare-Auto Share Policy-SPL-351', - 'zShare-Should Notify On Upload Completion-CMM-352', - 'SPLzShare-Should Notify On Upload Completion-SPL-353', - 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-354', - 'zShare-Trashed State-CMM-355', - 'SPLzShare-Trashed State-SPL-356', - 'zShare-Cloud Delete State-CMM-357', - 'SPLzShare-Cloud Delete State-SPL-358', - 'zShare-Trashed Date-CMM-359', - 'SPLzShare-Trashed Date-SPL-360', - 'zShare-LastParticipant Asset Trash Notification Date-CMM-361', - 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL-362', - 'zShare-Last Participant Asset Trash Notification View Date-CMM-363', - 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL-364', - 'zShare-Exit Source-CMM-365', - 'SPLzShare-Exit Source-SPL-366', - 'zShare-SPL_Exit State-CMM-367', - 'SPLzShare-SPL_Exit State-SPL-368', - 'zShare-Exit Type-CMM-369', - 'SPLzShare-Exit Type-SPL-370', - 'zShare-Should Ignor Budgets-CMM-371', - 'SPLzShare-Should Ignor Budgets-SPL-372', - 'zShare-Preview State-CMM-373', - 'SPLzShare-Preview State-SPL-374', - 'zShare-Preview Data-CMM-375', - 'SPLzShare-Preview Data-SPL-376', - 'zShare-Rules-CMM-377', - 'SPLzShare-Rules-SPL-378', - 'zShare-Thumbnail Image Data-CMM-379', - 'SPLzShare-Thumbnail Image Data-SPL-380', - 'zShare-Participant Cloud Update State-CMM-381', - 'SPLzShare-Participant Cloud Update State-SPL-382', - 'zSharePartic-UUID-4TableStart-383', - 'SPLzSharePartic-UUID-4TableStart-384', - 'zSharePartic-Acceptance Status-385', - 'SPLzSharePartic-Acceptance Status-386', - 'zSharePartic-Is Current User-387', - 'SPLzSharePartic-Is Current User-388', - 'zSharePartic-Role-389', - 'SPLzSharePartic-Role-390', - 'zSharePartic-Premission-391', - 'SPLzSharePartic-Premission-392', - 'zSharePartic-Participant ID-393', - 'SPLzSharePartic-Participant ID-394', - 'zSharePartic-User ID-395', - 'SPLzSharePartic-User ID-396', - 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-397', - 'SPLzSharePartic-zPK-4TableStart-398', - 'zSharePartic-zPK-4TableStart-399', - 'zSharePartic-Email Address-400', - 'SPLzSharePartic-Email Address-401', - 'zSharePartic-Phone Number-402', - 'SPLzSharePartic-Phone Number-403', - 'zSharePartic-Exit State-404', - 'SPLzSharePartic-Exit State-405', - 'ParentzGenAlbum-UUID-4TableStart-406', - 'zGenAlbum-UUID-4TableStart-407', - 'SWYConverszGenAlbum-UUID-4TableStart-408', - 'ParentzGenAlbum-Cloud GUID-4TableStart-409', - 'zGenAlbum-Cloud GUID-4TableStart-410', - 'SWYConverszGenAlbum-Cloud GUID-4TableStart-411', - 'zCldShareAlbumInvRec-Album GUID-4TableStart-412', - 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-413', - 'zGenAlbum-Project Render UUID-4TableStart-414', - 'SWYConverszGenAlbum-Project Render UUID-4TableStart-415', - 'zAlbumList-Needs Reordering Number-416', - 'zGenAlbum-zENT- Entity-417', - 'ParentzGenAlbum-Kind-418', - 'zGenAlbum-Album Kind-419', - 'SWYConverszGenAlbum-Album Kind-420', - 'ParentzGenAlbum-Cloud-Local-State-421', - 'zGenAlbum-Cloud_Local_State-422', - 'SWYConverszGenAlbum-Cloud_Local_State-423', - 'ParentzGenAlbum- Title-424', - 'zGenAlbum- Title-User&System Applied-425', - 'SWYConverszGenAlbum- Title -User&System Applied-426', - 'zGenAlbum-Import Session ID-SWY-427', - 'zAsset- Conversation= zGenAlbum_zPK-428', - 'SWYConverszGenAlbum- Import Session ID-SWY-429', - 'zGenAlbum-Imported by Bundle Identifier-430', - 'SWYzGenAlbum-Imported by Bundle Identifier-431', - 'SWYConverszGenAlbum- Syndicate-432', - 'ParentzGenAlbum-Creation Date-433', - 'zGenAlbum-Creation Date-434', - 'SWYConverszGenAlbum-Creation Date-435', - 'zGenAlbum-Cloud Creation Date-436', - 'SWYConverszGenAlbum-Cloud Creation Date-437', - 'zGenAlbum-Start Date-438', - 'SWYConverszGenAlbum-Start Date-439', - 'zGenAlbum-End Date-440', - 'SWYConverszGenAlbum-End Date-441', - 'zGenAlbum-Cloud Subscription Date-442', - 'SWYConverszGenAlbum-Cloud Subscription Date-443', - 'ParentzGenAlbum-Pending Items Count-444', - 'zGenAlbum-Pending Items Count-445', - 'SWYConverszGenAlbum-Pending Items Count-446', - 'ParentzGenAlbum-Pending Items Type-447', - 'zGenAlbum-Pending Items Type-448', - 'SWYConverszGenAlbum-Pending Items Type-449', - 'zGenAlbum- Cached Photos Count-450', - 'SWYConverszGenAlbum- Cached Photos Count-451', - 'zGenAlbum- Cached Videos Count-452', - 'SWYConverszGenAlbum- Cached Videos Count-453', - 'zGenAlbum- Cached Count-454', - 'SWYConverszGenAlbum- Cached Count-455', - 'ParentzGenAlbum-Sync Event Order Key-456', - 'zGenAlbum-Sync Event Order Key-457', - 'SWYConverszGenAlbum-Sync Event Order Key-458', - 'zGenAlbum-Has Unseen Content-459', - 'SWYConverszGenAlbum-Has Unseen Content-460', - 'zGenAlbum-Unseen Asset Count-461', - 'SWYConverszGenAlbum-Unseen Asset Count-462', - 'zGenAlbum-is Owned-463', - 'SWYConverszGenAlbum-is Owned-464', - 'zGenAlbum-Cloud Relationship State-465', - 'SWYConverszGenAlbum-Cloud Relationship State-466', - 'zGenAlbum-Cloud Relationship State Local-467', - 'SWYConverszGenAlbum-Cloud Relationship State Local-468', - 'zGenAlbum-Cloud Owner Mail Key-469', - 'SWYConverszGenAlbum-Cloud Owner Mail Key-470', - 'zGenAlbum-Cloud Owner Frist Name-471', - 'SWYConverszGenAlbum-Cloud Owner Frist Name-472', - 'zGenAlbum-Cloud Owner Last Name-473', - 'SWYConverszGenAlbum-Cloud Owner Last Name-474', - 'zGenAlbum-Cloud Owner Full Name-475', - 'SWYConverszGenAlbum-Cloud Owner Full Name-476', - 'zGenAlbum-Cloud Person ID-477', - 'SWYConverszGenAlbum-Cloud Person ID-478', - 'zAsset-Cloud Owner Hashed Person ID-479', - 'zGenAlbum-Cloud Owner Hashed Person ID-480', - 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-481', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-482', - 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-483', - 'zGenAlbum-Cloud Multi-Contributors Enabled-484', - 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-485', - 'zGenAlbum-Cloud Album Sub Type-486', - 'SWYConverszGenAlbum-Cloud Album Sub Type-487', - 'zGenAlbum-Cloud Contribution Date-488', - 'SWYConverszGenAlbum-Cloud Contribution Date-489', - 'zGenAlbum-Cloud Last Interesting Change Date-490', - 'SWYConverszGenAlbum-Cloud Last Interesting Change Date-491', - 'zGenAlbum-Cloud Notification Enabled-492', - 'SWYConverszGenAlbum-Cloud Notification Enabled-493', - 'ParentzGenAlbum-Pinned-494', - 'zGenAlbum-Pinned-495', - 'SWYConverszGenAlbum-Pinned-496', - 'ParentzGenAlbum-Custom Sort Key-497', - 'zGenAlbum-Custom Sort Key-498', - 'SWYConverszGenAlbum-Custom Sort Key-499', - 'ParentzGenAlbum-Custom Sort Ascending-500', - 'zGenAlbum-Custom Sort Ascending-501', - 'SWYConverszGenAlbum-Custom Sort Ascending-502', - 'ParentzGenAlbum-Is Prototype-503', - 'zGenAlbum-Is Prototype-504', - 'SWYConverszGenAlbum-Is Prototype-505', - 'ParentzGenAlbum-Project Document Type-506', - 'zGenAlbum-Project Document Type-507', - 'SWYConverszGenAlbum-Project Document Type-508', - 'ParentzGenAlbum-Custom Query Type-509', - 'zGenAlbum-Custom Query Type-510', - 'SWYConverszGenAlbum-Custom Query Type-511', - 'ParentzGenAlbum-Trashed State-512', - 'ParentzGenAlbum-Trash Date-513', - 'zGenAlbum-Trashed State-514', - 'zGenAlbum-Trash Date-515', - 'SWYConverszGenAlbum-Trashed State-516', - 'SWYConverszGenAlbum-Trash Date-517', - 'ParentzGenAlbum-Cloud Delete State-518', - 'zGenAlbum-Cloud Delete State-519', - 'SWYConverszGenAlbum-Cloud Delete State-520', - 'zGenAlbum-Cloud Owner Whitelisted-521', - 'SWYConverszGenAlbum-Cloud Owner Whitelisted-522', - 'zGenAlbum-Cloud Local Public URL Enabled-523', - 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-524', - 'zGenAlbum-Cloud Public URL Enabled-525', - 'zGenAlbum-Public URL-526', - 'SWYConverszGenAlbum-Cloud Public URL Enabled-527', - 'SWYConverszGenAlbum-Public URL-528', - 'zGenAlbum-Key Asset Face Thumb Index-529', - 'SWYConverszGenAlbum-Key Asset Face Thumb Index-530', - 'zGenAlbum-Project Text Extension ID-531', - 'SWYConverszGenAlbum-Project Text Extension ID-532', - 'zGenAlbum-User Query Data-533', - 'SWYConverszGenAlbum-User Query Data-534', - 'zGenAlbum-Custom Query Parameters-535', - 'SWYConverszGenAlbum-Custom Query Parameters-536', - 'zGenAlbum-Project Data-537', - 'SWYConverszGenAlbum-Project Data-538', - 'zGenAlbum-Search Index Rebuild State-539', - 'SWYConverszGenAlbum-Search Index Rebuild State-540', - 'zGenAlbum-Duplicate Type-541', - 'SWYConverszGenAlbum-Duplicate Type-542', - 'zGenAlbum-Privacy State-543', - 'SWYConverszGenAlbum-Privacy State-544', - 'zCldShareAlbumInvRec-zUUID-4TableStart-545', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-546', - 'zCldShareAlbumInvRec-Invitation State Local-547', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-548', - 'zCldShareAlbumInvRec-Subscription Date-549', - 'zCldShareAlbumInvRec-Invitee First Name-550', - 'zCldShareAlbumInvRec-Invitee Last Name-551', - 'zCldShareAlbumInvRec-Invitee Full Name-552', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-553', - 'zCldShareAlbumInvRec-Invitee Email Key-554', - 'zGenAlbum-Key Asset Face ID-555', - 'zFaceCrop-Face Area Points-556', - 'zAsset-Face Adjustment Version-557', - 'zAddAssetAttr-Face Analysis Version-558', - 'zDetFace-Asset Visible-559', - 'zPerson-Face Count-560', - 'zDetFace-Face Crop-561', - 'zDetFace-Face Algorithm Version-562', - 'zDetFace-Adjustment Version-563', - 'zDetFace-UUID-4TableStart-564', - 'zPerson-Person UUID-4TableStart-565', - 'zPerson - MD ID-566', - 'zPerson - Asset Sort Order-567', - 'zDetFace-Confirmed Face Crop Generation State-568', - 'zDetFace-Manual-569', - 'zDetFace-Detection Type-570', - 'zPerson-Detection Type-571', - 'zDetFace-VIP Model Type-572', - 'zDetFace-Name Source-573', - 'zDetFace-Cloud Name Source-574', - 'zPerson-Merge Candidate Confidence-575', - 'zPerson-Person URI-576', - 'zPerson-Display Name-577', - 'zPerson-Full Name-578', - 'zPerson-Cloud Verified Type-579', - 'zFaceCrop-State-580', - 'zFaceCrop-Type-581', - 'zFaceCrop-UUID-4TableStart-582', - 'zPerson-Type-583', - 'zPerson-Verified Type-584', - 'zPerson-Gender Type-585', - 'zDetFace-Gender Type-586', - 'zDetFace-Center X-587', - 'zDetFace-Center Y-588', - 'zPerson-Age Type Estimate-589', - 'zDetFace-Age Type Estimate-590', - 'zDetFace-Ethnicity Type-591', - 'zDetFace-Skin Tone Type-592', - 'zDetFace-Hair Type-593', - 'zDetFace-Hair Color Type-594', - 'zDetFace-Head Gear Type-595', - 'zDetFace-Facial Hair Type-596', - 'zDetFace-Has Face Mask-597', - 'zDetFace-Pose Type-598', - 'zDetFace-Face Expression Type-599', - 'zDetFace-Has Smile-600', - 'zDetFace-Smile Type-601', - 'zDetFace-Lip Makeup Type-602', - 'zDetFace-Eyes State-603', - 'zDetFace-Is Left Eye Closed-604', - 'zDetFace-Is Right Eye Closed-605', - 'zDetFace-Gaze Center X-606', - 'zDetFace-Gaze Center Y-607', - 'zDetFace-Face Gaze Type-608', - 'zDetFace-Eye Glasses Type-609', - 'zDetFace-Eye Makeup Type-610', - 'zDetFace-Cluster Squence Number Key-611', - 'zDetFace-Grouping ID-612', - 'zDetFace-Master ID-613', - 'zDetFace-Quality-614', - 'zDetFace-Quality Measure-615', - 'zDetFace-Source Height-616', - 'zDetFace-Source Width-617', - 'zDetFace-Hidden-Asset Hidden-618', - 'zDetFace-In Trash-Recently Deleted-619', - 'zDetFace-Cloud Local State-620', - 'zDetFace-Training Type-621', - 'zDetFace.Pose Yaw-622', - 'zDetFace-Body Center X-623', - 'zDetFace-Body Center Y-624', - 'zDetFace-Body Height-625', - 'zDetFace-Body Width-626', - 'zDetFace-Roll-627', - 'zDetFace-Size-628', - 'zDetFace-Cluster Squence Number-629', - 'zDetFace-Blur Score-630', - 'zDetFacePrint-Face Print Version-631', - 'zMedAnlyAstAttr-Face Count-632', - 'zDetFaceGroup-UUID-4TableStart-633', - 'zDetFaceGroup-Person Builder State-634', - 'zDetFaceGroup-UnNamed Face Count-635', - 'zPerson-In Person Naming Model-636', - 'zPerson-Key Face Pick Source Key-637', - 'zPerson-Manual Order Key-638', - 'zPerson-Question Type-639', - 'zPerson-Suggested For Client Type-640', - 'zPerson-Merge Target Person-641', - 'zPerson-Cloud Local State-642', - 'zFaceCrop-Cloud Local State-643', - 'zFaceCrop-Cloud Type-644', - 'zPerson-Cloud Delete State-645', - 'zFaceCrop-Cloud Delete State-646', - 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-647', - 'zAsset-Highlight Visibility Score-648', - 'zMemory-UUID-4TableStart-649', - 'zMemory-AssetListPredicte-650', - 'zMemory-Score-651', - 'zMemory-SubTitle-652', - 'zMemory-Title-653', - 'zMemory-Category-654', - 'zMemory-SubCategory-655', - 'zMemory-Creation Date-656', - 'zMemory-Last Enrichment Date-657', - 'zMemory-User Action Options-658', - 'zMemory-Favorite Memory-659', - 'zMemory-View Count-660', - 'zMemory-Play Count-661', - 'zMemory-Rejected-662', - 'zMemory-Share Count-663', - 'zMemory-Sharing Composition-664', - 'zMemory-Last Movie Play Date-665', - 'zMemory-Last Viewed Date-666', - 'zMemory-Pending Play Count Memory-667', - 'zMemory-Pending Share Count Memory-668', - 'zMemory-Pending View Count Memory-669', - 'zMemory-Pending State-670', - 'zMemory-Featured State-671', - 'zMemory-Photos Graph Version-672', - 'zMemory-Graph Memory Identifier-673', - 'zMemory-Notification State-674', - 'zMemory-Cloud Local State-675', - 'zMemory-Cloud Delete State-676', - 'zMemory-Story Color Grade Kind-677', - 'zMemory-Story Serialized Title Category-678', - 'zMemory-Syndicated Content State-679', - 'zMemory-Search Index Rebuild State-680', - 'zMemory-Black Listed Feature-681', - 'zMoment-UUID-4TableStart-682', - 'zMoment-Aggregation Score-683', - 'zMoment-Start Date-684', - 'zMoment-Representative Date-685', - 'zMoment-Timezone Offset-686', - 'zMoment-Modification Date-687', - 'zMoment-End Date-688', - 'zMoment-SubTitle-689', - 'zMoment-Title-690', - 'zMoment-Originator State-691', - 'zMoment-Sharing Composition-692', - 'zMoment-Cached Count Shared-693', - 'zMoment-Processed Location-694', - 'zMoment-Approx Latitude-695', - 'zMoment-Approx Longitude-696', - 'zMoment-GPS Horizontal Accuracy-697', - 'zMoment-Cache Count-698', - 'zMoment-Cached Photos Count-699', - 'zMoment-Cached Videos Count-700', - 'zMoment-Trashed State-701', - 'SBKAzSugg-UUID-4TableStart-702', - 'SBKAzSugg-Suggestion Context-703', - 'SBKAzSugg-Sharing Composition-704', - 'SBKAzSugg-Start Date-705', - 'SBKAzSugg-State-706', - 'SBKAzSugg-Featured State-707', - 'SBKAzSugg- Available Features-708', - 'SBKAzSugg-Notification State-709', - 'SBKAzSugg-Creation Date-710', - 'SBKAzSugg-End Date-711', - 'SBKAzSugg-Activation Date-712', - 'SBKAzSugg-Expunge Date-713', - 'SBKAzSugg-Relevant Until Date-714', - 'SBKAzSugg-Title-715', - 'SBKAzSugg-Sub Title-716', - 'SBKAzSugg-Cached Count-717', - 'SBKAzSugg-Cahed Photos Count-718', - 'SBKAzSugg-Cached Videos Count-719', - 'SBKAzSugg-Type-720', - 'SBKAzSugg-Sub Type-721', - 'SBKAzSugg-Action Data-722', - 'SBKAzSugg-Version-723', - 'SBKAzSugg-Cloud Local State-724', - 'SBKAzSugg-Cloud Delete State-725', - 'SBRAzSugg-UUID-4TableStart-726', - 'SBRAzSugg-Suggestion Context-727', - 'SBRAzSugg-Sharing Composition-728', - 'SBRAzSugg-Start Date-729', - 'SBRAzSugg-State-730', - 'SBRAzSugg-Featured State-731', - 'SBRAzSugg- Available Features-732', - 'SBRAzSugg-Notification State-733', - 'SBRAzSugg-Creation Date-734', - 'SBRAzSugg-End Date-735', - 'SBRAzSugg-Activation Date-736', - 'SBRAzSugg-Expunge Date-737', - 'SBRAzSugg-Relevant Until Date-738', - 'SBRAzSugg-Title-739', - 'SBRAzSugg-Sub Title-740', - 'SBRAzSugg-Cached Count-741', - 'SBRAzSugg-Cahed Photos Count-742', - 'SBRAzSugg-Cached Videos Count-743', - 'SBRAzSugg-Type-744', - 'SBRAzSugg-Sub Type-745', - 'SBRAzSugg-Action Data-746', - 'SBRAzSugg-Version-747', - 'SBRAzSugg-Cloud Local State-748', - 'SBRAzSugg-Cloud Delete State-749', - 'zMedAnlyAstAttr-Media Analysis Version-750', - 'zMedAnlyAstAttr-Audio Classification-751', - 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-752', - 'zMedAnlyAstAttr-Best Video Range Start Time Scale-753', - 'zMedAnlyAstAttr-Best Video Range Duration Value-754', - 'zMedAnlyAstAttr-Best Video Range Start Value-755', - 'zMedAnlyAstAttr-Packed Best Playback Rect-756', - 'zMedAnlyAstAttr-Activity Score-757', - 'zMedAnlyAstAttr-Video Score-758', - 'zMedAnlyAstAttr-Audio Score-759', - 'zMedAnlyAstAttr-Wallpaper Score-760', - 'zMedAnlyAstAttr-AutoPlay Suggestion Score-761', - 'zMedAnlyAstAttr-Blurriness Score-762', - 'zMedAnlyAstAttr-Exposure Score-763', - 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-764', - 'zMedAnlyAstAttr-Probable Rotation Direction-765', - 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-766', - 'zAssetAnalyState-Asset UUID-4TableStart-767', - 'zAssetAnalyState-Analyisis State-768', - 'zAssetAnalyState-Worker Flags-769', - 'zAssetAnalyState-Worker Type-770', - 'zAssetAnalyState-Ignore Until Date-771', - 'zAssetAnalyState-Last Ignored Date-772', - 'zAssetAnalyState-Sort Token-773', - 'zMedAnlyAstAttr-Character Recognition Attr-774', - 'zCharRecogAttr-Algorithm Version-775', - 'zCharRecogAttr-Adjustment Version-776', - 'zMedAnlyAstAttr-Visual Search Attributes-777', - 'zVisualSearchAttr-Algorithm Version-778', - 'zVisualSearchAttr-Adjustment Version-779', - 'zVisualSearchAttr - Sticker Confidence Algorithm Version-780', - 'zVisualSearchAttr - Sticker Confidence Score-781', - 'zAsset-Sticker Confidence Score-782', - 'zAsset-Overall Aesthetic Score-783', - 'zCompAssetAttr-Behavioral Score-784', - 'zCompAssetAttr-Failure Score zCompAssetAttr-785', - 'zCompAssetAttr-Harmonious Color Score-786', - 'zCompAssetAttr-Immersiveness Score-787', - 'zCompAssetAttr-Interaction Score-788', - 'zCompAssetAttr-Intersting Subject Score-789', - 'zCompAssetAttr-Intrusive Object Presence Score-790', - 'zCompAssetAttr-Lively Color Score-791', - 'zCompAssetAttr-Low Light-792', - 'zCompAssetAttr-Noise Score-793', - 'zCompAssetAttr-Pleasant Camera Tilt Score-794', - 'zCompAssetAttr-Pleasant Composition Score-795', - 'zCompAssetAttr-Pleasant Lighting Score-796', - 'zCompAssetAttr-Pleasant Pattern Score-797', - 'zCompAssetAttr-Pleasant Perspective Score-798', - 'zCompAssetAttr-Pleasant Post Processing Score-799', - 'zCompAssetAttr-Pleasant Reflection Score-800', - 'zCompAssetAttrPleasant Symmetry Score-801', - 'zCompAssetAttr-Sharply Focused Subject Score-802', - 'zCompAssetAttr-Tastfully Blurred Score-803', - 'zCompAssetAttr-Well Chosen Subject Score-804', - 'zCompAssetAttr-Well Framed Subject Score-805', - 'zCompAssetAttr-Well Timeed Shot Score-806', - 'zCldRes-Asset UUID-4TableStart-807', - 'zCldRes-Cloud Local State-808', - 'zCldRes-File Size-809', - 'zCldRes-Height-810', - 'zCldRes-Is Available-811', - 'zCldRes-Is Locally Available-812', - 'zCldRes-Prefetch Count-813', - 'zCldRes-Source Type-814', - 'zCldRes-Type-815', - 'zCldRes-Width-816', - 'zCldRes-Date Created-817', - 'zCldRes-Last OnDemand Download Date-818', - 'zCldRes-Last Prefetch Date-819', - 'zCldRes-Prunedat-820', - 'zCldRes-File Path-821', - 'zCldRes-Fingerprint-822', - 'zCldRes-Item ID-823', - 'zCldRes-UniID-824', - 'zUserFeedback-UUID-4TableStart-825', - 'zUserFeedback-Feature-826', - 'zUserFeedback-Type-827', - 'zUserFeedback-Last Modified Date-828', - 'zUserFeedback-Context-829', - 'zUserFeedback-Cloud Local State-830', - 'zUserFeedback-Cloud Delete State-831', - 'zUserFeedback - Creation Type-832', - 'zAddAssetAttr-zPK-833', - 'zAddAssetAttr-zENT-834', - 'ZAddAssetAttr-zOPT-835', - 'zAddAssetAttr-zAsset= zAsset_zPK-836', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-837', - 'zAddAssetAttr-Master Fingerprint-838', - 'zAddAssetAttr-Public Global UUID-839', - 'zAddAssetAttr-Deferred Photo Identifier-840', - 'zAddAssetAttr-Original Assets UUID-841', - 'zAddAssetAttr-Import Session ID-842', - 'zAddAssetAttr-Originating Asset Identifier-843', - 'zAddAssetAttr.Adjusted Fingerprint-844', - 'zAlbumList-zPK= Album List Key-845', - 'zAlbumList-zENT-846', - 'zAlbumList-zOPT-847', - 'zAlbumList-ID Key-848', - 'zAlbumList-UUID-849', - 'zAsset-zPK-850', - 'zAsset-zENT-851', - 'zAsset-zOPT-852', - 'zAsset-Master= zCldMast-zPK-853', - 'zAsset-Extended Attributes= zExtAttr-zPK-854', - 'zAsset-Import Session Key-855', - 'zAsset-Trashed by Participant= zSharePartic_zPK-856', - 'zAsset-Photo Analysis Attributes Key-857', - 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-858', - 'zAsset-FOK-Cloud Feed Asset Entry Key-859', - 'zAsset-Moment Share Key= zShare-zPK-860', - 'zAsset-zMoment Key= zMoment-zPK-861', - 'zAsset-Computed Attributes Asset Key-862', - 'zAsset-Highlight Being Assets-HBA Key-863', - 'zAsset-Highlight Being Extended Assets-HBEA Key-864', - 'zAsset-Highlight Being Key Asset Private-HBKAP Key-865', - 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-866', - 'zAsset-Highligh Being Summary Assets-HBSA Key-867', - 'zAsset-Day Group Highlight Being Assets-DGHBA Key-868', - 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-869', - 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-870', - 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-871', - 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-872', - 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-873', - 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-874', - 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-875', - 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-876', - 'zAsset-Promotion Score-877', - 'zAsset-Iconic Score-878', - 'zAsset-Media Analysis Attributes Key-879', - 'zAsset-Media Group UUID-880', - 'zAsset-UUID = store.cloudphotodb-881', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-882', - 'zAsset.Cloud Collection GUID-883', - 'zAsset-Avalanche UUID-884', - 'zAssetAnalyState-zPK-885', - 'zAssetAnalyState-zEnt-886', - 'zAssetAnalyState-zOpt-887', - 'zAssetAnalyState-Asset= zAsset-zPK-888', - 'zAssetAnalyState-Asset UUID-889', - 'zAsstContrib-zPK-890', - 'zAsstContrib-zEnt-891', - 'zAsstContrib-zOpt-892', - 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-893', - 'zAsstContrib-Participant= zSharePartic-zPK-894', - 'zAssetDes-zPK-895', - 'zAssetDes-zENT-896', - 'zAssetDes-zOPT-897', - 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-898', - 'zCharRecogAttr-zPK-899', - 'zCharRecogAttr-zENT-900', - 'zCharRecogAttr-zOPT-901', - 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-902', - 'zCldFeedEnt-zPK= zCldShared keys-903', - 'zCldFeedEnt-zENT-904', - 'zCldFeedEnt-zOPT-905', - 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-906', - 'zCldFeedEnt-Entry Invitation Record GUID-907', - 'zCldFeedEnt-Entry Cloud Asset GUID-908', - 'zCldMast-zPK= zAsset-Master-909', - 'zCldMast-zENT-910', - 'zCldMast-zOPT-911', - 'zCldMast-Moment Share Key= zShare-zPK-912', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-913', - 'zCldMast-Originating Asset ID-914', - 'zCldMast-Import Session ID- AirDrop-StillTesting-915', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-916', - 'CMzCldMastMedData-zENT-917', - 'CMzCldMastMedData-zOPT-918', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-919', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-920', - 'AAAzCldMastMedData-zENT-921', - 'AAAzCldMastMedData-zOPT-922', - 'AAAzCldMastMedData-CldMast key-923', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-924', - 'zCldRes-zPK-925', - 'zCldRes-zENT-926', - 'zCldRes-zOPT-927', - 'zCldRes-Asset= zAsset-zPK-928', - 'zCldRes-Cloud Master= zCldMast-zPK-929', - 'zCldRes-Asset UUID-930', - 'zCldShareAlbumInvRec-zPK-931', - 'zCldShareAlbumInvRec-zEnt-932', - 'zCldShareAlbumInvRec-zOpt-933', - 'zCldShareAlbumInvRec-Album Key-934', - 'zCldShareAlbumInvRec-FOK Album Key-935', - 'zCldShareAlbumInvRec-Album GUID-936', - 'zCldShareAlbumInvRec-zUUID-937', - 'zCldShareAlbumInvRec-Cloud GUID-938', - 'zCldSharedComment-zPK-939', - 'zCldSharedComment-zENT-940', - 'zCldSharedComment-zOPT-941', - 'zCldSharedComment-Commented Asset Key= zAsset-zPK-942', - 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-943', - 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-944', - 'zCldSharedComment-Liked Asset Key= zAsset-zPK-945', - 'zCldSharedComment-CldFeedLikeCommentEntry Key-946', - 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-947', - 'zCldSharedComment-Cloud GUID-948', - 'zCompAssetAttr-zPK-949', - 'zCompAssetAttr-zEnt-950', - 'zCompAssetAttr-zOpt-951', - 'zCompAssetAttr-Asset Key-952', - 'zDetFace-zPK-953', - 'zDetFace-zEnt-954', - 'zDetFace.zOpt-955', - 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-956', - 'zDetFace-PersonForFace= zPerson-zPK-957', - 'zDetFace-Person Being Key Face-958', - 'zDetFace-Face Print-959', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-960', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-961', - 'zDetFace-UUID-962', - 'zDetFaceGroup-zPK-963', - 'zDetFaceGroup-zENT-964', - 'zDetFaceGroup-zOPT-965', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-966', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-967', - 'zDetFaceGroup-UUID-968', - 'zDetFacePrint-zPK-969', - 'zDetFacePrint-zEnt-970', - 'zDetFacePrint-zOpt-971', - 'zDetFacePrint-Face Key-972', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-973', - 'zExtAttr-zENT-974', - 'zExtAttr-zOPT-975', - 'zExtAttr-Asset Key-976', - 'zFaceCrop-zPK-977', - 'zFaceCrop-zEnt-978', - 'zFaceCrop-zOpt-979', - 'zFaceCrop-Asset Key-980', - 'zFaceCrop-Invalid Merge Canidate Person UUID-981', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-982', - 'zFaceCrop-Face Key-983', - 'zFaceCrop-UUID-984', - 'zGenAlbum-zPK=26AlbumLists= 26Albums-985', - 'zGenAlbum-zENT-986', - 'zGenAlbum-zOpt-987', - 'zGenAlbum-Key Asset-Key zAsset-zPK-988', - 'zGenAlbum-Secondary Key Asset-989', - 'zGenAlbum-Tertiary Key Asset-990', - 'zGenAlbum-Custom Key Asset-991', - 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-992', - 'zGenAlbum-FOK Parent Folder-993', - 'zGenAlbum-zSyndicate-994', - 'zGenAlbum-UUID-995', - 'SWYConverszGenAlbum-UUID-996', - 'zGenAlbum-Cloud_GUID = store.cloudphotodb-997', - 'SWYConverszGenAlbum-Cloud GUID-998', - 'zGenAlbum-Project Render UUID-999', - 'SWYConverszGenAlbum-Project Render UUID-1000', - 'zIntResou-zPK-1001', - 'zIntResou-zENT-1002', - 'zIntResou-zOPT-1003', - 'zIntResou-Asset= zAsset_zPK-1004', - 'zIntResou-Fingerprint-1005', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-1006', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1007', - 'zMedAnlyAstAttr-zEnt-1008', - 'zMedAnlyAstAttr-zOpt-1009', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-1010', - 'zMemory-zPK-1011', - 'zMemory-zENT-1012', - 'zMemory-zOPT-1013', - 'zMemory-Key Asset= zAsset-zPK-1014', - 'zMemory-UUID-1015', - 'zMoment-zPK-1016', - 'zMoment-zENT-1017', - 'zMoment-zOPT-1018', - 'zMoment-Highlight Key-1019', - 'zMoment-UUID-1020', - 'zPerson-zPK=zDetFace-Person-1021', - 'zPerson-zEnt-1022', - 'zPerson-zOpt-1023', - 'zPerson-Share Participant= zSharePartic-zPK-1024', - 'zPerson-KeyFace=zDetFace-zPK-1025', - 'zPerson-Assoc Face Group Key-1026', - 'zPerson-Person UUID-1027', - 'zPhotoAnalysisAssetAttr-zPK-1028', - 'zPhotoAnalysisAssetAttr-zEnt-1029', - 'zPhotoAnalysisAssetAttr-zOpt-1030', - 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1031', - 'zSceneP-zPK-1032', - 'zSceneP-zENT-1033', - 'zSceneP-zOPT-1034', - 'zShare-zPK-1035', - 'zShare-zENT-1036', - 'zShare-zOPT-1037', - 'zShare-UUID-1038', - 'SPLzShare-UUID-1039', - 'zShare-Scope ID = store.cloudphotodb-1040', - 'zSharePartic-zPK-1041', - 'zSharePartic-zENT-1042', - 'zSharePartic-zOPT-1043', - 'zSharePartic-Share Key= zShare-zPK-1044', - 'zSharePartic-Person= zPerson-zPK-1045', - 'zSharePartic-UUID-1046', - 'SBKAzSugg-zPK-1047', - 'SBKAzSugg-zENT-1048', - 'SBKAzSugg-zOPT-1049', - 'SBKAzSugg-UUID-1050', - 'SBRAzSugg-zPK-1051', - 'SBRAzSugg-zENT-1052', - 'SBRAzSugg-zOPT-1053', - 'SBRAzSugg-UUID-1054', - 'z3SuggBRA-3RepAssets1-1055', - 'z3SuggBRA-58SuggBeingRepAssets-1056', - 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK-1057', - 'z3SuggBKA-3KeyAssets= zAsset-zPK-1058', - 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1059', - 'zUnmAdj-zOPT-1060', - 'zUnmAdj-zENT-1061', - 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1062', - 'zUnmAdj-UUID-1063', - 'zUnmAdj-Other Adjustments Fingerprint-1064', - 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1065', - 'zUserFeedback-zPK-1066', - 'zUserFeedback-zENT-1067', - 'zUserFeedback-zOPT-1068', - 'zUserFeedback-Person= zPerson-zPK-1069', - 'zUserFeedback-Memory= zMemory-zPK-1070', - 'zUserFeedback-UUID-1071', - 'zVisualSearchAttr-zPK-1072', - 'zVisualSearchAttr-zENT-1073', - 'zVisualSearchAttr-zOPT-1074', - 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1075', - 'z27AlbumList-27Albums= zGenAlbum-zPK-1076', - 'z27AlbumList-Album List Key-1077', - 'z27AlbumList-FOK27Albums Key-1078', - 'z28Assets-28Albums= zGenAlbum-zPK-1079', - 'z28Assets-3Asset Key= zAsset-zPK in the Album-1080', - 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1081', - 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1082', - 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1083', - 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK-1084', - 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1085', - 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK-1086', - 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1087', - 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1088', - 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1089', - 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK-1090', - 'z3MemoryBCAs-44Memories Being Custom User Assets-1091', - 'z3MemoryBCAs-3Custom User Assets-1092', - 'z3MemoryBCAs-FOK-3Custom User Assets-1093') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph97.2-iOS17_Ref_for_Asset_Analysis-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], + row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], + row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], + row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], + row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], + row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], + row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], + row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], + row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], + row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], + row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], + row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], + row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], + row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], + row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], + row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], + row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], + row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], + row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], + row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], + row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], + row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], + row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], + row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], + row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], + row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], + row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], + row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], + row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], + row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], + row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], + row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], + row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], + row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], + row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], + row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], + row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], + row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], + row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], + row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], + row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], + row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], + row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], + row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], + row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], + row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], + row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], + row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], + row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], + row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], + row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], + row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], + row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], + row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], + row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], + row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], + row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], + row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], + row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], + row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], + row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], + row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], + row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], + row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], + row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], + row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], + row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], + row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], + row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], + row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], + row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], + row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], + row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], + row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], + row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], + row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], + row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], + row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], + row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], + row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], + row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], + row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], + row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], + row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], + row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], + row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], + row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], + row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], + row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], + row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], + row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], + row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], + row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], + row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], + row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], + row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], + row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], + row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], + row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], + row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], + row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093])) - tlactivity = 'Ph97.2-iOS17_Ref_for_Asset_Analysis-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) + data_headers = (('zAsset-Added Date-0', 'datetime'), + 'zAsset- SortToken -CameraRoll-1', + 'zAsset Complete-2', + 'zAsset-zPK-4QueryStart-3', + 'zAddAssetAttr-zPK-4QueryStart-4', + 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', + 'zAddAssetAttr-Master Fingerprint-4TableStart-6', + 'zIntResou-Fingerprint-4TableStart-7', + 'zAsset-Bundle Scope-8', + 'zAsset-Syndication State-9', + 'zAsset-Cloud is My Asset-10', + 'zAsset-Cloud is deletable-Asset-11', + 'zAsset-Cloud_Local_State-12', + 'zAsset-Visibility State-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zExtAttr-Lens Model-16', + 'zExtAttr-Flash Fired-17', + 'zExtAttr-Focal Lenght-18', + 'zExtAttr-Focal Lenth in 35MM-19', + 'zExtAttr-Digital Zoom Ratio-20', + 'zAsset-Derived Camera Capture Device-21', + 'zAddAssetAttr-Camera Captured Device-22', + 'zAddAssetAttr-Imported by-23', + 'zCldMast-Imported By-24', + 'zAddAssetAttr.Imported by Bundle Identifier-25', + 'zAddAssetAttr-Imported By Display Name-26', + 'zCldMast-Imported by Bundle ID-27', + 'zCldMast-Imported by Display Name-28', + 'zAsset-Saved Asset Type-29', + 'zAsset-Directory-Path-30', + 'zAsset-Filename-31', + 'zAddAssetAttr- Original Filename-32', + 'zCldMast- Original Filename-33', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-34', + 'zAsset-Active Library Scope Participation State -4QueryStart-35', + 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36', + 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-37', + 'SPLzShare-Cloud Video Count-SPL -4QueryStart-38', + ('zAddAssetAttr-Date Created Source-39', 'datetime'), + ('zAsset-Date Created-40', 'datetime'), + ('zCldMast-Creation Date-41', 'datetime'), + ('zIntResou-CldMst Date Created-42', 'datetime'), + 'zAddAssetAttr-Time Zone Name-43', + 'zAddAssetAttr-Time Zone Offset-44', + 'zAddAssetAttr-Inferred Time Zone Offset-45', + 'zAddAssetAttr-EXIF-String-46', + ('zAsset-Modification Date-47', 'datetime'), + ('zAddAssetAttr-Last Viewed Date-48', 'datetime'), + ('zAsset-Last Shared Date-49', 'datetime'), + 'zCldMast-Cloud Local State-50', + ('zCldMast-Import Date-51', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-52', 'datetime'), + 'zAddAssetAttr-Import Session ID-4QueryStart-53', + ('zAddAssetAttr-Alt Import Image Date-54', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-55', + ('zAsset-Cloud Batch Publish Date-56', 'datetime'), + ('zAsset-Cloud Server Publish Date-57', 'datetime'), + 'zAsset-Cloud Download Requests-58', + 'zAsset-Cloud Batch ID-59', + 'zAddAssetAttr-Upload Attempts-60', + 'zAsset-Latitude-61', + 'zExtAttr-Latitude-62', + 'zAsset-Longitude-63', + 'zExtAttr-Longitude-64', + 'zAddAssetAttr-GPS Horizontal Accuracy-65', + 'zAddAssetAttr-Location Hash-66', + 'zAddAssetAttr-Shifted Location Valid-67', + 'zAddAssetAttr-Shifted Location Data-68', + 'zAddAssetAttr-Reverse Location Is Valid-69', + 'zAddAssetAttr-Reverse Location Data-70', + 'ParentzGenAlbum-UUID-4QueryStart-71', + 'zGenAlbum-UUID-4QueryStart-72', + 'SWYConverszGenAlbum-UUID-4QueryStart-73', + 'ParentzGenAlbum-Cloud GUID-4QueryStart-74', + 'zGenAlbum-Cloud GUID-4QueryStart-75', + 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-76', + 'zCldShareAlbumInvRec-Album GUID-4QueryStart-77', + 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-78', + 'zGenAlbum-Project Render UUID-4QueryStart-79', + 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-80', + 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-81', + 'zGenAlbum-Cloud_Local_State-4QueryStart-82', + 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-83', + ('ParentzGenAlbum- Creation Date- 4QueryStart-84', 'datetime'), + ('zGenAlbum- Creation Date- 4QueryStart-85', 'datetime'), + ('SWYConverszGenAlbum- Creation Date- 4QueryStart-86', 'datetime'), + ('zGenAlbum- Cloud Creation Date- 4QueryStart-87', 'datetime'), + ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-88', 'datetime'), + ('zGenAlbum- Start Date- 4QueryStart-89', 'datetime'), + ('SWYConverszGenAlbum- Start Date- 4QueryStart-90', 'datetime'), + ('zGenAlbum- End Date- 4QueryStart-91', 'datetime'), + ('SWYConverszGenAlbum- End Date- 4QueryStart-92', 'datetime'), + ('zGenAlbum-Cloud Subscription Date- 4QueryStart-93', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-94', 'datetime'), + 'ParentzGenAlbum- Title- 4QueryStart-95', + 'zGenAlbum- Title-User&System Applied- 4QueryStart-96', + 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-97', + 'zGenAlbum-Import Session ID-SWY- 4QueryStart-98', + 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-99', + 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-100', + 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-101', + 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-102', + 'SWYConverszGenAlbum- Syndicate-4QueryStart-103', + 'zGenAlbum-zENT- Entity- 4QueryStart-104', + 'ParentzGenAlbum- Kind- 4QueryStart-105', + 'zGenAlbum-Album Kind- 4QueryStart-106', + 'SWYConverszGenAlbum-Album Kind- 4QueryStart-107', + 'AAAzCldMastMedData-zOPT-108', + 'zAddAssetAttr-Media Metadata Type-109', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-110', + 'AAAzCldMastMedData-Data-111', + 'CldMasterzCldMastMedData-zOPT-112', + 'zCldMast-Media Metadata Type-113', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-114', + 'CMzCldMastMedData-Data-115', + 'zAsset-Search Index Rebuild State-116', + 'zAddAssetAttr-Syndication History-117', + 'zMedAnlyAstAttr-Syndication Processing Version-118', + 'zMedAnlyAstAttr-Syndication Processing Value-119', + 'zAsset-Orientation-120', + 'zAddAssetAttr-Original Orientation-121', + 'zAsset-Kind-122', + 'zAsset-Kind-Sub-Type-123', + 'zAddAssetAttr-Cloud Kind Sub Type-124', + 'zAsset-Playback Style-125', + 'zAsset-Playback Variation-126', + 'zAsset-Video Duration-127', + 'zExtAttr-Duration-128', + 'zAsset-Video CP Duration-129', + 'zAddAssetAttr-Video CP Duration Time Scale-130', + 'zAsset-Video CP Visibility State-131', + 'zAddAssetAttr-Video CP Display Value-132', + 'zAddAssetAttr-Video CP Display Time Scale-133', + 'zIntResou-Datastore Class ID-134', + 'zAsset-Cloud Placeholder Kind-135', + 'zIntResou-Local Availability-136', + 'zIntResou-Local Availability Target-137', + 'zIntResou-Cloud Local State-138', + 'zIntResou-Remote Availability-139', + 'zIntResou-Remote Availability Target-140', + 'zIntResou-Transient Cloud Master-141', + 'zIntResou-Side Car Index-142', + 'zIntResou- File ID-143', + 'zIntResou-Version-144', + 'zAddAssetAttr- Original-File-Size-145', + 'zIntResou-Resource Type-146', + 'zIntResou-Datastore Sub-Type-147', + 'zIntResou-Cloud Source Type-148', + 'zIntResou-Data Length-149', + 'zIntResou-Recipe ID-150', + ('zIntResou-Cloud Last Prefetch Date-151', 'datetime'), + 'zIntResou-Cloud Prefetch Count-152', + ('zIntResou- Cloud-Last-OnDemand Download-Date-153', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-154', + 'zIntResou-Compact-UTI-155', + 'zAsset-Uniform Type ID-156', + 'zAsset-Original Color Space-157', + 'zCldMast-Uniform_Type_ID-158', + 'zCldMast-Full Size JPEG Source-159', + 'zAsset-HDR Gain-160', + 'zAsset-zHDR_Type-161', + 'zExtAttr-Codec-162', + 'zIntResou-Codec Four Char Code Name-163', + 'zCldMast-Codec Name-164', + 'zCldMast-Video Frame Rate-165', + 'zCldMast-Placeholder State-166', + 'zAsset-Depth_Type-167', + 'zAsset-Avalanche UUID-4TableStart-168', + 'zAsset-Avalanche_Pick_Type-BurstAsset-169', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-170', + 'zAddAssetAttr-Cloud Recovery State-171', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-172', + 'zAsset-Deferred Processing Needed-173', + 'zAsset-Video Deferred Processing Needed-174', + 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-175', + 'zAddAssetAttr-Deferred Processing Candidate Options-176', + 'zAsset-Has Adjustments-Camera-Effects-Filters-177', + 'zUnmAdj-UUID-4TableStart-178', + ('zAsset-Adjustment Timestamp-179', 'datetime'), + ('zUnmAdj-Adjustment Timestamp-180', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-181', + 'zUnmAdj-Editor Localized Name-182', + 'zUnmAdj-Adjustment Format ID-183', + 'zAddAssetAttr-Montage-184', + 'zUnmAdj-Adjustment Render Types-185', + 'zUnmAdj-Adjustment Format Version-186', + 'zUnmAdj-Adjustment Base Image Format-187', + 'zAsset-Favorite-188', + 'zAsset-Hidden-189', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-190', + ('zAsset-Trashed Date-191', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-192', + 'zAsset-Delete-Reason-193', + 'zIntResou-Trash State-194', + ('zIntResou-Trashed Date-195', 'datetime'), + 'zAsset-Cloud Delete State-196', + 'zIntResou-Cloud Delete State-197', + 'zAddAssetAttr-PTP Trashed State-198', + 'zIntResou-PTP Trashed State-199', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-200', + ('zMedAnlyAstAttr-Media Analysis Timestamp-201', 'datetime'), + ('zAsset-Analysis State Modification Date-202', 'datetime'), + 'zAddAssetAttr- Pending View Count-203', + 'zAddAssetAttr- View Count-204', + 'zAddAssetAttr- Pending Play Count-205', + 'zAddAssetAttr- Play Count-206', + 'zAddAssetAttr- Pending Share Count-207', + 'zAddAssetAttr- Share Count-208', + 'zAddAssetAttr-Allowed for Analysis-209', + 'zAddAssetAttr-Scene Analysis Version-210', + 'zAddAssetAttr-Scene Analysis is From Preview-211', + ('zAddAssetAttr-Scene Analysis Timestamp-212', 'datetime'), + 'zAsset-Duplication Asset Visibility State-213', + 'zAddAssetAttr-Destination Asset Copy State-214', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-215', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-216', + 'zCldMast-Source Master For Duplication Scope ID-217', + 'zAddAssetAttr-Source Asset For Duplication ID-218', + 'zCldMast-Source Master for Duplication ID-219', + 'zAddAssetAttr-Variation Suggestions States-220', + 'zAsset-High Frame Rate State-221', + 'zAsset-Video Key Frame Time Scale-222', + 'zAsset-Video Key Frame Value-223', + 'zExtAttr-ISO-224', + 'zExtAttr-Metering Mode-225', + 'zExtAttr-Sample Rate-226', + 'zExtAttr-Track Format-227', + 'zExtAttr-White Balance-228', + 'zExtAttr-Aperture-229', + 'zExtAttr-BitRate-230', + 'zExtAttr-Exposure Bias-231', + 'zExtAttr-Frames Per Second-232', + 'zExtAttr-Shutter Speed-233', + 'zExtAttr-Slush Scene Bias-234', + 'zExtAttr-Slush Version-235', + 'zExtAttr-Slush Preset-236', + 'zExtAttr-Slush Warm Bias-237', + 'zAsset-Height-238', + 'zAddAssetAttr-Original Height-239', + 'zIntResou-Unoriented Height-240', + 'zAsset-Width-241', + 'zAddAssetAttr-Original Width-242', + 'zIntResou-Unoriented Width-243', + 'zShare-Thumbnail Image Data-244', + 'SPLzShare-Thumbnail Image Data-245', + 'zAsset-Thumbnail Index-246', + 'zAddAssetAttr-Embedded Thumbnail Height-247', + 'zAddAssetAttr-Embedded Thumbnail Length-248', + 'zAddAssetAttr-Embedded Thumbnail Offset-249', + 'zAddAssetAttr-Embedded Thumbnail Width-250', + 'zAsset-Packed Acceptable Crop Rect-251', + 'zAsset-Packed Badge Attributes-252', + 'zAsset-Packed Preferred Crop Rect-253', + 'zAsset-Curation Score-254', + 'zAsset-Camera Processing Adjustment State-255', + 'zAsset-Depth Type-256', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-257', + 'zAddAssetAttr-Orig Resource Choice-258', + 'zAsset-Spatial Type-259', + 'zAddAssetAttr-Spatial Over Capture Group ID-260', + 'zAddAssetAttr-Place Annotation Data-261', + 'zAddAssetAttr-Distance Identity-262', + 'zAddAssetAttr-Edited IPTC Attributes-263', + 'zAssetDes-Long Description-264', + 'zAddAssetAttr-Asset Description-265', + 'zAddAssetAttr-Title-Comments via Cloud Website-266', + 'zAddAssetAttr-Accessibility Description-267', + 'zAddAssetAttr-Photo Stream Tag ID-268', + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-269', + ('zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-270', 'datetime'), + ('zCldFeedEnt-Entry Date-271', 'datetime'), + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-272', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-273', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-274', + 'zCldFeedEnt-Entry Priority Number-275', + 'zCldFeedEnt-Entry Type Number-276', + 'zCldSharedComment-Cloud GUID-4TableStart-277', + ('zCldSharedComment-Date-278', 'datetime'), + ('zCldSharedComment-Comment Client Date-279', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-280', 'datetime'), + 'zCldSharedComment-Type-281', + 'zCldSharedComment-Comment Text-282', + 'zCldSharedComment-Commenter Hashed Person ID-283', + 'zCldSharedComment-Batch Comment-284', + 'zCldSharedComment-Is a Caption-285', + 'zAsset-Cloud Has Comments by Me-286', + 'zCldSharedComment-Is My Comment-287', + 'zCldSharedComment-Is Deletable-288', + 'zAsset-Cloud Has Comments Conversation-289', + 'zAsset-Cloud Has Unseen Comments-290', + 'zCldSharedComment-Liked-291', + 'zAddAssetAttr-Share Type-292', + 'zAsset-Library Scope Share State- StillTesting-293', + 'zAsset-Active Library Scope Participation State-294', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-295', + 'zShare-UUID-CMM-4TableStart-296', + 'SPLzShare-UUID-SPL-4TableStart-297', + 'zShare-zENT-CMM-298', + 'SPLzShare-zENT-SPL-299', + 'zSharePartic-z54SHARE-300', + 'SPLzSharePartic-z54SHARE-301', + 'zShare-Status-CMM-302', + 'SPLzShare-Status-SPL-303', + 'zShare-Scope Type-CMM-304', + 'SPLzShare-Scope Type-SPL-305', + 'zShare-Local Publish State-CMM-306', + 'SPLzShare-Local Publish State-SPL-307', + 'zShare-Public Permission-CMM-308', + 'SPLzShare-Public Permission-SPL-309', + 'zShare-Originating Scope ID-CMM-310', + 'SPLzShare-Originating Scope ID-SPL-311', + 'zShare-Scope ID-CMM-312', + 'SPLzShare-Scope ID-SPL-313', + 'zShare-Title-CMM-314', + 'SPLzShare-Title-SPL-315', + 'zShare-Share URL-CMM-316', + 'SPLzShare-Share URL-SPL-317', + ('zShare-Creation Date-CMM-318', 'datetime'), + ('SPLzShare-Creation Date-SPL-319', 'datetime'), + ('zShare-Start Date-CMM-320', 'datetime'), + ('SPLzShare-Start Date-SPL-321', 'datetime'), + ('zShare-End Date-CMM-322', 'datetime'), + ('SPLzShare-End Date-SPL-323', 'datetime'), + ('zShare-Expiry Date-CMM-324', 'datetime'), + ('SPLzShare-Expiry Date-SPL-325', 'datetime'), + 'zShare-Cloud Item Count-CMM-326', + 'SPLzShare-Cloud Item Count-SPL-327', + 'zShare-Asset Count-CMM-328', + 'SPLzShare-Asset Count-SPL-329', + 'zShare-Cloud Photo Count-CMM-330', + 'SPLzShare-Cloud Photo Count-SPL-331', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-332', + 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-333', + 'zShare-Photos Count-CMM-334', + 'SPLzShare-Photos Count-CMM-SPL-335', + 'zShare-Uploaded Photos Count-CMM-336', + 'SPLzShare-Uploaded Photos Count-SPL-337', + 'zShare-Cloud Video Count-CMM-338', + 'SPLzShare-Cloud Video Count-SPL-339', + 'zShare-Videos Count-CMM-340', + 'SPLzShare-Videos Count-SPL-341', + 'zShare-Uploaded Videos Count-CMM-342', + 'SPLzShare-Uploaded Videos Count-SPL-343', + 'zShare-Force Sync Attempted-CMM-344', + 'SPLzShare-Force Sync Attempted-SPL-345', + 'zShare-Cloud Local State-CMM-346', + 'SPLzShare-Cloud Local State-SPL-347', + 'zShare-Scope Syncing State-CMM-348', + 'SPLzShare-Scope Syncing State-SPL-349', + 'zShare-Auto Share Policy-CMM-350', + 'SPLzShare-Auto Share Policy-SPL-351', + 'zShare-Should Notify On Upload Completion-CMM-352', + 'SPLzShare-Should Notify On Upload Completion-SPL-353', + 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-354', + 'zShare-Trashed State-CMM-355', + 'SPLzShare-Trashed State-SPL-356', + 'zShare-Cloud Delete State-CMM-357', + 'SPLzShare-Cloud Delete State-SPL-358', + ('zShare-Trashed Date-CMM-359', 'datetime'), + ('SPLzShare-Trashed Date-SPL-360', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-CMM-361', 'datetime'), + ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL-362', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-CMM-363', 'datetime'), + ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL-364', 'datetime'), + 'zShare-Exit Source-CMM-365', + 'SPLzShare-Exit Source-SPL-366', + 'zShare-SPL_Exit State-CMM-367', + 'SPLzShare-SPL_Exit State-SPL-368', + 'zShare-Exit Type-CMM-369', + 'SPLzShare-Exit Type-SPL-370', + 'zShare-Should Ignor Budgets-CMM-371', + 'SPLzShare-Should Ignor Budgets-SPL-372', + 'zShare-Preview State-CMM-373', + 'SPLzShare-Preview State-SPL-374', + 'zShare-Preview Data-CMM-375', + 'SPLzShare-Preview Data-SPL-376', + 'zShare-Rules-CMM-377', + 'SPLzShare-Rules-SPL-378', + 'zShare-Thumbnail Image Data-CMM-379', + 'SPLzShare-Thumbnail Image Data-SPL-380', + 'zShare-Participant Cloud Update State-CMM-381', + 'SPLzShare-Participant Cloud Update State-SPL-382', + 'zSharePartic-UUID-4TableStart-383', + 'SPLzSharePartic-UUID-4TableStart-384', + 'zSharePartic-Acceptance Status-385', + 'SPLzSharePartic-Acceptance Status-386', + 'zSharePartic-Is Current User-387', + 'SPLzSharePartic-Is Current User-388', + 'zSharePartic-Role-389', + 'SPLzSharePartic-Role-390', + 'zSharePartic-Premission-391', + 'SPLzSharePartic-Premission-392', + 'zSharePartic-Participant ID-393', + 'SPLzSharePartic-Participant ID-394', + 'zSharePartic-User ID-395', + 'SPLzSharePartic-User ID-396', + 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-397', + 'SPLzSharePartic-zPK-4TableStart-398', + 'zSharePartic-zPK-4TableStart-399', + 'zSharePartic-Email Address-400', + 'SPLzSharePartic-Email Address-401', + 'zSharePartic-Phone Number-402', + 'SPLzSharePartic-Phone Number-403', + 'zSharePartic-Exit State-404', + 'SPLzSharePartic-Exit State-405', + 'ParentzGenAlbum-UUID-4TableStart-406', + 'zGenAlbum-UUID-4TableStart-407', + 'SWYConverszGenAlbum-UUID-4TableStart-408', + 'ParentzGenAlbum-Cloud GUID-4TableStart-409', + 'zGenAlbum-Cloud GUID-4TableStart-410', + 'SWYConverszGenAlbum-Cloud GUID-4TableStart-411', + 'zCldShareAlbumInvRec-Album GUID-4TableStart-412', + 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-413', + 'zGenAlbum-Project Render UUID-4TableStart-414', + 'SWYConverszGenAlbum-Project Render UUID-4TableStart-415', + 'zAlbumList-Needs Reordering Number-416', + 'zGenAlbum-zENT- Entity-417', + 'ParentzGenAlbum-Kind-418', + 'zGenAlbum-Album Kind-419', + 'SWYConverszGenAlbum-Album Kind-420', + 'ParentzGenAlbum-Cloud-Local-State-421', + 'zGenAlbum-Cloud_Local_State-422', + 'SWYConverszGenAlbum-Cloud_Local_State-423', + 'ParentzGenAlbum- Title-424', + 'zGenAlbum- Title-User&System Applied-425', + 'SWYConverszGenAlbum- Title -User&System Applied-426', + 'zGenAlbum-Import Session ID-SWY-427', + 'zAsset- Conversation= zGenAlbum_zPK-428', + 'SWYConverszGenAlbum- Import Session ID-SWY-429', + 'zGenAlbum-Imported by Bundle Identifier-430', + 'SWYzGenAlbum-Imported by Bundle Identifier-431', + 'SWYConverszGenAlbum- Syndicate-432', + ('ParentzGenAlbum-Creation Date-433', 'datetime'), + ('zGenAlbum-Creation Date-434', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-435', 'datetime'), + ('zGenAlbum-Cloud Creation Date-436', 'datetime'), + ('SWYConverszGenAlbum-Cloud Creation Date-437', 'datetime'), + ('zGenAlbum-Start Date-438', 'datetime'), + ('SWYConverszGenAlbum-Start Date-439', 'datetime'), + ('zGenAlbum-End Date-440', 'datetime'), + ('SWYConverszGenAlbum-End Date-441', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-442', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date-443', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-444', + 'zGenAlbum-Pending Items Count-445', + 'SWYConverszGenAlbum-Pending Items Count-446', + 'ParentzGenAlbum-Pending Items Type-447', + 'zGenAlbum-Pending Items Type-448', + 'SWYConverszGenAlbum-Pending Items Type-449', + 'zGenAlbum- Cached Photos Count-450', + 'SWYConverszGenAlbum- Cached Photos Count-451', + 'zGenAlbum- Cached Videos Count-452', + 'SWYConverszGenAlbum- Cached Videos Count-453', + 'zGenAlbum- Cached Count-454', + 'SWYConverszGenAlbum- Cached Count-455', + 'ParentzGenAlbum-Sync Event Order Key-456', + 'zGenAlbum-Sync Event Order Key-457', + 'SWYConverszGenAlbum-Sync Event Order Key-458', + 'zGenAlbum-Has Unseen Content-459', + 'SWYConverszGenAlbum-Has Unseen Content-460', + 'zGenAlbum-Unseen Asset Count-461', + 'SWYConverszGenAlbum-Unseen Asset Count-462', + 'zGenAlbum-is Owned-463', + 'SWYConverszGenAlbum-is Owned-464', + 'zGenAlbum-Cloud Relationship State-465', + 'SWYConverszGenAlbum-Cloud Relationship State-466', + 'zGenAlbum-Cloud Relationship State Local-467', + 'SWYConverszGenAlbum-Cloud Relationship State Local-468', + 'zGenAlbum-Cloud Owner Mail Key-469', + 'SWYConverszGenAlbum-Cloud Owner Mail Key-470', + 'zGenAlbum-Cloud Owner Frist Name-471', + 'SWYConverszGenAlbum-Cloud Owner Frist Name-472', + 'zGenAlbum-Cloud Owner Last Name-473', + 'SWYConverszGenAlbum-Cloud Owner Last Name-474', + 'zGenAlbum-Cloud Owner Full Name-475', + 'SWYConverszGenAlbum-Cloud Owner Full Name-476', + 'zGenAlbum-Cloud Person ID-477', + 'SWYConverszGenAlbum-Cloud Person ID-478', + 'zAsset-Cloud Owner Hashed Person ID-479', + 'zGenAlbum-Cloud Owner Hashed Person ID-480', + 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-481', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-482', + 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-483', + 'zGenAlbum-Cloud Multi-Contributors Enabled-484', + 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-485', + 'zGenAlbum-Cloud Album Sub Type-486', + 'SWYConverszGenAlbum-Cloud Album Sub Type-487', + ('zGenAlbum-Cloud Contribution Date-488', 'datetime'), + ('SWYConverszGenAlbum-Cloud Contribution Date-489', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-490', 'datetime'), + ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-491', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-492', + 'SWYConverszGenAlbum-Cloud Notification Enabled-493', + 'ParentzGenAlbum-Pinned-494', + 'zGenAlbum-Pinned-495', + 'SWYConverszGenAlbum-Pinned-496', + 'ParentzGenAlbum-Custom Sort Key-497', + 'zGenAlbum-Custom Sort Key-498', + 'SWYConverszGenAlbum-Custom Sort Key-499', + 'ParentzGenAlbum-Custom Sort Ascending-500', + 'zGenAlbum-Custom Sort Ascending-501', + 'SWYConverszGenAlbum-Custom Sort Ascending-502', + 'ParentzGenAlbum-Is Prototype-503', + 'zGenAlbum-Is Prototype-504', + 'SWYConverszGenAlbum-Is Prototype-505', + 'ParentzGenAlbum-Project Document Type-506', + 'zGenAlbum-Project Document Type-507', + 'SWYConverszGenAlbum-Project Document Type-508', + 'ParentzGenAlbum-Custom Query Type-509', + 'zGenAlbum-Custom Query Type-510', + 'SWYConverszGenAlbum-Custom Query Type-511', + 'ParentzGenAlbum-Trashed State-512', + ('ParentzGenAlbum-Trash Date-513', 'datetime'), + 'zGenAlbum-Trashed State-514', + ('zGenAlbum-Trash Date-515', 'datetime'), + 'SWYConverszGenAlbum-Trashed State-516', + ('SWYConverszGenAlbum-Trash Date-517', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-518', + 'zGenAlbum-Cloud Delete State-519', + 'SWYConverszGenAlbum-Cloud Delete State-520', + 'zGenAlbum-Cloud Owner Whitelisted-521', + 'SWYConverszGenAlbum-Cloud Owner Whitelisted-522', + 'zGenAlbum-Cloud Local Public URL Enabled-523', + 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-524', + 'zGenAlbum-Cloud Public URL Enabled-525', + 'zGenAlbum-Public URL-526', + 'SWYConverszGenAlbum-Cloud Public URL Enabled-527', + 'SWYConverszGenAlbum-Public URL-528', + 'zGenAlbum-Key Asset Face Thumb Index-529', + 'SWYConverszGenAlbum-Key Asset Face Thumb Index-530', + 'zGenAlbum-Project Text Extension ID-531', + 'SWYConverszGenAlbum-Project Text Extension ID-532', + 'zGenAlbum-User Query Data-533', + 'SWYConverszGenAlbum-User Query Data-534', + 'zGenAlbum-Custom Query Parameters-535', + 'SWYConverszGenAlbum-Custom Query Parameters-536', + 'zGenAlbum-Project Data-537', + 'SWYConverszGenAlbum-Project Data-538', + 'zGenAlbum-Search Index Rebuild State-539', + 'SWYConverszGenAlbum-Search Index Rebuild State-540', + 'zGenAlbum-Duplicate Type-541', + 'SWYConverszGenAlbum-Duplicate Type-542', + 'zGenAlbum-Privacy State-543', + 'SWYConverszGenAlbum-Privacy State-544', + 'zCldShareAlbumInvRec-zUUID-4TableStart-545', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-546', + 'zCldShareAlbumInvRec-Invitation State Local-547', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-548', + ('zCldShareAlbumInvRec-Subscription Date-549', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-550', + 'zCldShareAlbumInvRec-Invitee Last Name-551', + 'zCldShareAlbumInvRec-Invitee Full Name-552', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-553', + 'zCldShareAlbumInvRec-Invitee Email Key-554', + 'zGenAlbum-Key Asset Face ID-555', + 'zFaceCrop-Face Area Points-556', + 'zAsset-Face Adjustment Version-557', + 'zAddAssetAttr-Face Analysis Version-558', + 'zDetFace-Asset Visible-559', + 'zPerson-Face Count-560', + 'zDetFace-Face Crop-561', + 'zDetFace-Face Algorithm Version-562', + 'zDetFace-Adjustment Version-563', + 'zDetFace-UUID-4TableStart-564', + 'zPerson-Person UUID-4TableStart-565', + 'zPerson - MD ID-566', + 'zPerson - Asset Sort Order-567', + 'zDetFace-Confirmed Face Crop Generation State-568', + 'zDetFace-Manual-569', + 'zDetFace-Detection Type-570', + 'zPerson-Detection Type-571', + 'zDetFace-VIP Model Type-572', + 'zDetFace-Name Source-573', + 'zDetFace-Cloud Name Source-574', + 'zPerson-Merge Candidate Confidence-575', + 'zPerson-Person URI-576', + 'zPerson-Display Name-577', + 'zPerson-Full Name-578', + 'zPerson-Cloud Verified Type-579', + 'zFaceCrop-State-580', + 'zFaceCrop-Type-581', + 'zFaceCrop-UUID-4TableStart-582', + 'zPerson-Type-583', + 'zPerson-Verified Type-584', + 'zPerson-Gender Type-585', + 'zDetFace-Gender Type-586', + 'zDetFace-Center X-587', + 'zDetFace-Center Y-588', + 'zPerson-Age Type Estimate-589', + 'zDetFace-Age Type Estimate-590', + 'zDetFace-Ethnicity Type-591', + 'zDetFace-Skin Tone Type-592', + 'zDetFace-Hair Type-593', + 'zDetFace-Hair Color Type-594', + 'zDetFace-Head Gear Type-595', + 'zDetFace-Facial Hair Type-596', + 'zDetFace-Has Face Mask-597', + 'zDetFace-Pose Type-598', + 'zDetFace-Face Expression Type-599', + 'zDetFace-Has Smile-600', + 'zDetFace-Smile Type-601', + 'zDetFace-Lip Makeup Type-602', + 'zDetFace-Eyes State-603', + 'zDetFace-Is Left Eye Closed-604', + 'zDetFace-Is Right Eye Closed-605', + 'zDetFace-Gaze Center X-606', + 'zDetFace-Gaze Center Y-607', + 'zDetFace-Face Gaze Type-608', + 'zDetFace-Eye Glasses Type-609', + 'zDetFace-Eye Makeup Type-610', + 'zDetFace-Cluster Squence Number Key-611', + 'zDetFace-Grouping ID-612', + 'zDetFace-Master ID-613', + 'zDetFace-Quality-614', + 'zDetFace-Quality Measure-615', + 'zDetFace-Source Height-616', + 'zDetFace-Source Width-617', + 'zDetFace-Hidden-Asset Hidden-618', + 'zDetFace-In Trash-Recently Deleted-619', + 'zDetFace-Cloud Local State-620', + 'zDetFace-Training Type-621', + 'zDetFace.Pose Yaw-622', + 'zDetFace-Body Center X-623', + 'zDetFace-Body Center Y-624', + 'zDetFace-Body Height-625', + 'zDetFace-Body Width-626', + 'zDetFace-Roll-627', + 'zDetFace-Size-628', + 'zDetFace-Cluster Squence Number-629', + 'zDetFace-Blur Score-630', + 'zDetFacePrint-Face Print Version-631', + 'zMedAnlyAstAttr-Face Count-632', + 'zDetFaceGroup-UUID-4TableStart-633', + 'zDetFaceGroup-Person Builder State-634', + 'zDetFaceGroup-UnNamed Face Count-635', + 'zPerson-In Person Naming Model-636', + 'zPerson-Key Face Pick Source Key-637', + 'zPerson-Manual Order Key-638', + 'zPerson-Question Type-639', + 'zPerson-Suggested For Client Type-640', + 'zPerson-Merge Target Person-641', + 'zPerson-Cloud Local State-642', + 'zFaceCrop-Cloud Local State-643', + 'zFaceCrop-Cloud Type-644', + 'zPerson-Cloud Delete State-645', + 'zFaceCrop-Cloud Delete State-646', + 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-647', + 'zAsset-Highlight Visibility Score-648', + 'zMemory-UUID-4TableStart-649', + 'zMemory-AssetListPredicte-650', + 'zMemory-Score-651', + 'zMemory-SubTitle-652', + 'zMemory-Title-653', + 'zMemory-Category-654', + 'zMemory-SubCategory-655', + ('zMemory-Creation Date-656', 'datetime'), + ('zMemory-Last Enrichment Date-657', 'datetime'), + 'zMemory-User Action Options-658', + 'zMemory-Favorite Memory-659', + 'zMemory-View Count-660', + 'zMemory-Play Count-661', + 'zMemory-Rejected-662', + 'zMemory-Share Count-663', + 'zMemory-Sharing Composition-664', + ('zMemory-Last Movie Play Date-665', 'datetime'), + ('zMemory-Last Viewed Date-666', 'datetime'), + 'zMemory-Pending Play Count Memory-667', + 'zMemory-Pending Share Count Memory-668', + 'zMemory-Pending View Count Memory-669', + 'zMemory-Pending State-670', + 'zMemory-Featured State-671', + 'zMemory-Photos Graph Version-672', + 'zMemory-Graph Memory Identifier-673', + 'zMemory-Notification State-674', + 'zMemory-Cloud Local State-675', + 'zMemory-Cloud Delete State-676', + 'zMemory-Story Color Grade Kind-677', + 'zMemory-Story Serialized Title Category-678', + 'zMemory-Syndicated Content State-679', + 'zMemory-Search Index Rebuild State-680', + 'zMemory-Black Listed Feature-681', + 'zMoment-UUID-4TableStart-682', + 'zMoment-Aggregation Score-683', + ('zMoment-Start Date-684', 'datetime'), + ('zMoment-Representative Date-685', 'datetime'), + 'zMoment-Timezone Offset-686', + ('zMoment-Modification Date-687', 'datetime'), + ('zMoment-End Date-688', 'datetime'), + 'zMoment-SubTitle-689', + 'zMoment-Title-690', + 'zMoment-Originator State-691', + 'zMoment-Sharing Composition-692', + 'zMoment-Cached Count Shared-693', + 'zMoment-Processed Location-694', + 'zMoment-Approx Latitude-695', + 'zMoment-Approx Longitude-696', + 'zMoment-GPS Horizontal Accuracy-697', + 'zMoment-Cache Count-698', + 'zMoment-Cached Photos Count-699', + 'zMoment-Cached Videos Count-700', + 'zMoment-Trashed State-701', + 'SBKAzSugg-UUID-4TableStart-702', + 'SBKAzSugg-Suggestion Context-703', + 'SBKAzSugg-Sharing Composition-704', + ('SBKAzSugg-Start Date-705', 'datetime'), + 'SBKAzSugg-State-706', + 'SBKAzSugg-Featured State-707', + 'SBKAzSugg- Available Features-708', + 'SBKAzSugg-Notification State-709', + ('SBKAzSugg-Creation Date-710', 'datetime'), + ('SBKAzSugg-End Date-711', 'datetime'), + ('SBKAzSugg-Activation Date-712', 'datetime'), + ('SBKAzSugg-Expunge Date-713', 'datetime'), + ('SBKAzSugg-Relevant Until Date-714', 'datetime'), + 'SBKAzSugg-Title-715', + 'SBKAzSugg-Sub Title-716', + 'SBKAzSugg-Cached Count-717', + 'SBKAzSugg-Cahed Photos Count-718', + 'SBKAzSugg-Cached Videos Count-719', + 'SBKAzSugg-Type-720', + 'SBKAzSugg-Sub Type-721', + 'SBKAzSugg-Action Data-722', + 'SBKAzSugg-Version-723', + 'SBKAzSugg-Cloud Local State-724', + 'SBKAzSugg-Cloud Delete State-725', + 'SBRAzSugg-UUID-4TableStart-726', + 'SBRAzSugg-Suggestion Context-727', + 'SBRAzSugg-Sharing Composition-728', + ('SBRAzSugg-Start Date-729', 'datetime'), + 'SBRAzSugg-State-730', + 'SBRAzSugg-Featured State-731', + 'SBRAzSugg- Available Features-732', + 'SBRAzSugg-Notification State-733', + ('SBRAzSugg-Creation Date-734', 'datetime'), + ('SBRAzSugg-End Date-735', 'datetime'), + ('SBRAzSugg-Activation Date-736', 'datetime'), + ('SBRAzSugg-Expunge Date-737', 'datetime'), + ('SBRAzSugg-Relevant Until Date-738', 'datetime'), + 'SBRAzSugg-Title-739', + 'SBRAzSugg-Sub Title-740', + 'SBRAzSugg-Cached Count-741', + 'SBRAzSugg-Cahed Photos Count-742', + 'SBRAzSugg-Cached Videos Count-743', + 'SBRAzSugg-Type-744', + 'SBRAzSugg-Sub Type-745', + 'SBRAzSugg-Action Data-746', + 'SBRAzSugg-Version-747', + 'SBRAzSugg-Cloud Local State-748', + 'SBRAzSugg-Cloud Delete State-749', + 'zMedAnlyAstAttr-Media Analysis Version-750', + 'zMedAnlyAstAttr-Audio Classification-751', + 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-752', + 'zMedAnlyAstAttr-Best Video Range Start Time Scale-753', + 'zMedAnlyAstAttr-Best Video Range Duration Value-754', + 'zMedAnlyAstAttr-Best Video Range Start Value-755', + 'zMedAnlyAstAttr-Packed Best Playback Rect-756', + 'zMedAnlyAstAttr-Activity Score-757', + 'zMedAnlyAstAttr-Video Score-758', + 'zMedAnlyAstAttr-Audio Score-759', + 'zMedAnlyAstAttr-Wallpaper Score-760', + 'zMedAnlyAstAttr-AutoPlay Suggestion Score-761', + 'zMedAnlyAstAttr-Blurriness Score-762', + 'zMedAnlyAstAttr-Exposure Score-763', + 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-764', + 'zMedAnlyAstAttr-Probable Rotation Direction-765', + 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-766', + 'zAssetAnalyState-Asset UUID-4TableStart-767', + 'zAssetAnalyState-Analyisis State-768', + 'zAssetAnalyState-Worker Flags-769', + 'zAssetAnalyState-Worker Type-770', + ('zAssetAnalyState-Ignore Until Date-771', 'datetime'), + ('zAssetAnalyState-Last Ignored Date-772', 'datetime'), + ('zAssetAnalyState-Sort Token-773', 'datetime'), + 'zMedAnlyAstAttr-Character Recognition Attr-774', + 'zCharRecogAttr-Algorithm Version-775', + 'zCharRecogAttr-Adjustment Version-776', + 'zMedAnlyAstAttr-Visual Search Attributes-777', + 'zVisualSearchAttr-Algorithm Version-778', + 'zVisualSearchAttr-Adjustment Version-779', + 'zVisualSearchAttr - Sticker Confidence Algorithm Version-780', + 'zVisualSearchAttr - Sticker Confidence Score-781', + 'zAsset-Sticker Confidence Score-782', + 'zAsset-Overall Aesthetic Score-783', + 'zCompAssetAttr-Behavioral Score-784', + 'zCompAssetAttr-Failure Score zCompAssetAttr-785', + 'zCompAssetAttr-Harmonious Color Score-786', + 'zCompAssetAttr-Immersiveness Score-787', + 'zCompAssetAttr-Interaction Score-788', + 'zCompAssetAttr-Intersting Subject Score-789', + 'zCompAssetAttr-Intrusive Object Presence Score-790', + 'zCompAssetAttr-Lively Color Score-791', + 'zCompAssetAttr-Low Light-792', + 'zCompAssetAttr-Noise Score-793', + 'zCompAssetAttr-Pleasant Camera Tilt Score-794', + 'zCompAssetAttr-Pleasant Composition Score-795', + 'zCompAssetAttr-Pleasant Lighting Score-796', + 'zCompAssetAttr-Pleasant Pattern Score-797', + 'zCompAssetAttr-Pleasant Perspective Score-798', + 'zCompAssetAttr-Pleasant Post Processing Score-799', + 'zCompAssetAttr-Pleasant Reflection Score-800', + 'zCompAssetAttrPleasant Symmetry Score-801', + 'zCompAssetAttr-Sharply Focused Subject Score-802', + 'zCompAssetAttr-Tastfully Blurred Score-803', + 'zCompAssetAttr-Well Chosen Subject Score-804', + 'zCompAssetAttr-Well Framed Subject Score-805', + 'zCompAssetAttr-Well Timeed Shot Score-806', + 'zCldRes-Asset UUID-4TableStart-807', + 'zCldRes-Cloud Local State-808', + 'zCldRes-File Size-809', + 'zCldRes-Height-810', + 'zCldRes-Is Available-811', + 'zCldRes-Is Locally Available-812', + 'zCldRes-Prefetch Count-813', + 'zCldRes-Source Type-814', + 'zCldRes-Type-815', + 'zCldRes-Width-816', + ('zCldRes-Date Created-817', 'datetime'), + ('zCldRes-Last OnDemand Download Date-818', 'datetime'), + ('zCldRes-Last Prefetch Date-819', 'datetime'), + 'zCldRes-Prunedat-820', + 'zCldRes-File Path-821', + 'zCldRes-Fingerprint-822', + 'zCldRes-Item ID-823', + 'zCldRes-UniID-824', + 'zUserFeedback-UUID-4TableStart-825', + 'zUserFeedback-Feature-826', + 'zUserFeedback-Type-827', + ('zUserFeedback-Last Modified Date-828', 'datetime'), + 'zUserFeedback-Context-829', + 'zUserFeedback-Cloud Local State-830', + 'zUserFeedback-Cloud Delete State-831', + 'zUserFeedback - Creation Type-832', + 'zAddAssetAttr-zPK-833', + 'zAddAssetAttr-zENT-834', + 'ZAddAssetAttr-zOPT-835', + 'zAddAssetAttr-zAsset= zAsset_zPK-836', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-837', + 'zAddAssetAttr-Master Fingerprint-838', + 'zAddAssetAttr-Public Global UUID-839', + 'zAddAssetAttr-Deferred Photo Identifier-840', + 'zAddAssetAttr-Original Assets UUID-841', + 'zAddAssetAttr-Import Session ID-842', + 'zAddAssetAttr-Originating Asset Identifier-843', + 'zAddAssetAttr.Adjusted Fingerprint-844', + 'zAlbumList-zPK= Album List Key-845', + 'zAlbumList-zENT-846', + 'zAlbumList-zOPT-847', + 'zAlbumList-ID Key-848', + 'zAlbumList-UUID-849', + 'zAsset-zPK-850', + 'zAsset-zENT-851', + 'zAsset-zOPT-852', + 'zAsset-Master= zCldMast-zPK-853', + 'zAsset-Extended Attributes= zExtAttr-zPK-854', + 'zAsset-Import Session Key-855', + 'zAsset-Trashed by Participant= zSharePartic_zPK-856', + 'zAsset-Photo Analysis Attributes Key-857', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-858', + 'zAsset-FOK-Cloud Feed Asset Entry Key-859', + 'zAsset-Moment Share Key= zShare-zPK-860', + 'zAsset-zMoment Key= zMoment-zPK-861', + 'zAsset-Computed Attributes Asset Key-862', + 'zAsset-Highlight Being Assets-HBA Key-863', + 'zAsset-Highlight Being Extended Assets-HBEA Key-864', + 'zAsset-Highlight Being Key Asset Private-HBKAP Key-865', + 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-866', + 'zAsset-Highligh Being Summary Assets-HBSA Key-867', + 'zAsset-Day Group Highlight Being Assets-DGHBA Key-868', + 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-869', + 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-870', + 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-871', + 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-872', + 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-873', + 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-874', + 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-875', + 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-876', + 'zAsset-Promotion Score-877', + 'zAsset-Iconic Score-878', + 'zAsset-Media Analysis Attributes Key-879', + 'zAsset-Media Group UUID-880', + 'zAsset-UUID = store.cloudphotodb-881', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-882', + 'zAsset.Cloud Collection GUID-883', + 'zAsset-Avalanche UUID-884', + 'zAssetAnalyState-zPK-885', + 'zAssetAnalyState-zEnt-886', + 'zAssetAnalyState-zOpt-887', + 'zAssetAnalyState-Asset= zAsset-zPK-888', + 'zAssetAnalyState-Asset UUID-889', + 'zAsstContrib-zPK-890', + 'zAsstContrib-zEnt-891', + 'zAsstContrib-zOpt-892', + 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-893', + 'zAsstContrib-Participant= zSharePartic-zPK-894', + 'zAssetDes-zPK-895', + 'zAssetDes-zENT-896', + 'zAssetDes-zOPT-897', + 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-898', + 'zCharRecogAttr-zPK-899', + 'zCharRecogAttr-zENT-900', + 'zCharRecogAttr-zOPT-901', + 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-902', + 'zCldFeedEnt-zPK= zCldShared keys-903', + 'zCldFeedEnt-zENT-904', + 'zCldFeedEnt-zOPT-905', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-906', + 'zCldFeedEnt-Entry Invitation Record GUID-907', + 'zCldFeedEnt-Entry Cloud Asset GUID-908', + 'zCldMast-zPK= zAsset-Master-909', + 'zCldMast-zENT-910', + 'zCldMast-zOPT-911', + 'zCldMast-Moment Share Key= zShare-zPK-912', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-913', + 'zCldMast-Originating Asset ID-914', + 'zCldMast-Import Session ID- AirDrop-StillTesting-915', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-916', + 'CMzCldMastMedData-zENT-917', + 'CMzCldMastMedData-zOPT-918', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-919', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-920', + 'AAAzCldMastMedData-zENT-921', + 'AAAzCldMastMedData-zOPT-922', + 'AAAzCldMastMedData-CldMast key-923', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-924', + 'zCldRes-zPK-925', + 'zCldRes-zENT-926', + 'zCldRes-zOPT-927', + 'zCldRes-Asset= zAsset-zPK-928', + 'zCldRes-Cloud Master= zCldMast-zPK-929', + 'zCldRes-Asset UUID-930', + 'zCldShareAlbumInvRec-zPK-931', + 'zCldShareAlbumInvRec-zEnt-932', + 'zCldShareAlbumInvRec-zOpt-933', + 'zCldShareAlbumInvRec-Album Key-934', + 'zCldShareAlbumInvRec-FOK Album Key-935', + 'zCldShareAlbumInvRec-Album GUID-936', + 'zCldShareAlbumInvRec-zUUID-937', + 'zCldShareAlbumInvRec-Cloud GUID-938', + 'zCldSharedComment-zPK-939', + 'zCldSharedComment-zENT-940', + 'zCldSharedComment-zOPT-941', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-942', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-943', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-944', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-945', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-946', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-947', + 'zCldSharedComment-Cloud GUID-948', + 'zCompAssetAttr-zPK-949', + 'zCompAssetAttr-zEnt-950', + 'zCompAssetAttr-zOpt-951', + 'zCompAssetAttr-Asset Key-952', + 'zDetFace-zPK-953', + 'zDetFace-zEnt-954', + 'zDetFace.zOpt-955', + 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-956', + 'zDetFace-PersonForFace= zPerson-zPK-957', + 'zDetFace-Person Being Key Face-958', + 'zDetFace-Face Print-959', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-960', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-961', + 'zDetFace-UUID-962', + 'zDetFaceGroup-zPK-963', + 'zDetFaceGroup-zENT-964', + 'zDetFaceGroup-zOPT-965', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-966', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-967', + 'zDetFaceGroup-UUID-968', + 'zDetFacePrint-zPK-969', + 'zDetFacePrint-zEnt-970', + 'zDetFacePrint-zOpt-971', + 'zDetFacePrint-Face Key-972', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-973', + 'zExtAttr-zENT-974', + 'zExtAttr-zOPT-975', + 'zExtAttr-Asset Key-976', + 'zFaceCrop-zPK-977', + 'zFaceCrop-zEnt-978', + 'zFaceCrop-zOpt-979', + 'zFaceCrop-Asset Key-980', + 'zFaceCrop-Invalid Merge Canidate Person UUID-981', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-982', + 'zFaceCrop-Face Key-983', + 'zFaceCrop-UUID-984', + 'zGenAlbum-zPK=26AlbumLists= 26Albums-985', + 'zGenAlbum-zENT-986', + 'zGenAlbum-zOpt-987', + 'zGenAlbum-Key Asset-Key zAsset-zPK-988', + 'zGenAlbum-Secondary Key Asset-989', + 'zGenAlbum-Tertiary Key Asset-990', + 'zGenAlbum-Custom Key Asset-991', + 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-992', + 'zGenAlbum-FOK Parent Folder-993', + 'zGenAlbum-zSyndicate-994', + 'zGenAlbum-UUID-995', + 'SWYConverszGenAlbum-UUID-996', + 'zGenAlbum-Cloud_GUID = store.cloudphotodb-997', + 'SWYConverszGenAlbum-Cloud GUID-998', + 'zGenAlbum-Project Render UUID-999', + 'SWYConverszGenAlbum-Project Render UUID-1000', + 'zIntResou-zPK-1001', + 'zIntResou-zENT-1002', + 'zIntResou-zOPT-1003', + 'zIntResou-Asset= zAsset_zPK-1004', + 'zIntResou-Fingerprint-1005', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-1006', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1007', + 'zMedAnlyAstAttr-zEnt-1008', + 'zMedAnlyAstAttr-zOpt-1009', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-1010', + 'zMemory-zPK-1011', + 'zMemory-zENT-1012', + 'zMemory-zOPT-1013', + 'zMemory-Key Asset= zAsset-zPK-1014', + 'zMemory-UUID-1015', + 'zMoment-zPK-1016', + 'zMoment-zENT-1017', + 'zMoment-zOPT-1018', + 'zMoment-Highlight Key-1019', + 'zMoment-UUID-1020', + 'zPerson-zPK=zDetFace-Person-1021', + 'zPerson-zEnt-1022', + 'zPerson-zOpt-1023', + 'zPerson-Share Participant= zSharePartic-zPK-1024', + 'zPerson-KeyFace=zDetFace-zPK-1025', + 'zPerson-Assoc Face Group Key-1026', + 'zPerson-Person UUID-1027', + 'zPhotoAnalysisAssetAttr-zPK-1028', + 'zPhotoAnalysisAssetAttr-zEnt-1029', + 'zPhotoAnalysisAssetAttr-zOpt-1030', + 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1031', + 'zSceneP-zPK-1032', + 'zSceneP-zENT-1033', + 'zSceneP-zOPT-1034', + 'zShare-zPK-1035', + 'zShare-zENT-1036', + 'zShare-zOPT-1037', + 'zShare-UUID-1038', + 'SPLzShare-UUID-1039', + 'zShare-Scope ID = store.cloudphotodb-1040', + 'zSharePartic-zPK-1041', + 'zSharePartic-zENT-1042', + 'zSharePartic-zOPT-1043', + 'zSharePartic-Share Key= zShare-zPK-1044', + 'zSharePartic-Person= zPerson-zPK-1045', + 'zSharePartic-UUID-1046', + 'SBKAzSugg-zPK-1047', + 'SBKAzSugg-zENT-1048', + 'SBKAzSugg-zOPT-1049', + 'SBKAzSugg-UUID-1050', + 'SBRAzSugg-zPK-1051', + 'SBRAzSugg-zENT-1052', + 'SBRAzSugg-zOPT-1053', + 'SBRAzSugg-UUID-1054', + 'z3SuggBRA-3RepAssets1-1055', + 'z3SuggBRA-59SuggBeingRepAssets-1056', + 'z3SuggBKA-59SuggBeingKeyAssets= zSugg-zPK-1057', + 'z3SuggBKA-3KeyAssets= zAsset-zPK-1058', + 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1059', + 'zUnmAdj-zOPT-1060', + 'zUnmAdj-zENT-1061', + 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1062', + 'zUnmAdj-UUID-1063', + 'zUnmAdj-Other Adjustments Fingerprint-1064', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1065', + 'zUserFeedback-zPK-1066', + 'zUserFeedback-zENT-1067', + 'zUserFeedback-zOPT-1068', + 'zUserFeedback-Person= zPerson-zPK-1069', + 'zUserFeedback-Memory= zMemory-zPK-1070', + 'zUserFeedback-UUID-1071', + 'zVisualSearchAttr-zPK-1072', + 'zVisualSearchAttr-zENT-1073', + 'zVisualSearchAttr-zOPT-1074', + 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1075', + 'z28AlbumList-28Albums= zGenAlbum-zPK-1076', + 'z28AlbumList-Album List Key-1077', + 'z28AlbumList-FOK28Albums Key-1078', + 'z29Assets-29Albums= zGenAlbum-zPK-1079', + 'z29Assets-3Asset Key= zAsset-zPK in the Album-1080', + 'z29Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1081', + 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1082', + 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1083', + 'z3MemoryBCAs-45MemoriesBeingCuratedAssets= zMemory-zPK-1084', + 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1085', + 'z3MemoryBECAs-45MemoriesBeingExtCuratedAssets= zMemory-zPK-1086', + 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1087', + 'z3MemoryBRAs-45RepresentativeAssets= zMemory-zPK-1088', + 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1089', + 'z3MemoryBUCAs-45MemoriesBeingUserCuratedAssets= zMemory-zPK-1090', + 'z3MemoryBCAs-45Memories Being Custom User Assets-1091', + 'z3MemoryBCAs-3Custom User Assets-1092', + 'z3MemoryBCAs-FOK-3Custom User Assets-1093') + data_list = get_sqlite_db_records(source_path, query) - else: - logfunc('No data available for iOS 17 Syndication.photoslibrary-database-Photos.sqlite') + return data_headers, data_list, source_path - db.close() - return +@artifact_processor +def Ph97_2iOS17RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) + if source_path.endswith('.sqlite'): + break + if report_folder.endswith('/') or report_folder.endswith('\\'): + report_folder = report_folder[:-1] + iosversion = scripts.artifacts.artGlobals.versionf + if (version.parse(iosversion) <= version.parse("16.7.7")) or (version.parse(iosversion) >= version.parse("18")): + logfunc("Unsupported version for Syndication.photoslibrary for iOS " + iosversion) + return (), [], source_path + if (version.parse(iosversion) >= version.parse("17")) & (version.parse(iosversion) < version.parse("17.6")): + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] -__artifacts_v2__ = { - 'Ph97-1-iOS17_Ref_for_Asset_Analysis-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite 97.1 iOS17 Reference for Asset Analysis', - 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' - ' set of decoded data based on testing and research conducted by Scott Koenig' - ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' - ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' - ' to view, search and filter the results.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-04-19', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph97ios17refforassetanalysisphdapsql' - }, - 'Ph97-2-iOS17_Ref_for_Asset_Analysis-SyndPL': { - 'name': 'SyndPL Photos.sqlite 97.2 iOS17 Reference for Asset Analysis', - 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' - ' This parser includes the largest set of decoded data based on testing and research' - ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' - ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' - ' TimelineExplorer to view, search and filter the results.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-04-19', - 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', - 'notes': '', - 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*', - 'function': 'get_ph97ios17refforassetanalysissyndpl' - } -} + query = ''' + SELECT + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + CASE zAsset.ZCOMPLETE + WHEN 1 THEN '1-Yes-1' + END AS 'zAsset Complete', + zAsset.Z_PK AS 'zAsset-zPK-4QueryStart', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK-4QueryStart', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4QueryStart', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint-4TableStart', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4TableStart', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZCLOUDISMYASSET + WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0' + WHEN 1 THEN '1-My_Asset_in_Shared_Album-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || '' + END AS 'zAsset-Cloud is My Asset', + CASE zAsset.ZCLOUDISDELETABLE + WHEN 0 THEN '0-No-0' + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || '' + END AS 'zAsset-Cloud is deletable-Asset', + CASE zAsset.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0' + WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || '' + END AS 'zAsset-Cloud_Local_State', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', + CASE zExtAttr.ZFLASHFIRED + WHEN 0 THEN '0-No Flash-0' + WHEN 1 THEN '1-Flash Fired-1' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || '' + END AS 'zExtAttr-Flash Fired', + zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Lenght', + zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Lenth in 35MM', + zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', + CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' + END AS 'zAsset-Derived Camera Capture Device', + CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' + END AS 'zAddAssetAttr-Camera Captured Device', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + CASE zCldMast.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' + END AS 'zCldMast-Imported By', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', + zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', + zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State -4QueryStart', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting -4QueryStart', + SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL -4QueryStart', + SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL -4QueryStart', + CASE zAddAssetAttr.ZDATECREATEDSOURCE + WHEN 0 THEN '0-Cloud-Asset-0' + WHEN 1 THEN '1-Local_Asset_EXIF-1' + WHEN 3 THEN '3-Local_Asset_No_EXIF-3' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' + END AS 'zAddAssetAttr-Date Created Source', + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', + zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + CASE zCldMast.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-Not Synced with Cloud-0' + WHEN 1 THEN '1-Pending Upload-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-Synced with Cloud-3' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' + END AS 'zCldMast-Cloud Local State', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID-4QueryStart', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', + zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', + zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', + zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts', + CASE zAsset.ZLATITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLATITUDE + END AS 'zAsset-Latitude', + zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', + CASE zAsset.ZLONGITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLONGITUDE + END AS 'zAsset-Longitude', + zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', + CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY + END AS 'zAddAssetAttr-GPS Horizontal Accuracy', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID + WHEN 0 THEN '0-Shifted Location Not Valid-0' + WHEN 1 THEN '1-Shifted Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' + END AS 'zAddAssetAttr-Shifted Location Valid', + CASE + WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Shifted Location Data', + CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID + WHEN 0 THEN '0-Reverse Location Not Valid-0' + WHEN 1 THEN '1-Reverse Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' + END AS 'zAddAssetAttr-Reverse Location Is Valid', + CASE + WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Reverse Location Data', + ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID-4QueryStart', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID-4QueryStart', + SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID-4QueryStart', + ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID-4QueryStart', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4QueryStart', + SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID-4QueryStart', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID-4QueryStart', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID-4QueryStart', + SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID-4QueryStart', + CASE ParentzGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'ParentzGenAlbum-Cloud-Local-State-4QueryStart', + CASE zGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'zGenAlbum-Cloud_Local_State-4QueryStart', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart', + DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum- Creation Date- 4QueryStart', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Creation Date- 4QueryStart', + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Creation Date- 4QueryStart', + DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Cloud Creation Date- 4QueryStart', + DateTime(SWYConverszGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Start Date- 4QueryStart', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Start Date- 4QueryStart', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- End Date- 4QueryStart', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- End Date- 4QueryStart', + DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date- 4QueryStart', + DateTime(SWYConverszGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart', + ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title- 4QueryStart', + zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied- 4QueryStart', + SWYConverszGenAlbum.ZTITLE AS 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum-Import Session ID-SWY- 4QueryStart', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate-4QueryStart', + CASE zGenAlbum.Z_ENT + WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27' + WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28' + WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29' + WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30' + WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || '' + END AS 'zGenAlbum-zENT- Entity- 4QueryStart', + CASE ParentzGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || '' + END AS 'ParentzGenAlbum- Kind- 4QueryStart', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind- 4QueryStart', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind- 4QueryStart', + CASE AAAzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Cloud-1' + WHEN 2 THEN '2-StillTesting-This Device-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' + END AS 'AAAzCldMastMedData-zOPT', + zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', + zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', + CASE + WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' + ELSE 'AAAzCldMastMedData-Data_Empty-NULL' + END AS 'AAAzCldMastMedData-Data', + CASE CMzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' + WHEN 2 THEN '2-StillTesting-Local_Asset-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' + END AS 'CldMasterzCldMastMedData-zOPT', + zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', + zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData-zPK', + CASE + WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' + ELSE 'CMzCldMastMedData-Data_Empty-NULL' + END AS 'CMzCldMastMedData-Data', + CASE zAsset.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zAsset-Search Index Rebuild State', + zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History', + zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version', + CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1' + WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2' + WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4' + WHEN 16 THEN '16-STILLTESTING-16' + WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024' + WHEN 2048 THEN '2048-STILLTESTING-2048' + WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096' + ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || '' + END AS 'zMedAnlyAstAttr-Syndication Processing Value', + CASE zAsset.ZORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAsset-Orientation', + CASE zAddAssetAttr.ZORIGINALORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAddAssetAttr-Original Orientation', + CASE zAsset.ZKIND + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + END AS 'zAsset-Kind', + CASE zAsset.ZKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-Panorama-1' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' + END AS 'zAsset-Kind-Sub-Type', + CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 3 THEN '3-Screenshot-3' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' + END AS 'zAddAssetAttr-Cloud Kind Sub Type', + CASE zAsset.ZPLAYBACKSTYLE + WHEN 1 THEN '1-Image-1' + WHEN 2 THEN '2-Image-Animated-2' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 4 THEN '4-Video-4' + WHEN 5 THEN '5-Video-Looping-5' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' + END AS 'zAsset-Playback Style', + CASE zAsset.ZPLAYBACKVARIATION + WHEN 0 THEN '0-No_Playback_Variation-0' + WHEN 1 THEN '1-StillTesting_Playback_Variation-1' + WHEN 2 THEN '2-StillTesting_Playback_Variation-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' + END AS 'zAsset-Playback Variation', + zAsset.ZDURATION AS 'zAsset-Video Duration', + zExtAttr.ZDURATION AS 'zExtAttr-Duration', + zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration', + zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale', + zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State', + zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value', + zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale', + CASE zIntResou.ZDATASTORECLASSID + WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2' + WHEN 3 THEN '3-SWY_Syndication_Asset-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || '' + END AS 'zIntResou-Datastore Class ID', + CASE zAsset.ZCLOUDPLACEHOLDERKIND + WHEN 0 THEN '0-Local&CloudMaster Asset-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-JPG-Asset_Only_PhDa-Thumb-V2-3' + WHEN 4 THEN '4-LPL-JPG-Asset_CPLAsset-OtherType-4' + WHEN 5 THEN '5-Asset_synced_CPL_2_Device-5' + WHEN 6 THEN '6-StillTesting-6' + WHEN 7 THEN '7-LPL-poster-JPG-Asset_CPLAsset-MP4-7' + WHEN 8 THEN '8-LPL-JPG_Asset_CPLAsset-LivePhoto-MOV-8' + WHEN 9 THEN '9-CPL_MP4_Asset_Saved_2_LPL-9' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDPLACEHOLDERKIND || '' + END AS 'zAsset-Cloud Placeholder Kind', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability', + CASE zIntResou.ZLOCALAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || '' + END AS 'zIntResou-Local Availability Target', + CASE zIntResou.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0' + WHEN 1 THEN '1-IR_Asset_Pending-Upload-1' + WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2' + WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || '' + END AS 'zIntResou-Cloud Local State', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability', + CASE zIntResou.ZREMOTEAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || '' + END AS 'zIntResou-Remote Availability Target', + zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master', + zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index', + zIntResou.ZFILEID AS 'zIntResou- File ID', + CASE zIntResou.ZVERSION + WHEN 0 THEN '0-IR_Asset_Standard-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2' + WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || '' + END AS 'zIntResou-Version', + zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type', + CASE zIntResou.ZCLOUDSOURCETYPE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || '' + END AS 'zIntResou-Cloud Source Type', + zIntResou.ZDATALENGTH AS 'zIntResou-Data Length', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID', + CASE zIntResou.ZCLOUDLASTPREFETCHDATE + WHEN 0 THEN '0-NA-0' + ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH') + END AS 'zIntResou-Cloud Last Prefetch Date', + zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count', + DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date', + CASE zIntResou.ZUTICONFORMANCEHINT + WHEN 0 THEN '0-NA-Doesnt_Conform-0' + WHEN 1 THEN '1-UTTypeImage-1' + WHEN 2 THEN '2-UTTypeProRawPhoto-2' + WHEN 3 THEN '3-UTTypeMovie-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || '' + END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint', + CASE zIntResou.ZCOMPACTUTI + WHEN 1 THEN '1-JPEG-THM-1' + WHEN 3 THEN '3-HEIC-3' + WHEN 6 THEN '6-PNG-6' + WHEN 7 THEN '7-StillTesting' + WHEN 9 THEN '9-DNG-9' + WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23' + WHEN 24 THEN '24-MPEG4-24' + WHEN 36 THEN '36-Wallpaper-36' + WHEN 37 THEN '37-Adj-Mutation_Data-37' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || '' + END AS 'zIntResou-Compact-UTI', + zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID', + zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space', + zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID', + CASE zCldMast.ZFULLSIZEJPEGSOURCE + WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0' + WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || '' + END AS 'zCldMast-Full Size JPEG Source', + zAsset.ZHDRGAIN AS 'zAsset-HDR Gain', + CASE zAsset.ZHDRTYPE + WHEN 0 THEN '0-No-HDR-0' + WHEN 3 THEN '3-HDR_Photo-3_RT' + WHEN 4 THEN '4-Non-HDR_Version-4_RT' + WHEN 5 THEN '5-HEVC_Movie-5' + WHEN 6 THEN '6-Panorama-6_RT' + WHEN 10 THEN '10-HDR-Gain-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || '' + END AS 'zAsset-zHDR_Type', + zExtAttr.ZCODEC AS 'zExtAttr-Codec', + zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name', + zCldMast.ZCODECNAME AS 'zCldMast-Codec Name', + zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate', + zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State', + CASE zAsset.ZDEPTHTYPE + WHEN 0 THEN '0-Not_Portrait-0_RT' + ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || '' + END AS 'zAsset-Depth_Type', + zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID-4TableStart', + CASE zAsset.ZAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || '' + END AS 'zAsset-Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || '' + END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || '' + END AS 'zAddAssetAttr-Cloud Recovery State', + zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count', + zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed', + zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed', + zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart', + zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', + CASE zAsset.ZHASADJUSTMENTS + WHEN 0 THEN '0-No-Adjustments-0' + WHEN 1 THEN '1-Yes-Adjustments-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || '' + END AS 'zAsset-Has Adjustments-Camera-Effects-Filters', + zUnmAdj.ZUUID AS 'zUnmAdj-UUID-4TableStart', + DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', + DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp', + zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', + zUnmAdj.ZEDITORLOCALIZEDNAME AS 'zUnmAdj-Editor Localized Name', + zUnmAdj.ZADJUSTMENTFORMATIDENTIFIER AS 'zUnmAdj-Adjustment Format ID', + zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage', + CASE zUnmAdj.ZADJUSTMENTRENDERTYPES + WHEN 0 THEN '0-Standard or Portrait with erros-0' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-Portrait-2' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTRENDERTYPES || '' + END AS 'zUnmAdj-Adjustment Render Types', + CASE zUnmAdj.ZADJUSTMENTFORMATVERSION + WHEN 1.0 THEN '1.0-Markup-1.0' + WHEN 1.1 THEN '1.1-Slow-Mo-1.1' + WHEN 1.2 THEN '1.2-StillTesting' + WHEN 1.3 THEN '1.3-StillTesting' + WHEN 1.4 THEN '1.4-Filter-1.4' + WHEN 1.5 THEN '1.5-Adjust-1.5' + WHEN 1.6 THEN '1.6-Video-Trim-1.6' + WHEN 1.7 THEN '1.7-StillTesting' + WHEN 1.8 THEN '1.8-StillTesting' + WHEN 1.9 THEN '1.9-StillTesting' + WHEN 2.0 THEN '2.0-ScreenshotServices-2.0' + ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTFORMATVERSION || '' + END AS 'zUnmAdj-Adjustment Format Version', + zUnmAdj.ZADJUSTMENTBASEIMAGEFORMAT AS 'zUnmAdj-Adjustment Base Image Format', + CASE zAsset.ZFAVORITE + WHEN 0 THEN '0-Asset Not Favorite-0' + WHEN 1 THEN '1-Asset Favorite-1' + END AS 'zAsset-Favorite', + CASE zAsset.ZHIDDEN + WHEN 0 THEN '0-Asset Not Hidden-0' + WHEN 1 THEN '1-Asset Hidden-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || '' + END AS 'zAsset-Hidden', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart', + CASE zAsset.ZDELETEREASON + WHEN 1 THEN '1-StillTesting Delete-Reason-1' + WHEN 2 THEN '2-StillTesting Delete-Reason-2' + WHEN 3 THEN '3-StillTesting Delete-Reason-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || '' + END AS 'zAsset-Delete-Reason', + CASE zIntResou.ZTRASHEDSTATE + WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || '' + END AS 'zIntResou-Trash State', + DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date', + CASE zAsset.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud Asset Not Deleted-0' + WHEN 1 THEN '1-Cloud Asset Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || '' + END AS 'zAsset-Cloud Delete State', + CASE zIntResou.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud IntResou Not Deleted-0' + WHEN 1 THEN '1-Cloud IntResou Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || '' + END AS 'zIntResou-Cloud Delete State', + CASE zAddAssetAttr.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP Not in Trash-0' + WHEN 1 THEN '1-PTP In Trash-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || '' + END AS 'zAddAssetAttr-PTP Trashed State', + CASE zIntResou.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP IntResou Not in Trash-0' + WHEN 1 THEN '1-PTP IntResou In Trash-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || '' + END AS 'zIntResou-PTP Trashed State', + zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart', + DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count', + zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count', + CASE zAddAssetAttr.ZALLOWEDFORANALYSIS + WHEN 0 THEN '0-Asset Not Allowed For Analysis-0' + WHEN 1 THEN '1-Asset Allowed for Analysis-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || '' + END AS 'zAddAssetAttr-Allowed for Analysis', + zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version', + CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW + WHEN 0 THEN '0-No-0' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || '' + END AS 'zAddAssetAttr-Scene Analysis is From Preview', + DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', + CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE + WHEN 0 THEN '0-No-Duplicates-0' + WHEN 1 THEN '1-Has Duplicate-1' + WHEN 2 THEN '2-Is a Duplicate-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || '' + END AS 'zAsset-Duplication Asset Visibility State', + CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE + WHEN 0 THEN '0-No Copy-0' + WHEN 1 THEN '1-Has A Copy-1' + WHEN 2 THEN '2-Has A Copy-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || '' + END AS 'zAddAssetAttr-Destination Asset Copy State', + CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE + WHEN 0 THEN '0-Unknown-StillTesting-0' + WHEN 1 THEN '1-Unknown-StillTesting-1' + WHEN 2 THEN '2-Unknown-StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || '' + END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID', + zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States', + zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State', + zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale', + zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value', + zExtAttr.ZISO AS 'zExtAttr-ISO', + zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode', + zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate', + zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format', + zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance', + zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture', + zExtAttr.ZBITRATE AS 'zExtAttr-BitRate', + zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias', + zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second', + zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed', + zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias', + zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version', + zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset', + zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias', + zAsset.ZHEIGHT AS 'zAsset-Height', + zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height', + zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height', + zAsset.ZWIDTH AS 'zAsset-Width', + zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width', + zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width', + zShare.ZTHUMBNAILIMAGEDATA AS 'zShare-Thumbnail Image Data', + SPLzShare.ZTHUMBNAILIMAGEDATA AS 'SPLzShare-Thumbnail Image Data', + zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', + zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', + zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', + zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', + zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score', + zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State', + zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type', + zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-QuicktimeMOVfile', + CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE + WHEN 0 THEN '0-JPEG Original Resource-0' + WHEN 1 THEN '1-RAW Original Resource-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || '' + END AS 'zAddAssetAttr-Orig Resource Choice', + CASE zAsset.ZSPATIALTYPE + WHEN 0 THEN '0-UnknownTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || '' + END AS 'zAsset-Spatial Type', + zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID', + zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', + zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity', + zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes', + zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description', + zAddAssetAttr.ZASSETDESCRIPTION AS 'zAddAssetAttr-Asset Description', + zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', + zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', + zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID', + zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESVERSION AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version', + DateTime(zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp', + DateTime(zCldFeedEnt.ZENTRYDATE + 978307200, 'UNIXEPOCH') AS 'zCldFeedEnt-Entry Date', + zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart', + zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart', + zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart', + CASE zCldFeedEnt.ZENTRYPRIORITYNUMBER + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYPRIORITYNUMBER || '' + END AS 'zCldFeedEnt-Entry Priority Number', + CASE zCldFeedEnt.ZENTRYTYPENUMBER + WHEN 1 THEN 'Is My Shared Asset-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-StillTesting-3' + WHEN 4 THEN 'Not My Shared Asset-4' + WHEN 5 THEN 'Asset in Album with Invite Record-5' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYTYPENUMBER || '' + END AS 'zCldFeedEnt-Entry Type Number', + zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID-4TableStart', + DateTime(zCldSharedComment.ZCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Date', + DateTime(zCldSharedComment.ZCOMMENTCLIENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Comment Client Date', + DateTime(zAsset.ZCLOUDLASTVIEWEDCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Last Viewed Comment Date', + zCldSharedComment.ZCOMMENTTYPE AS 'zCldSharedComment-Type', + zCldSharedComment.ZCOMMENTTEXT AS 'zCldSharedComment-Comment Text', + zCldSharedComment.ZCOMMENTERHASHEDPERSONID AS 'zCldSharedComment-Commenter Hashed Person ID', + CASE zCldSharedComment.ZISBATCHCOMMENT + WHEN 0 THEN 'Not Batch Comment-0' + WHEN 1 THEN 'Batch Comment-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISBATCHCOMMENT || '' + END AS 'zCldSharedComment-Batch Comment', + CASE zCldSharedComment.ZISCAPTION + WHEN 0 THEN 'Not a Caption-0' + WHEN 1 THEN 'Caption-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISCAPTION || '' + END AS 'zCldSharedComment-Is a Caption', + CASE zAsset.ZCLOUDHASCOMMENTSBYME + WHEN 1 THEN 'Device Apple Acnt Commented-Liked Asset-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSBYME || '' + END AS 'zAsset-Cloud Has Comments by Me', + CASE zCldSharedComment.ZISMYCOMMENT + WHEN 0 THEN 'Not My Comment-0' + WHEN 1 THEN 'My Comment-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISMYCOMMENT || '' + END AS 'zCldSharedComment-Is My Comment', + CASE zCldSharedComment.ZISDELETABLE + WHEN 0 THEN 'Not Deletable-0' + WHEN 1 THEN 'Deletable-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISDELETABLE || '' + END AS 'zCldSharedComment-Is Deletable', + CASE zAsset.ZCLOUDHASCOMMENTSCONVERSATION + WHEN 1 THEN 'Device Apple Acnt Commented-Liked Conversation-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSCONVERSATION || '' + END AS 'zAsset-Cloud Has Comments Conversation', + CASE zAsset.ZCLOUDHASUNSEENCOMMENTS + WHEN 0 THEN 'zAsset No Unseen Comments-0' + WHEN 1 THEN 'zAsset Unseen Comments-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASUNSEENCOMMENTS || '' + END AS 'zAsset-Cloud Has Unseen Comments', + CASE zCldSharedCommentLiked.ZISLIKE + WHEN 0 THEN 'Asset Not Liked-0' + WHEN 1 THEN 'Asset Liked-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedCommentLiked.ZISLIKE || '' + END AS 'zCldSharedComment-Liked', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update', + zShare.ZUUID AS 'zShare-UUID-CMM-4TableStart', + SPLzShare.ZUUID AS 'SPLzShare-UUID-SPL-4TableStart', + CASE zShare.Z_ENT + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' + WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' + END AS 'zShare-zENT-CMM', + CASE SPLzShare.Z_ENT + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' + WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + ELSE 'Unknown-New-Value!: ' || SPLzShare.Z_ENT || '' + END AS 'SPLzShare-zENT-SPL', + CASE zSharePartic.Z54_SHARE + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' + WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z54_SHARE || '' + END AS 'zSharePartic-z54SHARE', + CASE SPLzSharePartic.Z54_SHARE + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' + WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z54_SHARE || '' + END AS 'SPLzSharePartic-z54SHARE', + CASE zShare.ZSTATUS + WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || '' + END AS 'zShare-Status-CMM', + CASE SPLzShare.ZSTATUS + WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSTATUS || '' + END AS 'SPLzShare-Status-SPL', + CASE zShare.ZSCOPETYPE + WHEN 2 THEN '2-iCloudLink-CMMoment-2' + WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || '' + END AS 'zShare-Scope Type-CMM', + CASE SPLzShare.ZSCOPETYPE + WHEN 2 THEN '2-iCloudLink-CMMoment-2' + WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSCOPETYPE || '' + END AS 'SPLzShare-Scope Type-SPL', + CASE zShare.ZLOCALPUBLISHSTATE + WHEN 2 THEN '2-Published-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZLOCALPUBLISHSTATE || '' + END AS 'zShare-Local Publish State-CMM', + CASE SPLzShare.ZLOCALPUBLISHSTATE + WHEN 2 THEN '2-Published-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZLOCALPUBLISHSTATE || '' + END AS 'SPLzShare-Local Publish State-SPL', + CASE zShare.ZPUBLICPERMISSION + WHEN 1 THEN '1-Public_Premission_Denied-Private-1' + WHEN 2 THEN '2-Public_Premission_Granted-Public-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPUBLICPERMISSION || '' + END AS 'zShare-Public Permission-CMM', + CASE SPLzShare.ZPUBLICPERMISSION + WHEN 1 THEN '1-Public_Premission_Denied-Private-1' + WHEN 2 THEN '2-Public_Premission_Granted-Public-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPUBLICPERMISSION || '' + END AS 'SPLzShare-Public Permission-SPL', + zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID-CMM', + SPLzShare.ZORIGINATINGSCOPEIDENTIFIER AS 'SPLzShare-Originating Scope ID-SPL', + zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID-CMM', + SPLzShare.ZSCOPEIDENTIFIER AS 'SPLzShare-Scope ID-SPL', + zShare.ZTITLE AS 'zShare-Title-CMM', + SPLzShare.ZTITLE AS 'SPLzShare-Title-SPL', + zShare.ZSHAREURL AS 'zShare-Share URL-CMM', + SPLzShare.ZSHAREURL AS 'SPLzShare-Share URL-SPL', + DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date-CMM', + DateTime(SPLzShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Creation Date-SPL', + DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date-CMM', + DateTime(SPLzShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Start Date-SPL', + DateTime(zShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-End Date-CMM', + DateTime(SPLzShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-End Date-SPL', + DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date-CMM', + DateTime(SPLzShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Expiry Date-SPL', + zShare.ZCLOUDITEMCOUNT AS 'zShare-Cloud Item Count-CMM', + SPLzShare.ZCLOUDITEMCOUNT AS 'SPLzShare-Cloud Item Count-SPL', + zShare.ZASSETCOUNT AS 'zShare-Asset Count-CMM', + SPLzShare.ZASSETCOUNT AS 'SPLzShare-Asset Count-SPL', + zShare.ZCLOUDPHOTOCOUNT AS 'zShare-Cloud Photo Count-CMM', + SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL', + zShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM', + SPLzShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL', + zShare.ZPHOTOSCOUNT AS 'zShare-Photos Count-CMM', + SPLzShare.ZPHOTOSCOUNT AS 'SPLzShare-Photos Count-CMM-SPL', + zShare.ZUPLOADEDPHOTOSCOUNT AS 'zShare-Uploaded Photos Count-CMM', + SPLzShare.ZUPLOADEDPHOTOSCOUNT AS 'SPLzShare-Uploaded Photos Count-SPL', + zShare.ZCLOUDVIDEOCOUNT AS 'zShare-Cloud Video Count-CMM', + SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL', + zShare.ZVIDEOSCOUNT AS 'zShare-Videos Count-CMM', + SPLzShare.ZVIDEOSCOUNT AS 'SPLzShare-Videos Count-SPL', + zShare.ZUPLOADEDVIDEOSCOUNT AS 'zShare-Uploaded Videos Count-CMM', + SPLzShare.ZUPLOADEDVIDEOSCOUNT AS 'SPLzShare-Uploaded Videos Count-SPL', + zShare.ZFORCESYNCATTEMPTED AS 'zShare-Force Sync Attempted-CMM', + SPLzShare.ZFORCESYNCATTEMPTED AS 'SPLzShare-Force Sync Attempted-SPL', + CASE zShare.ZCLOUDLOCALSTATE + WHEN 1 THEN '1-LocalandCloud-SPL-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDLOCALSTATE || '' + END AS 'zShare-Cloud Local State-CMM', + CASE SPLzShare.ZCLOUDLOCALSTATE + WHEN 1 THEN '1-LocalandCloud-SPL-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCLOUDLOCALSTATE || '' + END AS 'SPLzShare-Cloud Local State-SPL', + CASE zShare.ZSCOPESYNCINGSTATE + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE || '' + END AS 'zShare-Scope Syncing State-CMM', + CASE SPLzShare.ZSCOPESYNCINGSTATE + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSCOPESYNCINGSTATE || '' + END AS 'SPLzShare-Scope Syncing State-SPL', + CASE zShare.ZAUTOSHAREPOLICY + WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZAUTOSHAREPOLICY || '' + END AS 'zShare-Auto Share Policy-CMM', + CASE SPLzShare.ZAUTOSHAREPOLICY + WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZAUTOSHAREPOLICY || '' + END AS 'SPLzShare-Auto Share Policy-SPL', + CASE zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION + WHEN 0 THEN '0-DoNotNotify-CMM-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || '' + END AS 'zShare-Should Notify On Upload Completion-CMM', + CASE SPLzShare.ZSHOULDNOTIFYONUPLOADCOMPLETION + WHEN 0 THEN '0-DoNotNotify-SPL-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || '' + END AS 'SPLzShare-Should Notify On Upload Completion-SPL', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM', + CASE zShare.ZTRASHEDSTATE + WHEN 0 THEN '0-Not_in_Trash-0' + WHEN 1 THEN '1-In_Trash-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZTRASHEDSTATE || '' + END AS 'zShare-Trashed State-CMM', + CASE SPLzShare.ZTRASHEDSTATE + WHEN 0 THEN '0-Not_in_Trash-0' + WHEN 1 THEN '1-In_Trash-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZTRASHEDSTATE || '' + END AS 'SPLzShare-Trashed State-SPL', + CASE zShare.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Not Deleted-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDDELETESTATE || '' + END AS 'zShare-Cloud Delete State-CMM', + CASE SPLzShare.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Not Deleted-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCLOUDDELETESTATE || '' + END AS 'SPLzShare-Cloud Delete State-SPL', + DateTime(zShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Trashed Date-CMM', + DateTime(SPLzShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Trashed Date-SPL', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-LastParticipant Asset Trash Notification Date-CMM', + DateTime(SPLzShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Last Participant Asset Trash Notification View Date-CMM', + DateTime(SPLzShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL', + CASE zShare.ZEXITSOURCE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSOURCE || '' + END AS 'zShare-Exit Source-CMM', + CASE SPLzShare.ZEXITSOURCE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITSOURCE || '' + END AS 'SPLzShare-Exit Source-SPL', + CASE zShare.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSTATE || '' + END AS 'zShare-SPL_Exit State-CMM', + CASE SPLzShare.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITSTATE || '' + END AS 'SPLzShare-SPL_Exit State-SPL', + CASE zShare.ZEXITTYPE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITTYPE || '' + END AS 'zShare-Exit Type-CMM', + CASE SPLzShare.ZEXITTYPE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITTYPE || '' + END AS 'SPLzShare-Exit Type-SPL', + CASE zShare.ZSHOULDIGNOREBUDGETS + WHEN 1 THEN '1-StillTesting-CMM-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDIGNOREBUDGETS || '' + END AS 'zShare-Should Ignor Budgets-CMM', + CASE SPLzShare.ZSHOULDIGNOREBUDGETS + WHEN 1 THEN '1-StillTesting-CMM-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSHOULDIGNOREBUDGETS || '' + END AS 'SPLzShare-Should Ignor Budgets-SPL', + CASE zShare.ZPREVIEWSTATE + WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZPREVIEWSTATE || '' + END AS 'zShare-Preview State-CMM', + CASE SPLzShare.ZPREVIEWSTATE + WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPREVIEWSTATE || '' + END AS 'SPLzShare-Preview State-SPL', + zShare.ZPREVIEWDATA AS 'zShare-Preview Data-CMM', + SPLzShare.ZPREVIEWDATA AS 'SPLzShare-Preview Data-SPL', + zShare.ZRULESDATA AS 'zShare-Rules-CMM', + SPLzShare.ZRULESDATA AS 'SPLzShare-Rules-SPL', + zShare.ZTHUMBNAILIMAGEDATA AS 'zShare-Thumbnail Image Data-CMM', + SPLzShare.ZTHUMBNAILIMAGEDATA AS 'SPLzShare-Thumbnail Image Data-SPL', + CASE zShare.ZPARTICIPANTCLOUDUPDATESTATE + WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPARTICIPANTCLOUDUPDATESTATE || '' + END AS 'zShare-Participant Cloud Update State-CMM', + CASE SPLzShare.ZPARTICIPANTCLOUDUPDATESTATE + WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPARTICIPANTCLOUDUPDATESTATE || '' + END AS 'SPLzShare-Participant Cloud Update State-SPL', + zSharePartic.ZUUID AS 'zSharePartic-UUID-4TableStart', + SPLzSharePartic.ZUUID AS 'SPLzSharePartic-UUID-4TableStart', + CASE zSharePartic.ZACCEPTANCESTATUS + WHEN 1 THEN '1-Invite-Pending_or_Declined-1' + WHEN 2 THEN '2-Invite-Accepted-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' + END AS 'zSharePartic-Acceptance Status', + CASE SPLzSharePartic.ZACCEPTANCESTATUS + WHEN 1 THEN '1-Invite-Pending_or_Declined-1' + WHEN 2 THEN '2-Invite-Accepted-2' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZACCEPTANCESTATUS || '' + END AS 'SPLzSharePartic-Acceptance Status', + CASE zSharePartic.ZISCURRENTUSER + WHEN 0 THEN '0-Participant-Not_CloudStorageOwner-0' + WHEN 1 THEN '1-Participant-Is_CloudStorageOwner-1' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' + END AS 'zSharePartic-Is Current User', + CASE SPLzSharePartic.ZISCURRENTUSER + WHEN 0 THEN '0-Participant-Not_CurrentUser-0' + WHEN 1 THEN '1-Participant-Is_CurrentUser-1' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZISCURRENTUSER || '' + END AS 'SPLzSharePartic-Is Current User', + CASE zSharePartic.ZROLE + WHEN 1 THEN '1-Participant-is-Owner-Role-1' + WHEN 2 THEN '2-Participant-is-Invitee-Role-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' + END AS 'zSharePartic-Role', + CASE SPLzSharePartic.ZROLE + WHEN 1 THEN '1-Participant-is-Owner-Role-1' + WHEN 2 THEN '2-Participant-is-Invitee-Role-2' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZROLE || '' + END AS 'SPLzSharePartic-Role', + CASE zSharePartic.ZPERMISSION + WHEN 3 THEN '3-Participant-has-Full-Premissions-3' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZPERMISSION || '' + END AS 'zSharePartic-Premission', + CASE SPLzSharePartic.ZPERMISSION + WHEN 3 THEN '3-Participant-has-Full-Premissions-3' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZPERMISSION || '' + END AS 'SPLzSharePartic-Premission', + zSharePartic.ZPARTICIPANTID AS 'zSharePartic-Participant ID', + SPLzSharePartic.ZPARTICIPANTID AS 'SPLzSharePartic-Participant ID', + zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', + SPLzSharePartic.ZUSERIDENTIFIER AS 'SPLzSharePartic-User ID', + zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart', + SPLzSharePartic.Z_PK AS 'SPLzSharePartic-zPK-4TableStart', + zSharePartic.Z_PK AS 'zSharePartic-zPK-4TableStart', + zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', + SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address', + zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', + SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number', + CASE zSharePartic.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZEXITSTATE || '' + END AS 'zSharePartic-Exit State', + CASE SPLzSharePartic.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZEXITSTATE || '' + END AS 'SPLzSharePartic-Exit State', + ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID-4TableStart', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID-4TableStart', + SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID-4TableStart', + ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID-4TableStart', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart', + SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID-4TableStart', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID-4TableStart', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID-4TableStart', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID-4TableStart', + SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID-4TableStart', + CASE zAlbumList.ZNEEDSREORDERINGNUMBER + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAlbumList.ZNEEDSREORDERINGNUMBER || '' + END AS 'zAlbumList-Needs Reordering Number', + CASE zGenAlbum.Z_ENT + WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27' + WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28' + WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29' + WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30' + WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || '' + END AS 'zGenAlbum-zENT- Entity', + CASE ParentzGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || '' + END AS 'ParentzGenAlbum-Kind', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind', + CASE ParentzGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'ParentzGenAlbum-Cloud-Local-State', + CASE zGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'zGenAlbum-Cloud_Local_State', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State', + ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title', + zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied', + SWYConverszGenAlbum.ZTITLE AS 'SWYConverszGenAlbum- Title -User&System Applied', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum-Import Session ID-SWY', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate', + DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Creation Date', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', + DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date', + DateTime(SWYConverszGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Creation Date', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date', + DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date', + DateTime(SWYConverszGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Subscription Date', + ParentzGenAlbum.ZPENDINGITEMSCOUNT AS 'ParentzGenAlbum-Pending Items Count', + zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count', + SWYConverszGenAlbum.ZPENDINGITEMSCOUNT AS 'SWYConverszGenAlbum-Pending Items Count', + CASE ParentzGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'ParentzGenAlbum-Pending Items Type', + CASE zGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'zGenAlbum-Pending Items Type', + CASE SWYConverszGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'SWYConverszGenAlbum-Pending Items Type', + zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count', + SWYConverszGenAlbum.ZCACHEDPHOTOSCOUNT AS 'SWYConverszGenAlbum- Cached Photos Count', + zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count', + SWYConverszGenAlbum.ZCACHEDVIDEOSCOUNT AS 'SWYConverszGenAlbum- Cached Videos Count', + zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count', + SWYConverszGenAlbum.ZCACHEDCOUNT AS 'SWYConverszGenAlbum- Cached Count', + ParentzGenAlbum.ZSYNCEVENTORDERKEY AS 'ParentzGenAlbum-Sync Event Order Key', + zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key', + SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key', + CASE zGenAlbum.ZHASUNSEENCONTENT + WHEN 0 THEN 'No Unseen Content-StillTesting-0' + WHEN 1 THEN 'Unseen Content-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || '' + END AS 'zGenAlbum-Has Unseen Content', + CASE SWYConverszGenAlbum.ZHASUNSEENCONTENT + WHEN 0 THEN 'No Unseen Content-StillTesting-0' + WHEN 1 THEN 'Unseen Content-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZHASUNSEENCONTENT || '' + END AS 'SWYConverszGenAlbum-Has Unseen Content', + zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count', + SWYConverszGenAlbum.ZUNSEENASSETSCOUNT AS 'SWYConverszGenAlbum-Unseen Asset Count', + CASE zGenAlbum.ZISOWNED + WHEN 0 THEN 'zGenAlbum-Not Owned by Device Apple Acnt-0' + WHEN 1 THEN 'zGenAlbum-Owned by Device Apple Acnt-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISOWNED || '' + END AS 'zGenAlbum-is Owned', + CASE SWYConverszGenAlbum.ZISOWNED + WHEN 0 THEN 'SWYConverszGenAlbum-Not Owned by Device Apple Acnt-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Owned by Device Apple Acnt-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISOWNED || '' + END AS 'SWYConverszGenAlbum-is Owned', + CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATE + WHEN 0 THEN 'zGenAlbum-Cloud Album Owned by Device Apple Acnt-0' + WHEN 2 THEN 'zGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATE || '' + END AS 'zGenAlbum-Cloud Relationship State', + CASE SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATE + WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Album Owned by Device Apple Acnt-0' + WHEN 2 THEN 'SWYConverszGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Relationship State', + CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL + WHEN 0 THEN 'zGenAlbum-Shared Album Accessible Local Device-0' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || '' + END AS 'zGenAlbum-Cloud Relationship State Local', + CASE SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL + WHEN 0 THEN 'SWYConverszGenAlbum-Shared Album Accessible Local Device-0' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || '' + END AS 'SWYConverszGenAlbum-Cloud Relationship State Local', + zGenAlbum.ZCLOUDOWNEREMAILKEY AS 'zGenAlbum-Cloud Owner Mail Key', + SWYConverszGenAlbum.ZCLOUDOWNEREMAILKEY AS 'SWYConverszGenAlbum-Cloud Owner Mail Key', + zGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'zGenAlbum-Cloud Owner Frist Name', + SWYConverszGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'SWYConverszGenAlbum-Cloud Owner Frist Name', + zGenAlbum.ZCLOUDOWNERLASTNAME AS 'zGenAlbum-Cloud Owner Last Name', + SWYConverszGenAlbum.ZCLOUDOWNERLASTNAME AS 'SWYConverszGenAlbum-Cloud Owner Last Name', + zGenAlbum.ZCLOUDOWNERFULLNAME AS 'zGenAlbum-Cloud Owner Full Name', + SWYConverszGenAlbum.ZCLOUDOWNERFULLNAME AS 'SWYConverszGenAlbum-Cloud Owner Full Name', + zGenAlbum.ZCLOUDPERSONID AS 'zGenAlbum-Cloud Person ID', + SWYConverszGenAlbum.ZCLOUDPERSONID AS 'SWYConverszGenAlbum-Cloud Person ID', + zAsset.ZCLOUDOWNERHASHEDPERSONID AS 'zAsset-Cloud Owner Hashed Person ID', + zGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'zGenAlbum-Cloud Owner Hashed Person ID', + SWYConverszGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID', + CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL + WHEN 0 THEN 'zGenAlbum-Local Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'zGenAlbum-Local Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || '' + END AS 'zGenAlbum-Local Cloud Multi-Contributors Enabled', + CASE SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL + WHEN 0 THEN 'SWYConverszGenAlbum-Local Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || '' + END AS 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled', + CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED + WHEN 0 THEN 'zGenAlbum-Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'zGenAlbum-Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || '' + END AS 'zGenAlbum-Cloud Multi-Contributors Enabled', + CASE SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED + WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || '' + END AS 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled', + CASE zGenAlbum.ZCLOUDALBUMSUBTYPE + WHEN 0 THEN 'zGenAlbum Multi-Contributor-0' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDALBUMSUBTYPE || '' + END AS 'zGenAlbum-Cloud Album Sub Type', + CASE SWYConverszGenAlbum.ZCLOUDALBUMSUBTYPE + WHEN 0 THEN 'SWYConverszGenAlbum Multi-Contributor-0' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDALBUMSUBTYPE || '' + END AS 'SWYConverszGenAlbum-Cloud Album Sub Type', + DateTime(zGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Contribution Date', + DateTime(SWYConverszGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Contribution Date', + DateTime(zGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Last Interesting Change Date', + DateTime(SWYConverszGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Last Interesting Change Date', + CASE zGenAlbum.ZCLOUDNOTIFICATIONSENABLED + WHEN 0 THEN 'zGenAlbum-Cloud Notifications Disabled-0' + WHEN 1 THEN 'zGenAlbum-Cloud Notifications Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDNOTIFICATIONSENABLED || '' + END AS 'zGenAlbum-Cloud Notification Enabled', + CASE SWYConverszGenAlbum.ZCLOUDNOTIFICATIONSENABLED + WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Notifications Disabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Cloud Notifications Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDNOTIFICATIONSENABLED || '' + END AS 'SWYConverszGenAlbum-Cloud Notification Enabled', + CASE ParentzGenAlbum.ZISPINNED + WHEN 0 THEN '0-ParentzGenAlbum Not Pinned-0' + WHEN 1 THEN '1-ParentzGenAlbum Pinned-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPINNED || '' + END AS 'ParentzGenAlbum-Pinned', + CASE zGenAlbum.ZISPINNED + WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'zGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || '' + END AS 'zGenAlbum-Pinned', + CASE SWYConverszGenAlbum.ZISPINNED + WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || '' + END AS 'SWYConverszGenAlbum-Pinned', + CASE ParentzGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'ParentzGenAlbum-Custom Sort Key', + CASE zGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'zGenAlbum-Custom Sort Key', + CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'SWYConverszGenAlbum-Custom Sort Key', + CASE ParentzGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'ParentzGenAlbum-Custom Sort Ascending', + CASE zGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'zGenAlbum-Custom Sort Ascending', + CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'SWYConverszGenAlbum-Custom Sort Ascending', + CASE ParentzGenAlbum.ZISPROTOTYPE + WHEN 0 THEN '0-ParentzGenAlbum Not Prototype-0' + WHEN 1 THEN '1-ParentzGenAlbum Prototype-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPROTOTYPE || '' + END AS 'ParentzGenAlbum-Is Prototype', + CASE zGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'zGenAlbum-Not Prototype-0' + WHEN 1 THEN 'zGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || '' + END AS 'zGenAlbum-Is Prototype', + CASE SWYConverszGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || '' + END AS 'SWYConverszGenAlbum-Is Prototype', + CASE ParentzGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'ParentzGenAlbum-Project Document Type', + CASE zGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'zGenAlbum-Project Document Type', + CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'SWYConverszGenAlbum-Project Document Type', + CASE ParentzGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'ParentzGenAlbum-Custom Query Type', + CASE zGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'zGenAlbum-Custom Query Type', + CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'SWYConverszGenAlbum-Custom Query Type', + CASE ParentzGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN '0-ParentzGenAlbum Not In Trash-0' + WHEN 1 THEN '1-ParentzGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZTRASHEDSTATE || '' + END AS 'ParentzGenAlbum-Trashed State', + DateTime(ParentzGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Trash Date', + CASE zGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'zGenAlbum Not In Trash-0' + WHEN 1 THEN 'zGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || '' + END AS 'zGenAlbum-Trashed State', + DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date', + CASE SWYConverszGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0' + WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || '' + END AS 'SWYConverszGenAlbum-Trashed State', + DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date', + CASE ParentzGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN '0-ParentzGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN '1-ParentzGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'ParentzGenAlbum-Cloud Delete State', + CASE zGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'zGenAlbum-Cloud Delete State', + CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Delete State', + CASE zGenAlbum.ZCLOUDOWNERISWHITELISTED + WHEN 0 THEN 'zGenAlbum Cloud Owner Not Whitelisted-0' + WHEN 1 THEN 'zGenAlbum Cloud Owner Whitelisted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDOWNERISWHITELISTED || '' + END AS 'zGenAlbum-Cloud Owner Whitelisted', + CASE SWYConverszGenAlbum.ZCLOUDOWNERISWHITELISTED + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Owner Not Whitelisted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Owner Whitelisted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDOWNERISWHITELISTED || '' + END AS 'SWYConverszGenAlbum-Cloud Owner Whitelisted', + CASE zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL + WHEN 0 THEN 'zGenAlbum Cloud Local Public URL Disabled-0' + WHEN 1 THEN 'zGenAlbum Cloud Local has Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || '' + END AS 'zGenAlbum-Cloud Local Public URL Enabled', + CASE SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Local Public URL Disabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Local has Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || '' + END AS 'SWYConverszGenAlbum-Cloud Local Public URL Enabled', + CASE zGenAlbum.ZCLOUDPUBLICURLENABLED + WHEN 0 THEN 'zGenAlbum Cloud Public URL Disabled-0' + WHEN 1 THEN 'zGenAlbum Cloud Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLED || '' + END AS 'zGenAlbum-Cloud Public URL Enabled', + zGenAlbum.ZPUBLICURL AS 'zGenAlbum-Public URL', + CASE SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLED + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Public URL Disabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLED || '' + END AS 'SWYConverszGenAlbum-Cloud Public URL Enabled', + SWYConverszGenAlbum.ZPUBLICURL AS 'SWYConverszGenAlbum-Public URL', + zGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'zGenAlbum-Key Asset Face Thumb Index', + SWYConverszGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'SWYConverszGenAlbum-Key Asset Face Thumb Index', + zGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'zGenAlbum-Project Text Extension ID', + SWYConverszGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'SWYConverszGenAlbum-Project Text Extension ID', + zGenAlbum.ZUSERQUERYDATA AS 'zGenAlbum-User Query Data', + SWYConverszGenAlbum.ZUSERQUERYDATA AS 'SWYConverszGenAlbum-User Query Data', + zGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'zGenAlbum-Custom Query Parameters', + SWYConverszGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'SWYConverszGenAlbum-Custom Query Parameters', + zGenAlbum.ZPROJECTDATA AS 'zGenAlbum-Project Data', + SWYConverszGenAlbum.ZPROJECTDATA AS 'SWYConverszGenAlbum-Project Data', + CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zGenAlbum-Search Index Rebuild State', + CASE SWYConverszGenAlbum.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'SWYConverszGenAlbum-Search Index Rebuild State', + CASE zGenAlbum.ZDUPLICATETYPE + WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0' + WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1' + WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || '' + END AS 'zGenAlbum-Duplicate Type', + CASE SWYConverszGenAlbum.ZDUPLICATETYPE + WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0' + WHEN 1 THEN '1-Duplicate Asset_Pending-Merge-1' + WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZDUPLICATETYPE || '' + END AS 'SWYConverszGenAlbum-Duplicate Type', + CASE zGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || '' + END AS 'zGenAlbum-Privacy State', + CASE SWYConverszGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || '' + END AS 'SWYConverszGenAlbum-Privacy State', + zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID-4TableStart', + CASE zCldShareAlbumInvRec.ZISMINE + WHEN 0 THEN 'Not My Invitation-0' + WHEN 1 THEN 'My Invitation-1' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZISMINE || '' + END AS 'zCldShareAlbumInvRec-Is My Invitation to Shared Album', + CASE zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL || '' + END AS 'zCldShareAlbumInvRec-Invitation State Local', + CASE zCldShareAlbumInvRec.ZINVITATIONSTATE + WHEN 1 THEN 'Shared Album Invitation Pending-1' + WHEN 2 THEN 'Shared Album Invitation Accepted-2' + WHEN 3 THEN 'Shared Album Invitation Declined-3' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATE || '' + END AS 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status', + DateTime(zCldShareAlbumInvRec.ZINVITEESUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldShareAlbumInvRec-Subscription Date', + zCldShareAlbumInvRec.ZINVITEEFIRSTNAME AS 'zCldShareAlbumInvRec-Invitee First Name', + zCldShareAlbumInvRec.ZINVITEELASTNAME AS 'zCldShareAlbumInvRec-Invitee Last Name', + zCldShareAlbumInvRec.ZINVITEEFULLNAME AS 'zCldShareAlbumInvRec-Invitee Full Name', + zCldShareAlbumInvRec.ZINVITEEHASHEDPERSONID AS 'zCldShareAlbumInvRec-Invitee Hashed Person ID', + zCldShareAlbumInvRec.ZINVITEEEMAILKEY AS 'zCldShareAlbumInvRec-Invitee Email Key', + zGenAlbum.ZKEYASSETFACEIDENTIFIER AS 'zGenAlbum-Key Asset Face ID', + CASE + WHEN zAsset.ZFACEAREAPOINTS > 0 THEN 'Face Area Points Detected in zAsset' + ELSE 'Face Area Points Not Detected in zAsset' + END AS 'zFaceCrop-Face Area Points', + zAsset.ZFACEADJUSTMENTVERSION AS 'zAsset-Face Adjustment Version', + zAddAssetAttr.ZFACEANALYSISVERSION AS 'zAddAssetAttr-Face Analysis Version', + CASE zDetFace.ZASSETVISIBLE + WHEN 0 THEN 'Asset Not Visible Photo Library-0' + WHEN 1 THEN 'Asset Visible Photo Library-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZASSETVISIBLE || '' + END AS 'zDetFace-Asset Visible', + zPerson.ZFACECOUNT AS 'zPerson-Face Count', + zDetFace.ZFACECROP AS 'zDetFace-Face Crop', + zDetFace.ZFACEALGORITHMVERSION AS 'zDetFace-Face Algorithm Version', + zDetFace.ZADJUSTMENTVERSION AS 'zDetFace-Adjustment Version', + zDetFace.ZUUID AS 'zDetFace-UUID-4TableStart', + zPerson.ZPERSONUUID AS 'zPerson-Person UUID-4TableStart', + zPerson.ZMDID AS 'zPerson - MD ID', + CASE zPerson.ZASSETSORTORDER + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZASSETSORTORDER || '' + END AS 'zPerson - Asset Sort Order', + CASE zDetFace.ZCONFIRMEDFACECROPGENERATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZCONFIRMEDFACECROPGENERATIONSTATE || '' + END AS 'zDetFace-Confirmed Face Crop Generation State', + CASE zDetFace.ZMANUAL + WHEN 0 THEN 'zDetFace-Auto Detected-0' + WHEN 1 THEN 'zDetFace-Manually Detected-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZMANUAL || '' + END AS 'zDetFace-Manual', + CASE zDetFace.ZDETECTIONTYPE + WHEN 1 THEN '1-StillTesting' + WHEN 3 THEN '3-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZDETECTIONTYPE || '' + END AS 'zDetFace-Detection Type', + CASE zPerson.ZDETECTIONTYPE + WHEN 1 THEN '1-StillTesting' + WHEN 3 THEN '3-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZDETECTIONTYPE || '' + END AS 'zPerson-Detection Type', + CASE zDetFace.ZVIPMODELTYPE + WHEN 0 THEN 'Not VIP-0' + WHEN 1 THEN 'VIP-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZVIPMODELTYPE || '' + END AS 'zDetFace-VIP Model Type', + CASE zDetFace.ZNAMESOURCE + WHEN 0 THEN 'No Name Listed-0' + WHEN 1 THEN '1-Face Crop-1' + WHEN 2 THEN '2-Verified-Has-Person-URI' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZNAMESOURCE || '' + END AS 'zDetFace-Name Source', + CASE zDetFace.ZCLOUDNAMESOURCE + WHEN 0 THEN 'NA-0' + WHEN 1 THEN '1-User Added Via Face Crop-1' + WHEN 5 THEN '5-Asset Shared has Name' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZCLOUDNAMESOURCE || '' + END AS 'zDetFace-Cloud Name Source', + zPerson.ZMERGECANDIDATECONFIDENCE AS 'zPerson-Merge Candidate Confidence', + zPerson.ZPERSONURI AS 'zPerson-Person URI', + zPerson.ZDISPLAYNAME AS 'zPerson-Display Name', + zPerson.ZFULLNAME AS 'zPerson-Full Name', + CASE zPerson.ZCLOUDVERIFIEDTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDVERIFIEDTYPE || '' + END AS 'zPerson-Cloud Verified Type', + CASE zFaceCrop.ZSTATE + WHEN 5 THEN 'Validated-5' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZSTATE || '' + END AS 'zFaceCrop-State', + CASE zFaceCrop.ZTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-Active' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZTYPE || '' + END AS 'zFaceCrop-Type', + zFaceCrop.ZUUID AS 'zFaceCrop-UUID-4TableStart', + CASE zPerson.ZTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZTYPE || '' + END AS 'zPerson-Type', + CASE zPerson.ZVERIFIEDTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZVERIFIEDTYPE || '' + END AS 'zPerson-Verified Type', + CASE zPerson.ZGENDERTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Male-1' + WHEN 2 THEN 'Female-2' + ELSE 'Unknown-New-Value!: ' || zPerson.ZGENDERTYPE || '' + END AS 'zPerson-Gender Type', + CASE zDetFace.ZGENDERTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Male-1' + WHEN 2 THEN 'Female-2' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZGENDERTYPE || '' + END AS 'zDetFace-Gender Type', + zDetFace.ZCENTERX AS 'zDetFace-Center X', + zDetFace.ZCENTERY AS 'zDetFace-Center Y', + CASE zPerson.ZAGETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Infant-Toddler Age Type-1' + WHEN 2 THEN 'Toddler-Child Age Type-2' + WHEN 3 THEN 'Child-Young Adult Age Type-3' + WHEN 4 THEN 'Young Adult-Adult Age Type-4' + WHEN 5 THEN 'Adult-5' + ELSE 'Unknown-New-Value!: ' || zPerson.ZAGETYPE || '' + END AS 'zPerson-Age Type Estimate', + CASE zDetFace.ZAGETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Infant-Toddler Age Type-1' + WHEN 2 THEN 'Toddler-Child Age Type-2' + WHEN 3 THEN 'Child-Young Adult Age Type-3' + WHEN 4 THEN 'Young Adult-Adult Age Type-4' + WHEN 5 THEN 'Adult-5' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZAGETYPE || '' + END AS 'zDetFace-Age Type Estimate', + CASE zDetFace.ZETHNICITYTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Black-African American-1' + WHEN 2 THEN 'White-2' + WHEN 3 THEN 'Hispanic-Latino-3' + WHEN 4 THEN 'Asian-4' + WHEN 5 THEN 'Native Hawaiian-Other Pacific Islander-5' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZETHNICITYTYPE || '' + END AS 'zDetFace-Ethnicity Type', + CASE zDetFace.ZSKINTONETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Light-Pale White Skin Tone-1' + WHEN 2 THEN 'White-Fair Skin Tone-2' + WHEN 3 THEN 'Medium-White to Olive Skin Tone-3' + WHEN 4 THEN 'Olive-Moderate Brown Skin Tone-4' + WHEN 5 THEN 'Brown-Dark Brown Skin Tone-5' + WHEN 6 THEN 'Black-Very Dark Brown to Black Skin Tone-6' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZSKINTONETYPE || '' + END AS 'zDetFace-Skin Tone Type', + CASE zDetFace.ZHAIRTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + WHEN 6 THEN '6-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHAIRTYPE || '' + END AS 'zDetFace-Hair Type', + CASE zDetFace.ZHAIRCOLORTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Black-Brown Hair Color-1' + WHEN 2 THEN 'Brown-Blonde Hair Color-2' + WHEN 3 THEN 'Brown-Red Hair Color-3' + WHEN 4 THEN 'Red-White Hair Color-4' + WHEN 5 THEN 'StillTesting-Artifical-5' + WHEN 6 THEN 'White-Bald Hair Color-6' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHAIRCOLORTYPE || '' + END AS 'zDetFace-Hair Color Type', + CASE zDetFace.ZHEADGEARTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-No Headgear' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHEADGEARTYPE || '' + END AS 'zDetFace-Head Gear Type', + CASE zDetFace.ZFACIALHAIRTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Clean Shaven Facial Hair Type-1' + WHEN 2 THEN 'Beard Facial Hair Type-2' + WHEN 3 THEN 'Goatee Facial Hair Type-3' + WHEN 4 THEN 'Mustache Facial Hair Type-4' + WHEN 5 THEN 'Stubble Facial Hair Type-5' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZFACIALHAIRTYPE || '' + END AS 'zDetFace-Facial Hair Type', + CASE zDetFace.ZHASFACEMASK + WHEN 0 THEN 'No Mask-0' + WHEN 1 THEN 'Has Mask-1' + WHEN 2 THEN '2-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHASFACEMASK || '' + END AS 'zDetFace-Has Face Mask', + CASE zDetFace.ZPOSETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Face Frontal Pose-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN 'Face Profile Pose-3' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZPOSETYPE || '' + END AS 'zDetFace-Pose Type', + CASE zDetFace.ZFACEEXPRESSIONTYPE + WHEN 0 THEN 'NA-0' + WHEN 1 THEN 'Disgusted-Angry-1' + WHEN 2 THEN 'Suprised-Fearful-2' + WHEN 3 THEN 'Neutral-3' + WHEN 4 THEN 'Confident-Smirk-4' + WHEN 5 THEN 'Happiness-5' + WHEN 6 THEN 'Sadness-6' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZFACEEXPRESSIONTYPE || '' + END AS 'zDetFace-Face Expression Type', + CASE zDetFace.ZHASSMILE + WHEN 0 THEN 'zDetFace No Smile-0' + WHEN 1 THEN 'zDetFace Smile-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHASSMILE || '' + END AS 'zDetFace-Has Smile', + CASE zDetFace.ZSMILETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'zDetFace Smile No Teeth-1' + WHEN 2 THEN 'zDetFace Smile has Teeth-2' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZSMILETYPE || '' + END AS 'zDetFace-Smile Type', + CASE zDetFace.ZLIPMAKEUPTYPE + WHEN 0 THEN 'zDetFace No Lip Makeup-0' + WHEN 1 THEN 'zDetFace Lip Makeup Detected-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZLIPMAKEUPTYPE || '' + END AS 'zDetFace-Lip Makeup Type', + CASE zDetFace.ZEYESSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Eyes Closed-1' + WHEN 2 THEN 'Eyes Open-2' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZEYESSTATE || '' + END AS 'zDetFace-Eyes State', + CASE zDetFace.ZISLEFTEYECLOSED + WHEN 0 THEN 'Left Eye Open-0' + WHEN 1 THEN 'Left Eye Closed-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZISLEFTEYECLOSED || '' + END AS 'zDetFace-Is Left Eye Closed', + CASE zDetFace.ZISRIGHTEYECLOSED + WHEN 0 THEN 'Right Eye Open-0' + WHEN 1 THEN 'Right Eye Closed-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZISRIGHTEYECLOSED || '' + END AS 'zDetFace-Is Right Eye Closed', + zDetFace.ZGAZECENTERX AS 'zDetFace-Gaze Center X', + zDetFace.ZGAZECENTERY AS 'zDetFace-Gaze Center Y', + CASE zDetFace.ZGAZETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZGAZETYPE || '' + END AS 'zDetFace-Face Gaze Type', + CASE zDetFace.ZGLASSESTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Eye Glasses-1' + WHEN 2 THEN 'Sun Glasses-2' + WHEN 3 THEN 'No Glasses-3' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZGLASSESTYPE || '' + END AS 'zDetFace-Eye Glasses Type', + CASE zDetFace.ZEYEMAKEUPTYPE + WHEN 0 THEN 'No Eye Makeup-0' + WHEN 1 THEN 'Eye Makeup Detected-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZEYEMAKEUPTYPE || '' + END AS 'zDetFace-Eye Makeup Type', + zDetFace.ZCLUSTERSEQUENCENUMBER AS 'zDetFace-Cluster Squence Number Key', + zDetFace.ZGROUPINGIDENTIFIER AS 'zDetFace-Grouping ID', + zDetFace.ZMASTERIDENTIFIER AS 'zDetFace-Master ID', + zDetFace.ZQUALITY AS 'zDetFace-Quality', + zDetFace.ZQUALITYMEASURE AS 'zDetFace-Quality Measure', + zDetFace.ZSOURCEHEIGHT AS 'zDetFace-Source Height', + zDetFace.ZSOURCEWIDTH AS 'zDetFace-Source Width', + CASE zDetFace.ZHIDDEN + WHEN 0 THEN 'Not Hidden-0' + WHEN 1 THEN 'Hidden-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHIDDEN || '' + END AS 'zDetFace-Hidden-Asset Hidden', + CASE zDetFace.ZISINTRASH + WHEN 0 THEN 'Not In Trash-0' + WHEN 1 THEN 'In Trash-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZISINTRASH || '' + END AS 'zDetFace-In Trash-Recently Deleted', + CASE zDetFace.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Not Synced with Cloud-0' + WHEN 1 THEN 'Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZCLOUDLOCALSTATE || '' + END AS 'zDetFace-Cloud Local State', + CASE zDetFace.ZTRAININGTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZTRAININGTYPE + END AS 'zDetFace-Training Type', + zDetFace.ZPOSEYAW AS 'zDetFace.Pose Yaw', + zDetFace.ZBODYCENTERX AS 'zDetFace-Body Center X', + zDetFace.ZBODYCENTERY AS 'zDetFace-Body Center Y', + zDetFace.ZBODYHEIGHT AS 'zDetFace-Body Height', + zDetFace.ZBODYWIDTH AS 'zDetFace-Body Width', + zDetFace.ZROLL AS 'zDetFace-Roll', + zDetFace.ZSIZE AS 'zDetFace-Size', + zDetFace.ZCLUSTERSEQUENCENUMBER AS 'zDetFace-Cluster Squence Number', + zDetFace.ZBLURSCORE AS 'zDetFace-Blur Score', + zDetFacePrint.ZFACEPRINTVERSION AS 'zDetFacePrint-Face Print Version', + zMedAnlyAstAttr.ZFACECOUNT AS 'zMedAnlyAstAttr-Face Count', + zDetFaceGroup.ZUUID AS 'zDetFaceGroup-UUID-4TableStart', + zDetFaceGroup.ZPERSONBUILDERSTATE AS 'zDetFaceGroup-Person Builder State', + zDetFaceGroup.ZUNNAMEDFACECOUNT AS 'zDetFaceGroup-UnNamed Face Count', + zPerson.ZINPERSONNAMINGMODEL AS 'zPerson-In Person Naming Model', + zPerson.ZKEYFACEPICKSOURCE AS 'zPerson-Key Face Pick Source Key', + zPerson.ZMANUALORDER AS 'zPerson-Manual Order Key', + zPerson.ZQUESTIONTYPE AS 'zPerson-Question Type', + zPerson.ZSUGGESTEDFORCLIENTTYPE AS 'zPerson-Suggested For Client Type', + zPerson.ZMERGETARGETPERSON AS 'zPerson-Merge Target Person', + CASE zPerson.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Person Not Synced with Cloud-0' + WHEN 1 THEN 'Person Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDLOCALSTATE + END AS 'zPerson-Cloud Local State', + CASE zFaceCrop.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Not Synced with Cloud-0' + WHEN 1 THEN 'Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDLOCALSTATE || '' + END AS 'zFaceCrop-Cloud Local State', + CASE zFaceCrop.ZCLOUDTYPE + WHEN 0 THEN 'Has Name-0' + WHEN 5 THEN 'Has Face Key-5' + WHEN 12 THEN '12-StillTesting' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDTYPE || '' + END AS 'zFaceCrop-Cloud Type', + CASE zPerson.ZCLOUDDELETESTATE + WHEN 0 THEN 'Cloud Not Deleted-0' + WHEN 1 THEN 'Cloud Deleted-1' + ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDDELETESTATE || '' + END AS 'zPerson-Cloud Delete State', + CASE zFaceCrop.ZCLOUDDELETESTATE + WHEN 0 THEN 'Cloud Not Deleted-0' + WHEN 1 THEN 'Cloud Deleted-1' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDDELETESTATE || '' + END AS 'zFaceCrop-Cloud Delete State', + zFaceCrop.ZINVALIDMERGECANDIDATEPERSONUUID AS 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart', + zAsset.ZHIGHLIGHTVISIBILITYSCORE AS 'zAsset-Highlight Visibility Score', + zMemory.ZUUID AS 'zMemory-UUID-4TableStart', + zMemory.ZASSETLISTPREDICATE AS 'zMemory-AssetListPredicte', + zMemory.ZSCORE AS 'zMemory-Score', + zMemory.ZSUBTITLE AS 'zMemory-SubTitle', + zMemory.ZTITLE AS 'zMemory-Title', + CASE zMemory.ZCATEGORY + WHEN 1 THEN '1-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 8 THEN '8-StillTesting' + WHEN 16 THEN '16-StillTesting' + WHEN 17 THEN '17-StillTesting' + WHEN 19 THEN '19-StillTesting' + WHEN 21 THEN '21-StillTesting' + WHEN 201 THEN '201-StillTesting' + WHEN 203 THEN '203-StillTesting' + WHEN 204 THEN '204-StillTesting' + WHEN 211 THEN '211-StillTesting' + WHEN 217 THEN '217-StillTesting' + WHEN 220 THEN '220-StillTesting' + WHEN 301 THEN '301-StillTesting' + WHEN 302 THEN '302-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZCATEGORY || '' + END AS 'zMemory-Category', + CASE zMemory.ZSUBCATEGORY + WHEN 0 THEN '0-StillTesting' + WHEN 201 THEN '201-StillTesting' + WHEN 204 THEN '204-StillTesting' + WHEN 206 THEN '206-StillTesting' + WHEN 207 THEN '207-StillTesting' + WHEN 212 THEN '212-StillTesting' + WHEN 213 THEN '213-StillTesting' + WHEN 214 THEN '214-StillTesting' + WHEN 402 THEN '402-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSUBCATEGORY || '' + END AS 'zMemory-SubCategory', + DateTime(zMemory.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Creation Date', + DateTime(zMemory.ZLASTENRICHMENTDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Enrichment Date', + CASE zMemory.ZUSERACTIONOPTIONS + WHEN 0 THEN 'User Actions Options Memory Not User Created-0' + WHEN 1 THEN 'User Actions Options Memory User Created-1' + ELSE 'Unknown-New-Value!: ' || zMemory.ZUSERACTIONOPTIONS || '' + END AS 'zMemory-User Action Options', + CASE zMemory.ZFAVORITE + WHEN 0 THEN 'Memory Not Favorite-0' + WHEN 1 THEN 'Memory Favorite-1' + END AS 'zMemory-Favorite Memory', + zMemory.ZVIEWCOUNT AS 'zMemory-View Count', + zMemory.ZPLAYCOUNT AS 'zMemory-Play Count', + zMemory.ZREJECTED AS 'zMemory-Rejected', + zMemory.ZSHARECOUNT AS 'zMemory-Share Count', + zMemory.ZSHARINGCOMPOSITION AS 'zMemory-Sharing Composition', + DateTime(zMemory.ZLASTMOVIEPLAYEDDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Movie Play Date', + DateTime(zMemory.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Viewed Date', + zMemory.ZPENDINGPLAYCOUNT AS 'zMemory-Pending Play Count Memory', + zMemory.ZPENDINGSHARECOUNT AS 'zMemory-Pending Share Count Memory', + zMemory.ZPENDINGVIEWCOUNT AS 'zMemory-Pending View Count Memory', + zMemory.ZPENDINGSTATE AS 'zMemory-Pending State', + CASE zMemory.ZFEATUREDSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZFEATUREDSTATE || '' + END AS 'zMemory-Featured State', + zMemory.ZPHOTOSGRAPHVERSION AS 'zMemory-Photos Graph Version', + zMemory.ZGRAPHMEMORYIDENTIFIER AS 'zMemory-Graph Memory Identifier', + CASE zMemory.ZNOTIFICATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZNOTIFICATIONSTATE || '' + END AS 'zMemory-Notification State', + CASE zMemory.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Memory Not Synced with Cloud-0' + WHEN 1 THEN 'Memory Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zMemory.ZCLOUDLOCALSTATE || '' + END AS 'zMemory-Cloud Local State', + CASE zMemory.ZCLOUDDELETESTATE + WHEN 0 THEN 'Memory Not Deleted-0' + WHEN 1 THEN 'Memory Deleted-1' + ELSE 'Unknown-New-Value!: ' || zMemory.ZCLOUDDELETESTATE || '' + END AS 'zMemory-Cloud Delete State', + CASE zMemory.ZSTORYCOLORGRADEKIND + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSTORYCOLORGRADEKIND || '' + END AS 'zMemory-Story Color Grade Kind', + CASE zMemory.ZSTORYSERIALIZEDTITLECATEGORY + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSTORYSERIALIZEDTITLECATEGORY || '' + END AS 'zMemory-Story Serialized Title Category', + CASE zMemory.ZSYNDICATEDCONTENTSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSYNDICATEDCONTENTSTATE || '' + END AS 'zMemory-Syndicated Content State', + CASE zMemory.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting Memory-Search Index State-0' + WHEN 1 THEN '1-StillTesting Memory-Search Index State-1' + WHEN 2 THEN '2-StillTesting Memory-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zMemory-Search Index Rebuild State', + zMemory.ZBLACKLISTEDFEATURE AS 'zMemory-Black Listed Feature', + zMoment.ZUUID AS 'zMoment-UUID-4TableStart', + zMoment.ZAGGREGATIONSCORE AS 'zMoment-Aggregation Score', + DateTime(zMoment.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Start Date', + DateTime(zMoment.ZREPRESENTATIVEDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Representative Date', + zMoment.ZTIMEZONEOFFSET AS 'zMoment-Timezone Offset', + DateTime(zMoment.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Modification Date', + DateTime(zMoment.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-End Date', + zMoment.ZSUBTITLE AS 'zMoment-SubTitle', + zMoment.ZTITLE AS 'zMoment-Title', + CASE zMoment.ZORIGINATORSTATE + WHEN 0 THEN '0-StillTesting Moment-Originator_State-0' + WHEN 1 THEN '1-StillTesing Moment-Originator_State-1' + WHEN 2 THEN '2-StillTesting Moment-Originator_State-2' + ELSE 'Unknown-New-Value!: ' || zMoment.ZORIGINATORSTATE || '' + END AS 'zMoment-Originator State', + CASE zMoment.ZSHARINGCOMPOSITION + WHEN 0 THEN '0-StillTesting Moment-Sharing_Compo-0' + WHEN 1 THEN '1-StillTesting Moment-Sharing_Compo-1' + WHEN 2 THEN '2-StillTesting Moment-Sharing_Compo-2' + ELSE 'Unknown-New-Value!: ' || zMoment.ZSHARINGCOMPOSITION || '' + END AS 'zMoment-Sharing Composition', + zMoment.ZCACHEDCOUNTSHARED AS 'zMoment-Cached Count Shared', + CASE zMoment.ZPROCESSEDLOCATION + WHEN 2 THEN 'No-2' + WHEN 3 THEN 'Yes-3' + WHEN 6 THEN 'Yes-6' + ELSE 'Unknown-New-Value!: ' || zMoment.ZPROCESSEDLOCATION || '' + END AS 'zMoment-Processed Location', + zMoment.ZAPPROXIMATELATITUDE AS 'zMoment-Approx Latitude', + zMoment.ZAPPROXIMATELONGITUDE AS 'zMoment-Approx Longitude', + CASE zMoment.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zMoment.ZGPSHORIZONTALACCURACY + END AS 'zMoment-GPS Horizontal Accuracy', + zMoment.ZCACHEDCOUNT AS 'zMoment-Cache Count', + zMoment.ZCACHEDPHOTOSCOUNT AS 'zMoment-Cached Photos Count', + zMoment.ZCACHEDVIDEOSCOUNT AS 'zMoment-Cached Videos Count', + CASE zMoment.ZTRASHEDSTATE + WHEN 0 THEN 'zMoment Not In Trash-0' + WHEN 1 THEN 'zMoment In Trash-1' + ELSE 'Unknown-New-Value!: ' || zMoment.ZTRASHEDSTATE || '' + END AS 'zMoment-Trashed State', + SBKAzSugg.ZUUID AS 'SBKAzSugg-UUID-4TableStart', + SBKAzSugg.ZSUGGESTIONCONTEXT AS 'SBKAzSugg-Suggestion Context', + SBKAzSugg.ZSHARINGCOMPOSITION AS 'SBKAzSugg-Sharing Composition', + DateTime(SBKAzSugg.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Start Date', + CASE SBKAzSugg.ZSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZSTATE || '' + END AS 'SBKAzSugg-State', + CASE SBKAzSugg.ZFEATUREDSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZFEATUREDSTATE || '' + END AS 'SBKAzSugg-Featured State', + CASE SBKAzSugg.ZAVAILABLEFEATURES + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZAVAILABLEFEATURES || '' + END AS 'SBKAzSugg- Available Features', + CASE SBKAzSugg.ZNOTIFICATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZNOTIFICATIONSTATE || '' + END AS 'SBKAzSugg-Notification State', + DateTime(SBKAzSugg.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Creation Date', + DateTime(SBKAzSugg.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-End Date', + DateTime(SBKAzSugg.ZACTIVATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Activation Date', + DateTime(SBKAzSugg.ZEXPUNGEDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Expunge Date', + DateTime(SBKAzSugg.ZRELEVANTUNTILDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Relevant Until Date', + SBKAzSugg.ZTITLE AS 'SBKAzSugg-Title', + SBKAzSugg.ZSUBTITLE AS 'SBKAzSugg-Sub Title', + SBKAzSugg.ZCACHEDCOUNT AS 'SBKAzSugg-Cached Count', + SBKAzSugg.ZCACHEDPHOTOSCOUNT AS 'SBKAzSugg-Cahed Photos Count', + SBKAzSugg.ZCACHEDVIDEOSCOUNT AS 'SBKAzSugg-Cached Videos Count', + CASE SBKAzSugg.ZTYPE + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZTYPE || '' + END AS 'SBKAzSugg-Type', + CASE SBKAzSugg.ZSUBTYPE + WHEN 501 THEN '501-StillTesting' + WHEN 502 THEN '502-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZSUBTYPE || '' + END AS 'SBKAzSugg-Sub Type', + SBKAzSugg.ZACTIONDATA AS 'SBKAzSugg-Action Data', + SBKAzSugg.ZVERSION AS 'SBKAzSugg-Version', + CASE SBKAzSugg.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Suggestion Not Synced with Cloud-0' + WHEN 1 THEN 'Suggestion Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZCLOUDLOCALSTATE || '' + END AS 'SBKAzSugg-Cloud Local State', + CASE SBKAzSugg.ZCLOUDDELETESTATE + WHEN 0 THEN 'Suggestion Not Deleted-0' + WHEN 1 THEN 'Suggestion Deleted-1' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZCLOUDDELETESTATE || '' + END AS 'SBKAzSugg-Cloud Delete State', + SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID-4TableStart', + SBRAzSugg.ZSUGGESTIONCONTEXT AS 'SBRAzSugg-Suggestion Context', + SBRAzSugg.ZSHARINGCOMPOSITION AS 'SBRAzSugg-Sharing Composition', + DateTime(SBRAzSugg.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Start Date', + CASE SBRAzSugg.ZSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZSTATE || '' + END AS 'SBRAzSugg-State', + CASE SBRAzSugg.ZFEATUREDSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZFEATUREDSTATE || '' + END AS 'SBRAzSugg-Featured State', + CASE SBRAzSugg.ZAVAILABLEFEATURES + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZAVAILABLEFEATURES || '' + END AS 'SBRAzSugg- Available Features', + CASE SBRAzSugg.ZNOTIFICATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZNOTIFICATIONSTATE || '' + END AS 'SBRAzSugg-Notification State', + DateTime(SBRAzSugg.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Creation Date', + DateTime(SBRAzSugg.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-End Date', + DateTime(SBRAzSugg.ZACTIVATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Activation Date', + DateTime(SBRAzSugg.ZEXPUNGEDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Expunge Date', + DateTime(SBRAzSugg.ZRELEVANTUNTILDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Relevant Until Date', + SBRAzSugg.ZTITLE AS 'SBRAzSugg-Title', + SBRAzSugg.ZSUBTITLE AS 'SBRAzSugg-Sub Title', + SBRAzSugg.ZCACHEDCOUNT AS 'SBRAzSugg-Cached Count', + SBRAzSugg.ZCACHEDPHOTOSCOUNT AS 'SBRAzSugg-Cahed Photos Count', + SBRAzSugg.ZCACHEDVIDEOSCOUNT AS 'SBRAzSugg-Cached Videos Count', + CASE SBRAzSugg.ZTYPE + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZTYPE || '' + END AS 'SBRAzSugg-Type', + CASE SBRAzSugg.ZSUBTYPE + WHEN 501 THEN '501-StillTesting' + WHEN 502 THEN '502-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZSUBTYPE || '' + END AS 'SBRAzSugg-Sub Type', + SBRAzSugg.ZACTIONDATA AS 'SBRAzSugg-Action Data', + SBRAzSugg.ZVERSION AS 'SBRAzSugg-Version', + CASE SBRAzSugg.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Suggestion Not Synced with Cloud-0' + WHEN 1 THEN 'Suggestion Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZCLOUDLOCALSTATE || '' + END AS 'SBRAzSugg-Cloud Local State', + CASE SBRAzSugg.ZCLOUDDELETESTATE + WHEN 0 THEN 'Suggestion Not Deleted-0' + WHEN 1 THEN 'Suggestion Deleted-1' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZCLOUDDELETESTATE || '' + END AS 'SBRAzSugg-Cloud Delete State', + zMedAnlyAstAttr.ZMEDIAANALYSISVERSION AS 'zMedAnlyAstAttr-Media Analysis Version', + zMedAnlyAstAttr.ZAUDIOCLASSIFICATION AS 'zMedAnlyAstAttr-Audio Classification', + zMedAnlyAstAttr.ZBESTVIDEORANGEDURATIONTIMESCALE AS 'zMedAnlyAstAttr-Best Video Range Duration Time Scale', + zMedAnlyAstAttr.ZBESTVIDEORANGESTARTTIMESCALE AS 'zMedAnlyAstAttr-Best Video Range Start Time Scale', + zMedAnlyAstAttr.ZBESTVIDEORANGEDURATIONVALUE AS 'zMedAnlyAstAttr-Best Video Range Duration Value', + zMedAnlyAstAttr.ZBESTVIDEORANGESTARTVALUE AS 'zMedAnlyAstAttr-Best Video Range Start Value', + zMedAnlyAstAttr.ZPACKEDBESTPLAYBACKRECT AS 'zMedAnlyAstAttr-Packed Best Playback Rect', + zMedAnlyAstAttr.ZACTIVITYSCORE AS 'zMedAnlyAstAttr-Activity Score', + zMedAnlyAstAttr.ZVIDEOSCORE AS 'zMedAnlyAstAttr-Video Score', + zMedAnlyAstAttr.ZAUDIOSCORE AS 'zMedAnlyAstAttr-Audio Score', + zMedAnlyAstAttr.ZWALLPAPERSCORE AS 'zMedAnlyAstAttr-Wallpaper Score', + zMedAnlyAstAttr.ZAUTOPLAYSUGGESTIONSCORE AS 'zMedAnlyAstAttr-AutoPlay Suggestion Score', + zMedAnlyAstAttr.ZBLURRINESSSCORE AS 'zMedAnlyAstAttr-Blurriness Score', + zMedAnlyAstAttr.ZEXPOSURESCORE AS 'zMedAnlyAstAttr-Exposure Score', + zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTIONCONFIDENCE AS 'zMedAnlyAstAttr-Probable Rotation Direction Confidence', + zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTION AS 'zMedAnlyAstAttr-Probable Rotation Direction', + zMedAnlyAstAttr.ZSCREENTIMEDEVICEIMAGESENSITIVITY AS 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity', + zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID-4TableStart', + zAssetAnalyState.ZANALYSISSTATE AS 'zAssetAnalyState-Analyisis State', + zAssetAnalyState.ZWORKERFLAGS AS 'zAssetAnalyState-Worker Flags', + zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type', + DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date', + DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date', + DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token', + zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr', + zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version', + zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version', + zMedAnlyAstAttr.ZVISUALSEARCHATTRIBUTES AS 'zMedAnlyAstAttr-Visual Search Attributes', + zVisualSearchAttr.ZALGORITHMVERSION AS 'zVisualSearchAttr-Algorithm Version', + zVisualSearchAttr.ZADJUSTMENTVERSION AS 'zVisualSearchAttr-Adjustment Version', + zVisualSearchAttr.ZSTICKERCONFIDENCEALGORITHMVERSION AS 'zVisualSearchAttr - Sticker Confidence Algorithm Version', + zVisualSearchAttr.ZSTICKERCONFIDENCESCORE AS 'zVisualSearchAttr - Sticker Confidence Score', + zAsset.ZSTICKERCONFIDENCESCORE AS 'zAsset-Sticker Confidence Score', + zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', + zCompAssetAttr.ZBEHAVIORALSCORE AS 'zCompAssetAttr-Behavioral Score', + zCompAssetAttr.ZFAILURESCORE AS 'zCompAssetAttr-Failure Score zCompAssetAttr', + zCompAssetAttr.ZHARMONIOUSCOLORSCORE AS 'zCompAssetAttr-Harmonious Color Score', + zCompAssetAttr.ZIMMERSIVENESSSCORE AS 'zCompAssetAttr-Immersiveness Score', + zCompAssetAttr.ZINTERACTIONSCORE AS 'zCompAssetAttr-Interaction Score', + zCompAssetAttr.ZINTERESTINGSUBJECTSCORE AS 'zCompAssetAttr-Intersting Subject Score', + zCompAssetAttr.ZINTRUSIVEOBJECTPRESENCESCORE AS 'zCompAssetAttr-Intrusive Object Presence Score', + zCompAssetAttr.ZLIVELYCOLORSCORE AS 'zCompAssetAttr-Lively Color Score', + zCompAssetAttr.ZLOWLIGHT AS 'zCompAssetAttr-Low Light', + zCompAssetAttr.ZNOISESCORE AS 'zCompAssetAttr-Noise Score', + zCompAssetAttr.ZPLEASANTCAMERATILTSCORE AS 'zCompAssetAttr-Pleasant Camera Tilt Score', + zCompAssetAttr.ZPLEASANTCOMPOSITIONSCORE AS 'zCompAssetAttr-Pleasant Composition Score', + zCompAssetAttr.ZPLEASANTLIGHTINGSCORE AS 'zCompAssetAttr-Pleasant Lighting Score', + zCompAssetAttr.ZPLEASANTPATTERNSCORE AS 'zCompAssetAttr-Pleasant Pattern Score', + zCompAssetAttr.ZPLEASANTPERSPECTIVESCORE AS 'zCompAssetAttr-Pleasant Perspective Score', + zCompAssetAttr.ZPLEASANTPOSTPROCESSINGSCORE AS 'zCompAssetAttr-Pleasant Post Processing Score', + zCompAssetAttr.ZPLEASANTREFLECTIONSSCORE AS 'zCompAssetAttr-Pleasant Reflection Score', + zCompAssetAttr.ZPLEASANTSYMMETRYSCORE AS 'zCompAssetAttrPleasant Symmetry Score', + zCompAssetAttr.ZSHARPLYFOCUSEDSUBJECTSCORE AS 'zCompAssetAttr-Sharply Focused Subject Score', + zCompAssetAttr.ZTASTEFULLYBLURREDSCORE AS 'zCompAssetAttr-Tastfully Blurred Score', + zCompAssetAttr.ZWELLCHOSENSUBJECTSCORE AS 'zCompAssetAttr-Well Chosen Subject Score', + zCompAssetAttr.ZWELLFRAMEDSUBJECTSCORE AS 'zCompAssetAttr-Well Framed Subject Score', + zCompAssetAttr.ZWELLTIMEDSHOTSCORE AS 'zCompAssetAttr-Well Timeed Shot Score', + zCldRes.ZASSETUUID AS 'zCldRes-Asset UUID-4TableStart', + zCldRes.ZCLOUDLOCALSTATE AS 'zCldRes-Cloud Local State', + zCldRes.ZFILESIZE AS 'zCldRes-File Size', + zCldRes.ZHEIGHT AS 'zCldRes-Height', + zCldRes.ZISAVAILABLE AS 'zCldRes-Is Available', + zCldRes.ZISLOCALLYAVAILABLE AS 'zCldRes-Is Locally Available', + zCldRes.ZPREFETCHCOUNT AS 'zCldRes-Prefetch Count', + zCldRes.ZSOURCETYPE AS 'zCldRes-Source Type', + zCldRes.ZTYPE AS 'zCldRes-Type', + zCldRes.ZWIDTH AS 'zCldRes-Width', + zCldRes.ZDATECREATED AS 'zCldRes-Date Created', + zCldRes.ZLASTONDEMANDDOWNLOADDATE AS 'zCldRes-Last OnDemand Download Date', + zCldRes.ZLASTPREFETCHDATE AS 'zCldRes-Last Prefetch Date', + zCldRes.ZPRUNEDAT AS 'zCldRes-Prunedat', + zCldRes.ZFILEPATH AS 'zCldRes-File Path', + zCldRes.ZFINGERPRINT AS 'zCldRes-Fingerprint', + zCldRes.ZITEMIDENTIFIER AS 'zCldRes-Item ID', + zCldRes.ZUNIFORMTYPEIDENTIFIER AS 'zCldRes-UniID', + zUserFeedback.ZUUID AS 'zUserFeedback-UUID-4TableStart', + zUserFeedback.ZFEATURE AS 'zUserFeedback-Feature', + zUserFeedback.ZTYPE AS 'zUserFeedback-Type', + zUserFeedback.ZLASTMODIFIEDDATE AS 'zUserFeedback-Last Modified Date', + zUserFeedback.ZCONTEXT AS 'zUserFeedback-Context', + zUserFeedback.ZCLOUDLOCALSTATE AS 'zUserFeedback-Cloud Local State', + zUserFeedback.ZCLOUDDELETESTATE AS 'zUserFeedback-Cloud Delete State', + zUserFeedback.ZCREATIONTYPE AS 'zUserFeedback - Creation Type', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT', + zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT', + zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK', + zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', + zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID', + zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', + zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', + zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier', + zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint', + zAlbumList.Z_PK AS 'zAlbumList-zPK= Album List Key', + zAlbumList.Z_ENT AS 'zAlbumList-zENT', + zAlbumList.Z_OPT AS 'zAlbumList-zOPT', + zAlbumList.ZIDENTIFIER AS 'zAlbumList-ID Key', + zAlbumList.ZUUID AS 'zAlbumList-UUID', + zAsset.Z_PK AS 'zAsset-zPK', + zAsset.Z_ENT AS 'zAsset-zENT', + zAsset.Z_OPT AS 'zAsset-zOPT', + zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', + zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK', + zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK', + zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key', + zAsset.ZCLOUDFEEDASSETSENTRY AS 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK', + zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', + zAsset.ZMOMENTSHARE AS 'zAsset-Moment Share Key= zShare-zPK', + zAsset.ZMOMENT AS 'zAsset-zMoment Key= zMoment-zPK', + zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key', + zAsset.ZHIGHLIGHTBEINGASSETS AS 'zAsset-Highlight Being Assets-HBA Key', + zAsset.ZHIGHLIGHTBEINGEXTENDEDASSETS AS 'zAsset-Highlight Being Extended Assets-HBEA Key', + zAsset.ZHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Highlight Being Key Asset Private-HBKAP Key', + zAsset.ZHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Highlight Being Key Asset Shared-HBKAS Key', + zAsset.ZHIGHLIGHTBEINGSUMMARYASSETS AS 'zAsset-Highligh Being Summary Assets-HBSA Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGASSETS AS 'zAsset-Day Group Highlight Being Assets-DGHBA Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGEXTENDEDASSETS AS 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGSUMMARYASSETS AS 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key', + zAsset.ZMONTHHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key', + zAsset.ZMONTHHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key', + zAsset.ZYEARHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key', + zAsset.ZYEARHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key', + zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score', + zAsset.ZICONICSCORE AS 'zAsset-Iconic Score', + zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key', + zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb', + zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID', + zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID', + zAssetAnalyState.Z_PK AS 'zAssetAnalyState-zPK', + zAssetAnalyState.Z_ENT AS 'zAssetAnalyState-zEnt', + zAssetAnalyState.Z_OPT AS 'zAssetAnalyState-zOpt', + zAssetAnalyState.ZASSET AS 'zAssetAnalyState-Asset= zAsset-zPK', + zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID', + zAssetContrib.Z_PK AS 'zAsstContrib-zPK', + zAssetContrib.Z_ENT AS 'zAsstContrib-zEnt', + zAssetContrib.Z_OPT AS 'zAsstContrib-zOpt', + zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS AS 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK', + zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK', + zAssetDes.Z_PK AS 'zAssetDes-zPK', + zAssetDes.Z_ENT AS 'zAssetDes-zENT', + zAssetDes.Z_OPT AS 'zAssetDes-zOPT', + zAssetDes.ZASSETATTRIBUTES AS 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK', + zCharRecogAttr.Z_PK AS 'zCharRecogAttr-zPK', + zCharRecogAttr.Z_ENT AS 'zCharRecogAttr-zENT', + zCharRecogAttr.Z_OPT AS 'zCharRecogAttr-zOPT', + zCharRecogAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK', + zCldFeedEnt.Z_PK AS 'zCldFeedEnt-zPK= zCldShared keys', + zCldFeedEnt.Z_ENT AS 'zCldFeedEnt-zENT', + zCldFeedEnt.Z_OPT AS 'zCldFeedEnt-zOPT', + zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID', + zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID', + zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID', + zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master', + zCldMast.Z_ENT AS 'zCldMast-zENT', + zCldMast.Z_OPT AS 'zCldMast-zOPT', + zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK', + zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb', + zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', + CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT', + CMzCldMastMedData.Z_OPT AS 'CMzCldMastMedData-zOPT', + CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK', + AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', + AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT', + AAAzCldMastMedData.Z_OPT AS 'AAAzCldMastMedData-zOPT', + AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key', + AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK', + zCldRes.Z_PK AS 'zCldRes-zPK', + zCldRes.Z_ENT AS 'zCldRes-zENT', + zCldRes.Z_OPT AS 'zCldRes-zOPT', + zCldRes.ZASSET AS 'zCldRes-Asset= zAsset-zPK', + zCldRes.ZCLOUDMASTER AS 'zCldRes-Cloud Master= zCldMast-zPK', + zCldRes.ZASSETUUID AS 'zCldRes-Asset UUID', + zCldShareAlbumInvRec.Z_PK AS 'zCldShareAlbumInvRec-zPK', + zCldShareAlbumInvRec.Z_ENT AS 'zCldShareAlbumInvRec-zEnt', + zCldShareAlbumInvRec.Z_OPT AS 'zCldShareAlbumInvRec-zOpt', + zCldShareAlbumInvRec.ZALBUM AS 'zCldShareAlbumInvRec-Album Key', + zCldShareAlbumInvRec.Z_FOK_ALBUM AS 'zCldShareAlbumInvRec-FOK Album Key', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID', + zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID', + zCldSharedComment.Z_PK AS 'zCldSharedComment-zPK', + zCldSharedComment.Z_ENT AS 'zCldSharedComment-zENT', + zCldSharedComment.Z_OPT AS 'zCldSharedComment-zOPT', + zCldSharedComment.ZCOMMENTEDASSET AS 'zCldSharedComment-Commented Asset Key= zAsset-zPK', + zCldSharedComment.ZCLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK', + zCldSharedComment.Z_FOK_CLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key', + zCldSharedCommentLiked.ZLIKEDASSET AS 'zCldSharedComment-Liked Asset Key= zAsset-zPK', + zCldSharedCommentLiked.ZCLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-CldFeedLikeCommentEntry Key', + zCldSharedCommentLiked.Z_FOK_CLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key', + zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID', + zCompAssetAttr.Z_PK AS 'zCompAssetAttr-zPK', + zCompAssetAttr.Z_ENT AS 'zCompAssetAttr-zEnt', + zCompAssetAttr.Z_OPT AS 'zCompAssetAttr-zOpt', + zCompAssetAttr.ZASSET AS 'zCompAssetAttr-Asset Key', + zDetFace.Z_PK AS 'zDetFace-zPK', + zDetFace.Z_ENT AS 'zDetFace-zEnt', + zDetFace.Z_OPT AS 'zDetFace.zOpt', + zDetFace.ZASSETFORFACE AS 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face', + zDetFace.ZPERSONFORFACE AS 'zDetFace-PersonForFace= zPerson-zPK', + zDetFace.ZPERSONBEINGKEYFACE AS 'zDetFace-Person Being Key Face', + zDetFace.ZFACEPRINT AS 'zDetFace-Face Print', + zDetFace.ZFACEGROUPBEINGKEYFACE AS 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK', + zDetFace.ZFACEGROUP AS 'zDetFace-FaceGroup= zDetFaceGroup-zPK', + zDetFace.ZUUID AS 'zDetFace-UUID', + zDetFaceGroup.Z_PK AS 'zDetFaceGroup-zPK', + zDetFaceGroup.Z_ENT AS 'zDetFaceGroup-zENT', + zDetFaceGroup.Z_OPT AS 'zDetFaceGroup-zOPT', + zDetFaceGroup.ZASSOCIATEDPERSON AS 'zDetFaceGroup-AssocPerson= zPerson-zPK', + zDetFaceGroup.ZKEYFACE AS 'zDetFaceGroup-KeyFace= zDetFace-zPK', + zDetFaceGroup.ZUUID AS 'zDetFaceGroup-UUID', + zDetFacePrint.Z_PK AS 'zDetFacePrint-zPK', + zDetFacePrint.Z_ENT AS 'zDetFacePrint-zEnt', + zDetFacePrint.Z_OPT AS 'zDetFacePrint-zOpt', + zDetFacePrint.ZFACE AS 'zDetFacePrint-Face Key', + zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes', + zExtAttr.Z_ENT AS 'zExtAttr-zENT', + zExtAttr.Z_OPT AS 'zExtAttr-zOPT', + zExtAttr.ZASSET AS 'zExtAttr-Asset Key', + zFaceCrop.Z_PK AS 'zFaceCrop-zPK', + zFaceCrop.Z_ENT AS 'zFaceCrop-zEnt', + zFaceCrop.Z_OPT AS 'zFaceCrop-zOpt', + zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key', + zFaceCrop.ZINVALIDMERGECANDIDATEPERSONUUID AS 'zFaceCrop-Invalid Merge Canidate Person UUID', + zFaceCrop.ZPERSON AS 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key', + zFaceCrop.ZFACE AS 'zFaceCrop-Face Key', + zFaceCrop.ZUUID AS 'zFaceCrop-UUID', + zGenAlbum.Z_PK AS 'zGenAlbum-zPK=26AlbumLists= 26Albums', + zGenAlbum.Z_ENT AS 'zGenAlbum-zENT', + zGenAlbum.Z_OPT AS 'zGenAlbum-zOpt', + zGenAlbum.ZKEYASSET AS 'zGenAlbum-Key Asset-Key zAsset-zPK', + zGenAlbum.ZSECONDARYKEYASSET AS 'zGenAlbum-Secondary Key Asset', + zGenAlbum.ZTERTIARYKEYASSET AS 'zGenAlbum-Tertiary Key Asset', + zGenAlbum.ZCUSTOMKEYASSET AS 'zGenAlbum-Custom Key Asset', + zGenAlbum.ZPARENTFOLDER AS 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK', + zGenAlbum.Z_FOK_PARENTFOLDER AS 'zGenAlbum-FOK Parent Folder', + zGenAlbum.ZSYNDICATE AS 'zGenAlbum-zSyndicate', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID', + SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud_GUID = store.cloudphotodb', + SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID', + SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID', + zIntResou.Z_PK AS 'zIntResou-zPK', + zIntResou.Z_ENT AS 'zIntResou-zENT', + zIntResou.Z_OPT AS 'zIntResou-zOPT', + zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint', + zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', + zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata', + zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt', + zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt', + zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK', + zMemory.Z_PK AS 'zMemory-zPK', + zMemory.Z_ENT AS 'zMemory-zENT', + zMemory.Z_OPT AS 'zMemory-zOPT', + zMemory.ZKEYASSET AS 'zMemory-Key Asset= zAsset-zPK', + zMemory.ZUUID AS 'zMemory-UUID', + zMoment.Z_PK AS 'zMoment-zPK', + zMoment.Z_ENT AS 'zMoment-zENT', + zMoment.Z_OPT AS 'zMoment-zOPT', + zMoment.ZHIGHLIGHT AS 'zMoment-Highlight Key', + zMoment.ZUUID AS 'zMoment-UUID', + zPerson.Z_PK AS 'zPerson-zPK=zDetFace-Person', + zPerson.Z_ENT AS 'zPerson-zEnt', + zPerson.Z_OPT AS 'zPerson-zOpt', + zPerson.ZSHAREPARTICIPANT AS 'zPerson-Share Participant= zSharePartic-zPK', + zPerson.ZKEYFACE AS 'zPerson-KeyFace=zDetFace-zPK', + zPerson.ZASSOCIATEDFACEGROUP AS 'zPerson-Assoc Face Group Key', + zPerson.ZPERSONUUID AS 'zPerson-Person UUID', + zPhotoAnalysisAssetAttr.Z_PK AS 'zPhotoAnalysisAssetAttr-zPK', + zPhotoAnalysisAssetAttr.Z_ENT AS 'zPhotoAnalysisAssetAttr-zEnt', + zPhotoAnalysisAssetAttr.Z_OPT AS 'zPhotoAnalysisAssetAttr-zOpt', + zPhotoAnalysisAssetAttr.ZASSET AS 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK', + zSceneP.Z_PK AS 'zSceneP-zPK', + zSceneP.Z_ENT AS 'zSceneP-zENT', + zSceneP.Z_OPT AS 'zSceneP-zOPT', + zShare.Z_PK AS 'zShare-zPK', + zShare.Z_ENT AS 'zShare-zENT', + zShare.Z_OPT AS 'zShare-zOPT', + zShare.ZUUID AS 'zShare-UUID', + SPLzShare.ZUUID AS 'SPLzShare-UUID', + zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID = store.cloudphotodb', + zSharePartic.Z_PK AS 'zSharePartic-zPK', + zSharePartic.Z_ENT AS 'zSharePartic-zENT', + zSharePartic.Z_OPT AS 'zSharePartic-zOPT', + zSharePartic.ZSHARE AS 'zSharePartic-Share Key= zShare-zPK', + zSharePartic.ZPERSON AS 'zSharePartic-Person= zPerson-zPK', + zSharePartic.ZUUID AS 'zSharePartic-UUID', + SBKAzSugg.Z_PK AS 'SBKAzSugg-zPK', + SBKAzSugg.Z_ENT AS 'SBKAzSugg-zENT', + SBKAzSugg.Z_OPT AS 'SBKAzSugg-zOPT', + SBKAzSugg.ZUUID AS 'SBKAzSugg-UUID', + SBRAzSugg.Z_PK AS 'SBRAzSugg-zPK', + SBRAzSugg.Z_ENT AS 'SBRAzSugg-zENT', + SBRAzSugg.Z_OPT AS 'SBRAzSugg-zOPT', + SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID', + z3SuggBRA.Z_3REPRESENTATIVEASSETS1 AS 'z3SuggBRA-3RepAssets1', + z3SuggBRA.Z_58SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-58SuggBeingRepAssets', + z3SuggBKA.Z_58SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK', + z3SuggBKA.Z_3KEYASSETS AS 'z3SuggBKA-3KeyAssets= zAsset-zPK', + zUnmAdj.Z_PK AS 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key', + zUnmAdj.Z_OPT AS 'zUnmAdj-zOPT', + zUnmAdj.Z_ENT AS 'zUnmAdj-zENT', + zUnmAdj.ZASSETATTRIBUTES AS 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK', + zUnmAdj.ZUUID AS 'zUnmAdj-UUID', + zUnmAdj.ZOTHERADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Other Adjustments Fingerprint', + zUnmAdj.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Similar to Orig Adjustments Fingerprint', + zUserFeedback.Z_PK AS 'zUserFeedback-zPK', + zUserFeedback.Z_ENT AS 'zUserFeedback-zENT', + zUserFeedback.Z_OPT AS 'zUserFeedback-zOPT', + zUserFeedback.ZPERSON AS 'zUserFeedback-Person= zPerson-zPK', + zUserFeedback.ZMEMORY AS 'zUserFeedback-Memory= zMemory-zPK', + zUserFeedback.ZUUID AS 'zUserFeedback-UUID', + zVisualSearchAttr.Z_PK AS 'zVisualSearchAttr-zPK', + zVisualSearchAttr.Z_ENT AS 'zVisualSearchAttr-zENT', + zVisualSearchAttr.Z_OPT AS 'zVisualSearchAttr-zOPT', + zVisualSearchAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK', + z27AlbumLists.Z_27ALBUMS AS 'z27AlbumList-27Albums= zGenAlbum-zPK', + z27AlbumLists.Z_2ALBUMLISTS AS 'z27AlbumList-Album List Key', + z27AlbumLists.Z_FOK_27ALBUMS AS 'z27AlbumList-FOK27Albums Key', + z28Assets.Z_28ALBUMS AS 'z28Assets-28Albums= zGenAlbum-zPK', + z28Assets.Z_3ASSETS AS 'z28Assets-3Asset Key= zAsset-zPK in the Album', + z28Assets.Z_FOK_3ASSETS AS 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY', + z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AS 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK', + z3MemoryBCAs.Z_3CURATEDASSETS AS 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK', + z3MemoryBCAs.Z_44MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK', + z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK', + z3MemoryBECAs.Z_44MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK', + z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AS 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK', + z3MemoryBRAs.Z_44MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK', + z3MemoryBUCAs.Z_3USERCURATEDASSETS AS 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK', + z3MemoryBUCAs.Z_44MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK', + z3MemoryBCUAs.Z_44MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-44Memories Being Custom User Assets', + z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-3Custom User Assets', + z3MemoryBCUAs.Z_FOK_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-FOK-3Custom User Assets' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK + LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT + LEFT JOIN Z_28ASSETS z28Assets ON z28Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z28Assets.Z_28ALBUMS + LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK + LEFT JOIN Z_27ALBUMLISTS z27AlbumLists ON z27AlbumLists.Z_27ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z27AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER + LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION + LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA + LEFT JOIN ZCLOUDRESOURCE zCldRes ON zCldRes.ZCLOUDMASTER = zCldMast.Z_PK + LEFT JOIN ZASSETANALYSISSTATE zAssetAnalyState ON zAssetAnalyState.ZASSET = zAsset.Z_PK + LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK + LEFT JOIN ZPHOTOANALYSISASSETATTRIBUTES zPhotoAnalysisAssetAttr ON zPhotoAnalysisAssetAttr.ZASSET = zAsset.Z_PK + LEFT JOIN ZCOMPUTEDASSETATTRIBUTES zCompAssetAttr ON zCompAssetAttr.Z_PK = zAsset.ZCOMPUTEDATTRIBUTES + LEFT JOIN ZCHARACTERRECOGNITIONATTRIBUTES zCharRecogAttr ON zCharRecogAttr.Z_PK = zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES + LEFT JOIN ZVISUALSEARCHATTRIBUTES zVisualSearchAttr ON zVisualSearchAttr.Z_PK = zMedAnlyAstAttr.ZVISUALSEARCHATTRIBUTES + LEFT JOIN ZCLOUDFEEDENTRY zCldFeedEnt ON zAsset.ZCLOUDFEEDASSETSENTRY = zCldFeedEnt.Z_PK + LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedComment ON zAsset.Z_PK = zCldSharedComment.ZCOMMENTEDASSET + LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET + LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM + LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE + LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.ZSHARE = SPLzShare.Z_PK + LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE + LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK + LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK + LEFT JOIN ZDETECTEDFACE zDetFace ON zAsset.Z_PK = zDetFace.ZASSETFORFACE + LEFT JOIN ZPERSON zPerson ON zPerson.Z_PK = zDetFace.ZPERSONFORFACE + LEFT JOIN ZDETECTEDFACEPRINT zDetFacePrint ON zDetFacePrint.ZFACE = zDetFace.Z_PK + LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON + LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP + LEFT JOIN Z_3MEMORIESBEINGCURATEDASSETS z3MemoryBCAs ON zAsset.Z_PK = z3MemoryBCAs.Z_3CURATEDASSETS + LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_44MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_44MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_44MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_44MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AND z3MemoryBRAs.Z_44MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_44MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK + LEFT JOIN ZUSERFEEDBACK zUserFeedback ON zUserFeedback.ZMEMORY = zMemory.Z_PK + LEFT JOIN ZMOMENT zMoment ON zMoment.Z_PK = zAsset.ZMOMENT + LEFT JOIN Z_3SUGGESTIONSBEINGKEYASSETS z3SuggBKA ON z3SuggBKA.Z_3KEYASSETS = zAsset.Z_PK + LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_58SUGGESTIONSBEINGKEYASSETS + LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS1 = zAsset.Z_PK + LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_58SUGGESTIONSBEINGREPRESENTATIVEASSETS + ORDER BY zAsset.ZADDEDDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], + row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], + row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], + row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], + row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], + row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], + row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], + row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], + row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], + row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], + row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], + row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], + row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], + row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], + row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], + row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], + row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], + row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], + row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], + row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], + row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], + row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], + row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], + row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], + row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], + row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], + row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], + row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], + row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], + row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], + row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], + row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], + row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], + row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], + row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], + row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], + row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], + row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], + row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], + row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], + row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], + row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], + row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], + row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], + row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], + row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], + row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], + row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], + row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], + row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], + row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], + row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], + row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], + row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], + row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], + row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], + row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], + row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], + row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], + row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], + row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], + row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], + row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], + row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], + row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], + row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], + row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], + row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], + row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], + row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], + row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], + row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], + row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], + row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], + row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], + row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], + row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], + row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], + row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], + row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], + row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], + row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], + row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], + row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], + row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], + row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], + row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], + row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], + row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], + row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], + row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], + row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], + row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], + row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], + row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], + row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], + row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], + row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], + row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], + row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], + row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093])) + + data_headers = (('zAsset-Added Date-0', 'datetime'), + 'zAsset- SortToken -CameraRoll-1', + 'zAsset Complete-2', + 'zAsset-zPK-4QueryStart-3', + 'zAddAssetAttr-zPK-4QueryStart-4', + 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', + 'zAddAssetAttr-Master Fingerprint-4TableStart-6', + 'zIntResou-Fingerprint-4TableStart-7', + 'zAsset-Bundle Scope-8', + 'zAsset-Syndication State-9', + 'zAsset-Cloud is My Asset-10', + 'zAsset-Cloud is deletable-Asset-11', + 'zAsset-Cloud_Local_State-12', + 'zAsset-Visibility State-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zExtAttr-Lens Model-16', + 'zExtAttr-Flash Fired-17', + 'zExtAttr-Focal Lenght-18', + 'zExtAttr-Focal Lenth in 35MM-19', + 'zExtAttr-Digital Zoom Ratio-20', + 'zAsset-Derived Camera Capture Device-21', + 'zAddAssetAttr-Camera Captured Device-22', + 'zAddAssetAttr-Imported by-23', + 'zCldMast-Imported By-24', + 'zAddAssetAttr.Imported by Bundle Identifier-25', + 'zAddAssetAttr-Imported By Display Name-26', + 'zCldMast-Imported by Bundle ID-27', + 'zCldMast-Imported by Display Name-28', + 'zAsset-Saved Asset Type-29', + 'zAsset-Directory-Path-30', + 'zAsset-Filename-31', + 'zAddAssetAttr- Original Filename-32', + 'zCldMast- Original Filename-33', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-34', + 'zAsset-Active Library Scope Participation State -4QueryStart-35', + 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36', + 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-37', + 'SPLzShare-Cloud Video Count-SPL -4QueryStart-38', + ('zAddAssetAttr-Date Created Source-39', 'datetime'), + ('zAsset-Date Created-40', 'datetime'), + ('zCldMast-Creation Date-41', 'datetime'), + ('zIntResou-CldMst Date Created-42', 'datetime'), + 'zAddAssetAttr-Time Zone Name-43', + 'zAddAssetAttr-Time Zone Offset-44', + 'zAddAssetAttr-Inferred Time Zone Offset-45', + 'zAddAssetAttr-EXIF-String-46', + ('zAsset-Modification Date-47', 'datetime'), + ('zAddAssetAttr-Last Viewed Date-48', 'datetime'), + ('zAsset-Last Shared Date-49', 'datetime'), + 'zCldMast-Cloud Local State-50', + ('zCldMast-Import Date-51', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-52', 'datetime'), + 'zAddAssetAttr-Import Session ID-4QueryStart-53', + ('zAddAssetAttr-Alt Import Image Date-54', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-55', + ('zAsset-Cloud Batch Publish Date-56', 'datetime'), + ('zAsset-Cloud Server Publish Date-57', 'datetime'), + 'zAsset-Cloud Download Requests-58', + 'zAsset-Cloud Batch ID-59', + 'zAddAssetAttr-Upload Attempts-60', + 'zAsset-Latitude-61', + 'zExtAttr-Latitude-62', + 'zAsset-Longitude-63', + 'zExtAttr-Longitude-64', + 'zAddAssetAttr-GPS Horizontal Accuracy-65', + 'zAddAssetAttr-Location Hash-66', + 'zAddAssetAttr-Shifted Location Valid-67', + 'zAddAssetAttr-Shifted Location Data-68', + 'zAddAssetAttr-Reverse Location Is Valid-69', + 'zAddAssetAttr-Reverse Location Data-70', + 'ParentzGenAlbum-UUID-4QueryStart-71', + 'zGenAlbum-UUID-4QueryStart-72', + 'SWYConverszGenAlbum-UUID-4QueryStart-73', + 'ParentzGenAlbum-Cloud GUID-4QueryStart-74', + 'zGenAlbum-Cloud GUID-4QueryStart-75', + 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-76', + 'zCldShareAlbumInvRec-Album GUID-4QueryStart-77', + 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-78', + 'zGenAlbum-Project Render UUID-4QueryStart-79', + 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-80', + 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-81', + 'zGenAlbum-Cloud_Local_State-4QueryStart-82', + 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-83', + ('ParentzGenAlbum- Creation Date- 4QueryStart-84', 'datetime'), + ('zGenAlbum- Creation Date- 4QueryStart-85', 'datetime'), + ('SWYConverszGenAlbum- Creation Date- 4QueryStart-86', 'datetime'), + ('zGenAlbum- Cloud Creation Date- 4QueryStart-87', 'datetime'), + ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-88', 'datetime'), + ('zGenAlbum- Start Date- 4QueryStart-89', 'datetime'), + ('SWYConverszGenAlbum- Start Date- 4QueryStart-90', 'datetime'), + ('zGenAlbum- End Date- 4QueryStart-91', 'datetime'), + ('SWYConverszGenAlbum- End Date- 4QueryStart-92', 'datetime'), + ('zGenAlbum-Cloud Subscription Date- 4QueryStart-93', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-94', 'datetime'), + 'ParentzGenAlbum- Title- 4QueryStart-95', + 'zGenAlbum- Title-User&System Applied- 4QueryStart-96', + 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-97', + 'zGenAlbum-Import Session ID-SWY- 4QueryStart-98', + 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-99', + 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-100', + 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-101', + 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-102', + 'SWYConverszGenAlbum- Syndicate-4QueryStart-103', + 'zGenAlbum-zENT- Entity- 4QueryStart-104', + 'ParentzGenAlbum- Kind- 4QueryStart-105', + 'zGenAlbum-Album Kind- 4QueryStart-106', + 'SWYConverszGenAlbum-Album Kind- 4QueryStart-107', + 'AAAzCldMastMedData-zOPT-108', + 'zAddAssetAttr-Media Metadata Type-109', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-110', + 'AAAzCldMastMedData-Data-111', + 'CldMasterzCldMastMedData-zOPT-112', + 'zCldMast-Media Metadata Type-113', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-114', + 'CMzCldMastMedData-Data-115', + 'zAsset-Search Index Rebuild State-116', + 'zAddAssetAttr-Syndication History-117', + 'zMedAnlyAstAttr-Syndication Processing Version-118', + 'zMedAnlyAstAttr-Syndication Processing Value-119', + 'zAsset-Orientation-120', + 'zAddAssetAttr-Original Orientation-121', + 'zAsset-Kind-122', + 'zAsset-Kind-Sub-Type-123', + 'zAddAssetAttr-Cloud Kind Sub Type-124', + 'zAsset-Playback Style-125', + 'zAsset-Playback Variation-126', + 'zAsset-Video Duration-127', + 'zExtAttr-Duration-128', + 'zAsset-Video CP Duration-129', + 'zAddAssetAttr-Video CP Duration Time Scale-130', + 'zAsset-Video CP Visibility State-131', + 'zAddAssetAttr-Video CP Display Value-132', + 'zAddAssetAttr-Video CP Display Time Scale-133', + 'zIntResou-Datastore Class ID-134', + 'zAsset-Cloud Placeholder Kind-135', + 'zIntResou-Local Availability-136', + 'zIntResou-Local Availability Target-137', + 'zIntResou-Cloud Local State-138', + 'zIntResou-Remote Availability-139', + 'zIntResou-Remote Availability Target-140', + 'zIntResou-Transient Cloud Master-141', + 'zIntResou-Side Car Index-142', + 'zIntResou- File ID-143', + 'zIntResou-Version-144', + 'zAddAssetAttr- Original-File-Size-145', + 'zIntResou-Resource Type-146', + 'zIntResou-Datastore Sub-Type-147', + 'zIntResou-Cloud Source Type-148', + 'zIntResou-Data Length-149', + 'zIntResou-Recipe ID-150', + ('zIntResou-Cloud Last Prefetch Date-151', 'datetime'), + 'zIntResou-Cloud Prefetch Count-152', + ('zIntResou- Cloud-Last-OnDemand Download-Date-153', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-154', + 'zIntResou-Compact-UTI-155', + 'zAsset-Uniform Type ID-156', + 'zAsset-Original Color Space-157', + 'zCldMast-Uniform_Type_ID-158', + 'zCldMast-Full Size JPEG Source-159', + 'zAsset-HDR Gain-160', + 'zAsset-zHDR_Type-161', + 'zExtAttr-Codec-162', + 'zIntResou-Codec Four Char Code Name-163', + 'zCldMast-Codec Name-164', + 'zCldMast-Video Frame Rate-165', + 'zCldMast-Placeholder State-166', + 'zAsset-Depth_Type-167', + 'zAsset-Avalanche UUID-4TableStart-168', + 'zAsset-Avalanche_Pick_Type-BurstAsset-169', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-170', + 'zAddAssetAttr-Cloud Recovery State-171', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-172', + 'zAsset-Deferred Processing Needed-173', + 'zAsset-Video Deferred Processing Needed-174', + 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-175', + 'zAddAssetAttr-Deferred Processing Candidate Options-176', + 'zAsset-Has Adjustments-Camera-Effects-Filters-177', + 'zUnmAdj-UUID-4TableStart-178', + ('zAsset-Adjustment Timestamp-179', 'datetime'), + ('zUnmAdj-Adjustment Timestamp-180', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-181', + 'zUnmAdj-Editor Localized Name-182', + 'zUnmAdj-Adjustment Format ID-183', + 'zAddAssetAttr-Montage-184', + 'zUnmAdj-Adjustment Render Types-185', + 'zUnmAdj-Adjustment Format Version-186', + 'zUnmAdj-Adjustment Base Image Format-187', + 'zAsset-Favorite-188', + 'zAsset-Hidden-189', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-190', + ('zAsset-Trashed Date-191', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-192', + 'zAsset-Delete-Reason-193', + 'zIntResou-Trash State-194', + ('zIntResou-Trashed Date-195', 'datetime'), + 'zAsset-Cloud Delete State-196', + 'zIntResou-Cloud Delete State-197', + 'zAddAssetAttr-PTP Trashed State-198', + 'zIntResou-PTP Trashed State-199', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-200', + ('zMedAnlyAstAttr-Media Analysis Timestamp-201', 'datetime'), + ('zAsset-Analysis State Modification Date-202', 'datetime'), + 'zAddAssetAttr- Pending View Count-203', + 'zAddAssetAttr- View Count-204', + 'zAddAssetAttr- Pending Play Count-205', + 'zAddAssetAttr- Play Count-206', + 'zAddAssetAttr- Pending Share Count-207', + 'zAddAssetAttr- Share Count-208', + 'zAddAssetAttr-Allowed for Analysis-209', + 'zAddAssetAttr-Scene Analysis Version-210', + 'zAddAssetAttr-Scene Analysis is From Preview-211', + ('zAddAssetAttr-Scene Analysis Timestamp-212', 'datetime'), + 'zAsset-Duplication Asset Visibility State-213', + 'zAddAssetAttr-Destination Asset Copy State-214', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-215', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-216', + 'zCldMast-Source Master For Duplication Scope ID-217', + 'zAddAssetAttr-Source Asset For Duplication ID-218', + 'zCldMast-Source Master for Duplication ID-219', + 'zAddAssetAttr-Variation Suggestions States-220', + 'zAsset-High Frame Rate State-221', + 'zAsset-Video Key Frame Time Scale-222', + 'zAsset-Video Key Frame Value-223', + 'zExtAttr-ISO-224', + 'zExtAttr-Metering Mode-225', + 'zExtAttr-Sample Rate-226', + 'zExtAttr-Track Format-227', + 'zExtAttr-White Balance-228', + 'zExtAttr-Aperture-229', + 'zExtAttr-BitRate-230', + 'zExtAttr-Exposure Bias-231', + 'zExtAttr-Frames Per Second-232', + 'zExtAttr-Shutter Speed-233', + 'zExtAttr-Slush Scene Bias-234', + 'zExtAttr-Slush Version-235', + 'zExtAttr-Slush Preset-236', + 'zExtAttr-Slush Warm Bias-237', + 'zAsset-Height-238', + 'zAddAssetAttr-Original Height-239', + 'zIntResou-Unoriented Height-240', + 'zAsset-Width-241', + 'zAddAssetAttr-Original Width-242', + 'zIntResou-Unoriented Width-243', + 'zShare-Thumbnail Image Data-244', + 'SPLzShare-Thumbnail Image Data-245', + 'zAsset-Thumbnail Index-246', + 'zAddAssetAttr-Embedded Thumbnail Height-247', + 'zAddAssetAttr-Embedded Thumbnail Length-248', + 'zAddAssetAttr-Embedded Thumbnail Offset-249', + 'zAddAssetAttr-Embedded Thumbnail Width-250', + 'zAsset-Packed Acceptable Crop Rect-251', + 'zAsset-Packed Badge Attributes-252', + 'zAsset-Packed Preferred Crop Rect-253', + 'zAsset-Curation Score-254', + 'zAsset-Camera Processing Adjustment State-255', + 'zAsset-Depth Type-256', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-257', + 'zAddAssetAttr-Orig Resource Choice-258', + 'zAsset-Spatial Type-259', + 'zAddAssetAttr-Spatial Over Capture Group ID-260', + 'zAddAssetAttr-Place Annotation Data-261', + 'zAddAssetAttr-Distance Identity-262', + 'zAddAssetAttr-Edited IPTC Attributes-263', + 'zAssetDes-Long Description-264', + 'zAddAssetAttr-Asset Description-265', + 'zAddAssetAttr-Title-Comments via Cloud Website-266', + 'zAddAssetAttr-Accessibility Description-267', + 'zAddAssetAttr-Photo Stream Tag ID-268', + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-269', + ('zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-270', 'datetime'), + ('zCldFeedEnt-Entry Date-271', 'datetime'), + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-272', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-273', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-274', + 'zCldFeedEnt-Entry Priority Number-275', + 'zCldFeedEnt-Entry Type Number-276', + 'zCldSharedComment-Cloud GUID-4TableStart-277', + ('zCldSharedComment-Date-278', 'datetime'), + ('zCldSharedComment-Comment Client Date-279', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-280', 'datetime'), + 'zCldSharedComment-Type-281', + 'zCldSharedComment-Comment Text-282', + 'zCldSharedComment-Commenter Hashed Person ID-283', + 'zCldSharedComment-Batch Comment-284', + 'zCldSharedComment-Is a Caption-285', + 'zAsset-Cloud Has Comments by Me-286', + 'zCldSharedComment-Is My Comment-287', + 'zCldSharedComment-Is Deletable-288', + 'zAsset-Cloud Has Comments Conversation-289', + 'zAsset-Cloud Has Unseen Comments-290', + 'zCldSharedComment-Liked-291', + 'zAddAssetAttr-Share Type-292', + 'zAsset-Library Scope Share State- StillTesting-293', + 'zAsset-Active Library Scope Participation State-294', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-295', + 'zShare-UUID-CMM-4TableStart-296', + 'SPLzShare-UUID-SPL-4TableStart-297', + 'zShare-zENT-CMM-298', + 'SPLzShare-zENT-SPL-299', + 'zSharePartic-z54SHARE-300', + 'SPLzSharePartic-z54SHARE-301', + 'zShare-Status-CMM-302', + 'SPLzShare-Status-SPL-303', + 'zShare-Scope Type-CMM-304', + 'SPLzShare-Scope Type-SPL-305', + 'zShare-Local Publish State-CMM-306', + 'SPLzShare-Local Publish State-SPL-307', + 'zShare-Public Permission-CMM-308', + 'SPLzShare-Public Permission-SPL-309', + 'zShare-Originating Scope ID-CMM-310', + 'SPLzShare-Originating Scope ID-SPL-311', + 'zShare-Scope ID-CMM-312', + 'SPLzShare-Scope ID-SPL-313', + 'zShare-Title-CMM-314', + 'SPLzShare-Title-SPL-315', + 'zShare-Share URL-CMM-316', + 'SPLzShare-Share URL-SPL-317', + ('zShare-Creation Date-CMM-318', 'datetime'), + ('SPLzShare-Creation Date-SPL-319', 'datetime'), + ('zShare-Start Date-CMM-320', 'datetime'), + ('SPLzShare-Start Date-SPL-321', 'datetime'), + ('zShare-End Date-CMM-322', 'datetime'), + ('SPLzShare-End Date-SPL-323', 'datetime'), + ('zShare-Expiry Date-CMM-324', 'datetime'), + ('SPLzShare-Expiry Date-SPL-325', 'datetime'), + 'zShare-Cloud Item Count-CMM-326', + 'SPLzShare-Cloud Item Count-SPL-327', + 'zShare-Asset Count-CMM-328', + 'SPLzShare-Asset Count-SPL-329', + 'zShare-Cloud Photo Count-CMM-330', + 'SPLzShare-Cloud Photo Count-SPL-331', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-332', + 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-333', + 'zShare-Photos Count-CMM-334', + 'SPLzShare-Photos Count-CMM-SPL-335', + 'zShare-Uploaded Photos Count-CMM-336', + 'SPLzShare-Uploaded Photos Count-SPL-337', + 'zShare-Cloud Video Count-CMM-338', + 'SPLzShare-Cloud Video Count-SPL-339', + 'zShare-Videos Count-CMM-340', + 'SPLzShare-Videos Count-SPL-341', + 'zShare-Uploaded Videos Count-CMM-342', + 'SPLzShare-Uploaded Videos Count-SPL-343', + 'zShare-Force Sync Attempted-CMM-344', + 'SPLzShare-Force Sync Attempted-SPL-345', + 'zShare-Cloud Local State-CMM-346', + 'SPLzShare-Cloud Local State-SPL-347', + 'zShare-Scope Syncing State-CMM-348', + 'SPLzShare-Scope Syncing State-SPL-349', + 'zShare-Auto Share Policy-CMM-350', + 'SPLzShare-Auto Share Policy-SPL-351', + 'zShare-Should Notify On Upload Completion-CMM-352', + 'SPLzShare-Should Notify On Upload Completion-SPL-353', + 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-354', + 'zShare-Trashed State-CMM-355', + 'SPLzShare-Trashed State-SPL-356', + 'zShare-Cloud Delete State-CMM-357', + 'SPLzShare-Cloud Delete State-SPL-358', + ('zShare-Trashed Date-CMM-359', 'datetime'), + ('SPLzShare-Trashed Date-SPL-360', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-CMM-361', 'datetime'), + ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL-362', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-CMM-363', 'datetime'), + ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL-364', 'datetime'), + 'zShare-Exit Source-CMM-365', + 'SPLzShare-Exit Source-SPL-366', + 'zShare-SPL_Exit State-CMM-367', + 'SPLzShare-SPL_Exit State-SPL-368', + 'zShare-Exit Type-CMM-369', + 'SPLzShare-Exit Type-SPL-370', + 'zShare-Should Ignor Budgets-CMM-371', + 'SPLzShare-Should Ignor Budgets-SPL-372', + 'zShare-Preview State-CMM-373', + 'SPLzShare-Preview State-SPL-374', + 'zShare-Preview Data-CMM-375', + 'SPLzShare-Preview Data-SPL-376', + 'zShare-Rules-CMM-377', + 'SPLzShare-Rules-SPL-378', + 'zShare-Thumbnail Image Data-CMM-379', + 'SPLzShare-Thumbnail Image Data-SPL-380', + 'zShare-Participant Cloud Update State-CMM-381', + 'SPLzShare-Participant Cloud Update State-SPL-382', + 'zSharePartic-UUID-4TableStart-383', + 'SPLzSharePartic-UUID-4TableStart-384', + 'zSharePartic-Acceptance Status-385', + 'SPLzSharePartic-Acceptance Status-386', + 'zSharePartic-Is Current User-387', + 'SPLzSharePartic-Is Current User-388', + 'zSharePartic-Role-389', + 'SPLzSharePartic-Role-390', + 'zSharePartic-Premission-391', + 'SPLzSharePartic-Premission-392', + 'zSharePartic-Participant ID-393', + 'SPLzSharePartic-Participant ID-394', + 'zSharePartic-User ID-395', + 'SPLzSharePartic-User ID-396', + 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-397', + 'SPLzSharePartic-zPK-4TableStart-398', + 'zSharePartic-zPK-4TableStart-399', + 'zSharePartic-Email Address-400', + 'SPLzSharePartic-Email Address-401', + 'zSharePartic-Phone Number-402', + 'SPLzSharePartic-Phone Number-403', + 'zSharePartic-Exit State-404', + 'SPLzSharePartic-Exit State-405', + 'ParentzGenAlbum-UUID-4TableStart-406', + 'zGenAlbum-UUID-4TableStart-407', + 'SWYConverszGenAlbum-UUID-4TableStart-408', + 'ParentzGenAlbum-Cloud GUID-4TableStart-409', + 'zGenAlbum-Cloud GUID-4TableStart-410', + 'SWYConverszGenAlbum-Cloud GUID-4TableStart-411', + 'zCldShareAlbumInvRec-Album GUID-4TableStart-412', + 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-413', + 'zGenAlbum-Project Render UUID-4TableStart-414', + 'SWYConverszGenAlbum-Project Render UUID-4TableStart-415', + 'zAlbumList-Needs Reordering Number-416', + 'zGenAlbum-zENT- Entity-417', + 'ParentzGenAlbum-Kind-418', + 'zGenAlbum-Album Kind-419', + 'SWYConverszGenAlbum-Album Kind-420', + 'ParentzGenAlbum-Cloud-Local-State-421', + 'zGenAlbum-Cloud_Local_State-422', + 'SWYConverszGenAlbum-Cloud_Local_State-423', + 'ParentzGenAlbum- Title-424', + 'zGenAlbum- Title-User&System Applied-425', + 'SWYConverszGenAlbum- Title -User&System Applied-426', + 'zGenAlbum-Import Session ID-SWY-427', + 'zAsset- Conversation= zGenAlbum_zPK-428', + 'SWYConverszGenAlbum- Import Session ID-SWY-429', + 'zGenAlbum-Imported by Bundle Identifier-430', + 'SWYzGenAlbum-Imported by Bundle Identifier-431', + 'SWYConverszGenAlbum- Syndicate-432', + ('ParentzGenAlbum-Creation Date-433', 'datetime'), + ('zGenAlbum-Creation Date-434', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-435', 'datetime'), + ('zGenAlbum-Cloud Creation Date-436', 'datetime'), + ('SWYConverszGenAlbum-Cloud Creation Date-437', 'datetime'), + ('zGenAlbum-Start Date-438', 'datetime'), + ('SWYConverszGenAlbum-Start Date-439', 'datetime'), + ('zGenAlbum-End Date-440', 'datetime'), + ('SWYConverszGenAlbum-End Date-441', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-442', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date-443', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-444', + 'zGenAlbum-Pending Items Count-445', + 'SWYConverszGenAlbum-Pending Items Count-446', + 'ParentzGenAlbum-Pending Items Type-447', + 'zGenAlbum-Pending Items Type-448', + 'SWYConverszGenAlbum-Pending Items Type-449', + 'zGenAlbum- Cached Photos Count-450', + 'SWYConverszGenAlbum- Cached Photos Count-451', + 'zGenAlbum- Cached Videos Count-452', + 'SWYConverszGenAlbum- Cached Videos Count-453', + 'zGenAlbum- Cached Count-454', + 'SWYConverszGenAlbum- Cached Count-455', + 'ParentzGenAlbum-Sync Event Order Key-456', + 'zGenAlbum-Sync Event Order Key-457', + 'SWYConverszGenAlbum-Sync Event Order Key-458', + 'zGenAlbum-Has Unseen Content-459', + 'SWYConverszGenAlbum-Has Unseen Content-460', + 'zGenAlbum-Unseen Asset Count-461', + 'SWYConverszGenAlbum-Unseen Asset Count-462', + 'zGenAlbum-is Owned-463', + 'SWYConverszGenAlbum-is Owned-464', + 'zGenAlbum-Cloud Relationship State-465', + 'SWYConverszGenAlbum-Cloud Relationship State-466', + 'zGenAlbum-Cloud Relationship State Local-467', + 'SWYConverszGenAlbum-Cloud Relationship State Local-468', + 'zGenAlbum-Cloud Owner Mail Key-469', + 'SWYConverszGenAlbum-Cloud Owner Mail Key-470', + 'zGenAlbum-Cloud Owner Frist Name-471', + 'SWYConverszGenAlbum-Cloud Owner Frist Name-472', + 'zGenAlbum-Cloud Owner Last Name-473', + 'SWYConverszGenAlbum-Cloud Owner Last Name-474', + 'zGenAlbum-Cloud Owner Full Name-475', + 'SWYConverszGenAlbum-Cloud Owner Full Name-476', + 'zGenAlbum-Cloud Person ID-477', + 'SWYConverszGenAlbum-Cloud Person ID-478', + 'zAsset-Cloud Owner Hashed Person ID-479', + 'zGenAlbum-Cloud Owner Hashed Person ID-480', + 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-481', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-482', + 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-483', + 'zGenAlbum-Cloud Multi-Contributors Enabled-484', + 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-485', + 'zGenAlbum-Cloud Album Sub Type-486', + 'SWYConverszGenAlbum-Cloud Album Sub Type-487', + ('zGenAlbum-Cloud Contribution Date-488', 'datetime'), + ('SWYConverszGenAlbum-Cloud Contribution Date-489', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-490', 'datetime'), + ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-491', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-492', + 'SWYConverszGenAlbum-Cloud Notification Enabled-493', + 'ParentzGenAlbum-Pinned-494', + 'zGenAlbum-Pinned-495', + 'SWYConverszGenAlbum-Pinned-496', + 'ParentzGenAlbum-Custom Sort Key-497', + 'zGenAlbum-Custom Sort Key-498', + 'SWYConverszGenAlbum-Custom Sort Key-499', + 'ParentzGenAlbum-Custom Sort Ascending-500', + 'zGenAlbum-Custom Sort Ascending-501', + 'SWYConverszGenAlbum-Custom Sort Ascending-502', + 'ParentzGenAlbum-Is Prototype-503', + 'zGenAlbum-Is Prototype-504', + 'SWYConverszGenAlbum-Is Prototype-505', + 'ParentzGenAlbum-Project Document Type-506', + 'zGenAlbum-Project Document Type-507', + 'SWYConverszGenAlbum-Project Document Type-508', + 'ParentzGenAlbum-Custom Query Type-509', + 'zGenAlbum-Custom Query Type-510', + 'SWYConverszGenAlbum-Custom Query Type-511', + 'ParentzGenAlbum-Trashed State-512', + ('ParentzGenAlbum-Trash Date-513', 'datetime'), + 'zGenAlbum-Trashed State-514', + ('zGenAlbum-Trash Date-515', 'datetime'), + 'SWYConverszGenAlbum-Trashed State-516', + ('SWYConverszGenAlbum-Trash Date-517', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-518', + 'zGenAlbum-Cloud Delete State-519', + 'SWYConverszGenAlbum-Cloud Delete State-520', + 'zGenAlbum-Cloud Owner Whitelisted-521', + 'SWYConverszGenAlbum-Cloud Owner Whitelisted-522', + 'zGenAlbum-Cloud Local Public URL Enabled-523', + 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-524', + 'zGenAlbum-Cloud Public URL Enabled-525', + 'zGenAlbum-Public URL-526', + 'SWYConverszGenAlbum-Cloud Public URL Enabled-527', + 'SWYConverszGenAlbum-Public URL-528', + 'zGenAlbum-Key Asset Face Thumb Index-529', + 'SWYConverszGenAlbum-Key Asset Face Thumb Index-530', + 'zGenAlbum-Project Text Extension ID-531', + 'SWYConverszGenAlbum-Project Text Extension ID-532', + 'zGenAlbum-User Query Data-533', + 'SWYConverszGenAlbum-User Query Data-534', + 'zGenAlbum-Custom Query Parameters-535', + 'SWYConverszGenAlbum-Custom Query Parameters-536', + 'zGenAlbum-Project Data-537', + 'SWYConverszGenAlbum-Project Data-538', + 'zGenAlbum-Search Index Rebuild State-539', + 'SWYConverszGenAlbum-Search Index Rebuild State-540', + 'zGenAlbum-Duplicate Type-541', + 'SWYConverszGenAlbum-Duplicate Type-542', + 'zGenAlbum-Privacy State-543', + 'SWYConverszGenAlbum-Privacy State-544', + 'zCldShareAlbumInvRec-zUUID-4TableStart-545', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-546', + 'zCldShareAlbumInvRec-Invitation State Local-547', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-548', + ('zCldShareAlbumInvRec-Subscription Date-549', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-550', + 'zCldShareAlbumInvRec-Invitee Last Name-551', + 'zCldShareAlbumInvRec-Invitee Full Name-552', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-553', + 'zCldShareAlbumInvRec-Invitee Email Key-554', + 'zGenAlbum-Key Asset Face ID-555', + 'zFaceCrop-Face Area Points-556', + 'zAsset-Face Adjustment Version-557', + 'zAddAssetAttr-Face Analysis Version-558', + 'zDetFace-Asset Visible-559', + 'zPerson-Face Count-560', + 'zDetFace-Face Crop-561', + 'zDetFace-Face Algorithm Version-562', + 'zDetFace-Adjustment Version-563', + 'zDetFace-UUID-4TableStart-564', + 'zPerson-Person UUID-4TableStart-565', + 'zPerson - MD ID-566', + 'zPerson - Asset Sort Order-567', + 'zDetFace-Confirmed Face Crop Generation State-568', + 'zDetFace-Manual-569', + 'zDetFace-Detection Type-570', + 'zPerson-Detection Type-571', + 'zDetFace-VIP Model Type-572', + 'zDetFace-Name Source-573', + 'zDetFace-Cloud Name Source-574', + 'zPerson-Merge Candidate Confidence-575', + 'zPerson-Person URI-576', + 'zPerson-Display Name-577', + 'zPerson-Full Name-578', + 'zPerson-Cloud Verified Type-579', + 'zFaceCrop-State-580', + 'zFaceCrop-Type-581', + 'zFaceCrop-UUID-4TableStart-582', + 'zPerson-Type-583', + 'zPerson-Verified Type-584', + 'zPerson-Gender Type-585', + 'zDetFace-Gender Type-586', + 'zDetFace-Center X-587', + 'zDetFace-Center Y-588', + 'zPerson-Age Type Estimate-589', + 'zDetFace-Age Type Estimate-590', + 'zDetFace-Ethnicity Type-591', + 'zDetFace-Skin Tone Type-592', + 'zDetFace-Hair Type-593', + 'zDetFace-Hair Color Type-594', + 'zDetFace-Head Gear Type-595', + 'zDetFace-Facial Hair Type-596', + 'zDetFace-Has Face Mask-597', + 'zDetFace-Pose Type-598', + 'zDetFace-Face Expression Type-599', + 'zDetFace-Has Smile-600', + 'zDetFace-Smile Type-601', + 'zDetFace-Lip Makeup Type-602', + 'zDetFace-Eyes State-603', + 'zDetFace-Is Left Eye Closed-604', + 'zDetFace-Is Right Eye Closed-605', + 'zDetFace-Gaze Center X-606', + 'zDetFace-Gaze Center Y-607', + 'zDetFace-Face Gaze Type-608', + 'zDetFace-Eye Glasses Type-609', + 'zDetFace-Eye Makeup Type-610', + 'zDetFace-Cluster Squence Number Key-611', + 'zDetFace-Grouping ID-612', + 'zDetFace-Master ID-613', + 'zDetFace-Quality-614', + 'zDetFace-Quality Measure-615', + 'zDetFace-Source Height-616', + 'zDetFace-Source Width-617', + 'zDetFace-Hidden-Asset Hidden-618', + 'zDetFace-In Trash-Recently Deleted-619', + 'zDetFace-Cloud Local State-620', + 'zDetFace-Training Type-621', + 'zDetFace.Pose Yaw-622', + 'zDetFace-Body Center X-623', + 'zDetFace-Body Center Y-624', + 'zDetFace-Body Height-625', + 'zDetFace-Body Width-626', + 'zDetFace-Roll-627', + 'zDetFace-Size-628', + 'zDetFace-Cluster Squence Number-629', + 'zDetFace-Blur Score-630', + 'zDetFacePrint-Face Print Version-631', + 'zMedAnlyAstAttr-Face Count-632', + 'zDetFaceGroup-UUID-4TableStart-633', + 'zDetFaceGroup-Person Builder State-634', + 'zDetFaceGroup-UnNamed Face Count-635', + 'zPerson-In Person Naming Model-636', + 'zPerson-Key Face Pick Source Key-637', + 'zPerson-Manual Order Key-638', + 'zPerson-Question Type-639', + 'zPerson-Suggested For Client Type-640', + 'zPerson-Merge Target Person-641', + 'zPerson-Cloud Local State-642', + 'zFaceCrop-Cloud Local State-643', + 'zFaceCrop-Cloud Type-644', + 'zPerson-Cloud Delete State-645', + 'zFaceCrop-Cloud Delete State-646', + 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-647', + 'zAsset-Highlight Visibility Score-648', + 'zMemory-UUID-4TableStart-649', + 'zMemory-AssetListPredicte-650', + 'zMemory-Score-651', + 'zMemory-SubTitle-652', + 'zMemory-Title-653', + 'zMemory-Category-654', + 'zMemory-SubCategory-655', + ('zMemory-Creation Date-656', 'datetime'), + ('zMemory-Last Enrichment Date-657', 'datetime'), + 'zMemory-User Action Options-658', + 'zMemory-Favorite Memory-659', + 'zMemory-View Count-660', + 'zMemory-Play Count-661', + 'zMemory-Rejected-662', + 'zMemory-Share Count-663', + 'zMemory-Sharing Composition-664', + ('zMemory-Last Movie Play Date-665', 'datetime'), + ('zMemory-Last Viewed Date-666', 'datetime'), + 'zMemory-Pending Play Count Memory-667', + 'zMemory-Pending Share Count Memory-668', + 'zMemory-Pending View Count Memory-669', + 'zMemory-Pending State-670', + 'zMemory-Featured State-671', + 'zMemory-Photos Graph Version-672', + 'zMemory-Graph Memory Identifier-673', + 'zMemory-Notification State-674', + 'zMemory-Cloud Local State-675', + 'zMemory-Cloud Delete State-676', + 'zMemory-Story Color Grade Kind-677', + 'zMemory-Story Serialized Title Category-678', + 'zMemory-Syndicated Content State-679', + 'zMemory-Search Index Rebuild State-680', + 'zMemory-Black Listed Feature-681', + 'zMoment-UUID-4TableStart-682', + 'zMoment-Aggregation Score-683', + ('zMoment-Start Date-684', 'datetime'), + ('zMoment-Representative Date-685', 'datetime'), + 'zMoment-Timezone Offset-686', + ('zMoment-Modification Date-687', 'datetime'), + ('zMoment-End Date-688', 'datetime'), + 'zMoment-SubTitle-689', + 'zMoment-Title-690', + 'zMoment-Originator State-691', + 'zMoment-Sharing Composition-692', + 'zMoment-Cached Count Shared-693', + 'zMoment-Processed Location-694', + 'zMoment-Approx Latitude-695', + 'zMoment-Approx Longitude-696', + 'zMoment-GPS Horizontal Accuracy-697', + 'zMoment-Cache Count-698', + 'zMoment-Cached Photos Count-699', + 'zMoment-Cached Videos Count-700', + 'zMoment-Trashed State-701', + 'SBKAzSugg-UUID-4TableStart-702', + 'SBKAzSugg-Suggestion Context-703', + 'SBKAzSugg-Sharing Composition-704', + ('SBKAzSugg-Start Date-705', 'datetime'), + 'SBKAzSugg-State-706', + 'SBKAzSugg-Featured State-707', + 'SBKAzSugg- Available Features-708', + 'SBKAzSugg-Notification State-709', + ('SBKAzSugg-Creation Date-710', 'datetime'), + ('SBKAzSugg-End Date-711', 'datetime'), + ('SBKAzSugg-Activation Date-712', 'datetime'), + ('SBKAzSugg-Expunge Date-713', 'datetime'), + ('SBKAzSugg-Relevant Until Date-714', 'datetime'), + 'SBKAzSugg-Title-715', + 'SBKAzSugg-Sub Title-716', + 'SBKAzSugg-Cached Count-717', + 'SBKAzSugg-Cahed Photos Count-718', + 'SBKAzSugg-Cached Videos Count-719', + 'SBKAzSugg-Type-720', + 'SBKAzSugg-Sub Type-721', + 'SBKAzSugg-Action Data-722', + 'SBKAzSugg-Version-723', + 'SBKAzSugg-Cloud Local State-724', + 'SBKAzSugg-Cloud Delete State-725', + 'SBRAzSugg-UUID-4TableStart-726', + 'SBRAzSugg-Suggestion Context-727', + 'SBRAzSugg-Sharing Composition-728', + ('SBRAzSugg-Start Date-729', 'datetime'), + 'SBRAzSugg-State-730', + 'SBRAzSugg-Featured State-731', + 'SBRAzSugg- Available Features-732', + 'SBRAzSugg-Notification State-733', + ('SBRAzSugg-Creation Date-734', 'datetime'), + ('SBRAzSugg-End Date-735', 'datetime'), + ('SBRAzSugg-Activation Date-736', 'datetime'), + ('SBRAzSugg-Expunge Date-737', 'datetime'), + ('SBRAzSugg-Relevant Until Date-738', 'datetime'), + 'SBRAzSugg-Title-739', + 'SBRAzSugg-Sub Title-740', + 'SBRAzSugg-Cached Count-741', + 'SBRAzSugg-Cahed Photos Count-742', + 'SBRAzSugg-Cached Videos Count-743', + 'SBRAzSugg-Type-744', + 'SBRAzSugg-Sub Type-745', + 'SBRAzSugg-Action Data-746', + 'SBRAzSugg-Version-747', + 'SBRAzSugg-Cloud Local State-748', + 'SBRAzSugg-Cloud Delete State-749', + 'zMedAnlyAstAttr-Media Analysis Version-750', + 'zMedAnlyAstAttr-Audio Classification-751', + 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-752', + 'zMedAnlyAstAttr-Best Video Range Start Time Scale-753', + 'zMedAnlyAstAttr-Best Video Range Duration Value-754', + 'zMedAnlyAstAttr-Best Video Range Start Value-755', + 'zMedAnlyAstAttr-Packed Best Playback Rect-756', + 'zMedAnlyAstAttr-Activity Score-757', + 'zMedAnlyAstAttr-Video Score-758', + 'zMedAnlyAstAttr-Audio Score-759', + 'zMedAnlyAstAttr-Wallpaper Score-760', + 'zMedAnlyAstAttr-AutoPlay Suggestion Score-761', + 'zMedAnlyAstAttr-Blurriness Score-762', + 'zMedAnlyAstAttr-Exposure Score-763', + 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-764', + 'zMedAnlyAstAttr-Probable Rotation Direction-765', + 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-766', + 'zAssetAnalyState-Asset UUID-4TableStart-767', + 'zAssetAnalyState-Analyisis State-768', + 'zAssetAnalyState-Worker Flags-769', + 'zAssetAnalyState-Worker Type-770', + ('zAssetAnalyState-Ignore Until Date-771', 'datetime'), + ('zAssetAnalyState-Last Ignored Date-772', 'datetime'), + ('zAssetAnalyState-Sort Token-773', 'datetime'), + 'zMedAnlyAstAttr-Character Recognition Attr-774', + 'zCharRecogAttr-Algorithm Version-775', + 'zCharRecogAttr-Adjustment Version-776', + 'zMedAnlyAstAttr-Visual Search Attributes-777', + 'zVisualSearchAttr-Algorithm Version-778', + 'zVisualSearchAttr-Adjustment Version-779', + 'zVisualSearchAttr - Sticker Confidence Algorithm Version-780', + 'zVisualSearchAttr - Sticker Confidence Score-781', + 'zAsset-Sticker Confidence Score-782', + 'zAsset-Overall Aesthetic Score-783', + 'zCompAssetAttr-Behavioral Score-784', + 'zCompAssetAttr-Failure Score zCompAssetAttr-785', + 'zCompAssetAttr-Harmonious Color Score-786', + 'zCompAssetAttr-Immersiveness Score-787', + 'zCompAssetAttr-Interaction Score-788', + 'zCompAssetAttr-Intersting Subject Score-789', + 'zCompAssetAttr-Intrusive Object Presence Score-790', + 'zCompAssetAttr-Lively Color Score-791', + 'zCompAssetAttr-Low Light-792', + 'zCompAssetAttr-Noise Score-793', + 'zCompAssetAttr-Pleasant Camera Tilt Score-794', + 'zCompAssetAttr-Pleasant Composition Score-795', + 'zCompAssetAttr-Pleasant Lighting Score-796', + 'zCompAssetAttr-Pleasant Pattern Score-797', + 'zCompAssetAttr-Pleasant Perspective Score-798', + 'zCompAssetAttr-Pleasant Post Processing Score-799', + 'zCompAssetAttr-Pleasant Reflection Score-800', + 'zCompAssetAttrPleasant Symmetry Score-801', + 'zCompAssetAttr-Sharply Focused Subject Score-802', + 'zCompAssetAttr-Tastfully Blurred Score-803', + 'zCompAssetAttr-Well Chosen Subject Score-804', + 'zCompAssetAttr-Well Framed Subject Score-805', + 'zCompAssetAttr-Well Timeed Shot Score-806', + 'zCldRes-Asset UUID-4TableStart-807', + 'zCldRes-Cloud Local State-808', + 'zCldRes-File Size-809', + 'zCldRes-Height-810', + 'zCldRes-Is Available-811', + 'zCldRes-Is Locally Available-812', + 'zCldRes-Prefetch Count-813', + 'zCldRes-Source Type-814', + 'zCldRes-Type-815', + 'zCldRes-Width-816', + ('zCldRes-Date Created-817', 'datetime'), + ('zCldRes-Last OnDemand Download Date-818', 'datetime'), + ('zCldRes-Last Prefetch Date-819', 'datetime'), + 'zCldRes-Prunedat-820', + 'zCldRes-File Path-821', + 'zCldRes-Fingerprint-822', + 'zCldRes-Item ID-823', + 'zCldRes-UniID-824', + 'zUserFeedback-UUID-4TableStart-825', + 'zUserFeedback-Feature-826', + 'zUserFeedback-Type-827', + ('zUserFeedback-Last Modified Date-828', 'datetime'), + 'zUserFeedback-Context-829', + 'zUserFeedback-Cloud Local State-830', + 'zUserFeedback-Cloud Delete State-831', + 'zUserFeedback - Creation Type-832', + 'zAddAssetAttr-zPK-833', + 'zAddAssetAttr-zENT-834', + 'ZAddAssetAttr-zOPT-835', + 'zAddAssetAttr-zAsset= zAsset_zPK-836', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-837', + 'zAddAssetAttr-Master Fingerprint-838', + 'zAddAssetAttr-Public Global UUID-839', + 'zAddAssetAttr-Deferred Photo Identifier-840', + 'zAddAssetAttr-Original Assets UUID-841', + 'zAddAssetAttr-Import Session ID-842', + 'zAddAssetAttr-Originating Asset Identifier-843', + 'zAddAssetAttr.Adjusted Fingerprint-844', + 'zAlbumList-zPK= Album List Key-845', + 'zAlbumList-zENT-846', + 'zAlbumList-zOPT-847', + 'zAlbumList-ID Key-848', + 'zAlbumList-UUID-849', + 'zAsset-zPK-850', + 'zAsset-zENT-851', + 'zAsset-zOPT-852', + 'zAsset-Master= zCldMast-zPK-853', + 'zAsset-Extended Attributes= zExtAttr-zPK-854', + 'zAsset-Import Session Key-855', + 'zAsset-Trashed by Participant= zSharePartic_zPK-856', + 'zAsset-Photo Analysis Attributes Key-857', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-858', + 'zAsset-FOK-Cloud Feed Asset Entry Key-859', + 'zAsset-Moment Share Key= zShare-zPK-860', + 'zAsset-zMoment Key= zMoment-zPK-861', + 'zAsset-Computed Attributes Asset Key-862', + 'zAsset-Highlight Being Assets-HBA Key-863', + 'zAsset-Highlight Being Extended Assets-HBEA Key-864', + 'zAsset-Highlight Being Key Asset Private-HBKAP Key-865', + 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-866', + 'zAsset-Highligh Being Summary Assets-HBSA Key-867', + 'zAsset-Day Group Highlight Being Assets-DGHBA Key-868', + 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-869', + 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-870', + 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-871', + 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-872', + 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-873', + 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-874', + 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-875', + 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-876', + 'zAsset-Promotion Score-877', + 'zAsset-Iconic Score-878', + 'zAsset-Media Analysis Attributes Key-879', + 'zAsset-Media Group UUID-880', + 'zAsset-UUID = store.cloudphotodb-881', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-882', + 'zAsset.Cloud Collection GUID-883', + 'zAsset-Avalanche UUID-884', + 'zAssetAnalyState-zPK-885', + 'zAssetAnalyState-zEnt-886', + 'zAssetAnalyState-zOpt-887', + 'zAssetAnalyState-Asset= zAsset-zPK-888', + 'zAssetAnalyState-Asset UUID-889', + 'zAsstContrib-zPK-890', + 'zAsstContrib-zEnt-891', + 'zAsstContrib-zOpt-892', + 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-893', + 'zAsstContrib-Participant= zSharePartic-zPK-894', + 'zAssetDes-zPK-895', + 'zAssetDes-zENT-896', + 'zAssetDes-zOPT-897', + 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-898', + 'zCharRecogAttr-zPK-899', + 'zCharRecogAttr-zENT-900', + 'zCharRecogAttr-zOPT-901', + 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-902', + 'zCldFeedEnt-zPK= zCldShared keys-903', + 'zCldFeedEnt-zENT-904', + 'zCldFeedEnt-zOPT-905', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-906', + 'zCldFeedEnt-Entry Invitation Record GUID-907', + 'zCldFeedEnt-Entry Cloud Asset GUID-908', + 'zCldMast-zPK= zAsset-Master-909', + 'zCldMast-zENT-910', + 'zCldMast-zOPT-911', + 'zCldMast-Moment Share Key= zShare-zPK-912', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-913', + 'zCldMast-Originating Asset ID-914', + 'zCldMast-Import Session ID- AirDrop-StillTesting-915', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-916', + 'CMzCldMastMedData-zENT-917', + 'CMzCldMastMedData-zOPT-918', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-919', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-920', + 'AAAzCldMastMedData-zENT-921', + 'AAAzCldMastMedData-zOPT-922', + 'AAAzCldMastMedData-CldMast key-923', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-924', + 'zCldRes-zPK-925', + 'zCldRes-zENT-926', + 'zCldRes-zOPT-927', + 'zCldRes-Asset= zAsset-zPK-928', + 'zCldRes-Cloud Master= zCldMast-zPK-929', + 'zCldRes-Asset UUID-930', + 'zCldShareAlbumInvRec-zPK-931', + 'zCldShareAlbumInvRec-zEnt-932', + 'zCldShareAlbumInvRec-zOpt-933', + 'zCldShareAlbumInvRec-Album Key-934', + 'zCldShareAlbumInvRec-FOK Album Key-935', + 'zCldShareAlbumInvRec-Album GUID-936', + 'zCldShareAlbumInvRec-zUUID-937', + 'zCldShareAlbumInvRec-Cloud GUID-938', + 'zCldSharedComment-zPK-939', + 'zCldSharedComment-zENT-940', + 'zCldSharedComment-zOPT-941', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-942', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-943', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-944', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-945', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-946', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-947', + 'zCldSharedComment-Cloud GUID-948', + 'zCompAssetAttr-zPK-949', + 'zCompAssetAttr-zEnt-950', + 'zCompAssetAttr-zOpt-951', + 'zCompAssetAttr-Asset Key-952', + 'zDetFace-zPK-953', + 'zDetFace-zEnt-954', + 'zDetFace.zOpt-955', + 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-956', + 'zDetFace-PersonForFace= zPerson-zPK-957', + 'zDetFace-Person Being Key Face-958', + 'zDetFace-Face Print-959', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-960', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-961', + 'zDetFace-UUID-962', + 'zDetFaceGroup-zPK-963', + 'zDetFaceGroup-zENT-964', + 'zDetFaceGroup-zOPT-965', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-966', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-967', + 'zDetFaceGroup-UUID-968', + 'zDetFacePrint-zPK-969', + 'zDetFacePrint-zEnt-970', + 'zDetFacePrint-zOpt-971', + 'zDetFacePrint-Face Key-972', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-973', + 'zExtAttr-zENT-974', + 'zExtAttr-zOPT-975', + 'zExtAttr-Asset Key-976', + 'zFaceCrop-zPK-977', + 'zFaceCrop-zEnt-978', + 'zFaceCrop-zOpt-979', + 'zFaceCrop-Asset Key-980', + 'zFaceCrop-Invalid Merge Canidate Person UUID-981', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-982', + 'zFaceCrop-Face Key-983', + 'zFaceCrop-UUID-984', + 'zGenAlbum-zPK=26AlbumLists= 26Albums-985', + 'zGenAlbum-zENT-986', + 'zGenAlbum-zOpt-987', + 'zGenAlbum-Key Asset-Key zAsset-zPK-988', + 'zGenAlbum-Secondary Key Asset-989', + 'zGenAlbum-Tertiary Key Asset-990', + 'zGenAlbum-Custom Key Asset-991', + 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-992', + 'zGenAlbum-FOK Parent Folder-993', + 'zGenAlbum-zSyndicate-994', + 'zGenAlbum-UUID-995', + 'SWYConverszGenAlbum-UUID-996', + 'zGenAlbum-Cloud_GUID = store.cloudphotodb-997', + 'SWYConverszGenAlbum-Cloud GUID-998', + 'zGenAlbum-Project Render UUID-999', + 'SWYConverszGenAlbum-Project Render UUID-1000', + 'zIntResou-zPK-1001', + 'zIntResou-zENT-1002', + 'zIntResou-zOPT-1003', + 'zIntResou-Asset= zAsset_zPK-1004', + 'zIntResou-Fingerprint-1005', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-1006', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1007', + 'zMedAnlyAstAttr-zEnt-1008', + 'zMedAnlyAstAttr-zOpt-1009', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-1010', + 'zMemory-zPK-1011', + 'zMemory-zENT-1012', + 'zMemory-zOPT-1013', + 'zMemory-Key Asset= zAsset-zPK-1014', + 'zMemory-UUID-1015', + 'zMoment-zPK-1016', + 'zMoment-zENT-1017', + 'zMoment-zOPT-1018', + 'zMoment-Highlight Key-1019', + 'zMoment-UUID-1020', + 'zPerson-zPK=zDetFace-Person-1021', + 'zPerson-zEnt-1022', + 'zPerson-zOpt-1023', + 'zPerson-Share Participant= zSharePartic-zPK-1024', + 'zPerson-KeyFace=zDetFace-zPK-1025', + 'zPerson-Assoc Face Group Key-1026', + 'zPerson-Person UUID-1027', + 'zPhotoAnalysisAssetAttr-zPK-1028', + 'zPhotoAnalysisAssetAttr-zEnt-1029', + 'zPhotoAnalysisAssetAttr-zOpt-1030', + 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1031', + 'zSceneP-zPK-1032', + 'zSceneP-zENT-1033', + 'zSceneP-zOPT-1034', + 'zShare-zPK-1035', + 'zShare-zENT-1036', + 'zShare-zOPT-1037', + 'zShare-UUID-1038', + 'SPLzShare-UUID-1039', + 'zShare-Scope ID = store.cloudphotodb-1040', + 'zSharePartic-zPK-1041', + 'zSharePartic-zENT-1042', + 'zSharePartic-zOPT-1043', + 'zSharePartic-Share Key= zShare-zPK-1044', + 'zSharePartic-Person= zPerson-zPK-1045', + 'zSharePartic-UUID-1046', + 'SBKAzSugg-zPK-1047', + 'SBKAzSugg-zENT-1048', + 'SBKAzSugg-zOPT-1049', + 'SBKAzSugg-UUID-1050', + 'SBRAzSugg-zPK-1051', + 'SBRAzSugg-zENT-1052', + 'SBRAzSugg-zOPT-1053', + 'SBRAzSugg-UUID-1054', + 'z3SuggBRA-3RepAssets1-1055', + 'z3SuggBRA-58SuggBeingRepAssets-1056', + 'z3SuggBKA-58SuggBeingKeyAssets= zSugg-zPK-1057', + 'z3SuggBKA-3KeyAssets= zAsset-zPK-1058', + 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1059', + 'zUnmAdj-zOPT-1060', + 'zUnmAdj-zENT-1061', + 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1062', + 'zUnmAdj-UUID-1063', + 'zUnmAdj-Other Adjustments Fingerprint-1064', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1065', + 'zUserFeedback-zPK-1066', + 'zUserFeedback-zENT-1067', + 'zUserFeedback-zOPT-1068', + 'zUserFeedback-Person= zPerson-zPK-1069', + 'zUserFeedback-Memory= zMemory-zPK-1070', + 'zUserFeedback-UUID-1071', + 'zVisualSearchAttr-zPK-1072', + 'zVisualSearchAttr-zENT-1073', + 'zVisualSearchAttr-zOPT-1074', + 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1075', + 'z27AlbumList-27Albums= zGenAlbum-zPK-1076', + 'z27AlbumList-Album List Key-1077', + 'z27AlbumList-FOK27Albums Key-1078', + 'z28Assets-28Albums= zGenAlbum-zPK-1079', + 'z28Assets-3Asset Key= zAsset-zPK in the Album-1080', + 'z28Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1081', + 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1082', + 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1083', + 'z3MemoryBCAs-44MemoriesBeingCuratedAssets= zMemory-zPK-1084', + 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1085', + 'z3MemoryBECAs-44MemoriesBeingExtCuratedAssets= zMemory-zPK-1086', + 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1087', + 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1088', + 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1089', + 'z3MemoryBUCAs-44MemoriesBeingUserCuratedAssets= zMemory-zPK-1090', + 'z3MemoryBCAs-44Memories Being Custom User Assets-1091', + 'z3MemoryBCAs-3Custom User Assets-1092', + 'z3MemoryBCAs-FOK-3Custom User Assets-1093') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path + + elif (version.parse(iosversion) >= version.parse("17.6")) & (version.parse(iosversion) < version.parse("18")): + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] + + query = ''' + SELECT + DateTime(zAsset.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Added Date', + DateTime(zAsset.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAsset- SortToken -CameraRoll', + CASE zAsset.ZCOMPLETE + WHEN 1 THEN '1-Yes-1' + END AS 'zAsset Complete', + zAsset.Z_PK AS 'zAsset-zPK-4QueryStart', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK-4QueryStart', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4QueryStart', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint-4TableStart', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4TableStart', + CASE zAsset.ZBUNDLESCOPE + WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' + WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' + WHEN 2 THEN '2-iCldPhtos-ON-AssetInCloudSharedAlbum-2' + WHEN 3 THEN '3-iCldPhtos-ON-AssetIsInSWYConversation-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZBUNDLESCOPE || '' + END AS 'zAsset-Bundle Scope', + CASE zAsset.ZSYNDICATIONSTATE + WHEN 0 THEN '0-PhDaPs-NA_or_SyndPs-Received-SWY_Synd_Asset-0' + WHEN 1 THEN '1-SyndPs-Sent-SWY_Synd_Asset-1' + WHEN 2 THEN '2-SyndPs-Manually-Saved_SWY_Synd_Asset-2' + WHEN 3 THEN '3-SyndPs-STILLTESTING_Sent-SWY-3' + WHEN 8 THEN '8-SyndPs-Linked_Asset_was_Visible_On-Device_User_Deleted_Link-8' + WHEN 9 THEN '9-SyndPs-STILLTESTING_Sent_SWY-9' + WHEN 10 THEN '10-SyndPs-Manually-Saved_SWY_Synd_Asset_User_Deleted_From_LPL-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSYNDICATIONSTATE || '' + END AS 'zAsset-Syndication State', + CASE zAsset.ZCLOUDISMYASSET + WHEN 0 THEN '0-Not_My_Asset_in_Shared_Album-0' + WHEN 1 THEN '1-My_Asset_in_Shared_Album-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISMYASSET || '' + END AS 'zAsset-Cloud is My Asset', + CASE zAsset.ZCLOUDISDELETABLE + WHEN 0 THEN '0-No-0' + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDISDELETABLE || '' + END AS 'zAsset-Cloud is deletable-Asset', + CASE zAsset.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Album-Conv_or_iCldPhotos_OFF=Asset_Not_Synced-0' + WHEN 1 THEN 'iCldPhotos ON=Asset_Can-Be-or-Has-Been_Synced_with_iCloud-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDLOCALSTATE || '' + END AS 'zAsset-Cloud_Local_State', + CASE zAsset.ZVISIBILITYSTATE + WHEN 0 THEN '0-Visible-PL-CameraRoll-0' + WHEN 2 THEN '2-Not-Visible-PL-CameraRoll-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZVISIBILITYSTATE || '' + END AS 'zAsset-Visibility State', + zExtAttr.ZCAMERAMAKE AS 'zExtAttr-Camera Make', + zExtAttr.ZCAMERAMODEL AS 'zExtAttr-Camera Model', + zExtAttr.ZLENSMODEL AS 'zExtAttr-Lens Model', + CASE zExtAttr.ZFLASHFIRED + WHEN 0 THEN '0-No Flash-0' + WHEN 1 THEN '1-Flash Fired-1' + ELSE 'Unknown-New-Value!: ' || zExtAttr.ZFLASHFIRED || '' + END AS 'zExtAttr-Flash Fired', + zExtAttr.ZFOCALLENGTH AS 'zExtAttr-Focal Lenght', + zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Lenth in 35MM', + zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', + CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDERIVEDCAMERACAPTUREDEVICE || '' + END AS 'zAsset-Derived Camera Capture Device', + CASE zAddAssetAttr.ZCAMERACAPTUREDEVICE + WHEN 0 THEN '0-Back-Camera-Other-0' + WHEN 1 THEN '1-Front-Camera-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCAMERACAPTUREDEVICE || '' + END AS 'zAddAssetAttr-Camera Captured Device', + CASE zAddAssetAttr.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMPORTEDBY || '' + END AS 'zAddAssetAttr-Imported by', + CASE zCldMast.ZIMPORTEDBY + WHEN 0 THEN '0-Cloud-Other-0' + WHEN 1 THEN '1-Native-Back-Camera-1' + WHEN 2 THEN '2-Native-Front-Camera-2' + WHEN 3 THEN '3-Third-Party-App-3' + WHEN 4 THEN '4-StillTesting-4' + WHEN 5 THEN '5-PhotoBooth_PL-Asset-5' + WHEN 6 THEN '6-Third-Party-App-6' + WHEN 7 THEN '7-iCloud_Share_Link-CMMAsset-7' + WHEN 8 THEN '8-System-Package-App-8' + WHEN 9 THEN '9-Native-App-9' + WHEN 10 THEN '10-StillTesting-10' + WHEN 11 THEN '11-StillTesting-11' + WHEN 12 THEN '12-SWY_Syndication_PL-12' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZIMPORTEDBY || '' + END AS 'zCldMast-Imported By', + zAddAssetAttr.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zAddAssetAttr.Imported by Bundle Identifier', + zAddAssetAttr.ZIMPORTEDBYDISPLAYNAME AS 'zAddAssetAttr-Imported By Display Name', + zCldMast.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zCldMast-Imported by Bundle ID', + zCldMast.ZIMPORTEDBYDISPLAYNAME AS 'zCldMast-Imported by Display Name', + CASE zAsset.ZSAVEDASSETTYPE + WHEN 0 THEN '0-Saved-via-other-source-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-PhDaPs-Asset_or_SyndPs-Asset_NoAuto-Display-3' + WHEN 4 THEN '4-Photo-Cloud-Sharing-Data-Asset-4' + WHEN 5 THEN '5-PhotoBooth_Photo-Library-Asset-5' + WHEN 6 THEN '6-Cloud-Photo-Library-Asset-6' + WHEN 7 THEN '7-StillTesting-7' + WHEN 8 THEN '8-iCloudLink_CloudMasterMomentAsset-8' + WHEN 12 THEN '12-SyndPs-SWY-Asset_Auto-Display_In_CameraRoll-12' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' + END AS 'zAsset-Saved Asset Type', + zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', + zAsset.ZFILENAME AS 'zAsset-Filename', + zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', + zCldMast.ZORIGINALFILENAME AS 'zCldMast- Original Filename', + zAddAssetAttr.ZSYNDICATIONIDENTIFIER AS 'zAddAssetAttr- Syndication Identifier-SWY-Files', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State -4QueryStart', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting -4QueryStart', + SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL -4QueryStart', + SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL -4QueryStart', + CASE zAddAssetAttr.ZDATECREATEDSOURCE + WHEN 0 THEN '0-Cloud-Asset-0' + WHEN 1 THEN '1-Local_Asset_EXIF-1' + WHEN 3 THEN '3-Local_Asset_No_EXIF-3' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDATECREATEDSOURCE || '' + END AS 'zAddAssetAttr-Date Created Source', + DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', + DateTime(zCldMast.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Creation Date', + DateTime(zIntResou.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'zIntResou-CldMst Date Created', + zAddAssetAttr.ZTIMEZONENAME AS 'zAddAssetAttr-Time Zone Name', + zAddAssetAttr.ZTIMEZONEOFFSET AS 'zAddAssetAttr-Time Zone Offset', + zAddAssetAttr.ZINFERREDTIMEZONEOFFSET AS 'zAddAssetAttr-Inferred Time Zone Offset', + zAddAssetAttr.ZEXIFTIMESTAMPSTRING AS 'zAddAssetAttr-EXIF-String', + DateTime(zAsset.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Modification Date', + DateTime(zAddAssetAttr.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Viewed Date', + DateTime(zAsset.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Last Shared Date', + CASE zCldMast.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-Not Synced with Cloud-0' + WHEN 1 THEN '1-Pending Upload-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-Synced with Cloud-3' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZCLOUDLOCALSTATE || '' + END AS 'zCldMast-Cloud Local State', + DateTime(zCldMast.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'zCldMast-Import Date', + DateTime(zAddAssetAttr.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID-4QueryStart', + DateTime(zAddAssetAttr.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Alt Import Image Date', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart', + DateTime(zAsset.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Batch Publish Date', + DateTime(zAsset.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Server Publish Date', + zAsset.ZCLOUDDOWNLOADREQUESTS AS 'zAsset-Cloud Download Requests', + zAsset.ZCLOUDBATCHID AS 'zAsset-Cloud Batch ID', + zAddAssetAttr.ZUPLOADATTEMPTS AS 'zAddAssetAttr-Upload Attempts', + CASE zAsset.ZLATITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLATITUDE + END AS 'zAsset-Latitude', + zExtAttr.ZLATITUDE AS 'zExtAttr-Latitude', + CASE zAsset.ZLONGITUDE + WHEN -180.0 THEN '-180.0' + ELSE zAsset.ZLONGITUDE + END AS 'zAsset-Longitude', + zExtAttr.ZLONGITUDE AS 'zExtAttr-Longitude', + CASE zAddAssetAttr.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zAddAssetAttr.ZGPSHORIZONTALACCURACY + END AS 'zAddAssetAttr-GPS Horizontal Accuracy', + zAddAssetAttr.ZLOCATIONHASH AS 'zAddAssetAttr-Location Hash', + CASE zAddAssetAttr.ZSHIFTEDLOCATIONISVALID + WHEN 0 THEN '0-Shifted Location Not Valid-0' + WHEN 1 THEN '1-Shifted Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHIFTEDLOCATIONISVALID || '' + END AS 'zAddAssetAttr-Shifted Location Valid', + CASE + WHEN zAddAssetAttr.ZSHIFTEDLOCATIONDATA > 0 THEN 'zAddAssetAttr-Shifted_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Shifted_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Shifted Location Data', + CASE zAddAssetAttr.ZREVERSELOCATIONDATAISVALID + WHEN 0 THEN '0-Reverse Location Not Valid-0' + WHEN 1 THEN '1-Reverse Location Valid-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZREVERSELOCATIONDATAISVALID || '' + END AS 'zAddAssetAttr-Reverse Location Is Valid', + CASE + WHEN zAddAssetAttr.ZREVERSELOCATIONDATA > 0 THEN 'zAddAssetAttr-Reverse_Location_Data_has_Plist' + ELSE 'zAddAssetAttr-Reverse_Location_Data_Empty-NULL' + END AS 'zAddAssetAttr-Reverse Location Data', + ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID-4QueryStart', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID-4QueryStart', + SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID-4QueryStart', + ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID-4QueryStart', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4QueryStart', + SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID-4QueryStart', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID-4QueryStart', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID-4QueryStart', + SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID-4QueryStart', + CASE ParentzGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'ParentzGenAlbum-Cloud-Local-State-4QueryStart', + CASE zGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'zGenAlbum-Cloud_Local_State-4QueryStart', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart', + DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum- Creation Date- 4QueryStart', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Creation Date- 4QueryStart', + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Creation Date- 4QueryStart', + DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Cloud Creation Date- 4QueryStart', + DateTime(SWYConverszGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- Start Date- 4QueryStart', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- Start Date- 4QueryStart', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum- End Date- 4QueryStart', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum- End Date- 4QueryStart', + DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date- 4QueryStart', + DateTime(SWYConverszGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart', + ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title- 4QueryStart', + zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied- 4QueryStart', + SWYConverszGenAlbum.ZTITLE AS 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum-Import Session ID-SWY- 4QueryStart', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate-4QueryStart', + CASE zGenAlbum.Z_ENT + WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27' + WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28' + WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29' + WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30' + WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || '' + END AS 'zGenAlbum-zENT- Entity- 4QueryStart', + CASE ParentzGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || '' + END AS 'ParentzGenAlbum- Kind- 4QueryStart', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind- 4QueryStart', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind- 4QueryStart', + CASE AAAzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Cloud-1' + WHEN 2 THEN '2-StillTesting-This Device-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || AAAzCldMastMedData.Z_OPT || '' + END AS 'AAAzCldMastMedData-zOPT', + zAddAssetAttr.ZMEDIAMETADATATYPE AS 'zAddAssetAttr-Media Metadata Type', + zAddAssetAttr.ZMEDIAMETADATA AS 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK', + CASE + WHEN AAAzCldMastMedData.ZDATA > 0 THEN 'AAAzCldMastMedData-Data_has_Plist' + ELSE 'AAAzCldMastMedData-Data_Empty-NULL' + END AS 'AAAzCldMastMedData-Data', + CASE CMzCldMastMedData.Z_OPT + WHEN 1 THEN '1-StillTesting-Has_CldMastAsset-1' + WHEN 2 THEN '2-StillTesting-Local_Asset-2' + WHEN 3 THEN '3-StillTesting-Muted-3' + WHEN 4 THEN '4-StillTesting-Unknown-4' + WHEN 5 THEN '5-StillTesting-Unknown-5' + ELSE 'Unknown-New-Value!: ' || CMzCldMastMedData.Z_OPT || '' + END AS 'CldMasterzCldMastMedData-zOPT', + zCldMast.ZMEDIAMETADATATYPE AS 'zCldMast-Media Metadata Type', + zCldMast.ZMEDIAMETADATA AS 'zCldMast-Media Metadata Key= zCldMastMedData-zPK', + CASE + WHEN CMzCldMastMedData.ZDATA > 0 THEN 'CMzCldMastMedData-Data_has_Plist' + ELSE 'CMzCldMastMedData-Data_Empty-NULL' + END AS 'CMzCldMastMedData-Data', + CASE zAsset.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zAsset-Search Index Rebuild State', + zAddAssetAttr.ZSYNDICATIONHISTORY AS 'zAddAssetAttr-Syndication History', + zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVERSION AS 'zMedAnlyAstAttr-Syndication Processing Version', + CASE zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-STILLTESTING_Wide-Camera_JPG-1' + WHEN 2 THEN '2-STILLTESTING_Telephoto_Camera_Lens-2' + WHEN 4 THEN '4-STILLTESTING_SWY_Asset_OrigAssetImport_SystemPackageApp-4' + WHEN 16 THEN '16-STILLTESTING-16' + WHEN 1024 THEN '1024-STILLTESTING_SWY_Asset_OrigAssetImport_NativeCamera-1024' + WHEN 2048 THEN '2048-STILLTESTING-2048' + WHEN 4096 THEN '4096-STILLTESTING_SWY_Asset_Manually_Saved-4096' + ELSE 'Unknown-New-Value!: ' || zMedAnlyAstAttr.ZSYNDICATIONPROCESSINGVALUE || '' + END AS 'zMedAnlyAstAttr-Syndication Processing Value', + CASE zAsset.ZORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAsset-Orientation', + CASE zAddAssetAttr.ZORIGINALORIENTATION + WHEN 1 THEN '1-Video-Default-Adjustment-Horizontal-Camera-(left)-1' + WHEN 2 THEN '2-Horizontal-Camera-(right)-2' + WHEN 3 THEN '3-Horizontal-Camera-(right)-3' + WHEN 4 THEN '4-Horizontal-Camera-(left)-4' + WHEN 5 THEN '5-Vertical-Camera-(top)-5' + WHEN 6 THEN '6-Vertical-Camera-(top)-6' + WHEN 7 THEN '7-Vertical-Camera-(bottom)-7' + WHEN 8 THEN '8-Vertical-Camera-(bottom)-8' + ELSE 'Unknown-New-Value!: ' || zAsset.ZORIENTATION || '' + END AS 'zAddAssetAttr-Original Orientation', + CASE zAsset.ZKIND + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + END AS 'zAsset-Kind', + CASE zAsset.ZKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-Panorama-1' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAsset.ZKINDSUBTYPE || '' + END AS 'zAsset-Kind-Sub-Type', + CASE zAddAssetAttr.ZCLOUDKINDSUBTYPE + WHEN 0 THEN '0-Still-Photo-0' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-Live-Photo-2' + WHEN 3 THEN '3-Screenshot-3' + WHEN 10 THEN '10-SpringBoard-Screenshot-10' + WHEN 100 THEN '100-Video-100' + WHEN 101 THEN '101-Slow-Mo-Video-101' + WHEN 102 THEN '102-Time-lapse-Video-102' + WHEN 103 THEN '103-Replay_Screen_Recording-103' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDKINDSUBTYPE || '' + END AS 'zAddAssetAttr-Cloud Kind Sub Type', + CASE zAsset.ZPLAYBACKSTYLE + WHEN 1 THEN '1-Image-1' + WHEN 2 THEN '2-Image-Animated-2' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 4 THEN '4-Video-4' + WHEN 5 THEN '5-Video-Looping-5' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKSTYLE || '' + END AS 'zAsset-Playback Style', + CASE zAsset.ZPLAYBACKVARIATION + WHEN 0 THEN '0-No_Playback_Variation-0' + WHEN 1 THEN '1-StillTesting_Playback_Variation-1' + WHEN 2 THEN '2-StillTesting_Playback_Variation-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZPLAYBACKVARIATION || '' + END AS 'zAsset-Playback Variation', + zAsset.ZDURATION AS 'zAsset-Video Duration', + zExtAttr.ZDURATION AS 'zExtAttr-Duration', + zAsset.ZVIDEOCPDURATIONVALUE AS 'zAsset-Video CP Duration', + zAddAssetAttr.ZVIDEOCPDURATIONTIMESCALE AS 'zAddAssetAttr-Video CP Duration Time Scale', + zAsset.ZVIDEOCPVISIBILITYSTATE AS 'zAsset-Video CP Visibility State', + zAddAssetAttr.ZVIDEOCPDISPLAYVALUE AS 'zAddAssetAttr-Video CP Display Value', + zAddAssetAttr.ZVIDEOCPDISPLAYTIMESCALE AS 'zAddAssetAttr-Video CP Display Time Scale', + CASE zIntResou.ZDATASTORECLASSID + WHEN 0 THEN '0-LPL-Asset_CPL-Asset-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-Photo-Cloud-Sharing-Asset-2' + WHEN 3 THEN '3-SWY_Syndication_Asset-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORECLASSID || '' + END AS 'zIntResou-Datastore Class ID', + CASE zAsset.ZCLOUDPLACEHOLDERKIND + WHEN 0 THEN '0-Local&CloudMaster Asset-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-JPG-Asset_Only_PhDa-Thumb-V2-3' + WHEN 4 THEN '4-LPL-JPG-Asset_CPLAsset-OtherType-4' + WHEN 5 THEN '5-Asset_synced_CPL_2_Device-5' + WHEN 6 THEN '6-StillTesting-6' + WHEN 7 THEN '7-LPL-poster-JPG-Asset_CPLAsset-MP4-7' + WHEN 8 THEN '8-LPL-JPG_Asset_CPLAsset-LivePhoto-MOV-8' + WHEN 9 THEN '9-CPL_MP4_Asset_Saved_2_LPL-9' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDPLACEHOLDERKIND || '' + END AS 'zAsset-Cloud Placeholder Kind', + CASE zIntResou.ZLOCALAVAILABILITY + WHEN -1 THEN '(-1)-IR_Asset_Not_Avail_Locally(-1)' + WHEN 1 THEN '1-IR_Asset_Avail_Locally-1' + WHEN -32768 THEN '(-32768)_IR_Asset-SWY-Linked_Asset(-32768)' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITY || '' + END AS 'zIntResou-Local Availability', + CASE zIntResou.ZLOCALAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZLOCALAVAILABILITYTARGET || '' + END AS 'zIntResou-Local Availability Target', + CASE zIntResou.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-IR_Asset_Not_Synced_No_IR-CldMastDateCreated-0' + WHEN 1 THEN '1-IR_Asset_Pending-Upload-1' + WHEN 2 THEN '2-IR_Asset_Photo_Cloud_Share_Asset_On-Local-Device-2' + WHEN 3 THEN '3-IR_Asset_Synced_iCloud-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDLOCALSTATE || '' + END AS 'zIntResou-Cloud Local State', + CASE zIntResou.ZREMOTEAVAILABILITY + WHEN 0 THEN '0-IR_Asset-Not-Avail-Remotely-0' + WHEN 1 THEN '1-IR_Asset_Avail-Remotely-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITY || '' + END AS 'zIntResou-Remote Availability', + CASE zIntResou.ZREMOTEAVAILABILITYTARGET + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZREMOTEAVAILABILITYTARGET || '' + END AS 'zIntResou-Remote Availability Target', + zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master', + zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index', + zIntResou.ZFILEID AS 'zIntResou- File ID', + CASE zIntResou.ZVERSION + WHEN 0 THEN '0-IR_Asset_Standard-0' + WHEN 1 THEN '1-StillTesting-1' + WHEN 2 THEN '2-IR_Asset_Adjustments-Mutation-2' + WHEN 3 THEN '3-IR_Asset_No_IR-CldMastDateCreated-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZVERSION || '' + END AS 'zIntResou-Version', + zAddAssetAttr.ZORIGINALFILESIZE AS 'zAddAssetAttr- Original-File-Size', + CASE zIntResou.ZRESOURCETYPE + WHEN 0 THEN '0-Photo-0' + WHEN 1 THEN '1-Video-1' + WHEN 3 THEN '3-Live-Photo-3' + WHEN 5 THEN '5-Adjustment-Data-5' + WHEN 6 THEN '6-Screenshot-6' + WHEN 9 THEN '9-AlternatePhoto-3rdPartyApp-StillTesting-9' + WHEN 13 THEN '13-Movie-13' + WHEN 14 THEN '14-Wallpaper-14' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRESOURCETYPE || '' + END AS 'zIntResou-Resource Type', + CASE zIntResou.ZDATASTORESUBTYPE + WHEN 0 THEN '0-No Cloud Inter Resource-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZDATASTORESUBTYPE || '' + END AS 'zIntResou-Datastore Sub-Type', + CASE zIntResou.ZCLOUDSOURCETYPE + WHEN 0 THEN '0-NA-0' + WHEN 1 THEN '1-Main-Asset-Orig-Size-1' + WHEN 2 THEN '2-Photo-with-Adjustments-2' + WHEN 3 THEN '3-JPG-Large-Thumb-3' + WHEN 4 THEN '4-JPG-Med-Thumb-4' + WHEN 5 THEN '5-JPG-Small-Thumb-5' + WHEN 6 THEN '6-Video-Med-Data-6' + WHEN 7 THEN '7-Video-Small-Data-7' + WHEN 8 THEN '8-MP4-Cloud-Share-8' + WHEN 9 THEN '9-StillTesting' + WHEN 10 THEN '10-3rdPartyApp_thumb-StillTesting-10' + WHEN 11 THEN '11-StillTesting' + WHEN 12 THEN '12-StillTesting' + WHEN 13 THEN '13-PNG-Optimized_CPLAsset-13' + WHEN 14 THEN '14-Wallpaper-14' + WHEN 15 THEN '15-Has-Markup-and-Adjustments-15' + WHEN 16 THEN '16-Video-with-Adjustments-16' + WHEN 17 THEN '17-RAW_Photo-17_RT' + WHEN 18 THEN '18-Live-Photo-Video_Optimized_CPLAsset-18' + WHEN 19 THEN '19-Live-Photo-with-Adjustments-19' + WHEN 20 THEN '20-StillTesting' + WHEN 21 THEN '21-MOV-Optimized_HEVC-4K_video-21' + WHEN 22 THEN '22-Adjust-Mutation_AAE_Asset-22' + WHEN 23 THEN '23-StillTesting' + WHEN 24 THEN '24-StillTesting' + WHEN 25 THEN '25-StillTesting' + WHEN 26 THEN '26-MOV-Optimized_CPLAsset-26' + WHEN 27 THEN '27-StillTesting' + WHEN 28 THEN '28-MOV-Med-hdr-Data-28' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDSOURCETYPE || '' + END AS 'zIntResou-Cloud Source Type', + zIntResou.ZDATALENGTH AS 'zIntResou-Data Length', + CASE zIntResou.ZRECIPEID + WHEN 0 THEN '0-OrigFileSize_match_DataLength_or_Optimized-0' + WHEN 65737 THEN '65737-full-JPG_Orig-ProRAW_DNG-65737' + WHEN 65739 THEN '65739-JPG_Large_Thumb-65739' + WHEN 65741 THEN '65741-Various_Asset_Types-or-Thumbs-65741' + WHEN 65743 THEN '65743-ResouType-Photo_5003-or-5005-JPG_Thumb-65743' + WHEN 65749 THEN '65749-LocalVideoKeyFrame-JPG_Thumb-65749' + WHEN 65938 THEN '65938-FullSizeRender-Photo-or-plist-65938' + WHEN 131072 THEN '131072-FullSizeRender-Video-or-plist-131072' + WHEN 131077 THEN '131077-medium-MOV_HEVC-4K-131077' + WHEN 131079 THEN '131079-medium-MP4_Adj-Mutation_Asset-131079' + WHEN 131081 THEN '131081-ResouType-Video_5003-or-5005-JPG_Thumb-131081' + WHEN 131272 THEN '131272-FullSizeRender-Video_LivePhoto_Adj-Mutation-131272' + WHEN 131275 THEN '131275-medium-MOV_LivePhoto-131275' + WHEN 131277 THEN '131277-No-IR-Asset_LivePhoto-iCloud_Sync_Asset-131277' + WHEN 131475 THEN '131475-medium-hdr-MOV-131475' + WHEN 327683 THEN '327683-JPG-Thumb_for_3rdParty-StillTesting-327683' + WHEN 327687 THEN '627687-WallpaperComputeResource-627687' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZRECIPEID || '' + END AS 'zIntResou-Recipe ID', + CASE zIntResou.ZCLOUDLASTPREFETCHDATE + WHEN 0 THEN '0-NA-0' + ELSE DateTime(zIntResou.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH') + END AS 'zIntResou-Cloud Last Prefetch Date', + zIntResou.ZCLOUDPREFETCHCOUNT AS 'zIntResou-Cloud Prefetch Count', + DateTime(zIntResou.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou- Cloud-Last-OnDemand Download-Date', + CASE zIntResou.ZUTICONFORMANCEHINT + WHEN 0 THEN '0-NA-Doesnt_Conform-0' + WHEN 1 THEN '1-UTTypeImage-1' + WHEN 2 THEN '2-UTTypeProRawPhoto-2' + WHEN 3 THEN '3-UTTypeMovie-3' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZUTICONFORMANCEHINT || '' + END AS 'zIntResou-UniformTypeID_UTI_Conformance_Hint', + CASE zIntResou.ZCOMPACTUTI + WHEN 1 THEN '1-JPEG-THM-1' + WHEN 3 THEN '3-HEIC-3' + WHEN 6 THEN '6-PNG-6' + WHEN 7 THEN '7-StillTesting' + WHEN 9 THEN '9-DNG-9' + WHEN 23 THEN '23-JPEG-HEIC-quicktime-mov-23' + WHEN 24 THEN '24-MPEG4-24' + WHEN 36 THEN '36-Wallpaper-36' + WHEN 37 THEN '37-Adj-Mutation_Data-37' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCOMPACTUTI || '' + END AS 'zIntResou-Compact-UTI', + zAsset.ZUNIFORMTYPEIDENTIFIER AS 'zAsset-Uniform Type ID', + zAsset.ZORIGINALCOLORSPACE AS 'zAsset-Original Color Space', + zCldMast.ZUNIFORMTYPEIDENTIFIER AS 'zCldMast-Uniform_Type_ID', + CASE zCldMast.ZFULLSIZEJPEGSOURCE + WHEN 0 THEN '0-CldMast-JPEG-Source-Video Still-Testing-0' + WHEN 1 THEN '1-CldMast-JPEG-Source-Other- Still-Testing-1' + ELSE 'Unknown-New-Value!: ' || zCldMast.ZFULLSIZEJPEGSOURCE || '' + END AS 'zCldMast-Full Size JPEG Source', + zAsset.ZHDRGAIN AS 'zAsset-HDR Gain', + CASE zAsset.ZHDRTYPE + WHEN 0 THEN '0-No-HDR-0' + WHEN 3 THEN '3-HDR_Photo-3_RT' + WHEN 4 THEN '4-Non-HDR_Version-4_RT' + WHEN 5 THEN '5-HEVC_Movie-5' + WHEN 6 THEN '6-Panorama-6_RT' + WHEN 10 THEN '10-HDR-Gain-10' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHDRTYPE || '' + END AS 'zAsset-zHDR_Type', + zExtAttr.ZCODEC AS 'zExtAttr-Codec', + zIntResou.ZCODECFOURCHARCODENAME AS 'zIntResou-Codec Four Char Code Name', + zCldMast.ZCODECNAME AS 'zCldMast-Codec Name', + zCldMast.ZVIDEOFRAMERATE AS 'zCldMast-Video Frame Rate', + zCldMast.ZPLACEHOLDERSTATE AS 'zCldMast-Placeholder State', + CASE zAsset.ZDEPTHTYPE + WHEN 0 THEN '0-Not_Portrait-0_RT' + ELSE 'Portrait: ' || zAsset.ZDEPTHTYPE || '' + END AS 'zAsset-Depth_Type', + zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID-4TableStart', + CASE zAsset.ZAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEPICKTYPE || '' + END AS 'zAsset-Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE + WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' + WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' + WHEN 4 THEN '4-Burst_Asset_PhotosApp_Picked_KeyImage-4_RT' + WHEN 8 THEN '8-Burst_Asset_Selected_for_LPL-8_RT' + WHEN 16 THEN '16-Top_Burst_Asset_inStack_KeyImage-16_RT' + WHEN 32 THEN '32-StillTesting-32_RT' + WHEN 52 THEN '52-Burst_Asset_Visible_LPL-52' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE || '' + END AS 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset', + CASE zAddAssetAttr.ZCLOUDRECOVERYSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZCLOUDRECOVERYSTATE || '' + END AS 'zAddAssetAttr-Cloud Recovery State', + zAddAssetAttr.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'zAddAssetAttr-Cloud State Recovery Attempts Count', + zAsset.ZDEFERREDPROCESSINGNEEDED AS 'zAsset-Deferred Processing Needed', + zAsset.ZVIDEODEFERREDPROCESSINGNEEDED AS 'zAsset-Video Deferred Processing Needed', + zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart', + zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', + CASE zAsset.ZHASADJUSTMENTS + WHEN 0 THEN '0-No-Adjustments-0' + WHEN 1 THEN '1-Yes-Adjustments-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHASADJUSTMENTS || '' + END AS 'zAsset-Has Adjustments-Camera-Effects-Filters', + zUnmAdj.ZUUID AS 'zUnmAdj-UUID-4TableStart', + DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', + DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp', + zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', + zUnmAdj.ZEDITORLOCALIZEDNAME AS 'zUnmAdj-Editor Localized Name', + zUnmAdj.ZADJUSTMENTFORMATIDENTIFIER AS 'zUnmAdj-Adjustment Format ID', + zAddAssetAttr.ZMONTAGE AS 'zAddAssetAttr-Montage', + CASE zUnmAdj.ZADJUSTMENTRENDERTYPES + WHEN 0 THEN '0-Standard or Portrait with erros-0' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-Portrait-2' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTRENDERTYPES || '' + END AS 'zUnmAdj-Adjustment Render Types', + CASE zUnmAdj.ZADJUSTMENTFORMATVERSION + WHEN 1.0 THEN '1.0-Markup-1.0' + WHEN 1.1 THEN '1.1-Slow-Mo-1.1' + WHEN 1.2 THEN '1.2-StillTesting' + WHEN 1.3 THEN '1.3-StillTesting' + WHEN 1.4 THEN '1.4-Filter-1.4' + WHEN 1.5 THEN '1.5-Adjust-1.5' + WHEN 1.6 THEN '1.6-Video-Trim-1.6' + WHEN 1.7 THEN '1.7-StillTesting' + WHEN 1.8 THEN '1.8-StillTesting' + WHEN 1.9 THEN '1.9-StillTesting' + WHEN 2.0 THEN '2.0-ScreenshotServices-2.0' + ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTFORMATVERSION || '' + END AS 'zUnmAdj-Adjustment Format Version', + zUnmAdj.ZADJUSTMENTBASEIMAGEFORMAT AS 'zUnmAdj-Adjustment Base Image Format', + CASE zAsset.ZFAVORITE + WHEN 0 THEN '0-Asset Not Favorite-0' + WHEN 1 THEN '1-Asset Favorite-1' + END AS 'zAsset-Favorite', + CASE zAsset.ZHIDDEN + WHEN 0 THEN '0-Asset Not Hidden-0' + WHEN 1 THEN '1-Asset Hidden-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZHIDDEN || '' + END AS 'zAsset-Hidden', + CASE zAsset.ZTRASHEDSTATE + WHEN 0 THEN '0-Asset Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-Asset In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZTRASHEDSTATE || '' + END AS 'zAsset-Trashed State-LocalAssetRecentlyDeleted', + DateTime(zAsset.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Trashed Date', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart', + CASE zAsset.ZDELETEREASON + WHEN 1 THEN '1-StillTesting Delete-Reason-1' + WHEN 2 THEN '2-StillTesting Delete-Reason-2' + WHEN 3 THEN '3-StillTesting Delete-Reason-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDELETEREASON || '' + END AS 'zAsset-Delete-Reason', + CASE zIntResou.ZTRASHEDSTATE + WHEN 0 THEN '0-zIntResou-Not In Trash-Recently Deleted-0' + WHEN 1 THEN '1-zIntResou-In Trash-Recently Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZTRASHEDSTATE || '' + END AS 'zIntResou-Trash State', + DateTime(zIntResou.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zIntResou-Trashed Date', + CASE zAsset.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud Asset Not Deleted-0' + WHEN 1 THEN '1-Cloud Asset Deleted-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDDELETESTATE || '' + END AS 'zAsset-Cloud Delete State', + CASE zIntResou.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Cloud IntResou Not Deleted-0' + WHEN 1 THEN '1-Cloud IntResou Deleted-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZCLOUDDELETESTATE || '' + END AS 'zIntResou-Cloud Delete State', + CASE zAddAssetAttr.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP Not in Trash-0' + WHEN 1 THEN '1-PTP In Trash-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZPTPTRASHEDSTATE || '' + END AS 'zAddAssetAttr-PTP Trashed State', + CASE zIntResou.ZPTPTRASHEDSTATE + WHEN 0 THEN '0-PTP IntResou Not in Trash-0' + WHEN 1 THEN '1-PTP IntResou In Trash-1' + ELSE 'Unknown-New-Value!: ' || zIntResou.ZPTPTRASHEDSTATE || '' + END AS 'zIntResou-PTP Trashed State', + zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart', + DateTime(zMedAnlyAstAttr.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zMedAnlyAstAttr-Media Analysis Timestamp', + DateTime(zAsset.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Analysis State Modificaion Date', + zAddAssetAttr.ZPENDINGVIEWCOUNT AS 'zAddAssetAttr- Pending View Count', + zAddAssetAttr.ZVIEWCOUNT AS 'zAddAssetAttr- View Count', + zAddAssetAttr.ZPENDINGPLAYCOUNT AS 'zAddAssetAttr- Pending Play Count', + zAddAssetAttr.ZPLAYCOUNT AS 'zAddAssetAttr- Play Count', + zAddAssetAttr.ZPENDINGSHARECOUNT AS 'zAddAssetAttr- Pending Share Count', + zAddAssetAttr.ZSHARECOUNT AS 'zAddAssetAttr- Share Count', + CASE zAddAssetAttr.ZALLOWEDFORANALYSIS + WHEN 0 THEN '0-Asset Not Allowed For Analysis-0' + WHEN 1 THEN '1-Asset Allowed for Analysis-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZALLOWEDFORANALYSIS || '' + END AS 'zAddAssetAttr-Allowed for Analysis', + zAddAssetAttr.ZSCENEANALYSISVERSION AS 'zAddAssetAttr-Scene Analysis Version', + CASE zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW + WHEN 0 THEN '0-No-0' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSCENEANALYSISISFROMPREVIEW || '' + END AS 'zAddAssetAttr-Scene Analysis is From Preview', + DateTime(zAddAssetAttr.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAddAssetAttr-Scene Analysis Timestamp', + CASE zAsset.ZDUPLICATEASSETVISIBILITYSTATE + WHEN 0 THEN '0-No-Duplicates-0' + WHEN 1 THEN '1-Has Duplicate-1' + WHEN 2 THEN '2-Is a Duplicate-2' + ELSE 'Unknown-New-Value!: ' || zAsset.ZDUPLICATEASSETVISIBILITYSTATE || '' + END AS 'zAsset-Duplication Asset Visibility State', + CASE zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE + WHEN 0 THEN '0-No Copy-0' + WHEN 1 THEN '1-Has A Copy-1' + WHEN 2 THEN '2-Has A Copy-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDESTINATIONASSETCOPYSTATE || '' + END AS 'zAddAssetAttr-Destination Asset Copy State', + CASE zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE + WHEN 0 THEN '0-Unknown-StillTesting-0' + WHEN 1 THEN '1-Unknown-StillTesting-1' + WHEN 2 THEN '2-Unknown-StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZDUPLICATEDETECTORPERCEPTUALPROCESSINGSTATE || '' + END AS 'zAddAssetAttr-Duplicate Detector Perceptual Processing State', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'zAddAssetAttr-Source Asset for Duplication Scope ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'zCldMast-Source Master For Duplication Scope ID', + zAddAssetAttr.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'zAddAssetAttr-Source Asset For Duplication ID', + zCldMast.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'zCldMast-Source Master for Duplication ID', + zAddAssetAttr.ZVARIATIONSUGGESTIONSTATES AS 'zAddAssetAttr-Variation Suggestions States', + zAsset.ZHIGHFRAMERATESTATE AS 'zAsset-High Frame Rate State', + zAsset.ZVIDEOKEYFRAMETIMESCALE AS 'zAsset-Video Key Frame Time Scale', + zAsset.ZVIDEOKEYFRAMEVALUE AS 'zAsset-Video Key Frame Value', + zExtAttr.ZISO AS 'zExtAttr-ISO', + zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode', + zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate', + zExtAttr.ZTRACKFORMAT AS 'zExtAttr-Track Format', + zExtAttr.ZWHITEBALANCE AS 'zExtAttr-White Balance', + zExtAttr.ZAPERTURE AS 'zExtAttr-Aperture', + zExtAttr.ZBITRATE AS 'zExtAttr-BitRate', + zExtAttr.ZEXPOSUREBIAS AS 'zExtAttr-Exposure Bias', + zExtAttr.ZFPS AS 'zExtAttr-Frames Per Second', + zExtAttr.ZSHUTTERSPEED AS 'zExtAttr-Shutter Speed', + zExtAttr.ZSLUSHSCENEBIAS AS 'zExtAttr-Slush Scene Bias', + zExtAttr.ZSLUSHVERSION AS 'zExtAttr-Slush Version', + zExtAttr.ZSLUSHPRESET AS 'zExtAttr-Slush Preset', + zExtAttr.ZSLUSHWARMTHBIAS AS 'zExtAttr-Slush Warm Bias', + zAsset.ZHEIGHT AS 'zAsset-Height', + zAddAssetAttr.ZORIGINALHEIGHT AS 'zAddAssetAttr-Original Height', + zIntResou.ZUNORIENTEDHEIGHT AS 'zIntResou-UnOriented Height', + zAsset.ZWIDTH AS 'zAsset-Width', + zAddAssetAttr.ZORIGINALWIDTH AS 'zAddAssetAttr-Original Width', + zIntResou.ZUNORIENTEDWIDTH AS 'zIntResou-UnOriented Width', + zShare.ZTHUMBNAILIMAGEDATA AS 'zShare-Thumbnail Image Data', + SPLzShare.ZTHUMBNAILIMAGEDATA AS 'SPLzShare-Thumbnail Image Data', + zAsset.ZTHUMBNAILINDEX AS 'zAsset-Thumbnail Index', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILHEIGHT AS 'zAddAssetAttr-Embedded Thumbnail Height', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', + zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', + zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', + zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', + zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', + zAsset.ZCURATIONSCORE AS 'zAsset-Curation Score', + zAsset.ZCAMERAPROCESSINGADJUSTMENTSTATE AS 'zAsset-Camera Processing Adjustment State', + zAsset.ZDEPTHTYPE AS 'zAsset-Depth Type', + zAsset.ZISMAGICCARPET AS 'zAsset-Is Magic Carpet-QuicktimeMOVfile', + CASE zAddAssetAttr.ZORIGINALRESOURCECHOICE + WHEN 0 THEN '0-JPEG Original Resource-0' + WHEN 1 THEN '1-RAW Original Resource-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZORIGINALRESOURCECHOICE || '' + END AS 'zAddAssetAttr-Orig Resource Choice', + CASE zAsset.ZSPATIALTYPE + WHEN 0 THEN '0-UnknownTesting-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZSPATIALTYPE || '' + END AS 'zAsset-Spatial Type', + zAddAssetAttr.ZSPATIALOVERCAPTUREGROUPIDENTIFIER AS 'zAddAssetAttr-Spatial Over Capture Group ID', + zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', + zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity', + zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes', + zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description', + zAddAssetAttr.ZASSETDESCRIPTION AS 'zAddAssetAttr-Asset Description', + zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', + zAddAssetAttr.ZACCESSIBILITYDESCRIPTION AS 'zAddAssetAttr-Accessibility Description', + zAddAssetAttr.ZPHOTOSTREAMTAGID AS 'zAddAssetAttr-Photo Stream Tag ID', + zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESVERSION AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version', + DateTime(zPhotoAnalysisAssetAttr.ZWALLPAPERPROPERTIESTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp', + DateTime(zCldFeedEnt.ZENTRYDATE + 978307200, 'UNIXEPOCH') AS 'zCldFeedEnt-Entry Date', + zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart', + zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart', + zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart', + CASE zCldFeedEnt.ZENTRYPRIORITYNUMBER + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYPRIORITYNUMBER || '' + END AS 'zCldFeedEnt-Entry Priority Number', + CASE zCldFeedEnt.ZENTRYTYPENUMBER + WHEN 1 THEN 'Is My Shared Asset-1' + WHEN 2 THEN '2-StillTesting-2' + WHEN 3 THEN '3-StillTesting-3' + WHEN 4 THEN 'Not My Shared Asset-4' + WHEN 5 THEN 'Asset in Album with Invite Record-5' + ELSE 'Unknown-New-Value!: ' || zCldFeedEnt.ZENTRYTYPENUMBER || '' + END AS 'zCldFeedEnt-Entry Type Number', + zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID-4TableStart', + DateTime(zCldSharedComment.ZCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Date', + DateTime(zCldSharedComment.ZCOMMENTCLIENTDATE + 978307200, 'UNIXEPOCH') AS 'zCldSharedComment-Comment Client Date', + DateTime(zAsset.ZCLOUDLASTVIEWEDCOMMENTDATE + 978307200, 'UNIXEPOCH') AS 'zAsset-Cloud Last Viewed Comment Date', + zCldSharedComment.ZCOMMENTTYPE AS 'zCldSharedComment-Type', + zCldSharedComment.ZCOMMENTTEXT AS 'zCldSharedComment-Comment Text', + zCldSharedComment.ZCOMMENTERHASHEDPERSONID AS 'zCldSharedComment-Commenter Hashed Person ID', + CASE zCldSharedComment.ZISBATCHCOMMENT + WHEN 0 THEN 'Not Batch Comment-0' + WHEN 1 THEN 'Batch Comment-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISBATCHCOMMENT || '' + END AS 'zCldSharedComment-Batch Comment', + CASE zCldSharedComment.ZISCAPTION + WHEN 0 THEN 'Not a Caption-0' + WHEN 1 THEN 'Caption-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISCAPTION || '' + END AS 'zCldSharedComment-Is a Caption', + CASE zAsset.ZCLOUDHASCOMMENTSBYME + WHEN 1 THEN 'Device Apple Acnt Commented-Liked Asset-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSBYME || '' + END AS 'zAsset-Cloud Has Comments by Me', + CASE zCldSharedComment.ZISMYCOMMENT + WHEN 0 THEN 'Not My Comment-0' + WHEN 1 THEN 'My Comment-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISMYCOMMENT || '' + END AS 'zCldSharedComment-Is My Comment', + CASE zCldSharedComment.ZISDELETABLE + WHEN 0 THEN 'Not Deletable-0' + WHEN 1 THEN 'Deletable-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedComment.ZISDELETABLE || '' + END AS 'zCldSharedComment-Is Deletable', + CASE zAsset.ZCLOUDHASCOMMENTSCONVERSATION + WHEN 1 THEN 'Device Apple Acnt Commented-Liked Conversation-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASCOMMENTSCONVERSATION || '' + END AS 'zAsset-Cloud Has Comments Conversation', + CASE zAsset.ZCLOUDHASUNSEENCOMMENTS + WHEN 0 THEN 'zAsset No Unseen Comments-0' + WHEN 1 THEN 'zAsset Unseen Comments-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZCLOUDHASUNSEENCOMMENTS || '' + END AS 'zAsset-Cloud Has Unseen Comments', + CASE zCldSharedCommentLiked.ZISLIKE + WHEN 0 THEN 'Asset Not Liked-0' + WHEN 1 THEN 'Asset Liked-1' + ELSE 'Unknown-New-Value!: ' || zCldSharedCommentLiked.ZISLIKE || '' + END AS 'zCldSharedComment-Liked', + CASE zAddAssetAttr.ZSHARETYPE + WHEN 0 THEN '0-Not_Shared-or-Shared_via_Phy_Device_StillTesting-0' + WHEN 1 THEN '1-Shared_via_iCldPhotos_Web-or-Other_Device_StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSHARETYPE || '' + END AS 'zAddAssetAttr-Share Type', + CASE zAsset.ZLIBRARYSCOPESHARESTATE + WHEN 0 THEN '0-Asset-Not-In-SPL-0' + ELSE 'Unknown-New-Value!: ' || zAsset.ZLIBRARYSCOPESHARESTATE || '' + END AS 'zAsset-Library Scope Share State- StillTesting', + CASE zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE + WHEN 0 THEN '0-Asset-Not-In-Active-SPL-0' + WHEN 1 THEN '1-Asset-In-Active-SPL-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZACTIVELIBRARYSCOPEPARTICIPATIONSTATE || '' + END AS 'zAsset-Active Library Scope Participation State', + zAddAssetAttr.ZLIBRARYSCOPEASSETCONTRIBUTORSTOUPDATE AS 'zAddAssetAttr-Library Scope Asset Contributors To Update', + zShare.ZUUID AS 'zShare-UUID-CMM-4TableStart', + SPLzShare.ZUUID AS 'SPLzShare-UUID-SPL-4TableStart', + CASE zShare.Z_ENT + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' + WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' + END AS 'zShare-zENT-CMM', + CASE SPLzShare.Z_ENT + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' + WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + ELSE 'Unknown-New-Value!: ' || SPLzShare.Z_ENT || '' + END AS 'SPLzShare-zENT-SPL', + CASE zSharePartic.Z55_SHARE + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' + WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z55_SHARE || '' + END AS 'zSharePartic-z55SHARE', + CASE SPLzSharePartic.Z55_SHARE + WHEN 55 THEN '55-SPL-Entity-55' + WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' + WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' + WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z55_SHARE || '' + END AS 'SPLzSharePartic-z55SHARE', + CASE zShare.ZSTATUS + WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSTATUS || '' + END AS 'zShare-Status-CMM', + CASE SPLzShare.ZSTATUS + WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSTATUS || '' + END AS 'SPLzShare-Status-SPL', + CASE zShare.ZSCOPETYPE + WHEN 2 THEN '2-iCloudLink-CMMoment-2' + WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPETYPE || '' + END AS 'zShare-Scope Type-CMM', + CASE SPLzShare.ZSCOPETYPE + WHEN 2 THEN '2-iCloudLink-CMMoment-2' + WHEN 4 THEN '4-iCld-Shared-Photo-Library-SPL-4' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSCOPETYPE || '' + END AS 'SPLzShare-Scope Type-SPL', + CASE zShare.ZLOCALPUBLISHSTATE + WHEN 2 THEN '2-Published-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZLOCALPUBLISHSTATE || '' + END AS 'zShare-Local Publish State-CMM', + CASE SPLzShare.ZLOCALPUBLISHSTATE + WHEN 2 THEN '2-Published-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZLOCALPUBLISHSTATE || '' + END AS 'SPLzShare-Local Publish State-SPL', + CASE zShare.ZPUBLICPERMISSION + WHEN 1 THEN '1-Public_Premission_Denied-Private-1' + WHEN 2 THEN '2-Public_Premission_Granted-Public-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPUBLICPERMISSION || '' + END AS 'zShare-Public Permission-CMM', + CASE SPLzShare.ZPUBLICPERMISSION + WHEN 1 THEN '1-Public_Premission_Denied-Private-1' + WHEN 2 THEN '2-Public_Premission_Granted-Public-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPUBLICPERMISSION || '' + END AS 'SPLzShare-Public Permission-SPL', + zShare.ZORIGINATINGSCOPEIDENTIFIER AS 'zShare-Originating Scope ID-CMM', + SPLzShare.ZORIGINATINGSCOPEIDENTIFIER AS 'SPLzShare-Originating Scope ID-SPL', + zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID-CMM', + SPLzShare.ZSCOPEIDENTIFIER AS 'SPLzShare-Scope ID-SPL', + zShare.ZTITLE AS 'zShare-Title-CMM', + SPLzShare.ZTITLE AS 'SPLzShare-Title-SPL', + zShare.ZSHAREURL AS 'zShare-Share URL-CMM', + SPLzShare.ZSHAREURL AS 'SPLzShare-Share URL-SPL', + DateTime(zShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Creation Date-CMM', + DateTime(SPLzShare.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Creation Date-SPL', + DateTime(zShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Start Date-CMM', + DateTime(SPLzShare.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Start Date-SPL', + DateTime(zShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-End Date-CMM', + DateTime(SPLzShare.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-End Date-SPL', + DateTime(zShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Expiry Date-CMM', + DateTime(SPLzShare.ZEXPIRYDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Expiry Date-SPL', + zShare.ZCLOUDITEMCOUNT AS 'zShare-Cloud Item Count-CMM', + SPLzShare.ZCLOUDITEMCOUNT AS 'SPLzShare-Cloud Item Count-SPL', + zShare.ZASSETCOUNT AS 'zShare-Asset Count-CMM', + SPLzShare.ZASSETCOUNT AS 'SPLzShare-Asset Count-SPL', + zShare.ZCLOUDPHOTOCOUNT AS 'zShare-Cloud Photo Count-CMM', + SPLzShare.ZCLOUDPHOTOCOUNT AS 'SPLzShare-Cloud Photo Count-SPL', + zShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM', + SPLzShare.ZCOUNTOFASSETSADDEDBYCAMERASMARTSHARING AS 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL', + zShare.ZPHOTOSCOUNT AS 'zShare-Photos Count-CMM', + SPLzShare.ZPHOTOSCOUNT AS 'SPLzShare-Photos Count-CMM-SPL', + zShare.ZUPLOADEDPHOTOSCOUNT AS 'zShare-Uploaded Photos Count-CMM', + SPLzShare.ZUPLOADEDPHOTOSCOUNT AS 'SPLzShare-Uploaded Photos Count-SPL', + zShare.ZCLOUDVIDEOCOUNT AS 'zShare-Cloud Video Count-CMM', + SPLzShare.ZCLOUDVIDEOCOUNT AS 'SPLzShare-Cloud Video Count-SPL', + zShare.ZVIDEOSCOUNT AS 'zShare-Videos Count-CMM', + SPLzShare.ZVIDEOSCOUNT AS 'SPLzShare-Videos Count-SPL', + zShare.ZUPLOADEDVIDEOSCOUNT AS 'zShare-Uploaded Videos Count-CMM', + SPLzShare.ZUPLOADEDVIDEOSCOUNT AS 'SPLzShare-Uploaded Videos Count-SPL', + zShare.ZFORCESYNCATTEMPTED AS 'zShare-Force Sync Attempted-CMM', + SPLzShare.ZFORCESYNCATTEMPTED AS 'SPLzShare-Force Sync Attempted-SPL', + CASE zShare.ZCLOUDLOCALSTATE + WHEN 1 THEN '1-LocalandCloud-SPL-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDLOCALSTATE || '' + END AS 'zShare-Cloud Local State-CMM', + CASE SPLzShare.ZCLOUDLOCALSTATE + WHEN 1 THEN '1-LocalandCloud-SPL-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCLOUDLOCALSTATE || '' + END AS 'SPLzShare-Cloud Local State-SPL', + CASE zShare.ZSCOPESYNCINGSTATE + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSCOPESYNCINGSTATE || '' + END AS 'zShare-Scope Syncing State-CMM', + CASE SPLzShare.ZSCOPESYNCINGSTATE + WHEN 1 THEN '1-ScopeAllowedToSync-SPL-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSCOPESYNCINGSTATE || '' + END AS 'SPLzShare-Scope Syncing State-SPL', + CASE zShare.ZAUTOSHAREPOLICY + WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZAUTOSHAREPOLICY || '' + END AS 'zShare-Auto Share Policy-CMM', + CASE SPLzShare.ZAUTOSHAREPOLICY + WHEN 0 THEN '0-AutoShare-OFF_SPL_Test_NotAllAtSetup-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZAUTOSHAREPOLICY || '' + END AS 'SPLzShare-Auto Share Policy-SPL', + CASE zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION + WHEN 0 THEN '0-DoNotNotify-CMM-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || '' + END AS 'zShare-Should Notify On Upload Completion-CMM', + CASE SPLzShare.ZSHOULDNOTIFYONUPLOADCOMPLETION + WHEN 0 THEN '0-DoNotNotify-SPL-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSHOULDNOTIFYONUPLOADCOMPLETION || '' + END AS 'SPLzShare-Should Notify On Upload Completion-SPL', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM', + CASE zShare.ZTRASHEDSTATE + WHEN 0 THEN '0-Not_in_Trash-0' + WHEN 1 THEN '1-In_Trash-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZTRASHEDSTATE || '' + END AS 'zShare-Trashed State-CMM', + CASE SPLzShare.ZTRASHEDSTATE + WHEN 0 THEN '0-Not_in_Trash-0' + WHEN 1 THEN '1-In_Trash-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZTRASHEDSTATE || '' + END AS 'SPLzShare-Trashed State-SPL', + CASE zShare.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Not Deleted-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZCLOUDDELETESTATE || '' + END AS 'zShare-Cloud Delete State-CMM', + CASE SPLzShare.ZCLOUDDELETESTATE + WHEN 0 THEN '0-Not Deleted-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZCLOUDDELETESTATE || '' + END AS 'SPLzShare-Cloud Delete State-SPL', + DateTime(zShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Trashed Date-CMM', + DateTime(SPLzShare.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Trashed Date-SPL', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zShare-LastParticipant Asset Trash Notification Date-CMM', + DateTime(SPLzShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL', + DateTime(zShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zShare-Last Participant Asset Trash Notification View Date-CMM', + DateTime(SPLzShare.ZLASTPARTICIPANTASSETTRASHNOTIFICATIONVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL', + CASE zShare.ZEXITSOURCE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSOURCE || '' + END AS 'zShare-Exit Source-CMM', + CASE SPLzShare.ZEXITSOURCE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITSOURCE || '' + END AS 'SPLzShare-Exit Source-SPL', + CASE zShare.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITSTATE || '' + END AS 'zShare-SPL_Exit State-CMM', + CASE SPLzShare.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITSTATE || '' + END AS 'SPLzShare-SPL_Exit State-SPL', + CASE zShare.ZEXITTYPE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zShare.ZEXITTYPE || '' + END AS 'zShare-Exit Type-CMM', + CASE SPLzShare.ZEXITTYPE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZEXITTYPE || '' + END AS 'SPLzShare-Exit Type-SPL', + CASE zShare.ZSHOULDIGNOREBUDGETS + WHEN 1 THEN '1-StillTesting-CMM-1' + ELSE 'Unknown-New-Value!: ' || zShare.ZSHOULDIGNOREBUDGETS || '' + END AS 'zShare-Should Ignor Budgets-CMM', + CASE SPLzShare.ZSHOULDIGNOREBUDGETS + WHEN 1 THEN '1-StillTesting-CMM-1' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZSHOULDIGNOREBUDGETS || '' + END AS 'SPLzShare-Should Ignor Budgets-SPL', + CASE zShare.ZPREVIEWSTATE + WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0' + ELSE 'Unknown-New-Value!: ' || zShare.ZPREVIEWSTATE || '' + END AS 'zShare-Preview State-CMM', + CASE SPLzShare.ZPREVIEWSTATE + WHEN 0 THEN '0-NotInPreviewState-StillTesting-SPL-0' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPREVIEWSTATE || '' + END AS 'SPLzShare-Preview State-SPL', + zShare.ZPREVIEWDATA AS 'zShare-Preview Data-CMM', + SPLzShare.ZPREVIEWDATA AS 'SPLzShare-Preview Data-SPL', + zShare.ZRULESDATA AS 'zShare-Rules-CMM', + SPLzShare.ZRULESDATA AS 'SPLzShare-Rules-SPL', + zShare.ZTHUMBNAILIMAGEDATA AS 'zShare-Thumbnail Image Data-CMM', + SPLzShare.ZTHUMBNAILIMAGEDATA AS 'SPLzShare-Thumbnail Image Data-SPL', + CASE zShare.ZPARTICIPANTCLOUDUPDATESTATE + WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2' + ELSE 'Unknown-New-Value!: ' || zShare.ZPARTICIPANTCLOUDUPDATESTATE || '' + END AS 'zShare-Participant Cloud Update State-CMM', + CASE SPLzShare.ZPARTICIPANTCLOUDUPDATESTATE + WHEN 2 THEN '2-ParticipantAllowedToUpdate_SPL_StillTesting-2' + ELSE 'Unknown-New-Value!: ' || SPLzShare.ZPARTICIPANTCLOUDUPDATESTATE || '' + END AS 'SPLzShare-Participant Cloud Update State-SPL', + zSharePartic.ZUUID AS 'zSharePartic-UUID-4TableStart', + SPLzSharePartic.ZUUID AS 'SPLzSharePartic-UUID-4TableStart', + CASE zSharePartic.ZACCEPTANCESTATUS + WHEN 1 THEN '1-Invite-Pending_or_Declined-1' + WHEN 2 THEN '2-Invite-Accepted-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZACCEPTANCESTATUS || '' + END AS 'zSharePartic-Acceptance Status', + CASE SPLzSharePartic.ZACCEPTANCESTATUS + WHEN 1 THEN '1-Invite-Pending_or_Declined-1' + WHEN 2 THEN '2-Invite-Accepted-2' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZACCEPTANCESTATUS || '' + END AS 'SPLzSharePartic-Acceptance Status', + CASE zSharePartic.ZISCURRENTUSER + WHEN 0 THEN '0-Participant-Not_CloudStorageOwner-0' + WHEN 1 THEN '1-Participant-Is_CloudStorageOwner-1' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZISCURRENTUSER || '' + END AS 'zSharePartic-Is Current User', + CASE SPLzSharePartic.ZISCURRENTUSER + WHEN 0 THEN '0-Participant-Not_CurrentUser-0' + WHEN 1 THEN '1-Participant-Is_CurrentUser-1' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZISCURRENTUSER || '' + END AS 'SPLzSharePartic-Is Current User', + CASE zSharePartic.ZROLE + WHEN 1 THEN '1-Participant-is-Owner-Role-1' + WHEN 2 THEN '2-Participant-is-Invitee-Role-2' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZROLE || '' + END AS 'zSharePartic-Role', + CASE SPLzSharePartic.ZROLE + WHEN 1 THEN '1-Participant-is-Owner-Role-1' + WHEN 2 THEN '2-Participant-is-Invitee-Role-2' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZROLE || '' + END AS 'SPLzSharePartic-Role', + CASE zSharePartic.ZPERMISSION + WHEN 3 THEN '3-Participant-has-Full-Premissions-3' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZPERMISSION || '' + END AS 'zSharePartic-Premission', + CASE SPLzSharePartic.ZPERMISSION + WHEN 3 THEN '3-Participant-has-Full-Premissions-3' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZPERMISSION || '' + END AS 'SPLzSharePartic-Premission', + zSharePartic.ZPARTICIPANTID AS 'zSharePartic-Participant ID', + SPLzSharePartic.ZPARTICIPANTID AS 'SPLzSharePartic-Participant ID', + zSharePartic.ZUSERIDENTIFIER AS 'zSharePartic-User ID', + SPLzSharePartic.ZUSERIDENTIFIER AS 'SPLzSharePartic-User ID', + zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart', + SPLzSharePartic.Z_PK AS 'SPLzSharePartic-zPK-4TableStart', + zSharePartic.Z_PK AS 'zSharePartic-zPK-4TableStart', + zSharePartic.ZEMAILADDRESS AS 'zSharePartic-Email Address', + SPLzSharePartic.ZEMAILADDRESS AS 'SPLzSharePartic-Email Address', + zSharePartic.ZPHONENUMBER AS 'zSharePartic-Phone Number', + SPLzSharePartic.ZPHONENUMBER AS 'SPLzSharePartic-Phone Number', + CASE zSharePartic.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || zSharePartic.ZEXITSTATE || '' + END AS 'zSharePartic-Exit State', + CASE SPLzSharePartic.ZEXITSTATE + WHEN 0 THEN '0-NA_SPL_StillTesting' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.ZEXITSTATE || '' + END AS 'SPLzSharePartic-Exit State', + ParentzGenAlbum.ZUUID AS 'ParentzGenAlbum-UUID-4TableStart', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID-4TableStart', + SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID-4TableStart', + ParentzGenAlbum.ZCLOUDGUID AS 'ParentzGenAlbum-Cloud GUID-4TableStart', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud GUID-4TableStart', + SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID-4TableStart', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID-4TableStart', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID-4TableStart', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID-4TableStart', + SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID-4TableStart', + CASE zAlbumList.ZNEEDSREORDERINGNUMBER + WHEN 1 THEN '1-Yes-1' + ELSE 'Unknown-New-Value!: ' || zAlbumList.ZNEEDSREORDERINGNUMBER || '' + END AS 'zAlbumList-Needs Reordering Number', + CASE zGenAlbum.Z_ENT + WHEN 27 THEN '27-LPL-SPL-CPL_Album-DecodingVariableBasedOniOS-27' + WHEN 28 THEN '28-LPL-SPL-CPL-Shared_Album-DecodingVariableBasedOniOS-28' + WHEN 29 THEN '29-Shared_Album-DecodingVariableBasedOniOS-29' + WHEN 30 THEN '30-Duplicate_Album-Pending_Merge-30' + WHEN 35 THEN '35-SearchIndexRebuild-1600KIND-35' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.Z_ENT || '' + END AS 'zGenAlbum-zENT- Entity', + CASE ParentzGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZKIND || '' + END AS 'ParentzGenAlbum-Kind', + CASE zGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZKIND || '' + END AS 'zGenAlbum-Album Kind', + CASE SWYConverszGenAlbum.ZKIND + WHEN 2 THEN '2-Non-Shared-Album-2' + WHEN 1505 THEN '1505-Shared-Album-1505' + WHEN 1506 THEN '1506-Import_Session_AssetsImportedatSameTime-1506_RT' + WHEN 1508 THEN '1508-My_Projects_Album_CalendarCardEct_RT' + WHEN 1509 THEN '1509-SWY_Synced_Conversation_Media-1509' + WHEN 1510 THEN '1510-Duplicate_Album-Pending_Merge-1510' + WHEN 3571 THEN '3571-Progress-Sync-3571' + WHEN 3572 THEN '3572-Progress-OTA-Restore-3572' + WHEN 3573 THEN '3573-Progress-FS-Import-3573' + WHEN 3998 THEN '3998-Project Root Folder-3998' + WHEN 3999 THEN '3999-Parent_Root_for_Generic_Album-3999' + WHEN 4000 THEN '4000-Parent_is_Folder_on_Local_Device-4000' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZKIND || '' + END AS 'SWYConverszGenAlbum-Album Kind', + CASE ParentzGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'ParentzGenAlbum-Cloud-Local-State', + CASE zGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'zGenAlbum-Cloud_Local_State', + CASE SWYConverszGenAlbum.ZCLOUDLOCALSTATE + WHEN 0 THEN '0-iCldPhotos_ON=Asset_In_Shared_Album-Conv_or_iCldPhotos-OFF=Generic_Album-0' + WHEN 1 THEN '1-iCldPhotos-ON=Asset_In_Generic_Album-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDLOCALSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud_Local_State', + ParentzGenAlbum.ZTITLE AS 'ParentzGenAlbum- Title', + zGenAlbum.ZTITLE AS 'zGenAlbum- Title-User&System Applied', + SWYConverszGenAlbum.ZTITLE AS 'SWYConverszGenAlbum- Title -User&System Applied', + zGenAlbum.ZIMPORTSESSIONID AS 'zGenAlbum-Import Session ID-SWY', + zAsset.ZCONVERSATION AS 'zAsset- Conversation= zGenAlbum_zPK', + SWYConverszGenAlbum.ZIMPORTSESSIONID AS 'SWYConverszGenAlbum- Import Session ID-SWY', + zGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'zGenAlbum-Imported by Bundle Identifier', + SWYConverszGenAlbum.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'SWYzGenAlbum-Imported by Bundle Identifier', + CASE SWYConverszGenAlbum.ZSYNDICATE + WHEN 1 THEN '1-SWYConverszGenAlbum-Syndicate - SWY-SyncedFile-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSYNDICATE || '' + END AS 'SWYConverszGenAlbum- Syndicate', + DateTime(ParentzGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Creation Date', + DateTime(zGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Creation Date', + DateTime(SWYConverszGenAlbum.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Creation Date', + DateTime(zGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Creation Date', + DateTime(SWYConverszGenAlbum.ZCLOUDCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Creation Date', + DateTime(zGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Start Date', + DateTime(SWYConverszGenAlbum.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Start Date', + DateTime(zGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-End Date', + DateTime(SWYConverszGenAlbum.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-End Date', + DateTime(zGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Subscription Date', + DateTime(SWYConverszGenAlbum.ZCLOUDSUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Subscription Date', + ParentzGenAlbum.ZPENDINGITEMSCOUNT AS 'ParentzGenAlbum-Pending Items Count', + zGenAlbum.ZPENDINGITEMSCOUNT AS 'zGenAlbum-Pending Items Count', + SWYConverszGenAlbum.ZPENDINGITEMSCOUNT AS 'SWYConverszGenAlbum-Pending Items Count', + CASE ParentzGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'ParentzGenAlbum-Pending Items Type', + CASE zGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'zGenAlbum-Pending Items Type', + CASE SWYConverszGenAlbum.ZPENDINGITEMSTYPE + WHEN 1 THEN 'No-1' + WHEN 24 THEN '24-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPENDINGITEMSTYPE || '' + END AS 'SWYConverszGenAlbum-Pending Items Type', + zGenAlbum.ZCACHEDPHOTOSCOUNT AS 'zGenAlbum- Cached Photos Count', + SWYConverszGenAlbum.ZCACHEDPHOTOSCOUNT AS 'SWYConverszGenAlbum- Cached Photos Count', + zGenAlbum.ZCACHEDVIDEOSCOUNT AS 'zGenAlbum- Cached Videos Count', + SWYConverszGenAlbum.ZCACHEDVIDEOSCOUNT AS 'SWYConverszGenAlbum- Cached Videos Count', + zGenAlbum.ZCACHEDCOUNT AS 'zGenAlbum- Cached Count', + SWYConverszGenAlbum.ZCACHEDCOUNT AS 'SWYConverszGenAlbum- Cached Count', + ParentzGenAlbum.ZSYNCEVENTORDERKEY AS 'ParentzGenAlbum-Sync Event Order Key', + zGenAlbum.ZSYNCEVENTORDERKEY AS 'zGenAlbum-Sync Event Order Key', + SWYConverszGenAlbum.ZSYNCEVENTORDERKEY AS 'SWYConverszGenAlbum-Sync Event Order Key', + CASE zGenAlbum.ZHASUNSEENCONTENT + WHEN 0 THEN 'No Unseen Content-StillTesting-0' + WHEN 1 THEN 'Unseen Content-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZHASUNSEENCONTENT || '' + END AS 'zGenAlbum-Has Unseen Content', + CASE SWYConverszGenAlbum.ZHASUNSEENCONTENT + WHEN 0 THEN 'No Unseen Content-StillTesting-0' + WHEN 1 THEN 'Unseen Content-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZHASUNSEENCONTENT || '' + END AS 'SWYConverszGenAlbum-Has Unseen Content', + zGenAlbum.ZUNSEENASSETSCOUNT AS 'zGenAlbum-Unseen Asset Count', + SWYConverszGenAlbum.ZUNSEENASSETSCOUNT AS 'SWYConverszGenAlbum-Unseen Asset Count', + CASE zGenAlbum.ZISOWNED + WHEN 0 THEN 'zGenAlbum-Not Owned by Device Apple Acnt-0' + WHEN 1 THEN 'zGenAlbum-Owned by Device Apple Acnt-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISOWNED || '' + END AS 'zGenAlbum-is Owned', + CASE SWYConverszGenAlbum.ZISOWNED + WHEN 0 THEN 'SWYConverszGenAlbum-Not Owned by Device Apple Acnt-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Owned by Device Apple Acnt-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISOWNED || '' + END AS 'SWYConverszGenAlbum-is Owned', + CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATE + WHEN 0 THEN 'zGenAlbum-Cloud Album Owned by Device Apple Acnt-0' + WHEN 2 THEN 'zGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATE || '' + END AS 'zGenAlbum-Cloud Relationship State', + CASE SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATE + WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Album Owned by Device Apple Acnt-0' + WHEN 2 THEN 'SWYConverszGenAlbum-Cloud Album Not Owned by Device Apple Acnt-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Relationship State', + CASE zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL + WHEN 0 THEN 'zGenAlbum-Shared Album Accessible Local Device-0' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || '' + END AS 'zGenAlbum-Cloud Relationship State Local', + CASE SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL + WHEN 0 THEN 'SWYConverszGenAlbum-Shared Album Accessible Local Device-0' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDRELATIONSHIPSTATELOCAL || '' + END AS 'SWYConverszGenAlbum-Cloud Relationship State Local', + zGenAlbum.ZCLOUDOWNEREMAILKEY AS 'zGenAlbum-Cloud Owner Mail Key', + SWYConverszGenAlbum.ZCLOUDOWNEREMAILKEY AS 'SWYConverszGenAlbum-Cloud Owner Mail Key', + zGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'zGenAlbum-Cloud Owner Frist Name', + SWYConverszGenAlbum.ZCLOUDOWNERFIRSTNAME AS 'SWYConverszGenAlbum-Cloud Owner Frist Name', + zGenAlbum.ZCLOUDOWNERLASTNAME AS 'zGenAlbum-Cloud Owner Last Name', + SWYConverszGenAlbum.ZCLOUDOWNERLASTNAME AS 'SWYConverszGenAlbum-Cloud Owner Last Name', + zGenAlbum.ZCLOUDOWNERFULLNAME AS 'zGenAlbum-Cloud Owner Full Name', + SWYConverszGenAlbum.ZCLOUDOWNERFULLNAME AS 'SWYConverszGenAlbum-Cloud Owner Full Name', + zGenAlbum.ZCLOUDPERSONID AS 'zGenAlbum-Cloud Person ID', + SWYConverszGenAlbum.ZCLOUDPERSONID AS 'SWYConverszGenAlbum-Cloud Person ID', + zAsset.ZCLOUDOWNERHASHEDPERSONID AS 'zAsset-Cloud Owner Hashed Person ID', + zGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'zGenAlbum-Cloud Owner Hashed Person ID', + SWYConverszGenAlbum.ZCLOUDOWNERHASHEDPERSONID AS 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID', + CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL + WHEN 0 THEN 'zGenAlbum-Local Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'zGenAlbum-Local Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || '' + END AS 'zGenAlbum-Local Cloud Multi-Contributors Enabled', + CASE SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL + WHEN 0 THEN 'SWYConverszGenAlbum-Local Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLEDLOCAL || '' + END AS 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled', + CASE zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED + WHEN 0 THEN 'zGenAlbum-Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'zGenAlbum-Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || '' + END AS 'zGenAlbum-Cloud Multi-Contributors Enabled', + CASE SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED + WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Single Contributor Enabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDMULTIPLECONTRIBUTORSENABLED || '' + END AS 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled', + CASE zGenAlbum.ZCLOUDALBUMSUBTYPE + WHEN 0 THEN 'zGenAlbum Multi-Contributor-0' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDALBUMSUBTYPE || '' + END AS 'zGenAlbum-Cloud Album Sub Type', + CASE SWYConverszGenAlbum.ZCLOUDALBUMSUBTYPE + WHEN 0 THEN 'SWYConverszGenAlbum Multi-Contributor-0' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDALBUMSUBTYPE || '' + END AS 'SWYConverszGenAlbum-Cloud Album Sub Type', + DateTime(zGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Contribution Date', + DateTime(SWYConverszGenAlbum.ZCLOUDLASTCONTRIBUTIONDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Contribution Date', + DateTime(zGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Cloud Last Interesting Change Date', + DateTime(SWYConverszGenAlbum.ZCLOUDLASTINTERESTINGCHANGEDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Cloud Last Interesting Change Date', + CASE zGenAlbum.ZCLOUDNOTIFICATIONSENABLED + WHEN 0 THEN 'zGenAlbum-Cloud Notifications Disabled-0' + WHEN 1 THEN 'zGenAlbum-Cloud Notifications Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDNOTIFICATIONSENABLED || '' + END AS 'zGenAlbum-Cloud Notification Enabled', + CASE SWYConverszGenAlbum.ZCLOUDNOTIFICATIONSENABLED + WHEN 0 THEN 'SWYConverszGenAlbum-Cloud Notifications Disabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Cloud Notifications Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDNOTIFICATIONSENABLED || '' + END AS 'SWYConverszGenAlbum-Cloud Notification Enabled', + CASE ParentzGenAlbum.ZISPINNED + WHEN 0 THEN '0-ParentzGenAlbum Not Pinned-0' + WHEN 1 THEN '1-ParentzGenAlbum Pinned-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPINNED || '' + END AS 'ParentzGenAlbum-Pinned', + CASE zGenAlbum.ZISPINNED + WHEN 0 THEN 'zGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'zGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPINNED || '' + END AS 'zGenAlbum-Pinned', + CASE SWYConverszGenAlbum.ZISPINNED + WHEN 0 THEN 'SWYConverszGenAlbum-Local Not Pinned-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Local Pinned-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPINNED || '' + END AS 'SWYConverszGenAlbum-Pinned', + CASE ParentzGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'ParentzGenAlbum-Custom Sort Key', + CASE zGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-zGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-zGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-zGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'zGenAlbum-Custom Sort Key', + CASE SWYConverszGenAlbum.ZCUSTOMSORTKEY + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Manually-0_RT' + WHEN 1 THEN '1-SWYConverszGenAlbum-CusSrtAsc0=Sorted_Newest_First-CusSrtAsc1=Sorted_Oldest_First-1-RT' + WHEN 5 THEN '5-SWYConverszGenAlbum-Sorted_by_Title-5_RT' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTKEY || '' + END AS 'SWYConverszGenAlbum-Custom Sort Key', + CASE ParentzGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'ParentzGenAlbum-Custom Sort Ascending', + CASE zGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-zGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-zGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'zGenAlbum-Custom Sort Ascending', + CASE SWYConverszGenAlbum.ZCUSTOMSORTASCENDING + WHEN 0 THEN '0-SWYConverszGenAlbum-Sorted_Newest_First-0' + WHEN 1 THEN '1-SWYConverszGenAlbum-Sorted_Oldest_First-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMSORTASCENDING || '' + END AS 'SWYConverszGenAlbum-Custom Sort Ascending', + CASE ParentzGenAlbum.ZISPROTOTYPE + WHEN 0 THEN '0-ParentzGenAlbum Not Prototype-0' + WHEN 1 THEN '1-ParentzGenAlbum Prototype-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZISPROTOTYPE || '' + END AS 'ParentzGenAlbum-Is Prototype', + CASE zGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'zGenAlbum-Not Prototype-0' + WHEN 1 THEN 'zGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZISPROTOTYPE || '' + END AS 'zGenAlbum-Is Prototype', + CASE SWYConverszGenAlbum.ZISPROTOTYPE + WHEN 0 THEN 'SWYConverszGenAlbum-Not Prototype-0' + WHEN 1 THEN 'SWYConverszGenAlbum-Prototype-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZISPROTOTYPE || '' + END AS 'SWYConverszGenAlbum-Is Prototype', + CASE ParentzGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'ParentzGenAlbum-Project Document Type', + CASE zGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'zGenAlbum-Project Document Type', + CASE SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPROJECTDOCUMENTTYPE || '' + END AS 'SWYConverszGenAlbum-Project Document Type', + CASE ParentzGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'ParentzGenAlbum-Custom Query Type', + CASE zGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'zGenAlbum-Custom Query Type', + CASE SWYConverszGenAlbum.ZCUSTOMQUERYTYPE + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCUSTOMQUERYTYPE || '' + END AS 'SWYConverszGenAlbum-Custom Query Type', + CASE ParentzGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN '0-ParentzGenAlbum Not In Trash-0' + WHEN 1 THEN '1-ParentzGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZTRASHEDSTATE || '' + END AS 'ParentzGenAlbum-Trashed State', + DateTime(ParentzGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'ParentzGenAlbum-Trash Date', + CASE zGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'zGenAlbum Not In Trash-0' + WHEN 1 THEN 'zGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZTRASHEDSTATE || '' + END AS 'zGenAlbum-Trashed State', + DateTime(zGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'zGenAlbum-Trash Date', + CASE SWYConverszGenAlbum.ZTRASHEDSTATE + WHEN 0 THEN 'SWYConverszGenAlbum Not In Trash-0' + WHEN 1 THEN 'SWYConverszGenAlbum Album In Trash-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZTRASHEDSTATE || '' + END AS 'SWYConverszGenAlbum-Trashed State', + DateTime(SWYConverszGenAlbum.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'SWYConverszGenAlbum-Trash Date', + CASE ParentzGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN '0-ParentzGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN '1-ParentzGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || ParentzGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'ParentzGenAlbum-Cloud Delete State', + CASE zGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'zGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'zGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'zGenAlbum-Cloud Delete State', + CASE SWYConverszGenAlbum.ZCLOUDDELETESTATE + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Not Deleted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Album Deleted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDDELETESTATE || '' + END AS 'SWYConverszGenAlbum-Cloud Delete State', + CASE zGenAlbum.ZCLOUDOWNERISWHITELISTED + WHEN 0 THEN 'zGenAlbum Cloud Owner Not Whitelisted-0' + WHEN 1 THEN 'zGenAlbum Cloud Owner Whitelisted-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDOWNERISWHITELISTED || '' + END AS 'zGenAlbum-Cloud Owner Whitelisted', + CASE SWYConverszGenAlbum.ZCLOUDOWNERISWHITELISTED + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Owner Not Whitelisted-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Owner Whitelisted-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDOWNERISWHITELISTED || '' + END AS 'SWYConverszGenAlbum-Cloud Owner Whitelisted', + CASE zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL + WHEN 0 THEN 'zGenAlbum Cloud Local Public URL Disabled-0' + WHEN 1 THEN 'zGenAlbum Cloud Local has Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || '' + END AS 'zGenAlbum-Cloud Local Public URL Enabled', + CASE SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Local Public URL Disabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Local has Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLEDLOCAL || '' + END AS 'SWYConverszGenAlbum-Cloud Local Public URL Enabled', + CASE zGenAlbum.ZCLOUDPUBLICURLENABLED + WHEN 0 THEN 'zGenAlbum Cloud Public URL Disabled-0' + WHEN 1 THEN 'zGenAlbum Cloud Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZCLOUDPUBLICURLENABLED || '' + END AS 'zGenAlbum-Cloud Public URL Enabled', + zGenAlbum.ZPUBLICURL AS 'zGenAlbum-Public URL', + CASE SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLED + WHEN 0 THEN 'SWYConverszGenAlbum Cloud Public URL Disabled-0' + WHEN 1 THEN 'SWYConverszGenAlbum Cloud Public URL Enabled-1' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZCLOUDPUBLICURLENABLED || '' + END AS 'SWYConverszGenAlbum-Cloud Public URL Enabled', + SWYConverszGenAlbum.ZPUBLICURL AS 'SWYConverszGenAlbum-Public URL', + zGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'zGenAlbum-Key Asset Face Thumb Index', + SWYConverszGenAlbum.ZKEYASSETFACETHUMBNAILINDEX AS 'SWYConverszGenAlbum-Key Asset Face Thumb Index', + zGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'zGenAlbum-Project Text Extension ID', + SWYConverszGenAlbum.ZPROJECTEXTENSIONIDENTIFIER AS 'SWYConverszGenAlbum-Project Text Extension ID', + zGenAlbum.ZUSERQUERYDATA AS 'zGenAlbum-User Query Data', + SWYConverszGenAlbum.ZUSERQUERYDATA AS 'SWYConverszGenAlbum-User Query Data', + zGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'zGenAlbum-Custom Query Parameters', + SWYConverszGenAlbum.ZCUSTOMQUERYPARAMETERS AS 'SWYConverszGenAlbum-Custom Query Parameters', + zGenAlbum.ZPROJECTDATA AS 'zGenAlbum-Project Data', + SWYConverszGenAlbum.ZPROJECTDATA AS 'SWYConverszGenAlbum-Project Data', + CASE zGenAlbum.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zGenAlbum-Search Index Rebuild State', + CASE SWYConverszGenAlbum.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Search Index State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Search Index State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'SWYConverszGenAlbum-Search Index Rebuild State', + CASE zGenAlbum.ZDUPLICATETYPE + WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0' + WHEN 1 THEN 'Duplicate Asset_Pending-Merge-1' + WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZDUPLICATETYPE || '' + END AS 'zGenAlbum-Duplicate Type', + CASE SWYConverszGenAlbum.ZDUPLICATETYPE + WHEN 0 THEN '0-StillTesting GenAlbumDuplicateType-0' + WHEN 1 THEN '1-Duplicate Asset_Pending-Merge-1' + WHEN 2 THEN '2-StillTesting GenAlbumDuplicateType-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZDUPLICATETYPE || '' + END AS 'SWYConverszGenAlbum-Duplicate Type', + CASE zGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || zGenAlbum.ZPRIVACYSTATE || '' + END AS 'zGenAlbum-Privacy State', + CASE SWYConverszGenAlbum.ZPRIVACYSTATE + WHEN 0 THEN '0-StillTesting GenAlbm-Privacy State-0' + WHEN 1 THEN '1-StillTesting GenAlbm-Privacy State-1' + WHEN 2 THEN '2-StillTesting GenAlbm-Privacy State-2' + ELSE 'Unknown-New-Value!: ' || SWYConverszGenAlbum.ZPRIVACYSTATE || '' + END AS 'SWYConverszGenAlbum-Privacy State', + zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID-4TableStart', + CASE zCldShareAlbumInvRec.ZISMINE + WHEN 0 THEN 'Not My Invitation-0' + WHEN 1 THEN 'My Invitation-1' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZISMINE || '' + END AS 'zCldShareAlbumInvRec-Is My Invitation to Shared Album', + CASE zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL + WHEN 0 THEN '0-StillTesting-0' + WHEN 1 THEN '1-StillTesting-1' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATELOCAL || '' + END AS 'zCldShareAlbumInvRec-Invitation State Local', + CASE zCldShareAlbumInvRec.ZINVITATIONSTATE + WHEN 1 THEN 'Shared Album Invitation Pending-1' + WHEN 2 THEN 'Shared Album Invitation Accepted-2' + WHEN 3 THEN 'Shared Album Invitation Declined-3' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zCldShareAlbumInvRec.ZINVITATIONSTATE || '' + END AS 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status', + DateTime(zCldShareAlbumInvRec.ZINVITEESUBSCRIPTIONDATE + 978307200, 'UNIXEPOCH') AS 'zCldShareAlbumInvRec-Subscription Date', + zCldShareAlbumInvRec.ZINVITEEFIRSTNAME AS 'zCldShareAlbumInvRec-Invitee First Name', + zCldShareAlbumInvRec.ZINVITEELASTNAME AS 'zCldShareAlbumInvRec-Invitee Last Name', + zCldShareAlbumInvRec.ZINVITEEFULLNAME AS 'zCldShareAlbumInvRec-Invitee Full Name', + zCldShareAlbumInvRec.ZINVITEEHASHEDPERSONID AS 'zCldShareAlbumInvRec-Invitee Hashed Person ID', + zCldShareAlbumInvRec.ZINVITEEEMAILKEY AS 'zCldShareAlbumInvRec-Invitee Email Key', + zGenAlbum.ZKEYASSETFACEIDENTIFIER AS 'zGenAlbum-Key Asset Face ID', + CASE + WHEN zAsset.ZFACEAREAPOINTS > 0 THEN 'Face Area Points Detected in zAsset' + ELSE 'Face Area Points Not Detected in zAsset' + END AS 'zFaceCrop-Face Area Points', + zAsset.ZFACEADJUSTMENTVERSION AS 'zAsset-Face Adjustment Version', + zAddAssetAttr.ZFACEANALYSISVERSION AS 'zAddAssetAttr-Face Analysis Version', + CASE zDetFace.ZASSETVISIBLE + WHEN 0 THEN 'Asset Not Visible Photo Library-0' + WHEN 1 THEN 'Asset Visible Photo Library-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZASSETVISIBLE || '' + END AS 'zDetFace-Asset Visible', + zPerson.ZFACECOUNT AS 'zPerson-Face Count', + zDetFace.ZFACECROP AS 'zDetFace-Face Crop', + zDetFace.ZFACEALGORITHMVERSION AS 'zDetFace-Face Algorithm Version', + zDetFace.ZADJUSTMENTVERSION AS 'zDetFace-Adjustment Version', + zDetFace.ZUUID AS 'zDetFace-UUID-4TableStart', + zPerson.ZPERSONUUID AS 'zPerson-Person UUID-4TableStart', + zPerson.ZMDID AS 'zPerson - MD ID', + CASE zPerson.ZASSETSORTORDER + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZASSETSORTORDER || '' + END AS 'zPerson - Asset Sort Order', + CASE zDetFace.ZCONFIRMEDFACECROPGENERATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZCONFIRMEDFACECROPGENERATIONSTATE || '' + END AS 'zDetFace-Confirmed Face Crop Generation State', + CASE zDetFace.ZMANUAL + WHEN 0 THEN 'zDetFace-Auto Detected-0' + WHEN 1 THEN 'zDetFace-Manually Detected-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZMANUAL || '' + END AS 'zDetFace-Manual', + CASE zDetFace.ZDETECTIONTYPE + WHEN 1 THEN '1-StillTesting' + WHEN 3 THEN '3-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZDETECTIONTYPE || '' + END AS 'zDetFace-Detection Type', + CASE zPerson.ZDETECTIONTYPE + WHEN 1 THEN '1-StillTesting' + WHEN 3 THEN '3-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZDETECTIONTYPE || '' + END AS 'zPerson-Detection Type', + CASE zDetFace.ZVIPMODELTYPE + WHEN 0 THEN 'Not VIP-0' + WHEN 1 THEN 'VIP-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZVIPMODELTYPE || '' + END AS 'zDetFace-VIP Model Type', + CASE zDetFace.ZNAMESOURCE + WHEN 0 THEN 'No Name Listed-0' + WHEN 1 THEN '1-Face Crop-1' + WHEN 2 THEN '2-Verified-Has-Person-URI' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZNAMESOURCE || '' + END AS 'zDetFace-Name Source', + CASE zDetFace.ZCLOUDNAMESOURCE + WHEN 0 THEN 'NA-0' + WHEN 1 THEN '1-User Added Via Face Crop-1' + WHEN 5 THEN '5-Asset Shared has Name' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZCLOUDNAMESOURCE || '' + END AS 'zDetFace-Cloud Name Source', + zPerson.ZMERGECANDIDATECONFIDENCE AS 'zPerson-Merge Candidate Confidence', + zPerson.ZPERSONURI AS 'zPerson-Person URI', + zPerson.ZDISPLAYNAME AS 'zPerson-Display Name', + zPerson.ZFULLNAME AS 'zPerson-Full Name', + CASE zPerson.ZCLOUDVERIFIEDTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDVERIFIEDTYPE || '' + END AS 'zPerson-Cloud Verified Type', + CASE zFaceCrop.ZSTATE + WHEN 5 THEN 'Validated-5' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZSTATE || '' + END AS 'zFaceCrop-State', + CASE zFaceCrop.ZTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-Active' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZTYPE || '' + END AS 'zFaceCrop-Type', + zFaceCrop.ZUUID AS 'zFaceCrop-UUID-4TableStart', + CASE zPerson.ZTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZTYPE || '' + END AS 'zPerson-Type', + CASE zPerson.ZVERIFIEDTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zPerson.ZVERIFIEDTYPE || '' + END AS 'zPerson-Verified Type', + CASE zPerson.ZGENDERTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Male-1' + WHEN 2 THEN 'Female-2' + ELSE 'Unknown-New-Value!: ' || zPerson.ZGENDERTYPE || '' + END AS 'zPerson-Gender Type', + CASE zDetFace.ZGENDERTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Male-1' + WHEN 2 THEN 'Female-2' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZGENDERTYPE || '' + END AS 'zDetFace-Gender Type', + zDetFace.ZCENTERX AS 'zDetFace-Center X', + zDetFace.ZCENTERY AS 'zDetFace-Center Y', + CASE zPerson.ZAGETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Infant-Toddler Age Type-1' + WHEN 2 THEN 'Toddler-Child Age Type-2' + WHEN 3 THEN 'Child-Young Adult Age Type-3' + WHEN 4 THEN 'Young Adult-Adult Age Type-4' + WHEN 5 THEN 'Adult-5' + ELSE 'Unknown-New-Value!: ' || zPerson.ZAGETYPE || '' + END AS 'zPerson-Age Type Estimate', + CASE zDetFace.ZAGETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Infant-Toddler Age Type-1' + WHEN 2 THEN 'Toddler-Child Age Type-2' + WHEN 3 THEN 'Child-Young Adult Age Type-3' + WHEN 4 THEN 'Young Adult-Adult Age Type-4' + WHEN 5 THEN 'Adult-5' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZAGETYPE || '' + END AS 'zDetFace-Age Type Estimate', + CASE zDetFace.ZETHNICITYTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Black-African American-1' + WHEN 2 THEN 'White-2' + WHEN 3 THEN 'Hispanic-Latino-3' + WHEN 4 THEN 'Asian-4' + WHEN 5 THEN 'Native Hawaiian-Other Pacific Islander-5' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZETHNICITYTYPE || '' + END AS 'zDetFace-Ethnicity Type', + CASE zDetFace.ZSKINTONETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Light-Pale White Skin Tone-1' + WHEN 2 THEN 'White-Fair Skin Tone-2' + WHEN 3 THEN 'Medium-White to Olive Skin Tone-3' + WHEN 4 THEN 'Olive-Moderate Brown Skin Tone-4' + WHEN 5 THEN 'Brown-Dark Brown Skin Tone-5' + WHEN 6 THEN 'Black-Very Dark Brown to Black Skin Tone-6' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZSKINTONETYPE || '' + END AS 'zDetFace-Skin Tone Type', + CASE zDetFace.ZHAIRTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + WHEN 6 THEN '6-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHAIRTYPE || '' + END AS 'zDetFace-Hair Type', + CASE zDetFace.ZHAIRCOLORTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Black-Brown Hair Color-1' + WHEN 2 THEN 'Brown-Blonde Hair Color-2' + WHEN 3 THEN 'Brown-Red Hair Color-3' + WHEN 4 THEN 'Red-White Hair Color-4' + WHEN 5 THEN 'StillTesting-Artifical-5' + WHEN 6 THEN 'White-Bald Hair Color-6' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHAIRCOLORTYPE || '' + END AS 'zDetFace-Hair Color Type', + CASE zDetFace.ZHEADGEARTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-No Headgear' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHEADGEARTYPE || '' + END AS 'zDetFace-Head Gear Type', + CASE zDetFace.ZFACIALHAIRTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Clean Shaven Facial Hair Type-1' + WHEN 2 THEN 'Beard Facial Hair Type-2' + WHEN 3 THEN 'Goatee Facial Hair Type-3' + WHEN 4 THEN 'Mustache Facial Hair Type-4' + WHEN 5 THEN 'Stubble Facial Hair Type-5' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZFACIALHAIRTYPE || '' + END AS 'zDetFace-Facial Hair Type', + CASE zDetFace.ZHASFACEMASK + WHEN 0 THEN 'No Mask-0' + WHEN 1 THEN 'Has Mask-1' + WHEN 2 THEN '2-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHASFACEMASK || '' + END AS 'zDetFace-Has Face Mask', + CASE zDetFace.ZPOSETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Face Frontal Pose-1' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN 'Face Profile Pose-3' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZPOSETYPE || '' + END AS 'zDetFace-Pose Type', + CASE zDetFace.ZFACEEXPRESSIONTYPE + WHEN 0 THEN 'NA-0' + WHEN 1 THEN 'Disgusted-Angry-1' + WHEN 2 THEN 'Suprised-Fearful-2' + WHEN 3 THEN 'Neutral-3' + WHEN 4 THEN 'Confident-Smirk-4' + WHEN 5 THEN 'Happiness-5' + WHEN 6 THEN 'Sadness-6' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZFACEEXPRESSIONTYPE || '' + END AS 'zDetFace-Face Expression Type', + CASE zDetFace.ZHASSMILE + WHEN 0 THEN 'zDetFace No Smile-0' + WHEN 1 THEN 'zDetFace Smile-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHASSMILE || '' + END AS 'zDetFace-Has Smile', + CASE zDetFace.ZSMILETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'zDetFace Smile No Teeth-1' + WHEN 2 THEN 'zDetFace Smile has Teeth-2' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZSMILETYPE || '' + END AS 'zDetFace-Smile Type', + CASE zDetFace.ZLIPMAKEUPTYPE + WHEN 0 THEN 'zDetFace No Lip Makeup-0' + WHEN 1 THEN 'zDetFace Lip Makeup Detected-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZLIPMAKEUPTYPE || '' + END AS 'zDetFace-Lip Makeup Type', + CASE zDetFace.ZEYESSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Eyes Closed-1' + WHEN 2 THEN 'Eyes Open-2' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZEYESSTATE || '' + END AS 'zDetFace-Eyes State', + CASE zDetFace.ZISLEFTEYECLOSED + WHEN 0 THEN 'Left Eye Open-0' + WHEN 1 THEN 'Left Eye Closed-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZISLEFTEYECLOSED || '' + END AS 'zDetFace-Is Left Eye Closed', + CASE zDetFace.ZISRIGHTEYECLOSED + WHEN 0 THEN 'Right Eye Open-0' + WHEN 1 THEN 'Right Eye Closed-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZISRIGHTEYECLOSED || '' + END AS 'zDetFace-Is Right Eye Closed', + zDetFace.ZGAZECENTERX AS 'zDetFace-Gaze Center X', + zDetFace.ZGAZECENTERY AS 'zDetFace-Gaze Center Y', + CASE zDetFace.ZGAZETYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 4 THEN '4-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZGAZETYPE || '' + END AS 'zDetFace-Face Gaze Type', + CASE zDetFace.ZGLASSESTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN 'Eye Glasses-1' + WHEN 2 THEN 'Sun Glasses-2' + WHEN 3 THEN 'No Glasses-3' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZGLASSESTYPE || '' + END AS 'zDetFace-Eye Glasses Type', + CASE zDetFace.ZEYEMAKEUPTYPE + WHEN 0 THEN 'No Eye Makeup-0' + WHEN 1 THEN 'Eye Makeup Detected-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZEYEMAKEUPTYPE || '' + END AS 'zDetFace-Eye Makeup Type', + zDetFace.ZCLUSTERSEQUENCENUMBER AS 'zDetFace-Cluster Squence Number Key', + zDetFace.ZGROUPINGIDENTIFIER AS 'zDetFace-Grouping ID', + zDetFace.ZMASTERIDENTIFIER AS 'zDetFace-Master ID', + zDetFace.ZQUALITY AS 'zDetFace-Quality', + zDetFace.ZQUALITYMEASURE AS 'zDetFace-Quality Measure', + zDetFace.ZSOURCEHEIGHT AS 'zDetFace-Source Height', + zDetFace.ZSOURCEWIDTH AS 'zDetFace-Source Width', + CASE zDetFace.ZHIDDEN + WHEN 0 THEN 'Not Hidden-0' + WHEN 1 THEN 'Hidden-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZHIDDEN || '' + END AS 'zDetFace-Hidden-Asset Hidden', + CASE zDetFace.ZISINTRASH + WHEN 0 THEN 'Not In Trash-0' + WHEN 1 THEN 'In Trash-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZISINTRASH || '' + END AS 'zDetFace-In Trash-Recently Deleted', + CASE zDetFace.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Not Synced with Cloud-0' + WHEN 1 THEN 'Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZCLOUDLOCALSTATE || '' + END AS 'zDetFace-Cloud Local State', + CASE zDetFace.ZTRAININGTYPE + WHEN 0 THEN '0-StillTesting' + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || zDetFace.ZTRAININGTYPE + END AS 'zDetFace-Training Type', + zDetFace.ZPOSEYAW AS 'zDetFace.Pose Yaw', + zDetFace.ZBODYCENTERX AS 'zDetFace-Body Center X', + zDetFace.ZBODYCENTERY AS 'zDetFace-Body Center Y', + zDetFace.ZBODYHEIGHT AS 'zDetFace-Body Height', + zDetFace.ZBODYWIDTH AS 'zDetFace-Body Width', + zDetFace.ZROLL AS 'zDetFace-Roll', + zDetFace.ZSIZE AS 'zDetFace-Size', + zDetFace.ZCLUSTERSEQUENCENUMBER AS 'zDetFace-Cluster Squence Number', + zDetFace.ZBLURSCORE AS 'zDetFace-Blur Score', + zDetFacePrint.ZFACEPRINTVERSION AS 'zDetFacePrint-Face Print Version', + zMedAnlyAstAttr.ZFACECOUNT AS 'zMedAnlyAstAttr-Face Count', + zDetFaceGroup.ZUUID AS 'zDetFaceGroup-UUID-4TableStart', + zDetFaceGroup.ZPERSONBUILDERSTATE AS 'zDetFaceGroup-Person Builder State', + zDetFaceGroup.ZUNNAMEDFACECOUNT AS 'zDetFaceGroup-UnNamed Face Count', + zPerson.ZINPERSONNAMINGMODEL AS 'zPerson-In Person Naming Model', + zPerson.ZKEYFACEPICKSOURCE AS 'zPerson-Key Face Pick Source Key', + zPerson.ZMANUALORDER AS 'zPerson-Manual Order Key', + zPerson.ZQUESTIONTYPE AS 'zPerson-Question Type', + zPerson.ZSUGGESTEDFORCLIENTTYPE AS 'zPerson-Suggested For Client Type', + zPerson.ZMERGETARGETPERSON AS 'zPerson-Merge Target Person', + CASE zPerson.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Person Not Synced with Cloud-0' + WHEN 1 THEN 'Person Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDLOCALSTATE + END AS 'zPerson-Cloud Local State', + CASE zFaceCrop.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Not Synced with Cloud-0' + WHEN 1 THEN 'Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDLOCALSTATE || '' + END AS 'zFaceCrop-Cloud Local State', + CASE zFaceCrop.ZCLOUDTYPE + WHEN 0 THEN 'Has Name-0' + WHEN 5 THEN 'Has Face Key-5' + WHEN 12 THEN '12-StillTesting' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDTYPE || '' + END AS 'zFaceCrop-Cloud Type', + CASE zPerson.ZCLOUDDELETESTATE + WHEN 0 THEN 'Cloud Not Deleted-0' + WHEN 1 THEN 'Cloud Deleted-1' + ELSE 'Unknown-New-Value!: ' || zPerson.ZCLOUDDELETESTATE || '' + END AS 'zPerson-Cloud Delete State', + CASE zFaceCrop.ZCLOUDDELETESTATE + WHEN 0 THEN 'Cloud Not Deleted-0' + WHEN 1 THEN 'Cloud Deleted-1' + ELSE 'Unknown-New-Value!: ' || zFaceCrop.ZCLOUDDELETESTATE || '' + END AS 'zFaceCrop-Cloud Delete State', + zFaceCrop.ZINVALIDMERGECANDIDATEPERSONUUID AS 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart', + zAsset.ZHIGHLIGHTVISIBILITYSCORE AS 'zAsset-Highlight Visibility Score', + zMemory.ZUUID AS 'zMemory-UUID-4TableStart', + zMemory.ZASSETLISTPREDICATE AS 'zMemory-AssetListPredicte', + zMemory.ZSCORE AS 'zMemory-Score', + zMemory.ZSUBTITLE AS 'zMemory-SubTitle', + zMemory.ZTITLE AS 'zMemory-Title', + CASE zMemory.ZCATEGORY + WHEN 1 THEN '1-StillTesting' + WHEN 3 THEN '3-StillTesting' + WHEN 8 THEN '8-StillTesting' + WHEN 16 THEN '16-StillTesting' + WHEN 17 THEN '17-StillTesting' + WHEN 19 THEN '19-StillTesting' + WHEN 21 THEN '21-StillTesting' + WHEN 201 THEN '201-StillTesting' + WHEN 203 THEN '203-StillTesting' + WHEN 204 THEN '204-StillTesting' + WHEN 211 THEN '211-StillTesting' + WHEN 217 THEN '217-StillTesting' + WHEN 220 THEN '220-StillTesting' + WHEN 301 THEN '301-StillTesting' + WHEN 302 THEN '302-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZCATEGORY || '' + END AS 'zMemory-Category', + CASE zMemory.ZSUBCATEGORY + WHEN 0 THEN '0-StillTesting' + WHEN 201 THEN '201-StillTesting' + WHEN 204 THEN '204-StillTesting' + WHEN 206 THEN '206-StillTesting' + WHEN 207 THEN '207-StillTesting' + WHEN 212 THEN '212-StillTesting' + WHEN 213 THEN '213-StillTesting' + WHEN 214 THEN '214-StillTesting' + WHEN 402 THEN '402-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSUBCATEGORY || '' + END AS 'zMemory-SubCategory', + DateTime(zMemory.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Creation Date', + DateTime(zMemory.ZLASTENRICHMENTDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Enrichment Date', + CASE zMemory.ZUSERACTIONOPTIONS + WHEN 0 THEN 'User Actions Options Memory Not User Created-0' + WHEN 1 THEN 'User Actions Options Memory User Created-1' + ELSE 'Unknown-New-Value!: ' || zMemory.ZUSERACTIONOPTIONS || '' + END AS 'zMemory-User Action Options', + CASE zMemory.ZFAVORITE + WHEN 0 THEN 'Memory Not Favorite-0' + WHEN 1 THEN 'Memory Favorite-1' + END AS 'zMemory-Favorite Memory', + zMemory.ZVIEWCOUNT AS 'zMemory-View Count', + zMemory.ZPLAYCOUNT AS 'zMemory-Play Count', + zMemory.ZREJECTED AS 'zMemory-Rejected', + zMemory.ZSHARECOUNT AS 'zMemory-Share Count', + zMemory.ZSHARINGCOMPOSITION AS 'zMemory-Sharing Composition', + DateTime(zMemory.ZLASTMOVIEPLAYEDDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Movie Play Date', + DateTime(zMemory.ZLASTVIEWEDDATE + 978307200, 'UNIXEPOCH') AS 'zMemory-Last Viewed Date', + zMemory.ZPENDINGPLAYCOUNT AS 'zMemory-Pending Play Count Memory', + zMemory.ZPENDINGSHARECOUNT AS 'zMemory-Pending Share Count Memory', + zMemory.ZPENDINGVIEWCOUNT AS 'zMemory-Pending View Count Memory', + zMemory.ZPENDINGSTATE AS 'zMemory-Pending State', + CASE zMemory.ZFEATUREDSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZFEATUREDSTATE || '' + END AS 'zMemory-Featured State', + zMemory.ZPHOTOSGRAPHVERSION AS 'zMemory-Photos Graph Version', + zMemory.ZGRAPHMEMORYIDENTIFIER AS 'zMemory-Graph Memory Identifier', + CASE zMemory.ZNOTIFICATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + WHEN 2 THEN '2-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZNOTIFICATIONSTATE || '' + END AS 'zMemory-Notification State', + CASE zMemory.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Memory Not Synced with Cloud-0' + WHEN 1 THEN 'Memory Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || zMemory.ZCLOUDLOCALSTATE || '' + END AS 'zMemory-Cloud Local State', + CASE zMemory.ZCLOUDDELETESTATE + WHEN 0 THEN 'Memory Not Deleted-0' + WHEN 1 THEN 'Memory Deleted-1' + ELSE 'Unknown-New-Value!: ' || zMemory.ZCLOUDDELETESTATE || '' + END AS 'zMemory-Cloud Delete State', + CASE zMemory.ZSTORYCOLORGRADEKIND + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSTORYCOLORGRADEKIND || '' + END AS 'zMemory-Story Color Grade Kind', + CASE zMemory.ZSTORYSERIALIZEDTITLECATEGORY + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSTORYSERIALIZEDTITLECATEGORY || '' + END AS 'zMemory-Story Serialized Title Category', + CASE zMemory.ZSYNDICATEDCONTENTSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSYNDICATEDCONTENTSTATE || '' + END AS 'zMemory-Syndicated Content State', + CASE zMemory.ZSEARCHINDEXREBUILDSTATE + WHEN 0 THEN '0-StillTesting Memory-Search Index State-0' + WHEN 1 THEN '1-StillTesting Memory-Search Index State-1' + WHEN 2 THEN '2-StillTesting Memory-Search Index State-2' + ELSE 'Unknown-New-Value!: ' || zMemory.ZSEARCHINDEXREBUILDSTATE || '' + END AS 'zMemory-Search Index Rebuild State', + zMemory.ZBLACKLISTEDFEATURE AS 'zMemory-Black Listed Feature', + zMoment.ZUUID AS 'zMoment-UUID-4TableStart', + zMoment.ZAGGREGATIONSCORE AS 'zMoment-Aggregation Score', + DateTime(zMoment.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Start Date', + DateTime(zMoment.ZREPRESENTATIVEDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Representative Date', + zMoment.ZTIMEZONEOFFSET AS 'zMoment-Timezone Offset', + DateTime(zMoment.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-Modification Date', + DateTime(zMoment.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'zMoment-End Date', + zMoment.ZSUBTITLE AS 'zMoment-SubTitle', + zMoment.ZTITLE AS 'zMoment-Title', + CASE zMoment.ZORIGINATORSTATE + WHEN 0 THEN '0-StillTesting Moment-Originator_State-0' + WHEN 1 THEN '1-StillTesing Moment-Originator_State-1' + WHEN 2 THEN '2-StillTesting Moment-Originator_State-2' + ELSE 'Unknown-New-Value!: ' || zMoment.ZORIGINATORSTATE || '' + END AS 'zMoment-Originator State', + CASE zMoment.ZSHARINGCOMPOSITION + WHEN 0 THEN '0-StillTesting Moment-Sharing_Compo-0' + WHEN 1 THEN '1-StillTesting Moment-Sharing_Compo-1' + WHEN 2 THEN '2-StillTesting Moment-Sharing_Compo-2' + ELSE 'Unknown-New-Value!: ' || zMoment.ZSHARINGCOMPOSITION || '' + END AS 'zMoment-Sharing Composition', + zMoment.ZCACHEDCOUNTSHARED AS 'zMoment-Cached Count Shared', + CASE zMoment.ZPROCESSEDLOCATION + WHEN 2 THEN 'No-2' + WHEN 3 THEN 'Yes-3' + WHEN 6 THEN 'Yes-6' + ELSE 'Unknown-New-Value!: ' || zMoment.ZPROCESSEDLOCATION || '' + END AS 'zMoment-Processed Location', + zMoment.ZAPPROXIMATELATITUDE AS 'zMoment-Approx Latitude', + zMoment.ZAPPROXIMATELONGITUDE AS 'zMoment-Approx Longitude', + CASE zMoment.ZGPSHORIZONTALACCURACY + WHEN -1.0 THEN '-1.0' + ELSE zMoment.ZGPSHORIZONTALACCURACY + END AS 'zMoment-GPS Horizontal Accuracy', + zMoment.ZCACHEDCOUNT AS 'zMoment-Cache Count', + zMoment.ZCACHEDPHOTOSCOUNT AS 'zMoment-Cached Photos Count', + zMoment.ZCACHEDVIDEOSCOUNT AS 'zMoment-Cached Videos Count', + CASE zMoment.ZTRASHEDSTATE + WHEN 0 THEN 'zMoment Not In Trash-0' + WHEN 1 THEN 'zMoment In Trash-1' + ELSE 'Unknown-New-Value!: ' || zMoment.ZTRASHEDSTATE || '' + END AS 'zMoment-Trashed State', + SBKAzSugg.ZUUID AS 'SBKAzSugg-UUID-4TableStart', + SBKAzSugg.ZSUGGESTIONCONTEXT AS 'SBKAzSugg-Suggestion Context', + SBKAzSugg.ZSHARINGCOMPOSITION AS 'SBKAzSugg-Sharing Composition', + DateTime(SBKAzSugg.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Start Date', + CASE SBKAzSugg.ZSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZSTATE || '' + END AS 'SBKAzSugg-State', + CASE SBKAzSugg.ZFEATUREDSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZFEATUREDSTATE || '' + END AS 'SBKAzSugg-Featured State', + CASE SBKAzSugg.ZAVAILABLEFEATURES + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZAVAILABLEFEATURES || '' + END AS 'SBKAzSugg- Available Features', + CASE SBKAzSugg.ZNOTIFICATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZNOTIFICATIONSTATE || '' + END AS 'SBKAzSugg-Notification State', + DateTime(SBKAzSugg.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Creation Date', + DateTime(SBKAzSugg.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-End Date', + DateTime(SBKAzSugg.ZACTIVATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Activation Date', + DateTime(SBKAzSugg.ZEXPUNGEDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Expunge Date', + DateTime(SBKAzSugg.ZRELEVANTUNTILDATE + 978307200, 'UNIXEPOCH') AS 'SBKAzSugg-Relevant Until Date', + SBKAzSugg.ZTITLE AS 'SBKAzSugg-Title', + SBKAzSugg.ZSUBTITLE AS 'SBKAzSugg-Sub Title', + SBKAzSugg.ZCACHEDCOUNT AS 'SBKAzSugg-Cached Count', + SBKAzSugg.ZCACHEDPHOTOSCOUNT AS 'SBKAzSugg-Cahed Photos Count', + SBKAzSugg.ZCACHEDVIDEOSCOUNT AS 'SBKAzSugg-Cached Videos Count', + CASE SBKAzSugg.ZTYPE + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZTYPE || '' + END AS 'SBKAzSugg-Type', + CASE SBKAzSugg.ZSUBTYPE + WHEN 501 THEN '501-StillTesting' + WHEN 502 THEN '502-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZSUBTYPE || '' + END AS 'SBKAzSugg-Sub Type', + SBKAzSugg.ZACTIONDATA AS 'SBKAzSugg-Action Data', + SBKAzSugg.ZVERSION AS 'SBKAzSugg-Version', + CASE SBKAzSugg.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Suggestion Not Synced with Cloud-0' + WHEN 1 THEN 'Suggestion Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZCLOUDLOCALSTATE || '' + END AS 'SBKAzSugg-Cloud Local State', + CASE SBKAzSugg.ZCLOUDDELETESTATE + WHEN 0 THEN 'Suggestion Not Deleted-0' + WHEN 1 THEN 'Suggestion Deleted-1' + ELSE 'Unknown-New-Value!: ' || SBKAzSugg.ZCLOUDDELETESTATE || '' + END AS 'SBKAzSugg-Cloud Delete State', + SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID-4TableStart', + SBRAzSugg.ZSUGGESTIONCONTEXT AS 'SBRAzSugg-Suggestion Context', + SBRAzSugg.ZSHARINGCOMPOSITION AS 'SBRAzSugg-Sharing Composition', + DateTime(SBRAzSugg.ZSTARTDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Start Date', + CASE SBRAzSugg.ZSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZSTATE || '' + END AS 'SBRAzSugg-State', + CASE SBRAzSugg.ZFEATUREDSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZFEATUREDSTATE || '' + END AS 'SBRAzSugg-Featured State', + CASE SBRAzSugg.ZAVAILABLEFEATURES + WHEN 0 THEN '0-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZAVAILABLEFEATURES || '' + END AS 'SBRAzSugg- Available Features', + CASE SBRAzSugg.ZNOTIFICATIONSTATE + WHEN 0 THEN '0-StillTesting' + WHEN 1 THEN '1-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZNOTIFICATIONSTATE || '' + END AS 'SBRAzSugg-Notification State', + DateTime(SBRAzSugg.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Creation Date', + DateTime(SBRAzSugg.ZENDDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-End Date', + DateTime(SBRAzSugg.ZACTIVATIONDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Activation Date', + DateTime(SBRAzSugg.ZEXPUNGEDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Expunge Date', + DateTime(SBRAzSugg.ZRELEVANTUNTILDATE + 978307200, 'UNIXEPOCH') AS 'SBRAzSugg-Relevant Until Date', + SBRAzSugg.ZTITLE AS 'SBRAzSugg-Title', + SBRAzSugg.ZSUBTITLE AS 'SBRAzSugg-Sub Title', + SBRAzSugg.ZCACHEDCOUNT AS 'SBRAzSugg-Cached Count', + SBRAzSugg.ZCACHEDPHOTOSCOUNT AS 'SBRAzSugg-Cahed Photos Count', + SBRAzSugg.ZCACHEDVIDEOSCOUNT AS 'SBRAzSugg-Cached Videos Count', + CASE SBRAzSugg.ZTYPE + WHEN 5 THEN '5-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZTYPE || '' + END AS 'SBRAzSugg-Type', + CASE SBRAzSugg.ZSUBTYPE + WHEN 501 THEN '501-StillTesting' + WHEN 502 THEN '502-StillTesting' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZSUBTYPE || '' + END AS 'SBRAzSugg-Sub Type', + SBRAzSugg.ZACTIONDATA AS 'SBRAzSugg-Action Data', + SBRAzSugg.ZVERSION AS 'SBRAzSugg-Version', + CASE SBRAzSugg.ZCLOUDLOCALSTATE + WHEN 0 THEN 'Suggestion Not Synced with Cloud-0' + WHEN 1 THEN 'Suggestion Synced with Cloud-1' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZCLOUDLOCALSTATE || '' + END AS 'SBRAzSugg-Cloud Local State', + CASE SBRAzSugg.ZCLOUDDELETESTATE + WHEN 0 THEN 'Suggestion Not Deleted-0' + WHEN 1 THEN 'Suggestion Deleted-1' + ELSE 'Unknown-New-Value!: ' || SBRAzSugg.ZCLOUDDELETESTATE || '' + END AS 'SBRAzSugg-Cloud Delete State', + zMedAnlyAstAttr.ZMEDIAANALYSISVERSION AS 'zMedAnlyAstAttr-Media Analysis Version', + zMedAnlyAstAttr.ZAUDIOCLASSIFICATION AS 'zMedAnlyAstAttr-Audio Classification', + zMedAnlyAstAttr.ZBESTVIDEORANGEDURATIONTIMESCALE AS 'zMedAnlyAstAttr-Best Video Range Duration Time Scale', + zMedAnlyAstAttr.ZBESTVIDEORANGESTARTTIMESCALE AS 'zMedAnlyAstAttr-Best Video Range Start Time Scale', + zMedAnlyAstAttr.ZBESTVIDEORANGEDURATIONVALUE AS 'zMedAnlyAstAttr-Best Video Range Duration Value', + zMedAnlyAstAttr.ZBESTVIDEORANGESTARTVALUE AS 'zMedAnlyAstAttr-Best Video Range Start Value', + zMedAnlyAstAttr.ZPACKEDBESTPLAYBACKRECT AS 'zMedAnlyAstAttr-Packed Best Playback Rect', + zMedAnlyAstAttr.ZACTIVITYSCORE AS 'zMedAnlyAstAttr-Activity Score', + zMedAnlyAstAttr.ZVIDEOSCORE AS 'zMedAnlyAstAttr-Video Score', + zMedAnlyAstAttr.ZAUDIOSCORE AS 'zMedAnlyAstAttr-Audio Score', + zMedAnlyAstAttr.ZWALLPAPERSCORE AS 'zMedAnlyAstAttr-Wallpaper Score', + zMedAnlyAstAttr.ZAUTOPLAYSUGGESTIONSCORE AS 'zMedAnlyAstAttr-AutoPlay Suggestion Score', + zMedAnlyAstAttr.ZBLURRINESSSCORE AS 'zMedAnlyAstAttr-Blurriness Score', + zMedAnlyAstAttr.ZEXPOSURESCORE AS 'zMedAnlyAstAttr-Exposure Score', + zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTIONCONFIDENCE AS 'zMedAnlyAstAttr-Probable Rotation Direction Confidence', + zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTION AS 'zMedAnlyAstAttr-Probable Rotation Direction', + zMedAnlyAstAttr.ZSCREENTIMEDEVICEIMAGESENSITIVITY AS 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity', + zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID-4TableStart', + zAssetAnalyState.ZANALYSISSTATE AS 'zAssetAnalyState-Analyisis State', + zAssetAnalyState.ZWORKERFLAGS AS 'zAssetAnalyState-Worker Flags', + zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type', + DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date', + DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date', + DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token', + zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr', + zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version', + zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version', + zMedAnlyAstAttr.ZVISUALSEARCHATTRIBUTES AS 'zMedAnlyAstAttr-Visual Search Attributes', + zVisualSearchAttr.ZALGORITHMVERSION AS 'zVisualSearchAttr-Algorithm Version', + zVisualSearchAttr.ZADJUSTMENTVERSION AS 'zVisualSearchAttr-Adjustment Version', + zVisualSearchAttr.ZSTICKERCONFIDENCEALGORITHMVERSION AS 'zVisualSearchAttr - Sticker Confidence Algorithm Version', + zVisualSearchAttr.ZSTICKERCONFIDENCESCORE AS 'zVisualSearchAttr - Sticker Confidence Score', + zAsset.ZSTICKERCONFIDENCESCORE AS 'zAsset-Sticker Confidence Score', + zAsset.ZOVERALLAESTHETICSCORE AS 'zAsset-Overall Aesthetic Score', + zCompAssetAttr.ZBEHAVIORALSCORE AS 'zCompAssetAttr-Behavioral Score', + zCompAssetAttr.ZFAILURESCORE AS 'zCompAssetAttr-Failure Score zCompAssetAttr', + zCompAssetAttr.ZHARMONIOUSCOLORSCORE AS 'zCompAssetAttr-Harmonious Color Score', + zCompAssetAttr.ZIMMERSIVENESSSCORE AS 'zCompAssetAttr-Immersiveness Score', + zCompAssetAttr.ZINTERACTIONSCORE AS 'zCompAssetAttr-Interaction Score', + zCompAssetAttr.ZINTERESTINGSUBJECTSCORE AS 'zCompAssetAttr-Intersting Subject Score', + zCompAssetAttr.ZINTRUSIVEOBJECTPRESENCESCORE AS 'zCompAssetAttr-Intrusive Object Presence Score', + zCompAssetAttr.ZLIVELYCOLORSCORE AS 'zCompAssetAttr-Lively Color Score', + zCompAssetAttr.ZLOWLIGHT AS 'zCompAssetAttr-Low Light', + zCompAssetAttr.ZNOISESCORE AS 'zCompAssetAttr-Noise Score', + zCompAssetAttr.ZPLEASANTCAMERATILTSCORE AS 'zCompAssetAttr-Pleasant Camera Tilt Score', + zCompAssetAttr.ZPLEASANTCOMPOSITIONSCORE AS 'zCompAssetAttr-Pleasant Composition Score', + zCompAssetAttr.ZPLEASANTLIGHTINGSCORE AS 'zCompAssetAttr-Pleasant Lighting Score', + zCompAssetAttr.ZPLEASANTPATTERNSCORE AS 'zCompAssetAttr-Pleasant Pattern Score', + zCompAssetAttr.ZPLEASANTPERSPECTIVESCORE AS 'zCompAssetAttr-Pleasant Perspective Score', + zCompAssetAttr.ZPLEASANTPOSTPROCESSINGSCORE AS 'zCompAssetAttr-Pleasant Post Processing Score', + zCompAssetAttr.ZPLEASANTREFLECTIONSSCORE AS 'zCompAssetAttr-Pleasant Reflection Score', + zCompAssetAttr.ZPLEASANTSYMMETRYSCORE AS 'zCompAssetAttrPleasant Symmetry Score', + zCompAssetAttr.ZSHARPLYFOCUSEDSUBJECTSCORE AS 'zCompAssetAttr-Sharply Focused Subject Score', + zCompAssetAttr.ZTASTEFULLYBLURREDSCORE AS 'zCompAssetAttr-Tastfully Blurred Score', + zCompAssetAttr.ZWELLCHOSENSUBJECTSCORE AS 'zCompAssetAttr-Well Chosen Subject Score', + zCompAssetAttr.ZWELLFRAMEDSUBJECTSCORE AS 'zCompAssetAttr-Well Framed Subject Score', + zCompAssetAttr.ZWELLTIMEDSHOTSCORE AS 'zCompAssetAttr-Well Timeed Shot Score', + zCldRes.ZASSETUUID AS 'zCldRes-Asset UUID-4TableStart', + zCldRes.ZCLOUDLOCALSTATE AS 'zCldRes-Cloud Local State', + zCldRes.ZFILESIZE AS 'zCldRes-File Size', + zCldRes.ZHEIGHT AS 'zCldRes-Height', + zCldRes.ZISAVAILABLE AS 'zCldRes-Is Available', + zCldRes.ZISLOCALLYAVAILABLE AS 'zCldRes-Is Locally Available', + zCldRes.ZPREFETCHCOUNT AS 'zCldRes-Prefetch Count', + zCldRes.ZSOURCETYPE AS 'zCldRes-Source Type', + zCldRes.ZTYPE AS 'zCldRes-Type', + zCldRes.ZWIDTH AS 'zCldRes-Width', + zCldRes.ZDATECREATED AS 'zCldRes-Date Created', + zCldRes.ZLASTONDEMANDDOWNLOADDATE AS 'zCldRes-Last OnDemand Download Date', + zCldRes.ZLASTPREFETCHDATE AS 'zCldRes-Last Prefetch Date', + zCldRes.ZPRUNEDAT AS 'zCldRes-Prunedat', + zCldRes.ZFILEPATH AS 'zCldRes-File Path', + zCldRes.ZFINGERPRINT AS 'zCldRes-Fingerprint', + zCldRes.ZITEMIDENTIFIER AS 'zCldRes-Item ID', + zCldRes.ZUNIFORMTYPEIDENTIFIER AS 'zCldRes-UniID', + zUserFeedback.ZUUID AS 'zUserFeedback-UUID-4TableStart', + zUserFeedback.ZFEATURE AS 'zUserFeedback-Feature', + zUserFeedback.ZTYPE AS 'zUserFeedback-Type', + zUserFeedback.ZLASTMODIFIEDDATE AS 'zUserFeedback-Last Modified Date', + zUserFeedback.ZCONTEXT AS 'zUserFeedback-Context', + zUserFeedback.ZCLOUDLOCALSTATE AS 'zUserFeedback-Cloud Local State', + zUserFeedback.ZCLOUDDELETESTATE AS 'zUserFeedback-Cloud Delete State', + zUserFeedback.ZCREATIONTYPE AS 'zUserFeedback - Creation Type', + zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', + zAddAssetAttr.Z_ENT AS 'zAddAssetAttr-zENT', + zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT', + zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK', + zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK', + zAddAssetAttr.ZMASTERFINGERPRINT AS 'zAddAssetAttr-Master Fingerprint', + zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID', + zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', + zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID', + zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', + zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier', + zAddAssetAttr.ZADJUSTEDFINGERPRINT AS 'zAddAssetAttr.Adjusted Fingerprint', + zAlbumList.Z_PK AS 'zAlbumList-zPK= Album List Key', + zAlbumList.Z_ENT AS 'zAlbumList-zENT', + zAlbumList.Z_OPT AS 'zAlbumList-zOPT', + zAlbumList.ZIDENTIFIER AS 'zAlbumList-ID Key', + zAlbumList.ZUUID AS 'zAlbumList-UUID', + zAsset.Z_PK AS 'zAsset-zPK', + zAsset.Z_ENT AS 'zAsset-zENT', + zAsset.Z_OPT AS 'zAsset-zOPT', + zAsset.ZMASTER AS 'zAsset-Master= zCldMast-zPK', + zAsset.ZEXTENDEDATTRIBUTES AS 'zAsset-Extended Attributes= zExtAttr-zPK', + zAsset.ZIMPORTSESSION AS 'zAsset-Import Session Key', + zAsset.ZTRASHEDBYPARTICIPANT AS 'zAsset-Trashed by Participant= zSharePartic_zPK', + zAsset.ZPHOTOANALYSISATTRIBUTES AS 'zAsset-Photo Analysis Attributes Key', + zAsset.ZCLOUDFEEDASSETSENTRY AS 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK', + zAsset.Z_FOK_CLOUDFEEDASSETSENTRY AS 'zAsset-FOK-Cloud Feed Asset Entry Key', + zAsset.ZMOMENTSHARE AS 'zAsset-Moment Share Key= zShare-zPK', + zAsset.ZMOMENT AS 'zAsset-zMoment Key= zMoment-zPK', + zAsset.ZCOMPUTEDATTRIBUTES AS 'zAsset-Computed Attributes Asset Key', + zAsset.ZHIGHLIGHTBEINGASSETS AS 'zAsset-Highlight Being Assets-HBA Key', + zAsset.ZHIGHLIGHTBEINGEXTENDEDASSETS AS 'zAsset-Highlight Being Extended Assets-HBEA Key', + zAsset.ZHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Highlight Being Key Asset Private-HBKAP Key', + zAsset.ZHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Highlight Being Key Asset Shared-HBKAS Key', + zAsset.ZHIGHLIGHTBEINGSUMMARYASSETS AS 'zAsset-Highligh Being Summary Assets-HBSA Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGASSETS AS 'zAsset-Day Group Highlight Being Assets-DGHBA Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGEXTENDEDASSETS AS 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key', + zAsset.ZDAYGROUPHIGHLIGHTBEINGSUMMARYASSETS AS 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key', + zAsset.ZMONTHHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key', + zAsset.ZMONTHHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key', + zAsset.ZYEARHIGHLIGHTBEINGKEYASSETPRIVATE AS 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key', + zAsset.ZYEARHIGHLIGHTBEINGKEYASSETSHARED AS 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key', + zAsset.ZPROMOTIONSCORE AS 'zAsset-Promotion Score', + zAsset.ZICONICSCORE AS 'zAsset-Iconic Score', + zAsset.ZMEDIAANALYSISATTRIBUTES AS 'zAsset-Media Analysis Attributes Key', + zAsset.ZMEDIAGROUPUUID AS 'zAsset-Media Group UUID', + zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', + zAsset.ZCLOUDASSETGUID AS 'zAsset-Cloud_Asset_GUID = store.cloudphotodb', + zAsset.ZCLOUDCOLLECTIONGUID AS 'zAsset.Cloud Collection GUID', + zAsset.ZAVALANCHEUUID AS 'zAsset-Avalanche UUID', + zAssetAnalyState.Z_PK AS 'zAssetAnalyState-zPK', + zAssetAnalyState.Z_ENT AS 'zAssetAnalyState-zEnt', + zAssetAnalyState.Z_OPT AS 'zAssetAnalyState-zOpt', + zAssetAnalyState.ZASSET AS 'zAssetAnalyState-Asset= zAsset-zPK', + zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID', + zAssetContrib.Z_PK AS 'zAsstContrib-zPK', + zAssetContrib.Z_ENT AS 'zAsstContrib-zEnt', + zAssetContrib.Z_OPT AS 'zAsstContrib-zOpt', + zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS AS 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK', + zAssetContrib.ZPARTICIPANT AS 'zAsstContrib-Participant= zSharePartic-zPK', + zAssetDes.Z_PK AS 'zAssetDes-zPK', + zAssetDes.Z_ENT AS 'zAssetDes-zENT', + zAssetDes.Z_OPT AS 'zAssetDes-zOPT', + zAssetDes.ZASSETATTRIBUTES AS 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK', + zCharRecogAttr.Z_PK AS 'zCharRecogAttr-zPK', + zCharRecogAttr.Z_ENT AS 'zCharRecogAttr-zENT', + zCharRecogAttr.Z_OPT AS 'zCharRecogAttr-zOPT', + zCharRecogAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK', + zCldFeedEnt.Z_PK AS 'zCldFeedEnt-zPK= zCldShared keys', + zCldFeedEnt.Z_ENT AS 'zCldFeedEnt-zENT', + zCldFeedEnt.Z_OPT AS 'zCldFeedEnt-zOPT', + zCldFeedEnt.ZENTRYALBUMGUID AS 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID', + zCldFeedEnt.ZENTRYINVITATIONRECORDGUID AS 'zCldFeedEnt-Entry Invitation Record GUID', + zCldFeedEnt.ZENTRYCLOUDASSETGUID AS 'zCldFeedEnt-Entry Cloud Asset GUID', + zCldMast.Z_PK AS 'zCldMast-zPK= zAsset-Master', + zCldMast.Z_ENT AS 'zCldMast-zENT', + zCldMast.Z_OPT AS 'zCldMast-zOPT', + zCldMast.ZMOMENTSHARE AS 'zCldMast-Moment Share Key= zShare-zPK', + zCldMast.ZCLOUDMASTERGUID AS 'zCldMast-Cloud_Master_GUID = store.cloudphotodb', + zCldMast.ZORIGINATINGASSETIDENTIFIER AS 'zCldMast-Originating Asset ID', + zCldMast.ZIMPORTSESSIONID AS 'zCldMast-Import Session ID- AirDrop-StillTesting', + CMzCldMastMedData.Z_PK AS 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key', + CMzCldMastMedData.Z_ENT AS 'CMzCldMastMedData-zENT', + CMzCldMastMedData.Z_OPT AS 'CMzCldMastMedData-zOPT', + CMzCldMastMedData.ZCLOUDMASTER AS 'CMzCldMastMedData-CldMast= zCldMast-zPK', + AAAzCldMastMedData.Z_PK AS 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData', + AAAzCldMastMedData.Z_ENT AS 'AAAzCldMastMedData-zENT', + AAAzCldMastMedData.Z_OPT AS 'AAAzCldMastMedData-zOPT', + AAAzCldMastMedData.ZCLOUDMASTER AS 'AAAzCldMastMedData-CldMast key', + AAAzCldMastMedData.ZADDITIONALASSETATTRIBUTES AS 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK', + zCldRes.Z_PK AS 'zCldRes-zPK', + zCldRes.Z_ENT AS 'zCldRes-zENT', + zCldRes.Z_OPT AS 'zCldRes-zOPT', + zCldRes.ZASSET AS 'zCldRes-Asset= zAsset-zPK', + zCldRes.ZCLOUDMASTER AS 'zCldRes-Cloud Master= zCldMast-zPK', + zCldRes.ZASSETUUID AS 'zCldRes-Asset UUID', + zCldShareAlbumInvRec.Z_PK AS 'zCldShareAlbumInvRec-zPK', + zCldShareAlbumInvRec.Z_ENT AS 'zCldShareAlbumInvRec-zEnt', + zCldShareAlbumInvRec.Z_OPT AS 'zCldShareAlbumInvRec-zOpt', + zCldShareAlbumInvRec.ZALBUM AS 'zCldShareAlbumInvRec-Album Key', + zCldShareAlbumInvRec.Z_FOK_ALBUM AS 'zCldShareAlbumInvRec-FOK Album Key', + zCldShareAlbumInvRec.ZALBUMGUID AS 'zCldShareAlbumInvRec-Album GUID', + zCldShareAlbumInvRec.ZUUID AS 'zCldShareAlbumInvRec-zUUID', + zCldShareAlbumInvRec.ZCLOUDGUID AS 'zCldShareAlbumInvRec-Cloud GUID', + zCldSharedComment.Z_PK AS 'zCldSharedComment-zPK', + zCldSharedComment.Z_ENT AS 'zCldSharedComment-zENT', + zCldSharedComment.Z_OPT AS 'zCldSharedComment-zOPT', + zCldSharedComment.ZCOMMENTEDASSET AS 'zCldSharedComment-Commented Asset Key= zAsset-zPK', + zCldSharedComment.ZCLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK', + zCldSharedComment.Z_FOK_CLOUDFEEDCOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key', + zCldSharedCommentLiked.ZLIKEDASSET AS 'zCldSharedComment-Liked Asset Key= zAsset-zPK', + zCldSharedCommentLiked.ZCLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-CldFeedLikeCommentEntry Key', + zCldSharedCommentLiked.Z_FOK_CLOUDFEEDLIKECOMMENTENTRY AS 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key', + zCldSharedComment.ZCLOUDGUID AS 'zCldSharedComment-Cloud GUID', + zCompAssetAttr.Z_PK AS 'zCompAssetAttr-zPK', + zCompAssetAttr.Z_ENT AS 'zCompAssetAttr-zEnt', + zCompAssetAttr.Z_OPT AS 'zCompAssetAttr-zOpt', + zCompAssetAttr.ZASSET AS 'zCompAssetAttr-Asset Key', + zDetFace.Z_PK AS 'zDetFace-zPK', + zDetFace.Z_ENT AS 'zDetFace-zEnt', + zDetFace.Z_OPT AS 'zDetFace.zOpt', + zDetFace.ZASSETFORFACE AS 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face', + zDetFace.ZPERSONFORFACE AS 'zDetFace-PersonForFace= zPerson-zPK', + zDetFace.ZPERSONBEINGKEYFACE AS 'zDetFace-Person Being Key Face', + zDetFace.ZFACEPRINT AS 'zDetFace-Face Print', + zDetFace.ZFACEGROUPBEINGKEYFACE AS 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK', + zDetFace.ZFACEGROUP AS 'zDetFace-FaceGroup= zDetFaceGroup-zPK', + zDetFace.ZUUID AS 'zDetFace-UUID', + zDetFaceGroup.Z_PK AS 'zDetFaceGroup-zPK', + zDetFaceGroup.Z_ENT AS 'zDetFaceGroup-zENT', + zDetFaceGroup.Z_OPT AS 'zDetFaceGroup-zOPT', + zDetFaceGroup.ZASSOCIATEDPERSON AS 'zDetFaceGroup-AssocPerson= zPerson-zPK', + zDetFaceGroup.ZKEYFACE AS 'zDetFaceGroup-KeyFace= zDetFace-zPK', + zDetFaceGroup.ZUUID AS 'zDetFaceGroup-UUID', + zDetFacePrint.Z_PK AS 'zDetFacePrint-zPK', + zDetFacePrint.Z_ENT AS 'zDetFacePrint-zEnt', + zDetFacePrint.Z_OPT AS 'zDetFacePrint-zOpt', + zDetFacePrint.ZFACE AS 'zDetFacePrint-Face Key', + zExtAttr.Z_PK AS 'zExtAttr-zPK= zAsset-zExtendedAttributes', + zExtAttr.Z_ENT AS 'zExtAttr-zENT', + zExtAttr.Z_OPT AS 'zExtAttr-zOPT', + zExtAttr.ZASSET AS 'zExtAttr-Asset Key', + zFaceCrop.Z_PK AS 'zFaceCrop-zPK', + zFaceCrop.Z_ENT AS 'zFaceCrop-zEnt', + zFaceCrop.Z_OPT AS 'zFaceCrop-zOpt', + zFaceCrop.ZASSET AS 'zFaceCrop-Asset Key', + zFaceCrop.ZINVALIDMERGECANDIDATEPERSONUUID AS 'zFaceCrop-Invalid Merge Canidate Person UUID', + zFaceCrop.ZPERSON AS 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key', + zFaceCrop.ZFACE AS 'zFaceCrop-Face Key', + zFaceCrop.ZUUID AS 'zFaceCrop-UUID', + zGenAlbum.Z_PK AS 'zGenAlbum-zPK=26AlbumLists= 26Albums', + zGenAlbum.Z_ENT AS 'zGenAlbum-zENT', + zGenAlbum.Z_OPT AS 'zGenAlbum-zOpt', + zGenAlbum.ZKEYASSET AS 'zGenAlbum-Key Asset-Key zAsset-zPK', + zGenAlbum.ZSECONDARYKEYASSET AS 'zGenAlbum-Secondary Key Asset', + zGenAlbum.ZTERTIARYKEYASSET AS 'zGenAlbum-Tertiary Key Asset', + zGenAlbum.ZCUSTOMKEYASSET AS 'zGenAlbum-Custom Key Asset', + zGenAlbum.ZPARENTFOLDER AS 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK', + zGenAlbum.Z_FOK_PARENTFOLDER AS 'zGenAlbum-FOK Parent Folder', + zGenAlbum.ZSYNDICATE AS 'zGenAlbum-zSyndicate', + zGenAlbum.ZUUID AS 'zGenAlbum-UUID', + SWYConverszGenAlbum.ZUUID AS 'SWYConverszGenAlbum-UUID', + zGenAlbum.ZCLOUDGUID AS 'zGenAlbum-Cloud_GUID = store.cloudphotodb', + SWYConverszGenAlbum.ZCLOUDGUID AS 'SWYConverszGenAlbum-Cloud GUID', + zGenAlbum.ZPROJECTRENDERUUID AS 'zGenAlbum-Project Render UUID', + SWYConverszGenAlbum.ZPROJECTRENDERUUID AS 'SWYConverszGenAlbum-Project Render UUID', + zIntResou.Z_PK AS 'zIntResou-zPK', + zIntResou.Z_ENT AS 'zIntResou-zENT', + zIntResou.Z_OPT AS 'zIntResou-zOPT', + zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint', + zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', + zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata', + zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt', + zMedAnlyAstAttr.Z_OPT AS 'zMedAnlyAstAttr-zOpt', + zMedAnlyAstAttr.ZASSET AS 'zMedAnlyAstAttr-Asset= zAsset-zPK', + zMemory.Z_PK AS 'zMemory-zPK', + zMemory.Z_ENT AS 'zMemory-zENT', + zMemory.Z_OPT AS 'zMemory-zOPT', + zMemory.ZKEYASSET AS 'zMemory-Key Asset= zAsset-zPK', + zMemory.ZUUID AS 'zMemory-UUID', + zMoment.Z_PK AS 'zMoment-zPK', + zMoment.Z_ENT AS 'zMoment-zENT', + zMoment.Z_OPT AS 'zMoment-zOPT', + zMoment.ZHIGHLIGHT AS 'zMoment-Highlight Key', + zMoment.ZUUID AS 'zMoment-UUID', + zPerson.Z_PK AS 'zPerson-zPK=zDetFace-Person', + zPerson.Z_ENT AS 'zPerson-zEnt', + zPerson.Z_OPT AS 'zPerson-zOpt', + zPerson.ZSHAREPARTICIPANT AS 'zPerson-Share Participant= zSharePartic-zPK', + zPerson.ZKEYFACE AS 'zPerson-KeyFace=zDetFace-zPK', + zPerson.ZASSOCIATEDFACEGROUP AS 'zPerson-Assoc Face Group Key', + zPerson.ZPERSONUUID AS 'zPerson-Person UUID', + zPhotoAnalysisAssetAttr.Z_PK AS 'zPhotoAnalysisAssetAttr-zPK', + zPhotoAnalysisAssetAttr.Z_ENT AS 'zPhotoAnalysisAssetAttr-zEnt', + zPhotoAnalysisAssetAttr.Z_OPT AS 'zPhotoAnalysisAssetAttr-zOpt', + zPhotoAnalysisAssetAttr.ZASSET AS 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK', + zSceneP.Z_PK AS 'zSceneP-zPK', + zSceneP.Z_ENT AS 'zSceneP-zENT', + zSceneP.Z_OPT AS 'zSceneP-zOPT', + zShare.Z_PK AS 'zShare-zPK', + zShare.Z_ENT AS 'zShare-zENT', + zShare.Z_OPT AS 'zShare-zOPT', + zShare.ZUUID AS 'zShare-UUID', + SPLzShare.ZUUID AS 'SPLzShare-UUID', + zShare.ZSCOPEIDENTIFIER AS 'zShare-Scope ID = store.cloudphotodb', + zSharePartic.Z_PK AS 'zSharePartic-zPK', + zSharePartic.Z_ENT AS 'zSharePartic-zENT', + zSharePartic.Z_OPT AS 'zSharePartic-zOPT', + zSharePartic.ZSHARE AS 'zSharePartic-Share Key= zShare-zPK', + zSharePartic.ZPERSON AS 'zSharePartic-Person= zPerson-zPK', + zSharePartic.ZUUID AS 'zSharePartic-UUID', + SBKAzSugg.Z_PK AS 'SBKAzSugg-zPK', + SBKAzSugg.Z_ENT AS 'SBKAzSugg-zENT', + SBKAzSugg.Z_OPT AS 'SBKAzSugg-zOPT', + SBKAzSugg.ZUUID AS 'SBKAzSugg-UUID', + SBRAzSugg.Z_PK AS 'SBRAzSugg-zPK', + SBRAzSugg.Z_ENT AS 'SBRAzSugg-zENT', + SBRAzSugg.Z_OPT AS 'SBRAzSugg-zOPT', + SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID', + z3SuggBRA.Z_3REPRESENTATIVEASSETS1 AS 'z3SuggBRA-3RepAssets1', + z3SuggBRA.Z_59SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-59SuggBeingRepAssets', + z3SuggBKA.Z_59SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-59SuggBeingKeyAssets= zSugg-zPK', + z3SuggBKA.Z_3KEYASSETS AS 'z3SuggBKA-3KeyAssets= zAsset-zPK', + zUnmAdj.Z_PK AS 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key', + zUnmAdj.Z_OPT AS 'zUnmAdj-zOPT', + zUnmAdj.Z_ENT AS 'zUnmAdj-zENT', + zUnmAdj.ZASSETATTRIBUTES AS 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK', + zUnmAdj.ZUUID AS 'zUnmAdj-UUID', + zUnmAdj.ZOTHERADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Other Adjustments Fingerprint', + zUnmAdj.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Similar to Orig Adjustments Fingerprint', + zUserFeedback.Z_PK AS 'zUserFeedback-zPK', + zUserFeedback.Z_ENT AS 'zUserFeedback-zENT', + zUserFeedback.Z_OPT AS 'zUserFeedback-zOPT', + zUserFeedback.ZPERSON AS 'zUserFeedback-Person= zPerson-zPK', + zUserFeedback.ZMEMORY AS 'zUserFeedback-Memory= zMemory-zPK', + zUserFeedback.ZUUID AS 'zUserFeedback-UUID', + zVisualSearchAttr.Z_PK AS 'zVisualSearchAttr-zPK', + zVisualSearchAttr.Z_ENT AS 'zVisualSearchAttr-zENT', + zVisualSearchAttr.Z_OPT AS 'zVisualSearchAttr-zOPT', + zVisualSearchAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK', + z28AlbumLists.Z_28ALBUMS AS 'z28AlbumList-28Albums= zGenAlbum-zPK', + z28AlbumLists.Z_2ALBUMLISTS AS 'z28AlbumList-Album List Key', + z28AlbumLists.Z_FOK_28ALBUMS AS 'z28AlbumList-FOK28Albums Key', + z29Assets.Z_29ALBUMS AS 'z29Assets-29Albums= zGenAlbum-zPK', + z29Assets.Z_3ASSETS AS 'z29Assets-3Asset Key= zAsset-zPK in the Album', + z29Assets.Z_FOK_3ASSETS AS 'z29Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY', + z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AS 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK', + z3MemoryBCAs.Z_3CURATEDASSETS AS 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK', + z3MemoryBCAs.Z_45MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-45MemoriesBeingCuratedAssets= zMemory-zPK', + z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK', + z3MemoryBECAs.Z_45MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-45MemoriesBeingExtCuratedAssets= zMemory-zPK', + z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AS 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK', + z3MemoryBRAs.Z_45MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-45RepresentativeAssets= zMemory-zPK', + z3MemoryBUCAs.Z_3USERCURATEDASSETS AS 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK', + z3MemoryBUCAs.Z_45MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-45MemoriesBeingUserCuratedAssets= zMemory-zPK', + z3MemoryBCUAs.Z_45MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-45Memories Being Custom User Assets', + z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-3Custom User Assets', + z3MemoryBCUAs.Z_FOK_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-FOK-3Custom User Assets' + FROM ZASSET zAsset + LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES + LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES + LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK + LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT + LEFT JOIN Z_29ASSETS z29Assets ON z29Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z29Assets.Z_29ALBUMS + LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK + LEFT JOIN Z_28ALBUMLISTS z28AlbumLists ON z28AlbumLists.Z_28ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z28AlbumLists.Z_2ALBUMLISTS + LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER + LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION + LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION + LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA + LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA + LEFT JOIN ZCLOUDRESOURCE zCldRes ON zCldRes.ZCLOUDMASTER = zCldMast.Z_PK + LEFT JOIN ZASSETANALYSISSTATE zAssetAnalyState ON zAssetAnalyState.ZASSET = zAsset.Z_PK + LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES zMedAnlyAstAttr ON zAsset.ZMEDIAANALYSISATTRIBUTES = zMedAnlyAstAttr.Z_PK + LEFT JOIN ZPHOTOANALYSISASSETATTRIBUTES zPhotoAnalysisAssetAttr ON zPhotoAnalysisAssetAttr.ZASSET = zAsset.Z_PK + LEFT JOIN ZCOMPUTEDASSETATTRIBUTES zCompAssetAttr ON zCompAssetAttr.Z_PK = zAsset.ZCOMPUTEDATTRIBUTES + LEFT JOIN ZCHARACTERRECOGNITIONATTRIBUTES zCharRecogAttr ON zCharRecogAttr.Z_PK = zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES + LEFT JOIN ZVISUALSEARCHATTRIBUTES zVisualSearchAttr ON zVisualSearchAttr.Z_PK = zMedAnlyAstAttr.ZVISUALSEARCHATTRIBUTES + LEFT JOIN ZCLOUDFEEDENTRY zCldFeedEnt ON zAsset.ZCLOUDFEEDASSETSENTRY = zCldFeedEnt.Z_PK + LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedComment ON zAsset.Z_PK = zCldSharedComment.ZCOMMENTEDASSET + LEFT JOIN ZCLOUDSHAREDCOMMENT zCldSharedCommentLiked ON zAsset.Z_PK = zCldSharedCommentLiked.ZLIKEDASSET + LEFT JOIN ZCLOUDSHAREDALBUMINVITATIONRECORD zCldShareAlbumInvRec ON zGenAlbum.Z_PK = zCldShareAlbumInvRec.ZALBUM + LEFT JOIN ZSHARE SPLzShare ON SPLzShare.Z_PK = zAsset.ZLIBRARYSCOPE + LEFT JOIN ZSHAREPARTICIPANT SPLzSharePartic ON SPLzSharePartic.ZSHARE = SPLzShare.Z_PK + LEFT JOIN ZSHARE zShare ON zShare.Z_PK = zAsset.ZMOMENTSHARE + LEFT JOIN ZSHAREPARTICIPANT zSharePartic ON zSharePartic.ZSHARE = zShare.Z_PK + LEFT JOIN ZASSETCONTRIBUTOR zAssetContrib ON zAssetContrib.Z3LIBRARYSCOPEASSETCONTRIBUTORS = zAsset.Z_PK + LEFT JOIN ZDETECTEDFACE zDetFace ON zAsset.Z_PK = zDetFace.ZASSETFORFACE + LEFT JOIN ZPERSON zPerson ON zPerson.Z_PK = zDetFace.ZPERSONFORFACE + LEFT JOIN ZDETECTEDFACEPRINT zDetFacePrint ON zDetFacePrint.ZFACE = zDetFace.Z_PK + LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON + LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP + LEFT JOIN Z_3MEMORIESBEINGCURATEDASSETS z3MemoryBCAs ON zAsset.Z_PK = z3MemoryBCAs.Z_3CURATEDASSETS + LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_45MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_45MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_45MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_45MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS AND z3MemoryBRAs.Z_45MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_45MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK + LEFT JOIN ZUSERFEEDBACK zUserFeedback ON zUserFeedback.ZMEMORY = zMemory.Z_PK + LEFT JOIN ZMOMENT zMoment ON zMoment.Z_PK = zAsset.ZMOMENT + LEFT JOIN Z_3SUGGESTIONSBEINGKEYASSETS z3SuggBKA ON z3SuggBKA.Z_3KEYASSETS = zAsset.Z_PK + LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_59SUGGESTIONSBEINGKEYASSETS + LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS1 = zAsset.Z_PK + LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_59SUGGESTIONSBEINGREPRESENTATIVEASSETS + ORDER BY zAsset.ZADDEDDATE + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], + row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], + row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], + row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], + row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], + row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], + row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], + row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], + row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], + row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], + row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], + row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], + row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], + row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], + row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], + row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], + row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], + row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], + row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], + row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], + row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], + row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], + row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], + row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], + row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], + row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], + row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], + row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], + row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], + row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], + row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], + row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], + row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], + row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], + row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], + row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], + row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], + row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], + row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], + row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], + row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], + row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], + row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], + row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], + row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], + row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], + row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], + row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], + row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], + row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], + row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], + row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], + row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], + row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], + row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], + row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], + row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], + row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], + row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], + row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], + row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], + row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], + row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], + row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], + row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], + row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], + row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], + row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], + row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], + row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], + row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], + row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], + row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], + row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], + row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], + row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], + row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], + row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], + row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], + row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], + row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], + row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], + row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], + row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], + row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], + row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], + row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], + row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], + row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], + row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], + row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], + row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], + row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], + row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], + row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], + row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], + row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], + row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], + row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], + row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], + row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093])) + + data_headers = (('zAsset-Added Date-0', 'datetime'), + 'zAsset- SortToken -CameraRoll-1', + 'zAsset Complete-2', + 'zAsset-zPK-4QueryStart-3', + 'zAddAssetAttr-zPK-4QueryStart-4', + 'zAsset-UUID = store.cloudphotodb-4QueryStart-5', + 'zAddAssetAttr-Master Fingerprint-4TableStart-6', + 'zIntResou-Fingerprint-4TableStart-7', + 'zAsset-Bundle Scope-8', + 'zAsset-Syndication State-9', + 'zAsset-Cloud is My Asset-10', + 'zAsset-Cloud is deletable-Asset-11', + 'zAsset-Cloud_Local_State-12', + 'zAsset-Visibility State-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zExtAttr-Lens Model-16', + 'zExtAttr-Flash Fired-17', + 'zExtAttr-Focal Lenght-18', + 'zExtAttr-Focal Lenth in 35MM-19', + 'zExtAttr-Digital Zoom Ratio-20', + 'zAsset-Derived Camera Capture Device-21', + 'zAddAssetAttr-Camera Captured Device-22', + 'zAddAssetAttr-Imported by-23', + 'zCldMast-Imported By-24', + 'zAddAssetAttr.Imported by Bundle Identifier-25', + 'zAddAssetAttr-Imported By Display Name-26', + 'zCldMast-Imported by Bundle ID-27', + 'zCldMast-Imported by Display Name-28', + 'zAsset-Saved Asset Type-29', + 'zAsset-Directory-Path-30', + 'zAsset-Filename-31', + 'zAddAssetAttr- Original Filename-32', + 'zCldMast- Original Filename-33', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-34', + 'zAsset-Active Library Scope Participation State -4QueryStart-35', + 'zAsset-Library Scope Share State- StillTesting -4QueryStart-36', + 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-37', + 'SPLzShare-Cloud Video Count-SPL -4QueryStart-38', + ('zAddAssetAttr-Date Created Source-39', 'datetime'), + ('zAsset-Date Created-40', 'datetime'), + ('zCldMast-Creation Date-41', 'datetime'), + ('zIntResou-CldMst Date Created-42', 'datetime'), + 'zAddAssetAttr-Time Zone Name-43', + 'zAddAssetAttr-Time Zone Offset-44', + 'zAddAssetAttr-Inferred Time Zone Offset-45', + 'zAddAssetAttr-EXIF-String-46', + ('zAsset-Modification Date-47', 'datetime'), + ('zAddAssetAttr-Last Viewed Date-48', 'datetime'), + ('zAsset-Last Shared Date-49', 'datetime'), + 'zCldMast-Cloud Local State-50', + ('zCldMast-Import Date-51', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-52', 'datetime'), + 'zAddAssetAttr-Import Session ID-4QueryStart-53', + ('zAddAssetAttr-Alt Import Image Date-54', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-55', + ('zAsset-Cloud Batch Publish Date-56', 'datetime'), + ('zAsset-Cloud Server Publish Date-57', 'datetime'), + 'zAsset-Cloud Download Requests-58', + 'zAsset-Cloud Batch ID-59', + 'zAddAssetAttr-Upload Attempts-60', + 'zAsset-Latitude-61', + 'zExtAttr-Latitude-62', + 'zAsset-Longitude-63', + 'zExtAttr-Longitude-64', + 'zAddAssetAttr-GPS Horizontal Accuracy-65', + 'zAddAssetAttr-Location Hash-66', + 'zAddAssetAttr-Shifted Location Valid-67', + 'zAddAssetAttr-Shifted Location Data-68', + 'zAddAssetAttr-Reverse Location Is Valid-69', + 'zAddAssetAttr-Reverse Location Data-70', + 'ParentzGenAlbum-UUID-4QueryStart-71', + 'zGenAlbum-UUID-4QueryStart-72', + 'SWYConverszGenAlbum-UUID-4QueryStart-73', + 'ParentzGenAlbum-Cloud GUID-4QueryStart-74', + 'zGenAlbum-Cloud GUID-4QueryStart-75', + 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-76', + 'zCldShareAlbumInvRec-Album GUID-4QueryStart-77', + 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-78', + 'zGenAlbum-Project Render UUID-4QueryStart-79', + 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-80', + 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-81', + 'zGenAlbum-Cloud_Local_State-4QueryStart-82', + 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-83', + ('ParentzGenAlbum- Creation Date- 4QueryStart-84', 'datetime'), + ('zGenAlbum- Creation Date- 4QueryStart-85', 'datetime'), + ('SWYConverszGenAlbum- Creation Date- 4QueryStart-86', 'datetime'), + ('zGenAlbum- Cloud Creation Date- 4QueryStart-87', 'datetime'), + ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-88', 'datetime'), + ('zGenAlbum- Start Date- 4QueryStart-89', 'datetime'), + ('SWYConverszGenAlbum- Start Date- 4QueryStart-90', 'datetime'), + ('zGenAlbum- End Date- 4QueryStart-91', 'datetime'), + ('SWYConverszGenAlbum- End Date- 4QueryStart-92', 'datetime'), + ('zGenAlbum-Cloud Subscription Date- 4QueryStart-93', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-94', 'datetime'), + 'ParentzGenAlbum- Title- 4QueryStart-95', + 'zGenAlbum- Title-User&System Applied- 4QueryStart-96', + 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-97', + 'zGenAlbum-Import Session ID-SWY- 4QueryStart-98', + 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-99', + 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-100', + 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-101', + 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-102', + 'SWYConverszGenAlbum- Syndicate-4QueryStart-103', + 'zGenAlbum-zENT- Entity- 4QueryStart-104', + 'ParentzGenAlbum- Kind- 4QueryStart-105', + 'zGenAlbum-Album Kind- 4QueryStart-106', + 'SWYConverszGenAlbum-Album Kind- 4QueryStart-107', + 'AAAzCldMastMedData-zOPT-108', + 'zAddAssetAttr-Media Metadata Type-109', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-110', + 'AAAzCldMastMedData-Data-111', + 'CldMasterzCldMastMedData-zOPT-112', + 'zCldMast-Media Metadata Type-113', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-114', + 'CMzCldMastMedData-Data-115', + 'zAsset-Search Index Rebuild State-116', + 'zAddAssetAttr-Syndication History-117', + 'zMedAnlyAstAttr-Syndication Processing Version-118', + 'zMedAnlyAstAttr-Syndication Processing Value-119', + 'zAsset-Orientation-120', + 'zAddAssetAttr-Original Orientation-121', + 'zAsset-Kind-122', + 'zAsset-Kind-Sub-Type-123', + 'zAddAssetAttr-Cloud Kind Sub Type-124', + 'zAsset-Playback Style-125', + 'zAsset-Playback Variation-126', + 'zAsset-Video Duration-127', + 'zExtAttr-Duration-128', + 'zAsset-Video CP Duration-129', + 'zAddAssetAttr-Video CP Duration Time Scale-130', + 'zAsset-Video CP Visibility State-131', + 'zAddAssetAttr-Video CP Display Value-132', + 'zAddAssetAttr-Video CP Display Time Scale-133', + 'zIntResou-Datastore Class ID-134', + 'zAsset-Cloud Placeholder Kind-135', + 'zIntResou-Local Availability-136', + 'zIntResou-Local Availability Target-137', + 'zIntResou-Cloud Local State-138', + 'zIntResou-Remote Availability-139', + 'zIntResou-Remote Availability Target-140', + 'zIntResou-Transient Cloud Master-141', + 'zIntResou-Side Car Index-142', + 'zIntResou- File ID-143', + 'zIntResou-Version-144', + 'zAddAssetAttr- Original-File-Size-145', + 'zIntResou-Resource Type-146', + 'zIntResou-Datastore Sub-Type-147', + 'zIntResou-Cloud Source Type-148', + 'zIntResou-Data Length-149', + 'zIntResou-Recipe ID-150', + ('zIntResou-Cloud Last Prefetch Date-151', 'datetime'), + 'zIntResou-Cloud Prefetch Count-152', + ('zIntResou- Cloud-Last-OnDemand Download-Date-153', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-154', + 'zIntResou-Compact-UTI-155', + 'zAsset-Uniform Type ID-156', + 'zAsset-Original Color Space-157', + 'zCldMast-Uniform_Type_ID-158', + 'zCldMast-Full Size JPEG Source-159', + 'zAsset-HDR Gain-160', + 'zAsset-zHDR_Type-161', + 'zExtAttr-Codec-162', + 'zIntResou-Codec Four Char Code Name-163', + 'zCldMast-Codec Name-164', + 'zCldMast-Video Frame Rate-165', + 'zCldMast-Placeholder State-166', + 'zAsset-Depth_Type-167', + 'zAsset-Avalanche UUID-4TableStart-168', + 'zAsset-Avalanche_Pick_Type-BurstAsset-169', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-170', + 'zAddAssetAttr-Cloud Recovery State-171', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-172', + 'zAsset-Deferred Processing Needed-173', + 'zAsset-Video Deferred Processing Needed-174', + 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-175', + 'zAddAssetAttr-Deferred Processing Candidate Options-176', + 'zAsset-Has Adjustments-Camera-Effects-Filters-177', + 'zUnmAdj-UUID-4TableStart-178', + ('zAsset-Adjustment Timestamp-179', 'datetime'), + ('zUnmAdj-Adjustment Timestamp-180', 'datetime'), + 'zAddAssetAttr-Editor Bundle ID-181', + 'zUnmAdj-Editor Localized Name-182', + 'zUnmAdj-Adjustment Format ID-183', + 'zAddAssetAttr-Montage-184', + 'zUnmAdj-Adjustment Render Types-185', + 'zUnmAdj-Adjustment Format Version-186', + 'zUnmAdj-Adjustment Base Image Format-187', + 'zAsset-Favorite-188', + 'zAsset-Hidden-189', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-190', + ('zAsset-Trashed Date-191', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-192', + 'zAsset-Delete-Reason-193', + 'zIntResou-Trash State-194', + ('zIntResou-Trashed Date-195', 'datetime'), + 'zAsset-Cloud Delete State-196', + 'zIntResou-Cloud Delete State-197', + 'zAddAssetAttr-PTP Trashed State-198', + 'zIntResou-PTP Trashed State-199', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-200', + ('zMedAnlyAstAttr-Media Analysis Timestamp-201', 'datetime'), + ('zAsset-Analysis State Modification Date-202', 'datetime'), + 'zAddAssetAttr- Pending View Count-203', + 'zAddAssetAttr- View Count-204', + 'zAddAssetAttr- Pending Play Count-205', + 'zAddAssetAttr- Play Count-206', + 'zAddAssetAttr- Pending Share Count-207', + 'zAddAssetAttr- Share Count-208', + 'zAddAssetAttr-Allowed for Analysis-209', + 'zAddAssetAttr-Scene Analysis Version-210', + 'zAddAssetAttr-Scene Analysis is From Preview-211', + ('zAddAssetAttr-Scene Analysis Timestamp-212', 'datetime'), + 'zAsset-Duplication Asset Visibility State-213', + 'zAddAssetAttr-Destination Asset Copy State-214', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-215', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-216', + 'zCldMast-Source Master For Duplication Scope ID-217', + 'zAddAssetAttr-Source Asset For Duplication ID-218', + 'zCldMast-Source Master for Duplication ID-219', + 'zAddAssetAttr-Variation Suggestions States-220', + 'zAsset-High Frame Rate State-221', + 'zAsset-Video Key Frame Time Scale-222', + 'zAsset-Video Key Frame Value-223', + 'zExtAttr-ISO-224', + 'zExtAttr-Metering Mode-225', + 'zExtAttr-Sample Rate-226', + 'zExtAttr-Track Format-227', + 'zExtAttr-White Balance-228', + 'zExtAttr-Aperture-229', + 'zExtAttr-BitRate-230', + 'zExtAttr-Exposure Bias-231', + 'zExtAttr-Frames Per Second-232', + 'zExtAttr-Shutter Speed-233', + 'zExtAttr-Slush Scene Bias-234', + 'zExtAttr-Slush Version-235', + 'zExtAttr-Slush Preset-236', + 'zExtAttr-Slush Warm Bias-237', + 'zAsset-Height-238', + 'zAddAssetAttr-Original Height-239', + 'zIntResou-Unoriented Height-240', + 'zAsset-Width-241', + 'zAddAssetAttr-Original Width-242', + 'zIntResou-Unoriented Width-243', + 'zShare-Thumbnail Image Data-244', + 'SPLzShare-Thumbnail Image Data-245', + 'zAsset-Thumbnail Index-246', + 'zAddAssetAttr-Embedded Thumbnail Height-247', + 'zAddAssetAttr-Embedded Thumbnail Length-248', + 'zAddAssetAttr-Embedded Thumbnail Offset-249', + 'zAddAssetAttr-Embedded Thumbnail Width-250', + 'zAsset-Packed Acceptable Crop Rect-251', + 'zAsset-Packed Badge Attributes-252', + 'zAsset-Packed Preferred Crop Rect-253', + 'zAsset-Curation Score-254', + 'zAsset-Camera Processing Adjustment State-255', + 'zAsset-Depth Type-256', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-257', + 'zAddAssetAttr-Orig Resource Choice-258', + 'zAsset-Spatial Type-259', + 'zAddAssetAttr-Spatial Over Capture Group ID-260', + 'zAddAssetAttr-Place Annotation Data-261', + 'zAddAssetAttr-Distance Identity-262', + 'zAddAssetAttr-Edited IPTC Attributes-263', + 'zAssetDes-Long Description-264', + 'zAddAssetAttr-Asset Description-265', + 'zAddAssetAttr-Title-Comments via Cloud Website-266', + 'zAddAssetAttr-Accessibility Description-267', + 'zAddAssetAttr-Photo Stream Tag ID-268', + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-269', + ('zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-270', 'datetime'), + ('zCldFeedEnt-Entry Date-271', 'datetime'), + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-272', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-273', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-274', + 'zCldFeedEnt-Entry Priority Number-275', + 'zCldFeedEnt-Entry Type Number-276', + 'zCldSharedComment-Cloud GUID-4TableStart-277', + ('zCldSharedComment-Date-278', 'datetime'), + ('zCldSharedComment-Comment Client Date-279', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-280', 'datetime'), + 'zCldSharedComment-Type-281', + 'zCldSharedComment-Comment Text-282', + 'zCldSharedComment-Commenter Hashed Person ID-283', + 'zCldSharedComment-Batch Comment-284', + 'zCldSharedComment-Is a Caption-285', + 'zAsset-Cloud Has Comments by Me-286', + 'zCldSharedComment-Is My Comment-287', + 'zCldSharedComment-Is Deletable-288', + 'zAsset-Cloud Has Comments Conversation-289', + 'zAsset-Cloud Has Unseen Comments-290', + 'zCldSharedComment-Liked-291', + 'zAddAssetAttr-Share Type-292', + 'zAsset-Library Scope Share State- StillTesting-293', + 'zAsset-Active Library Scope Participation State-294', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-295', + 'zShare-UUID-CMM-4TableStart-296', + 'SPLzShare-UUID-SPL-4TableStart-297', + 'zShare-zENT-CMM-298', + 'SPLzShare-zENT-SPL-299', + 'zSharePartic-z54SHARE-300', + 'SPLzSharePartic-z54SHARE-301', + 'zShare-Status-CMM-302', + 'SPLzShare-Status-SPL-303', + 'zShare-Scope Type-CMM-304', + 'SPLzShare-Scope Type-SPL-305', + 'zShare-Local Publish State-CMM-306', + 'SPLzShare-Local Publish State-SPL-307', + 'zShare-Public Permission-CMM-308', + 'SPLzShare-Public Permission-SPL-309', + 'zShare-Originating Scope ID-CMM-310', + 'SPLzShare-Originating Scope ID-SPL-311', + 'zShare-Scope ID-CMM-312', + 'SPLzShare-Scope ID-SPL-313', + 'zShare-Title-CMM-314', + 'SPLzShare-Title-SPL-315', + 'zShare-Share URL-CMM-316', + 'SPLzShare-Share URL-SPL-317', + ('zShare-Creation Date-CMM-318', 'datetime'), + ('SPLzShare-Creation Date-SPL-319', 'datetime'), + ('zShare-Start Date-CMM-320', 'datetime'), + ('SPLzShare-Start Date-SPL-321', 'datetime'), + ('zShare-End Date-CMM-322', 'datetime'), + ('SPLzShare-End Date-SPL-323', 'datetime'), + ('zShare-Expiry Date-CMM-324', 'datetime'), + ('SPLzShare-Expiry Date-SPL-325', 'datetime'), + 'zShare-Cloud Item Count-CMM-326', + 'SPLzShare-Cloud Item Count-SPL-327', + 'zShare-Asset Count-CMM-328', + 'SPLzShare-Asset Count-SPL-329', + 'zShare-Cloud Photo Count-CMM-330', + 'SPLzShare-Cloud Photo Count-SPL-331', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-332', + 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-333', + 'zShare-Photos Count-CMM-334', + 'SPLzShare-Photos Count-CMM-SPL-335', + 'zShare-Uploaded Photos Count-CMM-336', + 'SPLzShare-Uploaded Photos Count-SPL-337', + 'zShare-Cloud Video Count-CMM-338', + 'SPLzShare-Cloud Video Count-SPL-339', + 'zShare-Videos Count-CMM-340', + 'SPLzShare-Videos Count-SPL-341', + 'zShare-Uploaded Videos Count-CMM-342', + 'SPLzShare-Uploaded Videos Count-SPL-343', + 'zShare-Force Sync Attempted-CMM-344', + 'SPLzShare-Force Sync Attempted-SPL-345', + 'zShare-Cloud Local State-CMM-346', + 'SPLzShare-Cloud Local State-SPL-347', + 'zShare-Scope Syncing State-CMM-348', + 'SPLzShare-Scope Syncing State-SPL-349', + 'zShare-Auto Share Policy-CMM-350', + 'SPLzShare-Auto Share Policy-SPL-351', + 'zShare-Should Notify On Upload Completion-CMM-352', + 'SPLzShare-Should Notify On Upload Completion-SPL-353', + 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-354', + 'zShare-Trashed State-CMM-355', + 'SPLzShare-Trashed State-SPL-356', + 'zShare-Cloud Delete State-CMM-357', + 'SPLzShare-Cloud Delete State-SPL-358', + ('zShare-Trashed Date-CMM-359', 'datetime'), + ('SPLzShare-Trashed Date-SPL-360', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-CMM-361', 'datetime'), + ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL-362', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-CMM-363', 'datetime'), + ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL-364', 'datetime'), + 'zShare-Exit Source-CMM-365', + 'SPLzShare-Exit Source-SPL-366', + 'zShare-SPL_Exit State-CMM-367', + 'SPLzShare-SPL_Exit State-SPL-368', + 'zShare-Exit Type-CMM-369', + 'SPLzShare-Exit Type-SPL-370', + 'zShare-Should Ignor Budgets-CMM-371', + 'SPLzShare-Should Ignor Budgets-SPL-372', + 'zShare-Preview State-CMM-373', + 'SPLzShare-Preview State-SPL-374', + 'zShare-Preview Data-CMM-375', + 'SPLzShare-Preview Data-SPL-376', + 'zShare-Rules-CMM-377', + 'SPLzShare-Rules-SPL-378', + 'zShare-Thumbnail Image Data-CMM-379', + 'SPLzShare-Thumbnail Image Data-SPL-380', + 'zShare-Participant Cloud Update State-CMM-381', + 'SPLzShare-Participant Cloud Update State-SPL-382', + 'zSharePartic-UUID-4TableStart-383', + 'SPLzSharePartic-UUID-4TableStart-384', + 'zSharePartic-Acceptance Status-385', + 'SPLzSharePartic-Acceptance Status-386', + 'zSharePartic-Is Current User-387', + 'SPLzSharePartic-Is Current User-388', + 'zSharePartic-Role-389', + 'SPLzSharePartic-Role-390', + 'zSharePartic-Premission-391', + 'SPLzSharePartic-Premission-392', + 'zSharePartic-Participant ID-393', + 'SPLzSharePartic-Participant ID-394', + 'zSharePartic-User ID-395', + 'SPLzSharePartic-User ID-396', + 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-397', + 'SPLzSharePartic-zPK-4TableStart-398', + 'zSharePartic-zPK-4TableStart-399', + 'zSharePartic-Email Address-400', + 'SPLzSharePartic-Email Address-401', + 'zSharePartic-Phone Number-402', + 'SPLzSharePartic-Phone Number-403', + 'zSharePartic-Exit State-404', + 'SPLzSharePartic-Exit State-405', + 'ParentzGenAlbum-UUID-4TableStart-406', + 'zGenAlbum-UUID-4TableStart-407', + 'SWYConverszGenAlbum-UUID-4TableStart-408', + 'ParentzGenAlbum-Cloud GUID-4TableStart-409', + 'zGenAlbum-Cloud GUID-4TableStart-410', + 'SWYConverszGenAlbum-Cloud GUID-4TableStart-411', + 'zCldShareAlbumInvRec-Album GUID-4TableStart-412', + 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-413', + 'zGenAlbum-Project Render UUID-4TableStart-414', + 'SWYConverszGenAlbum-Project Render UUID-4TableStart-415', + 'zAlbumList-Needs Reordering Number-416', + 'zGenAlbum-zENT- Entity-417', + 'ParentzGenAlbum-Kind-418', + 'zGenAlbum-Album Kind-419', + 'SWYConverszGenAlbum-Album Kind-420', + 'ParentzGenAlbum-Cloud-Local-State-421', + 'zGenAlbum-Cloud_Local_State-422', + 'SWYConverszGenAlbum-Cloud_Local_State-423', + 'ParentzGenAlbum- Title-424', + 'zGenAlbum- Title-User&System Applied-425', + 'SWYConverszGenAlbum- Title -User&System Applied-426', + 'zGenAlbum-Import Session ID-SWY-427', + 'zAsset- Conversation= zGenAlbum_zPK-428', + 'SWYConverszGenAlbum- Import Session ID-SWY-429', + 'zGenAlbum-Imported by Bundle Identifier-430', + 'SWYzGenAlbum-Imported by Bundle Identifier-431', + 'SWYConverszGenAlbum- Syndicate-432', + ('ParentzGenAlbum-Creation Date-433', 'datetime'), + ('zGenAlbum-Creation Date-434', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-435', 'datetime'), + ('zGenAlbum-Cloud Creation Date-436', 'datetime'), + ('SWYConverszGenAlbum-Cloud Creation Date-437', 'datetime'), + ('zGenAlbum-Start Date-438', 'datetime'), + ('SWYConverszGenAlbum-Start Date-439', 'datetime'), + ('zGenAlbum-End Date-440', 'datetime'), + ('SWYConverszGenAlbum-End Date-441', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-442', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date-443', 'datetime'), + 'ParentzGenAlbum-Pending Items Count-444', + 'zGenAlbum-Pending Items Count-445', + 'SWYConverszGenAlbum-Pending Items Count-446', + 'ParentzGenAlbum-Pending Items Type-447', + 'zGenAlbum-Pending Items Type-448', + 'SWYConverszGenAlbum-Pending Items Type-449', + 'zGenAlbum- Cached Photos Count-450', + 'SWYConverszGenAlbum- Cached Photos Count-451', + 'zGenAlbum- Cached Videos Count-452', + 'SWYConverszGenAlbum- Cached Videos Count-453', + 'zGenAlbum- Cached Count-454', + 'SWYConverszGenAlbum- Cached Count-455', + 'ParentzGenAlbum-Sync Event Order Key-456', + 'zGenAlbum-Sync Event Order Key-457', + 'SWYConverszGenAlbum-Sync Event Order Key-458', + 'zGenAlbum-Has Unseen Content-459', + 'SWYConverszGenAlbum-Has Unseen Content-460', + 'zGenAlbum-Unseen Asset Count-461', + 'SWYConverszGenAlbum-Unseen Asset Count-462', + 'zGenAlbum-is Owned-463', + 'SWYConverszGenAlbum-is Owned-464', + 'zGenAlbum-Cloud Relationship State-465', + 'SWYConverszGenAlbum-Cloud Relationship State-466', + 'zGenAlbum-Cloud Relationship State Local-467', + 'SWYConverszGenAlbum-Cloud Relationship State Local-468', + 'zGenAlbum-Cloud Owner Mail Key-469', + 'SWYConverszGenAlbum-Cloud Owner Mail Key-470', + 'zGenAlbum-Cloud Owner Frist Name-471', + 'SWYConverszGenAlbum-Cloud Owner Frist Name-472', + 'zGenAlbum-Cloud Owner Last Name-473', + 'SWYConverszGenAlbum-Cloud Owner Last Name-474', + 'zGenAlbum-Cloud Owner Full Name-475', + 'SWYConverszGenAlbum-Cloud Owner Full Name-476', + 'zGenAlbum-Cloud Person ID-477', + 'SWYConverszGenAlbum-Cloud Person ID-478', + 'zAsset-Cloud Owner Hashed Person ID-479', + 'zGenAlbum-Cloud Owner Hashed Person ID-480', + 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-481', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-482', + 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-483', + 'zGenAlbum-Cloud Multi-Contributors Enabled-484', + 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-485', + 'zGenAlbum-Cloud Album Sub Type-486', + 'SWYConverszGenAlbum-Cloud Album Sub Type-487', + ('zGenAlbum-Cloud Contribution Date-488', 'datetime'), + ('SWYConverszGenAlbum-Cloud Contribution Date-489', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-490', 'datetime'), + ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-491', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-492', + 'SWYConverszGenAlbum-Cloud Notification Enabled-493', + 'ParentzGenAlbum-Pinned-494', + 'zGenAlbum-Pinned-495', + 'SWYConverszGenAlbum-Pinned-496', + 'ParentzGenAlbum-Custom Sort Key-497', + 'zGenAlbum-Custom Sort Key-498', + 'SWYConverszGenAlbum-Custom Sort Key-499', + 'ParentzGenAlbum-Custom Sort Ascending-500', + 'zGenAlbum-Custom Sort Ascending-501', + 'SWYConverszGenAlbum-Custom Sort Ascending-502', + 'ParentzGenAlbum-Is Prototype-503', + 'zGenAlbum-Is Prototype-504', + 'SWYConverszGenAlbum-Is Prototype-505', + 'ParentzGenAlbum-Project Document Type-506', + 'zGenAlbum-Project Document Type-507', + 'SWYConverszGenAlbum-Project Document Type-508', + 'ParentzGenAlbum-Custom Query Type-509', + 'zGenAlbum-Custom Query Type-510', + 'SWYConverszGenAlbum-Custom Query Type-511', + 'ParentzGenAlbum-Trashed State-512', + ('ParentzGenAlbum-Trash Date-513', 'datetime'), + 'zGenAlbum-Trashed State-514', + ('zGenAlbum-Trash Date-515', 'datetime'), + 'SWYConverszGenAlbum-Trashed State-516', + ('SWYConverszGenAlbum-Trash Date-517', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-518', + 'zGenAlbum-Cloud Delete State-519', + 'SWYConverszGenAlbum-Cloud Delete State-520', + 'zGenAlbum-Cloud Owner Whitelisted-521', + 'SWYConverszGenAlbum-Cloud Owner Whitelisted-522', + 'zGenAlbum-Cloud Local Public URL Enabled-523', + 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-524', + 'zGenAlbum-Cloud Public URL Enabled-525', + 'zGenAlbum-Public URL-526', + 'SWYConverszGenAlbum-Cloud Public URL Enabled-527', + 'SWYConverszGenAlbum-Public URL-528', + 'zGenAlbum-Key Asset Face Thumb Index-529', + 'SWYConverszGenAlbum-Key Asset Face Thumb Index-530', + 'zGenAlbum-Project Text Extension ID-531', + 'SWYConverszGenAlbum-Project Text Extension ID-532', + 'zGenAlbum-User Query Data-533', + 'SWYConverszGenAlbum-User Query Data-534', + 'zGenAlbum-Custom Query Parameters-535', + 'SWYConverszGenAlbum-Custom Query Parameters-536', + 'zGenAlbum-Project Data-537', + 'SWYConverszGenAlbum-Project Data-538', + 'zGenAlbum-Search Index Rebuild State-539', + 'SWYConverszGenAlbum-Search Index Rebuild State-540', + 'zGenAlbum-Duplicate Type-541', + 'SWYConverszGenAlbum-Duplicate Type-542', + 'zGenAlbum-Privacy State-543', + 'SWYConverszGenAlbum-Privacy State-544', + 'zCldShareAlbumInvRec-zUUID-4TableStart-545', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-546', + 'zCldShareAlbumInvRec-Invitation State Local-547', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-548', + ('zCldShareAlbumInvRec-Subscription Date-549', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-550', + 'zCldShareAlbumInvRec-Invitee Last Name-551', + 'zCldShareAlbumInvRec-Invitee Full Name-552', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-553', + 'zCldShareAlbumInvRec-Invitee Email Key-554', + 'zGenAlbum-Key Asset Face ID-555', + 'zFaceCrop-Face Area Points-556', + 'zAsset-Face Adjustment Version-557', + 'zAddAssetAttr-Face Analysis Version-558', + 'zDetFace-Asset Visible-559', + 'zPerson-Face Count-560', + 'zDetFace-Face Crop-561', + 'zDetFace-Face Algorithm Version-562', + 'zDetFace-Adjustment Version-563', + 'zDetFace-UUID-4TableStart-564', + 'zPerson-Person UUID-4TableStart-565', + 'zPerson - MD ID-566', + 'zPerson - Asset Sort Order-567', + 'zDetFace-Confirmed Face Crop Generation State-568', + 'zDetFace-Manual-569', + 'zDetFace-Detection Type-570', + 'zPerson-Detection Type-571', + 'zDetFace-VIP Model Type-572', + 'zDetFace-Name Source-573', + 'zDetFace-Cloud Name Source-574', + 'zPerson-Merge Candidate Confidence-575', + 'zPerson-Person URI-576', + 'zPerson-Display Name-577', + 'zPerson-Full Name-578', + 'zPerson-Cloud Verified Type-579', + 'zFaceCrop-State-580', + 'zFaceCrop-Type-581', + 'zFaceCrop-UUID-4TableStart-582', + 'zPerson-Type-583', + 'zPerson-Verified Type-584', + 'zPerson-Gender Type-585', + 'zDetFace-Gender Type-586', + 'zDetFace-Center X-587', + 'zDetFace-Center Y-588', + 'zPerson-Age Type Estimate-589', + 'zDetFace-Age Type Estimate-590', + 'zDetFace-Ethnicity Type-591', + 'zDetFace-Skin Tone Type-592', + 'zDetFace-Hair Type-593', + 'zDetFace-Hair Color Type-594', + 'zDetFace-Head Gear Type-595', + 'zDetFace-Facial Hair Type-596', + 'zDetFace-Has Face Mask-597', + 'zDetFace-Pose Type-598', + 'zDetFace-Face Expression Type-599', + 'zDetFace-Has Smile-600', + 'zDetFace-Smile Type-601', + 'zDetFace-Lip Makeup Type-602', + 'zDetFace-Eyes State-603', + 'zDetFace-Is Left Eye Closed-604', + 'zDetFace-Is Right Eye Closed-605', + 'zDetFace-Gaze Center X-606', + 'zDetFace-Gaze Center Y-607', + 'zDetFace-Face Gaze Type-608', + 'zDetFace-Eye Glasses Type-609', + 'zDetFace-Eye Makeup Type-610', + 'zDetFace-Cluster Squence Number Key-611', + 'zDetFace-Grouping ID-612', + 'zDetFace-Master ID-613', + 'zDetFace-Quality-614', + 'zDetFace-Quality Measure-615', + 'zDetFace-Source Height-616', + 'zDetFace-Source Width-617', + 'zDetFace-Hidden-Asset Hidden-618', + 'zDetFace-In Trash-Recently Deleted-619', + 'zDetFace-Cloud Local State-620', + 'zDetFace-Training Type-621', + 'zDetFace.Pose Yaw-622', + 'zDetFace-Body Center X-623', + 'zDetFace-Body Center Y-624', + 'zDetFace-Body Height-625', + 'zDetFace-Body Width-626', + 'zDetFace-Roll-627', + 'zDetFace-Size-628', + 'zDetFace-Cluster Squence Number-629', + 'zDetFace-Blur Score-630', + 'zDetFacePrint-Face Print Version-631', + 'zMedAnlyAstAttr-Face Count-632', + 'zDetFaceGroup-UUID-4TableStart-633', + 'zDetFaceGroup-Person Builder State-634', + 'zDetFaceGroup-UnNamed Face Count-635', + 'zPerson-In Person Naming Model-636', + 'zPerson-Key Face Pick Source Key-637', + 'zPerson-Manual Order Key-638', + 'zPerson-Question Type-639', + 'zPerson-Suggested For Client Type-640', + 'zPerson-Merge Target Person-641', + 'zPerson-Cloud Local State-642', + 'zFaceCrop-Cloud Local State-643', + 'zFaceCrop-Cloud Type-644', + 'zPerson-Cloud Delete State-645', + 'zFaceCrop-Cloud Delete State-646', + 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-647', + 'zAsset-Highlight Visibility Score-648', + 'zMemory-UUID-4TableStart-649', + 'zMemory-AssetListPredicte-650', + 'zMemory-Score-651', + 'zMemory-SubTitle-652', + 'zMemory-Title-653', + 'zMemory-Category-654', + 'zMemory-SubCategory-655', + ('zMemory-Creation Date-656', 'datetime'), + ('zMemory-Last Enrichment Date-657', 'datetime'), + 'zMemory-User Action Options-658', + 'zMemory-Favorite Memory-659', + 'zMemory-View Count-660', + 'zMemory-Play Count-661', + 'zMemory-Rejected-662', + 'zMemory-Share Count-663', + 'zMemory-Sharing Composition-664', + ('zMemory-Last Movie Play Date-665', 'datetime'), + ('zMemory-Last Viewed Date-666', 'datetime'), + 'zMemory-Pending Play Count Memory-667', + 'zMemory-Pending Share Count Memory-668', + 'zMemory-Pending View Count Memory-669', + 'zMemory-Pending State-670', + 'zMemory-Featured State-671', + 'zMemory-Photos Graph Version-672', + 'zMemory-Graph Memory Identifier-673', + 'zMemory-Notification State-674', + 'zMemory-Cloud Local State-675', + 'zMemory-Cloud Delete State-676', + 'zMemory-Story Color Grade Kind-677', + 'zMemory-Story Serialized Title Category-678', + 'zMemory-Syndicated Content State-679', + 'zMemory-Search Index Rebuild State-680', + 'zMemory-Black Listed Feature-681', + 'zMoment-UUID-4TableStart-682', + 'zMoment-Aggregation Score-683', + ('zMoment-Start Date-684', 'datetime'), + ('zMoment-Representative Date-685', 'datetime'), + 'zMoment-Timezone Offset-686', + ('zMoment-Modification Date-687', 'datetime'), + ('zMoment-End Date-688', 'datetime'), + 'zMoment-SubTitle-689', + 'zMoment-Title-690', + 'zMoment-Originator State-691', + 'zMoment-Sharing Composition-692', + 'zMoment-Cached Count Shared-693', + 'zMoment-Processed Location-694', + 'zMoment-Approx Latitude-695', + 'zMoment-Approx Longitude-696', + 'zMoment-GPS Horizontal Accuracy-697', + 'zMoment-Cache Count-698', + 'zMoment-Cached Photos Count-699', + 'zMoment-Cached Videos Count-700', + 'zMoment-Trashed State-701', + 'SBKAzSugg-UUID-4TableStart-702', + 'SBKAzSugg-Suggestion Context-703', + 'SBKAzSugg-Sharing Composition-704', + ('SBKAzSugg-Start Date-705', 'datetime'), + 'SBKAzSugg-State-706', + 'SBKAzSugg-Featured State-707', + 'SBKAzSugg- Available Features-708', + 'SBKAzSugg-Notification State-709', + ('SBKAzSugg-Creation Date-710', 'datetime'), + ('SBKAzSugg-End Date-711', 'datetime'), + ('SBKAzSugg-Activation Date-712', 'datetime'), + ('SBKAzSugg-Expunge Date-713', 'datetime'), + ('SBKAzSugg-Relevant Until Date-714', 'datetime'), + 'SBKAzSugg-Title-715', + 'SBKAzSugg-Sub Title-716', + 'SBKAzSugg-Cached Count-717', + 'SBKAzSugg-Cahed Photos Count-718', + 'SBKAzSugg-Cached Videos Count-719', + 'SBKAzSugg-Type-720', + 'SBKAzSugg-Sub Type-721', + 'SBKAzSugg-Action Data-722', + 'SBKAzSugg-Version-723', + 'SBKAzSugg-Cloud Local State-724', + 'SBKAzSugg-Cloud Delete State-725', + 'SBRAzSugg-UUID-4TableStart-726', + 'SBRAzSugg-Suggestion Context-727', + 'SBRAzSugg-Sharing Composition-728', + ('SBRAzSugg-Start Date-729', 'datetime'), + 'SBRAzSugg-State-730', + 'SBRAzSugg-Featured State-731', + 'SBRAzSugg- Available Features-732', + 'SBRAzSugg-Notification State-733', + ('SBRAzSugg-Creation Date-734', 'datetime'), + ('SBRAzSugg-End Date-735', 'datetime'), + ('SBRAzSugg-Activation Date-736', 'datetime'), + ('SBRAzSugg-Expunge Date-737', 'datetime'), + ('SBRAzSugg-Relevant Until Date-738', 'datetime'), + 'SBRAzSugg-Title-739', + 'SBRAzSugg-Sub Title-740', + 'SBRAzSugg-Cached Count-741', + 'SBRAzSugg-Cahed Photos Count-742', + 'SBRAzSugg-Cached Videos Count-743', + 'SBRAzSugg-Type-744', + 'SBRAzSugg-Sub Type-745', + 'SBRAzSugg-Action Data-746', + 'SBRAzSugg-Version-747', + 'SBRAzSugg-Cloud Local State-748', + 'SBRAzSugg-Cloud Delete State-749', + 'zMedAnlyAstAttr-Media Analysis Version-750', + 'zMedAnlyAstAttr-Audio Classification-751', + 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-752', + 'zMedAnlyAstAttr-Best Video Range Start Time Scale-753', + 'zMedAnlyAstAttr-Best Video Range Duration Value-754', + 'zMedAnlyAstAttr-Best Video Range Start Value-755', + 'zMedAnlyAstAttr-Packed Best Playback Rect-756', + 'zMedAnlyAstAttr-Activity Score-757', + 'zMedAnlyAstAttr-Video Score-758', + 'zMedAnlyAstAttr-Audio Score-759', + 'zMedAnlyAstAttr-Wallpaper Score-760', + 'zMedAnlyAstAttr-AutoPlay Suggestion Score-761', + 'zMedAnlyAstAttr-Blurriness Score-762', + 'zMedAnlyAstAttr-Exposure Score-763', + 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-764', + 'zMedAnlyAstAttr-Probable Rotation Direction-765', + 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-766', + 'zAssetAnalyState-Asset UUID-4TableStart-767', + 'zAssetAnalyState-Analysis State-768', + 'zAssetAnalyState-Worker Flags-769', + 'zAssetAnalyState-Worker Type-770', + ('zAssetAnalyState-Ignore Until Date-771', 'datetime'), + ('zAssetAnalyState-Last Ignored Date-772', 'datetime'), + ('zAssetAnalyState-Sort Token-773', 'datetime'), + 'zMedAnlyAstAttr-Character Recognition Attr-774', + 'zCharRecogAttr-Algorithm Version-775', + 'zCharRecogAttr-Adjustment Version-776', + 'zMedAnlyAstAttr-Visual Search Attributes-777', + 'zVisualSearchAttr-Algorithm Version-778', + 'zVisualSearchAttr-Adjustment Version-779', + 'zVisualSearchAttr - Sticker Confidence Algorithm Version-780', + 'zVisualSearchAttr - Sticker Confidence Score-781', + 'zAsset-Sticker Confidence Score-782', + 'zAsset-Overall Aesthetic Score-783', + 'zCompAssetAttr-Behavioral Score-784', + 'zCompAssetAttr-Failure Score zCompAssetAttr-785', + 'zCompAssetAttr-Harmonious Color Score-786', + 'zCompAssetAttr-Immersiveness Score-787', + 'zCompAssetAttr-Interaction Score-788', + 'zCompAssetAttr-Intersting Subject Score-789', + 'zCompAssetAttr-Intrusive Object Presence Score-790', + 'zCompAssetAttr-Lively Color Score-791', + 'zCompAssetAttr-Low Light-792', + 'zCompAssetAttr-Noise Score-793', + 'zCompAssetAttr-Pleasant Camera Tilt Score-794', + 'zCompAssetAttr-Pleasant Composition Score-795', + 'zCompAssetAttr-Pleasant Lighting Score-796', + 'zCompAssetAttr-Pleasant Pattern Score-797', + 'zCompAssetAttr-Pleasant Perspective Score-798', + 'zCompAssetAttr-Pleasant Post Processing Score-799', + 'zCompAssetAttr-Pleasant Reflection Score-800', + 'zCompAssetAttrPleasant Symmetry Score-801', + 'zCompAssetAttr-Sharply Focused Subject Score-802', + 'zCompAssetAttr-Tastfully Blurred Score-803', + 'zCompAssetAttr-Well Chosen Subject Score-804', + 'zCompAssetAttr-Well Framed Subject Score-805', + 'zCompAssetAttr-Well Timeed Shot Score-806', + 'zCldRes-Asset UUID-4TableStart-807', + 'zCldRes-Cloud Local State-808', + 'zCldRes-File Size-809', + 'zCldRes-Height-810', + 'zCldRes-Is Available-811', + 'zCldRes-Is Locally Available-812', + 'zCldRes-Prefetch Count-813', + 'zCldRes-Source Type-814', + 'zCldRes-Type-815', + 'zCldRes-Width-816', + ('zCldRes-Date Created-817', 'datetime'), + ('zCldRes-Last OnDemand Download Date-818', 'datetime'), + ('zCldRes-Last Prefetch Date-819', 'datetime'), + 'zCldRes-Prunedat-820', + 'zCldRes-File Path-821', + 'zCldRes-Fingerprint-822', + 'zCldRes-Item ID-823', + 'zCldRes-UniID-824', + 'zUserFeedback-UUID-4TableStart-825', + 'zUserFeedback-Feature-826', + 'zUserFeedback-Type-827', + ('zUserFeedback-Last Modified Date-828', 'datetime'), + 'zUserFeedback-Context-829', + 'zUserFeedback-Cloud Local State-830', + 'zUserFeedback-Cloud Delete State-831', + 'zUserFeedback - Creation Type-832', + 'zAddAssetAttr-zPK-833', + 'zAddAssetAttr-zENT-834', + 'ZAddAssetAttr-zOPT-835', + 'zAddAssetAttr-zAsset= zAsset_zPK-836', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-837', + 'zAddAssetAttr-Master Fingerprint-838', + 'zAddAssetAttr-Public Global UUID-839', + 'zAddAssetAttr-Deferred Photo Identifier-840', + 'zAddAssetAttr-Original Assets UUID-841', + 'zAddAssetAttr-Import Session ID-842', + 'zAddAssetAttr-Originating Asset Identifier-843', + 'zAddAssetAttr.Adjusted Fingerprint-844', + 'zAlbumList-zPK= Album List Key-845', + 'zAlbumList-zENT-846', + 'zAlbumList-zOPT-847', + 'zAlbumList-ID Key-848', + 'zAlbumList-UUID-849', + 'zAsset-zPK-850', + 'zAsset-zENT-851', + 'zAsset-zOPT-852', + 'zAsset-Master= zCldMast-zPK-853', + 'zAsset-Extended Attributes= zExtAttr-zPK-854', + 'zAsset-Import Session Key-855', + 'zAsset-Trashed by Participant= zSharePartic_zPK-856', + 'zAsset-Photo Analysis Attributes Key-857', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-858', + 'zAsset-FOK-Cloud Feed Asset Entry Key-859', + 'zAsset-Moment Share Key= zShare-zPK-860', + 'zAsset-zMoment Key= zMoment-zPK-861', + 'zAsset-Computed Attributes Asset Key-862', + 'zAsset-Highlight Being Assets-HBA Key-863', + 'zAsset-Highlight Being Extended Assets-HBEA Key-864', + 'zAsset-Highlight Being Key Asset Private-HBKAP Key-865', + 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-866', + 'zAsset-Highligh Being Summary Assets-HBSA Key-867', + 'zAsset-Day Group Highlight Being Assets-DGHBA Key-868', + 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-869', + 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-870', + 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-871', + 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-872', + 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-873', + 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-874', + 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-875', + 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-876', + 'zAsset-Promotion Score-877', + 'zAsset-Iconic Score-878', + 'zAsset-Media Analysis Attributes Key-879', + 'zAsset-Media Group UUID-880', + 'zAsset-UUID = store.cloudphotodb-881', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-882', + 'zAsset.Cloud Collection GUID-883', + 'zAsset-Avalanche UUID-884', + 'zAssetAnalyState-zPK-885', + 'zAssetAnalyState-zEnt-886', + 'zAssetAnalyState-zOpt-887', + 'zAssetAnalyState-Asset= zAsset-zPK-888', + 'zAssetAnalyState-Asset UUID-889', + 'zAsstContrib-zPK-890', + 'zAsstContrib-zEnt-891', + 'zAsstContrib-zOpt-892', + 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-893', + 'zAsstContrib-Participant= zSharePartic-zPK-894', + 'zAssetDes-zPK-895', + 'zAssetDes-zENT-896', + 'zAssetDes-zOPT-897', + 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-898', + 'zCharRecogAttr-zPK-899', + 'zCharRecogAttr-zENT-900', + 'zCharRecogAttr-zOPT-901', + 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-902', + 'zCldFeedEnt-zPK= zCldShared keys-903', + 'zCldFeedEnt-zENT-904', + 'zCldFeedEnt-zOPT-905', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-906', + 'zCldFeedEnt-Entry Invitation Record GUID-907', + 'zCldFeedEnt-Entry Cloud Asset GUID-908', + 'zCldMast-zPK= zAsset-Master-909', + 'zCldMast-zENT-910', + 'zCldMast-zOPT-911', + 'zCldMast-Moment Share Key= zShare-zPK-912', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-913', + 'zCldMast-Originating Asset ID-914', + 'zCldMast-Import Session ID- AirDrop-StillTesting-915', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-916', + 'CMzCldMastMedData-zENT-917', + 'CMzCldMastMedData-zOPT-918', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-919', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-920', + 'AAAzCldMastMedData-zENT-921', + 'AAAzCldMastMedData-zOPT-922', + 'AAAzCldMastMedData-CldMast key-923', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-924', + 'zCldRes-zPK-925', + 'zCldRes-zENT-926', + 'zCldRes-zOPT-927', + 'zCldRes-Asset= zAsset-zPK-928', + 'zCldRes-Cloud Master= zCldMast-zPK-929', + 'zCldRes-Asset UUID-930', + 'zCldShareAlbumInvRec-zPK-931', + 'zCldShareAlbumInvRec-zEnt-932', + 'zCldShareAlbumInvRec-zOpt-933', + 'zCldShareAlbumInvRec-Album Key-934', + 'zCldShareAlbumInvRec-FOK Album Key-935', + 'zCldShareAlbumInvRec-Album GUID-936', + 'zCldShareAlbumInvRec-zUUID-937', + 'zCldShareAlbumInvRec-Cloud GUID-938', + 'zCldSharedComment-zPK-939', + 'zCldSharedComment-zENT-940', + 'zCldSharedComment-zOPT-941', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-942', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-943', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-944', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-945', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-946', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-947', + 'zCldSharedComment-Cloud GUID-948', + 'zCompAssetAttr-zPK-949', + 'zCompAssetAttr-zEnt-950', + 'zCompAssetAttr-zOpt-951', + 'zCompAssetAttr-Asset Key-952', + 'zDetFace-zPK-953', + 'zDetFace-zEnt-954', + 'zDetFace.zOpt-955', + 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-956', + 'zDetFace-PersonForFace= zPerson-zPK-957', + 'zDetFace-Person Being Key Face-958', + 'zDetFace-Face Print-959', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-960', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-961', + 'zDetFace-UUID-962', + 'zDetFaceGroup-zPK-963', + 'zDetFaceGroup-zENT-964', + 'zDetFaceGroup-zOPT-965', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-966', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-967', + 'zDetFaceGroup-UUID-968', + 'zDetFacePrint-zPK-969', + 'zDetFacePrint-zEnt-970', + 'zDetFacePrint-zOpt-971', + 'zDetFacePrint-Face Key-972', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-973', + 'zExtAttr-zENT-974', + 'zExtAttr-zOPT-975', + 'zExtAttr-Asset Key-976', + 'zFaceCrop-zPK-977', + 'zFaceCrop-zEnt-978', + 'zFaceCrop-zOpt-979', + 'zFaceCrop-Asset Key-980', + 'zFaceCrop-Invalid Merge Canidate Person UUID-981', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-982', + 'zFaceCrop-Face Key-983', + 'zFaceCrop-UUID-984', + 'zGenAlbum-zPK=26AlbumLists= 26Albums-985', + 'zGenAlbum-zENT-986', + 'zGenAlbum-zOpt-987', + 'zGenAlbum-Key Asset-Key zAsset-zPK-988', + 'zGenAlbum-Secondary Key Asset-989', + 'zGenAlbum-Tertiary Key Asset-990', + 'zGenAlbum-Custom Key Asset-991', + 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-992', + 'zGenAlbum-FOK Parent Folder-993', + 'zGenAlbum-zSyndicate-994', + 'zGenAlbum-UUID-995', + 'SWYConverszGenAlbum-UUID-996', + 'zGenAlbum-Cloud_GUID = store.cloudphotodb-997', + 'SWYConverszGenAlbum-Cloud GUID-998', + 'zGenAlbum-Project Render UUID-999', + 'SWYConverszGenAlbum-Project Render UUID-1000', + 'zIntResou-zPK-1001', + 'zIntResou-zENT-1002', + 'zIntResou-zOPT-1003', + 'zIntResou-Asset= zAsset_zPK-1004', + 'zIntResou-Fingerprint-1005', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-1006', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1007', + 'zMedAnlyAstAttr-zEnt-1008', + 'zMedAnlyAstAttr-zOpt-1009', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-1010', + 'zMemory-zPK-1011', + 'zMemory-zENT-1012', + 'zMemory-zOPT-1013', + 'zMemory-Key Asset= zAsset-zPK-1014', + 'zMemory-UUID-1015', + 'zMoment-zPK-1016', + 'zMoment-zENT-1017', + 'zMoment-zOPT-1018', + 'zMoment-Highlight Key-1019', + 'zMoment-UUID-1020', + 'zPerson-zPK=zDetFace-Person-1021', + 'zPerson-zEnt-1022', + 'zPerson-zOpt-1023', + 'zPerson-Share Participant= zSharePartic-zPK-1024', + 'zPerson-KeyFace=zDetFace-zPK-1025', + 'zPerson-Assoc Face Group Key-1026', + 'zPerson-Person UUID-1027', + 'zPhotoAnalysisAssetAttr-zPK-1028', + 'zPhotoAnalysisAssetAttr-zEnt-1029', + 'zPhotoAnalysisAssetAttr-zOpt-1030', + 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1031', + 'zSceneP-zPK-1032', + 'zSceneP-zENT-1033', + 'zSceneP-zOPT-1034', + 'zShare-zPK-1035', + 'zShare-zENT-1036', + 'zShare-zOPT-1037', + 'zShare-UUID-1038', + 'SPLzShare-UUID-1039', + 'zShare-Scope ID = store.cloudphotodb-1040', + 'zSharePartic-zPK-1041', + 'zSharePartic-zENT-1042', + 'zSharePartic-zOPT-1043', + 'zSharePartic-Share Key= zShare-zPK-1044', + 'zSharePartic-Person= zPerson-zPK-1045', + 'zSharePartic-UUID-1046', + 'SBKAzSugg-zPK-1047', + 'SBKAzSugg-zENT-1048', + 'SBKAzSugg-zOPT-1049', + 'SBKAzSugg-UUID-1050', + 'SBRAzSugg-zPK-1051', + 'SBRAzSugg-zENT-1052', + 'SBRAzSugg-zOPT-1053', + 'SBRAzSugg-UUID-1054', + 'z3SuggBRA-3RepAssets1-1055', + 'z3SuggBRA-59SuggBeingRepAssets-1056', + 'z3SuggBKA-59SuggBeingKeyAssets= zSugg-zPK-1057', + 'z3SuggBKA-3KeyAssets= zAsset-zPK-1058', + 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1059', + 'zUnmAdj-zOPT-1060', + 'zUnmAdj-zENT-1061', + 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1062', + 'zUnmAdj-UUID-1063', + 'zUnmAdj-Other Adjustments Fingerprint-1064', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1065', + 'zUserFeedback-zPK-1066', + 'zUserFeedback-zENT-1067', + 'zUserFeedback-zOPT-1068', + 'zUserFeedback-Person= zPerson-zPK-1069', + 'zUserFeedback-Memory= zMemory-zPK-1070', + 'zUserFeedback-UUID-1071', + 'zVisualSearchAttr-zPK-1072', + 'zVisualSearchAttr-zENT-1073', + 'zVisualSearchAttr-zOPT-1074', + 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1075', + 'z28AlbumList-28Albums= zGenAlbum-zPK-1076', + 'z28AlbumList-Album List Key-1077', + 'z28AlbumList-FOK28Albums Key-1078', + 'z29Assets-29Albums= zGenAlbum-zPK-1079', + 'z29Assets-3Asset Key= zAsset-zPK in the Album-1080', + 'z29Asset-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1081', + 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1082', + 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1083', + 'z3MemoryBCAs-45MemoriesBeingCuratedAssets= zMemory-zPK-1084', + 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1085', + 'z3MemoryBECAs-45MemoriesBeingExtCuratedAssets= zMemory-zPK-1086', + 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1087', + 'z3MemoryBRAs-45RepresentativeAssets= zMemory-zPK-1088', + 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1089', + 'z3MemoryBUCAs-45MemoriesBeingUserCuratedAssets= zMemory-zPK-1090', + 'z3MemoryBCAs-45Memories Being Custom User Assets-1091', + 'z3MemoryBCAs-3Custom User Assets-1092', + 'z3MemoryBCAs-FOK-3Custom User Assets-1093') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph98iOS18REFforAssetAnalysis.py b/scripts/artifacts/Ph98iOS18REFforAssetAnalysis.py index cfd8a809..b2903af0 100644 --- a/scripts/artifacts/Ph98iOS18REFforAssetAnalysis.py +++ b/scripts/artifacts/Ph98iOS18REFforAssetAnalysis.py @@ -1,41 +1,66 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 1.0 -# -# Description: -# Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest set of decoded data based on -# testing and research conducted by Scott Koenig https://theforensicscooter.com/ and -# queries found at https://github.com/ScottKjr3347. -# I recommend opening the TSV generated reports with Zimmerman's Tools https://ericzimmerman.github.io/#!index.md -# TimelineExplorer to view, search and filter the results. -# +__artifacts_v2__ = { + 'Ph98_1iOS18RefforAssetAnalysisPhDaPsql': { + 'name': 'Ph98.1-iOS18_Ref_for_Asset_Analysis-PhDaPsql', + 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' + ' set of decoded data based on testing and research conducted by Scott Koenig' + ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' + ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' + ' to view, search and filter the results.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + }, + 'Ph98_2iOS18RefforAssetAnalysisSyndPL': { + 'name': 'Ph98.2-iOS18_Ref_for_Asset_Analysis-SyndPL', + 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' + ' This parser includes the largest set of decoded data based on testing and research' + ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' + ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' + ' TimelineExplorer to view, search and filter the results.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite', + 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', + 'notes': '', + 'paths': ('*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly - - -def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph98_1iOS18RefforAssetAnalysisPhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if (version.parse(iosversion) <= version.parse("17.8")) or (version.parse(iosversion) >= version.parse("19")): - logfunc(f"Unsupported version for PhotoData-Photos.sqlite reference for asset analysis from iOS " + iosversion) + logfunc(f"Unsupported version for PhotoData-Photos.sqlite for iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("19")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT CASE zAsset.ZCOMPLETE WHEN 1 THEN '1-Yes-1' @@ -43,10 +68,10 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, zAsset.Z_PK AS 'zAsset-zPK-4QueryStart', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK-4QueryStart', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4QueryStart', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18-4QueryStart', - zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-iOS18-4QueryStart', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4QueryStart', - zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18-4QueryStart', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-4QueryStart', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4QueryStart', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4QueryStart', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4QueryStart', CASE zAsset.ZBUNDLESCOPE WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' @@ -96,10 +121,11 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Lenth in 35MM', zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', CASE zExtAttr.ZGENERATIVEAITYPE - WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0' + WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0' + WHEN 2 THEN '2-CleanUp-SafetyFilter-2' ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' - END AS 'zExtAttr-Generative_AI_Type-iOS18', - zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18', + END AS 'zExtAttr-Generative_AI_Type', + zExtAttr.ZCREDIT AS 'zExtAttr-Credit', CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE WHEN 0 THEN '0-Back-Camera-Other-0' WHEN 1 THEN '1-Front-Camera-1' @@ -162,10 +188,10 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' END AS 'zAsset-Saved Asset Type', CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recenlty_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' + WHEN 0 THEN '0-Not_Recently_Saved-0' + WHEN 1 THEN '1-Recently_Saved-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', + END AS 'zAsset-Is_Recently_Saved', zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', zAsset.ZFILENAME AS 'zAsset-Filename', zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', @@ -414,10 +440,10 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, WHEN 1 THEN '1-Video-1' END AS 'zAsset-Kind', CASE zAsset.ZISDETECTEDSCREENSHOT - WHEN 0 THEN '0-Not_Detected_Screenshot iOS18_Still_Testing-0' - WHEN 1 THEN '1-Detected_Screenshot iOS18_Still_Testing-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' - END AS 'zAsset-Is_Detected_Screenshot-iOS18', + WHEN 0 THEN '0-Not_Screenshot-0' + WHEN 1 THEN '1-Screenshot-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' + END AS 'zAsset-Is_Detected_Screenshot', CASE zAsset.ZKINDSUBTYPE WHEN 0 THEN '0-Still-Photo-0' WHEN 1 THEN '1-Paorama-1' @@ -517,9 +543,9 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master', zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4TableStart', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Orignial Stable Hash-iOS18-4TableStart', - zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-iOS18-4TableStart', - zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18-4TableStart', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Orignial Stable Hash-4TableStart', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4TableStart', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4TableStart', zIntResou.ZFILEID AS 'zIntResou- File ID', CASE zIntResou.ZVERSION WHEN 0 THEN '0-IR_Asset_Standard-0' @@ -715,19 +741,19 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart', zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', CASE zAsset.ZADJUSTMENTSSTATE - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2' - WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3' - ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' - END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18', + WHEN 0 THEN '0-No-Adjustments-0' + WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2' + WHEN 3 THEN '3-Adjusted-Camera-lens-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' + END AS 'zAsset-Adjustments_State', zUnmAdj.ZUUID AS 'zUnmAdj-UUID-4TableStart', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4TableStart', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4TableStart', zUnmAdj.ZOTHERADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Other Adjustments Fingerprint-4TableStart', zUnmAdj.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart', - zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-4TableStart', + zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-4TableStart', DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp', - DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18', + DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date', zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', zUnmAdj.ZEDITORLOCALIZEDNAME AS 'zUnmAdj-Editor Localized Name', zUnmAdj.ZADJUSTMENTFORMATIDENTIFIER AS 'zUnmAdj-Adjustment Format ID', @@ -755,8 +781,8 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, ELSE 'Unknown-New-Value!: ' || zUnmAdj.ZADJUSTMENTFORMATVERSION || '' END AS 'zUnmAdj-Adjustment Format Version', zUnmAdj.ZADJUSTMENTBASEIMAGEFORMAT AS 'zUnmAdj-Adjustment Base Image Format', - zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage-iOS18', - zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18', + zCompSyncAttr.ZLOCALANALYSISSTAGE AS 'zCompSyncAttr-Local_Analysis_Stage', + zCompSyncAttr.ZCLOUDCOMPUTESTATEVERSION AS 'zCompSyncAttr-Cloud_Compute_State_Version', CASE zCompSyncAttr.ZLOCALANALYSISMAJORVERSION WHEN 1 THEN '1-Is_Local_Analysis_Major_Version StillTesing-1' ELSE 'Unknown-New-Value!: ' || zCompSyncAttr.ZLOCALANALYSISMAJORVERSION || '' @@ -868,14 +894,14 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, WHEN 1 THEN '1-Obs in iOS 18 still testing-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSLEETISREVERSIBLE || '' END AS 'zAddAssetAttr.Sleet_Is_Reversible-iOS18', - zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version-iOS18', - zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity-iOS18', - zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias-iOS18', - zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias-iOS18', + zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version', + zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity', + zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias', + zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias', CASE zExtAttr.ZSLEETCAST WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0' ELSE 'Unknown-New-Value!: ' || zExtAttr.ZSLEETCAST || '' - END AS 'zExtAttr-Sleet_Cast-iOS18', + END AS 'zExtAttr-Sleet_Cast', zExtAttr.ZISO AS 'zExtAttr-ISO', zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode', zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate', @@ -903,11 +929,6 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', - CASE zAddAssetAttr.ZIMAGEEMBEDDINGVERSION - WHEN 0 THEN '0-Obs_in_iOS18 still_testing-0' - WHEN 1 THEN '1-Obs_in_iOS18 still_testing-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMAGEEMBEDDINGVERSION || '' - END AS 'zAddAssetAttr.Image Embedding Version-iOS18', zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', @@ -930,18 +951,6 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity', zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes', - zGenAsstDesc.ZASSET AS 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18', - zAsset.ZGENERATEDASSETDESCRIPTION AS 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18', - zGenAsstDesc.Z_PK AS 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18', - zGenAsstDesc.Z_ENT AS 'zGenAsstDesc-zENT-iOS18', - zGenAsstDesc.Z_OPT AS 'zGenAsstDesc-zOPT-iOS18', - DateTime(zGenAsstDesc.ZANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zGenAsstDesc-Analysis_Timestamp-iOS18', - CASE zGenAsstDesc.ZANALYSISSOURCETYPE - WHEN 0 THEN '0-NotYetObs iOS18_Still_Testing-0' - ELSE 'Unknown-New-Value!: ' || zGenAsstDesc.ZANALYSISSOURCETYPE || '' - END AS 'zGenAsstDesc-Analysis_Source_Type-iOS18', - zGenAsstDesc.ZANALYSISVERSION AS 'zGenAsstDesc-Analysis Version-iOS18', - zGenAsstDesc.ZDESCRIPTIONTEXT AS 'zGenAsstDesc-Description_Text-iOS18', zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description', zAddAssetAttr.ZASSETDESCRIPTION AS 'zAddAssetAttr-Asset Description', zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', @@ -1046,18 +1055,18 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, WHEN 63 THEN '63-SPL-Active-Participant-63' ELSE 'Unknown-New-Value!: ' || SPLzShare.Z_ENT || '' END AS 'SPLzShare-zENT-SPL', - CASE zSharePartic.Z62_SHARE + CASE zSharePartic.Z61_SHARE WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' WHEN 63 THEN '63-SPL-Active-Participant-63' - ELSE 'Unknown-New-Value!: ' || zSharePartic.Z62_SHARE || '' - END AS 'zSharePartic-z62SHARE', - CASE SPLzSharePartic.Z62_SHARE + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z61_SHARE || '' + END AS 'zSharePartic-z61SHARE', + CASE SPLzSharePartic.Z61_SHARE WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' WHEN 63 THEN '63-SPL-Active-Participant-63' - ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z62_SHARE || '' - END AS 'SPLzSharePartic-z62SHARE', + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z61_SHARE || '' + END AS 'SPLzSharePartic-z61SHARE', CASE zShare.ZSTATUS WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' WHEN 3 THEN '3-SPL-Actively-Sharing-3' @@ -2383,17 +2392,17 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTION AS 'zMedAnlyAstAttr-Probable Rotation Direction', zMedAnlyAstAttr.ZSCREENTIMEDEVICEIMAGESENSITIVITY AS 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity', zMedAnlyAstAttr.ZCOLORNORMALIZATIONDATA AS 'zMedAnlyAstAttr-Color Normalization Data', - zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18', - zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version-iOS18', - zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version-iOS18', - zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18', + zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version', + zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version', + zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version', + zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version', zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID-4TableStart', zAssetAnalyState.ZANALYSISSTATE AS 'zAssetAnalyState-Analyisis State', zAssetAnalyState.ZWORKERFLAGS AS 'zAssetAnalyState-Worker Flags', zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type', DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date', DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date', - zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token', + DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token', zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr', zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version', zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version', @@ -2461,13 +2470,13 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT', zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK', zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18-4Queryend', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-4Queryend', zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID', zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID', zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier-4endquery', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4endquery', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4endquery', zAlbumList.Z_PK AS 'zAlbumList-zPK= Album List Key', zAlbumList.Z_ENT AS 'zAlbumList-zENT', zAlbumList.Z_OPT AS 'zAlbumList-zOPT', @@ -2574,11 +2583,11 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, zCompAssetAttr.Z_ENT AS 'zCompAssetAttr-zEnt', zCompAssetAttr.Z_OPT AS 'zCompAssetAttr-zOpt', zCompAssetAttr.ZASSET AS 'zCompAssetAttr-Asset Key', - zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18', - zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18', - zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18', - zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT-iOS18', - zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT-iOS18', + zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK', + zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr', + zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK', + zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT', + zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT', zDetFace.Z_PK AS 'zDetFace-zPK', zDetFace.Z_ENT AS 'zDetFace-zEnt', zDetFace.Z_OPT AS 'zDetFace.zOpt', @@ -2628,8 +2637,8 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, zIntResou.Z_ENT AS 'zIntResou-zENT', zIntResou.Z_OPT AS 'zIntResou-zOPT', zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK', - zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-iOS18-4Queryend', - zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18-4Queryend', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4Queryend', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4Queryend', zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata', zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt', @@ -2652,7 +2661,7 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, zPerson.ZKEYFACE AS 'zPerson-KeyFace=zDetFace-zPK', zPerson.ZASSOCIATEDFACEGROUP AS 'zPerson-Assoc Face Group Key', zPerson.ZPERSONUUID AS 'zPerson-Person UUID', - zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-iOS18', + zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence', zPhotoAnalysisAssetAttr.Z_PK AS 'zPhotoAnalysisAssetAttr-zPK', zPhotoAnalysisAssetAttr.Z_ENT AS 'zPhotoAnalysisAssetAttr-zEnt', zPhotoAnalysisAssetAttr.Z_OPT AS 'zPhotoAnalysisAssetAttr-zOpt', @@ -2681,8 +2690,8 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, SBRAzSugg.Z_OPT AS 'SBRAzSugg-zOPT', SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID', z3SuggBRA.Z_3REPRESENTATIVEASSETS AS 'z3SuggBRA-3RepAssets', - z3SuggBRA.Z_66SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-66SuggBeingRepAssets', - z3SuggBKA.Z_66SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-66SuggBeingKeyAssets= zSugg-zPK', + z3SuggBRA.Z_65SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-65SuggBeingRepAssets', + z3SuggBKA.Z_65SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-65SuggBeingKeyAssets= zSugg-zPK', z3SuggBKA.Z_3KEYASSETS1 AS 'z3SuggBKA-3KeyAssets1= zAsset-zPK', zUnmAdj.Z_PK AS 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key', zUnmAdj.Z_OPT AS 'zUnmAdj-zOPT', @@ -2701,22 +2710,22 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, zVisualSearchAttr.Z_ENT AS 'zVisualSearchAttr-zENT', zVisualSearchAttr.Z_OPT AS 'zVisualSearchAttr-zOPT', zVisualSearchAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK', - z30AlbumLists.Z_30ALBUMS AS 'z30AlbumList-30Albums= zGenAlbum-zPK', - z30AlbumLists.Z_2ALBUMLISTS AS 'z30AlbumList-Album List Key', - z30AlbumLists.Z_FOK_30ALBUMS AS 'z30AlbumList-FOK30Albums Key', - z31Assets.Z_31ALBUMS AS 'z31Assets-31Albums= zGenAlbum-zPK', - z31Assets.Z_3ASSETS AS 'z31Assets-3Asset Key= zAsset-zPK in the Album', - z31Assets.Z_FOK_3ASSETS AS 'z31Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY', + z29AlbumLists.Z_29ALBUMS AS 'z29AlbumList-29Albums= zGenAlbum-zPK', + z29AlbumLists.Z_2ALBUMLISTS AS 'z29AlbumList-Album List Key', + z29AlbumLists.Z_FOK_29ALBUMS AS 'z29AlbumList-FOK29Albums Key', + z30Assets.Z_30ALBUMS AS 'z30Assets-30Albums= zGenAlbum-zPK', + z30Assets.Z_3ASSETS AS 'z30Assets-3Asset Key= zAsset-zPK in the Album', + z30Assets.Z_FOK_3ASSETS AS 'z30Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY', z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AS 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK', z3MemoryBCAs.Z_3CURATEDASSETS AS 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK', - z3MemoryBCAs.Z_52MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-52MemoriesBeingCuratedAssets= zMemory-zPK', + z3MemoryBCAs.Z_51MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-51MemoriesBeingCuratedAssets= zMemory-zPK', z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK', - z3MemoryBECAs.Z_52MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-52MemoriesBeingExtCuratedAssets= zMemory-zPK', + z3MemoryBECAs.Z_51MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-51MemoriesBeingExtCuratedAssets= zMemory-zPK', z3MemoryBRAs.Z_3REPRESENTATIVEASSETS1 AS 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK', - z3MemoryBRAs.Z_52MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK', + z3MemoryBRAs.Z_51MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-51RepresentativeAssets= zMemory-zPK', z3MemoryBUCAs.Z_3USERCURATEDASSETS AS 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK', - z3MemoryBUCAs.Z_52MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-52MemoriesBeingUserCuratedAssets= zMemory-zPK', - z3MemoryBCUAs.Z_52MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-52Memories Being Custom User Assets', + z3MemoryBUCAs.Z_51MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-51MemoriesBeingUserCuratedAssets= zMemory-zPK', + z3MemoryBCUAs.Z_51MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-51Memories Being Custom User Assets', z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-3Custom User Assets', z3MemoryBCUAs.Z_FOK_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-FOK-3Custom User Assets' FROM ZASSET zAsset @@ -2724,15 +2733,14 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT - LEFT JOIN Z_31ASSETS z31Assets ON z31Assets.Z_3ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z31Assets.Z_31ALBUMS + LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z30Assets.Z_30ALBUMS LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK - LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = zGenAlbum.Z_PK - LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS + LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION - LEFT JOIN ZGENERATEDASSETDESCRIPTION zGenAsstDesc ON zGenAsstDesc.Z_PK = zAsset.ZGENERATEDASSETDESCRIPTION LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA @@ -2759,1389 +2767,1356 @@ def get_ph98ios18refforassetanalysisphdapsql(files_found, report_folder, seeker, LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP LEFT JOIN Z_3MEMORIESBEINGCURATEDASSETS z3MemoryBCAs ON zAsset.Z_PK = z3MemoryBCAs.Z_3CURATEDASSETS - LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_52MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK - LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_52MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK - LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_52MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK - LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_52MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK - LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS1 AND z3MemoryBRAs.Z_52MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK - LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_52MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK + LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_51MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_51MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_51MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_51MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS1 AND z3MemoryBRAs.Z_51MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_51MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK LEFT JOIN ZUSERFEEDBACK zUserFeedback ON zUserFeedback.ZMEMORY = zMemory.Z_PK LEFT JOIN ZMOMENT zMoment ON zMoment.Z_PK = zAsset.ZMOMENT LEFT JOIN Z_3SUGGESTIONSBEINGKEYASSETS z3SuggBKA ON z3SuggBKA.Z_3KEYASSETS1 = zAsset.Z_PK - LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_66SUGGESTIONSBEINGKEYASSETS + LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_65SUGGESTIONSBEINGKEYASSETS LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS = zAsset.Z_PK - LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_66SUGGESTIONSBEINGREPRESENTATIVEASSETS + LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_65SUGGESTIONSBEINGREPRESENTATIVEASSETS ORDER BY zAsset.ZADDEDDATE - """) + ''' - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], - row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], - row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], - row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], - row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], - row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], - row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], - row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], - row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], - row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], - row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], - row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], - row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], - row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], - row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], - row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], - row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], - row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], - row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], - row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], - row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], - row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], - row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], - row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], - row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], - row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], - row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], - row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], - row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], - row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], - row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], - row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], - row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], - row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], - row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], - row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], - row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], - row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], - row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], - row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], - row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], - row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], - row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], - row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], - row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], - row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], - row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], - row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], - row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], - row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], - row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], - row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], - row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], - row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], - row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], - row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], - row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], - row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], - row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], - row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], - row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], - row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], - row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], - row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], - row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], - row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], - row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], - row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], - row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], - row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], - row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], - row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], - row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], - row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], - row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], - row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], - row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], - row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], - row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], - row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], - row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], - row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], - row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], - row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], - row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], - row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], - row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], - row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], - row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], - row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], - row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], - row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], - row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], - row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], - row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], - row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], - row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], - row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], - row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], - row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], - row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], - row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], - row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], - row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], - row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093], - row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100], - row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107], - row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114], - row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121], - row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128], - row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135], - row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142], - row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149], - row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156], - row[1157], row[1158], row[1159], row[1160], row[1161], row[1162], row[1163], - row[1164], row[1165], row[1166], row[1167], row[1168], row[1169])) - - counter += 1 - - description = ('Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' - ' set of decoded data based on testing and research conducted by Scott Koenig' - ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' - ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' - ' to view, search and filter the results.') - report = ArtifactHtmlReport('Ph98.1-iOS18_Ref_for_Asset_Analysis-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph98.1-iOS18_Ref_for_Asset_Analysis-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset Complete-0', - 'zAsset-zPK-4QueryStart-1', - 'zAddAssetAttr-zPK-4QueryStart-2', - 'zAsset-UUID = store.cloudphotodb-4QueryStart-3', - 'zAddAssetAttr-Original Stable Hash-iOS18-4QueryStart-4', - 'zIntResou-Fingerprint-iOS18-4QueryStart-5', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4QueryStart-6', - 'zIntResou-Stable Hash-iOS18-4QueryStart-7', - 'zAsset-Bundle Scope-8', - 'zAsset-Syndication State-9', - 'zAsset-Cloud is My Asset-10', - 'zAsset-Cloud is deletable-Asset-11', - 'zAsset-Cloud_Local_State-12', - 'zAsset-Visibility State-13', - 'zExtAttr-Camera Make-14', - 'zExtAttr-Camera Model-15', - 'zExtAttr-Lens Model-16', - 'zExtAttr-Flash Fired-17', - 'zExtAttr-Focal Lenght-18', - 'zExtAttr-Focal Lenth in 35MM-19', - 'zExtAttr-Digital Zoom Ratio-20', - 'zExtAttr-Generative_AI_Type-iOS18-21', - 'zExtAttr-Credit-iOS18-22', - 'zAsset-Derived Camera Capture Device-23', - 'zAsset-Capture_Session_Identifier-iOS18-24', - 'zAddAssetAttr-Camera Captured Device-25', - 'zAddAssetAttr-Imported by-26', - 'zCldMast-Imported By-27', - 'zAddAssetAttr.Imported by Bundle Identifier-28', - 'zAddAssetAttr-Imported By Display Name-29', - 'zCldMast-Imported by Bundle ID-30', - 'zCldMast-Imported by Display Name-31', - 'zAsset-ImageRequestHints-HEX-Path-32', - 'zAsset-Saved Asset Type-33', - 'zAsset-Is_Recently_Saved-iOS18-34', - 'zAsset-Directory-Path-35', - 'zAsset-Filename-36', - 'zAddAssetAttr- Original Filename-37', - 'zCldMast- Original Filename-38', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-39', - 'zAsset-Active Library Scope Participation State -4QueryStart-40', - 'zAsset-Library Scope Share State- StillTesting -4QueryStart-41', - 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-42', - 'SPLzShare-Cloud Video Count-SPL -4QueryStart-43', - 'zAsset-Added Date-44', - 'zAsset- SortToken -CameraRoll-45', - 'zAddAssetAttr-Date Created Source-46', - 'zAsset-Date Created-47', - 'zCldMast-Creation Date-48', - 'zIntResou-CldMst Date Created-49', - 'zAddAssetAttr-Time Zone Name-50', - 'zAddAssetAttr-Time Zone Offset-51', - 'zAddAssetAttr-Inferred Time Zone Offset-52', - 'zAddAssetAttr-EXIF-String-53', - 'zAsset-Modification Date-54', - 'zAddAssetAttr-Last Viewed Date-55', - 'zAsset-Last Shared Date-56', - 'zCldMast-Cloud Local State-57', - 'zCldMast-Import Date-58', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-59', - 'zAddAssetAttr-Import Session ID-4QueryStart-60', - 'zAddAssetAttr-Alt Import Image Date-61', - 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-62', - 'zAsset-Cloud Batch Publish Date-63', - 'zAsset-Cloud Server Publish Date-64', - 'zAsset-Cloud Download Requests-65', - 'zAsset-Cloud Batch ID-66', - 'zAddAssetAttr-Upload Attempts-67', - 'zAsset-Latitude-68', - 'zExtAttr-Latitude-69', - 'zAsset-Longitude-70', - 'zExtAttr-Longitude-71', - 'zAddAssetAttr-GPS Horizontal Accuracy-72', - 'zAddAssetAttr-Location Hash-73', - 'zAsset-Location Data-HEX-74', - 'zAddAssetAttr-Reverse Location Is Valid-75', - 'zAddAssetAttr-Reverse Location Data-76', - 'zAddAssetAttr-Shifted Location Valid-77', - 'zAddAssetAttr-Shifted Location Data-78', - 'ParentzGenAlbum-UUID-4QueryStart-79', - 'zGenAlbum-UUID-4QueryStart-80', - 'SWYConverszGenAlbum-UUID-4QueryStart-81', - 'ParentzGenAlbum-Cloud GUID-4QueryStart-82', - 'zGenAlbum-Cloud GUID-4QueryStart-83', - 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-84', - 'zCldShareAlbumInvRec-Album GUID-4QueryStart-85', - 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-86', - 'zGenAlbum-Project Render UUID-4QueryStart-87', - 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-88', - 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-89', - 'zGenAlbum-Cloud_Local_State-4QueryStart-90', - 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-91', - 'ParentzGenAlbum- Creation Date- 4QueryStart-92', - 'zGenAlbum- Creation Date- 4QueryStart-93', - 'SWYConverszGenAlbum- Creation Date- 4QueryStart-94', - 'zGenAlbum- Cloud Creation Date- 4QueryStart-95', - 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-96', - 'zGenAlbum- Start Date- 4QueryStart-97', - 'SWYConverszGenAlbum- Start Date- 4QueryStart-98', - 'zGenAlbum- End Date- 4QueryStart-99', - 'SWYConverszGenAlbum- End Date- 4QueryStart-100', - 'zGenAlbum-Cloud Subscription Date- 4QueryStart-101', - 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-102', - 'ParentzGenAlbum- Title- 4QueryStart-103', - 'zGenAlbum- Title-User&System Applied- 4QueryStart-104', - 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-105', - 'zGenAlbum-Import Session ID-SWY- 4QueryStart-106', - 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-107', - 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-108', - 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-109', - 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-110', - 'SWYConverszGenAlbum- Syndicate-4QueryStart-111', - 'zGenAlbum-zENT- Entity- 4QueryStart-112', - 'ParentzGenAlbum- Kind- 4QueryStart-113', - 'zGenAlbum-Album Kind- 4QueryStart-114', - 'SWYConverszGenAlbum-Album Kind- 4QueryStart-115', - 'AAAzCldMastMedData-zOPT-4TableStart-116', - 'zAddAssetAttr-Media Metadata Type-117', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-118', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-119', - 'AAAzCldMastMedData-Data-HEX-120', - 'CldMasterzCldMastMedData-zOPT-4TableStart-121', - 'zCldMast-Media Metadata Type-122', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-123', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-124', - 'CMzCldMastMedData-Data-HEX-125', - 'zAsset-Search Index Rebuild State-126', - 'zAddAssetAttr-Syndication History-127', - 'zMedAnlyAstAttr-Syndication Processing Version-128', - 'zMedAnlyAstAttr-Syndication Processing Value-129', - 'zAsset-Orientation-130', - 'zAddAssetAttr-Original Orientation-131', - 'zAsset-Kind-132', - 'zAsset-Is_Detected_Screenshot-iOS18-133', - 'zAsset-Kind-Sub-Type-134', - 'zAddAssetAttr-Cloud Kind Sub Type-135', - 'zAsset-Playback Style-136', - 'zAsset-Playback Variation-137', - 'zAddAssetAttr.View_Presentation-iOS18-138', - 'zAsset-Video Duration-139', - 'zExtAttr-Duration-140', - 'zAsset-Video CP Duration-141', - 'zAddAssetAttr-Video CP Duration Time Scale-142', - 'zAsset-Video CP Visibility State-143', - 'zAddAssetAttr-Video CP Display Value-144', - 'zAddAssetAttr-Video CP Display Time Scale-145', - 'zIntResou-Datastore Class ID-146', - 'zAsset-Cloud Placeholder Kind-147', - 'zIntResou-Local Availability-148', - 'zIntResou-Local Availability Target-149', - 'zIntResou-Cloud Local State-150', - 'zIntResou-Remote Availability-151', - 'zIntResou-Remote Availability Target-152', - 'zIntResou-Transient Cloud Master-153', - 'zIntResou-Side Car Index-154', - 'zAsset-UUID = store.cloudphotodb-4TableStart-155', - 'zAddAssetAttr-Orignial Stable Hash-iOS18-4TableStart-156', - 'zIntResou-Fingerprint-iOS18-4TableStart-157', - 'zIntResou-Stable Hash-iOS18-4TableStart-158', - 'zIntResou- File ID-159', - 'zIntResou-Version-160', - 'zAddAssetAttr- Original-File-Size-161', - 'zIntResou-Resource Type-162', - 'zIntResou-DataStoreKeyData-HEX-163', - 'zIntResou-Datastore Sub-Type-164', - 'zIntResou-Cloud Source Type-165', - 'zIntResou-Data Length-166', - 'zIntResou-Recipe ID-167', - 'zIntResou-Cloud Last Prefetch Date-168', - 'zIntResou-Cloud Prefetch Count-169', - 'zIntResou- Cloud-Last-OnDemand Download-Date-170', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-171', - 'zIntResou-Compact-UTI-172', - 'zAsset-Uniform Type ID-173', - 'zAsset-Original Color Space-174', - 'zCldMast-Uniform_Type_ID-175', - 'zCldMast-Full Size JPEG Source-176', - 'zAsset-HDR Gain-177', - 'zAsset-zHDR_Type-178', - 'zExtAttr-Codec-179', - 'zIntResou-Codec Four Char Code Name-180', - 'zCldMast-Codec Name-181', - 'zCldMast-Video Frame Rate-182', - 'zCldMast-Placeholder State-183', - 'zAsset-Depth_Type-184', - 'zAsset-Avalanche UUID-4TableStart-185', - 'zAsset-Avalanche_Kind-iOS18-186', - 'zAsset-Avalanche_Pick_Type-BurstAsset-187', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-188', - 'zAddAssetAttr-Cloud Recovery State-189', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-190', - 'zAsset-Deferred Processing Needed-191', - 'zAsset-Video Deferred Processing Needed-192', - 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-193', - 'zAddAssetAttr-Deferred Processing Candidate Options-194', - 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-195', - 'zUnmAdj-UUID-4TableStart-196', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4TableStart-197', - 'zUnmAdj-Other Adjustments Fingerprint-4TableStart-198', - 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart-199', - 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-4TableStart-200', - 'zAsset-Adjustment Timestamp-201', - 'zUnmAdj-Adjustment Timestamp-202', - 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-203', - 'zAddAssetAttr-Editor Bundle ID-204', - 'zUnmAdj-Editor Localized Name-205', - 'zUnmAdj-Adjustment Format ID-206', - 'zAddAssetAttr-Montage-207', - 'zUnmAdj-Adjustment Render Types-208', - 'zUnmAdj-Adjustment Format Version-209', - 'zUnmAdj-Adjustment Base Image Format-210', - 'zCompSyncAttr-Local_Analysis_Stage-iOS18-211', - 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-212', - 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-213', - 'zAsset-Favorite-214', - 'zAsset-Hidden-215', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-216', - 'zAsset-Trashed Date-217', - 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-218', - 'zAsset-Delete-Reason-219', - 'zIntResou-Trash State-220', - 'zIntResou-Trashed Date-221', - 'zAsset-Cloud Delete State-222', - 'zIntResou-Cloud Delete State-223', - 'zAddAssetAttr-PTP Trashed State-224', - 'zIntResou-PTP Trashed State-225', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-226', - 'zMedAnlyAstAttr-Media Analysis Timestamp-227', - 'zAsset-Analysis State Modificaion Date-228', - 'zAddAssetAttr- Pending View Count-229', - 'zAddAssetAttr- View Count-230', - 'zAddAssetAttr- Pending Play Count-231', - 'zAddAssetAttr- Play Count-232', - 'zAddAssetAttr- Pending Share Count-233', - 'zAddAssetAttr- Share Count-234', - 'zAddAssetAttr-Allowed for Analysis-235', - 'zAddAssetAttr-Scene Analysis Version-236', - 'zAddAssetAttr-Scene Analysis is From Preview-237', - 'zAddAssetAttr-Scene Analysis Timestamp-238', - 'zAsset-Duplication Asset Visibility State-239', - 'zAddAssetAttr-Destination Asset Copy State-240', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-241', - 'zSceneP-Data-HEX NSKeyed Plist-242', - 'zSceneP-Duplicate Matching Data-HEX NSKeyed Plist-243', - 'zSceneP-Duplicate Matching Alternat Data-HEX NSKeyed Plist-244', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-245', - 'zCldMast-Source Master For Duplication Scope ID-246', - 'zAddAssetAttr-Source Asset For Duplication ID-247', - 'zCldMast-Source Master for Duplication ID-248', - 'zAddAssetAttr-Variation Suggestions States-249', - 'zAsset-High Frame Rate State-250', - 'zAsset-Video Key Frame Time Scale-251', - 'zAsset-Video Key Frame Value-252', - 'zAsset-Current_Sleet_Cast-iOS18-253', - 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-254', - 'zExtAttr-Sleet_Rendering_Version-iOS18-255', - 'zExtAttr-Sleet_Intensity-iOS18-256', - 'zExtAttr-Sleet_Tone_Bias-iOS18-257', - 'zExtAttr-Sleet_Color_Bias-iOS18-258', - 'zExtAttr-Sleet_Cast-iOS18-259', - 'zExtAttr-ISO-260', - 'zExtAttr-Metering Mode-261', - 'zExtAttr-Sample Rate-262', - 'zExtAttr-Track Format-263', - 'zExtAttr-White Balance-264', - 'zExtAttr-Aperture-265', - 'zExtAttr-BitRate-266', - 'zExtAttr-Exposure Bias-267', - 'zExtAttr-Frames Per Second-268', - 'zExtAttr-Shutter Speed-269', - 'zExtAttr-Slush Scene Bias-270', - 'zExtAttr-Slush Version-271', - 'zExtAttr-Slush Preset-272', - 'zExtAttr-Slush Warm Bias-273', - 'zAsset-Height-274', - 'zAddAssetAttr-Original Height-275', - 'zIntResou-Unoriented Height-276', - 'zAsset-Width-277', - 'zAddAssetAttr-Original Width-278', - 'zIntResou-Unoriented Width-279', - 'zShare-Thumbnail Image Data-280', - 'SPLzShare-Thumbnail Image Data-281', - 'zAsset-Thumbnail Index-282', - 'zAddAssetAttr-Embedded Thumbnail Height-283', - 'zAddAssetAttr-Embedded Thumbnail Length-284', - 'zAddAssetAttr-Embedded Thumbnail Offset-285', - 'zAddAssetAttr-Embedded Thumbnail Width-286', - 'zAddAssetAttr.Image Embedding Version-iOS18-287', - 'zAsset-Packed Acceptable Crop Rect-288', - 'zAsset-Packed Badge Attributes-289', - 'zAsset-Packed Preferred Crop Rect-290', - 'zAsset-Curation Score-291', - 'zAsset-Camera Processing Adjustment State-292', - 'zAsset-Depth Type-293', - 'zAsset-Is Magic Carpet-QuicktimeMOVfile-294', - 'zAddAssetAttr-Orig Resource Choice-295', - 'zAsset-Spatial Type-296', - 'zAddAssetAttr-Spatial Over Capture Group ID-297', - 'zAddAssetAttr-Object Saliency Rects Data-HEX NSKeyed Plist-298', - 'zAddAssetAttr-Original Hash-HEX-299', - 'zAddAssetAttr-Place Annotation Data-300', - 'zAddAssetAttr-Distance Identity-301', - 'zAddAssetAttr-Edited IPTC Attributes-302', - 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18-303', - 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18-304', - 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18-305', - 'zGenAsstDesc-zENT-iOS18-306', - 'zGenAsstDesc-zOPT-iOS18-307', - 'zGenAsstDesc-Analysis_Timestamp-iOS18-308', - 'zGenAsstDesc-Analysis_Source_Type-iOS18-309', - 'zGenAsstDesc-Analysis Version-iOS18-310', - 'zGenAsstDesc-Description_Text-iOS18-311', - 'zAssetDes-Long Description-312', - 'zAddAssetAttr-Asset Description-313', - 'zAddAssetAttr-Title-Comments via Cloud Website-314', - 'zAddAssetAttr-Accessibility Description-315', - 'zAddAssetAttr-Photo Stream Tag ID-316', - 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-317', - 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-318', - 'zPhotoAnalysisAssetAttr-Wallpaper Properties Data-319', - 'zCldFeedEnt-Entry Date-320', - 'zCldFeedEnt-Entry_Is_Mine-iOS18-321', - 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-322', - 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-323', - 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-324', - 'zCldFeedEnt-Entry Priority Number-325', - 'zCldFeedEnt-Entry Type Number-326', - 'zCldSharedComment-Cloud GUID-4TableStart-327', - 'zCldSharedComment-Date-328', - 'zCldSharedComment-Comment Client Date-329', - 'zAsset-Cloud Last Viewed Comment Date-330', - 'zCldSharedComment-Type-331', - 'zCldSharedComment-Comment Text-332', - 'zCldSharedComment-Commenter Hashed Person ID-333', - 'zCldSharedComment-Batch Comment-334', - 'zCldSharedComment-Is a Caption-335', - 'zAsset-Cloud Has Comments by Me-336', - 'zCldSharedComment-Is My Comment-337', - 'zCldSharedComment-Is Deletable-338', - 'zAsset-Cloud Has Comments Conversation-339', - 'zAsset-Cloud Has Unseen Comments-340', - 'zCldSharedComment-Liked-341', - 'zAddAssetAttr-Share Type-342', - 'zAsset-Library Scope Share State- StillTesting-343', - 'zAsset-Active Library Scope Participation State-344', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-345', - 'zShare-UUID-CMM-4TableStart-346', - 'SPLzShare-UUID-SPL-4TableStart-347', - 'zShare-zENT-CMM-348', - 'SPLzShare-zENT-SPL-349', - 'zSharePartic-z62SHARE-350', - 'SPLzSharePartic-z62SHARE-351', - 'zShare-Status-CMM-352', - 'zShare-Status-SPL-353', - 'zShare-Scope Type-CMM-354', - 'zShare-Scope Type-SPL-355', - 'zShare-Local Publish State-CMM-356', - 'SPLzShare-Local Publish State-SPL-357', - 'zShare-Public Permission-CMM-358', - 'SPLzShare-Public Permission-SPL-359', - 'zShare-Originating Scope ID-CMM-360', - 'SPLzShare-Originating Scope ID-SPL-361', - 'zShare-Scope ID-CMM-362', - 'SPLzShare-Scope ID-SPL-363', - 'zShare-Title-CMM-364', - 'SPLzShare-Title-SPL-365', - 'zShare-Share URL-CMM-366', - 'SPLzShare-Share URL-SPL-367', - 'zShare-Creation Date-CMM-368', - 'SPLzShare-Creation Date-SPL-369', - 'zShare-Start Date-CMM-370', - 'SPLzShare-Start Date-SPL-371', - 'zShare-End Date-CMM-372', - 'SPLzShare-End Date-SPL-373', - 'zShare-Expiry Date-CMM-374', - 'SPLzShare-Expiry Date-SPL-375', - 'zShare-Cloud Item Count-CMM-376', - 'SPLzShare-Cloud Item Count-SPL-377', - 'zShare-Asset Count-CMM-378', - 'SPLzShare-Asset Count-SPL-379', - 'zShare-Cloud Photo Count-CMM-380', - 'SPLzShare-Cloud Photo Count-SPL-381', - 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-382', - 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-383', - 'zShare-Photos Count-CMM-384', - 'SPLzShare-Photos Count-CMM-SPL-385', - 'zShare-Uploaded Photos Count-CMM-386', - 'SPLzShare-Uploaded Photos Count-SPL-387', - 'zShare-Cloud Video Count-CMM-388', - 'SPLzShare-Cloud Video Count-SPL-389', - 'zShare-Videos Count-CMM-390', - 'SPLzShare-Videos Count-SPL-391', - 'zShare-Uploaded Videos Count-CMM-392', - 'SPLzShare-Uploaded Videos Count-SPL-393', - 'zShare-Force Sync Attempted-CMM-394', - 'SPLzShare-Force Sync Attempted-SPL-395', - 'zShare-Cloud Local State-CMM-396', - 'SPLzShare-Cloud Local State-SPL-397', - 'zShare-Scope Syncing State-CMM-398', - 'SPLzShare-Scope Syncing State-SPL-399', - 'zShare-Auto Share Policy-CMM-400', - 'SPLzShare-Auto Share Policy-SPL-401', - 'zShare-Should Notify On Upload Completion-CMM-402', - 'SPLzShare-Should Notify On Upload Completion-SPL-403', - 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-404', - 'zShare-Trashed State-CMM-405', - 'SPLzShare-Trashed State-SPL-406', - 'zShare-Cloud Delete State-CMM-407', - 'SPLzShare-Cloud Delete State-SPL-408', - 'zShare-Trashed Date-CMM-409', - 'SPLzShare-Trashed Date-SPL-410', - 'zShare-LastParticipant Asset Trash Notification Date-CMM-411', - 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL-412', - 'zShare-Last Participant Asset Trash Notification View Date-CMM-413', - 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL-414', - 'zShare-Exit Source-CMM-415', - 'SPLzShare-Exit Source-SPL-416', - 'zShare-SPL_Exit State-CMM-417', - 'SPLzShare-SPL_Exit State-SPL-418', - 'zShare-Exit Type-CMM-419', - 'SPLzShare-Exit Type-SPL-420', - 'zShare-Should Ignor Budgets-CMM-421', - 'SPLzShare-Should Ignor Budgets-SPL-422', - 'zShare-Preview State-CMM-423', - 'SPLzShare-Preview State-SPL-424', - 'zShare-Preview Data-CMM-425', - 'SPLzShare-Preview Data-SPL-426', - 'zShare-Rules-CMM-427', - 'SPLzShare-Rules-SPL-428', - 'zShare-Thumbnail Image Data-CMM-429', - 'SPLzShare-Thumbnail Image Data-SPL-430', - 'zShare-Participant Cloud Update State-CMM-431', - 'SPLzShare-Participant Cloud Update State-SPL-432', - 'zSharePartic-UUID-4TableStart-433', - 'SPLzSharePartic-UUID-4TableStart-434', - 'zSharePartic-Acceptance Status-435', - 'SPLzSharePartic-Acceptance Status-436', - 'zSharePartic-Is Current User-437', - 'SPLzSharePartic-Is Current User-438', - 'zSharePartic-Role-439', - 'SPLzSharePartic-Role-440', - 'zSharePartic-Premission-441', - 'SPLzSharePartic-Premission-442', - 'zSharePartic-Participant ID-443', - 'SPLzSharePartic-Participant ID-444', - 'zSharePartic-User ID-445', - 'SPLzSharePartic-User ID-446', - 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-447', - 'SPLzSharePartic-zPK-4TableStart-448', - 'zSharePartic-zPK-4TableStart-449', - 'zSharePartic-Email Address-450', - 'SPLzSharePartic-Email Address-451', - 'zSharePartic-Phone Number-452', - 'SPLzSharePartic-Phone Number-453', - 'zSharePartic-Name Components-454', - 'SPLzSharePartic-Name Components-455', - 'zSharePartic-Exit State-456', - 'SPLzSharePartic-Exit State-457', - 'ParentzGenAlbum-UUID-4TableStart-458', - 'zGenAlbum-UUID-4TableStart-459', - 'SWYConverszGenAlbum-UUID-4TableStart-460', - 'ParentzGenAlbum-Cloud GUID-4TableStart-461', - 'zGenAlbum-Cloud GUID-4TableStart-462', - 'SWYConverszGenAlbum-Cloud GUID-4TableStart-463', - 'zCldShareAlbumInvRec-Album GUID-4TableStart-464', - 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-465', - 'zGenAlbum-Project Render UUID-4TableStart-466', - 'SWYConverszGenAlbum-Project Render UUID-4TableStart-467', - 'zAlbumList-Needs Reordering Number-468', - 'zGenAlbum-zENT- Entity-469', - 'ParentzGenAlbum-Kind-470', - 'zGenAlbum-Album Kind-471', - 'SWYConverszGenAlbum-Album Kind-472', - 'ParentzGenAlbum-Cloud-Local-State-473', - 'zGenAlbum-Cloud_Local_State-474', - 'SWYConverszGenAlbum-Cloud_Local_State-475', - 'ParentzGenAlbum- Title-476', - 'zGenAlbum- Title-User&System Applied-477', - 'SWYConverszGenAlbum- Title -User&System Applied-478', - 'zGenAlbum-Import Session ID-SWY-479', - 'zAsset- Conversation= zGenAlbum_zPK-480', - 'SWYConverszGenAlbum- Import Session ID-SWY-481', - 'zGenAlbum-Imported by Bundle Identifier-482', - 'SWYzGenAlbum-Imported by Bundle Identifier-483', - 'SWYConverszGenAlbum- Syndicate-484', - 'ParentzGenAlbum-Creation Date-485', - 'zGenAlbum-Creation Date-486', - 'SWYConverszGenAlbum-Creation Date-487', - 'zGenAlbum-Cloud Creation Date-488', - 'SWYConverszGenAlbum-Cloud Creation Date-489', - 'zGenAlbum-Start Date-490', - 'SWYConverszGenAlbum-Start Date-491', - 'zGenAlbum-End Date-492', - 'SWYConverszGenAlbum-End Date-493', - 'zGenAlbum-Cloud Subscription Date-494', - 'SWYConverszGenAlbum-Cloud Subscription Date-495', - 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-496', - 'SWYConverszGenAlbum-Cloud Metadata-HEX NSKeyed Plist-497', - 'ParentzGenAlbum-Pending Items Count-498', - 'zGenAlbum-Pending Items Count-499', - 'SWYConverszGenAlbum-Pending Items Count-500', - 'ParentzGenAlbum-Pending Items Type-501', - 'zGenAlbum-Pending Items Type-502', - 'SWYConverszGenAlbum-Pending Items Type-503', - 'zGenAlbum- Cached Photos Count-504', - 'SWYConverszGenAlbum- Cached Photos Count-505', - 'zGenAlbum- Cached Videos Count-506', - 'SWYConverszGenAlbum- Cached Videos Count-507', - 'zGenAlbum- Cached Count-508', - 'SWYConverszGenAlbum- Cached Count-509', - 'ParentzGenAlbum-Sync Event Order Key-510', - 'zGenAlbum-Sync Event Order Key-511', - 'SWYConverszGenAlbum-Sync Event Order Key-512', - 'zGenAlbum-Has Unseen Content-513', - 'SWYConverszGenAlbum-Has Unseen Content-514', - 'zGenAlbum-Unseen Asset Count-515', - 'SWYConverszGenAlbum-Unseen Asset Count-516', - 'zGenAlbum-is Owned-517', - 'SWYConverszGenAlbum-is Owned-518', - 'zGenAlbum-Cloud Relationship State-519', - 'SWYConverszGenAlbum-Cloud Relationship State-520', - 'zGenAlbum-Cloud Relationship State Local-521', - 'SWYConverszGenAlbum-Cloud Relationship State Local-522', - 'zGenAlbum-Cloud Owner Mail Key-523', - 'SWYConverszGenAlbum-Cloud Owner Mail Key-524', - 'zGenAlbum-Cloud Owner Frist Name-525', - 'SWYConverszGenAlbum-Cloud Owner Frist Name-526', - 'zGenAlbum-Cloud Owner Last Name-527', - 'SWYConverszGenAlbum-Cloud Owner Last Name-528', - 'zGenAlbum-Cloud Owner Full Name-529', - 'SWYConverszGenAlbum-Cloud Owner Full Name-530', - 'zGenAlbum-Cloud Person ID-531', - 'SWYConverszGenAlbum-Cloud Person ID-532', - 'zAsset-Cloud Owner Hashed Person ID-533', - 'zGenAlbum-Cloud Owner Hashed Person ID-534', - 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-535', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-536', - 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-537', - 'zGenAlbum-Cloud Multi-Contributors Enabled-538', - 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-539', - 'zGenAlbum-Cloud Album Sub Type-540', - 'SWYConverszGenAlbum-Cloud Album Sub Type-541', - 'zGenAlbum-Cloud Contribution Date-542', - 'SWYConverszGenAlbum-Cloud Contribution Date-543', - 'zGenAlbum-Cloud Last Interesting Change Date-544', - 'SWYConverszGenAlbum-Cloud Last Interesting Change Date-545', - 'zGenAlbum-Cloud Notification Enabled-546', - 'SWYConverszGenAlbum-Cloud Notification Enabled-547', - 'ParentzGenAlbum-Pinned-548', - 'zGenAlbum-Pinned-549', - 'SWYConverszGenAlbum-Pinned-550', - 'ParentzGenAlbum-Custom Sort Key-551', - 'zGenAlbum-Custom Sort Key-552', - 'SWYConverszGenAlbum-Custom Sort Key-553', - 'ParentzGenAlbum-Custom Sort Ascending-554', - 'zGenAlbum-Custom Sort Ascending-555', - 'SWYConverszGenAlbum-Custom Sort Ascending-556', - 'ParentzGenAlbum-Is Prototype-557', - 'zGenAlbum-Is Prototype-558', - 'SWYConverszGenAlbum-Is Prototype-559', - 'ParentzGenAlbum-Project Document Type-560', - 'zGenAlbum-Project Document Type-561', - 'SWYConverszGenAlbum-Project Document Type-562', - 'ParentzGenAlbum-Custom Query Type-563', - 'zGenAlbum-Custom Query Type-564', - 'SWYConverszGenAlbum-Custom Query Type-565', - 'ParentzGenAlbum-Trashed State-566', - 'ParentzGenAlbum-Trash Date-567', - 'zGenAlbum-Trashed State-568', - 'zGenAlbum-Trash Date-569', - 'SWYConverszGenAlbum-Trashed State-570', - 'SWYConverszGenAlbum-Trash Date-571', - 'ParentzGenAlbum-Cloud Delete State-572', - 'zGenAlbum-Cloud Delete State-573', - 'SWYConverszGenAlbum-Cloud Delete State-574', - 'zGenAlbum-Cloud Owner Whitelisted-575', - 'SWYConverszGenAlbum-Cloud Owner Whitelisted-576', - 'zGenAlbum-Cloud Local Public URL Enabled-577', - 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-578', - 'zGenAlbum-Cloud Public URL Enabled-579', - 'zGenAlbum-Public URL-580', - 'SWYConverszGenAlbum-Cloud Public URL Enabled-581', - 'SWYConverszGenAlbum-Public URL-582', - 'zGenAlbum-Key Asset Face Thumb Index-583', - 'SWYConverszGenAlbum-Key Asset Face Thumb Index-584', - 'zGenAlbum-Project Text Extension ID-585', - 'SWYConverszGenAlbum-Project Text Extension ID-586', - 'zGenAlbum-User Query Data-587', - 'SWYConverszGenAlbum-User Query Data-588', - 'zGenAlbum-Custom Query Parameters-589', - 'SWYConverszGenAlbum-Custom Query Parameters-590', - 'zGenAlbum-Project Data-591', - 'SWYConverszGenAlbum-Project Data-592', - 'zGenAlbum-Search Index Rebuild State-593', - 'SWYConverszGenAlbum-Search Index Rebuild State-594', - 'zGenAlbum-Duplicate Type-595', - 'SWYConverszGenAlbum-Duplicate Type-596', - 'zGenAlbum-Privacy State-597', - 'SWYConverszGenAlbum-Privacy State-598', - 'zCldShareAlbumInvRec-zUUID-4TableStart-599', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-600', - 'zCldShareAlbumInvRec-Invitation State Local-601', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-602', - 'zCldShareAlbumInvRec-Subscription Date-603', - 'zCldShareAlbumInvRec-Invitee First Name-604', - 'zCldShareAlbumInvRec-Invitee Last Name-605', - 'zCldShareAlbumInvRec-Invitee Full Name-606', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-607', - 'zCldShareAlbumInvRec-Invitee Email Key-608', - 'zGenAlbum-Key Asset Face ID-609', - 'zFaceCrop-Face Area Points-610', - 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence-iOS18-611', - 'zAsset-Face Adjustment Version-612', - 'zAddAssetAttr-Face Regions HEX-613', - 'zAddAssetAttr-Face Analysis Version-614', - 'zDetFace-Asset Visible-615', - 'zDetFacePrint-Data HEX-616', - 'zPerson-Contact Matching Dictionary HEX-617', - 'zPerson-Face Count-618', - 'zDetFace-Face Crop-619', - 'zDetFace-Face Algorithm Version-620', - 'zDetFace-Adjustment Version-621', - 'zDetFace-UUID-4TableStart-622', - 'zPerson-Person UUID-4TableStart-623', - 'zPerson-Is_Me_Confidence-iOS18-624', - 'zPerson - MD ID-625', - 'zPerson - Asset Sort Order-626', - 'zDetFace-Confirmed Face Crop Generation State-627', - 'zDetFace-Manual-628', - 'zDetFace-Detection Type-629', - 'zPerson-Detection Type-630', - 'zDetFace-VIP Model Type-631', - 'zDetFace-Name Source-632', - 'zDetFace-Cloud Name Source-633', - 'zPerson-Merge Candidate Confidence-634', - 'zPerson-Person URI-635', - 'zPerson-Display Name-636', - 'zPerson-Full Name-637', - 'zPerson-Cloud Verified Type-638', - 'zFaceCrop-State-639', - 'zFaceCrop-Type-640', - 'zFaceCrop-Resource Data-HEX-PHOTO used for FaceCrop-641', - 'zFaceCrop-UUID-4TableStart-642', - 'zPerson-Type-643', - 'zPerson-Verified Type-644', - 'zPerson-Gender Type-645', - 'zDetFace-Gender Type-646', - 'zDetFace-Center X-647', - 'zDetFace-Center Y-648', - 'zPerson-Age Type Estimate-649', - 'zDetFace-Age Type Estimate-650', - 'zDetFace-Ethnicity Type-651', - 'zDetFace-Skin Tone Type-652', - 'zDetFace-Hair Type-653', - 'zDetFace-Hair Color Type-654', - 'zDetFace-Head Gear Type-655', - 'zDetFace-Facial Hair Type-656', - 'zDetFace-Has Face Mask-657', - 'zDetFace-Pose Type-658', - 'zDetFace-Face Expression Type-659', - 'zDetFace-Has Smile-660', - 'zDetFace-Smile Type-661', - 'zDetFace-Lip Makeup Type-662', - 'zDetFace-Eyes State-663', - 'zDetFace-Is Left Eye Closed-664', - 'zDetFace-Is Right Eye Closed-665', - 'zDetFace-Gaze Center X-666', - 'zDetFace-Gaze Center Y-667', - 'zDetFace-Face Gaze Type-668', - 'zDetFace-Eye Glasses Type-669', - 'zDetFace-Eye Makeup Type-670', - 'zDetFace-Cluster Squence Number Key-671', - 'zDetFace-Grouping ID-672', - 'zDetFace-Master ID-673', - 'zDetFace-Quality-674', - 'zDetFace-Quality Measure-675', - 'zDetFace-Source Height-676', - 'zDetFace-Source Width-677', - 'zDetFace-Hidden-Asset Hidden-678', - 'zDetFace-In Trash-Recently Deleted-679', - 'zDetFace-Cloud Local State-680', - 'zDetFace-Training Type-681', - 'zDetFace.Pose Yaw-682', - 'zDetFace-Body Center X-683', - 'zDetFace-Body Center Y-684', - 'zDetFace-Body Height-685', - 'zDetFace-Body Width-686', - 'zDetFace-Roll-687', - 'zDetFace-Size-688', - 'zDetFace-Cluster Squence Number-689', - 'zDetFace-Blur Score-690', - 'zDetFacePrint-Face Print Version-691', - 'zMedAnlyAstAttr-Face Count-692', - 'zDetFaceGroup-UUID-4TableStart-693', - 'zDetFaceGroup-Person Builder State-694', - 'zDetFaceGroup-UnNamed Face Count-695', - 'zPerson-In Person Naming Model-696', - 'zPerson-Key Face Pick Source Key-697', - 'zPerson-Manual Order Key-698', - 'zPerson-Question Type-699', - 'zPerson-Suggested For Client Type-700', - 'zPerson-Merge Target Person-701', - 'zPerson-Cloud Local State-702', - 'zFaceCrop-Cloud Local State-703', - 'zFaceCrop-Cloud Type-704', - 'zPerson-Cloud Delete State-705', - 'zFaceCrop-Cloud Delete State-706', - 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-707', - 'zAsset-Highlight Visibility Score-708', - 'zMemory-UUID-4TableStart-709', - 'zMemory-AssetListPredicte-710', - 'zMemory-Score-711', - 'zMemory-SubTitle-712', - 'zMemory-Title-713', - 'zMemory-Category-714', - 'zMemory-SubCategory-715', - 'zMemory-Creation Date-716', - 'zMemory-Last Enrichment Date-717', - 'zMemory-User Action Options-718', - 'zMemory-Favorite Memory-719', - 'zMemory-View Count-720', - 'zMemory-Play Count-721', - 'zMemory-Rejected-722', - 'zMemory-Share Count-723', - 'zMemory-Sharing Composition-724', - 'zMemory-PhotosGraphData-HEX NSKeyed Plist-725', - 'zMemory-MovieAssetState-HEX NSKeyed Plist-726', - 'zMemory-MovieData-HEX NSKeyed Plist-727', - 'zMemory-Last Movie Play Date-728', - 'zMemory-Last Viewed Date-729', - 'zMemory-Pending Play Count Memory-730', - 'zMemory-Pending Share Count Memory-731', - 'zMemory-Pending View Count Memory-732', - 'zMemory-Pending State-733', - 'zMemory-Featured State-734', - 'zMemory-Photos Graph Version-735', - 'zMemory-Graph Memory Identifier-736', - 'zMemory-Notification State-737', - 'zMemory-Cloud Local State-738', - 'zMemory-Cloud Delete State-739', - 'zMemory-Story Color Grade Kind-740', - 'zMemory-Story Serialized Title Category-741', - 'zMemory-Syndicated Content State-742', - 'zMemory-Search Index Rebuild State-743', - 'zMemory-Black Listed Feature-744', - 'zMoment-UUID-4TableStart-745', - 'zMoment-Aggregation Score-746', - 'zMoment-Start Date-747', - 'zMoment-Representative Date-748', - 'zMoment-Timezone Offset-749', - 'zMoment-Modification Date-750', - 'zMoment-End Date-751', - 'zMoment-SubTitle-752', - 'zMoment-Localized Location Names-753', - 'zMoment-Title-754', - 'zMoment-Originator State-755', - 'zMoment-Sharing Composition-756', - 'zMoment-Cached Count Shared-757', - 'zMoment-Processed Location-758', - 'zMoment-Approx Latitude-759', - 'zMoment-Approx Longitude-760', - 'zMoment-GPS Horizontal Accuracy-761', - 'zMoment-Cache Count-762', - 'zMoment-Cached Photos Count-763', - 'zMoment-Cached Videos Count-764', - 'zMoment-Trashed State-765', - 'SBKAzSugg-UUID-4TableStart-766', - 'SBKAzSugg-Suggestion Context-767', - 'SBKAzSugg-Sharing Composition-768', - 'SBKAzSugg-Start Date-769', - 'SBKAzSugg-State-770', - 'SBKAzSugg-Featured State-771', - 'SBKAzSugg- Available Features-772', - 'SBKAzSugg-Notification State-773', - 'SBKAzSugg-Creation Date-774', - 'SBKAzSugg-End Date-775', - 'SBKAzSugg-Activation Date-776', - 'SBKAzSugg-Expunge Date-777', - 'SBKAzSugg-Relevant Until Date-778', - 'SBKAzSugg-Title-779', - 'SBKAzSugg-Sub Title-780', - 'SBKAzSugg-Cached Count-781', - 'SBKAzSugg-Cahed Photos Count-782', - 'SBKAzSugg-Cached Videos Count-783', - 'SBKAzSugg-Type-784', - 'SBKAzSugg-Sub Type-785', - 'SBKAzSugg-Action Data-786', - 'SBKAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-787', - 'SBKAzSugg-Version-788', - 'SBKAzSugg-Cloud Local State-789', - 'SBKAzSugg-Cloud Delete State-790', - 'SBRAzSugg-UUID-4TableStart-791', - 'SBRAzSugg-Suggestion Context-792', - 'SBRAzSugg-Sharing Composition-793', - 'SBRAzSugg-Start Date-794', - 'SBRAzSugg-State-795', - 'SBRAzSugg-Featured State-796', - 'SBRAzSugg- Available Features-797', - 'SBRAzSugg-Notification State-798', - 'SBRAzSugg-Creation Date-799', - 'SBRAzSugg-End Date-800', - 'SBRAzSugg-Activation Date-801', - 'SBRAzSugg-Expunge Date-802', - 'SBRAzSugg-Relevant Until Date-803', - 'SBRAzSugg-Title-804', - 'SBRAzSugg-Sub Title-805', - 'SBRAzSugg-Cached Count-806', - 'SBRAzSugg-Cahed Photos Count-807', - 'SBRAzSugg-Cached Videos Count-808', - 'SBRAzSugg-Type-809', - 'SBRAzSugg-Sub Type-810', - 'SBRAzSugg-Action Data-811', - 'SBRAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-812', - 'SBRAzSugg-Version-813', - 'SBRAzSugg-Cloud Local State-814', - 'SBRAzSugg-Cloud Delete State-815', - 'zMedAnlyAstAttr-Media Analysis Version-816', - 'zMedAnlyAstAttr-Audio Classification-817', - 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-818', - 'zMedAnlyAstAttr-Best Video Range Start Time Scale-819', - 'zMedAnlyAstAttr-Best Video Range Duration Value-820', - 'zMedAnlyAstAttr-Best Video Range Start Value-821', - 'zMedAnlyAstAttr-Packed Best Playback Rect-822', - 'zMedAnlyAstAttr-Activity Score-823', - 'zMedAnlyAstAttr-Video Score-824', - 'zMedAnlyAstAttr-Audio Score-825', - 'zMedAnlyAstAttr-Wallpaper Score-826', - 'zMedAnlyAstAttr-AutoPlay Suggestion Score-827', - 'zMedAnlyAstAttr-Blurriness Score-828', - 'zMedAnlyAstAttr-Exposure Score-829', - 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-830', - 'zMedAnlyAstAttr-Probable Rotation Direction-831', - 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-832', - 'zMedAnlyAstAttr-Color Normalization Data-833', - 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18-834', - 'zMedAnlyAstAttr-Image_Caption_Version-iOS18-835', - 'zMedAnlyAstAttr-Video_Caption_Version-iOS18-836', - 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18-837', - 'zAssetAnalyState-Asset UUID-4TableStart-838', - 'zAssetAnalyState-Analyisis State-839', - 'zAssetAnalyState-Worker Flags-840', - 'zAssetAnalyState-Worker Type-841', - 'zAssetAnalyState-Ignore Until Date-842', - 'zAssetAnalyState-Last Ignored Date-843', - 'zAssetAnalyState-Sort Token-844', - 'zMedAnlyAstAttr-Character Recognition Attr-845', - 'zCharRecogAttr-Algorithm Version-846', - 'zCharRecogAttr-Adjustment Version-847', - 'zCharRecogAttr-Character Recogition Data-HEX-848', - 'zCharRecogAttr-Machine Readable Code Data-HEX-849', - 'zMedAnlyAstAttr-Visual Search Attributes-850', - 'zVisualSearchAttr-Algorithm Version-851', - 'zVisualSearchAttr-Adjustment Version-852', - 'zVisualSearchAttr-Visual Search Data-HEX-853', - 'zVisualSearchAttr - Sticker Confidence Algorithm Version-854', - 'zVisualSearchAttr - Sticker Confidence Score-855', - 'zAsset-Sticker Confidence Score-856', - 'zAsset-Overall Aesthetic Score-857', - 'zCompAssetAttr-Behavioral Score-858', - 'zCompAssetAttr-Failure Score zCompAssetAttr-859', - 'zCompAssetAttr-Harmonious Color Score-860', - 'zCompAssetAttr-Immersiveness Score-861', - 'zCompAssetAttr-Interaction Score-862', - 'zCompAssetAttr-Intersting Subject Score-863', - 'zCompAssetAttr-Intrusive Object Presence Score-864', - 'zCompAssetAttr-Lively Color Score-865', - 'zCompAssetAttr-Low Light-866', - 'zCompAssetAttr-Noise Score-867', - 'zCompAssetAttr-Pleasant Camera Tilt Score-868', - 'zCompAssetAttr-Pleasant Composition Score-869', - 'zCompAssetAttr-Pleasant Lighting Score-870', - 'zCompAssetAttr-Pleasant Pattern Score-871', - 'zCompAssetAttr-Pleasant Perspective Score-872', - 'zCompAssetAttr-Pleasant Post Processing Score-873', - 'zCompAssetAttr-Pleasant Reflection Score-874', - 'zCompAssetAttrPleasant Symmetry Score-875', - 'zCompAssetAttr-Sharply Focused Subject Score-876', - 'zCompAssetAttr-Tastfully Blurred Score-877', - 'zCompAssetAttr-Well Chosen Subject Score-878', - 'zCompAssetAttr-Well Framed Subject Score-879', - 'zCompAssetAttr-Well Timeed Shot Score-880', - 'zCldRes-Asset UUID-4TableStart-881', - 'zCldRes-Cloud Local State-882', - 'zCldRes-File Size-883', - 'zCldRes-Height-884', - 'zCldRes-Is Available-885', - 'zCldRes-Is Locally Available-886', - 'zCldRes-Prefetch Count-887', - 'zCldRes-Source Type-888', - 'zCldRes-Type-889', - 'zCldRes-Width-890', - 'zCldRes-Date Created-891', - 'zCldRes-Last OnDemand Download Date-892', - 'zCldRes-Last Prefetch Date-893', - 'zCldRes-Prunedat-894', - 'zCldRes-File Path-895', - 'zCldRes-Fingerprint-896', - 'zCldRes-Item ID-897', - 'zCldRes-UniID-898', - 'zUserFeedback-UUID-4TableStart-899', - 'zUserFeedback-Feature-900', - 'zUserFeedback-Type-901', - 'zUserFeedback-Last Modified Date-902', - 'zUserFeedback-Context-903', - 'zUserFeedback-Cloud Local State-904', - 'zUserFeedback-Cloud Delete State-905', - 'zUserFeedback - Creation Type-906', - 'zAddAssetAttr-zPK-907', - 'zAddAssetAttr-zENT-908', - 'ZAddAssetAttr-zOPT-909', - 'zAddAssetAttr-zAsset= zAsset_zPK-910', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-911', - 'zAddAssetAttr-Original Stable Hash-iOS18-4Queryend-912', - 'zAddAssetAttr-Public Global UUID-913', - 'zAddAssetAttr-Deferred Photo Identifier-914', - 'zAddAssetAttr-Original Assets UUID-915', - 'zAddAssetAttr-Import Session ID-916', - 'zAddAssetAttr-Originating Asset Identifier-4endquery-917', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4endquery-918', - 'zAlbumList-zPK= Album List Key-919', - 'zAlbumList-zENT-920', - 'zAlbumList-zOPT-921', - 'zAlbumList-ID Key-922', - 'zAlbumList-UUID-923', - 'zAsset-zPK-924', - 'zAsset-zENT-925', - 'zAsset-zOPT-926', - 'zAsset-Master= zCldMast-zPK-927', - 'zAsset-Extended Attributes= zExtAttr-zPK-928', - 'zAsset-Import Session Key-929', - 'zAsset-Trashed by Participant= zSharePartic_zPK-930', - 'zAsset-Photo Analysis Attributes Key-931', - 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-932', - 'zAsset-FOK-Cloud Feed Asset Entry Key-933', - 'zAsset-Moment Share Key= zShare-zPK-934', - 'zAsset-zMoment Key= zMoment-zPK-935', - 'zAsset-Computed Attributes Asset Key-936', - 'zAsset-Highlight Being Assets-HBA Key-937', - 'zAsset-Highlight Being Extended Assets-HBEA Key-938', - 'zAsset-Highlight Being Key Asset Private-HBKAP Key-939', - 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-940', - 'zAsset-Highligh Being Summary Assets-HBSA Key-941', - 'zAsset-Day Group Highlight Being Assets-DGHBA Key-942', - 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-943', - 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-944', - 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-945', - 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-946', - 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-947', - 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-948', - 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-949', - 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-950', - 'zAsset-Promotion Score-951', - 'zAsset-Iconic Score-952', - 'zAsset-Media Analysis Attributes Key-953', - 'zAsset-Media Group UUID-954', - 'zAsset-UUID = store.cloudphotodb-955', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-956', - 'zAsset.Cloud Collection GUID-957', - 'zAsset-Avalanche UUID-958', - 'zAssetAnalyState-zPK-959', - 'zAssetAnalyState-zEnt-960', - 'zAssetAnalyState-zOpt-961', - 'zAssetAnalyState-Asset= zAsset-zPK-962', - 'zAssetAnalyState-Asset UUID-963', - 'zAsstContrib-zPK-964', - 'zAsstContrib-zEnt-965', - 'zAsstContrib-zOpt-966', - 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-967', - 'zAsstContrib-Participant= zSharePartic-zPK-968', - 'zAssetDes-zPK-969', - 'zAssetDes-zENT-970', - 'zAssetDes-zOPT-971', - 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-972', - 'zCharRecogAttr-zPK-973', - 'zCharRecogAttr-zENT-974', - 'zCharRecogAttr-zOPT-975', - 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-976', - 'zCldFeedEnt-zPK= zCldShared keys-977', - 'zCldFeedEnt-zENT-978', - 'zCldFeedEnt-zOPT-979', - 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-980', - 'zCldFeedEnt-Entry Invitation Record GUID-981', - 'zCldFeedEnt-Entry Cloud Asset GUID-982', - 'zCldMast-zPK= zAsset-Master-983', - 'zCldMast-zENT-984', - 'zCldMast-zOPT-985', - 'zCldMast-Moment Share Key= zShare-zPK-986', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-987', - 'zCldMast-Originating Asset ID-988', - 'zCldMast-Import Session ID- AirDrop-StillTesting-989', - 'CMzCldMastMedData-zENT-990', - 'CMzCldMastMedData-zOPT-991', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-992', - 'AAAzCldMastMedData-zENT-993', - 'AAAzCldMastMedData-zOPT-994', - 'AAAzCldMastMedData-CldMast key-995', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-996', - 'zCldRes-zPK-997', - 'zCldRes-zENT-998', - 'zCldRes-zOPT-999', - 'zCldRes-Asset= zAsset-zPK-1000', - 'zCldRes-Cloud Master= zCldMast-zPK-1001', - 'zCldRes-Asset UUID-1002', - 'zCldShareAlbumInvRec-zPK-1003', - 'zCldShareAlbumInvRec-zEnt-1004', - 'zCldShareAlbumInvRec-zOpt-1005', - 'zCldShareAlbumInvRec-Album Key-1006', - 'zCldShareAlbumInvRec-FOK Album Key-1007', - 'zCldShareAlbumInvRec-Album GUID-1008', - 'zCldShareAlbumInvRec-zUUID-1009', - 'zCldShareAlbumInvRec-Cloud GUID-1010', - 'zCldSharedComment-zPK-1011', - 'zCldSharedComment-zENT-1012', - 'zCldSharedComment-zOPT-1013', - 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1014', - 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1015', - 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1016', - 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1017', - 'zCldSharedComment-CldFeedLikeCommentEntry Key-1018', - 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1019', - 'zCldSharedComment-Cloud GUID-1020', - 'zCompAssetAttr-zPK-1021', - 'zCompAssetAttr-zEnt-1022', - 'zCompAssetAttr-zOpt-1023', - 'zCompAssetAttr-Asset Key-1024', - 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18-1025', - 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-1026', - 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-1027', - 'zCompSyncAttr-zENT-iOS18-1028', - 'zCompSyncAttr-zOPT-iOS18-1029', - 'zDetFace-zPK-1030', - 'zDetFace-zEnt-1031', - 'zDetFace.zOpt-1032', - 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-1033', - 'zDetFace-PersonForFace= zPerson-zPK-1034', - 'zDetFace-Person Being Key Face-1035', - 'zDetFace-Face Print-1036', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1037', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1038', - 'zDetFace-UUID-1039', - 'zDetFaceGroup-zPK-1040', - 'zDetFaceGroup-zENT-1041', - 'zDetFaceGroup-zOPT-1042', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-1043', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-1044', - 'zDetFaceGroup-UUID-1045', - 'zDetFacePrint-zPK-1046', - 'zDetFacePrint-zEnt-1047', - 'zDetFacePrint-zOpt-1048', - 'zDetFacePrint-Face Key-1049', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-1050', - 'zExtAttr-zENT-1051', - 'zExtAttr-zOPT-1052', - 'zExtAttr-Asset Key-1053', - 'zFaceCrop-zPK-1054', - 'zFaceCrop-zEnt-1055', - 'zFaceCrop-zOpt-1056', - 'zFaceCrop-Asset Key-1057', - 'zFaceCrop-Invalid Merge Canidate Person UUID-1058', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1059', - 'zFaceCrop-Face Key-1060', - 'zFaceCrop-UUID-1061', - 'zGenAlbum-zPK=26AlbumLists= 26Albums-1062', - 'zGenAlbum-zENT-1063', - 'zGenAlbum-zOpt-1064', - 'zGenAlbum-Custom Key Asset-1065', - 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1066', - 'zGenAlbum-FOK Parent Folder-1067', - 'zGenAlbum-zSyndicate-1068', - 'zGenAlbum-UUID-1069', - 'SWYConverszGenAlbum-UUID-1070', - 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1071', - 'SWYConverszGenAlbum-Cloud GUID-1072', - 'zGenAlbum-Project Render UUID-1073', - 'SWYConverszGenAlbum-Project Render UUID-1074', - 'zIntResou-zPK-1075', - 'zIntResou-zENT-1076', - 'zIntResou-zOPT-1077', - 'zIntResou-Asset= zAsset_zPK-1078', - 'zIntResou-Fingerprint-iOS18-4Queryend-1079', - 'zIntResou-Stable Hash-iOS18-4Queryend-1080', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-1081', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1082', - 'zMedAnlyAstAttr-zEnt-1083', - 'zMedAnlyAstAttr-zOpt-1084', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-1085', - 'zMemory-zPK-1086', - 'zMemory-zENT-1087', - 'zMemory-zOPT-1088', - 'zMemory-Key Asset= zAsset-zPK-1089', - 'zMemory-UUID-1090', - 'zMoment-zPK-1091', - 'zMoment-zENT-1092', - 'zMoment-zOPT-1093', - 'zMoment-Highlight Key-1094', - 'zMoment-UUID-1095', - 'zPerson-zPK=zDetFace-Person-1096', - 'zPerson-zEnt-1097', - 'zPerson-zOpt-1098', - 'zPerson-Share Participant= zSharePartic-zPK-1099', - 'zPerson-KeyFace=zDetFace-zPK-1100', - 'zPerson-Assoc Face Group Key-1101', - 'zPerson-Person UUID-1102', - 'zPerson-Is_Me_Confidence-iOS18-1103', - 'zPhotoAnalysisAssetAttr-zPK-1104', - 'zPhotoAnalysisAssetAttr-zEnt-1105', - 'zPhotoAnalysisAssetAttr-zOpt-1106', - 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1107', - 'zSceneP-zPK-1108', - 'zSceneP-zENT-1109', - 'zSceneP-zOPT-1110', - 'zShare-zPK-1111', - 'zShare-zENT-1112', - 'zShare-zOPT-1113', - 'zShare-UUID-1114', - 'SPLzShare-UUID-1115', - 'zShare-Scope ID = store.cloudphotodb-1116', - 'zSharePartic-zPK-1117', - 'zSharePartic-zENT-1118', - 'zSharePartic-zOPT-1119', - 'zSharePartic-Share Key= zShare-zPK-1120', - 'zSharePartic-Person= zPerson-zPK-1121', - 'zSharePartic-UUID-1122', - 'SBKAzSugg-zPK-1123', - 'SBKAzSugg-zENT-1124', - 'SBKAzSugg-zOPT-1125', - 'SBKAzSugg-UUID-1126', - 'SBRAzSugg-zPK-1127', - 'SBRAzSugg-zENT-1128', - 'SBRAzSugg-zOPT-1129', - 'SBRAzSugg-UUID-1130', - 'z3SuggBRA-3RepAssets-1131', - 'z3SuggBRA-66SuggBeingRepAssets-1132', - 'z3SuggBKA-66SuggBeingKeyAssets= zSugg-zPK-1133', - 'z3SuggBKA-3KeyAssets1= zAsset-zPK-1134', - 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1135', - 'zUnmAdj-zOPT-1136', - 'zUnmAdj-zENT-1137', - 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1138', - 'zUnmAdj-UUID-1139', - 'zUnmAdj-Other Adjustments Fingerprint-1140', - 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1141', - 'zUserFeedback-zPK-1142', - 'zUserFeedback-zENT-1143', - 'zUserFeedback-zOPT-1144', - 'zUserFeedback-Person= zPerson-zPK-1145', - 'zUserFeedback-Memory= zMemory-zPK-1146', - 'zUserFeedback-UUID-1147', - 'zVisualSearchAttr-zPK-1148', - 'zVisualSearchAttr-zENT-1149', - 'zVisualSearchAttr-zOPT-1150', - 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1151', - 'z30AlbumList-30Albums= zGenAlbum-zPK-1152', - 'z30AlbumList-Album List Key-1153', - 'z30AlbumList-FOK30Albums Key-1154', - 'z31Assets-31Albums= zGenAlbum-zPK-1155', - 'z31Assets-3Asset Key= zAsset-zPK in the Album-1156', - 'z31Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1157', - 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1158', - 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1159', - 'z3MemoryBCAs-52MemoriesBeingCuratedAssets= zMemory-zPK-1160', - 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1161', - 'z3MemoryBECAs-52MemoriesBeingExtCuratedAssets= zMemory-zPK-1162', - 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1163', - 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1164', - 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1165', - 'z3MemoryBUCAs-52MemoriesBeingUserCuratedAssets= zMemory-zPK-1166', - 'z3MemoryBCAs-52Memories Being Custom User Assets-1167', - 'z3MemoryBCAs-3Custom User Assets-1168', - 'z3MemoryBCAs-FOK-3Custom User Assets-1169') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph98.1-iOS18_Ref_for_Asset_Analysis-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], + row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], + row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], + row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], + row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], + row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], + row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], + row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], + row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], + row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], + row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], + row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], + row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], + row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], + row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], + row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], + row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], + row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], + row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], + row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], + row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], + row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], + row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], + row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], + row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], + row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], + row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], + row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], + row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], + row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], + row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], + row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], + row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], + row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], + row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], + row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], + row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], + row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], + row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], + row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], + row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], + row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], + row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], + row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], + row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], + row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], + row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], + row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], + row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], + row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], + row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], + row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], + row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], + row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], + row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], + row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], + row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], + row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], + row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], + row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], + row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], + row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], + row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], + row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], + row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], + row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], + row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], + row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], + row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], + row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], + row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], + row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], + row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], + row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], + row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], + row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], + row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], + row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], + row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], + row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], + row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], + row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], + row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], + row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], + row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], + row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], + row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], + row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], + row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], + row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], + row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], + row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], + row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], + row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], + row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], + row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], + row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], + row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], + row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], + row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], + row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093], + row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100], + row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107], + row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114], + row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121], + row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128], + row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135], + row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142], + row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149], + row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156], + row[1157], row[1158], row[1159])) - tlactivity = 'Ph98.1-iOS18_Ref_for_Asset_Analysis-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) + data_headers = ('zAsset Complete-0', + 'zAsset-zPK-4QueryStart-1', + 'zAddAssetAttr-zPK-4QueryStart-2', + 'zAsset-UUID = store.cloudphotodb-4QueryStart-3', + 'zAddAssetAttr-Original Stable Hash-4QueryStart-4', + 'zIntResou-Fingerprint-4QueryStart-5', + 'zAddAssetAttr.Adjusted Stable Hash-4QueryStart-6', + 'zIntResou-Stable Hash-4QueryStart-7', + 'zAsset-Bundle Scope-8', + 'zAsset-Syndication State-9', + 'zAsset-Cloud is My Asset-10', + 'zAsset-Cloud is deletable-Asset-11', + 'zAsset-Cloud_Local_State-12', + 'zAsset-Visibility State-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zExtAttr-Lens Model-16', + 'zExtAttr-Flash Fired-17', + 'zExtAttr-Focal Lenght-18', + 'zExtAttr-Focal Lenth in 35MM-19', + 'zExtAttr-Digital Zoom Ratio-20', + 'zExtAttr-Generative_AI_Type-21', + 'zExtAttr-Credit-22', + 'zAsset-Derived Camera Capture Device-23', + 'zAsset-Capture_Session_Identifier-iOS18-24', + 'zAddAssetAttr-Camera Captured Device-25', + 'zAddAssetAttr-Imported by-26', + 'zCldMast-Imported By-27', + 'zAddAssetAttr.Imported by Bundle Identifier-28', + 'zAddAssetAttr-Imported By Display Name-29', + 'zCldMast-Imported by Bundle ID-30', + 'zCldMast-Imported by Display Name-31', + 'zAsset-ImageRequestHints-HEX-Path-32', + 'zAsset-Saved Asset Type-33', + 'zAsset-Is_Recently_Saved-34', + 'zAsset-Directory-Path-35', + 'zAsset-Filename-36', + 'zAddAssetAttr- Original Filename-37', + 'zCldMast- Original Filename-38', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-39', + 'zAsset-Active Library Scope Participation State -4QueryStart-40', + 'zAsset-Library Scope Share State- StillTesting -4QueryStart-41', + 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-42', + 'SPLzShare-Cloud Video Count-SPL -4QueryStart-43', + ('zAsset-Added Date-44', 'datetime'), + ('zAsset- SortToken -CameraRoll-45', 'datetime'), + ('zAddAssetAttr-Date Created Source-46', 'datetime'), + ('zAsset-Date Created-47', 'datetime'), + ('zCldMast-Creation Date-48', 'datetime'), + ('zIntResou-CldMst Date Created-49', 'datetime'), + 'zAddAssetAttr-Time Zone Name-50', + 'zAddAssetAttr-Time Zone Offset-51', + 'zAddAssetAttr-Inferred Time Zone Offset-52', + 'zAddAssetAttr-EXIF-String-53', + ('zAsset-Modification Date-54', 'datetime'), + ('zAddAssetAttr-Last Viewed Date-55', 'datetime'), + ('zAsset-Last Shared Date-56', 'datetime'), + 'zCldMast-Cloud Local State-57', + ('zCldMast-Import Date-58', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-59', 'datetime'), + 'zAddAssetAttr-Import Session ID-4QueryStart-60', + ('zAddAssetAttr-Alt Import Image Date-61', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-62', + ('zAsset-Cloud Batch Publish Date-63', 'datetime'), + ('zAsset-Cloud Server Publish Date-64', 'datetime'), + 'zAsset-Cloud Download Requests-65', + 'zAsset-Cloud Batch ID-66', + 'zAddAssetAttr-Upload Attempts-67', + 'zAsset-Latitude-68', + 'zExtAttr-Latitude-69', + 'zAsset-Longitude-70', + 'zExtAttr-Longitude-71', + 'zAddAssetAttr-GPS Horizontal Accuracy-72', + 'zAddAssetAttr-Location Hash-73', + 'zAsset-Location Data-HEX-74', + 'zAddAssetAttr-Reverse Location Is Valid-75', + 'zAddAssetAttr-Reverse Location Data-76', + 'zAddAssetAttr-Shifted Location Valid-77', + 'zAddAssetAttr-Shifted Location Data-78', + 'ParentzGenAlbum-UUID-4QueryStart-79', + 'zGenAlbum-UUID-4QueryStart-80', + 'SWYConverszGenAlbum-UUID-4QueryStart-81', + 'ParentzGenAlbum-Cloud GUID-4QueryStart-82', + 'zGenAlbum-Cloud GUID-4QueryStart-83', + 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-84', + 'zCldShareAlbumInvRec-Album GUID-4QueryStart-85', + 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-86', + 'zGenAlbum-Project Render UUID-4QueryStart-87', + 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-88', + 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-89', + 'zGenAlbum-Cloud_Local_State-4QueryStart-90', + 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-91', + ('ParentzGenAlbum- Creation Date- 4QueryStart-92', 'datetime'), + ('zGenAlbum- Creation Date- 4QueryStart-93', 'datetime'), + ('SWYConverszGenAlbum- Creation Date- 4QueryStart-94', 'datetime'), + ('zGenAlbum- Cloud Creation Date- 4QueryStart-95', 'datetime'), + ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-96', 'datetime'), + ('zGenAlbum- Start Date- 4QueryStart-97', 'datetime'), + ('SWYConverszGenAlbum- Start Date- 4QueryStart-98', 'datetime'), + ('zGenAlbum- End Date- 4QueryStart-99', 'datetime'), + ('SWYConverszGenAlbum- End Date- 4QueryStart-100', 'datetime'), + ('zGenAlbum-Cloud Subscription Date- 4QueryStart-101', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-102', 'datetime'), + 'ParentzGenAlbum- Title- 4QueryStart-103', + 'zGenAlbum- Title-User&System Applied- 4QueryStart-104', + 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-105', + 'zGenAlbum-Import Session ID-SWY- 4QueryStart-106', + 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-107', + 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-108', + 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-109', + 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-110', + 'SWYConverszGenAlbum- Syndicate-4QueryStart-111', + 'zGenAlbum-zENT- Entity- 4QueryStart-112', + 'ParentzGenAlbum- Kind- 4QueryStart-113', + 'zGenAlbum-Album Kind- 4QueryStart-114', + 'SWYConverszGenAlbum-Album Kind- 4QueryStart-115', + 'AAAzCldMastMedData-zOPT-4TableStart-116', + 'zAddAssetAttr-Media Metadata Type-117', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-118', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-119', + 'AAAzCldMastMedData-Data-HEX-120', + 'CldMasterzCldMastMedData-zOPT-4TableStart-121', + 'zCldMast-Media Metadata Type-122', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-123', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-124', + 'CMzCldMastMedData-Data-HEX-125', + 'zAsset-Search Index Rebuild State-126', + 'zAddAssetAttr-Syndication History-127', + 'zMedAnlyAstAttr-Syndication Processing Version-128', + 'zMedAnlyAstAttr-Syndication Processing Value-129', + 'zAsset-Orientation-130', + 'zAddAssetAttr-Original Orientation-131', + 'zAsset-Kind-132', + 'zAsset-Is_Detected_Screenshot-133', + 'zAsset-Kind-Sub-Type-134', + 'zAddAssetAttr-Cloud Kind Sub Type-135', + 'zAsset-Playback Style-136', + 'zAsset-Playback Variation-137', + 'zAddAssetAttr.View_Presentation-iOS18-138', + 'zAsset-Video Duration-139', + 'zExtAttr-Duration-140', + 'zAsset-Video CP Duration-141', + 'zAddAssetAttr-Video CP Duration Time Scale-142', + 'zAsset-Video CP Visibility State-143', + 'zAddAssetAttr-Video CP Display Value-144', + 'zAddAssetAttr-Video CP Display Time Scale-145', + 'zIntResou-Datastore Class ID-146', + 'zAsset-Cloud Placeholder Kind-147', + 'zIntResou-Local Availability-148', + 'zIntResou-Local Availability Target-149', + 'zIntResou-Cloud Local State-150', + 'zIntResou-Remote Availability-151', + 'zIntResou-Remote Availability Target-152', + 'zIntResou-Transient Cloud Master-153', + 'zIntResou-Side Car Index-154', + 'zAsset-UUID = store.cloudphotodb-4TableStart-155', + 'zAddAssetAttr-Orignial Stable Hash-4TableStart-156', + 'zIntResou-Fingerprint-4TableStart-157', + 'zIntResou-Stable Hash-4TableStart-158', + 'zIntResou- File ID-159', + 'zIntResou-Version-160', + 'zAddAssetAttr- Original-File-Size-161', + 'zIntResou-Resource Type-162', + 'zIntResou-DataStoreKeyData-HEX-163', + 'zIntResou-Datastore Sub-Type-164', + 'zIntResou-Cloud Source Type-165', + 'zIntResou-Data Length-166', + 'zIntResou-Recipe ID-167', + ('zIntResou-Cloud Last Prefetch Date-168', 'datetime'), + 'zIntResou-Cloud Prefetch Count-169', + ('zIntResou- Cloud-Last-OnDemand Download-Date-170', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-171', + 'zIntResou-Compact-UTI-172', + 'zAsset-Uniform Type ID-173', + 'zAsset-Original Color Space-174', + 'zCldMast-Uniform_Type_ID-175', + 'zCldMast-Full Size JPEG Source-176', + 'zAsset-HDR Gain-177', + 'zAsset-zHDR_Type-178', + 'zExtAttr-Codec-179', + 'zIntResou-Codec Four Char Code Name-180', + 'zCldMast-Codec Name-181', + 'zCldMast-Video Frame Rate-182', + 'zCldMast-Placeholder State-183', + 'zAsset-Depth_Type-184', + 'zAsset-Avalanche UUID-4TableStart-185', + 'zAsset-Avalanche_Kind-iOS18-186', + 'zAsset-Avalanche_Pick_Type-BurstAsset-187', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-188', + 'zAddAssetAttr-Cloud Recovery State-189', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-190', + 'zAsset-Deferred Processing Needed-191', + 'zAsset-Video Deferred Processing Needed-192', + 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-193', + 'zAddAssetAttr-Deferred Processing Candidate Options-194', + 'zAsset-Adjustments_State-195', + 'zUnmAdj-UUID-4TableStart-196', + 'zAddAssetAttr.Adjusted Stable Hash-4TableStart-197', + 'zUnmAdj-Other Adjustments Fingerprint-4TableStart-198', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart-199', + 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-4TableStart-200', + ('zAsset-Adjustment Timestamp-201', 'datetime'), + ('zUnmAdj-Adjustment Timestamp-202', 'datetime'), + 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-203', + 'zAddAssetAttr-Editor Bundle ID-204', + 'zUnmAdj-Editor Localized Name-205', + 'zUnmAdj-Adjustment Format ID-206', + 'zAddAssetAttr-Montage-207', + 'zUnmAdj-Adjustment Render Types-208', + 'zUnmAdj-Adjustment Format Version-209', + 'zUnmAdj-Adjustment Base Image Format-210', + 'zCompSyncAttr-Local_Analysis_Stage-211', + 'zCompSyncAttr-Cloud_Compute_State_Version-212', + 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-213', + 'zAsset-Favorite-214', + 'zAsset-Hidden-215', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-216', + ('zAsset-Trashed Date-217', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-218', + 'zAsset-Delete-Reason-219', + 'zIntResou-Trash State-220', + ('zIntResou-Trashed Date-221', 'datetime'), + 'zAsset-Cloud Delete State-222', + 'zIntResou-Cloud Delete State-223', + 'zAddAssetAttr-PTP Trashed State-224', + 'zIntResou-PTP Trashed State-225', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-226', + ('zMedAnlyAstAttr-Media Analysis Timestamp-227', 'datetime'), + ('zAsset-Analysis State Modification Date-228', 'datetime'), + 'zAddAssetAttr- Pending View Count-229', + 'zAddAssetAttr- View Count-230', + 'zAddAssetAttr- Pending Play Count-231', + 'zAddAssetAttr- Play Count-232', + 'zAddAssetAttr- Pending Share Count-233', + 'zAddAssetAttr- Share Count-234', + 'zAddAssetAttr-Allowed for Analysis-235', + 'zAddAssetAttr-Scene Analysis Version-236', + 'zAddAssetAttr-Scene Analysis is From Preview-237', + ('zAddAssetAttr-Scene Analysis Timestamp-238', 'datetime'), + 'zAsset-Duplication Asset Visibility State-239', + 'zAddAssetAttr-Destination Asset Copy State-240', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-241', + 'zSceneP-Data-HEX NSKeyed Plist-242', + 'zSceneP-Duplicate Matching Data-HEX NSKeyed Plist-243', + 'zSceneP-Duplicate Matching Alternate Data-HEX NSKeyed Plist-244', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-245', + 'zCldMast-Source Master For Duplication Scope ID-246', + 'zAddAssetAttr-Source Asset For Duplication ID-247', + 'zCldMast-Source Master for Duplication ID-248', + 'zAddAssetAttr-Variation Suggestions States-249', + 'zAsset-High Frame Rate State-250', + 'zAsset-Video Key Frame Time Scale-251', + 'zAsset-Video Key Frame Value-252', + 'zAsset-Current_Sleet_Cast-iOS18-253', + 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-254', + 'zExtAttr-Sleet_Rendering_Version-255', + 'zExtAttr-Sleet_Intensity-256', + 'zExtAttr-Sleet_Tone_Bias-257', + 'zExtAttr-Sleet_Color_Bias-258', + 'zExtAttr-Sleet_Cast-259', + 'zExtAttr-ISO-260', + 'zExtAttr-Metering Mode-261', + 'zExtAttr-Sample Rate-262', + 'zExtAttr-Track Format-263', + 'zExtAttr-White Balance-264', + 'zExtAttr-Aperture-265', + 'zExtAttr-BitRate-266', + 'zExtAttr-Exposure Bias-267', + 'zExtAttr-Frames Per Second-268', + 'zExtAttr-Shutter Speed-269', + 'zExtAttr-Slush Scene Bias-270', + 'zExtAttr-Slush Version-271', + 'zExtAttr-Slush Preset-272', + 'zExtAttr-Slush Warm Bias-273', + 'zAsset-Height-274', + 'zAddAssetAttr-Original Height-275', + 'zIntResou-Unoriented Height-276', + 'zAsset-Width-277', + 'zAddAssetAttr-Original Width-278', + 'zIntResou-Unoriented Width-279', + 'zShare-Thumbnail Image Data-280', + 'SPLzShare-Thumbnail Image Data-281', + 'zAsset-Thumbnail Index-282', + 'zAddAssetAttr-Embedded Thumbnail Height-283', + 'zAddAssetAttr-Embedded Thumbnail Length-284', + 'zAddAssetAttr-Embedded Thumbnail Offset-285', + 'zAddAssetAttr-Embedded Thumbnail Width-286', + 'zAsset-Packed Acceptable Crop Rect-287', + 'zAsset-Packed Badge Attributes-288', + 'zAsset-Packed Preferred Crop Rect-289', + 'zAsset-Curation Score-290', + 'zAsset-Camera Processing Adjustment State-291', + 'zAsset-Depth Type-292', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-293', + 'zAddAssetAttr-Orig Resource Choice-294', + 'zAsset-Spatial Type-295', + 'zAddAssetAttr-Spatial Over Capture Group ID-296', + 'zAddAssetAttr-Object Saliency Rects Data-HEX NSKeyed Plist-297', + 'zAddAssetAttr-Original Hash-HEX-298', + 'zAddAssetAttr-Place Annotation Data-299', + 'zAddAssetAttr-Distance Identity-300', + 'zAddAssetAttr-Edited IPTC Attributes-301', + 'zAssetDes-Long Description-302', + 'zAddAssetAttr-Asset Description-303', + 'zAddAssetAttr-Title-Comments via Cloud Website-304', + 'zAddAssetAttr-Accessibility Description-305', + 'zAddAssetAttr-Photo Stream Tag ID-306', + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-307', + ('zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-308', 'datetime'), + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Data-309', + ('zCldFeedEnt-Entry Date-310', 'datetime'), + 'zCldFeedEnt-Entry_Is_Mine-iOS18-311', + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-312', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-313', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-314', + 'zCldFeedEnt-Entry Priority Number-315', + 'zCldFeedEnt-Entry Type Number-316', + 'zCldSharedComment-Cloud GUID-4TableStart-317', + ('zCldSharedComment-Date-318', 'datetime'), + ('zCldSharedComment-Comment Client Date-319', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-320', 'datetime'), + 'zCldSharedComment-Type-321', + 'zCldSharedComment-Comment Text-322', + 'zCldSharedComment-Commenter Hashed Person ID-323', + 'zCldSharedComment-Batch Comment-324', + 'zCldSharedComment-Is a Caption-325', + 'zAsset-Cloud Has Comments by Me-326', + 'zCldSharedComment-Is My Comment-327', + 'zCldSharedComment-Is Deletable-328', + 'zAsset-Cloud Has Comments Conversation-329', + 'zAsset-Cloud Has Unseen Comments-330', + 'zCldSharedComment-Liked-331', + 'zAddAssetAttr-Share Type-332', + 'zAsset-Library Scope Share State- StillTesting-333', + 'zAsset-Active Library Scope Participation State-334', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-335', + 'zShare-UUID-CMM-4TableStart-336', + 'SPLzShare-UUID-SPL-4TableStart-337', + 'zShare-zENT-CMM-338', + 'SPLzShare-zENT-SPL-339', + 'zSharePartic-z61SHARE-340', + 'SPLzSharePartic-z61SHARE-341', + 'zShare-Status-CMM-342', + 'zShare-Status-SPL-343', + 'zShare-Scope Type-CMM-344', + 'zShare-Scope Type-SPL-345', + 'zShare-Local Publish State-CMM-346', + 'SPLzShare-Local Publish State-SPL-347', + 'zShare-Public Permission-CMM-348', + 'SPLzShare-Public Permission-SPL-349', + 'zShare-Originating Scope ID-CMM-350', + 'SPLzShare-Originating Scope ID-SPL-351', + 'zShare-Scope ID-CMM-352', + 'SPLzShare-Scope ID-SPL-353', + 'zShare-Title-CMM-354', + 'SPLzShare-Title-SPL-355', + 'zShare-Share URL-CMM-356', + 'SPLzShare-Share URL-SPL-357', + ('zShare-Creation Date-CMM-358', 'datetime'), + ('SPLzShare-Creation Date-SPL-359', 'datetime'), + ('zShare-Start Date-CMM-360', 'datetime'), + ('SPLzShare-Start Date-SPL-361', 'datetime'), + ('zShare-End Date-CMM-362', 'datetime'), + ('SPLzShare-End Date-SPL-363', 'datetime'), + ('zShare-Expiry Date-CMM-364', 'datetime'), + ('SPLzShare-Expiry Date-SPL-365', 'datetime'), + 'zShare-Cloud Item Count-CMM-366', + 'SPLzShare-Cloud Item Count-SPL-367', + 'zShare-Asset Count-CMM-368', + 'SPLzShare-Asset Count-SPL-369', + 'zShare-Cloud Photo Count-CMM-370', + 'SPLzShare-Cloud Photo Count-SPL-371', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-372', + 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-373', + 'zShare-Photos Count-CMM-374', + 'SPLzShare-Photos Count-CMM-SPL-375', + 'zShare-Uploaded Photos Count-CMM-376', + 'SPLzShare-Uploaded Photos Count-SPL-377', + 'zShare-Cloud Video Count-CMM-378', + 'SPLzShare-Cloud Video Count-SPL-379', + 'zShare-Videos Count-CMM-380', + 'SPLzShare-Videos Count-SPL-381', + 'zShare-Uploaded Videos Count-CMM-382', + 'SPLzShare-Uploaded Videos Count-SPL-383', + 'zShare-Force Sync Attempted-CMM-384', + 'SPLzShare-Force Sync Attempted-SPL-385', + 'zShare-Cloud Local State-CMM-386', + 'SPLzShare-Cloud Local State-SPL-387', + 'zShare-Scope Syncing State-CMM-388', + 'SPLzShare-Scope Syncing State-SPL-389', + 'zShare-Auto Share Policy-CMM-390', + 'SPLzShare-Auto Share Policy-SPL-391', + 'zShare-Should Notify On Upload Completion-CMM-392', + 'SPLzShare-Should Notify On Upload Completion-SPL-393', + 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-394', + 'zShare-Trashed State-CMM-395', + 'SPLzShare-Trashed State-SPL-396', + 'zShare-Cloud Delete State-CMM-397', + 'SPLzShare-Cloud Delete State-SPL-398', + ('zShare-Trashed Date-CMM-399', 'datetime'), + ('SPLzShare-Trashed Date-SPL-400', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-CMM-401', 'datetime'), + ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL-402', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-CMM-403', 'datetime'), + ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL-404', 'datetime'), + 'zShare-Exit Source-CMM-405', + 'SPLzShare-Exit Source-SPL-406', + 'zShare-SPL_Exit State-CMM-407', + 'SPLzShare-SPL_Exit State-SPL-408', + 'zShare-Exit Type-CMM-409', + 'SPLzShare-Exit Type-SPL-410', + 'zShare-Should Ignor Budgets-CMM-411', + 'SPLzShare-Should Ignor Budgets-SPL-412', + 'zShare-Preview State-CMM-413', + 'SPLzShare-Preview State-SPL-414', + 'zShare-Preview Data-CMM-415', + 'SPLzShare-Preview Data-SPL-416', + 'zShare-Rules-CMM-417', + 'SPLzShare-Rules-SPL-418', + 'zShare-Thumbnail Image Data-CMM-419', + 'SPLzShare-Thumbnail Image Data-SPL-420', + 'zShare-Participant Cloud Update State-CMM-421', + 'SPLzShare-Participant Cloud Update State-SPL-422', + 'zSharePartic-UUID-4TableStart-423', + 'SPLzSharePartic-UUID-4TableStart-424', + 'zSharePartic-Acceptance Status-425', + 'SPLzSharePartic-Acceptance Status-426', + 'zSharePartic-Is Current User-427', + 'SPLzSharePartic-Is Current User-428', + 'zSharePartic-Role-429', + 'SPLzSharePartic-Role-430', + 'zSharePartic-Premission-431', + 'SPLzSharePartic-Premission-432', + 'zSharePartic-Participant ID-433', + 'SPLzSharePartic-Participant ID-434', + 'zSharePartic-User ID-435', + 'SPLzSharePartic-User ID-436', + 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-437', + 'SPLzSharePartic-zPK-4TableStart-438', + 'zSharePartic-zPK-4TableStart-439', + 'zSharePartic-Email Address-440', + 'SPLzSharePartic-Email Address-441', + 'zSharePartic-Phone Number-442', + 'SPLzSharePartic-Phone Number-443', + 'zSharePartic-Name Components-444', + 'SPLzSharePartic-Name Components-445', + 'zSharePartic-Exit State-446', + 'SPLzSharePartic-Exit State-447', + 'ParentzGenAlbum-UUID-4TableStart-448', + 'zGenAlbum-UUID-4TableStart-449', + 'SWYConverszGenAlbum-UUID-4TableStart-450', + 'ParentzGenAlbum-Cloud GUID-4TableStart-451', + 'zGenAlbum-Cloud GUID-4TableStart-452', + 'SWYConverszGenAlbum-Cloud GUID-4TableStart-453', + 'zCldShareAlbumInvRec-Album GUID-4TableStart-454', + 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-455', + 'zGenAlbum-Project Render UUID-4TableStart-456', + 'SWYConverszGenAlbum-Project Render UUID-4TableStart-457', + 'zAlbumList-Needs Reordering Number-458', + 'zGenAlbum-zENT- Entity-459', + 'ParentzGenAlbum-Kind-460', + 'zGenAlbum-Album Kind-461', + 'SWYConverszGenAlbum-Album Kind-462', + 'ParentzGenAlbum-Cloud-Local-State-463', + 'zGenAlbum-Cloud_Local_State-464', + 'SWYConverszGenAlbum-Cloud_Local_State-465', + 'ParentzGenAlbum- Title-466', + 'zGenAlbum- Title-User&System Applied-467', + 'SWYConverszGenAlbum- Title -User&System Applied-468', + 'zGenAlbum-Import Session ID-SWY-469', + 'zAsset- Conversation= zGenAlbum_zPK-470', + 'SWYConverszGenAlbum- Import Session ID-SWY-471', + 'zGenAlbum-Imported by Bundle Identifier-472', + 'SWYzGenAlbum-Imported by Bundle Identifier-473', + 'SWYConverszGenAlbum- Syndicate-474', + ('ParentzGenAlbum-Creation Date-475', 'datetime'), + ('zGenAlbum-Creation Date-476', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-477', 'datetime'), + ('zGenAlbum-Cloud Creation Date-478', 'datetime'), + ('SWYConverszGenAlbum-Cloud Creation Date-479', 'datetime'), + ('zGenAlbum-Start Date-480', 'datetime'), + ('SWYConverszGenAlbum-Start Date-481', 'datetime'), + ('zGenAlbum-End Date-482', 'datetime'), + ('SWYConverszGenAlbum-End Date-483', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-484', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date-485', 'datetime'), + 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-486', + 'SWYConverszGenAlbum-Cloud Metadata-HEX NSKeyed Plist-487', + 'ParentzGenAlbum-Pending Items Count-488', + 'zGenAlbum-Pending Items Count-489', + 'SWYConverszGenAlbum-Pending Items Count-490', + 'ParentzGenAlbum-Pending Items Type-491', + 'zGenAlbum-Pending Items Type-492', + 'SWYConverszGenAlbum-Pending Items Type-493', + 'zGenAlbum- Cached Photos Count-494', + 'SWYConverszGenAlbum- Cached Photos Count-495', + 'zGenAlbum- Cached Videos Count-496', + 'SWYConverszGenAlbum- Cached Videos Count-497', + 'zGenAlbum- Cached Count-498', + 'SWYConverszGenAlbum- Cached Count-499', + 'ParentzGenAlbum-Sync Event Order Key-500', + 'zGenAlbum-Sync Event Order Key-501', + 'SWYConverszGenAlbum-Sync Event Order Key-502', + 'zGenAlbum-Has Unseen Content-503', + 'SWYConverszGenAlbum-Has Unseen Content-504', + 'zGenAlbum-Unseen Asset Count-505', + 'SWYConverszGenAlbum-Unseen Asset Count-506', + 'zGenAlbum-is Owned-507', + 'SWYConverszGenAlbum-is Owned-508', + 'zGenAlbum-Cloud Relationship State-509', + 'SWYConverszGenAlbum-Cloud Relationship State-510', + 'zGenAlbum-Cloud Relationship State Local-511', + 'SWYConverszGenAlbum-Cloud Relationship State Local-512', + 'zGenAlbum-Cloud Owner Mail Key-513', + 'SWYConverszGenAlbum-Cloud Owner Mail Key-514', + 'zGenAlbum-Cloud Owner Frist Name-515', + 'SWYConverszGenAlbum-Cloud Owner Frist Name-516', + 'zGenAlbum-Cloud Owner Last Name-517', + 'SWYConverszGenAlbum-Cloud Owner Last Name-518', + 'zGenAlbum-Cloud Owner Full Name-519', + 'SWYConverszGenAlbum-Cloud Owner Full Name-520', + 'zGenAlbum-Cloud Person ID-521', + 'SWYConverszGenAlbum-Cloud Person ID-522', + 'zAsset-Cloud Owner Hashed Person ID-523', + 'zGenAlbum-Cloud Owner Hashed Person ID-524', + 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-525', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-526', + 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-527', + 'zGenAlbum-Cloud Multi-Contributors Enabled-528', + 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-529', + 'zGenAlbum-Cloud Album Sub Type-530', + 'SWYConverszGenAlbum-Cloud Album Sub Type-531', + ('zGenAlbum-Cloud Contribution Date-532', 'datetime'), + ('SWYConverszGenAlbum-Cloud Contribution Date-533', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-534', 'datetime'), + ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-535', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-536', + 'SWYConverszGenAlbum-Cloud Notification Enabled-537', + 'ParentzGenAlbum-Pinned-538', + 'zGenAlbum-Pinned-539', + 'SWYConverszGenAlbum-Pinned-540', + 'ParentzGenAlbum-Custom Sort Key-541', + 'zGenAlbum-Custom Sort Key-542', + 'SWYConverszGenAlbum-Custom Sort Key-543', + 'ParentzGenAlbum-Custom Sort Ascending-544', + 'zGenAlbum-Custom Sort Ascending-545', + 'SWYConverszGenAlbum-Custom Sort Ascending-546', + 'ParentzGenAlbum-Is Prototype-547', + 'zGenAlbum-Is Prototype-548', + 'SWYConverszGenAlbum-Is Prototype-549', + 'ParentzGenAlbum-Project Document Type-550', + 'zGenAlbum-Project Document Type-551', + 'SWYConverszGenAlbum-Project Document Type-552', + 'ParentzGenAlbum-Custom Query Type-553', + 'zGenAlbum-Custom Query Type-554', + 'SWYConverszGenAlbum-Custom Query Type-555', + 'ParentzGenAlbum-Trashed State-556', + ('ParentzGenAlbum-Trash Date-557', 'datetime'), + 'zGenAlbum-Trashed State-558', + ('zGenAlbum-Trash Date-559', 'datetime'), + 'SWYConverszGenAlbum-Trashed State-560', + ('SWYConverszGenAlbum-Trash Date-561', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-562', + 'zGenAlbum-Cloud Delete State-563', + 'SWYConverszGenAlbum-Cloud Delete State-564', + 'zGenAlbum-Cloud Owner Whitelisted-565', + 'SWYConverszGenAlbum-Cloud Owner Whitelisted-566', + 'zGenAlbum-Cloud Local Public URL Enabled-567', + 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-568', + 'zGenAlbum-Cloud Public URL Enabled-569', + 'zGenAlbum-Public URL-570', + 'SWYConverszGenAlbum-Cloud Public URL Enabled-571', + 'SWYConverszGenAlbum-Public URL-572', + 'zGenAlbum-Key Asset Face Thumb Index-573', + 'SWYConverszGenAlbum-Key Asset Face Thumb Index-574', + 'zGenAlbum-Project Text Extension ID-575', + 'SWYConverszGenAlbum-Project Text Extension ID-576', + 'zGenAlbum-User Query Data-577', + 'SWYConverszGenAlbum-User Query Data-578', + 'zGenAlbum-Custom Query Parameters-579', + 'SWYConverszGenAlbum-Custom Query Parameters-580', + 'zGenAlbum-Project Data-581', + 'SWYConverszGenAlbum-Project Data-582', + 'zGenAlbum-Search Index Rebuild State-583', + 'SWYConverszGenAlbum-Search Index Rebuild State-584', + 'zGenAlbum-Duplicate Type-585', + 'SWYConverszGenAlbum-Duplicate Type-586', + 'zGenAlbum-Privacy State-587', + 'SWYConverszGenAlbum-Privacy State-588', + 'zCldShareAlbumInvRec-zUUID-4TableStart-589', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-590', + 'zCldShareAlbumInvRec-Invitation State Local-591', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-592', + ('zCldShareAlbumInvRec-Subscription Date-593', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-594', + 'zCldShareAlbumInvRec-Invitee Last Name-595', + 'zCldShareAlbumInvRec-Invitee Full Name-596', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-597', + 'zCldShareAlbumInvRec-Invitee Email Key-598', + 'zGenAlbum-Key Asset Face ID-599', + 'zFaceCrop-Face Area Points-600', + 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence-iOS18-601', + 'zAsset-Face Adjustment Version-602', + 'zAddAssetAttr-Face Regions HEX-603', + 'zAddAssetAttr-Face Analysis Version-604', + 'zDetFace-Asset Visible-605', + 'zDetFacePrint-Data HEX-606', + 'zPerson-Contact Matching Dictionary HEX-607', + 'zPerson-Face Count-608', + 'zDetFace-Face Crop-609', + 'zDetFace-Face Algorithm Version-610', + 'zDetFace-Adjustment Version-611', + 'zDetFace-UUID-4TableStart-612', + 'zPerson-Person UUID-4TableStart-613', + 'zPerson-Is_Me_Confidence-iOS18-614', + 'zPerson - MD ID-615', + 'zPerson - Asset Sort Order-616', + 'zDetFace-Confirmed Face Crop Generation State-617', + 'zDetFace-Manual-618', + 'zDetFace-Detection Type-619', + 'zPerson-Detection Type-620', + 'zDetFace-VIP Model Type-621', + 'zDetFace-Name Source-622', + 'zDetFace-Cloud Name Source-623', + 'zPerson-Merge Candidate Confidence-624', + 'zPerson-Person URI-625', + 'zPerson-Display Name-626', + 'zPerson-Full Name-627', + 'zPerson-Cloud Verified Type-628', + 'zFaceCrop-State-629', + 'zFaceCrop-Type-630', + 'zFaceCrop-Resource Data-HEX-PHOTO used for FaceCrop-631', + 'zFaceCrop-UUID-4TableStart-632', + 'zPerson-Type-633', + 'zPerson-Verified Type-634', + 'zPerson-Gender Type-635', + 'zDetFace-Gender Type-636', + 'zDetFace-Center X-637', + 'zDetFace-Center Y-638', + 'zPerson-Age Type Estimate-639', + 'zDetFace-Age Type Estimate-640', + 'zDetFace-Ethnicity Type-641', + 'zDetFace-Skin Tone Type-642', + 'zDetFace-Hair Type-643', + 'zDetFace-Hair Color Type-644', + 'zDetFace-Head Gear Type-645', + 'zDetFace-Facial Hair Type-646', + 'zDetFace-Has Face Mask-647', + 'zDetFace-Pose Type-648', + 'zDetFace-Face Expression Type-649', + 'zDetFace-Has Smile-650', + 'zDetFace-Smile Type-651', + 'zDetFace-Lip Makeup Type-652', + 'zDetFace-Eyes State-653', + 'zDetFace-Is Left Eye Closed-654', + 'zDetFace-Is Right Eye Closed-655', + 'zDetFace-Gaze Center X-656', + 'zDetFace-Gaze Center Y-657', + 'zDetFace-Face Gaze Type-658', + 'zDetFace-Eye Glasses Type-659', + 'zDetFace-Eye Makeup Type-660', + 'zDetFace-Cluster Squence Number Key-661', + 'zDetFace-Grouping ID-662', + 'zDetFace-Master ID-663', + 'zDetFace-Quality-664', + 'zDetFace-Quality Measure-665', + 'zDetFace-Source Height-666', + 'zDetFace-Source Width-667', + 'zDetFace-Hidden-Asset Hidden-668', + 'zDetFace-In Trash-Recently Deleted-669', + 'zDetFace-Cloud Local State-670', + 'zDetFace-Training Type-671', + 'zDetFace.Pose Yaw-672', + 'zDetFace-Body Center X-673', + 'zDetFace-Body Center Y-674', + 'zDetFace-Body Height-675', + 'zDetFace-Body Width-676', + 'zDetFace-Roll-677', + 'zDetFace-Size-678', + 'zDetFace-Cluster Squence Number-679', + 'zDetFace-Blur Score-680', + 'zDetFacePrint-Face Print Version-681', + 'zMedAnlyAstAttr-Face Count-682', + 'zDetFaceGroup-UUID-4TableStart-683', + 'zDetFaceGroup-Person Builder State-684', + 'zDetFaceGroup-UnNamed Face Count-685', + 'zPerson-In Person Naming Model-686', + 'zPerson-Key Face Pick Source Key-687', + 'zPerson-Manual Order Key-688', + 'zPerson-Question Type-689', + 'zPerson-Suggested For Client Type-690', + 'zPerson-Merge Target Person-691', + 'zPerson-Cloud Local State-692', + 'zFaceCrop-Cloud Local State-693', + 'zFaceCrop-Cloud Type-694', + 'zPerson-Cloud Delete State-695', + 'zFaceCrop-Cloud Delete State-696', + 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-697', + 'zAsset-Highlight Visibility Score-698', + 'zMemory-UUID-4TableStart-699', + 'zMemory-AssetListPredicte-700', + 'zMemory-Score-701', + 'zMemory-SubTitle-702', + 'zMemory-Title-703', + 'zMemory-Category-704', + 'zMemory-SubCategory-705', + ('zMemory-Creation Date-706', 'datetime'), + ('zMemory-Last Enrichment Date-707', 'datetime'), + 'zMemory-User Action Options-708', + 'zMemory-Favorite Memory-709', + 'zMemory-View Count-710', + 'zMemory-Play Count-711', + 'zMemory-Rejected-712', + 'zMemory-Share Count-713', + 'zMemory-Sharing Composition-714', + 'zMemory-PhotosGraphData-HEX NSKeyed Plist-715', + 'zMemory-MovieAssetState-HEX NSKeyed Plist-716', + 'zMemory-MovieData-HEX NSKeyed Plist-717', + ('zMemory-Last Movie Play Date-718', 'datetime'), + ('zMemory-Last Viewed Date-719', 'datetime'), + 'zMemory-Pending Play Count Memory-720', + 'zMemory-Pending Share Count Memory-721', + 'zMemory-Pending View Count Memory-722', + 'zMemory-Pending State-723', + 'zMemory-Featured State-724', + 'zMemory-Photos Graph Version-725', + 'zMemory-Graph Memory Identifier-726', + 'zMemory-Notification State-727', + 'zMemory-Cloud Local State-728', + 'zMemory-Cloud Delete State-729', + 'zMemory-Story Color Grade Kind-730', + 'zMemory-Story Serialized Title Category-731', + 'zMemory-Syndicated Content State-732', + 'zMemory-Search Index Rebuild State-733', + 'zMemory-Black Listed Feature-734', + 'zMoment-UUID-4TableStart-735', + 'zMoment-Aggregation Score-736', + ('zMoment-Start Date-737', 'datetime'), + ('zMoment-Representative Date-738', 'datetime'), + 'zMoment-Timezone Offset-739', + ('zMoment-Modification Date-740', 'datetime'), + ('zMoment-End Date-741', 'datetime'), + 'zMoment-SubTitle-742', + 'zMoment-Localized Location Names-743', + 'zMoment-Title-744', + 'zMoment-Originator State-745', + 'zMoment-Sharing Composition-746', + 'zMoment-Cached Count Shared-747', + 'zMoment-Processed Location-748', + 'zMoment-Approx Latitude-749', + 'zMoment-Approx Longitude-750', + 'zMoment-GPS Horizontal Accuracy-751', + 'zMoment-Cache Count-752', + 'zMoment-Cached Photos Count-753', + 'zMoment-Cached Videos Count-754', + 'zMoment-Trashed State-755', + 'SBKAzSugg-UUID-4TableStart-756', + 'SBKAzSugg-Suggestion Context-757', + 'SBKAzSugg-Sharing Composition-758', + ('SBKAzSugg-Start Date-759', 'datetime'), + 'SBKAzSugg-State-760', + 'SBKAzSugg-Featured State-761', + 'SBKAzSugg- Available Features-762', + 'SBKAzSugg-Notification State-763', + ('SBKAzSugg-Creation Date-764', 'datetime'), + ('SBKAzSugg-End Date-765', 'datetime'), + ('SBKAzSugg-Activation Date-766', 'datetime'), + ('SBKAzSugg-Expunge Date-767', 'datetime'), + ('SBKAzSugg-Relevant Until Date-768', 'datetime'), + 'SBKAzSugg-Title-769', + 'SBKAzSugg-Sub Title-770', + 'SBKAzSugg-Cached Count-771', + 'SBKAzSugg-Cahed Photos Count-772', + 'SBKAzSugg-Cached Videos Count-773', + 'SBKAzSugg-Type-774', + 'SBKAzSugg-Sub Type-775', + 'SBKAzSugg-Action Data-776', + 'SBKAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-777', + 'SBKAzSugg-Version-778', + 'SBKAzSugg-Cloud Local State-779', + 'SBKAzSugg-Cloud Delete State-780', + 'SBRAzSugg-UUID-4TableStart-781', + 'SBRAzSugg-Suggestion Context-782', + 'SBRAzSugg-Sharing Composition-783', + ('SBRAzSugg-Start Date-784', 'datetime'), + 'SBRAzSugg-State-785', + 'SBRAzSugg-Featured State-786', + 'SBRAzSugg- Available Features-787', + 'SBRAzSugg-Notification State-788', + ('SBRAzSugg-Creation Date-789', 'datetime'), + ('SBRAzSugg-End Date-790', 'datetime'), + ('SBRAzSugg-Activation Date-791', 'datetime'), + ('SBRAzSugg-Expunge Date-792', 'datetime'), + ('SBRAzSugg-Relevant Until Date-793', 'datetime'), + 'SBRAzSugg-Title-794', + 'SBRAzSugg-Sub Title-795', + 'SBRAzSugg-Cached Count-796', + 'SBRAzSugg-Cahed Photos Count-797', + 'SBRAzSugg-Cached Videos Count-798', + 'SBRAzSugg-Type-799', + 'SBRAzSugg-Sub Type-800', + 'SBRAzSugg-Action Data-801', + 'SBRAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-802', + 'SBRAzSugg-Version-803', + 'SBRAzSugg-Cloud Local State-804', + 'SBRAzSugg-Cloud Delete State-805', + 'zMedAnlyAstAttr-Media Analysis Version-806', + 'zMedAnlyAstAttr-Audio Classification-807', + 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-808', + 'zMedAnlyAstAttr-Best Video Range Start Time Scale-809', + 'zMedAnlyAstAttr-Best Video Range Duration Value-810', + 'zMedAnlyAstAttr-Best Video Range Start Value-811', + 'zMedAnlyAstAttr-Packed Best Playback Rect-812', + 'zMedAnlyAstAttr-Activity Score-813', + 'zMedAnlyAstAttr-Video Score-814', + 'zMedAnlyAstAttr-Audio Score-815', + 'zMedAnlyAstAttr-Wallpaper Score-816', + 'zMedAnlyAstAttr-AutoPlay Suggestion Score-817', + 'zMedAnlyAstAttr-Blurriness Score-818', + 'zMedAnlyAstAttr-Exposure Score-819', + 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-820', + 'zMedAnlyAstAttr-Probable Rotation Direction-821', + 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-822', + 'zMedAnlyAstAttr-Color Normalization Data-823', + 'zMedAnlyAstAttr-Media_Analysis Image_Version-824', + 'zMedAnlyAstAttr-Image_Caption_Version-825', + 'zMedAnlyAstAttr-Video_Caption_Version-826', + 'zMedAnlyAstAttr-VA_Location_Analysis_Version-827', + 'zAssetAnalyState-Asset UUID-4TableStart-828', + 'zAssetAnalyState-Analyisis State-829', + 'zAssetAnalyState-Worker Flags-830', + 'zAssetAnalyState-Worker Type-831', + ('zAssetAnalyState-Ignore Until Date-832', 'datetime'), + ('zAssetAnalyState-Last Ignored Date-833', 'datetime'), + ('zAssetAnalyState-Sort Token-834', 'datetime'), + 'zMedAnlyAstAttr-Character Recognition Attr-835', + 'zCharRecogAttr-Algorithm Version-836', + 'zCharRecogAttr-Adjustment Version-837', + 'zCharRecogAttr-Character Recognition Data-HEX-838', + 'zCharRecogAttr-Machine Readable Code Data-HEX-839', + 'zMedAnlyAstAttr-Visual Search Attributes-840', + 'zVisualSearchAttr-Algorithm Version-841', + 'zVisualSearchAttr-Adjustment Version-842', + 'zVisualSearchAttr-Visual Search Data-HEX-843', + 'zVisualSearchAttr - Sticker Confidence Algorithm Version-844', + 'zVisualSearchAttr - Sticker Confidence Score-845', + 'zAsset-Sticker Confidence Score-846', + 'zAsset-Overall Aesthetic Score-847', + 'zCompAssetAttr-Behavioral Score-848', + 'zCompAssetAttr-Failure Score zCompAssetAttr-849', + 'zCompAssetAttr-Harmonious Color Score-850', + 'zCompAssetAttr-Impressiveness Score-851', + 'zCompAssetAttr-Interaction Score-852', + 'zCompAssetAttr-Interesting Subject Score-853', + 'zCompAssetAttr-Intrusive Object Presence Score-854', + 'zCompAssetAttr-Lively Color Score-855', + 'zCompAssetAttr-Low Light-856', + 'zCompAssetAttr-Noise Score-857', + 'zCompAssetAttr-Pleasant Camera Tilt Score-858', + 'zCompAssetAttr-Pleasant Composition Score-859', + 'zCompAssetAttr-Pleasant Lighting Score-860', + 'zCompAssetAttr-Pleasant Pattern Score-861', + 'zCompAssetAttr-Pleasant Perspective Score-862', + 'zCompAssetAttr-Pleasant Post Processing Score-863', + 'zCompAssetAttr-Pleasant Reflection Score-864', + 'zCompAssetAttrPleasant Symmetry Score-865', + 'zCompAssetAttr-Sharply Focused Subject Score-866', + 'zCompAssetAttr-Tastefully Blurred Score-867', + 'zCompAssetAttr-Well Chosen Subject Score-868', + 'zCompAssetAttr-Well Framed Subject Score-869', + 'zCompAssetAttr-Well Timed Shot Score-870', + 'zCldRes-Asset UUID-4TableStart-871', + 'zCldRes-Cloud Local State-872', + 'zCldRes-File Size-873', + 'zCldRes-Height-874', + 'zCldRes-Is Available-875', + 'zCldRes-Is Locally Available-876', + 'zCldRes-Prefetch Count-877', + 'zCldRes-Source Type-878', + 'zCldRes-Type-879', + 'zCldRes-Width-880', + ('zCldRes-Date Created-881', 'datetime'), + ('zCldRes-Last OnDemand Download Date-882', 'datetime'), + ('zCldRes-Last Prefetch Date-883', 'datetime'), + 'zCldRes-Prunedat-884', + 'zCldRes-File Path-885', + 'zCldRes-Fingerprint-886', + 'zCldRes-Item ID-887', + 'zCldRes-UniID-888', + 'zUserFeedback-UUID-4TableStart-889', + 'zUserFeedback-Feature-890', + 'zUserFeedback-Type-891', + ('zUserFeedback-Last Modified Date-892', 'datetime'), + 'zUserFeedback-Context-893', + 'zUserFeedback-Cloud Local State-894', + 'zUserFeedback-Cloud Delete State-895', + 'zUserFeedback - Creation Type-896', + 'zAddAssetAttr-zPK-897', + 'zAddAssetAttr-zENT-898', + 'ZAddAssetAttr-zOPT-899', + 'zAddAssetAttr-zAsset= zAsset_zPK-900', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-901', + 'zAddAssetAttr-Original Stable Hash-4Queryend-902', + 'zAddAssetAttr-Public Global UUID-903', + 'zAddAssetAttr-Deferred Photo Identifier-904', + 'zAddAssetAttr-Original Assets UUID-905', + 'zAddAssetAttr-Import Session ID-906', + 'zAddAssetAttr-Originating Asset Identifier-4endquery-907', + 'zAddAssetAttr.Adjusted Stable Hash-4endquery-908', + 'zAlbumList-zPK= Album List Key-909', + 'zAlbumList-zENT-910', + 'zAlbumList-zOPT-911', + 'zAlbumList-ID Key-912', + 'zAlbumList-UUID-913', + 'zAsset-zPK-914', + 'zAsset-zENT-915', + 'zAsset-zOPT-916', + 'zAsset-Master= zCldMast-zPK-917', + 'zAsset-Extended Attributes= zExtAttr-zPK-918', + 'zAsset-Import Session Key-919', + 'zAsset-Trashed by Participant= zSharePartic_zPK-920', + 'zAsset-Photo Analysis Attributes Key-921', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-922', + 'zAsset-FOK-Cloud Feed Asset Entry Key-923', + 'zAsset-Moment Share Key= zShare-zPK-924', + 'zAsset-zMoment Key= zMoment-zPK-925', + 'zAsset-Computed Attributes Asset Key-926', + 'zAsset-Highlight Being Assets-HBA Key-927', + 'zAsset-Highlight Being Extended Assets-HBEA Key-928', + 'zAsset-Highlight Being Key Asset Private-HBKAP Key-929', + 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-930', + 'zAsset-Highligh Being Summary Assets-HBSA Key-931', + 'zAsset-Day Group Highlight Being Assets-DGHBA Key-932', + 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-933', + 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-934', + 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-935', + 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-936', + 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-937', + 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-938', + 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-939', + 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-940', + 'zAsset-Promotion Score-941', + 'zAsset-Iconic Score-942', + 'zAsset-Media Analysis Attributes Key-943', + 'zAsset-Media Group UUID-944', + 'zAsset-UUID = store.cloudphotodb-945', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-946', + 'zAsset.Cloud Collection GUID-947', + 'zAsset-Avalanche UUID-948', + 'zAssetAnalyState-zPK-949', + 'zAssetAnalyState-zEnt-950', + 'zAssetAnalyState-zOpt-951', + 'zAssetAnalyState-Asset= zAsset-zPK-952', + 'zAssetAnalyState-Asset UUID-953', + 'zAsstContrib-zPK-954', + 'zAsstContrib-zEnt-955', + 'zAsstContrib-zOpt-956', + 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-957', + 'zAsstContrib-Participant= zSharePartic-zPK-958', + 'zAssetDes-zPK-959', + 'zAssetDes-zENT-960', + 'zAssetDes-zOPT-961', + 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-962', + 'zCharRecogAttr-zPK-963', + 'zCharRecogAttr-zENT-964', + 'zCharRecogAttr-zOPT-965', + 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-966', + 'zCldFeedEnt-zPK= zCldShared keys-967', + 'zCldFeedEnt-zENT-968', + 'zCldFeedEnt-zOPT-969', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-970', + 'zCldFeedEnt-Entry Invitation Record GUID-971', + 'zCldFeedEnt-Entry Cloud Asset GUID-972', + 'zCldMast-zPK= zAsset-Master-973', + 'zCldMast-zENT-974', + 'zCldMast-zOPT-975', + 'zCldMast-Moment Share Key= zShare-zPK-976', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-977', + 'zCldMast-Originating Asset ID-978', + 'zCldMast-Import Session ID- AirDrop-StillTesting-979', + 'CMzCldMastMedData-zENT-980', + 'CMzCldMastMedData-zOPT-981', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-982', + 'AAAzCldMastMedData-zENT-983', + 'AAAzCldMastMedData-zOPT-984', + 'AAAzCldMastMedData-CldMast key-985', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-986', + 'zCldRes-zPK-987', + 'zCldRes-zENT-988', + 'zCldRes-zOPT-989', + 'zCldRes-Asset= zAsset-zPK-990', + 'zCldRes-Cloud Master= zCldMast-zPK-991', + 'zCldRes-Asset UUID-992', + 'zCldShareAlbumInvRec-zPK-993', + 'zCldShareAlbumInvRec-zEnt-994', + 'zCldShareAlbumInvRec-zOpt-995', + 'zCldShareAlbumInvRec-Album Key-996', + 'zCldShareAlbumInvRec-FOK Album Key-997', + 'zCldShareAlbumInvRec-Album GUID-998', + 'zCldShareAlbumInvRec-zUUID-999', + 'zCldShareAlbumInvRec-Cloud GUID-1000', + 'zCldSharedComment-zPK-1001', + 'zCldSharedComment-zENT-1002', + 'zCldSharedComment-zOPT-1003', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1004', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1005', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1006', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1007', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-1008', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1009', + 'zCldSharedComment-Cloud GUID-1010', + 'zCompAssetAttr-zPK-1011', + 'zCompAssetAttr-zEnt-1012', + 'zCompAssetAttr-zOpt-1013', + 'zCompAssetAttr-Asset Key-1014', + 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-1015', + 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-1016', + 'zCompSyncAttr-zAsset= zAsset-zPK-1017', + 'zCompSyncAttr-zENT-1018', + 'zCompSyncAttr-zOPT-1019', + 'zDetFace-zPK-1020', + 'zDetFace-zEnt-1021', + 'zDetFace.zOpt-1022', + 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-1023', + 'zDetFace-PersonForFace= zPerson-zPK-1024', + 'zDetFace-Person Being Key Face-1025', + 'zDetFace-Face Print-1026', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1027', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1028', + 'zDetFace-UUID-1029', + 'zDetFaceGroup-zPK-1030', + 'zDetFaceGroup-zENT-1031', + 'zDetFaceGroup-zOPT-1032', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-1033', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-1034', + 'zDetFaceGroup-UUID-1035', + 'zDetFacePrint-zPK-1036', + 'zDetFacePrint-zEnt-1037', + 'zDetFacePrint-zOpt-1038', + 'zDetFacePrint-Face Key-1039', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-1040', + 'zExtAttr-zENT-1041', + 'zExtAttr-zOPT-1042', + 'zExtAttr-Asset Key-1043', + 'zFaceCrop-zPK-1044', + 'zFaceCrop-zEnt-1045', + 'zFaceCrop-zOpt-1046', + 'zFaceCrop-Asset Key-1047', + 'zFaceCrop-Invalid Merge Canidate Person UUID-1048', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1049', + 'zFaceCrop-Face Key-1050', + 'zFaceCrop-UUID-1051', + 'zGenAlbum-zPK=26AlbumLists= 26Albums-1052', + 'zGenAlbum-zENT-1053', + 'zGenAlbum-zOpt-1054', + 'zGenAlbum-Custom Key Asset-1055', + 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1056', + 'zGenAlbum-FOK Parent Folder-1057', + 'zGenAlbum-zSyndicate-1058', + 'zGenAlbum-UUID-1059', + 'SWYConverszGenAlbum-UUID-1060', + 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1061', + 'SWYConverszGenAlbum-Cloud GUID-1062', + 'zGenAlbum-Project Render UUID-1063', + 'SWYConverszGenAlbum-Project Render UUID-1064', + 'zIntResou-zPK-1065', + 'zIntResou-zENT-1066', + 'zIntResou-zOPT-1067', + 'zIntResou-Asset= zAsset_zPK-1068', + 'zIntResou-Fingerprint-4Queryend-1069', + 'zIntResou-Stable Hash-4Queryend-1070', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-1071', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1072', + 'zMedAnlyAstAttr-zEnt-1073', + 'zMedAnlyAstAttr-zOpt-1074', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-1075', + 'zMemory-zPK-1076', + 'zMemory-zENT-1077', + 'zMemory-zOPT-1078', + 'zMemory-Key Asset= zAsset-zPK-1079', + 'zMemory-UUID-1080', + 'zMoment-zPK-1081', + 'zMoment-zENT-1082', + 'zMoment-zOPT-1083', + 'zMoment-Highlight Key-1084', + 'zMoment-UUID-1085', + 'zPerson-zPK=zDetFace-Person-1086', + 'zPerson-zEnt-1087', + 'zPerson-zOpt-1088', + 'zPerson-Share Participant= zSharePartic-zPK-1089', + 'zPerson-KeyFace=zDetFace-zPK-1090', + 'zPerson-Assoc Face Group Key-1091', + 'zPerson-Person UUID-1092', + 'zPerson-Is_Me_Confidence-1093', + 'zPhotoAnalysisAssetAttr-zPK-1094', + 'zPhotoAnalysisAssetAttr-zEnt-1095', + 'zPhotoAnalysisAssetAttr-zOpt-1096', + 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1097', + 'zSceneP-zPK-1098', + 'zSceneP-zENT-1099', + 'zSceneP-zOPT-1100', + 'zShare-zPK-1101', + 'zShare-zENT-1102', + 'zShare-zOPT-1103', + 'zShare-UUID-1104', + 'SPLzShare-UUID-1105', + 'zShare-Scope ID = store.cloudphotodb-1106', + 'zSharePartic-zPK-1107', + 'zSharePartic-zENT-1108', + 'zSharePartic-zOPT-1109', + 'zSharePartic-Share Key= zShare-zPK-1110', + 'zSharePartic-Person= zPerson-zPK-1111', + 'zSharePartic-UUID-1112', + 'SBKAzSugg-zPK-1113', + 'SBKAzSugg-zENT-1114', + 'SBKAzSugg-zOPT-1115', + 'SBKAzSugg-UUID-1116', + 'SBRAzSugg-zPK-1117', + 'SBRAzSugg-zENT-1118', + 'SBRAzSugg-zOPT-1119', + 'SBRAzSugg-UUID-1120', + 'z3SuggBRA-3RepAssets-1121', + 'z3SuggBRA-65SuggBeingRepAssets-1122', + 'z3SuggBKA-65SuggBeingKeyAssets= zSugg-zPK-1123', + 'z3SuggBKA-3KeyAssets1= zAsset-zPK-1124', + 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1125', + 'zUnmAdj-zOPT-1126', + 'zUnmAdj-zENT-1127', + 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1128', + 'zUnmAdj-UUID-1129', + 'zUnmAdj-Other Adjustments Fingerprint-1130', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1131', + 'zUserFeedback-zPK-1132', + 'zUserFeedback-zENT-1133', + 'zUserFeedback-zOPT-1134', + 'zUserFeedback-Person= zPerson-zPK-1135', + 'zUserFeedback-Memory= zMemory-zPK-1136', + 'zUserFeedback-UUID-1137', + 'zVisualSearchAttr-zPK-1138', + 'zVisualSearchAttr-zENT-1139', + 'zVisualSearchAttr-zOPT-1140', + 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1141', + 'z29AlbumList-29Albums= zGenAlbum-zPK-1142', + 'z29AlbumList-Album List Key-1143', + 'z29AlbumList-FOK29Albums Key-1144', + 'z30Assets-30Albums= zGenAlbum-zPK-1145', + 'z30Assets-3Asset Key= zAsset-zPK in the Album-1146', + 'z30Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1147', + 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1148', + 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1149', + 'z3MemoryBCAs-51MemoriesBeingCuratedAssets= zMemory-zPK-1150', + 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1151', + 'z3MemoryBECAs-51MemoriesBeingExtCuratedAssets= zMemory-zPK-1152', + 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1153', + 'z3MemoryBRAs-51RepresentativeAssets= zMemory-zPK-1154', + 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1155', + 'z3MemoryBUCAs-51MemoriesBeingUserCuratedAssets= zMemory-zPK-1156', + 'z3MemoryBCAs-51Memories Being Custom User Assets-1157', + 'z3MemoryBCAs-3Custom User Assets-1158', + 'z3MemoryBCAs-FOK-3Custom User Assets-1159') + data_list = get_sqlite_db_records(source_path, query) - else: - logfunc('No data available for iOS 18 PhotoData-Photos.sqlite') + return data_headers, data_list, source_path - db.close() - return +@artifact_processor +def Ph98_2iOS18RefforAssetAnalysisSyndPL(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - -def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) - - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if (version.parse(iosversion) <= version.parse("17.8")) or (version.parse(iosversion) >= version.parse("19")): - logfunc("Unsupported version for Syndication.photoslibrary-database-Photos.sqlite reference for asset analysis from iOS " + iosversion) + logfunc("Unsupported version for Syndication.photoslibrary for iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("18")) & (version.parse(iosversion) < version.parse("19")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found, "Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT CASE zAsset.ZCOMPLETE WHEN 1 THEN '1-Yes-1' @@ -4149,10 +4124,10 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w zAsset.Z_PK AS 'zAsset-zPK-4QueryStart', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK-4QueryStart', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4QueryStart', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18-4QueryStart', - zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-iOS18-4QueryStart', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4QueryStart', - zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18-4QueryStart', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-4QueryStart', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4QueryStart', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4QueryStart', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4QueryStart', CASE zAsset.ZBUNDLESCOPE WHEN 0 THEN '0-iCldPhtos-ON-AssetNotInSharedAlbum_or_iCldPhtos-OFF-AssetOnLocalDevice-0' WHEN 1 THEN '1-SharediCldLink_CldMastMomentAsset-1' @@ -4202,10 +4177,11 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w zExtAttr.ZFOCALLENGTHIN35MM AS 'zExtAttr-Focal Lenth in 35MM', zExtAttr.ZDIGITALZOOMRATIO AS 'zExtAttr-Digital Zoom Ratio', CASE zExtAttr.ZGENERATIVEAITYPE - WHEN 0 THEN '0-Not_Generative_AI iOS18_Still_Testing-0' + WHEN 0 THEN '0-Gen_AI_Type_Not_Detected-0' + WHEN 2 THEN '2-CleanUp-SafetyFilter-2' ELSE 'Unknown-New-Value!: ' || zExtAttr.ZGENERATIVEAITYPE || '' - END AS 'zExtAttr-Generative_AI_Type-iOS18', - zExtAttr.ZCREDIT AS 'zExtAttr-Credit-iOS18', + END AS 'zExtAttr-Generative_AI_Type', + zExtAttr.ZCREDIT AS 'zExtAttr-Credit', CASE zAsset.ZDERIVEDCAMERACAPTUREDEVICE WHEN 0 THEN '0-Back-Camera-Other-0' WHEN 1 THEN '1-Front-Camera-1' @@ -4268,10 +4244,10 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w ELSE 'Unknown-New-Value!: ' || zAsset.ZSAVEDASSETTYPE || '' END AS 'zAsset-Saved Asset Type', CASE zAsset.ZISRECENTLYSAVED - WHEN 0 THEN '0-Not_Recenlty_Saved iOS18_Still_Testing-0' - WHEN 1 THEN '1-Recently_Saved iOS18_Still_Testing-1' + WHEN 0 THEN '0-Not_Recently_Saved-0' + WHEN 1 THEN '1-Recently_Saved-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZISRECENTLYSAVED || '' - END AS 'zAsset-Is_Recently_Saved-iOS18', + END AS 'zAsset-Is_Recently_Saved', zAsset.ZDIRECTORY AS 'zAsset-Directory-Path', zAsset.ZFILENAME AS 'zAsset-Filename', zAddAssetAttr.ZORIGINALFILENAME AS 'zAddAssetAttr- Original Filename', @@ -4520,10 +4496,10 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w WHEN 1 THEN '1-Video-1' END AS 'zAsset-Kind', CASE zAsset.ZISDETECTEDSCREENSHOT - WHEN 0 THEN '0-Not_Detected_Screenshot iOS18_Still_Testing-0' - WHEN 1 THEN '1-Detected_Screenshot iOS18_Still_Testing-1' - ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' - END AS 'zAsset-Is_Detected_Screenshot-iOS18', + WHEN 0 THEN '0-Not_Screenshot-0' + WHEN 1 THEN '1-Screenshot-1' + ELSE 'Unknown-New-Value!: ' || zAsset.ZISDETECTEDSCREENSHOT || '' + END AS 'zAsset-Is_Detected_Screenshot', CASE zAsset.ZKINDSUBTYPE WHEN 0 THEN '0-Still-Photo-0' WHEN 1 THEN '1-Paorama-1' @@ -4623,9 +4599,9 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w zIntResou.ZTRANSIENTCLOUDMASTER AS 'zIntResou-Transient Cloud Master', zIntResou.ZSIDECARINDEX AS 'zIntResou-Side Car Index', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb-4TableStart', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Orignial Stable Hash-iOS18-4TableStart', - zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-iOS18-4TableStart', - zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18-4TableStart', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Orignial Stable Hash-4TableStart', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4TableStart', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4TableStart', zIntResou.ZFILEID AS 'zIntResou- File ID', CASE zIntResou.ZVERSION WHEN 0 THEN '0-IR_Asset_Standard-0' @@ -4821,19 +4797,19 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart', zAddAssetAttr.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'zAddAssetAttr-Deferred Processing Candidate Options', CASE zAsset.ZADJUSTMENTSSTATE - WHEN 0 THEN '0-No-Adjustments-0' - WHEN 2 THEN '2-Yes-Adjustments iOS18_needs_update_Decoding-2' - WHEN 3 THEN '3-Yes-Adjustments iOS18_needs_update_Decoding-3' - ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' - END AS 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18', + WHEN 0 THEN '0-No-Adjustments-0' + WHEN 2 THEN '2-Adjusted-PhotosAppEdit-2' + WHEN 3 THEN '3-Adjusted-Camera-lens-3' + ELSE 'Unknown-New-Value!: ' || zAsset.ZADJUSTMENTSSTATE || '' + END AS 'zAsset-Adjustments_State', zUnmAdj.ZUUID AS 'zUnmAdj-UUID-4TableStart', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4TableStart', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4TableStart', zUnmAdj.ZOTHERADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Other Adjustments Fingerprint-4TableStart', zUnmAdj.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart', - zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-4TableStart', + zCompSyncAttr.ZCLOUDCOMPUTESTATEADJUSTMENTFINGERPRINT AS 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-4TableStart', DateTime(zAsset.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zAsset-Adjustment Timestamp', DateTime(zUnmAdj.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zUnmAdj-Adjustment Timestamp', - DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18', + DateTime(zCompSyncAttr.ZCLOUDCOMPUTESTATELASTUPDATEDDATE + 978307200, 'UNIXEPOCH') AS 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date', zAddAssetAttr.ZEDITORBUNDLEID AS 'zAddAssetAttr-Editor Bundle ID', zUnmAdj.ZEDITORLOCALIZEDNAME AS 'zUnmAdj-Editor Localized Name', zUnmAdj.ZADJUSTMENTFORMATIDENTIFIER AS 'zUnmAdj-Adjustment Format ID', @@ -4974,14 +4950,14 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w WHEN 1 THEN '1-Obs in iOS 18 still testing-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZSLEETISREVERSIBLE || '' END AS 'zAddAssetAttr.Sleet_Is_Reversible-iOS18', - zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version-iOS18', - zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity-iOS18', - zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias-iOS18', - zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias-iOS18', + zExtAttr.ZSLEETRENDERINGVERSION AS 'zExtAttr-Sleet_Rendering_Version', + zExtAttr.ZSLEETINTENSITY AS 'zExtAttr-Sleet_Intensity', + zExtAttr.ZSLEETTONEBIAS AS 'zExtAttr-Sleet_Tone_Bias', + zExtAttr.ZSLEETCOLORBIAS AS 'zExtAttr-Sleet_Color_Bias', CASE zExtAttr.ZSLEETCAST WHEN 0 THEN '0-ObsButUnkn iOS18_Still_Testing-0' ELSE 'Unknown-New-Value!: ' || zExtAttr.ZSLEETCAST || '' - END AS 'zExtAttr-Sleet_Cast-iOS18', + END AS 'zExtAttr-Sleet_Cast', zExtAttr.ZISO AS 'zExtAttr-ISO', zExtAttr.ZMETERINGMODE AS 'zExtAttr-Metering Mode', zExtAttr.ZSAMPLERATE AS 'zExtAttr-Sample Rate', @@ -5009,11 +4985,6 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w zAddAssetAttr.ZEMBEDDEDTHUMBNAILLENGTH AS 'zAddAssetAttr-Embedded Thumbnail Length', zAddAssetAttr.ZEMBEDDEDTHUMBNAILOFFSET AS 'zAddAssetAttr-Embedded Thumbnail Offset', zAddAssetAttr.ZEMBEDDEDTHUMBNAILWIDTH AS 'zAddAssetAttr-Embedded Thumbnail Width', - CASE zAddAssetAttr.ZIMAGEEMBEDDINGVERSION - WHEN 0 THEN '0-Obs_in_iOS18 still_testing-0' - WHEN 1 THEN '1-Obs_in_iOS18 still_testing-1' - ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZIMAGEEMBEDDINGVERSION || '' - END AS 'zAddAssetAttr.Image Embedding Version-iOS18', zAsset.ZPACKEDACCEPTABLECROPRECT AS 'zAsset-Packed Acceptable Crop Rect', zAsset.ZPACKEDBADGEATTRIBUTES AS 'zAsset-Packed Badge Attributes', zAsset.ZPACKEDPREFERREDCROPRECT AS 'zAsset-Packed Preferred Crop Rect', @@ -5036,18 +5007,6 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w zAddAssetAttr.ZPLACEANNOTATIONDATA AS 'zAddAssetAttr-Place Annotation Data', zAddAssetAttr.ZDISTANCEIDENTITY AS 'zAddAssetAttr-Distance Identity', zAddAssetAttr.ZEDITEDIPTCATTRIBUTES AS 'zAddAssetAttr-Edited IPTC Attributes', - zGenAsstDesc.ZASSET AS 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18', - zAsset.ZGENERATEDASSETDESCRIPTION AS 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18', - zGenAsstDesc.Z_PK AS 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18', - zGenAsstDesc.Z_ENT AS 'zGenAsstDesc-zENT-iOS18', - zGenAsstDesc.Z_OPT AS 'zGenAsstDesc-zOPT-iOS18', - DateTime(zGenAsstDesc.ZANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'zGenAsstDesc-Analysis_Timestamp-iOS18', - CASE zGenAsstDesc.ZANALYSISSOURCETYPE - WHEN 0 THEN '0-NotYetObs iOS18_Still_Testing-0' - ELSE 'Unknown-New-Value!: ' || zGenAsstDesc.ZANALYSISSOURCETYPE || '' - END AS 'zGenAsstDesc-Analysis_Source_Type-iOS18', - zGenAsstDesc.ZANALYSISVERSION AS 'zGenAsstDesc-Analysis Version-iOS18', - zGenAsstDesc.ZDESCRIPTIONTEXT AS 'zGenAsstDesc-Description_Text-iOS18', zAssetDes.ZLONGDESCRIPTION AS 'zAssetDes-Long Description', zAddAssetAttr.ZASSETDESCRIPTION AS 'zAddAssetAttr-Asset Description', zAddAssetAttr.ZTITLE AS 'zAddAssetAttr-Title-Comments via Cloud Website', @@ -5143,31 +5102,31 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w CASE zShare.Z_ENT WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || zShare.Z_ENT || '' END AS 'zShare-zENT-CMM', CASE SPLzShare.Z_ENT WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' ELSE 'Unknown-New-Value!: ' || SPLzShare.Z_ENT || '' END AS 'SPLzShare-zENT-SPL', - CASE zSharePartic.Z62_SHARE + CASE zSharePartic.Z61_SHARE WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' - ELSE 'Unknown-New-Value!: ' || zSharePartic.Z62_SHARE || '' - END AS 'zSharePartic-z62SHARE', - CASE SPLzSharePartic.Z62_SHARE + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || zSharePartic.Z61_SHARE || '' + END AS 'zSharePartic-z61SHARE', + CASE SPLzSharePartic.Z61_SHARE WHEN 55 THEN '55-SPL-Entity-55' WHEN 56 THEN '56-CMM-iCloud-Link-Entity-56' - WHEN 63 THEN '63-SPL-Active-Participant-iOS18-63' - WHEN 64 THEN '64-CMM-iCloud-Link-iOS18-64' - ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z62_SHARE || '' - END AS 'SPLzSharePartic-z62SHARE', + WHEN 63 THEN '63-SPL-Active-Participant-63' + WHEN 64 THEN '64-CMM-iCloud-Link-64' + ELSE 'Unknown-New-Value!: ' || SPLzSharePartic.Z61_SHARE || '' + END AS 'SPLzSharePartic-z61SHARE', CASE zShare.ZSTATUS WHEN 1 THEN '1-Active_Share-CMM_or_SPL-1' WHEN 3 THEN '3-SPL-Actively-Sharing-3' @@ -5879,7 +5838,7 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w WHEN 0 THEN '0-Obs in iOS 18 still testing-0' WHEN 1 THEN '1-Obs in iOS 18 still testing-1' ELSE 'Unknown-New-Value!: ' || zAddAssetAttr.ZHASPEOPLESCENEMIDORGREATERCONFIDENCE || '' - END AS 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence-iOS18', + END AS 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence', zAsset.ZFACEADJUSTMENTVERSION AS 'zAsset-Face Adjustment Version', zAddAssetAttr.ZFACEREGIONS AS 'zAddAssetAttr-Face Regions HEX', zAddAssetAttr.ZFACEANALYSISVERSION AS 'zAddAssetAttr-Face Analysis Version', @@ -5896,7 +5855,7 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w zDetFace.ZADJUSTMENTVERSION AS 'zDetFace-Adjustment Version', zDetFace.ZUUID AS 'zDetFace-UUID-4TableStart', zPerson.ZPERSONUUID AS 'zPerson-Person UUID-4TableStart', - zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-iOS18', + zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence', zPerson.ZMDID AS 'zPerson - MD ID', CASE zPerson.ZASSETSORTORDER WHEN 0 THEN '0-StillTesting' @@ -6493,17 +6452,17 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w zMedAnlyAstAttr.ZPROBABLEROTATIONDIRECTION AS 'zMedAnlyAstAttr-Probable Rotation Direction', zMedAnlyAstAttr.ZSCREENTIMEDEVICEIMAGESENSITIVITY AS 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity', zMedAnlyAstAttr.ZCOLORNORMALIZATIONDATA AS 'zMedAnlyAstAttr-Color Normalization Data', - zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18', - zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version-iOS18', - zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version-iOS18', - zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18', + zMedAnlyAstAttr.ZMEDIAANALYSISIMAGEVERSION AS 'zMedAnlyAstAttr-Media_Analysis Image_Version', + zMedAnlyAstAttr.ZIMAGECAPTIONVERSION AS 'zMedAnlyAstAttr-Image_Caption_Version', + zMedAnlyAstAttr.ZVIDEOCAPTIONVERSION AS 'zMedAnlyAstAttr-Video_Caption_Version', + zMedAnlyAstAttr.ZVALOCATIONANALYSISVERSION AS 'zMedAnlyAstAttr-VA_Location_Analysis_Version', zAssetAnalyState.ZASSETUUID AS 'zAssetAnalyState-Asset UUID-4TableStart', zAssetAnalyState.ZANALYSISSTATE AS 'zAssetAnalyState-Analyisis State', zAssetAnalyState.ZWORKERFLAGS AS 'zAssetAnalyState-Worker Flags', zAssetAnalyState.ZWORKERTYPE AS 'zAssetAnalyState-Worker Type', DateTime(zAssetAnalyState.ZIGNOREUNTILDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Ignore Until Date', DateTime(zAssetAnalyState.ZLASTIGNOREDDATE + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Last Ignored Date', - zAssetAnalyState.ZSORTTOKEN AS 'zAssetAnalyState-Sort Token', + DateTime(zAssetAnalyState.ZSORTTOKEN + 978307200, 'UNIXEPOCH') AS 'zAssetAnalyState-Sort Token', zMedAnlyAstAttr.ZCHARACTERRECOGNITIONATTRIBUTES AS 'zMedAnlyAstAttr-Character Recognition Attr', zCharRecogAttr.ZALGORITHMVERSION AS 'zCharRecogAttr-Algorithm Version', zCharRecogAttr.ZADJUSTMENTVERSION AS 'zCharRecogAttr-Adjustment Version', @@ -6571,13 +6530,13 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w zAddAssetAttr.Z_OPT AS 'ZAddAssetAttr-zOPT', zAddAssetAttr.ZASSET AS 'zAddAssetAttr-zAsset= zAsset_zPK', zAddAssetAttr.ZUNMANAGEDADJUSTMENT AS 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18-4Queryend', + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-4Queryend', zAddAssetAttr.ZPUBLICGLOBALUUID AS 'zAddAssetAttr-Public Global UUID', zAddAssetAttr.ZDEFERREDPHOTOIDENTIFIER AS 'zAddAssetAttr-Deferred Photo Identifier', zAddAssetAttr.ZORIGINALASSETSUUID AS 'zAddAssetAttr-Original Assets UUID', zAddAssetAttr.ZIMPORTSESSIONID AS 'zAddAssetAttr-Import Session ID', zAddAssetAttr.ZORIGINATINGASSETIDENTIFIER AS 'zAddAssetAttr-Originating Asset Identifier-4endquery', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4endquery', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-4endquery', zAlbumList.Z_PK AS 'zAlbumList-zPK= Album List Key', zAlbumList.Z_ENT AS 'zAlbumList-zENT', zAlbumList.Z_OPT AS 'zAlbumList-zOPT', @@ -6684,11 +6643,11 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w zCompAssetAttr.Z_ENT AS 'zCompAssetAttr-zEnt', zCompAssetAttr.Z_OPT AS 'zCompAssetAttr-zOpt', zCompAssetAttr.ZASSET AS 'zCompAssetAttr-Asset Key', - zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18', - zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18', - zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18', - zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT-iOS18', - zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT-iOS18', + zAsset.ZCOMPUTESYNCATTRIBUTES AS 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK', + zCompSyncAttr.Z_PK AS 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr', + zCompSyncAttr.ZASSET AS 'zCompSyncAttr-zAsset= zAsset-zPK', + zCompSyncAttr.Z_ENT AS 'zCompSyncAttr-zENT', + zCompSyncAttr.Z_OPT AS 'zCompSyncAttr-zOPT', zDetFace.Z_PK AS 'zDetFace-zPK', zDetFace.Z_ENT AS 'zDetFace-zEnt', zDetFace.Z_OPT AS 'zDetFace.zOpt', @@ -6738,8 +6697,8 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w zIntResou.Z_ENT AS 'zIntResou-zENT', zIntResou.Z_OPT AS 'zIntResou-zOPT', zIntResou.ZASSET AS 'zIntResou-Asset= zAsset_zPK', - zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-iOS18-4Queryend', - zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-iOS18-4Queryend', + zIntResou.ZFINGERPRINT AS 'zIntResou-Fingerprint-4Queryend', + zIntResou.ZSTABLEHASH AS 'zIntResou-Stable Hash-4Queryend', zIntResou.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'zIntResou-Cloud Delete Asset UUID With Resource Type', zMedAnlyAstAttr.Z_PK AS 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata', zMedAnlyAstAttr.Z_ENT AS 'zMedAnlyAstAttr-zEnt', @@ -6762,7 +6721,7 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w zPerson.ZKEYFACE AS 'zPerson-KeyFace=zDetFace-zPK', zPerson.ZASSOCIATEDFACEGROUP AS 'zPerson-Assoc Face Group Key', zPerson.ZPERSONUUID AS 'zPerson-Person UUID', - zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence-iOS18', + zPerson.ZISMECONFIDENCE AS 'zPerson-Is_Me_Confidence', zPhotoAnalysisAssetAttr.Z_PK AS 'zPhotoAnalysisAssetAttr-zPK', zPhotoAnalysisAssetAttr.Z_ENT AS 'zPhotoAnalysisAssetAttr-zEnt', zPhotoAnalysisAssetAttr.Z_OPT AS 'zPhotoAnalysisAssetAttr-zOpt', @@ -6791,8 +6750,8 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w SBRAzSugg.Z_OPT AS 'SBRAzSugg-zOPT', SBRAzSugg.ZUUID AS 'SBRAzSugg-UUID', z3SuggBRA.Z_3REPRESENTATIVEASSETS AS 'z3SuggBRA-3RepAssets', - z3SuggBRA.Z_66SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-66SuggBeingRepAssets', - z3SuggBKA.Z_66SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-66SuggBeingKeyAssets= zSugg-zPK', + z3SuggBRA.Z_65SUGGESTIONSBEINGREPRESENTATIVEASSETS AS 'z3SuggBRA-65SuggBeingRepAssets', + z3SuggBKA.Z_65SUGGESTIONSBEINGKEYASSETS AS 'z3SuggBKA-65SuggBeingKeyAssets= zSugg-zPK', z3SuggBKA.Z_3KEYASSETS1 AS 'z3SuggBKA-3KeyAssets1= zAsset-zPK', zUnmAdj.Z_PK AS 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key', zUnmAdj.Z_OPT AS 'zUnmAdj-zOPT', @@ -6811,22 +6770,22 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w zVisualSearchAttr.Z_ENT AS 'zVisualSearchAttr-zENT', zVisualSearchAttr.Z_OPT AS 'zVisualSearchAttr-zOPT', zVisualSearchAttr.ZMEDIAANALYSISASSETATTRIBUTES AS 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK', - z30AlbumLists.Z_30ALBUMS AS 'z30AlbumList-30Albums= zGenAlbum-zPK', - z30AlbumLists.Z_2ALBUMLISTS AS 'z30AlbumList-Album List Key', - z30AlbumLists.Z_FOK_30ALBUMS AS 'z30AlbumList-FOK30Albums Key', - z31Assets.Z_31ALBUMS AS 'z31Assets-31Albums= zGenAlbum-zPK', - z31Assets.Z_3ASSETS AS 'z31Assets-3Asset Key= zAsset-zPK in the Album', - z31Assets.Z_FOK_3ASSETS AS 'z31Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY', + z29AlbumLists.Z_29ALBUMS AS 'z29AlbumList-29Albums= zGenAlbum-zPK', + z29AlbumLists.Z_2ALBUMLISTS AS 'z29AlbumList-Album List Key', + z29AlbumLists.Z_FOK_29ALBUMS AS 'z29AlbumList-FOK29Albums Key', + z30Assets.Z_30ALBUMS AS 'z30Assets-30Albums= zGenAlbum-zPK', + z30Assets.Z_3ASSETS AS 'z30Assets-3Asset Key= zAsset-zPK in the Album', + z30Assets.Z_FOK_3ASSETS AS 'z30Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY', z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AS 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK', z3MemoryBCAs.Z_3CURATEDASSETS AS 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK', - z3MemoryBCAs.Z_52MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-52MemoriesBeingCuratedAssets= zMemory-zPK', + z3MemoryBCAs.Z_51MEMORIESBEINGCURATEDASSETS AS 'z3MemoryBCAs-51MemoriesBeingCuratedAssets= zMemory-zPK', z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK', - z3MemoryBECAs.Z_52MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-52MemoriesBeingExtCuratedAssets= zMemory-zPK', + z3MemoryBECAs.Z_51MEMORIESBEINGEXTENDEDCURATEDASSETS AS 'z3MemoryBECAs-51MemoriesBeingExtCuratedAssets= zMemory-zPK', z3MemoryBRAs.Z_3REPRESENTATIVEASSETS1 AS 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK', - z3MemoryBRAs.Z_52MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK', + z3MemoryBRAs.Z_51MEMORIESBEINGREPRESENTATIVEASSETS AS 'z3MemoryBRAs-51RepresentativeAssets= zMemory-zPK', z3MemoryBUCAs.Z_3USERCURATEDASSETS AS 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK', - z3MemoryBUCAs.Z_52MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-52MemoriesBeingUserCuratedAssets= zMemory-zPK', - z3MemoryBCUAs.Z_52MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-52Memories Being Custom User Assets', + z3MemoryBUCAs.Z_51MEMORIESBEINGUSERCURATEDASSETS AS 'z3MemoryBUCAs-51MemoriesBeingUserCuratedAssets= zMemory-zPK', + z3MemoryBCUAs.Z_51MEMORIESBEINGCUSTOMUSERASSETS AS 'z3MemoryBCAs-51Memories Being Custom User Assets', z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-3Custom User Assets', z3MemoryBCUAs.Z_FOK_3CUSTOMUSERASSETS AS 'z3MemoryBCAs-FOK-3Custom User Assets' FROM ZASSET zAsset @@ -6834,15 +6793,14 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w LEFT JOIN ZEXTENDEDATTRIBUTES zExtAttr ON zExtAttr.Z_PK = zAsset.ZEXTENDEDATTRIBUTES LEFT JOIN ZINTERNALRESOURCE zIntResou ON zIntResou.ZASSET = zAsset.Z_PK LEFT JOIN ZSCENEPRINT zSceneP ON zSceneP.Z_PK = zAddAssetAttr.ZSCENEPRINT - LEFT JOIN Z_31ASSETS z31Assets ON z31Assets.Z_3ASSETS = zAsset.Z_PK - LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z31Assets.Z_31ALBUMS + LEFT JOIN Z_30ASSETS z30Assets ON z30Assets.Z_3ASSETS = zAsset.Z_PK + LEFT JOIN ZGENERICALBUM zGenAlbum ON zGenAlbum.Z_PK = z30Assets.Z_30ALBUMS LEFT JOIN ZUNMANAGEDADJUSTMENT zUnmAdj ON zAddAssetAttr.ZUNMANAGEDADJUSTMENT = zUnmAdj.Z_PK - LEFT JOIN Z_30ALBUMLISTS z30AlbumLists ON z30AlbumLists.Z_30ALBUMS = zGenAlbum.Z_PK - LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z30AlbumLists.Z_2ALBUMLISTS + LEFT JOIN Z_29ALBUMLISTS z29AlbumLists ON z29AlbumLists.Z_29ALBUMS = zGenAlbum.Z_PK + LEFT JOIN ZALBUMLIST zAlbumList ON zAlbumList.Z_PK = z29AlbumLists.Z_2ALBUMLISTS LEFT JOIN ZGENERICALBUM ParentzGenAlbum ON ParentzGenAlbum.Z_PK = zGenAlbum.ZPARENTFOLDER LEFT JOIN ZGENERICALBUM SWYConverszGenAlbum ON SWYConverszGenAlbum.Z_PK = zAsset.ZCONVERSATION LEFT JOIN ZASSETDESCRIPTION zAssetDes ON zAssetDes.Z_PK = zAddAssetAttr.ZASSETDESCRIPTION - LEFT JOIN ZGENERATEDASSETDESCRIPTION zGenAsstDesc ON zGenAsstDesc.Z_PK = zAsset.ZGENERATEDASSETDESCRIPTION LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAzCldMastMedData ON AAAzCldMastMedData.Z_PK = zAddAssetAttr.ZMEDIAMETADATA LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMzCldMastMedData ON CMzCldMastMedData.Z_PK = zCldMast.ZMEDIAMETADATA @@ -6869,1403 +6827,1331 @@ def get_ph98ios18refforassetanalysissyndpl(files_found, report_folder, seeker, w LEFT JOIN ZFACECROP zFaceCrop ON zPerson.Z_PK = zFaceCrop.ZPERSON LEFT JOIN ZDETECTEDFACEGROUP zDetFaceGroup ON zDetFaceGroup.Z_PK = zDetFace.ZFACEGROUP LEFT JOIN Z_3MEMORIESBEINGCURATEDASSETS z3MemoryBCAs ON zAsset.Z_PK = z3MemoryBCAs.Z_3CURATEDASSETS - LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_52MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK - LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_52MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK - LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_52MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK - LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_52MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK - LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS1 AND z3MemoryBRAs.Z_52MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK - LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_52MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK + LEFT JOIN ZMEMORY zMemory ON z3MemoryBCAs.Z_51MEMORIESBEINGCURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGCUSTOMUSERASSETS z3MemoryBCUAs ON zAsset.Z_PK = z3MemoryBCUAs.Z_3CUSTOMUSERASSETS AND z3MemoryBCUAs.Z_51MEMORIESBEINGCUSTOMUSERASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGEXTENDEDCURATEDASSETS z3MemoryBECAs ON zAsset.Z_PK = z3MemoryBECAs.Z_3EXTENDEDCURATEDASSETS AND z3MemoryBECAs.Z_51MEMORIESBEINGEXTENDEDCURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGMOVIECURATEDASSETS z3MemoryBMCAs ON zAsset.Z_PK = z3MemoryBMCAs.Z_3MOVIECURATEDASSETS AND z3MemoryBMCAs.Z_51MEMORIESBEINGMOVIECURATEDASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGREPRESENTATIVEASSETS z3MemoryBRAs ON zAsset.Z_PK = z3MemoryBRAs.Z_3REPRESENTATIVEASSETS1 AND z3MemoryBRAs.Z_51MEMORIESBEINGREPRESENTATIVEASSETS = zMemory.Z_PK + LEFT JOIN Z_3MEMORIESBEINGUSERCURATEDASSETS z3MemoryBUCAs ON zAsset.Z_PK = z3MemoryBUCAs.Z_3USERCURATEDASSETS AND z3MemoryBUCAs.Z_51MEMORIESBEINGUSERCURATEDASSETS = zMemory.Z_PK LEFT JOIN ZUSERFEEDBACK zUserFeedback ON zUserFeedback.ZMEMORY = zMemory.Z_PK LEFT JOIN ZMOMENT zMoment ON zMoment.Z_PK = zAsset.ZMOMENT LEFT JOIN Z_3SUGGESTIONSBEINGKEYASSETS z3SuggBKA ON z3SuggBKA.Z_3KEYASSETS1 = zAsset.Z_PK - LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_66SUGGESTIONSBEINGKEYASSETS + LEFT JOIN ZSUGGESTION SBKAzSugg ON SBKAzSugg.Z_PK = z3SuggBKA.Z_65SUGGESTIONSBEINGKEYASSETS LEFT JOIN Z_3SUGGESTIONSBEINGREPRESENTATIVEASSETS z3SuggBRA ON z3SuggBRA.Z_3REPRESENTATIVEASSETS = zAsset.Z_PK - LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_66SUGGESTIONSBEINGREPRESENTATIVEASSETS + LEFT JOIN ZSUGGESTION SBRAzSugg ON SBRAzSugg.Z_PK = z3SuggBRA.Z_65SUGGESTIONSBEINGREPRESENTATIVEASSETS ORDER BY zAsset.ZADDEDDATE - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], - row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], - row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], - row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], - row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], - row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], - row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], - row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], - row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], - row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], - row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], - row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], - row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], - row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], - row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], - row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], - row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], - row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], - row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], - row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], - row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], - row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], - row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], - row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], - row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], - row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], - row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], - row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], - row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], - row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], - row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], - row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], - row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], - row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], - row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], - row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], - row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], - row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], - row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], - row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], - row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], - row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], - row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], - row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], - row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], - row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], - row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], - row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], - row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], - row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], - row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], - row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], - row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], - row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], - row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], - row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], - row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], - row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], - row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], - row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], - row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], - row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], - row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], - row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], - row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], - row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], - row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], - row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], - row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], - row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], - row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], - row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], - row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], - row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], - row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], - row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], - row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], - row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], - row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], - row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], - row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], - row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], - row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], - row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], - row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], - row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], - row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], - row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], - row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], - row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], - row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], - row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], - row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], - row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], - row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], - row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], - row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], - row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], - row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], - row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], - row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], - row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], - row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], - row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], - row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], - row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], - row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], - row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], - row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], - row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], - row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], - row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], - row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], - row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], - row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], - row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], - row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], - row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], - row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], - row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], - row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], - row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], - row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], - row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], - row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], - row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], - row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], - row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], - row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], - row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], - row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], - row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], - row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], - row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], - row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], - row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093], - row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100], - row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107], - row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114], - row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121], - row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128], - row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135], - row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142], - row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149], - row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156], - row[1157], row[1158], row[1159], row[1160], row[1161], row[1162], row[1163], - row[1164], row[1165], row[1166], row[1167], row[1168], row[1169])) - - counter += 1 + ''' - description = ('Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' - ' This parser includes the largest set of decoded data based on testing and research' - ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' - ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' - ' TimelineExplorer to view, search and filter the results.') - report = ArtifactHtmlReport('Ph98.2-iOS18_Ref_for_Asset_Analysis-SyndPL') - report.start_artifact_report(report_folder, 'Ph98.2-iOS18_Ref_for_Asset_Analysis-SyndPL', description) - report.add_script() - data_headers = ('zAsset Complete-0', - 'zAsset-zPK-4QueryStart-1', - 'zAddAssetAttr-zPK-4QueryStart-2', - 'zAsset-UUID = store.cloudphotodb-4QueryStart-3', - 'zAddAssetAttr-Original Stable Hash-iOS18-4QueryStart-4', - 'zIntResou-Fingerprint-iOS18-4QueryStart-5', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4QueryStart-6', - 'zIntResou-Stable Hash-iOS18-4QueryStart-7', - 'zAsset-Bundle Scope-8', - 'zAsset-Syndication State-9', - 'zAsset-Cloud is My Asset-10', - 'zAsset-Cloud is deletable-Asset-11', - 'zAsset-Cloud_Local_State-12', - 'zAsset-Visibility State-13', - 'zExtAttr-Camera Make-14', - 'zExtAttr-Camera Model-15', - 'zExtAttr-Lens Model-16', - 'zExtAttr-Flash Fired-17', - 'zExtAttr-Focal Lenght-18', - 'zExtAttr-Focal Lenth in 35MM-19', - 'zExtAttr-Digital Zoom Ratio-20', - 'zExtAttr-Generative_AI_Type-iOS18-21', - 'zExtAttr-Credit-iOS18-22', - 'zAsset-Derived Camera Capture Device-23', - 'zAsset-Capture_Session_Identifier-iOS18-24', - 'zAddAssetAttr-Camera Captured Device-25', - 'zAddAssetAttr-Imported by-26', - 'zCldMast-Imported By-27', - 'zAddAssetAttr.Imported by Bundle Identifier-28', - 'zAddAssetAttr-Imported By Display Name-29', - 'zCldMast-Imported by Bundle ID-30', - 'zCldMast-Imported by Display Name-31', - 'zAsset-ImageRequestHints-HEX-Path-32', - 'zAsset-Saved Asset Type-33', - 'zAsset-Is_Recently_Saved-iOS18-34', - 'zAsset-Directory-Path-35', - 'zAsset-Filename-36', - 'zAddAssetAttr- Original Filename-37', - 'zCldMast- Original Filename-38', - 'zAddAssetAttr- Syndication Identifier-SWY-Files-39', - 'zAsset-Active Library Scope Participation State -4QueryStart-40', - 'zAsset-Library Scope Share State- StillTesting -4QueryStart-41', - 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-42', - 'SPLzShare-Cloud Video Count-SPL -4QueryStart-43', - 'zAsset-Added Date-44', - 'zAsset- SortToken -CameraRoll-45', - 'zAddAssetAttr-Date Created Source-46', - 'zAsset-Date Created-47', - 'zCldMast-Creation Date-48', - 'zIntResou-CldMst Date Created-49', - 'zAddAssetAttr-Time Zone Name-50', - 'zAddAssetAttr-Time Zone Offset-51', - 'zAddAssetAttr-Inferred Time Zone Offset-52', - 'zAddAssetAttr-EXIF-String-53', - 'zAsset-Modification Date-54', - 'zAddAssetAttr-Last Viewed Date-55', - 'zAsset-Last Shared Date-56', - 'zCldMast-Cloud Local State-57', - 'zCldMast-Import Date-58', - 'zAddAssetAttr-Last Upload Attempt Date-SWY_Files-59', - 'zAddAssetAttr-Import Session ID-4QueryStart-60', - 'zAddAssetAttr-Alt Import Image Date-61', - 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-62', - 'zAsset-Cloud Batch Publish Date-63', - 'zAsset-Cloud Server Publish Date-64', - 'zAsset-Cloud Download Requests-65', - 'zAsset-Cloud Batch ID-66', - 'zAddAssetAttr-Upload Attempts-67', - 'zAsset-Latitude-68', - 'zExtAttr-Latitude-69', - 'zAsset-Longitude-70', - 'zExtAttr-Longitude-71', - 'zAddAssetAttr-GPS Horizontal Accuracy-72', - 'zAddAssetAttr-Location Hash-73', - 'zAsset-Location Data-HEX-74', - 'zAddAssetAttr-Reverse Location Is Valid-75', - 'zAddAssetAttr-Reverse Location Data-76', - 'zAddAssetAttr-Shifted Location Valid-77', - 'zAddAssetAttr-Shifted Location Data-78', - 'ParentzGenAlbum-UUID-4QueryStart-79', - 'zGenAlbum-UUID-4QueryStart-80', - 'SWYConverszGenAlbum-UUID-4QueryStart-81', - 'ParentzGenAlbum-Cloud GUID-4QueryStart-82', - 'zGenAlbum-Cloud GUID-4QueryStart-83', - 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-84', - 'zCldShareAlbumInvRec-Album GUID-4QueryStart-85', - 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-86', - 'zGenAlbum-Project Render UUID-4QueryStart-87', - 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-88', - 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-89', - 'zGenAlbum-Cloud_Local_State-4QueryStart-90', - 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-91', - 'ParentzGenAlbum- Creation Date- 4QueryStart-92', - 'zGenAlbum- Creation Date- 4QueryStart-93', - 'SWYConverszGenAlbum- Creation Date- 4QueryStart-94', - 'zGenAlbum- Cloud Creation Date- 4QueryStart-95', - 'SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-96', - 'zGenAlbum- Start Date- 4QueryStart-97', - 'SWYConverszGenAlbum- Start Date- 4QueryStart-98', - 'zGenAlbum- End Date- 4QueryStart-99', - 'SWYConverszGenAlbum- End Date- 4QueryStart-100', - 'zGenAlbum-Cloud Subscription Date- 4QueryStart-101', - 'SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-102', - 'ParentzGenAlbum- Title- 4QueryStart-103', - 'zGenAlbum- Title-User&System Applied- 4QueryStart-104', - 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-105', - 'zGenAlbum-Import Session ID-SWY- 4QueryStart-106', - 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-107', - 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-108', - 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-109', - 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-110', - 'SWYConverszGenAlbum- Syndicate-4QueryStart-111', - 'zGenAlbum-zENT- Entity- 4QueryStart-112', - 'ParentzGenAlbum- Kind- 4QueryStart-113', - 'zGenAlbum-Album Kind- 4QueryStart-114', - 'SWYConverszGenAlbum-Album Kind- 4QueryStart-115', - 'AAAzCldMastMedData-zOPT-4TableStart-116', - 'zAddAssetAttr-Media Metadata Type-117', - 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-118', - 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-119', - 'AAAzCldMastMedData-Data-HEX-120', - 'CldMasterzCldMastMedData-zOPT-4TableStart-121', - 'zCldMast-Media Metadata Type-122', - 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-123', - 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-124', - 'CMzCldMastMedData-Data-HEX-125', - 'zAsset-Search Index Rebuild State-126', - 'zAddAssetAttr-Syndication History-127', - 'zMedAnlyAstAttr-Syndication Processing Version-128', - 'zMedAnlyAstAttr-Syndication Processing Value-129', - 'zAsset-Orientation-130', - 'zAddAssetAttr-Original Orientation-131', - 'zAsset-Kind-132', - 'zAsset-Is_Detected_Screenshot-iOS18-133', - 'zAsset-Kind-Sub-Type-134', - 'zAddAssetAttr-Cloud Kind Sub Type-135', - 'zAsset-Playback Style-136', - 'zAsset-Playback Variation-137', - 'zAddAssetAttr.View_Presentation-iOS18-138', - 'zAsset-Video Duration-139', - 'zExtAttr-Duration-140', - 'zAsset-Video CP Duration-141', - 'zAddAssetAttr-Video CP Duration Time Scale-142', - 'zAsset-Video CP Visibility State-143', - 'zAddAssetAttr-Video CP Display Value-144', - 'zAddAssetAttr-Video CP Display Time Scale-145', - 'zIntResou-Datastore Class ID-146', - 'zAsset-Cloud Placeholder Kind-147', - 'zIntResou-Local Availability-148', - 'zIntResou-Local Availability Target-149', - 'zIntResou-Cloud Local State-150', - 'zIntResou-Remote Availability-151', - 'zIntResou-Remote Availability Target-152', - 'zIntResou-Transient Cloud Master-153', - 'zIntResou-Side Car Index-154', - 'zAsset-UUID = store.cloudphotodb-4TableStart-155', - 'zAddAssetAttr-Orignial Stable Hash-iOS18-4TableStart-156', - 'zIntResou-Fingerprint-iOS18-4TableStart-157', - 'zIntResou-Stable Hash-iOS18-4TableStart-158', - 'zIntResou- File ID-159', - 'zIntResou-Version-160', - 'zAddAssetAttr- Original-File-Size-161', - 'zIntResou-Resource Type-162', - 'zIntResou-DataStoreKeyData-HEX-163', - 'zIntResou-Datastore Sub-Type-164', - 'zIntResou-Cloud Source Type-165', - 'zIntResou-Data Length-166', - 'zIntResou-Recipe ID-167', - 'zIntResou-Cloud Last Prefetch Date-168', - 'zIntResou-Cloud Prefetch Count-169', - 'zIntResou- Cloud-Last-OnDemand Download-Date-170', - 'zIntResou-UniformTypeID_UTI_Conformance_Hint-171', - 'zIntResou-Compact-UTI-172', - 'zAsset-Uniform Type ID-173', - 'zAsset-Original Color Space-174', - 'zCldMast-Uniform_Type_ID-175', - 'zCldMast-Full Size JPEG Source-176', - 'zAsset-HDR Gain-177', - 'zAsset-zHDR_Type-178', - 'zExtAttr-Codec-179', - 'zIntResou-Codec Four Char Code Name-180', - 'zCldMast-Codec Name-181', - 'zCldMast-Video Frame Rate-182', - 'zCldMast-Placeholder State-183', - 'zAsset-Depth_Type-184', - 'zAsset-Avalanche UUID-4TableStart-185', - 'zAsset-Avalanche_Kind-iOS18-186', - 'zAsset-Avalanche_Pick_Type-BurstAsset-187', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-188', - 'zAddAssetAttr-Cloud Recovery State-189', - 'zAddAssetAttr-Cloud State Recovery Attempts Count-190', - 'zAsset-Deferred Processing Needed-191', - 'zAsset-Video Deferred Processing Needed-192', - 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-193', - 'zAddAssetAttr-Deferred Processing Candidate Options-194', - 'zAsset-Adjustments_State-Camera-Effects-Filters-iOS18-195', - 'zUnmAdj-UUID-4TableStart-196', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4TableStart-197', - 'zUnmAdj-Other Adjustments Fingerprint-4TableStart-198', - 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart-199', - 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-iOS18-4TableStart-200', - 'zAsset-Adjustment Timestamp-201', - 'zUnmAdj-Adjustment Timestamp-202', - 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-iOS18-203', - 'zAddAssetAttr-Editor Bundle ID-204', - 'zUnmAdj-Editor Localized Name-205', - 'zUnmAdj-Adjustment Format ID-206', - 'zAddAssetAttr-Montage-207', - 'zUnmAdj-Adjustment Render Types-208', - 'zUnmAdj-Adjustment Format Version-209', - 'zUnmAdj-Adjustment Base Image Format-210', - 'zCompSyncAttr-Local_Analysis_Stage-iOS18-211', - 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-212', - 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-213', - 'zAsset-Favorite-214', - 'zAsset-Hidden-215', - 'zAsset-Trashed State-LocalAssetRecentlyDeleted-216', - 'zAsset-Trashed Date-217', - 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-218', - 'zAsset-Delete-Reason-219', - 'zIntResou-Trash State-220', - 'zIntResou-Trashed Date-221', - 'zAsset-Cloud Delete State-222', - 'zIntResou-Cloud Delete State-223', - 'zAddAssetAttr-PTP Trashed State-224', - 'zIntResou-PTP Trashed State-225', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-226', - 'zMedAnlyAstAttr-Media Analysis Timestamp-227', - 'zAsset-Analysis State Modificaion Date-228', - 'zAddAssetAttr- Pending View Count-229', - 'zAddAssetAttr- View Count-230', - 'zAddAssetAttr- Pending Play Count-231', - 'zAddAssetAttr- Play Count-232', - 'zAddAssetAttr- Pending Share Count-233', - 'zAddAssetAttr- Share Count-234', - 'zAddAssetAttr-Allowed for Analysis-235', - 'zAddAssetAttr-Scene Analysis Version-236', - 'zAddAssetAttr-Scene Analysis is From Preview-237', - 'zAddAssetAttr-Scene Analysis Timestamp-238', - 'zAsset-Duplication Asset Visibility State-239', - 'zAddAssetAttr-Destination Asset Copy State-240', - 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-241', - 'zSceneP-Data-HEX NSKeyed Plist-242', - 'zSceneP-Duplicate Matching Data-HEX NSKeyed Plist-243', - 'zSceneP-Duplicate Matching Alternat Data-HEX NSKeyed Plist-244', - 'zAddAssetAttr-Source Asset for Duplication Scope ID-245', - 'zCldMast-Source Master For Duplication Scope ID-246', - 'zAddAssetAttr-Source Asset For Duplication ID-247', - 'zCldMast-Source Master for Duplication ID-248', - 'zAddAssetAttr-Variation Suggestions States-249', - 'zAsset-High Frame Rate State-250', - 'zAsset-Video Key Frame Time Scale-251', - 'zAsset-Video Key Frame Value-252', - 'zAsset-Current_Sleet_Cast-iOS18-253', - 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-254', - 'zExtAttr-Sleet_Rendering_Version-iOS18-255', - 'zExtAttr-Sleet_Intensity-iOS18-256', - 'zExtAttr-Sleet_Tone_Bias-iOS18-257', - 'zExtAttr-Sleet_Color_Bias-iOS18-258', - 'zExtAttr-Sleet_Cast-iOS18-259', - 'zExtAttr-ISO-260', - 'zExtAttr-Metering Mode-261', - 'zExtAttr-Sample Rate-262', - 'zExtAttr-Track Format-263', - 'zExtAttr-White Balance-264', - 'zExtAttr-Aperture-265', - 'zExtAttr-BitRate-266', - 'zExtAttr-Exposure Bias-267', - 'zExtAttr-Frames Per Second-268', - 'zExtAttr-Shutter Speed-269', - 'zExtAttr-Slush Scene Bias-270', - 'zExtAttr-Slush Version-271', - 'zExtAttr-Slush Preset-272', - 'zExtAttr-Slush Warm Bias-273', - 'zAsset-Height-274', - 'zAddAssetAttr-Original Height-275', - 'zIntResou-Unoriented Height-276', - 'zAsset-Width-277', - 'zAddAssetAttr-Original Width-278', - 'zIntResou-Unoriented Width-279', - 'zShare-Thumbnail Image Data-280', - 'SPLzShare-Thumbnail Image Data-281', - 'zAsset-Thumbnail Index-282', - 'zAddAssetAttr-Embedded Thumbnail Height-283', - 'zAddAssetAttr-Embedded Thumbnail Length-284', - 'zAddAssetAttr-Embedded Thumbnail Offset-285', - 'zAddAssetAttr-Embedded Thumbnail Width-286', - 'zAddAssetAttr.Image Embedding Version-iOS18-287', - 'zAsset-Packed Acceptable Crop Rect-288', - 'zAsset-Packed Badge Attributes-289', - 'zAsset-Packed Preferred Crop Rect-290', - 'zAsset-Curation Score-291', - 'zAsset-Camera Processing Adjustment State-292', - 'zAsset-Depth Type-293', - 'zAsset-Is Magic Carpet-QuicktimeMOVfile-294', - 'zAddAssetAttr-Orig Resource Choice-295', - 'zAsset-Spatial Type-296', - 'zAddAssetAttr-Spatial Over Capture Group ID-297', - 'zAddAssetAttr-Object Saliency Rects Data-HEX NSKeyed Plist-298', - 'zAddAssetAttr-Original Hash-HEX-299', - 'zAddAssetAttr-Place Annotation Data-300', - 'zAddAssetAttr-Distance Identity-301', - 'zAddAssetAttr-Edited IPTC Attributes-302', - 'zGenAsstDesc-zAsset= zAsset-zPK-iOS18-303', - 'zAsset-Generated_Asset_Description= zGenAsstDesc-zPK-iOS18-304', - 'zGenAsstDesc-zPK= zAsset-GenAsstDesc-iOS18-305', - 'zGenAsstDesc-zENT-iOS18-306', - 'zGenAsstDesc-zOPT-iOS18-307', - 'zGenAsstDesc-Analysis_Timestamp-iOS18-308', - 'zGenAsstDesc-Analysis_Source_Type-iOS18-309', - 'zGenAsstDesc-Analysis Version-iOS18-310', - 'zGenAsstDesc-Description_Text-iOS18-311', - 'zAssetDes-Long Description-312', - 'zAddAssetAttr-Asset Description-313', - 'zAddAssetAttr-Title-Comments via Cloud Website-314', - 'zAddAssetAttr-Accessibility Description-315', - 'zAddAssetAttr-Photo Stream Tag ID-316', - 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-317', - 'zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-318', - 'zPhotoAnalysisAssetAttr-Wallpaper Properties Data-319', - 'zCldFeedEnt-Entry Date-320', - 'zCldFeedEnt-Entry_Is_Mine-iOS18-321', - 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-322', - 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-323', - 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-324', - 'zCldFeedEnt-Entry Priority Number-325', - 'zCldFeedEnt-Entry Type Number-326', - 'zCldSharedComment-Cloud GUID-4TableStart-327', - 'zCldSharedComment-Date-328', - 'zCldSharedComment-Comment Client Date-329', - 'zAsset-Cloud Last Viewed Comment Date-330', - 'zCldSharedComment-Type-331', - 'zCldSharedComment-Comment Text-332', - 'zCldSharedComment-Commenter Hashed Person ID-333', - 'zCldSharedComment-Batch Comment-334', - 'zCldSharedComment-Is a Caption-335', - 'zAsset-Cloud Has Comments by Me-336', - 'zCldSharedComment-Is My Comment-337', - 'zCldSharedComment-Is Deletable-338', - 'zAsset-Cloud Has Comments Conversation-339', - 'zAsset-Cloud Has Unseen Comments-340', - 'zCldSharedComment-Liked-341', - 'zAddAssetAttr-Share Type-342', - 'zAsset-Library Scope Share State- StillTesting-343', - 'zAsset-Active Library Scope Participation State-344', - 'zAddAssetAttr-Library Scope Asset Contributors To Update-345', - 'zShare-UUID-CMM-4TableStart-346', - 'SPLzShare-UUID-SPL-4TableStart-347', - 'zShare-zENT-CMM-348', - 'SPLzShare-zENT-SPL-349', - 'zSharePartic-z62SHARE-350', - 'SPLzSharePartic-z62SHARE-351', - 'zShare-Status-CMM-352', - 'zShare-Status-SPL-353', - 'zShare-Scope Type-CMM-354', - 'zShare-Scope Type-SPL-355', - 'zShare-Local Publish State-CMM-356', - 'SPLzShare-Local Publish State-SPL-357', - 'zShare-Public Permission-CMM-358', - 'SPLzShare-Public Permission-SPL-359', - 'zShare-Originating Scope ID-CMM-360', - 'SPLzShare-Originating Scope ID-SPL-361', - 'zShare-Scope ID-CMM-362', - 'SPLzShare-Scope ID-SPL-363', - 'zShare-Title-CMM-364', - 'SPLzShare-Title-SPL-365', - 'zShare-Share URL-CMM-366', - 'SPLzShare-Share URL-SPL-367', - 'zShare-Creation Date-CMM-368', - 'SPLzShare-Creation Date-SPL-369', - 'zShare-Start Date-CMM-370', - 'SPLzShare-Start Date-SPL-371', - 'zShare-End Date-CMM-372', - 'SPLzShare-End Date-SPL-373', - 'zShare-Expiry Date-CMM-374', - 'SPLzShare-Expiry Date-SPL-375', - 'zShare-Cloud Item Count-CMM-376', - 'SPLzShare-Cloud Item Count-SPL-377', - 'zShare-Asset Count-CMM-378', - 'SPLzShare-Asset Count-SPL-379', - 'zShare-Cloud Photo Count-CMM-380', - 'SPLzShare-Cloud Photo Count-SPL-381', - 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-382', - 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-383', - 'zShare-Photos Count-CMM-384', - 'SPLzShare-Photos Count-CMM-SPL-385', - 'zShare-Uploaded Photos Count-CMM-386', - 'SPLzShare-Uploaded Photos Count-SPL-387', - 'zShare-Cloud Video Count-CMM-388', - 'SPLzShare-Cloud Video Count-SPL-389', - 'zShare-Videos Count-CMM-390', - 'SPLzShare-Videos Count-SPL-391', - 'zShare-Uploaded Videos Count-CMM-392', - 'SPLzShare-Uploaded Videos Count-SPL-393', - 'zShare-Force Sync Attempted-CMM-394', - 'SPLzShare-Force Sync Attempted-SPL-395', - 'zShare-Cloud Local State-CMM-396', - 'SPLzShare-Cloud Local State-SPL-397', - 'zShare-Scope Syncing State-CMM-398', - 'SPLzShare-Scope Syncing State-SPL-399', - 'zShare-Auto Share Policy-CMM-400', - 'SPLzShare-Auto Share Policy-SPL-401', - 'zShare-Should Notify On Upload Completion-CMM-402', - 'SPLzShare-Should Notify On Upload Completion-SPL-403', - 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-404', - 'zShare-Trashed State-CMM-405', - 'SPLzShare-Trashed State-SPL-406', - 'zShare-Cloud Delete State-CMM-407', - 'SPLzShare-Cloud Delete State-SPL-408', - 'zShare-Trashed Date-CMM-409', - 'SPLzShare-Trashed Date-SPL-410', - 'zShare-LastParticipant Asset Trash Notification Date-CMM-411', - 'SPLzShare-LastParticipant Asset Trash Notification Date-SPL-412', - 'zShare-Last Participant Asset Trash Notification View Date-CMM-413', - 'SPLzShare-Last Participant Asset Trash Notification View Date-SPL-414', - 'zShare-Exit Source-CMM-415', - 'SPLzShare-Exit Source-SPL-416', - 'zShare-SPL_Exit State-CMM-417', - 'SPLzShare-SPL_Exit State-SPL-418', - 'zShare-Exit Type-CMM-419', - 'SPLzShare-Exit Type-SPL-420', - 'zShare-Should Ignor Budgets-CMM-421', - 'SPLzShare-Should Ignor Budgets-SPL-422', - 'zShare-Preview State-CMM-423', - 'SPLzShare-Preview State-SPL-424', - 'zShare-Preview Data-CMM-425', - 'SPLzShare-Preview Data-SPL-426', - 'zShare-Rules-CMM-427', - 'SPLzShare-Rules-SPL-428', - 'zShare-Thumbnail Image Data-CMM-429', - 'SPLzShare-Thumbnail Image Data-SPL-430', - 'zShare-Participant Cloud Update State-CMM-431', - 'SPLzShare-Participant Cloud Update State-SPL-432', - 'zSharePartic-UUID-4TableStart-433', - 'SPLzSharePartic-UUID-4TableStart-434', - 'zSharePartic-Acceptance Status-435', - 'SPLzSharePartic-Acceptance Status-436', - 'zSharePartic-Is Current User-437', - 'SPLzSharePartic-Is Current User-438', - 'zSharePartic-Role-439', - 'SPLzSharePartic-Role-440', - 'zSharePartic-Premission-441', - 'SPLzSharePartic-Premission-442', - 'zSharePartic-Participant ID-443', - 'SPLzSharePartic-Participant ID-444', - 'zSharePartic-User ID-445', - 'SPLzSharePartic-User ID-446', - 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-447', - 'SPLzSharePartic-zPK-4TableStart-448', - 'zSharePartic-zPK-4TableStart-449', - 'zSharePartic-Email Address-450', - 'SPLzSharePartic-Email Address-451', - 'zSharePartic-Phone Number-452', - 'SPLzSharePartic-Phone Number-453', - 'zSharePartic-Name Components-454', - 'SPLzSharePartic-Name Components-455', - 'zSharePartic-Exit State-456', - 'SPLzSharePartic-Exit State-457', - 'ParentzGenAlbum-UUID-4TableStart-458', - 'zGenAlbum-UUID-4TableStart-459', - 'SWYConverszGenAlbum-UUID-4TableStart-460', - 'ParentzGenAlbum-Cloud GUID-4TableStart-461', - 'zGenAlbum-Cloud GUID-4TableStart-462', - 'SWYConverszGenAlbum-Cloud GUID-4TableStart-463', - 'zCldShareAlbumInvRec-Album GUID-4TableStart-464', - 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-465', - 'zGenAlbum-Project Render UUID-4TableStart-466', - 'SWYConverszGenAlbum-Project Render UUID-4TableStart-467', - 'zAlbumList-Needs Reordering Number-468', - 'zGenAlbum-zENT- Entity-469', - 'ParentzGenAlbum-Kind-470', - 'zGenAlbum-Album Kind-471', - 'SWYConverszGenAlbum-Album Kind-472', - 'ParentzGenAlbum-Cloud-Local-State-473', - 'zGenAlbum-Cloud_Local_State-474', - 'SWYConverszGenAlbum-Cloud_Local_State-475', - 'ParentzGenAlbum- Title-476', - 'zGenAlbum- Title-User&System Applied-477', - 'SWYConverszGenAlbum- Title -User&System Applied-478', - 'zGenAlbum-Import Session ID-SWY-479', - 'zAsset- Conversation= zGenAlbum_zPK-480', - 'SWYConverszGenAlbum- Import Session ID-SWY-481', - 'zGenAlbum-Imported by Bundle Identifier-482', - 'SWYzGenAlbum-Imported by Bundle Identifier-483', - 'SWYConverszGenAlbum- Syndicate-484', - 'ParentzGenAlbum-Creation Date-485', - 'zGenAlbum-Creation Date-486', - 'SWYConverszGenAlbum-Creation Date-487', - 'zGenAlbum-Cloud Creation Date-488', - 'SWYConverszGenAlbum-Cloud Creation Date-489', - 'zGenAlbum-Start Date-490', - 'SWYConverszGenAlbum-Start Date-491', - 'zGenAlbum-End Date-492', - 'SWYConverszGenAlbum-End Date-493', - 'zGenAlbum-Cloud Subscription Date-494', - 'SWYConverszGenAlbum-Cloud Subscription Date-495', - 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-496', - 'SWYConverszGenAlbum-Cloud Metadata-HEX NSKeyed Plist-497', - 'ParentzGenAlbum-Pending Items Count-498', - 'zGenAlbum-Pending Items Count-499', - 'SWYConverszGenAlbum-Pending Items Count-500', - 'ParentzGenAlbum-Pending Items Type-501', - 'zGenAlbum-Pending Items Type-502', - 'SWYConverszGenAlbum-Pending Items Type-503', - 'zGenAlbum- Cached Photos Count-504', - 'SWYConverszGenAlbum- Cached Photos Count-505', - 'zGenAlbum- Cached Videos Count-506', - 'SWYConverszGenAlbum- Cached Videos Count-507', - 'zGenAlbum- Cached Count-508', - 'SWYConverszGenAlbum- Cached Count-509', - 'ParentzGenAlbum-Sync Event Order Key-510', - 'zGenAlbum-Sync Event Order Key-511', - 'SWYConverszGenAlbum-Sync Event Order Key-512', - 'zGenAlbum-Has Unseen Content-513', - 'SWYConverszGenAlbum-Has Unseen Content-514', - 'zGenAlbum-Unseen Asset Count-515', - 'SWYConverszGenAlbum-Unseen Asset Count-516', - 'zGenAlbum-is Owned-517', - 'SWYConverszGenAlbum-is Owned-518', - 'zGenAlbum-Cloud Relationship State-519', - 'SWYConverszGenAlbum-Cloud Relationship State-520', - 'zGenAlbum-Cloud Relationship State Local-521', - 'SWYConverszGenAlbum-Cloud Relationship State Local-522', - 'zGenAlbum-Cloud Owner Mail Key-523', - 'SWYConverszGenAlbum-Cloud Owner Mail Key-524', - 'zGenAlbum-Cloud Owner Frist Name-525', - 'SWYConverszGenAlbum-Cloud Owner Frist Name-526', - 'zGenAlbum-Cloud Owner Last Name-527', - 'SWYConverszGenAlbum-Cloud Owner Last Name-528', - 'zGenAlbum-Cloud Owner Full Name-529', - 'SWYConverszGenAlbum-Cloud Owner Full Name-530', - 'zGenAlbum-Cloud Person ID-531', - 'SWYConverszGenAlbum-Cloud Person ID-532', - 'zAsset-Cloud Owner Hashed Person ID-533', - 'zGenAlbum-Cloud Owner Hashed Person ID-534', - 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-535', - 'zGenAlbum-Local Cloud Multi-Contributors Enabled-536', - 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-537', - 'zGenAlbum-Cloud Multi-Contributors Enabled-538', - 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-539', - 'zGenAlbum-Cloud Album Sub Type-540', - 'SWYConverszGenAlbum-Cloud Album Sub Type-541', - 'zGenAlbum-Cloud Contribution Date-542', - 'SWYConverszGenAlbum-Cloud Contribution Date-543', - 'zGenAlbum-Cloud Last Interesting Change Date-544', - 'SWYConverszGenAlbum-Cloud Last Interesting Change Date-545', - 'zGenAlbum-Cloud Notification Enabled-546', - 'SWYConverszGenAlbum-Cloud Notification Enabled-547', - 'ParentzGenAlbum-Pinned-548', - 'zGenAlbum-Pinned-549', - 'SWYConverszGenAlbum-Pinned-550', - 'ParentzGenAlbum-Custom Sort Key-551', - 'zGenAlbum-Custom Sort Key-552', - 'SWYConverszGenAlbum-Custom Sort Key-553', - 'ParentzGenAlbum-Custom Sort Ascending-554', - 'zGenAlbum-Custom Sort Ascending-555', - 'SWYConverszGenAlbum-Custom Sort Ascending-556', - 'ParentzGenAlbum-Is Prototype-557', - 'zGenAlbum-Is Prototype-558', - 'SWYConverszGenAlbum-Is Prototype-559', - 'ParentzGenAlbum-Project Document Type-560', - 'zGenAlbum-Project Document Type-561', - 'SWYConverszGenAlbum-Project Document Type-562', - 'ParentzGenAlbum-Custom Query Type-563', - 'zGenAlbum-Custom Query Type-564', - 'SWYConverszGenAlbum-Custom Query Type-565', - 'ParentzGenAlbum-Trashed State-566', - 'ParentzGenAlbum-Trash Date-567', - 'zGenAlbum-Trashed State-568', - 'zGenAlbum-Trash Date-569', - 'SWYConverszGenAlbum-Trashed State-570', - 'SWYConverszGenAlbum-Trash Date-571', - 'ParentzGenAlbum-Cloud Delete State-572', - 'zGenAlbum-Cloud Delete State-573', - 'SWYConverszGenAlbum-Cloud Delete State-574', - 'zGenAlbum-Cloud Owner Whitelisted-575', - 'SWYConverszGenAlbum-Cloud Owner Whitelisted-576', - 'zGenAlbum-Cloud Local Public URL Enabled-577', - 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-578', - 'zGenAlbum-Cloud Public URL Enabled-579', - 'zGenAlbum-Public URL-580', - 'SWYConverszGenAlbum-Cloud Public URL Enabled-581', - 'SWYConverszGenAlbum-Public URL-582', - 'zGenAlbum-Key Asset Face Thumb Index-583', - 'SWYConverszGenAlbum-Key Asset Face Thumb Index-584', - 'zGenAlbum-Project Text Extension ID-585', - 'SWYConverszGenAlbum-Project Text Extension ID-586', - 'zGenAlbum-User Query Data-587', - 'SWYConverszGenAlbum-User Query Data-588', - 'zGenAlbum-Custom Query Parameters-589', - 'SWYConverszGenAlbum-Custom Query Parameters-590', - 'zGenAlbum-Project Data-591', - 'SWYConverszGenAlbum-Project Data-592', - 'zGenAlbum-Search Index Rebuild State-593', - 'SWYConverszGenAlbum-Search Index Rebuild State-594', - 'zGenAlbum-Duplicate Type-595', - 'SWYConverszGenAlbum-Duplicate Type-596', - 'zGenAlbum-Privacy State-597', - 'SWYConverszGenAlbum-Privacy State-598', - 'zCldShareAlbumInvRec-zUUID-4TableStart-599', - 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-600', - 'zCldShareAlbumInvRec-Invitation State Local-601', - 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-602', - 'zCldShareAlbumInvRec-Subscription Date-603', - 'zCldShareAlbumInvRec-Invitee First Name-604', - 'zCldShareAlbumInvRec-Invitee Last Name-605', - 'zCldShareAlbumInvRec-Invitee Full Name-606', - 'zCldShareAlbumInvRec-Invitee Hashed Person ID-607', - 'zCldShareAlbumInvRec-Invitee Email Key-608', - 'zGenAlbum-Key Asset Face ID-609', - 'zFaceCrop-Face Area Points-610', - 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence-iOS18-611', - 'zAsset-Face Adjustment Version-612', - 'zAddAssetAttr-Face Regions HEX-613', - 'zAddAssetAttr-Face Analysis Version-614', - 'zDetFace-Asset Visible-615', - 'zDetFacePrint-Data HEX-616', - 'zPerson-Contact Matching Dictionary HEX-617', - 'zPerson-Face Count-618', - 'zDetFace-Face Crop-619', - 'zDetFace-Face Algorithm Version-620', - 'zDetFace-Adjustment Version-621', - 'zDetFace-UUID-4TableStart-622', - 'zPerson-Person UUID-4TableStart-623', - 'zPerson-Is_Me_Confidence-iOS18-624', - 'zPerson - MD ID-625', - 'zPerson - Asset Sort Order-626', - 'zDetFace-Confirmed Face Crop Generation State-627', - 'zDetFace-Manual-628', - 'zDetFace-Detection Type-629', - 'zPerson-Detection Type-630', - 'zDetFace-VIP Model Type-631', - 'zDetFace-Name Source-632', - 'zDetFace-Cloud Name Source-633', - 'zPerson-Merge Candidate Confidence-634', - 'zPerson-Person URI-635', - 'zPerson-Display Name-636', - 'zPerson-Full Name-637', - 'zPerson-Cloud Verified Type-638', - 'zFaceCrop-State-639', - 'zFaceCrop-Type-640', - 'zFaceCrop-Resource Data-HEX-PHOTO used for FaceCrop-641', - 'zFaceCrop-UUID-4TableStart-642', - 'zPerson-Type-643', - 'zPerson-Verified Type-644', - 'zPerson-Gender Type-645', - 'zDetFace-Gender Type-646', - 'zDetFace-Center X-647', - 'zDetFace-Center Y-648', - 'zPerson-Age Type Estimate-649', - 'zDetFace-Age Type Estimate-650', - 'zDetFace-Ethnicity Type-651', - 'zDetFace-Skin Tone Type-652', - 'zDetFace-Hair Type-653', - 'zDetFace-Hair Color Type-654', - 'zDetFace-Head Gear Type-655', - 'zDetFace-Facial Hair Type-656', - 'zDetFace-Has Face Mask-657', - 'zDetFace-Pose Type-658', - 'zDetFace-Face Expression Type-659', - 'zDetFace-Has Smile-660', - 'zDetFace-Smile Type-661', - 'zDetFace-Lip Makeup Type-662', - 'zDetFace-Eyes State-663', - 'zDetFace-Is Left Eye Closed-664', - 'zDetFace-Is Right Eye Closed-665', - 'zDetFace-Gaze Center X-666', - 'zDetFace-Gaze Center Y-667', - 'zDetFace-Face Gaze Type-668', - 'zDetFace-Eye Glasses Type-669', - 'zDetFace-Eye Makeup Type-670', - 'zDetFace-Cluster Squence Number Key-671', - 'zDetFace-Grouping ID-672', - 'zDetFace-Master ID-673', - 'zDetFace-Quality-674', - 'zDetFace-Quality Measure-675', - 'zDetFace-Source Height-676', - 'zDetFace-Source Width-677', - 'zDetFace-Hidden-Asset Hidden-678', - 'zDetFace-In Trash-Recently Deleted-679', - 'zDetFace-Cloud Local State-680', - 'zDetFace-Training Type-681', - 'zDetFace.Pose Yaw-682', - 'zDetFace-Body Center X-683', - 'zDetFace-Body Center Y-684', - 'zDetFace-Body Height-685', - 'zDetFace-Body Width-686', - 'zDetFace-Roll-687', - 'zDetFace-Size-688', - 'zDetFace-Cluster Squence Number-689', - 'zDetFace-Blur Score-690', - 'zDetFacePrint-Face Print Version-691', - 'zMedAnlyAstAttr-Face Count-692', - 'zDetFaceGroup-UUID-4TableStart-693', - 'zDetFaceGroup-Person Builder State-694', - 'zDetFaceGroup-UnNamed Face Count-695', - 'zPerson-In Person Naming Model-696', - 'zPerson-Key Face Pick Source Key-697', - 'zPerson-Manual Order Key-698', - 'zPerson-Question Type-699', - 'zPerson-Suggested For Client Type-700', - 'zPerson-Merge Target Person-701', - 'zPerson-Cloud Local State-702', - 'zFaceCrop-Cloud Local State-703', - 'zFaceCrop-Cloud Type-704', - 'zPerson-Cloud Delete State-705', - 'zFaceCrop-Cloud Delete State-706', - 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-707', - 'zAsset-Highlight Visibility Score-708', - 'zMemory-UUID-4TableStart-709', - 'zMemory-AssetListPredicte-710', - 'zMemory-Score-711', - 'zMemory-SubTitle-712', - 'zMemory-Title-713', - 'zMemory-Category-714', - 'zMemory-SubCategory-715', - 'zMemory-Creation Date-716', - 'zMemory-Last Enrichment Date-717', - 'zMemory-User Action Options-718', - 'zMemory-Favorite Memory-719', - 'zMemory-View Count-720', - 'zMemory-Play Count-721', - 'zMemory-Rejected-722', - 'zMemory-Share Count-723', - 'zMemory-Sharing Composition-724', - 'zMemory-PhotosGraphData-HEX NSKeyed Plist-725', - 'zMemory-MovieAssetState-HEX NSKeyed Plist-726', - 'zMemory-MovieData-HEX NSKeyed Plist-727', - 'zMemory-Last Movie Play Date-728', - 'zMemory-Last Viewed Date-729', - 'zMemory-Pending Play Count Memory-730', - 'zMemory-Pending Share Count Memory-731', - 'zMemory-Pending View Count Memory-732', - 'zMemory-Pending State-733', - 'zMemory-Featured State-734', - 'zMemory-Photos Graph Version-735', - 'zMemory-Graph Memory Identifier-736', - 'zMemory-Notification State-737', - 'zMemory-Cloud Local State-738', - 'zMemory-Cloud Delete State-739', - 'zMemory-Story Color Grade Kind-740', - 'zMemory-Story Serialized Title Category-741', - 'zMemory-Syndicated Content State-742', - 'zMemory-Search Index Rebuild State-743', - 'zMemory-Black Listed Feature-744', - 'zMoment-UUID-4TableStart-745', - 'zMoment-Aggregation Score-746', - 'zMoment-Start Date-747', - 'zMoment-Representative Date-748', - 'zMoment-Timezone Offset-749', - 'zMoment-Modification Date-750', - 'zMoment-End Date-751', - 'zMoment-SubTitle-752', - 'zMoment-Localized Location Names-753', - 'zMoment-Title-754', - 'zMoment-Originator State-755', - 'zMoment-Sharing Composition-756', - 'zMoment-Cached Count Shared-757', - 'zMoment-Processed Location-758', - 'zMoment-Approx Latitude-759', - 'zMoment-Approx Longitude-760', - 'zMoment-GPS Horizontal Accuracy-761', - 'zMoment-Cache Count-762', - 'zMoment-Cached Photos Count-763', - 'zMoment-Cached Videos Count-764', - 'zMoment-Trashed State-765', - 'SBKAzSugg-UUID-4TableStart-766', - 'SBKAzSugg-Suggestion Context-767', - 'SBKAzSugg-Sharing Composition-768', - 'SBKAzSugg-Start Date-769', - 'SBKAzSugg-State-770', - 'SBKAzSugg-Featured State-771', - 'SBKAzSugg- Available Features-772', - 'SBKAzSugg-Notification State-773', - 'SBKAzSugg-Creation Date-774', - 'SBKAzSugg-End Date-775', - 'SBKAzSugg-Activation Date-776', - 'SBKAzSugg-Expunge Date-777', - 'SBKAzSugg-Relevant Until Date-778', - 'SBKAzSugg-Title-779', - 'SBKAzSugg-Sub Title-780', - 'SBKAzSugg-Cached Count-781', - 'SBKAzSugg-Cahed Photos Count-782', - 'SBKAzSugg-Cached Videos Count-783', - 'SBKAzSugg-Type-784', - 'SBKAzSugg-Sub Type-785', - 'SBKAzSugg-Action Data-786', - 'SBKAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-787', - 'SBKAzSugg-Version-788', - 'SBKAzSugg-Cloud Local State-789', - 'SBKAzSugg-Cloud Delete State-790', - 'SBRAzSugg-UUID-4TableStart-791', - 'SBRAzSugg-Suggestion Context-792', - 'SBRAzSugg-Sharing Composition-793', - 'SBRAzSugg-Start Date-794', - 'SBRAzSugg-State-795', - 'SBRAzSugg-Featured State-796', - 'SBRAzSugg- Available Features-797', - 'SBRAzSugg-Notification State-798', - 'SBRAzSugg-Creation Date-799', - 'SBRAzSugg-End Date-800', - 'SBRAzSugg-Activation Date-801', - 'SBRAzSugg-Expunge Date-802', - 'SBRAzSugg-Relevant Until Date-803', - 'SBRAzSugg-Title-804', - 'SBRAzSugg-Sub Title-805', - 'SBRAzSugg-Cached Count-806', - 'SBRAzSugg-Cahed Photos Count-807', - 'SBRAzSugg-Cached Videos Count-808', - 'SBRAzSugg-Type-809', - 'SBRAzSugg-Sub Type-810', - 'SBRAzSugg-Action Data-811', - 'SBRAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-812', - 'SBRAzSugg-Version-813', - 'SBRAzSugg-Cloud Local State-814', - 'SBRAzSugg-Cloud Delete State-815', - 'zMedAnlyAstAttr-Media Analysis Version-816', - 'zMedAnlyAstAttr-Audio Classification-817', - 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-818', - 'zMedAnlyAstAttr-Best Video Range Start Time Scale-819', - 'zMedAnlyAstAttr-Best Video Range Duration Value-820', - 'zMedAnlyAstAttr-Best Video Range Start Value-821', - 'zMedAnlyAstAttr-Packed Best Playback Rect-822', - 'zMedAnlyAstAttr-Activity Score-823', - 'zMedAnlyAstAttr-Video Score-824', - 'zMedAnlyAstAttr-Audio Score-825', - 'zMedAnlyAstAttr-Wallpaper Score-826', - 'zMedAnlyAstAttr-AutoPlay Suggestion Score-827', - 'zMedAnlyAstAttr-Blurriness Score-828', - 'zMedAnlyAstAttr-Exposure Score-829', - 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-830', - 'zMedAnlyAstAttr-Probable Rotation Direction-831', - 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-832', - 'zMedAnlyAstAttr-Color Normalization Data-833', - 'zMedAnlyAstAttr-Media_Analysis Image_Version-iOS18-834', - 'zMedAnlyAstAttr-Image_Caption_Version-iOS18-835', - 'zMedAnlyAstAttr-Video_Caption_Version-iOS18-836', - 'zMedAnlyAstAttr-VA_Location_Analysis_Version-iOS18-837', - 'zAssetAnalyState-Asset UUID-4TableStart-838', - 'zAssetAnalyState-Analyisis State-839', - 'zAssetAnalyState-Worker Flags-840', - 'zAssetAnalyState-Worker Type-841', - 'zAssetAnalyState-Ignore Until Date-842', - 'zAssetAnalyState-Last Ignored Date-843', - 'zAssetAnalyState-Sort Token-844', - 'zMedAnlyAstAttr-Character Recognition Attr-845', - 'zCharRecogAttr-Algorithm Version-846', - 'zCharRecogAttr-Adjustment Version-847', - 'zCharRecogAttr-Character Recogition Data-HEX-848', - 'zCharRecogAttr-Machine Readable Code Data-HEX-849', - 'zMedAnlyAstAttr-Visual Search Attributes-850', - 'zVisualSearchAttr-Algorithm Version-851', - 'zVisualSearchAttr-Adjustment Version-852', - 'zVisualSearchAttr-Visual Search Data-HEX-853', - 'zVisualSearchAttr - Sticker Confidence Algorithm Version-854', - 'zVisualSearchAttr - Sticker Confidence Score-855', - 'zAsset-Sticker Confidence Score-856', - 'zAsset-Overall Aesthetic Score-857', - 'zCompAssetAttr-Behavioral Score-858', - 'zCompAssetAttr-Failure Score zCompAssetAttr-859', - 'zCompAssetAttr-Harmonious Color Score-860', - 'zCompAssetAttr-Immersiveness Score-861', - 'zCompAssetAttr-Interaction Score-862', - 'zCompAssetAttr-Intersting Subject Score-863', - 'zCompAssetAttr-Intrusive Object Presence Score-864', - 'zCompAssetAttr-Lively Color Score-865', - 'zCompAssetAttr-Low Light-866', - 'zCompAssetAttr-Noise Score-867', - 'zCompAssetAttr-Pleasant Camera Tilt Score-868', - 'zCompAssetAttr-Pleasant Composition Score-869', - 'zCompAssetAttr-Pleasant Lighting Score-870', - 'zCompAssetAttr-Pleasant Pattern Score-871', - 'zCompAssetAttr-Pleasant Perspective Score-872', - 'zCompAssetAttr-Pleasant Post Processing Score-873', - 'zCompAssetAttr-Pleasant Reflection Score-874', - 'zCompAssetAttrPleasant Symmetry Score-875', - 'zCompAssetAttr-Sharply Focused Subject Score-876', - 'zCompAssetAttr-Tastfully Blurred Score-877', - 'zCompAssetAttr-Well Chosen Subject Score-878', - 'zCompAssetAttr-Well Framed Subject Score-879', - 'zCompAssetAttr-Well Timeed Shot Score-880', - 'zCldRes-Asset UUID-4TableStart-881', - 'zCldRes-Cloud Local State-882', - 'zCldRes-File Size-883', - 'zCldRes-Height-884', - 'zCldRes-Is Available-885', - 'zCldRes-Is Locally Available-886', - 'zCldRes-Prefetch Count-887', - 'zCldRes-Source Type-888', - 'zCldRes-Type-889', - 'zCldRes-Width-890', - 'zCldRes-Date Created-891', - 'zCldRes-Last OnDemand Download Date-892', - 'zCldRes-Last Prefetch Date-893', - 'zCldRes-Prunedat-894', - 'zCldRes-File Path-895', - 'zCldRes-Fingerprint-896', - 'zCldRes-Item ID-897', - 'zCldRes-UniID-898', - 'zUserFeedback-UUID-4TableStart-899', - 'zUserFeedback-Feature-900', - 'zUserFeedback-Type-901', - 'zUserFeedback-Last Modified Date-902', - 'zUserFeedback-Context-903', - 'zUserFeedback-Cloud Local State-904', - 'zUserFeedback-Cloud Delete State-905', - 'zUserFeedback - Creation Type-906', - 'zAddAssetAttr-zPK-907', - 'zAddAssetAttr-zENT-908', - 'ZAddAssetAttr-zOPT-909', - 'zAddAssetAttr-zAsset= zAsset_zPK-910', - 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-911', - 'zAddAssetAttr-Original Stable Hash-iOS18-4Queryend-912', - 'zAddAssetAttr-Public Global UUID-913', - 'zAddAssetAttr-Deferred Photo Identifier-914', - 'zAddAssetAttr-Original Assets UUID-915', - 'zAddAssetAttr-Import Session ID-916', - 'zAddAssetAttr-Originating Asset Identifier-4endquery-917', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-4endquery-918', - 'zAlbumList-zPK= Album List Key-919', - 'zAlbumList-zENT-920', - 'zAlbumList-zOPT-921', - 'zAlbumList-ID Key-922', - 'zAlbumList-UUID-923', - 'zAsset-zPK-924', - 'zAsset-zENT-925', - 'zAsset-zOPT-926', - 'zAsset-Master= zCldMast-zPK-927', - 'zAsset-Extended Attributes= zExtAttr-zPK-928', - 'zAsset-Import Session Key-929', - 'zAsset-Trashed by Participant= zSharePartic_zPK-930', - 'zAsset-Photo Analysis Attributes Key-931', - 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-932', - 'zAsset-FOK-Cloud Feed Asset Entry Key-933', - 'zAsset-Moment Share Key= zShare-zPK-934', - 'zAsset-zMoment Key= zMoment-zPK-935', - 'zAsset-Computed Attributes Asset Key-936', - 'zAsset-Highlight Being Assets-HBA Key-937', - 'zAsset-Highlight Being Extended Assets-HBEA Key-938', - 'zAsset-Highlight Being Key Asset Private-HBKAP Key-939', - 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-940', - 'zAsset-Highligh Being Summary Assets-HBSA Key-941', - 'zAsset-Day Group Highlight Being Assets-DGHBA Key-942', - 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-943', - 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-944', - 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-945', - 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-946', - 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-947', - 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-948', - 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-949', - 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-950', - 'zAsset-Promotion Score-951', - 'zAsset-Iconic Score-952', - 'zAsset-Media Analysis Attributes Key-953', - 'zAsset-Media Group UUID-954', - 'zAsset-UUID = store.cloudphotodb-955', - 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-956', - 'zAsset.Cloud Collection GUID-957', - 'zAsset-Avalanche UUID-958', - 'zAssetAnalyState-zPK-959', - 'zAssetAnalyState-zEnt-960', - 'zAssetAnalyState-zOpt-961', - 'zAssetAnalyState-Asset= zAsset-zPK-962', - 'zAssetAnalyState-Asset UUID-963', - 'zAsstContrib-zPK-964', - 'zAsstContrib-zEnt-965', - 'zAsstContrib-zOpt-966', - 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-967', - 'zAsstContrib-Participant= zSharePartic-zPK-968', - 'zAssetDes-zPK-969', - 'zAssetDes-zENT-970', - 'zAssetDes-zOPT-971', - 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-972', - 'zCharRecogAttr-zPK-973', - 'zCharRecogAttr-zENT-974', - 'zCharRecogAttr-zOPT-975', - 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-976', - 'zCldFeedEnt-zPK= zCldShared keys-977', - 'zCldFeedEnt-zENT-978', - 'zCldFeedEnt-zOPT-979', - 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-980', - 'zCldFeedEnt-Entry Invitation Record GUID-981', - 'zCldFeedEnt-Entry Cloud Asset GUID-982', - 'zCldMast-zPK= zAsset-Master-983', - 'zCldMast-zENT-984', - 'zCldMast-zOPT-985', - 'zCldMast-Moment Share Key= zShare-zPK-986', - 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-987', - 'zCldMast-Originating Asset ID-988', - 'zCldMast-Import Session ID- AirDrop-StillTesting-989', - 'CMzCldMastMedData-zENT-990', - 'CMzCldMastMedData-zOPT-991', - 'CMzCldMastMedData-CldMast= zCldMast-zPK-992', - 'AAAzCldMastMedData-zENT-993', - 'AAAzCldMastMedData-zOPT-994', - 'AAAzCldMastMedData-CldMast key-995', - 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-996', - 'zCldRes-zPK-997', - 'zCldRes-zENT-998', - 'zCldRes-zOPT-999', - 'zCldRes-Asset= zAsset-zPK-1000', - 'zCldRes-Cloud Master= zCldMast-zPK-1001', - 'zCldRes-Asset UUID-1002', - 'zCldShareAlbumInvRec-zPK-1003', - 'zCldShareAlbumInvRec-zEnt-1004', - 'zCldShareAlbumInvRec-zOpt-1005', - 'zCldShareAlbumInvRec-Album Key-1006', - 'zCldShareAlbumInvRec-FOK Album Key-1007', - 'zCldShareAlbumInvRec-Album GUID-1008', - 'zCldShareAlbumInvRec-zUUID-1009', - 'zCldShareAlbumInvRec-Cloud GUID-1010', - 'zCldSharedComment-zPK-1011', - 'zCldSharedComment-zENT-1012', - 'zCldSharedComment-zOPT-1013', - 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1014', - 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1015', - 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1016', - 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1017', - 'zCldSharedComment-CldFeedLikeCommentEntry Key-1018', - 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1019', - 'zCldSharedComment-Cloud GUID-1020', - 'zCompAssetAttr-zPK-1021', - 'zCompAssetAttr-zEnt-1022', - 'zCompAssetAttr-zOpt-1023', - 'zCompAssetAttr-Asset Key-1024', - 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-iOS18-1025', - 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-iOS18-1026', - 'zCompSyncAttr-zAsset= zAsset-zPK-iOS18-1027', - 'zCompSyncAttr-zENT-iOS18-1028', - 'zCompSyncAttr-zOPT-iOS18-1029', - 'zDetFace-zPK-1030', - 'zDetFace-zEnt-1031', - 'zDetFace.zOpt-1032', - 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-1033', - 'zDetFace-PersonForFace= zPerson-zPK-1034', - 'zDetFace-Person Being Key Face-1035', - 'zDetFace-Face Print-1036', - 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1037', - 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1038', - 'zDetFace-UUID-1039', - 'zDetFaceGroup-zPK-1040', - 'zDetFaceGroup-zENT-1041', - 'zDetFaceGroup-zOPT-1042', - 'zDetFaceGroup-AssocPerson= zPerson-zPK-1043', - 'zDetFaceGroup-KeyFace= zDetFace-zPK-1044', - 'zDetFaceGroup-UUID-1045', - 'zDetFacePrint-zPK-1046', - 'zDetFacePrint-zEnt-1047', - 'zDetFacePrint-zOpt-1048', - 'zDetFacePrint-Face Key-1049', - 'zExtAttr-zPK= zAsset-zExtendedAttributes-1050', - 'zExtAttr-zENT-1051', - 'zExtAttr-zOPT-1052', - 'zExtAttr-Asset Key-1053', - 'zFaceCrop-zPK-1054', - 'zFaceCrop-zEnt-1055', - 'zFaceCrop-zOpt-1056', - 'zFaceCrop-Asset Key-1057', - 'zFaceCrop-Invalid Merge Canidate Person UUID-1058', - 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1059', - 'zFaceCrop-Face Key-1060', - 'zFaceCrop-UUID-1061', - 'zGenAlbum-zPK=26AlbumLists= 26Albums-1062', - 'zGenAlbum-zENT-1063', - 'zGenAlbum-zOpt-1064', - 'zGenAlbum-Custom Key Asset-1065', - 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1066', - 'zGenAlbum-FOK Parent Folder-1067', - 'zGenAlbum-zSyndicate-1068', - 'zGenAlbum-UUID-1069', - 'SWYConverszGenAlbum-UUID-1070', - 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1071', - 'SWYConverszGenAlbum-Cloud GUID-1072', - 'zGenAlbum-Project Render UUID-1073', - 'SWYConverszGenAlbum-Project Render UUID-1074', - 'zIntResou-zPK-1075', - 'zIntResou-zENT-1076', - 'zIntResou-zOPT-1077', - 'zIntResou-Asset= zAsset_zPK-1078', - 'zIntResou-Fingerprint-iOS18-4Queryend-1079', - 'zIntResou-Stable Hash-iOS18-4Queryend-1080', - 'zIntResou-Cloud Delete Asset UUID With Resource Type-1081', - 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1082', - 'zMedAnlyAstAttr-zEnt-1083', - 'zMedAnlyAstAttr-zOpt-1084', - 'zMedAnlyAstAttr-Asset= zAsset-zPK-1085', - 'zMemory-zPK-1086', - 'zMemory-zENT-1087', - 'zMemory-zOPT-1088', - 'zMemory-Key Asset= zAsset-zPK-1089', - 'zMemory-UUID-1090', - 'zMoment-zPK-1091', - 'zMoment-zENT-1092', - 'zMoment-zOPT-1093', - 'zMoment-Highlight Key-1094', - 'zMoment-UUID-1095', - 'zPerson-zPK=zDetFace-Person-1096', - 'zPerson-zEnt-1097', - 'zPerson-zOpt-1098', - 'zPerson-Share Participant= zSharePartic-zPK-1099', - 'zPerson-KeyFace=zDetFace-zPK-1100', - 'zPerson-Assoc Face Group Key-1101', - 'zPerson-Person UUID-1102', - 'zPerson-Is_Me_Confidence-iOS18-1103', - 'zPhotoAnalysisAssetAttr-zPK-1104', - 'zPhotoAnalysisAssetAttr-zEnt-1105', - 'zPhotoAnalysisAssetAttr-zOpt-1106', - 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1107', - 'zSceneP-zPK-1108', - 'zSceneP-zENT-1109', - 'zSceneP-zOPT-1110', - 'zShare-zPK-1111', - 'zShare-zENT-1112', - 'zShare-zOPT-1113', - 'zShare-UUID-1114', - 'SPLzShare-UUID-1115', - 'zShare-Scope ID = store.cloudphotodb-1116', - 'zSharePartic-zPK-1117', - 'zSharePartic-zENT-1118', - 'zSharePartic-zOPT-1119', - 'zSharePartic-Share Key= zShare-zPK-1120', - 'zSharePartic-Person= zPerson-zPK-1121', - 'zSharePartic-UUID-1122', - 'SBKAzSugg-zPK-1123', - 'SBKAzSugg-zENT-1124', - 'SBKAzSugg-zOPT-1125', - 'SBKAzSugg-UUID-1126', - 'SBRAzSugg-zPK-1127', - 'SBRAzSugg-zENT-1128', - 'SBRAzSugg-zOPT-1129', - 'SBRAzSugg-UUID-1130', - 'z3SuggBRA-3RepAssets-1131', - 'z3SuggBRA-66SuggBeingRepAssets-1132', - 'z3SuggBKA-66SuggBeingKeyAssets= zSugg-zPK-1133', - 'z3SuggBKA-3KeyAssets1= zAsset-zPK-1134', - 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1135', - 'zUnmAdj-zOPT-1136', - 'zUnmAdj-zENT-1137', - 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1138', - 'zUnmAdj-UUID-1139', - 'zUnmAdj-Other Adjustments Fingerprint-1140', - 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1141', - 'zUserFeedback-zPK-1142', - 'zUserFeedback-zENT-1143', - 'zUserFeedback-zOPT-1144', - 'zUserFeedback-Person= zPerson-zPK-1145', - 'zUserFeedback-Memory= zMemory-zPK-1146', - 'zUserFeedback-UUID-1147', - 'zVisualSearchAttr-zPK-1148', - 'zVisualSearchAttr-zENT-1149', - 'zVisualSearchAttr-zOPT-1150', - 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1151', - 'z30AlbumList-30Albums= zGenAlbum-zPK-1152', - 'z30AlbumList-Album List Key-1153', - 'z30AlbumList-FOK30Albums Key-1154', - 'z31Assets-31Albums= zGenAlbum-zPK-1155', - 'z31Assets-3Asset Key= zAsset-zPK in the Album-1156', - 'z31Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1157', - 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1158', - 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1159', - 'z3MemoryBCAs-52MemoriesBeingCuratedAssets= zMemory-zPK-1160', - 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1161', - 'z3MemoryBECAs-52MemoriesBeingExtCuratedAssets= zMemory-zPK-1162', - 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1163', - 'z3MemoryBRAs-44RepresentativeAssets= zMemory-zPK-1164', - 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1165', - 'z3MemoryBUCAs-52MemoriesBeingUserCuratedAssets= zMemory-zPK-1166', - 'z3MemoryBCAs-52Memories Being Custom User Assets-1167', - 'z3MemoryBCAs-3Custom User Assets-1168', - 'z3MemoryBCAs-FOK-3Custom User Assets-1169') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], + row[19], row[20], row[21], row[22], row[23], row[24], row[25], row[26], row[27], + row[28], row[29], row[30], row[31], row[32], row[33], row[34], row[35], row[36], + row[37], row[38], row[39], row[40], row[41], row[42], row[43], row[44], row[45], + row[46], row[47], row[48], row[49], row[50], row[51], row[52], row[53], row[54], + row[55], row[56], row[57], row[58], row[59], row[60], row[61], row[62], row[63], + row[64], row[65], row[66], row[67], row[68], row[69], row[70], row[71], row[72], + row[73], row[74], row[75], row[76], row[77], row[78], row[79], row[80], row[81], + row[82], row[83], row[84], row[85], row[86], row[87], row[88], row[89], row[90], + row[91], row[92], row[93], row[94], row[95], row[96], row[97], row[98], row[99], + row[100], row[101], row[102], row[103], row[104], row[105], row[106], row[107], + row[108], row[109], row[110], row[111], row[112], row[113], row[114], row[115], + row[116], row[117], row[118], row[119], row[120], row[121], row[122], row[123], + row[124], row[125], row[126], row[127], row[128], row[129], row[130], row[131], + row[132], row[133], row[134], row[135], row[136], row[137], row[138], row[139], + row[140], row[141], row[142], row[143], row[144], row[145], row[146], row[147], + row[148], row[149], row[150], row[151], row[152], row[153], row[154], row[155], + row[156], row[157], row[158], row[159], row[160], row[161], row[162], row[163], + row[164], row[165], row[166], row[167], row[168], row[169], row[170], row[171], + row[172], row[173], row[174], row[175], row[176], row[177], row[178], row[179], + row[180], row[181], row[182], row[183], row[184], row[185], row[186], row[187], + row[188], row[189], row[190], row[191], row[192], row[193], row[194], row[195], + row[196], row[197], row[198], row[199], row[200], row[201], row[202], row[203], + row[204], row[205], row[206], row[207], row[208], row[209], row[210], row[211], + row[212], row[213], row[214], row[215], row[216], row[217], row[218], row[219], + row[220], row[221], row[222], row[223], row[224], row[225], row[226], row[227], + row[228], row[229], row[230], row[231], row[232], row[233], row[234], row[235], + row[236], row[237], row[238], row[239], row[240], row[241], row[242], row[243], + row[244], row[245], row[246], row[247], row[248], row[249], row[250], row[251], + row[252], row[253], row[254], row[255], row[256], row[257], row[258], row[259], + row[260], row[261], row[262], row[263], row[264], row[265], row[266], row[267], + row[268], row[269], row[270], row[271], row[272], row[273], row[274], row[275], + row[276], row[277], row[278], row[279], row[280], row[281], row[282], row[283], + row[284], row[285], row[286], row[287], row[288], row[289], row[290], row[291], + row[292], row[293], row[294], row[295], row[296], row[297], row[298], row[299], + row[300], row[301], row[302], row[303], row[304], row[305], row[306], row[307], + row[308], row[309], row[310], row[311], row[312], row[313], row[314], row[315], + row[316], row[317], row[318], row[319], row[320], row[321], row[322], row[323], + row[324], row[325], row[326], row[327], row[328], row[329], row[330], row[331], + row[332], row[333], row[334], row[335], row[336], row[337], row[338], row[339], + row[340], row[341], row[342], row[343], row[344], row[345], row[346], row[347], + row[348], row[349], row[350], row[351], row[352], row[353], row[354], row[355], + row[356], row[357], row[358], row[359], row[360], row[361], row[362], row[363], + row[364], row[365], row[366], row[367], row[368], row[369], row[370], row[371], + row[372], row[373], row[374], row[375], row[376], row[377], row[378], row[379], + row[380], row[381], row[382], row[383], row[384], row[385], row[386], row[387], + row[388], row[389], row[390], row[391], row[392], row[393], row[394], row[395], + row[396], row[397], row[398], row[399], row[400], row[401], row[402], row[403], + row[404], row[405], row[406], row[407], row[408], row[409], row[410], row[411], + row[412], row[413], row[414], row[415], row[416], row[417], row[418], row[419], + row[420], row[421], row[422], row[423], row[424], row[425], row[426], row[427], + row[428], row[429], row[430], row[431], row[432], row[433], row[434], row[435], + row[436], row[437], row[438], row[439], row[440], row[441], row[442], row[443], + row[444], row[445], row[446], row[447], row[448], row[449], row[450], row[451], + row[452], row[453], row[454], row[455], row[456], row[457], row[458], row[459], + row[460], row[461], row[462], row[463], row[464], row[465], row[466], row[467], + row[468], row[469], row[470], row[471], row[472], row[473], row[474], row[475], + row[476], row[477], row[478], row[479], row[480], row[481], row[482], row[483], + row[484], row[485], row[486], row[487], row[488], row[489], row[490], row[491], + row[492], row[493], row[494], row[495], row[496], row[497], row[498], row[499], + row[500], row[501], row[502], row[503], row[504], row[505], row[506], row[507], + row[508], row[509], row[510], row[511], row[512], row[513], row[514], row[515], + row[516], row[517], row[518], row[519], row[520], row[521], row[522], row[523], + row[524], row[525], row[526], row[527], row[528], row[529], row[530], row[531], + row[532], row[533], row[534], row[535], row[536], row[537], row[538], row[539], + row[540], row[541], row[542], row[543], row[544], row[545], row[546], row[547], + row[548], row[549], row[550], row[551], row[552], row[553], row[554], row[555], + row[556], row[557], row[558], row[559], row[560], row[561], row[562], row[563], + row[564], row[565], row[566], row[567], row[568], row[569], row[570], row[571], + row[572], row[573], row[574], row[575], row[576], row[577], row[578], row[579], + row[580], row[581], row[582], row[583], row[584], row[585], row[586], row[587], + row[588], row[589], row[590], row[591], row[592], row[593], row[594], row[595], + row[596], row[597], row[598], row[599], row[600], row[601], row[602], row[603], + row[604], row[605], row[606], row[607], row[608], row[609], row[610], row[611], + row[612], row[613], row[614], row[615], row[616], row[617], row[618], row[619], + row[620], row[621], row[622], row[623], row[624], row[625], row[626], row[627], + row[628], row[629], row[630], row[631], row[632], row[633], row[634], row[635], + row[636], row[637], row[638], row[639], row[640], row[641], row[642], row[643], + row[644], row[645], row[646], row[647], row[648], row[649], row[650], row[651], + row[652], row[653], row[654], row[655], row[656], row[657], row[658], row[659], + row[660], row[661], row[662], row[663], row[664], row[665], row[666], row[667], + row[668], row[669], row[670], row[671], row[672], row[673], row[674], row[675], + row[676], row[677], row[678], row[679], row[680], row[681], row[682], row[683], + row[684], row[685], row[686], row[687], row[688], row[689], row[690], row[691], + row[692], row[693], row[694], row[695], row[696], row[697], row[698], row[699], + row[700], row[701], row[702], row[703], row[704], row[705], row[706], row[707], + row[708], row[709], row[710], row[711], row[712], row[713], row[714], row[715], + row[716], row[717], row[718], row[719], row[720], row[721], row[722], row[723], + row[724], row[725], row[726], row[727], row[728], row[729], row[730], row[731], + row[732], row[733], row[734], row[735], row[736], row[737], row[738], row[739], + row[740], row[741], row[742], row[743], row[744], row[745], row[746], row[747], + row[748], row[749], row[750], row[751], row[752], row[753], row[754], row[755], + row[756], row[757], row[758], row[759], row[760], row[761], row[762], row[763], + row[764], row[765], row[766], row[767], row[768], row[769], row[770], row[771], + row[772], row[773], row[774], row[775], row[776], row[777], row[778], row[779], + row[780], row[781], row[782], row[783], row[784], row[785], row[786], row[787], + row[788], row[789], row[790], row[791], row[792], row[793], row[794], row[795], + row[796], row[797], row[798], row[799], row[800], row[801], row[802], row[803], + row[804], row[805], row[806], row[807], row[808], row[809], row[810], row[811], + row[812], row[813], row[814], row[815], row[816], row[817], row[818], row[819], + row[820], row[821], row[822], row[823], row[824], row[825], row[826], row[827], + row[828], row[829], row[830], row[831], row[832], row[833], row[834], row[835], + row[836], row[837], row[838], row[839], row[840], row[841], row[842], row[843], + row[844], row[845], row[846], row[847], row[848], row[849], row[850], row[851], + row[852], row[853], row[854], row[855], row[856], row[857], row[858], row[859], + row[860], row[861], row[862], row[863], row[864], row[865], row[866], row[867], + row[868], row[869], row[870], row[871], row[872], row[873], row[874], row[875], + row[876], row[877], row[878], row[879], row[880], row[881], row[882], row[883], + row[884], row[885], row[886], row[887], row[888], row[889], row[890], row[891], + row[892], row[893], row[894], row[895], row[896], row[897], row[898], row[899], + row[900], row[901], row[902], row[903], row[904], row[905], row[906], row[907], + row[908], row[909], row[910], row[911], row[912], row[913], row[914], row[915], + row[916], row[917], row[918], row[919], row[920], row[921], row[922], row[923], + row[924], row[925], row[926], row[927], row[928], row[929], row[930], row[931], + row[932], row[933], row[934], row[935], row[936], row[937], row[938], row[939], + row[940], row[941], row[942], row[943], row[944], row[945], row[946], row[947], + row[948], row[949], row[950], row[951], row[952], row[953], row[954], row[955], + row[956], row[957], row[958], row[959], row[960], row[961], row[962], row[963], + row[964], row[965], row[966], row[967], row[968], row[969], row[970], row[971], + row[972], row[973], row[974], row[975], row[976], row[977], row[978], row[979], + row[980], row[981], row[982], row[983], row[984], row[985], row[986], row[987], + row[988], row[989], row[990], row[991], row[992], row[993], row[994], row[995], + row[996], row[997], row[998], row[999], row[1000], row[1001], row[1002], + row[1003], row[1004], row[1005], row[1006], row[1007], row[1008], row[1009], + row[1010], row[1011], row[1012], row[1013], row[1014], row[1015], row[1016], + row[1017], row[1018], row[1019], row[1020], row[1021], row[1022], row[1023], + row[1024], row[1025], row[1026], row[1027], row[1028], row[1029], row[1030], + row[1031], row[1032], row[1033], row[1034], row[1035], row[1036], row[1037], + row[1038], row[1039], row[1040], row[1041], row[1042], row[1043], row[1044], + row[1045], row[1046], row[1047], row[1048], row[1049], row[1050], row[1051], + row[1052], row[1053], row[1054], row[1055], row[1056], row[1057], row[1058], + row[1059], row[1060], row[1061], row[1062], row[1063], row[1064], row[1065], + row[1066], row[1067], row[1068], row[1069], row[1070], row[1071], row[1072], + row[1073], row[1074], row[1075], row[1076], row[1077], row[1078], row[1079], + row[1080], row[1081], row[1082], row[1083], row[1084], row[1085], row[1086], + row[1087], row[1088], row[1089], row[1090], row[1091], row[1092], row[1093], + row[1094], row[1095], row[1096], row[1097], row[1098], row[1099], row[1100], + row[1101], row[1102], row[1103], row[1104], row[1105], row[1106], row[1107], + row[1108], row[1109], row[1110], row[1111], row[1112], row[1113], row[1114], + row[1115], row[1116], row[1117], row[1118], row[1119], row[1120], row[1121], + row[1122], row[1123], row[1124], row[1125], row[1126], row[1127], row[1128], + row[1129], row[1130], row[1131], row[1132], row[1133], row[1134], row[1135], + row[1136], row[1137], row[1138], row[1139], row[1140], row[1141], row[1142], + row[1143], row[1144], row[1145], row[1146], row[1147], row[1148], row[1149], + row[1150], row[1151], row[1152], row[1153], row[1154], row[1155], row[1156], + row[1157], row[1158], row[1159])) - tsvname = 'Ph98.2-iOS18_Ref_for_Asset_Analysis-SyndPL' - tsv(report_folder, data_headers, data_list, tsvname) + data_headers = ('zAsset Complete-0', + 'zAsset-zPK-4QueryStart-1', + 'zAddAssetAttr-zPK-4QueryStart-2', + 'zAsset-UUID = store.cloudphotodb-4QueryStart-3', + 'zAddAssetAttr-Original Stable Hash-4QueryStart-4', + 'zIntResou-Fingerprint-4QueryStart-5', + 'zAddAssetAttr.Adjusted Stable Hash-4QueryStart-6', + 'zIntResou-Stable Hash-4QueryStart-7', + 'zAsset-Bundle Scope-8', + 'zAsset-Syndication State-9', + 'zAsset-Cloud is My Asset-10', + 'zAsset-Cloud is deletable-Asset-11', + 'zAsset-Cloud_Local_State-12', + 'zAsset-Visibility State-13', + 'zExtAttr-Camera Make-14', + 'zExtAttr-Camera Model-15', + 'zExtAttr-Lens Model-16', + 'zExtAttr-Flash Fired-17', + 'zExtAttr-Focal Lenght-18', + 'zExtAttr-Focal Lenth in 35MM-19', + 'zExtAttr-Digital Zoom Ratio-20', + 'zExtAttr-Generative_AI_Type-21', + 'zExtAttr-Credit-22', + 'zAsset-Derived Camera Capture Device-23', + 'zAsset-Capture_Session_Identifier-iOS18-24', + 'zAddAssetAttr-Camera Captured Device-25', + 'zAddAssetAttr-Imported by-26', + 'zCldMast-Imported By-27', + 'zAddAssetAttr.Imported by Bundle Identifier-28', + 'zAddAssetAttr-Imported By Display Name-29', + 'zCldMast-Imported by Bundle ID-30', + 'zCldMast-Imported by Display Name-31', + 'zAsset-ImageRequestHints-HEX-Path-32', + 'zAsset-Saved Asset Type-33', + 'zAsset-Is_Recently_Saved-34', + 'zAsset-Directory-Path-35', + 'zAsset-Filename-36', + 'zAddAssetAttr- Original Filename-37', + 'zCldMast- Original Filename-38', + 'zAddAssetAttr- Syndication Identifier-SWY-Files-39', + 'zAsset-Active Library Scope Participation State -4QueryStart-40', + 'zAsset-Library Scope Share State- StillTesting -4QueryStart-41', + 'SPLzShare-Cloud Photo Count-SPL -4QueryStart-42', + 'SPLzShare-Cloud Video Count-SPL -4QueryStart-43', + ('zAsset-Added Date-44', 'datetime'), + ('zAsset- SortToken -CameraRoll-45', 'datetime'), + ('zAddAssetAttr-Date Created Source-46', 'datetime'), + ('zAsset-Date Created-47', 'datetime'), + ('zCldMast-Creation Date-48', 'datetime'), + ('zIntResou-CldMst Date Created-49', 'datetime'), + 'zAddAssetAttr-Time Zone Name-50', + 'zAddAssetAttr-Time Zone Offset-51', + 'zAddAssetAttr-Inferred Time Zone Offset-52', + 'zAddAssetAttr-EXIF-String-53', + ('zAsset-Modification Date-54', 'datetime'), + ('zAddAssetAttr-Last Viewed Date-55', 'datetime'), + ('zAsset-Last Shared Date-56', 'datetime'), + 'zCldMast-Cloud Local State-57', + ('zCldMast-Import Date-58', 'datetime'), + ('zAddAssetAttr-Last Upload Attempt Date-SWY_Files-59', 'datetime'), + 'zAddAssetAttr-Import Session ID-4QueryStart-60', + ('zAddAssetAttr-Alt Import Image Date-61', 'datetime'), + 'zCldMast-Import Session ID- AirDrop-StillTesting- 4QueryStart-62', + ('zAsset-Cloud Batch Publish Date-63', 'datetime'), + ('zAsset-Cloud Server Publish Date-64', 'datetime'), + 'zAsset-Cloud Download Requests-65', + 'zAsset-Cloud Batch ID-66', + 'zAddAssetAttr-Upload Attempts-67', + 'zAsset-Latitude-68', + 'zExtAttr-Latitude-69', + 'zAsset-Longitude-70', + 'zExtAttr-Longitude-71', + 'zAddAssetAttr-GPS Horizontal Accuracy-72', + 'zAddAssetAttr-Location Hash-73', + 'zAsset-Location Data-HEX-74', + 'zAddAssetAttr-Reverse Location Is Valid-75', + 'zAddAssetAttr-Reverse Location Data-76', + 'zAddAssetAttr-Shifted Location Valid-77', + 'zAddAssetAttr-Shifted Location Data-78', + 'ParentzGenAlbum-UUID-4QueryStart-79', + 'zGenAlbum-UUID-4QueryStart-80', + 'SWYConverszGenAlbum-UUID-4QueryStart-81', + 'ParentzGenAlbum-Cloud GUID-4QueryStart-82', + 'zGenAlbum-Cloud GUID-4QueryStart-83', + 'SWYConverszGenAlbum-Cloud GUID-4QueryStart-84', + 'zCldShareAlbumInvRec-Album GUID-4QueryStart-85', + 'zCldShareAlbumInvRec-Cloud GUID-4QueryStart-86', + 'zGenAlbum-Project Render UUID-4QueryStart-87', + 'SWYConverszGenAlbum-Project Render UUID-4QueryStart-88', + 'ParentzGenAlbum-Cloud-Local-State-4QueryStart-89', + 'zGenAlbum-Cloud_Local_State-4QueryStart-90', + 'SWYConverszGenAlbum-Cloud_Local_State-4QueryStart-91', + ('ParentzGenAlbum- Creation Date- 4QueryStart-92', 'datetime'), + ('zGenAlbum- Creation Date- 4QueryStart-93', 'datetime'), + ('SWYConverszGenAlbum- Creation Date- 4QueryStart-94', 'datetime'), + ('zGenAlbum- Cloud Creation Date- 4QueryStart-95', 'datetime'), + ('SWYConverszGenAlbum- Cloud Creation Date- 4QueryStart-96', 'datetime'), + ('zGenAlbum- Start Date- 4QueryStart-97', 'datetime'), + ('SWYConverszGenAlbum- Start Date- 4QueryStart-98', 'datetime'), + ('zGenAlbum- End Date- 4QueryStart-99', 'datetime'), + ('SWYConverszGenAlbum- End Date- 4QueryStart-100', 'datetime'), + ('zGenAlbum-Cloud Subscription Date- 4QueryStart-101', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date- 4QueryStart-102', 'datetime'), + 'ParentzGenAlbum- Title- 4QueryStart-103', + 'zGenAlbum- Title-User&System Applied- 4QueryStart-104', + 'SWYConverszGenAlbum- Title -User&System Applied- 4QueryStart-105', + 'zGenAlbum-Import Session ID-SWY- 4QueryStart-106', + 'zAsset- Conversation= zGenAlbum_zPK -4QueryStart-107', + 'SWYConverszGenAlbum- Import Session ID-SWY- 4QueryStart-108', + 'zGenAlbum-Imported by Bundle Identifier- 4QueryStart-109', + 'SWYzGenAlbum-Imported by Bundle Identifier- 4QueryStart-110', + 'SWYConverszGenAlbum- Syndicate-4QueryStart-111', + 'zGenAlbum-zENT- Entity- 4QueryStart-112', + 'ParentzGenAlbum- Kind- 4QueryStart-113', + 'zGenAlbum-Album Kind- 4QueryStart-114', + 'SWYConverszGenAlbum-Album Kind- 4QueryStart-115', + 'AAAzCldMastMedData-zOPT-4TableStart-116', + 'zAddAssetAttr-Media Metadata Type-117', + 'zAddAssetAttr-MediaMetadata= AAAzCldMastMedData-zPK-118', + 'AAAzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData-119', + 'AAAzCldMastMedData-Data-HEX-120', + 'CldMasterzCldMastMedData-zOPT-4TableStart-121', + 'zCldMast-Media Metadata Type-122', + 'zCldMast-Media Metadata Key= zCldMastMedData.zPK-123', + 'CMzCldMastMedData-zPK= zAddAssetAttr&zCldMast-MediaMetaData Key-124', + 'CMzCldMastMedData-Data-HEX-125', + 'zAsset-Search Index Rebuild State-126', + 'zAddAssetAttr-Syndication History-127', + 'zMedAnlyAstAttr-Syndication Processing Version-128', + 'zMedAnlyAstAttr-Syndication Processing Value-129', + 'zAsset-Orientation-130', + 'zAddAssetAttr-Original Orientation-131', + 'zAsset-Kind-132', + 'zAsset-Is_Detected_Screenshot-133', + 'zAsset-Kind-Sub-Type-134', + 'zAddAssetAttr-Cloud Kind Sub Type-135', + 'zAsset-Playback Style-136', + 'zAsset-Playback Variation-137', + 'zAddAssetAttr.View_Presentation-iOS18-138', + 'zAsset-Video Duration-139', + 'zExtAttr-Duration-140', + 'zAsset-Video CP Duration-141', + 'zAddAssetAttr-Video CP Duration Time Scale-142', + 'zAsset-Video CP Visibility State-143', + 'zAddAssetAttr-Video CP Display Value-144', + 'zAddAssetAttr-Video CP Display Time Scale-145', + 'zIntResou-Datastore Class ID-146', + 'zAsset-Cloud Placeholder Kind-147', + 'zIntResou-Local Availability-148', + 'zIntResou-Local Availability Target-149', + 'zIntResou-Cloud Local State-150', + 'zIntResou-Remote Availability-151', + 'zIntResou-Remote Availability Target-152', + 'zIntResou-Transient Cloud Master-153', + 'zIntResou-Side Car Index-154', + 'zAsset-UUID = store.cloudphotodb-4TableStart-155', + 'zAddAssetAttr-Orignial Stable Hash-4TableStart-156', + 'zIntResou-Fingerprint-4TableStart-157', + 'zIntResou-Stable Hash-4TableStart-158', + 'zIntResou- File ID-159', + 'zIntResou-Version-160', + 'zAddAssetAttr- Original-File-Size-161', + 'zIntResou-Resource Type-162', + 'zIntResou-DataStoreKeyData-HEX-163', + 'zIntResou-Datastore Sub-Type-164', + 'zIntResou-Cloud Source Type-165', + 'zIntResou-Data Length-166', + 'zIntResou-Recipe ID-167', + ('zIntResou-Cloud Last Prefetch Date-168', 'datetime'), + 'zIntResou-Cloud Prefetch Count-169', + ('zIntResou- Cloud-Last-OnDemand Download-Date-170', 'datetime'), + 'zIntResou-UniformTypeID_UTI_Conformance_Hint-171', + 'zIntResou-Compact-UTI-172', + 'zAsset-Uniform Type ID-173', + 'zAsset-Original Color Space-174', + 'zCldMast-Uniform_Type_ID-175', + 'zCldMast-Full Size JPEG Source-176', + 'zAsset-HDR Gain-177', + 'zAsset-zHDR_Type-178', + 'zExtAttr-Codec-179', + 'zIntResou-Codec Four Char Code Name-180', + 'zCldMast-Codec Name-181', + 'zCldMast-Video Frame Rate-182', + 'zCldMast-Placeholder State-183', + 'zAsset-Depth_Type-184', + 'zAsset-Avalanche UUID-4TableStart-185', + 'zAsset-Avalanche_Kind-iOS18-186', + 'zAsset-Avalanche_Pick_Type-BurstAsset-187', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-188', + 'zAddAssetAttr-Cloud Recovery State-189', + 'zAddAssetAttr-Cloud State Recovery Attempts Count-190', + 'zAsset-Deferred Processing Needed-191', + 'zAsset-Video Deferred Processing Needed-192', + 'zAddAssetAttr-Deferred Photo Identifier-4QueryStart-193', + 'zAddAssetAttr-Deferred Processing Candidate Options-194', + 'zAsset-Adjustments_State-195', + 'zUnmAdj-UUID-4TableStart-196', + 'zAddAssetAttr.Adjusted Stable Hash-4TableStart-197', + 'zUnmAdj-Other Adjustments Fingerprint-4TableStart-198', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-4TableStart-199', + 'zCompSyncAttr-Cloud_Compute_State_Adjustment_Fingerprint-4TableStart-200', + ('zAsset-Adjustment Timestamp-201', 'datetime'), + ('zUnmAdj-Adjustment Timestamp-202', 'datetime'), + 'zCompSyncAttr-Cloud_Compute_State_Last_Updated_Date-203', + 'zAddAssetAttr-Editor Bundle ID-204', + 'zUnmAdj-Editor Localized Name-205', + 'zUnmAdj-Adjustment Format ID-206', + 'zAddAssetAttr-Montage-207', + 'zUnmAdj-Adjustment Render Types-208', + 'zUnmAdj-Adjustment Format Version-209', + 'zUnmAdj-Adjustment Base Image Format-210', + 'zCompSyncAttr-Local_Analysis_Stage-iOS18-211', + 'zCompSyncAttr-Cloud_Compute_State_Version-iOS18-212', + 'zCompSyncAttr-Local_Analysis_Major_Version-iOS18-213', + 'zAsset-Favorite-214', + 'zAsset-Hidden-215', + 'zAsset-Trashed State-LocalAssetRecentlyDeleted-216', + ('zAsset-Trashed Date-217', 'datetime'), + 'zAsset-Trashed by Participant= zSharePartic_zPK-4QueryStart-218', + 'zAsset-Delete-Reason-219', + 'zIntResou-Trash State-220', + ('zIntResou-Trashed Date-221', 'datetime'), + 'zAsset-Cloud Delete State-222', + 'zIntResou-Cloud Delete State-223', + 'zAddAssetAttr-PTP Trashed State-224', + 'zIntResou-PTP Trashed State-225', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-4TableStart-226', + ('zMedAnlyAstAttr-Media Analysis Timestamp-227', 'datetime'), + ('zAsset-Analysis State Modification Date-228', 'datetime'), + 'zAddAssetAttr- Pending View Count-229', + 'zAddAssetAttr- View Count-230', + 'zAddAssetAttr- Pending Play Count-231', + 'zAddAssetAttr- Play Count-232', + 'zAddAssetAttr- Pending Share Count-233', + 'zAddAssetAttr- Share Count-234', + 'zAddAssetAttr-Allowed for Analysis-235', + 'zAddAssetAttr-Scene Analysis Version-236', + 'zAddAssetAttr-Scene Analysis is From Preview-237', + ('zAddAssetAttr-Scene Analysis Timestamp-238', 'datetime'), + 'zAsset-Duplication Asset Visibility State-239', + 'zAddAssetAttr-Destination Asset Copy State-240', + 'zAddAssetAttr-Duplicate Detector Perceptual Processing State-241', + 'zSceneP-Data-HEX NSKeyed Plist-242', + 'zSceneP-Duplicate Matching Data-HEX NSKeyed Plist-243', + 'zSceneP-Duplicate Matching Alternate Data-HEX NSKeyed Plist-244', + 'zAddAssetAttr-Source Asset for Duplication Scope ID-245', + 'zCldMast-Source Master For Duplication Scope ID-246', + 'zAddAssetAttr-Source Asset For Duplication ID-247', + 'zCldMast-Source Master for Duplication ID-248', + 'zAddAssetAttr-Variation Suggestions States-249', + 'zAsset-High Frame Rate State-250', + 'zAsset-Video Key Frame Time Scale-251', + 'zAsset-Video Key Frame Value-252', + 'zAsset-Current_Sleet_Cast-iOS18-253', + 'zAddAssetAttr.Sleet_Is_Reversible-iOS18-254', + 'zExtAttr-Sleet_Rendering_Version-255', + 'zExtAttr-Sleet_Intensity-256', + 'zExtAttr-Sleet_Tone_Bias-257', + 'zExtAttr-Sleet_Color_Bias-258', + 'zExtAttr-Sleet_Cast-259', + 'zExtAttr-ISO-260', + 'zExtAttr-Metering Mode-261', + 'zExtAttr-Sample Rate-262', + 'zExtAttr-Track Format-263', + 'zExtAttr-White Balance-264', + 'zExtAttr-Aperture-265', + 'zExtAttr-BitRate-266', + 'zExtAttr-Exposure Bias-267', + 'zExtAttr-Frames Per Second-268', + 'zExtAttr-Shutter Speed-269', + 'zExtAttr-Slush Scene Bias-270', + 'zExtAttr-Slush Version-271', + 'zExtAttr-Slush Preset-272', + 'zExtAttr-Slush Warm Bias-273', + 'zAsset-Height-274', + 'zAddAssetAttr-Original Height-275', + 'zIntResou-Unoriented Height-276', + 'zAsset-Width-277', + 'zAddAssetAttr-Original Width-278', + 'zIntResou-Unoriented Width-279', + 'zShare-Thumbnail Image Data-280', + 'SPLzShare-Thumbnail Image Data-281', + 'zAsset-Thumbnail Index-282', + 'zAddAssetAttr-Embedded Thumbnail Height-283', + 'zAddAssetAttr-Embedded Thumbnail Length-284', + 'zAddAssetAttr-Embedded Thumbnail Offset-285', + 'zAddAssetAttr-Embedded Thumbnail Width-286', + 'zAsset-Packed Acceptable Crop Rect-287', + 'zAsset-Packed Badge Attributes-288', + 'zAsset-Packed Preferred Crop Rect-289', + 'zAsset-Curation Score-290', + 'zAsset-Camera Processing Adjustment State-291', + 'zAsset-Depth Type-292', + 'zAsset-Is Magic Carpet-QuicktimeMOVfile-293', + 'zAddAssetAttr-Orig Resource Choice-294', + 'zAsset-Spatial Type-295', + 'zAddAssetAttr-Spatial Over Capture Group ID-296', + 'zAddAssetAttr-Object Saliency Rects Data-HEX NSKeyed Plist-297', + 'zAddAssetAttr-Original Hash-HEX-298', + 'zAddAssetAttr-Place Annotation Data-299', + 'zAddAssetAttr-Distance Identity-300', + 'zAddAssetAttr-Edited IPTC Attributes-301', + 'zAssetDes-Long Description-302', + 'zAddAssetAttr-Asset Description-303', + 'zAddAssetAttr-Title-Comments via Cloud Website-304', + 'zAddAssetAttr-Accessibility Description-305', + 'zAddAssetAttr-Photo Stream Tag ID-306', + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Version-307', + ('zPhotoAnalysisAssetAttr-Wallpaper Properties Timestamp-308', 'datetime'), + 'zPhotoAnalysisAssetAttr-Wallpaper Properties Data-309', + ('zCldFeedEnt-Entry Date-310', 'datetime'), + 'zCldFeedEnt-Entry_Is_Mine-iOS18-311', + 'zCldFeedEnt-Album-GUID=zGenAlbum.zCloudGUID-4TableStart-312', + 'zCldFeedEnt-Entry Invitation Record GUID-4TableStart-313', + 'zCldFeedEnt-Entry Cloud Asset GUID-4TableStart-314', + 'zCldFeedEnt-Entry Priority Number-315', + 'zCldFeedEnt-Entry Type Number-316', + 'zCldSharedComment-Cloud GUID-4TableStart-317', + ('zCldSharedComment-Date-318', 'datetime'), + ('zCldSharedComment-Comment Client Date-319', 'datetime'), + ('zAsset-Cloud Last Viewed Comment Date-320', 'datetime'), + 'zCldSharedComment-Type-321', + 'zCldSharedComment-Comment Text-322', + 'zCldSharedComment-Commenter Hashed Person ID-323', + 'zCldSharedComment-Batch Comment-324', + 'zCldSharedComment-Is a Caption-325', + 'zAsset-Cloud Has Comments by Me-326', + 'zCldSharedComment-Is My Comment-327', + 'zCldSharedComment-Is Deletable-328', + 'zAsset-Cloud Has Comments Conversation-329', + 'zAsset-Cloud Has Unseen Comments-330', + 'zCldSharedComment-Liked-331', + 'zAddAssetAttr-Share Type-332', + 'zAsset-Library Scope Share State- StillTesting-333', + 'zAsset-Active Library Scope Participation State-334', + 'zAddAssetAttr-Library Scope Asset Contributors To Update-335', + 'zShare-UUID-CMM-4TableStart-336', + 'SPLzShare-UUID-SPL-4TableStart-337', + 'zShare-zENT-CMM-338', + 'SPLzShare-zENT-SPL-339', + 'zSharePartic-z61SHARE-340', + 'SPLzSharePartic-z61SHARE-341', + 'zShare-Status-CMM-342', + 'zShare-Status-SPL-343', + 'zShare-Scope Type-CMM-344', + 'zShare-Scope Type-SPL-345', + 'zShare-Local Publish State-CMM-346', + 'SPLzShare-Local Publish State-SPL-347', + 'zShare-Public Permission-CMM-348', + 'SPLzShare-Public Permission-SPL-349', + 'zShare-Originating Scope ID-CMM-350', + 'SPLzShare-Originating Scope ID-SPL-351', + 'zShare-Scope ID-CMM-352', + 'SPLzShare-Scope ID-SPL-353', + 'zShare-Title-CMM-354', + 'SPLzShare-Title-SPL-355', + 'zShare-Share URL-CMM-356', + 'SPLzShare-Share URL-SPL-357', + ('zShare-Creation Date-CMM-358', 'datetime'), + ('SPLzShare-Creation Date-SPL-359', 'datetime'), + ('zShare-Start Date-CMM-360', 'datetime'), + ('SPLzShare-Start Date-SPL-361', 'datetime'), + ('zShare-End Date-CMM-362', 'datetime'), + ('SPLzShare-End Date-SPL-363', 'datetime'), + ('zShare-Expiry Date-CMM-364', 'datetime'), + ('SPLzShare-Expiry Date-SPL-365', 'datetime'), + 'zShare-Cloud Item Count-CMM-366', + 'SPLzShare-Cloud Item Count-SPL-367', + 'zShare-Asset Count-CMM-368', + 'SPLzShare-Asset Count-SPL-369', + 'zShare-Cloud Photo Count-CMM-370', + 'SPLzShare-Cloud Photo Count-SPL-371', + 'zShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-CMM-372', + 'SPLzShare-CountOfAssets AddedByCamera Smart Sharing-HomeShare-SPL-373', + 'zShare-Photos Count-CMM-374', + 'SPLzShare-Photos Count-CMM-SPL-375', + 'zShare-Uploaded Photos Count-CMM-376', + 'SPLzShare-Uploaded Photos Count-SPL-377', + 'zShare-Cloud Video Count-CMM-378', + 'SPLzShare-Cloud Video Count-SPL-379', + 'zShare-Videos Count-CMM-380', + 'SPLzShare-Videos Count-SPL-381', + 'zShare-Uploaded Videos Count-CMM-382', + 'SPLzShare-Uploaded Videos Count-SPL-383', + 'zShare-Force Sync Attempted-CMM-384', + 'SPLzShare-Force Sync Attempted-SPL-385', + 'zShare-Cloud Local State-CMM-386', + 'SPLzShare-Cloud Local State-SPL-387', + 'zShare-Scope Syncing State-CMM-388', + 'SPLzShare-Scope Syncing State-SPL-389', + 'zShare-Auto Share Policy-CMM-390', + 'SPLzShare-Auto Share Policy-SPL-391', + 'zShare-Should Notify On Upload Completion-CMM-392', + 'SPLzShare-Should Notify On Upload Completion-SPL-393', + 'zAsset-Trashed by Participant= zSharePartic_zPK-SPL-CMM-394', + 'zShare-Trashed State-CMM-395', + 'SPLzShare-Trashed State-SPL-396', + 'zShare-Cloud Delete State-CMM-397', + 'SPLzShare-Cloud Delete State-SPL-398', + ('zShare-Trashed Date-CMM-399', 'datetime'), + ('SPLzShare-Trashed Date-SPL-400', 'datetime'), + ('zShare-LastParticipant Asset Trash Notification Date-CMM-401', 'datetime'), + ('SPLzShare-LastParticipant Asset Trash Notification Date-SPL-402', 'datetime'), + ('zShare-Last Participant Asset Trash Notification View Date-CMM-403', 'datetime'), + ('SPLzShare-Last Participant Asset Trash Notification View Date-SPL-404', 'datetime'), + 'zShare-Exit Source-CMM-405', + 'SPLzShare-Exit Source-SPL-406', + 'zShare-SPL_Exit State-CMM-407', + 'SPLzShare-SPL_Exit State-SPL-408', + 'zShare-Exit Type-CMM-409', + 'SPLzShare-Exit Type-SPL-410', + 'zShare-Should Ignor Budgets-CMM-411', + 'SPLzShare-Should Ignor Budgets-SPL-412', + 'zShare-Preview State-CMM-413', + 'SPLzShare-Preview State-SPL-414', + 'zShare-Preview Data-CMM-415', + 'SPLzShare-Preview Data-SPL-416', + 'zShare-Rules-CMM-417', + 'SPLzShare-Rules-SPL-418', + 'zShare-Thumbnail Image Data-CMM-419', + 'SPLzShare-Thumbnail Image Data-SPL-420', + 'zShare-Participant Cloud Update State-CMM-421', + 'SPLzShare-Participant Cloud Update State-SPL-422', + 'zSharePartic-UUID-4TableStart-423', + 'SPLzSharePartic-UUID-4TableStart-424', + 'zSharePartic-Acceptance Status-425', + 'SPLzSharePartic-Acceptance Status-426', + 'zSharePartic-Is Current User-427', + 'SPLzSharePartic-Is Current User-428', + 'zSharePartic-Role-429', + 'SPLzSharePartic-Role-430', + 'zSharePartic-Premission-431', + 'SPLzSharePartic-Premission-432', + 'zSharePartic-Participant ID-433', + 'SPLzSharePartic-Participant ID-434', + 'zSharePartic-User ID-435', + 'SPLzSharePartic-User ID-436', + 'zAsstContrib-Participant= zSharePartic-zPK-4TableStart-437', + 'SPLzSharePartic-zPK-4TableStart-438', + 'zSharePartic-zPK-4TableStart-439', + 'zSharePartic-Email Address-440', + 'SPLzSharePartic-Email Address-441', + 'zSharePartic-Phone Number-442', + 'SPLzSharePartic-Phone Number-443', + 'zSharePartic-Name Components-444', + 'SPLzSharePartic-Name Components-445', + 'zSharePartic-Exit State-446', + 'SPLzSharePartic-Exit State-447', + 'ParentzGenAlbum-UUID-4TableStart-448', + 'zGenAlbum-UUID-4TableStart-449', + 'SWYConverszGenAlbum-UUID-4TableStart-450', + 'ParentzGenAlbum-Cloud GUID-4TableStart-451', + 'zGenAlbum-Cloud GUID-4TableStart-452', + 'SWYConverszGenAlbum-Cloud GUID-4TableStart-453', + 'zCldShareAlbumInvRec-Album GUID-4TableStart-454', + 'zCldShareAlbumInvRec-Cloud GUID-4TableStart-455', + 'zGenAlbum-Project Render UUID-4TableStart-456', + 'SWYConverszGenAlbum-Project Render UUID-4TableStart-457', + 'zAlbumList-Needs Reordering Number-458', + 'zGenAlbum-zENT- Entity-459', + 'ParentzGenAlbum-Kind-460', + 'zGenAlbum-Album Kind-461', + 'SWYConverszGenAlbum-Album Kind-462', + 'ParentzGenAlbum-Cloud-Local-State-463', + 'zGenAlbum-Cloud_Local_State-464', + 'SWYConverszGenAlbum-Cloud_Local_State-465', + 'ParentzGenAlbum- Title-466', + 'zGenAlbum- Title-User&System Applied-467', + 'SWYConverszGenAlbum- Title -User&System Applied-468', + 'zGenAlbum-Import Session ID-SWY-469', + 'zAsset- Conversation= zGenAlbum_zPK-470', + 'SWYConverszGenAlbum- Import Session ID-SWY-471', + 'zGenAlbum-Imported by Bundle Identifier-472', + 'SWYzGenAlbum-Imported by Bundle Identifier-473', + 'SWYConverszGenAlbum- Syndicate-474', + ('ParentzGenAlbum-Creation Date-475', 'datetime'), + ('zGenAlbum-Creation Date-476', 'datetime'), + ('SWYConverszGenAlbum-Creation Date-477', 'datetime'), + ('zGenAlbum-Cloud Creation Date-478', 'datetime'), + ('SWYConverszGenAlbum-Cloud Creation Date-479', 'datetime'), + ('zGenAlbum-Start Date-480', 'datetime'), + ('SWYConverszGenAlbum-Start Date-481', 'datetime'), + ('zGenAlbum-End Date-482', 'datetime'), + ('SWYConverszGenAlbum-End Date-483', 'datetime'), + ('zGenAlbum-Cloud Subscription Date-484', 'datetime'), + ('SWYConverszGenAlbum-Cloud Subscription Date-485', 'datetime'), + 'zGenAlbum-Cloud Metadata-HEX NSKeyed Plist-486', + 'SWYConverszGenAlbum-Cloud Metadata-HEX NSKeyed Plist-487', + 'ParentzGenAlbum-Pending Items Count-488', + 'zGenAlbum-Pending Items Count-489', + 'SWYConverszGenAlbum-Pending Items Count-490', + 'ParentzGenAlbum-Pending Items Type-491', + 'zGenAlbum-Pending Items Type-492', + 'SWYConverszGenAlbum-Pending Items Type-493', + 'zGenAlbum- Cached Photos Count-494', + 'SWYConverszGenAlbum- Cached Photos Count-495', + 'zGenAlbum- Cached Videos Count-496', + 'SWYConverszGenAlbum- Cached Videos Count-497', + 'zGenAlbum- Cached Count-498', + 'SWYConverszGenAlbum- Cached Count-499', + 'ParentzGenAlbum-Sync Event Order Key-500', + 'zGenAlbum-Sync Event Order Key-501', + 'SWYConverszGenAlbum-Sync Event Order Key-502', + 'zGenAlbum-Has Unseen Content-503', + 'SWYConverszGenAlbum-Has Unseen Content-504', + 'zGenAlbum-Unseen Asset Count-505', + 'SWYConverszGenAlbum-Unseen Asset Count-506', + 'zGenAlbum-is Owned-507', + 'SWYConverszGenAlbum-is Owned-508', + 'zGenAlbum-Cloud Relationship State-509', + 'SWYConverszGenAlbum-Cloud Relationship State-510', + 'zGenAlbum-Cloud Relationship State Local-511', + 'SWYConverszGenAlbum-Cloud Relationship State Local-512', + 'zGenAlbum-Cloud Owner Mail Key-513', + 'SWYConverszGenAlbum-Cloud Owner Mail Key-514', + 'zGenAlbum-Cloud Owner Frist Name-515', + 'SWYConverszGenAlbum-Cloud Owner Frist Name-516', + 'zGenAlbum-Cloud Owner Last Name-517', + 'SWYConverszGenAlbum-Cloud Owner Last Name-518', + 'zGenAlbum-Cloud Owner Full Name-519', + 'SWYConverszGenAlbum-Cloud Owner Full Name-520', + 'zGenAlbum-Cloud Person ID-521', + 'SWYConverszGenAlbum-Cloud Person ID-522', + 'zAsset-Cloud Owner Hashed Person ID-523', + 'zGenAlbum-Cloud Owner Hashed Person ID-524', + 'SWYConverszGenAlbum-Cloud Owner Hashed Person ID-525', + 'zGenAlbum-Local Cloud Multi-Contributors Enabled-526', + 'SWYConverszGenAlbum-Local Cloud Multi-Contributors Enabled-527', + 'zGenAlbum-Cloud Multi-Contributors Enabled-528', + 'SWYConverszGenAlbum-Cloud Multi-Contributors Enabled-529', + 'zGenAlbum-Cloud Album Sub Type-530', + 'SWYConverszGenAlbum-Cloud Album Sub Type-531', + ('zGenAlbum-Cloud Contribution Date-532', 'datetime'), + ('SWYConverszGenAlbum-Cloud Contribution Date-533', 'datetime'), + ('zGenAlbum-Cloud Last Interesting Change Date-534', 'datetime'), + ('SWYConverszGenAlbum-Cloud Last Interesting Change Date-535', 'datetime'), + 'zGenAlbum-Cloud Notification Enabled-536', + 'SWYConverszGenAlbum-Cloud Notification Enabled-537', + 'ParentzGenAlbum-Pinned-538', + 'zGenAlbum-Pinned-539', + 'SWYConverszGenAlbum-Pinned-540', + 'ParentzGenAlbum-Custom Sort Key-541', + 'zGenAlbum-Custom Sort Key-542', + 'SWYConverszGenAlbum-Custom Sort Key-543', + 'ParentzGenAlbum-Custom Sort Ascending-544', + 'zGenAlbum-Custom Sort Ascending-545', + 'SWYConverszGenAlbum-Custom Sort Ascending-546', + 'ParentzGenAlbum-Is Prototype-547', + 'zGenAlbum-Is Prototype-548', + 'SWYConverszGenAlbum-Is Prototype-549', + 'ParentzGenAlbum-Project Document Type-550', + 'zGenAlbum-Project Document Type-551', + 'SWYConverszGenAlbum-Project Document Type-552', + 'ParentzGenAlbum-Custom Query Type-553', + 'zGenAlbum-Custom Query Type-554', + 'SWYConverszGenAlbum-Custom Query Type-555', + 'ParentzGenAlbum-Trashed State-556', + ('ParentzGenAlbum-Trash Date-557', 'datetime'), + 'zGenAlbum-Trashed State-558', + ('zGenAlbum-Trash Date-559', 'datetime'), + 'SWYConverszGenAlbum-Trashed State-560', + ('SWYConverszGenAlbum-Trash Date-561', 'datetime'), + 'ParentzGenAlbum-Cloud Delete State-562', + 'zGenAlbum-Cloud Delete State-563', + 'SWYConverszGenAlbum-Cloud Delete State-564', + 'zGenAlbum-Cloud Owner Whitelisted-565', + 'SWYConverszGenAlbum-Cloud Owner Whitelisted-566', + 'zGenAlbum-Cloud Local Public URL Enabled-567', + 'SWYConverszGenAlbum-Cloud Local Public URL Enabled-568', + 'zGenAlbum-Cloud Public URL Enabled-569', + 'zGenAlbum-Public URL-570', + 'SWYConverszGenAlbum-Cloud Public URL Enabled-571', + 'SWYConverszGenAlbum-Public URL-572', + 'zGenAlbum-Key Asset Face Thumb Index-573', + 'SWYConverszGenAlbum-Key Asset Face Thumb Index-574', + 'zGenAlbum-Project Text Extension ID-575', + 'SWYConverszGenAlbum-Project Text Extension ID-576', + 'zGenAlbum-User Query Data-577', + 'SWYConverszGenAlbum-User Query Data-578', + 'zGenAlbum-Custom Query Parameters-579', + 'SWYConverszGenAlbum-Custom Query Parameters-580', + 'zGenAlbum-Project Data-581', + 'SWYConverszGenAlbum-Project Data-582', + 'zGenAlbum-Search Index Rebuild State-583', + 'SWYConverszGenAlbum-Search Index Rebuild State-584', + 'zGenAlbum-Duplicate Type-585', + 'SWYConverszGenAlbum-Duplicate Type-586', + 'zGenAlbum-Privacy State-587', + 'SWYConverszGenAlbum-Privacy State-588', + 'zCldShareAlbumInvRec-zUUID-4TableStart-589', + 'zCldShareAlbumInvRec-Is My Invitation to Shared Album-590', + 'zCldShareAlbumInvRec-Invitation State Local-591', + 'zCldShareAlbumInvRec-Invitation State-Shared Album Invite Status-592', + ('zCldShareAlbumInvRec-Subscription Date-593', 'datetime'), + 'zCldShareAlbumInvRec-Invitee First Name-594', + 'zCldShareAlbumInvRec-Invitee Last Name-595', + 'zCldShareAlbumInvRec-Invitee Full Name-596', + 'zCldShareAlbumInvRec-Invitee Hashed Person ID-597', + 'zCldShareAlbumInvRec-Invitee Email Key-598', + 'zGenAlbum-Key Asset Face ID-599', + 'zFaceCrop-Face Area Points-600', + 'zAddAssetAttr.Has_People_Scene Mid_Or_Greater_Confidence-601', + 'zAsset-Face Adjustment Version-602', + 'zAddAssetAttr-Face Regions HEX-603', + 'zAddAssetAttr-Face Analysis Version-604', + 'zDetFace-Asset Visible-605', + 'zDetFacePrint-Data HEX-606', + 'zPerson-Contact Matching Dictionary HEX-607', + 'zPerson-Face Count-608', + 'zDetFace-Face Crop-609', + 'zDetFace-Face Algorithm Version-610', + 'zDetFace-Adjustment Version-611', + 'zDetFace-UUID-4TableStart-612', + 'zPerson-Person UUID-4TableStart-613', + 'zPerson-Is_Me_Confidence-614', + 'zPerson - MD ID-615', + 'zPerson - Asset Sort Order-616', + 'zDetFace-Confirmed Face Crop Generation State-617', + 'zDetFace-Manual-618', + 'zDetFace-Detection Type-619', + 'zPerson-Detection Type-620', + 'zDetFace-VIP Model Type-621', + 'zDetFace-Name Source-622', + 'zDetFace-Cloud Name Source-623', + 'zPerson-Merge Candidate Confidence-624', + 'zPerson-Person URI-625', + 'zPerson-Display Name-626', + 'zPerson-Full Name-627', + 'zPerson-Cloud Verified Type-628', + 'zFaceCrop-State-629', + 'zFaceCrop-Type-630', + 'zFaceCrop-Resource Data-HEX-PHOTO used for FaceCrop-631', + 'zFaceCrop-UUID-4TableStart-632', + 'zPerson-Type-633', + 'zPerson-Verified Type-634', + 'zPerson-Gender Type-635', + 'zDetFace-Gender Type-636', + 'zDetFace-Center X-637', + 'zDetFace-Center Y-638', + 'zPerson-Age Type Estimate-639', + 'zDetFace-Age Type Estimate-640', + 'zDetFace-Ethnicity Type-641', + 'zDetFace-Skin Tone Type-642', + 'zDetFace-Hair Type-643', + 'zDetFace-Hair Color Type-644', + 'zDetFace-Head Gear Type-645', + 'zDetFace-Facial Hair Type-646', + 'zDetFace-Has Face Mask-647', + 'zDetFace-Pose Type-648', + 'zDetFace-Face Expression Type-649', + 'zDetFace-Has Smile-650', + 'zDetFace-Smile Type-651', + 'zDetFace-Lip Makeup Type-652', + 'zDetFace-Eyes State-653', + 'zDetFace-Is Left Eye Closed-654', + 'zDetFace-Is Right Eye Closed-655', + 'zDetFace-Gaze Center X-656', + 'zDetFace-Gaze Center Y-657', + 'zDetFace-Face Gaze Type-658', + 'zDetFace-Eye Glasses Type-659', + 'zDetFace-Eye Makeup Type-660', + 'zDetFace-Cluster Squence Number Key-661', + 'zDetFace-Grouping ID-662', + 'zDetFace-Master ID-663', + 'zDetFace-Quality-664', + 'zDetFace-Quality Measure-665', + 'zDetFace-Source Height-666', + 'zDetFace-Source Width-667', + 'zDetFace-Hidden-Asset Hidden-668', + 'zDetFace-In Trash-Recently Deleted-669', + 'zDetFace-Cloud Local State-670', + 'zDetFace-Training Type-671', + 'zDetFace.Pose Yaw-672', + 'zDetFace-Body Center X-673', + 'zDetFace-Body Center Y-674', + 'zDetFace-Body Height-675', + 'zDetFace-Body Width-676', + 'zDetFace-Roll-677', + 'zDetFace-Size-678', + 'zDetFace-Cluster Squence Number-679', + 'zDetFace-Blur Score-680', + 'zDetFacePrint-Face Print Version-681', + 'zMedAnlyAstAttr-Face Count-682', + 'zDetFaceGroup-UUID-4TableStart-683', + 'zDetFaceGroup-Person Builder State-684', + 'zDetFaceGroup-UnNamed Face Count-685', + 'zPerson-In Person Naming Model-686', + 'zPerson-Key Face Pick Source Key-687', + 'zPerson-Manual Order Key-688', + 'zPerson-Question Type-689', + 'zPerson-Suggested For Client Type-690', + 'zPerson-Merge Target Person-691', + 'zPerson-Cloud Local State-692', + 'zFaceCrop-Cloud Local State-693', + 'zFaceCrop-Cloud Type-694', + 'zPerson-Cloud Delete State-695', + 'zFaceCrop-Cloud Delete State-696', + 'zFaceCrop-Invalid Merge Canidate Person UUID-4TableStart-697', + 'zAsset-Highlight Visibility Score-698', + 'zMemory-UUID-4TableStart-699', + 'zMemory-AssetListPredicte-700', + 'zMemory-Score-701', + 'zMemory-SubTitle-702', + 'zMemory-Title-703', + 'zMemory-Category-704', + 'zMemory-SubCategory-705', + ('zMemory-Creation Date-706', 'datetime'), + ('zMemory-Last Enrichment Date-707', 'datetime'), + 'zMemory-User Action Options-708', + 'zMemory-Favorite Memory-709', + 'zMemory-View Count-710', + 'zMemory-Play Count-711', + 'zMemory-Rejected-712', + 'zMemory-Share Count-713', + 'zMemory-Sharing Composition-714', + 'zMemory-PhotosGraphData-HEX NSKeyed Plist-715', + 'zMemory-MovieAssetState-HEX NSKeyed Plist-716', + 'zMemory-MovieData-HEX NSKeyed Plist-717', + ('zMemory-Last Movie Play Date-718', 'datetime'), + ('zMemory-Last Viewed Date-719', 'datetime'), + 'zMemory-Pending Play Count Memory-720', + 'zMemory-Pending Share Count Memory-721', + 'zMemory-Pending View Count Memory-722', + 'zMemory-Pending State-723', + 'zMemory-Featured State-724', + 'zMemory-Photos Graph Version-725', + 'zMemory-Graph Memory Identifier-726', + 'zMemory-Notification State-727', + 'zMemory-Cloud Local State-728', + 'zMemory-Cloud Delete State-729', + 'zMemory-Story Color Grade Kind-730', + 'zMemory-Story Serialized Title Category-731', + 'zMemory-Syndicated Content State-732', + 'zMemory-Search Index Rebuild State-733', + 'zMemory-Black Listed Feature-734', + 'zMoment-UUID-4TableStart-735', + 'zMoment-Aggregation Score-736', + ('zMoment-Start Date-737', 'datetime'), + ('zMoment-Representative Date-738', 'datetime'), + 'zMoment-Timezone Offset-739', + ('zMoment-Modification Date-740', 'datetime'), + ('zMoment-End Date-741', 'datetime'), + 'zMoment-SubTitle-742', + 'zMoment-Localized Location Names-743', + 'zMoment-Title-744', + 'zMoment-Originator State-745', + 'zMoment-Sharing Composition-746', + 'zMoment-Cached Count Shared-747', + 'zMoment-Processed Location-748', + 'zMoment-Approx Latitude-749', + 'zMoment-Approx Longitude-750', + 'zMoment-GPS Horizontal Accuracy-751', + 'zMoment-Cache Count-752', + 'zMoment-Cached Photos Count-753', + 'zMoment-Cached Videos Count-754', + 'zMoment-Trashed State-755', + 'SBKAzSugg-UUID-4TableStart-756', + 'SBKAzSugg-Suggestion Context-757', + 'SBKAzSugg-Sharing Composition-758', + ('SBKAzSugg-Start Date-759', 'datetime'), + 'SBKAzSugg-State-760', + 'SBKAzSugg-Featured State-761', + 'SBKAzSugg- Available Features-762', + 'SBKAzSugg-Notification State-763', + ('SBKAzSugg-Creation Date-764', 'datetime'), + ('SBKAzSugg-End Date-765', 'datetime'), + ('SBKAzSugg-Activation Date-766', 'datetime'), + ('SBKAzSugg-Expunge Date-767', 'datetime'), + ('SBKAzSugg-Relevant Until Date-768', 'datetime'), + 'SBKAzSugg-Title-769', + 'SBKAzSugg-Sub Title-770', + 'SBKAzSugg-Cached Count-771', + 'SBKAzSugg-Cahed Photos Count-772', + 'SBKAzSugg-Cached Videos Count-773', + 'SBKAzSugg-Type-774', + 'SBKAzSugg-Sub Type-775', + 'SBKAzSugg-Action Data-776', + 'SBKAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-777', + 'SBKAzSugg-Version-778', + 'SBKAzSugg-Cloud Local State-779', + 'SBKAzSugg-Cloud Delete State-780', + 'SBRAzSugg-UUID-4TableStart-781', + 'SBRAzSugg-Suggestion Context-782', + 'SBRAzSugg-Sharing Composition-783', + ('SBRAzSugg-Start Date-784', 'datetime'), + 'SBRAzSugg-State-785', + 'SBRAzSugg-Featured State-786', + 'SBRAzSugg- Available Features-787', + 'SBRAzSugg-Notification State-788', + ('SBRAzSugg-Creation Date-789', 'datetime'), + ('SBRAzSugg-End Date-790', 'datetime'), + ('SBRAzSugg-Activation Date-791', 'datetime'), + ('SBRAzSugg-Expunge Date-792', 'datetime'), + ('SBRAzSugg-Relevant Until Date-793', 'datetime'), + 'SBRAzSugg-Title-794', + 'SBRAzSugg-Sub Title-795', + 'SBRAzSugg-Cached Count-796', + 'SBRAzSugg-Cahed Photos Count-797', + 'SBRAzSugg-Cached Videos Count-798', + 'SBRAzSugg-Type-799', + 'SBRAzSugg-Sub Type-800', + 'SBRAzSugg-Action Data-801', + 'SBRAzSugg-Features Data-DeviceInfo HEX NSKeyed Plist-802', + 'SBRAzSugg-Version-803', + 'SBRAzSugg-Cloud Local State-804', + 'SBRAzSugg-Cloud Delete State-805', + 'zMedAnlyAstAttr-Media Analysis Version-806', + 'zMedAnlyAstAttr-Audio Classification-807', + 'zMedAnlyAstAttr-Best Video Range Duration Time Scale-808', + 'zMedAnlyAstAttr-Best Video Range Start Time Scale-809', + 'zMedAnlyAstAttr-Best Video Range Duration Value-810', + 'zMedAnlyAstAttr-Best Video Range Start Value-811', + 'zMedAnlyAstAttr-Packed Best Playback Rect-812', + 'zMedAnlyAstAttr-Activity Score-813', + 'zMedAnlyAstAttr-Video Score-814', + 'zMedAnlyAstAttr-Audio Score-815', + 'zMedAnlyAstAttr-Wallpaper Score-816', + 'zMedAnlyAstAttr-AutoPlay Suggestion Score-817', + 'zMedAnlyAstAttr-Blurriness Score-818', + 'zMedAnlyAstAttr-Exposure Score-819', + 'zMedAnlyAstAttr-Probable Rotation Direction Confidence-820', + 'zMedAnlyAstAttr-Probable Rotation Direction-821', + 'zMedAnlyAstAttr-Screen Time Device Image Sensitivity-822', + 'zMedAnlyAstAttr-Color Normalization Data-823', + 'zMedAnlyAstAttr-Media_Analysis Image_Version-824', + 'zMedAnlyAstAttr-Image_Caption_Version-825', + 'zMedAnlyAstAttr-Video_Caption_Version-826', + 'zMedAnlyAstAttr-VA_Location_Analysis_Version-827', + 'zAssetAnalyState-Asset UUID-4TableStart-828', + 'zAssetAnalyState-Analysis State-829', + 'zAssetAnalyState-Worker Flags-830', + 'zAssetAnalyState-Worker Type-831', + ('zAssetAnalyState-Ignore Until Date-832', 'datetime'), + ('zAssetAnalyState-Last Ignored Date-833', 'datetime'), + ('zAssetAnalyState-Sort Token-834', 'datetime'), + 'zMedAnlyAstAttr-Character Recognition Attr-835', + 'zCharRecogAttr-Algorithm Version-836', + 'zCharRecogAttr-Adjustment Version-837', + 'zCharRecogAttr-Character Recognition Data-HEX-838', + 'zCharRecogAttr-Machine Readable Code Data-HEX-839', + 'zMedAnlyAstAttr-Visual Search Attributes-840', + 'zVisualSearchAttr-Algorithm Version-841', + 'zVisualSearchAttr-Adjustment Version-842', + 'zVisualSearchAttr-Visual Search Data-HEX-843', + 'zVisualSearchAttr - Sticker Confidence Algorithm Version-844', + 'zVisualSearchAttr - Sticker Confidence Score-845', + 'zAsset-Sticker Confidence Score-846', + 'zAsset-Overall Aesthetic Score-847', + 'zCompAssetAttr-Behavioral Score-848', + 'zCompAssetAttr-Failure Score zCompAssetAttr-849', + 'zCompAssetAttr-Harmonious Color Score-850', + 'zCompAssetAttr-Impressiveness Score-851', + 'zCompAssetAttr-Interaction Score-852', + 'zCompAssetAttr-Interesting Subject Score-853', + 'zCompAssetAttr-Intrusive Object Presence Score-854', + 'zCompAssetAttr-Lively Color Score-855', + 'zCompAssetAttr-Low Light-856', + 'zCompAssetAttr-Noise Score-857', + 'zCompAssetAttr-Pleasant Camera Tilt Score-858', + 'zCompAssetAttr-Pleasant Composition Score-859', + 'zCompAssetAttr-Pleasant Lighting Score-860', + 'zCompAssetAttr-Pleasant Pattern Score-861', + 'zCompAssetAttr-Pleasant Perspective Score-862', + 'zCompAssetAttr-Pleasant Post Processing Score-863', + 'zCompAssetAttr-Pleasant Reflection Score-864', + 'zCompAssetAttrPleasant Symmetry Score-865', + 'zCompAssetAttr-Sharply Focused Subject Score-866', + 'zCompAssetAttr-Tastfully Blurred Score-867', + 'zCompAssetAttr-Well Chosen Subject Score-868', + 'zCompAssetAttr-Well Framed Subject Score-869', + 'zCompAssetAttr-Well Timeed Shot Score-870', + 'zCldRes-Asset UUID-4TableStart-871', + 'zCldRes-Cloud Local State-872', + 'zCldRes-File Size-873', + 'zCldRes-Height-874', + 'zCldRes-Is Available-875', + 'zCldRes-Is Locally Available-876', + 'zCldRes-Prefetch Count-877', + 'zCldRes-Source Type-878', + 'zCldRes-Type-879', + 'zCldRes-Width-880', + ('zCldRes-Date Created-881', 'datetime'), + ('zCldRes-Last OnDemand Download Date-882', 'datetime'), + ('zCldRes-Last Prefetch Date-883', 'datetime'), + 'zCldRes-Prunedat-884', + 'zCldRes-File Path-885', + 'zCldRes-Fingerprint-886', + 'zCldRes-Item ID-887', + 'zCldRes-UniID-888', + 'zUserFeedback-UUID-4TableStart-889', + 'zUserFeedback-Feature-890', + 'zUserFeedback-Type-891', + ('zUserFeedback-Last Modified Date-892', 'datetime'), + 'zUserFeedback-Context-893', + 'zUserFeedback-Cloud Local State-894', + 'zUserFeedback-Cloud Delete State-895', + 'zUserFeedback - Creation Type-896', + 'zAddAssetAttr-zPK-897', + 'zAddAssetAttr-zENT-898', + 'ZAddAssetAttr-zOPT-899', + 'zAddAssetAttr-zAsset= zAsset_zPK-900', + 'zAddAssetAttr-UnmanAdjust Key= zUnmAdj.zPK-901', + 'zAddAssetAttr-Original Stable Hash-4Queryend-902', + 'zAddAssetAttr-Public Global UUID-903', + 'zAddAssetAttr-Deferred Photo Identifier-904', + 'zAddAssetAttr-Original Assets UUID-905', + 'zAddAssetAttr-Import Session ID-906', + 'zAddAssetAttr-Originating Asset Identifier-4endquery-907', + 'zAddAssetAttr.Adjusted Stable Hash-4endquery-908', + 'zAlbumList-zPK= Album List Key-909', + 'zAlbumList-zENT-910', + 'zAlbumList-zOPT-911', + 'zAlbumList-ID Key-912', + 'zAlbumList-UUID-913', + 'zAsset-zPK-914', + 'zAsset-zENT-915', + 'zAsset-zOPT-916', + 'zAsset-Master= zCldMast-zPK-917', + 'zAsset-Extended Attributes= zExtAttr-zPK-918', + 'zAsset-Import Session Key-919', + 'zAsset-Trashed by Participant= zSharePartic_zPK-920', + 'zAsset-Photo Analysis Attributes Key-921', + 'zAsset-Cloud Feed Assets Entry= zCldFeedEnt.zPK-922', + 'zAsset-FOK-Cloud Feed Asset Entry Key-923', + 'zAsset-Moment Share Key= zShare-zPK-924', + 'zAsset-zMoment Key= zMoment-zPK-925', + 'zAsset-Computed Attributes Asset Key-926', + 'zAsset-Highlight Being Assets-HBA Key-927', + 'zAsset-Highlight Being Extended Assets-HBEA Key-928', + 'zAsset-Highlight Being Key Asset Private-HBKAP Key-929', + 'zAsset-Highlight Being Key Asset Shared-HBKAS Key-930', + 'zAsset-Highlight Being Summary Assets-HBSA Key-931', + 'zAsset-Day Group Highlight Being Assets-DGHBA Key-932', + 'zAsset-Day Group Highlight Being Extended Assets-DGHBEA Key-933', + 'zAsset-Day Group Highlight Being Key Asset Private-DGHBKAP Key-934', + 'zAsset-Day Group Highlight Being Key Asset Shared-DGHBKAS Key-935', + 'zAsset-Day Group Highlight Being Summary Assets-DGHBSA Key-936', + 'zAsset-Month Highlight Being Key Asset Private-MHBKAP Key-937', + 'zAsset-Month Highlight Being Key Asset Shared-MHBKAS Key-938', + 'zAsset-Year Highlight Being Key Asset Private-YHBKAP Key-939', + 'zAsset-Year Highlight Being Key Asset Shared-YHBKAS Key-940', + 'zAsset-Promotion Score-941', + 'zAsset-Iconic Score-942', + 'zAsset-Media Analysis Attributes Key-943', + 'zAsset-Media Group UUID-944', + 'zAsset-UUID = store.cloudphotodb-945', + 'zAsset-Cloud_Asset_GUID = store.cloudphotodb-946', + 'zAsset.Cloud Collection GUID-947', + 'zAsset-Avalanche UUID-948', + 'zAssetAnalyState-zPK-949', + 'zAssetAnalyState-zEnt-950', + 'zAssetAnalyState-zOpt-951', + 'zAssetAnalyState-Asset= zAsset-zPK-952', + 'zAssetAnalyState-Asset UUID-953', + 'zAsstContrib-zPK-954', + 'zAsstContrib-zEnt-955', + 'zAsstContrib-zOpt-956', + 'zAsstContrib-3Library Scope Asset Contributors= zAssset-zPK-957', + 'zAsstContrib-Participant= zSharePartic-zPK-958', + 'zAssetDes-zPK-959', + 'zAssetDes-zENT-960', + 'zAssetDes-zOPT-961', + 'zAssetDes-Asset Attributes Key= zAddAssetAttr-zPK-962', + 'zCharRecogAttr-zPK-963', + 'zCharRecogAttr-zENT-964', + 'zCharRecogAttr-zOPT-965', + 'zCharRecogAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-966', + 'zCldFeedEnt-zPK= zCldShared keys-967', + 'zCldFeedEnt-zENT-968', + 'zCldFeedEnt-zOPT-969', + 'zCldFeedEnt-Album-GUID= zGenAlbum.zCloudGUID-970', + 'zCldFeedEnt-Entry Invitation Record GUID-971', + 'zCldFeedEnt-Entry Cloud Asset GUID-972', + 'zCldMast-zPK= zAsset-Master-973', + 'zCldMast-zENT-974', + 'zCldMast-zOPT-975', + 'zCldMast-Moment Share Key= zShare-zPK-976', + 'zCldMast-Cloud_Master_GUID = store.cloudphotodb-977', + 'zCldMast-Originating Asset ID-978', + 'zCldMast-Import Session ID- AirDrop-StillTesting-979', + 'CMzCldMastMedData-zENT-980', + 'CMzCldMastMedData-zOPT-981', + 'CMzCldMastMedData-CldMast= zCldMast-zPK-982', + 'AAAzCldMastMedData-zENT-983', + 'AAAzCldMastMedData-zOPT-984', + 'AAAzCldMastMedData-CldMast key-985', + 'AAAzCldMastMedData-AddAssetAttr= AddAssetAttr-zPK-986', + 'zCldRes-zPK-987', + 'zCldRes-zENT-988', + 'zCldRes-zOPT-989', + 'zCldRes-Asset= zAsset-zPK-990', + 'zCldRes-Cloud Master= zCldMast-zPK-991', + 'zCldRes-Asset UUID-992', + 'zCldShareAlbumInvRec-zPK-993', + 'zCldShareAlbumInvRec-zEnt-994', + 'zCldShareAlbumInvRec-zOpt-995', + 'zCldShareAlbumInvRec-Album Key-996', + 'zCldShareAlbumInvRec-FOK Album Key-997', + 'zCldShareAlbumInvRec-Album GUID-998', + 'zCldShareAlbumInvRec-zUUID-999', + 'zCldShareAlbumInvRec-Cloud GUID-1000', + 'zCldSharedComment-zPK-1001', + 'zCldSharedComment-zENT-1002', + 'zCldSharedComment-zOPT-1003', + 'zCldSharedComment-Commented Asset Key= zAsset-zPK-1004', + 'zCldSharedComment-CldFeedCommentEntry= zCldFeedEnt.zPK-1005', + 'zCldSharedComment-FOK-Cld-Feed-Comment-Entry-Key-1006', + 'zCldSharedComment-Liked Asset Key= zAsset-zPK-1007', + 'zCldSharedComment-CldFeedLikeCommentEntry Key-1008', + 'zCldSharedComment-FOK-Cld-Feed-Like-Comment-Entry-Key-1009', + 'zCldSharedComment-Cloud GUID-1010', + 'zCompAssetAttr-zPK-1011', + 'zCompAssetAttr-zEnt-1012', + 'zCompAssetAttr-zOpt-1013', + 'zCompAssetAttr-Asset Key-1014', + 'zAsset-Compute_Sync_Attributes= zCompSyncAttr-zPK-1015', + 'zCompSyncAttr-zPK= zAsset-zCompSyncAttr-1016', + 'zCompSyncAttr-zAsset= zAsset-zPK-1017', + 'zCompSyncAttr-zENT-1018', + 'zCompSyncAttr-zOPT-1019', + 'zDetFace-zPK-1020', + 'zDetFace-zEnt-1021', + 'zDetFace.zOpt-1022', + 'zDetFace-AssetForFace= zAsset-zPK or Asset Containing Face-1023', + 'zDetFace-PersonForFace= zPerson-zPK-1024', + 'zDetFace-Person Being Key Face-1025', + 'zDetFace-Face Print-1026', + 'zDetFace-FaceGroupBeingKeyFace= zDetFaceGroup-zPK-1027', + 'zDetFace-FaceGroup= zDetFaceGroup-zPK-1028', + 'zDetFace-UUID-1029', + 'zDetFaceGroup-zPK-1030', + 'zDetFaceGroup-zENT-1031', + 'zDetFaceGroup-zOPT-1032', + 'zDetFaceGroup-AssocPerson= zPerson-zPK-1033', + 'zDetFaceGroup-KeyFace= zDetFace-zPK-1034', + 'zDetFaceGroup-UUID-1035', + 'zDetFacePrint-zPK-1036', + 'zDetFacePrint-zEnt-1037', + 'zDetFacePrint-zOpt-1038', + 'zDetFacePrint-Face Key-1039', + 'zExtAttr-zPK= zAsset-zExtendedAttributes-1040', + 'zExtAttr-zENT-1041', + 'zExtAttr-zOPT-1042', + 'zExtAttr-Asset Key-1043', + 'zFaceCrop-zPK-1044', + 'zFaceCrop-zEnt-1045', + 'zFaceCrop-zOpt-1046', + 'zFaceCrop-Asset Key-1047', + 'zFaceCrop-Invalid Merge Canidate Person UUID-1048', + 'zFaceCrop-Person=zPerson-zPK&zDetFace-Person-Key-1049', + 'zFaceCrop-Face Key-1050', + 'zFaceCrop-UUID-1051', + 'zGenAlbum-zPK=26AlbumLists= 26Albums-1052', + 'zGenAlbum-zENT-1053', + 'zGenAlbum-zOpt-1054', + 'zGenAlbum-Custom Key Asset-1055', + 'zGenAlbum-Parent Folder Key= zGenAlbum-zPK-1056', + 'zGenAlbum-FOK Parent Folder-1057', + 'zGenAlbum-zSyndicate-1058', + 'zGenAlbum-UUID-1059', + 'SWYConverszGenAlbum-UUID-1060', + 'zGenAlbum-Cloud_GUID = store.cloudphotodb-1061', + 'SWYConverszGenAlbum-Cloud GUID-1062', + 'zGenAlbum-Project Render UUID-1063', + 'SWYConverszGenAlbum-Project Render UUID-1064', + 'zIntResou-zPK-1065', + 'zIntResou-zENT-1066', + 'zIntResou-zOPT-1067', + 'zIntResou-Asset= zAsset_zPK-1068', + 'zIntResou-Fingerprint-4Queryend-1069', + 'zIntResou-Stable Hash-4Queryend-1070', + 'zIntResou-Cloud Delete Asset UUID With Resource Type-1071', + 'zMedAnlyAstAttr-zPK= zAddAssetAttr-Media Metadata-1072', + 'zMedAnlyAstAttr-zEnt-1073', + 'zMedAnlyAstAttr-zOpt-1074', + 'zMedAnlyAstAttr-Asset= zAsset-zPK-1075', + 'zMemory-zPK-1076', + 'zMemory-zENT-1077', + 'zMemory-zOPT-1078', + 'zMemory-Key Asset= zAsset-zPK-1079', + 'zMemory-UUID-1080', + 'zMoment-zPK-1081', + 'zMoment-zENT-1082', + 'zMoment-zOPT-1083', + 'zMoment-Highlight Key-1084', + 'zMoment-UUID-1085', + 'zPerson-zPK=zDetFace-Person-1086', + 'zPerson-zEnt-1087', + 'zPerson-zOpt-1088', + 'zPerson-Share Participant= zSharePartic-zPK-1089', + 'zPerson-KeyFace=zDetFace-zPK-1090', + 'zPerson-Assoc Face Group Key-1091', + 'zPerson-Person UUID-1092', + 'zPerson-Is_Me_Confidence-1093', + 'zPhotoAnalysisAssetAttr-zPK-1094', + 'zPhotoAnalysisAssetAttr-zEnt-1095', + 'zPhotoAnalysisAssetAttr-zOpt-1096', + 'zPhotoAnalysisAssetAttr-zAsset = zAsset-zPK-1097', + 'zSceneP-zPK-1098', + 'zSceneP-zENT-1099', + 'zSceneP-zOPT-1100', + 'zShare-zPK-1101', + 'zShare-zENT-1102', + 'zShare-zOPT-1103', + 'zShare-UUID-1104', + 'SPLzShare-UUID-1105', + 'zShare-Scope ID = store.cloudphotodb-1106', + 'zSharePartic-zPK-1107', + 'zSharePartic-zENT-1108', + 'zSharePartic-zOPT-1109', + 'zSharePartic-Share Key= zShare-zPK-1110', + 'zSharePartic-Person= zPerson-zPK-1111', + 'zSharePartic-UUID-1112', + 'SBKAzSugg-zPK-1113', + 'SBKAzSugg-zENT-1114', + 'SBKAzSugg-zOPT-1115', + 'SBKAzSugg-UUID-1116', + 'SBRAzSugg-zPK-1117', + 'SBRAzSugg-zENT-1118', + 'SBRAzSugg-zOPT-1119', + 'SBRAzSugg-UUID-1120', + 'z3SuggBRA-3RepAssets-1121', + 'z3SuggBRA-65SuggBeingRepAssets-1122', + 'z3SuggBKA-65SuggBeingKeyAssets= zSugg-zPK-1123', + 'z3SuggBKA-3KeyAssets1= zAsset-zPK-1124', + 'zUnmAdj-zPK=zAddAssetAttr.ZUnmanAdj Key-1125', + 'zUnmAdj-zOPT-1126', + 'zUnmAdj-zENT-1127', + 'zUnmAdj-Asset Attributes= zAddAssetAttr.zPK-1128', + 'zUnmAdj-UUID-1129', + 'zUnmAdj-Other Adjustments Fingerprint-1130', + 'zUnmAdj-Similar to Orig Adjustments Fingerprint-1131', + 'zUserFeedback-zPK-1132', + 'zUserFeedback-zENT-1133', + 'zUserFeedback-zOPT-1134', + 'zUserFeedback-Person= zPerson-zPK-1135', + 'zUserFeedback-Memory= zMemory-zPK-1136', + 'zUserFeedback-UUID-1137', + 'zVisualSearchAttr-zPK-1138', + 'zVisualSearchAttr-zENT-1139', + 'zVisualSearchAttr-zOPT-1140', + 'zVisualSearchAttr-MedAssetAttr= zMedAnlyAstAttr-zPK-1141', + 'z29AlbumList-29Albums= zGenAlbum-zPK-1142', + 'z29AlbumList-Album List Key-1143', + 'z29AlbumList-FOK29Albums Key-1144', + 'z30Assets-30Albums= zGenAlbum-zPK-1145', + 'z30Assets-3Asset Key= zAsset-zPK in the Album-1146', + 'z30Assets-FOK-3Assets= zAsset.Z_FOK_CLOUDFEEDASSETSENTRY-1147', + 'z3MemoryBMCAs-3MovieCuratedAssets= zAsset-zPK-1148', + 'z3MemoryBCAs-3CuratedAssets= zAsset-zPK-1149', + 'z3MemoryBCAs-51MemoriesBeingCuratedAssets= zMemory-zPK-1150', + 'z3MemoryBECAs-3ExtCuratedAssets= zAsset-zPK-1151', + 'z3MemoryBECAs-51MemoriesBeingExtCuratedAssets= zMemory-zPK-1152', + 'z3MemoryBRAs-3RepresentativeAssets= zAsset-zPK-1153', + 'z3MemoryBRAs-51RepresentativeAssets= zMemory-zPK-1154', + 'z3MemoryBUCAs-3UserCuratedAssets= zAsset-zPK-1155', + 'z3MemoryBUCAs-51MemoriesBeingUserCuratedAssets= zMemory-zPK-1156', + 'z3MemoryBCAs-51Memories Being Custom User Assets-1157', + 'z3MemoryBCAs-3Custom User Assets-1158', + 'z3MemoryBCAs-FOK-3Custom User Assets-1159') + data_list = get_sqlite_db_records(source_path, query) - tlactivity = 'Ph98.2-iOS18_Ref_for_Asset_Analysis-SyndPL' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for iOS 18 Syndication.photoslibrary-database-Photos.sqlite') - - db.close() - return - - -__artifacts_v2__ = { - 'Ph98-1-iOS18_Ref_for_Asset_Analysis-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph98.1 iOS18 Reference for Asset Analysis', - 'description': 'Parses asset records from PhotoData-Photos.sqlite. This parser includes the largest' - ' set of decoded data based on testing and research conducted by Scott Koenig' - ' https://theforensicscooter.com/. I recommend opening the TSV generated reports' - ' with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md TimelineExplorer' - ' to view, search and filter the results.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-06-14', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph98ios18refforassetanalysisphdapsql' - }, - 'Ph98-2-iOS18_Ref_for_Asset_Analysis-SyndPL': { - 'name': 'SyndPL Photos.sqlite Ph98.2 iOS18 Reference for Asset Analysis', - 'description': 'Parses asset records from Syndication.photoslibrary-database-Photos.sqlite.' - ' This parser includes the largest set of decoded data based on testing and research' - ' conducted by Scott Koenig https://theforensicscooter.com/. I recommend opening the' - ' TSV generated reports with Zimmermans EZTools https://ericzimmerman.github.io/#!index.md' - ' TimelineExplorer to view, search and filter the results.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '1.0', - 'date': '2024-06-14', - 'requirements': 'Acquisition that contains Syndication.photoslibrary-database-Photos.sqlite', - 'category': 'Photos.sqlite-R-Reference_for_Asset_Analysis', - 'notes': '', - 'paths': '*/mobile/Library/Photos/Libraries/Syndication.photoslibrary/database/Photos.sqlite*', - 'function': 'get_ph98ios18refforassetanalysissyndpl' - } -} + return data_headers, data_list, source_path diff --git a/scripts/artifacts/Ph9BurstAvalanche.py b/scripts/artifacts/Ph9BurstAvalanche.py index 750b8268..045327ee 100644 --- a/scripts/artifacts/Ph9BurstAvalanche.py +++ b/scripts/artifacts/Ph9BurstAvalanche.py @@ -1,39 +1,48 @@ -# Photos.sqlite -# Author: Scott Koenig, assisted by past contributors -# Version: 2.0 -# -# Description: -# Parses basic asset record data from Photos.sqlite for burst avalanche assets and supports iOS 11-18. -# The results for this script will contain one record per ZASSET table Z_PK value. -# This parser is based on research and SQLite queries written by Scott Koenig -# https://theforensicscooter.com/ and queries found at https://github.com/ScottKjr3347 -# +__artifacts_v2__ = { + 'Ph9BurstAvalanchePhDaPsql': { + 'name': 'Ph9-Burst Avalanche-PhDaPsql', + 'description': 'Parses basic asset row data from PhotoData-Photos.sqlite for burst avalanche assets' + ' and supports iOS 11-17. The results for this script will contain' + ' one row per ZASSET table Z_PK value.', + 'author': 'Scott Koenig', + 'version': '5.0', + 'date': '2025-01-05', + 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', + 'category': 'Photos.sqlite-C-Other_Artifacts', + 'notes': '', + 'paths': ('*/PhotoData/Photos.sqlite*',), + "output_types": ["standard", "tsv", "none"] + } +} import os import scripts.artifacts.artGlobals from packaging import version -from scripts.artifact_report import ArtifactHtmlReport -from scripts.ilapfuncs import logfunc, tsv, timeline, kmlgen, is_platform_windows, media_to_html, open_sqlite_db_readonly - +from scripts.builds_ids import OS_build +from scripts.ilapfuncs import artifact_processor, get_file_path, open_sqlite_db_readonly, get_sqlite_db_records, logfunc -def get_ph9burstavalanchephdapsql(files_found, report_folder, seeker, wrap_text, timezone_offset): - for file_found in files_found: - file_found = str(file_found) +@artifact_processor +def Ph9BurstAvalanchePhDaPsql(files_found, report_folder, seeker, wrap_text, timezone_offset): + for source_path in files_found: + source_path = str(source_path) - if file_found.endswith('.sqlite'): + if source_path.endswith('.sqlite'): break if report_folder.endswith('/') or report_folder.endswith('\\'): report_folder = report_folder[:-1] iosversion = scripts.artifacts.artGlobals.versionf if version.parse(iosversion) <= version.parse("10.3.4"): - logfunc("Unsupported version for PhotoData-Photos.sqlite burst avalanche assets from iOS " + iosversion) + logfunc("Unsupported version for PhotoData-Photos.sqlite iOS " + iosversion) + return (), [], source_path if (version.parse(iosversion) >= version.parse("11")) & (version.parse(iosversion) < version.parse("14")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZAVALANCHEPICKTYPE @@ -76,59 +85,38 @@ def get_ph9burstavalanchephdapsql(files_found, report_folder, seeker, wrap_text, WHERE (zAsset.ZAVALANCHEPICKTYPE > 0) OR (zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE > 0) ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for burst avalanche assets' \ - ' and supports iOS 11-13. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph9-Burst Avalanche-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph9-Burst Avalanche-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created', - 'zAsset-Avalanche_Pick_Type-BurstAsset', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset', - 'zAsset-Visibility State', - 'zAsset-Directory-Path', - 'zAsset-Filename', - 'zAddAssetAttr- Original Filename', - 'zCldMast- Original Filename', - 'zCldMast-Import Session ID- AirDrop-StillTesting', - 'zAsset-zPK', - 'zAddAssetAttr-zPK', - 'zAsset-UUID = store.cloudphotodb', - 'zAddAssetAttr-Master Fingerprint') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph9-Burst Avalanche-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph9-Burst Avalanche-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc(f'No data available for PhotoData-Photos.sqlite Burst Avalanche Assets') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Avalanche_Pick_Type-BurstAsset-1', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-2', + 'zAsset-Visibility State-3', + 'zAsset-Directory-Path-4', + 'zAsset-Filename-5', + 'zAddAssetAttr- Original Filename-6', + 'zCldMast- Original Filename-7', + 'zCldMast-Import Session ID- AirDrop-StillTesting-8', + 'zAsset-zPK-9', + 'zAddAssetAttr-zPK-10', + 'zAsset-UUID = store.cloudphotodb-11', + 'zAddAssetAttr-Master Fingerprint-12') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif (version.parse(iosversion) >= version.parse("14")) & (version.parse(iosversion) < version.parse("18")): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZAVALANCHEPICKTYPE @@ -171,66 +159,45 @@ def get_ph9burstavalanchephdapsql(files_found, report_folder, seeker, wrap_text, WHERE (zAsset.ZAVALANCHEPICKTYPE > 0) OR (zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE > 0) ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for burst avalanche assets' \ - ' and supports iOS 14-17. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph9-Burst Avalanche-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph9-Burst Avalanche-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Avalanche_Pick_Type-BurstAsset-1', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-2', - 'zAsset-Visibility State-3', - 'zAsset-Directory-Path-4', - 'zAsset-Filename-5', - 'zAddAssetAttr- Original Filename-6', - 'zCldMast- Original Filename-7', - 'zCldMast-Import Session ID- AirDrop-StillTesting-8', - 'zAsset-zPK-9', - 'zAddAssetAttr-zPK-10', - 'zAsset-UUID = store.cloudphotodb-11', - 'zAddAssetAttr-Master Fingerprint-12') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph9-Burst Avalanche-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph9-Burst Avalanche-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc(f'No data available for PhotoData-Photos.sqlite Burst Avalanche Assets') - - db.close() - return + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Avalanche_Pick_Type-BurstAsset-1', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-2', + 'zAsset-Visibility State-3', + 'zAsset-Directory-Path-4', + 'zAsset-Filename-5', + 'zAddAssetAttr- Original Filename-6', + 'zCldMast- Original Filename-7', + 'zCldMast-Import Session ID- AirDrop-StillTesting-8', + 'zAsset-zPK-9', + 'zAddAssetAttr-zPK-10', + 'zAsset-UUID = store.cloudphotodb-11', + 'zAddAssetAttr-Master Fingerprint-12') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path elif version.parse(iosversion) >= version.parse("18"): - file_found = str(files_found[0]) - db = open_sqlite_db_readonly(file_found) - cursor = db.cursor() + source_path = get_file_path(files_found,"Photos.sqlite") + if source_path is None or not os.path.exists(source_path): + logfunc(f"Photos.sqlite not found for iOS version {iosversion}") + return (), [], source_path + data_list = [] - cursor.execute(""" + query = ''' SELECT DateTime(zAsset.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'zAsset-Date Created', CASE zAsset.ZAVALANCHEKIND - WHEN 0 THEN '0-No_Avalanche iOS18_Still_Testing-0' - WHEN 1 THEN '1-Is_Avalanche iOS18_Still_Testing-1' + WHEN 0 THEN '0-No_Avalanche_Still_Testing-0' + WHEN 1 THEN '1-Is_Avalanche_Still_Testing-1' ELSE 'Unknown-New-Value!: ' || zAsset.ZAVALANCHEKIND || '' - END AS 'zAsset-Avalanche_Kind-iOS18', + END AS 'zAsset-Avalanche_Kind', CASE zAsset.ZAVALANCHEPICKTYPE WHEN 0 THEN '0-NA-Single_Asset_Burst_UUID-0_RT' WHEN 2 THEN '2-Burst_Asset_Not_Selected-2_RT' @@ -264,77 +231,36 @@ def get_ph9burstavalanchephdapsql(files_found, report_folder, seeker, wrap_text, zAsset.Z_PK AS 'zAsset-zPK', zAddAssetAttr.Z_PK AS 'zAddAssetAttr-zPK', zAsset.ZUUID AS 'zAsset-UUID = store.cloudphotodb', - zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash-iOS18', - zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash-iOS18' + zAddAssetAttr.ZORIGINALSTABLEHASH AS 'zAddAssetAttr-Original Stable Hash', + zAddAssetAttr.ZADJUSTEDSTABLEHASH AS 'zAddAssetAttr.Adjusted Stable Hash' FROM ZASSET zAsset LEFT JOIN ZADDITIONALASSETATTRIBUTES zAddAssetAttr ON zAddAssetAttr.Z_PK = zAsset.ZADDITIONALATTRIBUTES LEFT JOIN ZCLOUDMASTER zCldMast ON zAsset.ZMASTER = zCldMast.Z_PK WHERE (zAsset.ZAVALANCHEPICKTYPE > 0) OR (zAddAssetAttr.ZCLOUDAVALANCHEPICKTYPE > 0) ORDER BY zAsset.ZDATECREATED - """) - - all_rows = cursor.fetchall() - usageentries = len(all_rows) - data_list = [] - counter = 0 - if usageentries > 0: - for row in all_rows: - data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], - row[10], row[11], row[12], row[13], row[14])) - - counter += 1 - - description = 'Parses basic asset record data from PhotoData-Photos.sqlite for burst avalanche assets' \ - ' and supports iOS 18. The results for this script will contain' \ - ' one record per ZASSET table Z_PK value.' - report = ArtifactHtmlReport('Ph9-Burst Avalanche-PhDaPsql') - report.start_artifact_report(report_folder, 'Ph9-Burst Avalanche-PhDaPsql', description) - report.add_script() - data_headers = ('zAsset-Date Created-0', - 'zAsset-Avalanche_Kind-iOS18-1', - 'zAsset-Avalanche_Pick_Type-BurstAsset-2', - 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-3', - 'zAsset-Visibility State-4', - 'zAsset-Directory-Path-5', - 'zAsset-Filename-6', - 'zAddAssetAttr- Original Filename-7', - 'zCldMast- Original Filename-8', - 'zCldMast-Import Session ID- AirDrop-StillTesting-9', - 'zAsset-zPK-10', - 'zAddAssetAttr-zPK-11', - 'zAsset-UUID = store.cloudphotodb-12', - 'zAddAssetAttr-Original Stable Hash-iOS18-13', - 'zAddAssetAttr.Adjusted Stable Hash-iOS18-14') - report.write_artifact_data_table(data_headers, data_list, file_found) - report.end_artifact_report() - - tsvname = 'Ph9-Burst Avalanche-PhDaPsql' - tsv(report_folder, data_headers, data_list, tsvname) - - tlactivity = 'Ph9-Burst Avalanche-PhDaPsql' - timeline(report_folder, tlactivity, data_list, data_headers) - - else: - logfunc('No data available for PhotoData-Photos.sqlite Burst Avalanche Assets') - - db.close() - return - - -__artifacts_v2__ = { - 'Ph9-Burst Avalanche-PhDaPsql': { - 'name': 'PhDaPL Photos.sqlite Ph9 Burst Avalanche Assets', - 'description': 'Parses basic asset record data from PhotoData-Photos.sqlite for burst avalanche assets' - ' and supports iOS 11-17. The results for this script will contain' - ' one record per ZASSET table Z_PK value.', - 'author': 'Scott Koenig https://theforensicscooter.com/', - 'version': '2.0', - 'date': '2024-06-12', - 'requirements': 'Acquisition that contains PhotoData-Photos.sqlite', - 'category': 'Photos.sqlite-C-Other_Artifacts', - 'notes': '', - 'paths': '*/PhotoData/Photos.sqlite*', - 'function': 'get_ph9burstavalanchephdapsql' - } -} + ''' + + db_records = get_sqlite_db_records(source_path, query) + for row in db_records: + data_list.append((row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], + row[10], row[11], row[12], row[13], row[14])) + + data_headers = (('zAsset-Date Created-0', 'datetime'), + 'zAsset-Avalanche_Kind-1', + 'zAsset-Avalanche_Pick_Type-BurstAsset-2', + 'zAddAssetAttr-Cloud_Avalanche_Pick_Type-BurstAsset-3', + 'zAsset-Visibility State-4', + 'zAsset-Directory-Path-5', + 'zAsset-Filename-6', + 'zAddAssetAttr- Original Filename-7', + 'zCldMast- Original Filename-8', + 'zCldMast-Import Session ID- AirDrop-StillTesting-9', + 'zAsset-zPK-10', + 'zAddAssetAttr-zPK-11', + 'zAsset-UUID = store.cloudphotodb-12', + 'zAddAssetAttr-Original Stable Hash-13', + 'zAddAssetAttr.Adjusted Stable Hash-14') + data_list = get_sqlite_db_records(source_path, query) + + return data_headers, data_list, source_path diff --git a/scripts/artifacts/systemVersionPlist.py b/scripts/artifacts/systemVersionPlist.py index dceade4f..962764a5 100644 --- a/scripts/artifacts/systemVersionPlist.py +++ b/scripts/artifacts/systemVersionPlist.py @@ -1,23 +1,22 @@ __artifacts_v2__ = { 'systemVersionPlist': { 'name': 'System Version plist', - 'description': 'Parses basic data from device acquisition */System/Library/CoreServices/SystemVersion.plist' - ' which contains some important data related to a device being analyzed to include' - ' the iOS version. Previously named Ph99SystemVersionPlist.py', + 'description': 'Parses basic data from */System/Library/CoreServices/SystemVersion.plist' + ' which is a plist in GK Logical Plus extractions that will contain the iOS version.' + ' Previously named Ph99SystemVersionPlist.py', 'author': 'Scott Koenig', - 'version': '1.1', - 'date': '2024-06-17', + 'version': '5.0', + 'date': '2025-01-03', 'requirements': 'Acquisition that contains SystemVersion.plist', 'category': 'IOS Build', 'notes': '', 'paths': ('*/System/Library/CoreServices/SystemVersion.plist',), - "output_types": ["html", "tsv", "lava"] + "output_types": ["standard", "tsv", "none"] } } import plistlib -import scripts.artifacts.artGlobals - +import scripts.artifacts.artGlobals from scripts.ilapfuncs import artifact_processor, logfunc, device_info @artifact_processor @@ -40,5 +39,5 @@ def systemVersionPlist(files_found, report_folder, seeker, wrap_text, time_offse if key == "ProductName": device_info("Device Information", "Product Name", val, source_path) - data_headers = ('Property','Property Value' ) + data_headers = ('Property','Property Value') return data_headers, data_list, source_path diff --git a/scripts/report_icons.py b/scripts/report_icons.py index 634d75c6..285ca850 100644 --- a/scripts/report_icons.py +++ b/scripts/report_icons.py @@ -710,13 +710,13 @@ 'PHOTOS.SQLITE-B-INTERACTION_ARTIFACTS': { 'PH3.1-TRASHED RECENTLY DELETED-PHDAPSQL': 'trash-2', 'PH4-HIDDEN-PHDAPSQL': 'eye-off', - 'PH6-VIEWED AND PLAYED DATA-PHDAPSQL': 'eye', + 'PH6-VIEW AND PLAY DATA-PHDAPSQL': 'eye', 'PH7-FAVORITE-PHDAPSQL': 'heart', 'PH8-HAS ADJUSTMENT-PHDAPSQL': 'edit', 'PH11-KWRDSCAPSTITLESDESCRIPSLIKESBASICASSTDATA-PHDAPSQL': 'info', }, 'PHOTOS.SQLITE-C-OTHER_ARTIFACTS': { - 'PH5.1-HAS LOCATIONS-PHDAPSQL': 'map-pin', + 'PH5.1-ASSETS HAVE VALID LOCATIONS-PHDAPSQL': 'map-pin', 'PH9-BURST AVALANCHE-PHDAPSQL': 'layers', 'PH10.1-ASSETS HAVE EMBEDDED FILES-PHDAPSQL': 'file-plus', 'PH26.1-SYNDICATION ID ASSETS-PHDAPSQL': 'refresh-ccw', @@ -724,17 +724,17 @@ 'PHOTOS.SQLITE-D-GENERIC_ALBUM_RECORDS-NAD': { 'PH20.1-ALBUM RECORDS NAD-PHDAPSQL': 'book', 'PH21-NON-SHARED ALBUM RECORDS NAD-PHDAPSQL': 'book', - 'PH23-SHARED ALBUM RECORDS NAD-PHDAPSQL': 'upload-cloud', + 'PH23-SHARED ALBUM RECORDS & INVITES NAD-PHDAPSQL': 'upload-cloud', 'PH25.1-SWY CONVERSATION RECORDS NAD-PHDAPSQL': 'message-square', }, 'PHOTOS.SQLITE-E-ASSET_IN_ALBUMS': { 'PH22-ASSETS IN NON-SHARED ALBUMS-PHDAPSQL': 'book-open', - 'PH24-ASSETS IN SHARED ALBUMS-PHDAPSQL': 'upload-cloud', + 'PH24-ASSETS IN SHARED ALBUMS & INVITES-PHDAPSQL': 'upload-cloud', }, 'PHOTOS.SQLITE-F-CLOUD_SHARED_METHODS': { - 'PH30-ICLD SHARE METHODS NAD-PHDAPSQL': 'upload-cloud', - 'PH31-ICLD SHARED PHOTO LIB RECORDS NAD-PHDAPSQL': 'upload-cloud', - 'PH32-ICLD SHARED PHOTO LIB ASSETS-PHDAPSQL': 'upload-cloud', + 'PH30-ICLOUD SHARED METHODS NAD-PHDAPSQL': 'upload-cloud', + 'PH31-ICLOUD SPL WITH PARTICIPANTS NAD-PHDAPSQL': 'upload-cloud', + 'PH32-ICLOUD SPL ASSETS WITH CONTRIBUTOR-PHDAPSQL': 'upload-cloud', 'PH33-ICLD SPL ASSETS FROM OTHER CONTRIB-PHDAPSQL': 'download-cloud', 'PH34-ICLD SHARED LINK RECORDS NAD-PHDAPSQL': 'link', 'PH35-ICLD SHARED LINK ASSETS-PHDAPSQL': 'link', @@ -772,7 +772,7 @@ 'PH1.2-ASSET BASIC DATA-SYNDPL': 'image', 'PH2.2-ASSET BASIC DATA & CONVERS DATA-SYNDPL': 'image', 'PH3.2-REMOVED FROM CAMERA ROLL-SYNDPL': 'delete', - 'PH5.2-HAS LOCATIONS-SYNDPL': 'map-pin', + 'PH5.2-ASSETS HAVE VALID LOCATIONS-SYNDPL': 'map-pin', 'PH10.2-ASSETS HAVE EMBEDDED FILES-SYNDPL': 'file-plus', 'PH15.2-PEOPLE & FACES NAD-SYNDPL': 'smile', 'PH16.2-PEOPLE & FACES ASSET DATA-SYNDPL': 'smile',