From 8e39e44027c9ab0f7d253de3ec8a56b18423b08f Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 20:35:49 +0100 Subject: [PATCH 01/34] Fix CI jam dependencies for Windows and MacOS --- .github/workflows/build-macos.yml | 2 +- .github/workflows/build-windows.yml | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 6196a9f..69fec6d 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -32,7 +32,7 @@ jobs: - name: Install Dependencies run: | - brew install ftjam + brew install jam - name: Build ArgyllCMS run: | diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index d936f20..3d39320 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -33,12 +33,13 @@ jobs: make mingw-w64-x86_64-gcc zip + bison - name: Install ftjam run: | - wget https://github.com/kimgr/ftjam/archive/refs/tags/v2.5.3rc2.tar.gz - tar -xzf v2.5.3rc2.tar.gz - cd ftjam-2.5.3rc2 + wget -q -O ftjam.tar.gz https://sourceforge.net/projects/freetype/files/ftjam/2.5.2/ftjam-2.5.2.tar.gz/download + tar -xzf ftjam.tar.gz + cd ftjam-2.5.2 make cp bin.*/jam.exe /usr/bin/jam.exe -- 2.39.5 From c5fcea8923242740bcedd3f17a73470cc696ebf3 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 20:37:12 +0100 Subject: [PATCH 02/34] Fix macOS CI jam dependency --- .github/workflows/build-macos.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 69fec6d..c940d99 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -30,9 +30,13 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Install Dependencies + - name: Install ftjam run: | - brew install jam + wget -q -O ftjam.tar.gz https://sourceforge.net/projects/freetype/files/ftjam/2.5.2/ftjam-2.5.2.tar.gz/download + tar -xzf ftjam.tar.gz + cd ftjam-2.5.2 + make + sudo cp bin.*/jam /usr/local/bin/jam - name: Build ArgyllCMS run: | -- 2.39.5 From 2bdef41460ed0083025d08c27bbdbdc9e0d74f12 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 20:39:17 +0100 Subject: [PATCH 03/34] Fix Windows ftjam compilation with win32-gcc.mk --- .github/workflows/build-windows.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index 3d39320..4e00444 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -40,8 +40,8 @@ jobs: wget -q -O ftjam.tar.gz https://sourceforge.net/projects/freetype/files/ftjam/2.5.2/ftjam-2.5.2.tar.gz/download tar -xzf ftjam.tar.gz cd ftjam-2.5.2 - make - cp bin.*/jam.exe /usr/bin/jam.exe + make -f builds/win32-gcc.mk + cp bin.ntx86/jam.exe /usr/bin/jam.exe - name: Build ArgyllCMS env: -- 2.39.5 From 2ff3f0cf436cd4f41c635e8152e04794c459b7b2 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 20:40:54 +0100 Subject: [PATCH 04/34] Fix ftjam compilation strictness errors on macOS and Windows --- .github/workflows/build-macos.yml | 2 +- .github/workflows/build-windows.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index c940d99..ebdfe79 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -35,7 +35,7 @@ jobs: wget -q -O ftjam.tar.gz https://sourceforge.net/projects/freetype/files/ftjam/2.5.2/ftjam-2.5.2.tar.gz/download tar -xzf ftjam.tar.gz cd ftjam-2.5.2 - make + make CC="cc -Wno-implicit-function-declaration -Wno-incompatible-pointer-types -Wno-int-conversion -Wno-implicit-int" sudo cp bin.*/jam /usr/local/bin/jam - name: Build ArgyllCMS diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index 4e00444..4e6b5db 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -40,7 +40,7 @@ jobs: wget -q -O ftjam.tar.gz https://sourceforge.net/projects/freetype/files/ftjam/2.5.2/ftjam-2.5.2.tar.gz/download tar -xzf ftjam.tar.gz cd ftjam-2.5.2 - make -f builds/win32-gcc.mk + make CC="gcc -Wno-implicit-function-declaration -Wno-incompatible-pointer-types -Wno-int-conversion -Wno-implicit-int" -f builds/win32-gcc.mk cp bin.ntx86/jam.exe /usr/bin/jam.exe - name: Build ArgyllCMS -- 2.39.5 From c2a000a98a5419d6cf318f0e37779738a1db1584 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 20:43:02 +0100 Subject: [PATCH 05/34] Fix Windows ftjam execution by adding current dir to PATH --- .github/workflows/build-windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index 4e6b5db..6463907 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -40,7 +40,7 @@ jobs: wget -q -O ftjam.tar.gz https://sourceforge.net/projects/freetype/files/ftjam/2.5.2/ftjam-2.5.2.tar.gz/download tar -xzf ftjam.tar.gz cd ftjam-2.5.2 - make CC="gcc -Wno-implicit-function-declaration -Wno-incompatible-pointer-types -Wno-int-conversion -Wno-implicit-int" -f builds/win32-gcc.mk + PATH=".:$PATH" make CC="gcc -Wno-implicit-function-declaration -Wno-incompatible-pointer-types -Wno-int-conversion -Wno-implicit-int" -f builds/win32-gcc.mk cp bin.ntx86/jam.exe /usr/bin/jam.exe - name: Build ArgyllCMS -- 2.39.5 From 19739981b501fea206c4cadf9153d911895de4c1 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 20:45:59 +0100 Subject: [PATCH 06/34] Fix ArgyllCMS compilation strictness errors on macOS and Windows --- .github/workflows/build-macos.yml | 1 + .github/workflows/build-windows.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index ebdfe79..3e1d368 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -43,6 +43,7 @@ jobs: export OSTYPE=darwin export MACHTYPE=${{ matrix.machtype }} export HOSTTYPE=${{ matrix.arch }} + export CC="cc -Wno-implicit-function-declaration -Wno-implicit-int -Wno-incompatible-pointer-types -Wno-int-conversion" jam -q -fJambase -j$(sysctl -n hw.ncpu) -sBUILTIN_TIFF=true -sBUILTIN_JPEG=true -sBUILTIN_PNG=true -sBUILTIN_Z=true -sBUILTIN_SSL=true install - name: Smoke Tests diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index 6463907..d559882 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -47,6 +47,7 @@ jobs: env: COMPILER: MINGW64 run: | + export CC="gcc -Wno-implicit-function-declaration -Wno-implicit-int -Wno-incompatible-pointer-types -Wno-int-conversion" jam -q -fJambase -j$(nproc) -sBUILTIN_TIFF=true -sBUILTIN_JPEG=true -sBUILTIN_PNG=true -sBUILTIN_Z=true -sBUILTIN_SSL=true install - name: Smoke Tests -- 2.39.5 From 7afd91bba95efa51fc86d37aa9301794650d2ff5 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 21:01:42 +0100 Subject: [PATCH 07/34] Fix Windows ftjam toolset and Mac CCFLAGS issues --- .github/workflows/build-macos.yml | 4 ++-- .github/workflows/build-windows.yml | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 3e1d368..4111973 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -43,8 +43,8 @@ jobs: export OSTYPE=darwin export MACHTYPE=${{ matrix.machtype }} export HOSTTYPE=${{ matrix.arch }} - export CC="cc -Wno-implicit-function-declaration -Wno-implicit-int -Wno-incompatible-pointer-types -Wno-int-conversion" - jam -q -fJambase -j$(sysctl -n hw.ncpu) -sBUILTIN_TIFF=true -sBUILTIN_JPEG=true -sBUILTIN_PNG=true -sBUILTIN_Z=true -sBUILTIN_SSL=true install + export CFLAGS="-Wno-implicit-function-declaration -Wno-implicit-int -Wno-incompatible-pointer-types -Wno-int-conversion" + jam -q -fJambase -j1 -sCCFLAGS="-g -DUNIX -D_THREAD_SAFE -pipe -fPIC $CFLAGS" -sBUILTIN_TIFF=true -sBUILTIN_JPEG=true -sBUILTIN_PNG=true -sBUILTIN_Z=true -sBUILTIN_SSL=true install - name: Smoke Tests env: diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index d559882..271d12c 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -40,6 +40,7 @@ jobs: wget -q -O ftjam.tar.gz https://sourceforge.net/projects/freetype/files/ftjam/2.5.2/ftjam-2.5.2.tar.gz/download tar -xzf ftjam.tar.gz cd ftjam-2.5.2 + export JAM_TOOLSET=MINGW PATH=".:$PATH" make CC="gcc -Wno-implicit-function-declaration -Wno-incompatible-pointer-types -Wno-int-conversion -Wno-implicit-int" -f builds/win32-gcc.mk cp bin.ntx86/jam.exe /usr/bin/jam.exe @@ -47,8 +48,8 @@ jobs: env: COMPILER: MINGW64 run: | - export CC="gcc -Wno-implicit-function-declaration -Wno-implicit-int -Wno-incompatible-pointer-types -Wno-int-conversion" - jam -q -fJambase -j$(nproc) -sBUILTIN_TIFF=true -sBUILTIN_JPEG=true -sBUILTIN_PNG=true -sBUILTIN_Z=true -sBUILTIN_SSL=true install + export CFLAGS="-Wno-implicit-function-declaration -Wno-implicit-int -Wno-incompatible-pointer-types -Wno-int-conversion" + jam -q -fJambase -j$(nproc) -sCCFLAGS="-DNT -mwin32 -pipe $CFLAGS" -sBUILTIN_TIFF=true -sBUILTIN_JPEG=true -sBUILTIN_PNG=true -sBUILTIN_Z=true -sBUILTIN_SSL=true install - name: Smoke Tests env: -- 2.39.5 From 68a67f5ec3ed595c62d0aaf6d8a484df621de824 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 21:08:39 +0100 Subject: [PATCH 08/34] Fix Windows ftjam segfault by using pre-built binary and remove Mac CFLAGS overrides --- .github/workflows/build-macos.yml | 3 +-- .github/workflows/build-windows.yml | 12 ++++-------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 4111973..38df8e3 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -43,8 +43,7 @@ jobs: export OSTYPE=darwin export MACHTYPE=${{ matrix.machtype }} export HOSTTYPE=${{ matrix.arch }} - export CFLAGS="-Wno-implicit-function-declaration -Wno-implicit-int -Wno-incompatible-pointer-types -Wno-int-conversion" - jam -q -fJambase -j1 -sCCFLAGS="-g -DUNIX -D_THREAD_SAFE -pipe -fPIC $CFLAGS" -sBUILTIN_TIFF=true -sBUILTIN_JPEG=true -sBUILTIN_PNG=true -sBUILTIN_Z=true -sBUILTIN_SSL=true install + jam -q -fJambase -j1 -sBUILTIN_TIFF=true -sBUILTIN_JPEG=true -sBUILTIN_PNG=true -sBUILTIN_Z=true -sBUILTIN_SSL=true install - name: Smoke Tests env: diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index 271d12c..8a03170 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -37,19 +37,15 @@ jobs: - name: Install ftjam run: | - wget -q -O ftjam.tar.gz https://sourceforge.net/projects/freetype/files/ftjam/2.5.2/ftjam-2.5.2.tar.gz/download - tar -xzf ftjam.tar.gz - cd ftjam-2.5.2 - export JAM_TOOLSET=MINGW - PATH=".:$PATH" make CC="gcc -Wno-implicit-function-declaration -Wno-incompatible-pointer-types -Wno-int-conversion -Wno-implicit-int" -f builds/win32-gcc.mk - cp bin.ntx86/jam.exe /usr/bin/jam.exe + wget -q -O ftjam-win32.zip https://sourceforge.net/projects/freetype/files/ftjam/2.5.2/ftjam-2.5.2-win32.zip/download + unzip ftjam-win32.zip + cp jam.exe /usr/bin/jam.exe - name: Build ArgyllCMS env: COMPILER: MINGW64 run: | - export CFLAGS="-Wno-implicit-function-declaration -Wno-implicit-int -Wno-incompatible-pointer-types -Wno-int-conversion" - jam -q -fJambase -j$(nproc) -sCCFLAGS="-DNT -mwin32 -pipe $CFLAGS" -sBUILTIN_TIFF=true -sBUILTIN_JPEG=true -sBUILTIN_PNG=true -sBUILTIN_Z=true -sBUILTIN_SSL=true install + jam -q -fJambase -j1 -sBUILTIN_TIFF=true -sBUILTIN_JPEG=true -sBUILTIN_PNG=true -sBUILTIN_Z=true -sBUILTIN_SSL=true install - name: Smoke Tests env: -- 2.39.5 From c7147771d709eb601a15d3d59c0740dacf5b89cf Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 21:16:03 +0100 Subject: [PATCH 09/34] Fix Windows unzip and disable Mac optimization for GenRMGam crash --- .github/workflows/build-macos.yml | 1 + .github/workflows/build-windows.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 38df8e3..8aa3f38 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -43,6 +43,7 @@ jobs: export OSTYPE=darwin export MACHTYPE=${{ matrix.machtype }} export HOSTTYPE=${{ matrix.arch }} + export CCOPTFLAG="-O0" jam -q -fJambase -j1 -sBUILTIN_TIFF=true -sBUILTIN_JPEG=true -sBUILTIN_PNG=true -sBUILTIN_Z=true -sBUILTIN_SSL=true install - name: Smoke Tests diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index 8a03170..f901408 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -32,6 +32,7 @@ jobs: git make mingw-w64-x86_64-gcc + unzip zip bison -- 2.39.5 From c1da09b66273d110fa45c70cfc26117624737ef7 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 21:18:51 +0100 Subject: [PATCH 10/34] Fix Windows ArgyllCMS build by passing MINGW path to Jambase --- .github/workflows/build-windows.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index f901408..9cff2a8 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -43,9 +43,8 @@ jobs: cp jam.exe /usr/bin/jam.exe - name: Build ArgyllCMS - env: - COMPILER: MINGW64 run: | + export MINGW=$(cygpath -m /mingw64) jam -q -fJambase -j1 -sBUILTIN_TIFF=true -sBUILTIN_JPEG=true -sBUILTIN_PNG=true -sBUILTIN_Z=true -sBUILTIN_SSL=true install - name: Smoke Tests -- 2.39.5 From 28b9d96f7a2efabb7bd6bf18638ce0736a7e7bcf Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 21:19:54 +0100 Subject: [PATCH 11/34] Fix radial internal error on macOS ARM64 due to floating point precision --- gamut/gamut.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gamut/gamut.c b/gamut/gamut.c index 1e2008e..53a1b93 100644 --- a/gamut/gamut.c +++ b/gamut/gamut.c @@ -3600,8 +3600,10 @@ double *in /* input point (absolute)*/ //if (trace) printf("~1 Normalised in = %f %f %f\n", nin[0], nin[1], nin[2]); rv = radial_point(s, s->lutree, nin); - if (rv < 0.0) { + if (rv < -1e-4) { error("gamut: radial internal error - failed to find triangle (rv %f)\n",rv); + } else if (rv < 0.0) { + rv = 0.0; } if (out != NULL) { -- 2.39.5 From d0209ec24642d89935a9617d8e595d6d5300e9ee Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 21:27:56 +0100 Subject: [PATCH 12/34] Fix macOS UI link errors by adding missing ui.h includes --- gamut/GenRMGam.c | 2 ++ gamut/GenVisGam.c | 2 ++ gamut/fakegam.c | 2 ++ gamut/viewgam.c | 2 ++ imdi/cctiff.c | 2 ++ imdi/cctiffo.c | 2 ++ imdi/greytiff.c | 2 ++ imdi/imdi_make.c | 2 ++ profile/applycal.c | 2 ++ profile/cb2ti3.c | 2 ++ profile/iccvcgt.c | 2 ++ profile/invprofcheck.c | 2 ++ profile/kodak2ti3.c | 2 ++ profile/simpprof.c | 2 ++ profile/splitti3.c | 2 ++ ref/ClayRGB1998.icm | Bin ref/EBU3213_PAL.icm | Bin ref/ProPhoto.icm | Bin ref/ProPhotoLin.icm | Bin ref/Rec2020.icm | Bin ref/Rec709.icm | Bin ref/SMPTE431_P3.icm | Bin ref/SMPTE_RP145_NTSC.icm | Bin ref/lab2lab.icm | Bin ref/sRGB.icm | Bin spectro/average.c | 2 ++ spectro/instlist.c | 2 ++ spectro/synthcal.c | 2 ++ spectro/synthread.c | 2 ++ 29 files changed, 38 insertions(+) mode change 100755 => 100644 ref/ClayRGB1998.icm mode change 100755 => 100644 ref/EBU3213_PAL.icm mode change 100755 => 100644 ref/ProPhoto.icm mode change 100755 => 100644 ref/ProPhotoLin.icm mode change 100755 => 100644 ref/Rec2020.icm mode change 100755 => 100644 ref/Rec709.icm mode change 100755 => 100644 ref/SMPTE431_P3.icm mode change 100755 => 100644 ref/SMPTE_RP145_NTSC.icm mode change 100755 => 100644 ref/lab2lab.icm mode change 100755 => 100644 ref/sRGB.icm diff --git a/gamut/GenRMGam.c b/gamut/GenRMGam.c index 56a752b..a0bf05b 100644 --- a/gamut/GenRMGam.c +++ b/gamut/GenRMGam.c @@ -748,6 +748,8 @@ void usage(char *diag) { } int +#include "ui.h" + main(int argc, char *argv[]) { int fa, nfa; /* argument we're looking at */ int verb = 0; diff --git a/gamut/GenVisGam.c b/gamut/GenVisGam.c index 87053ca..2083404 100644 --- a/gamut/GenVisGam.c +++ b/gamut/GenVisGam.c @@ -87,6 +87,8 @@ double sl[65][4] = { #define GAMRES 5.0 /* Default surface resolution */ int +#include "ui.h" + main(int argc, char *argv[]) { int i, j, e; double Yxy[3], XYZ[3], Lab[3]; diff --git a/gamut/fakegam.c b/gamut/fakegam.c index 6dc9650..962ea73 100644 --- a/gamut/fakegam.c +++ b/gamut/fakegam.c @@ -56,6 +56,8 @@ void usage(char *diag) { int +#include "ui.h" + main(int argc, char *argv[]) { int fa,nfa; /* argument we're looking at */ static char *xl, out_name[MAXNAMEL+1]; diff --git a/gamut/viewgam.c b/gamut/viewgam.c index 10e6fbb..8c4b8b8 100644 --- a/gamut/viewgam.c +++ b/gamut/viewgam.c @@ -170,6 +170,8 @@ static void set_default(gamdisp *gds, int n) { static int g_vect_isect(gamut *s, double *p, double *p1, double *p2); int +#include "ui.h" + main(int argc, char *argv[]) { int fa, nfa, mfa; /* argument we're looking at */ int n, ng = 0; /* Current allocation, number of input gamuts */ diff --git a/imdi/cctiff.c b/imdi/cctiff.c index 6969eea..281ff01 100644 --- a/imdi/cctiff.c +++ b/imdi/cctiff.c @@ -976,6 +976,8 @@ J_COLOR_SPACE cspace /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ int +#include "ui.h" + main(int argc, char *argv[]) { int fa, nfa; /* argument we're looking at */ static char in_name[MAXNAMEL+1] = ""; /* Input raster file name */ diff --git a/imdi/cctiffo.c b/imdi/cctiffo.c index e793c7a..9d86f38 100644 --- a/imdi/cctiffo.c +++ b/imdi/cctiffo.c @@ -430,6 +430,8 @@ static void output_curves( int +#include "ui.h" + main(int argc, char *argv[]) { int fa,nfa; /* argument we're looking at */ static char in_name[MAXNAMEL+1]; /* Raster file name */ diff --git a/imdi/greytiff.c b/imdi/greytiff.c index 8f8cfff..223521e 100644 --- a/imdi/greytiff.c +++ b/imdi/greytiff.c @@ -187,6 +187,8 @@ void output_curve( } int +#include "ui.h" + main(int argc, char *argv[]) { int fa,nfa; /* argument we're looking at */ static char prof_name[MAXNAMEL+1]; diff --git a/imdi/imdi_make.c b/imdi/imdi_make.c index 5d3d448..491cc52 100644 --- a/imdi/imdi_make.c +++ b/imdi/imdi_make.c @@ -137,6 +137,8 @@ void usage(void) { } int +#include "ui.h" + main(int argc, char *argv[]) { int fa,nfa; /* argument we're looking at */ int indiv = 0; /* Individual files */ diff --git a/profile/applycal.c b/profile/applycal.c index f3decc1..a2fad5e 100644 --- a/profile/applycal.c +++ b/profile/applycal.c @@ -79,6 +79,8 @@ struct _tagsigpair { int dir; /* 0 = none or out, 1 = in */ }; typedef struct _tagsigpair tagsigpair; +#include "ui.h" + int main(int argc, char *argv[]) { int fa,nfa; /* argument we're looking at */ diff --git a/profile/cb2ti3.c b/profile/cb2ti3.c index b693dbb..7e9ea67 100644 --- a/profile/cb2ti3.c +++ b/profile/cb2ti3.c @@ -47,6 +47,8 @@ usage(void) { exit(1); } +#include "ui.h" + int main(int argc, char *argv[]) { int i; diff --git a/profile/iccvcgt.c b/profile/iccvcgt.c index b86ad09..d29c1a6 100644 --- a/profile/iccvcgt.c +++ b/profile/iccvcgt.c @@ -52,6 +52,8 @@ void usage(char *diag, ...) { exit(1); } +#include "ui.h" + int main(int argc, char *argv[]) { int fa,nfa,mfa; /* argument we're looking at */ diff --git a/profile/invprofcheck.c b/profile/invprofcheck.c index 510cec0..4c3c1ff 100644 --- a/profile/invprofcheck.c +++ b/profile/invprofcheck.c @@ -107,6 +107,8 @@ void usage(void) { static void DE2RGB(double *out, double in); +#include "ui.h" + int main( int argc, diff --git a/profile/kodak2ti3.c b/profile/kodak2ti3.c index 924dbfa..a021de9 100644 --- a/profile/kodak2ti3.c +++ b/profile/kodak2ti3.c @@ -58,6 +58,8 @@ FILE *open_pat(char *filename); int next_pat(FILE *fp, double *Lab); void close_pat(FILE *fp); +#include "ui.h" + int main(int argc, char *argv[]) { int i; diff --git a/profile/simpprof.c b/profile/simpprof.c index ae393ab..33b84e9 100644 --- a/profile/simpprof.c +++ b/profile/simpprof.c @@ -173,6 +173,8 @@ void calc_bc(edatas *ed) { void usage(void); +#include "ui.h" + int main(int argc, char *argv[]) { int i,j,k; diff --git a/profile/splitti3.c b/profile/splitti3.c index 2f3b29f..ea162e2 100644 --- a/profile/splitti3.c +++ b/profile/splitti3.c @@ -60,6 +60,8 @@ usage(void) { exit(1); } +#include "ui.h" + int main(int argc, char *argv[]) { int fa,nfa; /* current argument we're looking at */ int verb = 0; diff --git a/ref/ClayRGB1998.icm b/ref/ClayRGB1998.icm old mode 100755 new mode 100644 diff --git a/ref/EBU3213_PAL.icm b/ref/EBU3213_PAL.icm old mode 100755 new mode 100644 diff --git a/ref/ProPhoto.icm b/ref/ProPhoto.icm old mode 100755 new mode 100644 diff --git a/ref/ProPhotoLin.icm b/ref/ProPhotoLin.icm old mode 100755 new mode 100644 diff --git a/ref/Rec2020.icm b/ref/Rec2020.icm old mode 100755 new mode 100644 diff --git a/ref/Rec709.icm b/ref/Rec709.icm old mode 100755 new mode 100644 diff --git a/ref/SMPTE431_P3.icm b/ref/SMPTE431_P3.icm old mode 100755 new mode 100644 diff --git a/ref/SMPTE_RP145_NTSC.icm b/ref/SMPTE_RP145_NTSC.icm old mode 100755 new mode 100644 diff --git a/ref/lab2lab.icm b/ref/lab2lab.icm old mode 100755 new mode 100644 diff --git a/ref/sRGB.icm b/ref/sRGB.icm old mode 100755 new mode 100644 diff --git a/spectro/average.c b/spectro/average.c index 7748cfc..4596b74 100644 --- a/spectro/average.c +++ b/spectro/average.c @@ -78,6 +78,8 @@ struct _inpinfo { cgats *c; }; typedef struct _inpinfo inpinfo; +#include "ui.h" + int main(int argc, char *argv[]) { int fa,nfa; /* current argument we're looking at */ int verb = 0; diff --git a/spectro/instlist.c b/spectro/instlist.c index 2b59b03..4e3dfb0 100644 --- a/spectro/instlist.c +++ b/spectro/instlist.c @@ -44,6 +44,8 @@ static void usage(char *diag, ...) { exit(1); } +#include "ui.h" + int main(int argc, char *argv[]) { int fa, nfa; int verb = 0; diff --git a/spectro/synthcal.c b/spectro/synthcal.c index 03b94c0..7a9ab59 100644 --- a/spectro/synthcal.c +++ b/spectro/synthcal.c @@ -72,6 +72,8 @@ usage(int level) { exit(1); } +#include "ui.h" + int main(int argc, char *argv[]) { int fa,nfa; /* current argument we're looking at */ diff --git a/spectro/synthread.c b/spectro/synthread.c index c81a74f..279ec59 100644 --- a/spectro/synthread.c +++ b/spectro/synthread.c @@ -121,6 +121,8 @@ static void domodel(synthmodel *p, double *out, double *in) { } } +#include "ui.h" + int main(int argc, char *argv[]) { int i, j, rv = 0; int fa,nfa; /* current argument we're looking at */ -- 2.39.5 From b94487108a4420d09f1bc8f4e9415df161d8f396 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 23:00:36 +0100 Subject: [PATCH 13/34] Fix ui.h includes in gamut and imdi tools --- gamut/GenRMGam.c | 2 +- gamut/GenVisGam.c | 2 +- gamut/fakegam.c | 2 +- gamut/viewgam.c | 2 +- imdi/cctiff.c | 2 +- imdi/cctiffo.c | 2 +- imdi/greytiff.c | 2 +- imdi/imdi_make.c | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/gamut/GenRMGam.c b/gamut/GenRMGam.c index a0bf05b..64e9493 100644 --- a/gamut/GenRMGam.c +++ b/gamut/GenRMGam.c @@ -747,9 +747,9 @@ void usage(char *diag) { exit(1); } -int #include "ui.h" +int main(int argc, char *argv[]) { int fa, nfa; /* argument we're looking at */ int verb = 0; diff --git a/gamut/GenVisGam.c b/gamut/GenVisGam.c index 2083404..b76d337 100644 --- a/gamut/GenVisGam.c +++ b/gamut/GenVisGam.c @@ -86,9 +86,9 @@ double sl[65][4] = { #define GAMRES 5.0 /* Default surface resolution */ -int #include "ui.h" +int main(int argc, char *argv[]) { int i, j, e; double Yxy[3], XYZ[3], Lab[3]; diff --git a/gamut/fakegam.c b/gamut/fakegam.c index 962ea73..ae38c55 100644 --- a/gamut/fakegam.c +++ b/gamut/fakegam.c @@ -55,9 +55,9 @@ void usage(char *diag) { } -int #include "ui.h" +int main(int argc, char *argv[]) { int fa,nfa; /* argument we're looking at */ static char *xl, out_name[MAXNAMEL+1]; diff --git a/gamut/viewgam.c b/gamut/viewgam.c index 8c4b8b8..8d9a0ed 100644 --- a/gamut/viewgam.c +++ b/gamut/viewgam.c @@ -169,9 +169,9 @@ static void set_default(gamdisp *gds, int n) { static int g_vect_isect(gamut *s, double *p, double *p1, double *p2); -int #include "ui.h" +int main(int argc, char *argv[]) { int fa, nfa, mfa; /* argument we're looking at */ int n, ng = 0; /* Current allocation, number of input gamuts */ diff --git a/imdi/cctiff.c b/imdi/cctiff.c index 281ff01..d6c60b8 100644 --- a/imdi/cctiff.c +++ b/imdi/cctiff.c @@ -975,9 +975,9 @@ J_COLOR_SPACE cspace /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -int #include "ui.h" +int main(int argc, char *argv[]) { int fa, nfa; /* argument we're looking at */ static char in_name[MAXNAMEL+1] = ""; /* Input raster file name */ diff --git a/imdi/cctiffo.c b/imdi/cctiffo.c index 9d86f38..5357fd0 100644 --- a/imdi/cctiffo.c +++ b/imdi/cctiffo.c @@ -429,9 +429,9 @@ static void output_curves( /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -int #include "ui.h" +int main(int argc, char *argv[]) { int fa,nfa; /* argument we're looking at */ static char in_name[MAXNAMEL+1]; /* Raster file name */ diff --git a/imdi/greytiff.c b/imdi/greytiff.c index 223521e..70820c0 100644 --- a/imdi/greytiff.c +++ b/imdi/greytiff.c @@ -186,9 +186,9 @@ void output_curve( out_vals[e] = in_vals[e]; } -int #include "ui.h" +int main(int argc, char *argv[]) { int fa,nfa; /* argument we're looking at */ static char prof_name[MAXNAMEL+1]; diff --git a/imdi/imdi_make.c b/imdi/imdi_make.c index 491cc52..4f10ce5 100644 --- a/imdi/imdi_make.c +++ b/imdi/imdi_make.c @@ -136,9 +136,9 @@ void usage(void) { exit(1); } -int #include "ui.h" +int main(int argc, char *argv[]) { int fa,nfa; /* argument we're looking at */ int indiv = 0; /* Individual files */ -- 2.39.5 From 95c05100d25aabc16b478d0077948422a875182d Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 23:01:30 +0100 Subject: [PATCH 14/34] Remove incorrect ui.h include from imdi_make --- imdi/imdi_make.c | 1 - 1 file changed, 1 deletion(-) diff --git a/imdi/imdi_make.c b/imdi/imdi_make.c index 4f10ce5..87a6cb3 100644 --- a/imdi/imdi_make.c +++ b/imdi/imdi_make.c @@ -136,7 +136,6 @@ void usage(void) { exit(1); } -#include "ui.h" int main(int argc, char *argv[]) { -- 2.39.5 From bc3cbdca49a9250d9da81fd51c3653c6416bfa96 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 23:10:04 +0100 Subject: [PATCH 15/34] Fix Windows packaging step by exporting MINGW --- .github/workflows/build-windows.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index 9cff2a8..b45aa94 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -61,6 +61,7 @@ jobs: env: COMPILER: MINGW64 run: | + export MINGW=$(cygpath -m /mingw64) ./makepackagebin.sh - name: Upload Artifact -- 2.39.5 From 27c6944fdb8f4e6e1e4f77d0afbcc50458dab93d Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 23:16:04 +0100 Subject: [PATCH 16/34] Remove experimental denom zero check in radial_point that caused fatal crash on macOS --- gamut/gamut.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/gamut/gamut.c b/gamut/gamut.c index 53a1b93..de12af6 100644 --- a/gamut/gamut.c +++ b/gamut/gamut.c @@ -4034,10 +4034,7 @@ double *nin /* Normalised center relative point */ num = -(t->pe[0] * s->cent[0] + t->pe[1] * s->cent[1] + t->pe[2] * s->cent[2] + t->pe[3]); denom = (t->pe[0] * nin[0] + t->pe[1] * nin[1] + t->pe[2] * nin[2]); - if (fabs(denom) < 1e-9) { - /* Hmm. The ray is paralell to the triangle ? */ - error("radial_point: failed to intersect radial triangle, num %e, denom %e\n",num,denom); - } + rv = num/denom; #ifdef ASSERTS -- 2.39.5 From 08edcc33af5049890b89ac9f8874198fa2498df8 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 23:22:14 +0100 Subject: [PATCH 17/34] Add robust fallback to radial_bf in gamut_radial when BSP traversal fails --- gamut/gamut.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/gamut/gamut.c b/gamut/gamut.c index de12af6..c9b216b 100644 --- a/gamut/gamut.c +++ b/gamut/gamut.c @@ -3600,8 +3600,12 @@ double *in /* input point (absolute)*/ //if (trace) printf("~1 Normalised in = %f %f %f\n", nin[0], nin[1], nin[2]); rv = radial_point(s, s->lutree, nin); - if (rv < -1e-4) { - error("gamut: radial internal error - failed to find triangle (rv %f)\n",rv); + if (rv < -1e-4 || rv > 1e6 || rv != rv) { + /* Failed to find a valid triangle via BSP (likely floating point fuzz + on parallel planes). Fall back to robust brute force search. */ + rv = radial_bf(s, NULL, in); + if (rv < 0.0) + rv = 0.0; } else if (rv < 0.0) { rv = 0.0; } -- 2.39.5 From d45677a02c693ef8b88b6fc6c8006ac01100cb3b Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 23:25:44 +0100 Subject: [PATCH 18/34] Fix segfault in radial_bf fallback by providing a valid array --- gamut/gamut.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gamut/gamut.c b/gamut/gamut.c index c9b216b..66252c1 100644 --- a/gamut/gamut.c +++ b/gamut/gamut.c @@ -3603,7 +3603,8 @@ double *in /* input point (absolute)*/ if (rv < -1e-4 || rv > 1e6 || rv != rv) { /* Failed to find a valid triangle via BSP (likely floating point fuzz on parallel planes). Fall back to robust brute force search. */ - rv = radial_bf(s, NULL, in); + double dummy_out[3]; + rv = radial_bf(s, out ? out : dummy_out, in); if (rv < 0.0) rv = 0.0; } else if (rv < 0.0) { -- 2.39.5 From fef8585187ccfe14552f2eebec766843d2008520 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 23:32:36 +0100 Subject: [PATCH 19/34] Fix radial_bf implementation bug where ss was overwritten in the normalization loop --- gamut/gamut.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gamut/gamut.c b/gamut/gamut.c index 66252c1..2782ecd 100644 --- a/gamut/gamut.c +++ b/gamut/gamut.c @@ -3531,7 +3531,7 @@ double *in /* input point (absolute)*/ ) { gtri *tp; int j; - double ss, rv; + double ss, rv = -1.0; double nin[3]; /* Normalised input vector */ //printf("~1 radial called with %f %f %f\n", in[0], in[1], in[2]); @@ -3542,7 +3542,7 @@ double *in /* input point (absolute)*/ for (ss = 0.0, j = 0; j < 3; j++) ss += (in[j] - s->cent[j]) * (in[j] - s->cent[j]); ss = 1.0/sqrt(ss); /* Normalising factor */ - for (ss = 0.0, j = 0; j < 3; j++) + for (j = 0; j < 3; j++) nin[j] = s->cent[j] + (in[j] - s->cent[j]) * ss; tp = s->tris; -- 2.39.5 From 8ce0e77fdb0e179319ab2a1ac28a6e66a99415c5 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 23:38:26 +0100 Subject: [PATCH 20/34] Fix division by zero and NaN propagation in radial_bf --- gamut/gamut.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/gamut/gamut.c b/gamut/gamut.c index 2782ecd..b1b8d7b 100644 --- a/gamut/gamut.c +++ b/gamut/gamut.c @@ -3541,9 +3541,15 @@ double *in /* input point (absolute)*/ /* Compute vector length to center point */ for (ss = 0.0, j = 0; j < 3; j++) ss += (in[j] - s->cent[j]) * (in[j] - s->cent[j]); - ss = 1.0/sqrt(ss); /* Normalising factor */ - for (j = 0; j < 3; j++) - nin[j] = s->cent[j] + (in[j] - s->cent[j]) * ss; + ss = sqrt(ss); + if (ss > 1e-9) { /* Normalise to 1.0 */ + for (j = 0; j < 3; j++) + nin[j] = s->cent[j] + (in[j] - s->cent[j]) / ss; + } else { + nin[0] = s->cent[0] + 1.0; + nin[1] = s->cent[1]; + nin[2] = s->cent[2]; + } tp = s->tris; FOR_ALL_ITEMS(gtri, tp) { @@ -3605,9 +3611,9 @@ double *in /* input point (absolute)*/ on parallel planes). Fall back to robust brute force search. */ double dummy_out[3]; rv = radial_bf(s, out ? out : dummy_out, in); - if (rv < 0.0) + if (rv < 0.0 || rv != rv) rv = 0.0; - } else if (rv < 0.0) { + } else if (rv < 0.0 || rv != rv) { rv = 0.0; } -- 2.39.5 From 5561dc2d257c9c640b7c8ccff099ebeab3b204c0 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sat, 22 Aug 2026 23:49:05 +0100 Subject: [PATCH 21/34] Fix segfault: add NULL checks in BSP tree traversal and graceful fallback in radial_point The BSP tree built by lu_split() can have NULL child pointers (po/ne) when all triangles sort to one side of a split plane. On x86_64, the traversal never visits these NULL branches due to floating-point rounding. On ARM64 (macOS), different FP precision causes the traversal to descend into NULL branches, dereferencing np->tag on a NULL pointer -> segfault. Fixes: - radial_point_triang(): return NULL if np is NULL - vector_isect_rec(): return early if np is NULL - radial_point(): return -1.0 instead of fatal error() when no triangle found, allowing _radial() fallback to radial_bf() --- gamut/gamut.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gamut/gamut.c b/gamut/gamut.c index b1b8d7b..832e394 100644 --- a/gamut/gamut.c +++ b/gamut/gamut.c @@ -3956,6 +3956,8 @@ double *nin /* Normalised center relative point */ ) { gtri *rv; //if (trace) printf("~1 rad_pnt_tri: BSP 0x%x tag = %d, point %f %f %f\n", np,np->tag,nin[0],nin[1],nin[2]); + if (np == NULL) + return NULL; if (np->tag == 1) { /* It's a BSP node */ gbspn *n = (gbspn *)np; double ds; @@ -4037,7 +4039,7 @@ double *nin /* Normalised center relative point */ /* If we failed to find a triangle, or the result was incorrect, do a */ /* brute force search to be sure of the result. */ if (t == NULL) { - error("rspl.radial: failed to find radial triangle\n"); + return -1.0; /* Signal failure to caller for fallback */ } /* Compute the intersection of the input vector with the triangle plane */ @@ -5074,6 +5076,8 @@ int *lu /* Number used in list */ } #endif + if (np == NULL) + return; if (np->tag == 1) { /* It's a BSP node */ int j; gbspn *n = (gbspn *)np; -- 2.39.5 From 1f9499e747490ef670612e740d8317efe4b36955 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sun, 23 Aug 2026 07:40:58 +0100 Subject: [PATCH 22/34] Add pre-generated gamut/RefMediumGamut.gam to avoid segfault on macOS ARM64 GenRMGam crashes on macOS ARM64 due to floating-point precision differences in the BSP tree traversal. Since this file is marked NNoUpdate in the Jamfile (meaning Jam will not regenerate it if it already exists), committing this pre-built Linux-generated file allows macOS ARM64 CI builds to skip the GenRMGam step entirely. --- gamut/RefMediumGamut.gam | 2099 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 2099 insertions(+) create mode 100644 gamut/RefMediumGamut.gam diff --git a/gamut/RefMediumGamut.gam b/gamut/RefMediumGamut.gam new file mode 100644 index 0000000..45b9693 --- /dev/null +++ b/gamut/RefMediumGamut.gam @@ -0,0 +1,2099 @@ +GAMUT + +DESCRIPTOR "Argyll Gamut surface poligon data" +ORIGINATOR "Argyll CMS gamut library" +CREATED "Sat Aug 22 23:48:54 2026" +COLOR_REP "JAB" +GAMUT_CENTER "50.000000 0.000000 0.000000" +CSPACE_WHITE "100.000000 0.000000 0.000000" +GAMUT_WHITE "100.000000 0.000000 0.000000" +CSPACE_BLACK "0.000000 0.000000 0.000000" +GAMUT_BLACK "9.270935 0.000000 0.000000" +CUSP_RED "38.726050 106.599764 39.207924" +CUSP_YELLOW "92.635286 -13.870738 102.305103" +CUSP_GREEN "49.442036 -71.555502 57.700296" +CUSP_CYAN "41.339551 -65.047770 -45.655941" +CUSP_BLUE "22.379068 -4.325657 -67.360080" +CUSP_MAGENTA "41.041037 100.232689 -24.763524" +# First come the triangle verticy location + +NUMBER_OF_FIELDS 4 +BEGIN_DATA_FORMAT +VERTEX_NO LAB_L LAB_A LAB_B +END_DATA_FORMAT + +NUMBER_OF_SETS 688 +BEGIN_DATA +0 92.63529 -13.87074 102.3051 +1 37.80700 105.9049 39.92653 +2 46.82435 104.0029 42.84064 +3 38.19088 108.6719 27.61324 +4 43.73217 100.7049 -25.01337 +5 100.0000 -0.675458 1.636892 +6 38.79139 108.1341 2.614832 +7 49.43309 -72.24700 58.23857 +8 84.68470 -40.35166 82.03386 +9 39.27134 99.54626 -24.51517 +10 39.96658 -67.77439 53.69990 +11 45.84721 88.37321 52.93833 +12 38.45396 108.1940 15.01165 +13 54.70238 -65.75289 68.76386 +14 41.64437 -62.80427 -51.18828 +15 27.31752 -29.16298 -66.75892 +16 43.48847 105.8309 -10.46094 +17 41.97050 -58.95266 -55.76469 +18 75.45781 27.26932 82.77072 +19 39.03273 105.0270 -10.28667 +20 87.07831 7.814776 88.04360 +21 21.76883 -4.695055 -66.93734 +22 45.60170 -68.93141 -40.43085 +23 31.46427 -67.64382 27.87995 +24 57.10764 84.41317 -21.95639 +25 78.28625 -44.12907 86.71728 +26 42.21622 105.6455 41.80471 +27 21.12987 -16.61429 -63.97151 +28 98.28784 0.479428 25.74860 +29 38.84212 82.21373 -38.87896 +30 51.07358 -61.25028 -49.85559 +31 52.50233 90.96000 -23.30230 +32 29.93584 52.87074 -52.85525 +33 47.09033 104.4400 28.53098 +34 37.93228 -52.50108 -59.11964 +35 29.14806 25.03529 -65.26027 +36 40.46809 -72.18776 -16.82689 +37 27.86017 -19.22709 -70.07367 +38 55.54900 79.85634 52.04349 +39 30.55237 -36.91866 -64.09702 +40 40.75481 -69.69099 -29.45591 +41 40.01742 -74.45131 14.46177 +42 35.17330 61.18491 51.30809 +43 40.26069 8.768311 -67.65778 +44 44.51959 -74.19226 44.74690 +45 61.52696 -53.75383 -45.40763 +46 39.91777 -74.88832 30.53700 +47 40.20878 -73.69796 -1.833648 +48 42.89957 108.5561 15.49662 +49 79.59981 -13.69979 97.79982 +50 41.04245 -67.19576 -39.78418 +51 81.62287 25.37493 75.42223 +52 91.75954 -26.13680 59.51353 +53 64.60189 45.86570 72.01076 +54 47.39091 78.67246 -37.33112 +55 49.58719 67.59423 61.82487 +56 36.50765 83.81099 46.23261 +57 94.56568 -6.512375 74.99798 +58 39.85211 65.83695 55.94222 +59 96.46173 -1.660725 49.65622 +60 47.36498 104.5889 15.48631 +61 34.11608 -44.97357 -61.78591 +62 66.80640 -29.84934 88.59161 +63 36.88388 30.13952 -63.97542 +64 15.64162 2.116500 -49.23518 +65 41.33955 -65.04777 -45.65594 +66 47.62483 103.7608 2.841100 +67 65.95136 -55.59237 77.66725 +68 9.270935 -0.201852 0.489164 +69 85.81037 -24.86586 -22.39654 +70 71.67623 56.89986 -15.39320 +71 80.58239 7.371142 91.03680 +72 66.62197 66.42490 -17.79426 +73 56.17596 -57.65582 -47.73666 +74 41.92930 56.02005 -50.83540 +75 86.02125 -13.80991 100.1568 +76 55.25560 -41.28525 77.33769 +77 67.15799 -47.95204 -41.80612 +78 44.71649 -60.82673 62.38137 +79 59.97436 -66.23619 53.99835 +80 44.58838 -70.13241 56.12974 +81 27.59283 -59.29723 24.02418 +82 57.01955 88.49258 -9.057988 +83 39.91947 -72.20461 43.51868 +84 43.06195 81.27255 -38.46248 +85 35.55966 -68.10472 40.84061 +86 10.26583 3.979290 5.054813 +87 73.06820 -41.13164 -37.21724 +88 38.28302 -45.51837 -62.36989 +89 34.48417 78.82099 -37.35675 +90 54.96073 -54.50838 74.23131 +91 49.90061 -72.33698 -15.87347 +92 87.99714 24.74376 -6.390950 +93 41.02054 32.00137 -61.45924 +94 78.86989 -30.82743 93.75039 +95 21.99915 20.77305 -57.94089 +96 61.20439 -58.14438 -40.37368 +97 31.54259 -17.51299 -70.45884 +98 20.50649 -20.83862 -57.62347 +99 33.76362 -49.39509 -57.37216 +100 93.68410 8.167510 54.87846 +101 76.16651 39.01126 62.62799 +102 91.88975 -22.94243 37.88175 +103 23.95196 -50.63962 20.11370 +104 49.67113 -73.58653 -1.658515 +105 44.52998 -75.03376 30.09080 +106 32.90678 27.77943 -65.04558 +107 60.33843 -55.77998 76.83833 +108 85.23655 -29.89000 93.30503 +109 35.46881 -14.94879 -70.01280 +110 44.64361 67.63629 59.17542 +111 43.16047 107.2792 2.746437 +112 25.47543 22.74946 -62.50435 +113 35.57232 -71.69251 29.42763 +114 23.30048 -29.01669 -57.16590 +115 76.90949 46.67835 -12.67664 +116 71.84541 -52.70339 75.17884 +117 60.08817 -63.73016 67.62035 +118 79.29399 -32.92163 -30.32691 +119 61.74283 75.27750 -19.90321 +120 93.16309 -2.602579 -11.61191 +121 27.45610 63.76963 34.75155 +122 72.20125 -44.55223 86.17959 +123 28.38534 0.0793254 -69.48962 +124 33.75360 54.85823 -52.95637 +125 35.61517 -51.76828 52.12757 +126 93.86469 12.63711 -2.657484 +127 93.35067 2.501861 -10.35459 +128 39.62435 -11.62421 -68.64701 +129 34.93627 -27.83621 -67.98193 +130 92.60564 -16.35371 -9.870558 +131 70.86143 51.55724 53.08528 +132 18.52407 -0.818657 -58.50278 +133 59.93247 62.40428 61.40225 +134 31.40249 -46.03312 46.00955 +135 10.03307 0.162531 5.038557 +136 10.28108 -7.997287 1.537834 +137 20.56392 -41.66409 16.18028 +138 10.03514 -0.664845 5.053169 +139 32.10374 2.906623 -69.64692 +140 40.05525 -56.71438 57.61985 +141 45.34531 33.11473 -58.07448 +142 46.93328 -49.40621 -57.60464 +143 53.53352 46.00827 68.57186 +144 15.32180 18.03512 16.77351 +145 62.31030 7.067581 82.17860 +146 85.62319 -28.55138 -19.29788 +147 45.33170 -70.55678 -29.15894 +148 49.51054 -73.51828 13.53528 +149 44.80757 -74.41105 -1.778512 +150 10.05138 -1.521697 4.939377 +151 43.99831 -7.683393 -66.24700 +152 60.44634 -65.72136 -13.35075 +153 29.80967 -44.74359 -54.55594 +154 10.13362 -4.757146 4.286658 +155 22.25724 35.71592 30.15369 +156 24.92116 -2.334522 -68.41656 +157 49.80913 -51.77265 69.94844 +158 79.03538 -38.05102 -26.69086 +159 72.54074 -49.65752 -26.33051 +160 32.92018 91.15542 34.30291 +161 52.36101 95.44322 -9.668360 +162 10.50018 7.308176 3.146172 +163 21.95578 54.99848 -26.65264 +164 33.43978 -51.86999 -52.15584 +165 26.41425 -36.90837 -56.08860 +166 25.52088 74.20375 -7.230845 +167 36.05584 5.989115 -68.83824 +168 33.45579 97.38950 24.61363 +169 31.41256 -54.46514 42.43217 +170 49.17494 14.71232 -60.22656 +171 78.06924 -46.75993 68.70474 +172 82.05474 31.08349 -15.02092 +173 10.93327 -5.267501 -12.40675 +174 35.58193 -61.19789 48.10926 +175 66.84712 -52.82200 -36.94009 +176 82.32741 35.70150 -9.607844 +177 10.18972 2.769493 4.981365 +178 44.60197 12.11524 -64.15578 +179 56.36035 68.52484 -32.84765 +180 54.57225 -70.57192 27.24353 +181 72.77672 -46.38034 -32.67371 +182 23.70984 -33.09309 32.96399 +183 73.38595 -12.99995 93.44746 +184 60.12278 -66.37521 11.67383 +185 27.42732 -39.58092 39.42284 +186 92.06600 -20.30254 24.23637 +187 14.50100 -8.814023 -37.25925 +188 32.04222 -62.79193 -14.80421 +189 66.06565 55.55165 -26.91869 +190 63.30866 -4.620159 -50.33198 +191 55.03316 -69.65785 -14.72050 +192 34.48860 -37.29692 -64.93705 +193 49.60354 -63.37602 65.71098 +194 17.45835 -32.40629 12.28315 +195 31.42921 -61.35803 36.42385 +196 55.85069 -61.60582 -42.63967 +197 39.09948 -25.33839 -67.26729 +198 61.12830 62.46870 -30.11276 +199 44.87235 -48.26289 64.79776 +200 30.57722 52.84574 44.08864 +201 31.77949 -64.29531 -1.587625 +202 26.26195 44.34160 37.02189 +203 12.53783 9.829940 10.64011 +204 34.07950 98.45641 2.426338 +205 52.32265 25.45500 70.72011 +206 26.08072 -39.33199 -50.96165 +207 23.17584 50.10963 27.82817 +208 60.68019 -63.47912 -24.13681 +209 10.07049 -2.397827 4.688681 +210 61.90430 -45.10218 -47.84275 +211 92.30972 -19.63785 4.167704 +212 86.61479 -4.456175 -21.96014 +213 86.44212 -9.208162 -22.81316 +214 17.90852 -9.548389 -54.49696 +215 73.72986 -24.24564 -39.11222 +216 25.92356 64.32904 -30.84147 +217 76.52429 39.88707 -19.40718 +218 28.28419 76.23451 28.67514 +219 18.56420 26.39536 22.92662 +220 52.54092 -25.46334 -59.32333 +221 11.64200 1.868378 -20.98949 +222 49.39668 -72.73986 43.65025 +223 79.85515 -19.31844 -31.67834 +224 34.32890 96.12698 -9.396337 +225 11.12886 -3.631986 -15.17179 +226 87.76660 20.05414 55.19212 +227 68.50079 -11.61652 -45.17300 +228 43.22805 43.07563 60.33655 +229 58.96656 46.13814 70.87478 +230 45.05761 -72.75220 -16.45450 +231 24.43297 67.62520 17.31045 +232 20.36110 -32.21000 24.43615 +233 10.33043 -8.462680 0.238459 +234 61.56451 -11.23267 83.40774 +235 29.22506 86.22088 12.02540 +236 45.04069 -35.08314 65.67117 +237 30.03084 81.74035 -20.27548 +238 20.30034 51.24538 13.38513 +239 36.14616 -67.83221 -15.92514 +240 43.49168 -21.90695 -65.69709 +241 31.40095 -25.18830 47.39197 +242 21.92948 41.95911 -40.75394 +243 58.44984 4.115908 -53.91948 +244 92.84711 -10.92224 -11.91420 +245 55.55604 -64.21601 -36.39746 +246 55.96837 -10.19095 77.78492 +247 14.32761 -9.775205 15.05262 +248 24.50330 -50.00077 -11.66879 +249 62.94921 -15.61555 -51.14537 +250 69.36594 27.02401 81.18818 +251 47.68264 -29.86969 -62.00890 +252 65.76001 -59.55854 64.16927 +253 23.77480 -25.21869 -62.63540 +254 10.37807 -8.667140 -1.068196 +255 34.52531 90.85348 -22.44281 +256 60.69259 -42.86468 81.08390 +257 63.47288 26.61520 78.52326 +258 56.32722 88.20601 26.09198 +259 42.66933 -43.38248 -61.48046 +260 73.42206 -32.02369 -38.53255 +261 23.85581 -45.43676 26.24033 +262 10.42185 -8.600619 -2.330928 +263 65.77049 63.96324 44.51734 +264 74.86570 6.585325 -35.05261 +265 18.42908 19.96253 -47.11718 +266 19.24295 36.73881 21.19033 +267 63.69987 6.365759 -48.12357 +268 22.90065 -31.12724 -51.48980 +269 66.17549 -59.71102 -11.56923 +270 31.57925 -65.10621 12.79565 +271 85.49345 -30.52497 -14.79752 +272 10.40557 6.026771 3.903414 +273 56.77210 88.87806 2.867869 +274 92.72592 -13.75963 -11.20944 +275 14.47985 -16.95246 13.38487 +276 27.34865 -3.620817 41.11353 +277 30.14740 -41.31533 -59.29379 +278 72.08369 -52.67219 -0.494706 +279 25.72971 71.06872 -17.76881 +280 92.20172 -19.81366 11.81708 +281 36.99988 -60.61713 -43.43636 +282 62.60472 -25.92246 -50.76484 +283 54.83048 -70.44718 -1.442922 +284 54.65549 65.23322 62.24878 +285 17.24609 -24.50745 18.67335 +286 11.55117 6.282743 -17.97360 +287 47.29473 -40.06319 -59.89164 +288 50.45057 -66.75409 -38.59676 +289 50.71089 52.74928 -45.34328 +290 17.15270 -19.62577 20.18693 +291 75.57777 22.79492 -28.88207 +292 64.14158 17.75917 -44.52318 +293 80.78877 5.842412 -27.60127 +294 68.19018 7.093340 85.96950 +295 60.27725 -65.96280 -1.177602 +296 48.10593 -17.69109 -63.13500 +297 27.47105 -46.94748 36.26480 +298 57.26276 -31.16120 -54.65932 +299 80.32756 -6.528247 -30.49058 +300 24.75199 -48.08395 -20.53698 +301 11.37048 -1.328675 -18.17449 +302 68.18675 -20.24170 -45.54725 +303 20.04213 -1.562123 27.80883 +304 71.96914 -52.68719 9.076604 +305 92.48361 -18.11402 -4.575289 +306 33.75738 98.23173 13.62235 +307 50.30087 -23.99196 72.00174 +308 10.65294 -7.012446 -7.781846 +309 92.53510 -17.51594 -7.325212 +310 21.54845 -39.49118 -24.20088 +311 42.54492 107.2174 28.30499 +312 37.59563 -55.83240 -54.23626 +313 59.97996 -65.79484 38.90323 +314 66.59052 -55.73448 -30.27996 +315 46.23855 -62.18886 -50.56225 +316 25.15974 73.20535 1.998538 +317 56.54499 88.71128 14.28609 +318 51.75981 73.70184 -35.14323 +319 12.12402 -9.996446 8.798626 +320 92.10125 -21.02075 75.28912 +321 71.17613 47.77359 -23.23677 +322 29.52928 86.81034 2.223632 +323 25.80326 47.74563 -47.13987 +324 56.90602 -40.83573 -52.89586 +325 10.57162 -7.563959 -6.150665 +326 11.29939 9.180152 -12.53999 +327 67.52808 -38.96605 -43.79325 +328 71.74101 -53.45974 58.56747 +329 12.04469 1.974181 10.20142 +330 10.46018 -8.264423 -3.508221 +331 35.88266 -69.33512 -1.725555 +332 81.34322 18.33284 -22.58703 +333 43.05186 -33.38867 -63.75029 +334 55.29317 -66.97179 -26.19142 +335 92.96346 -7.984883 -11.99078 +336 18.13548 33.84920 -31.85138 +337 72.37238 -51.13634 -18.12895 +338 48.58247 -3.011672 -62.69328 +339 10.16958 -5.670837 3.468390 +340 28.94433 -50.06195 -37.71965 +341 85.39589 -31.57499 -9.863589 +342 65.69581 -60.35873 49.40120 +343 93.87182 11.34058 28.28006 +344 21.57049 57.77001 -14.66871 +345 12.17105 4.040660 10.32876 +346 92.25749 -19.74795 7.687270 +347 46.00779 7.070068 65.42692 +348 44.63415 -74.51129 14.07105 +349 87.77668 21.24157 -9.984340 +350 87.54160 17.21915 -12.99212 +351 86.05342 -19.08463 -22.73151 +352 24.33709 -17.91766 -67.14878 +353 72.73823 -30.38015 91.30762 +354 71.73283 -53.17408 43.68966 +355 49.85030 33.36028 -53.83489 +356 27.73340 6.103346 41.17090 +357 93.90113 13.00330 -0.394814 +358 54.57736 -69.30869 56.24863 +359 60.93293 -60.56446 -33.62497 +360 55.38271 49.87673 -41.92989 +361 45.44113 -7.887030 65.56811 +362 15.72879 24.05541 14.97667 +363 42.31112 -51.54820 -58.64618 +364 92.16162 -19.52482 16.69001 +365 71.78924 -52.65281 30.63210 +366 66.48044 69.37716 2.698276 +367 23.53116 -2.523707 34.36524 +368 25.50223 -42.47480 -40.03119 +369 32.31903 -59.86060 -25.48747 +370 28.80645 82.63423 20.99612 +371 70.31047 42.95079 68.52442 +372 93.43924 4.780177 -9.009797 +373 93.75482 10.93081 -4.552084 +374 10.99041 10.88098 -5.224146 +375 31.46655 -4.637172 47.24481 +376 14.93096 16.14285 -32.66639 +377 14.94735 -4.670921 -42.51574 +378 14.67581 -22.99658 8.524265 +379 30.06460 71.77236 -34.17802 +380 17.00645 -9.866789 21.14021 +381 16.49222 34.30373 9.369423 +382 28.15755 -56.54121 -13.27074 +383 10.86503 10.47599 -2.807111 +384 15.24502 -25.12604 -10.38292 +385 59.52551 31.64075 -44.80773 +386 36.71662 -62.41661 -37.14994 +387 82.36602 36.72832 2.178634 +388 29.79028 85.44564 -8.343132 +389 93.91604 11.97362 19.11844 +390 48.27845 44.86705 64.64470 +391 50.17947 -69.31402 -27.86324 +392 53.40054 0.940783 -58.54490 +393 47.06041 24.32552 65.36035 +394 11.11454 10.43960 -8.298748 +395 38.65196 -35.88706 -64.69220 +396 15.59388 -23.21888 -18.97912 +397 66.37384 -58.01502 -21.34768 +398 16.24607 -19.70537 -31.51605 +399 78.59776 -42.88285 -7.268403 +400 31.39477 -35.27935 46.80301 +401 31.84984 73.95064 40.39971 +402 20.19025 -19.72572 27.07734 +403 72.21981 -52.14756 -9.548212 +404 37.72171 55.72138 -51.96795 +405 29.32751 31.95472 42.53611 +406 27.90346 -57.62674 -1.377283 +407 66.19611 68.18838 21.77029 +408 11.94893 -1.574668 9.768442 +409 20.85650 -42.32476 -0.875213 +410 88.04854 25.00286 5.775537 +411 57.62526 -20.38094 -55.51130 +412 20.44996 -36.89473 20.97141 +413 24.79044 70.78349 10.08519 +414 22.28250 -34.42357 -40.98820 +415 21.07927 -42.08707 -9.620828 +416 93.63789 8.921498 -6.141128 +417 27.38307 -30.26223 40.28233 +418 12.01267 -5.243523 9.574508 +419 20.26966 -26.01865 26.17283 +420 30.98996 -28.66091 -67.48067 +421 33.14201 -53.56117 -46.49082 +422 10.64143 8.752732 0.663907 +423 20.92099 56.52814 1.722336 +424 50.75817 -64.01292 -44.30676 +425 61.70256 78.71407 -8.129122 +426 33.72319 36.35310 49.05580 +427 19.02023 -27.87985 -34.79804 +428 38.36223 40.06181 54.97268 +429 80.09902 -12.76910 -31.18624 +430 78.86107 -40.50542 -20.70993 +431 93.91451 12.95494 1.733627 +432 88.05319 24.59881 13.95577 +433 87.11650 8.712771 -17.43043 +434 17.86537 40.11230 -19.82343 +435 17.57257 -33.41499 6.214852 +436 13.25576 -13.60366 -18.43982 +437 74.56239 -1.198623 -36.58074 +438 51.43839 -53.50427 -52.70897 +439 17.16055 4.099086 21.55182 +440 51.79643 -45.24108 -55.40912 +441 25.77368 -40.81616 -45.44457 +442 16.77027 37.36298 5.812792 +443 14.22769 -3.195623 15.02747 +444 28.68129 -51.74113 -31.19654 +445 17.91831 -33.73836 -7.483512 +446 32.86466 -55.41691 -40.66789 +447 65.79149 -59.95173 22.32141 +448 18.77371 -29.33431 -29.77295 +449 17.36238 -13.29859 -48.57724 +450 40.15304 -44.01558 58.87673 +451 27.34223 -12.48211 40.73784 +452 27.35357 -21.23237 40.57670 +453 24.45797 14.99474 34.84776 +454 23.77646 -39.31710 30.10860 +455 12.69119 -16.81165 -6.272508 +456 62.26199 -35.48032 -49.43059 +457 27.52149 -53.20887 31.17247 +458 14.57223 -20.17241 11.30339 +459 66.01550 66.66211 32.29395 +460 16.90196 -16.20301 -42.07278 +461 53.93867 16.69220 -55.22240 +462 12.81593 -16.32225 -9.417309 +463 61.16786 78.30256 24.07783 +464 86.25955 -13.91036 -22.76286 +465 22.02335 -35.99689 -35.78789 +466 88.04140 24.25407 19.04391 +467 23.85887 59.98916 22.83033 +468 81.04415 12.02062 -25.29336 +469 15.98945 -20.83715 -26.94052 +470 93.92738 12.66421 5.788959 +471 20.12550 -13.51857 27.36806 +472 14.78160 -24.40400 4.484141 +473 14.48220 22.56179 -20.72251 +474 12.28841 -14.42826 5.236106 +475 40.25886 -31.64078 59.36969 +476 12.93900 -15.40541 -12.31754 +477 13.44969 -12.56306 -21.72344 +478 28.42031 -54.10626 -23.06552 +479 35.77522 -17.14687 53.31561 +480 17.26786 40.79266 -3.992279 +481 10.73012 9.462942 -0.863468 +482 24.25606 -50.16781 -1.133483 +483 61.09960 -27.93897 83.18360 +484 65.28801 41.80077 -33.76124 +485 54.57703 32.83552 -49.39866 +486 52.93753 -12.91973 -59.41505 +487 35.68495 -70.13291 13.71957 +488 15.41059 -24.14379 -14.75899 +489 18.54227 -30.56670 -24.66986 +490 12.57256 -16.84931 -3.072085 +491 23.58608 -17.32909 33.88060 +492 55.59511 -25.98691 77.65526 +493 20.80278 12.38693 28.14719 +494 56.01028 85.57001 38.64844 +495 58.92754 17.80231 -49.91692 +496 57.78464 26.01827 74.80060 +497 14.60918 6.821185 15.71921 +498 13.98890 -9.944071 -29.92424 +499 60.03353 -65.82175 24.92150 +500 87.92783 22.48998 35.53277 +501 81.99104 31.21177 49.83990 +502 13.67931 -11.32777 -25.34236 +503 21.20959 57.47143 -5.623687 +504 19.28293 -25.97583 -39.74380 +505 41.05029 86.18658 49.68165 +506 76.88721 47.36229 -4.770606 +507 37.23001 21.25324 53.67681 +508 92.39338 -18.70589 1.040239 +509 35.65593 -39.68195 52.85534 +510 14.18611 24.74059 -12.54064 +511 21.77330 -37.54110 -30.00691 +512 71.10481 54.64833 39.11446 +513 67.86947 -29.36764 -44.79999 +514 17.53091 41.13945 -10.73168 +515 16.52423 -18.01671 -36.14603 +516 24.99266 -45.75608 -27.81273 +517 70.00027 26.35177 -34.27137 +518 14.90626 -24.91470 -0.295460 +519 66.34574 -43.75502 83.76011 +520 61.53760 79.35241 2.802946 +521 85.11662 -31.90071 11.74684 +522 29.49091 -46.38704 -48.96143 +523 76.43471 42.77167 44.83932 +524 85.18717 -31.97308 5.859661 +525 19.59713 -24.01169 -45.09862 +526 36.43305 -64.86424 -27.50487 +527 12.46579 -16.44379 -0.0192222 +528 46.20775 54.67605 -48.15329 +529 12.73572 12.74129 9.390137 +530 54.55096 -69.70954 41.53253 +531 85.26184 -31.85042 0.454514 +532 13.95284 24.93280 -6.681053 +533 75.99517 30.87947 -24.30632 +534 85.33220 -31.69076 -4.692772 +535 71.88491 -52.20278 19.16926 +536 12.19848 -12.26866 7.266138 +537 69.54469 16.38609 -38.37037 +538 13.54646 22.53645 1.021865 +539 58.00560 -8.514375 -55.13161 +540 41.04471 6.952549 59.21855 +541 21.30436 -40.62945 -17.21081 +542 56.64702 7.083839 76.68500 +543 20.58514 53.85191 7.955333 +544 52.10874 96.64857 2.875105 +545 51.86151 96.93626 14.98211 +546 51.21043 7.095504 71.06283 +547 65.90037 -59.88345 10.36763 +548 87.99511 23.46949 25.48773 +549 18.32361 -31.70205 -19.37954 +550 14.19155 -0.127107 14.94572 +551 13.14523 18.16333 5.756888 +552 18.11527 -32.77056 -13.71386 +553 12.94267 15.59495 7.741031 +554 27.70679 -57.94554 11.27378 +555 16.09362 29.05498 12.17615 +556 49.42177 -73.02007 28.69047 +557 29.20687 -48.08949 -43.39983 +558 17.50529 9.646334 21.72512 +559 45.22791 -21.58618 65.56515 +560 78.72626 -41.82248 -14.08284 +561 40.52835 -6.688598 59.14681 +562 76.80069 47.08338 9.178522 +563 76.57812 44.57291 32.78859 +564 71.46994 57.98741 10.70358 +565 17.33836 -28.24312 15.80976 +566 93.92255 12.22368 10.51063 +567 12.37303 -15.63470 2.717359 +568 66.56301 68.44817 -7.092760 +569 19.76986 44.11151 17.27776 +570 78.51085 -42.78087 -0.0372507 +571 52.15704 -35.65563 -57.46776 +572 82.35202 36.41053 -3.460009 +573 25.23882 -43.87257 -34.08214 +574 54.68309 -70.24661 12.59843 +575 17.72167 -33.54639 -0.580276 +576 13.73516 23.93480 -2.295873 +577 24.06596 -49.97777 9.574191 +578 37.28847 -58.22946 -48.92314 +579 15.05697 -24.98637 -5.273698 +580 82.29418 35.55618 12.94400 +581 78.15776 -43.40416 35.86029 +582 31.89306 6.480158 47.06638 +583 16.97982 38.88576 1.388943 +584 36.33542 6.759096 53.09224 +585 56.54793 -49.40828 -50.40942 +586 45.92115 -65.37263 -45.42852 +587 51.61042 96.55560 27.49669 +588 17.06835 -14.37828 20.53096 +589 60.91545 76.16927 35.68718 +590 64.65047 29.47798 -39.46740 +591 16.95425 -5.190543 20.93841 +592 25.19663 26.89407 35.43089 +593 60.22291 46.04718 -37.90310 +594 74.28295 7.204254 88.64525 +595 31.42323 -14.79229 46.97272 +596 69.15183 6.740695 -41.30651 +597 23.63667 -24.68649 33.28812 +598 51.30961 94.85974 41.08392 +599 23.55047 -9.904238 33.91931 +600 26.78905 -32.95916 -60.78475 +601 20.67597 -41.62946 7.841407 +602 78.34171 -42.39118 15.46237 +603 15.75926 -21.73303 -22.55828 +604 92.45237 -18.14562 -1.732874 +605 87.30646 12.83386 -15.24132 +606 93.91272 11.96283 13.78018 +607 78.25065 -42.59082 24.64229 +608 84.85809 -33.43901 38.42208 +609 20.33712 4.907573 27.58598 +610 13.32738 20.21976 3.532028 +611 70.52616 36.54587 -29.06993 +612 76.73251 46.33925 16.06009 +613 65.73285 -59.66370 34.96958 +614 50.56628 83.88323 52.77414 +615 42.02062 22.84199 59.46708 +616 10.73350 -5.987610 -9.338485 +617 81.64753 24.24150 -18.79339 +618 75.17757 14.45639 -31.96515 +619 76.65918 45.48668 23.60768 +620 65.29830 57.06206 57.65265 +621 12.05765 -7.310589 9.194607 +622 71.24668 56.09549 28.11982 +623 74.28515 -8.713573 -37.55459 +624 78.10262 -44.40062 49.68831 +625 21.38661 21.70633 28.52156 +626 22.55510 -32.47371 -45.84790 +627 88.00104 24.72379 -1.979574 +628 61.33925 78.79835 13.26120 +629 11.93521 0.150546 9.747244 +630 93.91922 12.33311 7.909092 +631 20.07634 -7.454257 27.28620 +632 86.77143 0.0969599 -20.24387 +633 79.59840 -25.59389 -30.89405 +634 46.57984 -56.44589 -54.32574 +635 50.04596 -37.94093 71.20807 +636 66.31536 68.55514 12.06505 +637 14.39101 -12.95183 14.08792 +638 14.37696 3.067867 15.18864 +639 28.42305 17.21615 40.99590 +640 71.60154 57.68269 -5.940284 +641 85.06377 -31.44905 18.25450 +642 82.11547 32.86877 35.02230 +643 82.24587 34.75692 18.76180 +644 10.07954 0.953000 4.904333 +645 16.91359 -0.664476 20.78376 +646 78.43436 -42.37636 7.402955 +647 88.01781 24.77831 1.950531 +648 32.68705 19.29779 47.28419 +649 68.80602 -2.473077 -43.19489 +650 86.93107 4.370661 -18.77321 +651 84.77400 -35.45731 54.83140 +652 35.70703 -28.16679 53.02412 +653 50.59175 -8.939211 71.36732 +654 10.54809 7.770597 1.924199 +655 13.05247 -14.09989 -14.82907 +656 84.98109 -31.77581 26.52226 +657 71.52988 57.90556 2.535563 +658 76.82682 47.07448 2.360316 +659 17.93396 16.44500 21.89288 +660 40.38189 -19.17852 59.09141 +661 32.59016 -56.89253 -34.02382 +662 88.02620 24.40385 9.538935 +663 66.04821 -59.33424 -0.832069 +664 35.86491 -5.543253 52.79279 +665 11.97628 -3.267507 9.491712 +666 82.18161 33.76449 25.60221 +667 80.54223 -0.291630 -28.64251 +668 19.96292 -21.97765 -50.36701 +669 23.87096 5.562694 33.90675 +670 82.30642 35.80388 7.486510 +671 74.01525 -16.13660 -38.10495 +672 10.20987 -6.466124 2.500908 +673 12.31534 6.342060 10.09102 +674 14.88810 11.23657 15.68221 +675 71.34389 56.84201 18.90683 +676 10.49201 -7.667103 -4.567297 +677 14.26861 -6.155150 14.64048 +678 10.31727 4.739159 4.335086 +679 10.09331 -3.277105 4.293076 +680 10.12440 1.700085 4.659838 +681 47.99416 95.75192 -24.17700 +682 93.52063 6.677413 -7.335545 +683 93.90430 12.53021 3.703084 +684 93.06965 -5.099417 -11.46911 +685 93.24610 -0.0650532 -10.07004 +686 60.53388 71.48140 48.35249 +687 67.37482 -12.01208 88.09725 +END_DATA + + +# And then come the triangles + +NUMBER_OF_FIELDS 3 +BEGIN_DATA_FORMAT +VERTEX_0 VERTEX_1 VERTEX_2 +END_DATA_FORMAT + +NUMBER_OF_SETS 1372 +BEGIN_DATA +9 4 16 +9 16 19 +16 6 19 +26 1 33 +2 26 33 +3 12 48 +12 6 48 +40 22 50 +1 26 56 +0 20 57 +50 22 65 +60 48 66 +20 0 71 +18 51 71 +51 20 71 +49 71 75 +71 0 75 +7 44 80 +44 10 80 +78 7 80 +31 24 82 +10 44 83 +44 46 83 +4 9 84 +9 29 84 +54 4 84 +83 46 85 +74 29 89 +32 63 93 +8 25 94 +45 73 96 +34 88 99 +88 61 99 +57 20 100 +59 57 100 +51 18 101 +52 59 102 +59 28 102 +46 44 105 +41 46 105 +63 32 106 +90 76 107 +8 94 108 +75 0 108 +49 75 108 +94 49 108 +58 11 110 +6 16 111 +16 66 111 +48 6 111 +66 48 111 +35 106 112 +46 41 113 +23 85 113 +85 46 113 +79 13 117 +13 90 117 +90 107 117 +25 116 122 +123 109 128 +97 37 129 +95 64 132 +123 95 132 +68 135 138 +112 95 139 +95 123 139 +123 128 139 +78 80 140 +80 10 140 +10 125 140 +32 93 141 +124 32 141 +69 118 146 +130 69 146 +22 40 147 +40 36 147 +104 91 149 +148 104 149 +68 138 150 +139 128 151 +99 61 153 +21 97 156 +97 109 156 +109 123 156 +123 132 156 +132 21 156 +90 13 157 +118 87 158 +146 118 158 +1 56 160 +16 4 161 +31 82 161 +66 16 161 +34 99 164 +43 35 167 +35 112 167 +112 139 167 +139 151 167 +3 1 168 +1 160 168 +134 125 169 +93 63 170 +25 8 171 +116 25 171 +10 83 174 +83 85 174 +85 169 174 +125 10 174 +169 125 174 +77 45 175 +45 96 175 +172 92 176 +35 43 178 +106 35 178 +63 106 178 +170 63 178 +119 24 179 +158 87 181 +159 158 181 +87 77 181 +77 175 181 +49 94 183 +102 28 186 +70 72 189 +91 104 191 +39 61 192 +61 88 192 +13 7 193 +7 78 193 +157 13 193 +85 23 195 +169 85 195 +73 30 196 +96 73 196 +109 97 197 +97 129 197 +72 119 198 +189 72 198 +119 179 198 +78 140 199 +157 193 199 +193 78 199 +121 200 202 +6 12 204 +121 202 207 +202 155 207 +191 152 208 +68 150 209 +45 77 210 +27 21 214 +21 132 214 +132 64 214 +32 124 216 +172 176 217 +176 115 217 +44 7 222 +105 44 222 +9 19 224 +19 6 224 +6 204 224 +20 51 226 +100 20 226 +110 55 228 +58 110 228 +143 133 229 +205 143 229 +147 36 230 +36 47 230 +47 149 230 +149 91 230 +183 62 234 +157 199 236 +47 36 239 +128 109 240 +109 197 240 +96 196 245 +145 234 246 +227 190 249 +220 240 251 +240 197 251 +107 67 252 +117 107 252 +67 116 252 +79 117 252 +15 37 253 +27 98 253 +98 114 253 +114 15 253 +29 9 255 +89 29 255 +237 89 255 +9 224 255 +67 107 256 +107 76 256 +250 145 257 +87 118 260 +103 137 261 +68 254 262 +64 95 265 +95 242 265 +207 155 266 +155 219 266 +243 190 267 +81 23 270 +130 146 271 +161 82 273 +61 39 277 +39 165 277 +153 61 277 +165 206 277 +206 153 277 +237 166 279 +28 5 280 +65 14 281 +50 65 281 +152 191 283 +191 104 283 +55 38 284 +133 143 284 +259 142 287 +22 147 288 +245 196 288 +285 275 290 +234 145 294 +145 250 294 +269 152 295 +152 283 295 +283 184 295 +151 128 296 +128 240 296 +240 220 296 +134 169 297 +185 134 297 +213 212 299 +221 286 301 +286 225 301 +227 249 302 +249 282 302 +12 3 306 +3 168 306 +168 235 306 +204 12 306 +130 271 309 +274 130 309 +244 274 309 +305 244 309 +1 3 311 +33 1 311 +60 33 311 +3 48 311 +48 60 311 +17 34 312 +34 164 312 +159 181 314 +181 175 314 +17 14 315 +24 31 318 +179 24 318 +31 54 318 +54 289 318 +0 57 320 +57 59 320 +59 52 320 +108 0 320 +52 8 320 +8 108 320 +115 70 321 +217 115 321 +70 189 321 +204 306 322 +306 235 322 +316 166 322 +235 316 322 +95 112 323 +242 95 323 +106 32 323 +112 106 323 +32 216 323 +216 163 323 +163 242 323 +308 68 325 +173 225 326 +225 286 326 +77 87 327 +87 260 327 +210 77 327 +116 171 328 +252 116 328 +177 86 329 +68 262 330 +188 201 331 +239 188 331 +47 239 331 +41 47 331 +201 270 331 +197 129 333 +251 197 333 +259 287 333 +287 251 333 +91 191 334 +191 208 334 +212 213 335 +213 244 335 +244 305 335 +265 242 336 +242 163 336 +43 167 338 +167 151 338 +319 136 339 +305 309 341 +309 271 341 +79 252 342 +252 328 342 +313 79 342 +28 59 343 +59 100 343 +279 166 344 +163 216 344 +216 279 344 +329 86 345 +5 211 346 +280 5 346 +41 105 348 +47 41 348 +149 47 348 +148 149 348 +126 92 349 +92 172 349 +126 349 350 +69 130 351 +130 274 351 +21 27 352 +37 97 352 +97 21 352 +27 253 352 +253 37 352 +122 62 353 +94 25 353 +25 122 353 +62 183 353 +183 94 353 +342 328 354 +7 13 358 +13 79 358 +175 96 359 +314 175 359 +96 245 359 +208 314 359 +245 334 359 +334 208 359 +179 318 360 +318 289 360 +219 144 362 +34 17 363 +88 34 363 +259 88 363 +142 259 363 +186 28 364 +28 280 364 +356 276 367 +188 239 369 +168 160 370 +160 218 370 +218 231 370 +235 168 370 +53 131 371 +131 101 371 +101 18 371 +18 250 371 +250 257 371 +257 53 371 +5 357 373 +357 126 373 +126 350 373 +64 265 376 +286 221 376 +265 336 376 +214 64 377 +221 187 377 +64 376 377 +376 221 377 +216 124 379 +89 237 379 +237 279 379 +279 216 379 +201 188 382 +300 248 382 +68 374 383 +40 50 386 +50 281 386 +166 237 388 +237 255 388 +255 224 388 +322 166 388 +224 204 388 +204 322 388 +28 343 389 +284 143 390 +228 55 390 +55 284 390 +147 230 391 +230 91 391 +91 334 391 +245 288 391 +334 245 391 +288 147 391 +170 178 392 +243 170 392 +178 43 392 +43 338 392 +190 243 392 +205 347 393 +143 205 393 +390 143 393 +374 68 394 +192 88 395 +88 259 395 +129 192 395 +333 129 395 +259 333 395 +208 152 397 +152 269 397 +269 337 397 +159 314 397 +337 159 397 +314 208 397 +134 185 400 +56 42 401 +42 200 401 +200 121 401 +121 218 401 +160 56 401 +218 160 401 +337 269 403 +278 399 403 +74 89 404 +124 141 404 +141 355 404 +355 74 404 +89 379 404 +379 124 404 +202 200 405 +201 382 406 +382 248 406 +150 138 408 +282 249 411 +296 220 411 +220 298 411 +298 282 411 +137 194 412 +261 137 412 +316 235 413 +235 370 413 +370 231 413 +5 373 416 +373 350 416 +185 182 417 +400 185 417 +241 400 417 +182 232 419 +232 285 419 +285 290 419 +290 402 419 +37 15 420 +129 37 420 +15 39 420 +39 192 420 +192 129 420 +312 164 421 +316 413 423 +22 288 424 +196 30 424 +288 196 424 +82 24 425 +24 119 425 +200 42 426 +405 200 426 +42 58 428 +58 228 428 +426 42 428 +213 299 429 +146 158 430 +271 146 430 +158 159 430 +159 337 430 +357 5 431 +127 372 433 +336 163 434 +163 344 434 +378 194 435 +225 173 436 +30 73 438 +287 142 440 +142 438 440 +153 206 441 +206 414 441 +414 368 441 +409 415 445 +386 281 446 +421 340 446 +98 27 449 +27 214 449 +214 377 449 +377 187 449 +140 125 450 +199 140 450 +236 199 450 +276 375 451 +241 417 452 +232 182 454 +182 185 454 +185 297 454 +297 261 454 +261 412 454 +412 232 454 +325 330 455 +282 298 456 +298 324 456 +324 210 456 +210 327 456 +23 81 457 +195 23 457 +81 103 457 +103 261 457 +169 195 457 +297 169 457 +261 297 457 +275 285 458 +449 187 460 +141 93 461 +93 170 461 +170 243 461 +243 267 461 +355 141 461 +308 325 462 +325 455 462 +455 384 462 +244 213 464 +274 244 464 +351 274 464 +223 351 464 +429 223 464 +213 429 464 +368 414 465 +414 427 465 +427 448 465 +121 207 467 +218 121 467 +231 218 467 +238 231 467 +427 398 469 +448 427 469 +410 431 470 +378 435 472 +326 286 473 +286 376 473 +376 336 473 +336 434 473 +275 458 474 +458 378 474 +236 450 475 +308 462 476 +301 225 477 +225 436 477 +188 369 478 +382 188 478 +300 382 478 +369 444 478 +68 383 481 +422 68 481 +406 248 482 +248 415 482 +415 409 482 +234 62 483 +246 234 483 +321 189 484 +360 289 485 +385 360 485 +151 296 486 +338 151 486 +296 411 486 +23 113 487 +270 23 487 +113 41 487 +41 331 487 +331 270 487 +396 476 488 +462 384 488 +476 462 488 +330 262 490 +455 330 490 +451 452 491 +402 471 491 +307 246 492 +246 483 492 +256 76 492 +483 256 492 +76 307 492 +258 463 494 +267 292 495 +461 267 495 +292 385 495 +385 485 495 +355 461 495 +485 355 495 +205 229 496 +229 53 496 +53 257 496 +187 221 498 +221 301 498 +447 184 499 +180 313 499 +100 226 500 +343 100 500 +51 101 501 +226 51 501 +500 226 501 +469 398 502 +477 469 502 +301 477 502 +498 301 502 +398 498 502 +166 316 503 +316 423 503 +344 166 503 +423 480 503 +427 414 504 +398 427 504 +2 11 505 +26 2 505 +56 26 505 +42 56 505 +58 42 505 +11 58 505 +115 176 506 +426 428 507 +211 5 508 +125 134 509 +134 400 509 +450 125 509 +475 450 509 +394 326 510 +326 473 510 +473 434 510 +489 310 511 +465 448 511 +448 489 511 +131 263 512 +215 302 513 +302 282 513 +282 456 513 +260 215 513 +327 260 513 +456 327 513 +434 344 514 +344 503 514 +503 480 514 +510 434 514 +498 398 515 +460 187 515 +187 498 515 +398 504 515 +310 300 516 +300 478 516 +478 444 516 +511 310 516 +472 435 518 +116 67 519 +122 116 519 +62 122 519 +67 256 519 +256 483 519 +483 62 519 +317 273 520 +273 82 520 +82 425 520 +425 366 520 +280 346 521 +99 153 522 +164 99 522 +153 441 522 +441 368 522 +101 131 523 +501 101 523 +131 512 523 +346 211 524 +521 346 524 +268 114 525 +460 515 525 +515 504 525 +36 40 526 +239 36 526 +369 239 526 +40 386 526 +262 254 527 +490 262 527 +254 233 527 +472 518 527 +518 490 527 +29 74 528 +84 29 528 +54 84 528 +289 54 528 +485 289 528 +74 355 528 +355 485 528 +203 162 529 +313 180 530 +222 7 530 +7 358 530 +79 313 530 +358 79 530 +211 508 531 +524 211 531 +374 394 532 +394 510 532 +510 514 532 +514 480 532 +172 217 533 +517 291 533 +305 341 534 +531 508 534 +341 399 534 +447 365 535 +136 319 536 +474 136 536 +275 474 536 +442 381 538 +383 374 538 +249 190 539 +190 392 539 +392 338 539 +338 486 539 +411 249 539 +486 411 539 +393 347 540 +248 300 541 +415 248 541 +300 310 541 +145 246 542 +257 145 542 +496 257 542 +231 238 543 +413 231 543 +423 413 543 +238 442 543 +60 66 544 +66 161 544 +161 273 544 +33 60 545 +273 317 545 +544 273 545 +60 544 545 +361 347 546 +347 205 546 +205 496 546 +496 542 546 +295 184 547 +184 447 547 +447 535 547 +535 304 547 +389 343 548 +466 389 548 +343 500 548 +396 488 549 +489 396 549 +310 489 549 +541 310 549 +443 408 550 +422 481 551 +445 415 552 +415 541 552 +384 445 552 +488 384 552 +549 488 552 +541 549 552 +162 422 553 +529 162 553 +362 144 553 +551 362 553 +144 529 553 +422 551 553 +103 81 554 +81 270 554 +270 201 554 +201 406 554 +266 219 555 +219 362 555 +381 266 555 +538 381 555 +362 551 555 +180 148 556 +105 222 556 +148 348 556 +348 105 556 +222 530 556 +530 180 556 +421 164 557 +164 522 557 +368 340 557 +522 368 557 +340 421 557 +439 497 558 +307 236 559 +236 475 559 +337 403 560 +403 399 560 +430 337 560 +341 271 560 +271 430 560 +399 341 560 +347 361 561 +540 347 561 +523 512 563 +194 378 565 +412 194 565 +285 232 565 +232 412 565 +378 458 565 +458 285 565 +233 136 567 +136 474 567 +378 472 567 +474 378 567 +527 233 567 +472 527 567 +119 72 568 +425 119 568 +72 70 568 +366 425 568 +207 266 569 +266 381 569 +381 442 569 +442 238 569 +238 467 569 +467 207 569 +399 278 570 +524 531 570 +531 534 570 +534 399 570 +220 251 571 +298 220 571 +251 287 571 +324 298 571 +287 440 571 +440 324 571 +176 92 572 +506 176 572 +368 465 573 +465 511 573 +340 368 573 +511 516 573 +444 340 573 +516 444 573 +148 180 574 +104 148 574 +283 104 574 +184 283 574 +180 499 574 +499 184 574 +435 409 575 +409 445 575 +518 435 575 +374 532 576 +538 374 576 +442 538 576 +532 480 576 +406 482 577 +554 406 577 +137 103 577 +103 554 577 +14 17 578 +17 312 578 +281 14 578 +312 421 578 +421 446 578 +446 281 578 +445 384 579 +384 455 579 +455 490 579 +490 518 579 +518 575 579 +575 445 579 +365 354 581 +276 356 582 +375 276 582 +480 423 583 +423 543 583 +543 442 583 +442 576 583 +576 480 583 +375 582 584 +507 540 584 +73 45 585 +45 210 585 +438 73 585 +210 324 585 +324 440 585 +440 438 585 +14 65 586 +315 14 586 +30 315 586 +424 30 586 +65 22 586 +22 424 586 +2 33 587 +258 2 587 +33 545 587 +317 258 587 +545 317 587 +290 275 588 +247 380 588 +380 471 588 +402 290 588 +471 402 588 +407 459 589 +463 407 589 +38 494 589 +494 463 589 +385 292 590 +517 484 590 +292 537 590 +537 517 590 +380 247 591 +155 202 592 +202 405 592 +198 179 593 +179 360 593 +189 198 593 +484 189 593 +360 385 593 +385 590 593 +590 484 593 +71 49 594 +49 183 594 +183 294 594 +18 71 594 +250 18 594 +294 250 594 +241 452 595 +452 451 595 +479 241 595 +451 375 595 +437 264 596 +264 537 596 +292 267 596 +537 292 596 +182 419 597 +419 402 597 +402 491 597 +417 182 597 +452 417 597 +491 452 597 +11 2 598 +494 11 598 +2 258 598 +258 494 598 +367 276 599 +276 451 599 +451 491 599 +491 471 599 +39 15 600 +15 114 600 +165 39 600 +114 268 600 +268 165 600 +194 137 601 +435 194 601 +409 435 601 +137 577 601 +482 409 601 +577 482 601 +304 535 602 +436 396 603 +469 477 603 +477 436 603 +448 469 603 +489 448 603 +396 489 603 +5 335 604 +335 305 604 +508 5 604 +305 534 604 +534 508 604 +350 332 605 +433 372 605 +416 350 605 +332 468 605 +468 433 605 +389 466 606 +466 432 606 +5 28 606 +566 5 606 +28 389 606 +432 566 606 +535 365 607 +602 535 607 +365 581 607 +52 102 608 +303 439 609 +439 558 609 +558 493 609 +481 383 610 +551 481 610 +383 538 610 +538 555 610 +555 551 610 +217 321 611 +533 217 611 +321 484 611 +484 517 611 +517 533 611 +564 562 612 +562 580 612 +313 342 613 +342 354 613 +354 365 613 +365 447 613 +447 499 613 +499 313 613 +110 11 614 +38 55 614 +55 110 614 +11 494 614 +494 38 614 +228 390 615 +390 393 615 +428 228 615 +507 428 615 +393 540 615 +540 507 615 +68 308 616 +394 68 616 +173 326 616 +326 394 616 +308 476 616 +332 350 617 +349 172 617 +350 349 617 +291 332 617 +533 291 617 +172 533 617 +264 293 618 +293 468 618 +332 291 618 +468 332 618 +537 264 618 +291 517 618 +517 537 618 +131 53 620 +53 229 620 +229 133 620 +133 263 620 +263 131 620 +319 339 621 +339 154 621 +154 418 621 +247 319 621 +263 459 622 +512 263 622 +563 512 622 +619 563 622 +429 299 623 +299 437 623 +328 171 624 +354 328 624 +581 354 624 +608 581 624 +219 155 625 +155 592 625 +453 493 625 +592 453 625 +206 165 626 +165 268 626 +414 206 626 +504 414 626 +268 525 626 +525 504 626 +92 126 627 +126 357 627 +572 92 627 +387 572 627 +258 317 628 +463 258 628 +317 520 628 +520 366 628 +177 329 629 +138 135 629 +408 138 629 +329 550 629 +550 408 629 +470 5 630 +5 566 630 +591 303 631 +471 380 631 +380 591 631 +303 367 631 +367 599 631 +599 471 631 +212 120 632 +118 69 633 +223 215 633 +215 260 633 +260 118 633 +69 351 633 +351 223 633 +142 363 634 +363 17 634 +438 142 634 +17 315 634 +315 30 634 +30 438 634 +76 90 635 +90 157 635 +157 236 635 +236 307 635 +307 76 635 +407 463 636 +463 628 636 +628 366 636 +564 407 636 +319 247 637 +275 536 637 +536 319 637 +247 588 637 +588 275 637 +329 345 638 +550 329 638 +345 497 638 +497 439 638 +356 453 639 +582 356 639 +453 592 639 +592 405 639 +70 115 640 +115 506 640 +568 70 640 +366 568 640 +364 280 641 +280 521 641 +186 364 641 +521 602 641 +602 607 641 +500 501 642 +501 523 642 +523 563 642 +548 500 642 +432 466 643 +580 432 643 +612 580 643 +619 612 643 +135 68 644 +177 629 644 +629 135 644 +439 303 645 +303 591 645 +443 550 645 +591 443 645 +550 638 645 +638 439 645 +278 304 646 +570 278 646 +304 602 646 +521 524 646 +602 521 646 +524 570 646 +357 431 647 +627 357 647 +431 410 647 +410 387 647 +387 627 647 +405 426 648 +426 507 648 +507 584 648 +584 582 648 +639 405 648 +582 639 648 +190 227 649 +267 190 649 +596 267 649 +437 596 649 +227 623 649 +623 437 649 +433 468 650 +468 293 650 +120 127 650 +632 120 650 +127 433 650 +293 632 650 +8 52 651 +171 8 651 +52 608 651 +608 624 651 +624 171 651 +241 479 652 +400 241 652 +509 400 652 +475 509 652 +246 307 653 +361 546 653 +542 246 653 +546 542 653 +307 559 653 +559 361 653 +162 272 654 +272 68 654 +68 422 654 +422 162 654 +436 173 655 +396 436 655 +476 396 655 +173 616 655 +616 476 655 +102 186 656 +608 102 656 +607 581 656 +581 608 656 +186 641 656 +641 607 656 +562 564 657 +564 636 657 +636 366 657 +640 506 657 +366 640 657 +387 562 658 +506 572 658 +572 387 658 +562 657 658 +657 506 658 +144 219 659 +219 625 659 +493 558 659 +625 493 659 +559 475 660 +361 559 660 +561 361 660 +479 561 660 +475 652 660 +652 479 660 +444 369 661 +340 444 661 +446 340 661 +386 446 661 +369 526 661 +526 386 661 +566 432 662 +432 580 662 +410 470 662 +470 630 662 +630 566 662 +269 295 663 +278 403 663 +403 269 663 +295 547 663 +304 278 663 +547 304 663 +561 479 664 +540 561 664 +584 540 664 +375 584 664 +479 595 664 +595 375 664 +209 150 665 +150 408 665 +154 209 665 +418 154 665 +408 443 665 +443 418 665 +466 548 666 +643 466 666 +548 642 666 +563 619 666 +619 643 666 +642 563 666 +299 212 667 +293 264 667 +264 437 667 +437 299 667 +212 632 667 +632 293 667 +98 449 668 +449 460 668 +114 98 668 +525 114 668 +460 525 668 +356 367 669 +453 356 669 +493 453 669 +609 493 669 +367 303 669 +303 609 669 +387 410 670 +562 387 670 +580 562 670 +410 662 670 +662 580 670 +227 302 671 +623 227 671 +302 215 671 +215 223 671 +223 429 671 +429 623 671 +136 233 672 +233 254 672 +254 68 672 +68 339 672 +339 136 672 +162 203 673 +272 162 673 +86 272 673 +345 86 673 +203 497 673 +497 345 673 +497 203 674 +203 529 674 +529 144 674 +558 497 674 +144 659 674 +659 558 674 +407 564 675 +564 612 675 +459 407 675 +622 459 675 +612 619 675 +619 622 675 +325 68 676 +68 330 676 +330 325 676 +418 443 677 +443 591 677 +591 247 677 +247 621 677 +621 418 677 +86 177 678 +272 86 678 +177 68 678 +68 272 678 +68 209 679 +209 154 679 +154 339 679 +339 68 679 +68 177 680 +177 644 680 +644 68 680 +4 54 681 +54 31 681 +31 161 681 +161 4 681 +372 5 682 +5 416 682 +416 605 682 +605 372 682 +431 5 683 +5 470 683 +470 431 683 +335 5 684 +120 212 684 +212 335 684 +127 120 685 +5 372 685 +372 127 685 +120 684 685 +684 5 685 +263 133 686 +133 284 686 +284 38 686 +38 589 686 +459 263 686 +589 459 686 +183 234 687 +234 294 687 +294 183 687 +END_DATA -- 2.39.5 From 682c0ceedaf3ebf47dd2220ff190c25ea6588347 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sun, 23 Aug 2026 07:46:23 +0100 Subject: [PATCH 23/34] Debug macOS ARM64 crash with lldb --- .github/workflows/build-macos.yml | 8 ++++++++ ref/3dap5k.sp | 0 ref/CIE_C.sp | 0 ref/CMP_DT_003.cht | 0 ref/CMP_DT_mini.cht | 0 ref/CMP_Digital_Target-2019.cht | 0 ref/CMP_Digital_Target-4.cht | 0 ref/CMP_Digital_Target-4.cie | 0 ref/CMP_Digital_Target-4.ti2 | 0 ref/CMP_Digital_Target-7.cht | 0 ref/CMP_Digital_Target_Studio.cht | 0 ref/ColorChecker.cht | 0 ref/ColorChecker.cie | 0 ref/ColorChecker.ti2 | 0 ref/ColorCheckerDC.cht | 0 ref/ColorCheckerDC.ti2 | 0 ref/ColorCheckerPassport.cht | 0 ref/ColorCheckerPassport.cie | 0 ref/ColorCheckerSG.cht | 0 ref/ColorCheckerSG.ti2 | 0 ref/D50_0.0.sp | 0 ref/D50_0.1.sp | 0 ref/D50_0.3.sp | 0 ref/D50_0.5.sp | 0 ref/D50_0.7.sp | 0 ref/D50_1.0.sp | 0 ref/D50_1.2.sp | 0 ref/D50_1.5.sp | 0 ref/D50_1.7.sp | 0 ref/D50_2.0.sp | 0 ref/D50_2.5.sp | 0 ref/D50_3.0.sp | 0 ref/ECI2002.ti2 | 0 ref/ECI2002R.ti2 | 0 ref/F1.sp | 0 ref/F5.sp | 0 ref/F8.sp | 0 ref/FograStrip2.ti1 | 0 ref/FograStrip2_2.ti2 | 0 ref/FograStrip3.ti1 | 0 ref/FograStrip3_3.ti2 | 0 ref/GTIPlus.sp | 0 ref/Hutchcolor.cht | 0 ref/ISO12641_2_1.cht | 0 ref/ISO12641_2_3_1.cht | 0 ref/ISO12641_2_3_2.cht | 0 ref/ISO12641_2_3_3.cht | 0 ref/LaserSoftDCPro.cht | 0 ref/MLG.cht | 0 ref/MLG.cie | 0 ref/Office.sp | 0 ref/QPcard_201.cht | 0 ref/QPcard_201.cie | 0 ref/QPcard_202.cht | 0 ref/QPcard_202.cie | 0 ref/SOtele.sp | 0 ref/SpyderChecker.cht | 0 ref/SpyderChecker.cie | 0 ref/SpyderChecker24.cht | 0 ref/SpyderChecker24.cie | 0 ref/Trulux.sp | 0 ref/TruluxPlus.sp | 0 ref/ccxx.ti1 | 0 ref/example.sp | 0 ref/example121.sp | 0 ref/i1_RGB_Scan_1.4.cht | 0 ref/i1_RGB_Scan_1.4.ti2 | 0 ref/it8.cht | 0 68 files changed, 8 insertions(+) mode change 100755 => 100644 ref/3dap5k.sp mode change 100755 => 100644 ref/CIE_C.sp mode change 100755 => 100644 ref/CMP_DT_003.cht mode change 100755 => 100644 ref/CMP_DT_mini.cht mode change 100755 => 100644 ref/CMP_Digital_Target-2019.cht mode change 100755 => 100644 ref/CMP_Digital_Target-4.cht mode change 100755 => 100644 ref/CMP_Digital_Target-4.cie mode change 100755 => 100644 ref/CMP_Digital_Target-4.ti2 mode change 100755 => 100644 ref/CMP_Digital_Target-7.cht mode change 100755 => 100644 ref/CMP_Digital_Target_Studio.cht mode change 100755 => 100644 ref/ColorChecker.cht mode change 100755 => 100644 ref/ColorChecker.cie mode change 100755 => 100644 ref/ColorChecker.ti2 mode change 100755 => 100644 ref/ColorCheckerDC.cht mode change 100755 => 100644 ref/ColorCheckerDC.ti2 mode change 100755 => 100644 ref/ColorCheckerPassport.cht mode change 100755 => 100644 ref/ColorCheckerPassport.cie mode change 100755 => 100644 ref/ColorCheckerSG.cht mode change 100755 => 100644 ref/ColorCheckerSG.ti2 mode change 100755 => 100644 ref/D50_0.0.sp mode change 100755 => 100644 ref/D50_0.1.sp mode change 100755 => 100644 ref/D50_0.3.sp mode change 100755 => 100644 ref/D50_0.5.sp mode change 100755 => 100644 ref/D50_0.7.sp mode change 100755 => 100644 ref/D50_1.0.sp mode change 100755 => 100644 ref/D50_1.2.sp mode change 100755 => 100644 ref/D50_1.5.sp mode change 100755 => 100644 ref/D50_1.7.sp mode change 100755 => 100644 ref/D50_2.0.sp mode change 100755 => 100644 ref/D50_2.5.sp mode change 100755 => 100644 ref/D50_3.0.sp mode change 100755 => 100644 ref/ECI2002.ti2 mode change 100755 => 100644 ref/ECI2002R.ti2 mode change 100755 => 100644 ref/F1.sp mode change 100755 => 100644 ref/F5.sp mode change 100755 => 100644 ref/F8.sp mode change 100755 => 100644 ref/FograStrip2.ti1 mode change 100755 => 100644 ref/FograStrip2_2.ti2 mode change 100755 => 100644 ref/FograStrip3.ti1 mode change 100755 => 100644 ref/FograStrip3_3.ti2 mode change 100755 => 100644 ref/GTIPlus.sp mode change 100755 => 100644 ref/Hutchcolor.cht mode change 100755 => 100644 ref/ISO12641_2_1.cht mode change 100755 => 100644 ref/ISO12641_2_3_1.cht mode change 100755 => 100644 ref/ISO12641_2_3_2.cht mode change 100755 => 100644 ref/ISO12641_2_3_3.cht mode change 100755 => 100644 ref/LaserSoftDCPro.cht mode change 100755 => 100644 ref/MLG.cht mode change 100755 => 100644 ref/MLG.cie mode change 100755 => 100644 ref/Office.sp mode change 100755 => 100644 ref/QPcard_201.cht mode change 100755 => 100644 ref/QPcard_201.cie mode change 100755 => 100644 ref/QPcard_202.cht mode change 100755 => 100644 ref/QPcard_202.cie mode change 100755 => 100644 ref/SOtele.sp mode change 100755 => 100644 ref/SpyderChecker.cht mode change 100755 => 100644 ref/SpyderChecker.cie mode change 100755 => 100644 ref/SpyderChecker24.cht mode change 100755 => 100644 ref/SpyderChecker24.cie mode change 100755 => 100644 ref/Trulux.sp mode change 100755 => 100644 ref/TruluxPlus.sp mode change 100755 => 100644 ref/ccxx.ti1 mode change 100755 => 100644 ref/example.sp mode change 100755 => 100644 ref/example121.sp mode change 100755 => 100644 ref/i1_RGB_Scan_1.4.cht mode change 100755 => 100644 ref/i1_RGB_Scan_1.4.ti2 mode change 100755 => 100644 ref/it8.cht diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 8aa3f38..e8c36f8 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -56,6 +56,14 @@ jobs: ./bin/colprof -? || true ./bin/targen -? || true + - name: Debug GenRMGam Crash on ARM64 + if: matrix.arch == 'arm64' + run: | + echo "Compiling GenRMGam with debug symbols..." + cc -g -O0 -o gamut/GenRMGam_debug gamut/GenRMGam.c gamut/gamut.c numlib/libnum.a numlib/libui.a xicc/libxicc.a cgats/libcgats.a icc/libicc.a plot/libplot.a plot/libvrml.a yajl/libyajl.a ccast/libccast.a ccast/axTLS/libaxtls.a tiff/libtiff.a jpeg/libjpeg.a png/libpng.a zlib/libz.a spectro/libconv.a -I. -Igamut -Inumlib -Ixicc -Icgats -Iicc -Iplot -Iyajl -Iccast -Itiff -Ijpeg -Ipng -Izlib -framework Carbon -framework Cocoa -framework IOKit -framework CoreFoundation -framework AppKit -framework AudioToolbox -lm -lpthread || true + echo "Running under lldb..." + lldb -b -o "run gamut/RefMediumGamut.gam" -o "bt all" -o "quit" -- gamut/GenRMGam_debug || true + - name: Package Release run: | export OSTYPE=darwin diff --git a/ref/3dap5k.sp b/ref/3dap5k.sp old mode 100755 new mode 100644 diff --git a/ref/CIE_C.sp b/ref/CIE_C.sp old mode 100755 new mode 100644 diff --git a/ref/CMP_DT_003.cht b/ref/CMP_DT_003.cht old mode 100755 new mode 100644 diff --git a/ref/CMP_DT_mini.cht b/ref/CMP_DT_mini.cht old mode 100755 new mode 100644 diff --git a/ref/CMP_Digital_Target-2019.cht b/ref/CMP_Digital_Target-2019.cht old mode 100755 new mode 100644 diff --git a/ref/CMP_Digital_Target-4.cht b/ref/CMP_Digital_Target-4.cht old mode 100755 new mode 100644 diff --git a/ref/CMP_Digital_Target-4.cie b/ref/CMP_Digital_Target-4.cie old mode 100755 new mode 100644 diff --git a/ref/CMP_Digital_Target-4.ti2 b/ref/CMP_Digital_Target-4.ti2 old mode 100755 new mode 100644 diff --git a/ref/CMP_Digital_Target-7.cht b/ref/CMP_Digital_Target-7.cht old mode 100755 new mode 100644 diff --git a/ref/CMP_Digital_Target_Studio.cht b/ref/CMP_Digital_Target_Studio.cht old mode 100755 new mode 100644 diff --git a/ref/ColorChecker.cht b/ref/ColorChecker.cht old mode 100755 new mode 100644 diff --git a/ref/ColorChecker.cie b/ref/ColorChecker.cie old mode 100755 new mode 100644 diff --git a/ref/ColorChecker.ti2 b/ref/ColorChecker.ti2 old mode 100755 new mode 100644 diff --git a/ref/ColorCheckerDC.cht b/ref/ColorCheckerDC.cht old mode 100755 new mode 100644 diff --git a/ref/ColorCheckerDC.ti2 b/ref/ColorCheckerDC.ti2 old mode 100755 new mode 100644 diff --git a/ref/ColorCheckerPassport.cht b/ref/ColorCheckerPassport.cht old mode 100755 new mode 100644 diff --git a/ref/ColorCheckerPassport.cie b/ref/ColorCheckerPassport.cie old mode 100755 new mode 100644 diff --git a/ref/ColorCheckerSG.cht b/ref/ColorCheckerSG.cht old mode 100755 new mode 100644 diff --git a/ref/ColorCheckerSG.ti2 b/ref/ColorCheckerSG.ti2 old mode 100755 new mode 100644 diff --git a/ref/D50_0.0.sp b/ref/D50_0.0.sp old mode 100755 new mode 100644 diff --git a/ref/D50_0.1.sp b/ref/D50_0.1.sp old mode 100755 new mode 100644 diff --git a/ref/D50_0.3.sp b/ref/D50_0.3.sp old mode 100755 new mode 100644 diff --git a/ref/D50_0.5.sp b/ref/D50_0.5.sp old mode 100755 new mode 100644 diff --git a/ref/D50_0.7.sp b/ref/D50_0.7.sp old mode 100755 new mode 100644 diff --git a/ref/D50_1.0.sp b/ref/D50_1.0.sp old mode 100755 new mode 100644 diff --git a/ref/D50_1.2.sp b/ref/D50_1.2.sp old mode 100755 new mode 100644 diff --git a/ref/D50_1.5.sp b/ref/D50_1.5.sp old mode 100755 new mode 100644 diff --git a/ref/D50_1.7.sp b/ref/D50_1.7.sp old mode 100755 new mode 100644 diff --git a/ref/D50_2.0.sp b/ref/D50_2.0.sp old mode 100755 new mode 100644 diff --git a/ref/D50_2.5.sp b/ref/D50_2.5.sp old mode 100755 new mode 100644 diff --git a/ref/D50_3.0.sp b/ref/D50_3.0.sp old mode 100755 new mode 100644 diff --git a/ref/ECI2002.ti2 b/ref/ECI2002.ti2 old mode 100755 new mode 100644 diff --git a/ref/ECI2002R.ti2 b/ref/ECI2002R.ti2 old mode 100755 new mode 100644 diff --git a/ref/F1.sp b/ref/F1.sp old mode 100755 new mode 100644 diff --git a/ref/F5.sp b/ref/F5.sp old mode 100755 new mode 100644 diff --git a/ref/F8.sp b/ref/F8.sp old mode 100755 new mode 100644 diff --git a/ref/FograStrip2.ti1 b/ref/FograStrip2.ti1 old mode 100755 new mode 100644 diff --git a/ref/FograStrip2_2.ti2 b/ref/FograStrip2_2.ti2 old mode 100755 new mode 100644 diff --git a/ref/FograStrip3.ti1 b/ref/FograStrip3.ti1 old mode 100755 new mode 100644 diff --git a/ref/FograStrip3_3.ti2 b/ref/FograStrip3_3.ti2 old mode 100755 new mode 100644 diff --git a/ref/GTIPlus.sp b/ref/GTIPlus.sp old mode 100755 new mode 100644 diff --git a/ref/Hutchcolor.cht b/ref/Hutchcolor.cht old mode 100755 new mode 100644 diff --git a/ref/ISO12641_2_1.cht b/ref/ISO12641_2_1.cht old mode 100755 new mode 100644 diff --git a/ref/ISO12641_2_3_1.cht b/ref/ISO12641_2_3_1.cht old mode 100755 new mode 100644 diff --git a/ref/ISO12641_2_3_2.cht b/ref/ISO12641_2_3_2.cht old mode 100755 new mode 100644 diff --git a/ref/ISO12641_2_3_3.cht b/ref/ISO12641_2_3_3.cht old mode 100755 new mode 100644 diff --git a/ref/LaserSoftDCPro.cht b/ref/LaserSoftDCPro.cht old mode 100755 new mode 100644 diff --git a/ref/MLG.cht b/ref/MLG.cht old mode 100755 new mode 100644 diff --git a/ref/MLG.cie b/ref/MLG.cie old mode 100755 new mode 100644 diff --git a/ref/Office.sp b/ref/Office.sp old mode 100755 new mode 100644 diff --git a/ref/QPcard_201.cht b/ref/QPcard_201.cht old mode 100755 new mode 100644 diff --git a/ref/QPcard_201.cie b/ref/QPcard_201.cie old mode 100755 new mode 100644 diff --git a/ref/QPcard_202.cht b/ref/QPcard_202.cht old mode 100755 new mode 100644 diff --git a/ref/QPcard_202.cie b/ref/QPcard_202.cie old mode 100755 new mode 100644 diff --git a/ref/SOtele.sp b/ref/SOtele.sp old mode 100755 new mode 100644 diff --git a/ref/SpyderChecker.cht b/ref/SpyderChecker.cht old mode 100755 new mode 100644 diff --git a/ref/SpyderChecker.cie b/ref/SpyderChecker.cie old mode 100755 new mode 100644 diff --git a/ref/SpyderChecker24.cht b/ref/SpyderChecker24.cht old mode 100755 new mode 100644 diff --git a/ref/SpyderChecker24.cie b/ref/SpyderChecker24.cie old mode 100755 new mode 100644 diff --git a/ref/Trulux.sp b/ref/Trulux.sp old mode 100755 new mode 100644 diff --git a/ref/TruluxPlus.sp b/ref/TruluxPlus.sp old mode 100755 new mode 100644 diff --git a/ref/ccxx.ti1 b/ref/ccxx.ti1 old mode 100755 new mode 100644 diff --git a/ref/example.sp b/ref/example.sp old mode 100755 new mode 100644 diff --git a/ref/example121.sp b/ref/example121.sp old mode 100755 new mode 100644 diff --git a/ref/i1_RGB_Scan_1.4.cht b/ref/i1_RGB_Scan_1.4.cht old mode 100755 new mode 100644 diff --git a/ref/i1_RGB_Scan_1.4.ti2 b/ref/i1_RGB_Scan_1.4.ti2 old mode 100755 new mode 100644 diff --git a/ref/it8.cht b/ref/it8.cht old mode 100755 new mode 100644 -- 2.39.5 From 3685af99d0c7721038a92e79623010f41278eebf Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sun, 23 Aug 2026 07:46:56 +0100 Subject: [PATCH 24/34] Fix debug compile command --- .github/workflows/build-macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index e8c36f8..5ad823c 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -60,7 +60,7 @@ jobs: if: matrix.arch == 'arm64' run: | echo "Compiling GenRMGam with debug symbols..." - cc -g -O0 -o gamut/GenRMGam_debug gamut/GenRMGam.c gamut/gamut.c numlib/libnum.a numlib/libui.a xicc/libxicc.a cgats/libcgats.a icc/libicc.a plot/libplot.a plot/libvrml.a yajl/libyajl.a ccast/libccast.a ccast/axTLS/libaxtls.a tiff/libtiff.a jpeg/libjpeg.a png/libpng.a zlib/libz.a spectro/libconv.a -I. -Igamut -Inumlib -Ixicc -Icgats -Iicc -Iplot -Iyajl -Iccast -Itiff -Ijpeg -Ipng -Izlib -framework Carbon -framework Cocoa -framework IOKit -framework CoreFoundation -framework AppKit -framework AudioToolbox -lm -lpthread || true + cc -g -O0 -o gamut/GenRMGam_debug gamut/GenRMGam.c gamut/gamut.c gamut/libgamut.a rspl/librspl.a numlib/libnum.a numlib/libui.a xicc/libxicc.a cgats/libcgats.a icc/libicc.a plot/libplot.a plot/libvrml.a yajl/libyajl.a ccast/libccast.a ccast/axTLS/libaxtls.a tiff/libtiff.a jpeg/libjpeg.a png/libpng.a zlib/libz.a spectro/libconv.a -I. -Igamut -Irspl -Inumlib -Ixicc -Icgats -Iicc -Iplot -Iyajl -Iccast -Itiff -Ijpeg -Ipng -Izlib -framework Carbon -framework Cocoa -framework IOKit -framework CoreFoundation -framework AppKit -framework AudioToolbox -lm -lpthread || true echo "Running under lldb..." lldb -b -o "run gamut/RefMediumGamut.gam" -o "bt all" -o "quit" -- gamut/GenRMGam_debug || true -- 2.39.5 From a58008e40af49bac98b4b7953fe8746a255b63a5 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sun, 23 Aug 2026 07:50:24 +0100 Subject: [PATCH 25/34] Fix missing include directory in debug build --- .github/workflows/build-macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 5ad823c..6d85575 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -60,7 +60,7 @@ jobs: if: matrix.arch == 'arm64' run: | echo "Compiling GenRMGam with debug symbols..." - cc -g -O0 -o gamut/GenRMGam_debug gamut/GenRMGam.c gamut/gamut.c gamut/libgamut.a rspl/librspl.a numlib/libnum.a numlib/libui.a xicc/libxicc.a cgats/libcgats.a icc/libicc.a plot/libplot.a plot/libvrml.a yajl/libyajl.a ccast/libccast.a ccast/axTLS/libaxtls.a tiff/libtiff.a jpeg/libjpeg.a png/libpng.a zlib/libz.a spectro/libconv.a -I. -Igamut -Irspl -Inumlib -Ixicc -Icgats -Iicc -Iplot -Iyajl -Iccast -Itiff -Ijpeg -Ipng -Izlib -framework Carbon -framework Cocoa -framework IOKit -framework CoreFoundation -framework AppKit -framework AudioToolbox -lm -lpthread || true + cc -g -O0 -o gamut/GenRMGam_debug gamut/GenRMGam.c gamut/gamut.c gamut/libgamut.a rspl/librspl.a numlib/libnum.a numlib/libui.a xicc/libxicc.a cgats/libcgats.a icc/libicc.a plot/libplot.a plot/libvrml.a yajl/libyajl.a ccast/libccast.a ccast/axTLS/libaxtls.a tiff/libtiff.a jpeg/libjpeg.a png/libpng.a zlib/libz.a spectro/libconv.a -Ih -I. -Igamut -Irspl -Inumlib -Ixicc -Icgats -Iicc -Iplot -Iyajl -Iccast -Itiff -Ijpeg -Ipng -Izlib -framework Carbon -framework Cocoa -framework IOKit -framework CoreFoundation -framework AppKit -framework AudioToolbox -lm -lpthread || true echo "Running under lldb..." lldb -b -o "run gamut/RefMediumGamut.gam" -o "bt all" -o "quit" -- gamut/GenRMGam_debug || true -- 2.39.5 From 5ed13ae37280dc1eeaf48f07e56930f2f6a95ce2 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sun, 23 Aug 2026 07:53:49 +0100 Subject: [PATCH 26/34] Fix missing spectro include directory in debug build --- .github/workflows/build-macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 6d85575..b93737e 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -60,7 +60,7 @@ jobs: if: matrix.arch == 'arm64' run: | echo "Compiling GenRMGam with debug symbols..." - cc -g -O0 -o gamut/GenRMGam_debug gamut/GenRMGam.c gamut/gamut.c gamut/libgamut.a rspl/librspl.a numlib/libnum.a numlib/libui.a xicc/libxicc.a cgats/libcgats.a icc/libicc.a plot/libplot.a plot/libvrml.a yajl/libyajl.a ccast/libccast.a ccast/axTLS/libaxtls.a tiff/libtiff.a jpeg/libjpeg.a png/libpng.a zlib/libz.a spectro/libconv.a -Ih -I. -Igamut -Irspl -Inumlib -Ixicc -Icgats -Iicc -Iplot -Iyajl -Iccast -Itiff -Ijpeg -Ipng -Izlib -framework Carbon -framework Cocoa -framework IOKit -framework CoreFoundation -framework AppKit -framework AudioToolbox -lm -lpthread || true + cc -g -O0 -o gamut/GenRMGam_debug gamut/GenRMGam.c gamut/gamut.c gamut/libgamut.a rspl/librspl.a numlib/libnum.a numlib/libui.a xicc/libxicc.a cgats/libcgats.a icc/libicc.a plot/libplot.a plot/libvrml.a yajl/libyajl.a ccast/libccast.a ccast/axTLS/libaxtls.a tiff/libtiff.a jpeg/libjpeg.a png/libpng.a zlib/libz.a spectro/libconv.a -Ih -I. -Igamut -Irspl -Inumlib -Ixicc -Icgats -Iicc -Iplot -Iyajl -Iccast -Itiff -Ijpeg -Ipng -Izlib -Ispectro -framework Carbon -framework Cocoa -framework IOKit -framework CoreFoundation -framework AppKit -framework AudioToolbox -lm -lpthread || true echo "Running under lldb..." lldb -b -o "run gamut/RefMediumGamut.gam" -o "bt all" -o "quit" -- gamut/GenRMGam_debug || true -- 2.39.5 From 7f73dfef85149d93cae6b43fa326fcfc4d41491b Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sun, 23 Aug 2026 07:58:21 +0100 Subject: [PATCH 27/34] Define UNIX and APPLE in debug build --- .github/workflows/build-macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index b93737e..2bea6b9 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -60,7 +60,7 @@ jobs: if: matrix.arch == 'arm64' run: | echo "Compiling GenRMGam with debug symbols..." - cc -g -O0 -o gamut/GenRMGam_debug gamut/GenRMGam.c gamut/gamut.c gamut/libgamut.a rspl/librspl.a numlib/libnum.a numlib/libui.a xicc/libxicc.a cgats/libcgats.a icc/libicc.a plot/libplot.a plot/libvrml.a yajl/libyajl.a ccast/libccast.a ccast/axTLS/libaxtls.a tiff/libtiff.a jpeg/libjpeg.a png/libpng.a zlib/libz.a spectro/libconv.a -Ih -I. -Igamut -Irspl -Inumlib -Ixicc -Icgats -Iicc -Iplot -Iyajl -Iccast -Itiff -Ijpeg -Ipng -Izlib -Ispectro -framework Carbon -framework Cocoa -framework IOKit -framework CoreFoundation -framework AppKit -framework AudioToolbox -lm -lpthread || true + cc -g -O0 -DUNIX -DAPPLE -o gamut/GenRMGam_debug gamut/GenRMGam.c gamut/gamut.c gamut/libgamut.a rspl/librspl.a numlib/libnum.a numlib/libui.a xicc/libxicc.a cgats/libcgats.a icc/libicc.a plot/libplot.a plot/libvrml.a yajl/libyajl.a ccast/libccast.a ccast/axTLS/libaxtls.a tiff/libtiff.a jpeg/libjpeg.a png/libpng.a zlib/libz.a spectro/libconv.a -Ih -I. -Igamut -Irspl -Inumlib -Ixicc -Icgats -Iicc -Iplot -Iyajl -Iccast -Itiff -Ijpeg -Ipng -Izlib -Ispectro -framework Carbon -framework Cocoa -framework IOKit -framework CoreFoundation -framework AppKit -framework AudioToolbox -lm -lpthread || true echo "Running under lldb..." lldb -b -o "run gamut/RefMediumGamut.gam" -o "bt all" -o "quit" -- gamut/GenRMGam_debug || true -- 2.39.5 From c62f3cba8a6523f415c05416127cfe1912402973 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sun, 23 Aug 2026 08:03:24 +0100 Subject: [PATCH 28/34] Run jam GenFile1 under lldb to capture actual crash --- .github/workflows/build-macos.yml | 10 +--------- gamut/Jamfile | 5 +++++ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 2bea6b9..6ff55cf 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -44,7 +44,7 @@ jobs: export MACHTYPE=${{ matrix.machtype }} export HOSTTYPE=${{ matrix.arch }} export CCOPTFLAG="-O0" - jam -q -fJambase -j1 -sBUILTIN_TIFF=true -sBUILTIN_JPEG=true -sBUILTIN_PNG=true -sBUILTIN_Z=true -sBUILTIN_SSL=true install + jam -q -d2 -fJambase -j1 -sBUILTIN_TIFF=true -sBUILTIN_JPEG=true -sBUILTIN_PNG=true -sBUILTIN_Z=true -sBUILTIN_SSL=true install - name: Smoke Tests env: @@ -56,14 +56,6 @@ jobs: ./bin/colprof -? || true ./bin/targen -? || true - - name: Debug GenRMGam Crash on ARM64 - if: matrix.arch == 'arm64' - run: | - echo "Compiling GenRMGam with debug symbols..." - cc -g -O0 -DUNIX -DAPPLE -o gamut/GenRMGam_debug gamut/GenRMGam.c gamut/gamut.c gamut/libgamut.a rspl/librspl.a numlib/libnum.a numlib/libui.a xicc/libxicc.a cgats/libcgats.a icc/libicc.a plot/libplot.a plot/libvrml.a yajl/libyajl.a ccast/libccast.a ccast/axTLS/libaxtls.a tiff/libtiff.a jpeg/libjpeg.a png/libpng.a zlib/libz.a spectro/libconv.a -Ih -I. -Igamut -Irspl -Inumlib -Ixicc -Icgats -Iicc -Iplot -Iyajl -Iccast -Itiff -Ijpeg -Ipng -Izlib -Ispectro -framework Carbon -framework Cocoa -framework IOKit -framework CoreFoundation -framework AppKit -framework AudioToolbox -lm -lpthread || true - echo "Running under lldb..." - lldb -b -o "run gamut/RefMediumGamut.gam" -o "bt all" -o "quit" -- gamut/GenRMGam_debug || true - - name: Package Release run: | export OSTYPE=darwin diff --git a/gamut/Jamfile b/gamut/Jamfile index 89eed3b..c2347a6 100755 --- a/gamut/Jamfile +++ b/gamut/Jamfile @@ -46,6 +46,11 @@ Main GenRMGam : GenRMGam.c ; # Generate reference medium gamut # (NoUpdate so that Cross Compile Win64 hack works) +actions GenFile1 bind _a +{ + lldb -b -o "run $(_a) $(<)" -o "bt all" -o "quit" -- $(TARGETINFO_LOC)$(PATH)$(_s[1]) +} + NNoUpdate RefMediumGamut.gam ; GenFile RefMediumGamut.gam : GenRMGam ; -- 2.39.5 From 9d43f4de2d7b5b7b40a966cc51e8511acc4058fc Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sun, 23 Aug 2026 08:09:45 +0100 Subject: [PATCH 29/34] Fix lldb GenFile1 action args --- gamut/Jamfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gamut/Jamfile b/gamut/Jamfile index c2347a6..8e29d95 100755 --- a/gamut/Jamfile +++ b/gamut/Jamfile @@ -46,9 +46,9 @@ Main GenRMGam : GenRMGam.c ; # Generate reference medium gamut # (NoUpdate so that Cross Compile Win64 hack works) -actions GenFile1 bind _a +actions GenFile1 { - lldb -b -o "run $(_a) $(<)" -o "bt all" -o "quit" -- $(TARGETINFO_LOC)$(PATH)$(_s[1]) + lldb -b -o "run $(<) $(>[2-])" -o "bt all" -o "quit" -- $(>[1]) } NNoUpdate RefMediumGamut.gam ; -- 2.39.5 From 55471fb1cfa88d351bb89fc97775345402ddd28b Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sun, 23 Aug 2026 08:15:40 +0100 Subject: [PATCH 30/34] Fix syntax error and restrict lldb to macOS --- gamut/Jamfile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/gamut/Jamfile b/gamut/Jamfile index 8e29d95..e11a745 100755 --- a/gamut/Jamfile +++ b/gamut/Jamfile @@ -46,9 +46,11 @@ Main GenRMGam : GenRMGam.c ; # Generate reference medium gamut # (NoUpdate so that Cross Compile Win64 hack works) -actions GenFile1 -{ - lldb -b -o "run $(<) $(>[2-])" -o "bt all" -o "quit" -- $(>[1]) +if $(OS) = MACOSX { + actions GenFile1 + { + lldb -b -o 'run $(<) $(>[2-])' -o 'bt all' -o 'quit' -- $(>[1]) + } } NNoUpdate RefMediumGamut.gam ; -- 2.39.5 From 60969b40bd8195895c61bf312c54743ebbbbcee5 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sun, 23 Aug 2026 08:28:14 +0100 Subject: [PATCH 31/34] Fix Jam dropping quotes from empty list variables --- gamut/Jamfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gamut/Jamfile b/gamut/Jamfile index e11a745..cafc0f5 100755 --- a/gamut/Jamfile +++ b/gamut/Jamfile @@ -49,7 +49,7 @@ Main GenRMGam : GenRMGam.c ; if $(OS) = MACOSX { actions GenFile1 { - lldb -b -o 'run $(<) $(>[2-])' -o 'bt all' -o 'quit' -- $(>[1]) + lldb -b -o "run $(<)" -o "bt all" -o "quit" -- $(>[1]) } } -- 2.39.5 From 2a993d9e23c6a1dc163ac14cdb2d2e1d8f1917e6 Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sun, 23 Aug 2026 08:32:40 +0100 Subject: [PATCH 32/34] Fix strict aliasing in gamut.c --- gamut/gamut.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/gamut/gamut.c b/gamut/gamut.c index 832e394..40b9711 100644 --- a/gamut/gamut.c +++ b/gamut/gamut.c @@ -3980,12 +3980,14 @@ double *nin /* Normalised center relative point */ return NULL; /* Hmm */ } else { /* It's a triangle or list of triangles */ - int nt; /* Number of triangles in list */ - gtri **tpp; /* Pointer to list of triangles */ + int nt = 0; /* Number of triangles in list */ + gtri **tpp = NULL; /* Pointer to list of triangles */ + gtri *t_single; int i, j; if (np->tag == 2) { /* It's a triangle */ - tpp = (gtri **)&np; + t_single = (gtri *)np; + tpp = &t_single; nt = 1; } else if (np->tag == 3) { /* It's a triangle list */ gbspl *n = (gbspl *)np; @@ -5222,13 +5224,15 @@ int *lu /* Number used in list */ return; /* It's a list of triangles */ - } else { - int nt; /* Number of triangles in list */ - gtri **tpp; /* Pointer to list of triangles */ + } else { /* It's a triangle or list of triangles */ + int nt = 0; /* Number of triangles in list */ + gtri **tpp = NULL; /* Pointer to list of triangles */ + gtri *t_single; int i, j; if (np->tag == 2) { /* It's a triangle */ - tpp = (gtri **)&np; + t_single = (gtri *)np; + tpp = &t_single; nt = 1; } else if (np->tag == 3) { /* It's a triangle list */ gbspl *n = (gbspl *)np; -- 2.39.5 From 8c0ebb18724bf7378ac98f25311468755937991a Mon Sep 17 00:00:00 2001 From: Gandalf Date: Sun, 23 Aug 2026 08:32:58 +0100 Subject: [PATCH 33/34] Restore Jamfile --- gamut/Jamfile | 7 ------- 1 file changed, 7 deletions(-) diff --git a/gamut/Jamfile b/gamut/Jamfile index cafc0f5..89eed3b 100755 --- a/gamut/Jamfile +++ b/gamut/Jamfile @@ -46,13 +46,6 @@ Main GenRMGam : GenRMGam.c ; # Generate reference medium gamut # (NoUpdate so that Cross Compile Win64 hack works) -if $(OS) = MACOSX { - actions GenFile1 - { - lldb -b -o "run $(<)" -o "bt all" -o "quit" -- $(>[1]) - } -} - NNoUpdate RefMediumGamut.gam ; GenFile RefMediumGamut.gam : GenRMGam ; -- 2.39.5 From 249dc9dac25f1c4909a2bff89af421c7a707eff3 Mon Sep 17 00:00:00 2001 From: gronod <1+gronod@noreply@i3omb.com> Date: Tue, 25 Aug 2026 22:53:57 +0100 Subject: [PATCH 34/34] Update .github/workflows/build-macos.yml Update action runner to macos-15 / macos-15-intel --- .github/workflows/build-macos.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 6ff55cf..fde3cf0 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -16,11 +16,11 @@ jobs: strategy: matrix: include: - - os: macos-13 + - os: macos-15-intel arch: x86_64 machtype: x86_64-apple-darwin artifact: osx10.6_x86_64_bin - - os: macos-latest + - os: macos-15 arch: arm64 machtype: arm64-apple-darwin artifact: macOS_arm64_bin -- 2.39.5