diff options
Diffstat (limited to 'subprojects')
| -rw-r--r-- | subprojects/SPIRV-Tools.wrap | 4 | ||||
| -rw-r--r-- | subprojects/ffmpeg9.wrap | 8 | ||||
| -rw-r--r-- | subprojects/glslang.wrap | 4 | ||||
| -rw-r--r-- | subprojects/harfbuzz.wrap | 4 | ||||
| -rw-r--r-- | subprojects/libalabaster.wrap | 4 | ||||
| -rw-r--r-- | subprojects/libcdio-paranoia.wrap | 6 | ||||
| -rw-r--r-- | subprojects/libnaunet.wrap | 4 | ||||
| -rw-r--r-- | subprojects/libplacebo.wrap | 4 | ||||
| -rw-r--r-- | subprojects/packagefiles/ffmpeg/meson.build | 9 | ||||
| -rw-r--r-- | subprojects/packagefiles/ffmpeg/meson_options.txt | 3 | ||||
| -rw-r--r-- | subprojects/packagefiles/ffmpeg/version_9.0.1.diff | 29 | ||||
| -rw-r--r-- | subprojects/packagefiles/libcdio-paranoia/meson.build | 3 | ||||
| -rw-r--r-- | subprojects/packagefiles/libplacebo/android_opengl_custom_dispatch.diff | 54 | ||||
| -rw-r--r-- | subprojects/packagefiles/libplacebo/glslang_meson_wrap.diff | 40 | ||||
| -rw-r--r-- | subprojects/packagefiles/libplacebo/no_uniforms_in_vert.diff | 89 | ||||
| -rw-r--r-- | subprojects/packagefiles/libplacebo/shaderc_optimize_size.diff | 13 | ||||
| -rw-r--r-- | subprojects/shaderc.wrap | 5 | ||||
| -rw-r--r-- | subprojects/stela.wrap | 4 |
18 files changed, 259 insertions, 28 deletions
diff --git a/subprojects/SPIRV-Tools.wrap b/subprojects/SPIRV-Tools.wrap index 1586b61..347a62d 100644 --- a/subprojects/SPIRV-Tools.wrap +++ b/subprojects/SPIRV-Tools.wrap @@ -1,6 +1,6 @@ [wrap-git] -directory = SPIRV-Tools-v2025.4 +directory = SPIRV-Tools-v2026.2 url = https://github.com/KhronosGroup/SPIRV-Tools.git -revision = v2025.4 +revision = v2026.2 depth = 1 method = cmake diff --git a/subprojects/ffmpeg9.wrap b/subprojects/ffmpeg9.wrap new file mode 100644 index 0000000..313d731 --- /dev/null +++ b/subprojects/ffmpeg9.wrap @@ -0,0 +1,8 @@ +[wrap-file] +directory = ffmpeg-9.0.1 +source_url = https://ffmpeg.org/releases/ffmpeg-9.0.1.tar.gz +source_filename = ffmpeg-9.0.1.tar.gz +source_hash = 657dbf258cce6c0681714b6e40b8ca69e988c67ecfc2f7aab47574e6ebaceb38 + +patch_directory = ffmpeg +diff_files = ffmpeg/version_9.0.1.diff diff --git a/subprojects/glslang.wrap b/subprojects/glslang.wrap index e06e2f6..ef7a4dc 100644 --- a/subprojects/glslang.wrap +++ b/subprojects/glslang.wrap @@ -1,6 +1,6 @@ [wrap-git] -directory = glslang-16.0.0 +directory = glslang-16.4.0 url = https://github.com/KhronosGroup/glslang.git -revision = 16.0.0 +revision = 16.4.0 depth = 1 method = cmake diff --git a/subprojects/harfbuzz.wrap b/subprojects/harfbuzz.wrap index 5d721b0..a497a7d 100644 --- a/subprojects/harfbuzz.wrap +++ b/subprojects/harfbuzz.wrap @@ -1,7 +1,7 @@ [wrap-git] -directory = harfbuzz-14.2.1 +directory = harfbuzz-14.3.1 url = https://github.com/harfbuzz/harfbuzz.git -revision = 14.2.1 +revision = 14.3.1 depth = 1 patch_directory = harfbuzz diff_files = harfbuzz/no_bigobj_windows.diff diff --git a/subprojects/libalabaster.wrap b/subprojects/libalabaster.wrap index 7a55d18..f2c94fd 100644 --- a/subprojects/libalabaster.wrap +++ b/subprojects/libalabaster.wrap @@ -1,5 +1,5 @@ [wrap-git] -directory = libalabaster-c633226 +directory = libalabaster-b617e3c url = https://git.akon.city/libalabaster.git push-url = git@git.akon.city:libalabaster.git -revision = c633226d2b615f46ef38cc99603775dccdf96ecd +revision = b617e3ccb25a0ac3c22f8c02722c8108b2f78d6e diff --git a/subprojects/libcdio-paranoia.wrap b/subprojects/libcdio-paranoia.wrap index c271d48..b408b0f 100644 --- a/subprojects/libcdio-paranoia.wrap +++ b/subprojects/libcdio-paranoia.wrap @@ -1,7 +1,7 @@ [wrap-git] -directory = libcdio-paranoia-717f126 -url = https://github.com/rocky/libcdio-paranoia.git -revision = 717f1263910695e8bc66ad33d08a61ff572c0691 +directory = libcdio-paranoia-384f4da +url = https://github.com/libcdio/libcdio-paranoia.git +revision = 384f4dac7e211cce67a14f3df53fc596965b6c94 depth = 1 patch_directory = libcdio-paranoia diff --git a/subprojects/libnaunet.wrap b/subprojects/libnaunet.wrap index 25cdba2..df8ee63 100644 --- a/subprojects/libnaunet.wrap +++ b/subprojects/libnaunet.wrap @@ -1,5 +1,5 @@ [wrap-git] -directory = libnaunet-a389b8f +directory = libnaunet-3a51988 url = https://git.akon.city/libnaunet.git push-url = git@git.akon.city:libnaunet.git -revision = a389b8f2f9c55b76fe5a28c3f1fea798ed37aa98 +revision = 3a51988d764d54723288dc31a1779ece44cac1e9 diff --git a/subprojects/libplacebo.wrap b/subprojects/libplacebo.wrap index a16dd82..e960982 100644 --- a/subprojects/libplacebo.wrap +++ b/subprojects/libplacebo.wrap @@ -1,7 +1,7 @@ [wrap-git] -directory = libplacebo-05ac2cc +directory = libplacebo-22ee762 url = https://code.videolan.org/videolan/libplacebo.git -revision = 05ac2cca6571c04d06369a26825d207781b73f32 +revision = 22ee762e8e0890fc54068beb670310f0edce7263 clone-recursive = true depth = 1 diff --git a/subprojects/packagefiles/ffmpeg/meson.build b/subprojects/packagefiles/ffmpeg/meson.build index ed3617c..aa881bc 100644 --- a/subprojects/packagefiles/ffmpeg/meson.build +++ b/subprojects/packagefiles/ffmpeg/meson.build @@ -12,6 +12,7 @@ is_windows = host_machine.system() == 'windows' is_msvc = compiler.get_id() == 'msvc' or compiler.get_id() == 'clang-cl' is_mingw = is_windows and not is_msvc is_android = host_machine.system() == 'android' +is_static_shared_lib = is_android args = ['-DFFMPEG_VERSION="' + meson.project_version() + '"'] deps = [] @@ -33,9 +34,6 @@ endif extra_options += ['--arch=' + cpu] extra_options += ['--cc=' + compiler.cmd_array()[0]] if meson.is_cross_build() - if is_msvc - extra_options += ['--ld=' + meson.get_external_property('ld')] - endif extra_options += ['--ar=' + meson.get_external_property('ar', 'ar')] extra_options += ['--nm=' + meson.get_external_property('nm', 'nm')] endif @@ -45,6 +43,9 @@ if cpu == 'x86_64' or cpu == 'x86' endif extra_options += ['--enable-static', '--disable-shared'] +if is_static_shared_lib + extra_options += ['--enable-pic'] +endif if is_windows if get_option('win32-compat') @@ -211,7 +212,6 @@ extra_options += [ '--disable-nvdec', '--disable-nvenc', '--disable-vdpau', - '--disable-audiotoolbox', '--disable-videotoolbox' ] @@ -262,7 +262,6 @@ proj = ext_proj.add_project('configure', '--prefix=@PREFIX@', '--libdir=@PREFIX@/@LIBDIR@', '--incdir=@PREFIX@/@INCLUDEDIR@', - '--enable-pic', '--disable-all', '--disable-autodetect', '--disable-everything', diff --git a/subprojects/packagefiles/ffmpeg/meson_options.txt b/subprojects/packagefiles/ffmpeg/meson_options.txt index d58d8fd..7854d28 100644 --- a/subprojects/packagefiles/ffmpeg/meson_options.txt +++ b/subprojects/packagefiles/ffmpeg/meson_options.txt @@ -1,6 +1,5 @@ # Copy-paste from top-level project. +option('sink-only', type: 'boolean', value: false, yield: true) option('codec-hwaccels', type: 'array', choices: ['vulkan', 'vaapi', 'mediacodec', 'd3d11va', 'dxva2'], value: [], yield: true) -option('renderer-api', type: 'combo', choices: ['vulkan', 'dx11', 'gl', 'gl-rpi'], value: 'vulkan', yield: true) option('subtitles', type: 'feature', value: 'enabled', yield: true) option('win32-compat', type: 'boolean', value: false, yield: true) -option('sink-only', type: 'boolean', value: false, yield: true) diff --git a/subprojects/packagefiles/ffmpeg/version_9.0.1.diff b/subprojects/packagefiles/ffmpeg/version_9.0.1.diff new file mode 100644 index 0000000..8c10f1c --- /dev/null +++ b/subprojects/packagefiles/ffmpeg/version_9.0.1.diff @@ -0,0 +1,29 @@ +--- a/meson.build 2025-08-23 18:44:34.634014892 -0400 ++++ b/meson.build 2025-08-25 15:33:36.209533531 -0400 +@@ -1,4 +1,4 @@ +-project('ffmpeg', 'c', version: '', meson_version: '>=0.57.0') ++project('ffmpeg', 'c', version: '9.0.1', meson_version: '>=0.57.0') + + compiler = meson.get_compiler('c') + +@@ -268,14 +268,14 @@ + swscale = proj.dependency('swscale') + include = include_directories('.', 'build/') + meson.override_dependency('libavutil', declare_dependency( +- dependencies: [avutil, deps], compile_args: args, include_directories: include, version: '')) ++ dependencies: [avutil, deps], compile_args: args, include_directories: include, version: '61.1.100')) + meson.override_dependency('libavformat', declare_dependency( +- dependencies: [avformat], include_directories: include, version: '')) ++ dependencies: [avformat], include_directories: include, version: '63.1.100')) + meson.override_dependency('libavcodec', declare_dependency( +- dependencies: [avcodec], include_directories: include, version: '')) ++ dependencies: [avcodec], include_directories: include, version: '63.1.100')) + meson.override_dependency('libavdevice', declare_dependency( +- dependencies: [avdevice], include_directories: include, version: '')) ++ dependencies: [avdevice], include_directories: include, version: '63.1.100')) + meson.override_dependency('libswresample', declare_dependency( +- dependencies: [swresample], include_directories: include, version: '')) ++ dependencies: [swresample], include_directories: include, version: '7.1.100')) + meson.override_dependency('libswscale', declare_dependency( +- dependencies: [swscale], include_directories: include, version: '')) ++ dependencies: [swscale], include_directories: include, version: '10.1.100')) diff --git a/subprojects/packagefiles/libcdio-paranoia/meson.build b/subprojects/packagefiles/libcdio-paranoia/meson.build index 82b07b3..c8ee719 100644 --- a/subprojects/packagefiles/libcdio-paranoia/meson.build +++ b/subprojects/packagefiles/libcdio-paranoia/meson.build @@ -1,7 +1,8 @@ -project('libcdio-paranoia', 'c', version: 'git-717f126', meson_version: '>=0.57.0') +project('libcdio-paranoia', 'c', version: 'git-384f4da', meson_version: '>=0.57.0') ext_proj = import('unstable-external_project') +# @TODO: Couldn't this work for shaderc? run_command('autoreconf', '-fi', check: true) proj = ext_proj.add_project('configure', diff --git a/subprojects/packagefiles/libplacebo/android_opengl_custom_dispatch.diff b/subprojects/packagefiles/libplacebo/android_opengl_custom_dispatch.diff new file mode 100644 index 0000000..e8b2ecf --- /dev/null +++ b/subprojects/packagefiles/libplacebo/android_opengl_custom_dispatch.diff @@ -0,0 +1,54 @@ +diff --git a/src/dispatch.c b/src/dispatch.c +index 218b556..70be9aa 100644 +--- a/src/dispatch.c ++++ b/src/dispatch.c +@@ -1541,7 +1541,7 @@ bool pl_dispatch_vertex(pl_dispatch dp, const struct pl_dispatch_vertex_params * + case PL_COORDS_NORMALIZED: + if (params->vertex_flipped) { + proj.mat.m[1][1] = -proj.mat.m[1][1]; +- proj.c[1] += 2.0; ++ //proj.c[1] += 2.0; + } + break; + } +@@ -1566,7 +1566,7 @@ bool pl_dispatch_vertex(pl_dispatch dp, const struct pl_dispatch_vertex_params * + + // Update the scissors + rparams->scissors = params->scissors; +- if (params->vertex_flipped) { ++ if (params->vertex_flipped && rparams->scissors.y0 != rparams->scissors.y1) { + rparams->scissors.y0 = tpars->h - rparams->scissors.y0; + rparams->scissors.y1 = tpars->h - rparams->scissors.y1; + } +diff --git a/src/shaders/custom_mpv.c b/src/shaders/custom_mpv.c +index 1c93da5..bd6450d 100644 +--- a/src/shaders/custom_mpv.c ++++ b/src/shaders/custom_mpv.c +@@ -1191,10 +1191,10 @@ static bool bind_pass_tex(pl_shader sh, pl_str name, + GLSLH("#define HOOKED_pt %.*s_pt \n", PL_STR_FMT(name)); + GLSLH("#define HOOKED_map %.*s_map \n", PL_STR_FMT(name)); + GLSLH("#define HOOKED_mul %.*s_mul \n", PL_STR_FMT(name)); +- GLSLH("#define HOOKED_tex %.*s_tex \n", PL_STR_FMT(name)); +- GLSLH("#define HOOKED_texOff %.*s_texOff \n", PL_STR_FMT(name)); ++ GLSLH("#define HOOKED_tex(pos) %.*s_tex(pos) \n", PL_STR_FMT(name)); ++ GLSLH("#define HOOKED_texOff(off) %.*s_texOff(off) \n", PL_STR_FMT(name)); + if (can_gather) +- GLSLH("#define HOOKED_gather %.*s_gather \n", PL_STR_FMT(name)); ++ GLSLH("#define HOOKED_gather(pos, c) %.*s_gather(pos, c) \n", PL_STR_FMT(name)); + } + + if (mainpresub) { +@@ -1206,10 +1206,10 @@ static bool bind_pass_tex(pl_shader sh, pl_str name, + GLSLH("#define MAIN_pt MAINPRESUB_pt \n"); + GLSLH("#define MAIN_map MAINPRESUB_map \n"); + GLSLH("#define MAIN_mul MAINPRESUB_mul \n"); +- GLSLH("#define MAIN_tex MAINPRESUB_tex \n"); +- GLSLH("#define MAIN_texOff MAINPRESUB_texOff \n"); ++ GLSLH("#define MAIN_tex(pos) MAINPRESUB_tex(pos) \n"); ++ GLSLH("#define MAIN_texOff(off) MAINPRESUB_texOff(off) \n"); + if (can_gather) +- GLSLH("#define MAIN_gather MAINPRESUB_gather \n"); ++ GLSLH("#define MAIN_gather(pos, c) MAINPRESUB_gather(pos, c) \n"); + } + + return true; diff --git a/subprojects/packagefiles/libplacebo/glslang_meson_wrap.diff b/subprojects/packagefiles/libplacebo/glslang_meson_wrap.diff new file mode 100644 index 0000000..d722bef --- /dev/null +++ b/subprojects/packagefiles/libplacebo/glslang_meson_wrap.diff @@ -0,0 +1,40 @@ +diff --git a/src/glsl/meson.build b/src/glsl/meson.build +index c9a8542..499042a 100644 +--- a/src/glsl/meson.build ++++ b/src/glsl/meson.build +@@ -30,7 +30,7 @@ if glslang_req.auto() and shaderc.found() + elif not glslang_req.disabled() + + glslang_deps = [ +- cxx.find_library('glslang-default-resource-limits', required: false) ++ dependency('glslang-default-resource-limits', required: false) + ] + + # meson doesn't respect generator expressions in INTERFACE_LINK_LIBRARIES +@@ -49,7 +49,7 @@ elif not glslang_req.disabled() + static = arg[0] + required = arg[1] + +- spirv = cxx.find_library('SPIRV', required: required, static: static, dirs: vulkan_lib_dirs) ++ spirv = dependency('SPIRV', required: required, static: static) + + if not spirv.found() + continue +@@ -59,7 +59,7 @@ elif not glslang_req.disabled() + + # Glslang 15.0.0 moved some code around, add also linking to glslang, while + # this is not needed for older versions, it will still work. +- glslang_deps += cxx.find_library('glslang', required: required, static: static) ++ glslang_deps += dependency('glslang', required: required, static: static) + + if static + glslang_deps += [ +@@ -78,7 +78,7 @@ elif not glslang_req.disabled() + break + endforeach + +- if found_lib and cc.has_header('glslang/build_info.h') ++ if found_lib + glslang = declare_dependency(dependencies: glslang_deps) + endif + diff --git a/subprojects/packagefiles/libplacebo/no_uniforms_in_vert.diff b/subprojects/packagefiles/libplacebo/no_uniforms_in_vert.diff new file mode 100644 index 0000000..8797d34 --- /dev/null +++ b/subprojects/packagefiles/libplacebo/no_uniforms_in_vert.diff @@ -0,0 +1,89 @@ +diff --git a/src/dispatch.c b/src/dispatch.c +index 218b556..067efc7 100644 +--- a/src/dispatch.c ++++ b/src/dispatch.c +@@ -29,6 +29,7 @@ + + enum { + TMP_PRELUDE, // GLSL version, global definitions, etc. ++ TMP_UNIFORMS, + TMP_MAIN, // main GLSL shader body + TMP_VERT_HEAD, // vertex shader inputs/outputs + TMP_VERT_BODY, // vertex shader body +@@ -304,15 +305,16 @@ static void generate_shaders(pl_dispatch dp, + pl_str_builder shader_body = sh_finalize_internal(sh); + + pl_str_builder pre = dp->tmp[TMP_PRELUDE]; ++ pl_str_builder uni = dp->tmp[TMP_UNIFORMS]; + ADD(pre, "#version %d%s\n", gpu->glsl.version, + (gpu->glsl.gles && gpu->glsl.version > 100) ? " es" : ""); + if (pass_params->type == PL_PASS_COMPUTE) +- ADD(pre, "#extension GL_ARB_compute_shader : enable\n"); ++ ADD(uni, "#extension GL_ARB_compute_shader : enable\n"); + + // Enable this unconditionally if the GPU supports it, since we have no way + // of knowing whether subgroups are being used or not + if (gpu->glsl.subgroup_size) { +- ADD(pre, "#extension GL_KHR_shader_subgroup_basic : enable \n" ++ ADD(uni, "#extension GL_KHR_shader_subgroup_basic : enable \n" + "#extension GL_KHR_shader_subgroup_vote : enable \n" + "#extension GL_KHR_shader_subgroup_arithmetic : enable \n" + "#extension GL_KHR_shader_subgroup_ballot : enable \n" +@@ -360,24 +362,24 @@ static void generate_shaders(pl_dispatch dp, + } + + if (has_img && !gpu->glsl.gles) +- ADD(pre, "#extension GL_ARB_shader_image_load_store : enable\n"); ++ ADD(uni, "#extension GL_ARB_shader_image_load_store : enable\n"); + if (has_ubo) +- ADD(pre, "#extension GL_ARB_uniform_buffer_object : enable\n"); ++ ADD(uni, "#extension GL_ARB_uniform_buffer_object : enable\n"); + if (has_ssbo) +- ADD(pre, "#extension GL_ARB_shader_storage_buffer_object : enable\n"); ++ ADD(uni, "#extension GL_ARB_shader_storage_buffer_object : enable\n"); + if (has_texel) +- ADD(pre, "#extension GL_ARB_texture_buffer_object : enable\n"); ++ ADD(uni, "#extension GL_ARB_texture_buffer_object : enable\n"); + if (has_ext) { + if (gpu->glsl.version >= 300) { +- ADD(pre, "#extension GL_OES_EGL_image_external_essl3 : enable\n"); ++ ADD(uni, "#extension GL_OES_EGL_image_external_essl3 : enable\n"); + } else { +- ADD(pre, "#extension GL_OES_EGL_image_external : enable\n"); ++ ADD(uni, "#extension GL_OES_EGL_image_external : enable\n"); + } + } + if (has_nofmt) +- ADD(pre, "#extension GL_EXT_shader_image_load_formatted : enable\n"); ++ ADD(uni, "#extension GL_EXT_shader_image_load_formatted : enable\n"); + if (has_gather && !gpu->glsl.gles) +- ADD(pre, "#extension GL_ARB_texture_gather : enable\n"); ++ ADD(uni, "#extension GL_ARB_texture_gather : enable\n"); + + if (gpu->glsl.gles) { + // Use 32-bit precision for floats if possible +@@ -527,12 +529,12 @@ static void generate_shaders(pl_dispatch dp, + + case PL_DESC_BUF_UNIFORM: + if (gpu->glsl.vulkan) { +- ADD(pre, "layout(std140, binding=%d) ", desc->binding); ++ ADD(uni, "layout(std140, binding=%d) ", desc->binding); + } else { +- ADD(pre, "layout(std140) "); ++ ADD(uni, "layout(std140) "); + } +- ADD(pre, "uniform "$" ", sh_ident_unpack(desc->name)); +- add_buffer_vars(dp, tmp, pre, sd->buffer_vars, sd->num_buffer_vars); ++ ADD(uni, "uniform "$" ", sh_ident_unpack(desc->name)); ++ add_buffer_vars(dp, tmp, uni, sd->buffer_vars, sd->num_buffer_vars); + break; + + case PL_DESC_BUF_STORAGE: +@@ -599,6 +601,7 @@ static void generate_shaders(pl_dispatch dp, + + pl_str_builder glsl = dp->tmp[TMP_MAIN]; + ADD_CAT(glsl, pre); ++ ADD_CAT(glsl, uni); + + switch(pass_params->type) { + case PL_PASS_RASTER: { diff --git a/subprojects/packagefiles/libplacebo/shaderc_optimize_size.diff b/subprojects/packagefiles/libplacebo/shaderc_optimize_size.diff new file mode 100644 index 0000000..90d75e1 --- /dev/null +++ b/subprojects/packagefiles/libplacebo/shaderc_optimize_size.diff @@ -0,0 +1,13 @@ +diff --git a/src/glsl/spirv_shaderc.c b/src/glsl/spirv_shaderc.c +index 3afd750..8c3d5e0 100644 +--- a/src/glsl/spirv_shaderc.c ++++ b/src/glsl/spirv_shaderc.c +@@ -112,7 +112,7 @@ static pl_str shaderc_compile(pl_spirv spirv, void *alloc, + return (pl_str) {0}; + + shaderc_compile_options_set_optimization_level(opts, +- shaderc_optimization_level_performance); ++ shaderc_optimization_level_size); + shaderc_compile_options_set_target_spirv(opts, spirv->version.spv_version); + shaderc_compile_options_set_target_env(opts, shaderc_target_env_vulkan, + spirv->version.env_version); diff --git a/subprojects/shaderc.wrap b/subprojects/shaderc.wrap index f541df9..9bbe1d7 100644 --- a/subprojects/shaderc.wrap +++ b/subprojects/shaderc.wrap @@ -1,8 +1,7 @@ [wrap-git] -directory = shaderc-v2026.2 +directory = shaderc-v2026.3 url = https://github.com/google/shaderc.git -revision = v2026.2 +revision = v2026.3 depth = 1 method = cmake patch_directory = shaderc -diff_files = shaderc/third_party_fix_build.diff, shaderc/no_hlsl_compile.diff diff --git a/subprojects/stela.wrap b/subprojects/stela.wrap index a1889c4..40cb968 100644 --- a/subprojects/stela.wrap +++ b/subprojects/stela.wrap @@ -1,5 +1,5 @@ [wrap-git] -directory = stela-a35c47d +directory = stela-0c43dca url = https://git.akon.city/stela.git push-url = git@git.akon.city:stela.git -revision = a35c47d401335e81f25c2c78611dcb7785f703da +revision = 0c43dcac12f606c0ac46b5f87dd3de324ff9ef04 |