From ef7d26ba2cd52a5295620067ab9abd9c0055a558 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Thu, 14 Aug 2025 15:03:57 -0700 Subject: [PATCH 01/45] convert: skip reading into memory when possible (#11507) if there's no transformation to the tensor and the input and output types match, copy directly into the writer. also read from a bufio with a 32K buffer --- convert/reader_safetensors.go | 39 ++++-- convert/reader_test.go | 232 ++++++++++++++++++++++++++++++++++ 2 files changed, 258 insertions(+), 13 deletions(-) create mode 100644 convert/reader_test.go diff --git a/convert/reader_safetensors.go b/convert/reader_safetensors.go index 63f31631d..ccc596732 100644 --- a/convert/reader_safetensors.go +++ b/convert/reader_safetensors.go @@ -1,6 +1,7 @@ package convert import ( + "bufio" "bytes" "encoding/binary" "encoding/json" @@ -124,26 +125,41 @@ func (st safetensor) WriteTo(w io.Writer) (int64, error) { } defer f.Close() - if seeker, ok := f.(io.Seeker); ok { - if _, err := seeker.Seek(st.offset, io.SeekStart); err != nil { - return 0, err - } - } else { - if _, err := io.CopyN(io.Discard, f, st.offset); err != nil { - return 0, err + r, err := func() (io.Reader, error) { + if readerAt, ok := f.(io.ReaderAt); ok { + return io.NewSectionReader(readerAt, st.offset, st.size), nil + } else if seeker, ok := f.(io.Seeker); ok { + _, err := seeker.Seek(st.offset, io.SeekStart) + return f, err + } else { + _, err := io.CopyN(io.Discard, f, st.offset) + return f, err } + }() + if err != nil { + return 0, err + } + + br := bufio.NewReaderSize(r, min(32<<10, int(st.size))) + // special case when input and output are same type and the + // tensor doesn't need repacking + if (st.repacker == nil) && + ((st.dtype == "F32" && st.Kind() == tensorKindFP32) || + (st.dtype == "F16" && st.Kind() == tensorKindFP16) || + (st.dtype == "U8")) { + return io.CopyN(w, br, st.size) } var f32s []float32 switch st.dtype { case "F32": f32s = make([]float32, st.size/4) - if err = binary.Read(f, binary.LittleEndian, f32s); err != nil { + if err = binary.Read(br, binary.LittleEndian, f32s); err != nil { return 0, err } case "F16": u16s := make([]uint16, st.size/2) - if err = binary.Read(f, binary.LittleEndian, u16s); err != nil { + if err = binary.Read(br, binary.LittleEndian, u16s); err != nil { return 0, err } @@ -154,14 +170,11 @@ func (st safetensor) WriteTo(w io.Writer) (int64, error) { case "BF16": u8s := make([]uint8, st.size) - if err = binary.Read(f, binary.LittleEndian, u8s); err != nil { + if err = binary.Read(br, binary.LittleEndian, u8s); err != nil { return 0, err } f32s = bfloat16.DecodeFloat32(u8s) - case "U8": - // U8 tensors do not support repacking or type conversion. - return io.CopyN(w, f, st.size) default: return 0, fmt.Errorf("unknown data type: %s", st.dtype) } diff --git a/convert/reader_test.go b/convert/reader_test.go new file mode 100644 index 000000000..6dbe32a51 --- /dev/null +++ b/convert/reader_test.go @@ -0,0 +1,232 @@ +package convert + +import ( + "bytes" + "encoding/binary" + "os" + "path/filepath" + "testing" + + "github.com/d4l3k/go-bfloat16" + "github.com/google/go-cmp/cmp" + "github.com/x448/float16" +) + +func TestSafetensors(t *testing.T) { + t.Parallel() + + root, err := os.OpenRoot(t.TempDir()) + if err != nil { + t.Fatal(err) + } + defer root.Close() + + cases := []struct { + name, + dtype string + offset, + size int64 + shape []uint64 + setup func(*testing.T, *os.File) + want []byte + }{ + { + name: "fp32-fp32", + dtype: "F32", + size: 32 * 4, // 32 floats, each 4 bytes + shape: []uint64{32}, + setup: func(t *testing.T, f *os.File) { + f32s := make([]float32, 32) + for i := range f32s { + f32s[i] = float32(i) + } + + if err := binary.Write(f, binary.LittleEndian, f32s); err != nil { + t.Fatal(err) + } + }, + want: []byte{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x40, + 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0xa0, 0x40, 0x00, 0x00, 0xc0, 0x40, 0x00, 0x00, 0xe0, 0x40, + 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x10, 0x41, 0x00, 0x00, 0x20, 0x41, 0x00, 0x00, 0x30, 0x41, + 0x00, 0x00, 0x40, 0x41, 0x00, 0x00, 0x50, 0x41, 0x00, 0x00, 0x60, 0x41, 0x00, 0x00, 0x70, 0x41, + 0x00, 0x00, 0x80, 0x41, 0x00, 0x00, 0x88, 0x41, 0x00, 0x00, 0x90, 0x41, 0x00, 0x00, 0x98, 0x41, + 0x00, 0x00, 0xa0, 0x41, 0x00, 0x00, 0xa8, 0x41, 0x00, 0x00, 0xb0, 0x41, 0x00, 0x00, 0xb8, 0x41, + 0x00, 0x00, 0xc0, 0x41, 0x00, 0x00, 0xc8, 0x41, 0x00, 0x00, 0xd0, 0x41, 0x00, 0x00, 0xd8, 0x41, + 0x00, 0x00, 0xe0, 0x41, 0x00, 0x00, 0xe8, 0x41, 0x00, 0x00, 0xf0, 0x41, 0x00, 0x00, 0xf8, 0x41, + }, + }, + { + name: "fp32-fp16", + dtype: "F32", + size: 32 * 4, // 32 floats, each 4 bytes + shape: []uint64{16, 2}, + setup: func(t *testing.T, f *os.File) { + f32s := make([]float32, 32) + for i := range f32s { + f32s[i] = float32(i) + } + + if err := binary.Write(f, binary.LittleEndian, f32s); err != nil { + t.Fatal(err) + } + }, + want: []byte{ + 0x00, 0x00, 0x00, 0x3c, 0x00, 0x40, 0x00, 0x42, 0x00, 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, 0x47, + 0x00, 0x48, 0x80, 0x48, 0x00, 0x49, 0x80, 0x49, 0x00, 0x4a, 0x80, 0x4a, 0x00, 0x4b, 0x80, 0x4b, + 0x00, 0x4c, 0x40, 0x4c, 0x80, 0x4c, 0xc0, 0x4c, 0x00, 0x4d, 0x40, 0x4d, 0x80, 0x4d, 0xc0, 0x4d, + 0x00, 0x4e, 0x40, 0x4e, 0x80, 0x4e, 0xc0, 0x4e, 0x00, 0x4f, 0x40, 0x4f, 0x80, 0x4f, 0xc0, 0x4f, + }, + }, + { + name: "fp16-fp16", + dtype: "F16", + size: 32 * 2, // 32 floats, each 2 bytes + shape: []uint64{16, 2}, + setup: func(t *testing.T, f *os.File) { + u16s := make([]uint16, 32) + for i := range u16s { + u16s[i] = float16.Fromfloat32(float32(i)).Bits() + } + + if err := binary.Write(f, binary.LittleEndian, u16s); err != nil { + t.Fatal(err) + } + }, + want: []byte{ + 0x00, 0x00, 0x00, 0x3c, 0x00, 0x40, 0x00, 0x42, 0x00, 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, 0x47, + 0x00, 0x48, 0x80, 0x48, 0x00, 0x49, 0x80, 0x49, 0x00, 0x4a, 0x80, 0x4a, 0x00, 0x4b, 0x80, 0x4b, + 0x00, 0x4c, 0x40, 0x4c, 0x80, 0x4c, 0xc0, 0x4c, 0x00, 0x4d, 0x40, 0x4d, 0x80, 0x4d, 0xc0, 0x4d, + 0x00, 0x4e, 0x40, 0x4e, 0x80, 0x4e, 0xc0, 0x4e, 0x00, 0x4f, 0x40, 0x4f, 0x80, 0x4f, 0xc0, 0x4f, + }, + }, + { + name: "fp16-fp32", + dtype: "F16", + size: 32 * 2, // 32 floats, each 2 bytes + shape: []uint64{32}, + setup: func(t *testing.T, f *os.File) { + u16s := make([]uint16, 32) + for i := range u16s { + u16s[i] = float16.Fromfloat32(float32(i)).Bits() + } + + if err := binary.Write(f, binary.LittleEndian, u16s); err != nil { + t.Fatal(err) + } + }, + want: []byte{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x40, + 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0xa0, 0x40, 0x00, 0x00, 0xc0, 0x40, 0x00, 0x00, 0xe0, 0x40, + 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x10, 0x41, 0x00, 0x00, 0x20, 0x41, 0x00, 0x00, 0x30, 0x41, + 0x00, 0x00, 0x40, 0x41, 0x00, 0x00, 0x50, 0x41, 0x00, 0x00, 0x60, 0x41, 0x00, 0x00, 0x70, 0x41, + 0x00, 0x00, 0x80, 0x41, 0x00, 0x00, 0x88, 0x41, 0x00, 0x00, 0x90, 0x41, 0x00, 0x00, 0x98, 0x41, + 0x00, 0x00, 0xa0, 0x41, 0x00, 0x00, 0xa8, 0x41, 0x00, 0x00, 0xb0, 0x41, 0x00, 0x00, 0xb8, 0x41, + 0x00, 0x00, 0xc0, 0x41, 0x00, 0x00, 0xc8, 0x41, 0x00, 0x00, 0xd0, 0x41, 0x00, 0x00, 0xd8, 0x41, + 0x00, 0x00, 0xe0, 0x41, 0x00, 0x00, 0xe8, 0x41, 0x00, 0x00, 0xf0, 0x41, 0x00, 0x00, 0xf8, 0x41, + }, + }, + { + name: "bf16-bf16", + dtype: "BF16", + size: 32 * 2, // 32 brain floats, each 2 bytes + shape: []uint64{16, 2}, + setup: func(t *testing.T, f *os.File) { + f32s := make([]float32, 32) + for i := range f32s { + f32s[i] = float32(i) + } + + if err := binary.Write(f, binary.LittleEndian, bfloat16.EncodeFloat32(f32s)); err != nil { + t.Fatal(err) + } + }, + want: []byte{ + 0x00, 0x00, 0x80, 0x3f, 0x00, 0x40, 0x40, 0x40, 0x80, 0x40, 0xa0, 0x40, 0xc0, 0x40, 0xe0, 0x40, + 0x00, 0x41, 0x10, 0x41, 0x20, 0x41, 0x30, 0x41, 0x40, 0x41, 0x50, 0x41, 0x60, 0x41, 0x70, 0x41, + 0x80, 0x41, 0x88, 0x41, 0x90, 0x41, 0x98, 0x41, 0xa0, 0x41, 0xa8, 0x41, 0xb0, 0x41, 0xb8, 0x41, + 0xc0, 0x41, 0xc8, 0x41, 0xd0, 0x41, 0xd8, 0x41, 0xe0, 0x41, 0xe8, 0x41, 0xf0, 0x41, 0xf8, 0x41, + }, + }, + { + name: "bf16-fp32", + dtype: "BF16", + size: 32 * 2, // 32 brain floats, each 2 bytes + shape: []uint64{32}, + setup: func(t *testing.T, f *os.File) { + f32s := make([]float32, 32) + for i := range f32s { + f32s[i] = float32(i) + } + + if err := binary.Write(f, binary.LittleEndian, bfloat16.EncodeFloat32(f32s)); err != nil { + t.Fatal(err) + } + }, + want: []byte{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x40, + 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0xa0, 0x40, 0x00, 0x00, 0xc0, 0x40, 0x00, 0x00, 0xe0, 0x40, + 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x10, 0x41, 0x00, 0x00, 0x20, 0x41, 0x00, 0x00, 0x30, 0x41, + 0x00, 0x00, 0x40, 0x41, 0x00, 0x00, 0x50, 0x41, 0x00, 0x00, 0x60, 0x41, 0x00, 0x00, 0x70, 0x41, + 0x00, 0x00, 0x80, 0x41, 0x00, 0x00, 0x88, 0x41, 0x00, 0x00, 0x90, 0x41, 0x00, 0x00, 0x98, 0x41, + 0x00, 0x00, 0xa0, 0x41, 0x00, 0x00, 0xa8, 0x41, 0x00, 0x00, 0xb0, 0x41, 0x00, 0x00, 0xb8, 0x41, + 0x00, 0x00, 0xc0, 0x41, 0x00, 0x00, 0xc8, 0x41, 0x00, 0x00, 0xd0, 0x41, 0x00, 0x00, 0xd8, 0x41, + 0x00, 0x00, 0xe0, 0x41, 0x00, 0x00, 0xe8, 0x41, 0x00, 0x00, 0xf0, 0x41, 0x00, 0x00, 0xf8, 0x41, + }, + }, + { + name: "u8-u8", + dtype: "U8", + size: 32, // 32 brain floats, each 1 bytes + shape: []uint64{32}, + setup: func(t *testing.T, f *os.File) { + u8s := make([]uint8, 32) + for i := range u8s { + u8s[i] = uint8(i) + } + + if err := binary.Write(f, binary.LittleEndian, u8s); err != nil { + t.Fatal(err) + } + }, + want: []byte{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + }, + }, + } + + for _, tt := range cases { + t.Run(tt.name, func(t *testing.T) { + path := filepath.Base(t.Name()) + st := safetensor{ + fs: root.FS(), + path: path, + dtype: tt.dtype, + offset: tt.offset, + size: tt.size, + tensorBase: &tensorBase{ + name: tt.name, + shape: tt.shape, + }, + } + + f, err := root.Create(path) + if err != nil { + t.Fatal(err) + } + defer f.Close() + + tt.setup(t, f) + + var b bytes.Buffer + if _, err := st.WriteTo(&b); err != nil { + t.Fatal(err) + } + + if diff := cmp.Diff(tt.want, b.Bytes()); diff != "" { + t.Errorf("safetensor.WriteTo() mismatch (-want +got):\n%s", diff) + } + }) + } +} From d5a0d8d904baaf66a5326463a409fe4fa09b2dd2 Mon Sep 17 00:00:00 2001 From: Jesse Gross Date: Thu, 29 May 2025 12:21:48 -0700 Subject: [PATCH 02/45] llm: New memory management This changes the memory allocation strategy from upfront estimation to tracking actual allocations done by the engine and reacting to that. The goal is avoid issues caused by both under-estimation (crashing) and over-estimation (low performance due to under-utilized GPUs). It is currently opt-in and can be enabled for models running on the Ollama engine by setting OLLAMA_NEW_ESTIMATES=1. Behavior in other cases is unchanged and will continue to use the existing estimates. --- discover/amd_linux.go | 65 +- envconfig/config.go | 3 + fs/ggml/ggml.go | 2 + llama/llama.go | 16 + ... 0016-add-C-API-for-mtmd_input_text.patch} | 0 ...rary-prevent-rocm-cuda-mixed-loading.patch | 32 - ...no-power-throttling-win32-with-gnuc.patch} | 0 ...ch => 0018-BF16-macos-version-guard.patch} | 0 ...0019-Enable-CUDA-Graphs-for-gemma3n.patch} | 0 ...le-ggml-blas-on-macos-v13-and-older.patch} | 0 ...fix-mtmd-audio.cpp-build-on-windows.patch} | 0 ...de.patch => 0022-ggml-No-alloc-mode.patch} | 0 llm/memory.go | 94 +- llm/memory_test.go | 10 +- llm/server.go | 1049 ++++++++++++++--- llm/server_test.go | 169 +++ ml/backend.go | 162 ++- ml/backend/ggml/ggml.go | 226 ++-- ml/backend/ggml/ggml/src/ggml-backend-reg.cpp | 12 +- runner/llamarunner/runner.go | 146 ++- runner/ollamarunner/runner.go | 215 ++-- server/routes.go | 6 +- server/routes_generate_test.go | 6 +- server/routes_harmony_streaming_test.go | 9 +- server/sched.go | 369 ++---- server/sched_test.go | 169 +-- 26 files changed, 1860 insertions(+), 900 deletions(-) rename llama/patches/{0017-add-C-API-for-mtmd_input_text.patch => 0016-add-C-API-for-mtmd_input_text.patch} (100%) delete mode 100644 llama/patches/0016-temporary-prevent-rocm-cuda-mixed-loading.patch rename llama/patches/{0018-no-power-throttling-win32-with-gnuc.patch => 0017-no-power-throttling-win32-with-gnuc.patch} (100%) rename llama/patches/{0019-BF16-macos-version-guard.patch => 0018-BF16-macos-version-guard.patch} (100%) rename llama/patches/{0020-Enable-CUDA-Graphs-for-gemma3n.patch => 0019-Enable-CUDA-Graphs-for-gemma3n.patch} (100%) rename llama/patches/{0021-Disable-ggml-blas-on-macos-v13-and-older.patch => 0020-Disable-ggml-blas-on-macos-v13-and-older.patch} (100%) rename llama/patches/{0022-fix-mtmd-audio.cpp-build-on-windows.patch => 0021-fix-mtmd-audio.cpp-build-on-windows.patch} (100%) rename llama/patches/{0023-ggml-No-alloc-mode.patch => 0022-ggml-No-alloc-mode.patch} (100%) diff --git a/discover/amd_linux.go b/discover/amd_linux.go index dc9a4e185..ebffbdf66 100644 --- a/discover/amd_linux.go +++ b/discover/amd_linux.go @@ -97,6 +97,7 @@ func AMDGetGPUInfo() ([]RocmGPUInfo, error) { return a < b }) gpuCount := 0 + gpuOrdinalID := 0 for _, match := range matches { slog.Debug("evaluating amdgpu node " + match) fp, err := os.Open(match) @@ -187,10 +188,6 @@ func AMDGetGPUInfo() ([]RocmGPUInfo, error) { continue } - // Keep track of numeric IDs based on valid GPUs - gpuID := gpuCount - gpuCount += 1 - // Look up the memory for the current node totalMemory := uint64(0) usedMemory := uint64(0) @@ -269,7 +266,7 @@ func AMDGetGPUInfo() ([]RocmGPUInfo, error) { if uniqueID != 0 { ID = fmt.Sprintf("GPU-%016x", uniqueID) } else { - ID = strconv.Itoa(gpuID) + ID = strconv.Itoa(gpuOrdinalID) } gpuInfo := RocmGPUInfo{ @@ -287,13 +284,40 @@ func AMDGetGPUInfo() ([]RocmGPUInfo, error) { DriverMinor: driverMinor, }, usedFilepath: usedFile, - index: gpuID, + index: gpuCount, } + // Keep track of numeric IDs based on valid GPUs + gpuCount += 1 + + // If the user wants to filter to a subset of devices, filter out if we aren't a match + if len(visibleDevices) > 0 { + include := false + for _, visible := range visibleDevices { + if (uniqueID != 0 && visible == gpuInfo.ID) || visible == strconv.Itoa(gpuInfo.index) { + include = true + break + } + } + if !include { + reason := "filtering out device per user request" + slog.Info(reason, "id", gpuInfo.ID, "index", gpuInfo.index, "visible_devices", visibleDevices) + unsupportedGPUs = append(unsupportedGPUs, UnsupportedGPUInfo{ + GpuInfo: gpuInfo.GpuInfo, + Reason: reason, + }) + + continue + } + } + + // Ordinal IDs are based on the visible GPUs + gpuOrdinalID += 1 + // iGPU detection, remove this check once we can support an iGPU variant of the rocm library if totalMemory < IGPUMemLimit { reason := "unsupported Radeon iGPU detected skipping" - slog.Info(reason, "id", gpuID, "total", format.HumanBytes2(totalMemory)) + slog.Info(reason, "id", gpuInfo.ID, "total", format.HumanBytes2(totalMemory)) unsupportedGPUs = append(unsupportedGPUs, UnsupportedGPUInfo{ GpuInfo: gpuInfo.GpuInfo, Reason: reason, @@ -306,7 +330,7 @@ func AMDGetGPUInfo() ([]RocmGPUInfo, error) { } if int(major) < minVer { reason := fmt.Sprintf("amdgpu too old gfx%d%x%x", major, minor, patch) - slog.Warn(reason, "gpu", gpuID) + slog.Warn(reason, "gpu", gpuInfo.ID) unsupportedGPUs = append(unsupportedGPUs, UnsupportedGPUInfo{ GpuInfo: gpuInfo.GpuInfo, Reason: reason, @@ -315,29 +339,8 @@ func AMDGetGPUInfo() ([]RocmGPUInfo, error) { continue } - slog.Debug("amdgpu memory", "gpu", gpuID, "total", format.HumanBytes2(totalMemory)) - slog.Debug("amdgpu memory", "gpu", gpuID, "available", format.HumanBytes2(totalMemory-usedMemory)) - - // If the user wants to filter to a subset of devices, filter out if we aren't a match - if len(visibleDevices) > 0 { - include := false - for _, visible := range visibleDevices { - if visible == gpuInfo.ID || visible == strconv.Itoa(gpuInfo.index) { - include = true - break - } - } - if !include { - reason := "filtering out device per user request" - slog.Info(reason, "id", gpuInfo.ID, "visible_devices", visibleDevices) - unsupportedGPUs = append(unsupportedGPUs, UnsupportedGPUInfo{ - GpuInfo: gpuInfo.GpuInfo, - Reason: reason, - }) - - continue - } - } + slog.Debug("amdgpu memory", "gpu", gpuInfo.ID, "total", format.HumanBytes2(totalMemory)) + slog.Debug("amdgpu memory", "gpu", gpuInfo.ID, "available", format.HumanBytes2(totalMemory-usedMemory)) // Final validation is gfx compatibility - load the library if we haven't already loaded it // even if the user overrides, we still need to validate the library diff --git a/envconfig/config.go b/envconfig/config.go index 7fc018870..868813ae8 100644 --- a/envconfig/config.go +++ b/envconfig/config.go @@ -185,6 +185,8 @@ var ( ContextLength = Uint("OLLAMA_CONTEXT_LENGTH", 4096) // Auth enables authentication between the Ollama client and server UseAuth = Bool("OLLAMA_AUTH") + // Enable the new memory estimation logic + NewMemoryEstimates = Bool("OLLAMA_NEW_ESTIMATES") ) func String(s string) func() string { @@ -270,6 +272,7 @@ func AsMap() map[string]EnvVar { "OLLAMA_MULTIUSER_CACHE": {"OLLAMA_MULTIUSER_CACHE", MultiUserCache(), "Optimize prompt caching for multi-user scenarios"}, "OLLAMA_CONTEXT_LENGTH": {"OLLAMA_CONTEXT_LENGTH", ContextLength(), "Context length to use unless otherwise specified (default: 4096)"}, "OLLAMA_NEW_ENGINE": {"OLLAMA_NEW_ENGINE", NewEngine(), "Enable the new Ollama engine"}, + "OLLAMA_NEW_ESTIMATES": {"OLLAMA_NEW_ESTIMATES", NewMemoryEstimates(), "Enable the new memory estimation logic"}, // Informational "HTTP_PROXY": {"HTTP_PROXY", String("HTTP_PROXY")(), "HTTP proxy"}, diff --git a/fs/ggml/ggml.go b/fs/ggml/ggml.go index 008d1e0fc..1fef74524 100644 --- a/fs/ggml/ggml.go +++ b/fs/ggml/ggml.go @@ -480,6 +480,8 @@ func Decode(rs io.ReadSeeker, maxArraySize int) (*GGML, error) { } func (f GGML) GraphSize(context, batch uint64, numParallel int, kvCacheType string) (kv []uint64, partialOffload, fullOffload uint64) { + context *= uint64(numParallel) + embedding := f.KV().EmbeddingLength() heads := f.KV().HeadCountMax() headsKV := f.KV().HeadCountKVMax() diff --git a/llama/llama.go b/llama/llama.go index 4885949b7..ac2c112c2 100644 --- a/llama/llama.go +++ b/llama/llama.go @@ -62,6 +62,22 @@ func BackendInit() { C.llama_backend_init() } +func EnumerateGPUs() []string { + var ids []string + + for i := range C.ggml_backend_dev_count() { + device := C.ggml_backend_dev_get(i) + + if C.ggml_backend_dev_type(device) == C.GGML_BACKEND_DEVICE_TYPE_GPU { + var props C.struct_ggml_backend_dev_props + C.ggml_backend_dev_get_props(device, &props) + ids = append(ids, C.GoString(props.id)) + } + } + + return ids +} + func GetModelArch(modelPath string) (string, error) { mp := C.CString(modelPath) defer C.free(unsafe.Pointer(mp)) diff --git a/llama/patches/0017-add-C-API-for-mtmd_input_text.patch b/llama/patches/0016-add-C-API-for-mtmd_input_text.patch similarity index 100% rename from llama/patches/0017-add-C-API-for-mtmd_input_text.patch rename to llama/patches/0016-add-C-API-for-mtmd_input_text.patch diff --git a/llama/patches/0016-temporary-prevent-rocm-cuda-mixed-loading.patch b/llama/patches/0016-temporary-prevent-rocm-cuda-mixed-loading.patch deleted file mode 100644 index f085e0c7c..000000000 --- a/llama/patches/0016-temporary-prevent-rocm-cuda-mixed-loading.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Daniel Hiltgen -Date: Sun, 22 Jun 2025 09:22:05 -0700 -Subject: [PATCH] temporary prevent rocm+cuda mixed loading - ---- - ggml/src/ggml-backend-reg.cpp | 12 ++++++++++-- - 1 file changed, 10 insertions(+), 2 deletions(-) - -diff --git a/ggml/src/ggml-backend-reg.cpp b/ggml/src/ggml-backend-reg.cpp -index 3040b2aa..f1e9c180 100644 ---- a/ggml/src/ggml-backend-reg.cpp -+++ b/ggml/src/ggml-backend-reg.cpp -@@ -581,8 +581,16 @@ void ggml_backend_load_all_from_path(const char * dir_path) { - - ggml_backend_load_best("blas", silent, dir_path); - ggml_backend_load_best("cann", silent, dir_path); -- ggml_backend_load_best("cuda", silent, dir_path); -- ggml_backend_load_best("hip", silent, dir_path); -+ -+ // Avoid mixed hip+cuda configurations -+ const char * hip_devices = std::getenv("HIP_VISIBLE_DEVICES"); -+ const char * rocr_devices = std::getenv("ROCR_VISIBLE_DEVICES"); -+ if (!hip_devices && !rocr_devices) { -+ ggml_backend_load_best("cuda", silent, dir_path); -+ } else { -+ ggml_backend_load_best("hip", silent, dir_path); -+ } -+ - ggml_backend_load_best("metal", silent, dir_path); - ggml_backend_load_best("rpc", silent, dir_path); - ggml_backend_load_best("sycl", silent, dir_path); diff --git a/llama/patches/0018-no-power-throttling-win32-with-gnuc.patch b/llama/patches/0017-no-power-throttling-win32-with-gnuc.patch similarity index 100% rename from llama/patches/0018-no-power-throttling-win32-with-gnuc.patch rename to llama/patches/0017-no-power-throttling-win32-with-gnuc.patch diff --git a/llama/patches/0019-BF16-macos-version-guard.patch b/llama/patches/0018-BF16-macos-version-guard.patch similarity index 100% rename from llama/patches/0019-BF16-macos-version-guard.patch rename to llama/patches/0018-BF16-macos-version-guard.patch diff --git a/llama/patches/0020-Enable-CUDA-Graphs-for-gemma3n.patch b/llama/patches/0019-Enable-CUDA-Graphs-for-gemma3n.patch similarity index 100% rename from llama/patches/0020-Enable-CUDA-Graphs-for-gemma3n.patch rename to llama/patches/0019-Enable-CUDA-Graphs-for-gemma3n.patch diff --git a/llama/patches/0021-Disable-ggml-blas-on-macos-v13-and-older.patch b/llama/patches/0020-Disable-ggml-blas-on-macos-v13-and-older.patch similarity index 100% rename from llama/patches/0021-Disable-ggml-blas-on-macos-v13-and-older.patch rename to llama/patches/0020-Disable-ggml-blas-on-macos-v13-and-older.patch diff --git a/llama/patches/0022-fix-mtmd-audio.cpp-build-on-windows.patch b/llama/patches/0021-fix-mtmd-audio.cpp-build-on-windows.patch similarity index 100% rename from llama/patches/0022-fix-mtmd-audio.cpp-build-on-windows.patch rename to llama/patches/0021-fix-mtmd-audio.cpp-build-on-windows.patch diff --git a/llama/patches/0023-ggml-No-alloc-mode.patch b/llama/patches/0022-ggml-No-alloc-mode.patch similarity index 100% rename from llama/patches/0023-ggml-No-alloc-mode.patch rename to llama/patches/0022-ggml-No-alloc-mode.patch diff --git a/llm/memory.go b/llm/memory.go index b53000046..ee4be7419 100644 --- a/llm/memory.go +++ b/llm/memory.go @@ -4,7 +4,7 @@ import ( "fmt" "log/slog" "os" - "strconv" + "sort" "strings" "github.com/ollama/ollama/api" @@ -14,13 +14,79 @@ import ( "github.com/ollama/ollama/fs/ggml" ) +// pickBestFullFitByLibrary will try to find the optimal placement of the model in the available GPUs where the model fully fits +// The list of GPUs returned will always be the same brand (library) +// If the model can not be fit fully within the available GPU(s) nil is returned +func pickBestFullFitByLibrary(f *ggml.GGML, modelPath string, projectors []string, adapters []string, opts api.Options, gpus discover.GpuInfoList, numParallel int) discover.GpuInfoList { + for _, gl := range gpus.ByLibrary() { + sgl := append(make(discover.GpuInfoList, 0, len(gl)), gl...) + + // TODO - potentially sort by performance capability, existing models loaded, etc. + // TODO - Eliminate any GPUs that already have envconfig.MaxRunners loaded on them + // Note: at present, this will favor most current available VRAM descending and ignoring faster GPU speed in mixed setups + sort.Sort(sort.Reverse(discover.ByFreeMemory(sgl))) + + if !envconfig.SchedSpread() { + // Try to pack into as few GPUs as possible, starting from 1 GPU + for numGPUs := 1; numGPUs <= len(sgl); numGPUs++ { + gpuSubset := sgl[:numGPUs] + ok, estimatedVRAM := PredictServerFit(gpuSubset, f, adapters, projectors, opts, numParallel) + + if ok { + slog.Info("new model will fit in available VRAM across minimum required GPUs, loading", + "model", modelPath, + "library", sgl[0].Library, + "parallel", numParallel, + "required", format.HumanBytes2(estimatedVRAM), + "gpus", numGPUs) + return gpuSubset + } + } + } else { + // TODO future refinements + // - if multiple Libraries, see if any single GPU in any Library will fit + // - try subsets of GPUs instead of just falling back to 1 or all in a family + + // Now try all the GPUS (OLLAMA_SCHED_SPREAD is set) + if ok, estimatedVRAM := PredictServerFit(sgl, f, adapters, projectors, opts, numParallel); ok { + slog.Info("new model will fit in available VRAM, loading", + "model", modelPath, + "library", sgl[0].Library, + "parallel", numParallel, + "required", format.HumanBytes2(estimatedVRAM), + "gpus", len(sgl)) + return sgl + } + } + } + return nil +} + +// If multiple Libraries are detected, pick the Library which loads the most layers for the model +func pickBestPartialFitByLibrary(f *ggml.GGML, projectors []string, adapters []string, opts api.Options, gpus discover.GpuInfoList, numParallel int) discover.GpuInfoList { + byLibrary := gpus.ByLibrary() + if len(byLibrary) <= 1 { + return gpus + } + var bestEstimate uint64 + var bestFit int + for i, gl := range byLibrary { + _, estimatedVRAM := PredictServerFit(gl, f, adapters, projectors, opts, numParallel) + if estimatedVRAM > bestEstimate { + bestEstimate = estimatedVRAM + bestFit = i + } + } + return byLibrary[bestFit] +} + // This algorithm looks for a complete fit to determine if we need to unload other models func PredictServerFit(allGpus discover.GpuInfoList, f *ggml.GGML, adapters, projectors []string, opts api.Options, numParallel int) (bool, uint64) { // Split up the GPUs by type and try them var estimatedVRAM uint64 for _, gpus := range allGpus.ByLibrary() { var layerCount int - estimate := EstimateGPULayers(gpus, f, projectors, opts, numParallel) + estimate := estimateGPULayers(gpus, f, projectors, opts, numParallel) layerCount, estimatedVRAM = estimate.Layers, estimate.VRAMSize if opts.NumGPU < 0 { if layerCount > 0 && layerCount >= int(f.KV().BlockCount()+1) { @@ -49,7 +115,7 @@ type MemoryEstimate struct { TotalSize uint64 // For multi-GPU scenarios, this provides the tensor split parameter - TensorSplit string + TensorSplit []int // For multi-GPU scenarios, this is the size in bytes per GPU GPUSizes []uint64 @@ -71,7 +137,7 @@ type MemoryEstimate struct { // Given a model and one or more GPU targets, predict how many layers and bytes we can load, and the total size // The GPUs provided must all be the same Library -func EstimateGPULayers(gpus []discover.GpuInfo, f *ggml.GGML, projectors []string, opts api.Options, numParallel int) MemoryEstimate { +func estimateGPULayers(gpus []discover.GpuInfo, f *ggml.GGML, projectors []string, opts api.Options, numParallel int) MemoryEstimate { // Graph size for a partial offload, applies to all GPUs var graphPartialOffload uint64 @@ -112,13 +178,9 @@ func EstimateGPULayers(gpus []discover.GpuInfo, f *ggml.GGML, projectors []strin for _, projector := range projectors { llamaEngineProjectorWeights += projectorMemoryRequirements(projector) - - // multimodal models require at least 2048 context - opts.NumCtx = max(opts.NumCtx, 2048) } if llamaEngineProjectorWeights == 0 { ollamaEngineProjectorWeights, ollamaEngineProjectorGraph = f.VisionGraphSize() - opts.NumCtx = max(opts.NumCtx, 2048) } layers := f.Tensors().GroupLayers() @@ -184,7 +246,7 @@ func EstimateGPULayers(gpus []discover.GpuInfo, f *ggml.GGML, projectors []strin // Reduce set of GPUs to only those that have sufficient space to fit overhead and at least one layer var layerCount int - layerCounts := make([]int, len(gpus)) + tensorSplit := make([]int, len(gpus)) gpuAllocations := make([]uint64, len(gpus)) type gs struct { i int @@ -248,7 +310,7 @@ func EstimateGPULayers(gpus []discover.GpuInfo, f *ggml.GGML, projectors []strin used := gpuAllocations[g.i] + max(graphPartialOffload, graphFullOffload) if g.g.FreeMemory > overhead+used+layerSize { gpuAllocations[g.i] += layerSize - layerCounts[g.i]++ + tensorSplit[g.i]++ layerCount++ break } else { @@ -273,7 +335,7 @@ func EstimateGPULayers(gpus []discover.GpuInfo, f *ggml.GGML, projectors []strin used := gpuAllocations[g.i] + max(graphPartialOffload, graphFullOffload) if g.g.FreeMemory > overhead+used+memoryLastLayer { gpuAllocations[g.i] += memoryLastLayer - layerCounts[g.i]++ + tensorSplit[g.i]++ layerCount++ break } @@ -288,7 +350,7 @@ func EstimateGPULayers(gpus []discover.GpuInfo, f *ggml.GGML, projectors []strin // Add the applicable (full or partial) graph allocations for i := range gpus { - if layerCounts[i] <= 0 { + if tensorSplit[i] <= 0 { continue } if fullyLoaded { @@ -310,14 +372,6 @@ func EstimateGPULayers(gpus []discover.GpuInfo, f *ggml.GGML, projectors []strin } memoryRequiredTotal = memoryRequiredPartial + overflow - tensorSplit := "" - if len(gpus) > 1 { - splits := make([]string, len(gpus)) - for i, count := range layerCounts { - splits[i] = strconv.Itoa(count) - } - tensorSplit = strings.Join(splits, ",") - } allocationsList := []string{} for _, a := range gpuAllocations { allocationsList = append(allocationsList, format.HumanBytes2(a)) diff --git a/llm/memory_test.go b/llm/memory_test.go index 1d4f7a98c..49851006c 100644 --- a/llm/memory_test.go +++ b/llm/memory_test.go @@ -61,7 +61,7 @@ func TestEstimateGPULayers(t *testing.T) { projectors := []string{} opts := api.DefaultOptions() t.Run("cpu", func(t *testing.T) { - estimate := EstimateGPULayers(gpus, ggml, projectors, opts, 1) + estimate := estimateGPULayers(gpus, ggml, projectors, opts, 1) assert.Equal(t, 0, estimate.Layers) assert.Equal(t, uint64(0), estimate.Graph) }) @@ -88,7 +88,7 @@ func TestEstimateGPULayers(t *testing.T) { // Nested array: GPU0 layer space, GPU1 layer space, expected gpu0, expected gpu1 for i, s := range []struct { layer0, layer1 uint64 - expect0, expect1 uint64 + expect0, expect1 int }{ {1, 1, 1, 1}, {2, 1, 2, 1}, @@ -112,9 +112,9 @@ func TestEstimateGPULayers(t *testing.T) { gpus[1].FreeMemory += gpuMinimumMemory + layerSize + s.layer1*layerSize + 1 gpus[0].FreeMemory += max(graphFullOffload, graphPartialOffload) gpus[1].FreeMemory += max(graphFullOffload, graphPartialOffload) - estimate := EstimateGPULayers(gpus, ggml, projectors, opts, 1) - assert.Equal(t, int(s.expect0+s.expect1), estimate.Layers, "scenario %d: %v", i, s) - assert.Equal(t, fmt.Sprintf("%d,%d", s.expect0, s.expect1), estimate.TensorSplit, "scenario %d: %v", i, s) + estimate := estimateGPULayers(gpus, ggml, projectors, opts, 1) + assert.Equal(t, s.expect0+s.expect1, estimate.Layers, "scenario %d: %v", i, s) + assert.Equal(t, []int{s.expect0, s.expect1}, estimate.TensorSplit, "scenario %d: %v", i, s) var layerSums uint64 for _, b := range estimate.GPUSizes { layerSums += b diff --git a/llm/server.go b/llm/server.go index 7d921f144..01224a166 100644 --- a/llm/server.go +++ b/llm/server.go @@ -18,6 +18,7 @@ import ( "path/filepath" "runtime" "slices" + "sort" "strconv" "strings" "sync" @@ -32,6 +33,7 @@ import ( "github.com/ollama/ollama/fs/ggml" "github.com/ollama/ollama/llama" "github.com/ollama/ollama/logutil" + "github.com/ollama/ollama/ml" "github.com/ollama/ollama/model" ) @@ -63,6 +65,8 @@ func (e filteredEnv) LogValue() slog.Value { } type LlamaServer interface { + ModelPath() string + Load(ctx context.Context, gpus discover.GpuInfoList, requireFull bool) error Ping(ctx context.Context) error WaitUntilRunning(ctx context.Context) error Completion(ctx context.Context, req CompletionRequest, fn func(CompletionResponse)) error @@ -70,13 +74,13 @@ type LlamaServer interface { Tokenize(ctx context.Context, content string) ([]int, error) Detokenize(ctx context.Context, tokens []int) (string, error) Close() error - EstimatedVRAM() uint64 // Total VRAM across all GPUs - EstimatedTotal() uint64 - EstimatedVRAMByGPU(gpuID string) uint64 + VRAMSize() uint64 // Total VRAM across all GPUs + TotalSize() uint64 + VRAMByGPU(gpuID string) uint64 Pid() int } -// llmServer is an instance of the llama.cpp server +// llmServer is an instance of a runner hosting a single model type llmServer struct { port int cmd *exec.Cmd @@ -86,25 +90,38 @@ type llmServer struct { numParallel int modelPath string + loadRequest LoadRequest // Parameters used to initialize the runner + // llamaModel is an instance of the cgo llama.cpp model definition // nil if this server is running the new engine llamaModel *llama.Model - llamaModelLock sync.Mutex + llamaModelLock *sync.Mutex // textProcessor handles text encoding/decoding for the model in the Ollama engine // nil if this server is running the llama.cpp based engine textProcessor model.TextProcessor - estimate MemoryEstimate - totalLayers uint64 - // gpuCount int - gpus discover.GpuInfoList // Recorded just before the model loaded, free space will be incorrect - loadDuration time.Duration // Record how long it took the model to load + totalLayers uint64 + loadStart time.Time // Record how long it took the model to load loadProgress float32 sem *semaphore.Weighted } +type llamaServer struct { + llmServer + + ggml *ggml.GGML + gpus discover.GpuInfoList // The set of GPUs covered by the memory estimate + estimate MemoryEstimate +} + +type ollamaServer struct { + llmServer + + mem *ml.BackendMemory +} + // LoadModel will load a model from disk. The model must be in the GGML format. // // It collects array values for arrays with a size less than or equal to @@ -126,81 +143,57 @@ func LoadModel(model string, maxArraySize int) (*ggml.GGML, error) { } // NewLlamaServer will run a server for the given GPUs -// The gpu list must be a single family. func NewLlamaServer(gpus discover.GpuInfoList, modelPath string, f *ggml.GGML, adapters, projectors []string, opts api.Options, numParallel int) (LlamaServer, error) { - systemInfo := discover.GetSystemInfo() - systemTotalMemory := systemInfo.System.TotalMemory - systemFreeMemory := systemInfo.System.FreeMemory - systemSwapFreeMemory := systemInfo.System.FreeSwap - slog.Info("system memory", "total", format.HumanBytes2(systemTotalMemory), "free", format.HumanBytes2(systemFreeMemory), "free_swap", format.HumanBytes2(systemSwapFreeMemory)) + var llamaModel *llama.Model + var textProcessor model.TextProcessor + var err error + if envconfig.NewEngine() || f.KV().OllamaEngineRequired() { + textProcessor, err = model.NewTextProcessor(modelPath) + if err != nil { + // To prepare for opt-out mode, instead of treating this as an error, we fallback to the old runner + slog.Debug("model not yet supported by Ollama engine, switching to compatibility mode", "model", modelPath, "error", err) + } + } + if textProcessor == nil { + llamaModel, err = llama.LoadModelFromFile(modelPath, llama.ModelParams{VocabOnly: true}) + if err != nil { + return nil, err + } + } - // If the user wants zero GPU layers, reset the gpu list to be CPU/system ram info - if opts.NumGPU == 0 { - gpus = discover.GetCPUInfo() + newEstimates := textProcessor != nil && envconfig.NewMemoryEstimates() + if newEstimates { + slog.Info("enabling new memory estimates") } // Verify the requested context size is <= the model training size trainCtx := f.KV().ContextLength() - if opts.NumCtx/numParallel > int(trainCtx) && trainCtx > 0 { - slog.Warn("requested context size too large for model", "num_ctx", opts.NumCtx, "num_parallel", numParallel, "n_ctx_train", trainCtx) - opts.NumCtx = int(trainCtx) * numParallel + if opts.NumCtx > int(trainCtx) && trainCtx > 0 { + slog.Warn("requested context size too large for model", "num_ctx", opts.NumCtx, "n_ctx_train", trainCtx) + opts.NumCtx = int(trainCtx) } - estimate := EstimateGPULayers(gpus, f, projectors, opts, numParallel) - if len(gpus) > 1 || gpus[0].Library != "cpu" { - switch { - case gpus[0].Library == "metal" && estimate.VRAMSize > systemTotalMemory: - // disable partial offloading when model is greater than total system memory as this - // can lead to locking up the system - opts.NumGPU = 0 - case gpus[0].Library != "metal" && estimate.Layers == 0: - // Don't bother loading into the GPU if no layers can fit - gpus = discover.GetCPUInfo() - case opts.NumGPU < 0 && estimate.Layers > 0 && gpus[0].Library != "cpu": - opts.NumGPU = estimate.Layers - } + loadRequest := LoadRequest{LoraPath: adapters, KvSize: opts.NumCtx * numParallel, BatchSize: opts.NumBatch, Parallel: numParallel, MultiUserCache: envconfig.MultiUserCache()} + + defaultThreads := discover.GetSystemInfo().GetOptimalThreadCount() + if opts.NumThread > 0 { + loadRequest.NumThreads = opts.NumThread + } else if defaultThreads > 0 { + loadRequest.NumThreads = defaultThreads } - // On linux and windows, over-allocating CPU memory will almost always result in an error - // Darwin has fully dynamic swap so has no direct concept of free swap space - if runtime.GOOS != "darwin" { - systemMemoryRequired := estimate.TotalSize - estimate.VRAMSize - available := systemFreeMemory + systemSwapFreeMemory - if systemMemoryRequired > available { - slog.Warn("model request too large for system", "requested", format.HumanBytes2(systemMemoryRequired), "available", available, "total", format.HumanBytes2(systemTotalMemory), "free", format.HumanBytes2(systemFreeMemory), "swap", format.HumanBytes2(systemSwapFreeMemory)) - return nil, fmt.Errorf("model requires more system memory (%s) than is available (%s)", format.HumanBytes2(systemMemoryRequired), format.HumanBytes2(available)) - } - } - - slog.Info("offload", "", estimate) - - params := []string{ - "--model", modelPath, - "--ctx-size", strconv.Itoa(opts.NumCtx), - "--batch-size", strconv.Itoa(opts.NumBatch), - } - - if opts.NumGPU >= 0 { - params = append(params, "--n-gpu-layers", strconv.Itoa(opts.NumGPU)) - } + // TODO - NUMA support currently doesn't work properly if opts.MainGPU > 0 { - params = append(params, "--main-gpu", strconv.Itoa(opts.MainGPU)) + loadRequest.MainGPU = opts.MainGPU } - if len(adapters) > 0 { - for _, adapter := range adapters { - params = append(params, "--lora", adapter) - } - } - - defaultThreads := systemInfo.GetOptimalThreadCount() - if opts.NumThread > 0 { - params = append(params, "--threads", strconv.Itoa(opts.NumThread)) - } else if defaultThreads > 0 { - params = append(params, "--threads", strconv.Itoa(defaultThreads)) + if len(projectors) > 0 && llamaModel != nil { + loadRequest.ProjectorPath = projectors[0] } + // This will disable flash attention unless all GPUs on the system support it, even if we end up selecting a subset + // that can handle it. fa := envconfig.FlashAttention() if fa && !gpus.FlashAttentionSupported() { slog.Warn("flash attention enabled but not supported by gpu") @@ -216,12 +209,12 @@ func NewLlamaServer(gpus discover.GpuInfoList, modelPath string, f *ggml.GGML, a if fa { slog.Info("enabling flash attention") - params = append(params, "--flash-attn") + loadRequest.FlashAttention = true // Flash Attention also supports kv cache quantization // Enable if the requested and kv cache type is supported by the model if kvct != "" && f.SupportsKVCacheType(kvct) { - params = append(params, "--kv-cache-type", kvct) + loadRequest.KvCacheType = kvct } else { slog.Warn("kv cache type not supported by model", "type", kvct) } @@ -229,66 +222,45 @@ func NewLlamaServer(gpus discover.GpuInfoList, modelPath string, f *ggml.GGML, a slog.Warn("quantized kv cache requested but flash attention disabled", "type", kvct) } - // mmap has issues with partial offloading on metal - for _, g := range gpus { - if g.Library == "metal" && - uint64(opts.NumGPU) > 0 && - uint64(opts.NumGPU) < f.KV().BlockCount()+1 { - opts.UseMMap = new(bool) - *opts.UseMMap = false - } - } - - // Windows CUDA should not use mmap for best performance - // Linux with a model larger than free space, mmap leads to thrashing - // For CPU loads we want the memory to be allocated, not FS cache - if (runtime.GOOS == "windows" && gpus[0].Library == "cuda" && opts.UseMMap == nil) || - (runtime.GOOS == "linux" && systemFreeMemory < estimate.TotalSize && opts.UseMMap == nil) || - (gpus[0].Library == "cpu" && opts.UseMMap == nil) || - (opts.UseMMap != nil && !*opts.UseMMap) { - params = append(params, "--no-mmap") - } - - // TODO - NUMA support currently doesn't work properly - - params = append(params, "--parallel", strconv.Itoa(numParallel)) - - if estimate.TensorSplit != "" { - params = append(params, "--tensor-split", estimate.TensorSplit) - } - - if envconfig.MultiUserCache() { - params = append(params, "--multiuser-cache") - } - - libs := make(map[string]string) + availableLibs := make(map[string]string) if entries, err := os.ReadDir(discover.LibOllamaPath); err == nil { for _, entry := range entries { - libs[entry.Name()] = filepath.Join(discover.LibOllamaPath, entry.Name()) + availableLibs[entry.Name()] = filepath.Join(discover.LibOllamaPath, entry.Name()) } } - lib := gpus[0].RunnerName() + var gpuLibs []string + for _, gpu := range gpus { + gpuLibs = append(gpuLibs, gpu.RunnerName()) + } + requested := envconfig.LLMLibrary() - if libs[requested] != "" { + if availableLibs[requested] != "" { slog.Info("using requested gpu library", "requested", requested) - lib = requested + gpuLibs = []string{requested} } var compatible []string - for k := range libs { - // exact match first - if k == lib { - compatible = append([]string{k}, compatible...) - continue + for _, gpuLib := range gpuLibs { + var matchingLibs []string + for k := range availableLibs { + // exact match first + if k == gpuLib { + matchingLibs = append([]string{k}, matchingLibs...) + continue + } + + // then match the family (e.g. 'cuda') + if strings.Split(k, "_")[0] == strings.Split(gpuLib, "_")[0] { + matchingLibs = append(matchingLibs, k) + } } - // then match the family (e.g. 'cuda') - if strings.Split(k, "_")[0] == strings.Split(lib, "_")[0] { - compatible = append(compatible, k) + if len(matchingLibs) > 0 { + compatible = append(compatible, matchingLibs[0]) } } - slog.Debug("compatible gpu libraries", "compatible", compatible) + exe, err := os.Executable() if err != nil { return nil, fmt.Errorf("unable to lookup executable path: %w", err) @@ -298,26 +270,6 @@ func NewLlamaServer(gpus discover.GpuInfoList, modelPath string, f *ggml.GGML, a exe = eval } - var llamaModel *llama.Model - var textProcessor model.TextProcessor - if envconfig.NewEngine() || f.KV().OllamaEngineRequired() { - textProcessor, err = model.NewTextProcessor(modelPath) - if err != nil { - // To prepare for opt-out mode, instead of treating this as an error, we fallback to the old runner - slog.Debug("model not yet supported by Ollama engine, switching to compatibility mode", "model", modelPath, "error", err) - } - } - if textProcessor == nil { - llamaModel, err = llama.LoadModelFromFile(modelPath, llama.ModelParams{VocabOnly: true}) - if err != nil { - return nil, err - } - } - - if len(projectors) > 0 && llamaModel != nil { - params = append(params, "--mmproj", projectors[0]) - } - // iterate through compatible GPU libraries such as 'cuda_v12', 'rocm', etc. // adding each library's respective path to the LD_LIBRARY_PATH, until finally running // without any LD_LIBRARY_PATH flags @@ -334,14 +286,14 @@ func NewLlamaServer(gpus discover.GpuInfoList, modelPath string, f *ggml.GGML, a slog.Debug("ResolveTCPAddr failed, using random port") port = rand.Intn(65535-49152) + 49152 // get a random port in the ephemeral range } - finalParams := []string{"runner"} + params := []string{"runner"} if textProcessor != nil { // New engine // TODO - if we have failure to load scenarios, add logic to retry with the old runner - finalParams = append(finalParams, "--ollama-engine") + params = append(params, "--ollama-engine") } - finalParams = append(finalParams, params...) - finalParams = append(finalParams, "--port", strconv.Itoa(port)) + params = append(params, "--model", modelPath) + params = append(params, "--port", strconv.Itoa(port)) var pathEnv string switch runtime.GOOS { @@ -361,38 +313,39 @@ func NewLlamaServer(gpus discover.GpuInfoList, modelPath string, f *ggml.GGML, a } ggmlPaths := []string{discover.LibOllamaPath} - if len(compatible) > 0 { - c := compatible[0] - if libpath, ok := libs[c]; ok { + for _, c := range compatible { + if libpath, ok := availableLibs[c]; ok { slog.Debug("adding gpu library", "path", libpath) libraryPaths = append([]string{libpath}, libraryPaths...) ggmlPaths = append(ggmlPaths, libpath) } } - if gpus[0].DependencyPath != nil { - slog.Debug("adding gpu dependency paths", "paths", gpus[0].DependencyPath) - // assume gpus from the same library have the same dependency path - libraryPaths = append(gpus[0].DependencyPath, libraryPaths...) + for _, gpu := range gpus { + if gpu.DependencyPath != nil { + slog.Debug("adding gpu dependency paths", "paths", gpu.DependencyPath) + libraryPaths = append(gpu.DependencyPath, libraryPaths...) + } } // finally, add the root library path libraryPaths = append(libraryPaths, discover.LibOllamaPath) - s := &llmServer{ - port: port, - cmd: exec.Command(exe, finalParams...), - status: NewStatusWriter(os.Stderr), - options: opts, - modelPath: modelPath, - llamaModel: llamaModel, - textProcessor: textProcessor, - estimate: estimate, - numParallel: numParallel, - sem: semaphore.NewWeighted(int64(numParallel)), - totalLayers: f.KV().BlockCount() + 1, - gpus: gpus, - done: make(chan error, 1), + s := llmServer{ + port: port, + cmd: exec.Command(exe, params...), + status: NewStatusWriter(os.Stderr), + options: opts, + modelPath: modelPath, + loadRequest: loadRequest, + llamaModel: llamaModel, + llamaModelLock: &sync.Mutex{}, + textProcessor: textProcessor, + numParallel: numParallel, + sem: semaphore.NewWeighted(int64(numParallel)), + totalLayers: f.KV().BlockCount() + 1, + loadStart: time.Now(), + done: make(chan error, 1), } s.cmd.Env = os.Environ() @@ -406,20 +359,15 @@ func NewLlamaServer(gpus discover.GpuInfoList, modelPath string, f *ggml.GGML, a for _, gpu := range gpus { envWorkarounds = append(envWorkarounds, gpu.EnvWorkarounds...) } - visibleDevicesEnv, visibleDevicesEnvVal := gpus.GetVisibleDevicesEnv() pathEnvVal := strings.Join(libraryPaths, string(filepath.ListSeparator)) - // Update or add the path and visible devices variable with our adjusted version + // Update or add the path variable with our adjusted version pathNeeded := true - devicesNeeded := visibleDevicesEnv != "" for i := range s.cmd.Env { cmp := strings.SplitN(s.cmd.Env[i], "=", 2) if strings.EqualFold(cmp[0], pathEnv) { s.cmd.Env[i] = pathEnv + "=" + pathEnvVal pathNeeded = false - } else if devicesNeeded && strings.EqualFold(cmp[0], visibleDevicesEnv) { - s.cmd.Env[i] = visibleDevicesEnv + "=" + visibleDevicesEnvVal - devicesNeeded = false } else if len(envWorkarounds) != 0 { for _, kv := range envWorkarounds { if strings.EqualFold(cmp[0], kv[0]) { @@ -431,11 +379,8 @@ func NewLlamaServer(gpus discover.GpuInfoList, modelPath string, f *ggml.GGML, a if pathNeeded { s.cmd.Env = append(s.cmd.Env, pathEnv+"="+pathEnvVal) } - if devicesNeeded { - s.cmd.Env = append(s.cmd.Env, visibleDevicesEnv+"="+visibleDevicesEnvVal) - } - slog.Info("starting llama server", "cmd", s.cmd) + slog.Info("starting runner", "cmd", s.cmd) slog.Debug("subprocess", "", filteredEnv(s.cmd.Env)) if err = s.cmd.Start(); err != nil { @@ -471,15 +416,703 @@ func NewLlamaServer(gpus discover.GpuInfoList, modelPath string, f *ggml.GGML, a } }() - return s, nil + if newEstimates { + return &ollamaServer{llmServer: s}, nil + } else { + return &llamaServer{llmServer: s, ggml: f}, nil + } } } +func (s *llmServer) ModelPath() string { + return s.modelPath +} + +type LoadOperation int + +// The order of these constants are significant because we iterate over the operations. They +// should be in order of increasingly loading the model. +const ( + LoadOperationFit LoadOperation = iota // Return memory requirements but do not allocate + LoadOperationAlloc // Allocate memory but do not load the weights + LoadOperationCommit // Load weights - further changes cannot be made after this + LoadOperationClose // Close model and free memory +) + +func (o LoadOperation) String() string { + switch o { + case LoadOperationFit: + return "fit" + case LoadOperationAlloc: + return "alloc" + case LoadOperationCommit: + return "commit" + case LoadOperationClose: + return "close" + default: + return "unknown" + } +} + +type LoadRequest struct { + Operation LoadOperation + + LoraPath []string + Parallel int + BatchSize int + FlashAttention bool + KvSize int + KvCacheType string + NumThreads int + GPULayers ml.GPULayersList + MultiUserCache bool + + // Legacy fields - not used with the Ollama engine + ProjectorPath string + MainGPU int + UseMmap bool +} + +type LoadResponse struct { + Success bool + Memory ml.BackendMemory +} + +var ErrLoadRequiredFull = errors.New("unable to load full model on GPU") + +func (s *llamaServer) Load(ctx context.Context, gpus discover.GpuInfoList, requireFull bool) error { + systemInfo := discover.GetSystemInfo() + systemTotalMemory := systemInfo.System.TotalMemory + systemFreeMemory := systemInfo.System.FreeMemory + systemSwapFreeMemory := systemInfo.System.FreeSwap + slog.Info("system memory", "total", format.HumanBytes2(systemTotalMemory), "free", format.HumanBytes2(systemFreeMemory), "free_swap", format.HumanBytes2(systemSwapFreeMemory)) + + g := pickBestFullFitByLibrary(s.ggml, s.modelPath, []string{s.loadRequest.ProjectorPath}, s.loadRequest.LoraPath, s.options, gpus, s.numParallel) + if g == nil { + if !requireFull { + g = pickBestPartialFitByLibrary(s.ggml, []string{s.loadRequest.ProjectorPath}, s.loadRequest.LoraPath, s.options, gpus, s.numParallel) + } else { + return ErrLoadRequiredFull + } + } + + gpus = g + s.estimate = estimateGPULayers(gpus, s.ggml, []string{s.loadRequest.ProjectorPath}, s.options, s.numParallel) + + if len(gpus) > 1 || gpus[0].Library != "cpu" { + switch { + case gpus[0].Library == "metal" && s.estimate.VRAMSize > systemInfo.System.TotalMemory: + // disable partial offloading when model is greater than total system memory as this + // can lead to locking up the system + s.options.NumGPU = 0 + case gpus[0].Library != "metal" && s.estimate.Layers == 0: + // Don't bother loading into the GPU if no layers can fit + gpus = discover.GetCPUInfo() + case s.options.NumGPU < 0 && s.estimate.Layers > 0 && gpus[0].Library != "cpu": + s.options.NumGPU = s.estimate.Layers + } + } + + // On linux and windows, over-allocating CPU memory will almost always result in an error + // Darwin has fully dynamic swap so has no direct concept of free swap space + if runtime.GOOS != "darwin" { + systemMemoryRequired := s.estimate.TotalSize - s.estimate.VRAMSize + available := systemInfo.System.FreeMemory + systemInfo.System.FreeSwap + if systemMemoryRequired > available { + slog.Warn("model request too large for system", "requested", format.HumanBytes2(systemMemoryRequired), "available", format.HumanBytes2(available), "total", format.HumanBytes2(systemInfo.System.TotalMemory), "free", format.HumanBytes2(systemInfo.System.FreeMemory), "swap", format.HumanBytes2(systemInfo.System.FreeSwap)) + return fmt.Errorf("model requires more system memory (%s) than is available (%s)", format.HumanBytes2(systemMemoryRequired), format.HumanBytes2(available)) + } + } + + if requireFull && len(gpus) == 1 && gpus[0].Library == "cpu" && s.estimate.TotalSize > gpus[0].FreeMemory { + return ErrLoadRequiredFull + } + + slog.Info("offload", "", s.estimate) + + s.gpus = gpus + s.loadRequest.GPULayers = createGPULayers(s.estimate, s.ggml, gpus, s.options.NumGPU) + + // Mmap is only supported on the llama engine + if s.textProcessor == nil { + s.loadRequest.UseMmap = true + + // mmap has issues with partial offloading on metal + for _, g := range gpus { + if g.Library == "metal" && + uint64(s.options.NumGPU) > 0 && + uint64(s.options.NumGPU) < s.ggml.KV().BlockCount()+1 { + s.options.UseMMap = new(bool) + *s.options.UseMMap = false + } + } + + // Windows CUDA should not use mmap for best performance + // Linux with a model larger than free space, mmap leads to thrashing + // For CPU loads we want the memory to be allocated, not FS cache + if (runtime.GOOS == "windows" && gpus[0].Library == "cuda" && s.options.UseMMap == nil) || + (runtime.GOOS == "linux" && systemInfo.System.FreeMemory < s.estimate.TotalSize && s.options.UseMMap == nil) || + (gpus[0].Library == "cpu" && s.options.UseMMap == nil) || + (s.options.UseMMap != nil && !*s.options.UseMMap) { + s.loadRequest.UseMmap = false + } + } + + if err := s.waitUntilRunnerLaunched(ctx); err != nil { + return err + } + + resp, err := s.initModel(ctx, s.loadRequest, LoadOperationCommit) + if err != nil { + return err + } + + // On the Ollama engine, we can print out a summary of the memory allocations. + // We don't have this for the llama engine but it does something similar itself. + if s.textProcessor != nil { + resp.Memory.Log(slog.LevelInfo) + } + + if !resp.Success { + slog.Warn("failed to allocate memory for model", "memory", resp.Memory) + return errors.New("failed to allocate memory for model") + } + + // The llama engine does its memory allocations together with model loading, so we + // need to wait until it is done to ensure that we have accurate memory data before + // loading the next model + if s.textProcessor == nil { + return s.WaitUntilRunning(ctx) + } else { + return nil + } +} + +// createGPULayers maps from the tensor splits assigned by the memory estimates to explicit assignment +// of particular layers onto GPUs +func createGPULayers(estimate MemoryEstimate, ggml *ggml.GGML, gpus discover.GpuInfoList, numGPU int) ml.GPULayersList { + if numGPU <= 0 { + return nil + } + + gpuLayers := make(ml.GPULayersList, len(gpus)) + for i := range gpuLayers { + gpuLayers[i].ID = gpus[i].ID + } + + var sum float32 + splits := make([]float32, len(estimate.TensorSplit)) + // cumulative sum of all splits + for i := range splits { + sum += float32(estimate.TensorSplit[i]) + splits[i] = sum + } + + if sum <= 0 { + return nil + } + + // normalize splits + for i := range splits { + splits[i] /= sum + } + + blocks := int(ggml.KV().BlockCount()) + gpuRangeStart := max(0, blocks-numGPU) + gpuRangeStop := min(gpuRangeStart+numGPU, blocks+1) + for i := range blocks + 1 { + if i < gpuRangeStart || i >= gpuRangeStop { + continue + } + + index := slices.IndexFunc(splits, func(f float32) bool { return float32(i-gpuRangeStart)/float32(gpuRangeStop-gpuRangeStart) < f }) + if index < 0 || index >= len(gpus) { + continue + } + + gpuLayers[index].Layers = append(gpuLayers[index].Layers, i) + } + + return gpuLayers +} + +// Load finds the optimal layout of layers to offload on GPUs based on no initial information about the size of the model +// It does this by: +// 1. Assigning the full model to the GPU with the largest available free memory +// 2. Attempting to allocate the layout and receiving the memory requirements in response +// 3. Creating a new layout based on the updated memory information +// 4. Going back to step 2 and looping until we either stabilize on a particular layout or discover that we have entered a cycle +// +// This process is repeated for higher levels of loading the model (fit, allocate, commit). The earlier levels are quicker, +// allowing for faster iteration, but may return less information. +func (s *ollamaServer) Load(ctx context.Context, gpus discover.GpuInfoList, requireFull bool) error { + var success bool + defer func() { + if !success { + s.initModel(ctx, LoadRequest{}, LoadOperationClose) + } + s.mem.Log(slog.LevelInfo) + }() + + slog.Info("loading model", "model layers", s.totalLayers, "requested", s.options.NumGPU) + + systemInfo := discover.GetSystemInfo() + systemTotalMemory := systemInfo.System.TotalMemory + systemFreeMemory := systemInfo.System.FreeMemory + systemSwapFreeMemory := systemInfo.System.FreeSwap + slog.Info("system memory", "total", format.HumanBytes2(systemTotalMemory), "free", format.HumanBytes2(systemFreeMemory), "free_swap", format.HumanBytes2(systemSwapFreeMemory)) + + if !(len(gpus) == 1 && gpus[0].Library == "cpu") { + for _, gpu := range gpus { + slog.Info("gpu memory", "id", gpu.ID, + "available", format.HumanBytes2(gpu.FreeMemory-envconfig.GpuOverhead()-gpu.MinimumMemory), + "free", format.HumanBytes2(gpu.FreeMemory), + "minimum", format.HumanBytes2(gpu.MinimumMemory), + "overhead", format.HumanBytes2(envconfig.GpuOverhead())) + } + } + + pastAllocations := make(map[uint64]struct{}) + var backoff float32 + + gpuLayers, err := s.createLayout(systemInfo, gpus, s.mem, requireFull, backoff) + if err != nil { + return err + } + + if err := s.waitUntilRunnerLaunched(ctx); err != nil { + return err + } + +nextOperation: + for operation := LoadOperationFit; operation < LoadOperationCommit; operation++ { + nextLoad: + for { + s.loadRequest.GPULayers = gpuLayers + resp, err := s.initModel(ctx, s.loadRequest, operation) + if err != nil { + return err + } + + resp.Memory.Log(slog.LevelDebug) + slog.Debug("memory", "success", resp.Success, "required", resp.Memory) + + pastAllocations[gpuLayers.Hash()] = struct{}{} + s.mem = &resp.Memory + + for { + newGPULayers, err := s.createLayout(systemInfo, gpus, s.mem, requireFull, backoff) + if err != nil { + return err + } + + slog.Debug("new layout created", "layers", newGPULayers) + + // We get additional memory information over time, which will reduce the number of + // layers that can fit, so fewer layers is actually better. As long as we haven't seen + // this layout before and it doesn't have more layers than the last one, we can keep + // trying to see if we can do better. + if _, ok := pastAllocations[newGPULayers.Hash()]; !ok && newGPULayers.Sum() <= gpuLayers.Sum() { + gpuLayers = newGPULayers + continue nextLoad + } + + // If we are looping around a few different layouts due to graphs moving off and on + // GPUs, make sure that we try out the intermediate states. For example, if we are + // looping between offloading 39 and 41 layers, we should also check 40. + // + // This switches strategies to force an incremental number of layers to be offloaded + // and checking the memory layout. If the allocation succeeds and creating a new layout + // without forcing offload yields the same or greater number of layers offloaded, then + // the trial is successful. + // + // This alternate strategy does not introduce the possibility of loops with the overall + // state machine, as it exits this code block either with a successful result, moving + // to the next operation or the original number of layers offloaded. + if s.options.NumGPU < 0 && newGPULayers.Sum()-gpuLayers.Sum() > 1 { + for i := newGPULayers.Sum() - 1; i >= gpuLayers.Sum(); i-- { + slog.Debug("exploring intermediate layers", "layer", i) + + s.options.NumGPU = i + newGPULayers, err = s.createLayout(systemInfo, gpus, s.mem, requireFull, backoff) + s.options.NumGPU = -1 + if err != nil { + return err + } + + slog.Debug("new layout created", "layers", newGPULayers) + + s.loadRequest.GPULayers = newGPULayers + resp, err = s.initModel(ctx, s.loadRequest, operation) + if err != nil { + return err + } + + resp.Memory.Log(slog.LevelDebug) + slog.Debug("memory", "success", resp.Success, "required", resp.Memory) + + if resp.Success { + verifyGPULayers, err := s.createLayout(systemInfo, gpus, &resp.Memory, requireFull, backoff) + if err != nil { + return err + } + + slog.Debug("verifying layout", "layers", verifyGPULayers) + + if newGPULayers.Sum() <= verifyGPULayers.Sum() { + gpuLayers = newGPULayers + + // Since we are going backwards (increasing the number of layers), ensure that + // we can come back down if needed + clear(pastAllocations) + + continue nextOperation + } + } + } + } + + // If we generated a layout a second time or go backwards, then we've converged. Use the last + // layout before the repeat, which is already allocated. + if resp.Success { + continue nextOperation + } + + if s.options.NumGPU >= 0 { + return fmt.Errorf("memory layout cannot be allocated with num_gpu = %v", s.options.NumGPU) + } + + // Memory allocation failed even though we created a layout that we thought should + // fit in available memory. This could happen if either our free memory reports + // are incorrect or if available memory is changing between layout and allocation + // time. Apply an exponential backoff to try to find the real amount of available + // space. + if backoff > 1 { + slog.Warn("memory layout cannot be allocated", "memory", resp.Memory) + return errors.New("memory layout cannot be allocated") + } else if backoff == 0 { + backoff = 0.01 + } else { + backoff *= 2 + } + + slog.Info("model layout did not fit, applying backoff", "backoff", fmt.Sprintf("%.2f", backoff)) + } + } + } + + s.loadRequest.GPULayers = gpuLayers + resp, err := s.initModel(ctx, s.loadRequest, LoadOperationCommit) + if err != nil { + return err + } + + success = resp.Success + s.mem = &resp.Memory + + if !success { + slog.Warn("failed to commit memory for model", "memory", resp.Memory) + return errors.New("failed to commit memory for model") + } + + return nil +} + +// createLayout uses the current best view of memory requirements and creates a layout of model layers on GPUs. +// It does this by: +// - Calculating how much space each layer requires +// - Calculating how much space each GPU has available for layers, based on free memory and space occupied by the graph +// - Assigning layers +// - Ensuring that we don't exceed limits, such as requirements about partial offloading or system memory +func (s *ollamaServer) createLayout(systemInfo discover.SystemInfo, systemGPUs discover.GpuInfoList, memory *ml.BackendMemory, requireFull bool, backoff float32) (ml.GPULayersList, error) { + if s.totalLayers == 0 || s.options.NumGPU == 0 || len(systemGPUs) == 0 || (len(systemGPUs) == 1 && systemGPUs[0].Library == "cpu") { + return ml.GPULayersList{}, nil + } + + gpus := append(make(discover.GpuInfoList, 0, len(systemGPUs)), systemGPUs...) + sort.Sort(sort.Reverse(discover.ByFreeMemory(gpus))) + + if memory == nil { + memory = &ml.BackendMemory{CPU: ml.DeviceMemory{ + Weights: make([]ml.Memory, s.totalLayers), + Cache: make([]ml.Memory, s.totalLayers), + }} + } + + layers := make([]uint64, len(memory.CPU.Weights)) + for i := range layers { + for j := range memory.GPUs { + layers[i] += memory.GPUs[j].Weights[i].Size + layers[i] += memory.GPUs[j].Cache[i].Size + } + layers[i] += memory.CPU.Weights[i].Size + layers[i] += memory.CPU.Cache[i].Size + slog.Log(context.TODO(), logutil.LevelTrace, "layer to assign", "layer", i, "size", format.HumanBytes2(layers[i])) + } + + gpuLayers := ml.GPULayersList{} + for _, gl := range gpus.ByLibrary() { + // If a GPU already has a graph allocated on it, then we should continue to use it. + // Otherwise, we lose information that we got from previous allocations, which can + // cause cycling. Plus, we get more information about required allocation from each + // iteration, so it doesn't make sense that a later iteration would use fewer GPUs. + lastUsedGPU := 0 + for i := range gl { + found := false + for j := range memory.GPUs { + if gl[i].ID == memory.GPUs[j].ID { + if memory.GPUs[j].Graph.Size != 0 { + lastUsedGPU = i + } + + reserved := uint64(float32(gl[i].FreeMemory)*backoff) + gl[i].MinimumMemory + envconfig.GpuOverhead() + memory.GPUs[j].Graph.Size + if gl[i].FreeMemory > reserved { + gl[i].FreeMemory -= reserved + } else { + gl[i].FreeMemory = 0 + } + + slog.Debug("available gpu", "id", gl[i].ID, + "available layer vram", format.HumanBytes2(gl[i].FreeMemory), + "backoff", fmt.Sprintf("%.2f", backoff), "minimum", format.HumanBytes2(gl[i].MinimumMemory), + "overhead", format.HumanBytes2(envconfig.GpuOverhead()), + "graph", format.HumanBytes2(memory.GPUs[j].Graph.Size)) + + found = true + break + } + } + if !found { + // The runner doesn't report seeing this GPU + gl[i].FreeMemory = 0 + } + } + + libraryGpuLayers := assignLayers(layers, gl, s.options.NumGPU, lastUsedGPU) + if libraryGpuLayers.Sum() > gpuLayers.Sum() { + gpuLayers = libraryGpuLayers + } + } + + // These sizes will only increase as we go through additional iterations and get additional information. + cpuSize := memory.InputWeights.Size + memory.CPU.Graph.Size + var vramSize uint64 + for _, gl := range gpuLayers { + for _, gpu := range memory.GPUs { + if gl.ID == gpu.ID { + vramSize += gpu.Graph.Size + break + } + } + } + +nextLayer: + for i := range layers { + for _, g := range gpuLayers { + for _, gl := range g.Layers { + if i == gl { + vramSize += layers[i] + continue nextLayer + } + } + } + cpuSize += layers[i] + } + + if requireFull { + if gpuLayers.Sum() < len(layers) && (s.options.NumGPU < 0 || gpuLayers.Sum() < s.options.NumGPU) { + return nil, ErrLoadRequiredFull + } + + if cpuSize > systemInfo.System.FreeMemory { + return nil, ErrLoadRequiredFull + } + } + + // On linux and windows, over-allocating CPU memory will almost always result in an error + // Darwin has fully dynamic swap so has no direct concept of free swap space + if runtime.GOOS != "darwin" { + available := systemInfo.System.FreeMemory + systemInfo.System.FreeSwap + if cpuSize > available { + slog.Warn("model request too large for system", "requested", format.HumanBytes2(cpuSize), "available", format.HumanBytes2(available), "total", format.HumanBytes2(systemInfo.System.TotalMemory), "free", format.HumanBytes2(systemInfo.System.FreeMemory), "swap", format.HumanBytes2(systemInfo.System.FreeSwap)) + return nil, fmt.Errorf("model requires more system memory (%s) than is available (%s)", format.HumanBytes2(cpuSize), format.HumanBytes2(available)) + } + } else { + if vramSize > systemInfo.System.TotalMemory { + // disable partial offloading when model is greater than total system memory as this + // can lead to locking up the system + s.options.NumGPU = 0 + gpuLayers = ml.GPULayersList{} + } + } + + if gpuLayers.Sum() == 0 { + slog.Debug("insufficient VRAM to load any model layers") + } + + return gpuLayers, nil +} + +// assignLayers packs the maximum number of layers onto the smallest set of GPUs and comes up with a layer assignment +func assignLayers(layers []uint64, gpus discover.GpuInfoList, requestedLayers int, lastUsedGPU int) (gpuLayers ml.GPULayersList) { + // If we can't fit everything then prefer offloading layers other than the output layer + for range 2 { + // requestedLayers may be -1 if nothing was requested + requestedLayers = min(len(layers), requestedLayers) + + if !envconfig.SchedSpread() { + for i := lastUsedGPU; i < len(gpus); i++ { + // Try to pack things into as few GPUs as possible + forceRequest := i == len(gpus)-1 + gpuLayers = findBestFit(layers, gpus[:i+1], requestedLayers, forceRequest) + if gpuLayers.Sum() == len(layers) || gpuLayers.Sum() == requestedLayers { + break + } + } + } else { + gpuLayers = findBestFit(layers, gpus, requestedLayers, true) + } + + // We only stop if we've gotten all of the layers - even if we got requestedLayers, we still + // might want to try dropping the output layer. + if gpuLayers.Sum() == len(layers) { + return gpuLayers + } + + layers = layers[:len(layers)-1] + } + + return gpuLayers +} + +// findBestFit binary searches to find the smallest capacity factor that can fit +// the max number of layers. The capacity factor is multiplied by the free space on +// each GPU and a small one will force even balancing. +func findBestFit(layers []uint64, gpus discover.GpuInfoList, requestedLayers int, forceRequest bool) (gpuLayers ml.GPULayersList) { + var high float32 = 1 + var low float32 = 0 + + // If we need to fulfill the requested number of layers, pretend we have almost infinite VRAM + if requestedLayers >= 0 && forceRequest { + high = 1000 + } + + bestAssignments := greedyFit(layers, gpus, high, requestedLayers) + maxNumGPU := bestAssignments.Sum() + if maxNumGPU == 0 { + return bestAssignments + } + + for high-low > 1e-6 { + mid := (low + high) / 2 + assignments := greedyFit(layers, gpus, mid, requestedLayers) + if assignments.Sum() == maxNumGPU { + high = mid + bestAssignments = assignments + } else { + low = mid + } + } + + return bestAssignments +} + +// greedyFit assigns layers incrementally to GPUs, spilling over as each runs out of free space +func greedyFit(layers []uint64, gpus discover.GpuInfoList, capacity float32, requestedLayers int) (gpuLayers ml.GPULayersList) { + device := len(gpus) - 1 + gpuLayers = ml.GPULayersList{{ID: gpus[device].ID}} + freeSpace := uint64(float32(gpus[device].FreeMemory) * capacity) + for i := len(layers) - 1; i >= 0; i-- { + if requestedLayers >= 0 && len(layers)-1-i >= requestedLayers { + break + } + + for { + if layers[i] <= freeSpace { + gpuLayers[0].Layers = append([]int{i}, gpuLayers[0].Layers...) + freeSpace -= layers[i] + break + } + + device-- + if device < 0 { + return gpuLayers + } + gpuLayers = append(ml.GPULayersList{{ID: gpus[device].ID}}, gpuLayers...) + freeSpace = uint64(float32(gpus[device].FreeMemory) * capacity) + } + } + + return gpuLayers +} + +// waitUntilRunnerLaunched sleeps until the runner subprocess is alive enough +// to respond to status requests +func (s *llmServer) waitUntilRunnerLaunched(ctx context.Context) error { + for { + _, err := s.getServerStatus(ctx) + if err == nil { + break + } + + t := time.NewTimer(10 * time.Millisecond) + select { + case <-t.C: + continue + case <-ctx.Done(): + return ctx.Err() + } + } + + return nil +} + +// initModel sends a load request to the runner based on the request operation (fit, alloc, commit) +// and parameters +func (s *llmServer) initModel(ctx context.Context, req LoadRequest, operation LoadOperation) (*LoadResponse, error) { + req.Operation = operation + + data, err := json.Marshal(req) + if err != nil { + return nil, fmt.Errorf("error marshaling load data: %w", err) + } + + r, err := http.NewRequestWithContext(ctx, http.MethodPost, fmt.Sprintf("http://127.0.0.1:%d/load", s.port), bytes.NewBuffer(data)) + if err != nil { + return nil, fmt.Errorf("error creating load request: %w", err) + } + r.Header.Set("Content-Type", "application/json") + + resp, err := http.DefaultClient.Do(r) + if err != nil { + return nil, fmt.Errorf("do load request: %w", err) + } + defer resp.Body.Close() + + body, err := io.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("read load request: %w", err) + } + + if resp.StatusCode >= 400 { + log.Printf("llm load error: %s", body) + return nil, fmt.Errorf("%s", body) + } + + var llmResp LoadResponse + if err := json.Unmarshal(body, &llmResp); err != nil { + return nil, fmt.Errorf("load unmarshal encode response: %w", err) + } + + return &llmResp, nil +} + type ServerStatus int const ( // iota is reset to 0 ServerStatusReady ServerStatus = iota ServerStatusNoSlotsAvailable + ServerStatusLaunched ServerStatusLoadingModel ServerStatusNotResponding ServerStatusError @@ -491,6 +1124,8 @@ func (s ServerStatus) String() string { return "llm server ready" case ServerStatusNoSlotsAvailable: return "llm busy - no slots available" + case ServerStatusLaunched: + return "llm server launched" case ServerStatusLoadingModel: return "llm server loading model" case ServerStatusNotResponding: @@ -551,7 +1186,7 @@ func (s *llmServer) getServerStatus(ctx context.Context) (ServerStatus, error) { case ServerStatusLoadingModel: s.loadProgress = ssr.Progress return ssr.Status, nil - case ServerStatusReady, ServerStatusNoSlotsAvailable: + case ServerStatusLaunched, ServerStatusReady, ServerStatusNoSlotsAvailable: return ssr.Status, nil default: return ssr.Status, fmt.Errorf("server error: %+v", ssr) @@ -591,7 +1226,6 @@ func (s *llmServer) Ping(ctx context.Context) error { } func (s *llmServer) WaitUntilRunning(ctx context.Context) error { - start := time.Now() stallDuration := envconfig.LoadTimeout() // If no progress happens stallTimer := time.Now().Add(stallDuration) // give up if we stall @@ -633,8 +1267,7 @@ func (s *llmServer) WaitUntilRunning(ctx context.Context) error { } switch status { case ServerStatusReady: - s.loadDuration = time.Since(start) - slog.Info(fmt.Sprintf("llama runner started in %0.2f seconds", s.loadDuration.Seconds())) + slog.Info(fmt.Sprintf("llama runner started in %0.2f seconds", time.Since(s.loadStart).Seconds())) return nil default: lastStatus = status @@ -1044,15 +1677,15 @@ func (s *llmServer) Close() error { return nil } -func (s *llmServer) EstimatedVRAM() uint64 { +func (s *llamaServer) VRAMSize() uint64 { return s.estimate.VRAMSize } -func (s *llmServer) EstimatedTotal() uint64 { +func (s *llamaServer) TotalSize() uint64 { return s.estimate.TotalSize } -func (s *llmServer) EstimatedVRAMByGPU(gpuID string) uint64 { +func (s *llamaServer) VRAMByGPU(gpuID string) uint64 { for i, gpu := range s.gpus { if gpu.ID == gpuID { if i < len(s.estimate.GPUSizes) { @@ -1062,3 +1695,59 @@ func (s *llmServer) EstimatedVRAMByGPU(gpuID string) uint64 { } return 0 } + +func (s *ollamaServer) VRAMSize() uint64 { + if s.mem == nil { + return 0 + } + + var mem uint64 + + for _, g := range s.mem.GPUs { + mem += g.Allocated() + } + + // Some elements are always on CPU. However, if we have allocated all layers + // on the GPU then include the CPU components as well, to represent complete offloading. + noCPULayers := true + for i := range s.mem.CPU.Weights { + if s.mem.CPU.Weights[i].Size != 0 || s.mem.CPU.Cache[i].Size != 0 { + noCPULayers = false + break + } + } + if noCPULayers { + mem += s.mem.InputWeights.Size + mem += s.mem.CPU.Graph.Size + } + + return mem +} + +func (s *ollamaServer) TotalSize() uint64 { + if s.mem == nil { + return 0 + } + + mem := s.mem.InputWeights.Size + mem += s.mem.CPU.Allocated() + for _, g := range s.mem.GPUs { + mem += g.Allocated() + } + + return mem +} + +func (s *ollamaServer) VRAMByGPU(gpuID string) uint64 { + if s.mem == nil { + return 0 + } + + for _, g := range s.mem.GPUs { + if g.ID == gpuID { + return g.Allocated() + } + } + + return 0 +} diff --git a/llm/server_test.go b/llm/server_test.go index b6a8705e5..4eed82bce 100644 --- a/llm/server_test.go +++ b/llm/server_test.go @@ -8,9 +8,178 @@ import ( "testing" "github.com/ollama/ollama/api" + "github.com/ollama/ollama/discover" + "github.com/ollama/ollama/format" + "github.com/ollama/ollama/ml" "golang.org/x/sync/semaphore" ) +func TestLLMServerFitGPU(t *testing.T) { + type gpu struct { + library string + free int + } + + tests := []struct { + name string + gpus []gpu + layers []int + numGPU int + requireFull bool + expected ml.GPULayersList + expectedErr error + }{ + { + name: "No GPU", + layers: []int{50 * format.MebiByte, 50 * format.MebiByte, 50 * format.MebiByte}, + numGPU: -1, + expected: ml.GPULayersList{}, + }, + { + name: "Full single GPU", + gpus: []gpu{{free: 256 * format.MebiByte}}, + layers: []int{50 * format.MebiByte, 50 * format.MebiByte, 50 * format.MebiByte}, + numGPU: -1, + expected: ml.GPULayersList{{ID: "gpu0", Layers: []int{0, 1, 2}}}, + }, + { + name: "Partial single GPU", + gpus: []gpu{{free: 256 * format.MebiByte}}, + layers: []int{100 * format.MebiByte, 100 * format.MebiByte, 100 * format.MebiByte, 100 * format.MebiByte}, + numGPU: -1, + expected: ml.GPULayersList{{ID: "gpu0", Layers: []int{1, 2}}}, + }, + { + name: "Single GPU with numGPU 1", + gpus: []gpu{{free: 256 * format.MebiByte}}, + layers: []int{50 * format.MebiByte, 50 * format.MebiByte, 50 * format.MebiByte}, + numGPU: 1, + expected: ml.GPULayersList{{ID: "gpu0", Layers: []int{1}}}, + }, + { + name: "Single GPU with numGPU 0", + gpus: []gpu{{free: 256 * format.MebiByte}}, + layers: []int{50 * format.MebiByte, 50 * format.MebiByte, 50 * format.MebiByte}, + numGPU: 0, + expected: ml.GPULayersList{}, + }, + { + name: "Single GPU with numGPU 999", + gpus: []gpu{{free: 256 * format.MebiByte}}, + layers: []int{100 * format.MebiByte, 100 * format.MebiByte, 100 * format.MebiByte, 100 * format.MebiByte}, + numGPU: 999, + expected: ml.GPULayersList{{ID: "gpu0", Layers: []int{0, 1, 2, 3}}}, + }, + { + name: "Multi GPU fits on one", + gpus: []gpu{{free: 128 * format.MebiByte}, {free: 256 * format.MebiByte}}, + layers: []int{50 * format.MebiByte, 50 * format.MebiByte, 50 * format.MebiByte}, + numGPU: -1, + expected: ml.GPULayersList{{ID: "gpu1", Layers: []int{0, 1, 2}}}, + }, + { + name: "Multi GPU split", + gpus: []gpu{{free: 128 * format.MebiByte}, {free: 256 * format.MebiByte}}, + layers: []int{256 * format.MebiByte, 50 * format.MebiByte, 50 * format.MebiByte}, + numGPU: -1, + expected: ml.GPULayersList{{ID: "gpu1", Layers: []int{0}}, {ID: "gpu0", Layers: []int{1, 2}}}, + }, + { + name: "Multi GPU partial", + gpus: []gpu{{free: 128 * format.MebiByte}, {free: 256 * format.MebiByte}}, + layers: []int{256 * format.MebiByte, 256 * format.MebiByte, 50 * format.MebiByte}, + numGPU: -1, + expected: ml.GPULayersList{{ID: "gpu1", Layers: []int{1}}}, + }, + { + name: "Multi GPU numGPU 1", + gpus: []gpu{{free: 128 * format.MebiByte}, {free: 256 * format.MebiByte}}, + layers: []int{50 * format.MebiByte, 50 * format.MebiByte, 50 * format.MebiByte}, + numGPU: 1, + expected: ml.GPULayersList{{ID: "gpu1", Layers: []int{1}}}, + }, + { + name: "Multi GPU numGPU 2", + gpus: []gpu{{free: 128 * format.MebiByte}, {free: 256 * format.MebiByte}}, + layers: []int{256 * format.MebiByte, 50 * format.MebiByte, 50 * format.MebiByte}, + numGPU: 2, + expected: ml.GPULayersList{{ID: "gpu1", Layers: []int{0}}, {ID: "gpu0", Layers: []int{1}}}, + }, + { + name: "Multi GPU numGPU 999", + gpus: []gpu{{free: 128 * format.MebiByte}, {free: 256 * format.MebiByte}}, + layers: []int{256 * format.MebiByte, 256 * format.MebiByte, 50 * format.MebiByte}, + numGPU: 999, + expected: ml.GPULayersList{{ID: "gpu1", Layers: []int{0, 1}}, {ID: "gpu0", Layers: []int{2}}}, + }, + { + name: "Multi GPU different libraries", + gpus: []gpu{{library: "cuda", free: 128 * format.MebiByte}, {library: "rocm", free: 256 * format.MebiByte}}, + layers: []int{128 * format.MebiByte, 128 * format.MebiByte, 50 * format.MebiByte}, + numGPU: -1, + expected: ml.GPULayersList{{ID: "gpu1", Layers: []int{0, 1}}}, + }, + { + name: "requireFull", + gpus: []gpu{{free: 256 * format.MebiByte}}, + layers: []int{100 * format.MebiByte, 100 * format.MebiByte, 100 * format.MebiByte, 100 * format.MebiByte}, + numGPU: -1, + requireFull: true, + expectedErr: ErrLoadRequiredFull, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + var systemInfo discover.SystemInfo + systemInfo.System.TotalMemory = format.GibiByte + systemInfo.System.FreeMemory = 512 * format.MebiByte + systemInfo.System.FreeSwap = 256 * format.MebiByte + + gpus := make(discover.GpuInfoList, len(tt.gpus)) + for i := range tt.gpus { + gpus[i].ID = fmt.Sprintf("gpu%d", i) + gpus[i].Library = tt.gpus[i].library + gpus[i].FreeMemory = uint64(tt.gpus[i].free) + } + + s := &ollamaServer{ + llmServer: llmServer{ + totalLayers: uint64(len(tt.layers)), + options: api.Options{ + Runner: api.Runner{ + NumGPU: tt.numGPU, + }, + }, + }, + } + + s.mem = &ml.BackendMemory{CPU: ml.DeviceMemory{ + Weights: make([]ml.Memory, s.totalLayers), + Cache: make([]ml.Memory, s.totalLayers), + }, GPUs: make([]ml.DeviceMemory, len(gpus))} + + for i := range tt.layers { + s.mem.CPU.Weights[i].Size = uint64(tt.layers[i]) + } + + for i := range s.mem.GPUs { + s.mem.GPUs[i].ID = fmt.Sprintf("gpu%d", i) + s.mem.GPUs[i].Weights = make([]ml.Memory, s.totalLayers) + s.mem.GPUs[i].Cache = make([]ml.Memory, s.totalLayers) + } + + gpuLayers, err := s.createLayout(systemInfo, gpus, s.mem, tt.requireFull, 0) + if err != tt.expectedErr { + t.Fatalf("fitGPU returned error: %v", err) + } + if gpuLayers.Hash() != tt.expected.Hash() { + t.Errorf("fitGPU assigned %v, want %v", gpuLayers, tt.expected) + } + }) + } +} + func TestLLMServerCompletionFormat(t *testing.T) { // This test was written to fix an already deployed issue. It is a bit // of a mess, and but it's good enough, until we can refactoring the diff --git a/ml/backend.go b/ml/backend.go index 3eb84c726..638a05d14 100644 --- a/ml/backend.go +++ b/ml/backend.go @@ -5,12 +5,14 @@ import ( "context" "encoding/binary" "fmt" + "hash/maphash" "log/slog" "math" "slices" "strconv" "strings" + "github.com/ollama/ollama/format" "github.com/ollama/ollama/fs" ) @@ -58,19 +60,89 @@ type CacheConfig struct { MaskBatchPadding int } +// GPULayers is a set of layers to be allocated on a single GPU +type GPULayers struct { + // ID is the identifier of the GPU, as reported in DeviceMemory + ID string + + // Layers is a set of layer indicies to load + Layers []int +} + +func (g GPULayers) String() string { + if len(g.Layers) == 0 { + return "" + } + + slices.Sort(g.Layers) + + contiguous := true + base := g.Layers[0] + for i := range g.Layers { + if g.Layers[i] != base+i { + contiguous = false + break + } + } + + if contiguous { + return fmt.Sprintf("ID:%v Layers:%v(%v..%v)", g.ID, len(g.Layers), g.Layers[0], g.Layers[len(g.Layers)-1]) + } else { + return fmt.Sprintf("ID:%v Layers:%v%v", g.ID, len(g.Layers), g.Layers) + } +} + +// GPULayersList is a set of layer allocations across multiple GPUs +type GPULayersList []GPULayers + +func (l GPULayersList) String() string { + if l.Sum() > 0 { + return fmt.Sprintf("%v%v", l.Sum(), []GPULayers(l)) + } else { + return fmt.Sprintf("%v", []GPULayers(l)) + } +} + +// Sum is the total number of layers assigned across all GPUs +func (l GPULayersList) Sum() int { + var sum int + + for _, g := range l { + sum += len(g.Layers) + } + + return sum +} + +var h maphash.Hash + +// Hash is an identifier of this layer assignment +func (l GPULayersList) Hash() uint64 { + h.Reset() + for _, g := range l { + if len(g.Layers) > 0 { + h.WriteString(g.ID) + for _, l := range g.Layers { + binary.Write(&h, binary.NativeEndian, int64(l)) + } + } + } + + return h.Sum64() +} + // BackendParams controls how the backend loads and executes models type BackendParams struct { + // AllocMemory causes the backend to allocate memory for the model. If + // false, this is only being used for discovering the required amount of + // memory and cannot load the model for running. + AllocMemory bool + // NumThreads sets the number of threads to use if running on the CPU NumThreads int - // MainGPU is the index of the primary GPU to use - MainGPU int - - // NumGPULayers is the number of layers to offload to GPUs - NumGPULayers int - - // TensorSplit is the fraction of the model to offload to each GPU - TensorSplit []float32 + // GPULayers is the set of layers to offload to GPUs + GPULayers GPULayersList // FlashAttention indicates that we should use a fused flash attention kernel FlashAttention bool @@ -141,6 +213,28 @@ type DeviceMemory struct { Graph Memory } +// Allocated returns the total size of the memory that has been successfully +// allocated on this device +func (m DeviceMemory) Allocated() uint64 { + var mem uint64 + + for _, w := range m.Weights { + if w.Status == Allocated { + mem += w.Size + } + } + for _, c := range m.Cache { + if c.Status == Allocated { + mem += c.Size + } + } + if m.Graph.Status == Allocated { + mem += m.Graph.Size + } + + return mem +} + func memoryPresent(mem []Memory) bool { return slices.ContainsFunc(mem, func(m Memory) bool { return m.Size != 0 }) } @@ -197,6 +291,58 @@ func (m BackendMemory) LogValue() slog.Value { return slog.GroupValue(attrs...) } +func sumMemory(mem []Memory) uint64 { + var sum uint64 + + for _, m := range mem { + sum += m.Size + } + + return sum +} + +// Log prints a high level summary of the memory (allocated or not) +func (m BackendMemory) Log(level slog.Level) { + var total uint64 + + for _, gpu := range m.GPUs { + if sum := sumMemory(gpu.Weights); sum > 0 { + slog.Log(context.TODO(), level, "model weights", "device", gpu.Name, "size", format.HumanBytes2(sum)) + total += sum + } + } + if sum := m.InputWeights.Size + sumMemory(m.CPU.Weights); sum > 0 { + slog.Log(context.TODO(), level, "model weights", "device", m.CPU.Name, "size", format.HumanBytes2(sum)) + total += sum + } + + for _, gpu := range m.GPUs { + if sum := sumMemory(gpu.Cache); sum > 0 { + slog.Log(context.TODO(), level, "kv cache", "device", gpu.Name, "size", format.HumanBytes2(sum)) + total += sum + } + } + if sum := sumMemory(m.CPU.Cache); sum > 0 { + slog.Log(context.TODO(), level, "kv cache", "device", m.CPU.Name, "size", format.HumanBytes2(sum)) + total += sum + } + + for _, gpu := range m.GPUs { + if sum := gpu.Graph.Size; sum > 0 { + slog.Log(context.TODO(), level, "compute graph", "device", gpu.Name, "size", format.HumanBytes2(sum)) + total += sum + } + } + if sum := m.CPU.Graph.Size; sum > 0 { + slog.Log(context.TODO(), level, "compute graph", "device", m.CPU.Name, "size", format.HumanBytes2(sum)) + total += sum + } + + if total > 0 { + slog.Log(context.TODO(), level, "total memory", "size", format.HumanBytes2(total)) + } +} + var backends = make(map[string]func(string, BackendParams) (Backend, error)) func RegisterBackend(name string, f func(string, BackendParams) (Backend, error)) { diff --git a/ml/backend/ggml/ggml.go b/ml/backend/ggml/ggml.go index d64e27fa7..f8121cc53 100644 --- a/ml/backend/ggml/ggml.go +++ b/ml/backend/ggml/ggml.go @@ -10,6 +10,7 @@ import "C" import ( "context" + "errors" "fmt" "io" "log/slog" @@ -62,12 +63,21 @@ var initDevices = sync.OnceFunc(func() { } }) +type layerDevice struct { + d C.ggml_backend_dev_t + bt C.ggml_backend_buffer_type_t +} + type Backend struct { // modelPath is the location of the model data modelPath string meta *fsggml.GGML + // allocMemory means that memory should be allocated for tensors and not + // just a dry run + allocMemory bool + // tensorLoadTargets maps from the name of the tensor in the file // to the name that is used by the model definition tensorLoadTargets map[string][]string @@ -78,11 +88,14 @@ type Backend struct { tensors map[string]*C.struct_ggml_tensor - // input is the backend used for inputs + // input is the backend buffer type used for inputs input C.ggml_backend_buffer_type_t + // output is the backend device used for outputs + output C.ggml_backend_dev_t + // layers is the backend used for repeating layers - layers map[int]C.ggml_backend_buffer_type_t + layers map[int]layerDevice // requiredMemory is the cumulative memory allocations needed by the backend requiredMemory *ml.BackendMemory @@ -99,6 +112,8 @@ type Backend struct { weightBuffers map[*C.struct_ggml_context]C.ggml_backend_buffer_t } +var once sync.Once + func New(modelPath string, params ml.BackendParams) (ml.Backend, error) { r, err := os.Open(modelPath) if err != nil { @@ -111,15 +126,17 @@ func New(modelPath string, params ml.BackendParams) (ml.Backend, error) { return nil, err } - slog.Info( - "", - "architecture", meta.KV().Architecture(), - "file_type", meta.KV().FileType(), - "name", meta.KV().String("general.name"), - "description", meta.KV().String("general.description"), - "num_tensors", len(meta.Tensors().Items()), - "num_key_values", len(meta.KV()), - ) + once.Do(func() { + slog.Info( + "", + "architecture", meta.KV().Architecture(), + "file_type", meta.KV().FileType(), + "name", meta.KV().String("general.name"), + "description", meta.KV().String("general.description"), + "num_tensors", len(meta.Tensors().Items()), + "num_key_values", len(meta.KV()), + ) + }) initDevices() @@ -139,7 +156,10 @@ func New(modelPath string, params ml.BackendParams) (ml.Backend, error) { switch C.ggml_backend_dev_type(d) { case C.GGML_BACKEND_DEVICE_TYPE_CPU, C.GGML_BACKEND_DEVICE_TYPE_ACCEL: - cpuDeviceBufferType.bts = append(cpuDeviceBufferType.bts, C.ggml_backend_dev_buffer_type(d)) + bt := C.ggml_backend_dev_buffer_type(d) + cpuDeviceBufferType.bts = append(cpuDeviceBufferType.bts, bt) + C.ggml_backend_buft_set_alloc(bt, C.bool(params.AllocMemory)) + btDeviceMemory[C.ggml_backend_dev_buffer_type(d)] = &requiredMemory.CPU } } @@ -160,6 +180,8 @@ func New(modelPath string, params ml.BackendParams) (ml.Backend, error) { d: d, bts: append([]C.ggml_backend_buffer_type_t{bt}, cpuDeviceBufferType.bts...), }) + C.ggml_backend_buft_set_alloc(bt, C.bool(params.AllocMemory)) + btDeviceMemory[bt] = &requiredMemory.GPUs[i] requiredMemory.GPUs[i].Name = C.GoString(C.ggml_backend_dev_name(d)) var props C.struct_ggml_backend_dev_props @@ -169,56 +191,25 @@ func New(modelPath string, params ml.BackendParams) (ml.Backend, error) { requiredMemory.GPUs[i].Cache = make([]ml.Memory, blocks+1) } - useDefaultSplit := true - for _, s := range params.TensorSplit { - if s != 0 { - useDefaultSplit = false - break - } - } - - // calculate splits - splits := make([]float32, len(gpus)) - if useDefaultSplit { - // default: split on free memory - for i := range splits { - var free, total C.size_t - C.ggml_backend_dev_memory(gpus[i], &free, &total) - splits[i] = float32(free) - } - } else { - splits = params.TensorSplit - } - - var sum float32 - // cumulative sum of all splits - for i := range splits { - sum += splits[i] - splits[i] = sum - } - - // normalize splits - for i := range splits { - splits[i] /= sum - } - // inputs always use cpu input := cpuDeviceBufferType - // define a range of gpu layers. anything outside of this range is assigned to the cpu - gpuRangeStart := max(0, blocks-params.NumGPULayers) - gpuRangeStop := min(gpuRangeStart+params.NumGPULayers, blocks+1) - assignLayer := func(i int) deviceBufferType { - if i < gpuRangeStart || i >= gpuRangeStop { - return cpuDeviceBufferType + assignLayer := func(layer int) deviceBufferType { + for _, p := range params.GPULayers { + for _, l := range p.Layers { + if l == layer { + for i := range requiredMemory.GPUs { + if requiredMemory.GPUs[i].ID == p.ID { + return gpuDeviceBufferTypes[i] + } + } + + return cpuDeviceBufferType + } + } } - index := slices.IndexFunc(splits, func(f float32) bool { return float32(i-gpuRangeStart)/float32(gpuRangeStop-gpuRangeStart) < f }) - if index < 0 || index >= len(gpuDeviceBufferTypes) { - return cpuDeviceBufferType - } - - return gpuDeviceBufferTypes[index] + return cpuDeviceBufferType } // repeating layers are assigned based on their index in reverse order, e.g. i / (block_count + 1) @@ -284,7 +275,9 @@ func New(modelPath string, params ml.BackendParams) (ml.Backend, error) { size := pad(C.ggml_backend_buft_get_alloc_size(bt, tt), C.ggml_backend_buft_get_alignment(bt)) if layer == -1 { // Assume that InputWeights can be allocated - they're always in system memory and can't be moved in any case - requiredMemory.InputWeights.Status = ml.Allocated + if params.AllocMemory { + requiredMemory.InputWeights.Status = ml.Allocated + } requiredMemory.InputWeights.Size += uint64(size) } else { btDeviceMemory[bt].Weights[layer].Size += uint64(size) @@ -355,12 +348,14 @@ func New(modelPath string, params ml.BackendParams) (ml.Backend, error) { } b := C.ggml_backend_alloc_ctx_tensors_from_buft(c, bt) - for i := range btDeviceMemory[bt].Weights { - if btDeviceMemory[bt].Weights[i].Size != 0 { - if b != nil { - btDeviceMemory[bt].Weights[i].Status = ml.Allocated - } else { - btDeviceMemory[bt].Weights[i].Status = ml.Failed + if params.AllocMemory { + for i := range btDeviceMemory[bt].Weights { + if btDeviceMemory[bt].Weights[i].Size != 0 { + if b != nil { + btDeviceMemory[bt].Weights[i].Status = ml.Allocated + } else { + btDeviceMemory[bt].Weights[i].Status = ml.Failed + } } } } @@ -381,28 +376,9 @@ func New(modelPath string, params ml.BackendParams) (ml.Backend, error) { bbs[c] = b } - // Mimic llama runner logs summarizing layers and memory - gpuLayers := 0 - for _, layer := range layers { - if C.ggml_backend_dev_type(layer.d) == C.GGML_BACKEND_DEVICE_TYPE_GPU { - gpuLayers++ - } - } - slog.Info(fmt.Sprintf("offloading %d repeating layers to GPU", gpuLayers)) - - switch C.ggml_backend_dev_type(output.d) { - case C.GGML_BACKEND_DEVICE_TYPE_CPU: - slog.Info("offloading output layer to CPU") - case C.GGML_BACKEND_DEVICE_TYPE_GPU: - slog.Info("offloading output layer to GPU") - gpuLayers++ - case C.GGML_BACKEND_DEVICE_TYPE_ACCEL: - slog.Info("offloading output layer to ACCEL") - } - slog.Info(fmt.Sprintf("offloaded %d/%d layers to GPU", gpuLayers, len(layers)+1)) - for bs := range maps.Values(bbs) { - slog.Info("model weights", "buffer", C.GoString(C.ggml_backend_buffer_name(bs)), "size", format.HumanBytes2(uint64(C.ggml_backend_buffer_get_size(bs)))) + slog.Log(context.TODO(), logutil.LevelTrace, "model weights", "buffer", C.GoString(C.ggml_backend_buffer_name(bs)), + "size", format.HumanBytes2(uint64(C.ggml_backend_buffer_get_size(bs)))) } // map tensor names to tensors for easy lookup later @@ -423,6 +399,13 @@ func New(modelPath string, params ml.BackendParams) (ml.Backend, error) { b := backends[d] bt := C.ggml_backend_get_default_buffer_type(b) + // Always include CPU as a fallback but otherwise, just use the devices where we assigned layers + if !slices.Contains(cpuDeviceBufferType.bts, bt) { + if c, ok := ctxs[bt]; !ok || C.ggml_get_first_tensor(c) == nil { + continue + } + } + deviceBufferTypes[d] = bt schedBackends = append(schedBackends, b) @@ -437,6 +420,7 @@ func New(modelPath string, params ml.BackendParams) (ml.Backend, error) { maxGraphNodes := max(8192, len(meta.Tensors().Items())*5) return &Backend{ modelPath: modelPath, + allocMemory: params.AllocMemory, flashAttention: params.FlashAttention, meta: meta, tensorLoadTargets: targets, @@ -452,10 +436,14 @@ func New(modelPath string, params ml.BackendParams) (ml.Backend, error) { schedBackends: schedBackends, schedBufts: schedBufts, input: deviceBufferTypes[input.d], - layers: func() map[int]C.ggml_backend_buffer_type_t { - m := make(map[int]C.ggml_backend_buffer_type_t) + output: output.d, + layers: func() map[int]layerDevice { + m := make(map[int]layerDevice) for i, layer := range layers { - m[i] = deviceBufferTypes[layer.d] + m[i] = layerDevice{ + d: layer.d, + bt: deviceBufferTypes[layer.d], + } } return m }(), @@ -484,6 +472,30 @@ func (b *Backend) Close() { } func (b *Backend) Load(ctx context.Context, progress func(float32)) error { + if !b.allocMemory { + return errors.New("cannot load model without memory allocation") + } + + // Mimic llama runner logs summarizing layers and memory + gpuLayers := 0 + for layer := range maps.Values(b.layers) { + if C.ggml_backend_dev_type(layer.d) == C.GGML_BACKEND_DEVICE_TYPE_GPU { + gpuLayers++ + } + } + slog.Info(fmt.Sprintf("offloading %d repeating layers to GPU", gpuLayers)) + + switch C.ggml_backend_dev_type(b.output) { + case C.GGML_BACKEND_DEVICE_TYPE_CPU: + slog.Info("offloading output layer to CPU") + case C.GGML_BACKEND_DEVICE_TYPE_GPU: + slog.Info("offloading output layer to GPU") + gpuLayers++ + case C.GGML_BACKEND_DEVICE_TYPE_ACCEL: + slog.Info("offloading output layer to ACCEL") + } + slog.Info(fmt.Sprintf("offloaded %d/%d layers to GPU", gpuLayers, len(b.layers)+1)) + var doneBytes atomic.Uint64 totalBytes := uint64(b.meta.Length) - b.meta.Tensors().Offset @@ -730,11 +742,11 @@ func (c *Context) Input() ml.Context { } func (c *Context) Layer(i int) ml.Context { - if buft, ok := c.b.layers[i]; ok { + if layer, ok := c.b.layers[i]; ok { return &Context{ b: c.b, ctx: c.ctx, - buft: buft, + buft: layer.bt, allocatedBuffers: c.allocatedBuffers, maxGraphNodes: c.maxGraphNodes, layer: i, @@ -792,14 +804,16 @@ func (c *Context) Reserve() { graph := &c.b.btDeviceMemory[c.b.schedBufts[i]].Graph graph.Size += uint64(bufferStatus.size) - if bufferStatus.allocated && graph.Status != ml.Failed { - graph.Status = ml.Allocated - } else { - graph.Status = ml.Failed + if c.b.allocMemory { + if bufferStatus.allocated && graph.Status != ml.Failed { + graph.Status = ml.Allocated + } else { + graph.Status = ml.Failed + } } - slog.Info("compute graph", "backend", C.GoString(C.ggml_backend_name(c.b.schedBackends[i])), "buffer_type", C.GoString(C.ggml_backend_buft_name(c.b.schedBufts[i])), - "size", format.HumanBytes2(uint64(bufferStatus.size))) + slog.Log(context.TODO(), logutil.LevelTrace, "compute graph", "backend", C.GoString(C.ggml_backend_name(c.b.schedBackends[i])), + "buffer_type", C.GoString(C.ggml_backend_buft_name(c.b.schedBufts[i])), "size", format.HumanBytes2(uint64(bufferStatus.size))) } if !reserved { @@ -868,10 +882,12 @@ func (c *Context) newTensor(dtype ml.DType, shape []int) ml.Tensor { cache := &c.b.btDeviceMemory[c.buft].Cache[c.layer] cache.Size += uint64(size) - if b != nil { - cache.Status = ml.Allocated - } else { - cache.Status = ml.Failed + if c.b.allocMemory { + if b != nil { + cache.Status = ml.Allocated + } else { + cache.Status = ml.Failed + } } } @@ -890,7 +906,9 @@ func (c *Context) Empty(dtype ml.DType, shape ...int) ml.Tensor { func (c *Context) Zeros(dtype ml.DType, shape ...int) ml.Tensor { t := c.newTensor(dtype, shape) - C.ggml_set_zero(t.(*Tensor).t) + if c.b.allocMemory { + C.ggml_set_zero(t.(*Tensor).t) + } return t } @@ -915,7 +933,7 @@ func (c *Context) FromFloatSlice(s []float32, shape ...int) ml.Tensor { t := c.newTensor(ml.DTypeF32, shape) - if len(s) > 0 { + if c.b.allocMemory && len(s) > 0 { C.ggml_backend_tensor_set(t.(*Tensor).t, unsafe.Pointer(&s[0]), 0, C.ggml_nbytes(t.(*Tensor).t)) } @@ -927,7 +945,7 @@ func (c *Context) FromIntSlice(s []int32, shape ...int) ml.Tensor { t := c.newTensor(ml.DTypeI32, shape) - if len(s) > 0 { + if c.b.allocMemory && len(s) > 0 { C.ggml_backend_tensor_set(t.(*Tensor).t, unsafe.Pointer(&s[0]), 0, C.ggml_nbytes(t.(*Tensor).t)) } @@ -1550,7 +1568,7 @@ func (t *Tensor) Clamp(ctx ml.Context, min, max float32) ml.Tensor { func (c Context) FromBytes(dtype ml.DType, s []uint8, shape ...int) ml.Tensor { // Unchecked to handle quantized types t := c.newTensor(dtype, shape) - if len(s) > 0 { + if c.b.allocMemory && len(s) > 0 { C.ggml_backend_tensor_set(t.(*Tensor).t, unsafe.Pointer(&s[0]), 0, C.ggml_nbytes(t.(*Tensor).t)) } diff --git a/ml/backend/ggml/ggml/src/ggml-backend-reg.cpp b/ml/backend/ggml/ggml/src/ggml-backend-reg.cpp index f1e9c1801..3040b2aa1 100644 --- a/ml/backend/ggml/ggml/src/ggml-backend-reg.cpp +++ b/ml/backend/ggml/ggml/src/ggml-backend-reg.cpp @@ -581,16 +581,8 @@ void ggml_backend_load_all_from_path(const char * dir_path) { ggml_backend_load_best("blas", silent, dir_path); ggml_backend_load_best("cann", silent, dir_path); - - // Avoid mixed hip+cuda configurations - const char * hip_devices = std::getenv("HIP_VISIBLE_DEVICES"); - const char * rocr_devices = std::getenv("ROCR_VISIBLE_DEVICES"); - if (!hip_devices && !rocr_devices) { - ggml_backend_load_best("cuda", silent, dir_path); - } else { - ggml_backend_load_best("hip", silent, dir_path); - } - + ggml_backend_load_best("cuda", silent, dir_path); + ggml_backend_load_best("hip", silent, dir_path); ggml_backend_load_best("metal", silent, dir_path); ggml_backend_load_best("rpc", silent, dir_path); ggml_backend_load_best("sycl", silent, dir_path); diff --git a/runner/llamarunner/runner.go b/runner/llamarunner/runner.go index 7aa9b96a2..791492bbb 100644 --- a/runner/llamarunner/runner.go +++ b/runner/llamarunner/runner.go @@ -12,7 +12,6 @@ import ( "net/http" "os" "regexp" - "runtime" "strconv" "strings" "sync" @@ -216,6 +215,12 @@ func (s *Server) inputs(prompt string, images []llm.ImageData) ([]input, error) } type Server struct { + // modelPath is the location of the model to be loaded + modelPath string + + // loadMu prevents more than one load attempt from occurring at a time + loadMu sync.Mutex + // is the server ready to process requests? // protects access to model and image ready sync.WaitGroup @@ -723,21 +728,12 @@ func (s *Server) health(w http.ResponseWriter, r *http.Request) { } } -type multiLPath []string - -func (m *multiLPath) Set(value string) error { - *m = append(*m, value) - return nil -} - -func (m *multiLPath) String() string { - return strings.Join(*m, ", ") -} - +// loadModel allocates memory based on the given parameters and loads the weights. The +// memory allocated is worst case for text models but not for vision. func (s *Server) loadModel( params llama.ModelParams, mpath string, - lpath multiLPath, + lpath []string, ppath string, kvSize int, kvCacheType string, @@ -757,12 +753,10 @@ func (s *Server) loadModel( panic(err) } - if lpath.String() != "" { - for _, path := range lpath { - err := s.model.ApplyLoraFromFile(s.lc, path, 1.0, threads) - if err != nil { - panic(err) - } + for _, path := range lpath { + err := s.model.ApplyLoraFromFile(s.lc, path, 1.0, threads) + if err != nil { + panic(err) } } @@ -783,26 +777,81 @@ func (s *Server) loadModel( s.ready.Done() } +// load is the handler called by the Ollama server to process different +// load operations +func (s *Server) load(w http.ResponseWriter, r *http.Request) { + s.loadMu.Lock() + defer s.loadMu.Unlock() + + w.Header().Set("Content-Type", "application/json") + + if s.status != llm.ServerStatusLaunched { + http.Error(w, "model already loaded", http.StatusInternalServerError) + return + } + + var req llm.LoadRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "bad request", http.StatusBadRequest) + return + } + + slog.Info("load", "request", req) + + switch req.Operation { + // LoadOperationFit and LoadOperationAlloc have no meaning here - just return a successful response + + case llm.LoadOperationCommit: + s.batchSize = req.BatchSize + s.parallel = req.Parallel + s.seqs = make([]*Sequence, s.parallel) + s.seqsSem = semaphore.NewWeighted(int64(s.parallel)) + + gpuIDs := llama.EnumerateGPUs() + tensorSplit := make([]float32, len(gpuIDs)) + numGPU := 0 + for i := range gpuIDs { + for _, layers := range req.GPULayers { + if gpuIDs[i] == layers.ID { + tensorSplit[i] = float32(len(layers.Layers)) + numGPU += len(layers.Layers) + } + } + } + + params := llama.ModelParams{ + NumGpuLayers: numGPU, + MainGpu: req.MainGPU, + UseMmap: req.UseMmap && len(req.LoraPath) == 0, + TensorSplit: tensorSplit, + Progress: func(progress float32) { + s.progress = progress + }, + } + + s.status = llm.ServerStatusLoadingModel + go s.loadModel(params, s.modelPath, req.LoraPath, req.ProjectorPath, req.KvSize, req.KvCacheType, req.FlashAttention, req.NumThreads, req.MultiUserCache) + + case llm.LoadOperationClose: + // No-op for us + if err := json.NewEncoder(w).Encode(&llm.LoadResponse{}); err != nil { + http.Error(w, fmt.Sprintf("failed to encode response: %v", err), http.StatusInternalServerError) + } + return + } + + resp := llm.LoadResponse{Success: true} + if err := json.NewEncoder(w).Encode(&resp); err != nil { + http.Error(w, fmt.Sprintf("failed to encode response: %v", err), http.StatusInternalServerError) + return + } +} + func Execute(args []string) error { fs := flag.NewFlagSet("runner", flag.ExitOnError) mpath := fs.String("model", "", "Path to model binary file") - ppath := fs.String("mmproj", "", "Path to projector binary file") - parallel := fs.Int("parallel", 1, "Number of sequences to handle simultaneously") - batchSize := fs.Int("batch-size", 512, "Batch size") - nGpuLayers := fs.Int("n-gpu-layers", 0, "Number of layers to offload to GPU") - mainGpu := fs.Int("main-gpu", 0, "Main GPU") - flashAttention := fs.Bool("flash-attn", false, "Enable flash attention") - kvSize := fs.Int("ctx-size", 2048, "Context (or KV cache) size") - kvCacheType := fs.String("kv-cache-type", "", "quantization type for KV cache (default: f16)") port := fs.Int("port", 8080, "Port to expose the server on") - threads := fs.Int("threads", runtime.NumCPU(), "Number of threads to use during generation") _ = fs.Bool("verbose", false, "verbose output (default: disabled)") - noMmap := fs.Bool("no-mmap", false, "do not memory-map model (slower load but may reduce pageouts if not using mlock)") - tensorSplit := fs.String("tensor-split", "", "fraction of the model to offload to each GPU, comma-separated list of proportions") - multiUserCache := fs.Bool("multiuser-cache", false, "optimize input cache algorithm for multiple users") - - var lpaths multiLPath - fs.Var(&lpaths, "lora", "Path to lora layer file (can be specified multiple times)") fs.Usage = func() { fmt.Fprintf(fs.Output(), "Runner usage\n") @@ -817,35 +866,11 @@ func Execute(args []string) error { llama.BackendInit() server := &Server{ - batchSize: *batchSize, - parallel: *parallel, - seqs: make([]*Sequence, *parallel), - seqsSem: semaphore.NewWeighted(int64(*parallel)), - status: llm.ServerStatusLoadingModel, - } - - var tensorSplitFloats []float32 - if *tensorSplit != "" { - splits := strings.Split(*tensorSplit, ",") - tensorSplitFloats = make([]float32, len(splits)) - for i, s := range splits { - f, _ := strconv.ParseFloat(s, 32) - tensorSplitFloats[i] = float32(f) - } - } - - params := llama.ModelParams{ - NumGpuLayers: *nGpuLayers, - MainGpu: *mainGpu, - UseMmap: !*noMmap && lpaths.String() == "", - TensorSplit: tensorSplitFloats, - Progress: func(progress float32) { - server.progress = progress - }, + modelPath: *mpath, + status: llm.ServerStatusLaunched, } server.ready.Add(1) - go server.loadModel(params, *mpath, lpaths, *ppath, *kvSize, *kvCacheType, *flashAttention, *threads, *multiUserCache) server.cond = sync.NewCond(&server.mu) @@ -863,6 +888,7 @@ func Execute(args []string) error { defer listener.Close() mux := http.NewServeMux() + mux.HandleFunc("POST /load", server.load) mux.HandleFunc("/embedding", server.embeddings) mux.HandleFunc("/completion", server.completion) mux.HandleFunc("/health", server.health) diff --git a/runner/ollamarunner/runner.go b/runner/ollamarunner/runner.go index cebe30def..2f41f68f2 100644 --- a/runner/ollamarunner/runner.go +++ b/runner/ollamarunner/runner.go @@ -14,6 +14,7 @@ import ( "net" "net/http" "os" + "reflect" "regexp" "runtime" "strconv" @@ -259,6 +260,16 @@ func (s *Server) inputs(prompt string, images []llm.ImageData) ([]input.Input, [ } type Server struct { + // modelPath is the location of the model to be loaded + modelPath string + + // loadMu prevents more than one load attempt from occurring at a time + loadMu sync.Mutex + + // lastLoad is the load request from the previous load attempt. Used to + // detect if we can reuse an existing memory allocation. + lastLoad llm.LoadRequest + // is the server ready to process requests? // protects access to model and image ready sync.WaitGroup @@ -720,17 +731,6 @@ func (s *Server) health(w http.ResponseWriter, r *http.Request) { } } -type multiLPath []string - -func (m *multiLPath) Set(value string) error { - *m = append(*m, value) - return nil -} - -func (m *multiLPath) String() string { - return strings.Join(*m, ", ") -} - func (s *Server) reserveWorstCaseGraph() error { ctx := s.model.Backend().NewContext() defer ctx.Close() @@ -828,15 +828,28 @@ func (s *Server) reserveWorstCaseGraph() error { return nil } -func (s *Server) initModel( +// allocModel pre-allocates the maximum needed memory for a model +// based on the given parameters +func (s *Server) allocModel( mpath string, params ml.BackendParams, - lpath multiLPath, + loraPath []string, parallel int, kvCacheType string, kvSize int, multiUserCache bool, -) error { +) (panicErr error) { + // Convert memory allocation panics to errors + defer func() { + if r := recover(); r != nil { + if err, ok := r.(error); ok { + panicErr = err + } else { + panic(r) + } + } + }() + var err error s.model, err = model.New(mpath, params) if err != nil { @@ -844,7 +857,7 @@ func (s *Server) initModel( } // TODO(jessegross): LoRA loading - if lpath.String() != "" { + if len(loraPath) > 0 { return errors.New("loras are not yet implemented") } @@ -865,63 +878,122 @@ func (s *Server) initModel( return s.reserveWorstCaseGraph() } -func (s *Server) load( - ctx context.Context, - mpath string, - params ml.BackendParams, - lpath multiLPath, - parallel int, - kvCacheType string, - kvSize int, - multiUserCache bool, -) { - err := s.initModel(mpath, params, lpath, parallel, kvCacheType, kvSize, multiUserCache) - if err != nil { - var noMem ml.ErrNoMem - if errors.As(err, &noMem) { - // We can't yet handle this but in the future we will - s.cache.Close() - if s.model != nil { - s.model.Backend().Close() - } - } - - panic(err) +// closeModel frees all memory associated with a model +func (s *Server) closeModel() { + s.cache.Close() + s.cache = nil + if s.model != nil { + s.model.Backend().Close() + s.model = nil } +} - slog.Debug("memory", "allocated", s.model.Backend().BackendMemory()) - - err = s.model.Backend().Load(ctx, +// loadModel loads the weights for a model. The memory must already +// have been allocated with allocModel +func (s *Server) loadModel() { + err := s.model.Backend().Load(context.TODO(), func(progress float32) { s.progress = progress }) if err != nil { - panic(err) + panic(fmt.Errorf("failed to load model: %v", err)) } s.status = llm.ServerStatusReady s.ready.Done() } +// load is the handler called by the Ollama server to process different +// load operations +func (s *Server) load(w http.ResponseWriter, r *http.Request) { + s.loadMu.Lock() + defer s.loadMu.Unlock() + + w.Header().Set("Content-Type", "application/json") + + if s.status != llm.ServerStatusLaunched { + http.Error(w, "model already loaded", http.StatusInternalServerError) + return + } + + var req llm.LoadRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "bad request", http.StatusBadRequest) + return + } + + slog.Info("load", "request", req) + + if req.Operation == llm.LoadOperationClose { + s.closeModel() + if err := json.NewEncoder(w).Encode(&llm.LoadResponse{}); err != nil { + http.Error(w, fmt.Sprintf("failed to encode response: %v", err), http.StatusInternalServerError) + } + return + } + + s.lastLoad.Operation = req.Operation + loadModel := s.model == nil || !reflect.DeepEqual(req, s.lastLoad) + + s.lastLoad = req + + if loadModel { + s.closeModel() + + params := ml.BackendParams{ + AllocMemory: req.Operation != llm.LoadOperationFit, + NumThreads: req.NumThreads, + GPULayers: req.GPULayers, + FlashAttention: req.FlashAttention, + } + + s.batchSize = req.BatchSize + + err := s.allocModel(s.modelPath, params, req.LoraPath, req.Parallel, req.KvCacheType, req.KvSize, req.MultiUserCache) + if err != nil { + s.closeModel() + + var noMem ml.ErrNoMem + if errors.As(err, &noMem) { + resp := llm.LoadResponse{Success: false, Memory: noMem.BackendMemory} + if err := json.NewEncoder(w).Encode(&resp); err != nil { + http.Error(w, fmt.Sprintf("failed to encode response: %v", err), http.StatusInternalServerError) + } + + return + } + + http.Error(w, fmt.Sprintf("failed to initialize model: %v", err), http.StatusInternalServerError) + return + } + } + + mem := s.model.Backend().BackendMemory() + + switch req.Operation { + case llm.LoadOperationFit: + // LoadOperationFit can't be used for anything else, so just close it + s.closeModel() + + // LoadOperationAlloc should stay open for future operations + + case llm.LoadOperationCommit: + s.status = llm.ServerStatusLoadingModel + go s.loadModel() + } + + resp := llm.LoadResponse{Success: true, Memory: mem} + if err := json.NewEncoder(w).Encode(&resp); err != nil { + http.Error(w, fmt.Sprintf("failed to encode response: %v", err), http.StatusInternalServerError) + return + } +} + func Execute(args []string) error { fs := flag.NewFlagSet("runner", flag.ExitOnError) mpath := fs.String("model", "", "Path to model binary file") - parallel := fs.Int("parallel", 1, "Number of sequences to handle simultaneously") - batchSize := fs.Int("batch-size", 512, "Batch size") - numGPULayers := fs.Int("n-gpu-layers", 0, "Number of layers to offload to GPU") - mainGPU := fs.Int("main-gpu", 0, "Main GPU") - flashAttention := fs.Bool("flash-attn", false, "Enable flash attention") - kvSize := fs.Int("ctx-size", 2048, "Context (or KV cache) size") - kvCacheType := fs.String("kv-cache-type", "", "quantization type for KV cache (default: f16)") port := fs.Int("port", 8080, "Port to expose the server on") - threads := fs.Int("threads", runtime.NumCPU(), "Number of threads to use during generation") _ = fs.Bool("verbose", false, "verbose output (default: disabled)") - _ = fs.Bool("no-mmap", false, "do not memory-map model (slower load but may reduce pageouts if not using mlock)") - tensorSplit := fs.String("tensor-split", "", "fraction of the model to offload to each GPU, comma-separated list of proportions") - multiUserCache := fs.Bool("multiuser-cache", false, "optimize input cache algorithm for multiple users") - - var lpaths multiLPath - fs.Var(&lpaths, "lora", "Path to lora layer file (can be specified multiple times)") fs.Usage = func() { fmt.Fprintf(fs.Output(), "Runner usage\n") @@ -933,39 +1005,17 @@ func Execute(args []string) error { slog.SetDefault(logutil.NewLogger(os.Stderr, envconfig.LogLevel())) slog.Info("starting ollama engine") + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + server := &Server{ - batchSize: *batchSize, - status: llm.ServerStatusLoadingModel, + modelPath: *mpath, + status: llm.ServerStatusLaunched, } server.cond = sync.NewCond(&server.mu) server.ready.Add(1) - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - // TODO(jessegross): Parameters that need to be implemented: - // no-mmap - - var tensorSplitFloats []float32 - if *tensorSplit != "" { - splits := strings.Split(*tensorSplit, ",") - tensorSplitFloats = make([]float32, len(splits)) - for i, s := range splits { - f, _ := strconv.ParseFloat(s, 32) - tensorSplitFloats[i] = float32(f) - } - } - - params := ml.BackendParams{ - NumThreads: *threads, - NumGPULayers: *numGPULayers, - MainGPU: *mainGPU, - TensorSplit: tensorSplitFloats, - FlashAttention: *flashAttention, - } - - go server.load(ctx, *mpath, params, lpaths, *parallel, *kvCacheType, *kvSize, *multiUserCache) go server.run(ctx) addr := "127.0.0.1:" + strconv.Itoa(*port) @@ -978,6 +1028,7 @@ func Execute(args []string) error { mux := http.NewServeMux() // TODO: support embeddings + mux.HandleFunc("POST /load", server.load) mux.HandleFunc("POST /embedding", func(w http.ResponseWriter, r *http.Request) { http.Error(w, "this model does not support embeddings", http.StatusNotImplemented) }) diff --git a/server/routes.go b/server/routes.go index 5d37c83a9..99b1b300a 100644 --- a/server/routes.go +++ b/server/routes.go @@ -1477,14 +1477,14 @@ func (s *Server) PsHandler(c *gin.Context) { mr := api.ProcessModelResponse{ Model: model.ShortName, Name: model.ShortName, - Size: int64(v.estimatedTotal), - SizeVRAM: int64(v.estimatedVRAM), + Size: int64(v.totalSize), + SizeVRAM: int64(v.vramSize), Digest: model.Digest, Details: modelDetails, ExpiresAt: v.expiresAt, } if v.Options != nil { - mr.ContextLength = v.Options.NumCtx / v.numParallel + mr.ContextLength = v.Options.NumCtx } // The scheduler waits to set expiresAt, so if a model is loading it's // possible that it will be set to the unix epoch. For those cases, just diff --git a/server/routes_generate_test.go b/server/routes_generate_test.go index 506071edf..a57975f16 100644 --- a/server/routes_generate_test.go +++ b/server/routes_generate_test.go @@ -77,12 +77,13 @@ func TestGenerateChat(t *testing.T) { getGpuFn: discover.GetGPUInfo, getCpuFn: discover.GetCPUInfo, reschedDelay: 250 * time.Millisecond, - loadFn: func(req *LlmRequest, _ *ggml.GGML, _ discover.GpuInfoList, _ int) { + loadFn: func(req *LlmRequest, _ *ggml.GGML, _ discover.GpuInfoList, _ bool) bool { // add small delay to simulate loading time.Sleep(time.Millisecond) req.successCh <- &runnerRef{ llama: &mock, } + return false }, }, } @@ -620,12 +621,13 @@ func TestGenerate(t *testing.T) { getGpuFn: discover.GetGPUInfo, getCpuFn: discover.GetCPUInfo, reschedDelay: 250 * time.Millisecond, - loadFn: func(req *LlmRequest, _ *ggml.GGML, _ discover.GpuInfoList, _ int) { + loadFn: func(req *LlmRequest, _ *ggml.GGML, _ discover.GpuInfoList, _ bool) bool { // add small delay to simulate loading time.Sleep(time.Millisecond) req.successCh <- &runnerRef{ llama: &mock, } + return false }, }, } diff --git a/server/routes_harmony_streaming_test.go b/server/routes_harmony_streaming_test.go index 1b86f84c1..b1ede4e39 100644 --- a/server/routes_harmony_streaming_test.go +++ b/server/routes_harmony_streaming_test.go @@ -277,10 +277,11 @@ func TestChatHarmonyParserStreamingRealtime(t *testing.T) { getGpuFn: discover.GetGPUInfo, getCpuFn: discover.GetCPUInfo, reschedDelay: 100 * time.Millisecond, - loadFn: func(req *LlmRequest, _ *ggml.GGML, _ discover.GpuInfoList, _ int) { + loadFn: func(req *LlmRequest, _ *ggml.GGML, _ discover.GpuInfoList, _ bool) bool { req.successCh <- &runnerRef{ llama: &mock, } + return false }, }, } @@ -427,10 +428,11 @@ func TestChatHarmonyParserStreamingSimple(t *testing.T) { getGpuFn: discover.GetGPUInfo, getCpuFn: discover.GetCPUInfo, reschedDelay: 100 * time.Millisecond, - loadFn: func(req *LlmRequest, _ *ggml.GGML, _ discover.GpuInfoList, _ int) { + loadFn: func(req *LlmRequest, _ *ggml.GGML, _ discover.GpuInfoList, _ bool) bool { req.successCh <- &runnerRef{ llama: &mock, } + return false }, }, } @@ -608,10 +610,11 @@ func TestChatHarmonyParserStreaming(t *testing.T) { getGpuFn: discover.GetGPUInfo, getCpuFn: discover.GetCPUInfo, reschedDelay: 250 * time.Millisecond, - loadFn: func(req *LlmRequest, _ *ggml.GGML, _ discover.GpuInfoList, _ int) { + loadFn: func(req *LlmRequest, _ *ggml.GGML, _ discover.GpuInfoList, _ bool) bool { req.successCh <- &runnerRef{ llama: &mock, } + return false }, }, } diff --git a/server/sched.go b/server/sched.go index 40e6e5f72..c501c0e85 100644 --- a/server/sched.go +++ b/server/sched.go @@ -28,7 +28,6 @@ type LlmRequest struct { ctx context.Context //nolint:containedctx model *Model opts api.Options - origNumCtx int // Track the initial ctx request sessionDuration *api.Duration successCh chan *runnerRef errCh chan error @@ -41,10 +40,17 @@ type Scheduler struct { expiredCh chan *runnerRef unloadedCh chan any - loaded map[string]*runnerRef + // loadedMu protects loaded and activeLoading loadedMu sync.Mutex - loadFn func(req *LlmRequest, f *ggml.GGML, gpus discover.GpuInfoList, numParallel int) + // activeLoading is the model that we are currently working on loading, + // including by evicting one or more other models. We can only load + // one model at a time but new requests to models that already loaded can + // happen in parallel + activeLoading llm.LlamaServer + loaded map[string]*runnerRef + + loadFn func(req *LlmRequest, f *ggml.GGML, gpus discover.GpuInfoList, requireFull bool) bool newServerFn func(gpus discover.GpuInfoList, model string, f *ggml.GGML, adapters []string, projectors []string, opts api.Options, numParallel int) (llm.LlamaServer, error) getGpuFn func() discover.GpuInfoList getCpuFn func() discover.GpuInfoList @@ -56,9 +62,6 @@ type Scheduler struct { // on a large GPU can cause stalling var defaultModelsPerGPU = 3 -// Default automatic value for parallel setting -var defaultParallel = 1 - var ErrMaxQueue = errors.New("server busy, please try again. maximum pending requests exceeded") func InitScheduler(ctx context.Context) *Scheduler { @@ -79,24 +82,36 @@ func InitScheduler(ctx context.Context) *Scheduler { } // context must be canceled to decrement ref count and release the runner -func (s *Scheduler) GetRunner(c context.Context, model *Model, opts api.Options, sessionDuration *api.Duration) (chan *runnerRef, chan error) { +func (s *Scheduler) GetRunner(c context.Context, m *Model, opts api.Options, sessionDuration *api.Duration) (chan *runnerRef, chan error) { if opts.NumCtx < 4 { opts.NumCtx = 4 } + if m.CheckCapabilities(model.CapabilityVision) == nil { + // multimodal models require at least 2048 context + opts.NumCtx = max(opts.NumCtx, 2048) + } + req := &LlmRequest{ ctx: c, - model: model, + model: m, opts: opts, sessionDuration: sessionDuration, - successCh: make(chan *runnerRef), + successCh: make(chan *runnerRef, 1), errCh: make(chan error, 1), } - select { - case s.pendingReqCh <- req: - default: - req.errCh <- ErrMaxQueue + s.loadedMu.Lock() + runner := s.loaded[req.model.ModelPath] + s.loadedMu.Unlock() + if runner != nil && !runner.needsReload(c, req) { + req.useLoadedRunner(runner, s.finishedReqCh) + } else { + select { + case s.pendingReqCh <- req: + default: + req.errCh <- ErrMaxQueue + } } return req.successCh, req.errCh } @@ -122,21 +137,11 @@ func (s *Scheduler) processPending(ctx context.Context) { case pending := <-s.pendingReqCh: // Block other requests until we get this pending request running pending.schedAttempts++ - if pending.origNumCtx == 0 { - pending.origNumCtx = pending.opts.NumCtx - } if pending.ctx.Err() != nil { slog.Debug("pending request cancelled or timed out, skipping scheduling") continue } - numParallel := int(envconfig.NumParallel()) - // `mllama` is a snowflake and uses an encoder cache which cannot be used with num_parallel > 1 - // ref: https://github.com/ollama/ollama/issues/4165 - if slices.Contains(pending.model.Config.ModelFamilies, "mllama") && numParallel != 1 { - numParallel = 1 - slog.Warn("mllama does not currently support parallel requests") - } for { var runnerToExpire *runnerRef @@ -195,84 +200,26 @@ func (s *Scheduler) processPending(ctx context.Context) { break } - // Embedding models should always be loaded with parallel=1 - if pending.model.CheckCapabilities(model.CapabilityCompletion) != nil { - numParallel = 1 - } + // Update free memory from currently loaded models + s.updateFreeSpace(gpus) - // Evaluate if the model will fit in the available system memory, or if we should unload a model first - if len(gpus) == 1 && gpus[0].Library == "cpu" { - // simplifying assumption of defaultParallel when in CPU mode - if numParallel <= 0 { - numParallel = defaultParallel - } - - pending.opts.NumCtx = pending.origNumCtx * numParallel - - if loadedCount == 0 { - slog.Debug("cpu mode with first model, loading") - s.loadFn(pending, ggml, gpus, numParallel) - break - } - runnerToExpire = s.maybeFindCPURunnerToUnload(pending, ggml, gpus) - if runnerToExpire == nil { - slog.Debug("cpu mode with available system memory or first model, loading") - s.loadFn(pending, ggml, gpus, numParallel) - break - } - // else we need to expire a runner - } else if loadedCount == 0 { + if loadedCount == 0 { // No models loaded. Load the model but prefer the best fit. slog.Debug("loading first model", "model", pending.model.ModelPath) - g := pickBestFullFitByLibrary(pending, ggml, gpus, &numParallel) - if g != nil { - gpus = g - } else { - // Only allow partial loads when this is the first model - gpus = pickBestPartialFitByLibrary(pending, ggml, gpus, &numParallel) - } - s.loadFn(pending, ggml, gpus, numParallel) + s.loadFn(pending, ggml, gpus, false) break } - if runnerToExpire == nil { - // More than one loaded model, so we have to see if the - // new one fits - // - // We want to avoid loading on any GPUs that have other - // models still loading on them to avoid potential races - // with VRAM consumption ramping up during load - availGpus := s.filterGPUsWithoutLoadingModels(gpus) + // More than one loaded model, so we have to see if the + // new one fits - // Update free memory from currently loaded models - s.updateFreeSpace(availGpus) - fitGpus := pickBestFullFitByLibrary(pending, ggml, availGpus, &numParallel) - if fitGpus != nil { - slog.Debug("new model fits with existing models, loading") - s.loadFn(pending, ggml, fitGpus, numParallel) - break - } - - // We couldn't find a set of GPUs to fully load the new - // model. If no other models are loading (both GPU lists - // are the same) then we need to unload another model to - // make room - if len(availGpus) < len(gpus) { - // There are other requests pending, and this one - // needs more time, so put it on the back of the - // queue so that we might satisfy other pending - // requests that aren't blocked - go func() { - // Process in a go routine to avoid deadlocking - // the scheduler if our queue is full - slog.Debug("delaying scheduling while other models finish loading", "attempts", pending.schedAttempts, "model", pending.model.ModelPath) - time.Sleep(s.reschedDelay) - s.pendingReqCh <- pending - }() - break - } - runnerToExpire = s.findRunnerToUnload() + needEvict := s.loadFn(pending, ggml, gpus, true) + if !needEvict { + slog.Debug("new model fits with existing models, loading") + break } + + runnerToExpire = s.findRunnerToUnload() } if runnerToExpire == nil { @@ -293,8 +240,6 @@ func (s *Scheduler) processPending(ctx context.Context) { } runnerToExpire.refMu.Unlock() // Wait for the unload to happen - // Note: at this point we're queueing up all incoming requests, even if they were for - // a different model that's loaded and not scheduled to be removed. slog.Debug("waiting for pending requests to complete and unload to occur", "runner", runnerToExpire) select { case <-ctx.Done(): @@ -434,26 +379,72 @@ func (pending *LlmRequest) useLoadedRunner(runner *runnerRef, finished chan *Llm }() } -func (s *Scheduler) load(req *LlmRequest, f *ggml.GGML, gpus discover.GpuInfoList, numParallel int) { +// load creates a new model based on req and loads it. If requireFull is true then the model must be loaded fully onto GPUs +// (if any). Returns whether the scheduler needs to evict a model to make this one fit. +func (s *Scheduler) load(req *LlmRequest, f *ggml.GGML, gpus discover.GpuInfoList, requireFull bool) bool { + numParallel := int(envconfig.NumParallel()) if numParallel < 1 { numParallel = 1 } + + // Embedding models should always be loaded with parallel=1 + if req.model.CheckCapabilities(model.CapabilityCompletion) != nil { + numParallel = 1 + } + + // `mllama` is a snowflake and uses an encoder cache which cannot be used with num_parallel > 1 + // ref: https://github.com/ollama/ollama/issues/4165 + if slices.Contains(req.model.Config.ModelFamilies, "mllama") && numParallel != 1 { + numParallel = 1 + slog.Warn("mllama does not currently support parallel requests") + } + sessionDuration := envconfig.KeepAlive() if req.sessionDuration != nil { sessionDuration = req.sessionDuration.Duration } - llama, err := s.newServerFn(gpus, req.model.ModelPath, f, req.model.AdapterPaths, req.model.ProjectorPaths, req.opts, numParallel) - if err != nil { - // some older models are not compatible with newer versions of llama.cpp - // show a generalized compatibility error until there is a better way to - // check for model compatibility - if errors.Is(err, ggml.ErrUnsupportedFormat) || strings.Contains(err.Error(), "failed to load model") { - err = fmt.Errorf("%v: this model may be incompatible with your version of Ollama. If you previously pulled this model, try updating it by running `ollama pull %s`", err, req.model.ShortName) + + s.loadedMu.Lock() + llama := s.activeLoading + + if llama == nil { + var err error + llama, err = s.newServerFn(gpus, req.model.ModelPath, f, req.model.AdapterPaths, req.model.ProjectorPaths, req.opts, numParallel) + if err != nil { + // some older models are not compatible with newer versions of llama.cpp + // show a generalized compatibility error until there is a better way to + // check for model compatibility + if errors.Is(err, ggml.ErrUnsupportedFormat) || strings.Contains(err.Error(), "failed to load model") { + err = fmt.Errorf("%v: this model may be incompatible with your version of Ollama. If you previously pulled this model, try updating it by running `ollama pull %s`", err, req.model.ShortName) + } + slog.Info("NewLlamaServer failed", "model", req.model.ModelPath, "error", err) + req.errCh <- err + s.loadedMu.Unlock() + return false + } + + s.activeLoading = llama + } else { + if s.activeLoading.ModelPath() != req.model.ModelPath { + panic(fmt.Errorf("attempting to load different model after eviction (original %v new %v)", s.activeLoading.ModelPath(), req.model.ModelPath)) } - slog.Info("NewLlamaServer failed", "model", req.model.ModelPath, "error", err) - req.errCh <- err - return } + + s.loadedMu.Unlock() + + err := llama.Load(req.ctx, gpus, requireFull) + if err != nil { + if errors.Is(err, llm.ErrLoadRequiredFull) { + return true + } + + slog.Info("Load failed", "model", req.model.ModelPath, "error", err) + s.activeLoading.Close() + s.activeLoading = nil + req.errCh <- err + return false + } + runner := &runnerRef{ model: req.model, modelPath: req.model.ModelPath, @@ -461,8 +452,8 @@ func (s *Scheduler) load(req *LlmRequest, f *ggml.GGML, gpus discover.GpuInfoLis Options: &req.opts, sessionDuration: sessionDuration, gpus: gpus, - estimatedVRAM: llama.EstimatedVRAM(), - estimatedTotal: llama.EstimatedTotal(), + vramSize: llama.VRAMSize(), + totalSize: llama.TotalSize(), loading: true, pid: llama.Pid(), } @@ -477,6 +468,7 @@ func (s *Scheduler) load(req *LlmRequest, f *ggml.GGML, gpus discover.GpuInfoLis oldRunner.unload() oldRunner.refMu.Unlock() } + s.activeLoading = nil s.loaded[req.model.ModelPath] = runner slog.Info("loaded runners", "count", len(s.loaded)) s.loadedMu.Unlock() @@ -503,6 +495,8 @@ func (s *Scheduler) load(req *LlmRequest, f *ggml.GGML, gpus discover.GpuInfoLis }() req.successCh <- runner }() + + return false } func (s *Scheduler) updateFreeSpace(allGpus discover.GpuInfoList) { @@ -521,7 +515,7 @@ func (s *Scheduler) updateFreeSpace(allGpus discover.GpuInfoList) { r.refMu.Lock() if r.llama != nil { for _, gpu := range allGpus { - predMap[predKey{gpu.Library, gpu.ID}] += r.llama.EstimatedVRAMByGPU(gpu.ID) + predMap[predKey{gpu.Library, gpu.ID}] += r.llama.VRAMByGPU(gpu.ID) } } else { slog.Warn("unexpected nil runner reference, memory prediction may be incorrect") @@ -548,41 +542,17 @@ func (s *Scheduler) updateFreeSpace(allGpus discover.GpuInfoList) { } } -// While models are loading the VRAM consumption numbers will be indeterminate, so we have -// to avoid scheduling another model on the same GPU(s) that haven't stabilized. -// This routine returns the set of GPUs that do not have an active loading model. -// If all GPUs have loading models, an empty list will be returned (not a single CPU entry) -func (s *Scheduler) filterGPUsWithoutLoadingModels(allGpus discover.GpuInfoList) discover.GpuInfoList { - ret := append(discover.GpuInfoList{}, allGpus...) - s.loadedMu.Lock() - defer s.loadedMu.Unlock() - for _, runner := range s.loaded { - if runner.loading { - slog.Debug("overlapping loads detected", "gpus", runner.gpus, "model", runner.modelPath) - for _, busyGPU := range runner.gpus { - for i := range ret { - if ret[i].ID == busyGPU.ID { - ret = append(ret[:i], ret[i+1:]...) - break - } - } - } - } - } - return ret -} - // TODO consolidate sched_types.go type runnerRef struct { refMu sync.Mutex refCount uint // prevent unloading if > 0 - llama llm.LlamaServer - pid int - loading bool // True only during initial load, then false forever - gpus discover.GpuInfoList // Recorded at time of provisioning - estimatedVRAM uint64 - estimatedTotal uint64 + llama llm.LlamaServer + pid int + loading bool // True only during initial load, then false forever + gpus discover.GpuInfoList // Recorded at time of provisioning + vramSize uint64 + totalSize uint64 sessionDuration time.Duration expireTimer *time.Timer @@ -631,9 +601,6 @@ func (runner *runnerRef) needsReload(ctx context.Context, req *LlmRequest) bool optsNew.NumGPU = -1 } - // Normalize the NumCtx for parallelism - optsExisting.NumCtx = optsExisting.NumCtx / runner.numParallel - ctx, cancel := context.WithTimeout(ctx, timeout) defer cancel() if !reflect.DeepEqual(runner.model.AdapterPaths, req.model.AdapterPaths) || // have the adapters changed? @@ -694,7 +661,7 @@ func (runner *runnerRef) waitForVRAMRecovery() chan any { freeMemoryNow += gpu.FreeMemory } // If we're within ~80% of the estimated memory usage recovered, bail out - if float32(freeMemoryNow-freeMemoryBefore) > float32(runner.estimatedVRAM)*0.8 { + if float32(freeMemoryNow-freeMemoryBefore) > float32(runner.vramSize)*0.8 { slog.Debug(fmt.Sprintf("gpu VRAM free memory converged after %0.2f seconds", time.Since(start).Seconds()), "runner", runner) finished <- struct{}{} return @@ -719,8 +686,8 @@ func (runner *runnerRef) LogValue() slog.Value { ) } attrs = append(attrs, - slog.String("size", format.HumanBytes2(runner.estimatedTotal)), - slog.String("vram", format.HumanBytes2(runner.estimatedVRAM)), + slog.String("size", format.HumanBytes2(runner.totalSize)), + slog.String("vram", format.HumanBytes2(runner.vramSize)), slog.Int("parallel", runner.numParallel), slog.Int("pid", runner.pid), slog.String("model", runner.modelPath), @@ -750,95 +717,7 @@ func (a ByDurationAndName) Less(i, j int) bool { // type BySize []*runnerRef // func (a BySize) Len() int { return len(a) } // func (a BySize) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -// func (a BySize) Less(i, j int) bool { return a[i].estimatedVRAM < a[j].estimatedVRAM } - -// pickBestFullFitByLibrary will try to find the optimal placement of the model in the available GPUs where the model fully fits -// The list of GPUs returned will always be the same brand (library) -// If the model can not be fit fully within the available GPU(s) nil is returned -// If numParallel is <= 0, this will attempt try to optimize parallelism based on available VRAM, and adjust -// opts.NumCtx accordingly -func pickBestFullFitByLibrary(req *LlmRequest, f *ggml.GGML, gpus discover.GpuInfoList, numParallel *int) discover.GpuInfoList { - var numParallelToTry []int - if *numParallel <= 0 { - // If no specific parallel setting was provided, try larger then smaller, always end with 1 - numParallelToTry = append(numParallelToTry, defaultParallel, 1) - } else { - numParallelToTry = []int{*numParallel} - } - - for _, gl := range gpus.ByLibrary() { - sgl := append(make(discover.GpuInfoList, 0, len(gl)), gl...) - - // TODO - potentially sort by performance capability, existing models loaded, etc. - // TODO - Eliminate any GPUs that already have envconfig.MaxRunners loaded on them - // Note: at present, this will favor most current available VRAM descending and ignoring faster GPU speed in mixed setups - sort.Sort(sort.Reverse(discover.ByFreeMemory(sgl))) - - if !envconfig.SchedSpread() { - for _, p := range numParallelToTry { - req.opts.NumCtx = req.origNumCtx * p - // Try to pack into as few GPUs as possible, starting from 1 GPU - for numGPUs := 1; numGPUs <= len(sgl); numGPUs++ { - gpuSubset := sgl[:numGPUs] - ok, estimatedVRAM := llm.PredictServerFit(gpuSubset, f, req.model.AdapterPaths, req.model.ProjectorPaths, req.opts, p) - - if ok { - slog.Info("new model will fit in available VRAM across minimum required GPUs, loading", - "model", req.model.ModelPath, - "library", sgl[0].Library, - "parallel", p, - "required", format.HumanBytes2(estimatedVRAM), - "gpus", numGPUs) - *numParallel = p - return gpuSubset - } - } - } - } else { - // TODO future refinements - // - if multiple Libraries, see if any single GPU in any Library will fit - // - try subsets of GPUs instead of just falling back to 1 or all in a family - - // Now try all the GPUS (OLLAMA_SCHED_SPREAD is set) - for _, p := range numParallelToTry { - req.opts.NumCtx = req.origNumCtx * p - if ok, estimatedVRAM := llm.PredictServerFit(sgl, f, req.model.AdapterPaths, req.model.ProjectorPaths, req.opts, p); ok { - slog.Info("new model will fit in available VRAM, loading", - "model", req.model.ModelPath, - "library", sgl[0].Library, - "parallel", p, - "required", format.HumanBytes2(estimatedVRAM), - "gpus", len(sgl)) - *numParallel = p - return sgl - } - } - } - } - return nil -} - -// If multiple Libraries are detected, pick the Library which loads the most layers for the model -func pickBestPartialFitByLibrary(req *LlmRequest, f *ggml.GGML, gpus discover.GpuInfoList, numParallel *int) discover.GpuInfoList { - if *numParallel <= 0 { - *numParallel = 1 - req.opts.NumCtx = req.origNumCtx - } - byLibrary := gpus.ByLibrary() - if len(byLibrary) <= 1 { - return gpus - } - var bestEstimate uint64 - var bestFit int - for i, gl := range byLibrary { - _, estimatedVRAM := llm.PredictServerFit(gl, f, req.model.AdapterPaths, req.model.ProjectorPaths, req.opts, *numParallel) - if estimatedVRAM > bestEstimate { - bestEstimate = estimatedVRAM - bestFit = i - } - } - return byLibrary[bestFit] -} +// func (a BySize) Less(i, j int) bool { return a[i].vramSize < a[j].vramSize } // findRunnerToUnload finds a runner to unload to make room for a new model func (s *Scheduler) findRunnerToUnload() *runnerRef { @@ -875,6 +754,13 @@ func (s *Scheduler) findRunnerToUnload() *runnerRef { func (s *Scheduler) unloadAllRunners() { s.loadedMu.Lock() defer s.loadedMu.Unlock() + + if s.activeLoading != nil { + slog.Debug("shutting down currently loading runner") + s.activeLoading.Close() + s.activeLoading = nil + } + for model, runner := range s.loaded { if runner.llama != nil { slog.Debug("shutting down runner", "model", model) @@ -901,18 +787,3 @@ func (s *Scheduler) expireRunner(model *Model) { runner.refMu.Unlock() } } - -// If other runners are loaded, make sure the pending request will fit in system memory -// If not, pick a runner to unload, else return nil and the request can be loaded -func (s *Scheduler) maybeFindCPURunnerToUnload(req *LlmRequest, f *ggml.GGML, gpus discover.GpuInfoList) *runnerRef { - slog.Debug("evaluating if CPU model load will fit in available system memory") - estimate := llm.EstimateGPULayers(gpus, f, req.model.ProjectorPaths, req.opts, req.opts.NumCtx/req.origNumCtx) - if estimate.TotalSize <= gpus[0].FreeMemory { - slog.Debug("cpu inference mode, model fits in available system memory", "model", format.HumanBytes2(estimate.TotalSize), "available", format.HumanBytes2(gpus[0].FreeMemory)) - return nil - } - - // TODO - optimization: try to find CPU only runners first, or partial offloads with enough in system memory to make room - - return s.findRunnerToUnload() -} diff --git a/server/sched_test.go b/server/sched_test.go index 3892fbbab..0acd59118 100644 --- a/server/sched_test.go +++ b/server/sched_test.go @@ -52,7 +52,7 @@ func TestLoad(t *testing.T) { return nil, errors.New("something failed to load model blah") } gpus := discover.GpuInfoList{} - s.load(req, f, gpus, 0) + s.load(req, f, gpus, false) require.Empty(t, req.successCh) require.Len(t, req.errCh, 1) s.loadedMu.Lock() @@ -61,16 +61,17 @@ func TestLoad(t *testing.T) { err := <-req.errCh require.Contains(t, err.Error(), "this model may be incompatible") - server := &mockLlm{estimatedVRAM: 10, estimatedVRAMByGPU: map[string]uint64{}} + server := &mockLlm{vramSize: 10, vramByGPU: map[string]uint64{}} s.newServerFn = func(gpus discover.GpuInfoList, model string, f *ggml.GGML, adapters []string, projectors []string, opts api.Options, numParallel int) (llm.LlamaServer, error) { + server.modelPath = model return server, nil } - s.load(req, f, gpus, 0) + s.load(req, f, gpus, false) select { case err := <-req.errCh: require.NoError(t, err) case resp := <-req.successCh: - require.Equal(t, uint64(10), resp.estimatedVRAM) + require.Equal(t, uint64(10), resp.vramSize) require.Equal(t, uint(1), resp.refCount) s.loadedMu.Lock() require.Len(t, s.loaded, 1) @@ -79,7 +80,7 @@ func TestLoad(t *testing.T) { req.model.ModelPath = "dummy_model_path" server.waitResp = errors.New("wait failure") - s.load(req, f, gpus, 0) + s.load(req, f, gpus, false) select { case err := <-req.errCh: require.Contains(t, err.Error(), "wait failure") @@ -104,10 +105,11 @@ type reqBundle struct { } func (scenario *reqBundle) newServer(gpus discover.GpuInfoList, model string, f *ggml.GGML, adapters []string, projectors []string, opts api.Options, numParallel int) (llm.LlamaServer, error) { + scenario.srv.modelPath = model return scenario.srv, nil } -func newScenarioRequest(t *testing.T, ctx context.Context, modelName string, estimatedVRAM uint64, duration *api.Duration) *reqBundle { +func newScenarioRequest(t *testing.T, ctx context.Context, modelName string, vramSize uint64, duration *api.Duration) *reqBundle { b := &reqBundle{} b.ctx, b.ctxDone = context.WithCancel(ctx) t.Helper() @@ -144,7 +146,7 @@ func newScenarioRequest(t *testing.T, ctx context.Context, modelName string, est successCh: make(chan *runnerRef, 1), errCh: make(chan error, 1), } - b.srv = &mockLlm{estimatedVRAM: estimatedVRAM, estimatedVRAMByGPU: map[string]uint64{"": estimatedVRAM}} + b.srv = &mockLlm{vramSize: vramSize, vramByGPU: map[string]uint64{"": vramSize}} return b } @@ -262,10 +264,10 @@ func TestRequestsMultipleLoadedModels(t *testing.T) { // Multiple loaded models a := newScenarioRequest(t, ctx, "ollama-model-3a", 1*format.GigaByte, nil) - b := newScenarioRequest(t, ctx, "ollama-model-3b", 24*format.GigaByte, nil) - c := newScenarioRequest(t, ctx, "ollama-model-4a", 30, nil) - c.req.opts.NumGPU = 0 // CPU load, will be allowed - d := newScenarioRequest(t, ctx, "ollama-model-3c", 30, nil) // Needs prior unloaded + b := newScenarioRequest(t, ctx, "ollama-model-3b", 10*format.GigaByte, nil) + c := newScenarioRequest(t, ctx, "ollama-model-4a", 10*format.GigaByte, nil) + c.req.opts.NumGPU = 0 // CPU load, will be allowed + d := newScenarioRequest(t, ctx, "ollama-model-3c", 10*format.GigaByte, nil) // Needs prior unloaded t.Setenv("OLLAMA_MAX_LOADED_MODELS", "1") s.newServerFn = a.newServer @@ -418,11 +420,12 @@ func TestExpireRunner(t *testing.T) { var f *ggml.GGML gpus := discover.GpuInfoList{} - server := &mockLlm{estimatedVRAM: 10, estimatedVRAMByGPU: map[string]uint64{}} + server := &mockLlm{vramSize: 10, vramByGPU: map[string]uint64{}} s.newServerFn = func(gpus discover.GpuInfoList, model string, f *ggml.GGML, adapters []string, projectors []string, opts api.Options, numParallel int) (llm.LlamaServer, error) { + server.modelPath = model return server, nil } - s.load(req, f, gpus, 0) + s.load(req, f, gpus, false) select { case err := <-req.errCh: @@ -506,7 +509,7 @@ func TestUseLoadedRunner(t *testing.T) { sessionDuration: &api.Duration{Duration: 2}, } finished := make(chan *LlmRequest) - llm1 := &mockLlm{estimatedVRAMByGPU: map[string]uint64{}} + llm1 := &mockLlm{vramByGPU: map[string]uint64{}} r1 := &runnerRef{llama: llm1, sessionDuration: 1, numParallel: 1} req.useLoadedRunner(r1, finished) require.Equal(t, uint(1), r1.refCount) @@ -541,8 +544,8 @@ func TestUpdateFreeSpace(t *testing.T) { gpus[0].FreeMemory = 900 gpus[1].TotalMemory = 2000 gpus[1].FreeMemory = 1900 - llm1 := &mockLlm{estimatedVRAMByGPU: map[string]uint64{"1": 50, "2": 50}} - llm2 := &mockLlm{estimatedVRAMByGPU: map[string]uint64{"1": 125, "2": 75}} + llm1 := &mockLlm{vramByGPU: map[string]uint64{"1": 50, "2": 50}} + llm2 := &mockLlm{vramByGPU: map[string]uint64{"1": 125, "2": 75}} r1 := &runnerRef{llama: llm1, gpus: gpus, numParallel: 1} r2 := &runnerRef{llama: llm2, gpus: gpus, numParallel: 1} @@ -557,40 +560,6 @@ func TestUpdateFreeSpace(t *testing.T) { require.Equal(t, uint64(2000-50-75), gpus[1].FreeMemory) } -func TestFilterGPUsWithoutLoadingModels(t *testing.T) { - ctx, done := context.WithTimeout(t.Context(), 100*time.Millisecond) - defer done() - gpus := discover.GpuInfoList{ - { - Library: "cuda", - ID: "0", - }, - { - Library: "cuda", - ID: "1", - }, - } - r1 := &runnerRef{gpus: discover.GpuInfoList{gpus[0]}, loading: true} - - s := InitScheduler(ctx) - s.loadedMu.Lock() - s.loaded["a"] = r1 - s.loadedMu.Unlock() - - tmp := s.filterGPUsWithoutLoadingModels(gpus) - require.Len(t, tmp, 1) - require.Equal(t, "1", tmp[0].ID) - - r1.gpus = discover.GpuInfoList{gpus[1]} - tmp = s.filterGPUsWithoutLoadingModels(gpus) - require.Len(t, tmp, 1) - require.Equal(t, "0", tmp[0].ID) - - r1.gpus = discover.GpuInfoList{} - tmp = s.filterGPUsWithoutLoadingModels(gpus) - require.Len(t, tmp, 2) -} - func TestFindRunnerToUnload(t *testing.T) { ctx, done := context.WithTimeout(t.Context(), 100*time.Millisecond) defer done() @@ -615,7 +584,7 @@ func TestNeedsReload(t *testing.T) { ctx, done := context.WithTimeout(t.Context(), 100*time.Millisecond) defer done() - llm := &mockLlm{estimatedVRAMByGPU: map[string]uint64{}} + llm := &mockLlm{vramByGPU: map[string]uint64{}} do := api.DefaultOptions() runner := &runnerRef{ model: &Model{ @@ -662,8 +631,8 @@ func TestUnloadAllRunners(t *testing.T) { ctx, done := context.WithTimeout(t.Context(), 100*time.Millisecond) defer done() - llm1 := &mockLlm{estimatedVRAMByGPU: map[string]uint64{}} - llm2 := &mockLlm{estimatedVRAMByGPU: map[string]uint64{}} + llm1 := &mockLlm{vramByGPU: map[string]uint64{}} + llm2 := &mockLlm{vramByGPU: map[string]uint64{}} s := InitScheduler(ctx) s.unloadAllRunners() @@ -681,7 +650,7 @@ func TestUnloadAllRunners(t *testing.T) { } func TestUnload(t *testing.T) { - llm1 := &mockLlm{estimatedVRAMByGPU: map[string]uint64{}} + llm1 := &mockLlm{vramByGPU: map[string]uint64{}} r1 := &runnerRef{llama: llm1, numParallel: 1} r2 := &runnerRef{model: &Model{AdapterPaths: []string{"A"}}, numParallel: 1} r1.unload() @@ -707,62 +676,40 @@ func TestAlreadyCanceled(t *testing.T) { require.Empty(t, scenario1a.req.successCh) } -func TestHomogeneousGPUs(t *testing.T) { - ctx, done := context.WithTimeout(t.Context(), 100*time.Millisecond) - defer done() - s := InitScheduler(ctx) - - s.getGpuFn = func() discover.GpuInfoList { - // Set memory values to require the model to be spread - gpus := []discover.GpuInfo{ - {Library: "cuda"}, - {Library: "rocm"}, - } - gpus[0].TotalMemory = 1 * format.GibiByte - gpus[0].FreeMemory = 256 * format.MebiByte - gpus[1].TotalMemory = 1 * format.GibiByte - gpus[1].FreeMemory = 256 * format.MebiByte - return gpus - } - s.getCpuFn = getCpuFn - a := newScenarioRequest(t, ctx, "ollama-model-1", 10, &api.Duration{Duration: 5 * time.Millisecond}) - s.newServerFn = func(gpus discover.GpuInfoList, model string, f *ggml.GGML, adapters []string, projectors []string, opts api.Options, numParallel int) (llm.LlamaServer, error) { - require.Len(t, gpus, 1) - return a.newServer(gpus, model, f, adapters, projectors, opts, numParallel) - } - slog.Info("a") - s.pendingReqCh <- a.req - require.Len(t, s.pendingReqCh, 1) - s.Run(ctx) - select { - case resp := <-a.req.successCh: - require.Equal(t, resp.llama, a.srv) - require.Empty(t, s.pendingReqCh) - require.Empty(t, a.req.errCh) - case err := <-a.req.errCh: - t.Fatal(err.Error()) - case <-ctx.Done(): - t.Fatal("timeout") - } -} - type mockLlm struct { - pingResp error - waitResp error - completionResp error - embeddingResp []float32 - embeddingRespErr error - tokenizeResp []int - tokenizeRespErr error - detokenizeResp string - detonekizeRespErr error - closeResp error - closeCalled bool - estimatedVRAM uint64 - estimatedTotal uint64 - estimatedVRAMByGPU map[string]uint64 + modelPath string + pingResp error + waitResp error + completionResp error + embeddingResp []float32 + embeddingRespErr error + tokenizeResp []int + tokenizeRespErr error + detokenizeResp string + detonekizeRespErr error + closeResp error + closeCalled bool + vramSize uint64 + totalSize uint64 + vramByGPU map[string]uint64 } +func (s *mockLlm) ModelPath() string { + return s.modelPath +} + +func (s *mockLlm) Load(ctx context.Context, gpus discover.GpuInfoList, requireFull bool) error { + if requireFull { + for _, g := range gpus { + if g.FreeMemory >= s.vramSize { + return nil + } + } + + return llm.ErrLoadRequiredFull + } + return nil +} func (s *mockLlm) Ping(ctx context.Context) error { return s.pingResp } func (s *mockLlm) WaitUntilRunning(ctx context.Context) error { return s.waitResp } func (s *mockLlm) Completion(ctx context.Context, req llm.CompletionRequest, fn func(llm.CompletionResponse)) error { @@ -785,7 +732,7 @@ func (s *mockLlm) Close() error { s.closeCalled = true return s.closeResp } -func (s *mockLlm) EstimatedVRAM() uint64 { return s.estimatedVRAM } -func (s *mockLlm) EstimatedTotal() uint64 { return s.estimatedTotal } -func (s *mockLlm) EstimatedVRAMByGPU(gpuid string) uint64 { return s.estimatedVRAMByGPU[gpuid] } -func (s *mockLlm) Pid() int { return -1 } +func (s *mockLlm) VRAMSize() uint64 { return s.vramSize } +func (s *mockLlm) TotalSize() uint64 { return s.totalSize } +func (s *mockLlm) VRAMByGPU(gpuid string) uint64 { return s.vramByGPU[gpuid] } +func (s *mockLlm) Pid() int { return -1 } From 6eaf194b8540bdec2b96eafcf98481f4400bdf1e Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Thu, 14 Aug 2025 16:38:53 -0700 Subject: [PATCH 03/45] fix arm linux build when HWCAP2_SVE2 undefined (#11908) --- ml/backend/ggml/ggml/src/ggml-cpu/arch/arm/arm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ml/backend/ggml/ggml/src/ggml-cpu/arch/arm/arm.go b/ml/backend/ggml/ggml/src/ggml-cpu/arch/arm/arm.go index a367d21fb..581801c09 100644 --- a/ml/backend/ggml/ggml/src/ggml-cpu/arch/arm/arm.go +++ b/ml/backend/ggml/ggml/src/ggml-cpu/arch/arm/arm.go @@ -1,5 +1,5 @@ package arm // #cgo CXXFLAGS: -std=c++17 -// #cgo CPPFLAGS: -I${SRCDIR}/../.. -I${SRCDIR}/../../.. -I${SRCDIR}/../../../../include +// #cgo CPPFLAGS: -I${SRCDIR}/../.. -I${SRCDIR}/../../.. -I${SRCDIR}/../../../../include -DHWCAP2_SVE2="2" import "C" From d925b5350c75a66e7830e00f53b243084395821f Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Thu, 14 Aug 2025 21:19:23 -0700 Subject: [PATCH 04/45] Revert "cuda: leverage JIT for smaller footprint (#11635)" (#11913) This reverts commit dc5a645434f0ea6364c426c6ba112da1afa40cb2. --- CMakePresets.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index 95ec0d799..ab2cfe9d6 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -22,7 +22,7 @@ "name": "CUDA 12", "inherits": [ "CUDA" ], "cacheVariables": { - "CMAKE_CUDA_ARCHITECTURES": "50-virtual;60-virtual;61-virtual;70-virtual;75-virtual;80-virtual;86-virtual;89-virtual;90-virtual;90a-virtual;100-virtual;120-virtual", + "CMAKE_CUDA_ARCHITECTURES": "50;60;61;70;75;80;86;87;89;90;90a;120", "CMAKE_CUDA_FLAGS": "-Wno-deprecated-gpu-targets -t 2" } }, @@ -30,14 +30,14 @@ "name": "JetPack 5", "inherits": [ "CUDA" ], "cacheVariables": { - "CMAKE_CUDA_ARCHITECTURES": "72-virtual;87-virtual" + "CMAKE_CUDA_ARCHITECTURES": "72;87" } }, { "name": "JetPack 6", "inherits": [ "CUDA" ], "cacheVariables": { - "CMAKE_CUDA_ARCHITECTURES": "87-virtual" + "CMAKE_CUDA_ARCHITECTURES": "87" } }, { From 8de1da4767d2e580977888a8f189b29bd81e1e51 Mon Sep 17 00:00:00 2001 From: Devon Rifkin Date: Fri, 15 Aug 2025 13:52:50 -0700 Subject: [PATCH 05/45] server: add debug option for printing out prompt instead of calling model --- api/types.go | 21 ++ server/routes.go | 26 +++ server/routes_debug_test.go | 413 ++++++++++++++++++++++++++++++++++++ 3 files changed, 460 insertions(+) create mode 100644 server/routes_debug_test.go diff --git a/api/types.go b/api/types.go index 0309ebbe3..a3abc5568 100644 --- a/api/types.go +++ b/api/types.go @@ -90,6 +90,10 @@ type GenerateRequest struct { // (request that thinking _not_ be used) and unset (use the old behavior // before this option was introduced) Think *ThinkValue `json:"think,omitempty"` + + // DebugRenderOnly is a debug option that, when set to true, returns the rendered + // template instead of calling the model. + DebugRenderOnly bool `json:"_debug_render_only,omitempty"` } // ChatRequest describes a request sent by [Client.Chat]. @@ -120,6 +124,10 @@ type ChatRequest struct { // responding. Can be a boolean (true/false) or a string ("high", "medium", "low") // for supported models. Think *ThinkValue `json:"think,omitempty"` + + // DebugRenderOnly is a debug option that, when set to true, returns the rendered + // template instead of calling the model. + DebugRenderOnly bool `json:"_debug_render_only,omitempty"` } type Tools []Tool @@ -308,6 +316,19 @@ type ChatResponse struct { Metrics } +// DebugInfo contains debug information for template rendering +type DebugInfo struct { + RenderedTemplate string `json:"rendered_template"` + ImageCount int `json:"image_count,omitempty"` +} + +// DebugTemplateResponse is returned when _debug_render_only is set to true +type DebugTemplateResponse struct { + Model string `json:"model"` + CreatedAt time.Time `json:"created_at"` + DebugInfo DebugInfo `json:"_debug_info"` +} + type Metrics struct { TotalDuration time.Duration `json:"total_duration,omitempty"` LoadDuration time.Duration `json:"load_duration,omitempty"` diff --git a/server/routes.go b/server/routes.go index 99b1b300a..3b94daad0 100644 --- a/server/routes.go +++ b/server/routes.go @@ -314,6 +314,19 @@ func (s *Server) GenerateHandler(c *gin.Context) { prompt = b.String() } + // If debug mode is enabled, return the rendered template instead of calling the model + if req.DebugRenderOnly { + c.JSON(http.StatusOK, api.DebugTemplateResponse{ + Model: req.Model, + CreatedAt: time.Now().UTC(), + DebugInfo: api.DebugInfo{ + RenderedTemplate: prompt, + ImageCount: len(images), + }, + }) + return + } + var thinkingState *thinking.Parser if !useHarmony { openingTag, closingTag := thinking.InferTags(m.Template.Template) @@ -1597,6 +1610,19 @@ func (s *Server) ChatHandler(c *gin.Context) { return } + // If debug mode is enabled, return the rendered template instead of calling the model + if req.DebugRenderOnly { + c.JSON(http.StatusOK, api.DebugTemplateResponse{ + Model: req.Model, + CreatedAt: time.Now().UTC(), + DebugInfo: api.DebugInfo{ + RenderedTemplate: prompt, + ImageCount: len(images), + }, + }) + return + } + useHarmony := shouldUseHarmony(*m) // Validate Think value: string values currently only allowed for gptoss models diff --git a/server/routes_debug_test.go b/server/routes_debug_test.go new file mode 100644 index 000000000..f04a1da99 --- /dev/null +++ b/server/routes_debug_test.go @@ -0,0 +1,413 @@ +package server + +import ( + "bytes" + "encoding/json" + "net/http" + "testing" + "time" + + "github.com/gin-gonic/gin" + "github.com/ollama/ollama/api" + "github.com/ollama/ollama/discover" + "github.com/ollama/ollama/fs/ggml" + "github.com/ollama/ollama/llm" +) + +func TestGenerateDebugRenderOnly(t *testing.T) { + gin.SetMode(gin.TestMode) + + mock := mockRunner{ + CompletionResponse: llm.CompletionResponse{ + Done: true, + DoneReason: llm.DoneReasonStop, + PromptEvalCount: 1, + PromptEvalDuration: 1, + EvalCount: 1, + EvalDuration: 1, + }, + } + + s := Server{ + sched: &Scheduler{ + pendingReqCh: make(chan *LlmRequest, 1), + finishedReqCh: make(chan *LlmRequest, 1), + expiredCh: make(chan *runnerRef, 1), + unloadedCh: make(chan any, 1), + loaded: make(map[string]*runnerRef), + newServerFn: newMockServer(&mock), + getGpuFn: discover.GetGPUInfo, + getCpuFn: discover.GetCPUInfo, + reschedDelay: 250 * time.Millisecond, + loadFn: func(req *LlmRequest, _ *ggml.GGML, _ discover.GpuInfoList, _ bool) bool { + // add small delay to simulate loading + time.Sleep(time.Millisecond) + req.successCh <- &runnerRef{ + llama: &mock, + } + return false + }, + }, + } + + go s.sched.Run(t.Context()) + + // Create a test model + stream := false + _, digest := createBinFile(t, ggml.KV{ + "general.architecture": "llama", + "llama.block_count": uint32(1), + "llama.context_length": uint32(8192), + "llama.embedding_length": uint32(4096), + "llama.attention.head_count": uint32(32), + "llama.attention.head_count_kv": uint32(8), + "tokenizer.ggml.tokens": []string{""}, + "tokenizer.ggml.scores": []float32{0}, + "tokenizer.ggml.token_type": []int32{0}, + }, []*ggml.Tensor{ + {Name: "token_embd.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.attn_norm.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.ffn_down.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.ffn_gate.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.ffn_up.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.ffn_norm.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.attn_k.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.attn_output.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.attn_q.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.attn_v.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "output.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + }) + + w := createRequest(t, s.CreateHandler, api.CreateRequest{ + Model: "test-model", + Files: map[string]string{"file.gguf": digest}, + Template: "{{ .Prompt }}", + Stream: &stream, + }) + + if w.Code != http.StatusOK { + t.Fatalf("expected status 200, got %d", w.Code) + } + + tests := []struct { + name string + request api.GenerateRequest + expectDebug bool + expectTemplate string + expectNumImages int + }{ + { + name: "debug render only enabled", + request: api.GenerateRequest{ + Model: "test-model", + Prompt: "Hello, world!", + DebugRenderOnly: true, + }, + expectDebug: true, + expectTemplate: "Hello, world!", + }, + { + name: "debug render only disabled", + request: api.GenerateRequest{ + Model: "test-model", + Prompt: "Hello, world!", + DebugRenderOnly: false, + }, + expectDebug: false, + }, + { + name: "debug render only with system prompt", + request: api.GenerateRequest{ + Model: "test-model", + Prompt: "User question", + System: "You are a helpful assistant", + DebugRenderOnly: true, + }, + expectDebug: true, + expectTemplate: "User question", + }, + { + name: "debug render only with template", + request: api.GenerateRequest{ + Model: "test-model", + Prompt: "Hello", + Template: "PROMPT: {{ .Prompt }}", + DebugRenderOnly: true, + }, + expectDebug: true, + expectTemplate: "PROMPT: Hello", + }, + { + name: "debug render only with images", + request: api.GenerateRequest{ + Model: "test-model", + Prompt: "Describe this image", + Images: []api.ImageData{[]byte("fake-image-data")}, + DebugRenderOnly: true, + }, + expectDebug: true, + expectTemplate: "[img-0]\n\nDescribe this image", + expectNumImages: 1, + }, + { + name: "debug render only with raw mode", + request: api.GenerateRequest{ + Model: "test-model", + Prompt: "Raw prompt text", + Raw: true, + DebugRenderOnly: true, + }, + expectDebug: true, + expectTemplate: "Raw prompt text", + }, + } + + for _, tt := range tests { + // Test both with and without streaming + streamValues := []bool{false, true} + for _, stream := range streamValues { + streamSuffix := "" + if stream { + streamSuffix = " (streaming)" + } + t.Run(tt.name+streamSuffix, func(t *testing.T) { + req := tt.request + req.Stream = &stream + w := createRequest(t, s.GenerateHandler, req) + + if tt.expectDebug { + if w.Code != http.StatusOK { + t.Errorf("expected status %d, got %d, body: %s", http.StatusOK, w.Code, w.Body.String()) + } + + var response api.DebugTemplateResponse + if err := json.Unmarshal(w.Body.Bytes(), &response); err != nil { + t.Fatalf("failed to unmarshal response: %v", err) + } + + if response.Model != tt.request.Model { + t.Errorf("expected model %s, got %s", tt.request.Model, response.Model) + } + + if tt.expectTemplate != "" && response.DebugInfo.RenderedTemplate != tt.expectTemplate { + t.Errorf("expected template %q, got %q", tt.expectTemplate, response.DebugInfo.RenderedTemplate) + } + + if tt.expectNumImages > 0 && response.DebugInfo.ImageCount != tt.expectNumImages { + t.Errorf("expected image count %d, got %d", tt.expectNumImages, response.DebugInfo.ImageCount) + } + } else { + // When debug is disabled, it should attempt normal processing + if w.Code != http.StatusOK { + t.Errorf("expected status %d, got %d", http.StatusOK, w.Code) + } + } + }) + } + } +} + +func TestChatDebugRenderOnly(t *testing.T) { + gin.SetMode(gin.TestMode) + + mock := mockRunner{ + CompletionResponse: llm.CompletionResponse{ + Done: true, + DoneReason: llm.DoneReasonStop, + PromptEvalCount: 1, + PromptEvalDuration: 1, + EvalCount: 1, + EvalDuration: 1, + }, + } + + s := Server{ + sched: &Scheduler{ + pendingReqCh: make(chan *LlmRequest, 1), + finishedReqCh: make(chan *LlmRequest, 1), + expiredCh: make(chan *runnerRef, 1), + unloadedCh: make(chan any, 1), + loaded: make(map[string]*runnerRef), + newServerFn: newMockServer(&mock), + getGpuFn: discover.GetGPUInfo, + getCpuFn: discover.GetCPUInfo, + reschedDelay: 250 * time.Millisecond, + loadFn: func(req *LlmRequest, _ *ggml.GGML, _ discover.GpuInfoList, _ bool) bool { + // add small delay to simulate loading + time.Sleep(time.Millisecond) + req.successCh <- &runnerRef{ + llama: &mock, + } + return false + }, + }, + } + + go s.sched.Run(t.Context()) + + // Create a test model + stream := false + _, digest := createBinFile(t, ggml.KV{ + "general.architecture": "llama", + "llama.block_count": uint32(1), + "llama.context_length": uint32(8192), + "llama.embedding_length": uint32(4096), + "llama.attention.head_count": uint32(32), + "llama.attention.head_count_kv": uint32(8), + "tokenizer.ggml.tokens": []string{""}, + "tokenizer.ggml.scores": []float32{0}, + "tokenizer.ggml.token_type": []int32{0}, + }, []*ggml.Tensor{ + {Name: "token_embd.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.attn_norm.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.ffn_down.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.ffn_gate.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.ffn_up.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.ffn_norm.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.attn_k.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.attn_output.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.attn_q.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.attn_v.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "output.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + }) + + w := createRequest(t, s.CreateHandler, api.CreateRequest{ + Model: "test-model", + Files: map[string]string{"file.gguf": digest}, + Template: "{{ if .Tools }}{{ .Tools }}{{ end }}{{ range .Messages }}{{ .Role }}: {{ .Content }}\n{{ end }}", + Stream: &stream, + }) + + if w.Code != http.StatusOK { + t.Fatalf("expected status 200, got %d", w.Code) + } + + tests := []struct { + name string + request api.ChatRequest + expectDebug bool + expectTemplate string + expectNumImages int + }{ + { + name: "chat debug render only enabled", + request: api.ChatRequest{ + Model: "test-model", + Messages: []api.Message{ + {Role: "system", Content: "You are a helpful assistant"}, + {Role: "user", Content: "Hello"}, + }, + DebugRenderOnly: true, + }, + expectDebug: true, + expectTemplate: "system: You are a helpful assistant\nuser: Hello\n", + }, + { + name: "chat debug render only disabled", + request: api.ChatRequest{ + Model: "test-model", + Messages: []api.Message{ + {Role: "user", Content: "Hello"}, + }, + DebugRenderOnly: false, + }, + expectDebug: false, + }, + { + name: "chat debug with assistant message", + request: api.ChatRequest{ + Model: "test-model", + Messages: []api.Message{ + {Role: "user", Content: "Hello"}, + {Role: "assistant", Content: "Hi there!"}, + {Role: "user", Content: "How are you?"}, + }, + DebugRenderOnly: true, + }, + expectDebug: true, + expectTemplate: "user: Hello\nassistant: Hi there!\nuser: How are you?\n", + }, + { + name: "chat debug with images", + request: api.ChatRequest{ + Model: "test-model", + Messages: []api.Message{ + { + Role: "user", + Content: "What's in this image?", + Images: []api.ImageData{[]byte("fake-image-data")}, + }, + }, + DebugRenderOnly: true, + }, + expectDebug: true, + expectTemplate: "user: [img-0]What's in this image?\n", + expectNumImages: 1, + }, + { + name: "chat debug with tools", + request: api.ChatRequest{ + Model: "test-model", + Messages: []api.Message{ + {Role: "user", Content: "Get the weather"}, + }, + Tools: api.Tools{ + { + Type: "function", + Function: api.ToolFunction{ + Name: "get_weather", + Description: "Get weather information", + }, + }, + }, + DebugRenderOnly: true, + }, + expectDebug: true, + expectTemplate: "[{\"type\":\"function\",\"function\":{\"name\":\"get_weather\",\"description\":\"Get weather information\",\"parameters\":{\"type\":\"\",\"required\":null,\"properties\":null}}}]user: Get the weather\n", + }, + } + + for _, tt := range tests { + // Test both with and without streaming + streamValues := []bool{false, true} + for _, stream := range streamValues { + streamSuffix := "" + if stream { + streamSuffix = " (streaming)" + } + t.Run(tt.name+streamSuffix, func(t *testing.T) { + req := tt.request + req.Stream = &stream + w := createRequest(t, s.ChatHandler, req) + + if tt.expectDebug { + if w.Code != http.StatusOK { + t.Errorf("expected status %d, got %d, body: %s", http.StatusOK, w.Code, w.Body.String()) + } + + var response api.DebugTemplateResponse + if err := json.Unmarshal(w.Body.Bytes(), &response); err != nil { + t.Fatalf("failed to unmarshal response: %v", err) + } + + if response.Model != tt.request.Model { + t.Errorf("expected model %s, got %s", tt.request.Model, response.Model) + } + + if tt.expectTemplate != "" && response.DebugInfo.RenderedTemplate != tt.expectTemplate { + t.Errorf("expected template %q, got %q", tt.expectTemplate, response.DebugInfo.RenderedTemplate) + } + + if tt.expectNumImages > 0 && response.DebugInfo.ImageCount != tt.expectNumImages { + t.Errorf("expected image count %d, got %d", tt.expectNumImages, response.DebugInfo.ImageCount) + } + } else { + // When debug is disabled, it should attempt normal processing + if w.Code != http.StatusOK { + t.Errorf("expected status %d, got %d", http.StatusOK, w.Code) + } + } + }) + } + } +} From d6f7233a1cf35317ce35531b870fb8cdbacf08ed Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Fri, 15 Aug 2025 14:37:54 -0700 Subject: [PATCH 06/45] test: improve scheduler/concurrency stress tests (#11906) * test: improve scheduler/concurrency stress tests The scheduler test used to use approximate memory figures and would often over or under shoot a systems capcity leading to flaky test results. This should improve the reliability of this scenario by leveraging ps output to determinie exactly how many models it takes to trigger thrashing. The concurrency test is also refined to target num_parallel + 1 and handle timeouts better. With these refinements, TestMultiModelConcurrency was redundant * test: add parallel generate with history TestGenerateWithHistory will help verify caching and context are properly handled while making requests * test: focus embed tests on embedding models remove non-embedding models from the embedding tests --- integration/concurrency_test.go | 281 +++++++++++--------------------- integration/context_test.go | 50 ++++++ integration/testdata/embed.json | 23 +-- integration/utils_test.go | 45 ++--- 4 files changed, 169 insertions(+), 230 deletions(-) diff --git a/integration/concurrency_test.go b/integration/concurrency_test.go index bb0348ebc..52a7f36bd 100644 --- a/integration/concurrency_test.go +++ b/integration/concurrency_test.go @@ -7,6 +7,7 @@ import ( "fmt" "log/slog" "math" + "math/rand" "os" "strconv" "sync" @@ -16,245 +17,157 @@ import ( "github.com/stretchr/testify/require" "github.com/ollama/ollama/api" + "github.com/ollama/ollama/envconfig" "github.com/ollama/ollama/format" ) -func TestMultiModelConcurrency(t *testing.T) { - var ( - req = [2]api.GenerateRequest{ - { - Model: smol, - Prompt: "why is the ocean blue?", - Stream: &stream, - KeepAlive: &api.Duration{Duration: 10 * time.Second}, - Options: map[string]any{ - "seed": 42, - "temperature": 0.0, - }, - }, { - Model: "qwen3:0.6b", - Prompt: "what is the origin of the us thanksgiving holiday?", - Stream: &stream, - KeepAlive: &api.Duration{Duration: 10 * time.Second}, - Options: map[string]any{ - "seed": 42, - "temperature": 0.0, - }, - }, - } - resp = [2][]string{ - {"sunlight"}, - {"england", "english", "massachusetts", "pilgrims", "british", "festival"}, - } - ) - var wg sync.WaitGroup - wg.Add(len(req)) - ctx, cancel := context.WithTimeout(context.Background(), time.Second*240) - defer cancel() - - client, _, cleanup := InitServerConnection(ctx, t) - defer cleanup() - - for i := 0; i < len(req); i++ { - require.NoError(t, PullIfMissing(ctx, client, req[i].Model)) - } - - for i := 0; i < len(req); i++ { - go func(i int) { - defer wg.Done() - // Note: CPU based inference can crawl so don't give up too quickly - DoGenerate(ctx, t, client, req[i], resp[i], 90*time.Second, 30*time.Second) - }(i) - } - wg.Wait() -} - -func TestIntegrationConcurrentPredict(t *testing.T) { +// Send multiple requests in parallel (concurrently) to a single model and ensure responses are expected +func TestConcurrentGenerate(t *testing.T) { + // Assumes all requests have the same model req, resp := GenerateRequests() - reqLimit := len(req) - iterLimit := 5 + numParallel := int(envconfig.NumParallel() + 1) + iterLimit := 3 - if s := os.Getenv("OLLAMA_MAX_VRAM"); s != "" { - maxVram, err := strconv.ParseUint(s, 10, 64) - require.NoError(t, err) - // Don't hammer on small VRAM cards... - if maxVram < 4*format.GibiByte { - reqLimit = min(reqLimit, 2) - iterLimit = 2 - } - } - - ctx, cancel := context.WithTimeout(context.Background(), 9*time.Minute) + softTimeout, hardTimeout := getTimeouts(t) + ctx, cancel := context.WithTimeout(context.Background(), hardTimeout) defer cancel() client, _, cleanup := InitServerConnection(ctx, t) defer cleanup() // Get the server running (if applicable) warm the model up with a single initial request - DoGenerate(ctx, t, client, req[0], resp[0], 60*time.Second, 10*time.Second) + slog.Info("loading", "model", req[0].Model) + err := client.Generate(ctx, + &api.GenerateRequest{Model: req[0].Model, KeepAlive: &api.Duration{Duration: 10 * time.Second}}, + func(response api.GenerateResponse) error { return nil }, + ) + if err != nil { + t.Fatalf("failed to load model %s: %s", req[0].Model, err) + } var wg sync.WaitGroup - wg.Add(reqLimit) - for i := 0; i < reqLimit; i++ { + r := rand.New(rand.NewSource(0)) + wg.Add(numParallel) + for i := range numParallel { go func(i int) { defer wg.Done() for j := 0; j < iterLimit; j++ { - slog.Info("Starting", "req", i, "iter", j) + if time.Now().Sub(started) > softTimeout { + slog.Info("exceeded soft timeout, winding down test") + return + } + k := r.Int() % len(req) + slog.Info("Starting", "thread", i, "iter", j) // On slower GPUs it can take a while to process the concurrent requests // so we allow a much longer initial timeout - DoGenerate(ctx, t, client, req[i], resp[i], 120*time.Second, 20*time.Second) + DoGenerate(ctx, t, client, req[k], resp[k], 120*time.Second, 20*time.Second) } }(i) } wg.Wait() } -// Stress the system if we know how much VRAM it has, and attempt to load more models than will fit +// Stress the scheduler and attempt to load more models than will fit to cause thrashing +// This test will always load at least 2 models even on CPU based systems func TestMultiModelStress(t *testing.T) { - s := os.Getenv("OLLAMA_MAX_VRAM") // TODO - discover actual VRAM + s := os.Getenv("OLLAMA_MAX_VRAM") if s == "" { - t.Skip("OLLAMA_MAX_VRAM not specified, can't pick the right models for the stress test") + s = "0" } maxVram, err := strconv.ParseUint(s, 10, 64) if err != nil { t.Fatal(err) } - if maxVram < 2*format.GibiByte { - t.Skip("VRAM less than 2G, skipping model stress tests") + + smallModels := []string{ + "llama3.2:1b", + "qwen3:0.6b", + "gemma:2b", + "deepseek-r1:1.5b", + "starcoder2:3b", + } + mediumModels := []string{ + "qwen3:8b", + "llama2", + "deepseek-r1:7b", + "mistral", + "dolphin-mistral", + "gemma:7b", + "codellama:7b", } - type model struct { - name string - size uint64 // Approximate amount of VRAM they typically use when fully loaded in VRAM - } - - smallModels := []model{ - { - name: "llama3.2:1b", - size: 2876 * format.MebiByte, - }, - { - name: "qwen3:0.6b", - size: 1600 * format.MebiByte, - }, - { - name: "gemma:2b", - size: 2364 * format.MebiByte, - }, - { - name: "deepseek-r1:1.5b", - size: 2048 * format.MebiByte, - }, - { - name: "starcoder2:3b", - size: 2166 * format.MebiByte, - }, - } - mediumModels := []model{ - { - name: "qwen3:8b", - size: 6600 * format.MebiByte, - }, - { - name: "llama2", - size: 5118 * format.MebiByte, - }, - { - name: "deepseek-r1:7b", - size: 5600 * format.MebiByte, - }, - { - name: "mistral", - size: 4620 * format.MebiByte, - }, - { - name: "dolphin-mistral", - size: 4620 * format.MebiByte, - }, - { - name: "gemma:7b", - size: 5000 * format.MebiByte, - }, - { - name: "codellama:7b", - size: 5118 * format.MebiByte, - }, - } - - // These seem to be too slow to be useful... - // largeModels := []model{ - // { - // name: "llama2:13b", - // size: 7400 * format.MebiByte, - // }, - // { - // name: "codellama:13b", - // size: 7400 * format.MebiByte, - // }, - // { - // name: "orca-mini:13b", - // size: 7400 * format.MebiByte, - // }, - // { - // name: "gemma:7b", - // size: 5000 * format.MebiByte, - // }, - // { - // name: "starcoder2:15b", - // size: 9100 * format.MebiByte, - // }, - // } - - var chosenModels []model + var chosenModels []string switch { case maxVram < 10000*format.MebiByte: slog.Info("selecting small models") chosenModels = smallModels - // case maxVram < 30000*format.MebiByte: default: slog.Info("selecting medium models") chosenModels = mediumModels - // default: - // slog.Info("selecting large models") - // chosenModels = largeModels } - req, resp := GenerateRequests() - - for i := range req { - if i > len(chosenModels) { - break - } - req[i].Model = chosenModels[i].name - } - - ctx, cancel := context.WithTimeout(context.Background(), 15*time.Minute) // TODO baseline -- 10m too short + softTimeout, hardTimeout := getTimeouts(t) + ctx, cancel := context.WithTimeout(context.Background(), hardTimeout) defer cancel() client, _, cleanup := InitServerConnection(ctx, t) defer cleanup() // Make sure all the models are pulled before we get started - for _, r := range req { - require.NoError(t, PullIfMissing(ctx, client, r.Model)) + for _, model := range chosenModels { + require.NoError(t, PullIfMissing(ctx, client, model)) } - var wg sync.WaitGroup - consumed := uint64(256 * format.MebiByte) // Assume some baseline usage - for i := 0; i < len(req); i++ { - // Always get at least 2 models, but don't overshoot VRAM too much or we'll take too long - if i > 1 && consumed > maxVram { - slog.Info("achieved target vram exhaustion", "count", i, "vram", format.HumanBytes2(maxVram), "models", format.HumanBytes2(consumed)) - break + // Determine how many models we can load in parallel before we exceed VRAM + // The intent is to go 1 over what can fit so we force the scheduler to thrash + targetLoadCount := 0 + slog.Info("Loading models to find how many can fit in VRAM before overflowing") + for i, model := range chosenModels { + req := &api.GenerateRequest{Model: model} + slog.Info("loading", "model", model) + err = client.Generate(ctx, req, func(response api.GenerateResponse) error { return nil }) + if err != nil { + t.Fatalf("failed to load model %s: %s", model, err) } - consumed += chosenModels[i].size - slog.Info("target vram", "count", i, "vram", format.HumanBytes2(maxVram), "models", format.HumanBytes2(consumed)) + targetLoadCount++ + if i > 0 { + models, err := client.ListRunning(ctx) + if err != nil { + t.Fatalf("failed to list running models: %s", err) + } + if len(models.Models) < targetLoadCount { + loaded := []string{} + for _, m := range models.Models { + loaded = append(loaded, m.Name) + } + slog.Info("found model load capacity", "target", targetLoadCount, "current", loaded, "chosen", chosenModels[:targetLoadCount]) + break + } + } + } + if targetLoadCount == len(chosenModels) { + // TODO consider retrying the medium models + slog.Warn("all models being used without exceeding VRAM, set OLLAMA_MAX_VRAM so test can pick larger models") + } + r := rand.New(rand.NewSource(0)) + var wg sync.WaitGroup + for i := range targetLoadCount { wg.Add(1) go func(i int) { defer wg.Done() + reqs, resps := GenerateRequests() for j := 0; j < 3; j++ { - slog.Info("Starting", "req", i, "iter", j, "model", req[i].Model) - DoGenerate(ctx, t, client, req[i], resp[i], 120*time.Second, 5*time.Second) + if time.Now().Sub(started) > softTimeout { + slog.Info("exceeded soft timeout, winding down test") + return + } + k := r.Int() % len(reqs) + reqs[k].Model = chosenModels[i] + slog.Info("Starting", "model", reqs[k].Model, "iteration", j, "request", reqs[k].Prompt) + DoGenerate(ctx, t, client, reqs[k], resps[k], + 120*time.Second, // Be extra patient for the model to load initially + 10*time.Second, // Once results start streaming, fail if they stall + ) } }(i) } diff --git a/integration/context_test.go b/integration/context_test.go index 409d913a4..b28d11380 100644 --- a/integration/context_test.go +++ b/integration/context_test.go @@ -4,6 +4,8 @@ package integration import ( "context" + "log/slog" + "sync" "testing" "time" @@ -63,3 +65,51 @@ func TestContextExhaustion(t *testing.T) { } DoGenerate(ctx, t, client, req, []string{"once", "upon", "lived"}, 120*time.Second, 10*time.Second) } + +// Send multiple requests with prior context and ensure the response is coherant and expected +func TestGenerateWithHistory(t *testing.T) { + modelOverride := ollamaEngineChatModels[0] // Most recent ollama engine model + req, resp := GenerateRequests() + numParallel := 2 + iterLimit := 2 + + softTimeout, hardTimeout := getTimeouts(t) + ctx, cancel := context.WithTimeout(context.Background(), hardTimeout) + defer cancel() + client, _, cleanup := InitServerConnection(ctx, t) + defer cleanup() + + // Get the server running (if applicable) warm the model up with a single initial request + slog.Info("loading", "model", modelOverride) + err := client.Generate(ctx, + &api.GenerateRequest{Model: modelOverride, KeepAlive: &api.Duration{Duration: 10 * time.Second}}, + func(response api.GenerateResponse) error { return nil }, + ) + if err != nil { + t.Fatalf("failed to load model %s: %s", modelOverride, err) + } + + var wg sync.WaitGroup + wg.Add(numParallel) + for i := range numParallel { + go func(i int) { + defer wg.Done() + k := i % len(req) + req[k].Model = modelOverride + for j := 0; j < iterLimit; j++ { + if time.Now().Sub(started) > softTimeout { + slog.Info("exceeded soft timeout, winding down test") + return + } + slog.Info("Starting", "thread", i, "iter", j) + // On slower GPUs it can take a while to process the concurrent requests + // so we allow a much longer initial timeout + c := DoGenerate(ctx, t, client, req[k], resp[k], 120*time.Second, 20*time.Second) + req[k].Context = c + req[k].Prompt = "tell me more!" + } + }(i) + } + wg.Wait() + +} diff --git a/integration/testdata/embed.json b/integration/testdata/embed.json index eea33bdfc..73f47b519 100644 --- a/integration/testdata/embed.json +++ b/integration/testdata/embed.json @@ -1,20 +1,11 @@ { "all-minilm:latest": [0.010071031, -0.0017594865, 0.050072223, 0.046929732, 0.05491682, 0.008599705, 0.105441436, -0.025878143, 0.1295813, 0.031952355, -0.04448072, -0.0089852745, -0.000509909, -0.06374169, -0.016089523, 0.04662509, -0.022060998, -0.15813895, -0.072848774, -0.061321855, -0.065877646, 0.054177605, -0.06213012, 0.038908366, -0.04580116, 0.05493584, -0.035267256, 0.012613296, 0.04251382, -0.007927403, -0.01902945, 0.060983833, 0.036926776, 0.013464811, -0.025808964, -0.043487485, 0.072623335, -0.04850803, 0.00428558, -0.02943825, -0.02913489, -0.03290691, -0.018345183, 0.0155583285, -0.011713048, 0.01530367, -0.009391865, 0.025963927, 0.09527476, -0.015497632, -0.024581224, 0.009084283, -0.07661165, 0.015987588, 0.049554788, 0.115980916, 0.0009802427, -0.02031978, 0.09233272, 0.00849488, -0.05705784, 0.068866335, -0.076607056, 0.06931919, 0.09223656, -0.055486195, -0.053620946, 0.008443246, -0.06315959, -0.066396914, -0.02516728, 0.018891005, 0.061389998, -0.028247874, 0.036244337, 0.0011042351, 0.06067215, -0.06755123, -0.008126048, -0.012737444, 0.030953258, -0.06380051, -0.07451028, 0.1191656, 0.012553826, 0.06532671, 0.014824665, 0.051425762, -0.08518537, 0.010257597, -0.0077732494, -0.035585348, -0.115389846, -0.03066639, -0.0832527, 0.013689985, 0.056588713, -0.040882625, 0.042672798, 0.022154681, 0.04685385, -0.05135596, 0.030175874, 0.007199854, -0.0041790465, -0.031146567, 0.07788334, 0.034205843, 0.06138031, 0.007510951, -0.036251485, -0.08457674, 0.021795211, -0.019397866, -0.03984967, 0.054795727, -0.033695232, 0.018102817, -0.10553994, -0.050397146, -0.011542906, 0.0378195, 0.022170838, 0.08049212, 0.007816837, -0.01683443, -0.059413332, -7.227309e-33, 0.13531439, -0.011213897, 0.0923026, 0.03597459, 0.039638437, -0.054985173, -0.03506899, -0.0037263383, -0.01955998, -0.034966808, -0.0057084337, -0.014629069, -0.024276787, -0.048383784, 0.04777095, -0.017076956, -0.06094759, 0.0059446157, -0.083057985, 0.084341705, -0.1046656, 0.041639294, -0.03668315, -0.008083383, -0.028216336, -0.04319357, 0.035999607, 0.07498755, 0.05645381, 0.011849057, 0.09846523, 0.10484252, -0.021864949, 0.045994766, -0.026346037, -0.05092382, -0.014708711, -0.0063834875, -0.085867085, 0.028602734, -0.0535738, 0.056528863, -0.059763853, 0.012410302, 0.06620772, -0.013472636, 0.038324803, -0.08890202, -0.05744544, 0.03199372, -0.034495477, 0.02363032, 0.014458106, -0.04159657, 0.06799366, 0.031207295, 0.069696635, -0.035037853, -0.0033100948, 0.0493309, -0.0133445235, -0.0034971808, 0.050776623, 0.078672916, 0.037620574, -0.011580864, 0.03812419, 0.04201406, -0.012800006, -0.07894726, 0.00902281, 0.013365969, 0.024159499, 0.009777319, -0.010906574, -0.08161233, 0.026987134, -0.0296618, -0.004335468, 0.013011258, -0.035210665, -0.019684888, 0.055351324, -0.06124218, -0.055006765, 0.012528419, -0.019175794, -0.012560324, -0.015807373, -0.06942039, -0.044893157, -0.048941795, 0.048249032, -0.10446324, -0.10786195, 3.58774e-33, -0.0004694524, -0.08636079, -0.087853074, 0.0071707284, -0.007416128, -0.01662082, 0.045272738, 0.06750471, -0.042886123, 0.08635933, 0.04555289, 0.06798365, 0.009930444, -0.003040414, 0.058509175, -0.035567205, 0.036180507, 0.06615616, -0.03779808, -0.062269486, -0.044531893, 0.07724946, 0.04343241, -0.021267718, -0.021633657, 0.06227748, -0.03914136, 0.028114952, -0.013057723, 0.051113747, -0.036822543, 0.054577183, -0.06644743, 0.022884717, 0.0048167957, 0.09043401, 0.0051002423, -0.083096094, -0.055096727, 0.07315016, -0.11049671, -0.020257315, 0.11254063, -0.053299136, -0.057593238, -0.023905706, 0.056623034, 0.12725255, 0.03595934, -0.043950673, 0.017003251, -0.024837377, 0.07269714, 0.043164223, 0.08047665, -0.019504813, -0.034397744, 0.096689135, 0.051885936, 0.010750518, 0.04023374, 0.0021946214, -0.0075854477, 0.0016714911, 0.014185944, 0.020396275, -0.023103109, 0.021491585, -0.009236667, -0.050526038, -0.016258504, -0.0899585, -0.0606858, 0.08100888, 0.0024563652, 0.041595213, 0.043729555, -0.025168482, -0.09529981, 0.088698424, -0.09840905, -0.0048626475, 0.03534257, 0.014159388, -0.06457741, -0.07597705, 0.012412196, -0.050220776, -0.055758025, -0.0569825, -0.018489538, -0.0021951278, -0.002204297, 0.03527849, -0.0547162, -1.430923e-8, -0.007930172, 0.026702108, 0.0022585324, 0.010008593, -0.021680027, -0.02156696, 0.111389145, 0.004639639, 0.03784025, 0.003962226, -0.0668973, -0.028295087, -0.04432231, 0.07120314, 0.018729135, -0.04907397, -0.103948705, -0.043614738, 0.010182222, 0.04179206, -0.013543455, -0.03385163, -0.025069695, -0.013597015, 0.0034274007, 0.033077475, -0.021843424, 0.021919321, 0.07144483, 0.020509098, 0.024436586, 0.035892475, -0.00094983797, -0.061337028, -0.085383, 0.007424564, -0.038788088, 0.07989341, -0.025575982, -0.060451094, 0.060581867, 0.082356565, -0.056705453, 0.0048461547, 0.04513215, 0.023778366, 0.043513518, 0.09104256, -0.05140235, -0.01123021, -0.06885336, 0.007250856, 0.072830714, -0.04336812, 0.025920171, -0.11409155, -0.009537421, 0.022203108, 0.026747186, 0.0037276533, 0.015937949, 0.0035980998, -0.020675266, 0.03354611], "nomic-embed-text:latest": [0.219890, 1.006650, -3.181164, 0.029981, 0.726579, 2.426980, -0.191078, 0.228469, 0.011652, -0.803823, 0.760813, 1.403515, 2.321094, 1.939129, 0.535624, 0.758475, -0.759854, -0.421067, 1.084963, -0.613761, -1.276195, -0.985036, 0.374207, -0.793580, 1.439871, 0.977758, 0.757015, -0.008899, 0.003841, -0.427342, 1.312180, 0.052406, 0.410700, -0.845589, 0.751114, -1.348898, 1.511959, 0.609853, 0.143546, -0.378520, 0.042813, -0.799669, -0.247855, 0.195135, 0.518717, -1.124939, 0.347576, 1.137096, -0.513775, -1.149473, -0.907078, 1.328627, 0.048019, -1.612557, 0.672948, 0.868539, 1.446252, -0.684429, -0.518347, 0.605635, 1.063686, 1.819040, 1.089479, 1.884122, 0.897270, -1.130091, -1.021317, -0.127456, 0.621352, -0.167290, 1.033687, -1.566117, 0.419836, 1.026150, -0.951560, -0.839969, -1.202380, 0.478040, 0.604218, 1.149539, 0.671882, 0.591803, 0.014369, 0.109148, 0.392492, 0.650537, 0.601781, -0.054198, -0.514124, -0.200478, -0.070399, -0.765290, 1.083515, -0.298463, -0.518189, 0.236548, -0.231565, 1.491937, -1.257157, 0.792882, -1.845886, -1.293818, -0.826941, 0.926363, 1.168679, 0.903380, -0.102102, -0.215274, -1.542697, -0.684560, 0.077517, 0.911539, 0.066066, 0.454660, 0.110756, -0.540284, 0.201825, -1.294326, 0.293775, 1.582082, 0.200911, -0.214661, -0.023139, -1.026803, -0.381844, 0.677617, -0.001489, -0.157799, -0.291094, -1.359254, -0.610095, -0.474374, -0.090075, 0.244272, 0.203410, 0.349862, 0.552556, -1.036944, 0.417180, 1.067964, 0.747442, 0.174783, 1.166191, -0.899744, -0.333160, -1.060964, 0.078359, 0.141430, -0.094824, -0.949449, 0.026022, -0.243540, 0.701775, 0.491909, 0.045078, -0.995680, 0.283707, 0.065462, 0.794785, 1.095672, 2.038253, 0.083903, -0.467894, 0.062039, 0.228742, -0.634436, 0.619659, 0.316091, 0.792796, 0.788598, -1.048457, -0.882282, -0.982587, -0.831069, 0.529162, 0.448449, 1.215543, 0.376655, 1.034972, -0.668359, -0.252735, -1.075730, 0.337637, -0.036745, 0.390547, -0.058036, -1.350992, -1.708233, -0.556057, 0.044467, 0.520886, -0.245460, -1.592574, -0.863165, -0.021705, -1.459971, 0.683155, 1.406411, 0.163736, 0.180574, 0.100544, -0.014702, 0.377109, 0.016539, -0.398145, 1.211886, 0.037277, 1.442719, -0.855023, 0.190181, 1.251192, -0.199667, 0.225910, 0.123415, 0.975767, 0.038910, -1.250062, -0.865632, -0.000453, 1.082752, -0.461130, -0.045185, 0.778833, -0.231451, 0.767889, 0.950657, -1.264322, 0.346756, 0.617611, 0.078424, -0.283523, -0.291005, 0.769571, 1.392794, 0.306581, 0.815418, 1.259069, 1.394830, 0.260644, -0.147373, -1.060894, 0.239904, -0.865291, 0.145390, -0.571270, 0.855709, -0.666148, -0.941604, -1.209969, 0.443706, 0.189631, 0.212230, 0.037760, 1.229048, 0.566351, -1.335600, -1.358111, 0.015296, -0.023257, -0.707290, -0.439269, -1.830789, 1.109338, -1.197248, -0.967892, 1.273458, -1.548987, -0.281183, 0.699614, -1.693262, 0.085893, 0.196678, -0.687848, -0.028304, 0.058492, -0.596301, 0.557499, 0.004753, -0.137099, 0.532887, -0.789263, -0.033352, -1.557578, 0.031022, 0.143313, 0.782732, -0.167772, 1.441613, 0.481370, 0.153674, 1.275666, 0.368378, 0.219889, 1.908404, -0.539913, -0.220301, 0.835939, 0.074274, 0.168754, -0.670483, 0.250074, 0.250606, 1.282066, 0.122452, -0.409138, 0.477485, 0.665960, 0.264513, 0.244462, -0.766134, -0.387109, 1.491521, -0.595464, 1.445272, -1.341694, 1.346380, -0.015559, 0.169699, 0.473802, -0.251522, 0.128870, -0.452314, -0.106985, 0.357785, 0.768601, -0.186836, -0.733263, 0.532873, -0.046556, -1.379303, -0.328394, 0.724661, -0.046880, -0.420221, -1.176509, 0.077040, -0.160980, -1.457012, -0.374469, 0.360446, 1.199879, -0.950283, -0.311770, -0.861221, -0.326219, -0.886959, -0.019173, -0.804603, -0.145110, 0.172603, -0.111011, -0.129521, 0.241285, 0.170361, -0.443625, -0.021753, 0.072633, 0.563395, 0.942547, -0.110138, 0.532285, -0.431836, -0.212545, 0.241099, -0.942158, 0.600449, -0.645427, -0.361387, -0.532849, -0.328790, -0.359031, 0.155564, -1.010012, 0.878506, 1.179544, 0.451060, -0.587246, -1.473734, 0.742507, -0.152667, -0.089154, 0.725924, 0.448145, 1.327408, 0.481748, 0.517749, -0.439087, -0.767327, -0.317562, -0.963798, -0.155295, -1.611076, -0.736760, -0.141913, 0.696455, -0.501021, 1.009650, -0.417100, 0.248805, -0.218522, -0.882274, -0.762248, -0.474836, -1.111332, -0.472195, 1.026389, -0.091083, -1.468349, 1.588396, 1.459536, 0.872679, 1.189462, -0.020465, -2.652960, 0.836097, -0.108802, 0.503339, 0.487444, 0.288796, -0.149230, 1.723669, 1.326712, 0.150303, -0.715567, 1.521041, 0.839058, -0.236126, 0.348449, -0.189743, -0.999338, 0.454978, -0.113078, -0.355967, 0.219733, -1.678462, 0.925221, 0.281349, 0.502747, 0.485526, 2.215123, 1.225689, -1.572290, -0.183297, -1.053326, 1.243057, 1.127326, 0.425482, -1.167636, -1.324311, 0.328010, -0.564570, -1.026676, 0.735754, 1.924423, 0.977113, -0.185825, -0.304335, 0.084210, 1.203354, 1.377207, 1.050977, -1.086157, -1.124066, 0.352433, -0.216424, 0.038128, -0.433892, -0.006419, 0.739968, 0.963349, -0.676059, 0.439721, 0.450345, -0.276241, -1.303619, -0.198606, -0.970008, -0.201385, 1.530513, 0.599346, 0.570385, 0.476559, -0.374782, -0.297255, -0.753806, 1.497056, 0.300627, -0.404046, 0.568865, -0.990389, 0.425690, -0.933574, 1.065915, -0.385244, -0.177116, -1.063580, 0.178428, 0.058992, 0.827651, -0.473994, 0.331265, 0.657876, 0.640843, 0.698361, 0.549673, 0.232483, 0.668623, -1.197152, 0.480929, 1.240717, -0.745810, -1.905026, 0.767095, 0.103786, 1.170524, -0.952408, -0.066748, 0.424861, -0.136255, -0.025224, -0.052945, -0.597771, -0.454715, 0.413931, -1.125364, 0.801601, 0.484465, -0.863046, 0.302083, -0.079536, 0.068875, 0.691379, -0.627793, -0.914694, 0.324031, -0.494108, -0.020750, 1.394933, -0.204252, 1.174026, 0.317049, -0.210559, -0.029823, -0.078657, 0.032332, 0.314897, -1.028550, 0.739355, 1.110153, -0.692912, -0.101564, -0.972804, 0.442737, 0.069138, 0.823943, -0.751347, -0.623284, 0.416302, -0.447849, -0.865251, 0.737254, 0.175767, -0.142116, 0.411459, 1.320562, -0.663323, -0.096259, 0.933196, 1.470701, 0.054877, -0.011785, 0.194116, 0.802962, -0.041178, -0.537894, 0.249019, -0.221067, 0.309599, -1.719162, -0.104423, 0.930303, -0.444503, 0.571955, -0.573695, 0.011215, -0.108491, 0.195606, -1.299110, 1.023715, -0.983640, 0.057186, -0.391953, -0.187306, -0.730985, -0.521627, -0.948246, -0.939280, -0.765175, -1.353228, -1.173991, 0.427141, -1.228944, 1.202880, -0.772638, 0.416629, 0.898097, 0.380402, -0.805034, 0.552129, -0.475897, 0.037261, -0.770310, -0.356166, 0.235771, 0.062039, -0.848198, 1.381184, 0.260680, -0.442387, -1.896000, -0.225495, -1.096121, 0.587856, -0.626971, 1.399457, -0.922987, -1.204145, -0.282807, 0.686579, 1.160958, -0.841193, 1.676645, -1.138743, -0.556020, 0.221771, 0.289905, -0.421652, -0.062543, -0.244776, -0.021300, -0.304124, -0.098590, 0.832550, -0.258847, 0.612432, -0.492680, 0.533596, -0.473908, 0.358118, -0.810444, 0.516658, 0.936809, 0.800127, -1.173993, 0.241092, -0.648681, -0.329719, -0.172401, -0.325285, -2.102810, -0.545753, -0.375017, -2.974661, 0.398467, 1.105510, -0.362389, 0.570450, -0.183192, -1.592220, -0.146791, -0.998270, 1.052159, -1.014563, -0.357075, -0.615475, 0.066042, -0.050603, 1.268924, 1.111394, -0.442363, 0.936902, 0.695246, 0.272335, -0.646006, -1.184614, -0.703524, 0.120704, -0.054029, -0.235635, -2.374027, 0.342080, 0.635537, -1.104060, -1.589049, 0.146446, -0.232117, 0.118681, -0.579416, 0.564839, -0.180279, -1.186865, -0.502420, -0.399287, 1.200750, 0.001391, -0.607492, 0.867889, 0.194823, -0.919726, -0.121487, -0.475471, 0.250438, 0.642583, 0.490459, 0.239351, -0.088616, 0.611746, -0.792151, -1.681509, 0.930524, 1.242115, -0.718563, -0.762689, -1.128326, -0.655312, 0.627445, 0.782836, -1.778404, -0.274353, -0.421497, -0.621240, 0.846464, 0.504188, 0.198827, -1.123407, -1.060399, -0.680443, -0.109405, 0.383880, -0.214442, -1.240156, 0.354756, 0.626841, 0.193950, -0.282054, -0.492465, 0.035170, 0.907206, 1.234352, -0.500964, 0.589432, 0.227899, -0.741226, 0.035833, 0.232761, 0.758834, 0.788271, -0.437591, 2.053334, -0.016972, 0.417164, -0.289397, 0.455565, 0.552883, -0.777599, -0.217818, -0.943074, 0.460138], - "granite3-moe:latest": [5.910233, 30.171839, -14.592036, 2.837715, 14.968947, 7.973449, -1.947099, 22.603910, 5.753875, 28.569792, -29.349314, -8.091486, 11.312101, 1.635193, -5.761543, 1.040875, 11.834714, -9.726265, 32.092159, -35.898239, 5.296179, -1.744865, 10.235253, 8.739743, -18.815981, -21.212708, -2.026226, -11.171863, 4.101085, 5.968066, 5.965814, -15.224704, 10.082129, -15.279737, 18.013292, -2.612643, 10.464241, -4.025630, -23.993250, 10.991261, -5.576319, 16.998455, 12.869885, 1.175003, 8.280812, 12.199456, 5.665783, 17.075645, -21.379660, 134.591949, 17.959675, 25.953827, 24.120113, 17.409477, -3.193029, 11.241851, 9.530139, -12.056103, -4.452151, -0.271666, -8.649167, -12.428501, 11.823528, -2.827536, 6.282444, 2.521258, 81.461189, 15.298338, -6.584094, 6.603992, -9.683152, -20.925825, 14.799984, -22.270163, 5.907921, -0.833670, -0.667122, 2.703424, 8.369345, -29.402857, -5.762743, -4.563978, -14.395526, -5.133063, -0.124120, 21.461061, -46.637238, 21.278778, -13.015121, 6.351894, 0.946589, -1.913780, -23.189226, -22.912931, 2.840406, -1.546906, -7.285774, -46.161957, 14.655342, 22.227030, -1.301839, -29.357885, -4.336789, 92.163307, 31.110840, -12.271099, 133.932693, 11.734908, 8.070328, 13.812112, -9.864179, 8.783020, -7.283248, -3.531120, 1.100977, -12.874575, -10.192871, 7.477422, 10.881320, -9.561343, 14.172203, 4.870072, 2.330342, 17.557465, 3.327132, -9.740596, 11.291760, 2.834996, 6.555978, -11.344123, -6.842443, -18.598501, 0.758174, 27.208895, -4.902824, -10.958056, -55.134621, 5.104919, 9.981282, -18.919510, -2.571935, 6.974890, 3.927437, -19.922615, -2.466738, 15.617038, 7.675040, 23.773939, -11.432803, 10.740471, 2.242301, 2.842329, 10.344113, 27.188694, -1.918746, -13.990616, 16.756920, 35.803310, -78.949562, -4.729366, -1.778806, 13.663913, -15.737623, 12.059778, -2.778493, -32.010658, 26.099768, -13.162955, 4.330981, 1.682542, 18.967260, 21.632246, -9.698850, -0.876216, 7.460126, 31.513733, -9.148410, -9.306043, 11.722775, 9.375770, -4.402502, 0.820594, -2.146913, -0.772945, 4.326170, 3.219532, -3.498803, 3.872662, -2.795810, 21.738985, 8.454886, 3.528073, -51.829544, -7.674875, 29.892965, 4.129654, -14.099564, -10.897354, 1.669887, -13.013097, 13.575606, -17.992901, -14.653707, 0.020252, -11.186063, 13.581324, 19.104755, -23.943918, -12.188995, -606.941040, 26.324015, 16.674185, -245.366394, -21.670475, 18.335369, -11.000136, 9.296625, 10.886216, 20.467735, -13.730722, -20.725361, 4.470503, 11.960427, 4.898565, 12.459598, -14.548553, 4.149211, -15.506085, -18.006060, 13.561481, -20.042671, -22.978138, 6.908902, 1.049820, -0.854378, 1.581094, 0.374944, -9.595409, -3.925668, -6.747450, -10.677427, 6.557892, -6.434878, 5.401307, 13.277419, -2.632324, -0.683253, 1.979805, -5.869758, 8.772308, 12.582617, -10.796289, 19.006266, -17.695400, -4.079504, -12.024731, 8.692499, 1.124261, -7.884833, -16.905472, 15.445214, -14.615550, 3.221821, 0.610939, -20.212936, 19.146111, 20.472776, 1.601480, 0.468653, 3.196803, 1.815385, 13.413655, -22.140823, 60.012062, -1.340733, 3.945969, -11.371457, -1.361438, -3.070006, 11.228428, -5.329631, -144.731705, 5.585932, 12.705352, -35.361210, 5.402887, -22.210894, -11.764082, -10.529637, -1.680632, 0.978505, 2.944480, 20.638897, -6.945477, -7.315181, 11.820772, -34.066574, -18.815998, 7.285862, -310.943420, 10.461345, 8.083133, -17.976057, -41.162441, -10.750346, 21.369474, -12.099899, -2.343555, -1.060179, 5.924515, -27.179865, 27.975437, -24.421137, 8.659485, -11.785131, -8.149186, -16.439056, 18.028307, 16.566832, -3.038346, -5.568111, 10.469731, -15.127536, 3.346772, 3.865383, 17.047647, 2.386874, -22.667032, 2.163410, 4.887003, -34.768108, -20.684711, -2.799956, 11.562538, 10.669291, -9.255035, -15.569283, 4.301740, 3.707626, -3.648189, -4.176328, -60.779106, -11.225652, 19.511650, 1.790995, 5.985159, 3.463223, -12.580428, 16.799856, 5.869790, -10.124368, 15.806347, 2.647198, -30.748787, 19.855984, -4.171432, -11.744167, -22.470293, 24.969671, 11.727280, 15.210749, 8.970414, 16.108089, 8.825900, -14.952545, -2.905712, 3.212929, 5.783626, 3.144367, 7.653569, 8.793571, 18.702265, 32.081905, -7.501697, 5.425734, 9.319864, 18.756527, -0.797716, 24.006330, -10.961069, -10.404222, 19.896885, -9.230650, 4.023786, 2.242430, 11.963447, -21.049240, 28.664921, -0.018579, -6.656789, 5.994405, 0.081606, 16.420298, -2.969083, 19.234186, 35.404984, 2.104683, -6.588911, -4.507048, 11.724409, 0.875683, -14.133551, 14.877223, -14.408369, 18.683701, -1.446610, 9.133441, -7.892530, -6.295300, 9.652716, -20.884869, 21.768879, -12.346772, -3.359479, 6.986233, 13.784170, 0.572282, 7.517334, -8.316103, -13.257382, 0.193735, 4.251532, 3.993173, 7.994923, 7.460558, -4.763490, 0.509111, -4.459810, -5.884681, 6.396923, 19.855288, -24.027454, -12.866510, 20.686476, -11.135347, 20.923820, 16.078331, -2.949684, -1.226427, 8.968578, 22.852449, -29.107840, 6.632169, 5.622813, 1.041288, -5.823139, -4.928956, 18.278795, 33.794529, 4.684862, 22.151001, -7.426543, -13.763552, -16.645988, -22.810810, 2.881028, -5.612767, 11.180967, -1.649996, -4.432179, 27.134329, -0.441665, 8.890188, 2.353519, 23.824448, 10.895750, -13.273428, -22.800825, -3.511435, -27.803415, -12.941121, 11.970799, 15.007806, -0.841761, -28.025873, -105.639389, 2.059234, -14.899364, -2.124423, -16.817869, 10.499662, 10.596079, 18.546129, 8.066932, 12.004951, 22.481850, -15.728971, -12.705195, 6.798643, 14.554914, 0.320640, -17.136030, -63.131405, -7.932780, -11.177350, 1.902833, -17.347900, -4.074312, 2.654741, 17.940918, -9.682328, -9.935791, -13.366525, -41.804581, 4.703305, -17.044256, 20.260994, -10.287923, 4.194438, 3.924806, -6.371835, 1.905040, -8.786492, -2.804256, -13.645334, 16.522154, 1.133029, -8.615473, -29.775444, 7.035748, 1.730713, -0.813137, 16.944988, 10.494798, 2.471127, -17.134981, -31.594488, 23.679823, 13.700656, 11.259837, -1.393510, 24.213184, 0.594864, 19.768007, -13.118903, -11.077514, -0.601305, -3.697073, -32.656422, -0.415944, 7.779869, 4.679246, 11.707513, 6.999825, -2.554271, -24.157104, -9.998021, 31.281271, -2.985908, 24.705114, -1.338948, 22.305872, 19.819147, 9.865061, 11.178469, 2.398972, -3.570000, 7.230457, 0.888181, -14.226989, 46.485043, 17.359091, 3.809138, 6.635123, -0.314788, 3.362935, -30.779945, -9.531190, 4.284771, 7.837353, 1.124498, 3.366127, 0.463016, -5.294980, 47.850704, 31.871058, -24.967073, 28.440832, 16.762613, -14.390144, -3.231953, -3.074816, -3.089787, 25.336514, -4.237896, -17.347275, 4.750774, -3.120321, -9.072162, 7.193366, -3.365265, 22.379192, -27.603596, -10.382773, 12.032997, 13.361623, 39.001362, 2.413692, -1.322643, -0.037110, -20.961409, -10.183399, -29.152880, 5.241103, 10.669732, 20.543423, -5.331350, 1.994862, -9.354459, -1.184517, 10.231616, -2.086119, 16.555714, -24.108919, -0.185303, 9.941091, -31.506477, 4.210682, -21.643034, 13.312780, 5.000698, -8.312237, -5.463239, 4.870609, -7.243948, 11.544545, 22.768454, -19.319820, 27.335552, -9.086289, -20.315342, 2.858530, -2.399571, 15.547544, -16.229853, -9.716353, 24.424154, 4.235106, 1.609934, -2.482428, -10.919318, -22.083069, 20.712894, 6.792789, -13.999515, -13.862957, 5.544644, -8.237908, -3.620728, -3.646942, 6.877924, 11.945367, -3.056302, 6.354347, -6.600556, -15.953823, -4.270577, 1.169367, -6.677580, 16.452318, 16.953333, 19.365353, -6.327491, 7.413441, -12.910234, 2.577799, 16.230818, -4.133609, -13.569720, -6.301839, -23.760706, -23.358809, 2.195146, 16.855768, -0.563238, 5.755409, -3.455244, -32.581589, 7.362275, 18.226692, 19.073891, -2.889560, 19.596006, -1.847176, -35.965023, 1.004362, -7.027219, -5.233053, -20.280478, 0.991492, 13.779267, 9.769767, -21.226250, 17.940596, 29.440950, -29.128031, 8.452128, -4.824466, 10.684808, 20.092855, 26.152739, 4.438401, -1.690581, 4.477728, 6.524579, 6.030072, 1.748050, 15.232247, -15.253749, -17.199966, 7.050725, 8.969168, -6.712491, 0.262175, 18.948431, -14.762223, 3.300240, -16.243732, 27.153996, 6.637587, 8.960702, 2.332713, 2.129112, -20.963326, -7.114325, 154.496887, 29.787031, 20.236282, -15.849831, -18.543089, 9.013681, -0.718873, 0.173534, 5.531977, 4.930003, -1.656422, -9.749697, -10.176377, 19.374493, -5.686445, -17.527151, 15.001776, 9.464457, -8.424029, -4.525608, 4.965511, 17.492561, -45.308231, -10.879435, -19.515076, -11.785777, 3.658191, -16.178417, 14.068483, -34.595879, -27.803114, 13.434047, 10.387864, 9.177503, -3.742442, 3.387829, -14.570332, -16.079081, -13.967793, -13.029141, 8.431294, 9.493267, -37.916645, 11.751331, -7.741582, -9.540742, -9.780586, -2.392878, -7.884768, 24.516655, 5.469426, 22.973869, 4.623669, 0.818910, -13.362819, 11.305873, 15.217951, 38.241253, -18.920458, -7.783936, -24.702259, 6.128407, -7.217543, 6.566425, 3.321952, 12.285128, 10.420273, -10.466927, -1.137602, -45.324993, -23.398872, -1.858458, 4.114500, 6.052193, -4.522782, 3.243538, -15.193633, -9.601283, 13.992054, -3.657720, -2.701909, -4.004214, -5.377882, 5.377224, 11.000648, -7.405027, 1.843000, 3.031408, 0.600323, -2.970792, 17.768391, 21.035534, 4.459052, -4.868608, 10.544399, 32.276367, -16.770508, -25.057745, 22.813244, -1.189920, 0.185402, -4.412627, -15.375156, 8.816485, -12.502228, 9.948814, -11.768686, -25.030834, -3.497505, 15.223778, 14.495900, 6.307823, 2.048729, 3.727947, 4.793435, 1.462687, -13.884528, 28.467163, -9.824447, 17.221064, -4.340904, 84.522087, -9.192829, 3.444686, 11.529037, -29.989532, -6.438466, -9.154363, 2.159212, -0.047614, 0.761222, 15.104259, -8.908755, 17.157633, 17.249439, -11.561856, 2.290649, -33.708897, 12.175060, 6.480854, 13.553982, 27.790758, -2.050587, -1.667087, -0.347506, -31.598421, -11.870290, -11.244892, -14.819248, -12.020247, 4.971821, -11.470158, 6.001273, -5.779810, 2.686197, 10.615704, -28.309267, -4.003694, -2.492575, 7.409032, 1.473416, 0.224771, 23.014254, -12.801020, -1.441912, 4.213243, -3.654921, 3.744973, 14.405837, 4.242178, -0.559246, -13.136638, 17.801081, -9.959801, -4.565279, -20.750568, -2.337087, -8.057383, 6.145776, -4.304662, -0.613708, -18.388718, 5.646697, 9.464123, -2.128031, -21.369585, -8.266222, -5.082420, 4.194514, -7.263211, -13.140247, -17.395348, 8.898520, -22.150940, 16.164259, -17.093813, -6.663777, 16.258022, 12.335802, -0.267598, -11.785521, 1.338714, 12.239976, -3.571168, -0.146445, -18.020006, 6.885163, 16.264381, -4.918350, 4.971773, 76.457527, -12.357264, 3.178989, 13.972784, -17.338724, -53.524242, -6.375101, -4.122850, -22.754618, 14.133285, -4.418598, 43.380146, -11.148293, 4.401711, 28.880716, 15.529907, -0.676613, -0.171630, 0.536704, -10.389581, 2.925949, 11.855149, -0.448767, -0.929932, -33.834824, 13.853880, 9.716026, 14.485927, 14.891504, 14.833290, -7.500180, 4.391589, -8.655250, 0.577355, -21.714235, -1.320842, -7.442505, -10.944694, 3.189536, 7.628008, 19.579287, 2.439533, 20.716356, -13.067318, 9.035158, -16.808308, -5.522472, -17.607924, 17.414011, -8.096068, 9.939309, -8.186272, 25.231920, -10.807590, 3.736280, -12.678774, 24.700350, -0.242279, -6.742983, 1.259873, -19.214605, -1.968102, -2.376017, -23.590635, 21.091452, 8.131310, 6.561183, 1.719079, -28.888819, 36.343685, 11.717151, -12.670501, 4.639385, -7.803811, 22.195730, 19.185535, -6.677001, 26.386492, -3.577444, -16.164864, 4.930522, 11.364016, 3.831939, -6.234989, -12.353168, -10.714200, 3.026727, 24.589510, 5.440655], - "nemotron-mini:latest": [-4.120038, 0.711547, -0.991387, 0.004026, -1.077477, 2.553976, 2.530914, 2.930088, -1.663075, -9.611784, -7.395068, 1.774247, -1.324328, 73.225052, -5.281722, 2.737439, 2.400243, -1.402780, 1.992445, -4.149514, 2.973329, -0.158553, 0.706131, -0.794330, -10.818738, 2.617805, 1.099990, 2.067191, -2.974320, 0.851727, 0.877344, 2.652516, -0.264260, -4.018307, 0.211724, -3.586028, 1.168983, 5.037290, 1.529527, 8.201462, 1.489855, 0.662053, -5.822824, 9.936276, -12.036245, -1.903112, 0.211410, 18.828714, 0.515774, 3.865259, -1.826139, -2.890222, 10.017738, -2.666493, -2.559016, -1.053113, -0.235626, -2.227849, -3.839067, 3.596564, 4.224329, -1.323692, 5.120552, 2.175209, 0.829468, -4.033612, -2.261686, 5.083168, 0.101488, -3.915002, 3.628062, 1.046779, -0.380685, -0.274417, 2.351975, 15.734816, 0.374099, 0.691106, -0.060621, -2.209861, 0.662186, 7.077675, -3.494924, 2.054063, -2.514411, -8.185169, -5.401649, -0.725978, 1.581109, 1.139995, 1.942631, -2.779927, -2.191670, 2.025638, 0.612604, -0.178798, 0.157385, -2.053472, -8.938956, 0.739186, 1.525432, 0.878664, 1.668942, 5.504779, -5.052747, -1.644298, 1.138673, 3.222665, 1.341606, 2.952670, 0.594875, 4.221618, 0.232396, 0.093857, -0.212279, -1.150683, -2.670379, -2.926181, -2.985442, 0.635515, -0.426584, 2.417369, -1.481988, 2.317802, -2.719497, -1.611657, -1.703588, 0.953786, -0.350103, -1.516849, 8.258697, -4.537434, 10.151460, -0.154285, 0.275394, -2.321293, -2.241937, -0.865318, 3.311065, -0.864827, 0.238390, -10.650764, -0.704152, -0.155314, 0.941014, 0.940291, -1.228785, 1.792918, 0.400272, -0.020393, -2.235857, -2.379023, -0.884208, -1.071011, -0.353613, 1.854456, 0.373228, -2.420345, 2.117029, 0.967106, 0.389013, 0.405657, 0.641711, 2.102300, -0.564671, 1.786480, 1.200751, 2.116862, 1.117827, 1.999030, 0.900137, -1.613231, -3.082652, -0.171636, 16.678534, -2.551064, 17.355364, -2.315114, 2.343719, 4.020091, -0.091294, -1.180222, 2.152392, 1.284814, 1.819574, -0.914603, 0.087546, -0.195623, 0.566840, -0.391695, -1.265887, 0.111707, 0.199983, 3.345609, 0.113387, 3.538256, -1.050486, 0.954481, 0.589756, -4.268962, -0.181804, -1.883747, -1.323785, -1.564519, 0.341528, -0.845928, 0.497681, -2.345117, 3.805112, 0.932985, 0.535690, -0.180280, 0.362456, 1.036545, -0.628692, -0.446748, 1.080820, 11.536877, 0.591646, 1.228665, 0.372442, -0.730955, 2.290035, -2.020121, -1.763714, -2.694391, -1.878185, 0.836524, -0.188292, -3.075404, 0.790510, 1.291605, -0.383334, 1.130402, 0.174084, 1.006510, -0.393040, -0.974748, 3.473970, -0.211168, -0.270774, -0.625871, 1.146878, -6.138976, 1.381635, -1.229375, -1.954015, 0.785005, -0.259023, -1.243465, -3.147345, 0.036017, -0.300099, 1.216044, -2.399574, -0.199756, 0.727305, 0.343471, -1.013342, -1.159037, -0.158584, 0.651164, -1.548232, 0.229590, -1.746092, 1.144064, 0.296701, 1.036485, 1.424864, 2.413066, 1.017853, -3.336513, 6.409276, 0.828699, 2.074002, -1.148892, 1.069268, 1.794530, 0.473608, -1.042171, -4.028618, -0.823841, 45.092232, 0.499238, -3.086152, 1.981941, 3.784814, 1.625841, 0.185681, 1.623077, 1.301530, 10.822767, -0.671696, 0.794590, -0.879296, 1.547901, -0.376069, 1.050125, 2.094375, -0.981282, 0.385528, 1.449807, -0.987496, -1.290804, 2.214968, 0.314758, -0.956137, -19.336226, -1.869080, -0.173513, 1.197664, -2.100749, 0.455114, 1.793306, -0.289776, 8.657969, -3.828034, 2.115680, -1.153528, 2.196890, 0.552541, 0.225195, -0.810835, 0.276522, -0.774294, -1.171754, 0.850747, 1.342212, -0.524275, -0.331715, -0.946968, -0.507740, 0.222476, -0.987027, -1.894623, 0.522413, -0.205396, 0.040288, -1.290450, -0.977973, -1.869196, 1.261484, -1.666716, -0.284608, -0.436559, -0.545000, -0.715979, -0.166126, 0.670192, 0.940825, -2.828389, -1.134436, -0.899325, 2.032113, 0.320457, -4.589130, 8.592949, 0.534099, 1.087636, 1.638817, 0.974161, 3.443498, 13.883852, 1.441055, -2.571116, 2.594905, -0.364179, -0.294388, 2.921740, -0.786495, 0.846024, 1.279914, 0.683920, -0.413425, 0.507789, 2.832381, -0.448878, -0.343657, -0.303370, -0.161274, -2.049919, -1.201430, -1.143355, 0.977756, 0.662818, 2.506859, -1.170880, 1.953620, -2.775410, 0.015006, -0.479959, -7.531682, 0.899604, 2.448596, 2.964283, -1.932552, 3.637474, 0.381634, -0.179009, -1.792929, -8.571464, 1.107289, 0.402882, -0.189643, -0.238225, -0.905025, -1.205879, -13.095944, 2.613966, -0.171709, 6.627252, -1.115685, 2.353951, 0.132741, -1.710857, -2.648761, -0.796763, -0.522527, 0.585942, -1.651109, 0.255303, 0.537679, 0.975097, -1.685947, -2.443757, 1.417167, -0.510178, -0.198517, 0.937678, 0.789442, 0.840620, -1.329556, -0.172105, -0.440448, -0.602640, -0.109061, 0.651741, -12.457002, 0.059279, -1.437292, 0.538130, 0.311163, 1.682207, -1.106353, 0.227294, -2.364755, 6.533086, -0.738967, -1.399149, 3.559586, -1.284343, -0.219988, 0.876421, 0.677565, -18.688902, 0.853895, -0.000468, 1.992689, 2.193721, -0.362417, -1.373153, 1.063549, -1.210380, 0.156591, -0.620162, 0.880547, -0.036021, 0.034574, 0.631643, 2.201981, 1.394046, 2.824895, 0.577892, 0.768444, 1.934837, -0.434852, -1.415033, 1.258731, -1.099884, 3.263321, 0.534831, -0.107584, 3.674846, 2.530393, 0.900507, 0.172028, -1.092034, 1.853497, -1.588007, 1.578310, -2.032119, 0.472409, 1.753164, 0.327808, -0.348128, -1.324746, -2.508019, 1.241464, 0.319598, 0.877602, -2.989245, -3.144064, -2.318311, -0.637586, -0.162224, 0.491977, -0.323674, -1.160390, -2.205703, 0.892704, 1.986179, -0.395600, 2.590883, -0.255823, -1.498204, -1.697398, 0.942510, 0.514705, -3.356550, 2.165736, 1.195359, 1.960565, 1.946751, 4.116686, 1.360731, -0.122520, -0.692262, 0.690307, -0.819340, -0.026968, -3.153666, -0.293139, -2.619861, 1.647953, 0.397924, 2.970011, -0.801167, 1.623489, -2.442073, 0.281765, 2.345005, -0.428580, -0.378712, -1.266423, 0.697442, -3.972456, 0.459115, 0.054410, 2.708170, 1.367932, 0.121947, -0.192998, 1.148419, 1.134884, 0.684813, -3.908074, 0.385640, -2.308028, -3.269670, 0.681865, 1.228514, -2.240721, -0.038122, 2.127180, 1.625306, 1.225985, -0.355789, -0.968112, -0.642233, -0.018510, -0.080948, -0.625026, -0.619176, -1.715348, -0.857318, -0.805670, 1.988237, 0.686941, -0.268361, 2.369648, -0.571147, 0.494377, 0.755837, -1.246764, 1.288619, -0.426436, 1.476565, -1.107682, -0.480250, 0.829176, -0.665775, 12.427722, -1.107234, 0.508904, 1.021439, 2.089632, 1.291023, -1.364481, -0.939930, 3.418002, -2.319383, -3.269610, -1.065671, 1.291446, -0.274947, 0.576194, -2.398307, -0.737248, -0.854351, -2.128317, -1.328655, -0.022095, -1.454497, -0.697447, -3.481141, -2.382665, 1.787495, -0.401200, -2.694632, -1.162223, -0.632749, -2.025328, -0.725091, -0.069712, -2.185089, -0.000626, 1.125538, -1.185506, 0.623551, -0.292109, 1.436726, -0.416528, -0.276014, 0.445017, -0.182922, -2.799006, -1.169948, 3.278847, -0.088762, -0.718230, 0.678400, -8.835315, 0.711337, 4.121616, -0.614538, 2.355267, -0.112793, -0.703143, 0.084732, -1.509933, -0.853429, -0.621376, 1.783902, -0.466435, -1.201708, -1.254324, 2.378747, 0.730460, 0.751666, 2.915919, -0.293372, 1.134014, -1.637401, 1.384194, -1.208763, 1.278465, -3.401009, -0.416853, 1.349236, 0.265887, -0.491655, 0.338902, 0.046566, 1.604596, -0.828569, 1.914908, 0.603021, 0.668613, 1.035247, -1.976538, 0.547510, 0.741862, -0.712208, -0.140703, -0.306417, 2.992609, 1.154214, -3.117952, -1.204803, 1.705627, -0.341271, -0.724283, 2.879889, -1.396597, 0.326837, -1.837137, -0.145596, 2.602407, -1.475421, -2.564685, 0.153613, -1.007649, 2.566728, 1.798051, -1.111874, -1.914844, -0.251985, -1.032269, -2.417181, 0.386264, 2.147783, 0.609979, 1.213180, -0.877796, 14.091846, 3.847449, 0.423241, -1.325773, 2.689366, -0.681466, 0.303946, 0.536334, -1.924172, -0.537626, -0.211922, -1.426566, 0.108177, 1.366546, -1.519071, 1.384233, -1.265454, -0.874439, -1.977748, 2.847632, -1.154848, 0.280883, -1.014754, -0.756724, 2.138873, -1.008579, 0.834355, 0.203577, 2.042146, 0.453894, 0.127396, -0.615425, 0.499804, 1.003915, -0.702003, 0.017341, -6.025723, -1.420500, -0.687909, 0.596307, 1.167132, -0.038750, -2.649878, 0.592671, -2.787702, -0.196119, 0.063055, 0.668322, -0.615288, 1.128135, 0.236712, 1.931765, 0.324320, -1.003573, 2.949824, -2.625035, -0.616568, -3.071275, 0.683821, 1.501190, -1.695908, 1.724847, -2.192132, 0.929228, 0.788780, 10.747573, 1.629455, -2.474180, -3.146395, 0.859624, 0.774199, -1.251014, 2.078666, 2.501911, 1.471870, -0.297639, 0.461419, -0.439189, 0.285172, 1.070387, -2.302202, -1.006166, 1.847144, 1.137581, 2.586329, 0.419907, -0.220795, 0.216225, -8.465442, 0.099509, 1.474104, -3.087058, 0.495809, 1.102142, -0.809829, -0.959253, -3.254194, 1.518994, 1.416016, 2.448883, 1.156614, -1.985732, -0.743689, 0.775749, 0.676275, -3.917594, 0.841390, 0.533269, -1.898400, 2.786950, -0.650033, -2.154030, -1.252244, 0.675762, -1.768394, 0.496726, 0.008671, -1.109113, 0.511296, -0.684406, 0.123855, -0.970569, 0.687012, -1.307973, -0.268266, 0.212728, -1.362499, -0.984690, 0.688890, -0.090851, 0.284262, -1.270952, -1.581297, -1.226040, -1.528808, -0.386581, 0.856013, 0.004575, 0.941012, -2.166249, 1.776329, 1.837429, 0.628708, -2.208156, -0.374813, 1.076870, 1.776096, 0.382324, -0.488550, -1.710793, 2.189963, -2.193386, 0.093312, -0.845919, 0.104237, 0.710326, -1.325291, -4.074582, 1.386155, -1.362984, 0.410051, 0.012850, -0.968827, -0.408812, -1.409927, -0.287591, 0.247293, 1.112642, -0.587984, 0.325716, -1.847045, -0.020897, 0.189674, 0.602778, -2.612956, 1.027682, 2.356382, 0.865034, -1.407413, -2.106067, -0.822541, -0.933455, 0.477729, -0.495813, 0.537693, -1.861761, -1.403352, -6.387653, 0.705838, 0.470781, -2.941714, 0.783758, -0.259212, 0.886806, 0.850351, 1.435188, -0.549425, -0.036716, 2.705648, 1.418543, -0.313935, -1.051778, -2.252609, -0.280129, 0.694766, 0.761522, -0.271357, -1.351199, 0.640514, 1.083974, 2.511422, -2.037619, -1.219427, -2.328991, -0.820033, -2.001815, -0.951034, -0.098321, -0.849577, -2.076226, -0.997272, 0.595438, 0.946848, 0.758755, -1.450784, -0.305076, -5.650831, -8.792426, 3.355259, -1.786570, 2.729236, -0.378069, 1.466914, -0.833942, 0.370441, -0.244222, 0.412328, 1.553317, -0.930822, 4.017974, 0.073678, 0.974857, -0.160225, 1.702837, 0.350974, 0.863976, 0.198430, -0.704718, 1.089129, -0.970466, -0.562427, -0.765933, 0.419560, 0.141009, 0.808560, -0.106841, 1.581344, -0.773920, -0.169148, 0.952092, -1.016463, -0.930622, -0.270154, 2.687557, -0.144619, -2.424826, -2.775465, -0.119660, -1.743029, 1.909370, -1.058119, -0.395479, -6.764561, -1.881087, -3.378350, 3.582016, -3.627630, -1.611914, 1.979339, -1.333062, -0.443549, 0.659470, -1.481132, 0.129869, 1.579404, -0.498087, 1.202215, 0.517257, 1.187280, -0.495755, -0.530649, -0.748800, -1.750288, -0.609772, 1.921934, 1.126505, -0.699985, -0.606027, 0.535565, -2.238772, 1.818144, -0.099951, -1.194464, -1.686393, 3.186570, -0.295847, 2.763192, 0.504193, 1.273901, -1.208753, 0.086733, 0.165759, 1.768771, 0.595038, -1.188871, -2.569773, -1.262780, 0.666044, -1.761325, -0.310582, -1.538806, 0.583538, -1.650966, 0.745306, 0.559141, -0.714205, 0.601608, -2.177805, -0.222916, 1.424731, -1.399902, -0.936130, -2.812508, 3.003098, -2.821995, -1.441686, 0.722480, -0.221376, -2.076210, -1.700804, 1.431648, 1.481000, -0.299278, 4.351317, -0.526738, 0.039587, 2.241846, -0.252646, 2.819084, -3.088144, 1.070554, 1.794986, 2.111658, 0.148549, -0.007432, 1.690574, 1.282853, -0.432758, -1.751136, -1.546041, -0.981039, -1.576312, 1.121798, -0.282309, -3.665804, 7.227891, -0.709919, 2.227319, 0.522394, 0.157321, 1.136676, 1.581767, 1.099154, -0.096848, -0.392499, -2.107337, -2.612769, -0.693609, 1.215889, -0.680887, 0.334657, -0.100493, -0.047590, 0.808193, 0.011965, -1.278237, -0.322477, -0.451016, -0.290758, 1.560038, 0.385432, 0.231185, -0.875851, -0.266539, 0.410902, -0.729591, 1.699829, 0.787876, 1.182208, -0.008651, 2.660361, -0.572185, -0.612873, -0.112692, 3.604835, -0.530817, 0.051921, -5.093953, 0.265582, 0.836985, 0.299400, 3.361667, 0.034345, 3.555858, -0.633714, -3.697381, -0.093796, -2.146292, -0.563349, -0.569491, 1.168705, 3.316072, 2.372404, 0.628388, 0.249071, 0.663080, 1.232120, 0.514750, -1.542467, 1.624973, 3.168562, 0.715801, 0.252510, -1.825370, 0.838917, -0.690693, 1.408648, -0.603600, 0.657941, 0.174603, 1.296732, 0.436804, 0.050912, 2.139699, 1.385786, -4.000784, 0.246543, 0.840831, 0.360396, 0.365326, -1.859958, 1.072193, 4.836280, 5.614607, -0.762466, 0.193026, -0.065408, -1.214958, 0.840172, 0.268356, 1.812064, -0.389973, 0.393329, 4.318853, 0.066308, 1.596426, 0.832660, -0.840357, 0.333118, 0.839722, 0.852698, 2.209760, 0.025591, 2.125010, -1.646916, -0.723286, 3.143192, -1.101914, -1.700010, 1.047884, -0.223058, 2.431010, 1.964614, 0.653134, -0.463696, -0.627593, 2.656858, -0.097684, -1.882960, 1.139552, 1.045971, 2.037109, -2.034312, -1.832128, 0.680087, -0.660167, -1.160689, 0.488568, 0.865070, 1.748245, 0.230193, -1.580301, -1.652970, -2.123022, -0.067249, -0.627098, 0.204704, -1.211521, 1.547984, -5.892817, -2.677408, -4.311819, 1.337836, -1.609935, 2.590586, 1.401891, 1.580933, -0.199859, -1.311303, -0.122473, 0.138223, -0.673348, -1.165293, -1.090712, -0.684587, -0.586424, -0.708054, -3.427097, 1.882552, -0.522692, 0.561334, 0.331448, -0.025046, 0.001716, 0.111988, -1.193842, 0.149182, -1.432872, 0.407708, -1.451432, 0.554744, -0.795857, -0.737003, 1.430273, -1.225829, -1.842758, 0.283813, -1.230769, -0.821415, 0.238414, -1.203064, 0.274010, -0.386080, 0.925102, 3.856348, 1.943906, -1.123320, 0.578006, -0.552951, -1.392412, -0.578234, -1.076848, -0.779367, -0.488024, 0.237059, 0.257224, 0.829635, 1.144735, 0.533952, 4.213201, -0.862246, 3.529323, 1.945243, 0.128751, -0.112346, 0.621396, -1.864277, 2.387606, 0.323706, 0.333739, -0.709678, 3.908322, 0.227164, -0.612416, 0.798259, 0.966086, -0.063895, -0.440826, 0.711594, -0.652940, 0.051804, -0.522274, 1.035364, 0.094041, 0.549716, 0.843440, -3.225272, 2.123960, -1.514610, 2.690585, -0.775321, -0.071940, -0.535653, 1.187980, 0.831565, 1.854406, 0.000889, -0.852992, -0.829247, 0.172915, 0.607090, 2.261234, -0.577887, -0.223631, 0.521219, 0.723837, 0.590144, 1.578582, -1.424523, -0.684811, 0.591908, -1.767461, 1.336581, -0.299392, -1.484266, -0.102010, -1.956955, -1.095171, 0.078446, 0.439536, -0.652268, -0.425554, -0.678455, 2.091768, 1.964156, -0.223128, -1.026644, -1.186581, -3.105243, -3.229987, -0.752073, 0.075520, 1.096994, -1.848168, -0.196812, 1.016304, 3.466650, -0.694447, -1.023418, -14.223376, 1.919446, 0.381060, -3.340447, 0.826075, 0.816453, -1.251773, 2.895489, -0.060124, 1.730335, 2.127186, 0.565133, 2.378071, -1.229836, -0.742808, 1.838672, 1.338558, 0.631052, -0.619672, 0.882627, 2.335589, -0.625769, 1.046581, -2.041212, -1.303177, -0.164399, -3.171140, 1.470407, -0.889253, 1.296392, 0.634034, -0.207822, 0.259247, -0.725371, 0.001653, -2.288200, 1.107141, -1.614146, 1.216030, 2.295768, -0.101712, 0.414017, -0.562038, 0.089368, 1.577849, 0.685630, 0.147774, 0.146493, 0.822355, -0.116812, 3.139313, 0.675288, 0.796764, -0.850924, -0.228959, -2.156343, -0.138593, -0.749696, 0.454034, -1.208326, 0.781049, 1.850878, -2.035055, -2.229368, 1.617962, 1.064388, -0.470157, -2.642538, 1.063012, -1.676346, 0.640605, -0.741748, 0.111837, 1.850261, 0.909178, 0.296234, -0.474660, -1.068781, 10.984878, -2.305124, -4.163750, -2.249644, -0.530302, -0.153850, -1.439902, 1.934667, 1.940011, -1.304234, -2.033562, 0.970429, -1.567272, 0.150162, -1.086878, 1.947379, 1.889387, 0.886676, 0.217362, -0.471853, -1.020441, -1.004290, 2.009722, 1.053132, -1.872133, -2.491603, 2.672606, -0.367110, -0.318741, -3.769757, 1.251371, -1.036518, 0.079666, 1.006413, 0.130778, 2.303427, -0.465912, -1.414802, -0.156666, -1.730807, -0.007416, -0.340561, 0.407324, 1.083252, -0.441983, -0.073141, -0.873232, -0.551301, 0.586208, -0.683542, -0.972109, -0.738272, -1.419129, -0.784290, -1.908111, 1.048776, 1.112361, 1.486281, 0.111446, 1.104565, -0.807457, 2.507578, -1.981948, 1.769490, -2.790846, -0.760780, -0.691268, -2.152983, -2.790889, 0.395263, -0.895858, 0.498073, 0.401830, 0.704802, -1.952522, 1.557720, 0.809939, -1.992283, 0.627598, -0.369150, 0.148913, -0.515960, 0.805138, -3.113520, -1.499959, 1.451287, 0.783183, 1.751803, -1.487845, -3.151612, -0.932889, 0.726342, -0.188820, -1.592091, 0.559781, -0.627185, -0.400851, 1.804299, 2.004846, 0.692698, 4.681093, -2.665981, 0.445699, 8.054358, 2.640569, -0.900600, -0.463237, -1.379600, -0.612482, 1.097925, 1.127894, 2.100681, 1.524652, 1.551129, 0.966367, -0.950918, 0.893282, 0.698710, 0.359133, 0.211088, -0.471570, 1.671166, 1.074640, -2.069757, 1.551382, -0.398993, -1.369890, -0.042689, -0.711931, -1.962018, -1.024064, -0.372630, 0.417639, 0.132114, 1.045222, 0.840674, -0.908199, 0.391756, 2.193799, 0.282602, 3.832250, -1.424545, 1.820177, -1.719480, 1.646421, 0.961916, 0.217981, 0.255106, 1.913936, 0.190913, -1.364432, 1.199430, 2.213551, -1.193318, -0.664005, -0.420860, 1.669962, 1.418524, -0.394983, -1.861321, 1.488656, -1.248461, -0.576054, 0.635768, -0.623423, -0.997677, -1.254219, 0.986769, 3.248942, -0.955006, 0.854402, 2.133770, -0.320522, -1.354895, 0.454979, -0.012248, 0.552766, 1.914990, 1.185136, 2.165647, 0.199811, -0.308959, -0.028716, 1.249419, -1.675196, -1.521112, -0.339116, 1.913370, -0.689238, 2.666677, -2.409486, -2.133920, 3.054758, 1.964703, -0.315777, 0.363499, 0.573369, 2.127483, 4.207703, 0.016491, -1.383848, -0.984142, -1.302895, 0.014881, 1.543277, -0.704435, 1.940655, -3.410389, 0.076540, -1.549596, 2.088219, 1.593110, -1.010924, 0.459974, -0.171825, -0.381877, 0.606960, 2.214293, 1.074450, -0.551852, 0.740115, -2.793068, 0.969792, 0.736658, -2.834861, 0.135510, 1.133700, -0.046007, -0.757080, -1.968265, -1.003406, 1.827479, 1.787595, -0.795879, 0.652203, 0.912435, 0.781862, 1.392779, 1.042729, -0.594439, 1.543801, 0.719703, 1.755961, 0.769557, 1.011888, 1.827554, 1.321115, -0.699680, -0.805209, 1.331005, 1.346431, 0.137598, 2.289003, 2.015941, -1.329036, -0.920616, -1.236863, -2.428651, -0.045954, -2.082391, -1.175521, -0.129158, 3.060616, -1.286548, 0.604616, -1.110072, 3.035698, -0.322158, -0.781870, 0.110167, 3.495563, 3.330736, 1.314148, -0.113278, 1.077862, -0.976463, -0.785742, 1.020356, -0.517181, -2.684402, -1.044523, 0.541801, -2.004713, 2.293418, -1.004760, -0.700835, 1.549735, 3.455583, 0.475930, -1.473817, 5.537278, 0.213822, -1.876355, 0.905125, 1.255895, -2.484677, 1.040425, -0.040539, 2.137502, -3.163284, -1.409379, 0.256282, 2.132105, 3.210793, -1.145492, -0.661010, -0.634037, -0.233181, 0.770570, 1.238388, 1.671249, -2.510621, -1.484118, -1.273155, -0.988314, -0.242384, 0.810030, -0.151580, -1.895777, 0.313042, 1.864123, 1.276387, -1.818408, -1.310768, 0.070033, 2.705100, 0.858920, 0.825496, -3.990004, 0.593197, -2.876160, 1.959472, -1.371782, 0.832580, 1.282863, -0.808298, -1.550045, -0.889529, -0.778651, -0.024775, -0.583029, -1.319810, -1.694946, 0.992727, 1.765150, 0.382885, -0.933830, 0.787292, -1.936184, -0.335143, 1.341774, 2.008909, 1.092610, 3.670715, -2.714478, 0.282289, -1.960100, -1.777495, 0.233954, -0.183462, -3.187413, -3.235547, -0.510362, -0.675362, 2.505375, 0.799373, -1.800931, -0.038045, 2.503350, 0.384175, -0.722759, 2.429610, -2.018362, 0.962014, 0.837315, -0.957888, 0.412519, -2.701824, 1.410287, -1.368492, 1.301900, 0.818753, 0.811378, -1.196061, 2.048241, 1.041366, -1.547336, -2.016230, 2.380980, 2.117204, -0.677142, 0.057818, 0.756670, -2.078185, -0.890906, 2.161394, 0.247280, 1.819405, -0.063750, 1.226707, 0.709927, 0.356287, 1.686424, -2.409448, 2.856144, 0.773759, 0.808617, 0.047684, 1.338031, -0.535488, -0.595152, 0.761812, -0.957863, -0.864500, 0.314729, -0.487064, -0.201846, -1.174313, -0.291597, 0.292136, 0.236110, -1.395016, 1.495998, 2.849277, -1.691042, 1.584919, 0.613885, -0.725392, -1.718326, -0.025391, -0.855043, 0.526444, 2.155432, 1.081418, 0.551306, -0.672045, 0.043811, -3.512949, 0.118685, -2.592598, -1.259155, 8.140533, 4.402100, 1.710823, 2.198954, 1.540033, -0.867360, -1.285532, 1.220744, 1.402004, -1.458586, -0.967569, -0.511343, -1.010175, 0.901374, -1.329423, -0.092832, 1.533759, -0.573599, 0.414767, -1.191547, 1.919353, 1.747830, 1.063049, -1.393383, 1.878260, -1.874399, 1.818325, -2.460202, -0.242430, 0.140436, -1.051427, -3.195519, 1.888365, 0.435774, 0.737258, 0.276280, -2.694203, -0.301707, -2.604361, 1.532419, 1.518063, -0.370006, -1.342802, -0.244225, -0.002818, 3.910189, -0.583169, 1.374988, 2.067113, -0.452302, 0.077718, 1.090760, 1.546354, -0.520948, -1.686626, -0.994464, -0.251366, 0.434730, -0.858291, -2.092327, 0.750991, 0.926950, 1.421602, -1.898955, -0.393026, -0.265128, 1.158799, -2.103380, 2.672633, 1.070735, -2.140461, 0.094960, -0.050966, 0.937487, -1.677205, -0.379211, -1.080526, 0.138581, -0.393641, 0.579808, 2.001253, 3.651859, 1.969691, 0.106348, -0.583629, -2.020965, 0.364155, -1.018937, -0.334326, 0.100708, 2.472999, 1.387101, -1.237134, 3.721129, 1.519421, 0.288411, -3.984812, -0.458773, 1.429405, -2.381791, 0.315217, 1.841713, 1.592145, -0.731089, -1.414775, -1.360183, 1.536013, -2.214556, -0.113089, -2.205454, -2.285627, 1.277101, 0.387191, 0.300088, 2.730620, -0.324076, 1.435243, -4.239858, -0.348253, 1.104643, -0.157990, -1.573482, 1.888076, -0.055906, 0.084812, 3.412147, -1.579177, 0.927390, 2.076808, -2.592346, -2.119700, -0.426326, -2.111193, -1.366671, 1.894348, 3.043322, 0.314089, 0.855666, -0.823261, 2.400388, 3.133502, -0.007147, 0.929144, -0.959069, 2.531155, 2.545533, 0.651116, 1.824821, -0.305034, 2.389764, -1.887502, -0.342360, -2.491367, 0.105732, -2.119360, 2.546562, -0.861071, 0.350706, 0.546464, -1.499462, 0.417675, -1.568473, 0.692838, 2.891876, -0.138319, -1.334901, -0.685667, 2.280439, -3.468426, 1.245887, 3.320926, 0.961338, 0.064542, 0.788105, 0.255912, -1.706218, -0.012525, 1.368832, -1.081255, -0.986172, -1.213450, -3.795788, 0.981057, -2.302466, -0.479100, -1.789316, -0.336261, 0.745378, -3.662589, 1.394853, 1.858585, 0.538975, -2.899513, 1.675120, 1.649777, 1.056105, 0.253166, 1.032704, -3.451596, -0.954366, -1.085564, -1.470250, -0.455586, -1.062200, -0.381748, 0.024468, 0.769484, -1.769355, 0.767472, -1.093527, -0.806618, -1.543110, -0.067089, 0.991702, 0.546402, 1.282086, 2.375943, 0.573987, 0.246033, 1.475257, 0.881634, 0.960805, 2.125304, -2.657653, 0.495612, -3.120179, 1.015683, 2.455024, 0.125900, 0.913431, -2.534758, 2.095575, -0.868909, -0.881125, 2.216185, -0.330804, 1.522615, -0.883653, 1.006859, 0.971254, 1.638694, 0.220840, 2.122283, -0.392955, -1.281651, -1.033705, -0.103710, -1.495686, 1.121236, 1.653453, -0.438871, 1.789696, 1.247634, 2.360607, -1.315232, 0.561946, 2.374259, -3.479356, -0.540455, -0.840258, 1.715602, -0.234809, -1.251655, -1.898509, 0.255810, 0.593610, -0.073663, 0.538080, 1.206753, -3.032221, 0.840534, 0.575739, 0.430918, -1.668601, -0.021352, 1.749554, 0.093953, -0.793195, -0.089617, -0.688069, 2.306179, 0.025835, -1.011802, 0.501585, -0.684657, -0.254115, -0.464431, 0.515950, 1.056903, -2.669991, -0.666975, -0.128514, 1.223944, 0.527231, -0.195675, -0.755060, -0.190950, 0.396863, 3.357061, 0.951689, -0.078219, -1.589841, -0.261371, 1.059966, 2.341810, -1.904779, -0.672253, -1.052846, 1.018597, 0.426214, -0.437104, 0.219385, 0.845618, -0.369086, 2.143687, -1.378152, -0.174391, 1.404780, 0.235700, -2.630498, -0.155800, 0.440964, -0.581919, -0.554132, 1.995181, -3.085170, -1.265410, 2.949584, -1.820384, 0.762439, 0.989417, 0.843609, 0.334507, 1.677501, -1.313708, -1.523981, 1.961761, -0.529740, -1.010412, 1.014432, -0.229633, 2.283781, -1.050624, -0.105361, -1.455855, -1.433940, -1.100140, -0.032599, -2.266694, 6.980674, 0.656378, 0.734336, -0.126044, 0.430033, 3.097827, 2.321077, 0.226326, -1.319470, -0.127232, 0.093848, -1.422338, -0.954043, 1.363927, -1.915344, 3.112850, 1.503816, 3.074722, 1.388993, 1.862996, -1.237698, -0.221567, 0.368206, -0.434996, -1.519875, -0.307488, -0.340854, 0.959727, -1.168284, -2.045792, 0.590173, 1.913429, 0.157029, 2.070282, 1.542187, -0.093681, -1.133967, -4.985939, 2.223901, 0.215805, -0.791171, 0.177974, -0.156168, -0.152497, -3.195990, 1.625665, 0.261392, 0.373906, 3.411873, 0.168360, -0.363593, -1.106421, 1.543631, 1.072047, 1.209616, -2.594547, 3.677001, -0.704093, -0.769831, 0.156167, -0.087139, 0.926822, -1.497946, 3.488669, -0.498456, 2.585355, 0.638786, -1.265893, -1.515186, -0.170610, 0.865639, 0.803070, -0.554210, 1.500199, 0.309627, 1.830099, 1.093678, 0.254188, -1.840083, -0.918117, -0.036964, 0.289066, -1.471333, 1.905748, -0.871947, -1.397716, 0.605884, -0.819838, 0.557486, 5.255325, -0.804167, -3.643383, 1.296990, -1.812794, 0.670182, 0.265029, -0.622519, -0.463429, -0.722114, 2.248491, -1.450041, -3.686104, 1.488080, -0.845360, 1.296761, 2.761697, 1.610896, -0.908817, -0.892923, 0.403756, -0.817155, 0.639292, -0.273899, 0.300914, 1.317295, 1.791245, -0.553654, -0.858094, 0.485510, 2.715864, -1.518985, 1.013328, 1.216428, 0.444058, -0.232796, -0.925205, -1.291752, 0.640105, 0.620285, -0.529986, -0.973146, -0.448751, 2.131908, 0.735240, -1.234902, 0.726922, -1.787336, 1.955731, 0.182495, 1.072748, 1.496628, 0.862454, 0.281887, -1.703280, 1.182623, 1.009730, 0.203992, -0.383488, -1.241500, 0.157968, -0.299652, -3.449785, -0.833084, -1.119349, -1.600843, 1.947359, -0.422477, 1.036511, -0.660727, 1.346081, 2.259709, 0.005040, 0.475642, -1.003685, -0.806614, -2.083865, 0.251728, 1.807141, -1.653711, -0.165789, -1.348610, 3.222886, -0.930775, -0.260357, -1.350029, -1.151363, 0.002781, 1.085186, 2.021380, 3.255248, 2.172967, 0.429837, 0.142068, 0.517678, -0.855089, -0.015564, -0.612736, 0.428050, -0.434883, 2.011954, -3.612378, 1.087736, 1.699983, 2.713425, 0.922748, 0.093344, -1.775274, 1.903097, -0.538384, 2.335316, -0.430231, 1.502170, 0.710999, 1.891477, 1.617951, -1.193772, -0.091001, 1.150020, 1.137367, 1.016144, -0.704379, -0.729804, -4.031040, -1.497000, -0.716411, 0.565852, -0.817705, -1.236752, -0.003742, 0.082370, -1.786841, 1.358746, -1.566733, 0.149939, -0.566612, 2.939605, 1.724788, -0.867142, -1.651294, 1.588408, 0.252766, 1.094429, 0.123979, -1.050261, 0.554460, -1.169814, -1.511499, -0.590811, -2.767133, 0.227685, 2.132695, -1.274353, 2.810912, 0.161260, 2.231755, -0.657446, -1.932288, 0.575805, -2.594836, 0.439481, 1.191852, 1.916686, -3.117297, -0.135380, 1.094884, -1.781616, 0.894625, -2.073685, 0.569600, -3.029050, 0.454545, -1.965721, -0.043368, 1.174816, -4.324808, -1.971886, -0.892658, 0.274854, 1.206510, -0.470141, 0.381961, -2.620223, 0.854657, 0.446380, -0.212430, 1.419069, -0.547126, 0.105516, -1.209780, -2.682103, -1.880812, -1.429287, 0.499100, -0.314258, -0.705809, -2.116629, -0.565486, -1.117403, 1.373470, 0.272802, -1.326758, 1.485354, 1.984464, -1.024545, 0.423898, -1.764647, 0.073051, -0.039845, 0.183949, -0.371510, -2.058260, -2.036934, 2.249296, -0.461656, -0.099479, -3.824854, 0.369886, -2.602445, 0.992267, 0.074909, 2.877812, 1.390216, -0.761985, 0.766279, -2.096076, -0.395331, 1.374215, 0.465398, -2.055075, 0.898630, -1.237133, 0.962724, -0.809912, -1.234195, 1.781487, 1.675791, 0.494026, -0.095817, 3.185573, -0.966046, -0.111969, 0.928911, -1.077095, -1.845717, 1.504816, -0.035544, 2.500948, 2.056350, 0.379942, -0.206586, -2.846630, 1.946602, -1.338225, 2.343692, -1.819101, 1.845730, -0.347326, 1.954134, 0.912669, 2.298723, -0.607779, 1.672875, 1.409226, -0.789262, 1.448115, 1.299492, 0.116671, 2.487772, -1.355910, -2.678572, -1.558875, 0.580180, 0.590901, 1.325215, -0.057967, -0.311906, -2.353572, 2.648535, 0.847283, 1.431074, 0.008418, -0.167587, -1.298527, 1.413521, 0.183468, 0.588779, -1.778174, 1.798621, 2.213693, -1.839578, -0.902392, -0.295681, -0.338337, -0.407854, -0.662204, 1.821490, -0.994281, 0.572172, -3.238699, 2.376113, -2.768938, 1.119103, 2.424388, -1.931760, -1.624551, 1.031867, -1.209697, 0.135001, 0.003992, -0.016782, -3.550475, -0.853445, 3.142736, 1.401256, 0.931407, -0.329627, -1.389046, 0.637283, -2.099255, -10.023037, 1.456096, -0.970827, -1.056861, 4.013074, 0.707597, -0.933795, 0.389084, 1.395731, 1.056435, -0.340454, -0.859893, 5.982233, -2.853151, -0.138226, -1.655911, 1.634749, 1.421054, 0.831926, 0.126816, -1.328772, 0.069112, 0.528022, 0.414295, -0.416438, -1.513069, 0.284723, 1.566565, -1.183272, -1.399087, -2.383024, -0.178824, -1.625272, 1.678425, -0.720101, -0.558266, 3.070326, -0.131884, 1.884880, -1.760699, -0.805406, -1.572882, 0.167965, 0.924478, -2.315411, -3.594679, -0.191877, 0.584720, 1.051175, -1.576983, -0.080467, -0.021043, 2.254590, 1.110942, -0.666646, -2.083611, 0.514277, 0.829726, 0.224291, 1.543836, 1.234613, 0.376972, 1.818251, -0.209732, -0.566087, 1.624159, 3.366616, -0.206569, 1.980258, 1.895052, 1.364278, 0.919897, 0.264587, 1.088133, 0.582130, -1.190331, -1.655422, -0.907104, 0.023765, 0.100906, 1.119427, 2.556829, 0.162990, 1.239510, -2.127181, -0.617491, -2.381191, -1.019343, 3.000513, 1.816126, -1.614661, -0.050322, -0.523640, -0.337145, -1.060617, 0.882646, -2.076514, 1.735131, -1.757560, -0.276296, 0.333477, 0.596730, 0.271413, -0.522215, 0.114551, -1.091682, 0.329627, 0.378582, 0.914257, -0.586515, 0.579029, -1.491025, -1.264606, -0.445841, 0.448031, 0.496971, -0.880069, -0.114983, -0.221523, 0.487215, 0.714126, -0.402273, 0.408664, 1.147038, -0.760143, -1.694010, -0.081308, -0.435332, -1.635392, 0.896697, 2.169811, 2.090110, -0.813811, -0.952351, -3.554594, 0.585532, 0.306426, -2.123318, 1.154331, -0.666047, 2.382697, 0.883779, -2.237601, -1.200651, 0.739852, 0.376667, 0.110609, -1.139884, -0.008385, 0.512189, 0.339850, 0.762335, -1.133032, -1.156095, 1.560428, 1.599772, 2.613970, -0.694430, -0.603383, 1.225852, 0.804845, -3.920221, -0.558424, 1.343242, -1.414377, 3.862548, -0.190104, 0.504851, -2.784963, -0.546281, 1.307294, -1.283382, 1.889746, -1.210009, -1.020280, 0.245678, 1.187263, 1.127843, 1.782872, -0.792363, -1.004296, -1.971464, -1.409945, 0.637755, -2.414992, -1.974596, -1.783538, -0.581649, -3.213634, -1.754282, 1.805191, -1.235651, -0.634839, 0.161638, -0.630046, 2.751879, -0.346227, 1.534349, -1.358303, -2.453912, -0.716559, -1.780014, -0.012675, -1.166174, 1.113524, -2.457147, 0.085220, 0.456114, -0.555790, -3.015698, -1.995655, -0.416727, -0.781068, -0.272143, 1.189361, 0.488557, 0.088896, 1.462901, -1.933535, 2.070531, -2.085645, -0.445012, 0.790365, -2.194353, 0.478096, -2.488342, 0.780072, 1.310410, 0.764107, 1.467836, 0.061706, -1.439014, 1.356705, -1.356657, -2.498615, -0.836300, 2.444328, 1.076395, 0.076544, -0.074112, -2.894312, -1.433758, -1.842554, 1.837269, -0.219312, 1.458094, -1.320004, 0.663539, -0.989509, -0.992193, -0.552759, -2.793687, 0.661098, 0.456114, -3.696326, -0.845517, 0.579287, 0.631815, -0.721260, -0.693439, -1.766250, 0.179440, 0.045727, -1.527113, 1.598382, -0.579325, -1.706727, -1.797411, 1.867648, 0.261699, -0.328072, -0.635934, 0.433348, -0.163198, 0.862483, 1.879573, -0.044012, -1.600434, 0.239456, -0.764510, 0.363217, -0.055961, 1.180820, -0.187238, -1.391579, -1.321477, 0.524783, -0.842347, 0.494022, 1.234072, 0.888916, -0.213973, 2.283071, -0.640313, -0.366253, 2.689683, 0.974300, 1.940052, -0.781908, 0.498088, 0.626403, -2.054290, 0.619295, -1.442814, 0.339450, -0.896698, 0.819171, -1.252571, 1.571107, 0.813266, -0.024424, -1.298713, -0.318076, 1.542235, -0.038043, -0.141969, -2.487703, -1.355928, -0.945512, 2.720232, 0.380313, 1.114524, 0.202963, -0.939223, -2.362461, 1.172898, 0.703404, -2.639584, 1.718914, 1.316741, 1.989495, -0.500795, -0.263018, 0.600646, 0.534427, 0.872801, 0.952260, -0.956119, -0.038358, 3.718248, 0.846966, -0.646319, -1.449061, 1.844202, 1.019944, -1.184215, 0.492499, 1.330654, 0.425558, -0.577335, -0.761218, -2.921366, -0.649320, -0.737245, 0.773534, 0.505134, 0.850217, -0.231921, -1.084704, 0.951773, -0.947775, 2.458345, 0.228633, 0.637817, -0.918365, 2.076945, -0.997954, -0.818052, -2.483827, -0.715143, 1.765916, 0.444802, -0.832161, 0.735556, -0.761760, -1.906592, -0.684428, -2.505757, -0.460853, 4.265587, 1.137864, 0.901250, 2.105058, -0.177623, 0.255737, -2.108447, -0.867666, -0.941735, 0.019559, -0.750972, -1.863474, 0.763017, 1.300454, -0.693253, 0.871873, -1.323827, 2.125471, 0.757597, 1.097759, -1.434198, -0.303980, -2.549546, 0.835890, 0.303656, 2.135996, -0.941849, -0.846840, -1.505864, -0.575415, 0.283727, -0.269862, 0.042036, 0.818713, -0.595052, -0.639762, 0.008008, 0.710045, 0.399087, -1.756857, -1.380597, -1.379578, 0.839164, -1.650149, 0.144494, -0.460965, 1.593046, -1.647523, 2.081554, 0.554536, -1.200486, 1.084391, -0.221848], - "command-r:latest": [3.343781, -0.275814, 0.454973, 2.667439, 1.139656, -3.217637, 4.925746, -3.962457, 0.980116, -4.160393, -0.081422, -0.652773, -8.862714, 1.343202, -5.292061, 1.600222, 1.756423, -1.142717, -2.589377, -1.096659, -3.947407, -0.648118, 0.817330, 1.249553, 0.793624, -2.220591, -0.204749, 1.277867, 0.021358, 1.544170, 0.013234, 0.185021, 4.115247, -9.109859, 3.825158, -1.512020, 6.406564, -0.101245, 1.215347, 9.500904, -2.644686, -1.778385, 2.493311, 3.694325, 2.697178, -2.767993, -0.238474, 0.226412, -2.744470, -8.258098, -1.947246, -0.046177, 0.038588, -1.605423, -3.539018, 3.948240, -0.214077, 4.202616, 2.432104, 1.813233, 2.096451, 2.935130, 0.656194, 5.365718, -5.580070, -2.143265, 1.548568, 5.144696, 2.590589, 1.195513, -0.704586, -0.201354, 5.630354, 5.713121, -0.529943, 3.442473, -6.183206, 4.220657, -7.694033, 0.866504, -1.198718, -2.125260, 3.210089, -0.438421, -1.928844, -2.251470, -0.333551, 0.184342, -7.158889, 2.333304, 5.827986, -1.217000, -1.540859, -1.085593, 4.221012, -3.591006, -0.941764, -4.606610, -6.769041, -3.331358, -5.846883, 4.248871, -1.351012, 1.112255, 4.982079, -0.553816, -8.118864, -7.048461, -0.545580, 9.831732, 1.885043, -6.806152, -3.613053, 2.099929, -4.145867, 1.162989, 1.121790, -2.270707, -8.104484, -6.115410, -2.037424, -7.011181, 0.001888, -1.288358, 3.032661, 0.126157, 1.127175, -6.765113, -3.277233, 7.282475, 0.761192, 3.777529, 1.852839, 2.810993, -0.631536, -4.668180, 1.938219, 2.619288, 0.619725, 2.242327, 5.060790, -2.529539, -0.770671, -4.668029, -4.334256, -9.579988, -5.887598, -3.204403, 0.897181, 1.638821, -3.258848, 0.508208, -1.711256, 0.853810, 1.074834, 3.388533, -4.291458, 0.995875, 2.646734, -5.680473, -0.288449, -6.776384, -9.162459, -1.270542, 0.827329, 2.764098, -1.154817, -0.195002, 6.544490, -3.651612, -1.612096, 6.639533, 1.412141, 6.283203, 0.454502, -8.110965, -6.140530, 4.895475, -0.497331, 0.110950, -0.089417, -6.977638, -2.880804, -3.110812, 4.872985, 1.500566, -7.171577, -4.647212, 7.078329, 1.592515, 2.269818, -18.472763, 0.006562, -1.392788, -2.109365, -5.681810, -3.214898, 0.137075, 0.587586, 2.040688, 1.737877, 4.950655, -0.858913, 6.382308, -3.120993, 2.484262, -8.143215, 2.378926, -5.380285, -1.986916, -1.269735, -1.843263, 3.896823, -0.723419, -0.157345, -0.013623, -2.125233, 3.241222, -1.010446, -3.961627, -1.199333, 0.755091, -2.785051, 1.401513, -4.724794, -1.633887, 1.459495, -0.033115, -6.036390, 4.669405, -4.966288, 1.337360, -1.756613, -5.167958, -2.344655, 1.396638, 0.532748, 2.133362, -0.396743, 11.526321, -4.582005, 0.181447, -4.303258, 0.268173, 1.737863, -2.500399, 2.446739, 3.530474, 5.115706, -0.140839, 1.108029, 0.909780, -2.008389, -5.470373, 0.338981, 0.940498, 0.570977, 1.607189, -0.582565, 9.699156, -1.516018, -4.180067, 0.006470, -1.705021, -0.201452, 1.868154, 5.046639, -0.543539, 2.834447, 0.851093, -0.483138, -0.673084, -0.134258, 1.958529, 2.368384, 4.490047, -0.262858, -0.578660, -0.738702, -2.535524, -3.219797, -0.901652, -0.634149, 2.746953, 2.354932, -2.567454, 0.257080, 0.781687, -0.264464, -2.603856, -4.045373, -1.040004, -3.437232, -2.968499, -2.634792, -0.498064, 4.383482, 1.315463, 1.387401, 1.231248, -1.059394, 2.242662, -0.016071, 1.068977, -2.130052, 0.015135, 3.459895, 5.286757, 1.234284, 0.498344, -7.126027, -6.524753, 1.711594, -3.448725, 0.484982, -2.226021, -1.551042, -0.363871, -4.593443, 5.032470, 0.229082, 0.945881, 0.547474, 3.921237, 1.543457, -0.297181, -0.133541, 4.762614, -14.255990, 3.052345, 2.819587, -1.130518, -0.061253, -10.462576, -0.012670, 1.216432, -4.723098, -8.699916, -1.943423, -7.672225, -3.830274, 6.106357, -0.417323, 4.071136, 1.773671, -2.477784, 2.864450, -6.309965, -6.137336, -0.701815, -0.103799, -2.204011, -1.030298, -5.722357, -8.312103, 1.610195, 5.209179, 3.954740, -0.303180, 0.789238, 0.953849, -1.653946, -0.028072, 0.702633, 2.581787, -6.662658, -0.629628, -3.159878, -1.503025, -0.126721, 4.615642, 3.865401, 2.765733, -0.818197, 6.066393, 2.374908, 6.187591, 6.537537, -0.019076, 3.288919, -5.977790, 2.153242, 0.991696, -0.039763, -11.709957, -0.893349, -1.118323, 3.427664, -1.120850, 0.135702, 1.743049, -1.238715, 2.078863, -2.075931, -0.037239, -0.564981, -1.293588, 1.072095, -0.338301, -2.457089, 0.007143, 8.301857, -1.482941, -0.036358, 5.913482, -8.312625, 0.060764, -0.279726, 3.240084, -6.741280, -3.533299, 0.940669, -0.835060, 0.515219, -3.326610, 1.702149, 2.362168, -3.379984, 3.258184, -3.359754, 0.055251, -0.165966, 0.051318, -3.324284, 1.929422, -0.247458, -1.470549, -0.333021, -2.628627, -1.262493, -3.525706, -0.617524, -4.303742, -5.836284, 1.296722, 0.014102, -1.484960, -4.936589, -0.689694, 0.321401, 2.738512, -1.299144, 6.999551, 3.567674, -5.994262, 2.176221, -0.711455, 4.148783, 0.060613, -1.590490, -7.158051, -6.485102, -4.934273, 0.439335, 2.992083, 3.171849, -2.529648, -1.449935, -4.031073, 3.411590, -4.730103, 0.968958, -2.242847, -0.205325, -1.519718, -4.031760, -4.223692, 2.338820, -6.251447, -2.773652, 0.104261, -4.704476, 2.292274, 0.262622, 4.491196, 4.754832, -2.544113, -4.407736, -5.914155, -0.302099, -6.706584, -4.492346, 1.692832, -9.301826, 9.576107, -0.444878, 0.137933, 1.152962, -4.318294, -0.968798, 2.868977, -2.964417, -3.277911, -5.268424, -4.372011, 1.424269, 0.014607, 3.218485, -1.883414, 1.762284, -0.289330, -5.437626, -7.087764, -0.159299, -1.004035, -5.852360, -5.730863, 1.219243, 1.629844, 3.632569, -0.337558, 1.670067, -1.428962, -1.175744, -1.142460, 0.374826, 6.155413, 1.335459, 1.716548, 11.388607, 2.994390, 3.725840, 0.906250, 0.117606, -1.771317, 0.330543, 0.424982, -0.582504, 2.455512, -1.767787, 0.228882, -0.110461, -0.961098, 1.787151, 1.718345, -1.663210, 3.544751, 1.349301, 0.522274, 0.339371, -7.864332, 2.604174, -8.005915, -0.673629, 2.810067, -0.181011, -0.017242, 0.579071, 2.580422, -3.446174, 1.407088, -2.714404, -0.277343, 3.203218, 3.641239, -6.671936, -2.366600, 3.390316, -1.838757, 3.543766, -1.180676, 0.108697, 0.589361, 0.718842, -0.867555, 1.638399, 1.760780, -1.804819, -5.801441, -2.121068, -0.244877, 0.771526, -0.534767, -0.391645, 0.103339, 0.140907, 4.610296, -3.564982, -1.094342, 5.672598, 2.585696, -3.173497, 7.090618, 3.261405, -0.779932, 1.518792, 6.489270, -1.592150, 5.778431, -6.621472, -2.670308, -2.659441, -0.039881, -5.708166, 0.706590, -1.042225, -3.893016, -2.343265, 8.167517, -0.055133, 6.047810, 0.527957, 1.596409, -3.899053, -2.582129, -0.307368, 0.271911, 2.005986, -0.455206, 0.028330, 6.084834, 5.658875, -3.678282, -3.797084, -2.407085, 0.354242, -0.929543, -3.714456, -0.342444, 1.106999, 1.264105, 0.489304, -3.434623, 8.497966, 2.258908, 7.230909, 4.122110, 1.886335, 1.002831, -1.768519, -1.672922, 3.181017, 1.183783, -4.637954, -1.089755, 1.120303, 2.670096, 3.081970, 8.499523, -0.027745, 10.147956, 0.212397, 4.096593, 2.483257, -3.835583, 15.020834, 1.363512, -3.375948, -0.857642, -1.005622, -0.980444, -2.889248, 2.868831, 6.088690, 11.332556, -0.186268, -1.513368, 0.664520, 6.496457, -0.486679, -4.162925, -4.577507, 5.446809, 3.785655, -1.462451, -0.259170, 2.017063, 1.200777, -0.624123, -2.015638, -4.934658, -4.058458, 2.973224, 0.663845, 1.939258, -1.204918, -7.879530, -2.132903, -0.208517, -6.144309, 0.932803, -0.732682, 5.596436, -3.285809, -4.797080, -0.504366, 7.276794, 2.753779, -0.387244, 0.156124, 2.562421, -2.016191, 1.556009, 0.002035, 0.732805, -1.960444, 1.017454, 2.803624, 2.804175, -7.543849, 3.584458, -0.438897, -4.197019, 1.522082, -2.848772, -1.030844, -3.298563, 2.560498, -0.370281, 1.889420, 0.653683, -2.452834, 1.302697, 1.754493, -2.797449, -2.347050, -3.446241, -0.561618, 0.518104, -4.443400, 0.354994, 4.314837, 1.230740, 0.180836, -3.967075, -0.616630, 8.771847, 5.424160, -2.589878, -1.055147, 3.911415, -3.147947, -1.738150, 4.177715, 2.263200, 7.337656, 5.079623, 3.970637, 1.654971, -3.482348, 0.155131, -1.497517, 1.612941, 1.220724, 2.503623, 3.974868, 0.483474, -1.500351, -6.754654, -5.902539, -7.135888, -2.654474, -0.885237, -3.519493, -0.410429, -2.094261, -5.384110, -3.102675, -0.368129, 4.658718, 3.311850, -1.213326, 2.049461, -1.131403, -1.790761, 5.456171, -3.043935, 0.403564, 4.599469, -2.942664, -2.578368, -0.262799, 5.510591, -6.334243, 0.221941, 0.429937, -1.894348, -2.425150, -2.950989, 0.503390, -0.003128, -5.272776, -2.789283, -8.323901, -4.397413, 0.398002, 2.068184, 6.274145, -3.236507, 3.467738, 0.717246, 2.089747, 2.085892, -1.736258, 1.681871, 1.285726, -8.973390, -0.860758, 0.800301, -9.213509, -1.338597, -2.311807, -7.707338, 2.199563, 2.703517, 1.228356, -6.321905, 0.357646, -1.393916, 1.186368, -0.121182, 1.894334, 0.927539, -3.147604, -4.501308, -0.665627, -0.584694, 1.772024, 2.854347, 1.103954, 4.297790, 0.173993, -1.237015, -6.702371, 1.891608, 0.050805, 0.050248, -8.095572, 3.396281, 5.648885, 1.406410, 6.755433, -1.110750, 4.455142, -7.690240, -2.226854, 3.563312, 6.901121, 0.162094, -0.199623, 5.733426, -0.758055, 2.148874, -0.558426, -12.193730, -1.131083, -2.411241, -0.533229, 4.095393, 2.774926, -7.490507, -0.954049, 1.211633, 4.258538, 6.615598, 0.228282, -8.589841, 9.013588, 0.131699, 0.252958, 2.398877, 3.763722, -6.616025, 2.063315, -0.566855, -8.167114, 0.405287, 1.341827, 0.368449, -1.448815, 0.594255, -0.730430, -0.006993, -1.534255, -6.820147, 3.726596, -1.632142, 3.891737, -1.045272, 8.378374, -1.703666, -4.323789, 5.497786, -3.642643, -0.610038, -4.677728, -0.039480, 2.422321, 0.480538, 0.263621, -3.451740, -0.050342, -5.111891, -1.567019, 4.639090, -1.861093, 0.356844, 1.961862, -1.136813, 3.777646, -2.516439, -0.426840, -0.027631, -0.619671, 0.184838, 1.873936, 0.210117, 2.006767, 1.152207, -2.746292, -8.414000, -4.273118, 0.035932, -3.006817, 9.130335, 5.099446, -0.303868, 2.515733, -2.010652, -1.781340, -1.401030, 1.134259, 0.776905, -0.239682, 4.008242, -2.262364, 0.238568, -3.877701, -0.768959, -0.175720, 0.579776, -13.733640, 4.120509, 0.110667, 0.992731, -10.299074, 2.716733, 1.749644, -4.024142, -3.242632, -1.746854, -4.300363, 2.520753, 0.000492, -0.808906, 0.629711, 4.841471, 1.479105, 1.531526, -1.473484, 4.734550, -0.248460, 2.025939, -4.844282, 0.051011, 0.177340, 0.452104, -2.922164, -8.545454, -0.198014, -2.130960, -1.880845, -8.083119, 4.007063, 3.393564, -0.629868, 7.486115, -4.880897, 0.372874, -1.883602, -5.199387, 5.950924, -2.148227, 0.461290, 0.596155, -3.361518, 4.626005, -0.612265, 8.614533, -3.533565, 0.574394, 1.162784, -0.689196, 1.775221, 0.645540, -5.026666, -2.923343, -3.537855, 5.279396, 0.316125, -1.655858, -2.230857, -3.831468, -0.993665, 1.073296, -1.158993, 7.971602, -0.750468, 2.175637, -0.746131, -5.430524, 3.333487, 5.677142, -0.082347, -2.380460, -0.045493, 0.198291, -4.133145, 0.328931, -5.912801, 1.273532, -5.813002, 1.085318, 1.544092, 5.620995, 0.005771, 4.831237, -2.478376, 6.826854, -7.331986, 6.605777, 2.627247, 2.897933, 7.182114, -2.801941, -0.453709, 1.374557, -5.311098, -2.395463, 1.743300, -0.037800, 5.370473, -0.955576, 3.594490, -1.246708, -2.748146, 0.111598, -4.235927, 2.153038, -4.984576, 8.630300, 2.346491, -1.039889, 0.320968, 2.113551, 8.670997, -1.900339, 1.383541, -2.812557, 4.179167, 6.660100, 1.917526, -0.508494, 1.349263, -6.398208, 2.880494, 0.548544, 1.527744, -0.763936, -7.011359, 6.715817, 4.860614, -2.366866, 2.384355, -0.416671, -3.581128, -0.907592, -0.503966, 0.152084, 2.734455, 1.547329, 2.718583, 2.912473, -2.193865, -4.596483, 2.517669, -7.600883, 2.062043, 1.416978, -0.950477, -3.472302, -0.312917, 1.985105, 4.082620, -0.327396, 0.315942, -0.123894, -1.847559, -1.222050, 0.767697, -0.094673, 5.981305, -10.765258, 4.336037, 2.107987, -6.377103, 1.570145, 0.609587, -2.233925, -0.086135, 0.288981, 0.310782, -0.056502, 0.552609, -6.733884, 2.038222, 1.129642, 3.416910, -4.094422, 2.193018, -3.254340, -5.332660, -0.610538, -2.213975, -0.343964, -0.187319, 3.331956, -0.785005, -7.468774, 3.267446, -1.213103, 2.978286, 8.389747, 2.068025, 5.724949, 0.851759, 5.942196, -2.414881, 0.294918, -5.077850, 5.108668, -3.536914, 2.822123, -0.205441, 3.346289, -5.570610, 0.729711, -2.735071, 1.774440, 3.982238, -0.190283, -0.083524, -1.821509, 3.989396, 0.998905, -0.118806, 0.974467, -0.780703, 4.907207, -1.491556, -2.437642, -0.892695, 4.984404, 2.318693, 3.037425, -1.844034, -6.447559, 2.547562, -2.171201, -3.447818, 3.674742, -4.445561, -0.531791, 0.331127, -3.281976, -4.991351, 4.298832, 4.203872, 1.188574, 3.257704, -2.689115, 3.526842, 0.000659, 1.023238, 1.895292, 0.008100, 0.308081, 0.571350, -5.082287, 0.034021, -3.136824, -9.955914, -8.184452, 1.992786, 4.404663, 0.441305, 0.115716, -1.536674, -1.684408, -4.357782, 10.044423, -0.533050, 4.287567, -0.716581, 6.065951, 7.769640, -0.003222, -0.758130, -0.170485, 4.783528, -4.518212, -2.055881, -0.141658, -0.012537, -0.770738, 9.666203, 4.726260, -3.009871, -3.476159, -0.917047, -6.437633, -1.967011, -3.003409, -2.095386, 3.207532, 3.465004, -0.060364, -0.891863, -3.842914, 3.277990, -2.422456, 3.520365, 9.463841, -5.373384, 0.638642, -0.027223, 0.257485, 3.116745, -2.700408, 0.786203, 7.932927, -0.368764, -0.977473, -0.289243, 5.171692, -0.792496, -3.126659, 0.046145, 3.027295, 0.108762, 1.612523, 1.715320, 0.589681, -2.685192, 4.519046, -0.299773, -1.893413, -7.664293, 3.115619, 1.344446, 0.804518, 1.377422, 6.852480, -0.457485, 1.220877, 2.455439, -2.472999, 1.171533, -9.642070, -4.484784, 1.194985, 7.472065, -0.062002, 0.191905, 3.206121, 7.939042, 5.110579, -2.162325, 13.721641, -0.590828, -4.301183, 2.360873, 1.404462, -0.323969, -6.597520, 4.265462, 3.187601, -0.485109, 1.062674, 0.729921, -7.699634, 0.751458, 4.771646, -3.588130, -2.555057, -5.481992, -1.098283, -0.680966, 0.059207, 0.894726, -12.827731, 0.159850, 5.356339, 3.974762, 9.352292, 2.410261, -6.222835, -0.397519, 3.921666, -8.805064, -6.806501, 6.458934, -0.438970, -0.434269, 2.491107, -4.319752, 9.206378, 1.004822, 1.691844, -1.410262, 3.537293, -0.262292, -2.547208, -6.289035, 1.132843, -5.170214, 10.569111, -0.345776, -1.867645, -0.529611, -5.119642, 2.526826, -0.050514, -5.041572, 1.427129, 4.478755, 0.650192, -5.964411, -2.837880, 0.782313, 3.174311, 2.358122, -4.875733, 2.268328, -2.799593, -0.257828, -0.662918, 6.229756, -3.342180, -2.568766, -5.329382, -5.410961, 0.016886, -1.270424, -1.469224, -0.327146, -5.714297, 1.815491, 0.257221, -0.161375, 2.917636, 3.124429, -4.969270, -1.277912, -0.364768, 2.295934, 0.944646, -2.181587, 3.034961, 2.136451, 1.314268, -2.421805, -3.513581, 0.771600, 4.132788, -6.538311, -0.875464, 1.799943, -0.094945, -4.288071, -0.354705, 0.340733, -0.129236, -0.986896, -1.609142, -5.557634, 3.606832, -3.678227, 3.474812, -1.406148, 0.641834, 0.617001, 6.203650, -1.656687, -1.138457, 1.656011, 5.493791, 0.491741, 0.147250, 7.959695, 1.408193, 1.366536, 8.475793, -0.525615, 0.936636, -7.333754, 1.445627, 1.028849, -0.763335, 4.218029, -0.186917, 1.564881, -5.419790, -1.104242, 2.580936, 0.830451, 1.480569, -2.745472, -2.672715, -0.054050, 0.066279, -2.328207, 0.027136, -1.318324, -0.121855, 3.948206, -0.020364, 0.408698, -2.190275, -0.413554, -0.104187, 2.836448, 1.717294, -1.476446, 1.163178, 0.782593, -3.341428, -0.347680, 3.849605, 3.456213, -0.028440, 11.302976, 0.245774, 3.730564, 3.002578, -2.414288, 0.537928, -10.043763, 4.635122, 0.548230, -1.587269, -9.622440, 0.073291, 0.143492, -0.004344, 0.004642, 1.219415, 0.379508, 3.309238, -0.920879, -5.166202, -0.668245, -1.570390, 1.234253, 6.536276, 3.304239, -2.533845, 2.828630, -0.233467, -2.732973, 0.512803, -1.988147, -1.264982, 1.260414, 5.310548, -0.129676, 0.327829, -0.676909, -1.185600, -6.314182, 0.689383, -0.927936, -2.516296, 2.868223, 7.618333, -0.548516, 4.363874, -1.833384, -3.474023, 1.232027, -0.333526, 9.384752, -5.510630, 1.791963, 2.661515, 0.026483, 0.651698, 5.045140, 0.528704, 4.777268, 0.006308, 0.517817, -3.746511, 0.010729, -0.695228, 3.668597, 0.388150, 0.376637, -5.316834, -0.268401, -0.422471, -0.961711, -0.544995, -2.849309, -4.574137, -7.589499, -0.718866, 4.121716, 1.052236, 3.438159, 4.391444, 0.770096, 4.246434, 13.796817, -2.504740, -0.344975, -0.852745, -0.293723, 4.262160, 1.099506, 5.458565, 0.101993, 1.671578, 2.593444, -0.400709, -0.012712, -1.531975, 0.338049, -2.061397, -3.908940, 1.543308, 0.821022, -0.568642, -0.106388, -0.334749, -4.636153, 2.893635, -1.995710, -2.209117, -2.870719, 1.848953, 0.295602, -1.784778, -3.630996, 6.124650, -1.008684, -0.401929, 2.529864, -1.249757, 11.899358, 4.583395, 3.639607, -3.379079, -2.726734, -0.000634, 4.743830, -1.845286, 0.685491, 1.206432, -2.532401, -0.202496, -0.672539, -0.544298, -1.160769, 0.410462, 0.072620, -0.135203, 4.014706, -4.676506, 0.313707, 1.674464, 8.058844, -1.526760, 0.048420, 2.014790, 3.248549, 2.800738, 1.409468, 0.034131, -2.217367, 2.929803, -2.377814, 3.931602, -2.503181, -6.191005, -1.961296, 2.107366, 2.191592, 6.360295, -2.241297, -0.701410, -0.387093, -0.676544, 2.977399, 3.597678, -1.676969, 1.508200, 0.274561, 0.739619, -0.258541, 7.250594, -7.482875, 4.881182, -1.705662, 0.727951, 2.268465, -6.659826, 4.396453, -0.209851, 2.595658, 0.217294, 0.431553, -0.273800, 2.275743, 1.172862, 0.313280, 5.116271, 2.346627, 0.687950, -8.359097, -2.886562, -4.881249, -2.611210, 0.106734, -0.001841, -6.674205, 2.040544, 4.276235, 0.080222, 7.742506, -1.454112, 3.055201, -4.890799, 0.303546, -0.410229, -0.000000, 4.995249, -3.901189, -1.693798, 3.009526, -4.520331, 9.146361, 7.161877, 0.521853, -0.497622, 0.523855, 3.208404, -0.037914, 2.241517, 5.048973, -0.994681, -1.478314, 2.520435, -5.391829, 2.122844, 0.467170, -0.279453, 0.429281, -10.716861, 0.807114, -7.626911, -2.286292, -0.447248, -4.595525, -8.309303, 0.176255, 5.901590, -0.003131, -3.732668, 0.566506, 0.922014, -1.193130, -11.262701, 1.786454, 0.211564, -5.432101, -1.015164, -0.813636, -0.253057, 0.656902, -2.896779, 4.537857, -0.881212, -6.356174, -4.630372, 0.838714, -3.151064, 0.053268, -6.840989, 0.107878, -5.551770, 0.350055, 0.290700, 3.076490, -1.742435, -0.145971, 6.257341, -0.253585, -1.799793, 4.669433, 0.160630, 1.402631, -3.963378, 3.076532, -0.245547, 5.281942, 0.916202, 3.413607, -1.101269, -4.640521, -9.491997, 1.460039, 5.395495, -6.048810, 0.067125, -2.854902, -7.425605, 0.870857, 2.436175, -1.258716, 6.681839, -1.167981, 4.587613, 1.842767, -0.458165, -0.153182, 4.159862, 1.946693, -6.237222, -1.203096, -0.167390, -1.698844, -1.228860, 0.059560, -4.032769, -3.855078, -0.000377, 0.573616, 5.128727, -3.830783, -0.605543, -4.437639, -0.569940, 0.419119, 1.016710, -2.440497, -3.871237, 5.401674, 3.643533, -3.189250, -2.823871, -7.680893, -0.526801, -2.247987, 2.289295, 2.900466, 2.088039, -0.046243, -2.374596, 5.195171, 16.277483, -3.109166, -1.607331, 2.356828, 0.746973, 2.786855, -1.505428, 0.010781, 3.406119, -1.512498, -1.009099, 2.800846, -11.539624, -2.626078, -0.032230, -2.579077, -8.728624, -1.635912, 5.189236, -1.741071, -6.841572, -0.953889, -1.987891, -2.173831, 2.370864, 2.175112, -2.144978, 1.270610, 1.158945, 2.743232, -0.320985, -3.099590, -0.139097, 1.575312, 2.196729, -0.941464, -8.262540, -0.638440, -6.824471, -0.074786, 1.011750, -0.670687, -1.007823, 0.045868, -2.374631, 1.684719, -0.045337, 1.461761, -2.164474, -1.150534, -6.288441, 1.167940, 1.194985, 3.903839, -0.619031, 0.028055, -0.191233, -4.451861, 4.783247, 5.022339, 1.231301, 0.481011, 6.396512, 0.760756, -2.451174, 0.746618, 0.321768, 1.959963, 2.070307, -2.492432, -0.525367, -5.847020, 2.069601, -1.411780, 3.609716, 2.081538, 0.793948, -1.213014, 1.108669, -3.788055, 0.557970, 2.073365, 1.701093, -0.140462, 2.848723, 2.586497, -0.004066, -0.095212, 0.155530, -1.537058, -2.170103, -0.590924, 3.047679, -9.261539, 3.432003, 0.269873, 0.177570, 2.308136, 3.008693, 1.619454, -0.016827, 0.026867, -5.560940, 5.045645, -4.177537, 1.934065, -1.685166, 4.010276, 5.874868, 0.841095, 4.709139, 3.519374, -4.854788, -4.095969, -8.364801, -3.231043, 1.172581, -3.096938, -0.000019, 2.955939, -0.926446, 13.812618, 2.825307, 9.076035, 1.589575, 1.764802, 3.654632, -2.036473, 3.541994, 2.429921, 4.139260, -0.497009, -1.738610, 2.123885, 2.642132, 0.275264, 0.855564, -5.831653, 2.246616, 0.023545, -7.298081, -2.137527, 2.017174, 0.393187, 1.529370, -1.255867, 1.956797, -1.948093, 1.018055, -2.814951, 6.209908, 2.277940, 5.806929, 3.130994, -0.627798, 7.336646, 2.083061, -4.549458, 4.951706, 0.772481, 0.869098, 3.231348, 1.541711, 7.375397, 2.571870, -2.376264, -4.524474, -5.443826, -4.876126, -1.958362, -2.181725, 2.247090, -0.226717, -0.491189, -3.172199, -0.965165, -3.733088, -0.687946, 0.150711, 1.549857, -1.151845, -6.224751, 0.656077, -1.463655, -4.923444, 9.424564, -0.430541, -0.636936, 0.387190, 1.244944, -1.119326, -1.728293, -0.029272, -2.663060, -4.070954, 2.796909, 8.028749, 1.993612, -2.583833, 0.010637, -1.107144, -0.261289, 4.961470, -4.536589, -10.266493, 3.049201, 3.876967, 7.355556, 8.524590, 1.190615, -8.996363, -1.003444, -3.377495, 2.542468, -0.481224, 6.039497, 1.660977, 0.247955, 0.039296, 1.662247, -3.405310, -4.569863, -5.542986, -2.694810, 2.877109, -7.142367, -1.883978, 5.953273, 8.426865, 0.352936, -3.630321, -1.795355, 2.890971, 0.635473, -0.263253, -2.427855, -5.310596, -3.608562, 8.845384, 3.871068, 6.310348, 0.707003, -0.342756, -0.087262, 8.172073, 0.206082, -0.337659, 3.109874, -0.739516, -6.653020, 3.656507, -0.076342, -9.071382, 7.765026, -0.710259, -2.233625, 1.765141, 1.391488, 6.131129, 1.656170, -1.658921, 2.189786, -2.161172, -0.338138, -1.265457, -2.170792, 0.113237, -0.801543, 2.488951, 1.887169, 0.242786, 2.324345, 3.300882, -2.212380, 3.148038, 2.236308, -0.230763, 0.751805, -5.793574, -2.214365, -2.644563, 1.770735, 3.126152, 2.110815, 4.793191, 7.258339, 0.048348, -3.515946, -1.813341, 1.869273, 4.866038, 1.926262, 3.972730, 2.385604, -1.848568, 0.219905, -9.625678, -1.069563, 3.211653, -1.623303, -1.982656, 1.073308, -5.629014, 0.353502, 0.214252, -0.040037, -3.635118, -5.762735, -5.934147, -8.640684, -2.239116, 4.444191, -4.452192, 1.294073, -0.977634, 1.506236, -13.821466, -4.855133, -5.454500, -2.171217, -0.434645, -2.141109, -4.326273, -0.766056, -1.166658, -6.828095, -3.992313, -7.985675, -0.027156, 5.481761, -7.887405, -2.372142, 5.611740, 0.888385, -3.239222, -3.584783, 3.417515, 0.021144, 0.135067, 0.688556, 0.110383, 1.354925, -0.585762, -4.328357, -1.287105, 0.332779, -1.603604, -1.109169, -0.901873, 8.353974, -1.116070, 1.628976, 1.830307, 1.022571, 1.062974, 0.299776, -5.153921, 2.923855, 0.328887, 4.727024, 2.666137, -0.156452, 6.533584, 0.907966, 2.890931, 0.850553, -0.256655, 2.195430, 1.751886, -3.059696, 3.390126, -7.620480, -1.086390, 0.235307, 3.446947, -3.659053, -2.235693, 3.577014, 4.124716, -5.995736, 0.100759, 1.376123, -1.296779, -0.203487, 3.080584, 1.898631, 3.431888, -0.008696, 1.994654, 2.499069, -0.635386, 3.471577, 0.905813, 0.630546, 6.562492, 1.271718, 3.713083, 1.098022, -4.175727, 4.026644, -0.257966, 0.606633, 1.860236, -0.018629, -5.897700, -6.301016, -5.071455, -0.185444, 0.499724, 10.935959, 1.322391, -9.634394, -0.000759, 4.677254, 3.396303, 1.513356, 2.621404, -0.464442, -2.804390, -1.339561, -1.437342, 3.300574, -0.147449, -0.209068, -0.165322, 1.059605, 1.022480, -2.444871, -0.751516, -4.006464, -2.984862, 0.179842, -1.123377, -2.404706, 3.201952, -5.689353, 5.978168, -3.141390, -1.092880, -3.688441, 3.623991, 0.292171, -3.090468, -0.342997, 7.975073, 6.717894, -4.216690, 3.078193, 6.105803, 0.494769, -5.520638, -3.829310, -1.026091, -0.316878, -1.016270, 4.841892, -4.966675, -1.781183, 3.332318, 8.794328, 2.340522, -0.695414, -0.139798, -3.714368, -10.670636, -4.909167, -0.101089, -0.069161, 0.019572, -5.015254, -1.415708, 3.461821, -7.015650, -7.979800, -1.066470, -1.152448, -6.153243, -1.672579, 1.702864, -3.064969, 0.201905, -5.259581, -0.503686, 0.578921, -3.739371, 2.564897, -1.585426, 3.096273, -4.505628, 1.765620, 0.328798, -4.846415, -3.890337, -0.927081, 0.286746, 2.852578, -0.967980, -3.238074, 1.137814, -6.562785, -0.049307, -0.323686, -3.352189, -3.761620, 3.260206, -4.171178, -1.397603, 0.848810, -4.179512, 1.881929, -3.730735, 1.430817, 5.400832, -0.877720, -0.356905, -0.132025, -0.811912, -4.233059, 2.743707, 2.490922, -1.117086, -5.067132, -5.421246, 1.156588, -0.534440, -2.792426, 0.890560, 5.753962, -0.401602, 5.689643, -2.211078, -5.797209, -1.816319, 2.495221, -4.360130, 9.668447, -3.770986, -1.059373, -0.057251, -3.028395, 2.165006, 1.875862, 0.047700, -6.979061, 4.413591, 8.592163, -0.811140, 3.140186, -4.511807, -25.813583, -3.023678, 3.811153, 1.938581, -0.339177, -2.171618, -1.244932, 4.403308, 0.496575, -9.532254, 1.335673, -2.444872, 11.699122, -2.274694, -3.430034, -1.042132, 0.780243, 6.916922, -1.139536, -0.345397, 4.638951, 1.473616, -0.682799, 2.614158, -3.584642, 2.728699, 4.555742, -7.218204, -2.331289, -0.233210, 2.100440, -0.153805, -1.635176, 2.062756, 2.943550, -3.336209, 11.831157, -0.978651, 9.067150, -5.480848, 5.658813, 1.684263, -1.781923, 3.576041, -0.016443, 0.407981, 2.535778, -1.469584, -4.646076, -4.245326, -3.564281, -6.245006, -7.484807, 0.828859, -6.765895, -6.919433, -1.568706, 3.538174, 0.000744, -1.663006, 1.832614, -0.309570, 0.843011, -4.510295, -7.789219, 0.102095, -0.547336, 2.566236, 6.499871, -9.986823, -0.168010, 0.102029, 0.673290, -0.269726, -3.662649, -3.644698, -2.213008, -2.874984, -1.793331, 2.448561, -0.164852, -0.012539, 6.463037, 0.000991, 0.304642, 6.797293, 0.494902, -0.983908, -0.078490, -6.651207, -2.543651, 3.905650, -2.124230, 0.081256, -0.905935, 0.684888, -4.545033, 2.243226, -2.221475, -3.098726, 0.080649, -1.958687, 11.438409, 0.433618, 0.742591, -0.007383, -2.748674, 0.274265, -5.529784, 3.973581, 3.241938, 4.704930, 3.234245, 3.328490, -6.592916, -4.131082, -2.005181, -5.353984, -3.514174, -0.606298, -0.861970, -7.022537, -1.764758, 1.116245, -5.607377, -1.402223, -4.620993, -7.055652, -2.674875, 0.019377, -1.363322, 0.563650, 2.075496, -1.449947, 5.376159, 2.146081, 5.126253, -4.720733, -0.006775, 1.399573, -3.728381, -8.535139, -0.334004, -0.113797, 2.193818, 0.744583, -0.097518, 5.015729, 5.816702, 3.893484, 1.053184, -6.846307, 1.756239, -1.936607, 3.071102, 3.401009, 4.862002, 1.804502, 0.325939, -2.104714, 0.693890, -0.092639, -2.710700, -1.181900, 5.106908, 3.439631, 2.144355, -3.359043, 1.276522, -7.383888, -2.821352, 0.828196, -0.178993, 1.842888, -0.873826, -0.014114, -4.152460, 0.723015, -0.174186, -5.257160, -2.447183, 7.731831, 0.718454, 0.955554, 1.334993, -0.563071, 3.208822, -3.113315, -4.419868, -2.523047, -4.498507, -9.013672, 1.890269, -3.316503, -6.352427, 0.556511, 0.470561, -2.218465, 0.364930, 2.611593, -3.370936, 0.117874, 6.139898, 2.874041, -7.497670, 0.884382, 0.362684, -10.100249, 0.175558, 4.680916, -1.238638, 1.861386, 0.821007, 2.485271, -1.027795, 4.229118, 3.602708, -0.969462, -0.012795, 4.004239, -6.488414, -4.214726, 3.788011, 3.550853, -4.682927, -1.719694, 7.574303, 7.788897, 0.445002, -3.190887, 3.726520, -0.766279, 2.670411, 1.586039, 0.052926, 1.654625, 5.357676, -6.195482, -0.161717, -1.803791, 5.452054, -4.454659, -2.083320, 3.195639, -0.300326, -0.297610, -6.874451, -6.002811, -2.148858, -2.301163, -1.147759, -0.225648, -4.563822, -1.620989, 1.727572, 5.926391, 5.838719, 3.384335, -2.638520, -2.990250, 1.887299, -0.443030, 0.055715, -2.306771, -1.884962, 3.769308, 2.636223, -1.766434, -1.566344, -0.433667, 0.354005, 3.833169, 0.701964, -1.986933, 7.594246, 7.029210, -5.287083, -0.383797, 0.372847, 1.055878, -7.243296, 4.116444, -1.470766, -2.081233, 0.751267, -1.407273, 0.047860, -4.575079, 1.846502, -2.084986, -4.731189, -0.288104, 3.557981, 1.617163, 6.832978, 0.241575, 3.541188, 1.288880, -0.655247, -3.033360, 4.721385, 1.745900, -1.519267, 1.338891, -5.970143, -0.026291, -4.531422, 1.013936, -0.677987, -1.631544, -1.426714, 0.050153, -1.304231, -7.678109, 0.011271, -7.539436, -2.284989, -2.680998, -0.004160, -1.347320, -4.380244, 1.565084, 3.312843, 1.413599, -0.669517, -3.681749, 0.709569, 1.999314, 0.412539, 5.065418, -3.437043, 1.724517, -3.085526, -3.611425, -0.523062, -0.010791, -0.733256, -0.511650, -0.947212, 7.544014, -9.780771, -4.079500, -8.355167, -0.197175, -0.205433, -2.260860, 3.004659, 6.327532, -2.503898, 0.466260, 4.451628, -1.959501, 5.972856, -3.135310, -7.903263, 3.861253, -2.754281, 3.395368, -3.378115, 5.876959, -0.023305, -6.324285, 4.745381, -1.885606, -2.357712, 1.494764, 3.842016, 1.277511, 2.445165, 0.410928, -7.133320, -7.055686, 1.454283, -6.182934, 2.136036, -6.857017, 0.000498, 0.517878, -1.397246, 5.371858, 6.068283, -3.182340, 2.911753, -1.591159, 1.384250, -2.744489, -4.217806, 3.245556, -0.992994, -1.537308, 0.531573, 1.309127, 2.590945, -0.120438, -2.848826, 5.013155, 1.521207, 5.516780, 6.891029, -4.153908, 0.404247, -3.702703, -0.710221, 0.207040, 5.352168, -2.242288, -0.374315, -5.540435, 3.889261, -4.950356, -4.913716, -0.618769, -0.173921, 3.692221, 3.737804, 1.018407, 6.317423, -1.107868, -0.509221, -2.250231, 1.382472, -0.708276, -3.613082, -1.943448, -3.317917, 1.306921, 1.475165, -1.240517, 3.184206, -1.496189, -5.016690, 0.877661, -2.169623, -6.401884, -2.942557, 11.352693, 2.099488, 0.614432, -1.606878, 7.248198, -0.111037, 3.277194, 1.628116, -4.641020, 5.924992, 0.029633, 0.192731, 8.365792, -6.858413, -5.763559, 0.514552, -5.286735, 1.072456, 0.759393, -0.643198, -0.601689, -0.001599, 3.493394, 2.978892, 4.046279, 6.537354, 2.684996, 3.459695, -2.992692, 1.694266, -0.984646, 1.080792, 0.768374, 0.117237, -0.996767, -4.296034, 6.863399, 1.729657, 1.903897, 5.195855, 0.792808, -0.257125, -0.098713, -0.631066, 0.669095, 0.997432, -6.579898, 2.109600, -3.509987, -0.903696, 5.622768, -0.303515, 3.135252, -1.116153, 6.057675, 0.912521, -0.031544, 0.424326, 1.687479, 1.641292, 4.212925, -1.859976, 0.283334, 1.681501, -0.374205, 0.151593, 1.310990, 3.303145, 7.866085, 3.097261, 5.917388, 4.298635, 3.983059, -0.449333, 1.928347, -1.525197, -0.838800, -2.377027, 1.334727, 5.235521, -3.699142, -0.407828, -0.448997, -5.229319, -1.974771, -2.172120, 9.177399, -2.846216, -1.863153, 0.476969, -0.512451, -7.109721, 0.069376, -4.748658, -3.194703, -2.120162, 0.813585, -0.148194, -7.338431, 2.688310, 3.676924, -5.626202, -3.342699, -0.141512, -6.641322, -1.594967, -2.834696, -3.028884, 1.248042, -2.363557, -2.148775, 1.365464, 1.530013, 2.991108, -1.414532, 4.466099, 1.017612, -3.484221, -2.224066, -0.484973, 2.508795, 1.450046, 10.966900, -0.352431, 0.076239, -3.460869, 1.961258, -0.589401, -5.012602, 4.541590, 0.058453, 0.498920, -5.368912, 6.354663, 4.114835, -4.584216, -1.445249, -0.581226, 0.452248, -1.578423, -3.973688, -0.795710, 6.948200, 2.276614, -3.563425, 4.821636, -4.619415, 0.797093, -3.595433, -2.219263, -0.506839, -1.986749, -3.095446, 1.296894, -0.226968, 25.884138, -7.859181, -0.513497, 0.946560, -6.172439, 3.309793, -0.158353, 0.322889, -0.067943, 1.376138, 8.334361, 4.483156, -0.709400, -0.175756, 1.210750, -0.618878, 4.989367, -2.063022, 1.482588, 4.259482, -4.579537, -1.819578, 4.079937, 4.017149, 0.243652, 1.662365, 3.750094, -3.864753, -4.896174, 2.753638, 3.391126, 0.700742, -0.412252, 0.236695, 1.602127, 1.201747, -2.840552, 1.189786, -6.024556, 0.086590, 2.327789, -2.947853, -1.355535, -0.952914, -3.780833, -4.136289, -4.310068, 4.045132, -3.136507, -7.267282, -2.318031, 2.078475, 1.244233, 3.712967, 0.069280, 4.239871, 0.085674, -0.501848, 1.826206, 1.723327, 0.948976, 3.317792, -1.361878, -9.505491, 1.652231, -4.323700, 8.702504, 1.165740, 0.077295, 0.598673, -4.058940, -1.280203, 1.805292, -3.056866, -0.153063, 4.944287, -0.401268, 1.127354, 0.800949, -4.552731, 4.099965, 2.931844, -6.894278, -1.693199, 3.370374, 0.377143, 0.819665, 3.199957, 2.406297, 0.611619, 2.428483, 2.364851, 1.625717, -0.097511, -0.764180, -0.023583, -0.932676, -5.791678, -4.254630, 0.696105, -2.473110, -6.286937, -4.430090, -3.154974, 2.485222, 4.677386, -2.933256, 6.317354, -1.070770, 0.032252, 7.103585, 0.443433, -6.901791, -2.766052, 0.978416, -0.820062, 4.384764, 1.022396, 6.335260, 2.096919, -2.545128, -4.920263, 1.549829, -6.143991, -4.316087, 0.086893, -0.475092, -5.423429, -3.094475, -2.882592, 0.627850, -2.327073, -3.407857, -10.233243, 1.028297, -3.554084, -0.041444, 6.200572, -1.833720, -0.137024, -3.761790, 3.412513, 3.724448, 2.632896, -5.099319, -0.186855, -2.287660, -1.638959, -2.688552, -0.361400, -0.437027, 2.332490, 0.589219, -7.016140, 3.163738, 0.533234, -2.952399, 1.867289, -3.524182, 4.616333, -0.002991, -0.354729, -2.023196, -4.608538, 2.560603, 0.215824, 1.806846, 0.561700, -0.379066, 0.393609, 0.415946, -2.526092, 0.359140, -1.839410, 5.859710, -4.694609, -1.859303, -3.433860, 5.516655, 5.651124, 6.562935, 1.522503, -4.638336, -1.475609, 4.560638, 5.664787, 6.312329, 3.594746, -0.803987, 0.202642, -1.195277, -3.372053, -0.752331, -5.590456, -4.646204, 3.535979, 0.516356, 7.138364, 0.744697, -2.785372, 0.392401, 1.610076, 0.116163, 1.405722, 3.875001, -2.949129, 3.472404, -0.491449, -0.467863, 1.288103, -1.870304, 2.466842, 4.456291, -0.124447, 2.135671, -2.846490, -1.165408, 5.972806, -1.132864, 7.914446, 0.508462, 7.200937, -1.835051, -0.482001, 2.587946, -2.791816, -0.153601, -0.906362, -2.069110, -0.459997, 0.456048, 1.558618, -3.118214, 0.856418, -0.231932, 3.516111, -2.733642, 0.631028, 0.245109, 0.034195, -6.143626, -1.420549, 5.880464, 1.088104, -2.628313, -0.914301, -0.426224, 4.995555, 1.648484, 0.431542, -2.718431, 0.215640, -3.991919, -3.036944, 4.598671, 1.975244, -0.613328, -3.461954, -2.062270, 0.318039, -0.597685, -1.040276, 0.786417, -0.262567, -0.589535, 0.393135, 5.124829, -3.209585, 4.304561, -5.214456, -4.707873, -7.520905, -6.979288, -2.319449, 2.466626, -1.716434, 3.854492, 5.168052, -3.225215, 4.064557, -0.890216, 5.347986, -0.033329, -3.681368, -2.246211, -2.044171, 0.322070, -4.800444, -4.250727, -4.454211, -3.514904, 2.655819, -6.546813, -1.598998, 4.023914, -0.005552, -6.960735, 0.298785, 2.436974, 2.026727, -6.772633, 0.199327, 1.160285, 1.774645, -3.146263, -7.526332, 1.900193, -4.620900, 5.042796, -1.024451, 0.878534, 0.017084, 0.904181, -2.732744, -8.174599, -3.099883, -0.999880, -0.198049, -0.483228, -4.134248, -6.123836, 0.685489, 5.716204, -0.749494, 0.604121, -5.012710, -0.446452, 2.066836, -1.172677, -0.399439, 4.908616, -0.771081, 4.457398, -2.098842, -0.501791, -2.526716, 0.771477, -1.061811, -3.930525, 8.341999, -0.437698, -0.275091, 3.580389, 1.218396, 0.175618, 0.197714, 1.028314, 1.273843, 6.223643, 1.182448, 10.747875, 1.041242, 0.109011, -11.229621, -2.388422, -0.528528, 11.054355, 2.281246, -2.086136, 3.279294, -3.566483, 2.603531, 0.445095, -0.063839, -2.898587, 2.457841, -0.759582, -7.168111, 4.830601, -0.343200, -0.612604, 3.420349, 4.547206, 7.285605, -1.936344, -0.264012, 0.621680, 10.183675, 0.325389, 0.015092, -3.890042, 7.610522, -4.370181, -8.066639, 5.763288, -2.264709, -2.287764, -0.089371, -4.009732, 1.703158, -0.996195, 1.862794, 4.200593, -0.008101, -1.215292, -0.663909, -0.310804, -1.607721, 9.467325, -3.277249, -0.012757, 0.231754, 0.034934, 0.492380, 1.150235, 4.284363, -1.196000, 0.128064, -2.985998, 6.067877, 1.931229, -0.213001, 0.453486, -1.781323, 2.348450, 0.097704, -0.468235, 0.413639, 7.249700, 3.779612, -0.549643, -0.050774, -0.031199, 2.873239, -0.768314, -0.040047, -0.828497, 1.118836, 0.246845, -6.382168, 0.637833, 0.451397, -2.622777, -0.133653, 6.433577, 4.867972, 3.546211, 3.398878, -1.906015, 1.196999, 2.006929, 0.786734, 4.891016, 2.503478, -2.741007, 4.865725, 1.387283, -11.435909, 1.734073, 1.678593, 0.398326, 8.134402, -3.630407, 2.569750, -0.513990, -2.003817, 3.147748, -3.479194, -4.521346, 2.160461, -4.760503, 1.411289, 0.989127, 2.281021, 3.922068, -0.155595, -2.587337, -0.547264, -4.417817, 2.839503, 1.478019, 0.928264, -1.520962, 2.300986, 1.824427, -2.054479, 1.750956, 0.670408, 4.240636, -4.206879, 0.825712, 0.170197, -1.309047, 7.042284, -2.808839, 1.278867, 0.675022, 2.942729, -9.454078, -2.041019, 0.441376, -0.163395, 3.919055, 5.771101, -1.755992, -0.506141, 1.130097, 0.115922, -0.116327, -6.025976, -4.385695, -1.123508, 3.069795, 0.695987, -4.680645, -4.437606, 3.878303, -1.635001, -3.849114, 1.502949, 4.205227, 0.935144, -6.548295, -0.718375, -2.716839, 1.475906, -2.302369, 2.143170, -0.129654, 0.392791, -2.577940, 1.126844, -0.290627, -0.063034, -1.154525, 6.816575, -2.688456, 3.070588, -3.057046, 0.002165, 0.273359, -4.180090, 0.614740, 1.170131, -2.350872, -0.827711, -0.156118, -2.305817, 4.330891, -0.710802, 11.884938, -0.380077, 0.110313, 7.602226, 10.002245, 0.360508, 1.909266, 1.339925, -2.373763, 0.836318, 2.776081, -0.694188, -3.979372, 6.721390, -0.181755, 2.983377, -0.601471, 0.478235, 5.683246, -3.012722, -1.348395, 2.100513, 6.260212, 0.034391, 1.333329, -10.040885, -4.544642, -2.925191, -1.400667, -7.342693, -3.248511, -1.108893, -4.364802, 2.973909, -0.389134, -2.340841, 4.763739, 2.008492, 6.680654, 5.412335, 4.818300, 1.780283, -0.424301, 0.043778, -2.362116, -0.146802, -0.958689, -2.140199, 3.908817, 9.249252, -2.930516, -2.118222, 10.984769, -0.066360, -0.164985, 5.758742, -0.156840, 3.128972, -2.280814, 7.105916, -0.001550, -6.674235, -3.249885, 2.993154, -2.397078, 2.758408, 13.904146, 4.447309, -0.554369, 0.982139, -1.688421, -0.897859, 1.484438, 1.535573, -2.792843, 3.868578, -2.332367, 1.260296, 1.206884, 0.913132, -0.640889, -1.967816, -6.116515, 0.412191, -2.647040, -0.008041, -2.644320, 3.687829, -1.048893, -0.283870, -4.292102, -0.878158, 0.003143, 3.007888, -6.075198, 7.674708, -3.085419, 1.250305, -3.839580, -4.304334, -4.159411, 2.063132, 7.935884, 2.059508, 1.354737, -7.109372, 0.422387, -3.505325, 6.440124, -0.709708, -0.266126, 0.004942, 5.169637, 0.711437, 4.431763, -3.712740, -6.830352, 2.374137, 6.030969, 2.813872, -0.828941, 5.753105, -3.969281, -0.101831, 1.111752, -0.577075, 1.980342, 5.342420, 0.830509, -0.849474, 2.333640, 4.110284, -10.945628, 1.495124, 6.051959, -0.124720, -2.623258, 1.853333, 5.212372, 0.415820, -2.715355, 0.206931, -0.128600, 1.746347, -0.155745, -0.233455, 2.918806, -0.094414, -2.185907, 2.838618, -1.284784, 2.813802, -0.762434, 3.002384, -0.102323, -0.058628, 7.423843, 1.276592, 1.294652, 2.240631, -0.610631, -7.287424, 1.418261, 0.816840, -2.684842, 4.845943, 4.965572, -1.209319, -1.404999, -4.692338, -6.659638, 0.113021, 1.394000, -7.399866, 5.147840, 1.526794, -2.491843, -2.009047, 2.508059, -0.245668, 1.353432, -9.987974, 2.926514, 3.554738, 4.995962, -0.890090, -1.132992, -5.233229, -2.454151, 0.138648, -3.343158, 3.218903, 10.731729, 0.179697, -4.158245, -5.648637, 3.967639, 1.781262, -2.466896, -2.424516, -2.444896, -5.249668, -4.497662, -4.044394, 0.243171, -4.846896, 1.963107, -4.203612, -4.168442, 2.909922, 7.474030, 0.762696, 0.948857, -1.459502, 1.139815, 3.069055, -3.323893, -1.106123, 0.959271, -2.972250, -1.056439, 2.845901, 3.328005, 1.591034, -6.209545, -0.361117, 0.519224, 5.367730, -0.263531, 1.660156, -1.372960, 2.819782, 4.583301, 0.053495, 5.665277, -5.296394, -0.025112, 2.557382, 2.700260, 2.188862, -3.309154, -0.160360, -1.019788, 0.422536, 0.359501, -3.985848, -4.308410, -4.981796, 1.889882, 1.053905, 4.603822, -3.071977, 6.326282, 1.321898, -0.012240, 0.090043, -0.344419, 5.147530, 2.265015, 4.738169, -0.093961, -3.811850, 1.047064, 10.157013, 4.743258, 7.141965, 1.066689, 2.954718, 0.296469, -1.034733, -1.710455, -0.532571, 4.611936, -0.669968, -1.541446, -0.887973, 4.762004, -4.973036, 1.581993, 4.105812, 1.056270, -2.201197, -1.150516, 0.819976, 0.824889, 5.638547, -1.001109, -2.248711, 4.272346, -1.889298, 0.173297, -2.583799, -3.014771, 0.381561, -0.058445, -10.554512, 0.568557, -4.030552, 1.063237, 6.562668, 1.954355, -0.822928, 0.779761, 4.135376, 5.057029, 0.432285, 6.942090, -1.834300, -0.701786, -5.246745, -3.839270, -8.019054, 4.516356, -3.107868, 4.292901, -1.098935, -3.562215, -6.332080, -3.492798, -0.993626, -1.121348, 0.815774, -0.545536, 3.372131, -2.094609, 6.012065, 2.027513, 0.257524, 4.272281, 0.485950, 0.883503, -3.525961, -8.162830, -0.288104, -1.624345, 2.529218, 3.295431, 4.993791, -6.329498, -5.746292, 2.473589, -2.429946, -1.117752, -13.519817, -7.268318, -1.118978, -2.724793, -0.335434, -0.237011, -1.577320, -4.367187, -0.083867, 3.224887, -2.845260, 6.178665, -5.798835, 3.059986, -3.558267, -3.499238, -1.651811, 3.329851, 1.396718, 2.873462, 5.183454, -2.470144, 0.299798, 1.683276, -0.754664, -0.557604, 0.097709, -0.316821, -1.537827, -0.769508, 2.565984, 1.490902, 1.196525, 1.016349, 1.122763, -0.129937, 1.247755, 4.268309, -2.340124, -3.855088, 0.941537, -0.381153, 3.338399, -3.204222, 5.272754, 1.381338, -3.719207, -9.036061, -8.605568, -4.693647, 2.356426, 2.091722, 0.295684, 0.956897, 2.216397, 0.641491, 0.880784, -1.044372, 0.020868, 3.880427, 1.597131, 5.130661, 4.724403, 2.608148, -2.235970, -8.938436, 2.472075, -1.878265, 1.717556, 0.341884, 12.340206, -0.165873, -6.448755, -11.655176, 0.972309, -2.180458, 2.936051, 0.447728, 11.636771, 9.458894, -1.738721, -1.681901, 0.447583, -0.827482, -0.076822, -0.131987, 6.703393, 2.605911, -0.062193, 0.333883, -0.090670, 1.583676, -2.702961, 0.340563, -7.199040, -2.043446, -0.057329, 0.345143, 1.823417, 4.900608, -4.105616, 0.491261, 4.201406, -3.536129, 1.356752, -0.029528, -3.808081, -11.491957, 9.798372, -0.184595, 3.900829, -0.025702, -0.447673, 2.083195, -0.743767, -2.523749, 4.305879, -3.468534, 0.310016, 2.645331, 4.062176, 2.604977, -0.487273, -0.001471, 0.569222, -4.263353, -6.549046, 0.947340, 0.946195, 3.979799, -0.127920, -3.617949, 0.173315, 0.038247, -1.671738, -4.277497, -4.186216, -4.471751, -0.226938, 1.509640, 5.555100, 0.017173, -0.773783, 0.971961, -1.275968, -0.076477, 2.977075, -1.405722, -0.281382, -4.553804, 0.406450, -0.710510, -3.648431, 1.768343, 1.893957, -3.130730, 0.581914, 2.696048, 0.928965, 4.308264, -1.598643, 3.463273, 0.048406, 6.637488, 0.153922, -6.169127, -2.057266, 3.258104, 3.054747, -0.000057, -0.026145, 1.591739, -0.023785, 0.233321, -4.133327, 0.662224, 1.097311, 7.185622, -5.549306, 2.042615, -5.847503, 0.172207, 1.538699, 2.668698, 5.988052, -0.863076, -0.585639, -5.556726, 1.846621, -0.951853, -3.809459, 9.860162, 5.942457, -5.704624, -2.869631, 0.010843, -2.641475, 2.167218, 1.833458, 0.296820, 0.634770, -0.741936, -1.644975, -3.141125, 3.339068, 0.776640, -1.568341, -3.492356, -0.470710, -1.309820, -3.142795, 1.264116, -3.490557, -3.572397, -1.651310, 1.131271, 2.926528, -0.616492, -3.792120, -0.214447, -2.344300, 5.790883, -3.102818, 8.839439, 0.409714, 2.168245, 0.202377, -0.454987, 0.519873, 8.175124, 0.427410, -9.902246, 1.130025, -0.513523, 1.867186, 5.343970, -1.920144, -4.094131, 1.771582, -1.935505, -5.532904, 4.878136, -0.060956, -0.026615, 0.446926, -2.016111, 7.120039, -0.424641, -0.061255, -0.593578, -1.958208, -0.391602, -0.472750, -0.758140, 1.507612, -2.936864, 0.195067, 2.777847, 1.675735, 4.349537, -0.571986, -3.606022, -6.699798, -0.564082, 4.571085, 0.327201, -1.905577, 5.581552, -0.342707, -3.362906, 4.729235, 1.089156, 5.635921, -0.014798, -1.261189, -0.332104, 0.609498, -1.647114, 1.669553, 0.374264, 3.282902, -1.752555, 3.738577, 1.981194, -0.869527, -4.507329, -1.822255, -1.375043, 0.361820, 5.513688, 0.230618, -1.481770, 1.364776, 0.650051, 0.102176, -0.001490, -0.888542, 0.217108, -4.400694, -2.460488, -2.142963, -3.445317, -2.452469, 6.746197, -1.921431, 9.492379, -2.325576, 0.405751, 2.609226, -1.407998, 0.986092, 4.514874, 0.108704, 0.603596, 1.750442, 1.714508, 4.789082, -1.440571, -0.878463, 1.520678, -1.585889, 0.105334, 7.194630, 7.006618, 1.133277, -0.062292, -6.020393, -5.635540, -3.064330, -2.972053, -0.993023, 1.618374, -0.057395, 1.493672, -0.789785, -5.251556, 0.056737, -6.214289, -7.015460, 2.780783, 3.248916, 5.244694, -2.412669, -0.188875, 2.366927, -4.429873, -0.040983, 4.134392, -4.651297, 1.849452, -2.512143, 0.114833, 0.979572, 0.065521, -2.298851, 4.910531, 4.155065, 0.352131, 0.151823, -2.360681, -4.953442, -0.555213, -0.335283, -4.150012, -3.033337, -5.318827, 1.216185, -4.718475, 3.039701, 4.347839, -0.186076, 3.013520, -0.885484, 0.199431, 5.056513, 1.274066, 3.330811, 1.071532, 2.307818, -1.231845, 2.970392, 1.831645, -2.448898, 3.736881, 0.057759, 6.679784, -2.403128, -9.787365, 2.563922, 3.247179, -0.012910, 1.123178, -0.634490, -0.009691, -0.005552, 0.855638, 0.113647, -0.269984, 2.792508, -0.743296, 3.500570, -1.032244, -2.892419, -3.963207, 7.623781, 4.205984, 3.480365, -5.277036, 1.330614, -3.268126, 4.517873, -2.923351, 5.408849, -0.006212, 2.714594, -0.022754, -1.552000, 1.460807, -3.763390, 0.410225, -5.409842, -0.065908, -7.934735, 4.239173, -4.070442, -1.405998, 0.642291, -2.410548, -1.833019, -6.965807, -4.474487, -0.279187, -0.371922, -0.142775, -2.046949, 0.070080, 0.163394, -0.184711, -0.168619, -4.530483, -5.300485, 1.628138, 5.035965, -4.569588, 2.654992, -3.110272, 2.006499, -1.726934, -2.530666, 3.108309, -2.464334, 0.137819, 0.004644, 2.702362, 1.602196, -6.397662, 0.931750, 1.214246, 4.497550, -0.881810, 2.550910, 3.810047, 1.506102, -0.908724, 1.272825, -3.227784, 2.377525, 4.363932, 0.019257, 1.587560, -0.121363, 1.177220, 3.055651, 0.946687, -2.825658, 0.819505, 2.376204, -1.820166, 4.814208, 6.989204, -2.373306, 3.306972, 0.416947, -3.589711, -4.721005, 6.229137, -2.443368, -2.988649, 0.354574, -3.521739, -6.654729, -3.289409, 3.314070, 3.655743, -1.040791, -0.306735, 5.773582, -7.453763, -5.359430, 0.426405, 1.028669, 1.241614, -2.126209, 4.864559, 2.336204, -1.985213, -0.902069, 2.699632, 1.624854, 3.709470, 0.671311, -2.212065, 3.601441, 1.050618, 6.903223, -1.270935, 0.316807, 4.597841, -0.974303, 1.224436, 1.375242, 4.650789, -1.354023, 3.387038, 3.106138, -0.427633, -1.999412, -14.263725, -0.312913, 0.063937, 3.454380, 0.853375, -3.006591, -2.441993, 0.583795, -2.939463, -1.243754, -1.021871, -3.958032, 1.048049, -8.227103, 0.404519, -1.017159, 0.273273, -3.723046, 1.759197, -3.746738, -4.732924, -2.561224, -1.146303, -0.398051, -1.964425, 1.913997, -1.476784, -0.029199, -0.700788, -4.500231, 0.482127, 3.013607, 1.401778, 3.882581, 1.152152, -5.617946, 0.144557, -1.759709, 6.107874, 4.922176, -5.179372, -0.909929, 0.649689, -0.757023, -1.680153, 1.275247, 2.041158, 1.328913, -6.673042, -0.273911, -1.765330, 8.019628, 3.207435, 1.077303, 0.203352, 0.931596, 2.524080, -3.727402, 1.081128, 2.175904, -3.343817, -3.746030, -0.314732, -0.332013, 5.270098, 1.829976, -2.130228, 0.614104, -2.692844, -0.289054, 2.551070, -1.460109, 2.645048, -1.196309, 0.115082, -3.896767, 9.656350, 1.459867, -0.003529, -4.774947, -5.914416, 0.215330, -3.432626, 1.021704, -2.312573, -7.024405, -1.849720, -3.092340, -1.368001, 0.188480, -1.194326, -0.637599, 0.122717, -2.641920, 3.492096, 4.106804, 9.270782, -0.035160, -0.245241, -8.323165, 4.888138, -2.226707, -2.994345, 2.020879, -0.395241, -0.179746, -3.197128, 1.265654, -0.532883, 3.058285, -2.062794, 3.207631, -9.054969, -2.864531, -0.871130, 9.117023, -2.347618, 5.941471, 2.077816, 0.883953, 8.118439, -0.521390, -0.238949, -3.748918, 2.144395, -1.129512, -4.516557, 0.313121, 0.936105, 2.460839, 0.088672, -3.876451, 5.289827, 4.853863, 2.688495, 0.964901, 5.693359, -0.643778, 2.647713, 5.704851, -3.993457, -2.516671, 1.483038, 0.399039, 0.102820, -1.324987, 4.249714, -4.987561, 0.594573, 2.687088, -5.280706, 0.778387, 5.244863, 6.302296, -2.648989, -7.877838, 2.290410, 3.640933, 0.739566, 0.178788, -5.616697, 4.014147, 3.964926, 1.532802, -0.431018, 2.901000, 3.186200, 3.876082, -1.122623, -0.058375, 4.122059, 0.479492, -2.288769, 1.988854, -1.392784, -1.931579, -3.573721, 3.813021, 4.792922, 4.041496, 0.563931, -9.098000, -1.356132, -2.051821, 3.282480, -1.566306, -2.023037, 0.979644, 0.447274, 6.022537, 2.812065, 0.162424, 0.206939, 2.453523, -4.538718, -2.030375, -1.488082, -3.197017, -3.449918, 2.998883, -0.468020, -6.209292, 2.547401, -0.614768, 5.984511, -0.104435, -5.531857, -4.084041, -0.370942, 1.875537, 1.204635, 6.465639, -0.539545, 1.725069, 6.197456, 0.626320, -9.669788, -6.096525, -0.276844, 8.580634, 1.099832, 1.591415, -1.389589, 2.436423, -6.431682, -0.303867, -0.810074, 1.452129, -0.262077, 3.641073, -0.903035, -1.185559, 10.483525, -1.386117, 3.861802, 1.176159, -4.542426, -0.058838, -1.015140, 5.164169, 0.251072, 0.384475, 0.281439, 7.947507, 0.877360, -0.576882, 0.495953, 1.086257, -5.852773, -2.767107, -2.267903, 0.561476, -1.084434, 2.393119, -0.097898, 0.440350, -0.484027, 0.776798, -7.258694, 1.215970, -1.567899, 1.339548, 2.033061, 2.752798, -5.560112, -0.077397, 0.721023, -6.203930, -1.695403, 5.537146, -9.447447, -2.697748, -0.043759, 4.304340, 1.709005, 0.812581, 0.370129, 4.800770, 0.030635, -4.151722, 0.046181, -0.475627, 0.006197, 0.537970, 2.710606, 1.816996, 6.561518, 0.318119, -2.328600, -1.882591, -8.602366, -9.410439, -1.652405, -0.953572, 0.347174, -3.470130, -0.000711, -5.144109, 0.624943, -2.083126, 2.767149, 1.315560, -2.545255, 3.375787, 2.593396, -2.273217, -3.422366, -7.904332, -6.225791, -0.956074, 5.351878, 1.800510, 1.912785, -1.543061, -4.738302, -4.004639, -6.792346, 9.098534, -0.620093, -2.108139, -5.154526, 8.080357, 5.068964, 4.343806, -0.157681, 1.984312, 0.459727, -5.038471, -2.661160, 0.055840, 10.577642, 4.620853, -3.637174, 5.560658, 1.916229, 0.654499, -1.998095, -4.237348, -3.232992, -1.830947, -1.068578, -1.617900, 0.714291, -4.043469, -0.444917, 0.978979, -2.584777, 1.277269, 2.386837, -6.305502, 0.121604, 1.412783, 0.653413, 3.036438, 2.768948, -9.744542, -3.689719, -3.452209, -10.608861, -3.236202, 1.729487, -2.927757, -4.701297, 11.400037, 7.034643, -7.286547, 4.691584, 4.084343, 3.604400, -4.923679, -1.813507, 0.658529, 3.454041, -7.046291, 0.589611, 0.037175, -3.552428, 3.408782, 1.121571, 0.614767, 3.284083, -4.109370, -10.938247, 0.442020, -0.121788, -3.744960, 0.031285, -7.516037, 0.109905, 0.176512, -5.390704, -1.114231, -2.214612, -0.265107, 4.384219, 0.553956, -0.502500, 10.455436, 1.120000, -8.095864, -0.778641, -5.600359, -6.534314, 7.474305, -8.409909, -0.855348, -3.587091, -4.347822, 6.141568, 2.773007, -0.330568, 2.153925, -0.351253, -1.056275, -3.540951, 1.026076, -3.707464, -1.645440, 0.000507, 0.304426, -3.583717, 7.039771, 2.526894, 4.688828, -7.581242, -0.782881, -6.695222, 5.090632, -0.006731, 1.689943, -0.842695, -9.328964, 2.591607, 7.422140, -3.216673, -1.951735, 0.333549, 5.436418, 0.078466, 6.354870, -2.104988, 3.388239, 2.421902, 6.996591, 5.495170, 3.211206, -8.029123, 3.962790, -3.307806, -3.314206, -6.477521, -0.223202, -0.522705, -6.183891, -3.008214, -6.073395, 3.447349, -0.096371, 2.344163, -4.739252, 3.953689, 4.222349, -7.004005, -0.052890, 0.999592, 9.236704, -2.130255, -3.619022, -0.149625, 2.876487, 2.704628, -0.794551, 7.147145, 5.903722, 3.915827, 2.059459, -4.207718, 6.486900, 7.151625, 2.032479, -0.075666, -0.138138, 4.182639, 0.131846, -4.178547, 5.530023, -0.760065, 0.969573, 1.061261, 0.406154, 5.338087, -4.981488, 4.180845, 0.882268, -1.054465, -1.154401, 6.672582, 4.544742, 0.086003, -6.785923, 7.909182, 1.706591, 9.751883, 6.775731, 0.225223, 0.388467, 5.400630, -0.121121, -0.677740, 0.644702, 0.522380, 0.170924, -1.159693, -2.598139, -3.585566, 1.972221, 9.582241, -1.873368, 0.874579, -4.828268, -4.376843, 3.810789, -4.812220, 0.718399, -1.180434, -3.242600, -1.566647, 7.654933, -4.102149, -2.279679, 0.137978, -0.368608, -2.755538, 0.816232, -3.242855, 9.129741, 5.765985, 5.019303, -3.263354, 0.339600, 0.010591, 1.132612, -0.977761, -0.090115, -4.913845, 2.898478, -0.007353, 2.086877, -6.258654, -0.351557, -0.749201, -1.551592, 0.136005, -0.046578, 0.083601, -1.886635, -0.607299, 2.785259, -3.973704, 0.619516, 3.986200, -0.534189, 8.397143, 3.932925, -3.002221, 5.126242, 3.359045, 6.020249, -2.376764, 1.726301, -5.409464, 4.890821, 0.601706, 2.109882, 2.187342, -2.695427, 1.940037, 1.926898, -0.002677, 0.021325, 0.830311, 3.520621, -3.227579, 5.155818, -3.496288, -0.099924, -4.218016, 6.323743, -3.572045, 2.323373, 0.158735, 6.494978, 0.897556, -3.062770, -2.858784, 1.566924, -0.033720, -5.879069, -0.101610, -6.846155, -3.554789, 11.750919, -0.712356, -0.338118, 3.835320, 1.461386, -1.816890, -5.919792, 1.644525, -7.327300, -6.579868, 3.293220, -2.693432, -3.955329, -1.005851, -6.254828, 2.498211, 1.940237, 0.481200, 9.656438, 0.240897, -1.265905, 4.347397, 10.950264, -12.237374, 0.502832, -1.690919, -2.828485, 3.525796, -4.257775, 2.051737, -6.492669, 2.024296, 0.391932, 3.784518, -2.389678, -4.416945, 0.625610, -0.293373, -0.037328, -0.517975, 1.649144, 1.160971, 0.506438, -1.131908, -0.038271, -5.668414, -0.442612, 2.382914, 3.323458, 6.836140, 1.910023, -3.950216, 4.875198, 1.890990, 0.551287, -0.219823, 0.455612, 0.012268, 0.026691, 2.258301, 14.445374, -9.955570, -0.627969, 2.279076, -5.863344, 2.019042, 3.147035, -1.781734, -4.277750, -1.705837, -1.741006, -1.453945, -9.678993, 4.473619, -1.069655, -2.861028, -2.588425, 3.709558, 1.780781, 2.657225, 0.088197, 2.650440, -8.729904, 4.577395, -1.823637, -1.182782, 0.195642, 1.754526, 7.484874, 2.348905, 4.355453, 0.010826, 2.071287, 4.483963, -0.253794, 6.190690, 4.231384, -0.523160, -6.299307, -3.804003, 4.693217, 3.173011, -4.272896, 1.136653, 0.333041, 1.018608, 0.213511, 1.778272, -3.588235, -4.582500, 5.411454, 3.166693, 7.529909, 2.292525, 0.173206, -4.227821, -0.042715, 1.165264, -5.945516, -0.610124, -0.699059, -1.251793, -2.387078, -4.381602, 3.461027, 2.618393, 1.338787, -0.930201, -0.910212, -1.132075, 1.220256, 1.061923, 0.302762, 0.794644, -0.929359, 3.629819, 1.467210, 4.339104, -2.303586, -0.993965, -5.887624, 1.497762, 4.370133, -3.421072, -0.475275, 6.531365, 0.235601, 1.784233, -2.123167, -1.381489, 0.110532, 1.492654, 1.945078, -3.295092, -0.426116, -0.323244, 3.869091, 5.252817, 0.504334, -6.985620, -0.277298, -2.830087, -5.356292, -0.472228, -1.735986, -3.340069, 7.439146, -3.908280, 6.130438, -3.379878, -2.424764, 2.630078, 0.913961, 0.217893, -2.439762, -0.628539, -1.042606, -0.567556, -0.233880, 0.490841, 0.322648, 5.644710, 0.252179, 1.523528, -2.084197, -1.378312, -5.650394, 3.655080, 1.314819, -2.665186, -2.316741, -0.376426, 0.134854, 7.187033, 0.010875, -2.177172, -0.075750, -15.161308, 3.850377, 3.657217, 1.629299, 7.332540, -1.443149, 0.232777, -2.259036, 3.654610, 5.705053, -3.882349, -2.769710, -2.980928, 3.978552, -2.359820, -0.975882, 0.004926, -0.316470, -0.414783, -4.365500, 6.066716, 5.737901, 2.187932, 1.104907, -2.137824, 0.134720, -0.570865, -1.314352, -2.219584, -4.537891, 0.768487, 0.344057, -0.738188, 2.604628, 5.180123, -0.436380, 3.891590, -1.033229, -9.669333, 6.242013, 4.502106, -0.920643, 3.596680, 0.872650, -2.550828, 5.600400, 0.001684, 0.401410, -3.392988, 6.081916, 1.505512, 0.062307, -8.342303, 7.472530, -5.081509, -1.685467, 1.848381, 1.293144, 2.564443, -8.243598, 3.942904, 3.708061, 7.888132, 0.992536, 0.877552, -1.515095, 0.999640, 4.167929, -1.893826, -1.390576, -8.402894, 9.010080, 0.834632, -9.559398, 3.922271, -2.288526, -0.235168, -3.975865, 9.512965, 0.854825, -0.581756, -3.401748, 2.896793, -0.529649, -4.515088, 0.067843, -4.050840, -3.646595, 2.280187, -2.033017, 2.446215, 4.681082, -1.848684, 2.697784, 4.558267, -1.920036, -2.755307, 0.266374, -13.230797, -1.098942, 2.747517, -4.841957, -2.449324, -1.905265, -0.159938, 0.753852, 0.028905, 2.370839, -7.374860, 2.476338, 0.326115, 3.034132, -1.270673, -8.472501, 1.206639, 2.129976, -3.218827, -7.455028, 2.386190, 3.734606, -5.059605, -7.695398, -0.376644, -4.004558, -2.763494, 4.476542, -3.777432, -1.149516, -2.825100, -0.072625, 2.489635, -0.575494, -4.106018, -1.894740, -1.630066, 0.408513, 0.282311, -1.336001, -2.018093, 0.629221, 3.433453, 9.361641, -5.103720, -3.762751, -2.853069, -1.158471, -2.433638, 0.210483, -6.485835, 6.520605, 3.520422, 2.577328, -1.156697, -3.965161, 1.169376, -1.319926, -0.034912, -3.042283, 0.774453, 0.665754, 2.185024, -4.421767, -3.446357, 2.786642, -6.030744, -1.614241, 1.315408, -7.101973, 3.690604, -0.415112, 7.313778, -2.926476, -0.290797, -5.514432, 0.841516, 1.969277, -14.760344, 0.884348, -4.024467, 5.267989, 4.733936, -1.186992, 4.998606, 0.577960, 3.477447, 0.365535, -0.895383, -0.628051, -3.524010, -0.205574, 2.989354, 5.130811, -0.313078, 0.736915, 0.839899, -0.212973, 1.740184, 0.251238, -0.537984, -4.498885, 0.031354, -1.305558, 6.437317, -1.141151, -2.283838, 6.199955, 5.687241, 0.240623, -0.954767, 0.051225, -0.745435, -3.853688, -1.647825, -1.561069, -5.902158, 5.880575, -1.076473, -1.281096, 2.056972, 0.865724, -2.302963, -0.756434, -1.283108, -4.955392, -9.511735, -0.355788, -10.176494, 3.282251, 0.822468, -4.221086, -0.473516, -2.082666, 0.036900, 1.924422, -2.950413, 2.858976, 1.861050, 6.765419, 0.106302, 7.264514, 2.551827, 0.581706, 1.483190, -1.393805, 3.933737, 1.098404, 6.059342, 1.801395, 4.559071, -0.120819, -4.145657, -0.344000, 1.612767, 2.332033, -4.709498, 2.634722, 5.551647, 3.081794, 3.137625, -2.932366, 1.976123, 0.241211, -5.633870, 0.232125, 2.681178, 0.064227, -1.990259, -3.993648, -6.480330, -2.204516, 3.326689, 5.201554, 1.626778, 3.497411, -0.736615, -6.676769, 0.577333, 6.745975, 3.828688, -1.191870, 4.294685, -0.083528, -6.004559, 1.499604, -2.325432, 2.013898, 0.094628, 3.561403, 8.742531, -3.274329, -0.808786, 0.693982, -7.597322, 7.022217, 0.881783, 2.157397, 0.002330, -2.763650, 1.180749, -5.554371, -5.703213, 3.825368, -2.116017, -2.703773, -1.524027, 0.495374, 5.298570, 9.192527, -3.962620, 1.509935, -2.476857, -4.748866, -2.855859, -0.625818, 0.811186, -5.270221, -0.156211, 2.930984, 1.164865, 0.339505, 4.635352, -2.653825, -8.683824, -2.031138, 4.964819, -6.096752, 3.306898, -1.343876, 10.280967, 5.727515, 3.781071, -5.183549, -0.872773, -0.432444, -0.312937, 1.391468, -0.482233, 2.884065, -5.039195, -1.335339, 1.650138, 8.282273, 2.459844, 1.657121, -1.630570, 4.782663, -2.946631, 3.781657, 2.937099, -5.267007, 5.953804, -1.084603, 2.788103, -2.712114, -0.262266, 0.607717, -2.501194, -3.340202, -6.881357, 4.404689, -6.081471, 0.686818, -4.136237, -1.362703, -5.371671, -2.714184, -4.917381, -1.125225, 11.547019, -3.648393, 6.157897, 3.465099, -6.923062, -1.622779, -0.544766, 3.492985, -0.348151, 0.063623, 0.359321, -1.383675, -0.818069, 2.882192, 4.881864, 0.238952, -6.199996, 4.353363, 0.541442, 1.825681, 0.626724, 2.982978, -4.277094, 5.823081, 1.461838, 0.001074, 3.588224, 0.356305, 4.985291, -5.562328, 0.341573, -2.285148, 2.533214, 0.041677, 0.239970, 5.736994, -3.533044, 1.756228, -7.088032, -0.299523, -1.747292, 0.109185, -11.284340, 2.655393, -5.061846, -2.916263, 7.243564, -0.618130, -0.596763, 3.281673, 7.809619, -0.361148, -0.511788, -2.062974, 1.295618, 1.387303, 1.370848, -0.977142, 0.326596, 6.259760, 6.000131, 2.168836, 0.292792, -6.100121, -1.648291, -2.910793, 3.429210, -4.495223, 3.250162, 7.696633, 2.055804, -0.493762, 0.638779, 8.560684, 0.350733, 1.444609, -0.335017, -1.775962, -3.751612, -1.081775, 2.703094, 2.477901, -3.246076, -0.143827, 2.114472, 2.879983, -1.457717, 4.617747, 20.876135, -4.724092, 3.200448, -4.266057, -1.885840, -1.964761, -0.052492, -0.721372, -0.722218, -3.953537, -0.274128, 5.950771, 3.678252, -4.097919, 3.432512, 0.215204, 3.412847, 0.030229, -3.187820, 1.997679, 8.527829, -6.428014, 0.156769, -3.300626, -5.941474, -0.420770, -0.210680, -6.008432, 4.447064, -3.820146, 0.379853, 0.058582, 4.611588, -10.745686, -3.827505, 3.752095, -0.635158, 4.823095, -1.134440, 0.139132, -0.630321, -2.011078, -5.275105, -0.755605, -1.410538, -3.917605, 3.136648, -1.648700, 5.472077, -2.083815, 0.191695, -6.190964, -0.168221, -6.408861, -2.145018, 1.758466, 1.327917, 0.019401, 7.866415, 2.777255, -6.084412, -0.504542, -0.142678, -0.448162, 4.838410, 1.105759, -0.422734, -4.942491, 0.948695, -0.571098, 2.534549, 0.251890, 3.318484, -4.457048, -0.246802, -3.363921, -0.296879, 1.394156, 0.457000, -0.260458, -7.491118, -1.654942, 6.793195, -4.986042, 0.055306, -6.060972, 6.204267, -8.694168, 5.139706, -1.689499, 2.651025, -0.405957, -0.215962, -1.543237, -0.002264, 0.355597, -3.120486, -2.953389, 2.215263, 0.986249, 2.004209, -5.248799, 3.712906, 3.268253, 1.040430, 3.008511, 0.034117, -2.448920, -0.730816, -1.599155, 0.758854, 9.229083, -0.005004, 1.524734, -0.537981, 0.734243, -1.898822, -0.422717, 7.672883, 9.950904, -5.263350, 1.022968, -1.795026, -0.535556, 7.793455, -0.231216, -5.477964, -0.671323, 3.567302, 0.041599, 1.383575, 2.692178, 3.024520, -10.108123, -0.098066, -5.319206, 1.889755, 1.094370, 1.288221, 0.070469, -5.713789, 0.675052, -0.066914, -4.874253, 2.581139, 1.161425, -8.823732, 0.140147, -0.213331, -5.906888, -4.578184, 1.686043, 5.593365, 3.533107, 8.295037, -2.775516, -0.284114, -2.138807, 0.855444, 0.318211, -5.040519, 0.273568, -0.193171, -4.790638, 4.372327, -1.339575, 3.668198, 6.046596, 0.423543, 1.745564, 0.505791, -0.998355, -1.428472, 2.759795, 0.361569, -0.149641, -2.188704, -0.000538, 0.276508, -1.737962, -0.938707, 1.787655, 2.419068, 1.364403, 4.036608, 2.264567, 0.533245, -0.952425, 1.093489, 0.429062, 4.051697, 2.760857, 4.637475, 3.216821, 1.047927, 0.034678, 1.946916, -1.288518, 5.749068, 11.236843, -0.891525, -0.230383, -3.979483, 0.844333, -3.073246, -0.899961, 0.112676, 0.953129, -0.556389, -0.744372, 2.560169, 1.527440, 9.736571, -6.823177, 1.568513, 1.866843, -1.664699, -3.037961, -4.152460, -0.000117, 4.709698, 1.655811, 8.769832, -0.399168, -2.194526, 0.518833, 7.706134, -0.545377, 0.361829, 1.563736, -0.074118, -3.210176, 0.547159, -1.066329, -1.368820, 1.067310, 0.018816, 0.108870, -4.106760, -5.334402, 2.222003, 2.389158, -0.350109, -1.678871, 6.340547, 0.206899, -4.048324, -2.989235, -0.577846, -2.924823, 6.450324, -1.964302, -0.070562, 0.888865, 3.409028, 0.186453, -2.403039, 10.645032, -3.669665, 1.443856, 0.163795, -4.324875, -7.968771, 0.901046, 1.103202, -1.768245, -0.255321, -0.081645, -0.689045, 1.541479, 1.925359, -2.122916, -1.454993, 1.490373, -0.115398, 0.501115, 4.462778, -6.486024, 3.097420, 2.717251, -0.979415, -0.156620, -2.506409, -4.246205, -0.407856, 0.332777, -0.947588, -12.701550, -1.615865, -4.984478, 2.422003, 0.918070, 3.422274, -2.923225, -2.219902, -1.527299, 8.669552, 0.757652, -7.139126, -2.766340, 6.131807, -2.698269, 2.792774, -4.081421, 0.068330, -0.348497, -5.076352, -5.389002, 5.799190, 1.741608, -1.670740, -2.037165, -2.898606, 3.917571, 0.192078, 1.916032, -3.571789, -0.012388, 3.072065, -3.809190, 1.144424, 2.520948, -1.140449, 4.709317, -6.833424, 0.292813, -0.433921, 1.707562, -1.339970, -4.923796, -0.020864, -2.259656, 4.536613, 0.547248, 6.524737, -6.038517, 0.190737, 2.296142, 5.581495, -1.324289, 0.790286, -2.102135, -1.051986, -3.491091, 0.873869, -0.556358, -1.571750, 8.933004, 2.420325, 0.201940, 2.305543, -0.020546, 9.841742, -4.068511, 0.007328, 5.493869, -5.811314, -4.891520, -1.663812, 3.798612, -5.770410, -0.038278, -0.046073, 3.065815, 5.752711, 3.935663, -0.520426, -4.986781, 3.345602, 0.399667, -1.426442, -1.305061, 11.949132, 0.371970, -4.694106, -3.715069, -1.785653, 7.417334, -0.046858, -0.328459, -0.619027, 4.952254, -0.280194, -0.195900, -4.925470, 1.091309, 3.714402, -4.790899, -1.099012, 3.402861, -4.682663, 0.075650, -1.335872, -1.713712, 0.301721, 5.977397, 1.975923, 3.779584, 6.479292, -1.243348, -5.081936, -0.819842, -8.667365, 7.984306, 3.196889, -2.456238, -0.162036, 0.954915, 1.417101, 2.200590, -2.237679, -2.106289, -3.372339, -6.050962, 3.034973, -1.827862, -2.671412, 2.248384, 1.598400, 1.451663, 6.373374, -3.289393, -0.002666, 5.629801, -2.395743, -6.531272, 0.420969, 0.387590, -0.366343, -9.984303, -1.623720, -0.493820, -2.968705, 4.332264, -5.070169, 0.493697, 1.831998, -0.336312, -6.203096, -8.180768, -4.203964, -3.099047, 0.420540, -3.541414, -1.260756, -0.902897, -0.087048, 9.912076, 2.062619, 0.795598, -0.768905, -0.190682, -8.362232, 10.458933, -8.862805, -3.006865, 0.060958, 5.090002, -2.474933, 3.545698, -4.971230, 1.135828, -0.154151, -1.636367, 6.855558, -0.947844, -1.932342, -1.206949, 4.376014, -0.609596, 0.355875, 6.554003, -3.868812, 0.427834, 3.170920, -3.570000, -0.892403, 1.461200, 4.807756, -1.043838, 0.380617, 2.903239, 2.049362, -3.784583, 1.210863, 1.215841, 6.655245, 3.702009, 3.472306, -0.083865, 0.784953, -3.251274, 8.072958, 4.260328, -1.173335, -0.386510, -1.989874, 1.456163, 6.554066, -0.012034, -5.006885, -0.018063, 2.548033, -1.761526, 1.323905, -4.792915, -0.049102, 0.712940, -2.344241, 2.305605, -6.564734, 10.836132, -0.495553, 3.967372, 4.306948, 8.116026, 5.040866, -3.359933, -3.902645, -1.768089, 4.545218, 0.596399, -1.068539, -2.317191, -4.928998, -0.500831, 1.849990, 1.303427, 4.003483, 2.465532, -5.560050, -1.787768, 5.118622, 1.099808, 1.260572, -4.746913, -3.827788, -0.011982, -0.696365, 3.642304, 3.162141, 3.661181, -1.009650, 8.948164, 0.209512, -0.525730, 5.278910, -2.234629, -3.607345, -6.734541, -4.344431, -0.086174, -3.988655, -1.805668, 0.975225, 5.086757, -7.566240, -0.844781, 2.120935, 5.544988, 3.873322, 4.233092, 0.860084, -1.103033, 2.703806, 3.777308, 3.273662, 0.236095, 4.487761, 1.104045, -3.370062, 7.673077, 4.968377, 2.034759, -0.243290, -6.563126, -0.444486, 1.256436, 1.948936, 0.990776, -1.788437, 5.928935, -1.574325, 5.711511, -3.726691, -2.318228, -2.928472, 0.841987, 5.552748, 6.231050, -1.080486, -0.560032, 0.343875, 0.478820, 1.577655, -2.069352, 3.538757, 2.738144, 5.953899, 0.943720, -2.871507, 0.184926, -12.671627, 4.877713, 0.070981, 6.882595, -13.802091, 7.691815, -0.105061, 9.172771, -2.693112, -1.579502, 1.980792, -0.242440, 1.777880, 1.709190, 1.680155, -0.436484, -3.480121, 4.734554, 0.068733, -2.571400, -2.385751, -1.918840, -0.367167, -4.130077, 3.263525, -0.004105, -2.520358, -0.130756, -6.271007, -0.057947, -0.465396, -1.468961, -2.898905, -1.459889, 2.608495, 0.106310, 0.517743, 3.969159, -2.469547, 1.960915, 1.666106, 1.293651, -4.565251, -8.760086, 8.736089, -4.102224, 0.471973, 4.588937, 0.587683, 0.054630, -2.194522, -0.514576, -0.099143, 0.402664, 0.775015, -2.749141, 5.394089, -0.152197, 2.781313, 0.495082, 2.436580, -0.519279, 0.451019, 3.525740, 1.866027, -5.291616, 2.673368, -0.521104, -2.942356, -0.596059, 1.104811, -4.148195, -3.897232, -9.161897, 0.627730, -1.668349, -3.652925, -0.207861, 3.698321, -0.205109, 3.103262, -3.494669, -0.187104, 2.243187, -2.481222, 4.020870, 0.554720, -4.490155, -1.031324, 0.442238, -0.315441, 5.906981, -6.786347, -15.138546, 3.032733, 2.355456, -0.824983, -0.596062, -0.749711, -1.812249, 3.716589, 6.805763, -0.034538, -4.483662, 5.036940, -1.492470, -2.044480, -5.116144, -5.993679, 2.552830, -1.059420, -2.743044, 0.413458, 0.575297, -1.070580, -8.552012, -5.880134, 4.774290, -3.788603, 2.796700, -2.777897, -3.238499, -5.397844, -0.289818, -2.881069, 2.106607, -0.164478, -0.001615, -7.540624, 15.398337, 3.278969, -4.629666, -0.899672, 4.580218, 6.048995, 3.034004, 2.903438, -3.602129, 0.601856, -2.010599, -2.186819, -0.793332, 0.115452, -0.448470, -8.010987, 6.539059, 1.265843, -2.597739, 5.706591, 2.872288, -4.839345, 1.063444, -4.270168, -6.976844, 1.866566, 0.278143, 10.704450, -4.744617, 0.206667, 2.233127, 0.898024, -4.417085, -5.821124, 0.096072, 6.063853, 2.847756, 4.152411, 1.970534, 4.777279, 0.574907, 2.086689, -5.487464, -0.013441, -2.087293, -2.006710, 5.620429, 6.012352, -0.751556, 0.012052, -0.184387, 2.561278, -1.901040, -2.528442, -2.109064, -3.635317, 0.929790, -2.488345, 4.213092, -2.267895, 2.424357, -0.212941, 1.252959, -1.502855, 2.222781, -0.749264, -3.946250, -3.540442, -3.082764, -4.688244, 6.330848, -4.555147, -2.398614, 3.231541, -4.868418, 5.355044, 5.841464, 3.334554, -3.275609, -4.493990, 7.369086, 0.237450, -3.884218, -0.925154, 2.506452, 1.658967, 0.444476, 4.098067, 3.871061, -3.002503, 12.404830, -0.561153, -0.054302, -2.048875, -0.334486, 2.267861, 0.017389, -0.105509, -2.429669, -0.018714, -7.827611, 1.199149, -1.922626, -2.585815, -4.252509, -0.393018, -3.696688, 1.452739, 1.598485, 1.685126, -2.847807, 4.094100, -6.610662, -0.119588, 1.761243, -3.900064, 3.136038, 1.836982, -0.076858, 0.411214, -5.531932, 7.002223, -0.184232, -1.050833, 0.430106, -6.836293, -2.949204, -2.118420, -4.025091, -5.452693, -0.661648, -1.625802, 1.181498, 1.392349, 7.168321, -1.408562, 0.853828, -6.870427, 1.122499, 3.143206, -1.332579, -0.359509, -1.418879, 1.400915, 1.712554, 5.027317, -6.078128, 1.559343, 1.542283, -10.188326, -0.212963, -4.286996, 4.560884, -6.536518, -0.735523, 4.853716, -3.767861, 0.699214, 3.094204, 2.912627, -0.100957, 3.190971, -0.249455, -2.429652, 4.472758, 2.040844, -1.431998, 0.439897, 0.107661, -0.489407, 1.599565, 3.020194, -3.008865, 1.103213, 0.586688, -3.671905, 2.919884, -9.499748, 12.771971, 1.386624, 3.641678, -2.699918, -1.835520, 0.783594, -3.013034, 0.938061, -6.501561, -0.055753, 4.100601, 0.444875, -3.243652, 0.213727, -5.381481, 0.951961, -5.346110, -3.838861, 1.553692, 1.063085, -3.057676, 1.183920, -1.756806, -1.831886, -1.485562, -3.231427, 0.436206, -6.629155, -1.100268, -7.568878, 1.134432, -0.500045, -6.556386, -0.018642, 1.592560, 0.061444, 4.572968, -1.359127, -1.944338, 3.045600, -1.820060, 1.791443, 0.983944, -3.531764, 0.452376, 5.627474, -3.524567, -4.320384, -1.675994, -7.208580, -2.563125, 0.773399, -0.141520, 1.114766, -2.537768, 0.260443, 2.469838, 5.141861, 1.035009, 3.269918, -0.025757, -0.525366, 0.294970, -0.593817, -5.929312, 2.198774, 1.646645, -2.754306, -1.698543, -1.750308, 3.245319, -0.352226, 2.511466, -2.598152, -1.736168, 0.124788, -5.378657, 6.752583, 0.928031, -1.949350, -0.313992, -0.143224, -3.282874, 3.142558, -1.015842, -0.166384, -0.708272, -0.868943, 2.455537, 0.000454, -4.127312, 3.607216, 1.942774, 0.688502, -1.330716, 1.389135, 3.509871, 4.487970, -0.549951, 2.801546, 1.892340, -1.206898, -0.574205, 0.912621, 1.108271, 2.417092, -0.384985, 0.796672, 2.733675, 5.479104, -0.482097, 0.975837, 1.080657, 1.819036, 0.481724, -2.958295, 0.986961, -2.752667, 0.006310, -2.004480, -0.521186, 2.354844, 6.198243, 9.812953, -1.175043, -0.914251, -0.982123, 0.001049, 8.242318, -0.254467, -1.744546, 0.090742, 2.777944, -0.590434, -4.633141, 5.098579, -3.303007, 6.371385, -0.177810, -0.151930, -4.211636, -4.906734, 5.338553, -0.660589, 0.947276, 1.726016, 0.238001, -5.286612, -6.119817, 0.339379, 5.888375, -2.705546, -3.789344, 2.375430, 3.910210, -3.564741, 2.976503, 1.181920, -4.045178, 2.322616, 3.701419, 5.809314, 4.762037, 4.218190, -2.634000, 7.359211, 3.199809, 0.433280, -4.461869, 4.829636, -2.617466, -0.253128, -2.061197, 0.720782, 3.579184, 7.735759, -0.085115, -9.521240, 4.270761, 1.051151, -2.254254, 4.003664, -5.511807, -4.849020, -0.024963, -4.589090, -0.479216, 1.063627, 5.243871, 1.610727, 5.410498, 2.759169, 1.699760, 1.769351, -0.926055, -5.706288, -2.869562, 0.324755, 0.162224, -0.036747, -0.599387, 6.699827, 5.586567, -2.604620, 3.132823, -1.935177, 1.675359, -0.849052, 1.504656, 1.309443, 4.039851, 1.260914, -0.572112, -2.603785, 0.819509, 0.044418, 0.977641, -0.276655, 0.001733, -2.838774, 6.379413, -8.539611, -5.025818, 3.382762, -4.050978, -3.848169, -0.160513, -3.040981, 4.147115, 1.921999, 0.517118, -0.379783, -1.113611, -0.519426, -5.070415, 3.399350, -2.266479, -1.011812, 7.110214, 0.668227, 1.047322, 4.506050, 2.719533, 1.924665, 2.321382, 0.830635, 6.062304, 1.063204, -0.916343, 1.234224, 3.562131, -4.437900, -6.819008, -7.978900, 2.384413, 1.588225, -3.830861, -0.111517, 6.977466, -1.371589, 4.084367, 2.448900, 5.863358, -3.097861, -5.413271, 4.642662, -1.094156, -1.340076, -0.159233, 2.569523, 0.927021, -0.889272, -1.676083, -1.067212, 1.326139, 5.071946, 5.758622, 4.551999, 3.346840, -6.416158, 5.248587, 0.974993, -4.547678, -2.343253, 0.923081, -0.823665, -2.823153, 2.116376, 0.000125, -0.545516, 7.003466, 0.407590, 1.891820, 1.841134, 2.885477, -2.568388, 3.416747, -3.895938, -1.098560, -4.670901, 7.180565, 1.383140, 0.144079, 0.250928, -3.730693, 2.393953, 1.434225, -4.413769, -0.597606, -2.124769, -3.904779, -0.204972, 0.595127, -0.302229, -2.681247, -0.453304, -0.124337, 1.118614, -1.132095, -0.010216, 6.624914, 0.619006, -4.529122, -1.053771, -0.741000, -0.302455, 4.345139, -1.644648, -5.829570, 2.616752, 4.953855, -4.260857, -5.226663, -6.016680, -3.423861, -0.427386, -0.650108, 1.438002, 7.219870, 15.597327, 1.648259, -4.915005, -2.176121, 1.252684, -8.067482, 1.004887, 2.234263, 5.244569, 1.403449, 0.251684, -1.603438, -4.736930, 2.207020, 0.487028, 1.785503, -9.469984, -1.735166, -3.076313, -0.084734, 6.094162, -2.243753, 3.188770, 0.752161, -2.115803, -3.962299, 5.416203, -0.519325, 2.841952, 1.403736, -5.291543, -1.998298, 1.161631, -0.728690, 3.158396, -8.010592, -1.127579, 1.470116, -4.080388, -1.537599, 0.555249, 0.032825, -4.652673, 4.491270, -0.002560, 0.100157, -1.179998, -1.025526, 0.051904, 11.325600, -1.089780, 1.430256, -1.505951, 2.849197, 1.997859, 1.951916, 0.050783, 4.551379, 3.448592, -0.477766, -1.388904, -3.126778, 2.843332, 3.972567, -1.330226, 7.247967, 2.097585, 4.222962, 0.915490, -0.481500, 1.488296, -0.242089, -4.644547, -0.521147, -4.184572, -4.921031, -0.104900, 1.947062, 5.209659, 4.575287, 2.997641, -0.902476, -7.953763, -2.229190, -0.592449, -1.466445, -6.111979, 0.791697, 2.953671, 0.242007, -2.118891, 1.598533, -2.975007, -8.495104, -0.409968, 1.095940, 5.209512, 1.841356, 4.131776, 2.690130, -2.381924, -2.828803, 0.425064, 2.708450, -2.199247, 0.442123, 0.961749, 4.514327, -0.857212, 0.078217, -7.150231, -4.997750, 0.265880, 0.126052, 3.540422, 3.314131, -2.644301, 0.383521, 0.471140, -1.247263, -0.154060, 0.464139, -0.329758, 0.577399, 3.095126, -0.921622, -0.002884, 6.549686, -8.521924, -6.662467, 4.260942, -3.476185, -1.468084, -6.702409, -5.054902, -1.544958, -0.488450, -0.359168, -3.452594, -3.125045, 0.018224, 1.207793, 1.758054, 11.474294, -8.620993, 1.953140, -0.891067, 0.855473, 0.894033, -1.386394, -1.787122, 4.055862, 1.841960, -0.046877, 1.770575, 0.254900, -0.204991, -6.284609, -0.210361, 0.225045, 5.821990, -5.078853, 5.172901, -1.057866, 5.414890, -0.296372, -0.323642, -1.942555, -1.782322, -0.142216, 2.361175, 5.863658, 1.255091, 0.113655, -1.761485, 2.057706, -4.621158, -1.826589, 3.453382, -0.796955, 4.298389, 1.309121, 0.652609, 0.609930, 0.786433, -0.605716, 0.437038, -0.250982, -0.070207, -5.990405, -6.226016, -3.236530, -10.948854, 0.253946, 0.778204, -10.692794, 0.139799, -6.137545, 4.335771, -1.723912, 3.998691, 3.596651, -5.966559, -0.767783, -5.661316, -1.714273, -1.192031, 0.434605, 2.608742, 4.364273, -1.155325, -1.330185, 3.341307, 0.134348, 4.718712, -2.172134, 1.181792, -0.085315, 4.335872, -6.531881, 5.408314, 0.733250, -1.875060, -9.689086, 3.015121, -3.059316, 1.736107, 3.458842, 1.196520, -6.385832, -8.142164, 2.427735, 3.408198, -0.353162, -5.189793, 11.118150, 0.474814, -1.520812, -1.571485, -2.071823, -0.662163, 8.865157, 3.969018, 2.120155, -3.203269, 0.154398, -0.445203, -1.775447, 2.848330, -9.318402, -3.611183, 0.622507, -4.779537, 0.814549, -0.207286, -0.250177, -1.948637, 3.053443, -6.163026, 0.669252, 5.747634, 3.574313, -7.725072, 3.276859, 12.967279, 1.460282, 0.103523, -1.440002, 3.095255, 5.263038, -0.277557, -4.912306, 4.413857, 0.448069, 6.697745, 0.037776, -1.275408, 1.980901, -4.507404, 1.571898, 0.028515, 3.551959, -3.258892, 0.196952, 0.865760, 1.771985, -0.560924, 0.149171, -0.590992, 0.250892, -12.705998, 3.472564, 1.871170, 3.777988, -2.231085, -0.200798, 2.148047, 4.741966, 1.799010, 2.405207, -5.309678, -0.116218, -1.683699, 1.348477, 1.605752, 0.688772, 3.241073, -0.059511, -0.777637, -6.825166, -7.449450, 0.000307, -4.844162, 4.551309, 0.244788, -1.791866, -5.255681, -4.330151, -0.454040, 1.124615, 1.945446, 3.886403, 1.820207, 0.098987, -3.946821, -1.203425, -1.235008, 5.151693, -0.114844, 0.723914, 2.628422, 0.004160, -1.184926, 0.814486, 0.016687, 5.080126, -0.401210, -8.082789, 3.965074, -3.200977, -0.490179, -5.809491, 1.428539, 1.924792, 4.635196, 4.836840, -0.097732, -0.966319, -3.553488, 7.078143, 3.361048, -0.808940, -2.389795, -3.335257, -0.024080, -0.788780, 3.495562, -5.971897, -2.452428, -0.514659, 4.649741, 0.305733, 2.462263, -1.121514, -6.612349, 3.638024, 2.552860, -0.314396, 5.796158, -4.216064, 2.694710, -2.803408, 2.020118, -0.616314, 0.705488, -2.978780, -1.365438, -4.841853, -0.005801, 2.348718, 4.094787, -3.933133, -0.282258, -0.190431, -2.611558, -0.889462, -3.617303, -3.399031, -2.807600, 7.340544, -7.016870, 0.865675, 4.735157, 6.240104, -0.805582, 3.563448, 0.245296, -1.364166, 0.065088, 1.218986, 1.581612, -10.317154, 2.828020, 0.631281, 5.292290, -1.012066, 3.295135, -2.118221, -4.065128, -2.025720, -0.542885, 4.864784, 0.972539, 2.409106, -3.026566, 0.052834, -0.635978, -1.371673, 4.564446, 0.266019, 2.473337, -0.515108, -3.199785, 1.433381, -5.369630, 5.401772, -1.989402, -6.665758, 1.262215, 2.464196, 0.130658, 0.604949, -2.326622, 1.560050, -7.688268, -0.869894, 1.476173, -6.076809, -5.910969, -0.345719, -0.468494, -2.862985, 1.228409, -4.402172, 4.530817, 2.801656, 3.120594, 1.146520, 0.227465, -8.773477, -5.237466, -2.359005, -1.473632, -5.939785, -2.033813, -0.396641, -0.916695, 3.696210, 5.658598, 1.240551, -5.646675, 0.040788, -3.990147, 0.487286, 3.847026, -7.868302, 6.422363, -3.844559, 1.576421, -0.699903, -3.094056, -2.831705, -3.381935, 4.725066, -1.884259, 0.691949, -5.523872, -1.687171, 3.662633, -4.199095, 9.477685, 2.940517, -1.661136, 0.400198, 0.940718, -2.082354, 0.595138, -0.009062, 1.398316, 3.604544, -0.527214, 1.110491, 1.020108, 1.789007, -0.024640, 0.086730, -2.491491, -0.620270, -0.389086, 1.234780, 3.212897, 4.291111, -7.174760, 1.364712, -1.673538, 4.086433, 4.412915, -0.472308, -0.473228, -4.162614, -0.027960, 3.082211, 2.567189, -2.216553, 1.678050, -0.811290, 7.225561, -7.684853, -4.117867, 0.079860, 12.188529, -5.439374, -13.353810, 5.090911, -2.569392, -0.743952, -2.366469, 3.063961, -1.482493, -1.334927, -1.243435, 0.264588, -1.085266, 1.297557, 0.001704, -4.485649, -9.474123, 1.733926, -4.903178, 5.447418, -6.455180, 0.103101, -2.083845, -0.602263, 3.238214, -2.716414, -4.906877, 6.643152, 2.998199, -7.056654, -1.015258, 11.574869, 6.554796, 3.362308, -0.003733, 3.453950, 4.718795, -6.079797, -1.753457, 5.108498, 4.184959, -8.387860, 0.146388, -1.377552, -3.198732, 2.336383, 2.003642, -5.602957, 1.347418, -2.164727, 0.054452, 3.491766, 5.223670, 4.382021, 1.120073, -1.240652, -3.448155, 1.442902, -2.941849, -5.820024, -2.045847, 5.518284, 5.681960, -4.484001, 2.556159, -1.104272, -1.046558, -6.567324, 0.517567, 2.940260, 6.427362, -11.458510, -0.866187, -2.997734, -2.455468, -9.320253, -3.303707, 4.060272, -0.491199, -0.002366, -3.162255, 0.413209, -2.830812, -4.762064, -0.691013, -7.443161, -0.288066, 1.381157, 1.668391, -4.430522, 3.060613, 2.616444, 1.778201, -3.044982, 0.419092, -0.147936, -2.457551, -0.010444, 5.700674, 1.449705, -0.612144, 5.032084, -1.227064, 0.391349, 0.632198, -1.449035, -1.846903, -2.415545, -0.925181, 0.355926, -0.004332, 1.707547, -2.555514, 3.100350, 0.435743, 3.611297, -9.147227, -0.585761, 0.000278, -5.016597, -2.456300, -4.970089, 5.335125, 4.627530, -3.874933, 7.308241, -3.422642, 1.344155, 2.944600, 1.775678, 3.276104, 4.470214, 1.143845, -3.917175, -3.946400, -7.490934, -5.150952, -7.968368, -2.467618, -3.433546, -5.056820, -4.297731, 4.742975, -1.664365, 0.814348, -0.859673, 2.978123, 0.796562, 2.054491, 5.765913, -0.559808, -1.051795, -1.242198, 0.000221, -7.089042, 0.955357, 0.492572, -5.722262, -1.797783, -2.726589, -7.658901, -4.940908, 0.260004, -6.280422, -18.631365, -3.907656, -1.436970, 10.147831, -0.435030, 0.003930, -2.694990, 2.173045, -1.424667, -4.551793, 1.137839, 6.133080, -0.888418, 0.230520, -0.462355, -5.107423, -0.172269, 3.012013, -1.792457, -7.396113, -10.149408, -3.544129, 1.809829, -1.602990, -2.458670, -0.162557, -1.609908, -1.097731, 2.478265, 7.415278, -3.981320, -2.315916, 0.037548, -1.522557, -4.473760, 1.500247, 4.571434, 0.270541, -0.609279, -1.764493, -1.349163, -0.258172, -3.637425, 0.664170, 2.329094, -2.407710, -1.277284, 0.485533, -5.162691, 1.833838, -2.899857, -3.730976, -3.460948, -0.315993, -0.293317, 1.998160, -2.033452, 0.487131, 0.032926, 0.747196, 4.834600, -2.490738, -2.136173, 0.755432, -0.387367, 4.713502, 5.727706, -6.008123, -1.055226, 6.219704, 0.762673, -1.237593, -3.119219, -1.008921, 5.554079, 2.500906, 9.379539, -2.600659, -3.781100, -1.074150, 4.647661, 6.463739, -2.109208, 9.602910, -1.425759, 2.519351, -4.868101, -0.350469, -8.104247, -0.249852, -2.087500, 2.515036, -3.762993, 1.595349, 0.240776, -0.269171, 2.302707, -2.399481, 2.446138, 7.067205, -0.013742, -0.813670, 4.315806, 0.030355, 5.580543, -8.178206, 2.999027, 0.817311, 2.595429, -0.875011, -0.639973, -0.032789, -0.118570, -5.313186, -0.003777, -4.859177, 0.960610, -7.806963, -1.103608, 3.409426, 9.830523, 3.076019, 0.024818, -2.503727, -4.450749, 0.053584, 0.850095, 5.326097, 3.058037, 8.592230, 2.096411, -0.089672, 0.955738, 0.042149, -4.880162, 3.721464, 4.908263, -1.920460, -4.517033, 0.372884, -3.512476, 0.056348, 3.107348, 2.402527, 0.064225, 1.185405, 1.341910, -4.253679, 2.861337, -4.010659, 0.894487, -7.247368, -0.000893, 6.156673, 5.788464, -5.955809, 4.305521, 0.638483, -0.074308, -1.715720, 2.665249, 6.174049, 4.274242, -4.937733, -0.412310, -0.108476, 3.413505, 7.387181, -4.008705, 4.089046, -1.684506, 2.650360, 3.552774, 6.270626, 4.812716, 3.726841, 0.014254, -10.351541, -3.054636, -1.097221, 0.683964, -7.121925, -2.973965, 1.295165, 5.215690, -2.879241, 1.928433, -1.083969, 1.457107, 1.463645, 0.582464, 5.576221, 2.434537, 8.944540, -1.615804, 0.004095, -5.838607, 0.439014, -0.531610, -1.225080, -7.056833, 8.580327, 0.184839, 2.447998, 0.026272, 2.072340, 0.294159, -2.453215, -1.829973, 3.516114, 1.376701, -0.160926, -0.171540, -1.492921, 0.175216, -0.456417, 0.901945, 0.264705, 7.141057, 0.385551, -1.716259, -0.217394, 4.732449, 12.858533, -4.797349, 3.022484, -6.847541, 2.264313, 8.327429, 0.708435, 0.298350, 1.339623, 6.857325, 6.090995, -0.711907, -5.317862, -9.006277, 0.719134, 1.778589, -0.830922, 4.213965, 2.385133, 0.574354, 1.494178, 5.651868, 5.762273, -3.656021, 0.317673, 6.350677, 3.327611, 0.488446, -4.551743, 1.621502, 8.023821, 3.609228, 4.257627, -5.616302, -3.366006, 2.346124, -5.134101, -0.002437, 5.090351, 4.677687, 7.520842, 1.236903, 1.379966, 4.049139, 4.854925, 0.946248, -6.242638, 0.882017, 2.039562, 2.815969, -0.493101, 0.604626, 6.695972, -1.152543, -0.708954, 1.517877, -6.164851, -0.770286, -0.880754, -2.857412, -4.605688, -0.752854, 10.542234, -0.767521, 6.311722, -0.648967, 2.822311, 2.424105, -1.383784, 0.655183, -4.353927, 0.322624, -2.503654, -6.697694, -2.323251, 3.157937, 6.174052, -3.991862, 2.337104, 1.841762, -0.021823, -0.233497, 0.735497, -0.460269, 2.901000, -1.948082, 3.362817, -1.078811, -5.830395, -1.126911, -0.696781, 0.659697, -5.774518, 3.026677, -0.624733, -1.963984, 2.982625, 5.318667, -0.261951, -1.269010, -6.184422, 2.771906, 1.410886, -5.694937, -0.238314, -5.319174, 0.858094, -0.557519, 2.270931, -4.157010, 0.163534, -1.729811, -0.687096, -0.909277, 2.113277, 1.774920, 0.259986, 4.051906, 4.358549, -3.823084, 2.866276, 0.079413, -3.282643, 3.602583, -4.034286, -0.170759, -5.191716, -0.303129, 2.263378, 1.105465, -1.228492, 4.122843, -3.425029, -1.110700, 2.859209, -1.517243, -0.133670, -1.787520, -1.117020, -0.004118, -1.749458, -5.184211, -0.632913, 7.116434, -0.820585, -0.538100, -3.736050, 2.306218, -0.580903, 3.041562, -4.793915, 0.116510, -3.204783, 2.421368, 0.621671, -2.298523, 5.574130, 5.156301, -3.895345, -3.190936, 0.003904, -0.210380, 0.075178, -1.415915, 0.314303, 3.545636, 10.452524, 0.308431, 5.393156, 4.611145, -4.795026, 0.551152, -1.332147, -1.533049, 2.724701, 0.112138, 1.887591, -2.578153, 3.055818, -1.204668, -6.207092, 8.238597, 3.454141, -0.298537, -0.257892, 2.499728, -5.361709, 2.103728, -5.295871, 1.903355, 0.821097, -0.805249, 6.269466, 3.446429, -5.973318, -0.456753, 3.775240, 1.753724, 1.544705, -0.208631, -0.777346, 6.902713, 7.015963, 0.256568, 4.413515, 1.707932, 1.211990, 1.453060, -7.813718, 3.825574, 2.398544, -3.869414, -8.830361, -0.757796, 2.810469, 2.159734, 3.887664, 2.531574, -2.587343, 1.617573, 0.076285, 0.051549, -2.432191, -1.467406, 1.799585, -3.214180, -0.500947, -3.353161, 1.975000, 1.278472, -7.418863, 0.423090, 3.235873, 0.190312, 1.524740, -2.108716, -5.064704, -4.360610, 5.022361, 1.196381, -5.321489, -3.849074, -6.288360, 7.042095, -5.922540, 0.124113, 0.051638, -4.776923, -2.694787, 1.072526, 7.262791, 1.337453, 10.854486, -3.223768, -0.208705, 0.061224, -5.771092, -0.804541, -0.247919, 0.028130, -2.310637, 2.403315, 5.275797, 0.425248, -5.614018, -5.150809, -2.569344, 1.329278, 0.219058, -1.885726, 2.963136, 0.048093, -6.058012, 4.562561, -4.271072, 2.411485, 0.705157, -1.955973, 0.538758, 7.200862, 0.053691, -0.210938, 1.173432, 1.767322, 3.446575, -0.848888, 6.439497, -1.957364, 8.496014, 2.615993, 4.978897, -3.701126, 0.170450, -7.880435, -8.990486, 0.072872, 3.506958, -3.049961, 2.674550, -6.052963, -0.016590, -2.574883, -4.770270, 0.641006, 3.878675, -0.214942, -3.022496, -6.509954, 0.341253, -4.474951, 4.937757, 5.405204, -0.436071, -0.320585, 5.818399, 6.053077, 0.055024, 0.562246, 0.725039, 6.056796, -1.266948, 3.974546, -2.844677, 1.642181, -9.835558, -2.177721, 0.534739, 3.668169, 4.143951, 3.907747, 3.342772, -1.829029, -6.998097, -2.389975, 4.655732, 1.665773, 7.681024, 2.680847, 2.060605, 0.736731, -0.249828, 2.125784, 4.666676, -5.821370, -1.151837, -1.473667, -0.071509, -2.102807, -0.567075, 5.630590, -4.928468, -3.802998, 7.103188, 2.726189, -4.715731, -0.679007, 4.316378, 5.122252, 7.441735, -1.690517, -5.982613, -0.995818, 1.863775, 1.266526, -0.130073, 2.868453, -5.159033, 0.765051, -5.445976, 0.533186, -1.652635, -2.958902, -0.073641, 2.516429, -0.351381, 3.268773, -3.999427, -1.914936, 1.746080, 1.726612, 2.887558, -7.495602, -0.076782, -5.088868, 0.572199, 2.840711, 0.165677, 0.951421, -4.288205, -11.502398, -1.787641, -0.041416, 1.713929, 5.168766, -0.560446, -1.781411, -0.374694, -1.100172, 1.671594, -0.771530, 0.498905, -1.402435, 2.443130, 0.247629, 0.622886, -1.939705, -1.199916, -7.890548, 1.651277, 1.242517, 0.214661, 1.535269, -0.349612, -5.824280, 2.717916, -1.162352, -2.670184, 2.235982, 3.795414, 6.073619, 4.371194, -2.397419, 3.506198, 1.103271, 3.745935, -7.047450, 0.532427, -1.319007, 2.419747, 2.983305, -1.508792, -0.120573, -0.004616, -1.492574, -2.901405, -4.248282, -6.944168, 2.497512, 4.479490, -2.438242, 0.661082, -0.368722, -6.450502, 0.273977, 2.558973, 1.739906, 4.925027, -1.353585, 2.908525, 2.438493, -4.168282, -4.286761, -2.646605, 5.640347, -3.663446, 0.178413, 1.071040, 4.274489, -0.975368, -0.056342, 0.074378, 3.925021, -5.058712, -2.649401, 6.320730, 0.303362, -1.669372, 0.736516, -5.612288, 0.004627, -6.118943, -4.376561, -5.431967, -0.362653], - "starcoder:latest": [3.403105, -0.885765, -0.083649, -0.515395, -1.043502, -1.477790, -0.695208, -3.574679, 0.565663, 1.371975, -1.056780, 1.216602, 1.283216, -1.958889, -0.857253, -1.728689, 0.492718, 1.702949, 1.719984, 0.119930, 0.494645, -2.054816, -1.626791, 0.552477, 0.914593, -0.485891, -0.929655, 0.832316, -2.315520, 0.547917, -0.765224, 0.153330, -0.042735, 0.145564, 1.248368, -1.530666, -1.399585, 0.352929, -2.051843, 1.968481, 1.520983, 1.547979, 1.193255, -0.237402, -1.942155, -2.296346, 2.379162, -1.602307, 3.292728, 0.407927, -0.696908, 1.446436, 2.481944, -1.326123, 0.340346, 1.648242, 0.607029, 1.106172, -0.079276, 1.179846, 1.420314, -1.833898, -0.382987, 0.208215, -0.539100, -0.346188, -0.015549, -2.717581, -1.565658, 0.294800, -0.982709, 0.755109, 3.554029, 0.325654, -1.445190, 1.074547, 2.289493, -2.029409, 0.729513, 1.288408, -0.126420, 0.425873, -0.166246, 0.503419, 1.323817, -3.467199, -2.646384, -2.708485, -1.055008, -2.570379, 2.377908, 1.696884, -4.983853, -0.891830, 1.252788, 0.375939, 0.323120, -1.784853, -0.381588, -0.275369, -0.837526, 0.328304, 1.629018, -0.889208, -0.358851, -0.869274, 0.932910, -1.347002, 0.216807, -1.067873, -0.689641, -0.425752, 0.580481, 2.593486, 1.537688, 0.365340, 0.532069, 0.626001, -1.530973, -2.397178, 1.007982, 1.205497, -0.429468, -0.331908, -0.456599, -0.819368, -1.969552, 3.051803, -0.362822, 1.180519, -2.426223, -1.355583, 1.801512, -3.590297, -1.407512, 0.225204, 0.694478, 1.715964, 0.953788, -0.149717, -1.663969, 2.499240, -1.394514, 1.897290, 1.178160, 0.097654, -2.142154, -0.422565, -5.164824, -1.461911, 1.930484, 0.248862, 0.326992, -18.250940, -0.654411, 0.761512, -1.188235, 0.099793, -9.864193, 7.373234, -1.453363, -0.995029, -0.032538, 0.459874, 0.949269, 3.383448, -1.526219, 0.481047, -0.425621, 1.067186, 1.081501, -2.134348, 1.094220, -0.120503, -2.301070, 1.271164, -2.035030, 1.213219, 0.657726, -1.705736, 3.684097, -2.503601, 0.632831, -1.559634, -0.002673, -2.948208, -2.696636, 0.449597, -0.909573, -0.759229, 0.260589, 1.520208, -0.851524, 0.087855, -1.957812, 1.004672, 0.248923, 3.312503, 1.961505, 0.906963, 0.595246, 1.654317, -0.600351, -4.145365, 2.747739, 1.764888, 0.480274, -0.265173, -0.882353, -1.578600, -0.573896, 2.892225, 0.688005, 0.580525, -1.248558, 1.149763, -2.220257, -1.262100, -1.361701, 0.243109, 2.385012, -1.720015, 1.022053, -0.682021, 0.414539, -1.402510, 1.598152, 3.237121, 1.387014, -2.603572, 0.843757, 0.307507, 0.537373, 2.153689, -0.138717, 2.065826, 2.999563, 0.701097, 2.253418, -0.570769, 0.312188, 1.284726, -0.284251, -0.051379, -2.217319, 1.398044, 1.745042, 0.186080, -0.839044, -0.303346, 0.606337, -3.448408, 1.731226, 0.870225, 0.542273, -2.155460, 0.334702, -0.275068, 1.966276, -0.384633, 1.741714, 0.608612, 0.487226, 0.785482, -1.650026, -0.924841, -0.638561, -1.453186, -0.953706, 0.498500, -0.801929, -2.049580, -0.374899, -0.400653, -3.826706, 2.235883, 1.789586, -2.078139, -0.928475, 1.301903, -1.350180, -2.056282, -0.748132, 2.414192, -3.171230, -0.269716, -0.264180, 1.101787, 0.376517, -0.858027, -0.751998, -0.988863, -1.460158, 0.065839, 2.376490, 0.568797, -1.039343, -4.346259, -1.290150, 0.131418, 0.069526, -0.831571, -0.826303, -1.744774, -2.419927, -2.815735, -0.413141, -0.384882, -0.835495, -1.659277, 0.653935, 0.150067, 0.346518, 0.612567, -1.113423, 0.135259, -0.163968, -1.602211, -0.661846, 0.099561, 2.117822, -1.855378, -3.213007, -0.001265, 0.357234, -1.260347, -1.437309, -1.076286, -0.276653, -1.644431, -0.385764, -0.074708, 1.841366, 0.864748, 0.391535, -1.602082, 1.233709, -0.303617, -1.689856, 1.423543, 1.232455, -0.144236, -1.455944, -2.345803, -1.453905, 0.357781, 0.418199, -0.703023, -0.868598, 0.796561, 2.178256, -0.090044, -0.434035, 0.021456, -0.020562, 0.059337, -1.527410, -0.010944, -1.772391, -3.496375, -0.837363, -2.433579, 0.619973, 0.045446, 0.652892, 2.023233, -2.406516, 1.417269, -0.034923, -0.076643, -1.172168, -2.982738, 1.452945, 1.058633, 1.382744, 0.848724, 1.418435, 0.443789, -2.663935, 1.315363, -1.585118, 2.505541, 0.981825, -1.224547, 2.369899, -0.968944, 0.988074, 1.748182, -1.508594, -1.675557, 0.455838, -1.370594, -1.239768, 0.199479, 1.319536, 1.112748, -0.125195, -0.939147, 0.706842, 1.091995, -0.170540, 0.543556, 0.774294, -0.152735, 2.050831, -0.514986, 1.178088, -0.480602, 2.236464, 0.233113, -0.234995, -0.099754, -0.641682, 0.720272, -1.274108, -0.343999, 0.778661, -0.077611, 1.104150, -0.271160, 2.553004, 0.887008, -1.080819, 0.928667, 0.713697, 0.786556, -0.861365, -2.288996, -0.585177, -1.993488, -0.426313, -2.300396, -1.196838, -0.950078, 0.357648, -2.617935, 0.566233, 0.135590, 3.430223, -0.185004, -0.924127, -3.156829, -0.663617, -0.921790, 1.351865, 1.895824, -1.705446, -0.587528, -1.112015, 1.855345, -2.307836, -1.210345, 0.671711, -1.614769, 0.037545, 0.351032, 0.898224, 0.659482, 0.740753, 2.317791, -0.738380, -0.465833, -0.489376, -0.555237, -0.076919, 1.755440, 0.075913, 0.426051, -0.117439, -0.692971, 0.205078, -0.242168, 0.529022, 0.576028, -1.798912, 0.482144, 1.288307, 0.295549, -0.854719, 0.781398, 0.616750, 0.973558, -0.965475, -0.746755, -0.661815, 0.252199, -1.844748, -0.616564, -2.413130, 3.795521, -2.212642, 0.363001, 1.099099, 0.432490, 1.544763, 0.077443, -0.128217, -0.267324, -4.240766, 0.595412, -0.285840, 2.883118, 0.083648, -0.773143, 0.828623, -2.842643, 0.941287, 0.980759, 3.152416, 1.180029, 1.177530, 0.005636, -0.574758, -0.544597, 0.332312, 0.409605, 4.502332, -0.585149, 0.432413, 2.717876, 3.941690, -0.025800, 0.670812, -0.115604, 2.169778, 1.022263, -0.531681, 1.383107, 0.884408, 1.822171, -0.609354, 0.606749, 0.647798, -1.053839, -2.381397, 3.332797, -1.086664, -1.448608, -1.387584, -3.250617, 1.918070, -0.546604, 0.788303, 0.922701, 1.070095, 1.329838, 1.643232, 0.081183, -1.996287, -0.549173, -2.555878, -0.277837, -0.651010, 0.242560, 0.613469, 0.061182, 0.985218, 0.650243, 0.457274, 0.106429, -0.707542, 0.648733, -1.470251, -0.196635, -0.896454, -0.657666, -0.848689, 0.015037, 0.621408, 1.830077, -0.043118, -0.799176, -0.866995, 1.279791, 2.239098, 0.482312, 0.855783, -0.030351, 2.994683, -1.111507, -0.678747, 1.296768, -1.387152, 0.506191, -3.240442, -0.491302, 1.143967, 0.451711, -6.848300, 2.822928, 1.094856, -0.524747, -1.055822, 0.692936, 0.570139, -0.132942, 1.337316, -0.069503, -0.370510, -2.173159, -0.146296, -1.528087, 0.801579, -2.051918, -1.570595, 1.266944, -0.711103, 0.507582, -1.092141, 0.443071, -0.626451, -2.428448, 0.029222, 0.103925, -2.523681, 0.274318, -0.338442, 2.418235, -0.047461, 0.384895, -0.688121, 4.450501, 1.491218, 0.054557, -1.449451, -1.366343, 3.092702, 2.741473, -2.091660, 0.849361, 0.794003, -0.273619, -0.436321, -0.395436, -1.547231, -0.204541, -0.224338, -0.125708, 3.619517, 0.512341, 0.580925, 1.772129, -0.749979, -0.245782, 0.117082, 0.798920, 1.260713, 2.256417, 2.782530, -1.792616, 0.125660, 0.319170, 2.403524, 0.868421, 2.345238, 1.822214, 0.305834, 3.414123, -0.678114, -1.243389, -0.064596, -1.110805, -2.301048, 0.114277, 0.822538, -3.369426, 1.348845, -1.608047, 1.304970, 1.106858, 0.178412, -1.399775, -0.868408, -2.612700, -0.089507, -2.743819, 3.032486, 0.680813, -1.610402, 0.519157, -2.944211, -1.901170, 0.255229, -0.908480, -1.014183, 0.829586, 1.283460, -0.866477, 2.368938, -0.183073, -0.442842, 1.119585, -0.065673, -1.281052, -1.533420, 1.392235, 0.678078, -1.309221, -0.098553, -0.052573, 0.773775, 0.577807, 0.344661, -0.071810, 0.470932, -1.389364, 0.231375, 2.169107, -0.111148, -0.471375, 1.468163, 0.178234, 1.000863, -2.930396, 1.217327, 0.414857, 2.301280, 1.279193, 1.502020, 0.559959, -1.898672, 0.438860, -0.172736, 2.016475, 1.250178, 2.439908, 2.356597, 2.346795, -0.119561, -1.736535, -0.866320, -2.269344, -0.380247, 1.721837, 1.208060, -0.463667, -0.524570, 2.156525, 1.016336, 0.508051, 3.164112, 0.912623, -0.786937, 0.548691, -2.175578, -0.852418, 0.219264, -2.745629, 0.650010, 2.302742, -0.086833, 3.083979, -3.291409, -1.325565, -1.600101, 1.316101, 1.175194, 1.304705, -0.124973, 1.714000, 1.252908, -0.339423, 0.095515, 0.552147, 1.563889, 1.536479, -1.135800, -0.686791, 2.245939, -2.134178, 1.441871, 0.479644, -1.088613, -1.457490, 0.522330, -1.838494, 1.388874, -1.309874, 1.488708, 0.234144, 0.326873, 1.123322, -1.523686, -1.762303, 0.609608, 2.648861, -0.749516, 1.096308, -0.262848, 0.325710, -1.108091, -0.256752, 1.585081, -0.217921, -2.225226, -0.133899, -0.643038, -2.835729, -2.558570, -0.478151, -2.211241, 0.775718, -0.377337, -0.560052, 0.675511, -2.358796, 3.555706, -1.314640, 2.506774, -2.862707, -0.822494, 0.071026, -1.813606, -0.130201, -0.744126, -0.794054, -1.811334, 2.161353, 0.782546, -2.065440, -1.447563, 1.012326, -0.392525, 0.527692, -0.290882, -0.542280, 0.107965, 0.157866, -1.004487, 1.608502, -0.145668, -1.833334, -0.597097, 1.601349, 0.678382, -0.471299, -0.315880, 1.274011, 0.329983, -1.887083, 0.858173, -1.486972, 0.558593, -0.882209, -2.203498, 0.314512, 1.715837, -0.452137, -0.321170, -1.059508, 1.295388, 2.400156, 2.810319, 0.236921, -0.275691, -1.082528, 0.285290, 2.199128, 1.461259, 0.158661, -0.589804, -0.392554, 0.874221, -1.919368, -0.224965, 0.284844, -0.329165, 2.215252, 0.987173, 0.243996, 0.424165, -2.677810, -0.070846, -2.430132, 0.265424, -0.570085, -3.599534, -1.846077, -1.021166, 2.079120, 14.761611, -0.101933, 2.491434, 1.321804, -1.042176, -1.507433, -0.556304, 0.703751, 0.806636, 1.063058, 0.167255, -2.111855, -2.038255, 0.465825, -0.841183, -0.613164, -1.908800, 1.911980, 2.629885, 0.182362, -0.442470, 0.317966, -0.657572, -0.091976, 2.060539, -0.683898, 0.389377, 1.539390, -0.091685, -0.635328, 2.292643, 0.427552, 1.229509, -1.775795, -0.231926, 1.510789, -1.516075, 0.870915, 0.042147, -1.703443, 0.526075, -0.166702, -0.084150, 0.969713, -1.242767, 1.524845, 2.368418, 0.717042, -2.309449, -0.519731, -2.674847, 2.590868, 0.267367, 4.017840, -3.121681, 1.361615, -0.073771, 3.837650, -0.774441, 2.262183, 1.314109, -2.943380, 1.136152, -2.458218, 1.462981, 0.149853, -0.912561, -0.318832, 2.494370, 0.001506, -1.153213, 0.118310, -0.153211, -1.532233, -0.316073, 0.838619, 1.777950, -0.811849, 1.098278, 0.180579, 0.382676, -0.647900, -0.095141, -0.754732, -1.420778, -0.598671, -1.636378, -0.612884, -0.054185, -0.664659, 1.915045, -1.596123, 0.572644, 0.998049, -1.145053, 0.844229, 1.177464, 0.204193, 1.460010, -1.551229, 2.335606, -1.694714, -2.199979, 1.438900, 2.572799, 2.600366, -1.752213, -0.631761, 2.174498, -0.039297, 1.524690, 1.161811, 1.917906, -0.093180, 0.791555, 1.681564, 1.816557, 0.669684, -1.414118, -1.395584, -0.204529, 1.551600, -0.932364, 1.058350, 1.755896, 1.802606, 0.304214, -1.856664, 1.476071, 1.832048, 1.047213, 0.353127, 1.149176, 0.195622, 0.887775, -0.498183, 0.464600, 2.910213, -2.055765, 3.871612, -1.663870, 0.413334, 0.724341, -1.063226, -1.452561, 2.880621, 2.848557, -0.057286, 1.842694, -0.870889, -0.031014, 0.577814, 0.539084, 0.730862, -0.864076, -0.618822, -0.772608, 0.490613, 2.212158, 0.516135, -1.157739, -2.634500, 0.571563, -1.573212, -0.711765, 1.180959, -0.373291, 2.194703, -0.952596, -1.799709, 0.366626, 0.729010, 1.509726, -1.471722, 0.689311, -1.890980, 0.109291, -0.293854, -7.102549, 0.864711, -1.925957, -2.398473, 0.070788, 0.772047, -0.936493, 0.355516, -1.150345, 2.211665, -1.462134, 0.899524, -0.547171, -1.410111, 1.703938, -0.542024, -0.010607, 0.373755, 0.028845, 1.326445, 0.019488, -1.771527, 0.524494, 0.017291, -0.286668, 8.919433, 1.473101, -0.561951, -1.085727, 0.053229, 2.229653, -0.985613, -0.056620, -0.427974, -0.935476, 0.379258, 1.237837, 1.879896, -1.904384, -0.836707, 1.176770, -1.594859, 0.507863, 1.057378, 1.047227, -1.015435, -2.173443, 2.169472, -1.200064, -0.429828, -0.267489, -0.776403, -2.399449, -3.496821, 2.026711, 0.852635, 0.081830, 0.412480, 0.735022, -1.004585, 85.523735, 2.078824, 1.405537, 1.420258, 0.149226, 0.767906, -1.045229, 0.557545, -2.155961, 1.614029, -0.409987, -1.186746, 0.695672, -0.450095, 0.255835, -4.721718, 0.876708, -3.239688, -1.663275, 0.659779, 4.212816, 0.844798, 2.285716, 0.078218, -0.604332, -2.378236, -1.490959, -2.795218, 0.224045, -4.546728, 2.146162, -2.584908, 1.049261, -1.301235, 2.983293, -3.510124, -2.674554, -4.796475, -1.718512, -2.418987, -0.734958, -1.945737, -1.837463, 1.297716, -1.405850, 0.369966, 1.915294, -2.376806, 2.161540, -2.988676, -0.469228, 2.036156, -1.476177, -0.744910, 1.748057, -0.018671, -1.442792, -6.656451, 0.918635, -0.362746, 0.919281, 0.000438, -0.347663, -2.110237, 1.606745, -4.026446, -0.944152, -0.319697, 3.299418, 2.319917, 0.496700, 0.197903, -0.453018, 2.012677, -0.984651, 1.420823, 0.682351, -1.306300, -1.783154, -0.197681, -71.216934, -0.294691, -2.129059, -0.596002, -3.335691, 0.586273, 0.034065, -1.840573, -0.541438, -1.184142, 1.288468, -1.142040, 1.612682, -1.542768, 0.589435, 0.705813, 1.315846, -3.608182, -1.755418, 2.117489, 0.456578, -4.433335, 2.531418, -2.914086, 0.289848, 0.367142, 0.569207, -1.071584, -0.718807, -1.297903, 2.025395, 0.311929, -0.367405, -0.669306, 2.902781, -2.351904, -3.664730, 0.334796, -0.233591, -0.679808, 0.607821, -0.923462, 0.010394, 1.311700, -0.794279, 1.272044, 1.145559, -0.554230, 0.170776, -0.683578, 0.832438, -0.391338, 1.030268, 0.154898, -1.693181, -0.825256, 1.546282, 0.107223, -0.801853, 0.507212, -1.046948, 1.259310, 2.143708, -0.385058, 2.163804, -0.650710, 0.815172, -0.136191, -0.168338, -0.612016, -2.582033, 2.350318, -1.175564, 1.534975, -1.647843, -2.409241, -2.228449, -1.189075, 8.314133, 3.130002, 3.402851, -0.153991, 0.099502, -1.721480, 0.724244, -0.710175, -1.003277, -2.147532, 0.670640, -0.524477, 0.161175, -0.488788, -0.776367, -0.163723, 1.141242, 0.477827, -0.338653, 3.910418, -1.130356, -0.450035, 1.048413, 0.889426, 0.831565, 0.825409, -2.665827, -1.108922, 0.087185, 0.153231, 0.097283, -0.009498, 1.079242, -0.654185, 1.469537, -0.403617, 3.028829, 1.209276, 0.516813, 1.816853, -1.652552, -0.279288, -0.125876, -5.910278, 0.277881, -3.292769, -0.311732, 0.827438, -0.586001, -1.585721, -1.685168, 2.303844, 2.286766, 0.763010, 1.630826, 2.711380, 1.245094, -0.469989, 0.855273, 1.846231, -1.269401, -0.729980, 1.096651, -0.862948, 0.935156, 0.260136, -0.100846, -0.456174, 0.559441, -1.798339, -1.184900, -0.090250, -0.442664, 1.438874, -2.826569, 0.470369, 0.843450, 0.425958, -1.731183, -0.059186, 1.212237, 1.589445, -0.443802, -0.687553, 0.371740, 2.189436, 0.474874, -3.502179, 1.588933, 0.181478, 2.009142, 4.031461, -0.704131, 0.895830, -0.611670, -1.670501, 0.643384, -1.248581, 0.082029, 1.078038, 2.198903, 1.562441, -2.118029, 1.341515, -2.595295, -0.204816, -1.799077, 0.701830, -0.334559, -0.566707, 0.321890, 3.158910, 1.361753, -1.598902, 1.355754, -0.885561, 0.726786, 0.674248, -1.400915, -1.797559, -1.418724, -0.480368, -1.014434, -1.377594, 3.304005, 1.081017, -0.142937, -0.725848, -1.468716, 1.641540, 1.747708, -1.710998, -0.801586, 4.428770, -0.632803, 1.287084, 1.224783, 0.977675, -2.524289, -1.215465, 0.847066, -1.971717, 0.296576, 0.230343, 1.897276, -2.315022, -2.489991, 7.028148, 0.139651, -1.489560, -0.108529, 0.973838, -0.650666, -1.174496, 1.229644, 0.677356, -0.325306, 0.731556, -2.130413, -0.572011, -0.167396, -0.152763, -1.513432, 0.359530, -0.202073, 0.554924, -0.042635, 3.754293, 0.751861, -2.220118, -1.367504, -0.180788, -1.781298, 2.152536, 0.546775, 0.485454, -0.463405, -0.002958, 2.147824, -2.007004, 0.673060, -1.540999, -0.136570, 1.007624, -3.474314, -0.617297, -2.784721, 0.194940, 1.658762, -1.411829, -0.737517, 0.163858, -0.777713, 0.560314, 0.347544, -1.521263, 0.037006, 0.437072, -1.070862, 0.965648, 0.773028, 0.307019, 1.041627, -0.733241, -0.977493, -0.429238, 0.050614, -0.829562, 1.884014, -0.253405, -1.059937, 1.722486, 3.461274, -0.906070, -1.530156, 2.198265, -0.459783, -0.875729, -2.660546, 1.420933, 0.514850, -1.837734, 1.603957, -1.275833, 1.374402, -0.793919, 0.314476, -1.049270, -2.078234, -1.616638, 0.710537, 0.103625, -0.215743, 0.339599, 1.437179, -1.827948, 1.171729, -2.009682, -1.838992, 0.522406, -0.793820, -0.262933, 1.215268, 0.311192, -2.908158, -0.980768, 1.489822, 2.204947, 0.427181, 1.810356, 0.169103, -0.356967, -2.706281, -0.685192, -1.423497, 1.140927, 2.658384, -0.174297, -2.490361, -2.298670, -0.520309, 3.752534, -2.208305, -1.443815, 1.652624, 0.167723, 0.332152, 1.866258, -0.691057, 0.741715, 0.083042, 2.126400, 1.744948, 1.236283, -1.306377, 1.292937, 0.601601, -1.355803, -1.116400, -0.419224, 0.055426, -2.328909, -2.768005, 0.509521, -1.454753, -0.308576, -1.168338, 0.624593, 0.610668, 3.083825, -0.558987, 1.695581, 0.923159, -2.462692, -3.159868, -1.100677, 1.183890, -0.075880, 0.060596, 0.395339, 1.513366, 0.216280, 0.116348, 0.286980, 1.269514, 1.092108, 2.913883, -2.416278, -0.447192, -0.828047, 1.375085, -1.882448, 0.414232, 0.935447, -0.763903, -0.097080, -1.468093, -2.108227, 0.812448, -3.030955, 1.650276, 0.645374, 0.822754, -1.715253, 0.949443, -0.583930, -0.466487, -0.239685, -0.154113, -2.259127, -0.569317, -7.950617, 1.770871, 0.655170, -1.549587, -0.303264, 0.943074, -1.256375, -1.578881, -1.402247, 0.315739, 1.952985, 1.138246, 0.319435, -1.066226, -0.019303, -0.999552, -2.404504, 0.239226, 0.852229, 0.214280, 0.332852, -0.784271, 0.583816, 0.894294, 0.250293, 2.689180, 0.932068, -2.733958, 1.505688, -0.201235, 0.328853, -2.243844, -0.852288, -0.334035, -1.317273, 0.503698, -1.798193, 0.040109, 0.106212, -1.145169, 2.781565, -1.174213, -0.674775, -0.130195, 1.723452, -0.821414, -0.988254, 0.794259, 1.748087, -1.606799, 1.968351, 0.505302, 0.220784, 2.829643, 4.248420, -3.127151, 1.931689, 1.164102, 0.181212, 1.115405, -0.622059, 1.559150, 0.941379, 0.416869, -1.277200, 1.816182, -1.619316, 2.531234, -2.209251, -25.740744, 1.239025, 0.352856, 1.432124, -0.332224, -1.228410, -0.694785, 0.114492, 1.416174, 3.427281, -1.674708, 0.855310, -0.479453, 1.476262, -0.355835, 1.400066, 0.940392, 0.481807, -1.784303, 1.240418, 1.895536, 1.413484, 1.553220, 2.173478, 0.727745, -2.230431, 1.786677, -3.234339, 0.446137, 1.327993, -0.058461, 1.030128, 1.250014, 1.474441, 1.615538, 0.881243, -0.266443, -0.962094, -0.238979, 0.833562, 0.159211, -0.148265, -1.146298, -1.831205, 2.363937, 0.090987, 0.768067, -1.070195, 1.081125, -0.243713, 1.352430, -1.088068, -0.387508, 0.953645, -3.607654, -0.208207, 1.058219, -3.540133, -0.176322, 2.531761, -0.393910, -0.924363, -2.009626, -1.049115, -2.175923, 1.481581, -0.861316, 1.512275, -2.268067, -3.085932, -0.852963, -0.789792, 5.231994, -1.058063, 0.445215, -0.513278, -1.550916, 2.363637, -0.318830, -2.202391, 1.119512, 0.626732, 1.292118, -2.083883, 2.010500, -1.720330, -0.122876, 0.385993, -0.407019, -1.770024, 0.091870, 0.019525, -2.933962, -1.870932, -0.406637, -2.040491, 2.249710, 0.985226, 0.149422, -0.862363, -1.480567, 1.242449, -1.509518, -1.318086, -0.422596, -1.817529, 0.690241, 3.352541, 1.813458, -1.237180, -0.927014, -2.663395, 2.547916, -1.268841, 0.271833, 0.841779, -1.014784, -1.296559, 0.501792, -0.392863, 0.580616, 0.890395, -1.411767, 1.945539, 2.356490, -0.262101, -1.529146, 0.329766, -1.872703, -2.605136, -1.052404, 0.674966, 0.823735, 2.996305, 1.152302, -0.793134, -1.894817, -2.353142, 0.853609, -1.198352, 0.830396, -2.602845, 0.743173, 1.596138, 0.925561, -0.287728, -1.579190, 0.150707, -0.485093, 0.598073, 0.496564, -2.433938, 0.130943, -0.043445, -0.263888, -0.660274, 0.522155, -0.298216, 1.100825, -1.295024, -2.334423, 2.466950, -1.960287, -0.834913, -0.346131, 3.187697, -1.070666, 0.077956, 2.692153, 1.540347, -0.574894, -2.438186, 1.043280, -2.232725, 1.013549, -1.932124, -0.052887, 1.029336, 0.180861, -0.648796, -0.342356, -2.479274, 2.431973, 1.280207, 1.464802, -0.195265, 1.586246, -2.987961, 0.182641, -0.190149, -2.029029, -0.709019, 1.711207, 2.726928, -0.096125, -1.912724, -1.268916, -2.368214, 1.454860, 0.801292, -2.090639, 0.009335, 2.916453, -0.183593, 1.305621, -3.262085, 0.502414, 0.378839, 1.857305, 3.683550, -0.461560, 1.259201, 0.904573, -0.647443, -0.042906, 1.316142, 0.485262, -3.935773, -0.140856, 0.867518, -0.602693, -0.198637, -1.121627, -1.759840, -0.771186, -0.631131, 0.145151, 1.343153, 0.336181, -1.292166, -0.289050, 2.379897, 3.440751, -2.258761, -0.405697, -0.540307, -0.416136, -0.476906, -1.309639, -1.318478, -0.976233, 2.689849, 0.503559, -2.040556, 0.901806, 0.487302, 2.344204, 0.956174, -2.422247, -3.842064, 0.968857, -0.421343, -2.225902, 0.336079, -2.274005, 0.206273, -0.107490, -1.369931, 0.393495, 1.654393, 2.169506, 2.919102, 0.297331, -2.821940, 0.092887, -0.916158, 1.015810, -1.826803, 0.693532, -0.681707, 2.181287, -0.110305, 0.464497, 1.295338, -0.310423, -0.724674, 0.290203, 0.463358, -2.186084, 1.328547, 1.576344, 0.144542, -0.567771, -0.598133, -1.894698, 1.443123, -2.385668, 1.698364, -0.366134, 0.106805, -2.805731, 1.153937, -3.080271, -0.178250, -1.938542, 0.275216, 0.002397, 0.297635, 1.461271, 0.305871, 2.517221, -0.174000, -1.098956, 0.030936, 2.244885, -1.301349, 0.749536, 0.885684, -3.014035, 1.454764, -1.336601, -1.013402, 2.573905, -0.448159, 0.544451, 2.394425, 0.483757, -2.497281, 0.053167, 0.361224, 0.469581, 0.631805, -2.330993, 1.676361, 0.697558, 0.591515, -1.039913, -0.180206, -0.462571, -0.209459, -0.576065, 2.279284, -0.299172, -0.194904, 3.619387, 3.934561, 1.172894, 0.526611, 0.398059, -1.614865, -1.489991, 0.778708, 0.744119, -1.220411, 0.515268, 0.339539, -0.061137, 1.092670, 1.363884, -1.687957, -1.743584, 0.665694, -2.041978, 1.595987, -0.604114, -2.104793, -2.419405, 1.406765, -0.474117, -1.016261, -0.785798, 0.119473, 0.003550, 0.720526, -2.634799, -0.144064, 0.490726, -2.278433, 0.683341, -1.065922, -1.578778, -1.477575, 0.541458, -0.875865, -0.487008, -1.175961, 1.179989, -0.449157, 0.729390, -3.625034, 1.015845, 0.557515, 0.752713, -0.826017, -0.379720, 2.008976, -0.097426, 2.044271, 2.861414, -2.637050, 1.129714, -1.050685, 0.790966, 0.354504, -0.810705, -1.522652, 0.420090, 1.051780, 0.083435, -2.059101, 0.264866, 0.416219, 1.267804, -1.444463, -0.740033, -0.650456, -1.024885, 0.742108, 0.292962, -0.609546, 0.451259, -1.788922, 0.626221, -2.578477, 0.010107, -2.879778, -3.180357, 1.073472, 0.062782, 0.388496, -3.137921, 0.150180, -1.374213, 1.562546, 1.569208, -1.770587, -1.747225, -0.089173, -0.254919, -0.085761, -0.900465, 0.803404, 1.444025, -1.222196, 2.582620, -1.769255, -0.921337, -0.047699, -0.992220, 0.429236, 1.354063, 2.468357, -1.239177, 2.234062, 0.171570, 0.504752, -0.049483, -0.081486, -2.141028, -2.112175, 1.444213, -1.242927, -1.942442, -0.412966, 0.468290, -1.691532, 3.342434, -1.029143, 0.414474, -1.291863, -0.429215, -0.803098, -0.879434, 2.890400, -0.152064, -0.716110, -0.148828, -0.454403, 0.121447, 0.709472, 2.085076, 1.230407, 0.457659, -0.619703, -1.031744, 0.799820, 0.568080, 1.409062, 1.145725, -0.293734, -0.423526, 1.089540, -1.204836, -1.550930, -1.154674, 0.411535, -1.269684, -1.250055, -0.885318, -0.804515, -0.656637, 1.311883, 2.570914, -1.757858, -1.614506, 1.054425, -0.230994, 0.163260, -0.068314, -2.478331, 3.433658, 0.563837, -0.291979, 1.330703, 1.196056, 2.749060, 2.298057, 1.664460, 1.296717, -3.561041, 2.031934, -0.885923, -1.230606, -0.719654, -1.522524, 0.055912, 0.466891, 0.711304, -0.256905, 0.254127, 1.035667, 2.418933, 0.657365, -1.073165, 0.727122, 0.396898, -0.679162, 0.537641, -0.216880, 0.741149, 0.127517, -0.685507, -0.816983, 1.314867, -1.926546, 1.033232, 0.666667, 0.412173, 1.105362, -2.406342, 2.025838, -0.129165, -0.057019, 0.841208, 0.438537, -3.475091, -1.677753, 1.045024, -1.291526, 3.112645, -0.942207, -0.398658, -0.036666, -0.840055, 3.272867, 2.229147, 0.280921, 1.172878, -1.377426, 0.725625, -1.500038, 108.974983, -1.543268, 0.883873, -0.201575, -1.100014, 2.848984, 1.649240, 1.179316, 0.099843, -0.212120, 1.355394, 1.073641, 0.472136, -0.692718, 0.856604, -1.007322, 2.029020, -2.749115, 1.646423, -0.965607, -0.166112, 1.916322, -0.353382, 1.195508, -1.164256, -1.924362, -0.336077, -0.864081, -0.371600, 3.507040, -2.662761, -2.700086, 2.645764, -0.588335, 0.595821, 0.395873, 0.261532, 0.897741, -0.759526, 1.338342, 2.039644, 2.488708, 0.658869, 1.146101, 0.292945, 0.884184, -1.021913, 0.839312, -0.537249, -1.822289, -0.234070, -0.431272, -0.285895, -3.998769, 0.750883, 2.391869, 1.593652, -1.261236, -2.025501, -2.642597, -2.048967, -0.752406, 0.951185, -2.935954, -0.718500, 2.103240, -0.040910, -0.250542, 0.311411, -0.366309, 0.467215, -0.604038, 0.314239, -2.524184, -1.082193, -1.330313, 0.221131, -0.624326, -0.620772, -0.979783, 1.351199, 0.502501, -1.110724, 4.062208, -0.256656, 2.276846, -1.185725, 0.992122, 3.420039, -0.765948, -0.221500, 0.052288, 2.189865, -3.686619, 1.575352, -2.061088, -1.655098, 1.522987, -1.593854, 2.274162, -3.057110, -0.267945, -0.324140, 2.006741, -1.241994, 0.555711, 2.565888, 0.524792, -0.985646, -0.265675, -1.702239, -2.531488, -0.342326, -0.119078, -0.687255, 0.043045, 2.030811, 0.411119, 1.568364, 0.993975, -1.323289, 1.294146, -0.606770, -0.394903, 0.695981, 0.637678, 1.621926, 0.246330, 0.628986, -0.901297, 2.450891, -0.569776, -1.150095, 0.021318, -3.895612, -0.164137, 0.933785, -0.871159, 0.040331, -0.651584, 1.293960, 0.330892, 0.329866, -2.629156, 1.389845, -1.397733, 1.041358, -0.667219, 1.163123, 1.207297, 2.175764, -1.075607, 1.500163, 1.805551, 0.156989, -0.486652, -1.370991, 1.351088, 0.561534, 1.513762, -1.754055, 0.475647, 1.119235, 1.254973, -2.200987, -1.333424, 0.375751, -1.237126, -0.676050, 1.050322, -0.013615, -2.973356, 0.652008, -0.077755, -2.290762, -1.726803, -0.349222, -1.880172, -3.292858, -0.421512, 1.264125, 0.659902, 0.536645, -1.186392, 0.529164, 1.962576, -1.307417, -1.977710, -2.907781, 0.827774, 0.823504, -0.538302, 1.915013, 1.546227, -0.977086, 2.392261, 2.466423, -1.028928, -1.125520, -1.472190, 1.722015, -1.398091, 1.358133, 2.307282, 0.844900, -0.749014, -1.314827, 1.375018, 0.271454, 0.050423, -0.225399, 0.559803, -2.023571, 0.641929, 4.616908, -0.534789, 1.204665, 0.890745, -1.321189, -2.127558, 0.227066, 0.474820, 0.424672, -0.511897, -0.010376, -1.578745, -0.707301, -1.494194, 1.013243, -0.970379, 0.637081, 2.441757, 1.178170, 2.231665, 0.482194, 0.784995, 1.511568, -1.686735, 0.049919, 3.724557, -0.350886, 1.023152, 0.916885, 2.427388, -0.727273, 1.440410, -0.418736, -1.179116, -1.259873, 0.026272, -1.203515, 0.676995, 1.240330, -0.988959, 1.715686, 1.353497, 2.821455, -0.048384, -1.099469, -3.833539, 1.403490, 0.952264, -2.078660, -2.387847, -0.203457, 1.164888, -0.377990, -1.089652, 0.617669, 0.603560, 2.780058, -0.498905, -2.730738, 1.206661, 0.738163, -0.554591, 2.806867, 0.120156, 0.885852, -1.902021, -1.315665, 2.646314, 0.637651, 1.876910, 2.067616, 1.388101, 4.428380, -2.684014, -0.728300, 0.425805, -0.979354, -1.248050, 0.428526, 1.322177, -0.462034, 0.489450, -0.296501, 1.194134, 0.570492, 0.787840, 0.798111, -0.121259, -1.281682, 0.651666, -0.329396, 1.621351, -3.434499, -1.140202, -1.494462, 0.083887, 0.793408, 0.522874, 0.647781, 0.181029, 0.284212, -0.032588, 3.363986, -1.337602, 0.600369, 0.929805, -0.118197, -0.434214, -2.996208, 2.394993, -0.696582, -1.882186, 0.424430, -0.136489, -11.177244, 1.433617, -0.422023, -2.142893, 1.765504, 4.017715, 0.691570, 2.013083, -2.646734, 1.372750, -0.200401, 1.711830, 1.310737, 2.380119, 1.687647, 0.272407, 0.597892, 0.438291, -0.701525, 1.462026, 0.982752, -2.198225, -0.720614, 0.217967, 2.184405, -1.511539, -0.467931, 0.093546, 0.569584, -0.231853, 0.606410, 0.161362, 0.297654, -0.598280, -0.636738, -0.479192, -1.080690, -0.533575, -0.481348, 0.392146, 1.667896, -1.654058, -1.187042, 2.232192, -1.161160, -0.934447, -2.306565, 0.173936, -0.549353, -1.700276, 0.564659, 1.314084, -0.155444, 1.542174, -0.539523, 3.501718, -0.409948, -2.287433, -1.245231, -0.713698, -0.073254, 1.562305, 1.728484, -1.469147, 3.051828, -1.058781, 2.404095, 1.481896, -0.235652, 2.031891, -1.883109, -1.893306, -2.758252, 2.430271, 2.785730, -2.080566, 1.592087, -1.643902, -1.741971, -4.103412, -0.942100, 1.128346, -2.384707, 1.036259, -2.752170, 0.359940, -1.679895, -1.185395, 1.481621, -1.940301, 1.939124, -0.243517, -0.729444, 0.452522, -0.667398, -1.528768, -0.084491, 1.454401, -0.876688, -0.727226, -1.147725, -0.451758, -2.296567, -2.192117, 0.155676, -2.761838, 0.035215, 0.493224, -2.091021, 58.901432, -1.606073, -3.120444, -0.751568, 0.656560, 2.347460, -2.288090, 0.937204, -0.619620, 1.410374, -0.619253, -0.660450, 1.456668, 1.938942, -2.594143, -1.986019, 2.836044, -0.558226, -4.271777, 1.487002, -0.626783, 0.327943, -0.177811, -0.279220, 44.279232, -0.000625, 1.140469, -0.037682, 0.479224, -0.699490, 0.652760, 1.851329, 0.161828, -1.647348, 0.302765, 0.568568, 1.134713, -1.047642, 0.557566, -0.854736, 0.679620, -2.383316, 1.417158, 1.660055, 2.417681, 2.144057, 0.051083, 0.624508, 0.984353, -1.782677, -1.427122, 2.440223, -0.743944, 2.089868, -4.443433, -1.378514, -0.578853, -1.935174, 0.785260, 1.709202, 0.102794, 1.711256, 1.248609, -0.569197, -0.683822, -1.620399, 0.619570, -1.480553, 1.347544, -0.512033, -3.201872, -0.088561, 0.719905, -0.070067, 2.563033, -1.351368, -0.200104, 0.776716, -2.187084, 0.891719, -0.400018, -1.958174, 0.762099, -2.248331, -1.565500, -2.753872, -0.268325, -0.892033, 10.707685, 2.690685, 0.231237, 0.789252, 2.969221, 1.503455, 0.571084, -1.230273, -2.020150, 1.923794, -0.710662, 1.361673, -1.752455, 0.096719, -0.173957, -1.541730, 0.748128, 0.676815, -2.004625, 0.021753, -2.067259, -0.090012, -2.118023, 1.397831, 2.612525, -2.713913, -1.989865, -0.009225, 1.418425, -2.013482, -0.485722, 0.703349, -1.674182, -2.101350, -0.914536, -4.427722, -0.433252, 1.391613, -1.398082, 1.423048, 0.681397, 0.176488, -0.204174, -3.211823, -1.960403, -0.029697, 2.571298, -1.093950, 0.904089, -3.640918, -0.499479, 0.625533, 0.161181, -0.985214], - "starcoder2:latest": [3.954906, 3.446956, 4.132194, -1.308157, 4.217354, 0.978980, -3.164102, -2.884384, 1.930067, -1.850368, 0.912804, -1.633436, -0.083181, 1.147634, 1.383439, -2.179369, -6.851675, 0.383219, -2.499716, 4.524372, -7.357098, -4.032088, -0.446788, -3.416954, -0.716143, 0.133193, -0.770150, 0.747172, -1.350329, -1.988400, -0.100476, -2.170013, 1.644468, 1.707521, 0.325533, -4.403326, 0.637300, 0.350682, -0.928538, -2.591375, -0.896269, 1.880500, 3.309983, 2.229650, -0.769332, 0.131835, -1.750641, -5.785780, 0.477680, -0.229142, 0.776822, -3.113634, -1.487448, -4.305194, 2.233401, 2.360487, -4.390745, -1.771400, -4.191641, 2.105277, 3.461224, 3.597554, -2.192061, -1.519642, -0.950530, -2.892504, -1.049523, 2.070168, -2.538044, 2.219159, -2.942192, 1.363763, -3.478725, 4.298923, 0.565158, -3.088574, 1.070849, 1.664940, 2.649776, -0.508506, -3.603013, 0.664562, -3.398930, -0.149324, -0.288706, -1.093250, 4.242371, 1.714020, -7.155812, -2.404553, -8.509516, 4.994543, 3.872673, -2.871006, -3.556372, 1.039953, 1.879293, 0.953682, 1.384863, 4.057693, 0.973630, -3.057381, 0.942924, -4.912657, -0.438702, -0.330589, -1.313686, 2.855739, 3.051247, -1.675123, -0.029737, -3.202343, 0.494662, -4.007298, -1.643547, -6.927251, 0.813801, -0.696914, 3.659765, 1.090904, -1.843107, 1.553456, -8.342607, 4.401372, -4.314304, -3.726803, 0.642371, 6.338482, -0.388236, 4.319686, -4.750969, 3.902664, -0.574822, -3.063889, 2.006676, 3.434633, -5.040134, 2.665939, 0.430951, 2.571163, 3.511206, 1.461066, 3.273216, -5.620604, 3.440011, 3.553609, -0.039653, 1.648325, -0.872830, 0.185128, -3.091564, 2.200620, 3.167208, -2.833151, -5.076702, -4.427409, 1.205788, -2.541477, 5.408942, 4.078667, 2.740433, 0.571368, -1.551391, 2.512275, 4.750610, 0.472481, 0.696102, 2.621961, -3.720625, -1.839476, -7.474308, -1.506337, 4.908046, -0.469909, -2.005977, 2.365716, -0.496384, -4.986031, 3.318370, 3.450526, 2.631732, -2.603594, 1.190445, 2.637537, 0.869908, 0.413760, -2.020536, 2.127237, -4.783207, 1.706683, 8.533383, -0.677833, -2.040554, -7.255683, 5.987998, 2.188214, 3.920970, 0.257084, -2.536839, 2.571880, -2.356964, 2.739559, -0.717192, -2.021268, -54.268299, 0.333840, -0.165839, -1.502152, -3.867745, -5.023274, 4.025485, 0.980240, -5.584783, -0.596023, -1.808546, 3.591976, 2.904098, -4.535067, 4.661890, -10.922905, -2.987491, -9.325285, 1.980194, -2.097212, -1.019022, 4.682246, -1.427983, 3.520185, 1.046766, 2.215647, -0.969066, 0.033140, -2.179222, 4.788574, -1.198171, -1.201237, -2.539800, 0.591574, -3.490026, -2.674280, -3.963340, 18.968071, 5.505445, -0.093186, -2.184116, -0.737323, 2.018108, 3.244152, -1.713053, -1.515601, -2.776108, 1.291257, 0.117369, -9.578768, 1.925400, 4.567656, 0.901392, 1.137718, -0.379492, 1.382629, 3.525820, -1.730144, 0.172482, 0.584189, 2.579916, -0.138648, 2.106573, 9.056437, -2.702915, 1.538335, 0.673111, 2.611344, -5.052717, -0.152712, 3.724612, 0.230983, 1.890635, -1.014450, 3.154704, -1.116773, -2.011335, 0.950536, 1.706761, -2.864771, 3.438492, -1.220277, 2.567598, 1.270461, 2.356857, -0.287333, 2.063555, -3.507069, -3.196346, -4.356922, -0.267165, -6.006845, 0.486452, -2.743304, -1.646718, 3.736859, 4.527998, 4.153322, -2.734528, -0.020917, 3.385880, 0.135446, 0.242599, -0.082168, -2.619100, 1.342911, 0.636880, -0.483083, -0.189432, 0.026360, -1.258501, 0.261005, 2.281953, -3.362994, 4.558819, 0.663074, -2.211503, 1.318164, -1.085270, 1.818389, 1.044821, 0.491438, -0.142887, -4.251420, 7.596611, 5.024518, -0.434129, -0.619839, 4.385494, 3.004915, 0.564843, -0.262337, 4.462246, -2.494302, 2.775275, -3.166047, 0.939039, 0.279873, -1.359035, -1.443188, 1.324596, -6.544474, -2.342992, 0.011879, -4.089714, 1.592429, 2.206237, -2.116853, -3.156819, 5.479142, 1.899718, 2.731661, -3.741627, -2.232041, -3.275277, 0.243284, 3.543710, 2.899739, 2.000626, 3.344675, -4.386779, -0.993285, 1.166946, -4.742619, 0.648653, -8.625524, -4.236928, -1.981542, 4.250235, 2.827621, -3.327694, 4.063057, -5.468178, 4.169388, 4.380604, -1.700271, -5.375949, -3.708664, -1.256779, 3.119228, -1.263999, -0.016020, 2.059651, -0.494237, -1.475365, 1.853182, -1.576096, 2.082677, 0.286721, 0.287749, -0.677656, -1.040530, -1.405734, -1.721848, 4.456102, -2.748078, -0.479098, 7.328283, -3.192072, -1.224766, -2.871030, -2.309623, -1.380889, -2.522825, 1.211852, 1.634454, -2.443470, 1.728376, -0.185181, 0.158396, -6.934468, -2.349255, 1.067602, -1.707984, -3.699120, -3.370043, -1.735215, -0.249390, 0.172209, -0.135927, -3.118189, -2.674917, 2.148926, -1.210936, 6.989573, 0.455856, 3.851568, 0.571797, 1.976329, 4.597493, -1.152350, 2.556751, 0.562547, 0.374311, -2.292119, 0.033077, -3.868658, -3.757327, -1.186643, -5.969309, 0.595574, 2.546074, 4.349101, 1.176634, -0.476572, -4.512696, -0.863966, -2.406134, 0.144893, 2.298353, -0.402904, -3.324984, 1.050415, 2.997760, -1.168943, -0.737656, 0.773710, 0.109672, -6.955970, -3.012873, -5.201923, 1.191964, 9.995472, -0.460779, -2.063271, 3.809098, 6.166883, -1.470808, -0.093703, -0.966475, -2.878819, -3.747328, 4.072700, 0.371183, 0.629432, 1.275924, 2.468330, 5.615418, 2.137433, 0.884437, 7.149430, 4.254181, 2.851663, 3.482609, -2.689646, -1.899801, -2.926574, 4.338265, -0.547124, 1.510705, 0.823134, -4.255880, -5.178019, -2.511326, 1.515535, 2.961271, 1.749568, -0.547877, -3.209148, 2.146317, -3.191516, 5.372285, 2.545877, 0.738861, -7.250521, 1.140111, -0.790099, -3.194763, 1.813850, 5.258968, -1.546785, 7.240694, 7.095726, -1.567679, -3.463788, -2.272077, 0.326402, 1.812266, 1.097216, 0.258934, 7.259093, -6.611300, 4.369743, 0.233526, -1.724230, 0.565005, 0.331715, 1.606365, -2.478334, 0.074496, 4.647484, 2.034292, -1.286420, 1.099764, 2.053190, 4.063726, -0.562997, -0.102809, 0.395045, -0.367260, 0.978149, 1.751679, -1.107427, 0.525725, -6.672098, 1.844507, 0.584685, 0.495569, 1.294837, 4.817148, 1.280627, -2.745418, 2.519278, -2.430676, 3.719332, 4.467507, 2.878108, -1.753611, -0.706735, -1.235836, -3.394101, 2.680115, 5.564773, -25.643671, 0.944054, -3.424004, 3.784788, 2.892951, 2.147227, 3.207940, -3.589079, 0.056116, -0.246300, -0.003123, 0.624385, 5.308627, 0.048532, -0.612551, -3.381337, -0.151319, 1.531758, 0.098887, -2.412398, 2.590293, -6.616521, 1.363917, -0.141630, -6.469071, -4.452425, 0.858186, -2.877003, 3.085377, -1.986627, 0.513879, 1.591452, -2.129533, -0.313005, -0.639644, 5.282188, 1.775640, -5.907731, 2.823747, -3.239740, 2.973734, -4.598226, -4.568226, -5.474308, 0.002731, 0.257645, 2.806026, 2.050392, -3.301049, -3.430546, -1.178443, 40.045464, -1.429249, 0.936941, -2.159034, 1.444639, -0.336448, 0.664087, 1.969398, -0.508663, -1.639841, 2.506701, 0.266379, 3.149135, -0.325703, 4.546886, -3.670993, 2.518780, -0.060650, 3.132485, 3.577308, 3.705828, 3.752754, -1.046455, 3.790464, -4.996606, 8.385803, 0.004652, 2.942170, 2.520080, 5.030700, -1.782003, 2.186366, 2.809453, -4.000122, -3.857088, -2.281824, -0.710834, 5.214368, -1.924514, -0.743523, 2.644260, -0.531909, 0.830519, -0.351119, -5.305862, 0.833811, 1.349116, -1.093713, 2.924214, 0.179195, 1.216857, -3.064413, -0.433600, 1.285622, 0.329023, -0.378243, 1.295149, 1.820416, -2.452358, 5.332327, 0.855822, -1.862306, 2.299675, -2.495447, -0.856743, -1.795716, 1.493013, 2.535764, -0.623357, 5.355479, 1.528928, -2.333948, 1.343511, -2.886343, -4.315742, 1.494795, 3.670878, 2.528954, -4.513095, -4.793800, -3.309853, 5.122548, 1.078647, -3.852395, -1.237825, 0.578560, 0.151397, -0.313312, -2.353152, -0.925905, -2.447389, -1.272905, -0.966679, -3.534346, -1.952816, -1.391251, -5.503417, 3.083206, 1.603203, 1.594700, 1.879373, 2.644297, 1.984598, -1.328263, 10.436472, -1.211096, 0.258482, 1.039371, 2.810867, 1.315435, -1.010990, -6.820943, 3.245251, 2.012278, -0.485755, -1.931857, 1.755673, 1.319367, -7.041339, -0.120645, -2.525263, -1.041744, 0.461637, 3.536187, 1.663792, -1.046046, 4.882263, 1.606150, -1.028896, -3.787328, 1.720849, 0.990523, 1.311473, -0.380394, 2.589013, 2.159781, -0.235688, -1.006128, -1.421028, -4.730341, 2.582766, 0.617903, -3.711154, 0.329820, -1.163525, -6.910535, 1.042382, -3.019486, 5.790540, 6.632965, -1.451595, -5.548892, 4.663946, 0.774761, -0.516832, 1.734756, 0.712267, 0.441946, 5.133786, 2.175959, -1.424711, 2.850309, -4.076188, 3.363111, -0.146001, 4.453137, -7.930290, -4.174343, -8.381124, 2.078207, 0.817420, -1.242864, 3.261016, 0.755861, -0.831756, -1.486270, -3.102542, 0.572175, -1.355858, -1.116844, 0.988796, -0.765274, 0.535530, 2.798912, -0.872012, 1.312495, -5.169959, -2.461925, 32.000229, 3.070940, -3.010790, -8.231589, -0.311377, 0.026132, -2.744881, 1.916952, 2.714581, 0.238231, 3.783271, 4.726935, -1.905172, -0.647758, -36.757748, 3.181995, -1.353556, -2.416937, 2.320525, -2.297328, -7.907078, 1.462360, 2.113646, -0.573712, -8.758898, 0.858195, -0.652538, -1.551567, 2.702150, -2.158720, 7.030653, -8.981299, -2.873467, -3.894970, 0.079853, 1.225966, 2.812419, -3.370865, 1.705058, -0.797177, 1.395418, 1.474460, -1.563024, 2.567413, -0.129698, -3.298024, 1.761030, -3.790629, 3.480512, 4.441885, 3.906168, -1.588898, -2.205953, -0.735543, 6.266836, -1.045668, -4.019965, -2.978006, 4.059746, 1.515308, 2.426685, -1.051778, 0.243209, -2.733144, -0.939245, 1.628108, 1.924429, -1.988333, -1.907789, 6.501453, -5.372938, -3.692094, 2.084061, 2.598653, -2.129409, -1.099973, -2.259107, -1.812507, -3.265822, -5.205757, 3.254252, 0.549243, 4.423184, 3.607155, 3.125645, 0.110007, 1.579380, -0.820327, -4.340643, -1.246021, 2.509706, 2.404279, -1.848830, -3.794203, -5.309284, -1.768488, 1.953625, 2.033994, 1.841250, 3.990752, -0.339395, 2.897047, 1.390943, 7.685173, 2.497483, -2.268698, -4.039967, -1.410298, 5.251214, 0.412185, -2.122941, 4.800458, -2.148592, 2.614200, -3.319689, 0.214866, -1.062898, 0.094038, 3.353088, -0.151354, -1.451349, -0.436699, 2.316608, 6.956083, 0.809792, -4.175000, -2.111322, -5.318207, 0.920999, 3.898372, -3.036911, -3.944599, -0.053519, -1.137218, 0.923195, 3.309731, 1.307382, 0.471838, -0.557837, -1.457152, -10.488117, 4.947997, 3.032650, 0.926141, 1.031303, 4.860070, 1.865988, 4.291333, 5.294878, 1.033966, 0.655021, -2.618088, 2.143144, 2.635707, -2.914068, -1.279016, 1.189715, 0.900603, 0.150104, -3.965141, 0.084981, 3.026685, 5.314412, 3.465086, -3.757115, 1.248792, -8.722107, -2.305587, 2.938486, -4.834834, -1.033344, -1.279896, -0.816648, -3.617774, 1.542475, -38.896088, 3.234958, 3.912147, 2.612395, -3.285373, -2.863140, 2.881858, 4.916956, -2.752369, -4.856666, 0.561042, -1.688848, 4.023190, -2.463728, 3.498123, 1.399833, 0.355092, -1.268783, -3.607190, -0.907120, 8.478541, -2.200597, 1.559901, 1.995240, -4.085650, 2.091830, -3.321615, -3.862751, -1.994243, 4.994206, 0.906812, -5.086945, 4.253753, 3.185349, 3.300971, 2.385611, 1.160899, 1.974533, -1.013438, -2.642955, 1.195869, 5.310802, 5.468049, -2.974200, 2.939312, -1.719330, 2.104474, 4.294636, 0.418233, -0.910012, -6.338346, -1.003924, 3.763436, 2.168355, -4.610764, 20.133694, -4.702892, 0.358582, 0.795131, -1.072905, -1.151668, 1.011330, 3.718589, 3.466958, -1.727253, 0.007756, 24.925507, -2.706746, -0.096896, 0.406167, -3.355074, -1.374650, -0.400644, 3.200829, 1.512507, 3.596913, 1.511441, -5.696938, -5.842372, 2.388058, 2.873770, 2.871197, 3.141411, 6.866806, 1.181306, -2.315731, 2.846997, -2.763558, -2.466458, 2.600410, 3.115498, 5.438047, -0.957668, 0.723373, 9.326761, 2.562903, 2.477052, -1.883352, -4.561812, 2.033604, 0.450944, 3.900448, -1.410911, 2.496872, -0.951807, -1.702957, 0.440785, 1.007453, -4.055562, -3.651521, 1.038782, -1.596580, -2.893723, 4.680642, -4.607155, -1.961638, 0.053415, 0.057291, -0.581496, 1.113361, -4.579621, -2.124156, -1.471331, 1.703052, -3.977679, 1.975540, 1.071642, -3.896637, -3.192747, 3.893468, 1.125908, -1.617653, -3.302320, 0.090005, 3.834193, 0.864084, 2.959042, -0.238062, -2.339349, 0.867953, 0.607959, -2.510954, 0.496669, 4.439073, -0.785287, 0.793577, -2.958039, 1.621440, -1.623561, -0.562564, 4.638718, 6.613771, 2.172550, -4.948812, 1.765566, -0.272064, -0.381970, -2.758515, -5.700199, -0.509347, 3.595506, 0.349293, 1.786550, -5.735712, 1.657908, 2.420370, 1.021307, 4.288211, 0.659743, 2.595690, 2.131526, 1.660173, -2.757504, 0.155179, 0.057258, 1.621030, 0.375329, 3.359759, 0.522753, -3.821949, 7.317401, 0.872343, 2.317105, -6.278262, -1.124390, 2.805756, 3.533095, -0.392534, 1.936733, 0.632991, 1.020454, -0.789944, -1.634524, -1.096838, 1.429845, -3.976567, 2.014116, 0.164936, 4.276067, 0.580995, -2.650581, 0.627567, 2.831709, 7.629052, -1.588510, 1.669903, 1.566437, -1.158298, -4.041847, -0.363744, 2.566550, 0.732395, -6.146594, 4.792378, -2.375965, 0.086666, 5.705215, -0.609236, -1.750620, 0.383327, -6.134190, -1.646948, -2.378367, 2.136676, -4.344128, -1.913511, 4.792160, -2.104047, 2.290141, 0.619961, -2.841638, -1.149025, 1.532447, 8.079632, 0.167728, -0.812451, -5.725507, 2.813900, -12.818064, 5.116618, -0.522779, 0.827081, -0.488727, 5.936249, -0.598387, 0.827499, 2.470267, -3.620100, 2.557060, -3.704692, 3.047684, 3.675898, 6.186685, -0.115018, 2.624267, -5.155997, -4.354460, -1.568762, -0.709346, -1.468610, 0.401905, -2.583840, -0.987820, 0.275011, -4.163403, -0.613211, -2.807535, -0.424523, -0.452741, -2.167123, 5.778756, -0.681994, -2.429863, 0.223221, 0.201511, -0.543092, 2.036425, -2.328058, -0.447419, -1.194997, -1.101472, 2.362241, -0.523458, 1.641637, 4.413494, -3.409977, -5.536853, 6.102106, 5.024897, -5.290074, 0.052775, 2.071835, 0.582469, -1.089358, 3.547235, 2.933052, 3.950668, -2.233588, -1.770502, 0.913889, -0.373818, -2.158972, -5.722299, -0.515570, 3.150634, -3.374096, -0.672185, -2.349066, 0.423277, 4.680716, -1.405044, 0.149807, -2.194840, 0.511928, 5.358116, 1.277793, -0.073511, -0.607695, 1.210479, 3.695651, -1.760374, -1.375394, 0.694058, -2.702893, 1.123261, -0.752893, -0.721043, -0.008803, 5.108900, 3.010632, -3.726272, 2.137026, 1.155603, -4.815225, 1.123165, -4.499853, -2.871032, -2.869565, 1.640056, 2.883875, -2.753560, 2.374418, -0.525743, 0.754760, -0.191842, -0.728661, 3.039357, 0.417412, -0.310582, -1.083713, 5.632096, 1.864744, 0.754898, 0.392937, -0.536663, 0.609380, -2.309850, 2.671967, -1.097407, -3.362546, 0.614686, 0.498423, 1.612521, -2.590021, 0.955710, -2.411512, 0.386386, -5.251279, -7.841381, -0.590958, -2.363035, -0.070098, 4.583270, 1.687753, -5.833133, -4.610497, 1.243317, 0.787212, 1.516608, 1.190986, -4.180897, 2.236767, -1.813234, 1.337824, -1.599516, -3.677811, -26.237354, -1.201527, -0.976645, 3.695266, -3.046397, -0.612185, -0.403214, -6.037153, 3.486489, 1.110454, -2.614597, -1.813726, 3.819050, -3.899067, -2.189036, -1.128309, 4.495033, -0.690091, 1.605721, -4.417164, -2.698482, 3.989815, 6.847924, -2.491783, -2.521626, -0.033084, 8.455603, -3.503982, 3.065771, 0.794108, -1.092266, 4.623037, -2.361975, -3.687104, 2.658545, -4.387690, 0.838877, 0.090506, 0.399950, 1.262949, -2.685220, 4.460542, -1.484809, 1.970316, -1.609233, -4.424563, 0.721127, 1.493592, 1.255998, -3.487755, -3.881172, 0.427922, 2.569118, 0.065877, 2.816322, 1.152758, -0.501664, -0.407259, 1.829424, -1.862841, 2.326450, 1.251915, -0.890167, 8.041068, -0.464253, -5.633308, 0.973143, -1.270512, -1.123637, 0.414263, 2.355236, 5.072489, -4.236382, -3.017046, -5.539206, 0.427342, -2.033043, -3.006998, -2.034348, 2.991414, -0.888073, -0.284665, 0.764979, -0.311018, -30.389788, 0.295668, 2.223618, -4.418258, -0.228846, -0.868055, -0.286201, 1.586053, 2.322705, -2.874192, -3.909887, -2.716074, -0.632933, -1.315264, -1.857809, 2.162390, 0.581108, 4.548195, 3.339464, 3.113324, 0.260880, 2.201258, 1.306216, 4.046004, 0.226894, -0.154268, 3.058372, 1.441418, 2.402032, 1.295249, -2.624159, 6.831582, -1.634226, 0.016093, 1.380820, -1.251443, -6.686980, -1.877969, -1.170521, -0.148758, -3.604551, 4.608958, 3.159536, 6.339041, 1.586969, -3.169895, -1.270715, -2.643064, 1.292438, 1.746339, -1.821995, -4.091353, -3.314147, -1.255694, 6.793447, -5.778502, 1.311826, -3.195199, -1.776936, -1.542572, -1.340883, -0.471980, 12.039534, 1.598309, -3.289486, 2.143849, 7.559578, -1.072683, 2.660873, 0.178650, -0.823664, -1.195172, -5.483694, -2.724475, -1.046455, -2.970822, 2.370901, 1.326905, 2.699673, 4.745267, 3.315630, 1.795283, 4.534509, -1.104437, -2.619473, 2.310451, -0.207106, -1.756807, 1.944235, -7.406075, 2.360746, 1.695488, -1.573009, 5.868517, 0.632977, -1.449851, -2.978994, -5.217463, -3.489958, -1.462943, 3.673938, -3.456507, -3.669782, 6.829182, -0.014763, 0.705192, 4.692063, -0.884456, -0.521573, 3.395014, -0.574015, 1.318436, 2.451267, 2.462721, 0.067645, -4.006672, -5.101906, 1.233049, 1.874316, 0.475919, 0.348529, 2.598935, 3.047530, 3.175739, 1.714644, 2.201727, -2.770246, -3.782538, 2.618452, -0.984300, 2.884197, -1.390444, -1.016022, 4.748641, 5.434885, 2.662480, 1.714454, 4.043160, -2.636191, -4.603223, 2.327946, -3.645967, 7.918791, -2.157629, -2.806252, 1.060982, 3.452957, 2.139525, -2.042349, 0.693860, -3.820629, -4.664983, 0.846234, 1.978720, -1.999649, 0.705241, 0.508306, -4.941313, -0.472151, 0.620729, -0.734521, -7.761682, 1.561712, 5.253155, 2.527959, -4.672490, -0.972164, 4.680885, 1.364908, -3.930770, -2.790518, 0.518415, -4.114025, -1.543985, 1.640930, 2.419094, 0.260200, -1.186129, -2.653908, -4.087616, 1.915277, 3.987131, -1.384313, -2.631912, -1.384115, -1.071472, -2.785765, -2.181538, -2.885599, -0.401276, -6.260543, -3.641433, -0.454064, 3.221514, 5.539521, -7.809373, 2.057474, 3.860055, -0.889300, -4.335176, -6.850449, -0.349884, 0.461714, -2.370055, 2.600246, 3.713120, -1.530666, 4.533460, -5.503286, -1.099606, 1.367768, -1.353006, 0.527998, 0.605875, 3.025352, -2.243968, -7.535481, -3.645490, -9.158818, -2.249825, 1.013910, -1.286187, -1.565031, 1.689706, 4.758728, -3.682729, 2.832422, 0.759288, 3.222937, 0.980088, 7.682557, -0.236019, -1.305568, 5.229431, -0.028067, 3.350055, -6.278828, -6.820782, -5.137558, -1.602286, -4.789843, 1.372694, 7.766475, -0.262632, -2.088757, 2.054604, -0.873996, -3.777221, 1.057147, -1.788633, 0.636675, -3.246207, 4.191454, 10.845826, 2.184264, -0.663242, -2.994276, -3.822319, 2.048127, -2.415215, -5.284320, 0.379661, 0.770331, -2.962476, -9.441674, -1.733733, 0.313156, -7.212578, -1.284574, -0.594387, 1.904230, -2.360615, 0.960972, -0.756241, 5.057050, -3.848195, -0.850209, 1.989755, -1.932005, -3.434974, 1.126740, 0.189969, -5.973492, 0.497733, 0.502772, 0.983130, 1.428358, -0.880303, 1.468601, 4.044591, 4.903339, 6.451278, 2.301094, 1.285675, -6.867669, -3.877277, 5.125129, 0.206669, -0.732105, 1.676614, 1.967732, -3.292951, -2.084330, -2.661968, 5.956147, 2.431339, 35.113945, -2.903124, -5.854738, 1.690528, 0.256790, 1.409627, 0.245409, -0.751060, -2.545308, 1.832971, 2.343396, 0.981405, 0.298588, 2.361303, 2.873193, 3.184145, -0.578079, 7.647470, 1.286948, 2.470084, 2.074987, -3.704046, 2.094772, 1.427298, -2.048329, -0.852479, -0.147512, 8.952838, -1.212160, -0.013429, 3.119918, 3.027362, -1.793503, 1.816219, -4.171658, -1.222634, 1.598949, -0.425474, -4.008621, -0.180907, 1.435951, 4.180890, -2.889360, -0.643184, 2.107976, -2.184762, -6.804729, -1.313931, 6.336479, -2.715487, -8.017049, 1.290528, -1.088894, 1.836897, -2.769671, 2.145877, -3.002848, 1.399926, 3.115015, -0.575049, 3.000286, 1.236908, -0.665988, -0.811098, -1.520874, -0.406334, 0.081887, -2.804508, 1.811796, -1.327266, 3.629619, -3.051250, 5.777524, 5.625944, -0.074724, 2.295986, 4.644068, -0.943301, 0.499157, 2.743801, 0.288521, -4.547318, 1.480684, -1.903996, 0.755657, 6.564864, 5.294844, -7.152912, -4.054803, 0.867254, -2.116263, -1.725379, -0.237372, -1.343886, -1.357473, 4.509637, 2.103033, -0.916625, -0.122734, -0.358285, 4.174424, -5.610752, 9.703909, -3.241749, 4.983339, -3.434541, -0.940305, -2.995391, 0.774271, -3.800056, -0.785292, -6.434474, -3.552718, 2.490310, -3.969891, -0.159337, 1.611900, 0.692022, -3.616428, -0.751369, -1.386437, -6.936826, 2.289046, 0.809470, 7.176322, -5.247258, 0.099220, 2.229184, 2.014560, 0.463515, 24.263531, 7.516344, -3.366016, -1.453768, 1.082829, -4.192920, 1.545274, -8.204566, -1.746497, -0.660806, -0.428469, 3.773864, -2.924908, 5.075720, 0.441147, -2.315868, 0.052775, -2.973179, -0.977929, 7.137644, 0.139646, -2.662629, -4.508866, 0.448624, -4.459792, 6.988142, 3.280386, 2.495726, 1.759314, 1.869679, -1.649343, -3.923743, -1.916861, -1.756116, -1.214166, -0.954839, 2.016791, -0.236211, -4.287428, 1.482038, -0.924025, 1.470933, 0.904945, 0.108155, 0.674055, -10.751386, -4.172389, 4.201840, 4.954018, 0.124576, -1.535858, -1.969235, -0.285039, 2.575959, -4.651704, -2.613804, 2.937226, -1.160048, 5.015957, 5.243375, -1.127164, -4.034823, -2.547338, 5.067166, 0.726256, 1.335407, 4.330610, 2.297170, 2.085455, 0.371684, -2.918300, 1.720158, -7.416587, 1.883161, 2.180356, -3.423670, 3.888726, -2.135635, -1.600958, -5.953264, -39.905117, 8.047747, -0.590927, -12.720160, -1.936969, -3.425652, 4.325792, -4.519634, -2.195782, 4.614402, 2.050029, -4.219336, 10.337938, -4.975234, -0.212531, -3.067214, -0.317205, 3.844498, 0.520008, -4.234404, -0.187393, -0.426870, 5.068228, 0.575723, 2.555439, 2.293116, 6.937310, 3.229408, -0.087549, -2.854950, -4.198129, -3.142676, 2.358586, 1.574875, 0.238579, -5.262257, 1.197025, -0.675573, 1.292409, -1.297141, 0.787200, -2.647539, 1.293134, -0.284689, -1.265714, -1.683593, 3.952523, -5.629538, -0.177936, 4.821568, 0.468734, 1.553631, -22.561216, -3.194087, 0.641658, 0.647794, 4.655758, 8.161758, 1.088832, 2.065722, -5.100087, 4.852927, -0.296413, -1.453670, 3.208039, -0.851521, -3.539480, 0.542105, 1.586682, 7.371803, 0.131287, 3.124378, 1.897563, -2.975857, 2.867676, -0.768058, 2.120100, -0.031692, 0.476925, -1.876388, -4.271606, -3.991953, 3.527751, -2.635496, -3.599462, -5.120028, -6.221442, 2.327266, 0.809617, -0.387147, 2.548201, -1.121036, -3.484795, -1.402988, 2.415949, 3.418981, 0.417257, 0.903939, 1.734160, -2.755414, -6.037165, 3.559899, -5.386902, 4.435638, -1.071356, 2.335263, -6.863605, -3.746332, -4.198571, 1.714893, 2.001045, -0.438175, -2.384535, 6.253733, -6.634218, -2.326913, -3.920566, 1.712523, 7.929015, -2.293629, -3.360520, -1.844465, -3.437568, 3.067866, 0.948846, -2.291683, 0.762849, 2.465610, 0.906762, 0.129689, 0.416989, -0.638576, 3.360513, 3.763278, -4.966182, -1.986309, 3.747531, -1.232796, 1.630115, -6.572279, -7.473110, 4.103313, 0.916506, -5.498175, -1.645774, -0.651836, -1.021878, -1.871121, 2.433188, -3.028378, -2.300551, 2.270210, -3.892125, -6.832912, 0.811403, -0.145563, -4.302457, 4.773832, 3.033714, -1.877802, 2.448671, 0.271501, 1.455012, -0.938483, -1.683572, -1.313281, -0.491662, -3.128110, -1.350108, 2.448845, 1.547712, 1.351034, -1.801391, 2.674956, -1.573676, -1.242364, 0.999008, 1.600701, 1.566497, -0.057011, 3.053138, -1.975653, -2.304484, 0.093347, -2.296474, 1.850713, -0.179993, 5.420606, -2.297353, 3.769445, 2.210748, -2.572461, -1.740291, -0.005308, 4.902779, -1.297032, 0.609557, -1.101383, 72.558342, -0.088271, 3.113629, 206.012009, -3.240754, 1.021218, 1.958277, 1.962433, 2.951267, 2.812891, -2.298386, -3.912461, 1.429459, 1.525793, -0.895539, 3.264507, -1.131779, -3.443517, 2.119965, 2.405210, -1.633876, -4.738081, 2.565144, 1.576541, -3.236324, 0.407250, 0.994346, 13.261386, 4.742578, 1.851185, 4.192485, -1.279148, 5.030614, -7.137955, -0.224859, -1.275927, 1.304742, -1.494409, 2.443050, 0.169893, 0.740986, -3.160841, 5.052903, 2.456794, -2.542618, 3.678230, 0.542461, -7.071412, -0.258902, 0.908643, -4.486769, -4.286944, 2.765028, -1.253897, -5.738708, -0.480136, -3.865167, 2.628675, -3.531616, 1.489231, 1.834054, -4.295033, 0.548741, 2.876899, -4.153857, -1.585355, -0.407849, -1.639800, -2.019001, 0.013635, -3.680586, -2.273016, -3.334958, -4.988601, -2.093794, 4.899792, 0.107494, -0.564911, 2.926087, 2.974469, -4.776313, 2.406165, -4.207486, -3.598234, 1.092422, -4.990727, 1.851739, -0.836149, -3.069391, 1.130893, 4.755144, -2.043385, 7.117757, -0.450315, 1.329819, -3.382784, 0.312315, 1.380183, 2.948128, 0.843334, -0.101508, -1.195744, -1.218848, 4.023391, -8.832312, -3.381735, 1.129437, -1.167355, 5.336382, 2.976506, 5.820520, 1.737769, -4.227187, -2.067090, 1.075595, 10.285301, -1.987714, 0.394144, -2.892544, -2.382363, 1.020431, 1.569579, -1.949997, 2.014963, -1.564843, 2.930238, -17.482843, 4.599751, -1.369918, -1.032338, 1.396836, -4.724452, -1.896716, 0.230207, -0.495559, -1.834428, -3.406779, -0.617727, 3.613106, -4.981169, 4.388629, 2.516419, -6.392951, 2.072604, 1.078797, -4.091152, 0.443447, 0.429835, 1.048671, 18.735947, -6.367274, -1.449311, 2.331825, 0.894631, -5.131912, 0.580041, -0.850144, 7.598893, 1.336362, 1.858220, -2.481395, 2.120193, 1.216430, 3.656274, 1.865811, -1.271263, 1.636675, 6.872675, -1.059788, -2.045355, 0.609584, -3.676151, -4.326444, -0.923013, -2.306735, 2.047832, 0.150752, 2.024965, -0.756336, -0.620774, 1.030856, 0.376920, 0.553986, -1.883437, -1.971918, 1.731024, 2.353764, -6.111332, -0.304377, 1.470879, 5.560238, -2.615870, -2.650940, 1.433940, -0.051230, -1.967335, -7.607589, -1.797252, 1.446501, 2.473147, 3.638485, -0.219974, 4.721615, 3.223171, -6.518932, -4.603350, 0.715677, 6.245849, 1.733042, 3.131284, 0.325963, 5.154425, -4.297323, -0.021415, -2.278406, -2.710562, 2.181804, 2.193472, -1.018878, -1.759673, 1.366682, -5.043843, -2.841945, -0.935735, 1.922798, -0.862821, 2.772899, -3.891979, -3.744489, 2.147132, 0.569339, -5.099829, 0.005366, 2.357354, -3.178867, 0.264880, -0.851968, 0.595377, -2.278501, 4.848483, 0.118224, -4.583533, -0.214037, 2.697597, -1.440357, -1.666116, 0.851293, 0.883211, 1.024516, -0.896234, -1.503313, 4.888958, 1.611460, 3.238015, -3.881551, -1.781527, -0.476086, -0.982325, 2.661318, -6.942019, -1.394752, -0.423972, 2.271741, 0.152605, 0.238435, 2.724885, -0.393306, -1.051537, -0.960650, -0.861564, 2.063864, -3.151954, -1.856677, -0.298613, 3.787447, 3.413723, -1.369631, -6.394962, -0.264581, 0.143311, 0.867922, 0.935386, -3.864798, -4.037965, 2.477060, -5.491480, -2.805309, 5.783478, 0.803354, 0.520973, -0.135130, 1.370257, 1.149127, 5.635244, 1.921973, 94.129715, 2.089229, 3.259336, -0.143102, 1.138054, 2.748802, -0.038475, -0.070011, -0.762176, 2.708007, 4.141964, -3.584219, -0.032396, 3.259036, -0.025447, 0.818326, 1.917706, -1.155905, 8.985096, -2.741974, -1.218162, 4.030367, -1.527926, 1.365472, -0.251965, 0.770671, 8.414336, 2.682959, -1.959863, 4.116392, 1.393741, 1.232316, 1.978609, 1.709247, -0.502165, -3.071361, -0.324096, -1.026302, -6.424647, 0.446499, 0.213769, 3.803774, 6.658650, 6.602856, -1.974688, 2.762466, -2.043093, 0.879476, 0.919183, -0.247929, -0.853931, -3.744264, 2.538427, -0.737557, 2.740392, 3.303057, -3.512236, 3.102843, 5.220832, 0.372342, -1.047339, 4.278565, 1.036786, 1.029258, 5.107583, -18.135500, -1.597473, -1.459437, -1.424137, 0.107285, -1.398612, -1.167413, 2.997065, -2.405479, -1.376471, -0.230739, -3.623855, -1.596153, -2.854612, -2.279795, 1.908002, 4.536153, -4.411760, -3.900412, -2.842536, -0.056337, -0.574373, 3.723182, 2.061563, 1.997676, 1.559551, 1.319488, 0.216698, 4.750317, -1.264838, 2.076683, -3.207131, 0.603287, 2.815248, -4.284519, 2.447892, 2.313815, -0.990933, 1.550352, -2.597172, 5.693384, -2.378237, -0.355189, -9.217489, 0.986259, 2.050986, -0.734036, 0.513840, -1.256083, 1.010584, -3.890242, 3.109879, 2.664329, 0.235304, -1.298546, 5.845055, -0.618577, -1.712930, -2.466341, -8.814952, -2.423369, -3.853379, -2.330503, 1.720881, -2.549619, -0.917371, 0.750732, -4.258095, 4.545292, 16.827070, 4.341411, -4.160776, 7.871614, -1.460008, 0.916908, -2.542533, -1.021814, -2.370642, -1.075275, -1.789817, 3.117935, -1.870062, -5.916857, -0.094055, -0.352700, -5.319837, -35.927345, -0.691074, -4.044396, -2.477181, -5.232465, -0.339948, -1.177866, 0.845809, 1.695227, 1.008889, 2.832309, 2.738217, 1.445063, 2.312360, 1.750933, 0.846054, -0.581590, -4.028019, 2.292118, -3.794464, 2.565845, -0.122276, -3.266358, -3.763474, 1.849701, -4.350887, 0.039514, -3.265985, 5.101483, -0.556162, 0.564820, -6.121221, 6.639935, -1.289618, -2.559231, 1.406619, 4.442874, 0.319820, 0.726050, -2.547207, -2.503426, -3.586128, -3.681639, 3.263022, 5.335816, 8.684458, -6.611440, 1.283098, 0.481837, -5.526846, -2.499801, 1.207610, -1.121897, -2.016232, 12.473808, 2.213367, 7.477863, 0.911727, -0.473529, -5.328060, 1.499891, 2.401043, -2.129521, -3.428266, -2.606005, -4.792294, 1.989314, 1.814506, 0.835620, -2.496084, 38.477718, -1.623340, 4.445875, -0.332153, 5.350834, -4.440343, 1.359097, -3.471869, -0.278807, -1.668480, -0.941456, 0.021951, -6.308822, 0.888352, 1.880654, -0.754093, 0.778417, 0.146554, -3.647994, -2.967704, 4.578904, -2.534475, 4.675762, 0.427737, 4.265275, 0.919006, -2.431893, -1.910403, -1.926558, 1.929821, -3.158678, -1.706776, 1.820189, -4.834085, 1.676722, -1.890408, -1.759340, -1.433258, 4.960869, 0.075965, 0.177702, -1.349815, 5.169975, 2.521596, -1.891266, -0.400549, -2.465737, 1.221569, -0.392953, 6.994193, -6.160126, -0.975779, -3.955857, -0.170822, -1.156463, -3.122205, 4.754805, 2.628625, -1.413216, -3.647281, 3.438949, -2.969725, 2.559430, -1.363331, 1.760466, -0.156625, 1.011131, -4.567613, 3.126194, -0.404693, -1.913285, 1.964376, 2.013246, 1.856814, 1.823909, -2.459622, -2.986393, -2.112360, -3.993928, -4.515164, 3.671026, 4.975029, -2.019345, -0.476565, -4.061290, -3.628844, -5.407526, 0.859315, -0.503966, -2.052165, 4.601514, -4.284617, 3.929847, 3.930277, 2.817606, 4.260955, 0.729660, 3.674749, -1.223544, -3.924620, -10.879255, 5.591162, -0.591958, -2.760924, -5.799543, 0.370892, 7.387153, 3.102391, 1.636241, 2.026492, 4.056646, -3.243164, 1.223184, 3.922287, -0.906492, -0.105583, -1.605257, -3.096182, -5.482349, -2.640560, 1.742104, 0.383764, -4.236398, 0.498601, -3.024589, -0.461563, 4.091776, 0.207427, 1.422462, 0.358810, 0.666352, -4.161722, -2.019466, 0.057862, -2.731038, 1.107358, 1.186801, 3.940192, 1.199561, 2.998346, -4.315383, -5.012862, 2.053609, 1.661753, -3.678882, 0.673520, -4.182108, -0.535980, -1.416115, -2.901843, 1.458763, -3.259208, -0.166907, -15.877787, 4.388753, -0.407753, 4.388493, 1.758415, -5.531496, 0.706816, 5.436209, 0.724395, -3.395930, -0.075715, 0.524230, -0.771542, 2.852838, 0.332570, 2.345337, -2.167099, -1.282536, -0.774624, -0.220040, 2.654893, -2.342539, 5.738266, 1.717345, 0.186199, 2.949594, -0.056166, -1.494538, 3.921188, 5.117081, -2.492425, -3.140533, 0.325797, 4.341228, -3.385640, 0.344608, -2.186913, 1.999470, 6.138517, 1.785546, -1.332933, 0.677446, -0.680150, 1.780975, -2.377671, 2.068444, 1.805536, -3.477414, 0.581456, 15.761013, 1.452620, -2.738906, 4.598837, 1.583359, -2.947290, 4.835289, -0.983193, -2.914901, 0.862585, -2.631010, 0.329822, 1.898617, 0.493772, -1.386106, -2.557891, 3.673988, 1.138950, -1.672374, -0.077062, -4.477095, -0.588584, 2.087775, -0.897031, -5.305494, 3.123887, -4.255782, 1.186395, 2.710909, 0.683406, 3.008036, -0.048826, 0.120073, 4.015583, 2.089087, -2.089996, 0.725893, -1.093260, -1.587236, 1.879516, -1.272824, 1.640219, -5.574955, 0.845441, -4.265052, 3.373461, 4.076551, -3.102997, 0.358034, 0.123620, 3.719684, 1.690073, -1.284312, 0.198106, 3.568200, 1.303581, 3.197544, 0.379994, 3.425193, -4.718246, -3.075102, -1.404393, 2.956470, 0.613643, -3.138955, 4.275066, -1.796808, -0.584166, 0.725551, -0.014106, 0.002392, -0.029861, 5.503566, 2.093366, 2.121698, 2.123091, -3.677660, -0.848140, -0.462519, -5.223706, -1.811343, 1.634526, 2.982064, 3.992223, 1.853437, -0.709607, 3.809213, 2.474880, 1.395476, 0.957667, -3.412217, -4.581048, 0.840215, -0.727646, 0.040299, -2.873080, -5.684605, -1.440983, -0.104712, -1.534961, -0.425050, 0.696437, 0.796181, -7.457066, 4.581358, -0.555860, -0.574814, 1.785043, -0.783685, -2.932360, -2.846819, -1.537817, 0.805327, -1.850628, 0.171768, 0.823735, 1.831761, 1.635365, 8.369469, -8.393724, 2.998655, 2.864546, -5.140690, -2.487573, 1.948721, -6.674129, -0.333719, 5.916525, -1.243209, -1.976587, 1.527990, 2.096503, 0.127279, -8.390700, -4.807900, -2.087375, 3.248238, 0.314544, 5.246479, 2.012801, -2.588027, -0.426925, 3.381694, -3.283866, 2.181428, -0.179422, -1.505057, 1.304264, 5.389224, 4.507925, 4.740923, -6.174764, 0.920102, 5.463493, -3.661193, -8.281869, -1.901932, 4.642286, -0.482367, 0.000062, -1.021018, 3.470250, 0.845180, 1.008148, 4.595012, -2.994130, 1.620082, 0.685992, -2.699721, -2.641316, -3.471750, 6.495037, -1.260840, 1.917363, -1.188297, -1.971188, -1.512081, 3.544799, -1.659882, -0.570012, -1.171403, -2.391776, -0.243539, -3.987116, -1.305047, -1.665626, -3.211532, -3.930502, -2.119045], - "gemma2:latest": [-0.612804, -2.215562, 0.792132, -0.651482, -2.400651, 0.047423, -0.096681, 1.335882, 0.176972, 0.849561, 1.180600, -0.659039, -0.453180, 0.075028, -1.174218, -2.576799, -0.433781, 0.657639, -0.178257, 1.154732, -1.243714, 1.093774, 1.291275, -1.545106, 1.221159, -0.511055, 1.819469, -2.283442, 1.198886, -0.448073, -1.150142, -0.796729, 0.319335, 0.128334, -3.369398, 0.529417, 0.001437, -0.841971, 2.942720, -1.803343, -0.292857, -0.785087, -3.741514, 0.917414, -2.835000, -0.515251, -1.833111, 2.204731, -1.536004, 2.052294, 1.424947, 1.128338, -0.868599, -1.878431, 0.746458, 0.305212, -1.198236, -0.216649, 0.096267, 0.374555, -0.088862, 2.874118, -1.643357, -0.156423, 2.514740, 0.331463, 1.577502, 2.079631, -0.169292, 1.362248, 2.312044, 2.920094, 1.592291, -1.020943, 0.824854, -1.844501, 1.401171, 1.337021, -1.520441, -0.597406, 0.476235, -1.770105, -1.775778, -1.380674, -0.423943, -0.135961, -2.185649, 1.998813, -1.881614, -2.436793, -2.301215, -1.802746, -1.508670, 2.766745, -0.379725, 0.447800, -1.477152, 0.246232, -1.762736, -0.226605, 1.478358, -0.281220, -0.200569, 0.942512, 0.680811, 0.564003, 0.730233, -0.543805, -1.819254, 1.064668, -0.735063, 0.515173, -1.019077, 0.219433, -0.205558, 4.559363, -0.043007, 0.875995, -0.014103, 1.605997, -0.083794, 2.355215, -2.294942, 0.451085, 5.738412, -2.193937, 2.306627, -0.206797, -0.429043, 1.211079, 0.743677, 0.486967, -0.604554, 3.979926, -1.719997, -0.458243, -1.574947, 1.082482, -1.041721, 2.636800, 0.249583, 0.375513, 1.986354, -1.146480, -0.135895, 0.425603, 0.235258, -2.052300, 0.907751, 0.968922, 0.058095, 0.114366, -0.043495, 1.277248, 6.483394, -1.122919, -0.901037, -0.529589, -0.472289, 0.045193, 0.137343, 0.339210, -1.675540, 0.323157, -0.596973, 2.038504, -0.258320, -0.723805, 0.649060, -0.376432, -0.666743, -0.516852, -1.214601, 1.561316, -0.097161, -1.401292, -1.235775, 0.696198, -0.013219, -0.327094, 0.388949, 0.851818, -0.798742, 1.672736, -0.357125, 0.195319, -0.968957, 1.882132, -2.164159, 0.966465, 1.970838, 1.228401, 1.307016, -0.780354, -2.326900, -0.253378, 0.554909, -0.015867, -1.282054, 4.145304, 1.606526, -1.657055, -0.323419, 2.354091, -0.137715, -1.177234, 0.135134, -0.850678, -1.318437, 1.429064, 0.823354, -1.856108, 1.066734, -2.022635, -1.705907, -1.349212, 2.103198, -0.661027, -0.516363, -1.717856, -2.184409, 0.591786, -0.810128, -0.042653, -0.053300, -0.578977, -2.760526, 0.647994, 0.101502, -0.755300, 3.488568, 0.945688, -2.934568, -0.603232, -2.520559, 0.025086, 4.840297, 3.097736, 0.784692, 2.397304, 0.305680, -2.447023, -2.189225, -0.969430, 1.493920, 1.075302, -0.067036, 1.552955, -0.465664, -1.123212, -0.728675, -0.749297, 0.706532, -1.319413, -1.125295, 1.821698, 0.137079, -1.636830, -0.331892, -1.192912, 0.536431, 0.858999, -1.610003, -1.506221, 2.193912, 0.672625, 0.448160, -0.996383, -1.689102, -0.126877, 5.714808, -1.373709, 0.686600, 0.351253, -0.133848, 1.320625, -0.884176, 1.701358, 0.211984, -1.276537, -0.437960, -0.997288, 1.922952, -0.103601, -0.280217, -3.679128, 0.637149, -1.101487, 2.051099, 1.635809, -0.314859, 2.362195, 2.349697, -1.089012, 2.470410, 0.708995, -0.304216, 2.844971, 0.791556, -0.444637, 0.558225, 0.479242, 0.974241, 2.825071, 1.306728, 0.078313, 0.698186, 2.259185, 2.549525, -0.517508, 1.916198, 0.455696, 1.226566, -1.129225, 0.448858, -0.044081, -0.379127, 1.051160, -2.174675, -0.091759, 0.735747, 2.523257, -0.902130, -1.711550, -0.054244, 1.433700, 0.505774, 1.657618, 0.392086, 0.526231, 1.710216, 0.001930, 0.739513, -1.474645, 1.431480, -4.844274, 0.771516, 8.317552, 0.171193, -0.780930, 1.585272, -2.259208, 0.890983, -1.644048, 0.793156, -1.216816, -1.476947, -1.916819, -0.577669, 0.435558, 0.042042, 1.585200, -3.304183, 0.816374, 1.643369, 2.185262, -4.168428, -1.474942, -1.652446, 1.270458, -2.830683, 2.015999, -0.219767, -0.819199, 0.177299, -0.177188, 8.587397, 0.417928, 1.846660, 0.958334, -0.446011, -1.990049, 1.178265, 1.220160, -0.392036, 1.025705, -2.985824, 0.119768, -3.222000, 1.787709, -0.567594, -0.899789, -0.806125, -1.066476, -0.087982, -0.146052, -1.054549, 0.050203, 0.174088, -0.530262, -0.432011, -0.981290, -2.461792, 0.434536, 0.645516, -2.864508, -0.226271, 0.076930, 0.691487, -1.207616, -0.840917, 0.031664, -0.244416, -0.005431, -1.305514, 1.818595, 1.123752, -1.502631, -0.217228, 1.076120, -3.123597, -2.397233, 0.748559, 0.946289, -1.433505, -1.423255, 2.287119, -1.483384, -0.653202, -1.123917, -3.034894, -0.068661, 1.750771, 3.814820, -0.543904, -2.120688, 0.588598, -1.713928, -1.987432, 0.561580, -1.330059, 1.559782, 0.092751, 2.162706, -1.395874, -1.907609, 0.188079, 1.494886, -1.341706, -1.462309, -1.755446, -0.664524, -0.508806, 1.211292, 1.618556, -1.989684, 1.365123, -3.682937, 1.727478, 4.240307, -0.660610, -1.706325, 0.999625, 0.635882, -0.853538, -0.408396, -0.089295, -0.027076, -3.028868, -0.055628, 1.818635, -0.340091, -0.737781, -2.827969, 0.061214, -3.141003, 1.612542, -0.221340, -0.929781, -0.728779, 2.008737, 1.408174, -0.920326, -0.653913, -3.041245, 4.198066, 0.342775, -0.846428, 2.108423, -4.409381, 0.387547, -1.371905, 0.054314, 1.987593, -0.481697, 1.530847, -2.225521, 0.796091, 0.499600, 0.113369, 1.249683, -2.361308, 0.537096, 0.347104, 0.889500, -2.390798, 0.981587, -0.782676, -0.177560, -1.397803, 2.599752, 0.272461, 0.764350, -1.675289, -6.649379, 1.849518, 0.405324, 1.632783, -0.265679, -0.399341, 3.205031, 1.300731, 0.026923, 0.748761, -0.405800, -0.083681, -0.470509, -0.623445, -1.020196, 2.729735, -1.121918, -0.092062, -1.711041, -0.705481, 2.327773, -3.161011, -0.284439, -1.496094, 0.119383, 1.386817, -0.770567, 2.041225, -0.222127, -4.341688, 1.785259, -0.743285, 0.297729, 2.546512, 0.138978, -1.180040, 1.914775, 1.235418, 1.610988, -0.544882, -3.502224, -0.664578, 2.622726, -1.956743, 0.572299, -0.548901, -1.306587, -0.785378, 0.914924, 0.783605, 0.050168, 0.140696, -0.740745, -0.447390, 2.542762, 0.579260, 2.657335, -0.486435, 1.883910, -0.114313, -1.502129, 1.014179, 0.511371, -1.522515, -0.871545, -2.773058, 0.282133, -26.943012, 1.947267, 0.995500, -0.375220, -0.263242, 1.126674, 0.268782, -0.826598, 0.771542, 0.601364, -1.670286, -0.794151, -1.052049, 1.664418, -1.771948, -1.081269, 3.088852, -3.009343, -0.591919, 0.359618, -1.442897, 1.283059, -1.601421, 0.059713, -1.544779, 3.660547, -0.505520, -0.916645, 0.456173, 0.726471, -1.988427, -2.519803, -0.745822, -2.397226, -1.916228, -0.335790, 0.921118, -0.033017, -0.358666, 2.200879, -2.152330, 0.277213, 0.005560, 0.110227, -0.299637, -1.675720, -1.592974, 1.257089, -0.001712, -2.691953, 1.374281, -0.238531, 0.113042, 0.792293, 2.955853, 0.360843, -0.801828, 0.655462, -0.418724, 0.435561, -1.148878, 3.189636, 0.903138, -1.041226, 0.955873, 0.062271, 0.814551, 3.057136, -0.883728, 2.508814, -0.221000, 1.197242, -2.853786, 0.273554, 1.465235, -0.667575, -0.914718, 0.315029, -0.234952, 0.899639, -2.900770, 10.891487, 1.999561, -0.751676, 1.435429, -0.009011, -0.587682, 2.481852, 0.600284, 0.532765, -0.083498, -1.631364, -0.921569, -0.740134, 0.913858, 1.653027, 2.440396, 0.355527, 1.974421, 1.495195, 1.609850, -0.556871, -2.574747, -0.148762, -0.081312, -1.779047, -1.183734, -3.157973, 1.748138, 0.045026, 2.432301, -1.731196, 2.810618, -3.697318, 1.252985, 3.420933, -3.625082, -3.448531, -1.449746, 1.944590, 1.515184, 1.475356, -1.926787, 0.662388, 0.312225, -0.247869, -1.336650, 1.309450, 1.289840, -1.791841, 2.233339, 1.110332, 1.409653, -0.755719, -2.309618, 4.158283, -1.370105, -1.869566, 1.757159, 1.965715, 1.056489, 0.521358, 1.980252, -0.349643, -1.611036, -0.729387, 1.155615, 0.988922, -0.361319, 1.082129, 0.068815, -0.772796, 1.792016, -0.615467, 1.128533, 0.463058, -1.345695, 3.185494, -1.301041, -1.996305, 0.665943, 1.273877, 1.243384, 2.585500, 0.488780, 0.761487, -0.218512, -0.334899, -2.600352, -0.445336, -1.509099, -0.626762, -2.004987, -0.558542, -0.612695, 0.547286, 4.910222, 0.287499, -1.193723, -2.562821, -1.388086, 1.646432, 1.326577, 1.111498, 0.203925, -1.517875, -3.704810, -1.093996, -2.021580, -1.916675, -0.515574, -1.984882, 10.937584, 1.183303, -0.082892, -1.700246, 1.597455, -1.050352, -0.636202, 0.016098, 1.592791, 0.928570, 3.135559, -0.550963, -3.442023, 0.400463, 0.729963, 1.314300, -2.109090, -2.259105, -2.970544, 0.484482, 1.226580, 1.740525, 1.844398, -1.912322, 1.129187, 1.192271, 0.424892, -0.787637, 0.865984, 0.864021, 1.354559, -0.063926, -0.434077, -0.012006, 2.852866, 0.389863, -0.533737, 3.148972, 1.060689, 1.866251, 1.682504, -0.012799, -0.573761, 1.548298, -1.396003, 0.405621, -2.820714, -2.699893, -0.464518, 0.939136, 1.039604, -1.127164, 0.015904, -0.974856, 3.763283, -1.769051, -2.537759, 1.364036, -2.556907, 0.317924, -0.741344, 0.664915, 0.365745, -1.611049, -4.680942, 0.238727, -1.081296, -0.018157, -0.069627, -0.692939, -1.438060, 0.028996, 0.443964, 0.479003, -1.074597, -0.792180, -1.287570, -0.472070, 1.143060, -1.331187, 0.279843, 1.538364, -0.755012, 1.269352, 0.147700, -1.993458, 2.027213, 1.952567, 0.130689, 0.175577, -1.684089, -2.843986, -1.475662, -1.313473, 0.493337, 0.865873, -1.506814, 0.911230, 4.060201, -0.657823, 2.244580, 0.376390, -0.728367, 0.955567, 1.227401, -1.857505, 2.921495, -0.229956, -0.072513, 0.932423, -0.201619, 0.232971, 1.557939, -0.515363, 0.838789, 1.482790, -1.667081, -0.391275, -0.706493, 1.428702, -2.145041, -0.090843, 1.153879, 2.321257, 0.291841, 2.032717, 1.010728, -0.259707, 1.123002, 1.452603, 0.396588, -1.609307, 2.755708, -1.096434, -1.128434, -0.456643, -1.087247, 1.039796, -0.082646, 0.103324, -2.672513, 0.541997, -0.463013, 0.924998, -1.137337, 1.717439, 1.806631, 2.417997, -2.722397, -0.501058, -1.222010, 1.497933, 0.565792, -2.130436, 0.640929, 2.653448, -1.959907, 0.000840, -0.380516, 0.897905, -2.555002, -1.004683, -0.593022, -2.975895, 1.278403, -0.375218, -0.149386, 2.255414, -1.526381, 0.084594, -3.294236, -1.326490, -0.203012, 0.810917, 0.465711, 0.857732, 0.408031, 0.310734, 1.656951, 0.135821, -1.223429, 1.009970, 0.376411, -1.546335, 3.112256, -1.660400, 1.687610, -1.672755, 0.315959, 1.257159, -0.057022, -1.575822, -0.488777, 2.446592, 2.351879, -0.211651, 2.386171, 0.332149, -2.233296, -1.876446, 0.195934, -1.926995, -1.603126, -3.828640, 0.260395, 0.385531, 1.310519, 1.721206, 0.296907, 1.001025, -1.458293, -3.032516, 1.179443, 4.504854, -1.917630, 0.154737, 0.922710, 0.373369, 0.973977, 0.497264, -1.309954, 0.364134, 0.821203, 3.184717, -0.706484, 1.003727, -2.330777, 0.502921, -0.394737, 2.235528, -4.310393, 0.849241, -0.515099, -1.969563, -0.550761, -2.059675, -1.198608, -1.031207, -2.272766, 0.249279, -0.653474, 0.180790, -1.657860, -0.870616, -0.077415, 1.024495, -3.140102, -1.015593, -0.066455, -0.954831, -3.604165, -0.667273, -1.388813, -1.103314, -2.176858, 0.181914, 0.389964, -0.991440, -2.473201, -3.683666, 0.407281, 0.973368, -0.768065, 1.279742, -1.934132, 0.383385, 1.219248, 0.550082, -0.545345, -1.063584, -0.883715, 1.895950, -0.573758, 0.624612, 0.401298, 0.868632, -1.362146, -0.179727, 1.337189, 0.909851, -0.502053, -0.723174, 0.274857, -3.272782, 2.643730, 1.040499, 0.818118, -2.340259, 0.767800, -0.872570, 0.223991, 2.124008, -1.491909, -2.273498, -1.011411, 1.214753, 2.879524, -1.277860, -1.260172, 0.567704, -1.517100, -1.385336, -4.617663, 1.183306, -0.573399, 0.656246, -0.754075, 0.392937, 1.649950, -0.528149, -0.135442, 1.853639, 0.393270, -0.521959, 0.088236, -1.188602, 0.953215, 2.363008, 1.364805, 0.558522, 0.649260, 0.088176, -2.218788, -3.740898, -0.470999, -0.987547, -2.570537, -0.633499, -0.908846, -0.763746, -0.247464, 0.398668, -0.264671, 0.690039, 0.891171, -2.439893, 2.026531, -0.118626, 0.410479, 0.928528, -6.758152, 0.315290, -1.122024, 0.909448, -3.880399, -0.821637, -0.097316, 1.094775, 0.483831, 1.949865, 0.616885, -1.824979, -1.264061, -1.626864, 1.742028, -1.491169, -3.775957, 1.858886, 0.115915, -1.174716, 2.287612, 1.828963, 0.607532, 1.403317, 1.295260, -0.010620, -2.863109, -0.452950, -0.232644, -1.840987, -1.883705, -0.450756, 1.741748, -0.218979, -2.266348, -0.593941, -0.933037, 0.010402, -2.074483, 2.166774, 3.937597, -2.954117, 0.752764, -2.348191, -0.561915, 1.157428, 0.141908, -0.717537, 0.776393, 0.175925, -2.025991, 0.168681, 0.788793, 1.720917, 0.646435, 2.423590, 0.186302, -0.146719, -0.446881, 2.395269, -5.198894, -0.901929, 0.027377, 0.012715, 0.005252, 0.653947, -0.101728, -1.622818, 2.549720, 2.113362, 0.824165, 1.469637, -0.910084, -0.856566, -1.045887, 1.253957, 0.019382, -1.706803, 1.173757, 3.334522, -1.034507, -2.077802, 1.543029, 1.082566, 0.904124, -2.292025, 2.802828, -1.242614, 0.167377, -2.591544, -0.791183, -1.533554, -0.887509, 0.720978, 2.352231, -1.702183, 0.675630, -1.299956, -2.844064, 0.003719, -1.818623, -1.573444, -0.050925, 1.413208, -2.972257, -2.596563, -1.668879, 1.804994, -1.123652, -0.759027, 0.555984, -0.408789, 1.027710, -2.098943, 1.386197, -2.098082, -0.305885, 0.517045, 1.235609, -0.239477, -1.754854, -2.860306, 3.810205, -4.061375, 6.525562, -1.502322, 0.979582, -2.672280, -0.722794, -0.761116, -0.911209, -0.857385, -1.241742, 1.673461, -0.335826, -2.154589, -0.201959, -1.013601, 1.139557, 3.868553, -2.091437, -0.092244, -1.082958, 0.550138, -0.458324, -0.412855, 1.429083, -0.965382, -0.067656, -1.103344, -0.841873, -1.369830, -0.513873, -1.954285, -0.804106, 1.982196, -1.215416, 2.908003, -2.176613, 2.629941, -0.770963, -0.225980, -0.079823, -0.029128, 1.944940, -1.664493, 1.579839, -0.645574, 1.956723, 2.056866, 1.170755, 0.282791, -2.806349, -0.015250, -0.545786, 1.350799, 4.326220, -0.232130, -1.864140, -2.026012, -1.895816, 0.236812, 0.566187, 0.922909, -3.498955, -1.690579, -0.976886, -2.819652, -0.867696, -2.262519, 0.221791, -1.079175, -0.067272, 0.605917, -0.939698, -0.604690, -0.263042, -0.898258, 0.427297, 0.077779, -2.724524, -1.529292, -0.498150, 1.099533, 0.170517, 0.831057, -2.982569, 1.253065, -2.751751, 2.265109, 1.696212, 1.009590, -1.266789, 0.647445, -1.694958, -0.019201, -0.734654, -0.022089, -1.503616, -0.469148, -0.154751, 1.000041, 1.188490, 0.510484, 0.473362, -3.674450, 0.073823, -0.515428, -0.987592, 0.794154, -0.582627, -1.815529, 1.149576, 0.177125, -0.941142, -0.892184, -0.065409, -0.450944, 0.527143, 2.578118, -2.089118, 1.487622, -0.322834, 0.694984, -3.292696, -1.095167, 0.084412, -0.336131, 1.718490, 1.054931, 0.402755, 0.110611, 0.581030, 0.870269, -0.076126, -0.403352, -0.003785, 0.589630, 2.314747, -1.574928, -0.096184, 2.244779, -1.489247, -1.319940, 3.177969, -2.140591, 0.425897, 1.085643, 1.190120, -3.366844, 1.705391, -0.522894, 0.263463, 2.918571, -0.561851, -0.452033, 1.765589, -0.628013, 0.580821, 0.500394, 1.468545, -1.244172, 1.824252, -0.539581, 2.399555, 1.622275, 0.161135, -1.577280, -0.976519, -0.920564, -1.119612, 0.282427, -2.540531, -1.077090, -1.163355, 2.653575, -0.378440, 0.068285, -3.100437, 0.973931, 2.660982, -0.405911, -0.221837, 0.831700, -1.742345, 1.977760, -0.828174, -0.731623, 1.165439, 0.582277, 2.558103, 2.128608, -1.686338, -0.048350, 3.158402, 0.870736, -0.881156, 5.433671, 0.142794, 0.158623, 0.606935, -2.015232, 2.057729, -1.138699, 0.622851, 0.681134, -5.330796, 0.991994, 0.044579, 2.001621, 0.730195, 0.956073, -0.110057, 0.502674, 0.217331, 0.120163, 0.781175, 1.368709, -2.420993, -0.130430, 0.028031, 1.529119, 1.404342, -0.774836, 0.976970, -0.148665, -0.810735, -0.887423, 2.013502, -0.897528, 1.571385, -0.008383, 0.587428, 1.256854, -1.503410, 0.921428, 0.784695, 0.600209, -1.875112, 0.421278, -0.644875, 0.660149, 0.551328, 2.647580, -2.805653, 0.070194, -0.181113, 0.577706, 2.920263, -2.099920, -1.701728, 1.026577, -0.970308, -1.412308, -0.846952, 0.894402, 1.019806, 2.684441, -0.601777, 3.547955, -0.055353, -0.914555, -1.066879, -0.039697, -2.241604, 0.908233, -1.655504, 0.784147, 1.764261, 1.648813, 0.832601, 2.696937, -3.205015, -1.966464, -1.120578, 0.565785, -0.143854, 2.089412, 1.442338, -0.479699, -0.790053, 0.074845, 1.469679, 0.232747, -2.076254, -0.281494, 0.827660, -0.684334, -1.107358, -0.133235, 1.017254, -0.384948, 1.280981, -0.930045, -0.921105, -1.558795, 0.127375, -1.567876, 0.532821, 1.409253, -1.080656, 2.452451, -2.294327, -1.574199, -1.484760, -0.220872, 2.730867, 0.811399, -0.238392, -0.848654, -0.197067, -2.837629, -0.801398, 0.288724, 2.595055, 0.498444, 0.218231, -0.518959, 1.092926, -0.662425, 1.339937, -0.907665, -0.197190, -0.613547, -1.629007, -0.238709, 0.357297, 3.501794, -1.675147, 1.486766, 0.735359, -0.442967, -0.105438, 2.399523, -2.097277, 1.310113, 2.508687, 1.327647, 2.497625, 2.764615, 0.153949, -2.596467, 1.362896, 0.454628, 1.369634, -0.951836, 1.850208, 0.564333, 1.808473, -2.133248, -2.364481, -1.498736, -1.338814, -0.211370, 1.439009, 0.346441, 1.246948, -2.544048, 0.537346, 0.455500, 1.187719, -2.117737, 1.728455, -0.451546, -0.895454, -0.198955, -2.570833, -0.231905, -0.201090, -2.200789, 1.508802, -0.005641, 0.888191, 0.773606, 0.296514, 2.750696, 0.998073, -2.350559, 0.385073, -0.722224, 3.232554, -0.555466, 2.469613, -0.621966, 0.343913, -1.743786, 2.984197, -0.114192, 1.330646, 0.330090, 1.004636, -0.388806, 0.534908, -1.113315, -0.655712, 0.044088, -0.376111, -1.495334, 1.396304, 0.641600, 3.271334, -3.178414, -0.669201, -2.582852, 1.645419, 0.540461, 0.331414, 1.225434, -0.241126, -0.785214, -1.386897, 2.089353, 1.537059, -2.968950, -2.054803, 1.550492, 0.073438, -6.223676, 0.510720, 1.496452, -1.351471, -1.195973, 2.776203, 0.679208, -0.240022, -0.835032, -2.313000, 0.119870, -0.593088, 0.348416, 2.193747, 1.520391, 2.199650, -0.957386, -1.181147, -0.167809, 0.753372, -0.953912, 0.265204, 0.064691, 0.636637, 0.821186, 1.538177, -3.686851, -0.144751, 1.793468, 1.569461, -0.292569, -0.914937, -2.088454, 1.005811, -0.910524, 0.439879, 1.328168, -0.349991, -5.888283, 0.596823, -1.514071, 1.365590, 2.133192, 3.649516, 1.322269, 1.227857, 0.811110, 0.388887, -0.209151, -0.919356, -0.269549, 0.332280, 0.980510, 0.128268, 0.441788, -1.434218, 0.779928, 1.991361, -0.801857, -0.177272, 0.155561, 1.864503, -0.188135, 0.443639, -0.201392, -3.339523, 0.004105, 1.716572, -0.807478, 2.900543, 1.237759, 1.324246, 0.431000, -1.628002, 0.775048, -3.182475, -1.265094, 0.635110, -3.442352, 1.492518, 2.690553, 0.904908, -0.579639, 0.497659, -0.484186, -1.314447, -1.616720, -1.006984, 1.163017, -2.161178, 0.830324, -3.379968, -1.966440, -0.237778, 0.294197, -0.255212, -1.485385, 1.590396, -0.970986, 0.815678, -0.565780, 0.765599, -0.579318, -4.809091, 1.025935, 0.239194, -1.943313, -1.061139, 1.005775, 1.067468, -2.438157, 0.836673, 3.396852, -0.050520, 0.135852, 0.473968, -0.147873, 0.170645, -2.914069, -1.719983, -0.259775, 1.541576, -1.214400, 2.774303, -0.243318, 0.546123, 1.026875, 0.803985, -1.588696, 1.601805, 0.223480, 0.261121, 2.564875, 0.269717, -1.855639, -1.292171, -2.966914, 1.832010, 0.865697, -1.470347, -2.289701, -1.025450, 1.778352, 0.709166, -0.841818, -1.011234, -1.655023, -1.304637, -2.845899, 2.109060, 0.490694, -0.554004, -0.603971, 2.273292, 2.756260, 0.654454, 1.722688, -0.533683, -1.680390, 1.645834, 3.247320, 3.622413, -0.011748, -0.446426, -1.015927, 1.978297, 0.093600, 0.309903, -1.602069, 1.275189, -2.761825, 0.222209, -0.531991, -1.257954, -0.675513, -1.324622, -1.133766, -1.195737, -1.083412, 0.394430, 0.766754, -1.259084, -1.275333, -1.115739, -2.586273, 0.477633, 0.823651, -0.393242, -0.378602, 3.018721, 0.094792, 1.576330, -0.092349, 1.915663, 1.527587, 2.498819, 2.451694, -1.046947, -0.252382, -1.892246, -1.338359, 3.089607, 1.443579, -1.052285, -0.664112, -1.388935, 2.425827, 1.507866, -4.611504, 1.285874, -0.190258, 1.272828, 0.272262, 0.953322, -9.179953, 1.193864, 0.965136, -1.622129, 0.291771, -0.943462, 1.972639, -2.435059, -2.278618, 1.818903, 0.539652, -0.396332, 0.881990, 0.799462, 0.343961, -1.754548, -1.114249, -1.897099, -0.147805, -2.150880, -0.000791, -1.300718, -3.832193, -0.780065, -1.945696, -0.030858, 0.000042, 0.805455, 2.447916, 1.722992, 0.645666, -2.109492, 2.115638, -0.315772, -0.850652, -0.936574, 0.623982, 3.587168, 0.475998, 1.707327, -0.216391, 0.332070, -4.023162, 1.608437, -2.313433, 0.220340, 2.958182, 1.409508, 0.431645, 2.044839, 1.702535, -0.292866, 0.813356, 0.400711, -0.594963, 1.127115, 0.228125, -1.051682, -1.838791, 1.764836, 2.409988, -2.069432, 2.133219, 0.451490, -0.315999, -0.431537, 0.789534, 0.334011, -0.943850, -2.796613, 0.327788, -0.906255, 1.931957, 0.522279, -0.413914, 1.412995, 0.679381, -0.042195, -2.019298, 0.345345, 1.177390, -1.735565, 2.314764, 0.146042, -3.456690, -2.104620, 2.330595, 0.024386, 0.955444, 0.700547, 1.084794, -0.012142, 1.254361, -0.973162, -1.171974, 1.185098, -1.160176, -0.593567, 1.845748, -0.596058, 2.846261, -0.244734, -1.378718, -0.462473, -2.080487, 0.281841, 1.384994, -0.871585, 0.513520, 2.387744, 0.941064, -1.231176, -0.448849, -0.052633, 0.448985, 0.817220, 0.193013, 1.681891, -0.783407, -2.896904, 2.945495, 2.379376, 3.305279, -0.913598, -1.055743, 1.049574, -1.227361, 0.528382, 0.199938, 0.744414, -0.433807, -2.558005, -2.157215, 0.963974, -1.745908, -1.255904, 1.547944, -1.196803, 0.286619, 0.908697, -2.191496, 0.680540, -0.226127, 1.272491, -0.747410, 1.405450, -1.639263, -1.129315, 2.574672, 3.253188, -1.135827, -1.554247, 6.512227, 1.753033, 0.823991, -1.835580, -0.983194, -0.124638, -0.022031, 0.961799, 0.278102, 0.214496, -0.402409, -0.732952, 0.021326, -0.049979, 3.023667, 0.962861, 0.732301, 0.545412, -4.248863, 0.301756, -1.325999, -0.260541, -0.856889, -2.518301, 0.555524, -0.147469, -2.487039, 3.068854, -1.992702, -1.467270, -1.067934, 0.004117, -0.854934, 1.883919, -0.786242, 1.432566, 2.126631, 0.402890, 1.339862, -0.364170, -0.067614, 0.919690, -0.946988, 0.548263, -1.141940, -0.144215, -1.553461, -1.630635, -2.944906, 1.639079, 0.876025, -0.813501, 2.072524, -2.988084, 1.245615, 1.588284, 2.049222, 3.446004, 1.397513, -0.983097, 0.600800, 1.770925, -0.023363, -2.459765, -0.360136, -3.184824, 0.099425, -0.029557, -2.068456, -2.332472, -0.842436, 1.643009, 0.654029, 0.474408, 0.444330, -0.097360, -1.171367, -1.889962, 0.326767, 0.592943, -1.331804, 0.875488, -1.152579, 1.449305, -1.075288, 0.005322, 0.690454, 1.979462, 1.497575, -1.565452, -0.646482, -1.231740, -0.468063, 0.026075, 1.132621, -0.163886, -4.350859, -0.162999, -1.589626, 0.918930, 2.337845, -3.165326, 1.935462, -0.262769, -0.543573, -1.576134, 1.592178, -0.567114, -0.999020, -1.033293, -0.094483, 1.341990, 3.398355, 1.109368, -1.159549, -1.815267, -1.440461, -0.481400, 0.583820, 1.289227, -0.128962, -0.791260, 1.091561, -1.030977, 2.240554, 1.209297, -1.108794, -1.177909, -1.032935, -1.174677, -0.174780, 1.738330, -0.852252, 0.423968, 0.159460, -0.752635, 3.254423, -2.653491, 2.442864, 2.021538, 1.303416, -1.141996, 0.336794, -0.213280, 1.275212, -2.173024, 1.875058, -0.671852, -0.158650, -0.674296, -0.202623, 1.995634, -2.191850, 1.883953, -0.336998, -1.238019, 0.541431, 3.305144, 0.508988, 0.442913, -0.243398, -0.671488, 2.152217, 0.667315, -0.198660, 0.038538, 1.180478, -0.690591, -1.226552, -1.727843, -0.004452, 0.568615, 0.672716, -3.409685, -1.916769, -5.679497, -1.047065, 2.928753, 0.270798, -2.017706, 0.235939, 0.796101, 0.556786, 0.606815, 2.368180, 1.899704, -2.680903, -0.161020, -2.383109, 3.612562, -1.170289, 2.787203, -0.194454, 0.293056, -1.171062, 1.410911, 0.924794, 1.064608, 0.280578, 0.916745, 1.811764, 3.447900, 0.579738, 0.847980, -0.238627, 1.592027, -1.497012, -0.859788, 0.591069, -0.158362, -1.913070, -0.523074, 0.404998, 1.078486, -0.227280, 3.061089, -2.930329, -3.051719, 0.243530, 1.025823, 0.923059, -0.768734, -0.191051, 0.014987, -1.984347, 0.293401, -2.607561, 1.919448, 1.775906, -0.505613, -0.935636, -2.807077, -1.265656, -0.166470, 1.108056, -3.304356, -0.859128, 0.256328, -1.324335, -0.095796, -1.686727, 0.520889, -1.217061, 3.472981, -0.801870, -0.179432, -1.440508, 2.409567, 3.577608, -1.589138, 1.651056, -0.551437, 1.384983, -0.337885, 1.555722, 2.393574, 3.072235, -0.135722, -0.258120, -0.878903, -1.838472, -0.335688, -1.138918, 2.891968, 0.375865, 1.447449, -1.276451, -0.781883, 2.368396, -2.391079, 1.875496, 0.306684, 2.814644, -1.086365, -2.282871, 1.473142, -2.381812, -0.086461, -1.239312, 1.242444, 0.206965, 0.585810, 0.195624, -1.651873, 2.583272, -0.446626, -0.496205, -1.813773, 1.460548, 0.687077, 0.128585, 1.167922, 1.050403, 3.267393, -0.148534, 0.143266, -0.469868, -3.007697, -1.975590, 0.431214, -1.631661, 1.333369, -1.787341, -1.832982, -0.767213, 0.469098, -0.397199, 0.525026, 0.400948, -3.660139, -1.129983, 0.347222, -0.579625, 1.167796, -0.135037, 2.250765, 0.716468, -0.021767, -2.187217, 3.340802, 0.250752, -0.200596, 1.184929, -5.449180, -0.588696, 0.933857, -4.186715, -1.178003, 2.194058, 0.318955, 1.976931, 0.966189, 0.770698, -2.781453, -2.597327, -0.397811, 1.257845, 2.107651, -2.781290, -2.204887, 0.622558, 2.261195, -1.756650, 2.628099, 1.156767, -1.292722, -2.604963, -0.427024, -1.993675, 1.186585, 1.375645, 0.584989, 0.813572, 0.484206, 1.400198, 1.011191, -0.457454, 0.431162, 1.074501, -4.307183, -0.939692, -1.439165, 1.343590, 2.248487, -1.706700, 0.860494, -1.267403, 0.991206, 0.790562, 3.558558, 1.035073, -0.183890, -2.465762, 2.085005, -0.439460, -1.367476, -1.726921, 2.538736, 2.148680, -1.555413, -2.933472, 2.298046, 0.778528, 0.004253, 0.384853, 1.302090, 1.833395, 1.504384, 2.349369, 0.498941, 0.377971, 0.903127, -1.714386, 1.808365, 0.401536, -1.061390, 1.349846, -1.273103, -0.958734, -4.003449, 1.556067, -0.588390, -0.763635, 1.670594, -0.111270, -1.567189, 0.124333, -2.372967, 2.483768, 2.342311, -0.635273, 2.274959, -1.561237, -0.795889, 3.526085, 0.525109, -3.311819, -1.773293, -2.193236, 2.924568, 0.621321, 1.345457, 0.065248, -0.632541, 0.017810, 1.961737, -0.078699, 1.047366, 1.972132, 1.459933, 1.816787, 0.169214, 2.447540, -1.006916, 1.575598, 2.228669, 1.292875, 0.412555, 1.329749, -0.697624, -0.298773, 2.185552, -1.368109, 1.348547, 1.603870, -1.370027, -0.277771, 1.377412, 0.442057, -1.199049, 1.792844, -0.991395, 0.269774, -1.861074, -1.239275, 1.189940, 0.530348, -1.113256, 1.715649, 2.073871, -0.560494, -0.075858, -0.088142, -2.563752, -0.006378, -2.288894, 0.969853, -2.207385, 1.185278, -0.296590, 3.099877, -0.166058, -4.040632, -0.869314, -0.657492, 0.128895, 0.859182, -1.401345, 0.116238, 0.440015, -1.148709, 1.511427, -2.100009, 0.440736, -2.851284, -1.550734, 1.587870, -1.926517, -1.622249, 0.362452, 0.393982, -0.589483, -0.028004, -0.689772, 0.956467, 0.254517, 1.234098, -0.569437, -1.736388, 1.245260, 2.599948, 0.029409, 0.954440, 0.952267, -0.061380, 1.054168, 3.325345, 0.831169, 0.006168, -2.285375, -1.643000, 2.221149, 2.165285, 0.602395, -1.775944, -1.016710, 1.076364, -0.484446, -0.370944, -0.481427, 1.652357, 0.379384, 2.971716, -0.467889, 0.796451, 1.967816, 0.599432, 0.234169, 0.459560, 0.644779, 1.913226, -1.753372, 0.740245, 0.276683, -3.648571, -1.848193, -0.744854, 1.631157, 4.498623, 1.637381, 1.898848, -0.083583, -0.153889, -1.734444, 1.382062, -2.935525, 8.032228, 1.329467, -0.673482, -1.722037, 0.504168, -1.629518, 0.466105, 1.766385, 2.825903, -1.433709, -2.023616, 1.084171, 0.101056, -0.245807, 1.811927, -2.314635, 0.898469, -0.996189, 2.491988, 1.728794, -1.631869, 1.359730, 0.318513, -2.062926, -3.121436, 0.557902, -2.539874, -1.457490, 0.280348, -1.866082, -2.761239, -0.655958, 0.704248, 2.974621, -2.696070, 0.992441, -0.275967, -0.623660, 1.204403, 0.438535, -2.725973, 0.280349, 0.460025, -2.209344, -2.415729, -1.851040, 3.049643, 0.707512, 0.050940, 2.559838, -0.988853, 0.171449, -0.343654, -1.355067, 0.663537, 0.685152, 0.458565, -2.712296, 2.219773, -2.099763, -0.631212, -1.383506, 1.134895, 1.109969, 1.936868, 1.218190, -2.372160, -2.198699, -1.117006, -0.035712, -1.748089, 0.579812, 1.111341, 1.359734, 1.213473, 1.989610, 0.369072, 0.192755, -1.581744, 1.194623, -2.739968, -1.546148, 3.911412, -0.394406, -0.627090, -0.957422, -0.355542, -0.909030, -2.104877, 1.044099, 0.480431, -0.838496, 1.587747, 0.798822, 0.652407, 2.037358, -0.056508, -1.414758, -0.086790, -1.121325, 1.122403, 1.669306, 2.035714, -0.269159, -3.826930, -0.235112, -1.695780, -0.398885, -0.197627, -0.910344, 1.833906, -1.359157, 0.417122, 0.397929, 3.197263, -1.990909, -10.345819, -0.796384, 0.827685, -3.047179, -2.074122, -1.859646, -2.827106, 1.286799, -3.407764, -0.257633, -1.792917, -1.726816, 0.072984, 1.012066, -0.526178, -0.272112, 1.060727, -0.330206, -0.610387, 1.074508, -0.536489, 0.489240, -0.099734, 0.628324, -2.983965, 0.941947, 2.500448, 1.332715, 0.284890, -1.083395, 0.012050, 0.028791, 1.571663, 0.851643, -0.147082, -0.702242, 0.288649, 4.333088, -2.094810, -1.181755, 0.154108, 2.446234, -0.844859, 0.775269, 0.940873, -2.585838, -0.907137, 1.847467, 2.794644, 0.467335, -5.823781, -0.234167, -2.143270, -3.499144, -0.217149, 1.157717, 1.193232, -1.152372, 1.913921, 0.686949, -1.665765, -0.626728, -3.686383, 0.242325, 2.319199, -0.805866, -0.814822, -2.567696, -0.763215, 1.596967, 0.506704, -0.221747, 1.634145, -0.042335, -6.479886, -0.780314, 2.458230, 1.516087, 0.357523, -0.200469, 1.723241, 1.960635, -1.998756, -0.632013, 0.338134, -0.954243, 2.203972, 1.709370, -1.285704, 0.509672, -1.389535, 0.565242, 0.630339, 2.338622, -1.926264, -0.267491, -0.774171, 0.423991, -0.432595, -1.668700, -1.206680, 1.769401, 0.682602, 0.387151, -1.169134, -1.961097, 0.521347, 1.030647, -0.850463, -1.670901, 0.320442, 0.870508, 0.266324, -2.534516, 2.353228, -2.028431, -1.092895, 0.823078, -3.300803, -0.905493, -0.498755, -0.083098, 0.134747, 1.126226, -0.206224, -0.465925, 1.676973, 0.226049, -0.679422, 1.636569, -1.207536, -2.509265, 1.030790, 0.094372, -3.540144, -0.260700, -0.251626, 0.870629, -0.965907, 0.189883, -1.507507, -3.256093, -1.355452, -0.515230, 0.603112, -1.958845, -1.242684, -3.519969, -0.119781, -1.800199, 0.362269, 1.003944, -0.733221, -3.117880, -1.978782, -2.750227, 0.628010, 0.834023, 1.378811, 0.721543, 1.640973, -0.208344, -0.871235, 2.310358, -2.721220, -0.248023, 3.266030, -2.627601, 2.405243, 0.034087, 0.616138, -1.485607, -3.443488, 0.122094, -0.339027, 2.636119, -0.520162, -0.845279, -0.433359, 4.289217, -1.461683, -2.912294, 1.157770, -0.072004, -1.430300, -0.518065, 0.848698, 1.195008, 1.465089, 1.246130, -3.653644, 1.968034, -0.055597, 0.686380, 0.139687, 3.673851, 0.591359, -0.096465, 0.772135, -1.569232, -0.224120, 1.321505, 1.987114, -0.279955, -0.609099, 0.100604, 1.882433, 1.155056, 0.589389, 2.115252, 1.120671, 0.971936, -3.108589, 1.296618, -0.871856, 0.220171, 0.492959, 0.178675, 2.086147, 1.167586, 0.006426, -1.481592, -0.752377, 1.132332, -2.913472, -0.529229, -1.036058, 0.311685, -1.022353, -0.715158, -0.308950, -1.048710, 0.525816, 2.266930, 0.901488, 0.781013, -0.861028, 0.214446, 1.634781, -2.360174, 0.209138, -0.023756, 0.834960, -1.243474, 1.813794, 0.411667, -0.503325, 1.657814, -0.658775, -0.429320, 0.879727, -0.344314, 0.517012, -0.041244, 1.911083, -1.361798, -2.262503, -0.125114, -1.859583, 0.162502, -0.145491, -1.907688, -1.083771, 1.522410, -1.053662, -2.348332, -1.029892, -1.759236, 1.863647, 1.120211, 0.716685, -0.467506, 1.255322, -1.252031, 0.646594, -0.172564, -1.936044, -2.740171, 1.214675, 1.419253, -2.031842, -0.598199, -0.056713, 0.328540, -0.144430, 0.681323, 1.078133, -0.266249, 0.647757, -0.277778, 2.481803, 0.399793, 1.677046, -3.165335, 1.663298, 0.981927, -2.690334, -2.536687, -0.046288, -1.993745, -2.154355, -2.084886, -1.682671, -0.510585, -1.151454, -1.231588, -0.730014, -2.252337, -0.175934, 1.438152, 0.703790, 0.091381, -0.226761, -1.542531, 0.349996, -0.507521, 0.876646, -1.783002, 2.163898, 1.904030, -1.513281, -0.666223, -0.145403, -0.304008, 0.472697, -0.251674, -0.699141, 1.437354, 0.894560, 1.408713, -0.367863, -3.061508, 1.625146, -1.152143, -0.360476, -1.491743, 1.101422, 0.997161, -1.990891, 0.091491, 1.926685, 0.341844, 0.450564, -1.216493, -2.320588, -2.028212, 0.037600, -0.969572, -1.662101, -1.113374, 0.952514, 0.703434, 2.289342, 1.759977, 0.639049, 1.110425, -2.811371, 1.425214, 0.513256, 1.155478, 0.563762, -1.794843, 3.703616, 1.596296, -1.570067, 1.446437, -1.243573, -0.149773, 0.239586, 0.629837, -0.757124, 1.040002, -0.702845, 1.432802, -0.919857, -0.847647, 0.776140, 0.350346, -0.424403, 2.288020, -0.764005, 0.927623, 0.732643, -0.722699, -2.137658, 1.106374, -0.961683, -0.022159, -1.673372, 2.340934, -1.913663, -0.286280, 0.157772, -0.299253, 0.324698, 0.935570, -0.192480, -3.157064, -2.161556, -0.104483, 0.436096, 1.686085, 0.661099, 0.259927, -0.083087, -0.331702, -1.241498, -1.299620, -0.169502, -2.640443, -1.188181, 1.350742, -1.958650, -0.967032, 0.709098, 0.532227, 3.951190, 1.688368, 0.605110, -0.735107, 0.690662, 1.352871, 2.514204, 4.137648, 1.381989, -0.879419, 1.455069, 0.820441, -1.080353, 1.618252, -0.589761, -0.819875, -0.780784, 0.071111, -0.862547, -1.600801, -0.283200, 1.267667, -0.058537, -3.001881, 1.718999, 0.039207, -0.471396, -1.858776, 2.247664, -0.282785, 0.356052, 1.806696, -2.924471, -0.630809, -1.387571, 1.156041, -0.707393, -0.421613, -1.777457, -0.372323, -1.390987, -0.298395, 0.491878, -1.456836, -0.646174, -0.912228, -1.040814, 1.018844, -3.066530, -1.699523, -1.227899, -2.540288, 2.112853, 0.551650, 1.739899, 0.508044, -1.674967, 0.007424, 0.273819, -1.379015, -2.258660, 2.093238, -0.269717, 2.135967, 0.554894, -4.862602, 0.403414, 1.784584, -0.607983, -0.754711, -2.560575, 1.873582, 0.519547, 0.662227, 1.440363, -2.762729, -0.950051, 0.833175, 1.800522, -1.254883, 3.032549, 0.313758, 1.150326, -0.947803, 0.188012, -5.928670, 0.860420, -1.445431, 2.212289, -0.620558, -0.848972, 0.998138, -0.842959, -1.301280, -0.186356, 0.721201, -0.689276, -1.068574, 1.181227, 0.725315, -0.492998, 1.629001, -1.054909, 2.844236, -0.348600, -0.540042, 2.060351, -1.458005, 1.092593, -1.638849, -0.366834, -1.199931, 2.062175, 1.491682, -0.677772, -0.804922, -1.459533, 0.312466, 1.470264, 1.401966, 0.165094, -1.124756, -0.272886, 0.294967, -3.168278, 0.447026, -1.721222, 1.331578, -0.296635, -0.493381, -2.273772, 1.680882, -0.251190, 1.727859, -0.125792, -0.138742, -2.155842, 0.303363, 1.732968, 1.289022, 0.059376, 1.425003, 0.591880, -0.409793, -2.310584, 0.329457, -1.593862, 0.156367, -3.533641, -0.738178, -0.600709, -1.993809, -1.257213, -1.873214, 0.118924, 1.594824, 0.734960, -0.335038, 0.911282, -0.486446, 1.029378, 0.792031, 1.580075, 1.268993, 0.541517, -0.537808, 0.253363, 1.640724, -0.829691, 1.295986, 0.592495, 0.474230, -1.604008, -3.370971, 2.434560, -0.244377, 0.736183, 1.336372, 0.282443, -1.538506, 0.877491, 2.405556, 2.700866, 0.161710, -0.831850, 1.367040, -0.964631, 0.162463, 0.797982, -0.896789, -1.564666, 2.302680, 2.206859, -0.236026, -2.542495, -1.297982, -1.266405, 2.058210, 1.408397, -0.732165, 0.866827, -0.404816, 0.205700, 1.771121, 0.329369, -0.527325, -3.710169, 0.928608, 1.971085, -0.629562, -0.142901, -1.235813, 0.033189, -1.654015, -1.717465, 1.444321, -0.970576, 1.333245, 0.316356, -0.559113, -1.536770, -1.221961, -0.236194, -2.713904, 1.561908, 0.549531, 2.427177, 0.743518, -1.251259, 1.159088, 1.531313, -2.054123, -0.121870, -0.735877, 0.613076, 0.061634, 0.791451, -0.418798, -0.353790, -2.750365, -0.335011, -0.806334, 2.259530, 1.895240, -1.027326, 0.580512, -2.093052, 4.493968, -3.208963, 0.151161, -0.620175, -0.954287, -1.633909, -0.543642, -0.937648, -3.595685, -2.022834, -0.843202, -0.818238, 1.229040, -0.084374, -1.927831, 2.984450, 1.392313, 0.512093, -0.250420, -1.257843, 1.695182, 0.376897, 1.391729, -1.856572, -0.275027, -0.270027, -2.853746, 0.717726, -2.140739, 0.550229, -1.774874, 1.074416, 0.352224, 0.223556, -0.254174, 0.730164, 0.673305, 0.502584, -0.126746, 3.259682, 1.314091, -0.251725, 2.246045, 1.809486, -1.109016, -1.265288, -0.020519, 1.468189, -0.056720, -1.800602, -1.475459, -2.710105, 1.906110, 0.197875, 1.211238, -1.030333, 2.568016, 4.726199, 1.455643, -1.406735, 0.125682, -2.438629, 0.663524, -2.310382, 0.313568, 0.844070, -0.749174, -1.880922, 1.743759, 0.528783, -1.526943, -3.150258, 0.424008, -2.298711, 0.589580, 1.325055, 0.218228, -2.742978, -0.011931, 0.172254, -0.059231, -3.013192, 2.519255, -0.317165, -0.429024, 1.866894, -0.411766, 0.096046, -0.343778, 1.481043, 1.154165, -0.866295, 1.419388, 2.962029, -3.715078, 0.980836, 1.903221, 0.349094, -0.565781, -0.302156, -0.928041, 0.006622, -0.295362, 1.123859, -0.271984, 0.857013, -1.092173, 0.748905, 0.973096, -3.126032, 1.077309, 0.597780, -0.179388, 0.118135, -0.435285, 1.807033, 2.569278, -1.103961, -1.658203, -1.114181, -3.346684, -1.036287, 1.735447, -0.008384, -1.309239, -0.149531, -0.720216, 0.165458, 2.016681, 0.902350, -0.987751, 1.810139, -2.990412, 1.655684, 0.073364, -0.018267, -15.890377, 1.605731, -0.200125, 1.847888, 0.107478, 0.299769, -1.568345, 1.292254, -4.000039, -0.130882, 1.948626, -0.187894, 0.779199, -1.546185, 1.299067, -1.526557, 2.252347, -0.622256, -0.335947, 1.197534, 0.948126, -1.156192, 0.112613, -0.648274, 1.190632, -0.332018, 1.824138, 0.295704, 0.086898, 0.212632, -1.849817, -0.494434, -0.685018, 0.587919, 1.077813, -0.110394, -0.048261, 0.329976, -1.213555, -0.728337, 2.018705, 0.968140, 1.196094, -1.172107, 1.532893, 1.033232, 1.173709, -2.093134, 0.631497, -1.686658, -0.125552, 1.447971, -1.023348, 0.033178, 1.684072, -3.614491, 2.426406, 0.881374, -2.132526, 0.218011, 0.876277, -0.079876, -1.178015, 1.049176, 0.994832, -0.411852, -0.638060, 0.785967, 0.293327, 2.419301, -0.859055, 0.185743, 0.196676, -3.193673, -1.412443, -1.207662, 0.240055, 0.838873, -1.220432, -2.517108, 0.517194, 2.698374, -0.636612, -1.815033, -0.867607, 0.417273, 1.320199, -0.605956, -1.022787, -0.140377, -0.299150, 0.526502, 2.765671, 0.892078, -0.705774, 1.326158, -0.860298, 0.809407, -0.115889, 0.414584, 1.086166, -0.568674, -1.643514, 1.066131, 0.607676, -0.679681, -1.080888, -1.422895, 0.086499, -0.032735, 0.706417, -1.029094, 0.681382, 1.216894, -1.109293, -2.394442, -1.575637], - "gemma:latest": [-7.841464, 0.767280, -3.694498, -0.001570, 5.630982, 0.547684, 0.593437, 1.212109, -4.688223, 2.092025, -0.195202, -3.266952, -8.518199, 0.070584, 8.807918, 5.111681, 1.993832, 2.246897, 3.247146, 1.761566, -2.598649, -4.455876, -0.426431, -1.164721, -4.319394, -2.370344, -2.636060, -9.681966, 0.902103, -3.334890, 5.026929, 2.570854, 3.294873, -1.646322, 0.686373, -2.270081, 0.412342, -0.825905, 5.388302, 2.884646, 3.659441, 0.431944, -1.809620, 2.615254, -2.043983, -2.777713, 2.215231, -2.675906, -6.405007, -0.564862, 5.054352, 1.449780, -1.436352, 4.117354, -6.379251, 5.407580, -0.150039, 0.914680, 0.118216, 0.678776, -0.758149, -1.420658, -2.271526, -3.702099, 4.400447, -2.201090, -3.284660, -4.731477, -2.380802, 6.390813, 1.701460, -0.104133, 3.314382, -5.486407, -0.497424, -0.284862, 3.509625, -5.719083, 0.680101, -0.510482, 23.860937, 0.594281, -2.543869, -3.641017, 2.601214, -5.317530, -2.042041, 9.326493, -3.053976, 3.848793, -1.276841, 3.612005, -3.855268, -19.251253, -1.177541, -2.570348, 4.785016, -2.585326, 2.770618, -3.863601, 1.766158, -2.165138, -2.194496, -4.630305, -4.860158, 1.823642, -4.802298, -5.029325, -0.455342, 0.265742, -2.935017, -1.257262, -2.160555, -3.854411, 1.721239, -4.565334, 4.482922, 5.269161, 7.393859, 2.433737, -3.377688, -3.388730, 4.868166, -0.695461, 0.054102, 8.874551, 6.244246, 3.253466, -1.038608, 0.156654, 1.452707, 0.270274, 3.716397, -0.122048, -0.453325, 0.174775, 1.977967, -0.052099, 2.632564, -0.436857, 2.643586, -0.714668, -2.953247, -1.018465, 2.830314, 1.584697, 5.180400, 24.356844, 1.066748, 2.112376, -1.408623, 0.145132, 6.618137, 0.286551, 2.925483, -0.982488, 0.942114, -4.367652, -3.424205, -2.764689, 1.796536, -1.796484, -5.243772, -5.039718, 2.987508, -5.299181, -3.224602, 0.706269, -1.158171, 1.424140, -0.836250, 12.712502, 3.236430, -1.768288, -1.191801, -1.979457, -3.468471, 2.570443, -6.846710, 3.446858, -5.207852, -1.363930, 8.023638, -0.245742, 7.686746, 1.518655, -0.701010, 5.023693, -4.301249, 1.426088, 0.490979, -4.402451, 2.674457, -0.641645, 2.394136, 3.862517, 0.654314, -2.431630, 1.330356, 1.102203, -4.609156, 6.544267, 0.908221, 4.097334, 1.930546, 0.878689, -3.173191, 3.115578, 0.266788, 1.188245, 0.096632, 0.762899, 4.334242, 2.847873, -3.059559, -0.996375, 6.134145, 3.063574, 0.923209, -0.568771, 2.497131, 4.024843, -0.112233, -1.995722, 0.658854, -4.985031, 13.744526, -3.286121, -4.657845, 1.674132, -0.948745, -0.680255, -2.020968, 1.239926, -2.372422, -2.296769, 1.042987, -2.033823, -4.339974, -2.441006, 10.738417, 2.673922, -0.043110, 1.825774, -6.405427, -2.097725, -6.020026, 3.646997, -5.520285, 2.700456, -6.084919, 2.107202, 25.698597, 0.423951, 1.604773, -3.311516, -0.918613, -1.273135, 0.130150, 1.867079, 1.428254, -7.172602, 0.594419, -5.660052, 0.378981, -7.878116, 2.772577, -0.467461, 4.479719, 2.089232, -3.973105, -3.616508, 4.947463, -1.895533, 0.616217, 0.992185, 1.378321, -4.616071, -6.274027, 3.722451, 6.198734, -2.148652, 6.459441, -2.609032, -1.101084, -1.849451, 0.045313, -0.134042, -0.758635, -4.064408, 4.666423, -0.272462, -3.961690, -2.621774, 3.876971, 1.087932, 1.772216, 2.323947, 3.050706, -0.472571, 2.760212, -3.276031, -1.541200, 0.861113, -1.634208, 1.556657, -5.462245, 4.749938, -0.511214, 0.835638, -4.087888, -3.569330, 1.798860, 0.072654, -2.034816, 2.618757, -0.285620, -5.038560, 1.369521, 2.782526, 2.107290, 0.403349, 0.029528, 0.551149, 1.817455, -0.422488, -0.939724, 3.047044, 5.337030, -0.610855, -2.417710, -0.778550, 1.426874, 0.531995, -4.521540, 0.579978, -1.685038, -1.053357, -0.430984, -2.011636, -2.547843, 1.882915, 1.394932, -3.340450, -7.000714, 6.059894, 4.306222, -1.949908, -1.907760, 1.408615, -1.032219, -0.777444, -1.147053, 1.421870, -4.536372, -2.536196, 3.107574, 7.283909, 1.061354, 6.247738, 2.492666, -5.004519, 0.904036, 4.047616, -3.514202, 11.607808, 1.687278, -1.415314, 1.216097, 2.033355, -0.726293, -1.276973, -1.893091, -0.640427, -2.503571, 1.696139, -2.582898, 0.504075, -0.714980, -1.114511, 1.565292, -4.212490, -3.659786, 3.794113, 8.251262, -10.930680, -0.854877, 1.403714, 0.182559, -1.664759, 8.205954, 3.175723, 5.751433, -12.345897, -3.690118, 2.157351, -1.931254, -2.685014, 1.519460, 1.611310, 1.483691, -4.705966, 0.910489, -0.591503, 0.810909, -3.566463, -0.922904, -4.133647, 0.693398, -3.398308, -7.057076, 8.150643, 5.149821, -0.921952, 4.039984, -0.691125, -1.622174, 0.400555, 0.905017, -4.130281, 3.546237, -2.394435, 1.307221, -0.929193, 4.105279, 4.830922, -3.155889, -14.082384, -4.265063, -1.797958, -5.852248, -0.629024, -4.556770, 0.366079, -0.369934, -2.857206, 2.940807, -2.827428, -0.681767, 4.712918, 1.876945, -1.581710, 1.920033, 0.997621, 3.036944, -3.794464, 3.923013, 3.016330, 2.200749, 1.329625, 3.200423, -2.155055, -0.045490, 0.783951, 0.035822, 2.317424, -1.388349, -4.879757, 0.744934, -3.256709, -0.804720, 7.820601, 11.581930, -2.986958, 0.528871, 1.816532, -2.757020, 1.623767, 4.469307, -0.886595, 2.844160, -3.054128, -6.978522, 3.604878, 1.441362, 3.164423, 1.423137, 2.847337, 7.830255, -0.284583, 4.562284, 1.127404, -0.847715, -3.143726, -0.630776, 1.426530, 0.976097, 3.624685, -0.938379, -6.768874, -0.651724, 1.110691, 3.410451, -3.711426, 1.794142, 4.888909, -4.868391, 0.880074, -1.496938, -7.605275, -2.405980, -0.121072, -0.605833, 3.600265, 3.735211, 2.631172, 1.780346, -5.649825, 3.464066, 1.915498, -2.024964, 1.766772, 0.901463, 2.372195, 1.347422, -7.564970, 1.267246, 0.651467, 3.137627, 8.275804, 3.045985, -3.053710, 0.481985, -4.368095, -1.565027, -4.889802, -4.077986, -1.479097, -3.717297, -2.533653, 2.198562, -0.109395, -0.155248, 2.343427, -0.468254, -3.644486, 1.830998, -4.832081, 2.420253, 1.116277, -1.544990, 1.079973, 6.023523, -9.470542, -0.526658, 7.871091, 2.927501, 4.015531, -0.123413, -5.463810, 1.431790, -6.487438, -1.922884, -0.861428, -0.036432, 3.015611, 1.705245, 4.016040, 0.833335, -0.830895, -2.416893, 1.853543, 1.442106, 2.786620, -5.825129, -0.392634, -0.432307, -0.310255, -26.123421, -10.270937, -0.605280, -2.417578, 0.074350, 1.818826, -3.421947, 2.731808, -0.854174, 4.481255, 1.564091, -1.778919, -1.828312, 2.696471, 7.367148, 4.592233, 4.908090, 1.126599, -1.665563, -0.780767, 3.878027, -3.719045, 2.003561, 1.991732, -3.794286, 1.595907, -0.790974, -2.584416, -1.720546, 3.110297, -2.654614, -1.623367, 2.808341, -0.982782, -1.389468, -6.029696, -2.206492, 4.260851, -0.911281, 3.791123, -2.190428, -4.110178, 0.233069, -5.447139, -3.454870, -1.139729, 6.519983, -3.451788, 2.835515, -3.099709, 2.008346, -0.995626, -4.298965, -3.528227, -1.642498, -0.824614, -0.313984, -10.397189, 4.317847, -0.054997, 2.312208, 2.155351, 1.661524, -0.382523, -4.136478, 1.731175, 0.901455, -1.022260, 0.001772, -0.954372, -8.358492, -1.169786, -1.899708, 4.123806, 2.677999, 2.342832, 1.728150, -0.675461, -0.304928, -1.078242, -0.691467, 1.891031, -1.786393, -0.564162, -13.336782, -4.090851, 3.861676, -1.598557, 0.933130, 0.698961, -3.715008, 2.574142, 4.791670, -0.188703, 1.011477, 4.921413, -1.197381, -3.308120, 0.582081, 0.331216, -2.146964, -3.609845, -7.480417, 1.514748, -2.403366, 4.309848, 1.741206, 3.171790, 0.853578, -4.242896, 0.141156, -0.251999, -3.080003, 1.189685, -1.780310, 0.420805, 6.441176, 2.017550, 1.482109, 0.764820, 1.094513, 5.994189, -4.575535, -1.519281, -0.374821, -4.902756, -0.010785, -1.235264, -4.738406, -1.369686, -1.838703, 1.938332, -0.127818, 2.391236, -1.536056, -2.691419, 3.799701, 4.308792, -5.365365, -0.148878, 4.840180, -2.937357, -9.366514, 1.900619, -3.951562, -4.660779, -3.658832, -2.265880, -1.386611, -1.411259, -6.987273, -1.214803, -0.367818, 0.366117, -0.853615, -1.189381, -1.000214, -1.222832, 4.147648, 3.938485, 1.390094, 0.673034, -2.271415, 2.270089, -8.178805, -2.946841, -3.605500, 6.102495, -0.707714, 0.949894, 10.250167, 3.335208, -3.743140, 2.595495, 2.758212, 6.216015, -3.416305, -0.552264, 9.871416, -1.171531, -4.325271, -1.568509, 4.567388, -2.874155, 6.230402, 2.852392, 0.660041, 2.967154, -5.745966, 3.458155, 3.823436, -0.257130, -2.840716, 4.736637, -1.568797, 2.081702, -3.604527, -0.762095, -4.104626, -0.530010, -3.828546, 7.783548, 4.337686, -5.351483, 6.355220, -3.483813, -3.475105, 2.975876, -0.976615, -5.787482, -7.701257, -1.262574, 0.786711, -4.565193, 3.683280, -4.765723, 8.778955, 5.847812, 2.533564, 1.889782, -3.028593, 0.002415, 1.342857, -1.931820, -2.139125, -1.684002, 0.731061, 3.983507, -2.122521, 3.105117, -0.218142, -2.053858, 3.292550, 4.761068, 6.120069, 0.689729, 6.416157, 2.443371, -0.226030, 2.215002, -4.565110, -6.034309, -4.214690, -2.231462, 2.031740, -6.372641, 0.113933, -2.703660, 2.426773, 4.642745, -3.197048, -0.774607, 0.188611, 4.881577, 2.400140, 4.379480, -2.926288, -4.284175, 5.439656, 1.877821, -1.054169, -3.342324, 4.214714, 0.351784, -0.653580, 0.101221, -7.039636, -5.464549, 3.054862, 2.914082, 0.636254, -3.334089, -2.415467, -7.143037, -1.505419, 3.485719, -7.142840, -1.205475, -1.908036, 1.074051, 2.948884, 1.175272, -4.384288, -7.127125, -0.190361, 3.108279, 4.492822, -2.141525, -7.146518, 0.864536, -0.308609, -3.190335, 1.884518, -2.140036, -4.393816, 5.219053, -3.987568, 0.956274, 5.444406, 2.571494, -1.917619, 1.185638, -2.083780, 2.535819, 1.183141, -1.278997, -5.613052, 5.368552, -2.721700, -2.822282, 3.754762, 0.406334, 2.300485, -0.479974, 3.864220, -2.035357, -1.186809, -0.974274, -4.490512, 10.481380, 2.418972, -0.618924, 0.359614, -0.561789, -3.777701, -2.402584, 5.838708, 1.250841, -10.286187, 5.780018, 0.785446, 2.115176, -1.887090, -0.243522, 2.895624, -1.662971, -3.449104, -3.143673, 2.112755, 0.767009, -3.156452, 2.051345, -2.255293, 1.452958, -2.069252, 1.128322, -4.785990, 4.391029, -0.798171, 1.346062, 0.089269, -2.189576, 3.963068, -0.173651, 3.700278, -2.225943, 2.738409, -1.065400, 7.461505, 2.302134, 0.258173, -0.590334, -1.458263, 4.825621, 0.427273, -4.727118, -3.176454, -0.720255, -4.421970, -1.885394, -8.331471, -0.898200, -2.809368, 3.184264, -0.336558, -2.991859, -3.125097, 3.946863, -0.191780, 5.518604, 5.678664, 1.747232, 2.403631, 4.170382, -2.577474, 3.439462, 1.757885, 3.839143, 2.149831, 3.895440, -1.333357, -7.307757, -0.745806, -1.965429, -1.692224, -0.640169, -2.174121, -6.909765, -0.805699, -0.254699, -1.982787, -1.696193, 1.624363, -3.374143, -1.112641, 4.464109, 2.885069, 5.247915, 8.498940, -6.992555, 2.244478, 5.405650, 1.442541, 4.521284, 7.956601, 3.392406, 2.552805, 0.935176, 1.990296, -1.080453, -9.796060, 2.652627, -1.339259, -4.965900, 4.275986, -2.938723, -0.824551, 5.846297, 5.951045, 0.189309, 4.208355, -6.134343, -5.720004, -2.064939, -0.101766, -3.184957, 4.232388, -2.758948, 4.617232, 4.204010, 1.023525, 4.624685, -0.723134, 3.129544, 2.440374, -1.593417, -0.517339, -2.116434, -1.257252, 1.141493, -2.265105, 0.470332, 1.526333, 7.134171, -8.550121, 0.918815, 3.052677, -8.046408, 2.606006, -2.745829, 4.694561, 6.510378, -2.790728, -1.683888, 0.710633, -3.552100, -9.357345, -3.631136, 4.263342, -0.859570, 0.555153, 2.379071, 1.508410, -4.484651, -2.065818, 0.476430, 2.149168, 5.995524, 2.064835, 6.370126, 4.561896, -2.605585, 1.645168, -6.452579, -11.317283, -0.358067, 1.925005, -0.196182, 8.038802, 3.608488, 7.714385, -10.653518, -5.490979, -0.465200, -3.811194, 0.012278, -5.339849, 3.102062, 1.361688, 1.574220, 0.267003, -3.299564, 0.730598, 2.265533, -1.941283, 2.960898, -3.787869, 2.582421, -10.016512, 2.954032, 3.424248, 4.218877, 0.929120, -2.192205, 6.571204, -1.742432, -2.160249, 2.296117, -3.335238, 0.620580, 2.971811, -2.652335, -2.441548, -1.402895, 0.231450, -2.608907, 1.946349, -1.566902, 0.134079, 0.737649, -3.240856, -2.809163, -5.268944, 3.230399, 1.785469, -3.767531, -2.465462, 1.129981, 3.577134, -0.362156, 0.332362, -2.061025, -4.494302, -8.171445, 6.567798, 1.388676, -0.058136, 0.309257, -4.941567, 1.235887, -2.312440, 4.221750, 1.207944, -2.247807, -2.391928, -1.510923, -1.211885, -3.429729, -0.122078, -13.750183, 1.711732, 4.617781, -4.478233, -1.037152, -6.811087, -2.053206, 3.017191, 4.490006, -2.499353, 3.093947, 5.947297, 0.928783, -2.458669, 4.793067, -2.253219, -1.427716, 0.447170, 2.260979, 4.120274, 2.983228, 1.871701, -4.150555, 2.458041, 2.845617, -1.781210, 4.040555, -9.113665, -0.372977, -5.971147, 4.331969, 1.156346, 3.464413, -0.917720, -2.057364, 1.338995, -0.613709, 15.391037, 1.301293, 1.529916, 0.432844, 3.230051, 1.065737, 1.038655, 6.989000, 5.168911, -2.805875, -1.107229, -1.116298, 1.466713, 0.670026, -2.802330, 3.990272, -3.455877, -3.597877, 0.457399, -1.454429, 3.925536, -2.317268, 5.982974, 7.452402, 6.825566, -3.050802, -7.312980, -4.084411, -2.939994, 3.978261, 2.160261, 5.109196, -8.970958, 0.779880, -5.015825, -1.141529, -0.537033, 7.575136, 2.682674, -4.574853, -2.686847, 4.847825, 1.805855, 4.005582, 4.142418, -2.148999, -1.202242, 1.485286, -3.422876, 2.369185, 1.520807, -3.121947, -2.290476, -2.816984, -2.241665, -0.188644, -0.776091, 1.388287, -1.727586, 0.995214, 2.813050, -10.039236, -2.676336, -6.747746, 0.699561, 1.167147, 0.672277, 0.510124, 0.887438, -0.437318, 3.920981, 0.440696, 0.791456, -0.086331, 1.989796, -8.740387, -2.689650, 1.919982, -2.022962, -2.553326, -1.109706, -3.103248, -3.047822, -3.717120, -1.876971, -0.950574, 2.495182, 4.061826, 0.882602, 2.778237, 0.607692, -5.894154, 1.629580, -0.082430, -9.960587, -1.067879, 5.680601, -3.571357, 1.432954, -1.086164, 1.989078, 3.262969, -0.808760, -1.806759, 0.225926, -0.216880, 10.205147, -1.013903, -3.004317, 0.238551, 5.560017, -6.469180, 1.412308, -2.933345, -1.669388, -2.127402, -5.822831, -3.841346, 1.505797, 2.863064, 0.047215, 3.476713, -2.252618, -2.842319, 4.505446, 3.452515, 2.608652, -4.584861, 1.434406, 1.214926, 0.571998, -1.643873, 2.164624, -1.891873, 4.223834, -3.363714, 2.083188, -1.403636, -8.511599, -6.646598, -1.559517, 3.051268, 1.154054, -7.887523, -3.502010, -7.295514, -2.090461, 0.076098, -5.151084, 3.241740, -0.180826, -0.464829, 0.837915, 2.880558, 3.190061, -5.721234, -5.494610, -4.584269, -1.480753, -4.052497, -3.668670, 3.334295, 5.760226, -6.020747, -8.985699, 1.530551, 0.829141, -0.523202, -3.265718, 3.966792, 2.476520, -2.400422, 4.657011, 4.518209, 11.938382, -4.791951, -6.905545, -8.331190, 9.066387, -0.555614, 2.061512, -2.402011, -7.306226, 1.855147, 3.911253, 4.643103, -5.161595, -0.178787, 4.647064, 2.532321, -3.979628, -3.421681, -7.873421, -1.694193, -0.977807, -6.005462, -2.696708, -2.635936, 1.249733, 1.558081, -1.054593, -5.677372, -6.848904, 12.375548, -1.048685, 9.451868, 0.770849, 0.004874, 0.749022, -3.343159, 2.868762, -6.788619, 2.329558, 2.230700, -2.796788, -0.746475, 7.273098, 1.725730, -10.017762, 3.896900, 1.245244, 5.167799, 4.762322, -5.168476, 5.321026, 2.704406, 3.907748, -8.864113, 21.655006, -2.555596, -4.513848, 10.126822, -5.159975, 0.338446, 3.130043, 7.764854, 0.964370, 2.991766, 1.586604, 0.347946, -1.534842, 0.742445, 5.535137, 3.090668, -0.835333, -2.897550, -12.371419, -2.731759, 1.227505, 7.692724, -3.102294, -0.357898, 2.924825, 1.412608, -3.414799, 4.227999, 0.096757, -7.042586, -3.655795, 4.494142, -5.498868, 9.541218, -3.288043, -2.688002, 5.775307, 3.201674, 4.313481, -0.658947, -17.299377, -2.143222, 4.300400, 1.396133, 0.652829, 8.997602, 0.394900, -3.026657, -3.423042, -2.098510, 3.731851, -1.618864, -3.534496, -4.114303, 0.777979, -7.618009, -16.085608, -2.674588, -0.311673, -7.138084, -10.863721, -1.879250, -5.479012, 1.067819, 1.009926, -4.360136, 6.908758, 0.637827, 5.021507, -1.089686, 3.845634, 0.777320, -0.520167, -1.586611, 1.657471, 3.628635, 1.447507, -3.954765, -1.489921, -2.505539, -3.786132, 2.921121, 7.683924, -4.154095, 0.724016, 0.943233, 1.858200, -3.725208, 0.990608, -7.652709, 3.203846, -4.016896, 0.687831, -3.904177, -3.953215, 5.366427, 6.889678, 6.707153, 8.301224, 9.560975, -1.522947, 2.084971, 0.079911, -3.623190, -6.227364, -3.239978, 0.914633, -1.201463, -0.285876, -5.000318, 9.624385, 1.343760, -0.730148, 8.851679, 1.207522, -0.340679, -9.117331, -4.930827, -1.469150, -8.287401, -8.861391, 2.041766, 4.612850, 0.045618, -6.774024, 2.442700, 3.126625, 2.628376, 4.009446, -4.584364, -4.274092, -0.898908, 1.249408, 11.149524, 8.727787, -6.110678, 3.100002, -6.880338, -2.373674, -0.941194, 3.267503, -4.888073, 6.996388, 3.436719, -0.600954, -2.654682, -8.906318, -5.176072, -1.354449, 3.938689, -5.618114, 5.184235, 2.933329, -8.471808, -0.485859, -3.493238, -2.416934, -2.808935, 5.411538, -2.704484, -4.772042, 0.483029, -2.779760, 4.672338, 3.290915, 3.207643, 3.355855, -12.556318, 2.987458, 0.511866, 1.037334, 4.601452, -7.491779, 0.815237, 1.669678, 25.821959, -2.990469, 0.341863, -8.546199, -57.959263, -6.861439, 7.197748, 3.185223, -3.890601, -3.807753, 7.488586, 0.738601, 5.186331, 4.751957, -3.189037, -2.101480, 2.811802, 4.692187, 4.650622, -0.388142, -0.563713, 4.468437, -4.456480, -0.434222, -1.902659, -4.143910, 5.255686, 1.149921, -2.154580, 1.160092, -2.100077, -1.200469, 2.620747, 0.045106, 1.217008, 0.872633, -1.279750, -4.014895, -2.671194, -0.317751, 72.818169, -0.274673, -1.522603, -1.679586, -1.681878, -1.658200, -1.187360, 0.330624, -3.366315, 3.558348, -7.375103, -0.864948, -5.678682, -2.768099, -4.980128, -2.315590, 3.863862, 3.874607, -0.397576, 3.207895, 1.091891, 1.793154, 0.884546, 10.288604, -1.982587, 3.128799, -2.658461, -6.311664, -10.789027, 11.487055, 1.278287, 0.116743, 2.171052, 2.254938, -2.452972, -2.434953, 0.847673, 7.682579, 1.807902, 4.112731, -4.216558, -4.923490, -0.496755, 7.823430, -3.785221, -2.627351, -2.087911, 2.650225, 5.552239, -5.799509, -1.966866, -13.046121, 3.335694, -2.779527, 8.939444, -21.493067, 3.353523, -0.808833, 1.012164, 0.383040, -1.610640, 2.471483, -3.263705, 2.747091, -0.280259, 2.336903, -6.732734, 1.303764, -1.920047, 5.165965, 0.111381, 5.318671, 0.422425, -0.942677, -4.163383, 3.023600, -0.684197, 5.766990, 0.311750, 1.133976, 0.124674, 0.795275, -0.862553, -2.777301, -3.046375, -2.968873, -4.754703, 0.717553, 6.495907, 6.162051, 0.042087, -0.678317, 12.963668, -3.955312, -11.636727, -0.769162, -5.909076, -0.539896, 6.502483, -0.103502, -1.372625, 2.357192, 1.925273, 1.399435, -5.294392, -2.933077, 2.778971, 2.272954, -4.688748, -3.429728, -3.411602, 3.354655, 4.497555, 6.116796, -4.520513, 0.076594, -47.672466, 0.073998, -6.041132, -2.421984, 2.042518, 4.413757, -2.072258, -1.666935, -3.535879, 1.346258, 0.478230, -1.063917, -7.310431, -7.991882, 0.030024, 1.886322, -8.401767, -1.692304, -0.510863, 3.041207, 1.225550, -2.396562, -2.626087, -0.229872, -11.108354, 0.600951, 5.914285, -0.088484, -2.257015, 1.889441, 4.506021, 4.414992, -9.895139, -4.587586, -1.472980, 12.623730, 2.343815, 1.844113, 0.155746, 0.860875, 8.530779, -3.720360, 5.726038, 1.089025, -0.996229, -9.634427, -11.579075, 4.942333, -2.901795, -2.754212, 1.061458, 1.780601, 6.769283, 5.579513, -4.578234, -1.976412, -0.174598, -4.009778, 8.133586, 3.975948, 0.620623, -3.166523, 3.254071, -5.477593, -1.372344, -0.128217, 2.143379, 0.711423, 0.181416, 4.484520, 1.924787, -3.877091, 1.482431, 3.593784, 3.742536, 1.208023, 1.879081, -0.047399, 2.581715, 2.983128, 4.446198, -3.142582, -2.353244, 2.860869, -1.478992, -0.129871, 0.284226, 0.876769, 4.556657, 2.544342, 5.677957, 6.531505, 5.851432, 0.441063, 1.460388, 3.379210, 3.498836, 3.946058, 3.750448, 1.786243, -4.732514, 8.103845, -0.957042, -7.004573, -2.709820, 4.072583, 4.511800, 2.521903, -6.146012, 5.279287, 0.575812, -1.507474, 4.029167, -6.929080, 4.972468, 6.486836, -1.219782, 0.701163, 5.481197, -0.645679, 5.140512, -7.023633, -4.284097, -6.846494, 4.500613, -5.177200, 1.924386, 3.206387, 7.535226, -0.964616, -0.910353, -0.939528, -0.022958, 1.235824, -4.868237, -5.670794, -3.356471, 1.502983, 3.786366, 3.423632, -0.402663, 2.183487, 2.224744, -1.873978, 3.550165, -2.142070, 4.959284, 2.750160, -8.151263, 2.305051, 1.590026, 6.649673, -0.462925, 13.728370, 5.043933, -3.782001, 0.586798, -4.597447, -3.100800, -1.378564, -1.036960, -4.756698, 3.392843, 0.098122, 7.496067, 1.276794, -2.201010, 12.045688, -2.050238, -2.662544, -4.651062, -5.942354, 0.904822, -15.855501, -2.120624, 1.871660, -3.271507, 5.968053, -11.749590, 5.864941, -5.111817, -0.975109, 1.543735, -1.594194, -6.976959, 3.590129, 4.134421, -11.131968, -2.028036, -6.524039, -4.008910, 4.039269, 0.079027, -4.533221, 8.506838, -1.361423, 1.549692, 3.190930, -0.073228, 3.400214, 1.610538, -1.334574, -8.067868, -5.087399, -2.729920, -0.373806, -1.636357, -3.642413, 2.538674, 4.916176, -3.533566, -2.162897, -1.618924, -4.204897, -5.115014, -3.544823, -1.597110, 0.494041, -2.240284, 4.748669, 9.349570, -2.634223, 4.627161, 1.736369, -1.277352, 3.055332, -0.612900, -5.664233, -7.366509, 1.622354, 0.968671, 10.669295, -8.042500, 10.230959, 3.214252, -4.011172, 6.232887, 3.857274, 1.902077, 0.706732, -2.590447, -5.315027, -0.226375, -3.639945, -4.291627, 2.910607, -2.851480, -2.199380, -5.348783, -2.055163, 12.780025, 2.655058, 6.954868, -3.661295, 2.167846, 0.434934, 0.436317, -5.767696, 2.771549, 5.062878, -0.617042, -8.748747, 6.545790, -0.899979, -1.069733, 0.529967, -5.809291, 0.556308, 6.874477, 5.277372, 4.169679, -5.629921, -0.249756, 4.796238, 7.292950, -4.699057, 11.379167, -2.491559, -1.708757, -9.385721, 3.035690, -3.613850, 11.371363, 7.384349, 0.989243, -2.333371, -5.939830, 0.762153, -0.475695, 4.556848, 2.328523, -7.775479, -2.024576, 8.063655, -7.785150, -6.127687, -1.686662, 4.035010, -4.927999, -1.375932, -0.560970, 2.860914, 1.378267, 2.240504, 5.007919, -4.354797, 3.506239, -0.676417, -3.054658, -1.389955, -4.676187, 2.296721, -3.969944, 0.529669, 7.909115, -4.237406, -0.696890, 3.972103, -2.716695, 5.140221, 0.518986, 3.473999, -2.443658, -2.689824, 0.467211, -7.972925, -4.338316, -3.179682, -4.076129, -0.004530, -3.895267, 8.064905, 7.706927, 3.333316, 2.809827, -1.146712, -0.130314, 0.694602, -1.394667, -1.133426, -4.963870, -3.307344, -2.904934, 3.678267, 4.123675, -12.262660, 5.079062, 2.435183, -1.666260, 7.668711, -5.765028, -0.798359, 4.794229, 6.620828, -3.358037, -2.250828, -1.557810, 4.582862, -6.650002, 0.642422, 7.357230, -0.317707, 2.141603, -2.768049, -0.753847, -0.552432, -0.858747, 6.015222, -5.603873, -1.312301, 1.108734, -3.475725, 4.387824, -0.271075, 6.087353, -2.430286, -3.067877, -6.732006, 0.182969, 1.136600, -7.581763, 7.243490, 3.132981, 1.896595, 1.194428, 6.584229, 7.422012, 2.498844, -5.440595, -0.854828, -1.774024, 0.406536, -0.738175, -9.008422, -1.769468, -4.130078, 7.411235, 0.241957, 1.977909, -0.985168, -2.942751, 2.039368, -6.933027, 3.331693, -7.329825, 4.314275, -7.256344, 3.564003, -1.318340, -6.307499, -2.822379, -2.331321, -0.687384, -0.432042, -0.330118, -2.285890, 3.763629, -5.730393, 1.598254, 1.966150, 4.906727, 3.835798, 4.303470, -1.755081, 1.831058, 1.456044, 5.163886, -3.070241, -4.535691, -5.533028, 7.793821, -0.958387, 0.161610, 4.340654, -0.431025, -5.204406, 1.275669, -8.160251, 2.356874, 1.587846, -0.244014, 0.993669, -3.694689, 1.563022, 5.399471, -5.073840, -3.126203, 0.948787, -4.177573, 3.693822, 3.871990, 6.277728, -1.348473, 4.640944, 3.815053, -0.938187, -1.165718, -0.180555, -4.312121, 1.375381, -10.583527, 1.926107, 5.039911, -3.980606, -1.254809, 3.968797, -3.856108, 0.365484, -5.768256, -3.118121, 1.625351, 4.106509, 5.812869, -6.065194, -5.483398, 3.973883, -1.708879, 1.518483, -0.220917, 1.255598, -4.182369, -6.526254, -2.248013, -1.433254, -0.696151, -3.830321, 0.127961, -1.540217, 2.604615, 1.242860, -4.627748, 0.283364, 6.120577, 6.530550, 2.017253, -1.432310, 1.281243, -0.537177, 2.646643, 3.722222, 0.557243, 1.116598, 3.271622, -4.565522, -0.453311, 3.175609, -1.267959, 3.857802, -0.692382, 5.890440, -1.637853, -2.580369, 1.959585, 0.735434, 8.119528, -4.732760, -4.281412, 0.511573, -0.933117, -1.127330, 15.441397, -1.013427, -1.233577, 3.462357, -1.734491, 0.680633, 2.449418, -0.234776, 5.454259, -4.323566, -3.023840, 6.850878, -0.942867, 5.765671, -3.467015, -6.242991, -7.451763, 2.945967, -5.463686, 0.189843, -1.386753, -5.821880, -2.037198, 3.015718, -8.932395, -1.388764, 1.455249, 1.704442, -6.780524, 3.084629, 4.529232, 0.981996, 1.693487, -0.297318, -1.638915, 6.350910, -4.167922, -1.515015, 7.637380, -2.958383, 4.897805, -7.789161, -0.392564, -1.537700, 0.858776, 5.029025, 2.858186, -1.974044, 7.591927, -0.049241, 2.494700, -0.047159, -2.806561, -0.060406, 3.263311, 0.360731, -0.459208, 0.966681, -2.915567, -3.130369, -0.622113, 1.856929, -7.741611, 2.707514, -0.712287, -3.967048, -5.445321, 4.626101, -0.967011, 8.001504, 0.901099, 2.290556, 2.533530, 0.057316, 3.366540, 3.716669, 8.090490, -2.582757, -0.333340, 4.146890, -0.922499, 3.378407, 3.768361, -4.073958, 3.286473, -5.570380, 5.806504, 1.360253, 0.565697, 0.608026, 7.096983, 3.965935, 2.117180, -1.423239, 1.241112, -3.526773, 6.318761, -0.442196, 2.996957, 5.560712, 12.985066, -4.835479, 5.019740, -4.981246, -4.116704, -2.050514, -1.667424, -4.875980, 1.503455, -2.008132, -2.906037, 4.770177, -0.976920, 2.429173, -0.911758, -2.752666, -3.897050, 5.040503, 3.460028, -24.602287, -5.098180, -6.328380, -4.805958, 1.553041, 3.066551, 0.216922, -1.931856, 0.310250, 2.446584, -3.422905, -6.960899, -4.071479, -7.258070, -0.790623, -6.343513, 0.978405, -5.713193, -4.039086, 6.117209, 0.956974, -5.267104, 5.572167, 2.808410, 0.274577, -5.325370, -4.834610, 1.844393, 10.592550, -3.991334, 3.880352, -7.561521, -0.833719, 0.902660, -1.233636, -4.647372, 1.025466, -2.701486, -1.585116, 0.601460, -5.395946, 0.895798, -3.280932, -1.410241, 0.349303, 5.957426, 4.516736, 0.785583, 2.897660, 0.106632, 1.949055, 3.427114, 2.503825, 2.539254, 0.021046, 1.653128, -1.125087, 4.093799, -0.777973, 4.705805, -0.412391, -4.549866, -1.732447, -0.666627, -3.793111, 4.220653, 3.186419, 0.723626, 2.166250, 1.754366, -1.169123, 2.267691, 4.660487, 3.483028, 6.041733, 0.969664, 5.984068, 2.085470, -3.209600, -3.176646, 5.158224, 4.955115, 5.085187, 1.528159, 2.763774, 6.905697, 1.378222, 3.018082, -3.203681, -5.697320, 9.362370, -3.822440, 0.687714, 7.065468, -3.620854, -1.068926, -0.659893, 6.244454, 0.356127, -1.408702, 3.371244, -3.360366, 0.834484, -3.404024, 7.210449, 3.206043, -6.253275, -3.466505, 7.853566, -2.665757, -0.684967, -3.988544, -0.479689, 5.326033, 2.021157, -0.206972, -0.836225, -9.419202, -1.627847, -1.403879, 1.130102, -1.728503, 5.926775, 2.344648, -5.166494, 0.622071, -10.816072, 0.119801, -7.232834, 1.983062, 2.584320, 1.949506, -0.408435, -1.867195, 4.516873, 2.080892, 1.941095, 0.494597, 0.089801, -4.194734, 1.500237, -5.619621, 1.784577, -0.276579, 9.975770, 0.117329, -8.132631, -0.803383, 5.854777, 9.448901, -10.612700, -0.738503, -0.731102, 1.529682, -0.489255, 6.687905, 3.029937, -5.183012, -0.238438, -4.780541, -0.097051, 4.321120, 0.305233, 2.534451, 0.759206, 1.449946, -7.284632, -0.724230, 5.051780, -1.913272, 11.689046, 1.806538, 4.965152, 2.657064, 3.413854, -5.321180, 2.220038, -0.484918, -1.116065, 3.195233, -3.543233, 2.873127, 0.734757, 3.213889, 3.447571, 0.588481, -0.118765, -2.447142, -5.046257, -5.135880, -1.192211, -1.002373, -1.340682, 0.807711, -2.720257, 1.137674, -1.123838, -5.477874, -2.690656, -1.423756, 1.283039, 1.119945, 1.476256, -0.959476, 0.120415, -0.333202, 5.809803, 4.728014, 4.327016, 5.169444, 0.794055, -4.507209, 0.095459, 4.366117, 2.586082, -3.219173, -6.210899, 1.348389, -2.038010, 3.369182, -2.846389, -5.263379, 3.744565, -1.082742, -4.733845, -2.851035, -0.690051, 1.126368, -5.753883, -1.434126, 0.639843, -5.872741, 2.279959, 4.675051, -5.324467, -10.310712, 1.810941, -6.226061, -1.814752, 2.493179, -0.650456, 1.417511, -1.273579, 5.576836, 5.641691, -0.388570, -0.676326, 2.536535, 7.995044, -3.511673, 1.615828, -2.204821, 3.207858, 6.377557, -0.962587, -3.265275, 0.799848, 4.604529, 1.244043, 0.650347, -2.098049, -1.020897, 9.456820, 0.773542, 0.310306, 5.469886, 5.460999, -0.805781, 1.347621, -5.537677, -0.655692, 2.221136, -3.225057, 0.772083, 0.606927, 6.593863, 6.725516, 4.217551, -0.319320, 0.378998, -9.116841, -12.747993, 2.226322, 3.811626, -0.126707, 2.969726, -1.477451, -0.378593, 3.390436, 1.826288, 2.390730, -1.385699, -4.330629, -1.510868, -0.545701, 3.081455, -1.118920, -1.966406, 5.322524, 0.613941, 2.093357, 4.134116, -2.701830, -0.509763, 3.020345, -0.263120, -6.160770, 5.853301, 4.288284, -5.511547, 2.915318, -3.539979, 1.122932, -3.405716, 2.185867, 1.715794, -3.666327, -3.478908, 0.295895, -2.676396, -2.359107, -1.866933, 0.797962, 7.096612, 0.064292, -2.482887, -1.964745, 1.174466, -1.427787, -0.547333, 2.101931, -8.511395, 0.405700, -3.375213, -3.197227, -2.439764, -1.360264, -2.913413, 3.843259, -2.007440, 3.775483, -4.897901, -1.232008, 1.066024, -3.550373, 1.529685, 1.323544, -2.433049, 0.770832, 2.926789, 2.587296, -6.737079, -0.852933, -0.235982, 2.178667, -5.808867, 1.977460, 2.142372, 3.881558, -5.669499, 1.582753, -4.487857, -2.140340, 3.822457, 3.156929, -0.784372, -11.919968, 2.732753, 0.720352, -1.074247, -2.517467, 0.212668, -2.007519, -5.329519, -5.339283, 8.835780, 2.035633, -5.028576, -0.937121, 2.151216, -3.267512, -1.287972, -1.488874, -0.354031, 0.224125, -1.105438, 1.056294, 6.083877, -0.475878, 5.149827, 1.604487, -7.690906, 0.559727, 5.628377, 1.652162, -3.740532, -5.827209, -2.290152, 0.813187, 4.807639, 0.445966, 3.805639, 0.770459, -1.839797, 1.350892, -1.814946, -0.847039, -3.721893, -2.621535, -4.462288, -1.348650, -2.237405, 0.306764, 0.791332, -2.083073, -2.704147, 3.735518, -4.753408, 1.343448, -0.313119, 2.784453, 2.194219, 3.320808, 2.609183, 1.682797, -1.709125, 0.583227, 0.166908, -6.052476, -3.839477, 5.245582, 2.119853, -4.421228, 3.879004, 1.128520, 0.561174, 1.135597, 1.555886, 5.035879, 2.007892, -2.588021, -4.674111, 2.013049, 1.186565, -0.874717, 4.819943, -0.970881, 0.407302, -3.039956, 1.841424, -1.702842, 6.212122, -4.744252, -4.397005, -0.945604, -4.804412, 7.296845, -5.887240, 4.321653, 1.352454, -8.227689, -3.597377, -1.649933, 5.057769, 4.388936, -5.530170, 0.288266, 3.812274, -0.723873, 2.812019, 10.936550, 0.128492, 3.857232, 1.627732, 2.630692, 4.487742, -3.620348, -2.386631, -4.531271, 9.979341, 3.510550, -0.302120, -0.265527, -2.551227, -6.043945, -2.087475, -3.116405, 1.148862, 0.456963, 1.133632, -2.793258, 1.727798, -4.147748, -0.056471, 1.409196, 0.633240, -0.925451, 3.875555, -0.373213, 1.008518, -0.027705, 0.011419, -3.924354, -1.880724, -2.316895, -1.747171, 2.857554, -7.953085, -5.626114, 1.550129, 4.746271, 4.696819, 0.240030, 2.531980, 15.833130, 0.971987, -4.606957, 2.627638, -2.664799, 3.263517, 1.898216, 3.809264, -1.514982, -5.362910, -0.347393, -3.474900, -0.638306, -0.228928, 0.702787, 0.271248, -1.160489, 0.159041, -2.044232, -0.764671, 0.094077, -2.514994, -0.532551, 1.893106, -4.758446, -4.132962, 2.440339, -2.551711, -2.038148, -1.968286, -0.260521, 0.393995, 0.527462, -3.963587, 1.928428, -2.928052, 3.469846, -0.296801, -0.104693, 0.559026, -0.312715, -1.335794, 0.120195, -0.155378, 8.477010, 2.909681, 1.191940, 0.912483, 1.678987, -1.485329, 2.019185, 0.006450, -0.548562, -1.414819, -6.675617, -3.839057, -10.587205, 8.054903, -0.601675, 2.120443, 2.867933, 0.452214, -0.157625, 7.559044, 0.066763, -0.346538, -0.679744, 7.143521, 2.798456, 4.390249, 0.547103, -0.828780, 0.894876, 3.495336, 0.999051, -0.162726, 0.927784, -0.997106, 5.079284, -2.757908, -2.823677, 0.840591, -0.101002, 0.895782, 0.422564, 1.383721, 3.118566, 3.713212, -1.116651, 0.350085, 3.952912, -1.482127, 3.851310, 1.132925, -0.018721, 1.863041, 0.292804, -2.271758, 3.700714, -1.889969, -8.257089, -1.723338, -1.162702, 2.041800, 1.053195, -2.891562, -18.913019, -1.537845, -4.574075, 1.734250, 4.120369, 0.549128, 5.679949, -1.484915, 5.160435, -0.268740, -1.555882, 0.922197, 3.002130, 0.116955, -3.772360, -1.805371, -0.604614, 0.137429, -3.511200, 0.931349, 0.355020, -0.204878, 0.550382, -3.529668, 0.334168, 4.264834, 5.036866, -1.105709, 2.041065, 0.835190, 0.624881, 1.791567, -3.434286, 1.122225, 0.606482, -2.021971, 1.331716, 3.309259, -1.130233, 1.147773, 1.803062, 0.061684, -1.037129, -6.389064, 3.572050, 0.107109, -2.976307, 1.539801, 0.022954, 0.191456, 7.381106, -2.153169, 2.224567, -2.784935, 1.598683, -3.104459, 1.023445, -2.912184, 0.103114, -1.707224, 0.194435, 0.985669, 1.219664, -18.701944, 1.770715, -0.215786, -1.886590, -1.313887, 0.379953, -0.811773, 1.726949, 1.761581, -6.506214, -0.970271, 2.834483, -3.703697, -3.972107, 0.371798, 1.186142, -4.292978, 0.112968, 0.986375, -0.553960, 0.242243, -0.866809, -1.040570, 4.414179, 2.866549, 3.117313, -3.775796], - "internlm2:latest": [5.061247, -0.231503, 2.588457, 1.067168, 0.639063, -6.508947, 2.713553, -4.196918, 1.201719, -3.954562, 0.397499, 0.665700, -0.373104, 3.420092, 2.525895, 1.166159, 0.135273, -1.422993, -1.334097, 0.629137, -7.037499, -1.594845, 4.286449, -3.437519, -1.638770, 4.078342, -1.257553, 2.342320, 4.363889, -2.744817, 1.405284, -0.473245, -1.080851, -2.587262, 0.633063, 0.464861, -0.259242, 2.882139, -1.092318, -2.586674, -1.025380, -4.536989, -3.841810, -3.341502, 5.938951, -2.299690, -1.749035, 1.184345, 5.063748, 0.792942, 1.243212, 5.516513, -2.790794, -1.276075, -4.534899, 3.715642, -3.791056, -5.819790, -0.919605, 1.451963, 0.649228, 0.343269, -2.556309, -4.416265, -0.184799, -1.028780, -1.509403, 3.096626, 4.423926, 1.392064, 2.056307, -7.209401, 0.257314, 0.226362, 5.174077, 0.345125, -2.266287, -2.005017, -3.846150, -1.313890, 4.227207, 6.955594, -4.165278, 0.299796, -3.245447, -0.149341, 0.321417, 0.187456, 2.233084, -3.411223, -0.836206, -3.420860, 2.934996, -9.119430, 0.097401, -4.268331, -2.307719, -3.476908, 2.335415, 1.019653, -0.575591, -1.621845, -3.839381, -1.752010, 0.723238, -2.752960, -1.486039, -2.191680, -3.217196, 1.473283, -4.561637, -0.163969, -1.542991, 0.560197, -15.695994, -1.109497, -1.806454, 1.372928, 1.925100, -8.137605, 9.525015, 5.316425, -4.975033, -0.825283, 0.438482, 0.641941, 2.960293, 3.527466, 1.868934, 2.090116, 0.798059, 2.660561, -5.010262, -3.538967, -2.643612, 6.393401, -2.147769, -2.526807, 2.325527, -1.141852, 0.187074, 4.366103, -1.343357, 2.663101, -2.388203, 7.109671, 1.708573, -3.242779, -0.175443, -1.789128, -2.733232, 3.111445, -0.469209, -8.575769, 4.222897, -0.028589, 0.682822, 7.332674, -5.071147, 4.716674, -0.557671, -1.645178, 1.872882, -0.017428, -0.709880, -5.856006, -0.376602, -1.407626, 6.218358, 2.250383, -2.505142, -2.895295, -6.551757, -5.177249, 24.057529, -1.202249, -7.279227, -6.273926, -1.637197, -1.717246, -1.007484, 4.553564, -4.807058, -0.805701, 4.396732, 2.509762, 0.401592, 3.622766, -1.253119, 2.561592, -27.404514, -0.643606, 3.348947, 1.838143, 3.371135, -1.500990, 2.856364, -3.396603, -1.188622, -4.619108, -1.153197, 4.663440, -2.009603, 0.344214, -3.262805, -1.938819, 0.726469, 2.213094, -4.225058, 3.463687, -0.537457, -6.544409, -4.219234, -1.230688, -2.658906, -0.808681, -0.051084, 0.944790, 2.601959, -3.345125, -2.134279, -6.127693, 5.400606, 1.405114, -6.286226, -5.871374, -4.326901, 0.939626, 0.459327, -2.888148, 0.964913, -3.523564, 3.792453, 7.624001, 2.997477, -3.895889, 0.994956, -5.825964, -1.577850, -2.738399, -3.672004, 8.851274, -2.867324, 5.217916, -1.113662, -0.199251, -4.990279, 2.785989, 0.925950, -2.605497, 5.271828, -1.838495, -6.714372, 2.304076, -3.585959, -3.600795, 3.694057, -1.135462, 6.889727, -0.454378, -1.975031, 6.046408, -3.825401, -1.946825, 5.755115, -9.280190, -3.701879, 2.500824, 1.049162, -1.036308, -2.931208, 0.655454, -0.526017, 0.155298, -4.066710, 5.787239, 1.007156, -1.677976, -1.923831, 3.971688, 10.829790, 7.744619, 7.314122, 28.896027, -4.738491, 1.426370, 0.738208, -5.452198, -7.496375, -3.499172, -15.695760, -5.750883, -1.174744, 6.486292, -0.237689, 1.870942, -2.951409, 0.658425, -0.447866, -0.076158, 3.413381, 1.638950, 0.280836, -0.231159, 2.032212, 2.940922, 0.591556, -1.669960, 2.941601, -3.021569, 3.658772, -0.426081, 0.865577, -2.619977, -0.916667, -4.567581, 6.830680, -1.625737, -5.243823, 2.782119, 3.282244, 1.116829, -0.427940, -0.300249, -4.410540, 1.400093, -1.888339, 2.741519, -4.364941, 2.187036, -1.132823, 1.077472, -3.309915, 1.454134, -4.608842, -2.445352, -2.925962, 1.095848, 2.496021, 1.057507, -1.029777, 0.220468, 0.362259, -2.373489, 0.882088, 3.134756, -1.146141, -7.990649, -1.160275, 0.380594, 6.351787, 7.281243, -3.807301, -3.881965, 2.582957, -6.088000, 4.956009, -3.621352, 2.759395, -2.421424, -2.243220, -6.692789, 1.947197, -1.775349, 4.495222, 1.503652, -0.909473, -0.653658, 8.284077, -0.876597, -0.136130, -0.970865, 4.287241, 5.301243, 4.046627, -4.381618, 2.058830, 2.515426, -1.943246, 2.832242, -5.611320, -0.062267, -5.000455, -3.713669, -7.901437, 1.488344, -0.372438, 0.134102, 2.772597, 4.079040, 1.760607, -1.572206, 2.533317, -1.507193, -0.443952, 4.203324, 0.275423, 4.427946, 1.618125, -0.390027, 2.804054, -4.883042, -1.828983, -2.090811, 4.276200, -0.214048, 2.147459, -0.309282, 0.956251, -5.969341, -2.051353, 4.603029, -0.944236, -1.789566, 0.084430, 2.212379, 2.903875, 2.756856, 1.757860, 3.429894, -8.464258, 2.010800, -4.168521, 0.476422, 8.876191, -0.046917, -1.662317, -8.808737, -0.096040, 1.565808, -3.285136, 4.959125, 1.565729, 1.549600, -2.985832, 5.915885, 0.455242, 4.394282, -2.599325, 0.458896, -0.404525, 1.149395, -1.969155, 2.687780, 1.759553, 1.115179, 3.094874, -3.141999, -4.941475, -4.853149, 1.448547, -6.194538, -0.578595, 7.831284, -1.984477, -4.167677, -1.365347, -2.300270, 1.228716, 1.456013, -2.201469, 1.595850, -5.419332, -2.410420, 0.789430, -0.525872, 0.054790, 3.655850, -2.747402, 4.233346, 3.877509, 13.040668, 3.115983, 7.328908, -4.238483, -0.252896, -3.893379, 0.590240, -1.978889, -0.209061, -1.853956, 0.903654, 1.213564, 0.919549, 13.728156, 0.465422, -4.338054, 1.460130, -0.295520, -0.555089, -3.129691, -4.171381, 1.837397, 5.976922, 3.015670, -4.032254, -2.745596, -0.310737, -3.200476, -2.131331, 1.340346, -5.796060, 2.511221, -3.079774, -2.012100, -2.608340, 0.969537, -3.736783, -1.355915, 2.013482, -2.848377, -5.723270, 5.538749, 4.389459, -0.111431, -1.020809, -3.971606, 3.871086, 3.663780, -2.874661, 4.710732, 3.333759, 0.691214, -0.371512, -1.434366, -0.555875, 1.876416, 1.818450, 3.601551, -2.531006, 1.163709, 3.509557, 5.839750, 3.703716, -1.823416, -1.795103, 0.759579, 1.348970, -2.568928, -4.570304, -4.493628, 1.472984, -3.155058, -0.319365, -2.713835, 1.905564, -0.663457, -1.327655, -2.407827, 6.360357, -1.690539, -0.995528, -3.078851, 3.296104, 2.338831, 0.252414, 1.314875, -0.129766, -3.652116, -5.463096, -3.035827, -1.872913, -0.902017, -4.781173, 1.147719, -5.484653, 1.522828, -5.870281, -0.748309, -0.013227, -0.942376, -0.041075, 5.888425, 5.395775, 3.727763, -4.747180, 2.796907, 4.980431, 4.589695, -3.617343, -1.490041, -3.500859, 0.410755, -2.534751, 0.081086, 0.969224, -0.670146, -8.614530, 4.209755, 2.025898, 3.765331, 6.290065, 1.974810, -6.858045, -4.255695, -0.630691, 0.429667, -1.628322, -0.191547, -2.538192, 4.177691, -1.218796, -3.781093, -1.958904, -3.477312, -3.877017, 3.846811, 3.581842, -0.137654, -3.981176, 5.399758, -0.110485, 3.515115, 0.680053, 0.578790, -2.271068, 3.598449, -0.227658, 4.929263, -4.807483, 4.248407, -2.731860, 2.104155, -14.894735, 4.504198, -0.278473, 1.659851, 0.397226, 0.353838, 3.300556, 3.875627, -3.460070, 2.003856, 1.920597, 7.600002, 3.218442, -3.740824, 7.104123, 1.948618, 4.355168, -1.856144, -1.128358, -1.529000, 1.024140, -6.831550, -2.043998, -0.117732, 4.418821, -2.080518, -0.038392, 1.616336, -2.526685, 2.505723, -0.155806, -2.213610, 5.785298, -3.473212, 2.725080, -1.891800, -2.262702, -2.161195, 6.359688, -9.396100, -0.280296, -2.672043, -2.741757, 4.177962, -1.655606, -1.932398, -2.343269, -0.081301, -0.269365, -3.257321, -5.578602, 2.227818, -0.747868, -1.603817, -0.781458, 1.857280, 0.701760, 3.020540, -1.193380, -2.049258, -4.239274, -0.413911, -3.666025, -3.096007, -1.027318, -3.412259, 2.208090, 3.525542, 3.201124, 1.783430, 3.468514, 4.684199, -0.899601, -1.940475, -2.798301, -4.269429, 0.962290, 1.554736, 1.775746, 3.519588, -5.483161, 0.666180, 0.557270, 2.279576, 2.197963, 0.786984, 1.949886, -1.663766, -4.385033, -2.131468, 1.939933, -4.297215, -6.042433, -6.853386, 0.457582, 7.823955, 1.367757, -5.069343, -0.526767, 0.987899, 0.377375, -0.224402, 0.841607, -4.236011, 1.756751, -5.956668, -0.028805, -0.920623, -1.493528, 4.230742, 0.819575, -1.189212, 5.872002, -1.270913, 3.005222, -7.878338, -5.408515, -1.306229, 3.037759, -2.493772, -1.165590, 0.097988, -4.550385, 2.095839, 2.516308, -1.947471, -0.486930, -1.384863, 3.929041, -7.500520, -4.048054, -0.561791, 3.225979, 3.488237, 4.773482, -0.358355, -3.923441, -0.149555, 5.512856, -4.676888, 4.938262, -0.932411, -5.136211, 1.462612, -6.052265, -2.085773, -2.355224, -6.450393, 6.424675, 0.994802, 2.546335, 0.492838, -2.865380, -4.151785, -0.373860, -0.992486, -3.127932, 1.637338, 5.028770, -1.532269, 3.610800, -2.120996, 1.867085, 0.881059, 1.636464, 6.450935, 1.735827, -1.597024, -0.939140, -2.820829, -4.151963, 1.126840, -3.318565, 2.201536, 3.435789, -3.675163, 2.943386, 0.250281, -0.914511, 6.706475, -0.012139, -5.633416, 0.969529, -1.803715, 0.228366, -1.060118, -10.121710, -0.687450, 0.544276, -3.080676, 0.082196, -3.262676, -2.902545, 2.796925, -60.507057, -2.543181, 1.720342, -1.325740, 1.355423, 4.610939, -0.366430, 3.924400, 2.029431, -3.024478, -12.526103, 1.520504, -0.113020, 3.471127, 1.196942, -1.564157, -0.478866, -0.093020, -0.736989, -2.370159, 1.155157, 11.948485, -2.660467, -1.938226, -2.650690, -0.567669, -6.025421, -0.747833, -4.784255, -1.114224, 1.280174, 0.511942, -0.691434, 1.220410, 3.965637, -4.907683, 3.453216, 5.431615, -6.192630, 1.855827, -0.527852, -3.460788, -5.247286, 2.145873, -8.107170, -3.359477, 2.195966, -3.420030, 0.526939, 2.802132, 0.360952, -8.053123, -5.381207, -2.780623, -3.736796, 2.322341, -2.283828, -0.540574, -5.767483, -2.334425, 0.176996, -2.189201, -3.760068, -0.451196, 6.214261, 3.779209, 0.545904, -4.201845, 1.978366, 1.278257, 2.698078, 2.789446, 2.211696, -0.907324, 9.129786, 1.447129, 3.216690, -0.990769, 0.716541, -6.102333, 3.532319, 0.661573, -2.552234, -0.664280, -0.795222, 3.755283, 3.302111, 3.283321, -3.685587, 0.687869, -0.329220, -3.572280, 1.765342, 1.272334, -6.889939, -5.411784, -1.632199, 3.425769, -1.347378, -3.850362, 8.801662, 4.775460, 12.205454, 1.638725, 3.274867, 0.039696, 2.016362, 1.419244, 1.617624, 4.213040, -10.281228, 4.154506, 2.621370, -1.467056, -2.441974, 2.889356, -7.528337, 3.254175, -6.855349, 0.325416, -0.511460, 7.052696, -3.282471, 3.773828, 2.874611, -2.059987, -3.625528, 0.191727, -0.481927, 7.968199, 3.430549, -0.548765, -2.795270, 2.682204, -0.315234, -0.290829, 0.048082, -5.181992, 1.282168, -2.762165, 1.426113, 1.707000, -4.629203, -1.381773, 3.483888, 1.231746, 0.959635, 1.024321, 3.132743, 1.440143, -0.121623, -3.894713, 2.382843, 5.631348, -2.709828, -4.703189, 5.098269, 0.695087, 3.782719, 4.675445, 6.022763, -5.893468, -6.612776, -1.342764, -2.906631, -6.828164, 6.216556, -3.838661, -6.620102, 2.033250, 0.574438, 3.062449, 0.195256, 0.312320, -1.113810, 3.507383, 1.441819, 0.874012, 2.437464, 1.133729, 1.368206, 10.217820, 2.241683, -0.429320, -3.894818, 1.621964, 5.148217, -0.764651, -4.459765, 2.406326, 1.989000, 3.864517, -1.368541, -3.559168, -3.897746, -20.080606, 4.123347, -5.228001, -3.299122, 0.962435, 0.522015, -0.402336, -3.387426, -5.981354, -1.381018, -1.483798, -1.830560, 3.258768, 4.992769, 47.932034, 1.344948, -4.236881, 1.773366, 0.659067, -2.210075, 5.002216, -4.865983, -1.548675, 1.807968, -5.603806, -0.190212, -2.337569, -3.089808, -0.862871, -8.700631, 5.457571, 3.984666, 0.658955, -2.196346, -4.292675, -0.780816, 0.769220, 2.174956, 2.660364, -1.906250, -4.770666, -6.087595, 0.698831, 0.543975, 1.314846, 2.678899, -2.456889, -1.412340, 1.406363, 5.925550, 1.901989, 2.444864, 2.600682, -0.024516, 3.930375, 3.464553, 3.747995, -0.250319, 1.857823, 4.730449, 1.230439, -2.207210, 0.910806, -0.377090, -2.856334, -1.995489, 0.876158, 2.491508, -2.200970, 12.557244, -0.037571, 0.546623, -2.080354, -2.482499, 0.321669, -0.783329, -1.755629, -7.893689, -23.774939, -7.158698, -1.875171, -1.281272, -4.477736, 3.325664, 6.510106, -3.699291, -1.884934, -5.767200, -6.147463, 5.894515, 1.016173, -0.194931, -4.244712, -4.448786, -0.129400, -3.077547, -0.638804, 5.994468, -3.066692, 6.657439, -0.409814, 1.328925, -4.061563, 2.119708, 4.979975, -4.113218, -1.034720, -1.739756, -9.974875, 0.131563, 3.146017, -5.895171, -4.860582, -0.998382, -1.265812, -1.364393, -2.176633, -1.461539, 0.422791, -2.576539, 2.842657, -7.755994, -7.623969, 3.702054, -1.580819, 2.154251, -3.150540, 1.246960, -5.462420, -5.664275, 3.125876, -1.564969, 1.019071, -9.127211, 2.841057, 0.758049, 5.360108, -3.659481, 0.138878, -0.438434, -0.055836, -0.870024, 0.371788, -5.101191, 0.136766, -4.824679, 1.838409, -0.154343, 2.864966, -3.327515, 1.578334, 4.174641, 0.877606, 2.169600, 7.554946, -0.283193, 6.812216, 2.055799, -0.296956, 0.311624, 2.173999, 0.049316, -1.044881, -2.964058, -4.674428, -3.593721, 4.188018, -2.316576, 3.803720, -0.253186, -4.358509, -2.351217, -0.170277, -28.426014, -3.636131, -0.418576, 6.431114, -1.643137, -2.162497, 2.246531, 4.474029, 0.840325, -1.671944, -2.560735, 3.340313, -0.918728, 7.462214, 1.220675, 1.289997, -2.709882, 3.065038, -0.098697, 2.217031, 1.754498, 1.388865, -9.350600, -0.669478, -3.919390, 1.287890, 0.006270, -0.208305, 0.238537, -3.044888, -0.904316, 1.619854, -2.376778, -1.632882, 11.180886, -3.706999, -0.948795, -0.602214, 5.489887, 9.740318, 3.845946, -0.599598, -0.256252, 2.331402, -3.466881, 1.323254, -1.516204, 0.236590, -5.375591, 1.427258, 6.110905, 4.510322, 2.177007, 2.412064, 1.938499, -2.666273, 12.803903, -1.832978, -1.936508, 0.997035, -0.432327, 0.264868, 1.924250, 4.459678, 0.553410, 2.775764, -1.430104, 1.464519, 0.427380, -7.424240, 0.978083, -2.451670, -1.070307, 1.404176, 3.224234, 2.501353, 1.000265, 3.049890, -6.290756, -6.703895, -5.700268, -4.351070, 4.281235, -6.503413, -10.641171, 1.250353, -6.935366, 1.247792, -2.876938, -2.816121, 4.265053, -0.092179, 1.189310, 5.196477, -8.313596, -11.407356, -0.090954, 3.018408, 2.669824, -0.911198, 3.208556, -1.206236, 1.793371, 4.439926, -3.105369, -1.270381, -3.500592, -0.991417, -0.935610, -17.860001, -0.856600, -3.319674, -0.911797, 3.161229, -4.300007, 1.838384, 4.364628, 0.703687, -0.223441, -7.835571, 6.474916, -1.409915, 1.796286, 1.480622, 0.282803, -2.237307, 5.114225, -3.169454, 3.048834, -5.527786, 0.004587, 0.949397, -19.889380, 1.039926, -2.144435, 0.130052, -8.224975, -1.026113, 0.951771, -1.719624, -2.794927, 0.382448, 0.480869, 0.642630, -0.323551, -1.853559, 1.146316, -6.034152, -0.389631, -1.857311, -3.772340, 2.750707, -5.963089, -2.533455, -5.624331, -3.390948, 5.100173, -1.154467, 6.165472, 1.594810, 3.966839, 2.707621, -2.439730, 0.798211, 2.823258, -5.497983, 1.359825, 1.167054, -5.620857, -0.495827, -0.529598, -1.180323, -1.876745, 0.012315, 3.032026, -10.296271, -2.670000, -3.453792, 3.848038, 2.333091, 10.287111, 2.165104, 0.710347, -2.298230, -1.751988, -4.070202, -4.802220, 7.371030, -5.318613, 2.158966, 0.621032, -4.925990, -0.846735, -2.236966, 0.696813, -0.762223, -5.564859, -3.741148, -8.041711, -8.016417, -1.817770, -0.752128, -1.749938, -6.524678, 2.563604, -3.125811, -2.255188, -12.779183, -4.288491, 4.957750, -0.919120, -1.679587, 6.629279, -1.700079, -5.175654, 3.858805, 0.408368, 1.267684, 3.302717, 0.151141, 2.592164, -0.777856, 3.897479, -1.764927, 0.361837, -0.688383, 1.690966, -0.854830, -3.935272, 2.206409, 2.084598, -0.795355, -2.733134, 3.446365, -2.276695, 6.318832, -2.123587, 2.378304, 0.480538, -0.419980, -0.573010, 3.604203, 3.043358, 4.465629, -1.576976, 8.403450, 2.318177, -2.657940, 1.897705, 2.157284, -0.176972, 2.929054, 5.861001, -3.396395, -7.986055, 1.982398, -0.934847, -0.196971, -4.529693, -2.205753, 1.787073, 4.705458, 0.153825, 3.711550, -1.090535, -0.222807, 6.108150, 0.625758, 4.039876, 2.148496, -4.007553, -2.591868, 5.058038, -3.280740, 1.438874, -7.098381, 0.551312, -0.019837, -3.303874, -4.428917, 2.108920, -7.297920, -2.603361, -6.212405, -2.046264, -5.194932, 0.144148, -1.774858, 0.293199, 0.442523, 0.917678, -0.850350, 0.197423, -4.443827, 1.970809, -4.512796, -1.580566, -0.339683, -2.141265, -5.313002, 3.081825, 3.989455, 1.402336, 3.047523, 0.389616, 3.277324, 4.216976, 2.475713, -8.278424, -2.683667, 5.051536, -0.983773, 2.171453, -1.534576, -6.967187, -0.803524, -0.016174, 0.548695, 3.565756, 5.058985, 0.803081, 5.839240, 2.784815, 0.074305, -0.199195, -9.937843, 4.329383, -0.539009, 4.629091, -0.802863, 0.894037, 4.710128, 3.481739, -5.690711, 0.423449, 1.187420, -0.201800, 2.702831, 0.860518, -0.383126, 0.159294, 2.860673, 3.332905, -1.141616, 4.104559, 2.994694, 0.478522, -1.463033, 2.509958, -1.936122, -4.324917, -0.348549, -3.917790, 2.476979, 2.343854, -0.956187, 0.674467, 0.785163, 1.978697, -4.923691, -2.913966, 7.301755, -0.151009, 6.468770, -1.793773, -8.736486, 0.767645, 5.876063, 0.979330, -2.524950, 4.293113, -2.878569, -0.043513, 0.668262, -0.138689, -2.190439, 1.914594, 1.057041, -0.510029, 0.777235, -1.629387, -1.275562, 0.588315, -1.272347, -8.000982, -0.025677, 0.897335, 3.553093, -4.675339, 2.694863, -1.545545, -2.649874, -3.690698, 3.610578, 5.482494, 3.182851, 0.914212, 3.898405, -2.169665, -2.982248, 2.473002, -10.818861, 2.550534, 1.030614, -0.145618, 4.118483, 0.926881, 1.610949, 1.080264, -1.195810, -3.454058, -4.189197, -0.832136, -0.792559, 3.317927, 3.263461, 2.082658, -6.270870, 6.739213, -4.238231, -4.717479, 2.588153, -8.810438, -1.245415, -1.513222, 4.949384, -6.465408, 0.011828, -1.437624, 0.130517, -0.796087, -3.359360, 5.944135, 0.506007, 4.615585, 2.563034, 6.552821, -6.680770, -3.411387, 2.863103, 1.250932, -4.190070, 1.327298, 1.261376, 2.966345, -1.287480, -5.242377, 0.985963, -1.411199, 0.133332, 1.792124, -0.832668, 1.154158, 0.964184, 3.706770, -0.000854, 2.903304, -0.895213, 4.000095, -3.686526, 3.213437, -4.706445, -1.308617, 4.113848, -2.737977, 1.562001, 5.607126, 0.960042, 1.433525, 6.983365, 0.274547, 1.965000, 9.138268, -0.436433, -0.454524, -4.457383, -2.280589, 4.140254, -11.978215, 0.293515, 2.794824, 4.216743, 2.579867, -2.556382, -2.020272, 5.623112, -5.271835, 0.387230, 0.836283, -1.495048, 2.541495, 2.930545, 2.098567, 5.748567, -4.172064, -5.735911, -2.475516, 1.435537, 2.127018, -0.711296, -7.948764, 3.063461, -0.742258, -2.206010, 1.454916, 1.427907, -2.728484, -2.138403, 2.024133, -1.875692, -1.830184, -0.847052, 0.247767, 1.120336, -0.611148, -1.962781, 1.963801, -3.417486, -1.224645, -3.051069, -6.072777, 0.071024, -1.812450, 0.394084, -7.601513, -0.706624, -1.862799, -4.596753, 4.606680, 3.831007, -3.075969, 0.801902, -4.553856, -1.530756, 11.482397, -1.116637, -0.049839, -5.557608, 0.594015, -0.020668, -0.304966, 3.494741, -0.438330, -0.335975, -3.798270, 2.064097, -2.830903, -0.180927, 1.468278, -0.047076, -2.719292, -8.892654, 3.792854, 8.481908, 0.143010, -7.642408, -0.365793, 1.744668, -11.256462, -4.066974, -0.342073, -2.609741, -0.020335, 5.202221, -10.268240, -2.336538, -3.756663, -5.137491, -3.132803, -1.599756, 0.459914, -5.824290, 6.358953, 6.547798, -2.606397, -0.500944, 5.990815, -4.464989, -5.334608, 3.055580, -2.113880, -4.319254, 0.109849, -1.435706, 1.236413, -0.659347, 4.209237, 27.808695, -0.735722, 2.542649, -2.888971, -2.677156, -2.106372, -0.176389, 3.084910, -6.620935, -4.989196, -4.167188, -0.450144, 5.561008, 3.147554, 0.646565, -1.812273, 0.136941, -1.150602, 3.840627, 2.770045, 2.407038, -1.792738, -4.075364, 2.567823, -0.405188, 1.471137, 2.095017, 1.875115, 0.781932, 0.154044, -1.027020, 2.534902, 2.466861, 5.860183, -1.624078, -4.906713, -0.614137, -1.109079, -30.210474, 2.965029, -5.656622, -1.602059, 2.151850, -2.424324, -1.133597, 3.602876, -1.374817, 1.312690, 6.600981, -3.711915, -0.776028, -0.783309, -0.032203, 0.004787, -0.573705, 1.131783, -2.909537, -1.993327, 3.583283, -4.179435, 5.197440, 3.056979, -6.708999, -1.780574, -1.397572, 3.321905, -3.176260, 1.995708, -1.142323, -1.124792, 0.443718, 0.178960, 1.654835, 4.147129, 1.667449, -2.683200, 5.148854, -3.127443, -0.269485, 0.740664, -1.416041, 3.067853, 0.884041, -1.115872, -1.382064, 1.150366, -7.391175, 3.878388, 1.055246, 5.294684, 3.367005, 1.458345, 0.444658, 2.003294, 2.478994, -0.889095, -0.195013, 4.370057, -2.763848, -1.210211, 2.195881, -1.175749, -3.720346, 7.946991, 1.573793, 0.570961, 1.999400, 2.635027, 0.585716, -4.593002, -2.413884, -0.749115, 2.901417, 5.344875, -6.515359, -0.041352, -5.578712, -0.287062, 4.287720, -4.150388, 0.676597, -4.173187, 4.304606, -1.793098, 2.079561, 0.289218, -0.746309, 3.382319, -0.381789, 4.965404, 2.722382, 2.368737, 7.892712, -1.789875, -1.298005, 1.929076, 2.930258, 1.172013, -1.393607, 1.978461, 0.344213, 1.240076, -1.066240, 3.754827, -3.045815, -1.633300, -7.885127, 1.558708, 0.268276, -0.346626, 4.239035, 4.048144, 4.338556, -1.356537, -3.766309, -3.576638, -3.384286, 1.989253, -0.840723, 7.379016, 4.081261, 0.038133, -0.412059, 1.548459, 0.050730, 10.584702, 2.185298, 6.399117, -0.611670, -2.343023, 1.482179, 3.325804, -1.125875, 6.449540, -1.822189, 3.688849, 3.485385, 7.524541, -1.358806, -0.681207, -0.228230, -1.807666, 0.689905, -4.343250, -1.711935, 6.821198, 0.065716, -0.855093, -4.671536, 4.853776, -1.215308, -3.666353, 2.930653, 1.096143, 0.179448, -5.428270, 5.465977, -1.348175, 1.068519, 5.216844, -2.741594, -1.862931, -1.070844, 1.933743, -0.791765, 3.389639, -7.906260, 0.136756, -5.475089, 6.345721, 1.918432, -2.397303, -2.369119, -0.944957, 3.099753, -7.967153, 0.263381, -1.116860, -3.724980, 6.644803, 6.030805, 3.247872, -0.263794, -4.602955, -2.965417, -1.337570, 3.773480, 0.421972, 5.234677, 3.752219, 7.417940, 3.028159, 9.032824, 1.142330, 0.371421, 1.237620, -2.001766, 4.180665, -4.384745, -7.251889, -0.973868, 2.148206, 2.667418, 2.097704, 5.528183, 0.712180, 0.229946, -4.225259, 3.718240, 0.981887, -2.992356, 3.732011, 1.262913, 2.486276, -0.845420, 4.692969, -3.100411, -11.288132, 3.064300, 1.208451, -2.750242, 1.574212, 3.747189, 3.041973, 11.495134, 0.422142, -2.928797, 1.352937, 3.245569, 1.863270, -0.466618, -3.322316, -4.923002, 0.221532, 0.045353, 8.562343, -3.430971, -1.047455, -2.337644, 1.798944, -3.934470, 8.707403, 2.670470, -4.344477, 3.374244, 1.475771, -3.932935, 3.965106, -3.995053, 4.167596, -2.276040, -0.591933, 0.932282, -1.462290, 2.448748, 5.785700, 0.220345, 0.982267, -0.730691, 1.598619, -0.951081, -1.381845, 6.758685, 0.056153, 1.316145, 1.522889, 2.444357, 2.326614, 0.808057, -2.346661, -7.242181, -2.112781, -3.223854, -4.097082, -3.153551, 3.551127, -0.689712, 2.171698, 2.622624, -1.431949, 4.260911, -1.099790, -2.948601, 1.754508, -4.628411, 2.743903, 2.132607, -16.845716, -1.369676, 5.490612, 1.289092, 1.616659, -2.485617, -3.701179, -1.843138, -0.944958, -1.893737, 13.684652, 0.805028, -2.949577, 2.342299, 4.246860, -3.759459, -1.838323, 3.088591, 3.822837, 0.593933, -5.586031, 0.837919, 9.085196, 5.487856, 0.007424, 3.114270, 2.298352, 1.340533, 1.124153, -0.341179, 0.106273, 4.979677, -4.125438, -0.993304, -3.155438, 2.359821, 1.202263, 1.514211, -3.757470, 0.575695, 4.774167, -16.632801, 1.342419, 4.075314, -2.214773, 2.418203, 4.071110, 2.334437, -1.676125, 8.703053, -3.765240, -4.209192, 5.580455, -3.874269, 2.419491, 2.460470, 1.049202, 1.818905, -1.270050, -2.687582, -2.777706, 1.905133, 0.056396, -1.378634, 2.904002, -1.947071, -0.834215, -1.901032, 6.773449, -1.063208, 7.024649, 1.117981, -0.367361, -1.740446, 0.913254, -3.286130, -1.201091, -1.921104, -0.877035, 1.950935, 1.215519, -1.095694, 0.836712, 0.409856, -0.226469, 2.087629, -1.558773, 1.495108, 3.269367, 3.330146, 0.768648, 3.438131, -4.277113, 0.945814, 5.588975, -6.241295, -3.621197, -0.107132, 2.572536, 3.045289, 7.745201, 5.807571, -1.651044, -0.747606, -0.376589, -1.412276, -3.816433, -1.707250, -3.178647, -1.054148, -3.442186, -1.908579, 0.998634, 5.953327, -0.953441, -2.500016, -0.389423, 2.296786, 2.902000, 2.559777, -4.143809, -0.866035, 0.418335, -1.576818, -1.394512, 2.981925, 1.896816, -2.433038, -1.609794, 0.911857, 2.467139, 1.988222, 1.968848, 1.828560, 3.154080, -1.898295, -2.381668, 0.538234, -2.226501, -3.885483, -0.569491, 3.934917, -6.430278, -3.840080, 4.621070, 0.104495, 0.085714, -3.136611, -0.288041, -1.969913, 0.801661, -0.091117, 1.770883, 7.051067, -3.782157, -3.109600, -3.490250, 4.312650, -0.281791, -0.785728, -2.446904, 1.629344, -8.615851, -5.223053, 7.423417, 0.729529, -6.965634, -3.742949, 1.187336, 2.706056, -5.362820, 0.179687, 0.532849, 4.417111, 3.949409, 0.610486, -0.558789, 0.813596, -1.513216, -3.359447, -0.432475, 2.095533, 0.159239, -0.333785, -2.211792, -0.047680, -4.235281, 1.416200, -6.725245, 2.321989, 2.057713, -0.360040, -4.618135, 8.053253, -0.976249, 2.382700, -4.443527, -4.651454, 2.797418, -3.174040, 2.587232, -2.508294, 1.493909, -2.535459, -0.462006, 6.971141, 2.623497, -1.583797, 1.680959, -0.107594, -2.050336, 0.336694, 1.394572, -1.438382, 0.697090, -7.877173, -2.569103, 0.811040, -0.577080, 3.773080, 5.100289, -1.005922, -4.035639, 5.199240, 0.569351, -2.510661, -0.789682, -2.061459, 0.951691, -3.258404, 0.793776, -0.699546, -3.812907, 4.155831, -0.691320, -3.701868, 5.559592, 6.894836, -2.198950, -2.418447, 0.557332, -3.887216, -0.409616, 0.671317, 2.103461, 0.933136, -2.280445, 4.725842, -3.020412, 0.854076, -2.124374, 2.345908, 0.779380, -2.207812, -0.975366, 1.395538, 5.174310, 5.707728, -2.258522, 1.107084, -1.178677, 0.965657, -4.074826, -2.210460, 43.621979, 2.087230, -2.555933, 1.138599, -1.867495, -2.005657, 2.006593, 0.903467, 2.500440, -2.682779, 6.033059, -3.445567, 0.342344, -0.145648, -1.879602, -1.052540, -3.399618, 0.614843, -0.783479, 3.685495, -1.959264, -3.259564, -2.239694, 9.379510, 3.394999, -2.434350, -7.337447, 7.274628, -0.171698, -5.943968, -1.474846, 5.444496, 1.095178, -1.766426, -5.691527, -5.506092, -1.270262, 0.313055, 0.721622, 5.188374, 1.902969, 1.205201, -2.170613, 2.897128, -5.421397, -0.611056, 5.514519, -0.520266, -1.261025, 2.060696, -0.969377, 1.961746, -0.733028, 3.820837, -8.300204, 1.480688, -0.752736, -1.417715, -5.781563, 0.288530, -5.425626, -2.840594, 2.333462, 0.768530, 7.000396, 1.959516, -0.236193, 3.105055, -1.981859, 0.149225, -2.736589, -0.641271, 0.997428, 2.710630, -2.386521, 1.275755, -1.025446, 1.094309, -2.452138, -1.884652, -5.242512, 2.956650, -2.594950, 0.358654, -6.993193, 0.821677, -1.042855, 2.405131, -1.163304, 2.789098, 4.814901, -0.783459, -2.994322, 2.965991, 1.153805, 3.003690, 0.741842, -2.705556, -0.624102, 2.207225, 5.139067, 4.516562, 9.528468, 10.722857, -6.014948, -1.468108, -1.515384, 1.200421, -8.417472, -1.479154, -4.700307, -27.693583, 19.278984, 5.617891, 7.485734, -2.536120, 0.713907, -2.703150, 1.188608, 0.960568, -1.372093, -0.877927, 0.092983, -0.725186, -5.076651, -0.030141, -3.103490, -2.449842, -0.183140, 2.404788, 2.396079, 3.170067, 4.591356, 8.881496, -0.642793, -3.631530, -0.544090, 2.360912, -0.504165, -0.405809, -3.042205, 1.706133, 1.847016, 2.333493, 0.757474, -2.129310, 0.796120, 3.211559, -5.078777, -4.502806, -0.481662, -3.884932, 11.689110, 0.064339, 2.081212, -2.165923, 0.583592, 2.662692, 0.726894, -4.564513, 7.464515, 1.626835, -0.850533, 0.909967, -2.349465, -2.608305, -1.992356, 6.136680, -6.013201, 5.306615, -1.351115, -6.117376, 2.164393, -0.883700, -0.201548, 0.697047, -0.577786, -3.289770, 2.176913, -0.115851, -0.672782, 2.007150, 0.863120, -1.828321, 1.254452, -0.156242, -4.639762, -0.776801, 9.015604, 0.961942, -4.866060, -4.236791, 1.183998, -2.264598, 0.007299, -4.196472, 4.446774, 2.381474, -1.194094, 5.165797, 4.621684, 0.407603, -0.077693, 1.476943, -1.108431, -44.966984, -3.110889, -3.256585, -1.450435, -4.775122, -1.218151, 0.868422, 5.199721, -2.379660, 3.885153, 2.122914, -4.509441, -2.694862, 2.642570, -8.154598, 1.392721, -0.582800, 5.900602, 0.151563, -0.997430, 3.602529, 2.306926, 5.268566, 7.866295, -2.492254, 3.914945, -6.835969, 3.688162, 3.279676, 5.574743, -0.151922, -1.066244, 2.785165, 5.100389, -5.511202, -9.268009, -2.915344, -2.801649, 4.430429, -0.735414, -0.181910, 3.236409, 26.079983, -0.761731, 0.653495, -3.007643, -5.631822, 2.289257, -3.494029, -0.192737, -0.513931, -1.746571, 1.399262, 4.482061, 3.125358, 0.241923, 0.804616, -3.433713, -2.345522, -5.599613, -3.405391, -0.259379, 2.662636, 5.827351, 0.032513, 9.715652, -4.794389, 1.433447, -5.983769, 3.320502, 0.101204, -0.489180, -2.867526, -3.387309, -0.163811, 2.514033, -3.596303, -0.992485, 4.348735, 6.369435, -2.752752, -4.915279, 0.872076, 3.233520, 2.918803, -1.060405, 8.784516, -1.047169, -1.258074, 8.113674, 2.097831, -2.211263, -0.356771, -2.771562, 2.111918, 3.434057, -10.373298, 3.225255, -2.546052, 5.178988, -3.712509, 0.466352, 5.595999, -1.902481, 2.197184, 8.664577, 3.278957, 0.887089, -3.924023, -0.009009, 0.493876, -0.462941, -1.171967, 1.827280, 0.585090, -4.594781, 4.302927, 2.931898, -18.763901, 0.288057, -1.013090, 2.084519, -7.164950, 0.544081, 1.258278, -3.086405, 0.951399, 4.506777, 1.594531, -0.798212, -2.319204, 1.998325, -1.307129, 0.050375, 2.305047, 3.755739, -0.565489, -0.703969, 4.700220, -0.752597, 0.104114, -3.564498, 0.087325, 4.166714, 3.211349, -5.525641, -2.494095, 4.287768, -3.793372, -2.416002, -3.818194, -6.707589, -5.495049, 0.908813, 6.420833, 1.880672, -4.220618, -1.354073, 0.669962, -1.492136, 1.912206, 6.716006, 1.533039, -2.752949, 2.778269, 1.990574, 1.355981, 1.650745, -2.791111, 2.383833, 3.117180, -1.755023, -2.484791, -1.427666, -2.083348, -0.351782, -0.537250, 2.912282, 4.657736, -0.250751, -3.693070, -2.533830, 0.775283, -1.919510, 1.034829, -2.565387, -0.081199, -0.717182, 3.154967, -0.808507, 3.005673, 1.961030, 0.114304, 9.701428, 3.617954, 1.700600, 0.146973, -0.677872, 3.924407, -0.463155, 1.150887, 2.945447, 2.020185, 3.547239, -2.598321, 0.299821, -1.293790, -4.763089, -3.184764, 0.086383, -1.649983, -0.637856, 7.010010, 2.068723, -3.671678, 0.025033, 2.713188, -0.032102, -5.144317, 1.060371, -2.585963, 1.313534, -1.680610, 1.359738, 0.685065, -4.175454, -9.532748, -6.857881, 3.258746, 3.817967, -0.295498, 2.200130, 0.354658, 4.019381, 4.236646, 6.433453, 0.648714, -0.163894, 4.691657, -8.109050, -2.046292, -4.738183, 2.442103, -5.302021, -1.401157, -3.955161, -4.316630, -1.248632, 9.769939, -1.104696, 2.640380, -3.370728, -2.332601, -3.779285, -3.127338, -2.534174, -3.135659, 2.335110, -1.644436, -0.781360, 4.554105, -0.532770, 4.013941, 4.089730, 1.992979, 0.834781, -1.482325, 0.693270, 2.129113, 4.968291, 1.454291, 4.886137, -0.492988, 1.674870, 1.228140, -1.049799, -3.154610, 0.665178, 0.718149, -1.777335, -2.863971, 1.914558, -1.051247, -7.015462, -4.285183, 2.885106, 1.484717, 2.275805, -7.256853, 7.712085, -0.270096, 0.680072, 2.501477, 5.181439, 1.880382, -4.266192, -0.881489, -3.897562, 2.306980, 1.042805, -1.734362, -3.418523, -2.520693, -0.932934, 0.600804, -4.026608, 2.140552, 0.739133, -1.055242, 10.754318, -1.324455, -9.931609, -6.909337, -0.735538, -7.770214, -5.530866, -5.511956, 0.430703, 1.215536, -0.037053, -2.160068, -7.814392, 7.077866, -1.544036, 1.964725, -5.976818, 3.433081, -1.595420, -0.050951, 1.447312, 2.200961, -1.437491, 8.058798, 3.886115, 1.098245, -5.695917, -3.621947, -0.175427, 1.346340, -2.712342, 0.758565, 2.608576, 4.406272, 2.122162, 0.368007, -3.709307, 3.653518, 0.282671, -3.528298, 1.833689, -2.242323, 2.329140, 3.200709, 0.361647, -9.457127, 0.740096, 0.599537, 0.044123, -4.082075, -1.136967, 2.845206, 9.539391, 4.131850, 9.826702, -1.416007, 4.986438, 1.404218, -0.860064, 1.486623, -6.308336, 6.734470, 2.890507, 13.634391, -1.196998, 4.820277, -0.962307, 8.095446, 4.239813, -4.517473, 5.930497, 3.918408, 6.131054, -2.309074, 1.308818, -5.062254, -0.789280, -0.660698, -2.314359, 2.722275, 0.739409, 2.175684, 3.702787, -1.253475, -2.612329, -3.018609, -4.658152, -6.208450, -3.847937, 3.902117, -4.562454, 1.264555, -1.178211, -2.110918, 6.949625, -2.628705, 0.764311, -4.272890, -3.546896, 5.147094, 3.351293, 0.902968, 2.422658, 0.061787, -5.938614, 5.213331, -5.518444, 1.789501, -3.263019, 1.248217, -0.069851, -3.463836, 10.676457, -0.421348, 4.053063, 3.838572, -0.964464, 0.299519, 4.429276, -3.669645, 8.816913, 2.253774, -2.937450, 3.031363, -0.441367, -0.467278, -2.440284, 0.437956, -2.669316, 0.710339, -1.785235, -3.055763, 4.339170, 2.426236, 0.704910, -10.585463, -3.648029, 3.718344, 7.493590, -0.551805, 3.138997, -3.172817, 4.855944, 7.529528, -0.990349, 0.725348, -3.289269, 1.577000, -5.270145, -2.439614, 25.519426, 0.531986, -2.755472, 2.816146, 2.306898, 1.787177, -1.969297, -3.771940, -4.072698, -1.891043, -0.889094, -2.567592, -1.333927, 1.758486, 2.561443, 3.690232, 1.029738, 0.161567, 3.351619, -2.916280, 0.093553, -3.761292, 2.797852, 3.100548, -2.871847, 3.449701, -3.052869, -0.397220, -7.578485, 4.339926, -6.886413, 3.227925, 1.463515, 2.742254, -3.532009, 1.450264, 9.489766, -1.036751, 1.478379, 3.071886, 10.161637, -0.079840, -2.863888, -1.750112, 3.457873, 3.459886, 2.706931, 3.321663, -1.270632, -5.748805, -1.165622, -0.063943, -1.805338, 9.535586, -2.524263, 1.099205, 0.840550, 1.529488, -1.175432, -0.004264, -0.098393, 1.532492, -6.314032, -0.103321, -0.071644, -1.736877, 5.621130, -4.624400, -0.792513, 3.783909, -3.232745, -3.458905, 1.588551, -3.174227, -3.180984, -2.934828, 2.062442, 2.622324, 0.271381, 0.591527, -0.733445, -3.398714, 7.095342, -5.738572, 0.362881, 0.205072, -3.085334, -1.162128, 2.990404, 1.570259, -0.308622, 1.584242, -2.891890, -1.574553, -0.806329, -3.489795, 0.363795, 0.451270, -3.467881, -2.665737, -0.829700, -3.262831, 2.531505, -1.448635, -11.764088, -1.527931, 7.177086, 6.047965, 2.480182, -2.124264, -5.441585, 3.992351, 3.107618, -4.064499, 4.343797, 0.738629, -1.994727, -3.738751, 0.183636, -2.504145, 0.066069, 13.811249, -0.786826, -0.128738, 2.956079, 3.258192, 4.277177, 1.896445, 2.342017, 2.951867, 1.038004, -3.546036, -1.966871, -0.350206, -1.062556, -3.251185, -1.717144, -1.744599, -1.011379, -1.543622, -14.860034, 1.587226, 7.304573, -8.171671, -2.431875, 16.159142, 1.283842, 0.719961, -1.129456, 5.108453, -0.519006, -0.805467, -6.985523, 0.856803, -12.640044, 1.878594, 0.034747, 1.530180, -1.908082, 3.374542, 1.808994, -5.683702, -0.402296, 8.026281, 7.437514, -0.215147, -2.404820, -1.402900, -1.002659, 3.748481, -4.154411, -7.063788, -0.248710, -2.645182, 1.603671, -1.907478, 0.039413, 4.430655, 2.428565, 2.067001, 4.126395, -1.570520, -0.347207, 4.200280, 3.175920, -3.679209, 1.716497, -2.141376, 0.908101, -2.319343, -2.115519, 2.724495, 0.881507, -2.219605, 1.227373, -0.623095, -5.680072, -4.515111, -4.280621, 0.638654, 2.864280, -1.788719, 3.186849, 0.808680, -0.938253, -1.928522, -2.190552, 3.152059, -0.731879, 2.886727, 2.629760, -0.052954, 2.126023, 0.956519, -1.393854, 0.348381, 11.050415, -0.480058, 5.922142, 1.182473, 1.413033, -0.197702, 4.039019, -0.146877, 9.944363, 2.529500, 2.303541, -0.278307, 0.550621, 1.555473, -6.140727, -4.189098, 4.228193, 0.920698, -6.579219, 1.470899, -3.844724, 2.822774, -1.295956, -1.055949, 0.610222, 4.895357, -2.428566, 3.989449, -0.780607, 4.248460, -6.552973, -2.184941, -1.064698, 2.079311, -0.336459, 9.744741, 0.184509, 1.335299, -2.066525, -1.792264, -0.921902, -1.379273, -1.854074, -1.279663, -6.862578, -1.625089, -0.318789, -3.344024, -7.887208, 0.634548, -1.720671, 4.806617, 16.197113, -2.255513, -6.082765, -2.146448, 4.435984, -3.256941, 1.366697, 4.858845, -0.249602, -2.045089, -1.747685, 2.477941, -8.705357, -3.707039, 8.628284, -1.643217, 0.556386, -2.368690, 4.593940, -0.541282, 5.100232, 3.154782, -20.099430, -5.723884, 8.678602, -0.261339, -6.657823, 1.785186, 3.918643, 1.058163, -3.577414, -2.781995, 0.277656, -1.206921, -3.431406, -0.371179, 0.062091, -2.803387, -2.210452, -3.624687, -4.868351, -1.711763, 3.888983, 4.381881, 1.861924, 3.465306, 0.802314, -0.696466, 0.556550, 4.886981, -0.335794, -0.826100, -6.531191, 3.034495, -6.029027, -1.254580, -8.929978, 0.385249, 0.460604, -1.932355, -2.915896, -3.936714, 0.725031, -5.863996, 1.867756, -7.317173, -1.208842, 4.265705, 11.616241, -3.310569, 2.551403, -1.606800, -0.118172, 2.844477, 5.051156, -1.455490, 5.397809, -0.168303, -6.603184, 3.794992, -17.872410, -0.665075, 2.071692, 3.814082, -0.037632, -2.439398, -0.318887, 3.382610, 0.831689, 9.479648, -5.347363, 1.336866, 4.424902, -1.062037, 4.349950, -1.505998, -0.435761, 2.137821, -2.412280, 1.229777, -1.909602, -3.044448, -3.501979, -0.104246, 2.117775, 3.107763, -0.013128, 3.941957, 4.532784, -0.821736, 0.553934, 0.840146, 1.502584, 4.154314, 0.341067, 4.156440, -2.037416, -4.105920, 1.039137, -1.602859, -5.797848, 4.200612, -2.055606, 2.506652, -2.133896, 3.504039, 0.281614, 0.532739, 1.376643, -0.826743, -5.112361, -1.149567, -1.984722, 3.078268, 9.968194, -2.850210, -3.878800, -0.690165, -0.403210, -7.633935, 1.436931, 3.689845, 2.828761, -5.717082, -2.194066, -2.922075, 3.165498, -11.167392, 1.688192, -5.524090, 0.993366, -1.875577, 2.150835, 11.409101, -6.590968, -5.735646, -2.350946, -6.051579, 0.106657, -4.557941, -0.689102, -1.852935, 1.467756, 2.074039, -1.319408, 1.335555, -2.719368, 2.661831, -2.709215, -0.221642, 0.270116, 1.247337, 0.644675, 3.392402, 3.093399, -4.604951, 8.581511, 3.129878, 1.265846, 1.074514, -13.202533, 4.650165, 2.780230, -2.543931, -5.107362, 0.249189, 2.332117, 0.991129, -9.436378, 1.508680, -5.965739, 2.250675, 0.734286, 6.917059, 5.824757, -1.799859, 6.732748, -2.040524, 0.324983, -4.433781, -4.083701, -2.066100, -0.433014, -0.562280, -5.995659, 2.733306, -0.871792, -3.416987, 3.637951, 1.765604, 6.477674, 2.800692, 5.118347, 4.541334, -2.603925, 1.293608, -1.748612, -5.859107, 2.975294, -4.651271, -1.346864, 2.566788, -5.880526, -0.439273, 8.246215, 1.767323, 1.779419, -1.635352, -1.046876, 3.886189, 0.367515, 1.263599, -2.242850, -0.745562, -0.698594, 0.991128, -3.147751, -1.904813, -2.517425, 0.388064, 2.100670, -0.625413, -2.936193, 7.212622, 3.495085, 0.364892, -7.093049, -0.563480, -5.357414, -6.325642, -0.105547, 3.423231, -0.726191, -1.064512, 0.565287, -3.765018, -1.525965, 0.711336, -6.067619, 0.644387, -1.345242, -1.747090, -9.275399, -2.579576, -3.292126, -2.812819, -1.319786, 5.942580, -8.569520, -0.334647, 2.571727, -0.716851, -0.264076, 0.306208, -2.388574, 1.259972, -3.223534, -1.725168, -5.054450, -6.798425, -2.802125, -9.758092, 3.264822, -4.029863, 1.222392, -6.792177, -5.509841, 3.333195, 1.595992, -2.485954, 3.418053, 3.150728, -5.541345, -1.010569, 1.818943, -6.069419, 0.080386, 6.827480, -0.565225, 0.868441, 0.249676, 0.420381, -1.855428, -2.638492, 0.961045, -5.607455, 3.067363, 4.906213, -0.230991, 5.313849, 0.373842, -2.051629, 5.132754, 1.507394, -0.034538, -1.821275, -5.229528, -1.681695, 0.247036, 4.154735, 1.013717, -2.943813, 1.753060, 0.640790, -5.692806, 4.646099, 0.711496, -6.592886, 0.962532, -1.473296, -1.644924, 7.494703, 2.794217, 2.518434, -5.441831, 1.128450, 1.821951, -3.574837, -2.428346, -8.625550, 7.606143, 1.294082, -7.733930, 2.006055, -1.835669, -0.347749, 0.333535, -2.273628, -4.231286, -6.758154, 2.482530, 3.134415, 7.189015, 3.064994, 1.558125, -0.783350, -2.527781, -1.866463, 4.669818, -1.330083, -1.444759, -0.930375, -0.798592, -3.410083, -0.274624, -2.789313, -1.357198, -2.144307, -4.481643, -2.742354, 0.240901, 1.413023, -5.612537, 6.231907, -4.355688, 1.172392, -2.344915, -6.774537, -2.949419, 6.475248, 1.293685, -0.787925, -0.651137, 4.311115, -3.033743, 4.079912, -0.069083, -4.581884, 1.495375, -1.369064, -3.298662, 4.778340, -6.396335, -0.965669, 2.149769, 1.754473, 0.665721, 1.364326, 0.428260, 0.394718, 2.100190, 3.103011, 2.281635, -3.107227, -2.661521, 5.721916, 12.464497, 2.350211, -1.664418, -2.115266, 1.659379, 0.040190, 4.463559, 2.570813, -4.260760, -0.914611, 3.548350, 1.413229, 0.150703, 0.571228, -5.263054, 2.867812, 5.113122, -3.562930, 1.321959, 1.296617, 1.840360, -0.354465, -0.841742, -1.386047, 0.234092, 3.117925, -5.204442, 4.431318, 1.275501, 0.174241, -3.576902, 3.565288, -7.621102, 0.725864, 0.208606, 2.634654, -0.689891, -5.271073, 4.451200, -0.051369, 6.495808, 1.571615, 9.977846, -0.262327, -1.900775, 1.561583, 2.607460, -2.524343, -2.247475, -3.985308, -5.154519, -1.082297, 3.086911, -1.647472, 0.552256, 1.241718, 4.260769, 2.855896, 3.581069, 2.182872, -1.281816, -3.166152, -3.134234, 3.630118, -7.424340, -0.392661, 4.074488, -0.762999, 3.409889, 2.010115, 2.272844, 3.770877, 1.274487, 2.700471, 0.583192, 1.880383, -1.851212, 1.919418, 6.667684, 0.557479, 4.419869, 2.297357, 1.687879, -1.395794, 1.187495, -5.052061, -3.167101, 4.399576, 2.319478, -2.672449, -4.151639, 5.109945, 2.622741, -3.191033, 1.350803, 1.247117, 1.523707, 1.524731, -4.275401, 4.144188, -3.426904, 1.059611, 1.229868, 1.717144, 3.219443, -1.379574, 6.763114, 4.209159, 4.669989, -1.552919, 1.956590, -3.063505, -0.818876, 0.398282, 3.045617, -3.467905, -1.740873, -0.328541, 3.964144, 2.526994, -3.503591, -0.354808, -0.716926, -3.544482, -1.276911, -3.532305, 0.649438, 2.690775, -3.869832, 4.179513, 2.495278, 2.825523, -1.422859, -1.275892, -1.227360, -5.181144, -1.844231, -1.535353, 1.778720, 0.579536, -3.280610, 0.543116, -1.489961, 1.316825, -2.299914, 0.209243, 0.453135, -3.278073, -3.260607, -0.946968, -2.961464, 3.596917, -2.578865, 0.882547, -1.046095, -0.429423, 0.850637, 4.075096, 1.123888, 3.178572, 4.054078, 2.019214, -0.743886, 5.753891, 2.066515, -2.333024, 6.216573, 2.248173, 4.755955, -3.988805, -0.547319, -3.821634, -0.701325, -2.453382, 2.735726, -0.528919, -0.634328, -1.279562, -1.031389, -2.924713, -0.179029, 42.316631, 3.399495, -0.467713, 3.538526, -1.384002, 3.893143, -0.334801, 11.199867, -2.195855, 1.888944, -4.320056, 0.755040, 1.081292, 10.907355, -3.523884, -5.846659, -2.079819, -0.271239, -3.652007, 2.723127, 3.150651, 1.373014, -4.964145, -4.856517, -1.054992, 2.489006, 4.521762, -0.100313, -1.749521, 0.557087, 1.873798, 1.777753, 0.061108, 1.141199, -1.867965, 0.973980, 3.827049, 5.733145, 0.327881, -4.415548, -2.686085, -3.498946, 9.935287, -4.941910, 0.530118, -4.953368, -2.943155, 3.611089, -2.938747, -4.140371, -3.059306, 1.901671, 2.769300, -1.015664, 0.834808, 7.847197, 2.926960, -0.200670, 5.732471, -5.167188, -2.899392, 3.268939, 0.028522, 1.939959, 1.543525, -1.434285, -2.884543, -2.542636, -2.979258, -1.692775, -2.327815, 0.393680, 2.332595, 0.512365, 2.758076, -0.678760, 5.337368, -0.521859, -3.174936, 2.157091, 7.742205, 3.659091, -0.176012, 2.298924, -5.640631, -0.399329, 4.093763, 0.591057, 3.205168, -2.254110, 1.035557, -1.663897, -1.972889, 1.000074, -0.450898, 3.438661, -0.413361, 2.912843, -2.715726, 2.627237, 9.346821, 2.512219, 2.022259, -3.861986, 3.279199, 4.369876, 6.735238, 3.659325, -2.113575, 3.877972, 1.938882, -2.754222, -2.302468, 4.789912, 0.175966, -1.774472, -0.481663, -1.509986, -1.885745, 0.840144, 3.241411, 0.086078, -1.011573, -2.879265, -5.263968, -1.294606, 1.292749, 2.220772, 34.629295, 0.815042, -3.064621, -0.799082, -5.806960, 1.333278, 1.967903, -9.410216, -3.309076, -4.448856, 7.331085, -3.153900, -1.167770, -2.164169, 1.891395, -16.319754, -1.391677, 1.153834, 3.318664, -5.902040, -4.184224, 0.999345, 1.227702, 2.622899, -12.610269, 0.547799, -0.841228, 3.554890, -3.054221, 1.191280, 2.858200, -0.107742, -1.796140, -5.167519, -2.952243, -0.991334, -1.160363, -3.391056, -7.776468, 4.159617, -3.535255, -2.583153, -2.086859, -2.986647, -1.117018, -0.348580, -4.668072, -1.983395, -4.534790, -5.013614, -5.024656, -3.032631, 3.231455, 6.135790, 4.552684, 3.503971, -0.114595, -2.233629, -5.283627, 3.570597, -4.535796, 1.975995, -1.817757, -2.049031, 1.648561, 5.248970, 4.141850, -2.243590, -5.773128, -1.633623, -2.526146, -2.853397, -3.678516, 3.093559, 8.550698, 0.936637, 0.071512, -4.433811, 3.393233, 22.987564, -1.477979, 0.435597, 6.149341, 1.090026, 2.535240, -1.342996], - "phi3.5:latest": [-0.673146, 1.773961, 1.383936, 1.196396, 0.803903, 0.041233, -1.880727, 0.656677, 0.414660, 0.618172, -2.137454, 0.863581, -0.927540, -1.059571, 3.178715, -0.531555, 0.528022, 2.207068, -1.345677, -0.733583, -1.960500, 0.252776, 1.050998, 4.098019, 1.398190, 0.633678, -0.285714, 0.178222, -1.715670, -0.595387, 0.283730, -1.291529, -0.118760, 0.233339, 1.325423, 0.156227, 0.816882, -0.922595, 0.362475, -3.944388, 0.326797, -3.158161, -0.732985, 1.371407, -2.308407, -1.135303, 0.659083, -0.910535, 0.900130, 2.807716, 0.168302, -1.908314, -0.816546, -0.732243, 2.254863, 0.547679, 1.224704, 0.182054, -0.245425, -0.152709, 1.269749, -0.729958, -0.324072, -4.141424, 1.497815, -1.658101, -0.067268, 0.341385, -0.418615, 0.548528, 0.885368, 1.378493, 2.714428, -1.364134, 0.758718, -0.285305, 2.441447, 3.092359, -0.394262, -4.053423, -1.546375, 1.188800, -0.722282, -1.030131, 0.868250, -0.742288, -1.632083, 0.561935, -1.452416, 0.438927, -2.190960, 0.433576, -0.217896, 0.200255, -0.936510, -1.232224, -1.273036, -0.485626, -1.580620, -0.755826, -1.929564, 0.465290, 4.440741, 3.027395, 1.076537, -0.644454, 0.186216, -2.798541, 0.465393, -0.019308, -0.310881, -4.531783, 2.101488, -5.035508, 2.224858, -0.011239, 0.521220, 0.857749, -0.375949, -0.357070, -4.447475, 1.367533, -0.899427, -0.499188, 1.973059, 0.953046, 2.269581, 3.454970, -0.048320, 0.186712, 0.723754, -0.597165, -0.704518, -3.137668, -0.235396, 0.612854, -0.658817, 0.153629, -0.792131, 1.470392, 2.165122, 0.188555, 1.302444, -2.575915, 0.124427, 0.352611, 0.320023, 2.944951, 4.222467, 1.244262, 0.798227, 1.428810, 1.982603, -0.927159, 1.607864, 1.340480, 10.285347, 1.991316, 0.211486, -1.872480, -0.404099, -0.676289, -1.028066, -0.997946, 0.940869, 0.110667, 1.143299, 0.608134, -1.320946, 0.917046, 2.197168, 0.313836, 1.368181, 0.940270, 0.310563, -0.476830, -1.447140, -1.780340, -1.682355, 1.462738, 0.196439, 0.911649, -0.420793, 1.497158, -2.186535, -2.329298, 1.269993, -0.463545, 2.139990, -0.418947, -1.203943, 1.084465, 1.353191, 0.058443, -1.170981, 1.961121, 2.214397, -0.376900, 2.705678, 0.812824, 2.097522, 0.286724, -1.450737, 0.129898, -2.488995, -0.329558, -0.128161, 0.197423, 1.306825, 0.113337, 1.212518, 0.731604, 0.703685, -0.389565, -0.476361, 1.828673, -0.169361, -2.419929, -1.995867, 2.348401, 0.507247, 0.869877, -2.789433, -2.902169, -0.972280, -7.036316, -1.327737, -1.495203, -3.542428, 2.349562, -0.176259, 0.577736, -0.263452, -1.140350, 1.543239, -0.912279, 0.656487, 0.746208, -2.934609, 0.181207, -1.764477, -0.055239, 0.358976, 0.867107, 1.032517, -1.327570, 0.088860, -2.025778, 0.691003, 0.170094, 2.655743, 0.918418, 2.664694, -2.300812, -3.386097, 0.444859, 1.506870, -0.811175, 1.237885, -1.537902, 0.596099, 0.232010, -1.399363, -0.405298, -1.654561, -1.731333, -3.663979, -0.426686, -1.460794, 2.440381, -1.661958, 0.633296, -0.810366, 6.727916, -0.109063, -1.092131, -0.154039, -1.273530, 1.229352, -0.608609, -0.921947, -2.829079, 0.318393, -3.228506, -3.602714, 0.889819, 6.571033, 0.005032, 1.567258, -1.415679, -0.924295, -1.995832, -0.434035, 2.503207, 0.473745, -0.454890, 0.762829, 0.725630, -0.907874, -0.634107, -0.395222, -0.725407, 2.193555, -1.178942, -2.723499, 1.179755, 1.163202, 2.051129, -4.934263, 1.330124, 0.219635, 0.998203, -0.199323, -1.976434, -1.401147, -0.783115, 1.219287, -1.736259, 1.308689, -2.426950, -1.290456, 0.375212, 0.023432, -2.588938, -0.825791, -2.872364, -2.859827, 1.172949, -1.544376, -0.389452, -1.740335, -0.849052, -1.976815, 1.528051, 0.306343, -0.553086, 0.849244, -1.591414, 3.744164, -0.516943, -0.664582, 2.461721, 0.289016, -0.631565, -0.815701, -1.867728, 0.351050, -3.697519, -0.589073, 1.586753, -0.961073, 1.888311, 0.191198, 1.605824, 0.601401, 2.723006, 0.248367, 0.551193, 0.704792, -0.607476, -1.915296, -1.144370, 1.356979, -0.132788, 0.985682, 0.851733, -0.764221, 1.425332, -2.582093, 0.091918, 1.125133, 1.364352, -1.795812, 1.113049, -1.442453, -0.749418, 0.773318, -0.673764, 0.868663, -0.041924, -1.270996, -0.574109, 1.020069, 1.463071, 2.494691, -0.687432, -0.729114, 2.130355, -2.116971, 0.416911, 0.682230, 1.381197, -2.189674, -1.193410, 0.987836, 0.039156, 1.395965, 1.923637, 1.515283, -0.361489, 0.086324, 0.531358, -0.957165, 0.115298, 0.881636, -2.629735, -0.798789, 1.396895, 0.901492, 0.593501, -2.432323, -1.074346, 0.849968, 1.087177, 0.719528, -0.540680, 1.256600, -2.109005, 1.204493, -0.323969, 0.429343, 1.169857, 0.192498, -3.646500, 0.806962, 0.224534, -0.359960, -0.820515, 0.044796, 0.305256, -0.830295, -1.821882, 1.057876, 0.816326, -2.350938, -1.109166, 1.192291, 0.934139, 1.383155, 0.601578, -0.330424, -0.624600, -0.815868, 1.945924, 2.251176, 1.019237, 1.710544, 1.166476, -1.807430, 0.627442, 0.986137, -0.855849, 0.754001, -1.267901, -1.372234, -1.402915, -0.764807, -0.212386, -0.746779, 0.169666, -1.000273, 0.405105, 0.948420, -0.932038, -0.532197, 1.825088, 1.972480, -0.450919, 1.831221, -1.111704, -0.718301, 1.285014, 1.290329, -0.265116, 0.555321, -1.808289, 1.419344, 0.491138, -0.228002, 0.717023, 0.944590, -2.756543, -0.983593, 0.498523, 1.766066, -2.586064, -2.043901, 1.873527, -1.771113, -2.022461, 1.296479, -2.405484, -0.719389, 0.935015, 0.554301, -2.223877, 0.683203, 0.517766, 1.028774, -0.007526, -4.714740, 4.243845, -0.631999, -1.488392, 1.275212, 0.300827, -0.580512, 1.733458, 2.243669, 3.152543, 0.574098, -1.437298, -0.612046, -0.817055, 2.047636, -1.544132, -1.150256, 4.024682, -1.145868, -0.321381, 0.036888, 0.117946, 0.528881, -2.264805, -2.046049, 2.018342, 0.162491, 0.658578, -0.571300, 2.402366, 1.387818, -1.144415, 0.706773, -0.775977, -3.139971, 3.118639, 0.604142, -2.242523, 0.173237, -0.808030, 1.549709, -0.290061, -1.604086, 1.832886, -3.782074, -1.089165, 1.034331, -0.111195, 0.266396, -1.479985, 0.567228, 2.140018, 0.262131, -2.529051, 2.798075, 2.819704, 1.171151, -3.096925, -0.955713, -0.615862, -3.596173, 0.316286, -1.660588, 0.269885, -0.968338, -1.842830, -2.269946, 2.878476, -1.733101, -2.929590, -0.480505, -1.059464, 1.740165, -0.007570, 0.052200, 1.747636, 3.439924, 0.101046, -1.268906, 0.335412, 2.007034, -1.025929, 1.646694, 1.435544, -0.341828, -0.516777, 0.510846, 0.747431, 1.469532, -1.372038, -1.390458, -0.740782, 0.500687, 0.698110, -0.137589, 1.720983, -1.059209, 0.793849, -0.279748, 4.670698, 0.981363, -0.424805, 0.572715, 2.388191, -2.164352, 5.346311, -1.883411, -0.373628, -0.160289, -0.551086, 0.412956, -1.407958, 0.325130, 1.374554, -1.925456, 0.011369, 1.184993, -0.696698, -0.449753, -3.006976, -0.803612, 3.985201, 0.628395, -0.582267, -1.508372, -1.300323, 0.458271, 7.469186, -0.976351, -0.812085, 0.515193, -1.257922, -1.129265, -0.001616, 2.649155, 0.495838, -1.336125, 1.529925, -0.779347, -1.866342, 0.133681, 2.312066, 1.660315, -0.141330, -0.904580, 3.581172, 0.019073, -1.372449, 0.468618, 2.462330, -0.930026, -0.933784, -1.977075, 1.956501, 0.268021, 1.684524, -0.140436, -2.693254, -1.268742, 0.449132, -0.547531, 1.748071, 3.262753, -1.866733, -0.426130, -2.178544, -0.165114, 0.737579, -0.033724, 0.131663, -5.324664, -0.246939, 1.676050, 1.039152, -0.701957, -0.344552, -0.229530, -0.771047, 0.692829, -1.126916, 0.122709, -0.501818, -0.148112, -3.739330, 0.979546, -1.364197, -2.134974, -1.083797, 1.264926, 0.568090, -0.310036, 1.902893, -2.458756, 1.602398, -2.160991, -0.807726, -2.985387, -1.801137, 0.823810, 3.340411, 2.132172, -2.672569, 0.762695, -0.340871, 1.422122, -0.492634, 2.051865, 1.743893, -0.354465, 4.794233, -0.827860, 0.723966, 2.358460, 0.190277, -1.688527, 3.538512, 0.775830, 1.449130, 2.882816, -0.861145, 0.550950, 0.631133, 0.811810, -0.080506, -0.893572, 3.127145, 0.246261, -0.966694, 0.611752, -1.651355, 0.501113, 1.863260, 0.130295, -0.385667, 0.730604, 0.506296, 0.603679, 1.655040, 0.857641, 1.953502, -0.274846, -1.065344, -0.818920, -0.053031, -0.216042, 1.113688, 1.708415, 0.503735, -0.439812, 0.085326, 1.974412, -1.129410, -2.263748, 0.180430, -1.006026, -0.390191, -0.671141, -0.723127, 1.485837, -2.730896, -2.274291, 2.390012, -0.048095, -1.352887, 0.348627, 0.272339, 1.243004, 0.675311, 0.304342, 1.022612, -0.512891, 1.432814, 0.774289, 1.209724, 0.321353, -1.716853, 2.470210, 0.661494, 1.298754, 2.647157, 2.167352, -1.588103, 2.885778, -1.514561, 2.003929, -0.151694, 3.121073, -0.502605, 0.709648, -0.646359, -0.212184, -1.120872, 1.901744, -1.166306, -2.297191, 0.395841, 0.345555, -0.641248, -1.336668, 0.896454, -0.320724, 3.788651, 1.582513, -1.623298, 1.267899, -1.840239, 1.309733, 1.329613, 2.815268, 1.619774, 0.785730, -1.015563, -2.362249, 0.182186, -2.887139, 1.076801, 1.295002, -3.118979, 1.505913, -0.621413, 0.563019, -0.000360, 0.054379, 1.742873, -1.802679, -2.307700, -2.080847, -0.597570, 2.063887, -0.632688, 3.135220, -0.383116, 2.324251, 0.249234, 1.425846, -0.505650, -1.519348, -2.283833, 2.136272, 1.202572, -0.502516, 1.122624, 0.092540, 0.521259, -2.175407, -0.831501, -0.404301, 0.131983, 0.098812, 0.329781, 0.751166, 1.401148, 0.207615, -1.293648, -0.520432, -0.084056, -0.620572, -2.362188, 1.054522, 1.251415, 0.353496, 0.717204, -1.459248, 1.449751, 1.730279, 0.820404, -0.755251, 0.366820, -1.724594, 1.639398, 0.582624, 0.638566, -0.701108, -2.931173, 0.635212, -1.847404, -0.623347, 1.343464, 0.879213, -0.189924, 0.366114, -1.877230, 2.091859, -0.710351, -1.330898, -0.023267, -1.433759, 1.032883, -0.164378, -1.544834, -0.802009, -0.147338, -3.158469, 0.702302, -1.655990, -0.620430, 3.692657, -0.729728, 0.268183, 0.408644, 0.532836, -0.401248, 0.041959, 0.258363, 1.707924, 0.522655, 0.945591, 0.364155, -0.041151, 0.391319, 0.646094, 1.533962, 4.343158, 0.636135, 1.588725, -0.200152, 1.370110, 0.152343, 1.668502, 3.353289, -2.472697, 0.776751, 0.912892, 1.100329, -0.397742, -1.205941, 0.399664, -1.637245, -2.003112, 1.309702, 0.646123, 1.371912, 0.196675, 2.367531, 0.267502, -1.449905, 1.928928, -0.742447, -0.245650, -1.716811, 0.945224, -0.592774, 1.890682, -0.365412, -1.183000, -3.070894, 1.242379, 0.593016, 0.231816, 0.090744, 2.483765, -0.729865, 0.854456, 0.826709, 3.415189, 2.207824, -0.404572, 0.994595, -1.309107, -0.268799, -0.946287, -2.263054, 1.194651, -1.419608, -0.663798, -0.528309, 3.908534, -5.938332, 0.635583, -0.569915, 1.220457, -0.294586, 2.837642, 0.800591, -0.818307, -0.096893, -2.235005, -1.563161, 0.627740, 2.194680, 1.563681, -0.333328, -2.443478, -2.264539, 1.205792, 1.025922, 1.831161, -0.623546, 2.223986, -0.567398, -1.341268, 2.216712, 1.080471, -0.766948, 0.774700, 1.048705, -1.248191, 0.443985, 0.673279, 3.370724, 1.808142, -1.560064, 1.584379, 0.613911, -2.831164, -1.145923, -1.977830, 1.845394, 1.417885, 0.409615, -1.018333, 1.978347, 1.404990, 1.162900, 0.943632, 1.678036, -1.569082, 0.714683, 0.069758, -1.084424, 1.424060, -0.543550, 1.560557, -0.424512, -0.180426, 0.735663, 2.111835, -0.617141, -0.160254, -3.093450, 1.672516, 1.184744, -1.509728, -2.515543, 0.257744, -0.039987, -1.869883, -1.737732, -2.736469, 2.569211, 2.880934, -2.569121, 1.472750, 1.251466, 1.260776, 1.332785, 0.671242, -3.314538, -2.198795, -1.115016, -0.445950, -0.688170, 0.056947, 0.457271, 0.009432, -1.102267, -0.178054, -1.955634, -0.674558, -0.159688, -2.308983, -0.126551, -0.746742, 0.724022, 0.137716, 1.714678, -0.286383, 0.274415, -0.024592, -2.046172, -0.637060, 0.202975, 0.618997, -0.959988, -2.557364, -0.879654, -1.198814, -2.077335, 1.150322, -2.486706, 1.593242, 0.045499, -2.291189, 1.116508, 0.482507, -2.431943, -3.097333, -0.351557, -1.475482, 0.046465, -1.999517, 0.230853, -4.928410, 0.100102, 1.390009, -0.345562, 0.580213, -1.496691, 3.115069, 0.501402, -1.718943, -2.424936, 3.898009, -0.608152, 0.160677, 0.055421, -0.031607, 0.250230, -0.149788, 1.348658, -2.675330, 2.494114, 0.576467, 1.210514, 1.312075, 2.822564, 0.293929, 0.318963, -3.160077, 1.085700, -3.362732, -1.125940, -1.586181, 0.529336, -0.312040, 0.381185, 0.886623, 0.660722, 0.743214, -0.958793, -0.475246, -1.550586, 1.177952, -2.123308, 0.959841, -1.628015, 0.929789, -0.157312, 3.011603, 0.114650, -0.827822, 0.430165, -1.700076, -0.950380, 0.303212, -0.836592, 1.126112, -0.045868, -1.803094, 0.516004, -0.222089, 1.502576, 0.940191, 1.435250, -1.816076, 2.341066, -2.904779, -1.301980, -1.344776, -0.181449, -1.439783, -3.458403, -0.593239, -0.110873, 3.232347, 0.489341, -3.170200, 0.211684, -0.921975, -0.940839, -0.883399, -2.655984, -2.561061, -1.166499, 0.727030, -0.352341, -0.780770, 1.424971, -1.228519, -2.358953, -1.038689, -2.231122, -0.015513, -1.084853, 1.439958, 1.159530, -0.217411, -0.560229, -1.697035, 0.034073, -2.068393, 3.257823, -4.360054, -4.215295, 1.881029, -1.414001, -1.374195, -3.668932, -0.560354, 0.824165, -2.859716, -0.777071, 1.773608, 0.096602, 1.271389, -0.588287, 4.355747, -0.727979, -0.227092, 0.512032, 1.159031, -0.681646, -0.352979, -2.502501, -1.304312, -1.753210, 1.070594, 4.093348, -3.625806, -0.890541, -0.195012, 0.666276, -0.572682, 0.427824, -0.038257, 2.200452, -0.393409, 1.126617, -0.532790, -0.532255, -1.493815, 0.595699, -1.447249, -2.675511, -0.290311, 2.711103, -1.072857, -0.172172, 0.407848, -2.808752, 1.145212, -0.544969, -0.996059, 1.018824, -0.555070, 0.211478, -0.004442, 0.582596, -0.668361, 1.401366, -0.098813, 3.246641, -3.185895, 2.080038, 0.160968, 1.838961, -0.023389, -3.347831, 5.887652, 1.300398, -1.662176, 1.223447, -4.021576, 1.292036, -1.810053, -1.080596, 0.835527, -0.410658, -0.298249, -0.457787, -1.545626, 1.795876, -0.984113, -1.766650, -0.375398, -2.392029, -1.644748, -0.785998, -5.763386, -3.293936, -0.051615, -1.128634, -0.818426, -1.000686, 0.841410, -3.037892, 1.423512, -0.893654, 3.617955, -1.990744, 1.215377, -5.811119, 0.485499, -0.580929, -0.537345, 1.424533, 2.079854, 0.141992, 0.650065, -1.246158, -1.742799, 1.742426, -0.192220, -0.292407, -0.543976, 0.551129, -1.653536, 1.970969, -1.764221, 1.518165, -7.917214, 1.010946, 1.332931, 0.507154, 1.433316, 1.781129, -0.894100, 3.383435, -1.889388, 0.407124, 0.710977, 0.418546, -2.339482, 0.741511, 3.067454, 0.449851, -1.441965, 1.919511, -0.342265, -0.799464, 0.322938, 1.697500, 1.019305, -3.385572, 0.386305, -0.253275, -0.863457, -1.660045, -0.660654, 0.743807, 0.129033, -0.597894, 0.481607, -1.555833, 0.838941, -1.555304, 0.747505, 0.440190, 0.752784, -1.506714, -1.169028, 3.117794, -3.908451, 0.765022, 2.483656, -1.821594, 3.972262, 1.828213, -0.461630, -2.807651, 1.166925, -1.519157, -0.093785, -1.908515, -0.512475, -4.476390, 1.529089, 0.964360, 1.900128, -0.888700, -0.844534, 1.599827, -2.783862, 2.001250, 1.975040, -1.352037, 2.137866, -1.235946, -1.438479, 0.228712, -2.683421, 0.129679, -0.052211, -0.810313, 0.342873, 0.344503, 2.244840, -0.176502, 1.619955, 0.674555, 0.851681, 3.089395, -2.131029, 1.433718, -0.476998, -0.611014, -2.152775, 0.165411, -0.787076, 2.570150, -0.973344, -1.597286, -0.388607, 2.141652, 0.727819, -0.370297, 0.971056, 0.011458, -1.178635, 1.190090, -0.302382, -0.550987, -0.956748, -0.070032, -0.107558, -0.421611, -0.990505, 0.154211, 0.441118, -3.552241, -0.022393, -0.294533, -0.846129, -3.164885, 1.241660, -0.058364, -3.566252, 0.163943, 0.339022, 0.236127, 1.147684, 0.347062, 1.353426, 2.250771, -0.174392, 0.446126, 1.937500, -0.634967, -0.131388, -0.448045, -1.244684, -0.725132, -1.435691, -1.738168, 0.088492, -1.221726, 0.028294, -1.696285, 0.995742, 0.585122, -0.436960, 0.107112, 0.414259, 1.082209, 0.181578, -0.226709, -4.358131, -1.418336, -0.512266, -1.336164, -0.296457, 7.184535, -0.553087, -2.145152, 2.550748, -0.760159, 1.821675, -2.182503, 3.951545, -0.577346, -2.530480, -3.358564, -1.959923, -1.442705, 0.530144, -0.060973, -0.016459, -0.443560, -0.521755, -2.103884, -1.286840, -2.623459, -0.692700, -0.918089, -0.803318, -0.991122, 1.028888, -1.471276, 1.424925, -1.107191, -0.965495, 0.154568, -1.529995, -1.823717, 1.225945, 0.602767, 0.400017, 0.410254, 1.832579, 2.212959, -0.747431, -2.006568, -0.498442, -4.118858, -0.301151, -0.305645, 0.194513, 2.383834, 0.408205, 3.341026, -0.185864, -1.192237, 0.795731, 2.458055, 1.343174, 1.944866, -1.206866, 2.884596, 0.652055, 3.231265, -1.614543, 0.183459, 0.086889, 0.430526, -4.576360, 0.630569, 0.491099, -0.847796, 0.321519, -2.994968, 3.804292, -1.455904, -0.918893, 2.082967, -0.069049, -1.643836, 3.750937, -0.650173, -0.148329, -0.172040, -0.918323, -0.732911, 1.701877, 3.259797, -0.230898, 0.808398, 1.285467, 0.337568, 1.223102, -1.505829, -0.719409, -0.377685, -1.978758, -0.771919, -4.004796, -2.054174, 0.746841, 0.145322, 1.321690, -2.126296, -2.036186, 2.277106, 0.016663, -0.767762, 0.322893, 1.736591, -1.951746, -0.033855, 0.729972, 0.788443, 0.183445, 0.319821, -6.107355, 0.886826, 1.263803, 0.366631, 0.521532, -1.304369, -2.765462, 0.060144, 0.554792, -1.775460, -0.411091, -0.304042, 0.928038, -0.849652, -4.527589, 1.217022, -3.725563, -5.323983, -0.014202, -1.130519, 2.211132, -0.134026, 0.030539, -0.981018, 0.206317, -0.317929, 3.885501, 0.742766, -0.977644, 1.758858, 2.927278, -1.278957, 0.873640, -1.027960, 1.095670, 0.117764, -2.288657, -3.509668, -0.047583, 1.867454, 1.197928, -2.911638, -2.364637, -1.122951, -4.034993, -0.559865, 0.525332, -1.691924, -0.941415, -0.525242, -0.296868, 1.159536, 1.086406, -1.000133, -2.499835, 1.402897, 4.952349, -1.310867, 3.258150, -0.778347, -0.268580, -0.196423, -0.523824, -1.064013, 0.792269, -6.334123, -0.162495, 0.073113, -1.992890, -1.624917, -0.309036, 1.016871, -3.047204, -0.509374, -2.491468, 1.003789, -1.797539, 0.166563, -0.822455, -1.270393, 0.776553, 0.539906, -0.197045, -0.080154, -1.026400, -1.774185, 0.403188, 1.057254, 0.945254, 2.849382, -1.693514, 0.057934, -0.857088, 0.381920, -3.586883, -0.906704, 0.664517, -1.584051, 0.985732, -1.237406, -1.308203, -0.818927, -0.246370, -2.968447, -0.234438, -1.024057, -0.420833, -1.944758, 0.788728, 0.493811, -0.091664, 2.025641, 2.102431, 0.683854, -0.197049, 0.092760, -3.970118, -0.933897, -0.184341, 0.504163, 3.078834, 2.768745, 0.518151, 3.413862, 0.188685, -2.417682, 0.290612, -2.591668, -0.998794, -1.452080, 8.389590, 0.578668, 1.229078, 1.017800, -1.350522, -2.397149, -2.219742, -0.049068, 1.150641, -0.206271, 0.633414, -0.467812, 0.620190, 4.507153, 2.818350, 0.571067, 0.664137, -0.791071, 0.220109, 1.523981, -1.379269, -0.826409, 0.587569, -2.330011, -0.486263, -1.444806, 0.011725, 6.686158, 0.388426, 0.310425, -2.178561, 0.547642, 1.225539, 1.200455, -1.100693, 3.323766, -1.788453, -1.965163, 0.214364, -0.182455, -0.653088, 1.040133, 0.703285, -2.207464, -2.887304, -0.010447, 1.970276, 1.418307, 0.728565, -0.587430, 0.403100, -1.716673, 0.864310, 0.129826, -1.240194, 0.496615, -1.114163, 0.875957, 0.152658, -0.685775, 0.166833, -1.099020, -0.464600, 0.342878, -1.487813, -0.974075, 1.786528, -0.618787, -0.053368, 0.876156, -1.104406, 1.321758, -1.502696, 0.758169, -0.540708, -0.528666, 3.349993, 0.070434, 1.461162, -3.544199, 1.554642, 0.691654, 0.058363, 1.318910, 0.381145, 0.727529, -1.435946, 0.592560, -3.905318, -0.094539, -1.126841, 3.018564, 2.541469, -1.618298, 0.514458, 1.918137, -1.856116, -1.378256, -3.185948, 0.927860, -0.774732, -3.772287, 1.468701, 4.235704, 0.730582, -0.833708, 0.093555, -0.737915, -2.385541, -1.650165, 0.755775, -3.857619, -1.170876, 0.125429, 0.773791, -3.103241, -0.261559, -0.063795, 0.758651, -0.437210, -2.787760, -0.314942, -4.298765, -1.067320, 0.831327, 0.587873, -2.702937, 0.255556, 1.505676, 0.352411, -0.318188, -1.064380, 1.161265, -0.142489, -2.844601, 4.133595, -1.232116, 1.008827, 0.770166, -1.447083, -2.225446, 0.673317, 1.196312, -0.162135, -0.137597, -0.413933, -0.944130, 0.886967, 1.532139, -3.375753, -0.435553, 0.373217, -0.233012, -1.690537, -1.326474, 1.353997, 5.176952, -2.505056, -1.193604, -0.188181, 1.137731, -0.528390, -0.500226, 0.804525, -1.472408, 2.258844, -1.035661, -2.530096, 1.115152, -0.343501, -0.181792, 1.424267, -2.451889, -0.571956, 0.250034, -0.295899, -0.593026, -0.236472, 2.189043, 0.837979, -2.021635, 2.651701, 0.020600, -1.790586, 0.960398, -0.583401, -0.522204, 0.014939, -0.018401, 0.078440, -2.408650, 0.871342, 0.842621, 2.651843, 0.245014, -1.991489, 2.936932, 1.172129, -0.853839, -0.460163, 0.976885, 1.831560, -0.102884, -2.159085, -0.011857, 0.583826, -0.467147, 0.816048, -3.844757, 0.744443, 0.281508, 0.574364, -0.689570, -0.900283, -0.919239, 1.463283, -3.583446, 1.677760, 0.858401, 6.208580, -1.461956, -2.028792, 0.203862, -0.514053, -0.036900, 0.457810, -0.124636, -0.904888, -1.134708, -0.610438, -0.674280, -1.453439, -0.535142, 0.174291, 1.091521, -1.598876, 0.076207, -2.438708, -0.105628, -0.070608, 0.490392, 0.442303, 0.768931, -0.549218, 0.144212, 0.531282, 0.833482, 0.777007, -2.863263, 2.854618, -0.030283, 0.811216, -0.701562, 3.931106, 0.069982, 0.111765, -0.542222, 1.866537, -0.489160, -1.649108, -3.219932, -1.514001, -0.444119, -1.672627, -1.727185, 0.841360, 3.777926, -0.197962, 1.959742, -0.053520, -1.890777, 2.528770, -0.051881, -0.091327, -0.606603, 0.673440, -0.173713, 1.656440, 0.047424, 0.867838, 0.694412, -0.639834, 0.332601, 0.525874, -2.030658, 1.371668, -1.011419, -0.018221, -2.336400, 0.926431, -1.965634, -3.233287, -1.050931, 0.020313, 0.008429, 0.406452, -0.077658, 0.093131, 1.333634, 1.364920, 1.044719, -0.657374, 0.653661, -2.102872, -0.773771, 0.393569, -0.642374, -1.901093, -1.800561, 0.925856, -0.965688, 2.690480, 1.692870, 0.814953, -1.262914, -0.360530, -1.020819, 0.430978, -1.104572, -0.436584, -0.575685, -1.950012, -0.692778, -0.950671, 0.879754, 0.776726, 0.135039, 1.217412, 4.627985, -1.104025, 2.732612, 0.579952, -0.949408, -0.098364, 0.667268, 3.058710, 0.748927, -2.103567, -1.527468, 0.532417, 0.633727, 1.486574, -0.474240, -1.531879, -0.905295, -0.155898, -0.229789, -0.312329, 0.305685, -1.641188, 0.384322, 2.096009, -3.121164, 2.874967, 1.132273, -1.160576, 2.566724, -0.788500, -0.538607, 1.426128, 0.688084, -0.236464, 0.769345, -2.276692, -0.164642, -2.173046, -0.862540, -1.791600, -0.426579, 1.741279, 1.448222, 0.855803, 0.832409, -2.346241, 0.785191, -1.443790, 0.545450, -1.251285, 0.306100, 0.233932, -0.287912, -0.829601, -2.039009, 0.678542, 0.569348, -0.107695, 1.893350, 2.344699, 0.807760, -0.155852, 2.536183, -1.016996, -0.745473, 4.697989, 0.305604, 1.576742, -1.233571, -1.505556, -1.064806, 1.361340, 0.216110, -0.778844, -1.157238, 0.643939, 2.376352, -0.359937, 0.892480, 0.836386, 2.405310, 0.481724, -1.754836, 1.640052, 2.082973, 2.177998, -0.686278, -0.453808, 1.284923, -1.304886, 1.752683, -1.217982, 1.272659, -0.699114, -0.321490, 0.017435, 0.711109, -0.842600, 2.172017, -0.303333, -0.884819, 0.151581, 0.861716, 5.031510, -0.759949, -1.122212, -1.030814, -0.552033, -2.022228, -0.549100, -1.977696, 0.787984, 0.463481, -0.930972, -1.452297, 0.806012, 2.472124, 0.300999, -0.180325, -0.442161, 0.126769, -1.101915, 1.253808, -1.065416, -0.382719, -1.115863, 1.114735, 0.748863, -0.731119, 1.530700, -1.609571, -1.570549, -2.601246, -0.055399, -0.262242, 2.139844, 1.068339, 1.498265, 4.601118, 0.459227, -0.467124, -0.016818, -0.846170, 0.407918, 0.827337, 2.431346, 0.191171, 0.020118, -1.176208, -0.809230, -0.936010, -0.093285, -2.142360, -0.891113, -1.322299, -0.472136, 0.629155, -0.123252, 0.006292, 1.606415, 0.339211, -2.167264, 1.260660, -1.366756, 0.913975, -1.689967, -0.105102, 1.371262, 1.391783, -0.422733, -0.324468, -0.728885, -0.917710, -0.869212, -0.890510, 1.436343, -1.214656, -0.277204, 2.095023, 2.337512, 2.522190, 0.876392, -0.650990, -1.509156, -0.395380, 1.694393, -1.352576, 1.307880, -0.577378, 2.064705, 1.132324, 1.085479, 1.678848, 1.010567, -0.089989, 1.959001, 0.291288, 0.122632, -0.264179, -1.135114, 1.749955, -1.650667, -0.567050, 0.794765, 2.344459, 1.499657, 0.745928, -0.227571, -0.892684, -0.514688, -2.066394, -1.552437, 1.936354, 0.877455, -0.999577, 0.823305, -0.737004, 0.008926, -2.502623, -0.042059, 1.381846, 0.076001, -3.317323, 0.790721, 2.069414, -1.016928, -0.148098, -1.902225, -1.826419, 3.652578, 1.043417, -0.697644, -1.888567, -2.321141, -0.806015, 1.295105, -1.047930, 0.255314, 0.082459, 0.908516, -0.274531, -0.163356, -0.855869, 2.342495, 0.567557, -1.624329, 0.244196, 0.674070, 0.095953, -0.245474, -1.620124, 0.486911, -0.740139, -0.153294, 2.433330, -1.233023, -2.823224, -1.457184, 2.209202, -2.723373, 1.811669, 0.433449, 2.358466, -0.902272, 2.764589, 2.574164, -1.916335, -0.295650, -0.615423, -1.146909, -0.697601, -1.787206, -1.703290, -0.705669, 0.133116, -0.541842, 1.953445, -0.915688, -0.823846, -1.078612, -0.096120, 0.279419, 1.148154, 2.104976, -1.941778, 0.351885, -0.280529, -1.039893, -1.402304, -1.918783, 0.825614, 0.218580, 1.394795, 1.857791, -0.999485, -1.786477, 2.308074, -1.231458, 0.063259, -0.929566, -7.953049, 0.452391, -1.125412, -1.838698, -2.640692, -2.091324, -2.451443, 0.060629, -2.279750, -1.798112, -2.460948, 1.952752, 0.226525, 1.108863, -0.068355, -0.457852, 1.527080, 0.799076, -2.571167, 0.086885, 1.405293, -0.188894, 1.219698, 11.678942, -2.414214, -0.580795, 1.424143, 0.400336, -2.023376, 3.766325, 1.026467, -0.156651, 3.054648, 0.202205, 2.488985, -3.661493, 2.467989, 0.915066, 1.179819, -1.966798, 1.699531, 3.319919, 0.503657, 0.504187, -0.256452, 0.396068, 1.055521, 0.426303, 0.222733, 1.933537, -1.636191, -1.083127, 0.100778, 1.859645, -0.968564, 0.496013, -0.655377, 1.019886, 1.404765, -1.302617, -0.004665, 2.965729, 0.632558, -6.853092, 0.353593, -1.923296, -4.299502, 0.527606, 1.343225, 2.386575, 0.797445, -2.060218, 2.438961, -1.105527, 1.774719, 1.735536, 4.056285, 0.492659, 0.936320, -2.876715, -0.140729, 0.430298, 1.294615, 0.669918, 0.271047, 1.878645, -1.320951, 1.322578, -1.561556, 0.161816, -1.362854, -1.194663, -0.599474, 0.059861, -1.434035, 2.977043, -1.529187, -0.306176, -0.541282, -0.544553, -1.638931, 0.736715, -2.018234, -0.031919, -1.189114, -1.678918, 0.788182, 0.901396, 1.406277, -0.204452, -1.693584, -0.018040, 0.619784, -1.475589, 0.098325, 4.508126, 3.182445, -1.048236, -1.320299, 0.142103, 0.362558, -2.220502, -1.717681, 1.899212, -1.945802, -2.116177, -0.829608, -0.963384, 0.386516, 0.527406, 0.933299, -0.109855, -2.206789, 2.137621, -0.946538, -0.533125, -0.488820, 1.345459, -1.519374, -2.040171, -0.775507, 0.615902, 0.328110, 0.500276, -3.713193, -2.401886, -1.090950, -0.127374, 1.539707, -0.215972, -0.845000, -1.578743, 1.218012, 1.011701, -0.450705, -1.659180, -2.671433, -2.506796, 1.433076, 1.732815, -0.262248, -3.809357, 0.727647, -1.585780, -1.086602, 0.636478, 0.153659, 1.757239, 1.673101, 0.352491, -0.896577, 0.833177, -2.428023, 1.154135, 3.452332, -0.576276, 0.817413, 1.121931, 4.688684, -1.169102, -3.617183, -1.053644, -1.593388, 0.492168, 1.271367, 1.025314, -0.485588, 1.791973, -0.043998, 0.432523, 0.531555, -1.054497, 0.402924, -0.389349, -1.051243, -0.381169, 1.685210, -0.516398, 1.140060, -0.123690, 0.133988, -0.047918, 0.570673, -1.044458, 0.682566, 0.077535, -0.927769, 1.549031, 0.452144, -0.676709, -1.461138, -1.265611, -0.923475, 0.860736, -0.772783, -0.892272, 0.330651, 0.926755, -0.193207, 0.524169, 1.462198, -0.634567, -0.690321, -1.088943, -0.060451, -1.477703, -3.903250, 0.028010, -1.657811, 0.404509, 1.504079, 1.153226, -1.717037, -0.034980, 0.874089, 0.968220, 4.233302, -0.454326, -0.449342, 1.123919, -0.151024, -0.416263, -0.599757, 1.992396, -0.102499, -1.357982, 1.592250, -3.915248, 1.187836, 0.403215, 1.441373, 0.043264, -0.860627, -0.162307, -0.307341, -1.098346, 2.642102, -4.422021, -3.829863, -1.993164, 2.481008, -1.335412, 2.149526, -0.471009, -0.383002, -1.827906, 1.157187, 1.688772, -0.809894, -0.727387, -1.251942, -2.517845, -0.584093, 0.556983, -0.285559, 0.030616, -0.312395, -0.154149, 0.374468, -2.963465, 2.172886, 0.443644, -2.247712, 0.602167, -0.537698, -0.041397, 1.293626, 0.887306, -1.679885, -2.640060, 1.232915, 1.914094, -1.436891, 3.276104, -0.639831, 1.459533, -0.183050, -0.179623, 1.537835, -0.441862, -1.221415, -1.202643, -0.339080, -1.128653, 0.589814, 1.817411, -0.027398, 1.776857, -0.079182, -0.033620, 0.072972, 0.200031, -1.994103, 0.453007, -0.047347, -2.639814, 0.289200, -0.800354, -2.199389, 0.763129, 1.161637, -3.279893, 3.045088, -1.438141, -0.066738, -0.170937, 3.228382, -0.718058, 0.008865, -0.641102, 1.587295, 1.319516, -1.186299, 0.203019, -1.307042, -0.653389, 0.871392, 1.510107, -0.143629, 0.001508, 0.005160, -2.665793, -1.079569, 0.245808, 0.979850, -2.519487, 0.615138, 0.549478, -0.067410, -0.463877, -1.049949, -1.745986, -0.173153, -0.659071, -2.577020, 0.128683, 0.040614, 0.039138, -1.107141, -0.172750, 0.951488, 2.417813, -3.509801, 1.588482, -0.745076, -0.670997, -2.944751, -0.577594, 1.000117, -0.304519, 1.145466, 0.118416, -0.380714, -1.163751, 2.171146, -1.137656, -1.767855, 1.174660, 2.530463, -0.933513, 2.094655, -1.084815, 1.757184, 2.396101, 0.227469, 1.959815, 0.372973, 0.783120, 0.749221, 0.703332, -0.022950, -1.255128, 0.834598, 0.898361, -0.615497, 1.131268, 1.129401, -0.796847, 0.277227, 0.022084, -0.859409, -1.869596, 2.134916, -0.555658, 2.232072, 0.210954, 0.794191, 1.970781, 1.929192, 1.443892, -0.025377, -1.400775, 1.075047, 0.264515, -0.723359, 0.015378, 2.079454, -0.796261, 0.315285, -1.405742, 2.362265, 3.469258, 2.460742, -0.789086, 0.300839, 0.243847, 1.060216, -1.296327, -0.621006, -1.348864, 1.451716, -0.342701, -1.694321, 0.777496, 2.813106, -1.899789, -0.257446, 1.398711, -2.191065, 2.490599, 0.958931, -0.474872, -0.624368, 1.271940, 0.756449, -0.130391, -0.084979, 1.362932, -1.252360, 0.230489, -3.245268, 1.056214, 3.134413, -1.926303, 0.858515, -0.865250, -0.055744, -2.101393, 0.897214, -0.033249, 1.185271, -0.305044, 0.160016, 0.483297, -1.491721, -0.529542, 2.200641, 0.536981, 0.076141, 2.599686, -0.079704, 0.419227, 3.077253, -0.698236, 0.199733, 1.411079, -2.497913, -0.702270, 0.457026, -0.859669, 3.009468, -0.588098, 1.619484, -2.591563, -0.051351, 1.622896, -1.461597, -1.373804, -0.387197, -2.398344, 0.874232, 1.952216, -0.762721, 0.732759, -0.261160, -0.746371, -1.427404, -1.373406, -0.998958, 0.011014, 0.351923, -3.094855, -2.828198, -0.284748, 0.727657, 0.347360, 2.004357, 0.140569, -3.039148, 0.017318, -0.890693, 0.428602, -0.558460, -0.040785, -0.309201, -2.868190, -1.748198, 6.530122, -1.051790, -0.567761, 0.482915, -3.028437, 1.840485, -1.006252, -2.233927, 0.973578, 2.219829, -1.072354, -0.106849, 0.480852, 0.973742, 0.418984, 2.441674, 0.846208, 0.635905, 0.709736, -0.883262, -0.123730, 2.599570, -0.634373, -1.205588, 2.468590, 1.842569, 1.734810, -0.065832, 2.332975, 0.404545, -0.149880, -0.875170, -0.887063, 0.313458, 1.107406, 2.219567, -0.528014, 0.752688, 0.121217, -0.403403, -2.761505, 1.490429, 1.366968, 2.998828, 1.763393, -0.154834, 2.722400, 2.853975, 2.477918, -0.687242, -1.790297, 0.232602, -1.469884, 6.514165, 0.614459, 1.232791, -0.346462, 1.223361, -1.098690, 1.305230, -0.327180, -0.538847, 1.254126, 2.756663, 2.988449, -2.864126, -4.365308, 0.754789, -1.980978, 3.187338, -0.380813, 1.257949, 0.438836, -0.111813, -0.005574, 2.469913, -0.613243, -0.470447, 0.583182, -0.366051, 0.846679, 2.334949, -0.491402, -1.471897, -0.012673, 0.177996, -1.107022, 0.279164, 0.566607, 0.782696, -1.192201, 2.145116, 1.820361, -1.854302, -0.887881, -1.209134, 0.640661, -1.069622, 1.014870, 0.135546, -1.669796, 0.722794, -0.445563, -2.883994, -0.901784, 1.785513, 0.883540, -1.163346, -0.831124, 0.196551, -1.088842, 0.456436, 1.569065, 1.717653, 0.126327, -0.244374, -0.397899, -0.611888, -0.828950, -0.089661, -2.204021, 0.840066, 0.139645, -2.976500, -0.225026, -0.374762, 0.011366, 1.400090, -0.831109, -0.092224, -0.980802, -2.395170, 0.346915, -0.782422, 1.594723, -5.437796, 1.402780, -2.173856, 0.157068, 1.501613, 1.148977, -0.646014, 0.115535, 3.879438, -0.986376, 0.818065, -0.380006, -0.530464, -3.900960, 0.689789, 0.226382, 1.421528, 0.382571, 0.549739, -0.519871, 1.678414, 0.563494, 0.746316, 1.455697, 0.689835, -0.261754, -1.269034, 0.890723, 1.555183, -0.273945, -0.003310, 0.378518, -0.759207, 0.570393, 2.029422, -0.368552, 1.051289, -2.139588, 0.782326, 0.452396, -0.873124, 1.439425, -0.879747, 0.093171, 1.661324, -0.999725, -0.546240, 0.676964, -3.085967, 3.901103, -1.001095, -0.168283, 1.444647, 1.423535, 3.737822, -0.319527, 0.101771, -1.368534, -1.261986, -0.090278, -1.431562, -2.672978, -0.558734, -0.422858, 0.140180, 0.728199, -0.897009, -0.132918, -1.936385, -0.023013, 0.306948, 2.999689, -0.208378, 0.449371, 2.819936, -1.010662, 0.136802, 1.934311, -0.134759, -0.065738, -0.248452, -0.308273, 2.383839, 3.907777, -0.015681, -3.471670, -0.477245, -1.599790, 0.000448, -1.808520], - "phi3:latest": [-0.331782, 1.888663, 1.200525, 1.289363, 0.998380, -0.655262, -1.793847, 0.665316, 0.505828, 0.716095, -1.893194, 1.218456, -1.309054, -0.447788, 2.593305, -0.537991, 0.450933, 1.653979, -0.929486, -0.024294, -1.257964, 0.415388, 0.712649, 3.635659, 1.193032, 0.633469, -0.152762, 0.126132, -1.080760, -0.906523, 0.261134, -1.082573, 0.121791, 0.041670, 1.182726, 0.020926, 0.890734, -1.112368, 0.272508, -3.172650, 1.007221, -2.737286, -0.752792, 0.806690, -2.347712, -1.033880, 0.257948, -0.655215, 1.230030, 2.431018, -0.001280, -1.203449, -0.937772, -0.775139, 1.965822, 0.182722, 0.805110, -0.064984, -0.172154, 0.108768, 1.113860, -0.687376, -0.136099, -4.118443, 1.489239, -1.689033, 0.121872, 0.570745, -0.513955, 0.448374, 0.134970, 1.531063, 2.303051, -1.522820, 0.932279, -0.187607, 2.760937, 2.080870, -0.708050, -3.668794, -1.114294, 0.577248, -0.542914, -0.491282, 1.031656, -0.686680, -1.205845, 0.370542, -1.197135, 0.493187, -2.067161, 0.590035, -0.312661, 0.010634, -1.059682, -1.019925, -1.079581, -0.784771, -1.534287, -0.745539, -1.438104, 0.408945, 3.307072, 2.807780, 0.836534, -0.323777, 0.078335, -2.040690, 0.593655, 0.305799, -0.598534, -4.537859, 1.865855, -5.356523, 2.168699, 0.199434, 0.458956, -0.146927, -0.180848, -0.307271, -4.499695, 1.250432, -0.918718, -0.555892, 1.550857, 0.533830, 2.284615, 3.066180, -0.809521, 0.429381, 0.940451, -0.420210, -0.439490, -2.831492, -0.230623, 0.812441, -0.747944, -0.177522, -0.476225, 1.488531, 2.712494, 0.107758, 1.136478, -2.371375, 0.506508, 0.539166, -0.304731, 2.540707, 3.669775, 1.193841, 0.099604, 0.755806, 1.671601, -0.837445, 1.567671, 1.423394, 6.966916, 1.032748, -0.020530, -1.179447, -0.181892, -0.358674, -1.033161, -0.457489, 1.743537, 0.312635, 0.463954, 0.293266, -1.393930, 1.422883, 2.216323, 0.043793, 1.275150, 0.627181, 0.413553, -0.359636, -1.511397, -1.454917, -1.244547, 1.734582, -0.206054, 0.634956, -0.609846, 1.435774, -2.048944, -1.875099, 1.053775, -0.301367, 1.839846, -0.719768, -0.903455, 0.973591, 1.267984, 0.139152, -0.465354, 1.631779, 1.706993, -0.568199, 2.394835, 0.359601, 1.617715, -0.432758, -1.461887, -0.135692, -2.426039, -0.496890, -0.319927, -0.110555, 1.209607, 0.801021, 1.248233, 0.551905, 0.589787, -0.270500, -1.057468, 1.335677, -0.727429, -2.010354, -1.193273, 1.876885, 0.199732, 0.952656, -2.354916, -2.555338, -0.792350, -6.405796, -0.973989, -1.177463, -3.435070, 1.956603, 0.029680, 0.261674, -0.993050, -1.284503, 1.697352, -0.895739, 1.074561, 0.786929, -2.653123, 0.719731, -1.782677, 0.104583, -0.070126, 0.849115, 0.879853, -0.959925, 0.023526, -0.805103, 1.399971, 0.228651, 2.112906, 0.769736, 2.598775, -1.616839, -2.866297, 0.688289, 0.967245, -0.528837, 1.043855, -0.813634, 0.620666, -0.286699, -1.673048, -0.169107, -1.623424, -1.321982, -3.332716, -0.411326, -1.684741, 2.134276, -1.740958, 0.598584, -0.992499, 5.294982, -0.481816, -0.680845, 0.113114, -1.231122, 1.018151, -0.652560, -0.647686, -1.782176, 0.413933, -2.831025, -2.853311, 1.074271, 5.026616, 0.050189, 1.695521, -1.131159, -1.007593, -1.860660, -0.210799, 1.702898, 0.002810, -0.689529, 0.576500, 0.157276, -0.664268, -1.006720, -0.562447, -0.269952, 2.138022, -1.618097, -2.395590, 1.264884, 0.771609, 2.024291, -4.463664, 0.976682, 0.611146, 0.557015, 0.406314, -1.554351, -0.683566, -0.509024, 1.003536, -1.233879, 0.620211, -1.912232, -0.843399, 0.396227, 0.217314, -2.936852, -1.082635, -2.436602, -2.979013, 1.416017, -1.253309, 0.128324, -1.531144, -0.823306, -1.627728, 1.464539, 0.598376, -0.625224, 1.379323, -1.296928, 3.733621, -0.402005, -0.502481, 2.202061, 0.491992, -0.293026, -0.224052, -1.743726, -0.025504, -2.823492, -0.801840, 1.461100, -0.946508, 1.663853, 0.516056, 1.118193, 0.872803, 2.391853, 0.363638, 0.386560, 0.916678, -0.255919, -1.655668, -1.329800, 1.121830, -0.179955, 0.905750, 0.410062, -0.460930, 1.100121, -2.608666, -0.037558, 1.052379, 1.468595, -1.940455, 0.987077, -1.020959, -0.850926, 0.665312, -0.616026, 0.937322, 0.222524, -1.306938, -0.538988, 0.753711, 1.228283, 2.270849, -0.202739, -0.543886, 1.655816, -1.952059, 1.137215, 0.786179, 1.228126, -1.704684, -1.457620, 0.465429, 0.629195, 1.137187, 1.215734, 1.220341, -0.233745, 0.021491, 0.501275, -0.742705, 0.215831, 0.588493, -1.650967, -0.646095, 1.238620, 0.216092, -0.247341, -1.943288, -1.044502, 0.166651, 1.419106, 1.097436, -0.842580, 0.843983, -1.672148, 1.034715, 1.160797, -0.133636, 0.251693, 0.256113, -3.728125, 0.572900, 0.126097, -0.321870, -0.849928, 0.025637, 0.330923, -0.445982, -1.722699, 0.861761, 0.936651, -1.674895, -0.613186, 0.897030, 0.337920, 1.018083, 0.290069, 0.253213, -0.409918, -1.146255, 1.666793, 2.334866, 0.914748, 1.321567, 1.553441, -2.307631, 0.384901, 0.905515, -0.835983, 0.719357, -1.188387, -0.899210, -1.526436, -0.771791, -0.037529, -0.709167, -0.076109, -0.429650, 0.227836, 0.862626, -0.529444, -0.304954, 1.671549, 2.157148, -0.435607, 1.332639, -0.833320, -0.782735, 1.286584, 0.476222, 0.580646, 0.349235, -1.786693, 1.406183, 0.420583, -0.624807, 0.697277, 1.321689, -3.137897, -1.231940, 0.382046, 1.303738, -2.219354, -1.742369, 1.506663, -1.336856, -1.776091, 0.907745, -1.661343, -0.198556, 1.129866, 0.409350, -1.672331, 0.343483, 1.037570, 0.916265, -0.317749, -4.326462, 2.636568, -0.474869, -1.698115, 1.248424, 1.024646, -0.269191, 1.498065, 1.702345, 2.846062, 0.303959, -1.147084, -0.372634, -0.913464, 1.784185, -1.335213, -1.163813, 4.534195, -1.033662, -0.350868, 0.177666, -0.375238, -0.047751, -1.759573, -1.817324, 2.531796, 0.092635, 1.402217, -0.186967, 2.302000, 1.183251, -0.981169, -0.027306, -0.962279, -2.556610, 3.168603, 0.538228, -1.538681, 0.256375, -0.111212, 0.701298, 0.082229, -0.830514, 1.423748, -3.368465, -0.577068, 1.678749, -0.018569, 0.380880, -0.929372, 0.169438, 1.732153, 0.219515, -2.110588, 1.828675, 2.531060, 0.813516, -2.485929, -0.849423, -0.583957, -2.631165, 0.372207, -1.723973, 0.548265, -0.508192, -0.842904, -1.948049, 2.395320, -1.950990, -2.131252, -0.735650, -0.807738, 1.517375, 0.411855, -0.417785, 0.695481, 3.132597, -0.309361, -0.962455, -0.060781, 2.010265, -1.197449, 1.309034, 1.667662, -0.401816, -0.328225, -0.066705, 0.457056, 0.990444, -0.956658, -0.681285, -0.944606, 0.523004, 1.199034, 0.087256, 1.541614, -0.848096, 0.792162, -0.501671, 4.378613, 0.894378, -0.441204, 0.082530, 2.260096, -2.228149, 4.717083, -1.186788, -0.597485, -0.368734, -0.063365, 0.530020, -1.802985, 0.295136, 1.495470, -1.487975, 0.038948, 0.951755, -1.020662, -0.375789, -2.556568, -0.653668, 3.495116, 0.442141, -0.633872, -1.655333, -1.468453, 0.401802, 5.745409, -0.341410, -0.855036, 0.268208, -1.166003, -0.433159, -0.545326, 2.481983, 0.158591, -1.682132, 1.009237, -0.638927, -1.334942, -0.322424, 1.449141, 1.163893, -0.386967, -0.553634, 2.797484, -0.416864, -1.247119, 1.006061, 2.358471, -0.628549, -0.750396, -2.033410, 2.005108, -0.166425, 1.544945, 0.330924, -2.188920, -1.281452, 0.556581, -0.307962, 1.716098, 2.836176, -1.910627, -0.076177, -1.542220, 0.026247, 0.593243, 0.279117, 0.156666, -4.955784, -0.407404, 1.488657, 0.278332, -0.734341, -0.596073, -0.102984, -0.959433, 0.578759, -0.861591, 0.053966, -0.694741, 0.218171, -2.926390, 0.739668, -1.028017, -1.277984, -1.073602, 1.215993, 0.658857, -0.567500, 1.734804, -2.023831, 1.212106, -2.246280, -0.623249, -2.868179, -2.218319, 0.457068, 2.811556, 1.820529, -2.150381, 0.600829, 0.195249, 1.761236, -0.900438, 1.695990, 2.442457, 0.005890, 4.132634, -0.806554, 0.317273, 2.583012, 0.318541, -1.193946, 3.290548, 0.562016, 0.586043, 1.734598, -0.688514, 1.017300, 0.592274, 0.646282, -0.230299, -0.987452, 2.416633, 0.276586, -1.211152, 0.489671, -1.519331, 0.649645, 1.909639, -0.362585, 0.118936, 0.645842, 0.215484, 0.286462, 1.842013, 0.883945, 2.218506, -0.037992, -0.904247, -0.967820, 0.039781, -0.308431, 0.977812, 1.038229, 0.272080, -1.008247, -0.643514, 1.502011, -0.841505, -1.984012, 0.658119, -0.705461, -0.114504, -0.567679, -0.782671, 1.356886, -2.388955, -1.850967, 2.288174, -0.108086, -0.687346, 0.663177, 0.029310, 0.631634, 0.812906, 0.721973, 0.997441, -0.352522, 1.084785, 0.760377, 1.334125, 0.123672, -0.779595, 2.224239, 0.468647, 0.928250, 2.011061, 2.181119, -1.410953, 2.479482, -1.403790, 1.424959, 0.406790, 1.980434, 0.134588, 0.862166, -0.949528, -0.337341, -1.506291, 1.816352, -1.102223, -1.759313, 0.545314, -0.063965, -0.738658, -1.891264, 0.946221, -0.055098, 3.403584, 0.949688, -1.543008, 1.460190, -1.655720, 1.365995, 0.707883, 2.725739, 1.254143, 1.414804, -0.568412, -1.905285, 0.287855, -2.530554, 1.387836, 1.471262, -2.719731, 1.009877, 0.172707, 0.678457, 0.125848, -0.191226, 1.651061, -1.352307, -2.129730, -1.374591, -0.710863, 1.778056, -0.322481, 2.552818, -0.223694, 2.006301, -0.296190, 1.284814, -0.344928, -1.339411, -2.225923, 2.261780, 0.551574, -0.428283, 0.623739, -0.364829, 0.695056, -2.190797, -1.229941, -0.197826, 0.286019, 0.191163, 0.437174, 0.147713, 1.924075, 0.221861, -1.403060, -0.173633, -0.037499, -0.786128, -1.993309, 1.023275, 1.362555, 0.158199, 0.860005, -1.885816, 1.648090, 1.289884, 0.680118, -1.098040, 0.564846, -1.239455, 1.307932, 0.748337, 1.255219, -0.376539, -2.487237, 0.452882, -1.010058, 0.268328, 1.320020, 0.866643, -0.074108, 0.488640, -2.088172, 1.387924, -0.639570, -0.641209, -0.218602, -1.815887, 0.825953, -0.198470, -1.210092, -0.497010, -0.210681, -2.419325, 0.553231, -1.253540, -0.517147, 4.352762, -0.799085, 0.504252, 0.464497, 0.093610, -0.448315, -0.296233, 0.199169, 1.354983, 0.231581, 0.976367, 0.393705, -0.523379, 1.192837, 0.335261, 0.945564, 3.786133, 0.382227, 1.075333, -0.256976, 1.035057, -0.135201, 1.343422, 3.342458, -2.192386, 0.500333, 0.435597, 1.305236, -0.226735, -0.834256, 0.098611, -1.596345, -2.535961, 1.523905, 0.706213, 1.110188, 0.023420, 1.759786, 0.474664, -1.082119, 1.594128, -0.718762, -0.903734, -1.400833, 0.956944, -0.433848, 1.021788, -0.578503, -1.086085, -2.859450, 0.879658, 0.919896, 0.171229, 0.558165, 2.145216, -0.021277, 1.009513, 0.582972, 2.934348, 1.970412, -0.673170, 0.964699, -0.573964, -0.626150, -0.726634, -2.370512, 1.713810, -0.796989, -0.907288, -0.532314, 3.342188, -5.447992, 0.883931, -0.699223, 1.340747, -0.359668, 2.887066, 0.468472, -0.982526, 0.212517, -2.172879, -1.553142, 0.135613, 1.943457, 1.718528, -0.249226, -2.330694, -2.559153, 1.097077, 0.748280, 1.828044, -0.524656, 2.009469, -0.519914, -1.051009, 1.699620, 1.160786, -0.875061, 0.185425, 0.500408, -0.795241, 0.310667, 0.311145, 2.406953, 1.839838, -1.669149, 0.615994, 0.463547, -2.903665, -0.764632, -1.713024, 1.773419, 1.473285, 0.020434, -1.151650, 1.636433, 1.188841, 1.036440, 0.686211, -0.420186, -1.188722, 1.165800, 0.269228, -1.095580, 0.975477, -0.131055, 0.880357, -0.418188, -0.159308, -0.024237, 1.685547, -0.061263, -0.631691, -2.868707, 0.931229, 1.412259, -1.641449, -2.638783, 0.436751, 0.367173, -1.436235, -1.445104, -2.042131, 2.555485, 2.337394, -2.245903, 1.240203, 0.918046, 1.153733, 1.284330, 0.361464, -3.080673, -2.015433, -1.228714, -0.329455, -0.411458, 0.501336, -0.242372, -0.311240, -0.457906, -0.264166, -1.588748, -0.373200, 0.102988, -1.740476, 0.046711, -0.766460, 0.646151, -0.115933, 1.173771, -0.387578, -0.368824, 0.337930, -1.969409, -0.603293, 0.761418, 0.375401, -0.134991, -2.419440, -0.987752, -1.550724, -1.443484, 0.387551, -1.833694, 1.399108, 0.442190, -1.677070, 0.487543, 0.320652, -1.907840, -2.211530, -0.361906, -1.273140, -0.319202, -1.474675, 0.329778, -4.529927, 0.303147, 1.402523, -0.490818, 1.104129, -1.276678, 3.073465, 0.199123, -1.776357, -2.077243, 3.452719, -1.242790, 0.465397, 0.007858, -0.324656, 0.180450, 0.232762, 0.780484, -2.317019, 2.227188, 0.324473, 0.411219, 0.811476, 2.597386, 0.243725, 0.347392, -3.275616, 0.981951, -2.699506, -1.501182, -1.494156, 0.404192, -0.352986, 0.488786, 0.572073, -0.005401, 0.975969, -0.757187, -0.536657, -1.597109, 0.619395, -1.360061, 1.888946, -1.221506, 0.641514, -0.359623, 2.311173, 0.278379, -0.678937, 0.036107, -1.858443, -1.245295, 0.234358, -0.976666, 1.461548, -0.674499, -1.413628, 0.317547, -0.356531, 0.763965, 1.204553, 1.554559, -1.456421, 2.624848, -2.279530, -0.900469, -1.071001, -0.013043, -1.226998, -3.024274, -0.869955, 0.695510, 2.545588, 0.894171, -2.687647, 0.134236, -0.433649, -1.225783, -1.425428, -2.081347, -1.657589, -0.886671, 0.438746, -0.457501, -0.734988, 1.162974, -0.482559, -0.832043, -0.858165, -2.294134, -0.019862, -0.822265, 1.362124, 1.221454, -0.332965, -0.394502, -1.896604, 0.148038, -1.534254, 2.975559, -3.707328, -4.243404, 0.972112, -1.119140, -0.895923, -3.589736, 0.002250, 0.438104, -2.746846, -0.514775, 1.392488, 0.154307, 0.787050, -0.418354, 3.335391, -0.787709, -0.280908, 0.374281, 1.434060, -0.347108, 0.099208, -2.174178, -0.603846, -1.961406, 0.674681, 3.798844, -2.831996, -0.836813, -0.447424, 0.679769, 0.221790, 0.490131, 0.028804, 1.772122, -0.108914, 0.974949, -0.489083, -0.532604, -1.453107, 0.567806, -1.318228, -2.452373, -0.822569, 2.135952, -1.244996, 0.221252, 0.031481, -2.563677, 1.483638, -0.696056, -1.030848, 0.453494, 0.258160, 0.481363, 0.410853, 0.933314, -0.757754, 1.240265, -0.048412, 3.024734, -2.914384, 1.755960, -0.113899, 1.265085, -0.000634, -2.687462, 4.921392, 0.976112, -1.478302, 1.317076, -3.834176, 1.117164, -1.640396, -1.026278, 0.920215, -0.737303, -0.399644, 0.080155, -0.742240, 1.506471, -1.287590, -0.772516, -0.405342, -1.340083, -1.341813, -0.505141, -5.087138, -2.829230, 0.037739, -0.562710, -0.333618, -0.741055, 0.571827, -2.530263, 1.743546, -1.025059, 2.990238, -1.766810, 0.032581, -5.881934, 0.320903, -0.584839, -0.173705, 1.223190, 0.873316, -0.377491, 0.358346, -1.018797, -2.016875, 1.876419, 0.198460, -0.315190, -0.175053, 0.796791, -1.651981, 1.614647, -1.253317, 1.393906, -7.832347, 0.025200, 1.087999, 0.356147, 1.559995, 1.378104, -1.098392, 3.203637, -1.381323, 0.754037, 0.470596, 1.061457, -1.721436, 0.582317, 2.470391, 0.632487, -0.780556, 1.541683, -0.279428, -0.507243, 0.097625, 1.535107, 1.662155, -3.241507, 0.258222, -0.842592, -1.014166, -1.692065, -0.952032, 0.573978, -0.080197, -0.230308, 0.503805, -0.745510, 0.399605, -1.895488, 1.306971, -0.052665, 1.025376, -1.271935, -1.116847, 2.998784, -3.219350, 0.237409, 2.378772, -1.603559, 3.485432, 1.610774, -0.148429, -2.102674, 0.865081, -1.310991, -0.048994, -1.506169, -0.894822, -4.080014, 1.655788, 0.798924, 1.823289, -0.862195, -0.463672, 1.421574, -3.193225, 1.129338, 2.071832, -1.163078, 1.666056, -1.420358, -1.901004, 0.628737, -2.239043, 0.337622, 0.136724, -1.480790, -0.241060, 0.154104, 1.458758, -0.181530, 1.333472, 0.651258, 0.434315, 2.803759, -2.275980, 1.517599, 0.095857, -0.277221, -1.823603, -0.043888, -0.718949, 2.178376, -0.979954, -0.734386, -0.240973, 1.171587, 0.007072, 0.237164, 0.618714, 0.416613, -1.074346, 0.910026, -0.416583, -0.977554, -0.349090, 0.335884, -0.804102, -0.217162, -1.014870, 0.661630, 0.323795, -2.940491, 0.065295, -0.096405, -0.415969, -2.336314, 1.417354, -0.325469, -3.590280, 0.277790, 0.332033, -0.174084, 1.081171, 0.342203, 1.295721, 2.129061, -0.386219, 0.250025, 1.626942, -0.799425, 0.717404, -1.062532, -1.003305, 0.141804, -0.680945, -1.261851, -0.141397, -1.268640, -0.083022, -1.416320, 1.519603, 0.234455, -1.619872, 0.154979, 0.497174, 1.281276, 0.109994, 0.098002, -3.324199, -0.159942, -0.085615, -0.569837, -0.338528, 6.693666, -0.398587, -1.605784, 2.807449, -0.692835, 1.700276, -1.787038, 3.429233, -0.245354, -2.531395, -3.319430, -1.394871, -0.941283, 0.358174, 0.097740, -0.220618, -0.389024, -0.919645, -1.610255, -1.089464, -2.378478, -0.529369, -1.008603, -0.831314, -1.461926, 0.180943, -1.451033, 0.876612, -0.984925, -0.830275, 0.209430, -1.168924, -1.927535, 1.980315, 0.165473, -0.059557, 0.572658, 1.740578, 1.783901, -0.732648, -1.389069, -0.243235, -3.893533, 0.119801, -0.287052, -0.202365, 1.593304, 0.603369, 2.476665, 0.121060, -1.646047, 0.897809, 2.111726, 1.401096, 1.891831, -0.847960, 2.102443, 0.641405, 2.511218, -0.974216, 0.308707, -0.056444, 0.295417, -3.832830, 0.944815, 0.900770, -0.782472, 0.551812, -3.032549, 3.269427, -1.041848, -0.837198, 1.905022, -0.781837, -1.386617, 4.149720, -0.836307, -1.045704, -0.542813, -0.954046, -1.242165, 1.294262, 3.201029, 0.146226, 0.916135, 1.273997, 0.238881, 1.169458, -1.391235, -0.443475, -0.352239, -1.541232, -0.628702, -3.420718, -1.154195, 0.870406, 0.426926, 1.007768, -2.553943, -1.896043, 2.682561, -0.070028, -0.579655, 0.069732, 1.805448, -1.493385, -0.014030, 1.065136, 0.721803, -0.196037, -0.116224, -5.761770, 0.321085, 0.585127, 0.342437, 0.194969, -1.084242, -2.148624, 0.218496, 0.610765, -1.830436, 0.003593, -0.647391, 0.671114, -1.094642, -3.978799, 1.761741, -3.087608, -4.422559, -0.306883, -1.370564, 1.767953, 0.557067, 0.367415, -1.202108, 0.883302, -0.572306, 2.690378, 0.457954, -0.687535, 1.898751, 2.806983, -1.539653, 0.481290, -0.449118, 0.685718, 0.252932, -1.865875, -3.047987, -0.464913, 1.844561, 1.025634, -2.673377, -1.857754, -0.710388, -3.639622, -0.550811, 0.052858, -1.624739, -0.677803, -0.077288, -0.348947, 1.134581, 0.823101, -0.623505, -2.068707, 1.280722, 4.378040, -0.646913, 3.254428, -0.911869, -0.311793, -0.135335, -0.917646, -1.206452, 0.818995, -6.080505, -0.410905, -0.240170, -1.363458, -1.410526, -0.463343, 0.588416, -2.528915, 0.003166, -2.290785, 0.747372, -1.356035, -0.436485, -0.469414, -1.004386, -0.183408, 1.013564, -0.360865, -0.062443, -0.589006, -1.419326, 0.299296, 0.893582, 0.839202, 1.844072, -1.792961, 0.155281, -0.427874, 0.656156, -3.803041, -0.734671, 1.116193, -1.512477, 0.479156, -0.151161, -1.155034, -0.197144, 0.111296, -1.950732, -0.132419, -0.841203, -0.496333, -2.204289, 0.840358, 0.668194, -0.458399, 2.389929, 1.406014, 1.096186, 0.240972, 0.447461, -3.678923, -1.163152, 0.175436, 0.408462, 2.573723, 4.032115, 0.454848, 2.694748, 0.336364, -2.220923, -0.304247, -1.812197, -1.046371, -1.624497, 6.753428, 0.528228, 0.922608, 1.345419, -1.229388, -1.285374, -1.599376, 0.520206, 0.930075, 0.260252, 0.603340, -0.182566, 0.766121, 4.089944, 2.273662, -0.037626, 0.414319, -0.656553, 0.146951, 1.360669, -1.079636, -0.826307, 0.414756, -2.050154, -0.647629, -1.377558, -0.393630, 6.011848, 0.640889, -0.154627, -1.887521, 0.481471, 0.725237, 1.003134, -1.270733, 2.535853, -1.852875, -1.984691, 0.043005, -0.443987, -0.389437, 1.072760, 0.560111, -1.313613, -2.585411, 0.133546, 1.392839, 1.851199, 0.017208, -0.485980, 0.367607, -2.342802, 0.872469, 0.066583, -1.242599, 4.111394, -0.146476, 1.085649, -0.035312, -0.503956, -0.112943, -1.205433, -0.747308, 0.415985, -1.268356, -0.792791, 1.866075, -0.000915, -0.271667, 0.365708, -0.842554, 1.575105, -1.128135, 0.158092, -0.245247, -0.574473, 3.047494, -0.265874, 1.028757, -3.174093, 0.967400, 0.360965, 0.124362, 1.167233, 0.489035, 0.399890, -1.406982, 0.218502, -3.281218, -0.117548, -1.164914, 2.541045, 2.162634, -1.261110, 0.025405, 1.531112, -1.094499, -1.398051, -2.569325, 0.621261, -0.205139, -2.601987, 1.171064, 3.429147, 0.961047, -0.915910, 0.368733, -0.575840, -2.255553, -1.477089, 0.568685, -3.323828, -0.923796, 0.205168, 0.653205, -2.400543, -0.558132, -3.194032, 1.002985, -0.180768, -2.512737, 0.063891, -3.336560, -0.744661, 0.573810, 0.475247, -2.307733, 0.523257, 1.883903, 0.275185, -0.486428, -1.109302, 0.903212, -0.608962, -2.266825, 3.171204, -0.486808, 1.248047, 1.099221, -0.721206, -1.942247, 1.158236, 1.321511, 0.112065, -0.146534, -0.657275, -0.975966, 1.080233, 0.726018, -3.309192, 0.111219, 0.196041, -0.303238, -1.521593, -1.417296, 1.367442, 4.683889, -2.147701, -1.278427, 0.281738, 1.325304, -0.442248, -0.233044, 0.668017, -0.926213, 1.914610, -1.363387, -1.467574, 0.566218, -0.036706, 0.036098, 1.457176, -2.147704, -0.130686, 0.336216, -0.102960, -0.411079, 0.397519, 1.477163, 0.701220, -0.862012, 2.165351, 0.421311, -1.535116, 0.957023, -0.406619, -0.703398, 0.390083, -0.390960, 0.505953, -1.844770, 0.486684, 0.622634, 2.276865, 0.390006, -1.794462, 3.046761, 1.139933, -0.690681, -0.637176, 1.128005, 1.537182, -0.171056, -1.709060, 0.774255, 1.622292, -0.540113, 0.032559, -2.939101, 1.034452, -0.047643, 0.627251, -0.193845, -0.933359, -0.824693, 1.581610, -3.401405, 1.365245, 0.804797, 5.781966, -0.620613, -0.819232, 0.286532, -0.013608, -0.401111, -0.019385, -0.975068, -0.228762, -1.362910, -0.421948, -0.307311, -1.042872, -0.600724, 0.335786, 0.980055, -1.113636, -0.386080, -2.104040, -0.463928, 0.145584, -0.081313, 0.333631, 0.383729, -0.287916, -0.731525, -0.016066, 0.488491, 0.786466, -2.475577, 1.969624, -0.217052, 0.278253, -0.660953, 3.377597, 0.404897, 0.234751, -0.731012, 1.725374, -0.333617, -2.050984, -2.739315, -1.582184, -0.261262, -1.801413, -0.339414, 0.579896, 3.266277, -0.550661, 1.065212, 0.230149, -2.011817, 2.741273, -0.538543, 0.066325, -0.364490, 1.228556, 0.111360, 1.560492, 0.151007, 0.964796, 0.644581, -0.208523, 0.673280, 0.281566, -2.014031, 1.429657, -0.506738, 0.335272, -1.626906, 1.183870, -1.474985, -2.690915, 0.285946, 0.239985, -0.117515, 0.560041, -0.020173, 0.569120, 1.303762, 1.398197, 1.400377, -0.687756, -0.055215, -1.550547, -0.860882, 0.574287, -0.416834, -1.646140, -0.914618, 1.004808, -0.774086, 2.231249, 1.869094, 0.348831, -1.579520, -0.769957, -1.260929, 0.016118, -0.515597, -0.014220, -0.557759, -1.408167, -3.954981, -0.844895, 0.536573, 1.389662, -0.036013, 1.038449, 3.763085, -0.668687, 2.365618, -0.408353, -0.638354, -0.021301, 0.897073, 3.448795, 1.097783, -1.940816, -1.079087, 0.483942, 0.348101, 1.459333, -0.240343, -1.605376, -0.875363, 0.207903, -0.158365, -0.183384, 0.176932, -1.071853, 0.137818, 1.278738, -3.137396, 2.100088, 1.134791, -1.402452, 2.098001, -0.710614, -0.260422, 0.105859, 0.886900, -0.366901, 0.476868, -1.463733, -0.125639, -1.413581, -0.344210, -2.025344, -0.230954, 1.216566, 1.471056, 0.887452, 0.611461, -1.538164, 0.544609, -1.231650, 0.191796, -1.383449, 0.405548, 0.155041, -0.489750, -1.401300, -1.529757, 0.509945, 0.348758, -0.521110, 1.377017, 3.161858, 0.606811, 0.314406, 1.927570, -0.825270, -0.977978, 3.989907, 0.089484, 1.463825, -1.250056, -1.150727, -0.890604, 1.450158, 0.458452, -1.391975, -0.951504, 0.557115, 1.886316, -0.510700, 0.382540, 1.213111, 1.983193, 0.953116, -1.650094, 0.941780, 2.112340, 2.355280, -1.153111, -0.110312, 0.905784, -1.395765, 1.423380, -1.828381, 1.234341, -0.488266, 0.098374, 0.333164, 0.560859, -0.746528, 2.225785, -0.167920, -0.703610, 0.009235, 0.838879, 4.100902, -0.117946, -1.748979, -1.176229, -0.446607, -1.695890, -0.848669, -1.402491, 0.766224, 0.369392, -0.832074, -1.762611, 0.938566, 1.810980, 0.253713, 0.366594, -0.267112, 0.009307, -1.032587, 1.134067, -0.706014, 0.310107, -0.698892, 1.282465, 0.015429, -1.059395, 1.280026, -1.450975, -1.318240, -1.726679, -0.293316, -0.117751, 2.234800, -0.050556, 1.506430, 4.292483, 0.512186, -0.891515, -0.327962, -0.405700, 0.234422, 1.084207, 2.313412, 0.162125, 0.118381, -1.418285, -0.862138, -0.873205, 0.081308, -1.934883, -1.073094, -0.982282, -0.505499, 0.749260, -0.577122, -0.654750, 1.449021, 0.306943, -1.911140, 0.980682, -1.073094, 0.447972, -2.175428, -0.213774, 0.837256, 1.717141, -0.795926, -0.266877, -0.564491, -0.925340, -1.065870, -0.910533, 1.055523, -1.351496, -0.016869, 1.579834, 1.840015, 1.514662, 0.768153, -0.491423, -1.101287, -0.322965, 1.516147, -1.348103, 1.222862, -0.791053, 1.111427, 1.296720, 1.091699, 1.366506, 0.918218, 0.097257, 0.949652, 0.347960, -0.139513, -0.336694, -0.579173, 1.550384, -1.480493, -0.546617, 0.190767, 1.347142, 1.347428, 0.603905, 0.244730, -0.917853, -0.125428, -1.975803, -1.177999, 0.743994, 0.567265, -0.754483, 0.828847, -0.532350, -0.092983, -2.319595, 0.007637, 0.986628, 0.460779, -2.962568, 0.968618, 1.898865, -0.655724, 0.045216, -1.849113, -1.734549, 3.152958, 1.040847, -0.292312, -1.699247, -2.377090, -0.451918, 0.840069, -1.460622, 0.528579, 0.339228, 0.640661, -0.167105, 0.099803, -0.965883, 1.898624, 0.906129, -1.333380, -0.146857, 0.998675, 0.364237, -0.503700, -1.344844, 0.361299, -0.434851, 0.067926, 1.650278, -1.241045, -2.308764, -1.284775, 1.536099, -2.371135, 1.373430, -0.042336, 2.428177, -1.105025, 2.365310, 2.691403, -1.544075, -0.270095, -0.679794, -0.868711, -0.824657, -2.068143, -2.398679, -0.224238, 0.231087, -0.223123, 2.066741, -0.308522, -1.142613, -1.085934, -0.159634, 0.242321, 1.321443, 1.747885, -2.101142, 0.607077, -0.277772, -0.545982, -1.171588, -1.558956, 0.588822, 0.689636, 1.537991, 1.921086, -1.138457, -1.378528, 2.287701, -1.555898, 0.119641, -0.915154, -8.828858, 0.881397, -1.195916, -1.872201, -2.569476, -2.323321, -2.365253, -0.396521, -2.205989, -1.410965, -2.422898, 1.466792, 0.649925, 1.219864, -0.747877, -0.266348, 0.991046, 0.891695, -2.195708, 0.680926, 1.209149, -0.210787, 1.210128, 10.610557, -2.100216, -0.083745, 1.247023, 0.935504, -1.588422, 2.845443, 0.795987, -0.380745, 2.624293, -0.053490, 2.473472, -2.868124, 1.383236, 0.711351, 1.147141, -1.749486, 1.416122, 2.846822, 0.376048, 0.323461, -0.725459, 0.639029, 0.754552, 0.453735, -0.531116, 1.227112, -1.815590, -0.198580, -0.407187, 1.864983, -1.030108, 0.005300, -0.603299, 0.221345, 0.428787, -0.543272, -0.332352, 2.984221, 0.202327, -5.485187, 0.535822, -1.468278, -3.729011, 0.606648, 1.700566, 1.987126, 0.941603, -1.677516, 1.996796, -1.032935, 1.982177, 1.363331, 3.309048, 0.001834, 0.811148, -2.019633, 0.028331, 0.866474, 0.507630, 0.226419, 0.544389, 1.711248, -0.764391, 1.076274, -1.722000, 0.033348, -1.926957, -1.266744, -0.601890, 0.482954, -1.266198, 2.610475, -1.327006, -0.667902, -1.140673, -0.099913, -1.162451, 0.423360, -1.963485, 0.139259, -0.620451, -1.460460, 0.638760, 0.416026, 1.097994, -0.513509, -1.205988, -0.172922, 0.569500, -1.262260, 0.069107, 3.552333, 2.873424, -0.936410, -0.988784, 0.112748, 0.826013, -2.480992, -1.644056, 1.300677, -1.467067, -1.655116, -0.570310, -0.814359, 0.405384, 0.770688, 1.133055, -0.133439, -1.938563, 1.494834, -0.301125, -0.387572, -0.750247, 0.541174, -1.642030, -1.938908, -0.677077, 0.318583, 0.249073, 0.524054, -3.372515, -1.696765, -0.695675, 0.689538, 1.064140, -0.246079, -0.554691, -1.488866, 0.984185, 1.027294, -0.596839, -1.093387, -3.009314, -1.978770, 1.159572, 1.168016, -0.330223, -3.284733, 1.291373, -1.436988, -0.950019, 0.965799, -0.077165, 1.572996, 1.267165, -0.229341, -0.213976, 1.009663, -2.332169, 0.985686, 1.952643, -0.464690, 0.870720, 1.139017, 4.479065, -1.564637, -2.089600, -0.682516, -0.824428, 0.295403, 1.328673, 0.951028, -0.364461, 1.950723, 0.535897, 0.285394, 0.804959, -1.240344, 0.207651, -0.463670, -0.450987, -0.680175, 1.419628, -0.364446, 1.160957, -0.477101, -0.219125, 0.160403, 0.470533, -0.444204, 0.862442, 0.198758, -1.226983, 1.495980, 0.226520, -0.723279, -1.507346, -0.466927, -1.450365, 0.764960, -1.442695, 0.182756, 0.328774, 0.886299, -0.596380, -0.203388, 1.011195, -0.766657, -1.136147, -0.374787, -0.275476, -1.058399, -3.041116, 0.434512, -1.394619, 0.625784, 1.467996, 0.442531, -1.457825, 0.209731, 1.162713, 0.467531, 3.316443, -0.461404, -0.440338, 0.912147, -0.356602, -0.213607, -0.530755, 1.978598, -0.493557, -1.528348, 1.450376, -3.712212, 1.629677, 0.314268, 1.076917, 0.172830, -0.658227, 0.078557, -0.190502, -0.809829, 1.809008, -3.190910, -3.268541, -1.825201, 1.854339, -1.493917, 1.862117, -0.853410, 0.036446, -1.382741, 0.457911, 1.435908, -0.519817, -0.551580, -1.203174, -2.070760, -0.745401, 0.554885, 0.254418, -0.210398, -0.413140, -0.294672, 0.634805, -2.582246, 2.121699, 0.268622, -1.482626, 0.379675, -0.467487, 0.169446, 1.307032, 0.580747, -1.428477, -2.967444, 0.660875, 1.832389, -1.248632, 3.130222, 0.024276, 1.051472, -0.682976, -0.317363, 1.123660, -0.709277, -1.417477, -0.986425, -0.298695, -1.003966, 0.361008, 0.986081, -0.355593, 1.545899, -0.062260, -0.144238, 0.113454, 0.347574, -1.912898, 0.454727, -0.372725, -1.981350, 0.008065, -0.947537, -2.363691, 0.655844, 1.178620, -2.531780, 2.641989, -1.082047, 0.048716, -0.560684, 2.803992, -0.401537, -0.054567, -0.589765, 1.519056, 1.457955, -0.394978, -0.203464, -1.381867, -0.570133, 1.159070, 1.272267, -0.157922, -0.373871, 0.099950, -2.147384, -0.859526, 0.580483, 1.258086, -1.811940, 0.999685, 0.498097, -0.208321, -0.355527, -1.407621, -0.985762, 0.651858, -0.482860, -2.400900, 0.738344, -0.063397, 0.446209, -0.798227, 0.203654, 0.930894, 2.156682, -2.504100, 1.246757, -0.226142, -0.051957, -2.631084, -0.153232, 1.148969, -0.016944, 1.010929, 0.021860, -0.662591, -1.226117, 1.644994, -0.059457, -1.183619, 0.514289, 2.352145, -0.220011, 1.431658, -1.267419, 1.970766, 2.305432, 0.049004, 1.666530, 0.574792, 0.277784, 0.800149, 1.009731, 0.389355, -0.792400, 0.567103, 0.747645, -0.571798, 1.003928, 0.624220, -0.563435, 0.667803, 0.088025, -0.928825, -1.790301, 1.901877, -0.541776, 1.394022, -0.126833, 0.875269, 1.189161, 1.737956, 1.661530, 0.203104, -2.118729, 1.117041, -0.128317, -0.311372, 0.014482, 1.714613, -0.489954, 0.444651, -1.594383, 2.181497, 2.966969, 1.521034, -0.334319, 0.392132, 0.416176, 1.389801, -0.868350, -0.728446, -0.865140, 1.497067, -0.037759, -1.570476, 0.805095, 2.005113, -1.287984, 0.413729, 1.169729, -2.043537, 1.945287, 0.750359, 0.126739, -0.790029, 1.304844, 0.328200, -0.627986, -0.490445, 0.714442, -0.914642, 0.197159, -2.827106, 0.997385, 3.489973, -1.073825, 0.653735, -0.995691, 0.280912, -1.555071, 0.767915, -0.224688, 1.522421, -0.415166, -0.191174, 0.582823, -1.135045, -0.169796, 1.546901, 0.071049, 0.284257, 2.773633, -0.179967, 0.426636, 2.561610, -0.822087, -0.031908, 1.304569, -2.126102, -0.829586, 1.164391, -0.810587, 2.414972, -0.707713, 5.064760, -2.588564, -0.219488, 1.248683, -1.401357, -1.779323, -0.341826, -2.126092, 0.527902, 1.323854, -0.591890, 0.774245, -0.843360, -0.940496, -1.516691, -0.360964, -0.833856, -0.073956, 0.339857, -2.194838, -2.514215, 0.193764, 0.800907, 0.560305, 1.772881, -0.142944, -2.448337, -0.445462, -1.048851, -0.107924, -0.572082, -0.291778, -0.296814, -2.420761, -1.365350, 6.693027, -1.209041, -0.066411, 0.129719, -2.280248, 1.539942, -1.038967, -2.091413, 0.956829, 1.592810, -0.562970, 0.009215, 0.293238, 0.985026, 0.505498, 2.863027, 0.593295, 0.521377, 0.755354, -1.455579, -0.282014, 2.376681, -0.889321, -1.516596, 2.316878, 1.763739, 1.591733, 0.514772, 1.763502, 0.324903, 0.243009, -0.708746, -0.963440, 0.783172, 0.829486, 1.675332, -0.468778, 0.556697, 0.114040, -0.370741, -2.333942, 0.774582, 1.228402, 2.680446, 1.297540, -0.724778, 2.412759, 2.449544, 2.766661, -0.809107, -1.265909, -0.594859, -1.587142, 5.402306, 0.201947, 1.070469, -0.258558, 1.065963, -0.989826, 1.529247, -0.507681, -0.647435, 1.224182, 2.883728, 2.792404, -1.001071, -3.945534, 0.930196, -1.382639, 2.686813, -0.405884, 0.766733, 0.539134, -0.295801, -0.224468, 1.500429, -0.555533, -1.335520, 0.096897, -0.415765, 0.606984, 2.125623, 0.011233, -1.109010, -0.507921, 0.001881, -1.200419, 0.509064, 0.582445, 0.778606, -1.067579, 0.467620, 1.290178, -1.526835, -0.636731, -0.707597, 0.425678, -1.071439, 0.891022, 0.090920, -0.921217, 0.565343, -0.517547, -2.092988, -0.889626, 1.468542, 0.628201, -0.472464, -0.625626, 0.615259, -0.921866, -0.012971, 1.453303, 1.554652, -0.056447, -0.678958, -0.308031, -0.713133, -0.915579, -0.870202, -1.749760, 1.451643, -0.278964, -2.563250, -0.145331, -0.523267, -0.415809, 0.755618, -0.369725, -0.295338, -0.383275, -1.980165, -0.113271, -0.397523, 0.909846, -5.292087, 1.153899, -1.791563, 0.469949, 1.437734, 0.524201, -0.943633, 0.030079, 3.490268, -0.583055, 0.664409, -0.289061, -0.868615, -2.631852, 0.654866, 0.767513, 1.965486, -0.010949, 0.017394, -0.443159, 1.697919, -0.098348, 0.924185, 0.775087, 0.854382, 0.147878, -0.812742, 0.737789, 1.358073, -0.401285, -0.354132, 0.008942, -0.822113, 0.592047, 1.777928, -0.399422, 0.472083, -1.602400, 0.261083, 0.407126, -0.276465, 1.631465, -0.616176, 0.254818, 1.403592, -0.688121, -0.240744, 0.812869, -2.323307, 3.856091, -0.730178, 0.076064, 1.194804, 1.556197, 3.100048, -0.571741, 0.489173, -1.052799, -0.899246, 0.280042, -1.118764, -1.875434, -0.439993, -1.015147, 0.281342, -0.317847, -0.517845, -0.370270, -2.244694, 0.271209, 0.636193, 2.316612, -0.182801, 0.692837, 2.745709, -0.921832, 0.691077, 1.229511, 0.042834, -0.268188, 0.343785, -0.351455, 2.286732, 3.314201, 0.140688, -2.583246, -0.356457, -1.416211, 0.058137, -1.526017], - "stablelm2:latest": [-1.653425, -4.527890, -4.877004, -3.327034, 0.434821, 1.701704, 3.526903, -4.469802, 4.630357, 0.227063, -0.190526, 1.999979, 4.078742, 0.298663, -4.610620, -6.247628, 2.257033, -4.416355, 3.772629, 4.553523, 6.998239, 2.390150, -2.438607, 0.425828, 5.858243, 3.050587, -1.468938, -3.427410, 1.221681, 3.416313, 4.253255, -5.298667, 1.102529, -3.557044, -2.505486, 5.188248, -0.989836, 0.362957, -6.202555, 0.187488, 2.013862, -5.351580, -0.717793, -0.331573, -3.788537, 3.090831, -2.763875, -1.444800, -9.508030, -3.012328, -2.278918, -1.952722, 8.289286, -1.795957, -0.417283, -5.368218, 1.483804, 0.258438, -10.793324, -0.170621, 1.341145, 3.216485, -2.294435, -11.325250, 7.499690, -0.229075, 4.033194, -2.022096, -2.066516, 3.306540, -6.398740, 4.128799, -2.652145, -4.245577, -2.925680, -1.731119, 0.467985, 5.360130, 2.190478, -2.410886, -1.811716, 0.268970, -5.523365, -1.683424, 5.559467, 0.999820, -0.455709, -4.093735, 0.959086, -2.600840, 2.411732, -0.998069, -1.692331, -2.029156, -0.735666, -3.147539, 1.299742, 0.095286, -2.520393, 5.797514, -3.167619, -8.538287, 0.815279, 6.567674, 12.046744, -7.834114, 2.572222, -8.878610, -4.626774, 1.294825, 8.148865, 10.371354, -0.124268, -3.667609, -0.973693, -1.063670, -3.439687, -6.460613, -7.701084, -2.760577, -14.492188, 0.164426, -0.574549, 6.525961, 6.609715, 2.040981, 5.896592, 4.514081, 6.597866, 1.675606, -0.119387, -2.212113, 6.467727, -1.213706, -9.323136, -0.693238, -5.086019, 2.603607, -5.502177, -4.949139, -1.244192, -2.954522, -2.206366, -2.425069, 4.410294, 1.227588, -0.394113, -2.969205, 4.004092, -3.239883, 4.231017, 4.769729, 4.615758, -7.733798, 1.271179, -2.725834, 0.671723, -3.348217, 7.956835, -12.407818, 6.270431, -3.478354, 4.388823, -3.833550, 1.732134, 5.342522, 2.818245, -1.669699, 0.843653, -0.263149, -3.813351, -0.002553, -2.829279, 2.242092, -4.844329, 4.352617, -5.227120, -0.456413, 1.326151, 3.658723, -6.018328, -0.463759, -2.318596, -2.668297, 4.961249, 0.332518, -6.405596, -0.779784, 8.303428, -0.356073, -0.476739, 5.318171, -0.729066, -1.279565, -0.168029, -2.664624, -2.886173, -3.781708, -8.054917, -2.770633, -1.900103, 1.705698, 0.827769, 3.430624, -0.810647, 0.054838, -3.096855, 3.872227, 5.814599, 1.282295, 4.651320, 1.548328, 3.391430, 5.546462, 0.517707, -5.639794, 2.234933, 2.315346, -1.303822, 2.506015, -5.120077, 1.068318, -10.178645, -1.690384, -4.059442, -4.102598, -7.739625, -1.987418, 9.097525, 4.775144, -7.737073, -5.659193, -1.349567, -2.326614, 3.676482, 2.931034, -5.102944, 1.715105, 4.865362, -4.627227, -6.429954, -1.112960, -0.858902, -1.824539, 1.637483, -3.371596, -0.620898, 4.749110, -2.166193, -0.805950, -4.718459, 1.605792, -0.939038, -4.040066, 2.002779, -5.702419, 6.565500, -0.903362, -9.009130, 3.520554, 1.029390, -3.308164, -2.322248, -2.632967, -2.356549, -5.540984, 6.991878, -1.809226, 1.707506, 1.601529, -5.887782, -5.692646, 7.399372, -4.395493, 5.871286, 9.472426, -0.359002, -2.470697, 0.435673, -0.644079, -5.350487, 1.608036, 2.127206, -3.599508, -1.087288, -3.679646, -12.158961, -1.540634, -2.502623, 0.651748, -1.322796, 3.151287, 9.182612, 2.028822, -0.812259, -3.164355, -1.381061, 2.889172, 3.109571, -1.242814, 2.625086, 4.967103, 2.446508, 4.618402, 3.096960, -1.840115, -4.565569, 1.562091, -6.668737, 0.893992, -5.300009, -4.409395, -4.273031, -1.051213, 0.975259, 1.476943, 6.330149, 4.270274, -11.452203, -0.883367, 1.148818, -3.492275, -1.791984, -2.602362, 1.316202, -1.428396, -0.278130, 4.541390, -0.525913, -2.048077, 2.950917, -8.256606, -0.619955, -8.175155, 6.219592, -4.559412, -5.029519, 1.302574, 2.189243, 5.993953, 1.107539, 4.641527, -2.683317, -5.585598, 1.786944, 0.677125, 0.233469, 4.144743, -0.264630, -9.546192, 1.356367, -6.896400, -0.728840, 7.910208, -0.524742, 0.772314, -13.003156, 2.716943, 5.011025, 8.707234, 5.124669, 10.650016, 2.541430, 4.903395, 1.203507, 5.391636, -1.071023, -6.836140, -2.679827, 1.561458, -5.448033, 4.679675, 3.506107, -0.709596, -0.482555, -5.619187, -4.259030, -0.654340, 5.424935, 2.510676, -0.936929, -0.446392, -0.840864, -3.871309, 0.425172, 1.525210, 0.039525, -6.836664, 1.961243, 1.491557, -1.030146, -5.348517, 0.169497, -1.356025, -2.163417, 5.469456, 0.066804, 1.929168, -3.859758, -3.962416, 0.119438, -0.293607, 2.149185, 5.052205, 1.318201, 6.010693, 4.904095, -2.518855, -4.074033, -1.353910, -5.139940, -2.222615, 8.519213, -4.054481, 2.562309, -5.009195, 2.178149, -0.613098, -1.953666, -3.135884, -0.035426, -5.914386, 6.685964, 1.986224, 3.855035, -1.448132, 1.943400, -1.810771, -4.663630, -0.055918, 3.650834, -2.328945, -0.343562, -1.699932, 3.589826, -1.778784, -3.079531, 1.289937, -3.386725, -2.422012, -0.408499, -6.427080, 3.272934, -1.943715, -2.241102, -2.410607, 4.938379, 0.192622, -1.478900, -3.973377, 0.141261, -2.835047, 4.658964, -7.517603, -1.879068, 1.348901, 1.734751, 5.640635, -4.243168, 1.005301, -9.276393, 1.285112, -5.875256, -2.468377, -0.461431, -1.482033, -0.673434, -5.684919, 3.922001, 3.804457, 3.012733, 1.698399, -5.566331, -6.048701, -4.414396, 5.351144, 3.322751, 0.896671, -4.106427, 1.860496, -0.253392, 1.277863, -7.608521, 6.061233, 5.827372, 6.431350, 2.389126, 2.007912, -3.222721, -4.483950, 0.731796, -3.598605, -3.288245, -3.541759, -2.779022, 0.147720, 2.639788, 4.095247, -2.116362, -1.391803, 1.351580, -3.107973, 2.237751, 2.010487, -1.263100, -3.238010, 8.573421, 5.392852, 3.159662, 3.357732, -0.948037, 4.364056, -2.137167, -3.219444, 1.305905, 2.827949, -2.033297, -2.093264, -5.610653, -7.001668, -2.163801, 2.376028, -4.681757, 5.156943, 1.829207, 0.746286, 2.314424, -2.283703, 0.279357, -3.448669, 2.972520, -0.545495, 0.310627, -0.852161, -7.286296, -2.648488, 0.934100, 2.379191, 5.979376, 0.192706, -3.829838, -2.468099, 0.100848, -6.053266, 5.135528, 3.334038, 1.584143, 3.258758, 5.504037, -11.328886, 0.530728, -0.574380, -1.293216, -0.792869, 0.820730, -1.782550, -0.205883, -3.883558, -1.312371, 2.503407, -0.702521, -1.633566, -1.069555, -1.567426, -0.230182, 1.784593, -0.737677, 4.364082, 2.460050, -4.924289, -6.106172, -3.849522, -6.653006, 5.791493, 5.874276, -3.370222, 3.113476, -4.759202, 3.331463, 4.267272, 0.264762, 3.669857, -6.741902, 2.898152, 6.440811, 6.956420, -0.835060, -2.215858, 0.249587, -4.716614, -0.861111, 8.428898, 4.730777, -2.566945, 5.364206, 4.415503, 1.863187, -0.282807, -3.007959, 3.352833, 2.522977, 0.141859, -3.279416, -0.489100, 6.349781, 2.915948, -8.313710, -0.765640, -4.500856, -2.149416, -1.429163, 2.745811, 3.426836, -1.849564, 3.420510, 3.182203, 6.437835, 0.332201, 1.293108, 1.917845, -1.826147, 0.560607, -4.406342, -8.274857, -7.816263, -0.885038, 3.031509, -5.290300, 1.006592, 6.433846, 0.471501, 3.736609, 5.074759, 4.981182, -3.678520, -2.021518, 10.449417, -0.564782, 1.300790, 0.502043, 12.881732, 4.540535, -4.317128, 2.051635, 0.101281, 0.239251, -5.920107, 2.336436, -0.110763, -0.277836, -0.974074, 0.063837, 4.152015, 0.325702, -2.058868, -5.299603, 5.149256, -2.832694, -1.603464, -4.600780, -4.658039, 8.158319, -3.264244, -11.934885, -4.573738, 6.673770, 1.439004, 6.602091, -2.991610, -1.654177, 3.248230, 3.939474, -6.756430, -2.517539, -0.613864, -0.975685, -3.253090, -1.550883, 1.116012, 8.072521, 1.273055, -3.864636, 0.816139, -0.950701, -2.670830, 5.195287, -2.328566, -3.112808, -4.658459, -0.805908, -3.067221, 4.318442, 8.389666, -5.030275, 0.058931, -1.826782, 1.134502, -1.841629, -0.575503, 3.915390, 3.050701, -3.814120, 4.136434, 5.313198, -16.515984, -3.495671, 2.929760, 6.529726, 0.853020, -4.347084, 1.884411, 2.921730, 4.515150, -2.303609, 10.394044, -1.102041, -3.211182, 0.725145, -1.796741, 9.977491, -0.648789, -4.959561, 2.794793, 9.351508, 4.972434, 12.403986, -2.706991, 4.984309, 2.806412, -0.491541, 6.124185, -0.379290, -7.301085, 1.975749, -2.017454, -5.018500, -2.437666, -1.782842, 4.566490, -2.922570, -2.925570, 2.754348, 2.749041, -2.033346, -7.835915, 3.649824, 6.765293, -1.011391, 1.864064, -7.500477, -2.595671, -4.921342, 2.147914, -2.115498, -0.801049, 6.279182, -0.197686, 11.327653, -5.934701, -7.260524, -2.454565, -3.408250, 2.158854, 1.159594, -6.104372, 0.241652, 23.164333, -5.603174, 6.017294, -0.571283, -6.029321, 1.543975, 1.540088, 2.072177, 1.757015, -5.177544, -7.231556, -26.657049, 0.473235, 0.352308, 2.230681, 3.589925, -2.697782, 4.523419, -4.524393, 0.514307, -0.900148, -1.682595, 2.504208, -7.411628, 6.241665, 0.796579, -1.218847, 4.472510, -0.540995, -1.754540, -6.618201, 2.994895, -3.403845, -6.894874, 1.718728, -1.100953, 10.106449, 4.881456, 3.669082, 3.294474, 2.485058, -1.061432, -0.072556, -6.104910, -4.190408, -7.087040, -0.934537, 1.141285, -0.152905, 5.990927, 21.803249, 3.692633, 0.646055, -15.504597, -1.677958, 2.374717, 5.231987, -0.374639, -5.891757, -9.832679, 0.603590, 1.253641, 8.749701, 2.263827, -1.956822, -0.234216, -0.836304, 1.517358, 1.591627, 4.201532, -2.462435, -2.727039, 1.439295, 3.413836, 6.225077, -2.572009, -9.178096, 0.580842, 8.541307, -7.947644, -2.963300, 1.793434, 4.577036, -3.500894, 1.535902, -8.535811, -3.740390, 6.137311, -2.559419, 2.890654, -3.380768, -2.330120, 2.918745, 2.383862, -2.060155, 1.042335, 2.117087, 4.053154, -2.273367, 2.529394, -1.717983, 7.215990, -4.043588, -1.948729, 1.058707, -3.974885, -0.589312, -2.932399, 2.257031, -4.331958, -0.382463, 2.482601, -5.368923, 3.443856, 7.799732, -4.793459, -2.265096, -2.682369, 11.392784, -8.612529, 6.155714, 1.332527, -6.299338, 4.072433, 3.686455, 5.212699, -1.562696, 3.388870, 4.463029, -1.301285, 0.617910, 4.544553, 0.401876, -4.455338, 4.778875, 8.848549, 0.613039, -3.292335, -10.968876, 0.494941, -1.651135, -4.843451, 1.116010, 0.260165, 3.420653, 3.682390, 8.025309, 4.441313, -4.517295, -4.679897, -3.862373, -0.206641, -2.444820, -0.828062, -0.811257, -1.055606, -4.862272, 1.180074, -4.215420, -6.076351, 9.779222, 5.339531, 4.378951, 2.873308, -0.683237, -1.936983, 5.560632, -1.555797, -0.726255, -2.257168, -3.157807, -4.559538, -2.570522, 4.684027, -7.325606, -3.542253, 0.778399, 0.183623, -3.961788, -0.930686, 3.844731, -3.814492, -4.890561, -1.906883, 3.408762, 7.770661, -1.412129, 6.053822, 3.116910, -2.239404, -4.743374, -3.551391, -5.377923, 2.254163, 7.574185, -1.413529, -3.561156, 2.421036, -1.718103, 4.480564, -6.611534, -5.721527, -0.189614, -5.132884, -1.187861, -3.024539, 1.856411, 5.378809, 0.367076, 2.214311, 4.217255, -2.399374, -8.449114, -3.636938, -6.007771, -6.751559, -3.842293, -2.011700, 0.578463, 2.428024, -6.291073, 8.905704, -1.470243, -0.017971, 3.929838, -4.127206, 4.167617, -1.194076, 2.293453, -1.130347, 2.758235, 0.314015, 4.531409, -1.481377, 1.207142, 6.048965, 2.260943, 13.881939, -0.718647, 0.488885, -0.471996, 1.053957, 7.320283, 0.283981, -8.531932, -3.530199, 4.011388, -0.629390, -1.018878, 1.265667, -2.407388, -4.780603, -2.249164, -0.449141, -3.792957, 2.530940, 3.387525, -2.545771, -4.046836, 2.087038, -0.254846, 1.675272, 1.858252, -3.493028, -0.658172, -2.717700, -9.038601, -2.023740, 2.185417, -5.424749, -1.712286, 3.890235, 10.073957, -7.019946, 0.662037, -5.308875, -5.676610, -4.722646, -2.664748, -1.777658, -0.848570, 0.390657, -0.070973, 0.944846, 7.873178, -0.824468, 7.144648, 5.662151, -3.808916, 13.441382, -6.540015, 5.588078, -9.888226, 0.829120, 0.493990, 2.685220, -2.146703, 33.005726, -9.920277, -2.047557, -4.809439, -1.058374, -6.111153, -3.855006, 3.898750, 3.120060, 2.897796, 4.638179, 0.339269, 4.206357, 34.924412, 1.550849, -0.893083, 7.823601, -0.931050, -2.969501, 3.311508, -4.605260, 0.211484, -1.090347, -11.311889, 5.567627, 2.470628, -3.050094, -6.833628, 0.027669, 3.954453, 0.462904, 1.221832, -3.357898, -0.372250, -3.285368, -2.702124, -1.365660, -2.935486, -0.653691, 0.267228, -1.761839, -1.757823, -7.618964, -4.954926, -3.058721, 4.318247, -1.149615, -1.913772, -6.029979, 7.433734, -5.322990, 5.067607, 0.097438, 6.688019, 3.424113, -0.951026, -2.514448, 4.473936, -0.328897, 0.472957, -8.968553, 4.915695, 7.202985, -1.535644, 1.273114, 4.096374, 1.467003, 4.575773, -2.753911, -2.426697, 2.021526, 2.448324, 1.601018, -4.054155, 5.143868, 2.001997, 1.193890, 6.219207, 6.874357, -5.902385, 1.215700, -2.638806, -0.412928, -5.336220, -5.211881, -3.786383, 2.493112, 1.445182, -0.932489, 3.669335, 2.494090, -5.945648, 1.461121, -4.588869, -9.683293, 0.024478, 0.361819, 0.429738, -0.528489, 0.071427, -1.812616, 2.015117, 2.611473, -1.552477, 1.188317, -3.766112, -8.125200, 5.595769, 7.144753, 0.440344, -3.455775, -4.126338, -0.137749, 1.485938, 4.267346, -2.552121, 5.409408, -2.956439, 0.116498, 10.794524, 2.871317, 6.700639, 3.647399, 0.462681, 0.919991, -1.771236, 4.206169, 3.297713, -0.490547, -5.456108, 3.810536, 0.439151, -5.683705, -0.331633, 9.695666, 6.752079, 1.894693, -2.299804, 0.911242, 1.596185, 1.820296, -10.136162, 2.699797, -0.861554, 1.563863, -1.445469, -1.585015, -0.936888, -2.816169, -7.779940, -2.266987, -2.636140, -0.401760, 0.616410, -3.814011, -1.176419, 11.211123, -9.366578, -1.591179, -0.927374, -0.874337, -4.743129, 2.231917, -6.397682, 2.209341, 5.533977, -0.850753, -1.956051, 0.684888, -1.229650, -5.023637, 2.315219, 3.824482, 7.081928, 5.981342, -5.582659, -0.983008, 2.805578, 3.657308, -1.696202, 6.763514, -5.138957, -3.832808, -7.314121, 0.053174, 2.861154, 3.639174, 4.679485, -2.298343, -11.186035, -2.610517, -0.211195, -0.640446, 0.348537, 1.758054, 5.264797, -1.193833, -0.879477, -1.257836, 2.351809, -2.727529, -6.421523, -0.637253, 1.358360, -0.497932, 2.984409, -5.369983, 0.237885, 2.455053, -3.368424, -2.715488, 1.050363, 1.030069, -5.754048, -1.451195, 2.429502, 3.444857, 3.233912, 5.911255, 5.225487, 1.088152, -1.966296, -0.698468, 5.785910, 5.211907, -1.712197, 0.683985, 7.677290, -2.134921, -0.079519, 6.433024, 3.194132, 2.521041, 0.270111, -0.026705, 2.443631, -7.762458, -0.880217, -1.432392, -0.296257, 1.004292, -2.112697, 0.410646, -7.520607, -5.301806, -6.393757, -2.312966, 8.617706, 5.257979, 2.469394, 1.896033, -7.304307, 0.032064, -1.680473, -1.370388, 1.836908, 1.746221, -4.757438, -1.365277, -3.207575, 2.679633, -1.870035, -4.846527, 9.144346, -0.177452, -1.721346, -4.960502, 14.192567, -2.215825, -4.418038, 4.921060, -4.274836, 0.196901, 3.359635, 1.766395, 6.591709, 1.311870, 3.836223, 3.283481, -5.704985, -5.065734, -10.232748, 1.326910, 10.367500, 0.266378, 1.245203, 3.728586, 0.871024, -4.337420, 3.950523, 1.484714, 7.130711, 2.444842, 3.370905, -3.053072, -8.794883, 0.811756, -6.805107, -1.288338, -3.038558, -1.800780, 5.653497, -7.699387, 4.797431, -1.204077, 3.131383, 0.218491, 0.271107, 0.328277, -3.661891, -3.891054, -2.775194, -2.972222, 1.638716, 2.121798, 11.757519, 1.406214, -4.839445, 2.654708, -4.238147, 6.563388, 3.513842, 1.695825, -3.579199, 0.144067, -3.779405, -3.784275, 4.610184, 8.391285, 3.869660, 14.877264, -0.853013, 0.816489, 4.322730, 1.468392, -10.050632, -6.104123, 1.944591, -0.779614, 4.052341, 4.706254, 1.130013, 3.297864, -2.842252, -1.799122, -7.300198, -8.223158, 0.103784, -0.536769, -0.178908, -3.648121, -7.089283, 5.717216, 1.748043, 2.195454, -0.802349, -6.516545, 2.740543, -7.503774, -1.026417, 2.788604, 1.603290, -12.695382, 8.187833, -26.062899, 0.796168, 4.796346, 1.615061, -1.498737, 1.886548, -0.707566, 4.348446, 7.479768, 0.241852, 0.702221, 7.663441, -8.665356, 1.352373, 3.487139, -1.783125, -1.789621, -1.968932, 0.433356, 3.286088, -0.605302, -4.334078, 3.792793, -5.000621, -3.242608, 12.834573, -0.729511, -2.675239, -11.013935, 3.448772, 7.774179, 7.802071, -5.316556, 3.057752, -4.227582, 8.020033, 3.920683, -1.241657, 1.266449, -0.277056, -3.271275, 0.191526, 0.863023, 1.282676, 6.873929, 3.656773, -4.713717, 4.149897, -3.846729, -0.674714, 0.938713, -5.917807, -4.432909, 12.985623, 4.821611, -5.643327, -8.125957, -0.826768, 0.629284, -3.502351, -2.436090, 4.174616, -0.633892, 1.566435, -0.910233, -3.207411, 4.179739, -0.570571, -7.840557, -1.772896, 0.870700, -1.275693, 1.374926, -0.907516, -4.510747, -3.468122, 0.839771, -3.056328, 3.745919, 1.016371, -2.341292, 2.988811, 1.466320, -4.544544, -1.112260, -2.121435, -0.762460, 12.233142, 1.429840, -1.525554, 3.081838, -3.317194, -1.130550, -2.559003, -1.026362, -5.037518, 2.794155, -8.199506, -4.733481, 0.113747, 5.813182, -18.165855, -3.891802, 4.974901, 1.006614, -9.837774, -6.438626, -6.679924, 0.494078, 2.243184, -6.200881, 2.836529, -0.610269, -3.830256, -7.266005, 1.085588, -3.045987, -2.564099, 3.038881, 0.339688, 0.001306, 1.242169, 0.134139, 0.602918, -0.701311, -3.369164, -0.690272, 4.710167, -4.428005, -0.421637, -2.355613, 1.473268, 1.529589, -5.259464, -2.180897, -4.329997, -5.442777, 4.491558, 8.333999, 0.233608, -3.291049, -6.142815, 4.169403, -5.941311, 1.491574, 1.647497, -4.800206, 1.673341, 5.559244, 6.246997, 1.889692, 2.633429, 4.055699, 8.010838, 3.966914, 0.671864, 2.492251, 1.159096, -5.895726, 1.409254, 4.707012, -3.720183, 2.499872, -10.549520, 0.548011, 3.479353, -1.914070, -4.064875, 8.711893, 6.612379, -2.074630, 3.438460, -1.055158, -6.425396, -2.817565, -0.598246, -1.445648, -3.299649, -8.691216, -1.171440, -1.482286, 6.319604, -0.608533, 0.551999, 2.872281, 1.462533, 3.835391, -7.284638, -2.038612, -4.394158, -7.662087, 1.181028, 3.206617, -3.588524, -3.229356, 2.175489, -2.026885, -0.381162, -3.029563, -8.150112, -1.667152, 3.350580, -2.530387, -0.431616, 8.152472, -10.510705, -6.262432, 1.664065, 3.685207, 1.542331, 1.176850, 2.727885, 2.490125, 5.457391, -0.308251, 2.646002, -5.066769, -6.901775, 2.318301, 4.163167, -0.442582, -3.884129, 0.530555, -0.963692, 3.085561, -11.314219, 6.204105, -3.639430, -3.290856, -2.991646, 3.467474, 7.838357, -4.172731, 7.366910, 1.738384, 0.128589, -0.141192, 1.608539, -0.555499, -1.099028, 3.368660, 0.252946, -3.633769, 2.855535, -4.066776, 2.204027, 11.876217, -1.471280, -3.263006, 9.681908, 3.866625, 2.398274, 1.791172, 1.211074, -5.895164, 0.699426, 13.719752, 3.616782, -6.157663, -9.184650, 6.519058, 3.153225, 4.643545, -5.599307, 0.254889, -3.117306, 3.102524, -0.361742, -0.260251, -3.457507, -1.648794, 2.501627, 3.397187, -7.770206, -0.318884, -2.265900, 6.043713, 9.379510, 3.545226, 6.332065, 0.347569, -2.060041, -1.962089, 1.544432, -4.882979, -0.862780, 1.854207, -2.820076, 7.028728, 3.497764, -0.441711, -0.910925, 1.264082, 0.343511, 8.315704, -7.834203, 12.308478, 0.415701, 3.429908, -2.472554, -9.694130, -5.292675, -0.149351, -1.371549, 4.333561, -0.579647, -1.422889, -3.249985, 7.131853, -0.878708, -4.499852, -5.401291, -0.561697, 5.849093, -10.702834, -4.518972, 0.102368, -1.098199, -8.463142, 4.227396, 1.787177, -3.223487, 3.757309, -2.557846, 1.850068, 2.502924, -1.886266, 3.977140, 0.390536, 6.199437, -0.839144, -3.026297, 9.601433, -5.108625, -7.475008, 5.318777, -0.886975, -4.307914, -13.300366, 2.354438, -4.161621, -0.152817, -7.119799, -2.522202, 2.405219, -1.703956, -1.918706, 1.123279, -1.686906, -13.981764, 1.260341, 5.348891, 2.944733, 4.517666, -0.222268, -0.224630, 0.870396, 0.655100, 4.191898, -2.788587, 5.468477, 0.407466, 9.296951, -6.126083, -0.179773, 0.970539, -0.705487, -6.364262, -4.497518, 4.540085, 0.094961, -4.489572, 2.402131, -5.849391, 1.395253, 0.655383, 10.144835, 5.867474, -1.108069, -1.975885, 3.721664, 2.627710, -2.964183, 0.887506, 1.555636, -6.907562, 2.927052, 10.168860, 4.192670, -1.880741, -6.589525, 0.641212, -3.735144, 1.842830, 3.282881, -0.562061, -5.831023, 1.471113, -2.658396, -4.187063, -8.363999, 4.956432, -4.024732, -0.800226, 0.528853, -0.258082, 10.271538, -1.794757, 4.264963, -3.756393, 0.068837, 2.209610, 7.479410, -2.213324, -0.446097, -1.402409, 6.209837, -3.888666, 3.499879, 5.169998, -1.028717, 0.514249, -2.074459, -1.518194, -3.565759, -4.638311, -0.359604, 1.501896, 1.285335, 5.767209, 2.073330, -3.042041, 2.643086, -1.890087, 0.516425, -0.564762, 6.343996, -0.687559, -5.105609, -1.004164, 5.515174, -0.558512, -3.221458, -3.600777, 4.806634, -3.949126, -3.070909, 4.943271, -7.664543, -0.072120, -5.741046, -0.178641, 8.156539, 6.247648, 0.371558, -4.386340, 1.028563, -0.193440, 3.827970, -2.015718, -0.128680, 1.226461, 8.194599, -10.498024, -4.354074, 4.413433, 7.957554, -9.281338, 2.760691, 0.985617, 5.863577, -1.442804, 3.142987, 0.343291, 4.878276, -2.696698, 1.107740, -1.036489, -5.530350, 0.732239, -2.805647, 2.660924, -2.471739, 0.074897, -7.086133, -4.656291, -3.232314, 7.814073, -3.493585, -5.844809, 11.378303, -3.959454, 2.498766, 4.457907, 1.597166, -0.140635, -4.411887, -0.654702, -1.143033, -2.344702, -7.219950, -2.728144, 3.015845, -3.185435, -0.887260, 1.874124, 5.364367, -0.202549, 2.762683, 6.488287, 6.185477, -3.207197, -0.253945, -1.326026, -1.671279, 3.101617, -3.714328, -4.822799, -7.220240, 5.298695, -6.139416, -3.011972, -4.737096, 2.741168, 2.762054, 2.917991, -5.666528, -4.641473, -1.250757, -5.046134, -10.761831, -1.727711, 3.504439, -0.361030, -3.113671, 3.207125, -4.755842, 3.955856, 3.747915, -4.405138, -3.959960, -5.588688, 12.236965, -3.121061, -2.896829, 4.571880, -9.121741, 6.443601, 6.203311, 2.311942, 3.679552, 4.453959, -0.677486, 4.320968, 3.576111, 2.108275, 1.293650, -0.374192, 3.017422, -1.509517, -3.192483, 0.019659, -4.668540, -8.395880, 3.959239, -6.751495, -9.315059, 2.641012, -5.815385, 1.776897, 0.764546, 0.657157, -2.862101, 1.956879, -1.389284, 6.959363, -1.612058, 0.148994, -3.402942, 0.557323, -1.576211, 0.613227, 0.059131, 0.110311, -5.456705, -2.389134, 0.064466, 4.863774, -1.120738, -5.267430, 1.526949, -2.258410, -4.011267, -7.015226, 9.352161, 3.459421, 1.011206, 1.277637, -0.117204, 0.035243, 5.753888, -0.467889, 0.203132, 0.377401, 6.997046, 4.553281, -0.652787, -1.176425, -3.859581, 2.546398, -10.185781, 4.840391, 0.853133, -4.606481, 0.760895, -1.668669, -0.353953, -1.965285, 1.187143, 3.873412, 1.089695], - "falcon:latest": [-0.145434, 0.551458, 0.579686, 0.056737, 0.122334, -0.098554, 0.453500, 0.152636, 0.006995, 0.353793, -0.057853, 0.141001, -0.251169, 0.123486, -0.386756, 0.380073, 0.113592, 0.246952, 0.221665, 0.222362, 0.110978, -0.156950, -0.095453, -0.446011, 0.380302, -0.181973, -0.355711, 0.083788, 0.529327, 0.396823, -0.235883, 0.463392, -0.453481, 0.111083, -0.109795, 0.096437, 0.184561, -0.006152, -0.404893, -0.505164, -0.512443, -0.248063, 0.264552, 0.211518, -0.408603, -0.177284, -0.358847, 0.055804, 0.302788, -0.161492, -0.030894, -0.017345, -32.815334, -0.083117, -0.250543, 0.163018, 0.198646, -0.159876, -0.472978, -0.341143, -0.634069, 0.191124, -0.064307, 0.090823, -0.458379, 0.471753, -0.101117, 0.290473, 0.348141, 0.077560, 0.459839, 0.713714, -0.385911, 0.357724, -0.028543, 0.215573, 0.420039, -0.160133, 0.720215, 0.377099, 0.286783, 0.130918, -78.763008, 0.235381, 0.492549, 0.421542, 0.292254, -0.320543, 0.125360, 0.286009, -0.266907, -0.161205, 0.468458, 0.075248, -0.607871, -0.498977, -0.248155, 0.137575, 0.217211, 0.167880, 0.721968, 0.437299, -0.006375, -0.114837, -0.217905, 0.325793, 0.548343, -0.304491, 0.050522, -0.296999, -0.015102, -0.066116, 0.326557, -0.683608, 0.848642, 0.139344, -0.386741, 0.095375, 0.137059, -0.524803, -0.308266, 0.207935, 0.910517, -0.047032, 0.016144, -0.282897, 0.030230, -0.118328, -0.216214, -0.303300, 0.196013, -0.501000, 0.369998, -0.028593, 0.309059, 0.496592, -0.330565, -0.581806, 0.117767, 0.187372, -0.144573, -0.227210, 0.181474, -0.181403, 0.144057, 0.269330, 0.046298, -0.699166, 0.538736, 0.174926, -0.561055, -0.088680, -0.007410, 0.730400, -0.471273, -0.197240, -0.027064, -0.109930, 0.149596, -0.431747, -0.033780, 0.269468, 0.410048, -0.164335, 0.079866, -0.167682, -0.260156, 0.352913, 0.227972, -0.491290, -0.305480, -0.233817, 0.048377, -0.192452, 76.728951, -0.184723, -0.035661, 0.021605, -0.363392, -0.380687, -0.095017, -0.363713, -0.331915, -0.450960, -0.384010, 98.522270, -0.376337, 0.332839, -0.049045, 0.044364, -0.076163, -0.176768, 0.273568, 0.060393, 0.105446, 0.286757, -0.061164, -0.454434, 0.415012, -0.140746, -0.040113, -0.565394, -0.060276, -0.234516, 0.312736, -0.069791, 0.352157, 0.496571, -0.248295, 0.169454, 0.254744, -0.125044, 0.095099, 0.158710, -0.174195, 0.307172, 0.600827, 0.102560, 0.584701, 0.191773, -0.210491, 0.224133, -0.133474, 0.060811, -0.040503, -0.486995, -0.257410, 0.131609, 0.188029, -0.003900, -0.226279, 0.014537, -0.214499, -0.285907, -0.500149, 0.220990, -0.061304, -0.449743, 0.320928, 0.395599, -0.405548, 0.214390, 0.296444, 0.175481, 0.196306, -0.181649, -0.175221, 0.562277, -0.083596, -0.135095, -0.226197, 0.060174, 0.425703, -0.263677, -0.442736, -0.848780, 0.140745, 0.158711, -0.246688, 0.513777, -0.133425, 0.150256, -0.165640, -0.204918, -0.390736, -0.400310, 0.078730, 0.042572, 0.127664, 0.146947, -0.031153, -0.076668, 0.239822, -0.114565, 0.338568, 0.057678, 0.276141, -0.158014, -0.047334, 0.813145, 0.096568, -0.204652, 0.069818, -0.162866, 0.474288, 0.010297, -0.042806, 0.708678, 0.266313, 0.264811, 0.178802, 0.090678, -0.153934, -0.245041, -0.249606, -0.606384, 1.116905, -0.250234, -0.134183, 0.109237, 0.162539, 0.071664, -0.028506, 0.256520, -0.270116, 0.370725, 0.072267, 0.595097, -0.444489, -0.306348, 0.375055, 0.052390, 0.689186, 0.141866, -0.022982, -0.028208, 0.692657, 0.168249, -0.289483, -0.068967, -0.145280, -0.667039, 0.606857, 0.572388, -0.461176, -0.083282, 0.357757, 0.263421, -0.338740, 0.014035, 0.136918, -0.027329, 0.405532, 0.123614, 0.228298, -0.604249, -0.259012, 0.191833, -0.188005, 0.052887, -0.036500, 0.051033, -0.017828, -0.013952, -0.076532, -0.322442, 0.034422, -0.158676, -0.380441, 0.068665, 37.625778, -1.467730, -0.198724, -0.366973, 0.094293, -0.008216, -0.019456, 0.045300, 0.241962, 0.206565, 0.200205, -0.170838, -0.239032, -0.092126, 0.364009, 0.078817, 0.044788, 0.307262, -0.396150, 0.345320, -0.246881, -0.092816, -0.252418, -0.180483, -0.254689, 0.004093, -0.200098, 0.210746, 0.029551, 0.245714, -0.063405, -0.003852, -0.331452, 0.648124, -0.156812, 0.173493, -0.454535, -0.054677, 0.309534, -0.462142, 0.451003, -0.153110, 0.369131, 0.301209, 0.173910, -0.131474, -0.194955, -0.717491, -0.016214, 0.543446, 0.239048, -0.154631, 0.153298, -0.721207, 0.015260, -0.547927, -0.272240, -1.158423, -0.387883, 0.179015, 0.290848, -0.178274, -0.537356, 0.123705, 0.337805, -0.196415, -0.124260, 0.274265, -0.027145, -0.112975, 0.271123, 0.200173, 0.309503, 0.368623, -0.130785, 0.145833, -0.102706, -0.194807, -0.355944, 0.233473, -0.422869, -0.249461, 0.275593, 0.261122, -0.041622, 0.321849, 0.351184, -0.731175, -0.455722, 0.376331, -0.073822, -0.400349, 0.297684, -0.254106, -0.179405, -0.740918, 0.396933, -0.624790, -0.245724, -0.758950, -0.761523, 0.171997, 0.582886, 0.122688, 0.454277, 0.393659, -0.125691, 0.526288, 0.245751, 0.236661, -0.268370, 0.259706, 0.471990, 0.070545, 0.262786, -0.195632, -0.373156, 0.233073, -0.319479, -0.180365, -0.356844, 0.501312, -0.404738, -0.253011, 0.381910, -0.230624, 0.322234, 0.322426, -0.406919, 0.278409, 0.189779, -0.477614, 0.398916, 0.282304, -0.097129, -0.206756, 0.078960, -0.140931, -0.327043, -0.043203, -0.238777, 0.054524, 0.345428, 0.379250, -0.028527, -0.346552, 0.135533, -0.324663, 0.097073, 0.405679, 0.144856, 0.203372, -0.135059, -0.262663, -0.038000, 0.389909, -0.832866, -0.061717, 0.439580, -0.620867, 0.043219, -0.032121, 0.448644, -0.445477, 0.479233, -0.349839, 0.376309, 0.034940, -0.093427, -0.018762, 0.237700, -0.175609, 0.521672, 0.212652, -0.147365, -0.611912, 0.433886, -0.218107, 0.044754, 0.199969, -0.084820, -0.180790, 0.020706, -0.192604, 0.911501, -0.205838, -0.328527, -0.468358, -0.292061, -0.165838, -0.239964, 0.134404, -0.085968, 0.593265, -0.035909, 0.166329, -0.038361, -0.180849, 0.134523, -0.347261, -0.383150, 0.203595, -0.527209, 0.655002, 0.036892, -0.271854, -0.722635, -0.183820, 0.041028, 0.534431, -0.321399, -0.418089, 0.205068, 0.079445, -0.313515, 0.291001, 0.376464, -0.024004, 0.494628, 0.302450, 0.075265, -0.267347, 0.131573, -0.295871, 0.160672, -0.115069, 0.890312, -0.041931, 0.229802, 0.140957, -0.566682, 0.494251, 0.228695, 0.119960, -0.250476, 0.542480, 0.438343, -0.089255, 0.539449, -0.477021, 0.099634, -0.404685, 0.306461, -0.043212, 0.233839, 0.048056, -0.186367, 0.199987, 0.047861, -0.289694, -0.537992, -0.030393, -0.089514, 0.143944, 0.128985, -0.247290, -0.148287, -0.007974, 0.302635, -0.353074, 0.140356, 0.267783, -0.438974, 0.037830, 0.136492, 0.285023, -0.161996, -0.577940, 0.466486, 0.099931, -0.207497, 0.478511, -0.477054, 0.378640, 0.114531, -0.454839, 0.205362, -0.264606, -0.345706, -0.495824, 0.015153, 0.063968, 0.570447, 0.097192, -0.171304, 0.976958, -0.167555, 0.102738, -0.436587, -0.416574, 0.246487, -0.708184, 0.023123, 0.282953, -0.282671, -0.100751, 0.016980, 0.458428, 0.210551, 0.728111, -0.064927, -0.518779, 0.023455, -0.523534, -0.352629, -0.204977, -0.031492, 0.492380, 0.037194, 0.275549, 0.049998, -0.042273, 0.024827, -0.391516, -0.194958, -0.433102, -0.268930, -0.385709, 0.035979, -0.236354, 0.036609, -0.106188, -0.051624, 0.874279, -0.019348, 0.500591, -0.124548, 0.324765, -0.367921, -0.222806, 0.540817, -0.078370, 0.043867, 0.420149, -0.059615, -0.440197, -0.087696, -0.292653, 0.111633, 0.670683, 0.455422, 0.189336, -0.042270, -0.260230, 0.051045, -0.335735, -0.506230, -0.358802, -0.266131, -0.203469, 0.257531, -0.079949, -0.371272, -0.413529, 0.099179, 0.181491, 0.150417, 0.225561, -0.346218, 0.386289, -0.052629, 0.298301, 0.905319, 0.350629, 0.162920, -0.197367, 0.032053, 0.451291, 0.156002, 0.093688, -0.061183, -0.513632, 0.197035, -0.259313, 0.299369, -0.044861, -0.141547, -0.285648, 0.202531, 0.323211, -0.128848, 0.146046, -0.771048, 0.315781, 0.132139, -0.224002, -0.046500, 0.392186, 0.015927, -0.539539, -0.217051, -0.165655, -0.112836, -0.694149, 0.339086, -0.414199, -0.237005, -0.950271, -0.279200, -0.627571, 0.069664, 0.370548, -0.062389, 0.586872, 0.213491, 0.115808, -0.041785, 0.070284, 0.475451, 0.620675, 0.153083, 0.570752, 0.077146, -0.593140, -0.395619, -0.169177, -0.077108, 0.033796, 0.110675, -0.144388, -0.484813, 0.101560, 0.118790, 0.585920, -0.051071, 0.522129, -0.096738, 0.039210, 0.130928, -0.165276, 0.021268, -0.138029, 0.452325, 0.340640, -0.240428, 0.037821, -0.356228, 0.230344, -0.362754, -0.077494, 0.106675, -0.458798, -0.373419, 0.031627, -0.154582, 0.372776, -0.041724, 0.265408, 0.351702, -0.294240, 0.822546, 0.024259, 0.029190, 0.116972, -0.298376, -0.022028, 0.036926, -0.000887, 0.198864, -0.196297, -0.319581, 0.104491, -0.003430, 0.157759, 0.118287, 0.417707, 0.329480, 0.477700, 0.300714, -0.037461, -0.082834, -0.691333, 0.119406, 0.333651, -0.015797, -0.241354, 0.322229, -0.316640, 0.336315, -0.333795, 0.152463, -0.063831, -0.093148, -0.190586, 0.866467, 0.206135, -0.333121, -0.334417, 0.427795, 0.433384, 0.030511, -0.081860, -0.327655, 0.321278, 0.308877, -0.146296, 0.250392, 0.352685, -0.261779, -0.391084, 0.343821, -0.623625, -0.232097, 0.730628, -0.009076, -0.278967, -0.024484, 0.126125, -0.272171, 0.395506, 0.385768, -0.485491, 0.060047, -0.462739, -0.056647, -0.384519, -0.158643, -0.362551, 0.475326, -0.029004, -0.547719, 0.048068, 0.214930, -0.050708, -0.737851, 0.249612, -0.273211, 0.547692, -0.119554, -0.489587, -0.183487, -0.422387, -0.021538, -0.357277, 0.442413, 0.742838, -0.306633, -0.417351, 0.665328, 0.195444, -0.137114, -0.503417, 0.106885, 0.313572, -0.132145, 0.361419, 0.209603, -0.503253, -0.481884, 0.218992, -0.205752, -0.239932, -0.071110, 0.198684, 0.044104, 0.170742, 0.087633, 0.306695, 0.128361, -0.694840, -0.178137, -0.062519, 0.269586, -0.420635, 0.441342, -0.307177, -0.113335, 0.545861, 0.245667, -0.061284, 0.463628, 0.188273, -0.425786, -0.599940, -0.498917, -0.097796, 0.110285, 0.832950, -0.219720, 0.157499, 0.090185, 0.919885, -0.057676, 0.432318, -0.276865, 0.225659, -1.100891, 0.191885, -0.538571, -0.070240, 0.178796, -0.850664, -0.281632, 0.101154, 0.292607, -0.697670, 0.065382, 0.243841, -0.446409, -0.747985, 0.421588, 0.134048, 0.014038, 0.012480, 0.093830, 0.065262, -0.028793, -0.460956, 0.001223, -0.435688, -0.216765, 0.092236, -0.205991, -0.346419, -0.150538, -0.115917, -0.034806, 0.121649, -0.155723, 0.509418, 0.161882, -0.247912, -1.040411, 0.113688, -0.232234, 0.083722, -0.356446, 0.171696, -0.551805, 0.644128, -0.361454, -0.069536, 0.344402, -0.144846, 0.593874, 0.046123, 0.071060, 0.044171, 0.109494, 0.162099, 0.016161, 0.160383, -0.657956, 0.426369, 0.430661, 0.167817, 0.371546, 0.038148, 0.175910, 0.308253, -0.379426, 0.308540, 0.028549, -0.238940, -0.216455, 0.583075, -0.325968, 0.251503, 0.521912, 0.405485, -0.058058, -0.085051, 0.486884, 0.177756, 0.437350, -0.531478, -0.309321, -0.053716, -0.577053, -0.135426, 0.037255, -0.151116, -0.249868, 0.044155, -0.143193, -0.256241, -0.094862, -0.071529, -0.179807, 0.177920, 0.322324, -0.038461, 0.146140, -0.170251, -0.189690, 0.621307, 0.123934, 0.030048, -0.024102, 0.172103, 0.412975, -0.478826, -0.629470, 0.323721, -0.306728, -0.006467, 0.321414, 0.400523, -0.001823, 0.011803, -0.120583, 0.601702, 0.185840, 0.700491, 0.149545, 0.067835, 0.470991, 0.664574, -0.552964, -0.316984, -0.231059, -0.300164, -0.558253, -0.371432, -0.427449, 0.150378, 0.205915, 0.007517, 0.848489, -0.270204, 0.645367, -0.190823, 0.118916, -0.048641, -0.555063, 0.180961, 0.193901, 0.520572, -0.087776, 0.935664, -0.117911, 0.409115, -0.214746, -0.062976, -0.582564, -0.081324, -0.010914, 0.697559, 0.827275, -0.194161, -0.525253, 0.123935, 0.110752, -0.243882, -0.464774, 0.015078, -0.350227, -0.113486, 0.011749, 0.153878, 0.241713, 0.309567, 0.159847, 0.382380, -0.121834, 0.159451, -0.704771, 0.006205, 0.008906, 0.346081, -0.160726, 0.367822, -0.023612, -0.010030, 0.374448, -0.019864, -0.096305, -0.143692, 0.101554, 0.203875, -0.122353, -0.456235, 0.368918, -0.026021, 0.096329, -0.418561, -0.096026, -0.323244, -0.289808, -0.177779, -0.380370, -0.277077, 0.225156, 0.373779, 0.756219, -0.338806, -1.064188, 0.086767, 0.112865, 0.410580, -0.160529, 0.685520, 0.343053, 0.015070, 0.034452, 0.050372, 0.006650, 0.317398, 0.658390, -0.431091, 0.506827, -0.100293, -0.258241, -0.098443, 0.440216, -0.351024, -0.425316, 0.190989, -0.198299, 0.598305, 0.592949, -0.761293, 0.291733, 0.298414, -0.596820, -0.056470, 0.506640, 0.614545, -0.038101, 0.304769, 0.047714, -0.178597, 0.606069, -0.020600, -0.324800, -0.517904, -0.244066, -0.781475, -0.347456, -0.177254, 0.442952, -0.502207, -0.313296, -0.221216, -0.158749, -0.000308, 0.210433, -0.293535, 0.143593, -0.187607, 0.410221, -0.101963, 0.038983, 0.216233, 0.109033, 0.071577, -0.274980, -0.519410, 0.748628, 0.132990, 0.017301, -0.318737, 0.462538, -0.219474, -0.257446, 0.106117, -1.033327, 0.555366, 0.314015, -0.099034, -0.101012, 0.316906, 0.525460, -0.067212, -0.234236, -0.594703, -0.301416, 0.049783, 0.360627, -0.340874, -0.108111, -0.030016, -0.068959, 0.419880, 0.079512, 0.136864, -0.870394, 0.190759, 0.264447, -0.055466, -0.274267, 0.294311, 0.145651, 0.181500, 0.068148, -0.079297, 0.116602, 0.398743, -0.596057, -0.283995, -0.631194, 0.272831, 0.028005, -0.269716, 0.821832, -0.264261, 0.296154, 0.000392, 0.268086, 0.256604, 0.438840, -0.025024, 0.229269, 0.372718, -0.111645, 0.275149, 0.074714, -0.149943, -0.677116, -0.423984, -0.055012, 0.807868, -0.793449, -0.288004, -0.217445, -0.417038, 0.048146, 0.271043, -0.240449, 0.003111, 0.200560, 0.515866, -0.112648, 0.480673, -0.153305, 0.162125, -0.360713, -0.281660, -0.433440, 0.062965, -0.287887, 0.376615, -0.010636, -0.070215, -0.413233, -0.407751, -0.569790, 0.620695, -0.445826, -0.266545, -0.143776, 0.556380, -0.358060, 0.091419, 0.154067, -0.424598, 0.678844, 0.586404, -0.293496, -0.565051, 0.211552, -0.060263, -0.154836, 0.118186, 0.659808, 0.048121, 0.028627, 0.310143, -0.108596, 0.233567, -0.028822, 0.211269, -0.069226, 0.083919, 0.067399, 0.551407, 0.423780, -0.168638, -0.212640, -0.304896, -0.148888, 0.044441, -0.146128, -0.221889, 0.151668, -0.279946, -0.454766, -0.137937, 0.329202, 0.392256, -0.123300, -0.013104, 0.020592, -0.154003, -0.141471, 0.245494, 0.342663, -0.524716, -0.256356, 0.096822, 0.377818, 0.058905, 0.199189, 0.192921, 0.046306, -0.310740, 0.375515, 0.113114, 0.067435, -0.171354, -0.187886, 0.098279, -0.443635, -0.418073, -0.076781, -0.216082, -0.459061, 0.174019, 0.092634, 0.095597, 0.229115, -0.063759, 0.166816, 0.224667, 0.389135, 0.201666, 0.280591, -0.505003, -0.199995, 0.164115, -0.018507, 0.216536, -0.228796, -0.591178, -0.108026, -0.061647, -0.155654, 0.063727, -0.290692, 0.071313, 0.164409, 0.025392, 0.333114, 0.058157, 0.341020, -0.008189, -0.657713, -0.469880, 0.380310, -0.422738, 0.146785, 0.138773, -0.181386, -0.080411, 0.223552, 0.362902, -0.642274, -0.216622, 0.244858, -0.053043, -0.255551, 0.420415, -0.162121, 0.178924, 0.692984, -0.513166, -0.353268, -0.566853, 0.654280, -0.097715, 0.617112, 0.737402, -0.252336, -0.919382, -0.002810, -0.243296, -0.697557, -0.152351, -0.020530, -0.044934, -0.028899, -0.191319, -0.194357, -0.176970, 0.400549, 0.291772, -0.242575, 0.424298, 0.457313, -0.631985, -0.030793, 0.099553, 0.011074, 0.058982, 0.193177, 0.192687, -0.396982, -0.226565, -0.427594, 0.366640, 0.581517, -0.384248, -0.604846, 0.314109, 0.230639, -0.521342, 0.201063, 0.692748, 0.048733, 0.597786, 0.063185, 0.225998, -0.180704, 0.329972, 0.150493, -0.042691, -0.159609, -0.309584, -0.275296, 0.984232, -0.030626, 0.040339, -0.253096, 0.007542, -0.286120, -0.222316, 0.158408, 0.383668, 0.429613, -0.571129, -0.086979, -0.774914, 0.035450, 0.399168, 0.141715, 0.261576, 0.757710, 0.092665, -0.444902, 0.364449, -0.026400, 0.486443, -0.191074, 0.267344, 0.391305, 0.019776, -0.162476, 0.011955, -0.169685, 0.360746, -0.057660, 4.487291, -0.752153, 0.426690, -0.514092, -0.135662, 0.128860, -0.352554, 0.339426, 0.187895, -0.105337, -0.067870, -0.561997, 0.384668, 0.139748, -0.076339, -0.383534, 0.193489, 0.217438, 0.310760, -0.471129, 0.408550, -0.783918, 0.924570, 0.544810, 0.173359, 0.325069, 0.118672, 0.157661, 0.495307, 0.043571, 0.420747, 0.461203, 0.030940, 0.079866, 0.202492, -0.143818, 0.388617, 0.284566, 0.085482, -0.424856, 0.169660, 5.002161, 0.496126, 0.368753, -0.291746, 0.049863, 0.052142, 0.562981, 0.643301, -0.097461, -0.153821, -0.237668, -0.369237, 0.234187, 0.218032, -0.617891, -0.360784, 0.184486, 0.035056, -0.343886, 0.100110, 0.015195, -0.149124, 0.577815, 0.609786, -0.190856, 0.157805, -0.111564, 0.056562, -0.264586, -0.228257, 0.143420, -0.409625, -0.407802, -0.193288, -0.178765, 0.457437, -0.001436, 0.413320, 0.456115, 0.493243, -0.467128, -0.516562, -0.063919, 0.772535, -0.142793, -0.273115, -0.326627, -0.252157, 0.386950, 0.000773, 0.080755, 0.169150, 0.207458, -0.113956, -0.269044, -0.411961, 0.196148, 0.279117, 0.476607, 0.002481, -0.446647, -0.131562, -0.290507, -0.031059, 0.522627, 0.374723, -0.189284, -0.022486, 0.121929, -0.004285, 0.320933, 0.433629, -0.872581, 0.510533, -0.047597, -0.043823, -0.172759, 0.340392, 0.585445, -0.344459, 0.179457, 0.052765, -0.247181, -0.092283, 0.166314, -0.082850, 0.624757, 0.408819, 0.517236, 0.592212, 0.266402, 0.063619, -0.332631, 0.093216, -0.002696, 0.496564, 0.017645, -0.081635, -0.045906, 0.131908, -0.360834, -0.074638, 0.884801, -0.112605, 0.152780, 0.241896, 0.178782, 0.302635, 0.096668, -0.569904, -0.235891, 0.697626, -0.153779, 0.083589, 0.118558, 0.148341, 0.138840, -0.483483, 0.039876, -0.215070, 0.378216, 0.477800, -0.376276, -0.107364, -0.056474, 0.634841, -0.829850, -0.132656, 0.166909, 0.284389, -0.751289, -0.661793, 0.215448, 0.434656, 0.023345, -0.133867, 0.439496, -0.496212, -0.117264, -0.017485, -0.372388, 1.472339, -0.363553, -0.193867, 0.281123, 0.351186, 0.103060, -0.298733, 0.369226, 0.295971, -0.239668, -1.152384, 0.448451, 0.275586, -0.237399, 0.174515, 0.195369, 0.043802, -0.264791, 0.013253, 0.040941, 0.027880, -0.142671, 0.074643, -0.553351, 0.129982, -0.100195, 0.180619, 0.071297, -0.371206, -0.193323, -0.468507, -0.805926, 0.184589, 0.080032, 0.084080, 0.275789, 0.192904, -0.078385, 0.290711, -0.027608, 0.440038, -0.587812, -0.004581, 0.162749, -0.407841, 0.368317, -0.112203, 0.299965, 0.172529, -0.076716, 0.450040, -0.303669, 0.169699, 0.115787, -0.083244, 0.287229, -0.098873, 0.045379, -0.142650, 0.225791, 0.117558, 0.331856, -0.449384, 0.030248, 0.661376, -0.147196, 0.219943, 0.449944, 0.153362, 0.580988, -0.014734, 0.219984, -0.031598, -0.087134, 0.624181, 0.321511, 0.159627, 0.065644, 0.052018, -0.334922, -0.194216, -0.214867, 0.373563, 0.569381, 0.320083, -0.218419, 0.392195, -0.208969, -0.043425, 0.549654, -0.405465, -0.393805, 0.037566, -0.388948, -0.224721, -0.294911, 0.308722, -0.081107, 0.685822, -0.048916, -0.165033, 0.142796, -0.269439, -0.222129, -0.724417, -0.286839, 0.608340, 0.327775, -58.517979, -0.544269, -0.001866, -0.332386, 0.199435, 0.252479, -0.223065, -0.405478, -0.249875, -0.104632, -0.554372, 0.442492, 0.092624, -1.184105, 0.306272, 0.094480, 0.180830, -0.188470, 0.199765, -0.158313, 0.219714, 0.490681, -0.341416, -0.366322, -0.456658, -0.166933, -0.581015, -0.068403, -0.253523, -0.303116, 0.084059, 0.248953, 0.151603, 0.113430, 0.826785, -0.997589, -0.021810, -0.476477, 0.258189, 0.772523, 0.136442, -0.239684, 0.186631, 0.024477, -0.110479, -0.279112, 0.227488, 0.287025, -0.114060, -0.046808, 0.235135, -0.282328, 0.259069, -0.037700, 0.412282, 0.450889, -0.564557, 0.362352, -0.249231, -0.283077, 0.596018, 0.210083, -0.160349, -0.145695, 0.279737, 0.432935, -0.060723, 0.205922, -0.077641, -0.005025, 0.032035, -0.147291, -0.089267, 0.022549, 0.096784, 0.316596, -0.335415, -0.154303, 9.210744, 0.439763, -0.474908, 0.547985, 0.333362, -0.083074, -0.113624, -0.358873, -0.001362, 0.342030, 0.487156, -0.212562, 0.381375, 0.187135, -0.076945, -0.455437, -0.128274, -0.070635, -0.241333, -0.100881, -0.181602, -0.364256, -0.003553, 0.078503, -0.229145, -0.102308, 0.197712, 0.027701, -0.779926, 0.536838, 0.599103, 0.012468, -0.057213, 0.015195, 0.180001, 0.458210, -0.035604, -0.381750, -0.162652, 0.062134, -0.018506, 0.322445, 0.430900, 0.494851, -0.001246, -0.063209, 0.027377, 0.572648, 0.501041, -0.330562, 0.005837, -0.250195, -0.197133, -0.322219, -0.241606, 0.777974, -0.214089, -0.517721, 0.054999, 0.079865, -0.392691, 0.436211, 0.170465, 0.012087, -0.570184, 0.342888, -0.248057, -0.206725, -0.031366, -0.455187, -0.014615, 0.157380, 0.836096, -0.526227, 0.272770, -0.238688, -0.423359, 0.184629, -0.558110, 0.024373, -0.151099, 0.561669, 0.598668, 0.297249, 0.027630, -0.355015, 0.242124, 0.076283, 0.281585, 0.539186, 0.105147, 0.421329, 0.097530, 0.683345, -0.052615, -0.135516, -0.139486, -0.133028, -0.413589, 0.058511, 0.174991, 0.026137, -0.128775, 0.032074, 0.079121, -0.097758, -0.100383, -0.140296, 0.653418, -0.458114, 0.115476, 0.015241, -0.171333, -0.002086, -0.215181, 0.295451, 0.152256, -0.074834, -0.073559, 0.242919, -0.361564, -0.105575, -0.216026, 0.285056, 0.216080, -0.017842, -0.203024, 0.165294, -0.153601, -0.077933, -0.115630, 0.081592, 0.049974, -0.676193, 0.314703, -0.164646, -0.030029, -0.488286, -0.197653, -0.107439, 0.057860, -0.215854, 1.589793, 0.217210, 0.187354, -0.106198, -0.019009, -0.011475, -0.016074, -0.082618, -0.361909, -0.087632, -0.064170, 0.235486, 0.430535, 0.326502, -0.158178, 0.298049, -0.182466, 0.113623, -0.318923, 0.001735, 0.340390, 0.232367, 0.124780, -0.329235, -0.258752, 0.232064, 0.057419, 0.071112, -0.393735, 0.243256, 0.444519, 0.086050, 0.239353, 0.491001, 0.005872, 0.332629, 0.355181, 0.453798, -0.406120, -0.000941, -0.504079, 0.147405, 0.410417, -0.263093, -0.082063, -0.330414, -0.024870, 0.603955, 0.011611, 0.247248, -0.437377, 0.374511, -0.386487, -0.052682, -0.704873, 0.137623, -0.302090, 0.611321, 0.347271, -0.128144, -0.070892, 0.555710, 0.235903, 0.620517, 0.356831, -0.088181, -0.160007, 0.040110, -0.402164, -0.132727, -0.304703, -0.037726, 0.249084, 0.463306, 0.410124, 0.206482, 0.084820, -0.448904, 0.441546, 0.493072, 0.177585, -0.202363, -0.028921, 0.279302, 0.206562, 0.210913, -0.330171, -0.465549, 0.120795, 0.345071, 0.735387, 0.512654, -0.197911, 0.433159, 0.039721, 0.779497, -0.224703, 0.258248, -0.097690, -0.123420, -0.614652, -0.402285, 0.541440, 0.066245, 0.084928, 0.117902, -0.200090, 0.050084, 0.132697, -0.505208, 0.336530, 0.370033, -0.026980, -0.182485, 0.137949, 0.097208, -0.373811, -0.432984, 0.365751, 0.116326, 0.786149, -0.336528, -0.143944, 0.276964, -0.337612, -0.537772, -0.135477, -0.157744, 0.480776, -0.016617, 0.178157, 0.447851, -0.460623, -0.082251, -0.066533, -0.221613, 0.263356, 0.364406, 0.033944, -0.270242, 0.301467, -0.181274, -0.774562, -0.336110, 0.013128, 0.379040, -0.491963, 0.510146, 0.115073, 0.120280, 0.541961, 0.340013, -0.030580, 0.080096, 0.215101, 0.109936, -0.498924, -0.311070, 0.359271, 0.007063, -0.440929, 0.494422, -0.285638, 0.636720, -0.141487, 0.515842, -0.552986, -0.224828, 0.077687, -0.618073, -0.191511, -0.243853, 0.518603, -0.099494, 0.009308, -0.480245, 0.537420, 0.192950, -0.265831, 0.051783, 0.308917, 0.155403, 0.018711, 0.211687, 0.407065, 0.442201, 0.136252, 0.084571, 0.095548, -0.225721, -0.000452, 0.138476, -0.149119, -0.664407, 0.180302, 0.024027, -0.168956, -0.060498, 0.176705, 0.197362, 0.810919, 0.100887, -0.343077, -0.250311, 0.202211, -0.533182, 0.565174, 0.071214, -0.071025, 0.294692, 0.345120, -0.369266, -0.363377, 0.094061, 0.053798, -0.675334, 0.105947, -0.366219, -0.233770, -0.146928, 0.059898, -0.260274, -0.351740, 0.509495, 0.466080, 0.533641, -0.283434, -0.170006, 0.497754, 0.113559, -0.234416, 0.006083, 0.091491, -0.393112, 0.243943, 0.068198, -0.135965, 0.071724, 0.267782, -0.299795, 0.225524, 1.235563, -0.060205, 0.328835, -0.436151, 0.408247, -0.826190, 0.398270, 0.206538, 0.275721, 0.916620, -0.380989, -0.155483, -0.165130, 0.108895, 0.192115, -0.203651, 0.378474, -0.264306, 0.075935, -0.263781, -0.194646, -0.089090, -0.463814, -0.084640, -0.277837, -0.342353, -0.024847, -0.192613, 0.186768, 0.111856, 0.178706, -0.120027, -0.541726, -0.337925, 0.118754, 0.238603, 0.208689, -0.145369, -0.150549, 0.653374, 0.094129, 0.106789, -1.053561, -0.196887, -0.240114, -0.745993, -0.152362, -1.204002, -0.082581, 0.305619, -0.058988, -0.598331, 0.185987, -0.060489, -0.423577, 0.511601, -0.325674, -0.120736, -0.115833, 0.159326, -0.285350, 0.046486, 0.190043, -0.050766, 0.455020, 0.403656, 0.323676, -0.360419, -0.349012, 0.049382, -0.285226, -0.303766, 0.506560, -0.419006, 0.309048, 0.217033, -0.084596, -0.243125, 0.644726, -0.052139, 0.160264, -0.375426, -0.394390, 0.098200, 0.259292, -0.638499, 0.021518, -0.129735, -0.101215, -0.224675, -0.042415, -0.101307, -0.089895, 0.188957, -0.548835, -0.143101, 0.536356, 0.472715, 0.358453, 0.414846, -0.370800, -0.235898, 0.262339, 0.449393, -0.263371, -0.217770, -0.226305, 0.047581, 0.003470, -0.028333, -0.130409, -0.138864, 0.496755, 0.231264, -0.030316, -0.476095, 0.256390, -0.104659, -0.518679, 0.125111, -0.423105, 0.494313, -0.181924, 0.242448, 0.280324, -0.129197, -0.375469, -0.433732, 0.134280, 0.389087, -0.506155, 0.527342, 0.194793, 0.178930, -0.333685, 0.181848, 0.243475, -0.612548, 0.289363, 0.029938, 0.110186, 0.255495, -0.144533, -0.387284, 0.345772, -0.311679, -0.045539, -0.294871, 0.597431, 0.305880, 0.200646, 0.282531, -0.158703, -0.103099, -0.169067, -0.008382, -0.079756, 0.170810, 0.399198, -0.066380, -0.000559, -0.004255, 0.231632, 0.278643, 0.301572, 0.158929, -0.362739, -0.174208, 0.090002, 0.658097, -0.753288, -0.115159, -0.916517, 0.345335, 0.315035, -0.185459, 0.099901, -0.345710, -0.024454, 0.149417, 0.203911, -0.621984, 0.475272, 0.381955, 0.285558, 0.620195, -0.230048, -0.193346, 0.426024, -0.082065, -0.505288, -0.264816, -0.614786, 0.032445, -0.211640, -0.743929, -0.352548, -0.282483, 0.083452, 0.155323, 0.063746, -0.081079, 0.143076, 0.304706, -0.302146, -0.586734, -0.018925, 0.135363, 1.372922, 0.022931, -0.203815, -0.249750, -0.096802, -0.322165, -0.087625, -0.354634, 0.158380, 0.221725, 0.366852, 0.150404, -0.269403, 0.051307, -0.228197, 0.501474, -0.508713, 0.310570, 0.105104, 0.175922, -0.160948, -0.532149, 0.789218, -0.296985, 0.621667, -0.034217, 0.269299, -0.473348, 0.419473, -0.168176, -0.059621, 0.347642, 0.095557, 0.119908, 0.189069, 0.072328, -0.592562, 0.205006, -0.456758, -0.051765, 0.186611, -0.559713, 0.498142, 0.081539, -0.126901, -0.188289, -0.577864, -0.548407, 0.401423, 0.509642, -0.104356, 0.108317, 0.898374, 0.040251, -0.698863, -0.078856, -0.188995, -0.003449, -0.061420, -0.096289, 0.266162, 0.108274, 0.346424, -0.441824, 0.258435, -0.142721, -0.439990, 0.212413, 0.165938, -0.020241, 0.303992, -0.042712, -0.240819, 0.041794, 0.002941, 0.399268, 0.036751, 0.134195, -0.134292, 0.143634, 0.516429, 0.132746, -0.935939, 0.153861, 0.304214, -0.235507, 0.430125, 0.079114, 0.117013, 0.439177, 0.716553, -0.093885, -0.044955, -0.330311, 0.550033, -0.535871, 0.010232, -0.314547, 0.230491, 0.654590, 0.102710, -0.238373, -0.516637, 0.401736, 0.037948, 0.276305, 0.443498, 0.228219, 0.352056, 0.012582, 0.220353, -0.407780, 0.438028, 0.208541, 0.175988, -0.270985, -0.525523, -0.548477, 0.057955, -0.194781, -0.003298, 0.269760, -0.233289, -0.540260, -0.169692, -0.484772, -0.114232, -0.401115, -0.451770, -0.181977, -0.505564, -0.083401, 0.376819, -0.421163, -0.201286, -0.602337, -0.222767, 0.614156, -0.016797, -0.176580, 0.508542, -0.081163, 0.134763, -0.419954, 0.037240, -0.185230, -0.205294, 0.193024, 0.417523, -0.698548, -0.807030, -0.149474, -0.094982, -0.464999, -0.068225, -0.432381, 0.094518, -0.034902, -0.376230, -0.190843, -0.014541, -0.007451, 0.503071, 0.039062, -0.476695, -1.198664, -0.111433, 0.107706, 0.328139, -0.316463, -0.217056, 0.050820, -0.164824, 0.319711, -0.208170, 0.614053, -0.104899, -0.555545, -0.287073, -0.262042, -0.200674, -0.006250, -0.231419, -0.642396, -0.137048, -0.145983, 0.069366, 0.240843, -0.658315, -0.597073, 0.463778, -0.183305, 0.119860, 0.648310, 0.299937, -0.208176, 0.022095, -0.278521, -0.177953, 0.202277, 0.155420, 0.234455, 0.239173, 0.262826, 0.519646, 0.006134, 0.463624, 0.502869, -0.273425, -0.230075, 0.078392, 0.024440, -0.299886, 0.079623, -0.031235, 0.077222, -0.575926, 0.647744, -0.685791, 0.246712, -0.258738, -0.268204, -0.050904, -0.216824, 0.030123, -0.059568, 0.032685, 0.456928, 0.447742, 0.000349, -0.330170, -0.283173, 0.339716, -0.715647, 0.350537, -0.348117, -0.425378, 0.275241, -0.037290, -0.301914, -0.418955, -0.057846, 0.038219, 0.490801, -0.169052, -0.531855, -0.126881, 0.214531, -0.016972, 0.486737, -0.307092, 0.060385, -0.312028, -0.121100, -0.474154, -0.033297, -0.117146, -0.145217, -0.534372, 0.215293, 0.089433, -0.014680, 0.038871, -0.454982, 0.468077, -0.157630, 0.546171, 0.098118, 0.372806, -0.065871, 0.243025, -0.094658, -0.116481, 0.125599, -0.121057, -0.072374, 0.656453, -0.041724, 0.033926, -0.041462, -0.456399, -0.186608, -0.389824, -0.091279, -0.003108, 0.092814, 0.340213, -0.175039, 0.666803, -0.261088, 0.368768, -0.252754, 0.163965, -0.585329, -0.243940, -0.321711, -0.133012, -0.253066, -0.076904, -0.283974, -0.197103, -0.403979, 0.147247, -0.062263, -0.075245, -0.562477, -0.205014, 0.222767, -0.054252, -0.329677, 0.815129, 0.127072, -0.426652, -0.394265, 0.127829, 0.049436, -0.196066, 0.009618, 0.540864, -0.206275, -0.050193, -0.484369, 0.663735, -0.174202, 0.404585, 0.052897, 0.197160, 0.118619, 0.260436, 0.124425, -0.006648, 0.607803, -0.084435, 0.182488, -0.911126, -0.399702, -0.234616, -0.425689, 0.574178, 0.028556, 0.346813, -0.227521, -0.021377, -0.578073, -0.755381, -0.108397, 0.211026, -0.040924, -0.294499, -0.208813, -0.170734, 0.164126, 0.122645, 0.010301, -0.073459, 0.233719, -0.109440, -0.098003, -0.205121, -0.087854, 0.028307, 0.532311, -0.228900, -0.152958, 0.527488, 0.364191, 0.192383, -0.351570, -0.234025, 0.440298, -0.060356, -0.425945, 0.171791, 0.221136, -0.396888, -0.277037, -0.666172, -0.037598, -0.010303, -0.425237, -0.211664, -0.486224, 0.277630, 0.023025, 0.408915, -0.195016, 0.047634, 0.102783, -0.485706, 0.308589, -0.411144, -0.053444, 0.714636, 0.113829, 0.033845, 0.443375, -0.068617, -0.390009, 0.075894, 0.448207, -0.177000, -0.023104, -0.175386, 0.555945, 0.029201, -0.457334, -0.357339, 0.378139, 0.238245, -0.110313, -0.500821, 0.104544, -0.281480, 0.587670, -0.373495, -0.031328, -0.065652, -0.002243, 0.044564, -0.489538, 0.399526, -0.477148, 0.174514, 0.234356, -0.095146, -0.111628, -0.140329, -0.014722, 0.120857, -0.577776, -0.435228, 0.355946, -0.013572, -0.721267, -0.317641, 0.217404, 0.607119, 0.134049, -0.278283, -0.041902, -0.119571, 0.305286, -0.412544, 0.012801, 0.406974, 0.057604, -0.505895, 0.571090, 0.132650, 0.261956, 0.170358, -63.303562, 0.072853, -0.519040, -0.178422, 0.119113, 0.378141, 0.063010, 0.112086, -0.068155, 0.143270, -0.695979, -0.185095, 0.029685, 0.101319, 0.243841, -0.099949, 0.537030, -0.507941, -0.072316, -0.282923, -0.095952, 0.277304, 0.279224, 0.180773, 0.588230, -0.293736, -0.419753, 0.124619, -0.439369, -0.203452, 0.322170, 0.218235, -0.135500, 0.153501, -0.101683, -0.188600, 0.075205, 0.135442, -0.469343, 0.088359, 0.188366, 0.252388, -0.129069, 0.600527, 0.231637, -0.129259, -0.012753, -0.375286, -0.155583, 0.010971, 0.067799, 0.301400, -0.200182, -111.950508, -0.203151, 0.112066, -0.561678, 0.199826, 0.240353, 0.024038, -0.051374, -0.191646, 0.126553, 0.212573, -0.397948, -0.364226, -0.430931, -0.275204, -0.089596, -0.264655, 0.148102, 0.095208, -0.158669, -0.152007, -0.115978, -0.417394, -0.417549, 0.121950, -0.005634, -0.209508, 0.026816, 0.097941, 0.356630, -0.327798, -0.577439, 0.128759, -0.181856, 0.341304, -0.401386, -0.326418, 0.910050, 0.602965, -0.501181, 0.499152, -0.081410, -0.445701, 0.283482, 0.128661, -0.162188, 0.477510, -0.479452, 0.445276, 0.613333, -0.230295, -0.706247, -0.385147, -0.216893, -0.355799, -0.426881, 0.294281, 0.029298, -0.469063, 0.032645, 0.377577, -0.136977, 0.229560, -0.248002, 0.231691, 0.195523, -0.626372, 0.487773, -0.046927, 0.258056, 0.435159, -0.148099, -0.214715, 0.064264, -0.436486, 0.581707, -0.436593, 0.105906, -0.026306, 0.014113, 0.179391, -0.207917, -0.343595, -0.005207, 0.196769, -0.042901, 0.063794, 0.336295, -0.545930, -0.357988, 0.289421, -0.300983, 0.284619, -0.280840, 0.172100, 0.115409, 0.575850, -0.238892, 0.714082, -0.077031, -0.006099, 0.256360, -0.335220, 0.010254, -0.108844, 0.427106, 0.144753, -0.501155, 0.062318, -0.124000, 0.221674, 0.834580, 0.110858, -0.012859, 0.568384, -0.610597, 0.660640, -0.116576, -0.069433, 0.786274, -0.164275, -0.076165, -0.051904, 0.149984, 0.419948, 0.000599, -0.677398, 0.008406, -0.954607, 0.185710, 0.442692, 0.498803, 0.072520, -0.947522, -0.119591, -0.001380, -0.499802, 0.019757, -0.521202, -0.370886, 0.026982, 0.187350, 0.188310, 0.041130, 0.150330, -0.069001, 0.405078, -0.064037, -0.170146, 0.371683, 0.318880, -0.644247, 0.235556, -0.033404, -0.507976, -0.227250, 0.002788, 0.061252, -0.474965, -0.231972, -0.367271, 0.486901, -0.053223, -0.059750, -0.304050, -0.058611, 0.157256, 0.175846, 0.395777, 0.008041, -0.273340, -0.205810, 0.243421, -0.182496, -0.391188, 0.377847, 0.187971, 0.037746, 0.198323, -0.077953, 0.698547, -0.498333, 0.330154, -0.068499, 0.217126, 0.308641, 0.351311, 0.470557, -0.105092, 0.424691, 0.009478, 0.033756, -0.260245, 0.310565, 0.035176, 0.096856, -0.544571, 0.565485, -0.450896, 0.238636, -0.755101, 0.350827, 0.415188, -0.067474, -0.598875, 0.159576, -0.031585, 0.304653, 0.366733, 0.508857, 0.094383, 0.099464, 0.119461, 0.115205, 0.158623, 0.196619, 0.236457, 0.215316, 0.612975, 0.200485, 0.058877, -0.025619, -0.205582, 0.714231, 0.136720, -0.388014, -0.196395, 0.079210, -0.423071, -0.123676, 0.474725, -0.050195, 0.970900, -0.171853, -0.083888, -0.179501, -0.064880, -0.223606, -0.006045, -0.080197, 0.252009, -0.350478, 0.026701, 0.014843, -0.027661, -0.832059, 0.008524, 0.424898, -0.018123, -0.540465, -0.423612, -0.029289, 0.013382, -0.661031, 0.262038, -0.232594, 0.666213, 0.276438, 0.294243, -0.137279, 0.595431, -0.343497, -0.335292, 0.270682, -0.050774, -0.357238, 0.464678, 0.166497, -0.214094, 0.412270, 0.237754, -0.456134, 0.069817, -0.240430, 0.211049, 0.282824, -0.002317, 0.005693, -0.191463, -0.583706, -0.221818, -0.012686, -0.338345, -0.070691, -0.581066, 0.068721, 0.214868, 0.449330, 0.286828, -0.724386, 0.094391, -0.135015, -0.060382, 0.069094, 0.477051, -0.039083, -0.416415, -0.160632, 0.307268, 0.644104, -0.157020, -0.185252, 0.103966, -0.107401, 0.200582, -0.256117, -0.471047, 0.576146, -0.426443, -0.473182, 0.363728, -0.448481, 0.198918, 0.262472, -0.481285, 0.124921, -0.790910, 0.555112, -0.416907, -0.686696, 0.157033, 0.151132, -0.101561, -0.165456, -0.120177, 0.040872, -0.353821, 0.464011, 0.356632, -0.641347, 0.002591, -0.529365, -0.375631, -0.088245, 0.157345, -0.168277, -0.077418, -0.104852, -0.224176, -0.583345, -0.200973, 0.330438, 0.095610, 0.044952, -0.111227, 2.766827, -0.075490, -0.004877, 0.122718, -0.211410, -0.255072, 0.014199, -0.044222, -0.232582, -0.213509, -0.058883, -0.111578, 0.575816, 0.382956, 0.168038, -0.660369, -0.317659, -0.287882, -0.159493, 0.303753, 0.161251, -0.084348, 0.177310, -0.023731, -0.208123, 0.375143, -0.130619, 0.013847, 0.084544, 0.385289, -0.844378, 0.783994, -0.133632, 0.453322, -0.368930, 0.468662, 0.074394, -0.085951, -0.492908, -0.102703, -0.070889, 0.019265, -0.132152, -0.490296, -0.154806, -0.438457, 0.106065, -0.362225, 0.098467, -0.300806, 0.082323, -0.066897, 0.534250, 0.646450, 0.452268, -0.157001, 0.063397, -0.202829, 0.173803, -0.187386, 0.587771, -0.348677, -0.511564, 0.085221, -0.224883, 0.157183, 0.246904, 0.638365, -0.585779, -0.287903, 0.340373, -0.030720, 0.061279, 0.074192, 0.301575, 0.018036, -0.261474, 0.063272, 0.015081, 0.398179, -0.035079, -0.370379, -0.052801, -0.530252, 0.093011, 0.002836, -0.697104, 0.546006, -0.332340, -0.122048, 0.289079, -0.541533, -0.503000, -0.054692, 0.134673, 0.006598, 0.017476, -0.134000, -0.175561, -0.208997, -0.003923, 0.051280, 0.086685, -0.240404, -0.357857, 0.243271, 0.566339, -0.173989, -0.064073, 0.295804, 0.233289, -0.092659, -0.665500, 0.190993, 0.167569, -0.278074, -0.244135, -0.168051, -0.463405, -0.177617, -0.034471, 0.007265, -0.297528, -0.075948, -0.047524, 0.122029, 0.211117, 0.120729, -0.014987, -0.632226, 0.213933, 0.220751, -0.416721, -0.432320, -0.204294, 0.197827, -0.168607, 0.240733, 0.250329, 0.280815, 0.289349, -0.309672, 0.147626, -0.490905, 0.131334, 0.044870, 0.244089, -0.017633, -0.301772, -0.072316, 0.146994, -0.293942, -0.420279, 0.161965, 0.148996, -0.126067, 0.491702, -0.119142, 0.063983, 0.395035, -0.213297, 0.140833, 0.196409, -0.048128, 0.017225, -0.505947, 0.664136, -0.202357, 0.317128, 0.168667, 0.093162, -0.380574, -0.092151, 0.044294, -0.870981, 0.241743, -0.536381, -0.090947, -0.648787, -0.355641, 0.165425, -0.238059, -0.596338, 0.266993, -0.339680, -0.382530, 0.291458, 0.768516, -0.176065, -0.569123, 0.096203, 0.148821, 0.546749, 0.138208, -0.365413, 0.518124, -0.101714, 0.804016, -0.252335, 0.263548, 0.344599, -0.042573, 0.189019, 0.249793, -0.605840, 0.522157, -0.359445, 0.140590, -0.134246, 0.302941, 0.272368, -0.274690, 0.744960, 0.187399, 0.031517, -0.522490, 0.492635, -0.265579, 0.556953, 0.002599, -0.475620, -0.273551, 0.061263, -0.107502, -0.058321, 0.335491, 0.093252, 0.338381, 0.580982, 0.004722, 0.306945, -0.357699, 0.204085, -0.403294, -0.339715, 0.038231, -0.318873, -0.157163, -0.286547, -0.014830, -0.408272, 0.646497, -0.297623, -0.716684, -0.037028, -0.359614, -0.607903, -0.080210, -0.243790, -0.372580, 0.327745, 0.174814, 0.007795, -0.323086, 0.278917, 0.193464, -0.183376, -0.158650, -0.150630, 0.237812, -0.554636, -0.307655, -43.962406, 0.747826, 0.170216, -0.375895, -0.110257, -0.561347, 0.516887, -0.050687, -0.239293, 0.075187, 0.214272, -0.583057, 12.469608, 0.157744, 0.439794, 0.303756, -0.331535, 0.010205, 0.261059, 0.047994, 0.124434, 0.148169, -0.040808, -0.038213, 0.568745, 0.759167, -0.161330, -0.147977, 0.209662, 0.184281, 0.034607, -0.435261, -0.914145, -0.448240, 0.502655, 0.171096, 0.162151, -0.330909, 0.644280, -0.230030, 0.400959, -0.398285, 0.243113, 0.819535, -0.015852, -0.416345, -0.035277, 0.475769, -0.331067, 0.097865, 0.243495, -0.104292, -0.019232, 0.216380, 0.644561, -0.040559, 0.058224, -0.022566, -0.086129, -0.033864, -0.107755, -0.452065, 0.232334, 0.260739, -0.491365, -0.583293, -0.385895, -0.032558, 0.422507, -0.104322, -0.199052, -0.450761, 0.188655, -0.015979, 0.101417, -0.108862, -0.445502, -0.133705, -0.177996, -0.163099, -0.119531, -0.171117, 0.427125, 0.238072, -0.338347, 0.201365, -0.159817, -0.007986, -0.612904, -0.590535, -0.537798, 0.119414, 0.221465, 0.378790, 0.208833, -0.014505, 0.360619, -0.548349, 0.216484, 0.256683, 0.385207, 0.706974, 0.283812, -0.470752, 0.290828, -0.313211, 0.595083, -0.867086, -0.099950, -0.006093, 0.328319, -0.174707, 0.061710, -0.149805, 1.078194, 0.353151, -0.642559, -0.077821, 0.227179, 0.333391, 0.007280, 0.522016, 0.349228, -0.273700, -0.092780, 0.020995, -0.248111, -0.178455, 0.095094, -0.057657, 0.430333, 0.131980, 0.129095, 0.375191, -0.076389, -0.125741, 0.223384, -0.356347, 0.353186, -0.023569, -0.242601, -0.549070, 0.215102, -0.368639, -0.316551, 0.274893, -0.523182, 0.007249, 0.256059, -0.174845, 0.097209, -0.344082, -0.195790, -0.205222, -0.601514, 0.215583, -0.090739, 0.279482, -0.269076, -0.103268, 0.192448, 0.343325, -0.083246, -0.548744, 0.427873, -0.101012, -0.624601, 0.132522, 0.332115, -0.602158, 0.100890, 0.363860, -0.269838, 0.326628, 0.123457, -0.670479, -0.476265, 0.158514, 0.236981, 0.179209, -0.047529, -0.307782, 0.100836, -0.113148, -0.232984, -0.231841, -0.206003, 0.090617, 0.506436, -0.088726, 0.060476, 0.503427, 0.701742, -0.349184, 0.198925, -0.189434, -0.242362, 0.060725, 0.099748, 0.038268, -0.391647, 0.629047, 0.516061, 0.209719, 0.497822, 0.031479, -0.268111, -0.201153, -0.449376, -0.248165, 0.497311, -0.135929, -0.426607, 0.067370, -25.183310, -0.217668, 0.244560, -0.113699, -0.034418, 0.279075, -0.087385, 0.090707, -0.057644, -0.038125, 0.556788, -0.185287, -0.570150, -0.224455, 0.177524, 0.295346, -0.079438, 0.456904, -1.079334, -0.205251, -0.241942, 0.030973, -0.412797, -0.039332, -0.078231, -0.625990, -0.752923, -0.103901, -0.260115, 0.343021, -0.274866, -0.338814, -0.084887, 0.440932, 0.021582, 0.504624, 0.122857, -0.114787, 0.298529, 0.105958, 0.489619, 0.023746, 0.315594, 0.449650, 0.291635, 0.456601, 0.009884, 0.411796, -0.053264, 0.003709, 0.146712, 0.551897, 0.747416, -0.292591, -0.418243, 0.235221, -0.076943, -0.266084, -0.249324, -0.296882, -0.198107, -0.645373, -0.300805, 0.539361, -0.779099, -0.247917, 0.190751, 0.161664, 0.476388, -0.065680, -0.249199, 0.418452, 0.159107, 0.429605, 0.161158, -0.122370, 0.595451, 0.982097, 0.093595, -0.179688, 0.247968, 0.154720, 0.151772, 0.511285, 0.429992, 2.756784, -0.477258, 0.210764, 0.060735, -0.206560, 0.050323, 0.226779, 0.488080, -0.322912, 0.215526, 0.079592, 0.581980, -0.074688, 0.156174, -0.439357, 0.177422, 0.084449, -0.244841, 0.041477, -0.124318, 0.522598, 0.331280, 0.219801, -0.001475, 0.191698, 0.235577, 0.397007, -0.140321, 0.127137, 0.326186, 0.080475, -0.198508, -0.016927, -0.647423, 0.118334, 0.151125, -0.260203, 0.370355, -0.372183, 0.684103, -0.044755, 0.411336, -0.508753, 0.137960, -0.578130, -0.308091, 0.662036, -0.223479, 0.528630, -0.088039, 0.301694, 0.581005, -0.571935, -0.326560, 0.074047, 0.560205, -0.517768, -0.118131, -0.825478, -0.052467, 0.087111, 0.156990, -0.125347, 0.200030, -0.232904, 80.721504, -0.353159, 0.366250, 0.661608, 0.076759, -0.675517, 0.160898, -0.327791, -0.218044, -0.286360, -0.110733, -1.071516, -0.166569, 0.236425, 0.076636, 0.110097, 0.025876, 0.136520, -0.289324, -0.052212, -0.116298, -0.413791, -0.261230, -0.305566, 0.213748, -0.213800, -0.181269, 0.551312, 0.220690, 0.754416, 0.246657, 0.569155, 0.251539, 0.176920, 0.161606, -0.531014, -0.195418, -0.095278, 0.553006, -0.337154, -0.577858, -0.308738, -0.046533, -0.260912, -0.037302, -0.461034, -0.245663, -0.409261, -0.124479, 0.556365, -0.376639, 0.100875, 0.092979, 0.564593, 0.361897, -0.145732, 0.145205, -0.663406, 0.029300, -0.542234, 0.114352, 0.108448, 0.103333, -0.109936, -0.598299, 0.671874, 0.007481, -0.067422, -0.047742, 0.225532, -0.224111, 0.202110, 0.233249, 0.132545, -0.249386, -0.251535, -0.008667, 0.486993, -0.417082, 0.657399, 0.234556, 0.103305, -0.333804, 0.601285, 0.350520, 0.213891, 0.336645, 0.362093, -0.728231, 0.082136, -0.602861, -0.315520, -0.174943, 0.939620, 0.721859, 0.055698, -0.052252, 0.005834, 0.295090, -0.253800, 0.549283, 0.408780, -0.037937, 0.030686, 0.093003, -0.155114, -0.104932, 0.285636, 0.134702, -0.235902, -0.073232, -0.016380, -0.196810, -0.231825, -0.039652, 0.191879, 0.708907, 0.046643, -0.679296, -0.272560, 0.220830, 0.632073, 0.011146, 0.338630, -0.006068, -0.417746, -0.790530, -0.044891, -0.112715, 0.119640, -0.555511, 0.385198, 26.227066, 0.327086, -0.359925, -0.246532, 0.315119, 0.315461, 0.184825, 0.874743, -0.243538, 0.034515, -0.099371, 0.384990, -0.588993, -0.329512, 0.202681, 0.108792, -0.522285, 0.317060, 0.258312, -0.340065, 0.353208, -0.226905, -0.467262, 0.197749, -0.205172, -0.173064, -0.003351, 0.592039, -0.122060, 0.194374, -0.540868, -0.138176, 0.341844, 0.081864, 0.242733, 0.373292, -0.228865, 0.148295, 0.120463, -0.094172, -0.023198, -0.016959, 0.237407, -54.570545, -0.573048, 0.675045, -0.190351, 0.164020, -0.054506, -0.056234, -0.145207, 0.239472, 0.296177, -0.228059, 0.566965, 0.066044, -0.390903, -0.266558, -0.301220, 0.327292, -0.387228, -0.326956, 0.046026, -0.537017, -0.113912, 0.009175, -0.175402, -0.095018, -0.330905, 0.084470, -0.136133, -0.354516, -0.469037, 0.438247, -0.231660, 0.032670, -0.097507, 0.094830, 0.058257, -0.154819, -0.390733, -0.600798, 0.396636, -0.294010, -0.608886, 0.159131, -0.488123, 0.253940, 0.310930, -0.223843, -0.505954, -0.019320, 0.451123, 0.033688, -0.305418, -0.521554, -0.435363, 0.323155, -0.312042, -0.008847, -0.252040, -0.180144, -0.310767, -0.178879, 0.130031, 0.857571, -0.107182, -0.299440, 0.559908, 0.155175, 0.366574, 0.170108, -0.399408, 0.217482, 0.401690, -0.321029, -0.045608, -0.068220, 0.157180, -0.177041, -0.105864, 0.044081, -0.435274, -0.008077, -0.537582, 0.047345, -0.313762, 0.100752, 0.147813, 0.158115, 0.128763, 0.052037, 0.156659, -0.200804, -0.530616, 0.043076, -0.484326, 0.115019, -0.426879, 0.149550, -0.379401, 0.265588, 0.110010, -0.137560, -0.046419, -0.190895, 0.185832, -0.424423, 0.238436, -0.331180, -0.208932, 0.093624, -0.136191, -0.024762, -0.284244, 0.031795, -0.036643, 0.343705, 0.086551, 0.040446, 0.576904, -0.533034, 0.577420, -0.326808, -0.414999, 0.202424, 0.118209, 0.829163, 0.636830, -0.537408, 0.020064, 0.206316, -0.161511, -0.346788, 0.161839, -0.026227, -0.223244, 0.261731, -0.382454, 0.108277, -0.355422, 0.103880, -45.383808, -0.162695, -0.150417, -0.127754, -0.070344, 0.119024, -0.116959, -0.034194, 0.281006, 0.047009, -0.478871, -0.337656, -0.401619, 0.260010, 0.109437, -0.230819, -0.169927, 0.253672, 0.187743, -0.142163, 0.026885, 0.312044, 0.012883, -0.075687, 0.187942, -0.864674, -0.161560, -0.180769, 0.423245, 0.286899, -0.322536, 0.082467, 0.129985, -0.038326, 0.400418, -0.058516, 0.277353, 0.456197, 0.539164, -0.083526, 0.026757, 0.039200, -0.235375, 0.052175, -0.201285, -0.225762, 0.416601, -0.418963, 0.252038, 0.136844, 0.261401, -0.321984, 0.021641, 0.297252, -0.045968, 0.015987, -0.632211, 0.079325, 0.178558, -0.686958, 0.065480, 0.519709, 0.642042, -0.067845, 0.037921, 0.154914, -0.014848, -0.024645, 0.106363, -0.512707, 0.045547, 0.496962, -0.158557, 0.217693, 0.007438, -0.582735, -0.274856, 0.251478, -0.168064, -0.218378, -0.187458, 0.235936, -0.303580, 0.133740, 0.433543, -0.416777, 0.163158, -0.312299, -0.542848, 0.314374, 0.362104, 0.192649, 0.357390, -0.229162, -0.168068, -0.437465, 0.052538, 0.281516, 0.368737, -0.097629, 0.968332, 0.208670, -0.460906, -0.274308, 0.238028, 0.236472, 0.210751, 0.070369, -0.012518, 0.160674, 0.005216, -0.122002, 0.292114, -0.093093, 0.153105, -0.204351, 0.578618, -0.321862, -0.400429, 0.156500, 0.084270, 0.381356, 0.067640, 0.051333, 0.399535, -0.307002, 0.340882, 0.135507, 0.089646, -0.237054, 0.281415, 0.090153, 0.462730, 0.171334, 0.454288, -0.291779, -0.587445, -0.012028, -0.045764, 0.449051, 0.142538, 0.409746, -0.105807, 0.066156, 0.277036, 0.749279, 0.060583, 0.179168, 0.016475, -0.148920, -0.023366, -0.071207, -0.346201, 0.011620, 0.048880, 0.374774, -0.428500, -0.617913, 0.200059, -0.312047, -0.069751, 0.212112, 0.469310, -0.322054, -0.436160, -0.151759, -0.362400, -0.100673, -0.390196, -0.720022, 0.013152, -0.093669, 0.500391, -0.181266, 0.171757, 0.205245, -0.491997, 0.150053, -0.303285, 0.213764, 0.181915, 0.042309, 0.117224, 0.243289, 0.163959, 0.249842, 0.096863, -0.027731, -0.371531, -0.153938, 0.580561, 0.096046, -0.302468, 0.400171, 0.505695, -0.165858, -0.123545, -0.023400, 0.045407, 0.485218, -0.918825, -0.379058, 0.030079, -0.237506, -0.267864, -0.423086, -0.861124, 0.339907, -0.120479, -0.469097, 0.068623, 0.029885, -0.089538, 0.517054, 0.389653, 0.260604, -0.697998, -0.163827, 0.174017, -0.102305, 0.016205, -0.635075, -0.597663, -0.165878, 0.092621, 0.079050, 0.743767, 0.460755, 0.141955, -0.437859, 0.222894, 0.521355, -0.322920, 0.021801, 0.437041, 0.586200, 0.036765, 0.155797, 0.139985, -0.041782, -0.709892, 0.013074, -0.547880, 0.155922, 0.070960, 0.569953, -0.219364, -0.014088, -0.335218, 0.293984, -0.440478, -0.020124, -0.123338, 0.212336, 0.409897, -0.151092, 0.206929, 0.108662, 0.003318, 0.480850, -0.388049, -0.373116, 0.508014, 0.646062, 0.338924, -0.014462, 0.072739, 0.503070, -0.571416, -0.053392, 0.261631, 0.593776, -0.324953, 0.396804, 0.309049, 0.453608, 0.104420, -0.480800, -0.556374, 0.342257, 0.100447, -0.134773, -0.252847, -0.256652, -0.206923, 0.125899, 0.127910, 0.259252, -0.247190, 0.271972, -0.559636, -0.121707, -0.268752, -0.576536, -0.150227, 0.483635, -0.634572, 0.468136, -0.471012, 0.473711, 0.300323, -0.380895, -0.137505, -0.299252, 0.208652], - "falcon2:latest": [-1.275306, 3.837295, 3.104335, -0.132523, 3.717942, 0.372535, -1.772705, 3.119587, 0.330449, -0.700744, -2.615506, 10.353819, -2.361413, -2.383462, 1.663645, 2.710775, -4.230299, 2.722366, -0.357314, -2.037119, 1.449030, -4.184108, -1.876729, -0.485423, 1.748516, -0.127038, -3.764583, 0.180338, -1.962256, -1.628213, -0.470965, 0.818017, 0.607546, -1.474351, 3.853329, -2.645384, 0.169052, 1.954102, 2.811140, 0.609534, 0.137802, -0.385182, -3.722800, -2.822938, 1.028885, 4.215508, -1.851904, -0.174632, 0.901177, -1.909700, 1.275259, -3.331348, -0.757433, 0.559766, -3.048050, -1.044024, 1.142050, -0.407469, -3.040350, 3.580981, 4.013700, 3.739869, 0.390057, -0.821299, 0.094822, 3.214658, 2.524949, -0.300330, 0.556939, -3.069934, -0.515992, -2.658362, -0.433554, 9.095484, 2.195112, -3.849095, 5.091149, 0.481200, -1.134630, -0.239280, 0.887909, 1.042396, 2.646552, 1.802093, 1.645549, -3.790758, 0.988161, -1.200287, 1.894759, -1.166587, -0.253824, -1.039379, -2.276851, -0.460683, 0.297967, -3.424223, -4.195358, -3.542181, -1.769864, -1.338850, 0.911988, -2.302943, 2.484190, 2.044442, -4.596624, 1.267139, -2.049352, 2.546231, 0.792628, -1.380133, -0.790615, 6.012039, -0.964435, -0.969051, -1.812450, -0.890375, -0.798536, 4.244349, 0.251844, -1.319340, -8.636320, -0.711426, -0.413526, -0.978065, -2.059388, 3.617761, 0.892199, -0.481894, 2.143296, 0.515694, -0.860783, 4.284967, 0.612026, 4.006313, -0.335522, 0.782485, -0.058630, -0.286828, 0.756606, -1.973024, -1.502667, 0.269806, 2.558606, -0.341148, 3.807795, 2.500325, 0.260572, 3.994771, 3.990319, 4.135689, -5.712500, -2.158962, 0.670838, 1.928773, 0.011099, 2.180364, 4.558554, -5.859202, -1.996603, 1.865865, -2.038666, -2.903919, 2.060443, 0.326185, -0.932059, -1.541007, 3.649105, 1.813717, 1.723021, -0.905025, -3.768096, -1.637242, 3.691015, -2.636121, 1.495227, -0.221481, -2.330304, 1.152045, 3.441514, -1.925960, 0.132836, 1.376882, 0.099456, -0.139153, -2.827578, 3.249744, 2.968992, -3.029808, -0.102355, -3.398517, -2.040715, -2.388101, -0.241652, -3.439781, -1.627563, -3.316260, 1.659161, -1.469869, 2.303240, 0.234823, -2.916763, -3.792274, -3.562071, 1.947090, -0.283635, 1.218568, 3.385237, -0.217122, -2.976565, 1.250648, -1.260653, 1.940458, -2.756780, 1.184896, 2.428695, 0.372655, 2.108495, 2.850650, 1.011860, -3.017907, -1.272859, -5.748411, -2.802590, -1.651772, -3.874090, -6.691458, 1.628203, 0.902252, 1.731206, 1.233933, 2.390242, 4.491738, 1.581355, 1.289003, -3.980048, 0.603783, -3.222681, -0.143940, -4.617625, -2.092155, 0.132560, 0.233982, -1.955884, 3.025106, -1.231423, 1.970144, 1.114148, -0.862942, -0.308265, 0.604513, 1.433046, -3.165818, 5.211211, -0.752265, -0.261660, -0.435479, 0.435807, -3.130022, -3.382930, -0.302572, -0.304755, -0.875783, 2.048395, -1.610556, 0.004490, 3.130698, 2.056630, -0.268167, 1.429440, -1.549552, 2.836768, 1.683631, 0.112271, -2.846099, -3.467909, -1.734015, -1.098224, -0.865726, 3.147281, -1.294847, 0.867880, -0.441601, 0.848505, 0.525628, 3.181535, 3.977831, -2.883601, 1.395165, 1.380046, -1.757408, 3.363719, 2.468548, 1.804424, -1.532946, -2.130015, 2.167905, 0.806237, 2.135587, -0.616036, 2.803680, -2.744563, 3.122983, 2.290845, -1.941239, -9.350484, -3.405049, -2.718211, 0.868880, -11.208566, -2.547097, 1.621465, 0.609452, -2.762423, 0.948383, 2.396591, -3.263968, 2.348562, -0.143500, -0.433124, 3.383017, 1.096289, 0.702994, 1.397233, -3.194034, 3.071927, -0.490006, 1.249623, 0.095233, 1.227319, 2.841045, 1.574195, 0.175490, 4.525906, 2.250069, 4.384015, 0.057987, 0.493614, 2.313399, 1.154731, 3.197756, -1.679319, 1.088407, -2.359752, -0.140352, 2.276346, 1.908259, -1.822850, -7.785120, -3.179761, -1.742176, 1.736056, 0.866745, 1.359070, 1.303184, -2.294070, 0.053626, 0.213622, -3.149813, -1.677805, 5.298675, -4.036638, -1.087946, -9.100941, 0.924279, 2.780944, 0.060562, 0.627181, -3.341824, -3.136374, 1.235826, 3.671900, -3.921594, -3.728671, -0.480427, 6.906900, 2.382487, 2.390993, -2.643352, -0.856610, -1.719015, -1.395070, -0.955716, -0.926107, -0.762820, -0.575991, 2.222496, 0.387985, -1.718496, 2.484186, -1.179515, -0.119917, -2.718995, -0.767698, -0.807503, 0.944953, -0.757398, -2.630700, -2.638915, -2.941369, -2.706702, 0.776204, 1.073829, -2.168399, 2.919386, 0.639097, 2.180970, -3.533285, -3.003216, 0.523227, -2.920606, -1.932676, 3.508812, -0.450955, -2.594667, -2.833239, 0.684165, 1.521983, -4.122576, 0.048962, 6.750394, -0.751528, 4.363237, 2.375494, -1.676940, -0.282620, -1.074734, 5.402434, -1.364364, 2.213356, 3.225933, 0.355178, 0.533272, -0.000414, -1.026736, -3.608583, 3.379501, 0.643868, -0.129584, -2.414845, 0.739444, 1.379362, 1.128999, 1.212591, 2.126804, -3.392489, 2.190962, -1.066917, 0.072771, -1.777203, 0.017392, -0.069404, 2.575250, -0.143043, -1.058601, 0.293741, 1.353118, -1.655753, -2.091888, 0.584350, -0.720455, -3.424674, -1.981546, -9.107293, 1.949826, -1.522261, -2.681044, -8.341246, -3.131934, -0.714103, 0.207412, 2.508620, 1.767241, 2.730778, -0.825572, -4.030791, 0.238825, -0.371033, 0.656116, 3.989294, 1.633813, 0.325307, -0.367170, 3.002364, 5.156171, 1.634276, -0.971831, -1.604515, -2.526582, -2.878766, 2.807352, 1.909165, -3.935943, -1.386310, 3.170664, -1.649927, 2.220213, 1.246705, -3.735313, 0.272806, 2.752307, 3.109334, -0.102484, -2.823759, -0.632412, 4.712577, 0.411905, 1.390527, -0.006540, -0.578229, -0.902223, 2.687959, 0.999556, 5.464525, -1.069448, -1.659709, 1.730871, 3.159081, -3.505104, -1.294691, 0.470974, 2.520426, -0.375588, -1.659444, -2.902283, -0.643385, 0.652468, 0.084223, -0.908147, -1.238602, -1.975286, -2.141201, 0.736527, -1.523522, 1.027745, 3.354010, -2.870191, -2.455250, -0.858900, 1.902766, -1.251234, -0.778018, -0.829765, 1.343457, 3.192241, 2.146025, -2.868140, 1.453027, -1.014266, -0.626704, -1.431984, 1.272131, 1.996223, 2.216051, 1.321754, -3.712698, -0.555156, 1.665618, -2.150003, 2.469344, -2.743378, -0.621012, 2.153028, -1.323079, -2.781879, -3.508905, 2.613299, -1.131783, 1.250944, -0.726568, -0.350890, -0.510844, -0.491322, -0.969947, 0.056512, 2.073022, -0.684992, 2.324330, 1.388874, -0.592233, -0.007646, -2.144584, 3.341875, -3.342694, 1.472340, 1.924615, 0.260784, 1.455808, 2.527028, -0.212072, -2.648695, -3.802433, 2.224674, 1.380913, -2.425954, 0.170378, -3.111950, -2.677550, -2.053871, 3.144357, 2.069789, 1.802598, 2.778758, 1.854536, 0.374600, 2.614195, 0.576047, 0.823646, 2.809750, 2.347219, -1.944691, -4.136095, 0.170414, -2.563500, -3.029089, -2.152708, 0.650496, -0.629906, -6.837932, -0.400384, -2.685872, 2.135639, -1.354106, 1.782213, 1.624843, 0.522975, 0.623956, -3.265278, 4.157569, 1.269328, 2.334650, 2.017716, -1.755639, 0.314134, 2.929660, 1.085749, 0.075581, 5.186268, -3.722156, -0.716771, -0.292780, 0.854932, -1.265511, -1.754162, -2.801681, 2.599700, 1.192626, 0.355987, -2.978914, 3.488926, -7.477931, 0.302190, 0.159773, -1.786207, 5.423014, -3.205537, 3.759773, -0.824988, 1.123907, 1.247544, -1.165879, 4.103333, 1.861792, 0.432820, 2.554196, -6.796187, 3.449815, 2.632658, -0.926445, -1.542485, 3.184329, 2.700121, 1.650769, -4.734762, -0.469165, 1.700503, 0.710945, 0.347955, 3.436646, -1.542240, -1.133071, 2.124078, 2.539431, -5.082206, -1.449178, 0.902514, 0.330178, 0.733471, 0.341730, 1.352243, 1.385499, -1.848245, -2.310890, 1.524840, -0.910095, 3.168741, 0.410063, 0.614422, 1.316848, 1.423225, -2.094517, -3.665807, -0.068259, 0.396121, 0.212791, -1.601394, 1.471721, 0.772471, 2.288241, -0.320014, -2.428612, -2.265923, -2.968658, -0.796963, 5.248973, -6.998604, 2.486512, -4.433386, 0.621024, 0.518264, 0.806498, -2.155303, 0.587934, 1.328967, 2.631720, -3.549683, 2.099039, 10.083544, 3.482533, -1.516241, -1.431416, -2.913141, -0.618922, 0.779420, 0.236411, -0.174201, -0.076979, 0.220478, -2.811640, -2.158289, 1.648178, 1.729170, 1.846626, 4.329294, 2.369144, 1.389106, 2.679754, -2.294376, 0.030183, -1.699179, -3.449418, -2.010730, 4.066484, -4.480805, 2.193635, -3.104744, 3.195236, -1.664788, -5.720037, -1.266570, 3.600276, -3.170063, 1.536892, 1.569534, 1.513302, 1.860432, -1.550267, -4.262663, -2.133216, 1.650067, -1.284678, -6.684666, 2.014430, -0.744968, 1.426262, -1.076141, -0.831970, 0.365885, -0.528754, 0.758301, 3.348044, 0.187185, -1.889567, 2.917908, 3.023930, 3.023178, -2.817112, -3.179446, 2.497720, 2.188169, 1.301504, 3.268865, -1.754922, -1.822780, -0.972488, 0.873712, 1.323133, -2.205761, -1.612030, 2.303227, 2.813283, -4.188452, -2.182941, 0.085170, -3.564689, -2.566697, 0.568231, 0.818893, -1.662748, 1.361568, -3.690748, -0.252375, 0.785948, 1.647538, -0.423860, -0.906425, -1.824527, -2.521552, 0.867587, -2.148677, 2.452386, -1.397286, 1.692210, -1.310338, 0.637889, 2.583428, -1.523493, 1.296878, -3.746370, 2.423034, 1.349175, 0.721364, 3.474914, -0.023369, 0.163030, -1.579503, 0.504772, 0.925550, 2.454133, 0.964500, 1.823297, 0.661305, 1.748695, 1.492398, 0.669027, -0.978568, -3.156673, 0.232972, -0.302810, 1.174894, 5.136952, 1.104236, -2.518059, 3.446657, 3.263038, 1.778748, 0.553110, -0.299201, 1.262304, -0.469016, 0.049288, 2.680809, 3.362026, 1.534753, 2.141226, 0.736711, 0.353176, 1.463385, -1.981672, 1.908352, 2.260112, -2.573204, 2.284262, 3.457025, 1.571169, 0.957621, 0.818471, 2.919568, -2.219922, -0.831442, 2.851260, -0.567659, -2.098528, -1.197574, -0.571810, -3.110029, 4.160790, 0.262709, 2.311606, -0.834847, 2.457886, -2.212020, 3.465058, -1.780708, -0.743038, 2.232378, -1.010238, -3.758393, 3.163526, 1.855109, 0.639158, 0.407191, -2.256367, 1.018602, 2.291389, 2.191854, 0.564081, 0.571482, 0.289375, 1.938669, 2.964486, -1.157557, 3.346216, -0.604904, -1.879804, -3.309341, 2.884830, 1.600047, -1.182005, 0.213239, 2.088271, -2.216653, 0.805338, 3.107358, 1.409771, 2.426908, 4.041484, 2.601931, -2.011261, 1.826019, -3.202612, -1.295027, 3.832757, -1.571364, 6.595190, 2.578595, 1.157802, -0.552183, 2.183033, 0.745915, -1.118431, 0.077764, 3.768408, -1.987089, 0.194293, 0.610980, -0.361441, 2.990337, -2.133753, 2.919108, -1.559100, 2.185312, -1.411286, 2.620373, 3.767267, 2.179324, -1.849180, 0.756302, 1.529904, 3.719940, -1.179238, -2.207529, -3.936229, -2.072637, -2.803760, -3.367758, 1.098284, -2.009740, 3.083918, -0.394910, 2.485883, 0.113272, 2.655967, 1.349244, -2.255511, 1.025767, -1.384176, 1.732267, 2.225488, 1.098336, -0.509963, -0.263632, 2.146725, -0.957762, 1.923358, 0.133071, -3.363287, -1.703886, 1.032311, -0.755408, 2.498776, -2.764693, 1.509607, -1.617618, 1.436502, -1.559158, -0.746124, 1.562070, 17.831846, 4.211090, -1.706081, 2.346309, -3.273780, -2.834237, -3.982527, -1.515350, -3.250439, 0.453186, 0.603446, 3.211556, 3.159271, 0.628849, -4.001279, -0.854389, 3.856479, -3.991511, -0.177681, -2.286148, 3.187693, -0.223602, -0.075862, 2.957560, -2.254858, -0.967292, -3.214899, 2.144798, 2.144349, -4.565749, 3.582543, -0.960689, 2.410637, -2.425848, 2.851839, 1.097054, -0.605512, -1.531101, 0.845345, 1.495862, -0.475145, -1.574789, -0.029720, 0.645808, 3.104814, -2.337604, 0.435249, 1.841378, 0.299883, 2.139250, 2.561849, -2.265870, 2.402302, 0.791734, 4.197929, 0.943617, 3.297447, -2.381050, -3.254916, -3.195335, -2.113678, 1.651127, 0.783532, 3.214834, 0.408355, 3.205199, 1.115050, 2.330830, -2.771334, -1.927293, -1.882555, 7.298583, 1.038048, 3.148403, -2.869358, -1.115117, 0.074848, 4.928357, 2.089816, 1.986463, 0.470056, -6.525270, 1.073113, -4.135253, 0.774483, 1.268632, -2.197856, -2.068014, 4.605621, -2.308162, -2.780638, -0.721838, -4.479808, -3.508407, -2.428396, 4.441323, 1.775349, 0.214881, -1.635818, 3.045053, -0.610118, 1.187438, -1.759295, 3.817451, -1.664751, 2.842919, -2.662443, -1.073685, -1.129181, 0.843486, -0.775921, -2.891870, 2.612444, -3.581708, 0.276234, -1.549791, -0.161535, 9.922145, -2.840818, -1.211635, 2.635808, 6.841765, 0.938128, 0.082862, -0.197744, 0.354956, -2.333372, -0.819113, 0.838161, 5.306095, 1.898514, -0.049039, 2.551995, -0.244460, 3.227154, 0.455535, 2.356509, 1.989387, 1.096240, 1.646904, -4.098421, 0.545672, 1.364193, 1.341040, 1.556323, 5.145891, 2.229922, -1.214043, 1.089752, -1.778068, -2.560244, 2.266327, 1.981164, 2.707444, 2.781528, 0.979474, 0.972002, -0.075105, 0.934945, -0.866869, 3.448736, -1.561079, 1.061687, 2.550811, -0.469708, 4.136203, 3.849202, -1.115006, -1.362522, -0.477934, -0.217236, 3.059588, -1.913679, -0.223996, -2.238563, -0.246944, -2.901762, 2.800288, 0.591907, 2.385238, 1.304711, 1.502628, 0.314458, -0.560291, 2.228894, 4.770694, 0.590195, 1.130904, -0.154598, -2.602068, 2.284669, -2.444100, 2.262833, 2.987651, -1.718937, 0.172004, -4.404370, -0.713307, 3.951679, 1.743177, 2.184051, 2.084052, -1.200920, 3.804940, 1.190594, 0.423731, 0.387230, -2.698928, 4.313253, -1.562275, 3.057487, 1.332809, 3.277320, -0.025386, -7.029213, 2.271002, -1.368629, 1.512957, -1.627040, -1.321970, 1.505093, 2.593931, 2.138204, -0.703714, -2.467005, 2.581830, 0.924391, -0.011639, 0.399110, -1.663732, -1.625977, -2.453845, 1.651928, 2.514879, -1.845028, -0.415811, -2.509327, 2.051333, 1.113616, 0.354290, -3.648528, 2.132520, 1.173429, -1.130877, 5.016101, -0.490695, 3.052016, -3.462008, -1.558317, 2.028475, 2.340829, -2.054028, -2.028140, -1.076622, -3.786443, 2.211594, 0.838984, -4.107341, 1.741582, 2.438528, -1.545592, 0.031897, -4.673401, -1.738998, -0.626893, 1.342387, -0.145155, -1.596622, 2.264874, -2.561344, -1.419518, -2.779258, 3.840589, -2.814966, -1.121065, 3.103562, -1.434957, 1.904631, -0.152767, 3.093784, -0.006062, 1.727092, 3.195707, 1.766008, 2.366390, -2.307591, 2.373812, -0.476952, 1.527025, -0.465218, 2.363796, 1.407915, 2.833245, -2.019148, -0.643388, 2.679688, 5.222930, -1.854012, 2.572557, 1.569281, -0.477092, 1.902260, 3.180279, 6.306729, -0.274454, 0.718802, -2.418252, 4.774065, -1.660186, 0.724020, 1.382207, -0.139734, -1.164008, 4.906361, -2.018308, 3.283710, 0.376118, -0.720316, -4.012407, 0.609760, -0.314082, 1.398531, -0.268018, 1.786567, -2.602562, -0.330188, -4.301880, 0.335341, 4.711812, 0.695186, -2.297723, 0.472864, 0.569482, 1.624462, 2.681783, 3.021969, -0.104063, -1.222748, -3.950817, -0.500057, -0.442732, 1.211303, 1.949326, 1.100488, -5.104456, -1.600076, 1.789613, 0.082084, -0.346776, 0.059769, 1.983953, 2.033277, 0.305617, 2.394171, 1.896901, 6.016169, 0.465130, 2.148189, -3.048455, -1.015694, -0.439929, -4.321608, 2.767549, -2.717652, 0.469900, -0.449218, -1.194940, 0.407131, 0.130723, -0.135469, 2.412801, -0.450518, -1.383515, 0.950040, -1.357381, 3.228314, 3.361074, 0.332888, -5.870872, -2.020130, -0.178779, -1.861960, 2.273883, 0.218612, -2.976734, -1.733326, 1.392309, 1.946056, 0.799269, 1.524984, 2.629119, 1.725265, 1.525396, -2.106735, 2.488540, -3.239527, 0.826539, 0.666062, -1.867959, 0.354207, -1.698327, -2.927954, 2.341576, 0.872006, -2.815492, 3.722144, 2.325369, 1.456939, 2.497020, 1.038249, -1.285768, -1.675847, 0.893679, -1.395089, 0.595987, -0.750167, -0.563275, 1.091686, -2.418337, -1.896940, -1.411161, -0.380414, -0.252327, 0.983415, 3.090965, -3.424773, 1.611721, -1.380765, 2.076887, -1.467507, 1.811858, -3.494227, -3.977528, 1.935094, 0.442732, 4.073760, 0.244701, 3.578159, -1.013995, -2.507242, 4.465893, 1.057177, -0.537271, -4.829791, 0.020822, 1.384580, -0.917904, -0.844748, -2.344644, -0.291398, -1.531452, -0.735474, -2.581677, 1.842135, -0.054317, 2.477489, 0.283114, 1.382037, 1.793713, 2.417314, -3.699762, -2.272878, -3.177811, -0.718206, 1.148291, -1.529859, -0.163814, 2.781793, -2.223887, 3.794726, -1.517594, -1.921671, 3.090774, 0.501923, -1.972393, -1.791274, -2.481785, 0.448921, -2.090209, 0.220071, -1.382417, -0.468002, -3.140492, 0.560268, -3.443594, 0.177877, -1.951589, -2.809496, 0.517052, -1.871615, -2.020593, -2.291572, -1.610467, -0.813363, -3.394322, -2.246128, 1.871319, -3.381363, -3.987760, -2.516682, 0.588713, 3.890212, 2.469473, 0.362648, 0.561302, -1.753007, -1.627349, -0.349749, 2.216681, 0.383506, -2.713041, -0.593570, 3.251638, 2.689493, -3.748345, 0.691237, -0.569738, -5.734797, 5.413714, 2.996217, -3.365990, 1.122713, -0.547549, -2.552277, 3.383361, 5.260242, 2.122134, -0.637885, 2.626056, 1.089457, -2.199468, -2.468286, -0.702738, -0.091756, 0.488842, 0.760422, 0.146176, -1.661150, 2.917534, -1.514377, -0.663864, 2.496569, 1.366415, -2.151349, 1.885142, -0.772022, 2.252527, 2.092843, -2.031601, -0.813497, 0.407781, -3.519864, 1.166523, 1.347374, -2.144313, 1.894274, 2.548582, 2.886257, -2.012259, -0.423815, -1.669818, 4.414027, -2.174315, -0.024239, 3.345891, -3.157781, 3.547366, 3.083466, -2.391912, -2.350487, 1.912315, 2.167852, -1.419118, -0.530295, 1.211723, 2.307965, -3.893567, -1.757907, -2.166578, -0.312290, -2.318677, 2.761449, -2.065255, -2.718894, -5.395889, 1.222173, -1.110870, -1.290285, -1.207875, -0.060934, -2.584382, 1.737085, 1.880211, 2.757859, -2.688734, -2.082012, 0.599087, 2.687817, -2.736868, -2.483763, 1.212993, -1.285007, -3.371017, -4.127361, -2.956272, 1.772995, -1.661328, 1.707176, 0.474840, -0.346689, 1.808019, -1.051578, -3.156462, -3.182742, -2.470137, -0.530100, 1.256876, -3.449591, 1.078454, 3.284560, -1.910391, -0.292548, -1.595873, -0.838040, -0.740394, 1.511373, -3.185318, 0.501699, 2.445569, 1.670159, -2.597500, 3.368602, 4.472101, -4.204967, 4.533583, 0.047076, -3.118933, 1.523812, -1.076397, -3.584929, 1.941660, -2.212678, -0.267279, -2.351005, 3.205257, -1.552729, -2.789754, 2.306149, -4.425440, 2.926135, -1.727820, 4.657523, -3.581824, 1.874127, 2.977703, 3.189226, -1.316201, -2.322132, 0.326548, -2.243823, -0.581202, -2.148850, 1.752387, 3.638435, 1.993092, 1.322640, 3.349422, -4.158694, 2.212160, 3.103670, 2.673969, -1.280546, 1.500715, 2.859776, -0.207381, 4.820920, 2.770439, 1.037140, 2.432384, 1.314973, -3.747844, -0.571894, 0.404972, -0.784428, -4.287580, -0.850005, -0.596455, 3.271060, -2.868608, 3.010384, 2.683059, 4.961196, -1.193018, -2.061228, 0.384417, 0.839436, 1.829330, 1.032372, -2.438330, 0.873286, -5.543126, -1.238505, 4.828424, 4.276352, 2.086277, 1.759339, 3.404096, 1.391880, -2.645986, 1.286137, 2.212531, 2.400476, -1.635331, -1.826915, 1.386136, 0.734565, 3.339298, -2.710637, -3.658201, -0.764404, 3.978921, 1.805965, 0.612052, -0.069873, 1.873704, -0.291247, 0.808841, 1.046961, -2.339138, 2.548506, 0.116501, -1.358457, -2.428479, 0.405364, 0.049829, 2.078218, 0.630792, 2.682093, -0.111304, -1.323117, -2.635784, 1.362048, 3.085995, 2.625044, 1.898022, 2.371150, -0.770906, -0.275337, -1.812634, 0.451130, 0.030746, 1.921646, 2.202017, -0.176585, 0.895559, -0.876122, -3.598070, 0.757027, 0.715836, -3.268029, -0.826421, 1.655850, -0.267985, 0.701595, 0.129097, 1.087256, -2.069307, -1.865456, 1.049002, 1.045302, 1.117406, -0.491220, 1.752171, 0.180681, 3.506818, 1.705417, -3.404651, 2.519688, 2.092036, 2.918577, -1.644121, -0.248030, 0.368383, 1.397353, 0.468383, 2.009109, 2.615247, 1.785939, -2.678337, 1.617231, -1.236114, -0.461577, -1.838622, 1.968311, 1.328617, -2.911062, -1.685913, -1.801324, 1.286906, -4.115755, -2.113906, 9.896759, 0.374081, -0.388752, -1.223068, -3.063830, 2.229397, 2.612700, -1.033353, -1.022675, 3.386715, -1.121697, 1.809654, -2.561433, -2.942688, 2.570541, 2.310937, -1.491891, 0.108844, 1.215748, -1.947517, 0.629480, 0.692682, -0.667800, -2.369210, 1.485672, 0.038969, 0.029837, -0.422000, -0.252593, -0.688025, -1.452450, 4.435425, 3.307030, -1.265886, 6.128372, 1.978850, -3.929060, -0.298456, 2.120240, 3.654680, 1.866614, 2.054912, -1.318845, 1.181852, -0.038600, 3.942681, 4.401767, -1.473351, -0.744864, -2.225775, -0.871413, 1.849269, -1.780350, 2.124613, 2.299182, -0.689189, -0.497090, 0.518188, -2.052712, 3.142647, -2.284230, 4.709138, -0.259247, -0.405531, 1.163305, 1.855179, -0.130810, 2.581027, -3.659903, 2.676016, 1.587614, -2.458660, 1.384374, -0.823230, -1.355044, -2.172476, 1.655872, -0.893984, -2.042878, 1.969854, 0.140095, -5.839048, -1.551351, 0.726457, 0.911761, -0.065500, 0.825390, 1.000783, 2.737443, -4.026385, 3.902370, -1.769917, -0.966249, -0.816267, -0.570867, 1.182167, -3.117018, -2.331257, -2.639359, -3.660809, 1.104480, 1.201332, 0.084591, -0.062481, -1.295772, 1.735669, -0.666152, -0.181148, -0.707571, 6.112964, -5.684958, -1.611841, 0.320344, 1.758454, -2.201783, -0.981238, -2.890517, -4.545226, -2.521300, 0.036706, 0.128801, -2.098386, 2.333826, 2.365282, -2.611004, 2.553960, -1.038355, -5.702994, -2.997832, -2.794518, -2.389665, 2.133088, -1.820822, -2.890388, 2.260902, 3.086394, 0.570292, 1.511309, -3.697427, -0.810149, -0.843711, -1.795822, 0.495115, 2.823005, 1.649202, 8.319246, -0.411636, -2.392526, 2.539201, 2.370214, 4.756253, 0.828395, -1.034127, -2.109726, -1.572361, 5.465284, -3.657965, 4.423150, 2.149361, -7.255781, 3.108456, -2.962606, 2.280480, 1.510164, -0.990311, -3.053618, 2.630822, -1.767082, -0.539244, -2.688886, -1.095631, -0.003539, -0.584830, 0.941815, 1.863402, -0.325740, -0.093675, -0.985750, -2.204835, -2.334163, 0.659979, -1.940781, 0.892017, -0.047762, -0.801082, 5.068970, -2.416367, -0.054956, -0.609716, -0.925279, 3.985359, -2.428799, 1.385789, -2.310544, -0.390019, -3.638839, 1.571243, 0.829102, -1.987846, -1.974930, 0.148836, -2.629555, -1.189142, -1.211454, 1.648244, 1.809920, 0.444209, 0.857393, -0.552437, -1.938646, -1.704941, 1.153294, -7.150531, 2.521330, -4.333313, -1.203517, -6.791515, 5.610275, 2.526631, -2.193799, 0.316134, -2.975452, 0.043736, -2.145086, 0.947292, -1.770846, -1.070288, -1.937447, 2.345026, -3.003102, -0.961535, 4.269505, -1.473615, -2.028548, -1.439545, 3.920681, 2.086540, -0.087132, 2.692583, -1.969973, 0.640000, 0.759344, -0.851917, -2.110132, -1.116281, 1.290830, -0.036435, 1.081315, 3.280384, 1.031457, -3.773770, 2.426805, -2.144011, 2.387061, -1.523329, 1.364333, 0.632966, 1.254096, 0.397885, 1.691442, -0.060497, -2.736957, -0.955565, -1.479424, 1.189433, 4.488828, -1.039956, 4.110622, -4.271568, 3.211975, -0.931945, 2.384370, 1.593602, -0.530324, -1.894910, 0.872313, 0.775410, 0.611552, 3.815946, 5.441214, 2.328136, -3.694026, 0.856822, -0.358736, 1.209829, 1.578911, -1.869051, 2.328872, 1.902640, 0.171978, 1.517722, 0.237618, -2.074708, 3.189997, -0.351501, -3.595257, -3.138206, 0.722451, -0.521091, 2.513267, 0.863403, -3.036732, 0.966440, 0.639682, 3.953517, 1.480138, 2.872857, -1.725542, -0.765049, -3.056712, 0.961703, 1.613330, -3.012677, 1.984263, 0.603873, -0.146085, 0.401721, -1.095984, 1.858853, -2.949477, -0.214432, 0.300439, -1.510662, -1.520183, 3.227612, 3.277660, -0.816754, -1.828793, 1.171779, 2.029778, 1.869878, -2.729131, -2.555247, -3.633353, -3.591051, -1.858859, 2.480379, 0.767383, 3.103071, -1.344633, 2.634771, 4.324559, 0.995620, 1.743588, -4.545441, 3.179331, 2.600043, -1.224859, -0.539547, -2.826778, 2.330503, -2.919528, -2.707401, 3.279189, 0.743885, -1.030735, 1.944464, 1.497105, -0.072477, 9.878094, 0.991437, 1.252940, 0.908459, 2.009145, 2.427585, -2.123645, -2.284483, -0.918611, 2.746569, -2.033646, 0.837004, -1.525458, 0.870853, -3.641463, -2.634501, -0.521927, 0.874221, -1.667083, 1.903460, 3.153025, -1.037110, 2.270567, 1.085054, 0.564745, 1.921359, 2.154752, -1.015654, 2.087633, 3.454697, 1.214256, -1.918541, -1.607991, 1.002951, 1.865858, -0.964412, 2.511755, -2.399036, 1.691220, 2.473380, 0.841120, 6.731910, 2.276564, -0.619042, 0.109877, -1.801440, 2.544270, -3.653917, -0.909440, -1.673509, -3.541651, -1.475499, 0.974824, 1.341343, 3.371499, 2.327110, -4.265070, 2.730826, 6.252456, 0.442818, -2.496783, 0.133818, -1.569381, 1.881387, -1.776341, 0.944535, 1.976379, 1.078518, 0.454756, -0.553306, 1.956321, -2.193647, -3.906279, 0.997558, -2.133405, 0.813385, 0.066720, 0.675073, -1.305464, 1.049415, 0.058389, -3.035835, 0.971060, 1.673939, -1.002198, -2.784204, 1.691542, -22.129820, 0.332251, 1.568601, -1.923303, 0.294346, 1.423302, -2.935637, -1.775013, -3.467926, 2.910514, -1.682199, 1.219355, 0.793816, 2.940609, 2.325723, 1.023719, -2.592135, -1.507832, -1.641595, 1.456100, -1.044729, 4.106136, 2.221826, 2.339298, 3.302754, 1.938588, 0.728833, -1.555544, 2.474434, -0.518467, 0.533135, 3.680743, 1.677448, 2.104536, 0.646286, 0.555699, 2.477109, -3.550225, -3.647983, -2.079800, 4.112247, 2.804218, -0.919420, 1.293995, -3.565257, 0.565476, -1.367818, -1.903385, -1.448610, 0.866282, 2.322896, 1.147820, -0.627827, -1.059485, 4.482340, -2.255801, -6.158365, -1.201316, -2.617374, 0.849946, -3.063239, -0.336349, 3.439678, 1.400132, 0.616048, -2.214755, -0.108316, 1.013055, 1.614219, -2.119207, 2.570008, 1.538140, -1.337971, -2.840325, -0.002898, -3.976804, -0.981789, -2.240550, -1.108801, 2.162783, -0.593558, 0.575897, 2.254664, -1.405173, 1.071949, 2.099885, -1.849970, -0.874483, 2.513324, 2.759261, -1.591699, -2.328701, 1.031207, -1.108524, -12.576934, -0.212726, -0.139737, 1.239497, -1.242406, 1.892567, -0.104317, -1.160928, -0.283431, -1.366523, -0.203520, -0.691903, 1.787807, 0.201596, -4.096425, 2.446693, -3.331512, 2.033213, -3.020568, -1.573980, -0.388636, -1.998314, -1.966732, 1.677706, 3.899530, 2.133426, 0.836722, 0.754416, -0.003854, 0.806098, -0.711075, -0.452569, 0.355189, 1.279910, -1.450249, 1.334980, -0.518858, -3.259822, 3.693094, -2.071981, 0.501570, 0.056253, -2.921665, -0.392897, -0.867844, -0.986845, -1.664861, 1.737591, -3.061367, 0.302886, 2.094111, 0.045325, -1.595525, 0.674877, -1.471849, -3.893967, 1.412523, 1.773032, -2.750422, 1.035602, -0.516791, 0.286685, -0.128167, -3.022458, 0.957886, -0.954299, -2.147751, -0.348507, 1.870028, 4.274771, 3.953058, 1.525810, 4.137014, -2.523398, 4.372852, 0.338937, -0.623839, -1.676739, 9.756101, -3.779910, -1.706488, -2.624722, 1.853259, -1.887885, 0.109111, 2.570731, 1.300253, 0.520757, 0.706603, -4.339977, -5.510975, -3.262259, 0.894060, 0.797520, -1.387151, 1.952152, 3.178773, -0.055920, -0.988293, -2.944663, 0.906312, 1.589234, -1.910973, 1.550346, -3.043045, 1.202343, 2.156839, -3.822891, 1.310066, 0.109305, 0.393427, 0.848353, -0.702017, 1.135580, -0.544394, 0.898604, 2.183110, 2.875517, -2.742109, -2.914018, 2.957861, 1.904441, 0.188540, 3.428993, 4.164488, -3.325378, -0.339448, 1.521152, -0.671186, 0.412715, -0.244523, -0.876270, 1.905240, 1.004341, 1.861009, 3.023627, 1.829536, -0.710838, 2.065416, 3.122601, 2.638688, -2.839584, 2.718982, -0.912577, 3.302638, 2.473169, 0.684764, 1.555684, -1.825787, -1.142594, -0.022323, 3.818839, -3.767341, -2.613019, 0.704796, 2.798040, -5.006337, -0.892998, 2.696245, -2.926975, 2.355693, -0.578362, -1.544222, 3.422838, -2.041148, -0.578029, 0.011704, 1.837247, -1.490923, 2.378649, -2.392335, 3.045223, -3.292506, 0.487439, 2.134249, -0.827777, 0.996064, -1.616960, -0.817308, 1.334069, 3.380960, 2.541771, -0.265344, -0.917402, 2.407108, 1.253521, -1.562716, -1.517113, 2.796017, 0.775317, 0.575597, 1.323530, 1.529689, -16.116417, -2.998111, 0.450969, -1.814111, 0.349480, 2.782877, 1.295974, 1.560289, 1.718585, 1.898549, 2.660482, 0.864414, -2.238849, 0.737516, -2.422750, 0.247123, -2.743533, 4.227241, 0.526669, 0.501835, -2.821635, -4.300069, 1.813544, -1.345552, -3.812800, -0.391366, -1.456246, 2.738957, 1.825692, -2.190766, -3.353376, -1.940057, -0.862514, 0.672473, -1.073232, -4.133321, -0.304357, -2.691906, 4.606014, 2.997205, 1.211570, -1.067043, 0.287098, -2.027639, -2.065545, 3.585075, -1.943740, 1.839725, 0.222802, -4.045444, 0.650917, 0.830172, -2.850742, -2.450385, -0.215431, 1.970153, 3.219507, 0.619687, -0.603187, -2.238926, 2.604592, -1.533692, 1.733842, 1.440334, 0.821643, 1.787324, -3.166633, 0.036767, 5.421640, 1.393930, 3.653860, -1.986755, -3.910746, 1.559711, 0.495545, -0.567174, 3.627657, 0.452299, 0.548954, 4.050268, -3.818210, -0.528180, 1.463299, 1.876337, -3.187659, 0.062530, -3.048895, -0.426209, 1.873657, -0.866349, -2.653108, 3.005883, -3.116135, 1.542959, 0.393652, 2.553407, 0.303429, 2.347852, 1.130731, -1.145539, -0.604549, 0.910890, -2.142335, -0.729891, -2.702992, -1.919118, 0.967466, -2.112257, 2.792009, 0.179999, 2.758096, -1.864986, -3.021833, -0.889339, 1.378984, -0.177384, -1.409245, 1.099375, -0.886126, 1.222357, -1.046859, -1.496866, -1.473668, -1.838376, -2.917238, 0.983777, 2.499777, -1.375984, 2.721064, -2.649018, 1.615053, 0.037384, -2.364583, -0.474144, -1.747913, -2.922879, 0.293949, -1.100694, 1.720940, 2.906822, 0.333392, 3.154211, -2.480198, 1.405208, 0.162729, 1.072986, 1.403922, -2.553919, -1.325863, -0.578505, 1.225022, 1.082428, -1.728628, 2.811140, 3.167954, 2.595941, -0.468482, 0.676855, -3.399291, -2.395138, 2.171390, 5.313373, 0.593171, 1.174135, 1.041957, -3.592760, -1.115999, -1.609447, 0.996160, -4.086498, 1.880493, 2.586645, -1.809857, 1.197866, 3.047547, 2.049238, -5.638014, 3.052633, 1.992575, -0.746054, 2.904683, -0.634189, -1.680446, 6.441619, 0.607398, 1.153746, 0.197727, -0.397482, 3.676062, 4.964014, 3.061106, -1.133064, 0.068444, 0.732943, 1.284233, 0.121063, -2.615230, -0.237515, -0.004988, -0.984315, -0.205606, 0.886206, 2.857014, -1.104957, -0.110875, -1.748340, -1.275044, 0.566729, 2.455837, 0.216097, 1.074522, -1.081340, 1.013576, -0.510011, 0.004325, -1.918031, 2.226862, -1.485101, 1.199568, 3.146095, 2.427711, -3.011320, -2.449924, 1.329107, -1.326373, 0.970822, 0.849875, -1.601499, 2.314740, -3.488747, 1.154833, 0.087346, 0.803074, -0.903432, -3.312709, 2.299358, 2.803974, -3.286255, -1.573510, 2.070856, -0.101941, 2.171456, -1.329902, -3.907687, -3.720195, -2.571179, 2.813491, 1.830530, -2.511291, 1.457561, -2.576567, -2.362876, -1.616081, 1.032160, -1.181725, -0.276253, 2.621583, -0.266221, -0.139193, 0.748835, 1.204025, -1.065338, 0.172388, -0.772580, 1.074110, 1.518136, 1.267711, -1.981061, 1.981899, 2.800466, 2.231948, 0.890822, 1.847108, -2.885270, 1.300715, 4.157722, -3.683444, -3.738341, -1.370671, -0.604141, -1.896416, -3.395854, 5.339676, -3.188531, -1.775950, -1.851381, 1.067175, -1.844483, -1.300046, 3.536031, 1.521053, -3.789303, 0.140510, 1.047382, -0.060062, -2.875290, -1.034876, -1.860420, -3.490496, 0.724952, 0.459753, 2.903262, 1.382170, -1.717902, -1.420321, 3.068552, -2.760029, 0.564609, 1.620253, 0.562308, 0.044785, 0.964442, -2.613660, -1.785604, -0.199799, 1.718101, 1.127491, 2.559109, 0.299823, 0.551968, 2.438937, 0.701297, -0.019573, -2.164789, 1.922659, -0.866623, 0.326152, 2.629571, -0.972274, -4.290656, 4.196831, -3.415634, 0.356076, 3.115250, 1.733862, 1.982695, -3.026798, -2.023067, 2.122068, -2.348504, 0.413962, 0.148813, -3.872636, -1.810721, 0.762815, 0.159291, -0.137686, 2.732738, -1.524898, 3.947837, 2.365946, -2.701674, 1.253832, 0.194691, -0.156369, -3.185858, -1.945729, 2.551816, 3.177832, -0.077237, -2.811372, 3.560195, -1.534038, -1.941651, -1.060778, -1.237860, -2.827729, 1.169655, -1.817541, 1.247796, -2.044961, -2.042051, -0.980262, 0.946876, 1.271373, 3.471315, -2.489898, 2.386957, 0.589401, 0.960726, 4.046332, -0.806419, -0.904894, 3.152041, -5.319210, 2.374078, 4.134824, 1.937350, -0.497493, 2.662346, 0.755571, 4.101086, 0.119435, -2.297841, 1.126628, 1.798876, 1.621213, 3.012361, 0.051148, -2.327565, 0.777902, -2.543133, 0.416235, 1.116755, 3.242164, 1.235808, 0.284160, -1.247335, 1.107888, -1.079982, 4.659342, 2.768052, 1.012518, -3.917892, 0.223945, 0.545874, 4.944964, 2.193990, 3.037240, 1.796157, -1.105980, -2.231532, 2.658256, 2.005485, -3.134518, -1.135793, 0.886341, 2.554361, -2.021382, -2.364516, -0.521016, 1.373525, 1.369994, 1.462440, -0.309788, -2.899583, -3.485990, -0.327034, -0.483858, -2.365628, 0.571344, -3.879119, -0.263073, -0.500833, 0.611228, -1.481678, -2.642653, 1.774129, -3.965195, 2.924938, 0.561954, 2.093593, 2.242171, -3.799051, -0.805658, -2.153137, -0.395024, -3.239681, 2.431444, 0.556913, -3.113872, -2.407112, 0.681333, 1.893931, -2.904344, -0.771003, -1.218895, -1.536474, 2.928406, -4.104526, 1.685589, -1.799101, 2.594079, 1.383285, -3.314305, 3.277896, -3.116689, -0.780264, 2.376668, 2.787229, 1.384615, -2.993711, -3.415761, 3.395609, -1.612519, 5.627576, 3.240973, 0.276432, -2.974000, 5.787770, 2.183374, -0.118661, 2.462688, -1.815760, 3.092844, -1.904415, -1.680902, 3.111355, 2.789873, -3.434824, -2.328745, 4.971395, -0.408980, -1.288155, 1.367070, 0.403338, 0.400134, 1.119727, -0.911876, -1.399861, -3.973023, -2.791090, 3.630412, -1.710031, 2.134027, -0.959766, -0.329367, -0.732914, -0.993124, -2.181825, -1.024484, -1.577234, 1.415553, 1.184569, 0.033538, -0.182342, -1.553549, 0.714704, -2.457281, -1.513178, 1.668061, -1.185722, -0.021128, 0.509903, 0.016285, 2.772515, 3.466581, 2.642076, 2.103426, -0.777547, -3.492056, 0.086423, -1.734952, -2.397410, 0.079009, -0.129437, 1.052238, -0.897817, -1.193079, -2.432753, -0.610183, 0.759082, 2.856251, 0.527911, 2.582767, -1.680882, -0.903450, 0.290197, 1.900693, 3.820286, -1.310768, -2.894516, 0.749423, -2.294792, 1.678832, -1.254640, -2.198882, -1.182828, 2.383785, -2.344207, -3.577337, 1.876101, -3.005041, 3.585013, -0.243899, -2.782204, -0.227220, 0.830313, -0.217250, -2.924293, 1.900393, 1.335294, -0.480179, -2.973958, -3.055072, 0.840056, 3.724781, -0.353757, 0.307534, 0.540906, -2.654098, -0.348129, -0.920658, 2.132657, -2.957996, -3.357490, -1.639126, 0.272579, -1.003739, 1.129556, -0.414330, -1.633175, -2.019671, -1.955855, 1.487665, -1.117603, -2.708709, -0.485532, 1.924051, 2.907635, -4.480110, -1.866212, 1.161165, 1.436610, 0.408536, 0.190726, 1.837151, 3.994542, -1.868298, 0.735382, 3.357700, -3.131468, 1.535451, -2.268453, 1.079755, 1.087334, 2.349835, -2.999949, 0.427312, -2.889404, 1.677031, -0.963640, -0.438927, 3.972819, -0.491260, 3.205900, 2.318801, 3.833720, 1.883632, 0.465372, -2.379404, 2.530885, -2.490902, -1.817383, 2.394443, 2.693515, -2.303585, 2.991621, -0.318521, -2.124806, -1.568704, -1.105953, 1.689304, -1.503239, -0.745483, 1.219584, -0.008324, -2.262623, 2.536577, 0.300485, -0.126827, 0.379301, -2.164514, -1.050668, 2.279346, -0.929581, -2.010704, -1.761641, 0.769421, 5.870451, 2.409795, 1.549106, 0.406771, -2.387406, 2.617296, 2.226446, -2.372685, -2.909598, -4.472449, -4.199341, 0.783240, 0.096103, 0.230260, 2.392704, 0.130306, -1.671189, 0.000460, 0.859836, -2.856006, 0.879900, 2.923421, -3.459907, -2.481248, -0.380551, -2.122747, 2.509279, 1.280891, 1.923709, 0.026194, 0.975075, 0.535158, 5.102134, -3.227482, -0.724829, -0.011868, -2.003006, 0.030337, 1.065228, -0.093162, 4.732137, -2.835727, 2.164323, -3.163384, 1.464387, -9.556238, 3.294225, -1.643234, -0.544956, 1.026036, 1.801332, 0.531682, 0.875548, 2.275990, -5.821035, -2.165171, -2.959899, -3.164179, -0.533030, 0.882995, -3.908379, -1.524249, -3.931026, -1.867308, -7.501748, -3.151053, -3.374834, -1.482490, -0.023572, 4.518243, 0.564633, 4.339701, 3.183874, 4.368966, -1.674653, -1.995406, -1.902929, 2.051385, -1.286106, 2.168142, 1.894793, 3.113796, 16.570700, -2.124722, 0.712696, -8.329745, 1.154208, -1.029663, -1.493598, 0.788374, 0.373883, 2.354367, -2.372883, 2.818204, -3.362396, 2.617382, 4.474661, -0.396233, -1.267438, 2.482839, 0.489908, 2.244136, 1.239966, 4.426870, 5.876467, 5.865771, -2.613004, -0.572432, -0.640416, 1.465602, 0.965603, 1.523670, 3.018555, 2.185856, -0.685083, 1.380377, -1.892750, -3.034616, -1.156111, 0.307927, 4.088897, -0.267865, -0.748823, 2.313815, 1.472056, 3.863946, -1.217377, 0.140903, 2.896098, -1.744379, -1.723044, -0.629762, -0.662425, -2.445518, 0.152551, 1.374967, -1.386010, -2.313100, -4.004970, 1.415225, -4.312975, -1.410863, -2.737320, 1.355401, 0.709947, 1.922767, -0.346310, 0.500168, -0.085046, -3.296778, 1.980763, -1.139568, 1.725973, 3.104150, 2.869179, 0.393733, -0.193732, 3.668149, -2.017278, 0.133616, -0.618817, -1.574684, -3.663116, 0.169122, -0.268842, -1.601942, 0.325557, 1.805874, 2.177101, -2.602196, -1.913941, 0.011868, -0.395234, -0.834341, 1.420007, 1.540699, 3.013688, 1.357066, 1.180240, 1.042086, 2.019283, -2.652542, -2.059645, 0.797553, -0.451454, 2.375256, 2.512674, 1.454196, -2.217665, 0.813907, 1.702392, -0.050121, -6.994725, 5.303644, 1.784331, 0.242761, 1.062950, 3.647518, 2.466606, 0.988599, -0.931017, 2.402037, -1.814979, -0.855702, -3.275341, -1.074031, -2.235515, -1.613209, -1.744707, -1.840088, -0.779895, -4.490575, 0.831230, -0.156800, -2.528859, -3.127295, 2.660365, 1.944716, -0.364012, -1.861313, 3.323568, -0.811558, 0.169003, 2.853401, 3.639811, -0.011596, 1.986325, -1.664246, -4.615153, 2.271653, 1.025806, -3.154962, -2.319878, 2.225085, 0.531775, 0.322223, 1.468869, -0.566937, 1.309493, -1.211456, -3.419137, -1.585997, 1.178995, 0.171657, 3.465562, -0.804610, 1.665783, -5.088279, 0.650534, 1.791170, 17.250408, -1.626894, -1.974006, -0.824130, -3.331557, -3.880378, 0.599182, -0.694505, 4.215900, -1.447300, 2.230931, -0.596584, 0.340238, 4.081385, 3.625847, 2.839355, 3.756844, -2.777805, 0.100937, -1.989295, 3.277542, -4.379092, 3.087123, 1.403637, -2.231328, 2.390607, 1.557257, 3.298607, -0.299247, -1.181531, 0.525384, -0.890912, 1.824297, -3.995151, -5.042112, 0.744427, -3.067411, 1.595778, -2.571892, 0.771376, -3.277676, -1.455596, -0.250049, -1.351680, 0.697943, 1.069591, 2.857038, -0.159182, -0.362470, 1.539649, 0.099324, -0.135235, 1.614402, -1.260010, -0.059322, 0.792264, -3.511580, -0.926815, -0.584613, 3.695359, -1.960196, 3.956642, -2.118308, 1.945329, -3.706782, -4.705505, -1.869684, 1.638058, -4.319848, 0.475216, 3.160248, 1.229439, 5.102840, 1.172704, 0.917782, 2.616993, 2.139804, 0.179050, 0.635365, -2.586541, 3.264217, 2.315623, -0.899583, -0.615601, -2.657061, 1.547319, -2.286578, 1.879086, 1.495636, 2.321740, -0.555475, -1.915786, 1.741425, 0.884898, 2.387746, 2.810685, -1.226168, 0.692660, 2.960999, 3.579106, 2.618080, 2.850123, 3.143281, -1.445385, -0.869172, 2.514671, -2.716269, -1.470776, 1.258983, -3.679865, -2.217870, 2.349101, -1.496878, -3.025600, -4.349153, -1.707175, 3.005045, -1.947022, 0.834064, 2.545904, 0.842057, 1.460314, -0.993782, -0.211882, -3.322590, 0.401144, 2.192401, 0.763440, -2.603230, 2.001291, 0.178745, -0.747411, 2.043627, -2.383173, 1.185634, -0.005095, 2.036742, -2.243795, -0.514880, -1.657962, 0.009154, -0.846694, 3.579744, -1.727863, 1.975658, 0.298879, -1.385962, 3.904871, 0.650457, -0.503490, 1.660019, -1.920314, 1.000721, 2.794953, 0.703100, 1.590531, -3.563776, -2.024322, 0.831120, -0.502338, 1.180401, -1.431693, -3.374807, 1.813871, 0.377378, 2.058053, -2.708455, -0.701740, 0.503954, 3.542927, 1.265793, -2.440325, 5.357823, 1.181739, 1.192558, 0.281461, 2.353562, -0.804080, -1.500842, 0.188305, -3.794515, -1.650937, 1.416369, -2.651186, 3.189369, 1.791879, -2.396369, -4.074958, -2.053515, -2.250571, -4.064375, 0.532033, 1.440506, -1.240853, 2.492684, -2.390124, -1.024883, -0.555563, -1.956213, 1.623435, 2.391842, 3.169787, -2.010656, -2.048950, -0.517389, 3.292646, 2.329223, -2.762945, -1.225980, -3.282871, -0.160141, -1.514427, 1.987719, 0.649399, 0.815709, -2.400442, -2.567317, -1.862416, -1.602954, 4.048628, 1.432278, 1.482120, -0.028168, -1.211920, -1.063073, 0.239240, -0.337652, 2.459109, 0.510653, -1.598884, 2.341745, -3.938889, 0.773527, 1.360329, 3.298347, 3.038607, -1.644866, -0.088439, 1.705638, -1.667633, 3.251128, -0.499025, -0.244674, -2.124416, 1.485698, 1.383972, -0.360520, -1.537704, 0.886796, 1.275228, 1.144015, -0.614845, 3.147204, -2.104358, -1.287056, -1.382660, 1.712896, -1.635278, -2.644013, -0.343970, 1.227356, -0.518890, -3.459199, -1.418720, 0.039872, -2.601501, -1.806357, -1.778686, 2.005520, -1.855919, 0.793212, -1.463252, 1.586207, -0.184600, 1.077291, -3.230673, -1.065376, -2.426338, -4.433507, 3.362201, -2.072861, 4.426600, -1.687956, -0.826343, -0.115859, -2.048442, 0.140565, 4.825446, -1.373407, -0.139355, -0.565521, -3.447233, 2.419903, -1.851389, -3.471667, 1.108885, 3.593758, 0.237525, 2.659810, -1.035963, -2.568973, 1.054946, -1.254823, -1.618325, 0.781841, 1.970722, 3.680123, 1.463840, 0.097049, 1.916009, -0.708227, -0.067044, -1.741496, 2.598838, 3.050692, -0.787915, 2.766759, 1.675597, -1.173892, 2.223792, -1.062551, 2.273316, 3.011199, -1.650119, -2.648605, 0.158647, -2.177063, 0.186268, -3.177166, -0.526156, -1.345172, -2.188882, -0.780098, 2.949754, 2.012983, 0.683741, 1.745923, 3.283293, -2.406209, 2.281897, 1.034458, 0.070274, -3.126071, -3.453828, 0.506103, 4.258954, -0.538088, -2.218058, 3.084713, 5.720852, 2.743039, -1.810076, 6.272157, 0.664128, 3.120400, 0.742479, 3.379241, -2.731331, -0.166025, -6.347305, -2.193065, 0.273632, 0.289647, 3.115033, -2.160245, 0.387171, -0.448133, -1.982356, -4.029318, 1.811508, 3.046365, -2.964187, 2.094236, -3.426285, -3.485981, -1.995775, -1.983477, -2.634778, 0.562914, 1.780642, -2.165194, 0.609340, 0.511937, -2.450258, 3.387038, 2.438292, 1.092778, 1.200358, 2.149229, -3.404688, -3.018096, 4.586117, 1.999421, -1.138862, -1.361518, -0.968755, 1.716326, 2.557005, 1.137697, -1.860175, 4.096773, -2.173637, 0.623251, -0.005716, 0.244621, 2.366596, 3.502475, 1.700907, 1.084500, 3.542811, 0.157646, 0.709190, -1.301711, 1.101328, -1.765094, -2.921493, -0.108164, -0.767839, -1.458841, -3.287886, -2.644441, -0.287442, 0.930482, -1.790940, 2.306692, 2.406610, -3.171745, 3.804529, -2.363433, 2.127100, -0.969682, -1.289734, 0.080165, -0.030003, 3.477387, 1.284148, -0.626319, -1.433724, 1.803858, 3.479468, -0.094739, 0.400459, -7.394617, 0.835967, -2.398387, 0.867873, 2.937330, 0.751119, -1.297753, 0.425168, -1.585854, -3.647148, 3.178249, 1.690364, -1.492471, 2.513674, -1.554596, 3.298636, 0.609163, -2.723015, 2.000729, 1.757294, 0.908518, -3.078389, -2.418847, 7.257916, -1.492727, -3.191773, 2.915990, 1.081085, -1.266900, 1.227162, -3.655681, 0.880118, -0.415529, 4.598647, 0.800119, 3.403203, 1.137017, 0.396906, 0.119401, 1.960427, 3.879504, 6.221431, -3.068269, -2.315856, 0.694096, -0.145249, 0.976113, 1.862161, 0.650839, 0.130839, 0.288261, -4.273160, 0.193502, -4.425699, -2.068643, -1.223312, 1.958007, -0.721088, 1.534529, 2.555326, 2.301806, -1.540642, 2.078291, -3.631954, 4.562294, 1.094564, -0.621842, 1.441936, 2.677450, -1.552978, -0.132519, 0.788240, 1.321109, 3.038334, -5.551532, 2.999269, 0.364990, -0.272237, -2.743863, -2.561628, -1.798099, -0.921997, 2.971652, -1.706339, -1.688948, 0.070037, 3.021770, -3.601783, 2.029795, -0.783538, 1.702649, -0.212672, -1.084160, -0.049358, 5.279011, -1.903958, 2.085022, -3.444110, -1.312608, 2.920285, -1.673897, -0.170632, 0.140543, 0.217857, 0.993657, -0.147226, 4.131040, 1.917654, -0.402115, -1.762819, 4.605012, -0.253315, -0.367822, -1.636496, 2.923368, -3.571045, 1.615221, -0.274513, 1.293480, -3.736974, -2.906220, 1.564071, -1.271615, -4.054400, -0.437894, -2.497492, -4.102562, 0.335778, 4.307206, 6.871069, -1.353800, 1.235324, 1.515420, -0.432864, -0.915976, 1.982390, 1.529526, 1.321939, 0.553168, -0.996906, 1.229996, -1.395458, -0.720184, 3.174892, -0.654703, -5.431517, -2.564596, -2.954030, -1.324461, 1.512441, -2.701057, 0.388167, -2.322500, 2.430663, 1.636868, 3.658733, 0.276975, -2.526526, -2.830755, 0.008060, 2.742812, -1.348127, 1.398821, -1.734482, 0.392166, -0.090562, -1.914905, 1.780919, -2.045624, -1.376605, -1.993155, -0.685609, 2.082545, 2.854451, 1.075901, -1.963066, 2.440422, 0.654377, 1.624016, 0.347185, 3.520130, -3.108392, -0.240567, -3.161610, -0.800270, 0.307272, -6.462657, -2.478560, -1.957913, 1.711907, -0.733501, 0.139884, 1.806551, -1.349770, 3.346692, -7.009873, -2.372363, 0.695869, -0.527927, -0.040519, 3.153802, -0.830838, 2.495985, -0.613522], - "minicpm-v:latest": [0.373405, -0.434066, 0.402574, -0.150118, -1.009159, 0.055999, 0.578607, 1.257351, -2.809614, 3.972482, -0.813682, 1.450852, 0.222104, -1.309440, 0.825239, 1.990135, 1.091002, -1.035189, -0.127123, 1.494732, 4.583488, 2.152238, 1.950469, 0.040962, -1.026761, -2.280671, -0.764667, -2.645734, 0.738428, -0.337854, -0.514919, -2.169918, -1.606695, 0.726714, 2.363379, 0.812033, -1.017132, -5.906273, -0.068586, -3.161905, -0.668377, -0.930418, 0.602283, 1.411093, 0.929184, 0.361665, -7.188779, 0.122860, -0.208246, -0.857899, -1.278283, 0.683655, -1.143659, 3.433253, 0.186680, 0.858210, 0.086462, -1.969538, -0.585241, 2.501438, 1.663121, -1.452310, -2.782187, 2.376974, 0.011909, -2.539715, 0.295956, 0.566496, -1.961629, -0.696331, 2.636359, 1.223098, -0.417314, 0.676321, 2.153070, 0.455967, 0.085189, 1.253216, -0.196767, -0.790615, 2.291733, -0.371285, -3.192962, -1.635582, 0.242907, 17.824533, -1.191271, 0.693028, 0.503808, -2.743020, -0.241273, 1.333885, 1.035344, 1.961190, -0.152041, 1.285618, 6.496006, 0.763207, 0.087968, 2.870465, 0.356444, -1.683651, 2.216422, -1.844649, -0.691816, -1.050912, -0.499342, 1.075545, -0.171938, 0.909891, 1.241483, 1.092643, -2.173166, -12.015554, -2.856367, -20.698908, -0.609858, -3.207479, -0.977120, -0.093685, 2.417937, 2.442160, 0.848334, -2.646831, -1.455137, -0.189020, 3.002412, -1.256232, -21.787876, 0.788017, -0.381844, -1.949451, -1.868758, 0.008738, 2.679282, -0.296270, -1.594275, -2.922423, 0.540774, 0.256479, 3.338656, 0.494479, -2.322596, 2.338914, 0.057826, 1.467675, -1.584482, 0.633437, -3.083071, -0.641232, -1.212952, 0.981840, 1.525307, 0.569190, -2.707587, 1.231240, 0.272207, 0.788035, 0.123544, 1.150698, 0.283472, -2.258527, -35.561195, 2.163777, 6.679248, -1.705841, -0.327031, 2.162935, 1.658646, 0.227390, 0.758502, 1.687766, 1.669509, -0.139092, -0.986089, -0.276972, 1.080841, -0.210213, -0.943579, -2.606741, -4.459008, 0.478328, -1.479767, -3.058852, -8.545797, -0.395627, -1.164287, 2.495408, -0.183550, -2.715141, -2.877285, 0.344198, 0.790495, 0.623198, -1.037656, -0.456738, 1.659658, -0.046735, 2.193197, -0.659875, 2.066572, 2.893802, 0.885306, 0.174187, 1.547745, 1.911764, -1.608837, 0.710351, -1.673273, 9.898326, -2.634362, -0.044190, 0.545811, 0.707455, 3.859440, -3.805061, 2.133735, 4.158154, -0.054382, -0.429803, 0.409739, -0.137998, 2.086717, -0.399401, 2.022264, -0.645827, 1.551178, 0.694332, 0.139730, -0.094900, -0.723024, -2.779635, -0.507423, 1.105360, -0.154632, 0.736738, 0.161376, -0.676730, 15.677238, -0.188134, 1.856025, -1.736571, -0.953508, 0.939773, 4.345387, 0.713690, -2.220577, -2.284271, 2.869463, 1.600713, -0.709076, 0.347308, -1.171167, 1.196288, -2.898170, -0.818068, -0.079971, 1.877244, -0.987878, -2.073211, 2.558323, -1.109507, -0.980287, 0.290609, -0.468093, -1.300264, -2.062796, -0.978946, 1.764146, -0.106737, -1.404154, -0.090169, 0.652458, -0.804112, -2.321134, 1.668066, 0.430334, 6.668191, -1.203562, -0.704168, -0.549548, 2.036619, 0.800234, -2.810486, 0.518899, -0.560133, 1.006556, -2.317722, -0.750900, -0.774626, -2.130997, -3.248784, 0.649599, 1.748983, -0.228464, -0.605739, 0.412901, -0.329177, -1.682082, -0.877227, 0.548816, -0.893511, 0.946567, -2.476345, 1.110094, 1.972772, 0.139028, 2.039542, 1.314990, 0.706638, 0.704419, 1.276759, 0.549634, -0.312816, -6.987369, -2.040702, 0.164418, 0.289892, -1.125816, -0.748568, 1.327388, 0.417259, -1.186356, 0.290069, 0.164743, -1.728422, 0.379547, -1.688991, -1.351178, 2.636830, -5.866957, -0.173038, -0.586063, 2.464278, 1.674203, -0.039280, 2.671825, -0.426402, 0.797512, 1.504823, -4.485917, 0.373612, 0.854094, 1.092571, 1.066606, -0.742925, -1.399240, -0.229709, -0.043383, 1.223743, -0.173675, -1.400634, -0.751707, -1.184195, -2.087879, -1.150729, -3.714264, -1.186671, -2.254113, 0.601697, 2.189452, -2.337301, 39.923878, 1.442919, -6.136178, 0.997319, 0.443302, 1.893847, 2.134698, -1.521084, -2.211249, -0.605163, 2.920052, -1.224859, -0.488684, 0.174961, 1.765274, 0.043963, 1.291592, -0.027254, 0.362563, 0.535911, 0.055040, 0.965669, -0.998588, -0.965053, 0.910799, -0.635001, -0.755441, -0.216526, -0.230160, 1.201640, -1.004903, 4.072732, -3.240913, -0.649104, -0.221394, -0.652424, -0.344757, -0.897428, 1.605987, 0.713921, 1.132797, 3.124265, -4.620122, -1.233402, -2.835165, -1.103005, -0.272193, 1.986733, -2.367633, 2.668632, -0.008239, -0.637520, 1.968715, 0.809258, 1.002304, 0.056953, 0.215855, -0.626684, -1.733515, -0.024491, -1.386338, 3.167961, 0.568686, 1.992621, -0.684541, -2.265276, -4.273585, 3.601405, 0.195045, 1.275817, -1.411008, -1.897714, -1.553356, 0.561319, -1.729886, -0.169032, -2.529392, -1.037613, 3.703908, 3.448970, -1.749579, -2.396593, 0.606615, -1.292753, 0.056893, -1.645130, 1.672513, 0.194815, 0.816912, 1.116137, 1.635205, -0.354506, 0.295139, -1.623365, 1.817265, -0.269048, 1.538462, -1.011906, 1.269872, 3.067373, 0.211793, -0.732102, -0.391167, -2.233507, -2.231629, -2.095895, 0.727035, 1.411009, -0.877170, 0.340414, -0.075507, 0.745245, -1.728194, -0.083872, 3.342732, 3.725381, -0.929764, -0.378220, 0.475852, 0.933637, 0.376741, -0.074854, 0.588735, -1.907476, 2.541552, -0.915148, 1.144570, 1.298011, -1.079804, 0.938594, -0.981594, -1.589298, -0.491617, 0.186467, 0.123616, -2.508697, -1.810076, -1.044597, 1.582594, 0.258120, -0.006478, -0.524830, -1.418215, -2.215704, 0.407240, 1.460952, -1.709083, -1.259769, -1.154309, 1.705392, -0.556009, 1.421965, -0.456303, -2.493070, 0.633029, -0.641055, -0.343872, 1.294190, 2.638387, -0.840192, -0.314008, 11.737316, -1.054496, -0.697600, 0.080303, 0.745963, -0.622276, -1.977137, -1.301768, 0.361449, -1.011482, 0.635370, -2.172765, 1.191688, 1.330068, -3.170839, 0.580865, 1.834052, 4.704100, 3.587384, -3.430662, 2.697701, -0.127231, -1.113158, -1.443183, -41.022354, -0.110150, -1.822315, -0.207086, -0.767085, 1.362608, 0.168367, 2.363555, -0.680236, -0.087632, 1.561876, 1.680736, 3.146271, 1.144814, -0.160254, 1.950765, -1.504552, -0.332065, -0.360760, 1.558014, 0.636103, 0.785471, -1.704202, 0.857587, 1.007262, 1.093875, 2.384038, -3.869771, 0.113459, -0.496516, 1.827181, -1.552594, -2.527205, 0.675593, 0.022145, 1.097947, 0.381638, 1.416903, -1.212677, -0.577768, -1.223361, -0.348717, -0.045128, 0.010273, -1.609390, -1.338410, -1.802680, 0.713390, 1.108162, -0.479905, -2.831465, 0.522394, -0.296082, 2.357434, 2.456294, -1.470178, -0.920917, -2.398948, -0.204510, -1.523816, 0.510649, -0.536751, 1.747033, -1.597472, -0.743485, 0.238079, -1.569961, 1.913989, 1.672282, 2.897475, 0.532682, -2.069995, -2.510436, 0.142607, 0.483538, 0.606211, -0.185770, 0.913036, -0.824144, -2.868243, -1.664191, -0.130939, -1.009496, -2.834906, -2.953358, 1.251532, -2.528788, 0.715784, 0.619456, 1.275110, -0.968184, 0.420924, 0.751423, -0.012198, -3.663082, -0.932058, 2.118438, -0.064653, -0.722701, -0.739168, -0.247635, -0.043738, -0.452323, 3.432029, -0.554806, 2.927828, -0.212855, 0.003955, -0.357271, -2.083921, -0.759885, 1.128178, 0.407497, -0.346585, 0.254764, -0.036644, 1.292589, 0.889476, 4.094336, -1.213452, -0.292327, 0.835652, -1.123920, -1.357339, 0.583533, -0.212889, -2.109420, -2.039322, -2.049470, 1.393434, 0.227105, -1.943285, -1.751864, 0.368406, -0.076198, -0.553293, 0.431516, 1.632055, -2.800219, 0.425088, -0.216394, -0.355467, 3.298864, -1.703126, -0.529324, -3.259636, -0.005124, 2.216942, 0.056490, 1.522583, 0.341275, 0.279314, -0.579731, 2.031629, -1.494830, 1.357635, -0.870218, 0.445755, 1.674716, 0.256306, -0.997950, 1.777514, 2.048767, 0.416811, 4.965404, 0.141465, 0.773394, 1.545753, 0.027247, -3.331308, 0.706755, -2.109440, -1.031737, 0.457077, -0.085427, -0.124898, 2.836118, 0.668133, -0.377359, 0.098304, 0.442726, 0.469875, 2.438758, -0.113918, -0.708185, 0.850951, -0.269033, 1.265060, 1.252891, -0.723365, -0.106239, -0.572127, -1.127482, 0.805131, 0.789896, -1.664021, -0.853497, -1.080191, -1.777647, -1.330180, 0.512299, -1.983276, 0.702110, -7.340586, -2.208733, -3.390751, 0.570193, -0.615102, 1.125478, 1.215835, 0.822542, 0.171175, -0.069884, -0.123099, 1.784375, -2.423002, -0.737408, 0.343006, -0.787060, 1.550688, -1.225983, -4.489320, -0.243526, -1.443461, 0.465390, 1.505774, 1.369661, -1.840881, 5.110126, 2.507883, -0.404607, 0.081059, 0.555840, -1.737800, -0.521636, 0.646257, -0.794755, 1.622429, -1.143865, 0.247397, -3.387873, -1.999178, -0.475409, 0.254099, -1.216121, 0.947898, -0.436287, 0.588959, 3.871037, -2.230380, -1.394659, 0.590486, -1.651382, -2.237124, -3.214393, 0.829730, -2.667794, -1.414842, -2.266326, -0.213557, 3.285220, 0.244696, 1.276757, -1.010511, 0.954373, 2.183401, 0.428658, 0.591693, 0.545552, -0.059087, 1.103354, 1.915429, 2.638312, 0.722118, 0.093238, 0.864807, -0.179161, 2.299291, -4.168321, -0.407841, -2.142166, -0.239048, 2.303017, -1.151473, -0.927492, -0.527071, -0.511980, -0.261069, -0.298833, 1.963749, -0.033439, -1.881962, -0.522094, -2.649604, 1.647931, 0.776876, 0.432121, -0.191135, -2.145623, -1.231426, -0.372664, -0.452278, 1.274758, 0.170175, 1.026496, 0.073504, 0.640993, -1.226367, 0.783692, -0.448901, 1.416342, -0.930619, -0.322302, -0.675186, 1.486036, -2.058913, 1.081755, 1.013078, -0.047287, -0.117357, 0.994664, 0.758084, -0.193374, 0.876904, 0.891312, 1.532211, -0.034118, 0.127642, -0.266024, -0.440258, 0.074581, 1.515373, -9.780887, 0.753208, 0.330636, 2.945389, -0.220795, 0.140223, -0.131821, -1.725950, -2.171350, -0.204008, 0.595772, -0.116645, 1.457196, 3.947017, -0.784874, -0.888277, -1.782836, 0.817804, -0.192799, 4.299161, -7.505760, 1.463305, -0.106789, 1.174378, -0.811028, 2.220318, -0.583385, -1.241430, -1.802632, -0.958205, 2.339732, 2.392081, 0.028450, 0.596011, -1.068670, -0.249349, -2.410244, -0.316100, 3.512356, 1.815074, -2.563461, -1.023207, -1.255088, 0.645512, 0.079494, -0.294559, -0.094625, 3.387850, 0.226355, -2.717346, 0.559185, 1.418335, 0.593394, -1.490641, -0.128680, 0.076089, -1.944839, -1.451210, 2.537951, 0.006042, 0.122956, 1.893836, -0.406169, 0.839640, -0.788404, 4.068511, -0.677647, 1.193237, 1.380761, -1.895364, 1.780263, -0.083210, -0.052489, -2.717657, 0.885126, 0.945189, 0.714716, -0.331114, -0.276344, -3.294456, -1.361389, -1.806947, 0.547034, 0.398358, 2.003053, 0.901725, 0.410779, -0.864764, -1.618749, -1.349252, -0.911480, 2.053375, -1.349382, 0.849684, 1.225166, -0.703413, 1.470940, -1.646121, 1.467508, 1.322925, 1.738584, -2.498531, -1.925045, -0.384096, -0.101580, -2.523852, 0.767522, 0.719983, 1.575168, -0.290012, 1.028273, 1.360790, -1.643553, 0.725088, -3.634740, -0.672812, -1.429943, -0.466053, -1.564547, 2.244541, -0.990287, 0.477694, 0.142603, -1.236258, -0.260318, 0.138124, 0.848498, 0.986988, 1.307112, 0.753924, -0.791700, 0.239069, 1.626977, 0.944337, 2.356667, 4.252893, 1.440436, -0.834279, -3.924565, 1.486321, 1.781534, 1.588995, -2.617434, -1.426156, -1.792942, -0.477611, -0.760941, 2.425961, 1.197546, 4.233758, -2.818418, -0.567543, 1.363195, 0.341048, -2.289856, 0.309621, -0.637264, 0.347269, -0.461381, 2.523387, -1.344993, 0.216397, -10.708355, 0.919107, -2.543254, 1.904163, -0.058510, 2.088098, 0.810954, -0.385477, -1.210636, 0.094202, 0.535237, -1.502995, 0.344693, -1.197936, -1.386554, -0.128568, 1.160851, 2.858701, 1.907802, 1.539349, 2.433446, 2.448377, 2.303145, 4.565366, 2.033096, -2.155319, -0.801175, 0.520414, 1.972140, -2.310103, 0.173755, 0.974195, -1.724003, -1.241399, -2.017481, -2.318946, 0.835495, -1.525946, 0.359016, -2.165900, 0.091703, 4.673479, 1.606368, 0.459343, -0.392127, -1.453846, -0.353931, -2.310848, 1.236771, -0.827690, -1.652173, 8.877085, 2.143196, -1.679855, 0.654059, 2.409938, 0.361839, -1.841513, 0.169567, -0.140878, -0.171590, 1.312745, -0.134062, 0.724259, 2.047288, -0.841137, 1.260102, 1.002513, -0.647772, -5.369482, 5.233755, 0.599639, 1.172586, -1.073408, 0.885488, -1.003686, -3.339315, -0.038161, 0.559816, -0.626176, -1.193738, 8.828257, -1.190498, 0.449845, 1.863093, 0.556650, 1.450109, -0.126581, 0.105580, 0.397996, 0.313131, 0.914442, 0.404302, -3.006561, -1.363588, -0.628297, 0.217007, -2.647120, 2.862575, -8.684146, -0.418185, 1.437103, 0.828107, 0.458347, -0.435039, 1.646789, 0.926643, 2.910391, 0.709955, 0.771045, 0.037429, -4.088374, 0.162264, -3.077456, 1.285309, 1.316735, 1.387373, -1.066935, -0.645049, 1.368517, -1.300493, 1.187293, -0.031566, -0.225020, 0.646678, -0.172955, 3.641774, 0.928097, -1.952956, 0.098479, 0.563732, 2.789780, 1.441335, 2.300636, 1.045073, -1.739837, -0.522630, -0.936236, -0.113540, -0.295716, 0.952094, -12.808439, 0.464352, 1.135275, -1.872086, 0.042147, -3.117124, -0.354251, 2.127711, 0.385427, 1.285458, 0.280779, 1.432706, 3.229187, -0.091171, -2.339383, 2.241873, 0.316786, -2.255201, -0.556684, 2.200058, -0.417242, -1.281321, -0.334675, -0.578597, -1.088588, 2.267492, -12.715529, -0.348637, 1.471534, -1.676870, 1.577533, 0.676559, 0.080321, -1.086842, 0.430531, 0.437493, -2.491856, -1.025787, -5.674278, 0.392208, -4.118344, 1.785830, 3.346591, 0.304010, -2.162539, -1.001513, 0.018220, -2.174213, 0.871597, -0.414440, 0.716925, 0.457252, -1.066866, -1.192133, -1.134685, -0.413272, -0.989214, -0.402608, 0.400279, 2.370824, 0.565737, -1.827672, 0.184565, 1.494704, 1.196620, 1.353731, -1.431783, -0.185922, -0.168908, -0.945395, -1.528083, 0.495618, 1.339592, -0.752455, -0.017693, -1.226821, -1.587509, -1.819557, 0.250778, -0.129144, -0.049336, -0.556312, 1.388641, 5.209940, 7.888215, 2.105105, -4.130414, -1.113280, 0.696917, -1.569371, 1.314536, -1.086163, 1.195435, -0.062427, 1.109358, 2.636901, 0.217930, 0.296666, -1.974165, -1.735777, -2.618426, 1.400363, -0.096162, 0.028053, 2.971062, 0.302502, -1.890169, 0.857939, -2.612601, 1.933837, -2.467517, 1.603533, 1.537552, 0.085175, -2.052856, 0.524604, 0.883950, 0.739990, 1.870276, 1.625467, -4.919993, 1.174270, -2.426991, 1.683943, 2.972154, -1.803723, 1.008075, 0.248989, -0.385458, -0.196188, 1.270961, -0.229944, -3.168777, 1.614013, 1.595189, -0.410707, -1.044544, 0.778994, 0.653459, 0.350870, 4.649518, -1.140979, 0.838352, 1.230573, 2.527621, 1.062342, -0.298138, 0.888464, 0.313968, 1.429981, -1.374527, -0.592750, -1.111212, 0.250075, -1.495723, -0.555394, 1.749684, 1.169427, 0.184614, 0.222946, -2.256650, -1.231119, 1.744124, 2.778740, -0.821602, 0.101260, 1.169010, 0.798608, 0.031937, 0.170795, -7.833639, -0.522136, -0.191751, -0.644957, 1.360851, -0.476764, 0.153982, 1.444253, -0.697542, -1.839324, 1.011768, -1.918130, 1.279057, -0.911504, 1.704320, 1.411318, 0.101799, -1.732975, 1.152074, 1.164443, -0.210665, -0.760696, 0.550097, 0.398409, 1.169000, 4.403631, 0.044010, 0.429579, 0.020382, 1.313668, 0.072535, -0.443568, -0.970095, 0.235293, 3.075127, -0.917624, -0.191897, 0.649122, 0.604821, -2.162972, 1.809951, -0.566550, -0.368535, 0.561067, -1.963957, 0.591505, -1.989305, 2.010246, 1.025328, 1.118531, 0.765658, 1.132761, 0.590744, 0.309546, -0.072684, 0.927601, 0.402006, -0.279634, 3.336041, 0.363340, -0.084176, -0.376793, -0.792103, -0.910649, 0.842618, 0.704083, 1.336435, 0.633091, 1.232460, -0.126867, 1.860313, -0.582771, 2.027243, -0.734689, 0.396841, -4.301981, -2.570962, -2.346615, -0.294627, -9.963593, -0.950176, -0.416823, 0.185868, -0.575314, -0.248928, 0.115231, -0.267261, -0.893238, -0.038151, -1.312479, -0.859603, -0.981597, 0.905031, -1.797287, 1.575514, -0.293734, -2.374883, -2.280471, -0.114908, -8.689425, -3.053759, -0.254290, -1.284394, -2.571275, -0.515252, 1.703866, 0.979483, -1.641806, 0.677989, 0.632244, -0.935906, -0.334838, -0.395663, -1.000913, -1.619586, -0.240378, -0.943641, 2.728803, -0.003069, 1.764210, -1.329910, 2.901473, -0.663974, -2.739002, -0.557714, -1.467272, 0.430610, -2.140990, -1.018700, -8.117669, 2.187021, 1.585709, 0.303729, 2.666512, -0.322125, -0.510872, -2.895965, 0.332371, -0.563060, -4.857492, -0.213120, 0.974745, -0.822440, 1.557947, -4.240340, -2.603575, -0.108165, -1.109751, 2.159279, -3.169286, -0.512767, -0.863623, -0.091780, -1.966987, 2.861250, 0.022738, 1.359011, 0.319737, 1.852149, -0.047252, -0.426285, -0.759734, 1.233245, 1.222208, -0.428217, -1.377964, -0.014197, -1.666247, -0.693576, -2.364216, -2.303179, -1.875806, -2.193077, -2.161515, 0.730956, 0.106795, -0.440026, 0.882222, 1.271376, 0.223913, 0.026457, 0.875005, -3.332191, 0.711084, 1.622856, -1.125061, -0.091555, 0.591242, -1.053302, -0.374932, -0.451309, 0.116873, 0.916229, -1.526904, 1.396491, -4.383001, 0.277899, -0.744718, 3.206128, -0.688903, -1.531305, 3.416818, 2.721693, 2.085379, 3.218796, -6.358753, 1.035356, -2.443428, -1.629758, -0.956840, -2.862966, 1.097265, -0.132868, -1.223482, -0.695732, 0.078407, -1.925692, -1.591343, -0.446446, -0.413490, -3.946516, 0.004555, -0.718744, 0.671976, 0.724541, 0.277439, -1.528037, 0.149476, 1.957371, 0.107017, 1.056521, -0.852286, -1.079987, 1.865555, 1.076413, 0.002297, 2.019732, -3.465175, -1.121418, -0.474052, -1.834379, 0.894442, 0.671292, 1.058087, -0.456843, 1.975728, 1.927830, 0.147125, -1.154134, 0.253917, 3.004951, 0.158338, 0.203460, 0.986412, 0.876946, 3.303209, 0.924066, 2.434523, 1.368330, -1.493254, 0.657588, -2.332864, -0.716405, -1.623935, 0.734781, 2.475377, -3.862651, 0.639123, -1.024320, -2.099458, -1.505555, -2.106091, 0.105197, -1.276832, -1.604650, 11.007366, 16.257780, 1.212517, 0.889604, 3.437125, -1.665995, -0.542497, -0.793582, 0.072068, 0.891223, -1.907271, 1.315802, 0.976274, -2.103378, 0.598498, 1.317193, 2.073358, -5.785201, 0.120337, -0.128886, -0.625547, 1.823134, -0.627097, -0.074800, 0.489213, 0.000787, -0.695088, -0.151693, -1.164222, -0.719642, -4.420443, -1.641346, 0.223747, -4.239794, -2.342813, -0.701424, -0.777337, -0.055989, 2.989524, 1.142629, -1.108115, 1.921261, 2.104734, 0.713200, -1.836161, -0.769459, -0.096665, -1.405661, 1.133891, 0.677240, -0.079669, -0.786968, 0.757151, -1.115593, 1.729968, 3.429117, 3.333342, 0.889537, 1.064027, 2.452963, 0.146189, 1.487560, 0.159354, -1.003925, 3.638438, -1.171568, 0.858463, 1.559678, -1.309983, 0.294997, -1.911492, -0.658933, -3.117077, -1.047560, 0.714687, -2.235785, -0.924417, 1.562038, 1.057431, -0.458399, -0.513814, -0.561772, -1.739037, 1.467458, 0.620015, -0.726114, 0.533329, -0.823658, 0.602171, -4.322502, 0.547450, -0.053952, 5.291243, 0.374018, 0.543503, 0.658229, -1.971978, -0.861369, 0.358919, 0.152244, 0.556775, -2.041901, 0.755251, -0.084016, 2.247265, -1.645395, -0.975744, -0.170778, 2.687211, 0.454293, -0.637791, -0.689573, 2.783953, -0.462319, 1.623681, -0.080127, -2.483746, 0.395303, 2.702187, 0.863832, -0.829897, 1.051659, -0.179475, 1.012557, -3.725295, -2.425763, 1.506878, 0.261926, -0.952743, 1.053141, -0.772923, -0.683897, 3.952535, 2.515576, -1.145893, -1.876673, 1.160748, 0.543679, 0.466676, -0.385127, 1.240535, -0.393820, -2.291663, 0.888950, -1.278874, 0.038750, -0.752375, 2.060377, -0.336541, -1.480818, -1.426695, -1.427118, 2.019039, -2.795073, 4.602587, -0.728483, 0.066261, 0.140672, 0.995434, 6.288233, -0.336479, -1.012862, -0.521627, 2.346851, 1.099883, -1.747922, 0.289940, -2.412572, -0.726209, 1.113508, 1.037497, -0.935774, 1.114324, 1.137784, -0.378494, -0.369090, -0.495506, 0.839105, -4.885697, 2.921585, -0.534774, 2.706858, -2.904579, -3.026774, 1.074224, 0.988017, -1.126216, -2.458224, -0.514051, 0.257682, 1.672144, -3.153304, -0.512526, -1.063563, 0.611227, -0.169314, 0.288846, 0.492560, 0.557903, 1.448651, 1.216152, 1.514556, 0.348303, -1.505949, -0.923314, 3.453034, 1.904600, -0.675914, -0.474720, -0.985341, -0.153247, 1.354074, 14.742016, 0.398167, 2.527965, 1.902573, 0.569317, 0.713961, -0.157248, 0.583093, 1.446733, -0.671570, 3.754446, -1.230091, 2.326427, -1.630548, 1.877837, 0.963890, 2.939709, -0.352764, -2.149770, 0.465506, -0.063179, -1.710148, 0.230100, -0.749501, -1.599947, 0.353103, -1.376222, -3.326641, -0.228345, 0.709135, 0.279200, -0.913855, -1.260106, -1.632902, -0.528416, 0.245233, 1.025672, -1.362333, -1.633941, -0.171049, 0.478239, 2.395704, 1.798306, 0.518881, 2.364272, -0.769217, 2.540560, 1.193590, 2.762551, 1.171583, -0.288009, 3.315905, 0.178900, -0.414532, 1.629692, 3.644429, 0.047435, -0.409813, 1.277344, 1.235892, -0.370595, -1.994537, -1.594649, -2.062027, 4.117460, -1.693915, 0.134951, -0.276196, 1.733694, -0.138643, 0.993175, 0.659948, -1.959156, -0.568687, -0.549599, 1.432800, -1.232484, -3.082007, -0.631581, -2.420118, 2.023217, 1.324583, 0.041360, 3.613342, -4.568541, 0.285068, 0.292985, -0.218380, 3.284291, 1.405751, -0.301350, -1.727242, -1.090432, 2.118229, 0.914769, 0.380845, 0.296591, 0.511121, -0.837049, -0.388810, -0.239591, -4.444277, 4.205221, -0.768113, -0.578623, -1.128701, 1.552697, 0.367937, -0.099581, -1.281450, -0.908604, -0.632442, 13.450798, -2.382877, -3.409620, -1.395153, -0.904329, -0.477906, 2.242418, 1.626651, 1.743318, 0.201355, -1.874433, 1.069358, -1.122438, -0.513217, 0.798678, -2.774002, -3.890982, 1.194817, 0.417884, -2.555126, -1.121142, -1.795019, -0.905862, 0.113841, 0.568253, 0.533732, 0.223853, -0.951292, 0.625884, -0.039080, 0.570316, 1.236212, 0.025467, -1.700714, 5.611750, 1.285293, 0.344259, 0.667707, -0.425748, 0.564495, -1.901882, 1.431199, -1.215952, 1.253814, -0.354065, 0.312732, -3.331754, -1.358605, -3.347685, -1.173771, 2.645103, -2.667670, -1.189343, 0.628767, 0.290056, -1.889051, 1.207483, -0.013234, -1.082175, -0.463480, 1.240325, -0.788110, 3.318880, 1.457310, -1.047825, 0.244308, -1.829554, 3.589651, -0.124967, 2.177041, -1.269532, 0.687182, 0.477322, -0.286502, 2.742045, -1.479311, -0.366762, 0.130173, -3.005942, -4.997714, -1.074178, -1.553302, 2.917926, 0.381329, -1.468071, -1.214693, 0.776294, 0.101943, 2.781591, -0.340745, -0.709129, 1.041831, 0.696277, 0.774845, 2.691426, 0.668740, -0.311207, 1.233782, -1.170120, -0.034383, -1.132921, -1.765879, 0.484065, 0.475109, 0.550853, 0.381090, 0.574175, 0.871582, 2.628418, 1.365183, 1.224013, -3.376759, 1.086175, -0.021419, -2.019457, 0.234232, -3.502301, 1.270517, 4.130678, 1.725621, -2.442235, -10.042397, -0.838784, 0.022949, 2.967072, 0.118950, 2.288779, 1.842968, 2.072146, -0.317232, -1.301560, 0.340098, 0.647872, -0.179999, 0.620119, -0.987134, 1.012957, -0.834723, 0.834885, 0.751951, 1.262253, -1.385338, -1.551879, -1.337877, -1.756028, 0.510630, -2.394951, -0.205486, 1.575394, -0.480835, -0.409149, -0.437463, -2.282324, -1.881278, 1.116361, 1.136089, 24.378939, -0.393524, -3.075753, 1.290074, 1.087091, -2.154333, 0.970394, -1.926258, 1.618542, 0.412278, -1.739195, 1.623174, 1.373538, -0.979996, 0.275235, 0.773335, -0.732338, -2.702239, 0.798534, -1.287799, 35.395630, -0.367900, -1.554014, -3.089915, -0.288484, -2.492246, 1.115393, -1.127128, -3.936405, -0.125779, 0.485530, 0.389982, -1.279955, -1.730957, -0.593967, 0.948370, -2.064061, -0.272153, 1.658313, -1.792256, 1.410611, 1.607257, -0.524023, -1.193940, -0.477432, -0.203510, -5.396678, 0.878312, -0.600852, -0.958319, -1.770715, 2.374568, -0.837991, 0.792972, 1.333605, -2.388574, -0.201241, 0.498677, 0.179003, -1.049678, -1.267674, 0.086085, 1.527040, -0.410888, 0.113187, -0.560847, 0.438254, -0.419042, -8.495057, 1.416575, 0.312171, -4.181562, -3.007250, 0.894191, 0.282944, -0.465586, -1.058151, -0.204914, -0.380061, -2.493015, -0.319261, -2.098388, -2.529561, -2.387559, 1.457654, 2.064481, -0.206003, 0.331642, -0.909741, -0.725373, -1.512754, 0.902448, 1.214116, 0.187296, 0.355552, -1.346207, 3.032812, -0.008650, 0.665337, 0.523351, 2.378387, -3.201352, 1.975095, -0.343192, -0.887129, 0.839616, 2.507690, 0.034270, -0.425381, 0.244614, -1.063135, -0.416553, 0.151447, 0.544476, -0.904222, -1.981529, 0.008429, -1.530195, -0.380718, 2.639323, -1.974096, 2.537336, 0.128485, 0.057991, -1.839553, -2.247260, 0.850893, -0.609513, -0.073828, -6.912158, -0.139270, 0.179913, -1.241016, 0.320185, 1.688670, 2.298871, -0.673911, 1.046304, -2.560003, 2.457667, -1.773535, -0.873110, 1.303595, -1.350625, -2.650466, 1.821359, -0.091552, -1.048395, 4.371029, -1.531572, -3.530663, -7.938312, 0.371839, -3.025643, -1.249872, 2.221552, 3.361130, -0.400779, 1.653993, 1.089241, -0.370755, 1.477701, -0.303671, -0.078472, 1.358668, -0.792539, -1.049296, 0.496935, 0.733483, 1.849233, -1.298069, 1.658483, 1.070524, 1.064211, 2.341386, 2.022804, -0.712600, -0.828958, -4.590330, -2.193731, -1.187169, -0.390252, -1.434384, 0.475188, 0.472390, 1.016687, 0.816242, -2.084652, -0.264609, 2.821970, 0.642034, 0.144703, -0.085207, 3.882366, -0.335585, 2.945193, -8.780211, -1.788703, -0.816980, -0.324785, -0.251749, 0.550231, 1.536315, -0.976531, -0.001636, 0.025487, 2.723643, -1.050987, 1.859178, 1.747509, 0.632397, 0.674326, 1.942476, 0.170618, 0.628320, -2.931181, 1.509731, 0.052616, 0.396503, 2.053801, 0.786840, -1.765508, -2.049108, 1.391213, -1.846742, 0.302443, -0.235106, -4.113284, 2.388442, -4.504088, 1.407906, -0.792122, 0.238252, 0.770481, -2.253059, -0.076944, -2.216919, -1.822923, 1.290645, 1.323500, -1.547410, 1.743029, -1.069493, -0.496441, 0.411108, 0.256616, 1.004339, -0.964894, 1.061500, -0.336986, 0.609277, 1.396947, 0.389251, -0.800786, 2.296143, -0.148887, 1.665507, -1.662055, -0.582016, -2.904270, -1.138959, -1.115410, 0.504910, -0.440490, -1.917381, 1.905744, 2.691540, 0.668207, -1.137727, 1.715427, 2.627678, -0.848056, -2.206196, -0.485603, -0.104143, -1.581868, -3.105368, -0.136548, -3.890651, 2.893072, 1.311447, 1.207675, -0.110239, -0.015520, 3.073158, 0.722297, -0.317380, -1.639348, 2.564957, 0.707945, -2.089616, -1.077968, -1.993640, -0.184228, 2.603096, 0.495441, -0.690588, -1.996336, -0.615599, 1.252049, -1.305657, 2.258763, -0.367589, 0.744874, -3.983390, 0.641868, 0.682344, 1.534273, -0.078887, -0.638862, -0.436887, 1.282581, -0.474767, 0.933970, -0.562142, -1.196221, 0.620703, -1.794334, -0.201897, -0.273618, 0.759434, -4.578209, 1.045878, -0.396665, -1.393743, -0.258993, 0.909860, 0.065080, 2.534648, -0.621033, -2.463706, -1.267582, -0.949879, 0.684556, -3.153200, -1.322336, -0.846883, 0.756270, -1.246623, 1.325826, 0.269144, 0.655697, 1.508641, 0.955546, -4.049324, 1.236385, -2.208986, -2.164684, 0.483166, -1.556875, -2.399807, -0.071894, -0.598155, -1.504630, 0.909837, 0.441980, -0.142267, 3.186562, -9.105115, -0.706504, -0.904092, -1.254219, 1.707472, -0.484811, 0.243699, -1.906812, 0.557756, 0.399335, -0.668094, 1.150291, -33.314419, -4.579463, -0.827204, -2.219878, 0.864965, 0.843359, -3.120395, -3.499207, -1.056821, 2.018512, 1.058076, -2.007281, -1.928121, -3.263878, -0.079084, -1.419108, 0.705255, -2.721349, -0.210468, 1.977742, 0.119329, -3.372694, -1.065624, 0.044773, 0.949414, 1.982919, -2.992223, 0.043504, 0.458767, 2.387087, 1.143641, 2.626701, 1.635916, 1.130192, -1.146586, 2.295970, -0.108903, 1.978274, 0.249793, -1.822635, 1.072817, -1.037818, -1.654801, 0.506986, 0.223898, -0.801533, 0.471886, 0.821947, 0.165247, -1.029804, 1.522923, 1.681942, -34.283497, -1.443581, 3.120758, 0.109961, 1.252267, -1.838808, 4.105927, 1.430098, 0.795596, 2.285416, -0.350729, -0.183396, 2.008162, 2.535472, 1.442522, 0.067094, 1.726215, -0.465237, 0.228092, -0.898866, -0.351523, 0.943222, 2.762748, -0.150182, 0.072098, -3.666024, 0.861893, 1.339004, -4.193988, 0.934029, 1.222872, 1.534581, 0.536860, 0.175307, -4.649261, -0.155842, 0.486639, -2.415943, 4.921558, 0.074272, -0.523580, 9.426488, 1.450721, -0.273441, -0.685305, -0.208207, -0.141061, -0.689686, -0.430765, 1.203310, 0.457785, -0.636253, 1.884096, 0.180858, -0.601352, 1.059752, 1.353793, -1.144091, 1.012244, 0.111028, 1.282956, 0.539753, -2.136105, -0.362957, 1.343894, 1.246425, 0.270625, 0.846098, -1.814227, 0.723642, 0.896651, -0.492568, -0.483125, 1.335945, -1.528607, -12.522959, -2.514193, -0.385231, -0.627579, 0.507236, 1.104174, 0.487314, -0.776387, -0.105157, 2.839599, -0.512341, -1.799638, -1.330242, -0.425150, 0.598084, -9.454448, -0.575648, -1.355067, -1.314143, -3.041453, 0.646404, -0.381917, -0.618457, -0.122956, 1.836147, 0.686982, 1.346205, -0.397530, 0.177667, -0.312596, 0.959667, 0.490264, -0.229002, 2.652546, -0.523528, -0.295107, -0.722657, -0.770971, 0.501242, 2.509320, 0.498323, -2.765550, -0.476504, 2.484814, 1.173968, 0.066951, -0.033656, 1.939883, 0.595368, -0.492711, -0.485204, 0.524125, 2.012069, 1.902331, 1.441705, -1.873747, 8.485007, 0.809767, 2.354154, -1.817922, -0.857522, -1.486599, 0.853559, -3.121060, 1.469213, -0.247292, -0.377132, -1.203432, 1.732122, -0.968094, -2.430906, -0.646179, -0.096946, -1.891861, -1.449054, -1.289801, -0.931208, 3.503360, 0.109478, -2.145627, 1.445237, 0.036277, 0.486036, -1.857045, -0.748751, 0.455339, 0.367962, -2.402283, -0.665134, 2.883188, 0.057114, -2.703108, -1.443505, 0.250365, -0.242302, 3.324877, 0.508369, -0.850818, -1.103852, 0.660547, 3.891412, -0.431533, 0.720094, 0.351299, -1.011191, 2.850002, -2.083087, -1.732875, -0.878147, 0.754441, 1.108804, -1.122806, 0.565206, 0.396117, 3.356467, 0.028610, -1.452879, -1.373615, -0.454277, 0.141389, 3.266813, 12.898273, 1.677444, 0.586111, 1.705890, 1.566172, -2.538870, -2.231463, -1.102204, -2.527648, -1.085532, 0.478172, 0.187650, -6.529508, 0.846004, 2.000021, 0.900888, 1.543347, 1.928105, 0.956930, 1.169501, 2.499456, 0.512169, 1.320805, 0.813092, -0.862943, -0.914188, 1.019531, -1.543529, -3.052305, -0.000092, 0.458211, 1.184352, -0.189562, -0.504885, 0.651876, -2.231333, 0.150909, 2.522482, 1.546768, -1.469670, 0.283542, -0.038828, -0.221745, -0.613487, 0.986294, -2.087503, 1.868805, -0.862680, -2.028013, -1.342783, 2.996248, -0.964869, -0.889650, -1.940610, -0.491476, 4.659435, -0.629713, 0.880112, 0.013399, 1.543464, 1.811594, -1.919105, 0.579925, -0.054963, -0.611301, 1.213541, 0.044412, 2.428571, 1.650359, -0.011562, -3.940373, 0.219158, -0.250527, 2.196884, 2.333903, 2.026985, -2.534095, -1.620452, 1.754802, -2.421583, 0.130233, 1.375082, 1.599321, 1.592287, 1.072141, -1.522067, 0.396378, -1.969304, 1.184472, 1.064752, -0.051353, -0.429749, 3.536501, 1.289551, -1.872306, 0.962450, 0.012061, -0.633179, -5.554706, 3.344516, -1.520184, -0.216105, -1.681684, 4.008332, 2.174610, -0.961140, -0.686181, -1.402003, -0.401292, -0.713743, 3.171560, -0.512009, 0.219556, 0.559843, -0.798941, -2.584601, 1.708179, -1.446687, 3.116506, 0.701865, 0.474630, 0.662607, -0.341657, 3.770340, -1.970125, 0.079163, -0.033681, 2.390205, -0.802647, -0.419331, -0.633927, 0.158110, -1.025442, 0.967359, -0.777828, 0.594151, -0.833795, -0.444425, -1.413129, -0.685053, -0.072876, -0.182840, 0.716580, 2.238798, -0.586169, 1.660746, -1.904589, 4.398918, -1.573961, 0.223843, -2.490864, 1.426156, -1.309565, 0.297844, -0.122553, -4.125076, -1.175787, -0.808162, 3.899071, -3.727594, -1.969113, -1.416097, 0.433778, 0.566248, 2.189430, 13.170939, -0.437235, 1.563687, -1.015102, -10.265989, 0.488794, -1.776708, 0.143081, -0.918150, -1.271382, 4.251751, 2.227284, -0.468386, -0.818391, -1.076629, 0.803174, -6.778745, -2.332751, 3.314303, -0.854069, 2.525487, -0.036530, 0.712685, -2.247428, 1.711706, -0.839512, 2.300299, -0.371730, -0.143227, -1.000555, 2.392848, 3.181103, 1.384507, 0.174168, 0.332910, -0.797669, -1.976347, -0.308509, -1.638045, -0.427884, -1.578577, 1.571453, -1.381518, -0.068900, -0.008149, -0.877026, 0.584573, 0.371052, -0.273352, -0.496754, 0.173186, 1.495046, -2.134991, -1.174339, -2.233019, -1.859445, -0.982453, 1.005392, -3.032267, 1.807362, -1.046106, 1.126163, 1.836564, 1.041053, -0.354948, -2.419614, -1.992808, 1.194339, -2.727120, -2.960786, 1.990473, -0.249863, -2.641395, 2.517450, 1.227859, -0.836136, -0.104000, 1.062187, -1.290700, 1.327066, -0.019623, 5.412015, 0.280590, 2.486149, 0.634194, 0.961871, -1.225696, 2.310711, 0.309103, -1.714766, -0.548396, -0.683925, -3.823319, 1.304894, 1.286261, 0.745414, 3.101287, 0.891395, 1.379889, 1.123019, 1.053005, 2.294336, 1.014520, -2.056264, 0.847806, 1.838467, 0.661211, 0.911672, 2.108672, -1.296724, -0.994294, 2.204733, 0.060958, -3.965935, -0.375877, 4.837624, 1.608993, 0.728340, 0.086287, -0.533132, 0.689582, -0.234022, -0.732648, 1.564658, 1.145785, 1.684504, -0.951721, -2.480582, 0.639165, -0.163595, 0.932444, -0.321780, -1.511633, -0.700274, -2.130924, -0.589078, 2.558939, -0.031520, -0.466372, -0.661476, -0.310624, 0.919263, 2.138045, -2.980811, -1.367038, 1.232296, 0.824462, -1.153319, -1.915287, -0.933534, 0.126949, -0.378158, 0.226273, -0.199483, 4.345228, 1.491282, -15.042450, -0.682710, 0.315321, 0.360537, 0.098894, -1.003842, -1.970495, 0.370964, 0.917547, -2.802694, -0.426734, -0.872954, -0.628911, 0.498273, -1.146430, -0.303363, 0.423223, -1.333830, 3.313324, -0.368433, -0.129785, -1.392973, 0.117655, 0.907470, 0.862268, 30.468317, 1.916252, 0.630351, -2.087536, 2.504394, 1.090119, -1.520968, -0.478656, -0.055788, -1.631508, -0.471805, 0.263214, 1.737623, -2.067608, 0.341913, -0.636885, -1.703791, -0.276518, -1.013657, 0.735331, 0.755858, -7.211546, -2.701548, -1.511194, 0.885756, 1.038019, -0.747457, -1.262162, -2.229699, 0.619854, -0.506964, -2.198322, 1.772692, 0.917558, -0.345676, 0.773990, 0.077003, 0.222814, 0.570620, 13.318283, 5.154265, -0.133818, 1.382821, -3.381096, -1.348515, 1.883829, 1.128500, 1.431208, -2.484697, 2.832257, 2.581187, -0.643860, -0.449537, 2.258231, -0.865092, -2.880285, -4.159235, 0.895552, -0.865830, 0.576851, 0.660565, -0.503361, 2.477618, 0.888527, 0.642267, -0.203590, -0.203652, 0.518252, -0.481242, -1.399775, 0.071838, -1.687822, 1.408637, -1.714611, -1.262840, 0.550977, 1.361458, 1.093706, 0.218738, 1.694335, -0.816886, -1.712049, -1.776350, 0.478118, 0.873915, 0.157106, -6.387165, 0.410236, 2.402042, -1.496522, 0.605822, -1.822789, -1.357874, 0.902568, 0.476761, -0.997130, -0.898986, -0.416213, 0.628011, -0.191016, -2.507825, 2.000534, -1.100833, 1.287321, -0.746681, 0.251129, -0.452919, -2.379659, 0.467141, 2.813297, 3.019051, 0.894045, 0.513003, 0.247807, 2.164137, -0.861424, -1.187832, 1.431251, -1.880267, -2.707241, 0.882622, -1.083287, -2.503087, -0.331748, -0.253308, 1.218072, 0.465451, 2.239259, 0.033480, -0.988318, -1.066254, 1.289019, 1.244425, 1.395825, -2.000483, 8.393459, 2.063885, 0.351303, 1.736136, 1.678012, 0.466673, -0.735065, 2.319815, 0.587236, -0.219373, 4.404061, 0.069035, -0.615926, -1.054781, -0.281119, -2.315298, -0.598869, -1.699938, 0.399952, 1.414117, 3.159378, 0.971840, 1.468741, 0.738671, -1.217917, -0.005656, -1.837169, -1.033584, 1.689942, 0.296139, -0.159082, -0.282257, 1.146659, 0.589294, 1.239523, 0.584590, 0.732567, 1.415604, 0.229542, -1.803726, 1.402160, -2.028142, 1.227429, -1.287164, 0.215315, 0.091171, -0.837675, -1.208822, -0.082121, -0.389508, -0.755331, -1.751180, -0.248557, -1.661491, 0.068512, 2.337994, 1.096209, 2.914422, 1.787869, 3.141023, -3.783829, 1.704273, 1.094445, 0.711651, -0.020473, -0.531446, -0.418532, -0.951771, -1.334428, 3.076059, -8.316907, 0.220659, -0.314838, -1.326944, 0.409516, 8.980949, 0.336135, -0.271100, 0.718912, -0.735141, 2.867171, 0.454470, -1.684832, -0.667039, 30.702013, 0.883889, 0.531766, -0.452834, -1.168136, -1.349033, 1.579897, -9.245929, 3.323505, 0.975022, 1.259668, 1.623177, 1.048897, 0.252429, 0.494380, -1.923661, 0.298914, -1.570870, -2.745278, -1.792378, 0.748294, 5.594098, -1.439187, -1.536032, 2.820908, -0.333814, -0.420440, 2.032806, -1.904369, -0.007114, -0.871720, 0.579277, 0.640428, -0.765459, 0.173253, 0.786739, -0.283481, 0.956241, -1.522335, -3.105874, -2.173901, -0.282985, -1.197513, -2.059102, -1.084585, -0.648405, -0.228381, -0.374229, 0.766084, -2.314189, 0.978999, -0.764588, -0.302045, -1.880411, -0.740701, 1.435884, 0.545858, 1.537653, 1.470700, 0.422056, 0.317391, 2.463825, 0.103666, 1.313960, 1.550173, 1.734758, 2.650702, 0.980899, -4.777202, -0.605416, -1.772424, -1.299403, 1.382249, -2.957427, 1.906892, -0.161418, 0.556454, 1.740305, 0.006908, 6.763729, -0.278677, -1.766817, 0.121939, 1.601009, -0.562171, 1.424215, 0.542079, -0.740449, 0.396567, -1.856834, -1.074328, -1.226289, -0.696100, 0.464042, 1.506954, 0.080288, -2.100569, 0.921613, 0.558173, 2.382897, -2.477536, -1.884583, -0.054904, -0.519191, -0.969873, 0.959781, 0.231381, 1.963495, -0.388346, 0.184281, -0.207316, -1.240958, 0.680580, -0.335134, -0.166712, 2.305028, -0.148513, 5.842828, 1.085152, 0.373194, -1.860990, 0.415133, -1.615274, -2.057973, 1.233435, 0.705104, -0.175169, 0.365537, -3.113515, -0.644583, -1.924930, 0.268149, -3.299269, -0.044249, 0.769384, 0.747958, 0.502507, 1.253872, 2.567127, -1.534801, -6.195432, 0.239830, 1.061098, 1.498278, -1.147298, -0.012934, 1.279267, 0.256549, 0.932009, 2.801676, 2.601096, -0.057946, 0.010808, 0.225650, -0.888552, -1.055726, 2.577467, 0.214108, -2.550973, -2.023343, 0.168402, 1.144072, 1.188154, 0.007975, -1.752963, -0.353960, -1.058180, 1.402650, 2.647588, 1.578010, -0.623806, -5.160738, 0.940677, -2.087744, 2.504496, 2.207713, 0.738647, -3.554515, 0.701976, -1.332600, -0.665026, -0.837372, 0.036542, 0.498252, -0.463899, -1.281477, 0.037951, -2.718753, -2.519139, 0.797102, -0.969279, -0.007088, 1.170141, -0.555038, 0.601634, -0.725569, 1.991015, 1.571092, 1.635221, -0.142499, -0.239051, -0.623268, 1.279354, 1.173028, -0.863181, 0.221621, 50.890709, 0.459216, -0.634014, -1.232200, 2.451216, 0.997746, -0.070813, 4.072617, -1.105848, -0.707585, 0.129221, -1.666970, -2.221236, -2.830456, 0.259465, 0.248408, 0.067695, -3.389023, 2.130977, 2.272633, -2.333500, -2.583345, -0.533235, -0.838626, 0.675928, 2.638815, 3.564664, -0.836662, -0.464054, 1.113580, -0.739706, -1.093256, -0.590220, 1.229130, -2.069568, -1.136705, 1.287993, 1.863708, -1.156420, -0.803547, 1.157883, 0.605184, 1.073040, 0.025076, -1.252429, 1.357709, -0.065110, -0.653028, 0.069790, 4.635374, -0.414350, 1.573298, -0.352398, 0.538733, 1.097928, 1.345788, -1.038578, -0.814868, -0.190454, -1.798921, -1.403554, 3.546619, -1.749692, 0.060874, 0.027193, 0.516291, -0.682459, -0.085446, -0.505916, -1.123992, -0.330597, 0.062728, -0.334435, 0.210847, 1.488047, -1.092073, 1.356015, 3.290716, -3.166292, -1.558093, -0.793964, 3.183681, 3.087046, 8.326931, -2.114156, -1.133654, -0.425647, -1.151897], - "qwen2.5-coder:latest": [-0.436007, -1.314809, 0.139666, 5.148615, 1.838311, -1.521601, -3.773632, 0.581152, -0.971788, 7.219580, -0.066787, 1.198955, 1.659349, 3.621571, 1.779006, -0.560876, 0.355461, -1.897615, 2.303185, 0.109255, 6.044055, 1.446214, 0.674157, -0.692821, -1.987091, -2.048842, -1.936660, -2.349168, -3.152107, -3.172126, 0.873809, -1.490791, 0.970821, 1.441998, 2.091025, -0.651286, -2.027265, -1.386296, -0.700867, 2.765764, -1.228565, -0.294553, 0.431368, 1.284794, 0.631266, -0.846027, 16.100187, -0.651704, -0.213284, -1.980950, 0.748919, -1.524519, -3.034139, 1.428813, -0.906473, -0.359399, 0.568063, -0.806468, -0.336932, -0.204364, -2.249646, -1.886204, -2.921830, -2.873020, -2.915986, -0.558776, -5.761330, 0.710662, -14.035521, -2.583575, -0.747539, 0.809441, -0.951276, 0.723559, 1.804405, 0.222171, -1.118399, -0.074350, -11.002135, -1.436381, -1.212464, 0.143454, -2.309623, -2.390476, -0.117248, 1.324861, -1.891298, -0.915926, -0.236022, 2.277486, -1.947304, -1.112398, -0.341477, -1.563656, -1.073132, 0.275794, 2.828944, 0.914620, 2.530140, -2.008723, 1.740619, 1.433238, -0.137113, 1.737560, -2.091690, -0.144877, -1.682601, -0.273133, 0.891697, 3.031501, -0.963722, 2.925961, -0.128959, 5.033491, -2.237801, -0.329063, -0.569064, 1.594402, 0.993208, -5.571981, 3.424447, -0.005736, -1.073074, -0.499183, -1.037315, -0.981740, -0.731634, -2.787812, -2.274329, 0.616070, 2.383073, 0.642813, -0.994558, 0.252382, -4.711788, -0.271676, 3.495092, 1.964713, 1.607625, 1.494871, 1.336313, -1.587251, -1.514070, -5.126953, 0.097945, 0.919678, 2.441731, -2.928982, -0.321582, 0.855205, 1.654471, -1.153838, 4.138180, -0.955069, 1.078292, -1.350932, -4.036607, 1.604253, -0.872791, -1.828661, 2.580978, -0.709960, 6.295347, 1.293245, -1.309786, -2.217097, 0.007649, -2.884886, 1.301318, -0.435597, -0.482649, 3.068917, -1.476866, 2.451068, -1.917819, -1.498407, 0.184997, 1.833188, 0.816717, -0.623813, -2.193322, -1.512282, -1.615667, -1.072993, -4.262381, 0.010529, 1.257217, -2.236494, -4.156431, -0.603306, 2.949536, -0.846157, -0.592448, 1.623096, 0.024929, -0.389215, -1.058699, 0.131432, -1.387448, -3.724334, -0.617063, -1.108744, 0.636820, -1.469211, 2.240824, 0.869600, 4.049538, 3.993536, -0.610457, -0.671499, -3.111218, -2.991330, 0.696155, 2.608358, 1.001497, 1.474154, -3.532830, 2.660499, -1.066343, 2.081527, -1.972203, -0.570178, 1.080361, 0.286836, 0.940870, 1.073439, 0.588628, -2.507718, 2.726036, 0.290909, 1.218498, -1.227438, 0.014571, -0.629023, -0.212335, 0.783704, 4.464511, -1.721464, 8.572509, -4.255687, -0.337520, 0.154504, -0.440107, 1.332823, 6.227478, 1.853769, 0.825418, -0.090258, -0.175270, -0.294410, 2.580056, 0.677362, 2.338051, -0.415923, -1.507566, -3.802147, 0.664998, 1.294685, 0.533289, -4.037803, 1.228877, 1.029611, -2.024710, -2.125656, -0.549981, 2.533221, -2.395383, 0.313111, 0.601733, -2.608969, 0.216491, 0.406232, 0.609647, 0.711135, 2.503493, -1.242730, 0.346222, 0.542468, -3.621418, 0.442082, 0.813194, 2.384302, 0.784717, 0.717723, -1.476249, -1.676991, 0.117224, 0.378211, -0.194512, -0.284983, -3.506894, -1.025167, -0.378918, -1.602937, 1.909185, 2.551661, 2.117800, -0.885118, 0.708412, -1.859785, -0.479130, -0.738324, -2.670425, 2.509346, -1.601109, -2.061625, -1.747532, 2.314368, -2.034420, -2.830469, 0.645515, -0.335051, -1.528542, 1.276098, 1.399137, -2.062893, 3.157044, -0.355756, 0.008239, 0.529171, -3.172691, -1.092223, 4.341345, -4.409624, -0.345799, -1.003428, -4.002488, 1.766916, 1.763788, 1.652610, 0.630642, 0.222056, -1.701876, 2.214486, 2.379781, 0.916326, 2.501186, -0.940371, 0.257316, 0.774674, 2.868283, 0.917253, 0.978641, 0.544919, 7.170478, 1.259203, -1.779769, -1.019169, 3.777537, 0.795997, 1.963864, -0.853626, -0.343095, -1.443662, 0.394236, 0.305709, -0.351705, 0.524120, -1.773943, 2.920990, -0.804305, -3.644200, 2.719176, 2.336826, 2.026261, 0.880051, 0.758393, 0.228448, -2.986163, 5.670512, -0.611930, -0.002579, -0.251571, 0.224900, -1.935357, -0.920759, 8.231796, 1.971320, 1.576411, 1.943412, -0.953862, -0.375397, 3.036218, -2.298655, 0.889425, 1.108079, 0.258971, 2.647190, -1.539036, 0.500190, -0.727908, 1.263729, -3.033226, 1.961906, 0.810480, -2.089427, 0.708266, -4.047872, -0.527808, -14.221658, 2.361469, -1.320704, 0.836442, -0.386591, -2.236613, 0.486746, 1.005684, -0.821714, -0.599291, 3.795557, -4.883873, 3.555826, 0.689591, -0.508781, 1.518971, -2.128448, 0.553367, -0.200060, 1.611065, -1.504008, -3.721884, -3.394505, 3.972555, -0.445324, -1.183890, 3.563913, 1.988339, -0.476866, 0.289509, 0.277188, -0.175615, -1.041347, 1.197368, -0.477900, -3.759550, -5.051634, -1.572159, -0.226668, 0.180172, -0.086704, 2.489282, -3.111502, -2.003207, 1.001518, -0.583694, 1.663272, -1.637953, 0.545772, 2.723981, 0.770260, 0.925456, 0.989657, 2.473933, 2.747635, 2.175160, 1.760652, -0.013310, -4.443879, 37.422813, 1.288954, 2.467471, 2.146290, 1.013962, -2.084025, 2.127673, -0.888463, -1.521253, -0.895446, 4.524404, -0.104275, -1.633331, -9.016782, 1.046254, -1.463881, 3.555183, -1.504391, 0.277646, -1.592795, 0.272081, -0.698069, 0.696722, -1.410604, 1.937863, -0.376410, -1.499335, 1.668633, 1.260768, -2.925495, -1.584171, 1.157681, -3.337044, 3.435848, 0.386049, 1.061394, 1.006677, 0.669047, -1.470088, 1.235580, -1.276175, -0.555348, -1.114300, 0.408720, 0.459978, -2.024472, 1.675984, 1.306379, -0.254271, -2.635481, 1.731658, 2.153453, 0.928214, 0.306720, -3.400702, 2.915029, 0.031397, 1.996717, -1.877975, -4.729939, -0.609253, 0.541097, 1.393276, -0.035789, -1.044343, 0.889185, -0.336026, 2.131327, -1.250257, -1.924997, -0.287107, 1.208007, -1.054186, 1.337112, 1.274661, -2.434684, 3.016158, 1.469676, -0.695139, 1.505548, 2.100273, 1.219837, -0.772411, 3.593307, 5.785521, 2.612813, -3.146140, -0.555663, 0.243268, -3.966340, 0.486868, -1.174454, 1.676140, 0.317372, 0.213547, 0.103339, -1.636872, -1.078531, 3.002460, 0.008469, -2.326029, 0.867810, 0.871880, -1.080869, -0.768073, -4.836300, 0.383782, 0.691735, -0.713520, 1.354015, 2.611808, 6.183017, -1.084267, 0.292993, 0.816155, 1.273668, -0.560137, -1.290062, 1.882704, 1.010641, -1.717645, 1.066451, 0.092508, 0.932700, 0.062565, -0.448221, -1.144008, 1.872820, -1.933916, -4.155032, 1.226316, -0.842341, -1.021217, 1.994580, -0.036678, -0.072384, 0.812870, 1.374167, -2.501688, -0.321656, 3.544239, 2.224328, 2.181247, -1.169514, -2.582330, -1.573699, -2.363550, -2.202179, 1.673287, 0.711271, 3.818364, -1.154218, -0.725751, -1.511678, 0.080292, -8.115035, -3.127221, -3.172623, -1.133258, 5.428519, -0.574502, -2.239282, 3.485080, -2.038507, 2.057469, -0.269610, 1.192541, -1.718417, 1.374550, -1.552978, -2.797242, -2.503451, -4.544235, 0.636139, 1.108707, 3.459209, 2.595264, -0.305967, -0.003920, 5.865139, -2.725132, -1.437748, -1.930311, 1.015183, 0.153521, -0.693563, -1.841589, 1.740456, -0.131857, -1.259349, 1.107379, 0.814856, 2.672195, 1.490787, 0.823584, -0.483895, -0.674276, 3.958681, -4.697596, 0.824732, -0.919115, -4.634318, -0.438301, -0.317027, -0.150343, 1.811067, 1.930733, 2.765487, -3.315078, -1.065359, 1.905147, 1.231166, -0.812233, -0.079013, 3.098343, 1.337479, 0.038435, -1.502123, -0.722991, -0.738154, 1.651970, 3.549967, -2.832844, 2.526853, -4.530358, -1.405437, -0.020393, 1.433086, -0.355914, -1.094193, 0.618523, -0.507370, 1.855727, -0.352494, -1.034884, -0.052144, -1.694263, -1.334652, -0.578301, 1.324574, -1.522585, -0.899184, 3.180330, -2.992112, -0.966538, 1.624621, -2.214644, -0.544830, 0.516665, -2.317800, -0.701623, 0.938447, 0.935423, 7.276221, 2.074192, -0.549290, -0.723959, -1.024809, -2.093009, 0.378594, 1.273304, -1.574900, -2.294054, 1.627634, 2.471876, 0.272425, 0.226814, 0.288442, 0.485079, 0.329602, 0.418512, -1.030336, 0.618441, -0.205079, -0.751919, -0.533747, 0.987899, -0.886300, -1.857596, 0.970968, 0.782056, 1.377219, -3.131898, -2.278232, 0.560626, -5.161348, -0.380426, 0.495337, 0.181925, -0.484390, 2.722185, 1.441381, -3.070866, -1.380223, -2.827929, -0.428279, -2.406868, -1.231688, -1.393025, -2.365047, 1.180624, 4.354129, 0.116944, 1.813338, 0.807496, 5.356595, -0.893292, -2.298326, 0.608894, -2.458173, -3.912065, 1.234876, -0.789027, 0.989614, 1.082788, -0.383455, 0.617175, 3.955452, -2.602732, 0.340088, -2.055584, -1.332299, -2.340340, -2.757793, 1.896885, 1.322887, 0.021037, 2.907897, -0.321884, -2.944226, -1.640788, -1.364418, 2.449870, -4.300892, 4.101160, 1.867850, 0.166516, -0.710645, -1.172884, -1.457727, 2.929085, -0.218713, 2.206084, -0.883459, -1.040819, -2.344896, -1.173216, -0.345644, 1.559119, -1.632681, -2.044267, -2.017350, -0.654807, -0.716796, -0.901010, -1.560858, -2.691737, 2.685868, 1.782925, 3.339304, 0.565915, 0.391605, 3.610030, -3.298944, -0.705625, -1.543735, -1.870102, 1.338298, 1.612513, 0.385103, 1.112341, -0.001102, 0.658675, -0.503109, 1.369964, 2.857534, -0.630183, -0.912625, -1.217065, -0.550542, 2.285744, -2.127434, -3.157195, -2.480932, -0.733192, -1.617258, -1.182549, -1.050172, -0.540184, -1.505584, -1.097327, 1.250695, 0.358068, 1.122536, 0.025612, -0.006341, 1.774774, -2.286098, -2.659644, 3.301547, 0.470509, 1.290470, -1.164262, 0.626534, -3.474944, -1.804067, -1.576454, 3.310174, -0.299973, -1.118997, 0.285524, -0.434010, -0.235016, 2.567713, 2.659858, 0.159478, 0.923787, 0.271707, 0.721747, 1.390933, 1.695482, -35.562675, -0.141364, 3.048325, -1.559244, 0.738925, -1.291286, -2.524163, -0.560224, -2.540498, -0.174527, 7.668949, -0.468271, 2.184141, -0.495266, 4.118879, -0.306242, 1.102313, -4.138959, -3.319368, 1.504961, -0.296103, -0.015277, -0.136177, -2.483171, -0.736024, 2.367176, 2.261982, -0.849145, -0.117148, 0.933736, 1.702317, -0.301388, -0.906758, -1.500765, -3.250679, 3.582183, -0.331119, -0.037043, -1.458076, 1.892284, -0.766386, 0.352996, -0.095548, -2.071965, -0.491389, 2.410537, 2.485983, 0.411316, 1.657690, 2.453979, 0.544419, 1.520648, 0.534818, 5.743890, -1.727980, 1.763634, -1.548289, 4.157279, 2.225596, -0.064131, 1.865851, -2.642000, 0.274984, -0.866992, -0.558188, -6.135097, 1.808120, 1.006938, -0.790857, 0.461167, -0.860196, 2.084737, 5.253679, -0.978117, -0.453410, -0.819495, 0.236075, -2.136300, 0.021472, 0.437208, -2.464820, -0.033580, 0.188308, -3.331381, 3.856862, 3.718570, 1.367965, -0.220747, -2.310231, -1.149265, -1.234862, -1.002847, -1.974621, 1.130993, 4.297782, 0.930710, -1.492884, -0.713347, -0.377052, 2.645738, -0.489495, 4.203647, -0.183929, 2.602280, -0.300018, 0.319702, 0.484708, 1.726325, -2.608667, 0.224787, 0.628384, -0.105292, -0.063091, 3.132477, -1.491148, 0.832812, 2.437400, -1.012723, 0.005830, -1.205948, -3.225458, 3.295642, 0.629336, 1.091727, -3.268245, -4.394265, 1.717201, 0.162753, 2.099977, -0.146153, 0.175116, 2.906495, -3.290455, -1.285598, 7.942502, 0.160152, 0.179591, 4.543355, 3.116941, 3.622699, 3.588044, 0.600032, 1.724521, -1.439306, 0.903875, 1.313146, -0.755100, 8.836950, -0.952139, -0.333382, 0.589961, -1.261379, -1.519937, 0.594025, 1.764304, 4.243717, -1.108132, 1.925209, -3.976291, 0.235073, 1.686457, -2.469280, -8.696437, -3.778089, 0.477731, 2.229237, -1.451623, -0.649171, -0.769915, 4.691844, -0.204187, -1.182377, 1.737289, 0.001245, 0.825427, 0.922635, 0.588298, 1.344133, -0.989039, 4.205564, -0.115000, -0.715023, 0.977006, -0.833281, -0.086541, 7.658555, 1.852724, -1.467018, -4.778613, -5.723665, 11.013165, -0.535247, 1.304788, -0.278120, -3.020401, 1.007590, -1.811615, -2.275402, 0.979134, -1.302686, -1.351974, -1.836746, 0.542104, 0.011732, 0.467072, 1.436075, -1.912158, -0.329361, 0.906835, 1.310337, -1.657316, -1.454618, -0.057573, 1.054785, 2.734224, 0.864511, -2.898540, 0.721743, 3.449452, 2.660782, -3.281970, 0.793531, -0.939987, 2.136473, 2.435774, -0.931134, 2.375545, -1.911816, 1.508261, 1.438431, -1.554907, 10.636431, 10.181509, 2.162733, 0.092647, -1.967986, -0.263800, -4.868186, -6.291202, 2.514089, -1.563930, 2.339781, 1.775288, 0.459960, -0.443059, 1.163096, 0.124251, -6.209301, -1.731759, 0.933085, -2.717155, -2.114019, 0.764707, -3.598078, -3.171012, -3.224734, -2.070172, -1.446331, 2.061223, -1.382807, 2.091001, -0.697143, -1.502571, -0.759867, 0.295158, 0.411237, -4.074205, -0.500290, -1.297131, 0.634780, -0.869266, 4.393310, 0.298832, -2.684585, 2.340415, -2.036564, 0.622905, -2.296228, 1.926786, 3.597500, -1.945964, 0.066769, 0.744542, 0.415474, -0.575763, 1.847393, -0.139588, -4.165627, 4.270953, 2.814140, 3.188056, -0.450949, 0.978394, -0.130957, -0.081690, 2.020355, 1.264999, 2.465885, -1.305273, -1.484652, 1.913352, 1.274480, 1.071047, 32.553612, -3.937133, 1.768175, 3.947704, -3.099431, 1.153636, 2.373486, 2.360721, -2.020087, 2.675651, 2.172042, 1.795803, 0.559099, -1.527675, 1.322240, 2.126581, 1.912614, -4.063071, 1.399081, 4.218424, 5.575891, -0.873354, -0.366251, 0.625111, -3.856376, 3.276441, -1.155635, -2.581620, -3.619178, -2.831986, 1.644085, 0.133040, 1.446548, -1.878526, 1.286804, 2.888686, -2.470215, -2.362903, -0.971186, 1.676210, 0.187425, 1.839463, -1.896287, -2.081707, 1.814273, 0.938150, 1.786313, -3.683124, 3.041575, 0.135497, -0.442793, -1.932262, 3.042321, -1.016880, 2.041277, -2.040796, -0.421785, -1.340821, 0.105589, 2.341746, 0.292477, 0.475112, -0.495902, -0.475660, -1.491468, -2.629827, 3.888282, 2.804010, 0.150179, -0.908230, -1.783017, 0.495803, -0.610453, 0.289567, -0.078798, -1.560782, -1.805168, -2.729794, 1.172817, 2.256393, -0.442398, 0.522677, -1.631465, 0.356985, 3.064646, 2.438519, -4.161843, -2.152719, -3.548280, -1.114138, -0.859323, -1.193447, 1.367581, 0.220056, 0.163054, 1.273387, -0.971761, -2.162730, 0.737844, -0.055890, -0.216024, 0.862837, 0.151634, -0.601276, 0.358210, 1.970998, -0.229344, -0.017123, -4.781201, -1.324280, -2.443600, 1.611152, 0.149101, 3.477759, -0.751891, -0.717900, -1.417735, 1.407221, -1.185286, 2.538493, 2.014459, 1.288729, 0.121079, -0.775372, 1.095880, 2.870790, 2.828023, -0.678468, 0.029732, 0.468892, 0.173412, -0.554108, 0.868722, -0.347043, 0.670441, -0.115965, -1.428901, -1.543623, 1.486332, -0.581373, 2.728561, 0.982189, -2.209894, 3.659011, -0.832777, -2.435964, -1.310557, -1.055155, -1.834021, -1.562546, -3.038025, 3.090860, -2.067988, -3.092913, 0.118994, -1.485082, 2.321303, -1.523272, -1.430369, -0.029205, -1.739594, 0.019325, 0.569824, -1.613913, 1.451680, 0.781437, 2.524419, 1.962079, 0.689057, 0.560689, -1.565743, 0.606738, -0.366487, 0.825362, 0.567166, -2.249720, 1.356489, 1.744161, 1.633906, -1.390061, -0.507055, 0.629742, 1.448011, 1.131591, 1.812740, 1.272440, -4.645047, -4.487141, 1.566564, -1.905134, -2.191869, 0.572741, -0.455768, -2.307575, 1.607099, 2.300626, -0.653849, 0.221068, -1.337414, 3.450238, 1.781016, 1.688878, -1.666610, -1.287050, 1.609571, -1.283102, 1.244545, -1.443785, 1.087902, 1.376294, 0.741840, 3.563230, 2.121260, 1.941692, -1.210015, -1.075073, -1.537348, -3.691505, 1.077912, 1.348834, 0.498320, -1.474098, 2.513743, 0.034244, -0.481899, 1.553230, 2.030468, -0.253737, -0.082557, -1.063913, -2.305557, 0.269592, -2.979993, 0.824435, -2.439241, 0.592147, -1.105869, 0.421400, 1.004838, -1.749238, 0.952104, 0.919140, 1.684337, 2.167483, -0.795320, 3.446412, -0.198248, -3.708080, 1.209328, -2.476055, -2.325776, -3.323361, -0.395597, -2.130917, 3.682760, 0.225562, -0.801695, -0.575638, 0.496647, -1.356318, 0.600407, -3.152001, 0.148890, -0.074623, 0.417407, 2.860341, -1.896055, -2.015702, -0.401882, -9.507044, -1.447032, -0.036139, -0.848994, -0.379429, -0.110780, -0.272023, -0.108900, 3.433757, 0.450129, 0.396789, 1.146661, -3.451382, 2.723109, 2.754865, 0.767603, 1.128464, 1.264460, -1.380370, 9.841789, 1.019593, -0.664542, 0.108049, -4.518657, 3.028623, 0.955966, 2.159739, -0.992145, -3.089396, -2.380461, 3.170674, 3.399100, -1.193787, -1.100064, -1.222812, 1.331865, -4.171266, -0.224741, -0.748337, 0.600880, -4.090579, 1.785532, 0.843806, -0.897074, 1.120391, 0.226116, 1.339815, -0.558596, -0.229787, 0.421276, -1.492851, 2.736720, -1.181484, 1.033056, -2.783668, 0.868677, 1.473027, -0.409419, -0.926960, -1.578116, -1.657176, -4.058239, -2.139534, -4.226902, 0.042924, -4.044942, 0.975387, 3.117355, -2.011942, 1.897419, -0.394071, -2.194358, 0.765811, -1.147434, -0.198820, 4.750773, 1.958392, 0.566013, 0.746863, 0.205276, 6.244852, 0.292197, -0.264540, -1.483035, -0.521862, -0.821273, 0.241537, -1.867573, 0.887766, 0.970351, 0.943935, 0.907276, 0.863435, 0.609040, 0.758961, -2.844856, -4.021582, 2.337291, -0.033980, -1.227764, -2.930726, -3.163921, -0.012551, 2.236899, 0.202573, 4.800804, -3.107728, -2.295274, -2.600798, 0.614929, 5.242928, 1.385072, -0.441010, 0.496632, 3.172925, 1.638507, -0.125987, 5.617575, 0.405079, -2.154732, -2.598893, 3.025715, 0.283551, -1.228085, -3.021509, -1.903265, -1.605352, -2.429972, 0.022392, -1.591423, 1.237664, -0.669618, 2.921721, -3.849840, 0.507070, 2.304445, 1.411633, 0.925293, -1.438281, 4.524236, 3.233037, -0.987758, 4.162241, 1.087106, -3.555248, -1.064314, -1.531470, -0.240191, -2.561610, -1.132247, 1.349483, 2.722615, 0.037841, 1.215080, -1.428522, -2.192810, 1.110667, -2.803056, -0.672909, -1.977815, -0.052312, -2.126122, 1.366835, -3.752233, 1.900298, -0.700606, 0.833546, -0.918877, -1.297674, -1.865373, 2.671888, -0.841652, 0.527628, -3.107635, 1.778736, 6.087658, 10.168410, 1.901435, 0.008429, 1.880625, 0.691697, 1.251415, 2.020111, 0.165611, -1.962046, -2.567108, -1.646126, 1.804067, -4.159413, -2.876052, 0.582987, -2.315321, -2.834074, -0.143538, 0.333040, 2.520455, -1.053464, -0.936291, 0.497383, 2.377161, 0.688116, 0.252176, 1.265777, 1.036058, -1.827014, 0.232887, -1.180766, 1.928753, 0.833420, -5.280427, -3.046776, -0.869522, 2.473118, -4.426275, -1.009449, -0.393237, -0.908902, -0.088011, 0.554225, 0.937001, 0.837067, -3.216558, -0.756160, 1.128917, 0.964452, -0.273247, 0.137980, -0.334299, 0.644827, 1.049165, 1.687600, -0.582325, 0.678831, 3.991718, 3.445086, -2.419575, -1.215780, 0.836874, -1.800161, -4.176029, 1.932638, 4.352362, -0.640140, -0.239435, -0.297160, 0.884801, -5.469331, -0.966645, -2.994428, -1.457712, -1.884226, -1.562829, -0.063225, -1.810441, 1.137481, 1.578315, 4.733838, -0.413119, -2.760687, -4.963616, 2.259133, -1.462614, -0.125429, 1.826625, 0.243741, -1.940729, 4.980882, -1.852582, -2.769213, 3.123670, -3.025451, 1.775786, 0.248842, -0.728544, -1.077011, -1.391178, 0.466446, -1.327900, 0.010156, -1.119019, 0.406476, -3.023509, -2.991761, -2.242916, -2.700393, -1.149276, -0.574640, -0.623269, 4.592867, 0.085469, 2.845264, 0.500940, 1.761536, -0.758278, 5.217238, 0.938784, -0.517966, 0.385037, -1.285301, -2.375467, -3.277109, 5.389163, -1.802665, -1.425073, 2.843237, -1.299174, -2.772480, 1.326686, -0.461601, 2.181789, -1.470306, 0.363675, -1.825438, -1.595971, -2.633875, -1.263443, 11.719139, 0.751982, -5.437104, -0.402077, -1.769803, -0.488290, -3.136333, -0.206896, -2.774237, -6.601932, 3.922718, -4.739939, 2.086078, -3.384333, -0.272934, -1.534686, -0.467060, 1.184582, -0.470652, 12.171447, -2.855459, -8.415219, 1.164989, -1.923474, -0.980914, -0.601838, 1.957440, 0.195562, 1.815339, 0.264663, 0.158703, -1.772841, 1.136608, -0.290822, 1.927877, 0.562484, 2.267569, 0.140409, 2.506416, -0.439031, 0.860347, -1.896669, 1.397222, 1.579570, 0.485520, 0.957377, -1.102430, 0.442603, -0.920362, -1.657130, 4.251542, 0.022865, 1.276556, 0.728996, -1.456246, 1.469049, 17.869566, -3.002699, -2.320802, -0.407301, 0.102661, 1.159996, 3.357108, -0.603254, -1.308291, -3.801401, 0.142082, 0.596891, 3.836693, 1.812102, -2.562486, 2.357852, 7.259953, 0.651906, 1.206739, 2.925079, 0.821211, -3.675958, 4.616876, -0.251318, 1.483648, -0.104531, 3.231146, 1.392708, 0.213286, -4.196676, -1.593157, -3.684262, -0.936107, -1.851555, 1.740610, 0.759534, -0.725802, -32.275948, 0.821350, -2.229753, -3.098523, 0.335518, -3.705818, -2.480252, -2.382177, 2.335834, 0.559883, -0.078840, 0.265768, 0.672536, -0.617955, -2.180997, 0.050136, 1.086448, 2.409880, -1.411031, 0.431328, -0.727582, 1.202057, 0.676885, 2.333050, 0.667056, 0.704034, -3.499928, 0.377022, -3.475610, -0.461822, -0.347930, 0.258168, 1.602084, 0.519829, -0.155424, 1.457234, 0.126837, 0.867928, 4.091778, 1.680606, 4.067370, -1.098706, 1.745742, -1.184344, 2.251384, -0.088541, 0.205009, 0.219193, 0.667914, 3.437428, -1.572693, 0.404962, -1.385043, 2.847858, -0.488513, -0.725883, 0.752501, -0.153214, 1.029474, 1.962504, 3.080513, 2.361320, -0.633588, -1.436562, 0.260860, 26.884304, 0.354994, 0.023750, 0.750965, 1.353084, 0.426553, -1.632285, 0.965408, 4.016201, 2.177340, 1.253002, -1.670665, 1.720569, -2.180720, 0.322581, 0.279140, 3.985285, -3.724750, -3.344991, 0.349461, 1.836719, -0.266715, -0.634795, 1.627708, -2.453827, 2.661302, -3.227677, 0.053888, -2.480497, -0.681098, -0.049629, 2.152981, -0.581374, 0.205937, -1.006680, -0.501193, -2.547718, -0.441294, -0.789560, 1.551607, 1.530261, 3.002646, -3.386208, 0.647514, -1.249280, 0.674235, -1.530674, -3.838077, 3.722666, 2.963236, 2.088184, 3.554217, -1.200083, 1.763361, -1.686896, -1.194727, -2.250880, 0.875894, -0.186709, -25.303444, -0.505925, -1.991530, -1.867339, 1.825814, -0.766634, -0.213235, 4.148894, -0.046314, 2.148987, -1.871356, 0.335448, -0.485913, -0.093247, -3.264498, 0.528065, 0.522954, -1.395236, -2.970262, -0.581401, -1.861303, 0.173270, 1.324822, -0.018929, 1.717697, 1.011000, 2.334809, 0.878979, -0.626252, 0.987577, 2.981012, 2.250051, 2.358181, 1.915170, -1.237683, -2.741322, 2.350392, -2.240174, -2.580384, -0.634321, 0.317450, 1.725892, 0.162523, -0.422389, -0.178484, -2.114431, -4.840956, -0.001833, 0.139491, 4.319082, -1.384395, 0.323176, -1.353467, -1.339914, -1.007622, 8.807545, 1.286002, -2.342683, -1.185613, -1.472908, -1.924402, 4.893974, 0.222800, -0.740518, 2.156360, 2.747664, -0.312752, 2.395748, -0.615992, -8.395935, -0.730813, -0.073218, 1.852324, 0.291219, 1.468868, -1.620990, -0.756095, 1.401205, -1.078258, 0.483770, -0.073835, 0.852245, -2.719850, 1.460309, 1.374558, 8.152399, 2.677590, -1.674278, 0.375696, -0.073122, 0.925756, 0.923439, -0.069477, 2.279387, 2.252507, 1.538246, 1.814035, 1.929125, -1.111000, 0.341246, -1.168864, 2.812251, -3.087615, -0.544177, -0.092432, -3.101908, 2.925842, -1.453098, -0.303561, -1.021411, -0.136682, -5.494426, 0.610433, -2.182517, 3.119542, -1.883906, -0.745869, 2.522353, -1.648916, 0.309569, -0.577917, 1.033753, 2.487350, 7.941953, -0.071100, 0.527296, 0.779083, 6.350358, -3.325049, 1.075220, 0.105128, 0.276124, 0.347600, 0.306576, 3.274002, 1.036085, -2.652688, -2.018159, -0.050256, 0.416610, 0.418685, -1.532887, 0.523052, 3.134366, 0.387958, 1.859184, 2.089394, 1.539085, 1.657541, 1.209471, 1.878232, -3.116538, 0.800451, -3.243739, 2.656432, -0.071025, -0.537716, 2.768167, -0.689752, -4.555896, -2.193995, 1.733658, -1.575865, 0.762150, 2.772280, 0.646617, -2.128708, 2.234904, -2.126125, 0.459754, 1.413508, 0.166073, -2.205717, -0.741679, 0.306937, -1.672999, 0.225218, 0.055466, -1.127936, 7.234384, 0.063245, 1.979858, -2.608743, -2.807106, -2.397985, 0.106909, -3.808125, 1.513469, -1.036234, 0.811388, -2.431126, 2.732509, 0.589472, -1.097014, 0.551920, -1.516936, -2.533307, 0.797511, -2.425043, -3.588099, -1.160765, -0.590146, 3.004026, 0.810287, -2.107759, -0.651307, -5.370883, 2.917656, 0.991122, 0.444265, 2.693725, 0.286769, -1.541028, -3.018210, -2.283916, -0.207154, 1.837811, -1.245008, -5.110644, 1.981874, 1.236664, 1.905553, -0.207308, -1.105416, 4.194646, 0.440569, 1.659566, -0.880465, -4.547189, -2.118434, 1.557453, 2.841252, -5.531410, -2.707672, -0.314554, 0.362334, -2.255540, 0.359243, -0.935208, -0.932006, -1.131725, 1.080974, -1.834844, -0.971595, 2.742725, 3.401529, -1.261523, 0.220123, 2.862516, -0.858204, -0.541691, 1.122402, 3.115028, 0.782756, -1.248350, 0.043220, -0.986485, -0.844554, 2.879936, -0.039591, 0.383270, -0.683167, 1.174577, -0.593699, -1.137541, 1.152888, 1.766484, -7.748785, -0.404558, -0.467036, -0.500680, 1.611474, -0.383380, -3.673885, 1.017248, -0.770349, 0.237903, 2.069979, 1.630354, -2.739210, 3.819390, -1.732684, 2.563601, 2.213180, -2.380856, -2.852253, 1.170615, 0.828863, 1.211223, 2.499185, -0.747931, 0.118144, -1.666906, 0.565364, -1.657013, 0.774405, 0.693492, 7.705479, -1.408086, -0.155176, 1.412633, -5.123066, -0.853785, 0.116899, 2.256178, -2.218943, 1.518238, -0.196591, 0.143943, 0.285298, -2.482928, 0.615830, -2.046060, -0.975004, -2.833664, 3.254058, -1.370345, 0.944582, -0.014555, 1.834112, 2.484418, 0.814740, -0.132238, 1.918314, -1.774436, 0.460359, -0.580844, -1.645435, 1.954685, 2.618668, 0.267995, -2.560254, -0.594974, -2.286581, 4.714139, -0.405705, 1.295618, 0.840673, -2.838477, 0.366501, -1.036157, -0.400613, -1.738227, 1.300794, -1.672292, 3.829979, -3.479953, 3.891050, 0.341126, -0.399483, 1.662642, 3.562313, -1.184650, 2.612743, -3.805794, -2.371483, 1.948942, 2.188965, -0.459029, -0.178023, -1.700147, 3.120115, 5.629900, 1.224204, -1.879678, 1.268884, -2.494606, 0.783073, 0.035119, -0.997701, 0.350684, -1.231518, 1.909020, -2.098758, -0.661888, 0.994528, -1.374923, 2.376079, 0.031113, -1.458987, 0.113488, 0.266556, -2.248442, -0.549227, -1.980329, -0.843419, 0.893711, -1.482391, -0.773147, 1.418742, -0.100246, -2.365190, 1.173016, -0.702880, 0.275237, -1.607930, 0.260333, -2.186061, -0.709117, -1.991098, 3.764254, -3.194555, -1.260547, 1.071692, 3.033343, -0.641039, -0.255529, 3.194899, 1.048945, -0.669115, 4.109255, -2.829791, -0.658942, -0.670331, -3.036335, 1.109055, 0.316420, 9.496139, -1.423056, 4.316561, -3.777977, -0.611273, 4.206706, -3.108094, 2.093183, -0.592171, -2.694616, -2.441919, 0.851335, 0.160457, -2.691463, -0.074577, 0.744847, 1.683688, -0.708158, -1.727233, -1.502183, 0.525043, 0.983311, -0.089715, 0.532941, -0.811899, 0.976230, -2.550968, -0.344250, -0.052567, -0.187679, -0.121404, 2.285113, 1.596615, -1.304425, -2.099068, 1.705707, 0.282685, -1.729276, 1.459553, 0.320318, -4.074892, 1.004075, -3.545393, 1.803405, 0.490817, -4.327343, 1.060507, 2.926682, 1.222938, 3.830746, -0.337875, 1.288773, 0.835695, 1.570575, 3.477370, 0.256512, -1.542086, 0.159785, 0.399716, -0.581507, 2.310691, -0.635375, 0.457800, 2.778989, 4.189120, -1.164997, -2.390188, -1.172381, -2.444343, 0.283850, 2.672297, -0.091714, 0.491060, 3.292467, 0.893021, -0.021946, -4.014757, -2.941429, -3.471601, 0.691645, 0.227577, -0.660446, -0.993292, 1.157482, 0.663260, -0.723520, -2.946966, 0.588723, 0.340043, -0.358396, 1.354849, 1.527313, 0.792265, 0.354935, -3.001401, 2.202762, -0.826216, 1.678419, -0.252368, 2.635601, 3.578719, 3.746924, -0.271551, -2.890261, 2.253434, 0.673195, 1.846275, 0.377794, 1.797091, -0.269892, -2.769761, 0.315330, 3.191075, 1.445889, 1.961443, 0.250564, 1.217402, 1.685299, -0.773906, 3.594047, -0.128995, 0.446818, -2.274753, 1.524932, -5.203915, 1.088118, 0.079942, 3.207416, -18.327145, 1.500175, -0.097854, 2.531832, -1.950670, -0.083165, 2.955576, 0.681629, -0.329289, -3.521765, 2.633065, -0.085364, 5.152068, -0.129515, 2.816390, -3.628945, 0.186241, -1.867233, 1.983360, -0.515092, 1.410643, 0.049975, -0.440827, -0.180698, -0.876025, -1.237767, 2.805179, 1.542505, -0.951790, 0.443897, -2.973520, -3.115988, -3.136214, -1.392136, -4.330337, -2.264652, 0.625757, -4.091477, 5.732088, 0.250295, -0.520872, -0.999017, -5.399399, 1.408189, -1.518100, 0.076899, 0.173335, -0.000062, -0.360869, 1.392707, -0.592256, -0.071057, 1.330815, 1.857339, 1.405391, -1.056357, 3.606451, 0.844912, 0.430513, 0.705153, -0.095922, -3.005373, -6.676332, -1.697640, -2.368549, 0.382992, -0.944774, 1.198584, -1.091452, -1.749086, -3.316520, -2.743624, -0.783803, 0.405243, 0.186438, -2.742365, 2.742394, -0.300057, 1.709888, -0.119355, -1.055460, -0.554546, 1.549400, 3.316050, 1.876061, -0.066178, 0.378583, 2.503380, -0.843418, -2.350612, 1.370083, 4.067267, -0.592636, -1.435324, -0.224314, 3.440698, -3.128674, -1.354647, 0.871077, 0.835582, -2.731527, 3.152105, -13.977840, -3.494694, -1.888668, -0.369791, -2.067304, -1.631454, 1.369503, 1.902894, -0.525999, 0.394126, -0.526112, -1.452425, 0.266547, 0.910412, 2.690451, 0.452772, -0.904265, -0.274242, -1.941391, -0.781456, 1.339111, -0.650924, -2.150021, 0.411827, 0.306410, -1.720717, -0.847376, -0.433327, 8.572508, 5.576869, -1.604961, -3.355456, 0.578090, 3.117163, 0.740736, -1.816481, -1.542356, 1.402068, -3.337177, -3.460914, 0.022969, 0.263521, 2.447577, 2.692053, -2.677152, -1.154691, -0.166149, 2.455483, -1.960949, 0.644558, 0.451422, -2.235790, 0.731520, -0.340948, -1.902708, 0.762279, 0.125709, -1.536236, -0.245376, 5.871339, -1.315382, 1.152163, 0.313443, 2.684904, 1.522253, -2.293488, 1.985134, -1.717681, 1.696683, -2.022664, 2.500051, 0.610928, 2.378994, 0.165070, 2.061111, -0.533743, 2.667622, 3.499480, 2.485019, 1.861316, -1.150906, 1.217355, -2.907215, 1.377991, 2.626987, 2.557068, -2.540422, -6.635588, 0.997638, 3.295728, 0.550338, 1.183280, -0.518508, 2.825861, 3.199516, -0.683444, 2.162984, 2.370837, 4.094376, -0.561323, 0.784378, 0.182726, 1.457809, -1.172417, 2.387145, 0.324454, 1.190073, 4.428410, 1.672801, 2.330206, 3.335100, -0.557584, -1.865616, 0.313762, 2.122341, 1.508437, 2.887865, 3.216261, 3.003069, 4.676777, 3.199836, -1.936886, -1.224461, -0.051272, -3.227903, 1.606121, 1.955314, 0.546526, 0.661211, -1.968910, 1.787858, 1.048485, -0.461875, -0.509854, -1.147480, 1.632553, 1.572888, 1.340511, 2.246652, -0.744147, 1.609240, 0.752408, -1.323570, 1.025877, 0.814479, -1.259313, 2.315588, -1.214857, 0.447328, 1.474373, 1.504266, -0.497109, 0.577923, -0.198901, 0.571817, 1.572346, -0.229665, -0.482301, 0.700038, 1.471916, 0.754951, -4.222556, -0.885760, 2.337687, 3.346586, 0.457164, 1.315627, 1.394005, -1.703673, 0.883069, 1.166987, -0.816095, 1.200109, -2.375040, 0.826257, 0.166096, -1.786063, -3.522976, 3.031999, -3.488905, -0.379346, -1.583687, 1.950091, -0.198649, -1.979665, 0.650037, -1.176644, 2.323772, -1.853436, -1.898267, 0.950301, 2.705135, -1.034136, 1.889340, -1.965656, -1.262732, -1.637557, 0.371705, 0.813203, -2.314916, -2.003534, -0.387944, -1.389285, 0.283866, 3.240730, -5.791040, 2.754301, -1.986605, 5.498390, -0.273563, 2.022370, -0.106619, 5.943636, 2.984904, 0.613079, -0.669535, -0.343581, -2.248723, 0.348882, 0.099603, 0.015564, -0.590038, -1.586601, 2.235744, -1.424522, -0.791221, 0.587769, -1.771873, 0.902260, -0.221643, -1.720520, 0.883625, 2.038339, 1.595812, -0.467120, 1.634040, 1.504307, -0.748396, -1.020328, -4.903410, 1.616802, 1.099766, 0.745407, -0.021960, -0.519794, 1.157142, -0.792646, -3.190317, 2.819183, -1.442791, -0.101592, 0.509061, -1.473928, -2.708030, 0.791176, 0.473671, -1.907742, 2.050101, 0.003960, -1.289529, -2.341501, -0.373291, -0.925099, -0.040393, -0.479414, -0.349596, 1.877697, -0.776685, 1.993453, 0.372975, 0.333932, -2.029835, -1.045179, 2.716208, 1.865170, 0.747971, 4.798818, 1.579798, 1.555352, -1.155734, 3.145859, 0.887819, -3.669680, 0.728159, -0.804880, 1.060545, 0.031082, -2.118540, 1.153332, 3.899940, -1.163471, 1.295803, -2.362670, -2.000762, 0.001854, 0.792970, -2.817198, 1.936855, -3.864910, 2.709139, 1.039248, 0.088502, 0.231339, 0.591631, 0.030345, 1.299663, 3.123892, -0.961180, 0.043213, 5.733878, -4.098113, 3.308362, 0.510799, -4.140917, 0.843890, -1.273466, -2.071602, 1.445319, -1.818631, 0.162340, 1.681147, 0.362149, 5.492742, 0.825089, 1.722855, -0.476926, 0.432826, -2.043187, -2.016047, -2.091608, 0.597438, 0.042428, 3.973989, 0.883174, -0.129641, 2.237979, 0.567980, 0.839164, 0.976711, -2.264026, 1.649265, 1.344430, 1.434795, 5.406022, 3.077146, 2.661374, 3.106198, -2.270719, 0.887519, -0.145979, 3.447535, 1.555766, -0.138652, 1.195158, 3.220088, 0.879781, -2.362654, -6.360222, 0.395982, -2.533304, 4.291794, 3.155651, 1.251960, -2.407456, -0.218786, -2.583162, -0.899505, -0.780827, -0.983244, -3.478741, 1.778161, -0.658125, 0.597271, 1.897745, 1.777378, -0.100952, 1.271212, -0.681034, 2.460438, 1.110631, 1.252983, -0.114646, 0.479300, 1.725348, 4.230619, 1.187448, -2.427088, -1.236009, 2.918612, -1.148390, -1.583798, -1.435729, -1.783818, -2.767493, -1.541569, 0.203426, -1.242959, 0.281229, -0.392559, 0.520429, -3.234192, -5.539012, -2.151313, -2.462922, 0.635300, 1.190563, -0.151796, -0.622898, -0.042642, -0.083337, -0.730799, 3.834823, -0.641445, 1.817954, 3.308098, 2.103870, -1.456245, 1.461707, 1.371928, 0.733169, -2.590485, 0.514485, 3.581903, -1.606874, 0.716330, 1.596098, -0.624766, 0.570248, 0.343349, 0.814959, 2.110700, 3.385014, -0.654017, 0.103144, 1.129105, 0.854295, -1.497854, -0.833896, 0.883463, 2.740201, 1.252455, 0.383430, 4.764862, 0.244701, 0.397635, 2.114073, 3.711519, -1.009765, -2.999290, -0.075239, 1.702090, 4.073386, -2.221128, -0.173297, -1.598970, 1.764099, 1.255920, -3.153074, 0.940827, -0.085776, -0.153299, 3.531004, -2.893436, 2.231733, -2.386345, -1.483328, -3.745522, -5.938141, -1.462745, -1.746019, -2.920442, 0.672212, 0.022831, -2.624349, -2.061772, 0.922139, -2.596588, 2.745512, 1.169222, 0.959605, 3.072976, -0.254427, 5.414840, 0.527497, -1.430076, -1.501413, 2.057433, -1.026962, 5.627439, -2.945267, 0.809274, 2.203258, -0.872946, 4.923897, -1.509921, 0.499868, -1.122034, 0.442121, 4.887639, 2.859808, 0.291162, -0.565278, 0.837086, -5.220106, -0.498070, 1.504637, -0.144360, -0.114923, 0.522100, -2.818848, 1.758005, -0.885172, 1.853490, -2.924307, 2.890154, 1.534062, 1.918770, -0.117491, -0.226110, 0.317553, 0.141368, 1.936240, 2.881628, 0.301003, -2.461584, 0.041076, 0.719569, -0.117806, -2.094253, -2.824019, -1.391719, 1.183342, 1.017699, 0.376079, -0.095749, 0.889862, 1.062274, -0.524244, 2.349395, 1.186792, 2.231821, -1.102010, -1.332299, 2.127689, 0.351990, 1.511401, 0.622317, -3.630643, 0.548977, -3.208701, -2.996888, 2.649668, 0.304146, 1.341268, -2.146057, -1.861894, 4.507286, 0.904826, 1.395878, 0.450848, 0.070200, 3.053755, -2.140768, -2.565916, -0.972909, 1.667059, 1.065236, 0.645459, 0.884246, 0.220186, -3.282768, 1.298033, 4.002408, 0.833334, -3.617452, 0.368626, -1.903755, -0.626035, 1.850133, -3.082982, -2.774525, 1.769177, 0.522702, 0.263647, 1.313907, 3.750313, 2.017340, 0.823528, 2.732456, -3.571347, 2.283923, -0.022426, -0.600996, 1.081142, 0.014277, 2.022802, 0.375120, 1.400345, -2.918789, -1.019804, -1.212387, -4.197097, 0.703760, -1.529950, 2.411883, -0.584985, 1.346535, -0.723685, -2.590233, 3.926456, 2.828357, -1.109949, 1.414086, -0.135390, 0.382299, 2.244257, -0.295509, 4.518786, -3.660137, -2.117182, -2.384901, 3.393075, 0.985744, -0.516841, -0.374062, -4.132094, 2.249375, 2.650640, 0.171410, 3.396479, 0.069148, -0.270228, 0.905647, 3.294580, -3.019566, -3.331932, 2.340150, 2.807488, 2.162702, -3.298753, -1.766656, 1.310992, 0.260271, -0.273308, 4.299369, 3.715046, 1.070362, -1.441203, 0.129578, 0.900721, 5.234731, 2.976517, -0.659467, 0.284069, -0.954808, -0.256831, 0.583463, 1.284158, 1.351618, -0.708611, 2.189399, 0.599912, 1.235909, -1.296227, -0.026225, -0.115726, -1.447470, 1.321840, -0.550714, -0.555223, 1.529182, -1.148362, -1.568398, 3.317645, -0.735568, 0.437838, -0.237062, -1.593969, -1.894876, -1.147040, 6.875043, 11.417304, -1.270446, -0.386883, 0.448277, 0.306192, 0.444976, 0.047800, 0.323642, 0.030898, -0.246496, 1.848722, -0.699640, -2.337017, 3.233449, 1.195664, -1.263332, 2.178815, 0.288599, -1.581660, 3.966269, -0.985900, -0.975200, -0.793356, -2.546527, 0.314768, -1.653216, 0.076431, 0.527626, -4.124629, -0.522641, 2.863382, -0.581339, -0.483502, -1.371282, -2.072694, 2.361188, 1.388546, 0.461689, 0.054946, 2.079017, -0.905662, -1.667842, 1.560647, -2.268772, 2.163057, -1.461485, -9.571809, 2.473650, 27.804079, -0.824428, 1.293797, -3.527821, 0.322644, -0.829934, -1.641960, 1.559845, 0.651142, -2.018788, -0.652320, -0.534693, 2.995028, 0.591905, -0.210980, 1.812501, -2.794134, -0.021838, -1.462607, -4.406371, 0.911137, -1.410916, 1.293619, 0.665017, -0.952757, -1.092961, 3.622439, 4.556889, -0.322486, 3.173908, 2.919918, 1.061108, 1.607022, 0.961167, 1.944426, -2.335304, -0.616037, 0.400255, 3.586429, 0.725041, 0.298737, -1.890886, -0.024518, 0.091631, -1.731019, -1.398399, 1.815781, 4.581513, 2.576745, 1.146513, -0.740690, 0.073969, 3.108618, 0.535761, -0.192938, 0.454423, 2.053000, -0.904300, 2.072179, 0.649410, -0.662264, -0.673923, -1.733026, 2.902329, -1.831697, 3.206669, -1.994342, 1.821010, -1.573532, -0.257321, 5.394223, -0.162241, -3.188801, 0.847548, -2.007671, 3.947463, 1.168257, 2.246848, 1.873971, -0.494318, 0.724031, 2.609424, -1.787059, -0.378604, -1.377902, -3.019529, -1.382988, 0.023967, -0.011094, 0.253847, -1.189952, 0.510796, 1.386401, -2.568677, 1.666898, 2.934337, -1.311064, 0.238594, 0.870015, -0.393368, 2.161388, 3.384138, -2.131927, -2.342558, 0.287042, 3.170932, -4.181534, 1.297255, -2.535244, 0.296611, 0.657501, 2.486350, 0.579065, 0.901807, -1.826978, 3.008395, 0.015162, -0.812392, -5.237899, -0.064044, -0.666688, 1.184950, 1.343734, -1.661986, 0.091535, 2.635372, -0.006127, 9.887297, 4.918875, 0.266848, -2.460409, 0.854952, -1.334359, 0.044901, -0.075265, 0.200052, -2.027168, 0.649583, -0.283191, -0.853923, -2.430825, 2.559544, -0.007875, -0.466313, 0.781030, -0.850323, -1.138282, 1.897385, -0.009445, -0.401657, -2.866511, -2.329610, -1.208160, -1.773448, 0.369010, 0.188112, -0.367383, -0.806061, -0.871504, -1.204538, 0.251074, 0.966655, -0.356678, 2.718896, 3.092988, -2.580250, -0.622785, -0.762455, 0.026455, -1.173746, -3.874841, 1.271729, 1.204147, -1.713592, -0.083661, -2.208164, 1.115615, 0.098561, -0.295923, -1.642114, 3.539276, -1.431937, -0.611073, -2.333883, -0.713340, -1.436290, 0.124211, 0.463780, -1.330325, -2.417066, -1.452549, -0.621094, -0.331997, -0.248763, -1.276592, -0.835736, -0.789976, 0.210436, 2.124712, -1.141259, 0.878823, 3.689657, -0.996731, -0.788607, -1.662502, 0.702889, 0.455417, 0.196082, -1.905845, 1.417846, 0.184089, -0.428133, -1.289425, 1.620126, -0.999889, 0.915726, 2.355841, 8.382513, -2.161212, 15.398536, 2.307024, 1.641678, -1.617959, 1.106972], - "qwen:latest": [6.398593, -9.147916, 3.167985, -0.016698, 5.146078, 5.260313, -0.588165, 6.041094, -0.448700, 1.538580, 4.409100, 1.965835, -2.027954, 3.322869, -0.209723, -1.591358, -0.332919, 0.490199, -1.801314, -1.394502, 6.208906, 2.582299, 8.829220, -1.215299, -10.441714, 6.180038, 2.357235, -0.251530, -1.217379, 6.260386, -1.005010, 3.707588, 2.900968, -2.015647, 1.153357, 2.200070, 4.747961, -2.433741, 4.030592, -9.292274, -3.870678, 2.177808, -0.545548, -2.237058, 2.649582, -0.528622, 1.250894, -0.112586, -0.969227, -0.571061, -0.680663, 1.271584, -5.168596, 4.699327, 5.181798, 1.421188, 6.487319, 3.149934, 2.146110, 0.893968, 4.691792, -2.652787, 0.780389, -7.469417, -1.913996, -4.114168, -1.824573, 1.825537, -7.670074, 0.083751, 1.497249, -1.842984, -0.207182, -1.217132, 1.720826, -0.462654, -0.142980, 6.752104, 0.513007, -9.219392, -6.861326, -1.046578, -3.621952, 8.216535, -1.929723, -0.226388, -0.364569, 0.592417, 0.661270, -2.502738, 0.655540, -2.301271, -2.658660, 6.579635, -2.761786, 3.214799, 1.964015, 0.085705, 0.268774, 1.773046, 6.180820, -4.607996, -0.740156, 2.677974, -0.014020, -5.367133, -0.792135, 1.014724, -2.928968, -2.636251, -0.764111, -2.006562, 0.120694, -4.609838, 1.088676, -11.941098, 5.737967, -3.500586, 1.158638, 5.277419, -0.824252, 3.719745, 1.067214, 6.999010, -3.490391, 3.380606, -3.941285, 3.037470, -3.074491, -5.476095, 0.703748, 0.590704, 1.712015, 2.907949, -3.779428, 4.336009, -3.208945, 6.012998, -0.633373, -0.858766, 0.509552, -2.374973, 2.670326, -3.898677, 3.515145, -1.504274, -2.528835, -4.196266, 1.497983, -0.251315, 1.430840, -6.129501, -0.432433, -2.067062, 0.683940, -0.651003, 2.075870, 0.301573, 0.456413, 1.512750, -2.011982, -2.651834, -3.443306, -1.217246, 2.249681, 4.056913, -0.001803, 1.856310, -1.120802, 5.100811, -4.818334, -1.832536, 0.575663, 2.821508, -2.484176, 1.090846, 3.982687, -3.890761, 1.816324, -1.156088, -1.480178, -0.946538, -0.579305, -0.901073, -0.626901, 0.268467, -3.557676, -1.586237, 1.791939, -0.206871, -0.901410, 1.202474, 2.744930, -0.571335, 3.200516, 0.411471, -0.096053, 1.948472, 1.908952, 2.884496, 1.760468, -0.835073, 3.515426, 4.381332, -0.223358, -1.809401, 0.086503, 2.059222, -1.261783, -0.836733, 0.856923, -4.898800, 1.888360, -2.207174, 0.376906, 3.295334, 5.689600, -2.268684, 1.449032, -1.591826, 1.197192, -0.958380, -1.880106, 2.903637, -1.158304, 0.286425, 1.411350, -1.044144, 4.642242, 5.629546, -1.222408, -0.653535, -0.909632, 1.304384, 0.949307, 2.316329, 2.287262, -0.217201, -0.789907, -0.414622, -3.416742, 1.308199, -4.681273, 5.369122, -4.293337, 0.764565, -2.343703, -3.794211, 1.932296, 2.057181, -1.281097, -5.943415, 1.662839, 0.180384, -4.695090, 0.702479, -3.153823, -3.411024, 0.180862, -3.886384, -1.007891, -1.704118, 0.862702, -0.511424, 3.460708, -1.867585, -7.966740, 2.017166, 7.204095, -0.777631, -2.125801, 1.848246, 2.023623, 2.431535, -0.120389, -0.336207, 2.110109, -0.700987, 4.741506, 2.285265, 2.249003, -3.817211, 3.017461, 1.867846, 4.302247, 0.304751, -0.310234, -2.985993, 4.513823, -1.711970, 0.424881, 1.872621, 8.673007, -2.507097, 0.834635, 3.987681, 0.865946, -2.122818, 2.411204, 0.166906, 4.962452, 2.623420, -0.873380, 1.751310, 3.454344, -4.624747, 0.288112, -1.057867, -7.632612, 3.383047, 2.529626, 0.388937, 0.680255, 0.010386, -0.285309, 2.821573, 3.907364, 0.626498, 6.285956, 2.837718, -4.136279, 2.172159, -0.740020, 2.603785, 0.488508, -2.008139, 1.194486, 2.840358, 1.642457, 1.124606, -2.682470, 2.333769, 0.111492, 1.035283, 1.694300, 2.123012, -2.884374, -7.135779, 4.317023, -0.086166, -1.382437, 0.327938, 0.949700, 6.212725, -1.359681, 0.690782, -1.888311, -3.168814, -4.167558, -6.230211, -4.251054, 1.301581, -2.542017, -27.238344, 0.095754, 4.638476, 3.855103, 0.669284, 0.051903, -0.231133, 5.462236, 1.029191, -1.093251, -2.784316, 2.413422, 4.149455, -6.006116, 1.867116, -1.621314, -2.286732, 1.713983, 1.969203, 2.893601, -1.096513, 2.859676, 5.299241, -1.564409, -4.103854, 3.312290, 7.535967, -10.267817, 0.146586, 0.198330, -0.458738, 5.533854, -0.592334, -1.642502, -0.867962, 0.357863, 1.499991, 0.317374, 1.710249, -3.821599, -4.164293, 0.626525, 2.896627, 4.243000, 2.967313, 1.367663, 6.382295, -6.377450, -4.389627, -0.473153, 2.991648, -1.669134, 1.115779, -0.026947, 0.960267, -5.584852, -1.439730, 0.244562, 4.521901, 2.087858, -0.596442, 1.345291, -1.198195, 1.134727, 7.460937, 3.136116, -1.059861, -3.781231, -3.531691, 1.444958, -3.786484, 4.863374, -4.276469, 5.663068, 0.108844, -4.433540, 3.566478, -0.737263, -0.857777, 3.881980, -2.940099, -0.232970, 1.024321, 0.370978, 1.810182, -1.729423, -0.953740, 0.363640, 0.101128, -0.457497, -5.657916, 2.896876, -2.673734, -0.363334, 2.990057, 1.737989, 1.253162, -2.239347, -0.736923, -1.326416, 1.898398, 0.172377, 3.468918, -1.249191, -2.190415, 4.681655, 4.550338, 8.617194, 1.506140, -4.036048, -5.532407, 3.284861, 0.496790, 0.007859, 1.394254, 0.463913, -0.189794, -3.210449, -5.304472, 1.114539, -1.199341, 0.368409, -3.468653, 0.319924, -7.521216, -0.515546, -0.846355, 3.365871, -7.414912, -1.118039, 0.057726, 0.471262, -0.671277, 5.010963, -1.456864, 0.795316, 5.710810, 5.483665, -3.680223, 3.203779, -7.778675, 1.581216, 0.493372, 1.308644, -0.168083, -1.437484, -4.021763, 3.567986, -1.012697, -1.095128, 4.802341, -1.501106, -3.554114, 1.340577, -2.658166, 0.273735, -2.363988, -3.568919, 2.061281, 1.113543, 0.817031, -1.828942, -3.359740, 5.046678, 4.811258, 1.904614, 1.466768, -1.282211, -2.547651, 4.968533, -4.411788, 4.293465, 0.164253, -1.659536, 0.885092, -0.371292, -1.131706, 5.356121, -4.582285, -6.341745, 2.657330, -1.279451, -3.364145, -4.528135, 6.154132, 0.255915, 0.995843, -6.160520, -4.956539, 0.385687, 1.730230, -4.108953, 1.728342, 1.137076, 0.444596, -3.889635, -4.341253, -2.400633, 0.832284, -3.842432, -2.179685, 1.179994, -3.570244, -3.793373, -0.992903, -6.269731, -2.026199, -2.740402, 3.908176, -0.131522, -2.611959, 5.417125, 4.601712, -0.944981, 1.923583, 3.380219, 0.557484, -4.402332, -1.821094, -1.393727, -4.922822, -0.122208, 1.627198, -2.698848, 0.543942, 7.662592, 6.865628, -3.118904, -2.938929, -1.204334, 0.880950, -2.432030, 0.659579, -5.937887, -3.082295, -2.329674, -0.929039, -6.670197, 4.624016, 1.847857, -6.151865, -1.295520, 4.561952, -4.189340, -1.271205, -3.114521, -5.400505, 2.505269, -1.440362, -0.543130, 1.583606, -3.754081, 1.425768, 4.600868, 2.031716, 4.381232, 0.756865, 1.269595, 2.452235, -3.499653, 0.843460, 5.095802, -3.224932, -1.973590, -0.918793, -2.948713, -1.726048, 0.723157, -1.867589, -3.809328, -1.288017, -1.415320, 9.147604, 4.031230, -2.515405, 6.017965, -0.808787, 6.938612, -0.940846, 0.514639, 4.288442, 0.824478, 0.728683, 1.763265, 0.545236, 1.356232, 5.527868, 4.475016, -3.437302, 3.826543, 5.086852, 0.299217, 4.161529, -0.210087, -2.249442, -2.974098, -6.259721, -1.801933, -1.427602, 3.724947, 3.003747, 0.540840, 0.380978, -0.046774, -0.128234, -6.908992, 0.317432, -0.887537, 3.312163, -0.027360, 2.139082, 2.805890, -0.598460, 2.746891, 3.195262, -0.988383, -0.554773, -1.027135, 0.100964, -3.613074, 5.187125, 0.852667, -0.236328, 6.884120, 2.533068, 6.731904, -0.778514, 0.375824, -1.817388, -5.946012, -2.352830, 5.102455, -1.938184, -1.387404, -4.757504, -2.173933, -0.201531, -3.642277, -5.362231, 3.637059, 2.751554, -1.022320, 0.236827, -3.948135, 0.148865, -1.120026, 7.616945, -0.963430, -0.756691, -0.919667, 4.724895, 0.976052, 2.488966, -3.964747, -3.973845, -0.865214, 6.001307, -2.119917, 4.599735, -0.121487, 4.304985, -1.779739, -1.172909, -0.084037, -4.013283, 2.303892, 3.205657, 3.503476, 1.411669, 1.280174, 8.759250, 0.880316, -2.128790, -4.705835, -3.441471, 1.247740, 1.331217, -2.363749, -0.643617, 1.385127, -5.501627, -7.879881, 5.820022, -1.216314, -2.178036, -1.108843, 3.346485, -3.363919, 3.609971, 2.944907, -1.553591, 0.286604, -1.090472, 3.108707, -0.752903, 3.523269, 4.811034, 5.104235, -0.589819, -1.991645, 0.047370, 0.897678, 1.814540, -2.876569, 0.355313, -0.919469, 0.483877, 4.114913, -4.182666, -1.667883, -0.516528, 3.272009, 1.569783, 1.219359, -2.658862, 1.495385, -6.089864, -2.128447, 2.838350, 0.987129, 1.348928, -2.442407, 3.521696, -0.835038, -0.587476, -0.638110, 0.922019, 2.216001, 1.777817, 1.454185, 4.067125, 1.120436, 0.289011, -10.992048, 1.672040, -0.465922, 0.592983, 0.989681, 1.752660, -0.118764, -1.185995, 4.017984, -0.896778, 1.672302, -2.030242, -4.911530, -5.827189, 1.958246, -7.221211, -2.034618, 1.940285, -1.227662, 1.219494, 4.101542, -2.650769, -2.734393, -6.333424, 2.812163, 2.962675, -4.904971, 0.171724, 1.579389, 3.322502, -0.514203, 1.357068, 5.346297, 0.754811, 2.778355, 1.658731, 1.977090, -1.235332, 5.064486, 1.987611, 6.833618, 1.541649, 2.747869, -2.104572, -1.799155, 0.295171, -4.860865, -0.765238, -1.785131, 2.577568, 0.511845, 0.550628, -2.406874, -2.713742, -2.492991, -0.175184, -0.126996, -1.339363, 0.823035, 2.378861, -2.361350, 1.065711, 2.798916, -0.116275, -5.790211, 4.252931, -0.497029, 1.009890, -1.029344, 1.774927, -6.555468, 2.879664, 0.601462, -1.747875, 1.505472, 1.982710, 2.030839, -2.763254, -1.348869, -0.266905, 4.583949, 3.799467, 3.299871, -6.750926, -5.246260, 0.655915, 5.968640, 0.782474, -1.063692, 1.318094, 3.220077, -3.783729, -0.677141, 0.595987, -2.890465, -1.360495, -0.124686, -0.284035, -2.925553, 0.262872, 2.786888, 4.160244, 0.014939, 0.569116, 1.181584, -2.572151, -1.554686, 1.284756, -4.822996, 0.997169, -3.813555, 0.617060, 2.565912, 1.037117, -0.167606, 7.223352, -2.058073, -3.086306, 4.202200, 0.180718, 3.078883, -1.246702, -2.439780, -1.529070, 2.548267, 3.340835, -6.063392, -1.775246, -0.201369, 1.530203, -0.590155, -4.917980, -2.405702, -1.290209, -0.190081, 4.806739, 4.704314, 3.928058, 2.274630, -0.550331, 0.822520, 1.818900, 1.580151, -3.903281, -0.857364, -3.976201, -0.785557, 1.069647, -5.818671, 2.766473, 1.259937, 2.320919, -1.525085, 2.384599, 4.469339, 0.205931, -0.547983, 2.354457, -0.327334, -6.448855, -0.907820, 5.117530, -0.255594, -0.240747, -1.073850, -1.768409, -5.428776, 0.481095, -3.812433, -1.717587, -3.733663, 2.083388, 10.582418, -4.710001, 0.563532, -7.536781, -6.452072, 2.862794, -1.463039, 0.230586, -1.815489, 1.481611, 1.544786, 1.551767, -0.059472, 0.789418, -0.825706, 1.940825, 5.768491, -0.494084, -2.538201, -1.392608, -1.908880, -1.700553, 5.082959, 10.069242, 0.678830, -0.559667, 2.036356, 1.434546, -2.558431, 2.288113, 0.170179, 2.484860, -2.987775, -0.382073, -0.226642, -2.446935, -3.155464, -3.223151, 8.751858, 0.507641, -2.614630, 1.343406, -0.892121, -2.539207, -4.111343, 1.182877, -4.679571, -2.524526, -5.096138, -1.301956, 2.281354, -2.029088, 0.427091, 3.804364, 5.483494, -40.825272, -1.143677, -2.260099, -0.089059, -1.493274, -1.944442, -2.385689, 1.698596, -1.873040, -0.443924, 2.621414, 1.287797, -0.057905, -2.352337, 1.238259, 1.387846, 1.417577, 0.688409, 4.645106, 2.341688, 0.465816, -7.549288, -5.974134, 6.261028, -5.144201, -2.522077, -0.662837, 4.664794, -0.539391, -3.439147, 4.087629, -1.963182, 2.466938, 2.107603, -1.249598, -6.342202, -3.447833, -3.704789, -1.074862, 0.765216, -1.964713, -5.504405, 1.663442, -2.911618, -0.616493, -2.083917, 2.209042, 0.487668, 1.796368, -1.596250, 4.042785, 2.681681, 2.703725, -1.306239, 2.601149, -2.099759, -5.318709, -1.065740, 0.589329, -3.567276, 0.062211, -0.425451, -3.580077, -1.296509, -5.680976, -0.678171, -0.762381, 0.299684, 0.240645, -1.079323, -2.957309, 1.849129, 0.099766, 4.726409, -2.363460, -4.875949, 1.315865, 1.462351, -4.889824, 1.677129, -0.667212, -5.138101, 5.330096, -2.835877, -3.902706, 3.045518, -0.134772, 6.075926, 4.500954, 5.112908, -0.905090, -1.909402, 0.904969, 0.690467, -0.619620, 2.666605, 0.904155, -4.029288, 0.402307, -3.036969, -1.037772, -1.147319, -1.899678, 6.248024, 1.974826, 5.616739, 8.500142, 2.245967, -3.625181, -2.428448, -1.810710, 0.331268, -3.135995, 1.302269, 1.225240, 3.909755, -0.403967, -3.433037, -1.311207, -2.177593, -18.017111, 1.118036, -0.756810, -6.615274, 1.566789, -2.418086, 2.953141, -2.826252, -0.735017, 1.528646, -3.723853, -1.885919, -4.900423, -2.478693, -3.619526, -1.294044, 1.890493, -1.871122, 3.827642, 2.343641, -2.662672, 3.404760, -0.482313, 5.578103, -2.134901, 5.369441, 2.492493, 2.104894, -5.205935, -1.008856, 3.011516, -0.641482, 2.548511, -8.027479, 0.661283, -7.434981, 1.621635, 2.033537, -1.930799, -1.076036, -0.960546, -0.117069, -3.372064, -2.063029, 1.654161, 1.716305, 4.944497, -0.019142, -4.051437, -3.766835, 5.842964, -3.690862, -3.004082, -4.533800, -1.790580, -2.050976, 0.561251, 1.564617, -2.369565, 2.445515, 0.568967, 0.080670, 1.160943, -1.780555, -0.186662, 0.478309, -4.549850, -17.848110, -4.087846, -0.273795, 5.222282, 5.777647, 0.494441, -1.833347, 0.257310, 1.124015, -1.849150, -1.647193, -1.132576, -2.164145, 4.289577, 0.453893, 1.341683, 0.748200, -2.471226, 5.312476, 0.836187, 1.723641, 0.498636, 1.428005, 1.828248, -3.398380, -2.883598, -5.426562, 2.745332, 1.425643, 0.006252, -3.581231, -0.262443, -0.622419, -1.944646, -3.869738, 4.476512, -1.191560, 4.310348, -1.112125, 3.697780, -1.439761, -4.078893, 2.179358, 2.530555, -0.148791, 2.168117, 0.114731, 1.831150, 1.157180, 2.166352, 2.055449, -2.871636, 4.420805, -1.390404, -6.722301, -1.769241, 1.519223, -2.692869, 1.015409, 7.691347, 0.583279, -4.058763, -1.453730, 2.806040, 0.556832, 2.730164, -2.572670, 2.370497, 1.912015, 3.515903, 1.919521, 0.369309, -2.022592, -0.218010, -6.205793, -5.902825, 4.063861, -2.432916, 33.217953, -0.551205, 3.915136, -3.102407, 3.210474, -1.160345, -2.887495, 1.523478, -1.018772, -2.422345, 1.810487, -5.200218, 1.671701, -0.721633, 4.423970, -1.442638, -5.779491, -0.397599, -3.750891, 2.698724, -5.718669, -2.086298, -7.792905, 3.388355, -3.770853, -0.215906, 2.560900, -2.680165, -2.986103, -6.097780, 4.229813, -2.723863, -3.065816, 2.248178, -0.651940, -1.214029, 2.257283, 2.486542, 2.257068, 4.830973, -2.277972, -1.946075, 3.999813, 3.456074, 0.536131, 1.805786, 0.709500, -4.097561, -5.412663, 4.285580, -4.488030, 1.119286, 2.302969, 5.947579, -0.113177, -1.724484, -0.104090, 1.840069, 4.592496, 1.569632, -2.483522, -0.311809, -0.194584, -2.869655, -2.849751, 4.997175, 2.512164, 1.758786, 0.490910, 4.247337, 0.569464, -0.659693, -0.454139, 4.440271, 1.410414, -0.773389, -2.376852, -6.240281, -4.227293, -1.671386, 0.603003, 2.479946, -2.180943, 3.127448, 1.668763, 0.149739, -0.781542, 7.098460, 2.111330, -4.436161, -2.082523, -2.478790, 49.008598, 1.723189, 5.866392, 3.153973, -0.181730, -7.328019, -1.992281, -2.027254, 2.432771, 0.979790, -0.092340, 1.070737, 0.099132, 6.923749, -4.058023, -8.293395, -1.186165, -3.612353, 0.829185, -0.439513, -1.879160, -1.854795, -5.092451, -1.970279, -4.055690, -7.000295, -4.616829, -0.039388, 4.131409, 1.653316, -7.131061, -5.091387, 3.990695, 3.182390, -1.955781, 0.335848, 1.516590, -0.282827, 2.731199, -1.598010, 5.144428, 2.064570, 2.552294, 1.812606, -2.513990, 2.353807, 7.561320, -0.036158, -0.385612, -4.383836, -3.971509, 0.043287, 4.296186, 0.464179, -1.848343, -5.514888, -8.349360, -8.976414, 0.569201, -4.740505, -1.152213, 5.905676, -5.700530, 3.814966, 2.234695, -0.222299, 4.771212, -3.930703, 2.960777, 0.165897, -1.333587, 2.028787, -0.778738, -1.235554, -1.246747, -0.041303, 3.006766, 3.820721, -5.493714, -0.189577, -3.010185, -2.883236, 0.024274, -1.494312, -2.523447, -4.104508, -2.666597, 3.281853, 3.544635, 3.610449, -0.587052, -0.098227, 0.073750, 0.127269, -0.344085, 0.770601, -2.514192, -4.431854, -1.949836, -1.391094, -2.886564, 0.702709, -0.731393, -2.069504, 1.040801, 3.144605, -0.115405, 2.797428, -1.210172, 3.943987, 2.697510, 1.059327, 0.742219, 4.559521, 1.323614, -0.211233, -0.215014, 1.990037, 1.956536, -2.729569, -3.183045, 2.447714, 2.988651, 5.736022, -3.185564, -2.579111, 3.323712, 4.193132, 0.727872, 5.551432, -0.744345, -2.344970, -3.441572, 5.568137, -4.830486, 3.880134, -5.891489, -2.210011, 0.171487, -1.457955, -2.245640, 2.203776, 0.875658, 1.959566, 8.602451, 4.474270, 2.726350, -0.354296, -2.258420, -2.513044, 4.931829, 2.946697, 0.520752, 4.333879, -0.821970, 2.029501, -2.277242, -4.952377, -1.538025, -1.064874, 3.308603, 1.247338, 2.504045, -3.224561, -2.891461, 3.316285, 7.715738, -1.605185, 3.243022, -5.836881, 2.714357, -0.388968, -1.375407, -3.556258, -2.474644, 1.088091, -3.216538, -2.776881, -8.227687, 5.125639, 5.283110, 6.973928, 37.955891, 3.139960, -5.763666, 1.350248, -1.406692, -3.986167, 2.335608, 3.157670, 4.455172, 2.308789, 2.309107, -3.130976, -4.247937, -2.270962, 1.574682, 5.501863, 4.485770, -10.403132, 0.773148, -1.224575, 5.244150, -3.847297, -1.800287, 6.947053, -2.622383, 4.851179, 3.233861, 4.995902, -4.162736, -1.983544, 3.995517, 6.687618, -3.040680, -6.543100, 5.237826, -4.066863, -1.226237, 1.639323, -4.240799, -0.423647, -2.178972, 1.593127, -3.968011, 5.461793, 2.277310, -2.744098, -3.358952, 4.035235, -3.137929, 2.964127, 7.214087, -1.364202, -4.651634, 6.503850, 2.740077, 0.886651, 2.558752, 0.043657, -5.242559, -0.792984, -2.882527, -5.403186, 3.155617, 3.991355, -0.568835, 1.141021, -3.702596, -0.279778, -0.912082, -3.422060, -1.879990, -0.733728, 2.278115, -2.372427, -2.681229, -1.556143, -0.770521, 0.899023, 4.508717, -3.010523, -1.908418, -1.475849, 3.509949, 3.582316, -0.681324, -7.056856, 1.278887, 0.770643, -0.584454, 2.825036, -0.821392, 1.240007, 7.577941, 0.096160, -3.572768, 1.793741, 3.848424, 0.995781, 0.054073, -0.235984, -0.301966, 2.916689, 1.391444, 1.480205, -3.852633, -1.223310, -3.153660, 3.194536, 1.030388, -4.751256, 1.885638, -2.114385, -6.170693, 1.415366, 4.334911, -4.597432, -0.846934, -3.220494, 7.086485, 3.530614, -2.059356, 1.625898, -2.086513, -1.870273, 3.097336, -2.899379, 4.410741, -2.872575, 0.711264, 5.131933, 1.355852, -2.781525, 3.417987, -2.958153, -0.075279, 1.298355, -0.051176, 2.940977, 0.224740, 4.669080, -3.098835, -1.002103, -2.227010, -0.529945, 1.581029, -1.380316, -0.444712, 1.033249, -2.976829, 1.184253, -3.129241, -4.516237, 1.861109, 0.749785, -0.883805, 2.467990, -1.366948, -2.021918, 9.678317, 0.780995, 5.006135, 2.355187, 4.709684, 0.273654, 0.848736, -1.546677, 0.190088, -1.301066, -1.275526, -0.592527, 2.147533, 4.496069, 2.915365, -2.232816, -3.967589, 2.198257, 3.257962, -1.514701, -1.426605, -0.670297, 0.013288, -1.436101, -3.523503, 1.392464, -7.692491, 4.621131, 4.215765, -6.433372, 8.560532, -5.166466, 1.641891, 0.939057, -1.161749, -0.620703, 0.268485, 0.818933, -1.119831, -2.502043, 1.727721, -2.059391, 2.365984, -3.621562, 0.293849, 2.106696, 2.435274, -0.056334, 1.744176, -0.872306, -3.566818, -3.476950, -13.363617, -2.873412, -0.464867, 0.363577, 2.328689, -3.345537, -8.831505, -0.320157, 0.871519, -4.472153, -0.401718, -0.096133, 0.386455, -1.806300, 1.170147, 1.817253, -3.103240, -0.165836, 3.598591, 0.253634, 2.874893, 3.903717, 1.369801, 5.628721, 2.572816, 2.252870, -1.170226, -1.062752, -0.456143, -3.078095, -6.341308, 4.122602, 2.681516, 0.093924, 3.844733, 3.950950, -3.356711, -0.854817, 3.384428, 13.341409, -4.234371, 2.496033, -1.629354, -1.507377, 0.173900, 2.698258, 0.267310, 1.372167, 0.510639, 2.101537, 1.261789, 2.597848, 2.449376, -0.840756, -1.046823, -0.002541, -2.707355, 0.755944, 1.257627, 1.465595, 0.194379, 7.094273, 0.264183, 5.946443, -6.767539, 3.796284, -2.374620, -2.461099, -1.391973, -3.764230, -2.892979, 1.555705, -1.332523, -1.799763, -2.815821, -4.461638, 0.016501, -0.694294, -0.483337, 1.215167, 0.758542, 4.294414, -2.490471, -2.232953, 0.058542, -0.601252, 4.924240, 3.834749, 2.027948, 1.471411, 0.901828, 0.966709, 0.390534, 7.367773, 1.259584, -0.460943, -6.608699, -4.643585, 2.040176, -4.100492, -1.690598, 3.704851, -2.805748, 1.226204, 6.179536, -1.176640, 3.004384, 3.111051, 3.486775, -4.034345, 4.785528, 7.299822, -0.907930, -5.061491, -3.685342, -1.961922, -3.682397, -0.804982, -1.361447, -0.922343, -4.764962, -0.093592, 6.292956, 9.184029, -1.652289, -0.349144, 2.227105, 2.586640, -1.344222, -0.799372, -1.067394, 1.337438, -4.368445, -3.637234, 0.453892, -2.348681, 3.619864, 0.782791, -0.751199, -2.257583, -0.637428, -2.538015, -4.910626, 0.804029, 1.904546, 2.071048, -4.913878, 7.321102, 2.329751, -4.918932, 9.630699, 4.401609, 4.836075, -37.672218, -0.989470, -3.400167, -1.611549, -4.914345, -2.178263, -0.507991, 7.461368, 1.499078, 9.014656, 0.385251, -5.354575, -0.235111, 1.188299, 2.999619, 4.158133, -2.458529, 0.836758, -3.781934, 2.581318, -0.546479, -0.767487, -1.108148, 1.394199, -6.728708, -0.049908, 2.439957, 2.281411, -0.256135, 2.625314, 0.526615, 5.245579, -0.693234, -4.652315, -6.053971, 0.761856, 1.380219, 2.186297, 1.574326, 3.023049, -3.008269, -5.497355, 1.208180, 1.866580, 0.383009, -5.021918, -1.859053, -0.577350, 0.791435, 1.862842, -2.977753, -2.982435, -3.968694, -2.911249, -0.671418, -0.664998, -4.328650, 0.777280, -3.322049, -1.996393, -10.946344, 1.487512, 3.325927, 2.512698, -4.560525, 2.487353, -3.221335, 2.498028, 1.558956, -7.027573, -4.410831, 1.153316, -2.383291, 2.752918, -2.445125, 1.669130, 2.055993, 3.435565, -2.200916, 7.625603, -0.429790, -7.823750, 0.715926, 1.946298, 0.931786, -0.959709, -2.558171, 1.349378, 2.164468, -1.039176, -0.840470, -1.273818, -1.788402, -0.181308, 4.731328, -1.308624, -4.392232, -3.329735, 3.710122, -0.471847, 0.321802, -2.903600, 2.763454, 1.606396, 5.018901, -4.307723, -5.778127, 1.896904, -1.911034, -0.877533, -0.970224, -6.048330, -1.055960, -0.004360, 3.615595, 0.670895, -3.405262, -6.979682, 1.391201, -2.248485, -0.812938, -3.361127, -0.245261, -2.004265, 2.180632, -2.492358, 0.106926, -2.312480, -0.849407, -3.182122, -3.868700, 1.483516, -2.800287, 1.606942, 5.240799, -4.588236, 3.825581, 1.475691, 5.782595, 0.572563, 0.615392, -3.263512, 2.357608, 2.504305, -0.131105, -4.494020, -3.431349, 1.323660, -1.233401, 5.227014, 1.833779, 4.529938, 0.172702, 2.495649, 1.844747, -0.571699, 6.221216, 3.510139, 2.034399, -2.708287, 2.504865, 0.827564, -0.389984, 0.973059, -1.210372, 3.136084, -0.528568, -2.895905, -2.945923, -3.354907, -6.284786, 2.405454, -3.611116, -1.510917, -0.275045, -2.606582, 0.023821, -0.977702, 4.496226, 3.893765, -5.102979, 4.505174, -2.151086, -2.598680, 3.437677, -1.525504, -3.606384, 2.925199, -1.819598, -1.297506, -3.938237, 0.758268, -6.536557, 2.823950, -1.268384, -4.748070, -1.569543, -4.040869, -4.199319, -1.537972, -2.470041, -2.424089, 4.282330, 2.027144, -2.279008, 1.956247, 0.243131, -1.307445, 7.631332, 3.666424, 3.244223, 0.806356, 1.559336, -6.454810, -2.210939, 6.478909, 8.370586, -4.877525, 1.632561, 0.528654, 7.175992, 3.294758, -2.347389, -0.656673, 2.440072, 0.033162, -3.974950, 3.992282, 1.041370, -0.452447, 1.250809, 5.725498, 0.952154, -1.769804, -6.182436, -1.491944, 0.978641, -1.848162, -3.526021, 2.130781, -1.247035, 0.430292, 2.094477, 1.015652, -0.982822, -3.514047, 1.362636, -1.385784, 7.721636, 0.452686, -0.514129, -0.185515, -4.155198, -2.091428, -0.342165, 3.609978, 2.325354, -2.549308, -1.935902, -4.843817, 4.849944, 0.559908, 0.317363, -6.979578, 4.078461, -1.781615, -0.168588, -3.608682, 0.540197, -3.224210, -2.160827, -2.483818, -1.395126, 2.122100, 0.045637, -5.244937, 1.460025, -1.313215, -1.831590, -3.608512, 2.137432, 1.063356, -4.977770, -4.077838, -0.227993, -2.521503, -2.196034, 2.424290, 3.695994, -0.664042, 3.369231, -0.868323, -1.362390, 2.049519, 1.623333, -3.785452, -0.366721, 0.929944, 1.189942, 2.357296, -2.012867, 4.039164, 5.018045, 1.173269, 1.037018, 1.239052, -1.506088, 1.858684, -8.143816, -8.377998, -4.266102, 2.238616, 0.990164, -5.564924, 4.017815, 0.013090, -2.655519, -2.138789, 0.309147, 0.815738, -3.671095, -1.768397, 0.642272, -4.239707, -1.738047, -3.186784, 0.928931, -3.288824, 2.778164, 2.127247, 1.010160, -0.380883, -1.794696, -0.380974, 2.568671, 2.952252, -0.378777, 3.388682, 1.112046, 3.843087, -4.014625, -2.586132, -1.373591, 0.875761, -2.153665, -4.098034, 4.174786, -3.971316, 3.831267, 2.632764, -2.082423, 2.323014, 0.126692, -1.658272, 3.813766, 0.731241, 5.020086, -1.314192, -0.455286, 2.529340, 1.737364, -2.307101, 3.249065, 3.359480, 2.342399, 2.964352, 0.450493, 6.821503, -0.876081, 0.104224, -4.359997, 6.337316, 1.961707, 1.584909, 5.782849, -7.702838, 0.486187, -2.076824, 0.556629, -0.377218, 1.867574, -2.546370, 3.420962, 3.743823, 0.830919, -3.154605, 2.442055, -0.077978, -2.174074, 7.835155, 0.042525, 5.061534, -1.297285, 0.468504, -0.896670, -2.810953, -2.835888, -4.904580, 1.410659, 6.832096, -1.246026, -2.643165, 2.461378, 1.465698, -2.603248, 3.614096, 0.604979, -0.203376, 0.620558, 2.010493, -3.164634, 2.355133, 0.910522, -9.153761, -6.733269, 0.191007, -2.222224, -3.317362, 1.621990, -3.271222, -3.361245, -2.236486, -3.204127, -0.102103, -6.418847, 0.475259, 0.960290, 0.809332, 2.043769, 0.233913, 1.443959, 3.518958, 0.381731, 3.579408, -1.736145, 0.935460, 0.490841, -1.445789, -2.606658, -0.390318, 1.241003, 1.852338, 3.745817, -3.404975, -2.927765, -1.375834, 4.025413, -2.450278, 0.526100, 0.871327, -8.299149, -3.752483, 8.046568, -3.801634, -2.328504, -2.873852, 12.037412, 5.806139, 0.151948, 1.294600, 0.820967, 1.635987, 1.551868, -16.845692, -0.875519, -2.038996, 4.211426, -4.056794, 5.402084, -3.281292, 7.430756, 1.138992, -3.348103, -0.064485, 2.009815, 3.773692, 3.913712, 4.532695, 1.372892, -1.063987, 1.025051, 2.728509, 9.491262, 4.673415, 2.517928, 0.824100, 1.517722, -2.984458, 0.270283, -1.110453, -2.754004, -3.045094, 1.386551, -6.637009, -6.467078, 5.209693, 0.221588, 1.345757, -1.233974, 1.406563, -11.624565, -2.558307, 3.355196, -1.574055, 11.278919, -4.175966, -3.528599, -5.955521, 5.521868, -6.089912, 1.871637, 0.704803, -0.803571, -3.412199, 6.814842, -2.581755, 1.461685, -1.340520, 1.030475, 0.972731, -2.055774, 1.705598, 3.048807, -1.037460, 2.906647, -0.434317, -0.054622, -3.738979, -4.256308, -4.723948, -0.522000, 4.060871, -4.338176, -24.310600, 3.466682, -0.756065, -4.103305, 1.243985, -2.868507, 0.153364, -0.084377, 3.205434, -1.317540, -0.319762, -0.802727, 2.456871, 3.382993, 4.963143, -0.354739, -2.737841, 2.374343, -1.887784, 1.198460, -7.294523, -2.117028, 46.393829, 2.054618, -1.339482, 2.647988, 1.026573, -0.775336, -1.399183, -6.095242, 2.313640, -2.377140, -2.874966, 1.462420, 1.763429, -4.175523, 0.322729, 0.076063, -0.492210, 5.528355, 2.494064, 3.575900, -4.731384, 1.914505, 0.780838, -0.513604, 0.834317, 4.637135, 0.748915, -2.242534, 5.284515, 0.941967, -4.771373, 12.168940, -2.509539, 2.931109, 6.130014, 2.304723, -0.401287, 1.846620, 2.191286, 0.522786, -2.212207, -2.330939, 3.671052, -3.602032, -8.045081, 1.841934, -15.802244, -4.091495, 2.758163, 3.801088, -0.116542, 4.200107, 3.809458, 2.594901, 8.304158, 2.272768, -3.162868, -4.738754, -1.238095, -2.981887, -0.739677, -8.554259, -1.512607, -3.465696, -0.641592, -5.622955, 0.712421, -0.786531, -3.055792, -1.708393, -1.229299, -2.440192, -2.387127, -1.278995, 0.990231, 0.675825, 7.402359, 2.521222, 0.413226, -1.471801, -0.305300, -2.968605, -0.631904, 2.190862, 1.293332, 0.988720, 1.396958, 1.053343, 0.096911, 5.328904] + "bge-large": [0.024039, -0.038347, 0.462841, -0.346994, -0.493149, -0.067771, -0.127009, 0.457763, 0.679811, 1.117488, -0.507460, -0.297143, 0.501781, 0.328284, -0.068164, -0.614378, -0.499466, 0.608233, -0.598813, 0.988144, -0.784753, 0.301685, -0.765091, -0.319510, 0.556811, 0.521258, 0.703390, 0.644621, 0.094413, 0.699328, -0.411216, 0.081379, -0.602488, -1.066510, 0.389288, 0.394632, -0.394823, -0.223870, 0.184864, -0.825304, 0.176048, -0.688826, 0.155480, -1.553499, -0.642785, -0.719652, -0.822690, -0.691164, -0.313068, 0.410722, 0.281606, 0.570033, 0.701120, -0.348983, -0.218627, 0.724534, -0.517123, 0.031305, 0.010115, -0.359149, -0.386363, -0.254697, -0.155943, -0.446081, 0.309647, 1.420156, -0.268117, -0.226962, -0.203144, 0.589186, 0.504303, 0.324233, 0.299427, -0.593514, 0.138594, -0.074979, -0.066175, 0.477158, -0.641204, -0.034921, 0.213645, -0.000795, -0.161809, 0.224692, -0.414971, -0.581543, -0.319061, 0.478232, -0.407286, 0.250403, 0.046477, 0.884424, -0.142024, -0.467369, 0.135704, 0.096996, -0.370368, 0.092568, 0.352313, 0.447578, 0.752397, 0.998242, -0.540093, 0.006617, -0.905970, 0.496670, 0.011045, 0.959182, -0.410129, -0.215019, 0.182778, 0.256185, 0.303586, 0.621730, -0.017259, 1.057570, -0.184744, 0.721374, -0.220152, -0.508228, -0.060931, 1.030603, -0.317814, -0.329569, 0.494586, -0.634041, -0.823213, 0.235345, -0.581277, 0.168740, 0.133082, -1.233292, -0.006694, 0.578659, -0.689239, -0.187945, 0.242467, -0.095285, -0.854486, -0.772621, 0.519269, 0.122245, -0.480240, 0.966866, 0.001102, 0.905225, 0.589656, 0.001633, -0.201133, -0.290645, -0.577360, -0.580420, 0.682507, 0.283289, -0.236482, 0.082860, -0.622025, -0.121613, -0.088719, -0.703420, -0.403435, 0.388868, 0.145208, -0.272479, -0.493587, 0.223292, -0.496810, -1.338430, -0.247627, -0.487943, 0.497644, 0.049727, -0.204878, -0.043479, 0.797190, 0.414568, 0.348627, -0.581622, -0.361081, 0.531377, -0.054698, -0.387710, 0.404950, 0.171304, -0.660941, 0.558095, -0.781390, 0.270634, -0.066290, 0.017421, 0.357592, 0.289197, -0.644477, 1.078607, -0.670527, 1.006922, -0.023431, 0.287122, 0.053714, -1.138165, 0.200286, -0.511134, -0.764367, 0.305660, -0.314374, -0.165855, 0.720761, 0.498760, 0.227570, 0.939510, 0.712638, -0.818489, 0.459563, -0.716463, 0.952465, -0.845812, -0.250020, 0.437677, -0.584231, -0.652154, 1.004395, 0.246383, 0.486493, 0.342902, -0.481645, 0.009694, -0.045601, 0.151144, -0.170793, 0.069734, 0.098635, 0.001641, 0.400860, 0.522282, -0.346017, -0.096438, 0.574122, 1.035365, -0.465095, -0.763473, -0.449174, 0.148971, 0.538250, -0.109340, -0.170925, -0.259899, 0.098922, -0.247497, -0.001744, 1.396060, 0.078523, 0.442453, 0.922389, 0.067131, -0.767715, 0.080174, 0.430499, -0.480311, -0.237539, -0.463241, -0.212067, 0.404237, 0.745463, -0.591360, 0.343834, 0.260656, -0.300406, 0.626147, 0.207831, -0.801615, -0.545930, -0.160492, -0.129047, 0.026581, -0.697179, 0.508048, 0.558601, -0.749405, 0.977793, 0.029561, 0.647086, 0.314676, 0.048764, -0.367489, -0.731107, 0.353331, -0.157606, 0.437560, -0.239715, 0.323113, -0.310159, -0.154852, -0.393089, -0.732315, 0.370970, -0.695473, 0.777642, 0.790265, -0.897683, -1.084831, 0.254625, 0.498958, -0.686283, -0.054467, -0.359679, 0.598942, -0.097531, 0.646774, 0.284204, 0.099393, -1.082093, 0.950092, 0.348287, 0.407546, -0.471047, -0.183087, 1.205812, -0.389125, 0.010742, -0.272271, -1.166924, -0.672814, -0.352504, 0.562947, -0.374331, 1.169590, -0.105941, -0.307542, 0.700021, -0.716867, -0.840581, 0.270715, 0.163185, 1.321526, -0.183398, -0.346971, 0.122558, -0.107053, 0.336540, 0.380659, 0.436564, 0.549777, 0.614476, 0.299872, -0.768990, 0.558210, -0.146534, -0.023198, -0.829138, -0.082463, -0.505372, -0.171084, -0.238338, -0.247962, -0.951597, 0.048372, -0.678119, -0.521903, -0.318347, -0.452486, -0.480246, 0.180648, -0.355445, 0.203976, -0.209722, -0.508359, -0.068691, -0.561336, 0.037534, 0.293634, 0.862909, -0.217598, -0.976304, 0.444537, 0.258414, 0.383516, 0.193912, 1.260977, 0.014518, -1.330892, -0.402357, -0.784765, 0.193229, 0.573393, 0.421933, 0.021238, 0.086121, 0.145912, -0.238766, -0.469343, 0.154332, -0.314999, 0.687203, -0.951709, -0.401193, -0.071075, 0.219311, -0.031782, -0.339140, -0.028275, -0.877709, 0.296486, -0.257803, 0.225698, -0.291177, -0.053148, -0.188709, -0.204189, -0.610577, -0.711816, -1.070860, 0.293771, 0.201872, 0.207450, -0.008618, 0.335668, -1.683170, 0.344894, 0.258698, 0.526822, -0.221254, 0.116416, -0.199597, 0.553842, -0.522120, -0.637068, -0.556027, -0.551115, 0.535946, 0.216821, -0.497761, 0.175021, -0.533994, 0.128057, -0.418573, 0.527596, 0.948690, -0.350299, 0.852097, -0.062423, -0.276968, 0.773565, 0.443910, 0.322583, -0.785975, 0.009543, 0.480367, 0.209068, -0.678313, -0.385405, -0.407035, -1.297906, 0.399574, -0.551834, -0.072811, 0.876865, 0.058025, 0.050129, 0.062512, 0.393264, 0.537641, 0.454525, 0.268104, -0.032416, -0.036747, 0.560080, -0.501353, 0.660755, 0.272833, 0.994505, 0.327883, 0.334641, -0.241511, -0.130018, -0.041521, -0.993620, 0.231248, -0.548962, -0.097725, 0.097704, -0.190675, 0.310305, -0.633934, -0.461720, -0.385849, -1.151775, 0.788538, 1.173326, 0.501074, 0.718069, 0.045052, 0.336803, -0.627347, -0.885905, -0.055150, -0.517197, -0.265828, -0.760835, 0.265488, -0.592007, 0.669736, 0.391483, -1.244006, -0.044766, 0.267184, -0.732161, 0.108883, 0.341107, -0.733372, -0.248123, 0.420089, 0.684321, -0.854408, 0.433462, 0.606394, 0.392515, 0.957438, -0.767889, -0.696885, 0.604412, -0.113108, -0.718601, -0.116296, 0.411810, 0.519193, 0.473458, -0.536907, -0.388589, -0.600951, 0.041907, -0.236152, -0.869753, 0.300718, 0.349478, 0.053910, 0.342093, 0.794739, 0.455939, -0.614417, 0.704087, 0.159083, 0.280016, -0.600004, -0.117648, -0.160888, -0.250120, -0.373693, -0.073690, -0.870640, -0.795543, -0.308377, 0.713964, 0.253320, 0.166675, -0.895746, -0.340102, -0.230876, -0.594863, 0.531601, -0.360741, -0.556882, -0.119134, -0.976368, 0.087267, -0.343161, -0.251544, -0.109537, 0.296842, 0.535860, 0.166756, 0.608814, -0.957555, 0.523800, 0.702621, 0.017680, -0.168423, -0.831955, 0.211561, -0.756775, 0.392083, 0.474775, -1.039505, -0.837279, 0.249130, 0.106837, -0.579350, 0.118089, 0.819887, 0.748663, -0.638829, -1.199692, -0.314871, 0.576406, 0.035968, -0.635193, 0.045601, 0.218008, -0.098599, 0.174968, -0.723444, -0.729469, 0.001569, -0.190149, -0.275895, 1.065681, 0.571474, 0.054909, -0.327608, 0.551374, 0.817592, -0.774560, 0.614756, -0.381320, -0.545429, 0.076523, -0.372691, -1.197497, 0.127345, 1.155008, -0.640771, -0.327471, 0.085520, 0.107688, -0.748042, -0.560171, -0.276370, -0.038262, 0.387793, -0.215517, 0.118266, -0.714739, -0.154861, 0.396160, 0.593339, 0.589378, 0.028835, 0.241376, 0.042141, -0.523641, 0.126959, 0.935107, -0.211251, -0.726002, -1.025221, -0.721624, -0.050342, 0.012038, 1.320356, -0.272534, -0.803559, -0.046351, 0.884062, 0.020212, 0.615363, -0.071383, -0.345005, -0.811035, -0.460907, -0.500396, 0.453140, 0.471308, 0.444800, 0.258542, -0.584203, 0.449661, 0.135160, -0.387587, -0.221622, -0.076337, -1.057212, 0.173197, -0.189821, -0.711939, -0.413757, 0.308206, 0.622130, 0.708138, 0.444111, 0.487874, 1.120553, 0.118679, -0.540622, 0.136736, -0.190780, -0.214187, 0.374449, -0.483963, -1.133756, -0.159417, -1.415638, -0.350970, -0.773624, 1.413625, -0.205978, 0.108167, 0.274323, -0.648656, -0.647947, 0.956530, -0.074931, 0.877102, 0.697868, -0.749976, -0.609230, -0.068542, -0.384666, 0.294959, -0.340945, 0.131206, -0.177724, -0.489942, -0.096782, 0.777968, -0.637257, -0.044241, -0.069437, -0.031091, 0.548920, 0.223832, 0.168111, 0.326249, -0.509304, 0.222289, -0.496488, 0.042405, -0.461870, 0.539182, -0.471028, 0.677901, 0.404017, -0.288360, 0.574693, 0.125570, -0.171968, 0.363617, -0.607646, 0.176145, -0.606125, -0.328785, -0.640751, 0.374096, 1.048204, -0.313034, 0.100986, -0.784966, -0.250171, 0.912168, -1.025634, 0.503043, 0.223636, 0.228117, -0.015414, 0.240801, -0.252166, 0.030347, -0.147616, -0.433802, 0.260080, 0.279674, -0.286669, 0.455490, -0.597277, 0.120468, 0.421284, -0.258305, -0.961932, -0.385011, 0.032877, 0.244522, 0.379023, -0.664474, -0.015864, 0.649027, -0.788270, 0.157624, 0.014344, 0.036268, -0.992782, 0.796631, 0.249918, 0.677315, -0.205997, 0.241406, 0.757386, -0.600373, -0.331029, 0.933069, 1.086852, 0.083678, 0.376522, 0.403924, 0.377648, -0.042369, -0.547139, 0.091252, 0.025642, 0.424251, -0.003666, 0.955620, -0.145103, 0.049600, -0.069422, 0.055362, -0.621319, 0.478375, 0.154653, -0.514783, 0.194654, 0.538316, 0.943191, 0.567165, 0.045876, 0.217836, -0.222502, 0.080708, -0.117927, 0.660409, 1.213474, 0.355032, 0.276661, -0.260388, 0.061745, 0.659131, 0.199574, 0.642133, 0.376517, 0.416903, 0.449107, 0.393621, -0.041701, 0.495682, -0.321740, -0.077355, 0.031195, 0.414428, -0.256163, -0.540369, -0.717043, 0.756481, -0.033913, -0.318658, 0.110866, -0.091919, -0.467310, -0.719127, -0.160681, -0.476158, -0.210822, 0.690969, -0.576195, -0.680460, 0.640990, 0.247635, 0.553866, 0.179465, 0.576756, -0.491404, 0.494118, 0.905198, 0.975047, 0.142414, -0.105395, -0.001236, -0.098407, 0.917251, -0.934928, 0.427773, 0.201490, -0.883434, 0.146678, 0.131258, -0.627530, 0.283771, 1.056841, 0.249137, -0.432169, 0.102893, -0.601772, 0.149619, 0.204771, -0.398293, -0.412422, 0.278212, 0.491656, -0.089399, 0.873944, -1.076035, -0.289737, 0.518608, 0.279936, -0.561303, 0.457872, -0.377196, -0.723158, 0.301284, 0.713279, -0.516915, 0.246398, -0.146212, -0.107791, 0.355130, 0.684852, -0.142000, 0.789737, 0.879708, -0.365120, 0.099291, 0.410180, 0.470490, 0.829318, -0.147951, -0.417694, 0.120578, -0.903391, 0.031227, 1.034810, 0.827134, -0.471782, 0.133071, -0.496682, 0.361501, 0.156133, 0.677549, -0.348436, -0.028671, 0.790463, -0.571760, 0.097967, -1.497927, 3.998502, -0.323853, 0.344129, 0.241947, -0.097188, 0.455215, 0.460807, -0.107297, 0.224733, -0.181965, 0.006772, 0.232354, 0.215642, 0.355157, -0.091705, 0.449662, -0.673846, 0.103441, -0.285815, 0.132106, -1.106716, 1.052483, 0.690821, 0.109796, -0.019761, -0.170980, -0.275892, -1.094656, -0.006860, 0.270457, 0.412620, -0.319876, 0.299898, -0.925710, -0.079399, 0.917133, 0.618690, 0.181835, -0.421960, 0.257434, -0.245298, -0.627717, 0.086556, -0.188181, -0.000217, 0.009816, -0.128868, -0.292978, 0.028611, -0.165371, 1.332524, -0.176894, -0.525608, -0.212523, -1.248178, -0.205692, 0.129486, 0.039485, -0.508195, -0.483117, 0.422421, -0.543860, -0.527850, 0.602725, 0.193667, -0.479670, 0.224528, -0.010666, -0.285405, -0.114900, 0.305532, 0.250431, 0.519431, -0.631143, 0.860580, 0.346646, -0.338854, 0.966525, 0.725609, 0.251660, -0.241813, -0.629311, -0.326549, -0.255540, 0.659550, -0.276785, -0.819163, -0.575508, -0.028528, 0.426802, 0.223381, 0.092294, -0.086065, -0.027457, -0.197430], + "bge-m3": [-1.163652, 0.618828, -0.905190, -1.253793, -0.470312, -0.164061, -0.703505, 0.082027, 0.972863, -0.179872, 0.095510, 0.351793, 0.048929, -0.223130, 0.521525, -0.744582, 0.686046, 0.461447, -0.321385, 0.567212, -0.340401, -0.845359, -0.586658, 0.619847, 0.111020, 1.712055, 0.409665, -0.394177, -0.875329, 0.691736, -0.062993, 1.267794, -0.649817, -0.186475, 0.065668, -0.582576, 0.218582, -0.277300, -0.798978, -0.420914, 0.259674, -0.799499, -0.083037, -0.585644, 0.304258, -1.064213, -0.109803, -1.128103, -1.306733, -0.918954, 0.357464, -0.086641, 1.512438, -0.344092, 1.709364, -0.379784, 0.345465, -0.274672, -1.391643, -1.128119, -0.556447, -0.231167, -0.755679, -0.363743, -0.041387, 2.420257, 0.273253, -0.230515, -0.207614, -0.489025, -0.416256, 0.441802, 0.175379, 0.216838, -0.793567, -0.467487, -0.398801, -0.377043, -0.881945, 0.746016, 1.790683, 0.365589, -0.149607, 0.304202, 0.251869, 0.688966, -0.742798, 0.713783, -0.381228, -0.673283, 0.165588, 0.824444, -0.054766, -1.152380, -1.175357, -0.073137, -0.163256, 0.225808, 0.009538, -0.854943, 0.213887, 0.171592, -0.328142, -0.078730, -0.367466, 0.180963, 2.196759, 0.351117, 0.032242, 0.237627, 1.519575, 2.188049, 0.246498, 0.462086, -1.085708, -0.487027, -0.060558, 0.185977, 0.286648, 0.927450, 0.373341, 1.940960, -0.483723, -1.037904, -0.921969, -0.953877, 0.680308, -0.221009, -0.541267, 0.540189, -0.978119, -0.422978, -1.388511, 0.996624, -1.509019, -0.010119, 1.470962, 0.454587, 0.126889, -0.831792, 0.802434, 0.403774, -0.174330, -0.324357, 1.110597, -0.337318, 0.770860, -0.790739, -0.142379, -0.350897, -0.425629, 0.213485, 0.827783, 0.091591, -1.880225, 0.205549, -0.976241, 0.280589, -0.562943, 0.441039, 1.935174, -0.259294, -0.890740, 0.841239, 0.432561, -1.069768, 0.179474, 1.600235, -0.943109, -0.741504, -1.124047, -0.995062, -0.661893, -0.219779, -0.233892, 0.576320, 1.285442, -0.209723, 1.537745, -0.425563, -1.214752, -0.923918, -0.124061, -1.069031, -0.741366, 0.810525, 0.199829, -0.345948, 0.582442, 0.113042, 0.566860, -0.738557, 0.116376, -0.324465, 0.676049, 0.118533, 0.602040, -0.025348, -0.027218, 0.254897, -1.073126, 0.163008, 1.074775, -0.281091, -0.584436, 0.510993, -1.477771, -1.034080, 0.200979, -0.290050, -0.011207, 0.084164, 1.248515, -0.524159, -0.810181, -0.450788, 0.647109, 0.691252, 0.300418, 0.901978, -0.115200, 0.011114, -1.075599, -0.847911, 0.678090, 0.926806, 0.404369, 1.622731, -1.546829, 0.306439, -0.685058, 0.117991, -0.429991, 0.137432, 0.576027, -0.985581, 0.046240, -0.219909, 1.029748, 0.420121, -0.963578, -0.494764, 0.014950, 0.636199, -0.504589, 0.769162, -0.881779, -0.962038, -0.154420, -0.610020, 0.309414, -0.883101, -1.241308, 0.812775, 0.903434, 0.745291, 0.221562, -0.192639, 0.448151, 0.771422, -0.051614, -0.423039, -0.022728, 1.248590, 0.341369, -0.156364, -0.310575, -0.138180, 0.291523, -0.407374, -0.890282, 0.403821, -0.524653, -0.239099, -0.287940, 0.690068, 0.271114, -0.533419, 0.188126, 0.336804, -0.110461, -0.557476, -0.085220, 0.517861, 0.333441, -1.297504, -0.185885, 0.276636, -0.311948, 0.206569, -0.600184, 0.581593, 0.971845, 0.736159, 0.274800, 0.659640, -0.237189, -4.406933, 0.764175, 0.484959, 0.425028, 0.279998, 0.082446, 0.106166, -0.400566, -0.111809, -0.438413, -0.395343, -0.383280, -1.301542, -0.238317, -0.520431, -0.271068, 0.125081, -0.989195, 1.288310, -0.726180, -0.113323, 0.218088, 1.641463, -0.411398, 0.825945, 0.349424, -0.737621, 0.489004, -1.250374, -1.037535, 1.224085, 0.752676, -0.599310, 0.717178, 1.498260, -0.693413, 0.148924, -0.719587, 0.257805, 0.351839, 0.111333, 0.844757, -0.457685, 1.127257, -0.460556, 0.074332, -0.141880, -0.485869, 0.665276, -0.457685, -0.244716, 0.249428, 0.107637, 0.132662, -1.164773, 0.896577, -0.366220, 0.028423, 0.036802, -0.262784, 0.150325, -0.959901, -0.057475, -0.180967, -0.200147, -0.368360, -0.230614, 1.176084, 0.679591, 0.261886, 0.629648, 0.737742, 0.403212, 0.210203, 1.580765, 0.784599, -0.829777, -1.274671, 0.362488, -2.163397, 0.472646, -0.484839, 0.424191, -0.158389, 0.006840, -1.505223, -0.768726, 0.560234, -0.048017, 5.990689, 1.096192, -0.719613, -0.003658, 1.635494, -0.820416, -0.268525, -0.216036, -0.224648, -0.331906, -1.028154, 0.256836, 0.446341, -0.476838, 0.135180, -0.118145, -1.110858, 0.185139, 1.058594, -0.518204, 0.225496, -0.679997, 0.602923, 0.015012, -0.045347, -1.041452, -0.561471, 1.611037, 0.500397, 0.403730, -0.600531, -0.166728, -0.226605, -0.457655, -0.364749, 0.029100, 0.027244, -0.172310, 0.410003, -0.731845, -0.747907, -0.543934, 0.631420, 0.335052, 2.622190, 0.446748, 1.071730, -1.148975, -0.450148, -0.414917, -0.377084, -0.188358, -1.372026, 1.013808, -1.892715, -0.867268, -1.137526, -0.824643, 0.323355, -0.275496, 0.640334, 0.527107, 0.209479, -1.346437, -0.267033, -0.529451, 1.065325, -2.254484, 0.564502, 0.157927, -0.588466, 0.189490, -0.261343, 1.052018, 0.718598, 0.798245, 0.572395, 1.279051, -0.909643, -0.460709, 0.803950, -0.392634, -0.782980, -0.416535, 0.030860, 0.838579, 1.081511, 0.470479, 0.681827, -0.742406, 0.382160, 1.160084, -1.642357, -0.304695, -0.428125, 0.037154, -1.084144, -0.804252, 0.342781, 0.323663, -0.524140, -1.088634, -0.219811, 0.827245, 0.095377, -0.963251, 0.922217, 0.777934, 0.037865, 0.707217, -0.162305, -0.556667, -0.608850, 0.779624, 0.823697, 1.053724, 0.136177, -0.825125, 0.390704, 0.753296, -0.532132, -0.566832, 1.174511, 1.312280, -0.295556, -0.021912, 0.103610, 0.561278, 0.378439, -0.171413, 0.404188, -0.776768, -0.111828, 0.710294, 0.829760, 0.021257, 0.950445, 1.450095, -0.110993, 1.167221, 0.067429, -0.740892, 0.152672, -1.821892, -0.205020, -0.945883, 0.616989, -1.607837, -1.027327, -0.406420, 0.697864, -0.430407, 0.512216, -1.148746, 0.304989, -0.048626, -0.018003, -1.205931, -0.167988, -0.452699, -0.171864, 0.305430, 0.342613, 3.103723, -0.456765, 0.386404, -0.976485, 1.002408, 1.758071, -0.323009, 1.080490, 0.234141, 0.350472, 0.342470, -0.092633, -0.202191, -0.651984, -0.010415, -1.271208, -0.834261, 0.624160, 0.626814, 0.435717, 1.404915, 0.032816, 0.692589, -0.332760, -0.938337, 0.685713, -0.649501, -0.030318, 1.520618, -0.113226, 0.168493, 1.188649, 0.849937, -0.023103, 0.775396, 0.140640, -0.375826, 1.231302, -1.064034, 0.020575, -0.893133, 0.735320, -0.214707, 0.946076, -0.070447, -0.026259, -0.174914, -1.390845, 0.068669, -1.082013, 0.075056, 0.087718, -0.452876, -1.180986, 0.061357, -0.300270, -1.295491, 0.053011, -0.933739, 1.421424, -0.659965, 0.397345, 1.453196, -0.295340, 0.365680, -0.027438, -0.710926, 0.028572, 0.516905, 0.252887, -0.232969, 0.307614, 0.510719, -0.664315, 0.164050, 0.239428, 0.049089, 0.150806, 1.034268, 0.934897, 1.919058, 0.465491, 0.101131, 0.660938, 0.537735, 0.576314, 0.531952, -0.931799, 1.508889, 1.183699, 0.159992, -1.574395, 0.306816, 0.428373, -0.106119, -0.331852, 0.158834, -0.143560, 0.293604, 0.334218, -0.050743, -0.638603, -0.411927, 0.876082, 0.378716, -0.580921, -0.806894, -0.516050, 0.098121, -1.087711, 0.190285, -0.414296, 0.727918, -0.575017, 1.408799, -0.919858, -0.558292, -0.300425, 1.891600, -0.693483, 0.705709, -0.300140, 0.814882, 0.321165, 0.363232, 0.349454, -0.501523, -0.090162, -0.154028, -0.241447, 0.049108, -0.713081, 0.359210, -1.196985, 1.020369, -0.661096, 0.485430, -0.322663, 0.764692, -0.907630, -0.806229, -0.314653, -0.105785, 0.161882, -1.020135, 1.672966, 0.626456, 0.691320, -0.851301, 1.090910, 0.030638, -0.222875, -0.381643, -0.870990, -0.937903, -1.520750, 0.153265, 0.035444, 0.063305, 0.533454, -0.481838, 0.857454, 0.121786, -1.567186, -0.401756, -1.555978, 0.283483, -0.613732, 0.420711, 0.087113, -0.532127, -0.043685, 0.364727, -0.562271, -0.670831, 1.212718, -0.743813, 0.202982, 0.787329, 0.519970, -0.580712, 1.361753, -0.937466, 0.196976, 0.415543, 0.481801, -0.071805, 0.340796, 1.250183, -0.783735, -0.140593, 0.101404, 0.210934, -0.778091, -0.885641, -0.342511, 0.516675, -0.655029, 2.175328, -0.256690, 0.377622, -0.534047, 0.309324, -0.170101, 0.977620, -1.450993, -0.154302, 0.173609, 2.269883, -0.000561, -0.925666, -0.565194, 0.507634, -1.185795, -0.401353, 0.136991, 0.293279, -0.482286, -0.500084, 0.002310, -1.121295, 0.100760, -0.739259, 0.222734, 0.119925, 0.339469, -0.586292, -1.493040, 0.622479, -0.747219, -0.743393, -3.922702, 0.408569, 0.535261, 0.247139, -0.542380, -0.278869, -0.639750, 0.513620, 0.001122, -1.466986, 0.676099, 0.799499, -0.771358, -0.805293, 0.544380, 0.588382, -0.304690, 0.870684, 0.196139, 0.888571, 0.786923, 0.175153, -1.104996, 0.517936, 0.713752, -1.476047, 0.730146, -1.616862, -1.492363, -0.183991, -1.058371, -0.900333, 0.117169, -0.543355, 0.261570, 0.444710, -0.322766, 0.298668, 0.827132, -0.223084, 1.214951, 0.628750, -0.884847, -0.865226, 0.130090, 1.810004, -0.730082, 0.276635, -0.577859, 1.122619, 0.021804, 0.143118, 1.250908, 1.679412, -0.589070, 0.273129, 0.696544, -0.437099, 0.363609, 1.904461, 0.424258, -0.798950, 0.011440, -0.469831, 0.239396, 0.399090, -2.281853, 0.588306, 0.315643, 0.407922, -0.894631, 0.584790, -0.111282, 0.072564, 0.549340, -0.151000, 0.961584, -0.142195, -0.131039, -0.565507, 1.176457, -1.179150, 0.179413, -0.598087, 0.099043, 0.042032, -0.075051, -0.731284, -0.133210, -1.382448, -2.279306, -0.403052, -0.724345, 0.556309, -1.540282, 0.574812, -0.643957, 0.183044, -0.295641, -1.084364, -0.259686, -0.171164, -0.180959, -1.548872, -0.747403, 0.947635, 1.591533, -0.341205, 1.404997, 0.013603, -0.453552, -0.641701, -0.078721, 0.716163, 0.285006, -0.230870, -0.008953, -0.368268, -0.100502, 0.269899, 0.230945, 0.552212, -1.116358, -0.712987, 0.353647, 0.335525, 1.086648, -0.100658, 0.075118, -1.479047, 0.039835, -1.229527, -0.154034, -0.048582, 0.044424, -0.448086, 0.421651, -0.138098, 0.664101, -0.872840, -0.162016, 0.213308, -0.365804, -0.412847, -0.759087, -0.780796, 0.001318, 0.305747, -0.211793, 0.124662, 0.885734, -0.131601, -0.674032, 0.168440, 0.458261, -0.233686, -0.443784, -1.741402, 1.222820, 0.259206, 0.584931, 0.922024, -0.648978, -0.689315, -1.521089, -0.069604, -0.331466, -1.182055, -0.344221, 1.061642, 1.322893, 0.739791, -1.050145, 0.851500, 1.319152, -0.535642, 0.939238, 0.664533, -0.097770, 0.181310, 0.921663, 0.286461, 0.753161, 0.421270, 0.237947, 0.069269, -1.050368, 0.258926, 0.855673, -0.278228, 0.094278, 0.063465, -0.261328, -0.475584, 1.375401, 0.486791, 0.143706, 0.310861, -0.413471, 0.331069, 0.057585, -0.696880, 0.059690, -0.499857, -0.038814, -0.729175, -0.427204, -0.145725, -0.514364, 1.143510, 0.256640, -0.040266, 0.105976, 0.365687, -0.578586, -0.145434, -1.370688, -0.156173, 0.027702, 0.873359, -0.278380, 0.505771, -0.935729, -0.524011, 0.199508, 0.523426, -1.357513, 0.800852, -0.588984, -0.250718, -0.564070, 0.499215, -0.961143, 0.091248, -0.502934, -0.593627, 0.112086, 0.441678, 0.178119, -1.417176, 0.302864, 0.262056, 1.052542, -0.875852], + "granite-embedding": [-2.536415, 1.025378, 3.795320, 2.816078, 1.672389, -0.321842, -1.830665, 1.085665, 1.543426, 0.266452, -0.923658, 1.775088, -1.458130, -1.872541, 2.783779, 3.365061, -3.732900, -1.184550, 2.101091, 3.656288, 0.092458, -2.766870, 1.659767, -0.196348, -1.044039, 0.847501, -2.523418, -1.274257, 0.825729, -12.933701, 1.748642, 1.175220, -1.464753, -2.895138, -2.450277, -3.597641, 1.973193, 0.201233, 1.763634, -1.428473, -4.429179, 0.927239, -0.888178, 2.484172, 7.524234, -0.659311, -0.868720, -1.134337, -0.981680, -0.735708, 1.701170, -2.662972, 2.119784, -2.532659, -1.948079, -6.194542, 1.134831, -1.066310, -3.502296, -1.788158, -0.464903, -0.742469, -1.246672, -1.675172, -1.368769, -2.500272, 1.515540, 0.366238, -1.757977, -0.982667, 1.924835, -2.230703, 2.231205, -2.514185, 0.044323, -3.664561, -4.781680, -2.992031, -2.070254, 3.560326, 1.053289, 0.047190, -4.584332, -0.724987, -0.388676, -0.310275, -3.155804, 0.227004, -2.083627, 2.047445, -2.079158, -0.575225, 6.304890, -0.031501, 0.462336, -0.829355, -4.816799, 1.741297, -2.753798, 1.036178, 0.983251, 0.722061, 2.540172, -3.326728, -2.789650, -1.913751, -0.620477, 1.078412, 2.168520, 2.016615, -1.219361, 1.335803, 2.868629, 0.981050, -4.059271, 0.234513, -0.083898, 0.971348, -0.263174, -1.968408, 0.704012, 2.379015, 0.600126, -0.493176, 1.401030, -0.410480, 0.382244, 1.720227, -2.114926, -0.771168, 5.429767, 3.420442, -0.953764, 2.549525, -1.327544, -2.875127, -3.403870, 2.861185, 1.167850, 0.574589, -2.081132, 0.634266, -0.865521, -4.541782, 1.374379, -5.206360, -8.326836, 2.127602, -0.852766, 0.689835, -2.805196, -0.002757, -2.063781, -0.077209, 0.093746, -3.044747, -6.398154, 1.650461, 0.186397, -0.398030, -2.810863, -0.139088, -1.066351, 1.919302, -2.155942, 1.702096, 2.014229, -1.912692, -2.390250, 0.423165, 1.850771, -1.651344, 1.724671, 4.047080, -3.261983, 3.210479, 0.949645, 5.331405, -0.408415, -1.113683, 0.576815, -0.521958, 3.413075, -0.378029, -1.315172, -1.171414, -0.346214, -1.201081, 1.274188, -0.710405, 1.842573, 1.352969, -1.525423, -0.811122, 6.575615, -1.740525, 0.405175, -0.981346, 3.110792, -1.829732, 0.300260, 0.537819, 8.903088, 1.813258, 1.675501, 1.578778, 3.467683, -0.158675, 0.612964, -2.292973, 0.922560, 4.605384, -0.134895, -1.254207, -0.719815, -0.667284, -1.496120, -6.536211, 2.063332, -1.163015, 0.737323, -2.384261, 1.708237, 1.372473, -1.811628, -4.332099, -0.731918, 2.696045, -1.720132, -1.220778, 2.114940, -0.919327, -2.135255, 3.815462, -6.416215, -0.341502, -3.406770, 0.495322, -3.182386, -0.336667, 2.450030, 3.009023, 0.722499, 0.081912, 4.044388, 3.512044, 2.931789, 0.730138, -1.907933, -1.721140, -1.410528, 5.063971, 3.555292, -0.803773, -0.418707, 2.150873, -1.499643, -0.241864, 1.642959, -1.800459, 2.636479, -2.164312, -0.856143, -1.757669, 0.303105, 1.340562, 0.149081, 2.404001, 0.671760, 1.384440, -1.214214, -0.165689, 1.933697, -2.771253, 0.512672, -0.815164, -5.976588, -0.650810, 0.867828, 0.077860, -1.210157, -0.530869, 1.055210, -1.805136, -5.100460, -0.945214, -0.232883, -0.047261, -2.957785, 0.748408, 1.443761, -3.016631, -0.596225, 0.851031, 3.318561, 3.874947, 0.277137, -3.380981, 3.609087, 0.325276, -0.285994, 2.100333, -2.878307, -1.167943, -0.661292, 1.414397, -1.630184, 0.083804, -0.808080, -1.865619, 0.086283, 1.294819, -0.051233, -3.521299, 2.218963, -1.576188, -1.405406, -0.544474, -0.470767, -0.945119, 2.581504, -2.016311, -2.786135, 5.182769, 8.226369, -1.915234, -1.801714, 3.443246, -1.553856, 1.854356, 0.115487, -1.038386, 0.165909, 1.444107, 6.934114, 0.443966, 1.244355, 2.699343, 0.599981, 0.348800, -3.672412, -0.071744, 0.481836, -2.632783, 3.071344, -0.366742, -4.075869, -1.577612, 0.523174, 1.230972, -0.558831, -4.120513, 0.771954, -1.533380, -4.686942, 0.159136, -1.181124, -0.972859, -2.669278, 2.706732, 0.551190, 1.432018, 1.483778, 0.968241, 1.275665, 0.818992, -3.042070, -1.231901, -2.284246, -0.865500, 0.263049, -2.420332, 0.705560, 0.633178, 2.384922, 0.331453, 0.747627, -6.372644, 0.821781, -5.628873, 1.683971, 0.046585, -10.283202, 2.055868], + "mxbai-embed-large": [-0.184430, -0.044229, 0.257643, -0.340901, -0.494335, 0.091339, -0.128759, 0.432637, 0.724959, 0.991389, -0.708882, -0.403970, 0.461882, 0.291021, -0.155411, -0.517737, -0.507892, 0.593476, -0.632355, 0.989990, -0.793276, 0.410782, -0.710714, -0.392212, 0.671396, 0.544336, 0.793681, 0.426529, 0.050131, 0.794476, -0.365169, 0.158634, -0.525134, -1.073285, 0.289087, 0.421985, -0.181116, -0.277893, 0.411325, -0.823697, 0.158263, -0.776151, 0.180766, -1.537495, -0.595382, -0.798639, -0.887673, -0.828362, -0.192054, 0.534375, 0.244046, 0.513111, 0.792217, -0.443562, -0.240577, 0.568054, -0.602470, -0.063402, -0.021810, -0.225963, -0.385676, -0.335298, -0.146143, -0.481427, 0.290886, 1.367729, -0.337673, -0.311578, -0.178011, 0.634559, 0.491958, 0.487708, 0.187159, -0.580782, 0.243836, 0.014322, -0.103781, 0.495297, -0.637951, 0.210895, 0.204865, -0.016029, -0.246061, 0.233346, -0.478157, -0.558347, -0.311118, 0.440266, -0.601550, 0.339132, 0.016395, 0.852818, -0.050276, -0.467989, 0.183518, -0.068032, -0.359197, -0.066681, 0.317749, 0.686872, 0.762136, 0.893017, -0.400377, 0.071887, -0.772756, 0.480981, -0.071267, 1.038188, -0.365921, -0.162451, 0.155094, 0.300965, 0.372498, 0.537590, -0.089499, 0.980337, -0.072252, 0.809650, -0.189996, -0.506872, -0.215468, 1.173936, -0.340243, -0.363687, 0.601494, -0.585390, -0.938341, 0.217940, -0.634498, 0.187639, 0.266674, -1.292217, -0.016839, 0.576413, -0.752896, -0.109006, 0.398096, -0.092125, -0.786432, -0.872161, 0.586165, 0.230709, -0.610144, 1.061853, -0.008028, 0.958815, 0.546893, 0.003219, -0.232854, -0.319982, -0.712559, -0.571618, 0.456460, 0.300718, -0.310005, 0.265730, -0.712883, -0.181774, 0.033142, -0.831168, -0.386635, 0.305330, 0.146375, -0.147643, -0.508379, 0.049415, -0.583293, -1.235440, -0.286194, -0.458141, 0.601308, 0.189742, -0.213759, 0.017279, 0.678105, 0.299103, 0.288363, -0.392151, -0.355677, 0.605839, 0.084698, -0.495191, 0.340367, 0.208737, -0.714317, 0.616687, -0.832112, 0.137910, -0.016345, 0.026855, 0.327972, 0.264948, -0.523514, 1.131886, -0.610398, 1.097030, 0.031263, 0.209969, -0.003950, -1.267444, 0.253044, -0.410123, -0.748738, 0.343910, -0.210202, -0.356721, 0.702087, 0.403481, 0.189649, 0.880100, 0.735530, -0.637482, 0.405021, -0.697255, 1.082935, -0.942586, -0.234460, 0.495627, -0.500333, -0.753946, 0.741444, 0.219077, 0.507746, 0.372319, -0.497832, 0.029056, -0.059532, 0.239361, 0.017333, 0.100514, 0.191668, -0.091566, 0.462802, 0.598301, -0.290409, -0.111971, 0.614868, 1.004610, -0.487192, -0.792706, -0.577011, 0.257568, 0.659747, -0.104938, -0.072255, -0.133366, 0.286197, -0.385580, -0.091709, 1.294983, 0.131856, 0.270540, 0.619632, 0.055126, -0.731469, 0.141043, 0.452648, -0.496773, -0.064298, -0.505497, -0.191061, 0.260015, 0.774404, -0.500005, 0.262618, 0.206279, -0.323111, 0.526082, 0.249043, -0.876898, -0.593859, -0.076233, -0.071404, 0.014999, -0.666098, 0.547257, 0.527260, -0.847083, 0.987440, -0.077034, 0.606362, 0.281647, -0.173747, -0.422577, -0.772435, 0.463466, -0.053370, 0.354388, -0.074551, 0.331071, -0.292800, -0.152313, -0.420847, -0.976438, 0.296503, -0.807020, 0.583320, 0.734794, -1.042924, -1.068834, 0.194230, 0.557421, -0.683329, -0.252993, -0.338887, 0.656994, -0.026126, 0.629963, 0.230679, 0.283844, -1.162887, 0.978764, 0.159263, 0.428557, -0.670335, -0.119131, 1.104897, -0.354662, -0.088493, -0.344159, -1.152556, -0.733712, -0.644582, 0.547945, -0.314649, 1.112930, -0.085785, -0.122471, 0.757697, -0.561914, -0.842027, 0.031444, 0.055126, 1.339829, -0.080786, -0.376824, 0.171051, -0.127106, 0.201467, 0.252141, 0.623374, 0.608344, 0.600774, 0.526192, -0.781339, 0.752040, -0.183211, -0.013682, -0.889619, -0.015756, -0.667047, -0.146755, -0.277918, -0.041418, -1.103346, 0.021202, -0.888572, -0.395570, -0.323405, -0.508976, -0.464945, 0.108451, -0.271122, 0.136861, -0.008576, -0.532034, -0.096445, -0.467949, -0.033445, 0.234179, 0.706482, -0.457873, -1.118891, 0.268313, 0.440962, 0.082270, 0.201520, 1.338068, 0.030613, -1.423740, -0.353576, -0.758182, 0.194265, 0.556422, 0.504734, -0.047644, 0.118117, 0.189478, -0.292784, -0.570022, 0.192147, -0.311218, 0.780930, -0.819373, -0.494229, -0.080453, 0.161174, -0.068893, -0.302501, -0.122194, -0.887550, 0.187576, -0.238606, 0.254111, -0.480286, -0.010553, -0.235043, -0.213408, -0.693196, -0.871761, -1.177420, 0.421552, 0.150834, 0.428866, 0.173524, 0.333427, -1.617997, 0.589071, 0.319783, 0.598216, -0.285953, 0.030320, -0.250552, 0.620356, -0.410909, -0.402419, -0.542502, -0.859507, 0.544731, 0.140452, -0.465390, 0.210549, -0.443584, 0.258778, -0.097309, 0.538018, 0.906112, -0.435498, 0.769745, -0.112336, -0.146874, 0.774157, 0.303549, 0.353710, -0.594408, -0.050291, 0.460403, 0.166917, -0.557056, -0.427867, -0.571792, -1.193821, 0.455408, -0.514805, -0.114097, 0.755632, -0.036822, 0.244069, 0.017853, 0.320361, 0.600486, 0.345410, 0.248439, -0.065360, -0.147230, 0.681437, -0.376803, 0.619161, 0.224959, 1.061212, 0.348496, 0.348574, -0.257807, -0.132066, -0.019669, -1.047518, 0.230262, -0.404979, -0.217094, 0.350816, -0.226377, 0.359037, -0.590859, -0.638165, -0.439882, -1.194314, 0.977341, 1.182708, 0.566933, 0.653037, 0.293562, 0.393298, -0.785287, -0.710926, 0.050302, -0.501394, -0.292375, -0.478182, 0.249010, -0.654171, 0.677037, 0.281663, -1.149832, -0.215366, 0.208423, -0.789884, -0.023901, 0.393357, -0.861098, -0.378299, 0.416720, 0.888443, -1.049108, 0.301513, 0.703898, 0.510410, 0.783207, -0.712019, -0.682901, 0.652063, 0.001561, -0.840966, -0.029026, 0.395154, 0.613149, 0.474359, -0.393713, -0.282076, -0.544940, 0.096447, -0.421520, -0.848015, 0.425615, 0.298550, 0.063038, 0.395801, 0.638161, 0.510125, -0.514485, 0.667536, 0.213428, 0.246997, -0.401899, -0.264696, -0.292083, -0.163617, -0.314678, 0.010437, -0.826144, -0.622993, -0.570733, 0.776689, 0.390569, 0.167244, -0.921968, -0.253110, -0.087688, -0.611201, 0.519791, -0.400586, -0.565133, -0.155832, -0.869806, -0.069586, -0.332179, -0.325593, -0.176851, 0.292933, 0.544992, 0.309212, 0.693073, -1.008915, 0.640825, 0.803863, 0.050733, -0.121608, -1.046594, 0.325992, -0.824169, 0.366661, 0.620026, -1.136593, -0.807474, 0.276858, 0.043236, -0.494065, 0.081646, 0.808731, 0.832728, -0.723262, -1.256246, -0.325050, 0.524266, 0.039813, -0.704321, -0.126269, 0.095609, 0.082202, 0.086101, -0.826447, -0.920888, 0.154007, -0.300407, -0.268665, 1.098288, 0.614392, 0.120873, -0.454987, 0.571017, 1.130542, -0.767184, 0.506830, -0.420690, -0.584786, -0.044088, -0.406440, -1.072179, -0.057334, 1.156670, -0.761770, -0.425323, 0.149341, 0.284262, -0.712262, -0.567695, -0.224796, -0.110017, 0.330071, -0.340900, 0.158696, -0.727833, -0.147613, 0.423538, 0.510003, 0.606281, -0.080528, 0.186704, 0.072766, -0.565217, 0.119597, 0.906172, -0.123952, -0.762860, -1.154191, -0.660310, -0.160749, 0.144111, 1.347811, -0.369728, -0.820122, 0.006073, 0.964751, 0.018731, 0.465869, -0.101001, -0.335978, -0.754300, -0.334722, -0.480149, 0.628781, 0.483267, 0.457232, 0.117753, -0.521813, 0.551801, 0.084965, -0.318940, -0.066070, -0.098802, -1.013111, 0.143144, -0.174489, -0.640646, -0.311500, 0.376085, 0.679693, 1.051810, 0.688921, 0.696959, 0.970073, 0.269663, -0.530280, 0.100102, -0.269014, -0.388141, 0.306651, -0.285064, -1.084083, -0.004578, -1.495795, -0.214574, -0.831116, 1.321367, -0.018022, -0.032926, 0.408718, -0.809160, -0.638017, 1.053982, -0.068500, 0.827540, 0.449735, -0.892859, -0.777452, -0.191327, -0.306583, 0.189726, -0.296111, 0.082857, -0.138756, -0.403071, -0.173177, 0.587296, -0.515637, 0.072134, -0.039649, 0.172985, 0.354365, 0.193783, 0.270315, 0.342777, -0.521108, 0.215977, -0.537544, -0.070306, -0.460761, 0.478134, -0.382760, 0.653429, 0.395981, -0.165739, 0.720424, 0.143897, -0.038856, 0.363653, -0.709262, 0.169733, -0.667103, -0.367752, -0.539746, 0.300732, 1.065408, -0.421486, 0.107752, -0.725340, -0.318851, 0.935453, -0.989472, 0.480412, 0.058036, 0.393100, -0.074872, 0.293552, -0.245239, 0.005302, -0.016539, -0.376620, 0.350751, 0.242006, -0.198443, 0.433967, -0.524284, 0.116899, 0.421698, -0.111016, -0.967211, -0.320426, -0.062399, 0.177091, 0.348322, -0.699875, 0.141990, 0.826276, -0.848617, 0.025896, -0.130040, -0.034494, -0.888120, 0.856335, 0.249695, 0.814619, -0.131306, 0.120094, 0.643379, -0.611613, -0.357224, 0.776030, 0.960886, 0.129156, 0.408306, 0.367817, 0.269316, 0.070774, -0.516437, -0.052576, 0.091347, 0.260328, 0.024363, 0.875942, -0.280627, -0.102265, -0.039784, -0.072848, -0.560500, 0.449904, 0.261367, -0.364486, 0.101212, 0.669331, 0.761311, 0.717449, -0.052709, 0.197153, -0.262678, -0.031469, -0.055003, 0.644974, 1.261077, 0.392719, 0.296242, -0.339485, -0.021194, 0.603353, 0.280036, 0.629497, 0.364465, 0.452728, 0.643538, 0.378894, 0.091038, 0.456975, -0.513915, -0.126489, -0.009895, 0.325235, -0.066843, -0.528270, -0.705070, 0.692832, -0.033567, -0.373095, 0.114325, -0.005283, -0.594922, -0.727208, -0.231234, -0.534589, -0.161451, 0.769014, -0.490739, -0.689905, 0.751271, 0.116013, 0.617775, 0.171751, 0.616911, -0.557983, 0.512084, 1.131404, 0.902862, 0.123900, -0.130886, -0.095275, -0.146384, 0.973198, -0.939116, 0.415987, 0.141768, -1.016851, 0.149851, 0.220852, -0.581875, 0.281200, 1.005536, 0.315062, -0.401580, 0.134673, -0.673693, 0.345668, 0.241293, -0.400795, -0.281749, 0.368495, 0.381264, -0.130412, 0.837386, -1.158837, -0.186571, 0.424287, 0.333846, -0.583837, 0.640093, -0.476582, -0.713870, 0.361890, 0.745934, -0.563484, 0.294523, -0.299165, -0.072987, 0.605953, 0.568644, -0.225395, 0.680188, 0.766460, -0.218583, 0.227105, 0.441971, 0.476706, 0.851809, -0.150688, -0.313922, 0.075485, -0.767643, 0.136117, 1.051392, 0.787572, -0.419714, 0.122675, -0.540518, 0.298909, 0.135754, 0.669249, -0.181985, -0.089787, 0.697183, -0.446291, -0.030833, -1.476093, 3.910861, -0.303977, 0.346165, 0.212608, -0.071260, 0.537566, 0.450875, -0.119921, 0.219233, -0.238928, 0.069097, 0.273725, 0.292697, 0.470801, -0.138657, 0.494341, -0.798581, 0.083814, -0.197650, 0.258464, -0.970952, 1.141625, 0.720694, 0.143707, -0.231931, 0.017647, -0.545387, -0.972465, 0.025321, 0.373469, 0.364320, -0.454340, 0.282703, -0.805100, 0.071744, 0.888706, 0.679937, 0.149148, -0.405140, 0.212629, -0.196323, -0.542577, -0.039924, -0.108804, -0.079743, 0.055312, -0.170608, -0.294922, 0.139467, -0.190695, 1.359862, -0.148537, -0.612390, -0.195168, -1.193715, -0.320659, 0.292875, 0.053914, -0.631212, -0.395676, 0.342212, -0.614968, -0.445423, 0.628682, 0.036913, -0.490761, 0.384823, 0.048369, -0.272953, 0.008680, 0.474012, 0.105767, 0.458249, -0.761752, 0.951160, 0.299774, -0.386913, 0.840293, 0.739001, 0.305865, -0.168413, -0.653828, -0.398312, -0.069632, 0.567475, -0.260468, -0.812760, -0.575514, -0.053884, 0.415675, 0.269411, 0.248425, -0.074951, -0.186381, -0.143542], + "paraphrase-multilingual": [-0.019807, -0.124781, -0.010519, 0.035812, -0.103448, 0.051982, 0.035322, 0.030018, -0.179976, 0.194586, 0.129194, 0.157071, 0.083678, 0.074628, 0.093773, -0.367580, 0.002608, 0.086277, 0.050985, -0.005689, -0.038710, 0.071398, 0.010391, -0.059942, 0.007196, -0.066065, -0.010554, -0.011521, 0.145288, 0.120511, -0.139100, -0.096199, -0.045498, -0.109749, 0.046571, 0.023483, -0.086807, 0.150124, -0.067052, -0.100689, -0.004482, -0.014063, -0.062190, 0.071008, -0.107359, 0.012106, 0.026683, 0.107762, -0.002190, -0.121664, 0.057639, 0.175526, -0.129658, 0.061670, 0.274528, 0.052475, -0.124988, 0.189575, 0.027682, 0.105478, -0.010325, -0.008585, 0.156806, 0.021770, -0.119687, -0.030621, 0.061486, 0.089130, 0.080578, 0.004526, -0.163631, -0.035526, -0.044562, 0.036523, -0.202825, 0.050263, 0.022896, 0.042070, 0.126741, 0.073518, 0.199230, -0.121035, -0.013655, -0.071069, -0.065983, 0.313145, -0.021707, 0.124713, -0.039624, 0.225527, -0.015417, -0.164423, -0.142655, -0.059337, 0.030137, 0.127238, 0.127086, -0.082194, -0.081504, 0.325473, 0.274064, 0.185700, -0.021754, 0.175575, 0.002501, -0.045027, 0.057571, -0.260881, -0.035121, -0.142682, 0.209513, -0.166192, 0.007538, -0.121503, -0.079821, -0.121559, 0.157354, -0.130091, -0.088810, -0.004192, 0.023477, 0.050395, 0.015282, 0.022486, 0.027325, 0.041678, -0.146638, 0.171089, 0.150886, -0.087244, -0.011451, -0.035348, -0.045925, 0.063444, -0.065683, -0.126295, -0.046725, -0.017725, -0.119099, -0.096294, 0.124213, -0.001037, -0.077951, 0.116946, -0.128626, 0.076870, 0.015107, -0.013591, 0.030020, 0.049803, 0.057727, 0.192952, -0.265347, -0.031025, -0.077450, 0.015170, -0.168407, -0.094748, 0.057666, -0.069248, 0.034561, -0.111670, 0.047948, -0.082442, -0.038034, 0.005981, -0.336813, 0.151752, -0.080341, -0.163140, 0.234783, -0.070792, 0.098568, -0.062491, -0.038122, -0.056743, -0.216298, 0.015405, 0.036285, -0.018388, -0.129567, 0.114494, 0.100684, 0.136078, -0.278469, -0.029172, -0.025171, -0.035048, -0.017327, -0.020234, 0.006405, 0.059504, -0.055152, 0.047702, -0.109771, -0.095923, 0.154146, -0.082645, 0.002055, 0.063278, 0.045186, -0.016451, 0.120333, -0.030705, -0.125732, 0.082911, 0.183584, 0.005612, 0.086614, -0.122572, 0.187004, 0.008749, 0.122742, -0.099332, -0.099544, -0.030457, -0.014596, 0.159668, -0.182861, -0.038095, -0.018787, -0.129022, -0.070407, 0.040420, -0.078966, 0.110361, -0.051468, 0.023479, -0.055557, -0.074713, -0.025666, 0.041186, -0.000058, 0.008151, -0.078964, 0.127330, -0.045430, -0.043395, -0.025994, -0.305759, -0.000632, 0.091581, -0.041979, -0.096488, 0.007829, -0.035366, -0.129597, 0.031931, 0.011414, 0.026075, 0.070006, 0.143212, -0.131706, -0.065480, -0.091587, -0.089944, 0.304327, 0.096218, -0.155311, 0.154486, 0.056186, -0.002324, 0.134550, -0.185795, -0.054339, 0.010738, 0.268656, 0.230560, 0.050754, -0.097614, 0.096583, 0.082153, -0.127167, -0.107377, -0.047550, 0.109379, -0.032336, 0.005514, -0.189381, 0.015142, -0.220278, -0.155431, -0.080936, -0.017348, 0.057081, 0.040142, 0.024299, 0.038554, -0.014053, 0.088013, 0.058415, 0.047141, -0.052754, 0.062682, 0.094209, -0.061054, -0.029627, 0.057371, 0.032965, -0.137422, -0.197806, -0.105999, -0.003994, -0.005150, 0.015822, 0.145214, 0.171718, -0.092218, 0.165397, 0.172935, -0.016241, -0.069164, -0.034006, 0.263521, -0.112738, 0.144954, -0.008142, 0.109327, -0.000139, 0.203327, -0.000758, -0.102171, -0.004223, -0.122857, -0.078052, -0.005030, 0.179426, -0.008189, 0.172658, -0.182432, -0.028655, 0.246079, 0.040135, -0.001440, -0.101024, -0.116102, 0.035103, -0.111655, -0.171831, 0.053297, -0.021837, 0.020048, 0.071553, 0.017092, -0.495468, 0.006690, -0.174933, -0.039871, 0.017558, 0.093333, -0.067826, -0.026449, -0.034882, -0.078675, -0.026006, -0.127709, 0.073291, -0.096413, 0.173521, 0.141467, 0.049000, -0.128893, -0.095217, 0.197807, 0.064243, 0.147542, 0.107418, 0.088213, -0.047051, -0.014437, 0.377273, -0.041961, 0.123879, -0.009810, 0.105710, 0.168773, -0.020232, -0.108163, -0.050267, -0.069577, -0.031271, 0.047579, -0.278478, -0.072615, -0.059372, 0.114844, 0.055385, -0.052592, 0.140747, -0.053970, -0.049484, -0.056079, -0.052369, -0.061402, -0.010092, 0.040888, -0.010542, -0.008642, 0.127806, 0.142922, 0.061796, 0.215661, -0.121110, 0.177801, 0.082593, -0.098139, 0.160477, -0.112506, -0.128137, 0.010061, -0.246614, -0.134404, 0.134328, 0.037165, -0.056656, 0.085682, -0.002025, -0.048427, 0.047335, -0.152925, 0.076913, 0.144639, 0.002542, -0.008786, -0.207630, -0.092424, -0.056038, 0.039837, 0.130480, -0.019214, 0.085709, -0.068168, -0.057661, 0.256396, 0.000436, 0.002165, 0.008250, 0.435296, -0.023791, 0.112853, 0.118685, 0.015178, 0.142689, -0.139655, 0.084141, 0.053003, -0.127661, 0.121614, 0.090306, -0.053635, 0.143329, -0.020410, -0.130167, -0.062897, -0.043274, -0.012359, 0.014011, -0.309357, 0.110538, -0.099683, 0.018306, 0.439442, 0.034141, 0.002030, 0.026504, -0.224360, -0.192707, 0.154315, 0.020682, -0.212653, -0.198598, 0.103733, -0.084605, 0.123315, -0.190156, 0.051589, -0.114352, -0.215452, 0.227831, 0.089644, -0.156986, -0.110336, 0.023221, 0.186123, -0.009580, -0.108279, -0.008263, -0.079465, -0.019248, 0.037930, -0.005270, 0.017321, -0.003298, 0.294424, -0.011487, 0.139208, -0.054023, -0.135061, 0.010541, -0.181049, -0.041205, -0.110344, 0.128945, -0.090110, -0.092730, -0.029277, 0.101132, 0.017030, 0.041486, -0.143502, 0.224712, -0.052848, -0.128890, -0.150927, 0.027277, 0.097778, 0.225844, 0.132758, 0.049771, -0.195139, -0.030116, 0.007751, -0.079459, 0.195759, 0.028297, 0.147042, -0.010751, -0.044499, 0.024308, -0.101806, 0.131116, -0.123838, -0.073508, 0.129509, -0.011302, 0.326354, -0.237273, 0.024596, 0.004420, -0.039178, 0.025751, 0.013973, 0.154100, 0.041046, 0.024320, -0.092331, 0.075485, 0.194852, 0.043371, -0.251192, 0.134674, 0.052031, -0.132075, 0.094175, -0.014784, -0.095276, -0.167319, 0.093634, -0.053208, -0.299019, -0.019493, 0.110037, -0.111475, -0.098528, -0.045980, 0.011906, -0.084867, 0.071568, -0.053325, 0.037509, -0.058839, 0.001778, 0.058313, 0.127749, 0.036488, -0.065275, -0.057004, 0.002167, -0.194989, 0.068705, -0.069410, 0.112359, -0.152019, -0.107722, 0.070784, -0.017405, -0.203961, -0.063757, -0.000544, 0.104791, -0.084216, 0.204668, 0.103679, -0.267183, -0.073881, -0.051626, -0.263557, 0.077896, -0.046059, 0.181407, 0.004982, -0.028577, -0.070820, 0.120156, 0.068127, -0.016167, 0.168783, -0.009547, 0.057545, -0.206602, -0.138948, -0.287059, -0.089665, 0.193052, 0.181721, 0.076652, 0.230598, 0.038210, -0.065900, 0.351109, 0.163837, -0.106730, 0.004680, 0.054401, -0.162431, 0.109289, -0.027845, -0.077752, 0.074426, -0.206153, -0.205087, -0.047387, -0.115959, -0.012581, 0.006516, 0.137222, 0.024973, 0.067576, 0.079758, 0.005901, -0.085006, -0.211992, 0.079703, 0.164714, 0.012983, -0.047775, 0.009934, 0.166054, -0.117008, 0.112174, -0.081620, 0.252085, -0.095814, -0.160737, 0.098616, 0.049302, -0.169005, 0.056813, -0.110345, -0.072744, 0.016748, 0.018266, 0.276841, -0.109161, -0.030222, -0.091865, -0.098636, -0.029673, -0.037370, -0.277655, 0.068380, 0.040822, -0.014380, 0.363860, -0.091828, -0.034534, 0.108802, -0.056442, -0.141440, 0.096531, -0.126003, -0.072285, -0.014293, -0.315917, 0.013416, -0.057672, -0.064211, 0.077573, -0.015361, 0.105270, 0.046737, 0.073715, 0.133964, -0.039862, 0.192067, -0.038854, -0.035655, 0.101362, 0.148665, -0.078182, 0.041527, -0.077087, 0.026681, 0.089204, 0.506013, 0.121540, -0.163288, -0.046427, 0.129322, 0.186661, 0.032343, 0.020226, 0.031071, -0.050872, 0.091166, -0.050102, -0.042110, 0.055500, -0.027633, -0.272802, 0.198007, -0.049932, 0.015780, 0.053894, 0.063445, 0.013361, -0.017767, 0.103368, -0.049283, -0.161567, -0.018339, 0.159721, 0.019753, 0.256000, 0.122950, -0.067329, 0.049447, -0.039212, -0.101245, -0.019110, 0.068606, -0.009369, -0.081864, -0.116030, -0.107591, -0.032567, -0.213658, 0.024803, 0.012063, 0.073045, 0.151132, 0.040293, 0.111463, -0.057375, 0.336502, -0.153928, 0.049947, -0.022919, 0.136091, -0.179530, -0.101300, 0.034927, 0.026369, -0.290807, -0.027303, 0.077214, 0.085054, -0.088758], + "snowflake-arctic-embed": [0.164476, -0.981777, -0.405218, 0.399810, 0.901198, 0.409591, -0.077627, -0.677190, 0.222725, -1.757181, 1.154365, 0.970361, 0.139148, 0.673119, -0.024305, 0.273795, 0.692573, -0.239678, -0.362082, -0.275700, -0.206364, -0.501303, 0.699528, 0.320007, -0.261514, -0.199023, 0.255197, 0.461451, 0.586028, 0.502643, 0.727292, -0.206270, 0.097371, -0.161835, 0.680590, 0.230389, 0.173242, -0.845818, -0.187537, -0.595398, 0.080072, -0.614428, 0.249609, 0.753781, -0.356874, -0.436827, 0.524961, -0.157355, 0.518234, -1.566906, 0.572488, -0.467955, 0.191558, 0.039816, -0.793020, -0.215021, 1.121415, 1.650410, 0.526585, -1.186473, -0.232328, -0.854596, -0.380662, 0.417444, -0.008091, 0.964398, -0.264849, -0.478139, 0.551200, 0.654829, -0.477421, -0.520961, -0.090849, -0.448812, 0.104905, -0.738188, 0.303336, 0.398035, 1.183559, 0.649098, 0.404940, -0.358590, -0.979204, -1.484936, 0.228276, 0.803336, 2.641596, -0.125927, 0.113146, -0.385871, 0.499152, 0.051917, 0.334905, 1.279890, -0.545813, 0.604924, -0.420765, 0.912452, 0.772270, -0.737417, 0.391128, -1.199134, 0.121847, 1.555495, 0.648331, 0.196339, -0.591679, 0.363930, -0.068456, -0.155599, 0.527852, -0.488703, -0.712850, -0.531144, 0.479999, -0.559684, 1.147967, -0.265582, 0.119726, 1.675230, 0.942336, 0.065473, 0.428287, -0.342958, -0.162591, 1.297977, -0.338609, -0.096736, -0.088885, 0.330610, -1.069823, -0.485881, 0.355422, 0.058099, -0.582748, -0.080651, -2.783385, -1.813708, 0.929544, 0.427284, 0.167461, -1.018789, -0.186063, 0.125848, 1.110493, -0.323993, 0.468688, -0.310807, 0.267761, -0.193082, -0.649354, 0.090465, 0.213910, -0.901647, 0.184187, -2.126019, 0.618628, -0.386999, 0.338013, -0.291322, 0.601014, -0.248482, -0.011206, -0.109841, -0.738318, -0.745902, 1.245500, 1.346687, -0.500503, 0.614734, -0.478978, 1.417879, 0.647242, 0.600458, 0.093502, -0.399006, 0.019264, -0.670275, 0.760402, -0.139396, -0.833422, 0.600008, 0.150120, 0.215607, -0.787541, 1.722837, 0.167324, -0.535421, 0.388938, -1.382614, -0.172650, -0.562894, 0.249094, 0.258224, -0.438660, -0.845207, 0.875777, 0.783044, -0.391563, 0.029483, -0.291418, 0.204866, 0.673864, 0.580254, 0.495731, 1.010963, -0.346271, -0.046538, 0.067540, -0.395137, -0.387492, 0.393826, 0.172326, 0.251920, -0.889290, 0.045292, -0.161041, 0.922710, -0.320204, 0.351821, -0.392186, 0.629528, -0.211839, 0.032394, 0.861603, -0.016760, -0.558076, 0.262017, -0.085449, -0.318123, -0.498436, -0.133505, 0.664525, -0.666853, 0.140894, 0.074495, -0.730992, 0.992944, 0.263796, -0.169161, 0.421966, -0.251835, 0.246833, 0.467468, 0.229798, 0.471774, 0.010803, 0.537420, 1.005422, -0.544047, -1.095315, 0.525546, -0.378814, 0.772719, -0.635745, -0.187179, 0.751029, -1.497753, 0.605500, 0.040281, -0.410345, 0.186229, -0.747669, 0.437304, 0.144941, -0.459204, -0.198767, 0.449451, 0.858884, -0.359434, 0.437780, -0.007321, 0.043643, -0.462933, 0.042202, 0.678946, -0.236253, 0.311505, 0.022989, -0.236843, -0.317470, -0.867559, -0.468267, -0.032692, -0.619554, 0.740736, -0.394311, 0.164591, 0.771053, 0.628858, -0.159988, -0.132335, -0.270476, -0.244661, -0.045490, -1.068461, 0.361834, 0.681828, -0.072550, 0.995301, -0.476299, -0.130403, -0.443094, -1.400598, -1.715192, -0.609242, 0.392083, -1.302736, -1.254964, 0.315025, 1.056481, -0.284517, 0.145024, -0.197186, -1.191084, -0.475434, -0.337662, 0.478131, -0.134051, -0.541338, 0.065506, 0.982383, -0.017134, 0.082724, 0.754355, -0.607289, -0.561618, -0.672752, 0.071788, 0.801023, 0.425337, 0.566067, 0.911838, -0.390513, -0.408622, -0.555813, -0.248295, -0.697827, 0.293418, 0.759617, 0.671161, -0.225396, 0.400199, -0.615734, -0.089381, 0.535295, 0.435778, 1.210370, -0.322341, 1.353689, -0.435054, 1.075088, 0.098468, 0.002876, 0.152754, -0.287845, 1.134301, -0.570370, -0.841934, 0.699961, 0.661102, -1.207625, -0.006113, -0.292638, -1.588339, 0.058787, -0.000471, -0.147217, 1.015599, 1.263788, 0.532431, 0.427873, -0.974371, 0.469206, -2.081517, -0.388685, -0.406079, 0.724670, -0.209924, 1.067930, -0.204612, 0.721137, 0.562673, -0.707059, -1.473862, 0.808875, 0.731063, -0.227392, -0.899608, -0.376536, 0.129298, -0.727531, -0.080100, -0.603700, -0.313701, -0.383994, -0.551388, -0.945553, -0.780997, -1.005637, 1.145955, 1.714179, -0.614432, -0.243966, -0.018248, -0.135699, -0.490564, -0.513082, -0.206577, -0.301805, 0.211078, 0.084133, 0.834956, 0.017944, -0.600084, -0.209110, -0.153675, -0.477361, 0.291817, 0.594291, -0.062999, 0.252667, 0.253603, -0.102821, -0.086670, -0.257069, 0.350693, 0.477220, -0.893321, 0.729113, 0.591172, -0.885421, -0.189146, -0.826989, 0.353572, -0.433705, 0.448902, 0.380207, 0.027303, -0.379125, 0.636641, 0.343187, -0.146485, -0.199786, 0.017955, -0.172499, -0.219285, -0.017873, -0.242158, 0.135226, 0.705949, 1.523271, -0.805220, -0.542296, -2.357319, -0.279120, -0.574042, 0.293555, -0.602039, -0.058580, -1.546088, -0.100937, 0.281502, -0.406502, -0.351410, -0.459636, 1.166577, -0.482386, 0.655048, -0.003645, -0.069005, 1.035454, 0.287968, -0.083988, -0.167982, 0.045657, 0.909229, 0.163557, 0.200277, 0.661766, -0.859409, -0.271063, 0.376515, -0.768590, -1.227650, 0.251031, -0.152929, -0.052574, 0.698705, -1.078161, -0.407318, 1.014991, 0.492574, -0.408082, -0.391707, -0.306255, -0.208311, -0.109343, 0.148285, 0.494520, 0.340868, -1.124670, -0.289814, -0.446556, 0.735685, 0.302573, -0.316504, 0.691067, -0.925421, -1.132813, 0.672036, -0.337327, -0.476443, 0.034346, -0.878503, -0.416229, 0.471957, 0.982983, -0.279663, 0.109959, 0.352966, -0.322536, -0.531440, -0.073239, -0.904272, -0.925687, 0.689411, -0.287299, 0.071599, 0.040955, 0.363247, -0.329313, -0.734854, 0.052484, 0.374941, -0.262850, 0.674385, -1.883402, -0.469937, -0.481781, -1.376337, 0.911426, -0.421970, 0.758645, 0.866087, 0.054294, -2.286275, -1.039941, 0.392261, 0.600235, 0.566748, -1.022966, -0.349735, -0.143037, -0.283288, -0.109223, 0.977295, 0.156285, -0.241752, -0.327293, 0.096074, 1.355821, 0.886651, 0.834343, 0.149908, -0.404873, -0.431915, 0.959970, 0.061419, -0.285103, 0.111263, 0.202683, 0.376271, -0.116067, 0.138792, 0.445979, 0.290989, -0.242874, -0.346761, 0.078914, 0.034136, -0.870164, -0.230687, -0.679115, -0.453920, -0.498161, -0.709209, -0.146147, -0.017312, -0.411055, -0.364331, 1.790577, -0.176075, -0.723053, 0.661552, 0.051030, 0.182555, 0.162354, -0.562494, 0.585837, 0.219536, 0.723892, 0.267529, -0.493820, -0.000944, 1.073650, -0.610506, 1.969175, -0.321756, 0.165205, 0.560576, -0.445916, 0.147305, 0.081469, 0.733030, -0.639512, -0.128523, 0.821294, -0.156377, 0.661212, -0.447247, 0.747086, 1.197289, 1.120626, 0.644541, -1.037759, -0.927256, 1.108188, 0.443766, -0.037838, 1.038198, -0.777633, -0.206474, -0.710854, -0.355862, -0.180103, -0.558386, -0.997519, -0.045973, 0.604964, 0.637836, 0.303163, -0.184672, -0.063542, -0.034336, 0.758078, -0.627832, -1.903602, -0.933951, 0.025073, -0.847317, 0.818236, -0.455283, -0.528798, -0.199017, 0.047115, 0.782431, -0.855221, 0.439269, -0.285996, 0.625571, 0.096328, 0.089619, -0.090534, 0.529576, 4.501905, 1.003226, -0.528412, -1.492817, 0.117703, 1.167368, 0.004324, 0.388524, -0.685737, 0.061340, 0.331465, -0.331502, 1.002149, 0.419753, 0.302038, 0.609501, -0.266256, -1.288667, 0.551195, -0.368805, -0.667456, 0.202925, -1.491046, -0.230838, -0.461002, -0.123896, -0.036718, -1.897493, -0.502035, 0.408753, 0.170793, 0.273150, -0.000815, 0.124118, 0.156100, 0.594571, 0.917966, 0.389394, 0.366612, 0.521227, 0.562131, -0.225260, -0.873686, -0.046855, -0.135722, -0.503301, 0.022896, 0.998964, -0.616207, -0.396044, 0.910686, -0.176650, -0.609326, -0.449190, 0.576747, -0.521846, 0.431436, -1.468931, -1.514708, -0.154545, -0.435662, -0.673081, 0.473723, -0.590864, 0.025936, 0.215279, -0.016715, 1.134850, 0.661093, -0.513720, -0.121693, -0.326415, -0.136230, -0.568424, 1.253833, 0.408191, 0.712330, 0.746802, 0.040251, -0.059956, 0.024462, 0.911898, 0.040565, 0.012627, -0.030156, -0.520014, 0.850057, -0.270045, -0.847478, -0.157882, 0.443254, 0.806046, -0.186409, -0.422478, -1.133786, 1.079063, -0.166138, -0.571667, -0.098509, 0.364370, 0.282150, 1.241138, -0.254863, 0.275489, -1.065522, -0.333116, 0.098885, -0.880379, -0.746474, 0.167898, 0.622477, 0.259032, 1.088299, -0.092418, 0.559675, 0.407819, -0.206228, -1.064644, 1.147439, -0.502136, 0.062495, -1.109216, 0.489472, -0.802628, 0.369118, -0.378995, -0.544698, 0.353553, -0.191862, -1.536034, -0.484893, 0.444807, 0.157272, 0.381181, 0.449889, -0.075108, -0.352240, 0.955138, -0.743568, -0.823916, 0.352233, -0.961116, -1.893218, 0.018346, -0.022620, 0.857100, -0.413084, 0.308824, -0.227558, 0.461872, -0.424433, -0.114400, -0.592457, 0.122129, 0.790703, 0.366691, 0.552071, -0.423679, -0.394332, -0.144287, -0.164119, -0.047966, 0.180729, -0.003952, -0.355909, -0.133109, 0.789147, 0.631095, -0.126298, 0.862269, 0.101255, 1.096273, 0.545555, -0.639577, -2.018642, -0.439312, 0.003968, 0.327283, -0.092810, -1.042530, 1.364452, 1.179238, -0.883948, -0.371361, -0.329252, -0.025818, 0.505112, 0.683491, -1.012862, 0.493483, 0.539515, 0.500419, 0.288749, -0.114866, 0.352669, -0.456255, -0.580752, 0.585715, 0.144576, -0.035104, 1.233467, -0.195198, 1.108539, 1.116311, -0.347662, 0.016133, -0.638461, -0.484053, -0.320613, -0.085975, -0.232120, 0.161251, -0.568741, 0.960369, 0.155364, 0.735644, 0.690310, -0.882789, -0.913967, 0.081527, -0.160942, 0.896419, 0.815935, 0.775975, -0.035229, 0.086067, 0.087852, -0.830845, -0.041790, -1.243464, 1.077813, -1.032597, -0.740396, 0.250708, 0.160607, -0.222441, 0.088197, -0.714924, 0.323647, -0.979571, 0.903878, -0.037072, 0.791384, -0.732045, -0.145367, 0.280290, -0.850576, 1.411916, 0.231850, 0.276533, -1.070890, -0.301702, 0.003253, 0.272342, 0.515268, -0.294163, 0.183392, 0.166822, 0.171130, 0.058901, 0.402616, 1.227121, 0.264214, 0.447733, -1.129231, -0.026984, 1.065866, -0.700682, 0.365534, 0.382542, -0.918139, -0.707215, -0.394204, -0.508742, 0.480149, -0.082983, 0.365794, 0.358934, 0.430533, 0.000919, 0.917651, 0.456906, -1.114516, 1.789799, 0.563742, -0.845717, -0.513698, 0.248768, -0.953782, 1.674861, 0.771962, -0.836244, -0.015618, 0.296709, 0.385047, -1.406090, 0.869633, 1.178896, -0.181703, -0.002030, 1.396937, 0.106670, 1.051165, 0.232139, -0.785353, 0.440807, 0.134374, 0.422115, 0.017052, -0.285855, 0.881638, 0.943586, -0.419304, 0.852863, 0.640232, -0.067155, -0.269846, -0.091488, 0.728749, 0.800561, -0.179447, 0.737550, -0.039372, -0.298867, 2.224916, -0.833340, 0.586230, 0.680057, 0.273743, -0.536826, -0.445305, 0.109167, 0.042689, 0.324641, -0.135530, 0.299774, 0.135228, -0.322364, -0.536501, 0.250821, -0.529266, -0.036560, -0.006006, 0.202638, -0.135642, -0.427857, 0.223352, 0.747627, 0.093975, 0.408209, -0.207240, -0.228368, 0.782170, -0.550407, -0.078093, 0.006059, 0.011183, -1.023877, -0.775297], + "snowflake-arctic-embed2": [-0.337318, 0.485787, -0.037816, -0.943875, -0.819299, -0.257385, -0.115470, 0.246724, 0.048614, 0.159151, -0.467606, -0.364392, 0.089869, -0.209655, 0.342226, -0.527060, 0.520997, 0.927532, -0.102562, 0.333813, -0.854380, -0.701242, -1.463815, 0.799778, 0.750539, 0.757705, -0.125063, 0.527705, -0.437741, 0.078491, 0.460214, 0.255947, -0.031090, -0.345135, 0.058851, -0.327729, -0.372813, 0.352275, -1.168406, 0.354936, 0.625492, 0.045635, -0.242759, 0.650628, 0.195748, -0.495107, -0.539670, -0.986722, -1.069306, -0.014932, -0.385889, 0.215507, 0.333816, -0.158572, 0.246042, -0.687132, 0.207916, -0.342494, -0.347905, -0.563665, 0.336679, -0.059624, -0.155887, -0.246520, 0.296986, 0.569967, 0.131530, -0.355191, -0.582369, 0.490316, -0.415379, -0.019140, -0.214617, 1.085840, 0.019224, -1.180745, -0.544194, -0.182204, -0.471391, 0.877849, 1.787677, 0.196131, 0.338737, 0.554189, 0.723178, -0.052438, -0.270815, 0.443365, 0.101404, -0.692780, 0.004322, -0.050623, -0.693687, -0.116200, 0.434660, 0.065080, -0.055940, 0.122773, -0.999912, -0.499409, -0.359269, 0.027620, -0.399372, -0.299647, -0.744792, 0.102263, 1.084825, 0.028898, 0.323312, 0.014242, 1.325412, 0.983624, -0.325036, 0.526028, -0.157539, -0.063860, 0.436522, 0.116374, 0.118433, 0.614439, -0.139657, 0.522618, 0.017510, -0.188138, -0.677374, -0.840603, 0.192689, -0.135996, -0.894670, -0.158343, -0.792459, -0.136472, -0.355442, -0.123314, -0.910940, 0.186382, 0.334950, 0.204000, 0.222174, 0.263186, 0.094970, 0.061765, 0.345430, -0.235054, 0.172441, 0.881599, 0.841009, -0.169058, -0.269911, -0.217716, 0.359628, 0.208658, 0.652820, 0.442545, -0.161419, 0.418893, 0.292317, 0.231373, -0.805518, -0.000739, 0.297150, 0.121066, -0.408190, 0.273577, 0.463801, 0.064206, 0.312172, 1.092058, -0.371314, -0.277224, -0.683628, -0.435973, 0.045403, -0.140166, 0.184559, 1.853358, 0.416705, -0.374452, 0.760777, 0.248660, -0.569295, -0.954281, -0.347827, 0.531861, -0.570648, 0.556323, 0.206901, 0.252571, -0.043244, -0.062258, 1.049511, -0.402070, -0.068134, -0.149358, -0.012464, 0.620048, 0.654902, -0.538302, -0.245287, -0.066978, -1.405453, -0.445957, 0.331479, -0.495953, 0.923955, -0.328841, -0.644721, -0.372834, 0.357546, 0.478619, -0.081360, 0.340657, -0.122412, -0.597997, 0.235506, 0.016301, -0.058082, 0.446411, -0.802173, 0.115207, -0.464422, -0.257083, -0.133011, -0.359320, 0.389579, 0.485856, -0.053931, 1.149238, -0.967310, 0.020607, -0.235731, -0.358982, -0.698047, 0.653281, 0.734305, -0.836348, 0.074222, -0.177832, -0.486657, -0.344304, -0.443823, -0.255469, -0.606071, 0.069794, 0.069820, 0.494822, -0.536611, -0.175762, -0.448531, -0.522376, -0.108621, -0.271191, -0.141843, 0.071029, 0.171164, -0.195819, -0.059490, 0.026950, -0.433273, 0.016244, 0.146567, -0.032891, -0.039686, 0.323199, -0.057771, -0.176835, 0.470351, 0.048500, 0.327727, -0.158381, 0.162835, -0.407448, -0.555830, -0.465591, 0.264512, 0.354612, 0.218764, 0.031698, -0.265124, 0.312480, 0.181667, -0.338958, 0.186351, 0.053644, 0.812065, -0.862652, -0.026800, 0.572852, 0.005986, 0.828237, 0.090118, 0.063922, 0.076976, 0.096964, 0.180304, 0.781934, -0.003830, -0.027061, 0.221362, 0.449681, 0.125572, -0.095162, 0.018868, -0.360262, -0.373733, -0.392008, -0.125284, -0.212061, 0.159567, -0.233902, -0.235149, -0.190911, -0.028427, 0.344431, -0.155667, 0.722263, -0.144527, -0.199895, 0.188895, 0.894280, 0.140612, 0.698334, -0.078967, -0.845755, 0.500688, -0.028362, -0.309373, -0.050033, 0.393043, -0.684940, -0.012917, 0.442933, -0.152553, -0.068629, -0.237759, -0.239215, 0.132807, 0.019395, 0.123185, 0.242981, 0.786300, 0.018274, 0.157075, 0.240215, 0.229825, -0.137675, -0.203565, -0.245311, -0.036812, 0.430710, -0.207664, -0.132277, 0.557027, 0.452612, -0.331802, 0.004795, 0.139062, 0.078491, -0.501776, 0.156317, -0.092398, 0.078616, -0.144665, -0.419595, 0.396099, 0.319320, -0.084284, -0.013825, 0.811091, -0.228181, -0.249798, 0.043037, -0.014254, 0.145196, -0.379182, -0.241216, 0.270687, 0.331287, 0.078576, 0.225569, 0.075139, 0.206449, -0.216213, -0.179613, -0.196487, -0.121997, 0.634396, 0.243545, -0.646855, -0.196892, 0.164843, -0.165656, -0.017864, -0.220435, -0.315971, -0.428766, -0.276434, 0.298087, 0.034363, 0.339730, -0.001861, -0.061919, -0.482472, -0.097411, -0.183378, -0.040443, -0.111079, 0.394592, 0.943151, -0.304478, 0.354390, 0.196057, 0.199277, 0.341486, 0.218786, 0.193412, 0.226260, -0.177706, -0.272467, 0.395993, -0.259079, 0.001724, 0.371750, 0.350838, 0.290101, -0.419872, -0.302239, 0.187943, -0.047100, 0.501532, 0.395721, 0.057455, 0.260134, -0.393160, 0.164219, 0.066535, 0.172231, -0.359559, -0.161729, 0.682735, -0.679863, 0.053116, -0.210306, 0.089449, 0.457067, -0.076446, 0.443101, 0.434519, 0.493740, -0.721550, -0.047476, -0.149920, 0.792890, -0.869984, 0.416676, -0.278901, -0.456933, 0.201800, 0.250265, 0.093752, 0.216085, -0.122870, 0.141153, 0.164069, -0.099821, -0.121633, 0.180234, -0.016088, -0.070337, -0.163921, -0.103767, 0.440052, 0.191798, 0.114916, 0.325931, -0.172159, 0.250953, 0.115396, -0.131392, 0.363941, -0.167835, -0.198244, -0.989684, -0.186654, 0.199121, 0.593739, -0.318832, -0.185066, -0.236732, -0.230723, 0.018697, -0.223611, -0.002621, 0.185624, -0.180204, 0.115503, 0.430932, -0.117918, 0.103355, 0.195856, -0.223646, 0.132063, 0.571766, -0.608208, -0.051812, 0.142387, -0.170185, -0.515449, 0.352781, 0.486267, -0.422757, 0.272677, -0.105689, 0.340707, -0.156664, -0.782644, 0.512138, -0.341311, -0.487717, 0.194345, -0.057030, -0.015855, 0.099853, 0.549729, -0.415887, 0.604569, 0.066785, -0.448733, -0.011270, -0.616035, -0.562425, -0.334210, -0.393114, -0.628784, -0.305269, 0.209872, -0.199347, 0.101649, 0.090523, 0.282902, -0.088015, -0.191279, -0.044561, -0.709134, 0.072914, -0.249584, 0.037448, 0.165476, 0.059152, 0.055725, -0.518436, -0.005831, -0.164648, -0.281878, 0.347298, 0.177980, -0.114527, 0.210128, 0.120374, -0.146421, 0.075994, -0.181335, 0.150211, -0.225272, -0.489089, -0.078891, -0.178676, -0.740558, 0.205851, 0.392087, -0.328261, -0.068016, -0.021789, -0.280372, 0.704844, -0.058202, 0.168101, 0.180238, 0.096060, -0.275457, 0.027325, 0.425901, -0.313618, 0.154550, 0.204825, -0.104279, 0.245843, -0.489933, -0.046835, -0.247613, 0.823351, 0.004220, 0.017303, -0.158378, 0.154119, -0.197591, -0.127734, 0.159808, -0.600171, -0.346363, 0.469721, -0.058461, -0.315804, -0.083556, 0.267933, -0.717538, -0.110205, -0.563653, 0.005439, 0.389236, 0.552098, 0.436608, -0.472080, 0.223911, -0.471215, -0.560872, -0.021037, 0.275148, 0.461694, -0.325049, 0.598732, 0.376293, -0.225930, -0.151626, 0.146455, 0.396804, 0.021290, 0.037224, 0.235271, 0.329889, 0.672245, -0.496795, -0.378117, -0.350688, 0.435732, 0.370599, 0.008810, 0.555823, 0.623420, 0.260685, -0.383603, -0.185294, 0.175743, 0.406610, -0.249284, 0.318281, 0.203903, 0.182324, -0.028281, -0.134342, 0.156111, -0.666054, -0.169002, 0.259389, -0.127781, -0.134607, 0.133519, -0.287695, -0.392834, 0.252281, -0.458701, 0.297617, 0.066121, 0.535986, -1.198022, -0.872793, -0.535140, 0.635081, -0.181788, 0.259800, 0.160934, 0.403854, -0.016975, 0.122155, 0.106455, 0.017354, 0.064465, -0.004753, 0.183455, 0.125073, 0.000588, -1.079189, -0.091745, 0.131509, -0.038783, 0.086098, -0.011477, 0.033550, -0.027044, -0.398735, -0.133224, -0.045345, -0.183940, 0.100738, 0.766663, 0.008661, -0.061123, 0.052512, 0.097162, 0.122948, -0.363722, -0.118078, -0.802726, -0.130973, -0.369868, 0.688861, 0.363402, -0.023863, 0.067200, -0.240462, 0.499130, -0.021514, -0.149011, -0.011722, -0.237259, 0.152696, 0.124860, 0.081450, 0.090567, 0.048832, 0.615275, 0.147335, -0.101912, -0.132456, 0.131634, -0.168211, 0.355089, 0.199154, -0.000686, -0.334698, 0.464978, 0.060418, 0.398211, 0.122107, 0.336332, -0.415999, 0.140270, 0.113768, -0.197597, -0.220913, -0.169208, 0.155395, 0.350888, -0.163269, -0.365437, 0.111591, 0.043267, 0.600786, -0.172549, -0.028790, 0.133079, 0.111489, -0.018018, 0.260471, -0.890617, 0.236967, 0.416443, 0.903602, -0.082193, -0.280290, 0.138442, 0.411884, -0.454041, 0.491140, -0.444857, -0.186720, -0.382473, -0.126291, 0.495247, -0.631967, -0.266918, -0.220935, 0.367287, 0.502838, 0.155025, -0.429546, -0.408211, 0.234250, -0.462584, -0.046278, -0.231486, 0.209515, 0.246387, -0.061538, 0.270009, -0.012469, -0.420804, 0.087525, -0.513991, 0.020571, 0.507510, -0.444389, -0.022836, -0.590260, 0.167235, -0.201333, 0.189617, 0.279683, -0.402719, 0.145037, 0.929912, 0.430638, -0.179808, 0.080103, 0.600420, -0.489557, 0.381116, -0.722508, -0.164676, -0.037822, -0.305011, -0.376997, 0.013216, -0.315066, 0.022070, 0.528256, 0.300673, 0.108121, 0.488978, -0.100333, -0.130812, 0.217841, -0.220755, -0.671549, -0.076320, 0.525022, 0.184758, -0.214599, 0.194860, 0.236146, -0.240089, -0.474762, -0.037878, 0.149301, -0.063512, 0.294585, 0.747633, -0.437204, 0.083148, 0.410454, 0.142592, -0.260462, 0.127561, -0.031248, 0.321641, 0.304835, -0.315456, 0.321474, -0.200811, -0.007041, -0.019529, 0.332829, 0.095737, 0.888721, -0.068599, 0.112251, 0.200350, 0.349384, 0.130674, -0.199802, 0.104813, -0.402484, 0.338873, 0.018662, -0.304823, 0.138016, 0.002506, -0.095239, -0.271009, -0.849811, -0.423410, -0.232685, -0.589317, 0.450318, -0.305014, 0.563061, -0.142598, 0.286005, 0.081525, 0.097474, 0.012287, 0.317698, -0.170248, -0.958868, 0.213176, 0.301248, 0.396288, -0.022001, 0.404562, -0.049691, -0.227430, -0.230833, 0.232825, 0.310583, 0.357731, 0.113404, 0.015757, 0.094021, 0.318617, 0.595829, -0.039896, 0.615338, -0.176179, -0.043411, 0.534391, -0.335011, 0.427954, -0.310139, -0.024028, -0.739826, -0.112875, -0.258219, 0.677319, -0.274854, -0.202554, -0.027695, 0.908598, -0.016939, 0.387993, 0.037429, -0.101158, 0.166008, 0.416612, 0.189825, -0.642134, -0.106222, 0.141566, -0.026880, 0.021668, 0.221566, 0.267000, 0.196498, -0.181309, -0.062393, 0.203500, 0.037145, -0.128068, -0.645994, 0.417619, 0.601422, 0.012565, 0.457200, -0.532447, 0.277037, -0.485728, -0.274002, 0.261037, -0.255880, -0.009387, 0.491182, 0.383511, 0.125899, -0.204434, 0.205015, 0.109285, -0.415707, 0.095736, 0.147818, 0.122518, 0.038847, 0.232760, 0.166897, 0.331865, -0.357069, 0.314145, -0.216854, -0.337515, 0.259433, 0.320100, -0.172233, -0.315187, 0.197327, 0.046211, -0.521370, 0.391666, 0.248245, -0.153588, -0.275701, -0.000683, -0.205512, 0.000457, -0.134299, 0.452796, -0.099954, 0.194279, -0.210376, -0.530722, -0.265526, -0.408304, 0.263296, 0.311573, 0.364050, 0.212423, 0.355866, -0.102873, -0.300132, -1.024923, 0.019980, 0.381418, 0.513570, -0.051673, 0.091931, 0.043775, 0.022401, 0.230052, 0.140274, -0.147261, 0.173270, 0.150905, -0.167662, 0.099411, -0.022456, -0.727629, -0.310803, -0.555541, -0.286311, -0.483686, -0.054392, 0.234199, -0.675458, -0.605178, -0.033194, 0.591152, -0.440875] } diff --git a/integration/utils_test.go b/integration/utils_test.go index 6375b1f97..d7e3790b1 100644 --- a/integration/utils_test.go +++ b/integration/utils_test.go @@ -472,15 +472,19 @@ func GenerateTestHelper(ctx context.Context, t *testing.T, genReq api.GenerateRe DoGenerate(ctx, t, client, genReq, anyResp, 30*time.Second, 10*time.Second) } -func DoGenerate(ctx context.Context, t *testing.T, client *api.Client, genReq api.GenerateRequest, anyResp []string, initialTimeout, streamTimeout time.Duration) { +func DoGenerate(ctx context.Context, t *testing.T, client *api.Client, genReq api.GenerateRequest, anyResp []string, initialTimeout, streamTimeout time.Duration) []int { stallTimer := time.NewTimer(initialTimeout) var buf bytes.Buffer + var context []int fn := func(response api.GenerateResponse) error { // fmt.Print(".") buf.Write([]byte(response.Response)) if !stallTimer.Reset(streamTimeout) { return errors.New("stall was detected while streaming response, aborting") } + if len(response.Context) > 0 { + context = response.Context + } return nil } @@ -503,7 +507,7 @@ func DoGenerate(ctx context.Context, t *testing.T, client *api.Client, genReq ap case <-done: if genErr != nil && strings.Contains(genErr.Error(), "model requires more system memory") { slog.Warn("model is too large for the target test system", "model", genReq.Model, "error", genErr) - return + return context } require.NoError(t, genErr, "failed with %s request prompt %s ", genReq.Model, genReq.Prompt) // Verify the response contains the expected data @@ -520,6 +524,7 @@ func DoGenerate(ctx context.Context, t *testing.T, client *api.Client, genReq ap case <-ctx.Done(): t.Error("outer test context done while waiting for generate") } + return context } // Generate a set of requests @@ -528,55 +533,35 @@ func GenerateRequests() ([]api.GenerateRequest, [][]string) { return []api.GenerateRequest{ { Model: smol, - Prompt: "why is the ocean blue?", + Prompt: "why is the ocean blue? Be brief but factual in your reply", Stream: &stream, KeepAlive: &api.Duration{Duration: 10 * time.Second}, - Options: map[string]any{ - "seed": 42, - "temperature": 0.0, - }, }, { Model: smol, - Prompt: "why is the color of dirt brown?", + Prompt: "why is the color of dirt brown? Be brief but factual in your reply", Stream: &stream, KeepAlive: &api.Duration{Duration: 10 * time.Second}, - Options: map[string]any{ - "seed": 42, - "temperature": 0.0, - }, }, { Model: smol, - Prompt: "what is the origin of the us thanksgiving holiday?", + Prompt: "what is the origin of the US thanksgiving holiday? Be brief but factual in your reply", Stream: &stream, KeepAlive: &api.Duration{Duration: 10 * time.Second}, - Options: map[string]any{ - "seed": 42, - "temperature": 0.0, - }, }, { Model: smol, - Prompt: "what is the origin of independence day?", + Prompt: "what is the origin of independence day? Be brief but factual in your reply", Stream: &stream, KeepAlive: &api.Duration{Duration: 10 * time.Second}, - Options: map[string]any{ - "seed": 42, - "temperature": 0.0, - }, }, { Model: smol, - Prompt: "what is the composition of air?", + Prompt: "what is the composition of air? Be brief but factual in your reply", Stream: &stream, KeepAlive: &api.Duration{Duration: 10 * time.Second}, - Options: map[string]any{ - "seed": 42, - "temperature": 0.0, - }, }, }, [][]string{ - {"sunlight", "scattering", "interact"}, - {"soil", "organic", "earth", "black", "tan", "chemical", "processes", "pigments", "particles"}, - {"england", "english", "massachusetts", "pilgrims", "british"}, + {"sunlight", "scattering", "interact", "color", "surface", "depth", "red", "orange", "yellow", "absorbs", "wavelength"}, + {"soil", "organic", "earth", "black", "tan", "chemical", "processes", "pigments", "particles", "iron oxide", "rust", "air", "water", "mixture", "mixing"}, + {"england", "english", "massachusetts", "pilgrims", "colonists", "independence", "british", "feast", "family", "gatherings", "traditions", "turkey", "colonial", "period", "harvest", "agricultural", "european settlers", "american revolution", "civil war", "16th century", "17th century", "native american", "united states"}, {"fourth", "july", "declaration", "independence"}, {"nitrogen", "oxygen", "carbon", "dioxide"}, } From 5271ff855979a42be8151cc0010812b2906589c3 Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Fri, 15 Aug 2025 14:39:35 -0700 Subject: [PATCH 07/45] handle cgo flags in docker build (#11909) Docker build requires build-args to be defined. This ensures the release.yaml settings will be used. --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 776fabebf..0dc3c1267 100644 --- a/Dockerfile +++ b/Dockerfile @@ -86,6 +86,8 @@ RUN go mod download COPY . . ARG GOFLAGS="'-ldflags=-w -s'" ENV CGO_ENABLED=1 +ARG CGO_CFLAGS +ARG CGO_CXXFLAGS RUN --mount=type=cache,target=/root/.cache/go-build \ go build -trimpath -buildmode=pie -o /bin/ollama . From 883d031268da0d0fafb068738654690e9f3f8b1a Mon Sep 17 00:00:00 2001 From: Thomas Pelster <46451286+ThomasPelster@users.noreply.github.com> Date: Fri, 15 Aug 2025 23:45:01 +0200 Subject: [PATCH 08/45] docs: added missing comma in 'Ollama's Javascript library'' (#11915) --- docs/turbo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/turbo.md b/docs/turbo.md index c92af4c40..d75d95570 100644 --- a/docs/turbo.md +++ b/docs/turbo.md @@ -75,7 +75,7 @@ for part in client.chat('gpt-oss:120b', messages=messages, stream=True): import { Ollama } from 'ollama'; const ollama = new Ollama({ - host: 'https://ollama.com' + host: 'https://ollama.com', headers: { Authorization: "Bearer " } From 026bc29237a6478ea087362de83b854825d2e207 Mon Sep 17 00:00:00 2001 From: Patrick Devine Date: Fri, 15 Aug 2025 14:59:52 -0700 Subject: [PATCH 09/45] cli: show the default context length env setting in online help (#11928) --- cmd/cmd.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/cmd.go b/cmd/cmd.go index de3fc86a7..8fe068655 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -1612,6 +1612,7 @@ func NewCLI() *cobra.Command { appendEnvDocs(cmd, []envconfig.EnvVar{ envVars["OLLAMA_DEBUG"], envVars["OLLAMA_HOST"], + envVars["OLLAMA_CONTEXT_LENGTH"], envVars["OLLAMA_KEEP_ALIVE"], envVars["OLLAMA_MAX_LOADED_MODELS"], envVars["OLLAMA_MAX_QUEUE"], From df335aac09cd921beab12891cb40957e7c2ef9b7 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Fri, 15 Aug 2025 15:01:05 -0700 Subject: [PATCH 10/45] gpt-oss: disable quantized kv cache (#11929) --- fs/ggml/ggml.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fs/ggml/ggml.go b/fs/ggml/ggml.go index 1fef74524..a739e99ba 100644 --- a/fs/ggml/ggml.go +++ b/fs/ggml/ggml.go @@ -752,6 +752,11 @@ func (llm GGML) VisionGraphSize() (weights, graphSize uint64) { // SupportsKVCacheType checks if the requested cache type is supported func (f GGML) SupportsKVCacheType(cacheType string) bool { + if arch := f.KV().Architecture(); slices.Contains([]string{"gptoss", "gpt-oss"}, arch) { + // gpt-oss uses attention with sinks which does not support quantized cache types + slog.Warn("model only supports non-quantized cache types ", "mode", arch) + return cacheType == "f16" + } return slices.Contains([]string{"f16", "q8_0", "q4_0"}, cacheType) } From abeec240f9b6d1a021f7e3e23046575ae40821d7 Mon Sep 17 00:00:00 2001 From: Jody Doolittle <74738333+doolijb@users.noreply.github.com> Date: Mon, 18 Aug 2025 13:12:41 -0700 Subject: [PATCH 11/45] readme: add Serene Pub to community integrations (#11946) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d5049d3eb..0d23f27df 100644 --- a/README.md +++ b/README.md @@ -411,6 +411,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [ollama launcher](https://github.com/NGC13009/ollama-launcher) (A launcher for Ollama, aiming to provide users with convenient functions such as ollama server launching, management, or configuration.) - [ai-hub](https://github.com/Aj-Seven/ai-hub) (AI Hub supports multiple models via API keys and Chat support via Ollama API.) - [Mayan EDMS](https://gitlab.com/mayan-edms/mayan-edms) (Open source document management system to organize, tag, search, and automate your files with powerful Ollama driven workflows.) +- [Serene Pub](https://github.com/doolijb/serene-pub) (Beginner friendly, open source AI Roleplaying App for Windows, Mac OS and Linux. Search, download and use models with Ollama all inside the app.) ### Cloud From 709bbb0b6d22c2d379f243023e38a643a9b15734 Mon Sep 17 00:00:00 2001 From: Kostis Date: Mon, 18 Aug 2025 23:13:26 +0300 Subject: [PATCH 12/45] readme: add any-llm to community integrations (#11956) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0d23f27df..6f62f50b4 100644 --- a/README.md +++ b/README.md @@ -538,6 +538,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [Nichey](https://github.com/goodreasonai/nichey) is a Python package for generating custom wikis for your research topic - [Ollama for D](https://github.com/kassane/ollama-d) - [OllamaPlusPlus](https://github.com/HardCodeDev777/OllamaPlusPlus) (Very simple C++ library for Ollama) +- [any-llm](https://github.com/mozilla-ai/any-llm) (A single interface to use different llm providers by [mozilla.ai](https://www.mozilla.ai/)) ### Mobile From 048bd4472adf2bdb41c16010ab286e072252bfd2 Mon Sep 17 00:00:00 2001 From: Devon Rifkin Date: Thu, 14 Aug 2025 17:17:25 -0700 Subject: [PATCH 13/45] harmony: convert fn names to be valid ts identifiers In I noticed that hyphens in function names could possibly cause the model to become confused. Later in that issue I found other explanations, but at a minimum tool names with spaces in them are confusing to the model because of the prompt format. In this change I create a mapper that converts arbitrary tool names into valid typescript identifiers. It's a little overly strict in that it doesn't allow all unicode characters that might be valid in ts identifiers, but it's still very permissive. Since mappings aren't reversible, we must temporarily store this mapping in order to unmap it if the model comes back with a call. We also handle the case where multiple mappings collide into the same mapping and append a counter to the end to make them unique --- server/harmonyparser.go | 101 ++++++++++++++++++++++++++++++++++- server/harmonyparser_test.go | 68 +++++++++++++++++++++++ server/routes.go | 42 +++++++++------ 3 files changed, 193 insertions(+), 18 deletions(-) diff --git a/server/harmonyparser.go b/server/harmonyparser.go index 86dcf66e3..4405cea44 100644 --- a/server/harmonyparser.go +++ b/server/harmonyparser.go @@ -2,6 +2,7 @@ package server import ( "context" + "fmt" "log/slog" "slices" "strings" @@ -275,8 +276,9 @@ const ( // HarmonyMessageHandler processes harmony events and accumulates content appropriately. // This is a higher level interface that maps harmony concepts into ollama concepts type HarmonyMessageHandler struct { - state harmonyMessageState - harmonyParser *HarmonyParser + state harmonyMessageState + harmonyParser *HarmonyParser + functionNameMap *FunctionNameMap } // NewHarmonyMessageHandler creates a new message handler @@ -288,6 +290,7 @@ func NewHarmonyMessageHandler() *HarmonyMessageHandler { MessageEndTag: "<|end|>", HeaderEndTag: "<|message|>", }, + functionNameMap: NewFunctionNameMap(), } } @@ -378,3 +381,97 @@ func (a *HarmonyToolCallAccumulator) Drain() (*string, string) { func (a *HarmonyToolCallAccumulator) Content() string { return a.acc.String() } + +// FunctionNameMap maps a user-specified function name to a valid function +// name for harmony (which look like TypeScript identifiers). This is needed to +// transform user-specified function names, which might contain characters that +// are not allowed in TypeScript identifiers +type FunctionNameMap struct { + userToHarmony map[string]string + harmonyToUser map[string]string +} + +func NewFunctionNameMap() *FunctionNameMap { + return &FunctionNameMap{ + userToHarmony: make(map[string]string), + harmonyToUser: make(map[string]string), + } +} + +func (m *FunctionNameMap) ConvertAndAdd(userFunctionName string) string { + harmonyFunctionName := m.deriveName(userFunctionName) + m.userToHarmony[userFunctionName] = harmonyFunctionName + m.harmonyToUser[harmonyFunctionName] = userFunctionName + return harmonyFunctionName +} + +// OriginalFromConverted looks up the reverse-mapping of a previously-converted +// user->harmony function name. To unmap reliably, the mapping must exist, as +// the conversion process is not reversible without the appropriate state +func (m *FunctionNameMap) OriginalFromConverted(harmonyFunctionName string) string { + if userFunctionName, ok := m.harmonyToUser[harmonyFunctionName]; ok { + return userFunctionName + } + slog.Warn("harmony parser: no reverse mapping found for function name", "harmonyFunctionName", harmonyFunctionName) + // fallback to the original function name if we can't find a mapping + return harmonyFunctionName +} + +// convertToValidChars converts a user-specified function name to a valid +// TypeScript identifier. +// +// Limitations: +// +// - This doesn't restrict reserved TypeScript keywords. +// - We don't perform a real ID_Start/ID_Continue check, and instead use the more +// restrictive unicode.IsLetter/unicode.IsDigit check. Unclear what kind of +// identifiers these models were trained on, so in the end we might want to +// convert unicode-heavy identifiers to their closest ASCII equivalents. +func (m *FunctionNameMap) convertToValidChars(userFunctionName string) string { + mapper := func(r rune) rune { + // first, replace certain characters with underscores + if r == ' ' || r == '-' || r == '.' { + return '_' + } + + if unicode.IsLetter(r) || unicode.IsDigit(r) || r == '_' || r == '$' { + return r + } + + // finally, remove any other characters + return -1 + } + candidate := strings.Map(mapper, userFunctionName) + + // set a default name if we end up with nothing left + if candidate == "" { + return "unnamed" + } + + // if the candidate starts with a number, prepend an underscore to make it a + // valid identifier + if unicode.IsDigit(rune(candidate[0])) { + candidate = "_" + candidate + } + + return candidate +} + +func (m *FunctionNameMap) deriveName(userFunctionName string) string { + originalCandidate := m.convertToValidChars(userFunctionName) + candidate := originalCandidate + + // Check for dupes, and if so, add a number to the end. + // We start at 2 because if we have dupes and the first is never renamed, it + // makes sense for them to be named, say, `f`, `f_2`, `f_3` + count := 2 + for { + if _, exists := m.harmonyToUser[candidate]; !exists { + break + } + candidate = fmt.Sprintf("%s_%d", originalCandidate, count) + count++ + } + + return candidate +} diff --git a/server/harmonyparser_test.go b/server/harmonyparser_test.go index cd1743e1c..8a22f3404 100644 --- a/server/harmonyparser_test.go +++ b/server/harmonyparser_test.go @@ -467,3 +467,71 @@ func TestHarmonyParserStreaming(t *testing.T) { }) } } + +// TestFunctionConvertToValidChars tests only FunctionNameMap.convert(), which doesn't +// handle any saving (and therefore no dupe handling) +func TestFunctionConvertToValidChars(t *testing.T) { + tests := []struct { + name string + in string + want string + }{ + {name: "replace spaces with underscores", in: "get weather", want: "get_weather"}, + {name: "replace hyphens with underscores", in: "get-weather", want: "get_weather"}, + {name: "replace periods with underscores", in: "get.weather", want: "get_weather"}, + {name: "disallow non-word characters", in: "get weather!", want: "get_weather"}, + {name: "strip out invalid non-alphanumeric unicode characters", in: "a🫠bc", want: "abc"}, + {name: "names that only contain invalid characters", in: "🫠", want: "unnamed"}, + {name: "leading number", in: "123", want: "_123"}, + {name: "$ allowed", in: "$", want: "$"}, + // show that we allow weird unicode letter characters, though we might want + // to convert them to their closest ASCII equivalents in the future + {name: "allow weird unicode letter characters", in: "𝓸𝓵𝓵𝓪𝓶𝓪", want: "𝓸𝓵𝓵𝓪𝓶𝓪"}, + // names that look like words but are invalid (i.e., not ID_Start/ID_Continue) + {name: "disallow non-word characters that look like words", in: "ⓞⓛⓛⓐⓜⓐ123", want: "_123"}, + } + + for i, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + parser := NewFunctionNameMap() + got := parser.convertToValidChars(tt.in) + if got != tt.want { + t.Errorf("case %d: got %q, want %q", i, got, tt.want) + } + }) + } +} + +func TestFunctionConvertAndAdd(t *testing.T) { + // make a fresh map for each test, but within a test use the same map so we can test for dupe handling + tests := []struct { + name string + in []string + want []string + }{ + {name: "basic dupe handling", in: []string{"get weather", "get weather"}, want: []string{"get_weather", "get_weather_2"}}, + {name: "dupes from different user-specified names", in: []string{"get weather", "get_weather", "get-weather"}, want: []string{"get_weather", "get_weather_2", "get_weather_3"}}, + {name: "non dupes after dupes", in: []string{"get weather", "get_weather", "get-weather", "something-different"}, want: []string{"get_weather", "get_weather_2", "get_weather_3", "something_different"}}, + {name: "multiple sets of dupes", in: []string{"a", "a", "b", "a", "a", "b", "a"}, want: []string{"a", "a_2", "b", "a_3", "a_4", "b_2", "a_5"}}, + } + + for i, tt := range tests { + parser := NewFunctionNameMap() + t.Run(tt.name, func(t *testing.T) { + for j, in := range tt.in { + got := parser.ConvertAndAdd(in) + want := tt.want[j] + if got != want { + t.Errorf("case %d: got %q, want %q", i, got, want) + } + // check that the maps are correct + if parser.userToHarmony[in] != want { + t.Errorf("case %d: userToHarmony[%q] = %q, want %q", i, in, parser.userToHarmony[in], want) + } + if parser.harmonyToUser[want] != in { + t.Errorf("case %d: harmonyToUser[%q] = %q, want %q", i, want, parser.harmonyToUser[want], in) + } + } + }) + } +} diff --git a/server/routes.go b/server/routes.go index 3b94daad0..60b7e3e84 100644 --- a/server/routes.go +++ b/server/routes.go @@ -1603,7 +1603,31 @@ func (s *Server) ChatHandler(c *gin.Context) { } msgs = filterThinkTags(msgs, m) - prompt, images, err := chatPrompt(c.Request.Context(), m, r.Tokenize, opts, msgs, req.Tools, req.Think) + var harmonyMessageHandler *HarmonyMessageHandler + var harmonyToolParser *HarmonyToolCallAccumulator + + useHarmony := shouldUseHarmony(*m) + + processedTools := req.Tools + if useHarmony { + harmonyMessageHandler = NewHarmonyMessageHandler() + var lastMessage *api.Message + if len(msgs) > 0 { + lastMessage = &msgs[len(msgs)-1] + } + harmonyMessageHandler.harmonyParser.AddImplicitStartOrPrefill(lastMessage) + harmonyToolParser = harmonyMessageHandler.CreateToolParser() + + // make a copy of tools to pass to the chat prompt. Function names may be + // renamed to be valid Harmony function names. + processedTools = make([]api.Tool, len(req.Tools)) + copy(processedTools, req.Tools) + for i, tool := range processedTools { + processedTools[i].Function.Name = harmonyMessageHandler.functionNameMap.ConvertAndAdd(tool.Function.Name) + } + } + + prompt, images, err := chatPrompt(c.Request.Context(), m, r.Tokenize, opts, msgs, processedTools, req.Think) if err != nil { slog.Error("chat prompt error", "error", err) c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) @@ -1623,27 +1647,12 @@ func (s *Server) ChatHandler(c *gin.Context) { return } - useHarmony := shouldUseHarmony(*m) - // Validate Think value: string values currently only allowed for gptoss models if req.Think != nil && req.Think.IsString() && !useHarmony { c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("think value %q is not supported for this model", req.Think.String())}) return } - var harmonyMessageHandler *HarmonyMessageHandler - var harmonyToolParser *HarmonyToolCallAccumulator - - if useHarmony { - harmonyMessageHandler = NewHarmonyMessageHandler() - var lastMessage *api.Message - if len(msgs) > 0 { - lastMessage = &msgs[len(msgs)-1] - } - harmonyMessageHandler.harmonyParser.AddImplicitStartOrPrefill(lastMessage) - harmonyToolParser = harmonyMessageHandler.CreateToolParser() - } - var thinkingState *thinking.Parser openingTag, closingTag := thinking.InferTags(m.Template.Template) if req.Think != nil && req.Think.Bool() && openingTag != "" && closingTag != "" { @@ -1696,6 +1705,7 @@ func (s *Server) ChatHandler(c *gin.Context) { toolName, toolContent := harmonyToolParser.Drain() if toolName != nil { *toolName = strings.TrimPrefix(*toolName, "functions.") + *toolName = harmonyMessageHandler.functionNameMap.OriginalFromConverted(*toolName) var args api.ToolCallFunctionArguments if err := json.Unmarshal([]byte(toolContent), &args); err != nil { errStr := fmt.Sprintf("error parsing tool call: raw='%s', err=%s", toolContent, err.Error()) From e3ade453a8f96a5534ae804e32a44aeb0159befa Mon Sep 17 00:00:00 2001 From: Jesse Gross Date: Mon, 18 Aug 2025 13:52:07 -0700 Subject: [PATCH 14/45] llm: Check for nil memory data before printing We dump out our best memory estimate after we complete processing for any reason, including errors. This is helpful for finding what what stopped us in error conditions but in some cases we might not have gotten even the first result yet. Fixes #11957 --- llm/server.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/llm/server.go b/llm/server.go index 01224a166..ecdaa90e9 100644 --- a/llm/server.go +++ b/llm/server.go @@ -651,7 +651,9 @@ func (s *ollamaServer) Load(ctx context.Context, gpus discover.GpuInfoList, requ if !success { s.initModel(ctx, LoadRequest{}, LoadOperationClose) } - s.mem.Log(slog.LevelInfo) + if s.mem != nil { + s.mem.Log(slog.LevelInfo) + } }() slog.Info("loading model", "model layers", s.totalLayers, "requested", s.options.NumGPU) From 470d58020584ea336d3092b870dbb21a6db3602d Mon Sep 17 00:00:00 2001 From: Ruslan Suleymanov <87182605+aqerd@users.noreply.github.com> Date: Tue, 19 Aug 2025 02:20:28 +0500 Subject: [PATCH 15/45] readme: add Andes to community integrations (#11952) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6f62f50b4..fda574b39 100644 --- a/README.md +++ b/README.md @@ -412,6 +412,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [ai-hub](https://github.com/Aj-Seven/ai-hub) (AI Hub supports multiple models via API keys and Chat support via Ollama API.) - [Mayan EDMS](https://gitlab.com/mayan-edms/mayan-edms) (Open source document management system to organize, tag, search, and automate your files with powerful Ollama driven workflows.) - [Serene Pub](https://github.com/doolijb/serene-pub) (Beginner friendly, open source AI Roleplaying App for Windows, Mac OS and Linux. Search, download and use models with Ollama all inside the app.) +- [Andes](https://github.com/aqerd/andes) (A Visual Studio Code extension that provides a local UI interface for Ollama models) ### Cloud From 9cfbffafc55bb07f7d627a6701df2e9c8a520f5f Mon Sep 17 00:00:00 2001 From: Kostis Date: Tue, 19 Aug 2025 00:21:36 +0300 Subject: [PATCH 16/45] readme: add any-agent to community integrations (#11950) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index fda574b39..0680590f5 100644 --- a/README.md +++ b/README.md @@ -540,6 +540,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [Ollama for D](https://github.com/kassane/ollama-d) - [OllamaPlusPlus](https://github.com/HardCodeDev777/OllamaPlusPlus) (Very simple C++ library for Ollama) - [any-llm](https://github.com/mozilla-ai/any-llm) (A single interface to use different llm providers by [mozilla.ai](https://www.mozilla.ai/)) +- [any-agent](https://github.com/mozilla-ai/any-agent) (A single interface to use and evaluate different agent frameworks by [mozilla.ai](https://www.mozilla.ai/)) ### Mobile From f804e8a46005b36e6f14577f4226cf2046abce12 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Mon, 18 Aug 2025 17:45:40 -0700 Subject: [PATCH 17/45] disable output_all (#11959) --- llama/llama.cpp/src/llama-context.cpp | 3 +-- .../0019-Enable-CUDA-Graphs-for-gemma3n.patch | 2 +- .../0023-decode-disable-output_all.patch | 23 +++++++++++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 llama/patches/0023-decode-disable-output_all.patch diff --git a/llama/llama.cpp/src/llama-context.cpp b/llama/llama.cpp/src/llama-context.cpp index 26a5cf9c3..6ece5263b 100644 --- a/llama/llama.cpp/src/llama-context.cpp +++ b/llama/llama.cpp/src/llama-context.cpp @@ -962,8 +962,7 @@ int llama_context::decode(const llama_batch & batch_inp) { const int64_t n_vocab = vocab.n_tokens(); const int64_t n_embd = hparams.n_embd; - // when computing embeddings, all tokens are output - const bool output_all = cparams.embeddings; + const bool output_all = false; if (!balloc->init(batch_inp, vocab, memory.get(), n_embd, cparams.kv_unified ? LLAMA_MAX_SEQ : cparams.n_seq_max, output_all)) { LLAMA_LOG_ERROR("%s: failed to initialize batch\n", __func__); diff --git a/llama/patches/0019-Enable-CUDA-Graphs-for-gemma3n.patch b/llama/patches/0019-Enable-CUDA-Graphs-for-gemma3n.patch index c8b227c0c..db1303b32 100644 --- a/llama/patches/0019-Enable-CUDA-Graphs-for-gemma3n.patch +++ b/llama/patches/0019-Enable-CUDA-Graphs-for-gemma3n.patch @@ -13,7 +13,7 @@ checks. 1 file changed, 18 insertions(+) diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu -index 57eae461..9db0c8b5 100644 +index 57eae461..c7f9dc3a 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -2671,12 +2671,24 @@ static bool check_node_graph_compatibility_and_refresh_copy_ops(ggml_backend_cud diff --git a/llama/patches/0023-decode-disable-output_all.patch b/llama/patches/0023-decode-disable-output_all.patch new file mode 100644 index 000000000..dc326ae64 --- /dev/null +++ b/llama/patches/0023-decode-disable-output_all.patch @@ -0,0 +1,23 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Michael Yang +Date: Mon, 18 Aug 2025 16:58:39 -0700 +Subject: [PATCH] decode: disable output_all + +--- + src/llama-context.cpp | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/src/llama-context.cpp b/src/llama-context.cpp +index 26a5cf9c..6ece5263 100644 +--- a/src/llama-context.cpp ++++ b/src/llama-context.cpp +@@ -962,8 +962,7 @@ int llama_context::decode(const llama_batch & batch_inp) { + const int64_t n_vocab = vocab.n_tokens(); + const int64_t n_embd = hparams.n_embd; + +- // when computing embeddings, all tokens are output +- const bool output_all = cparams.embeddings; ++ const bool output_all = false; + + if (!balloc->init(batch_inp, vocab, memory.get(), n_embd, cparams.kv_unified ? LLAMA_MAX_SEQ : cparams.n_seq_max, output_all)) { + LLAMA_LOG_ERROR("%s: failed to initialize batch\n", __func__); From 05ccb17c6e101637ef0fa8fbd88952da2e7e2ca4 Mon Sep 17 00:00:00 2001 From: Jesse Gross Date: Tue, 19 Aug 2025 09:52:18 -0700 Subject: [PATCH 18/45] kvcache: Use Cast instead of Copy for flash attention masks Flash attention kernels require the mask of the KV cache be a F16 rather than an F32. We can use the GGML operation ggml_cast to do this rather than doing it ourselves, which allows reuse of a preallocated buffer in the graph rather than allocating a new one for each batch. This improves token generation performance with flash attention by 10-30% (with gpt-oss). This also makes performance with flash attention better than without it, as expected. --- kvcache/causal.go | 4 +--- ml/backend.go | 1 + ml/backend/ggml/ggml.go | 44 +++++++++++++++++++++++++---------------- 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/kvcache/causal.go b/kvcache/causal.go index 96d8067eb..31f552331 100644 --- a/kvcache/causal.go +++ b/kvcache/causal.go @@ -378,9 +378,7 @@ func (c *Causal) buildMask(ctx ml.Context) ml.Tensor { maskTensor := ctx.Input().FromFloatSlice(mask, length, batchSize) if c.config.MaskDType != ml.DTypeF32 { - out := ctx.Input().Empty(c.config.MaskDType, maskTensor.Shape()...) - ctx.Forward(maskTensor.Copy(ctx, out)) - maskTensor = out + maskTensor = maskTensor.Cast(ctx, c.config.MaskDType) } return maskTensor diff --git a/ml/backend.go b/ml/backend.go index 638a05d14..705724821 100644 --- a/ml/backend.go +++ b/ml/backend.go @@ -396,6 +396,7 @@ type Tensor interface { Shape() []int DType() DType + Cast(ctx Context, dtype DType) Tensor Bytes() []byte Floats() []float32 diff --git a/ml/backend/ggml/ggml.go b/ml/backend/ggml/ggml.go index f8121cc53..13d898aad 100644 --- a/ml/backend/ggml/ggml.go +++ b/ml/backend/ggml/ggml.go @@ -843,23 +843,7 @@ func (c *Context) newTensor(dtype ml.DType, shape []int) ml.Tensor { panic("set Input or Layer before creating tensors") } - var cdtype uint32 - switch dtype { - case ml.DTypeF32: - cdtype = C.GGML_TYPE_F32 - case ml.DTypeF16: - cdtype = C.GGML_TYPE_F16 - case ml.DTypeQ80: - cdtype = C.GGML_TYPE_Q8_0 - case ml.DTypeQ40: - cdtype = C.GGML_TYPE_Q4_0 - case ml.DTypeI32: - cdtype = C.GGML_TYPE_I32 - case ml.DTypeMXFP4: - cdtype = C.GGML_TYPE_MXFP4 - default: - panic("unsupported dtype") - } + cdtype := ggmlDType(dtype) if len(shape) < 1 || shape[0] == 0 { var shape C.int64_t = 0 @@ -1056,6 +1040,32 @@ func (t *Tensor) DType() ml.DType { } } +func ggmlDType(dtype ml.DType) uint32 { + switch dtype { + case ml.DTypeF32: + return C.GGML_TYPE_F32 + case ml.DTypeF16: + return C.GGML_TYPE_F16 + case ml.DTypeQ80: + return C.GGML_TYPE_Q8_0 + case ml.DTypeQ40: + return C.GGML_TYPE_Q4_0 + case ml.DTypeI32: + return C.GGML_TYPE_I32 + case ml.DTypeMXFP4: + return C.GGML_TYPE_MXFP4 + default: + panic("unsupported dtype") + } +} + +func (t *Tensor) Cast(ctx ml.Context, dtype ml.DType) ml.Tensor { + return &Tensor{ + b: t.b, + t: C.ggml_cast(ctx.(*Context).ctx, t.t, ggmlDType(dtype)), + } +} + func (t *Tensor) Neg(ctx ml.Context) ml.Tensor { return &Tensor{ b: t.b, From fc5fb09f514758ae9f59b11632c3d8f32e951d49 Mon Sep 17 00:00:00 2001 From: Devon Rifkin Date: Tue, 19 Aug 2025 18:34:49 -0700 Subject: [PATCH 19/45] model: fix boundary in bpe 0x007e is a tilde and was getting adjusted (+0x00a2) to 0x0120 in the encode, but then in the decode it was getting adjusted down (-0x0100) to 0x0020. The boundary for the +0x00a2 case has been adjusted to fix this Fixes: #11966 --- model/bytepairencoding.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/bytepairencoding.go b/model/bytepairencoding.go index 7ade497da..e4083dfce 100644 --- a/model/bytepairencoding.go +++ b/model/bytepairencoding.go @@ -109,7 +109,7 @@ func (bpe BytePairEncoding) Encode(s string, addSpecial bool) ([]int32, error) { r = 0x0143 case r <= 0x0020: r = r + 0x0100 - case r >= 0x007e && r <= 0x00a0: + case r >= 0x007f && r <= 0x00a0: r = r + 0x00a2 } From 463a6caad82cd3de259b1135927722c71e9d80de Mon Sep 17 00:00:00 2001 From: Devon Rifkin Date: Tue, 19 Aug 2025 22:05:48 -0700 Subject: [PATCH 20/45] model: add bpe roundtripping tests --- model/bytepairencoding_test.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/model/bytepairencoding_test.go b/model/bytepairencoding_test.go index 7e310b56e..71947be99 100644 --- a/model/bytepairencoding_test.go +++ b/model/bytepairencoding_test.go @@ -207,6 +207,36 @@ func TestLlama(t *testing.T) { } } }) + + t.Run("roundtriping 0x00-0xFF", func(t *testing.T) { + t.Parallel() + + for b := 0x00; b <= 0xFF; b++ { + input := string(rune(b)) + ids, err := tokenizer.Encode(input, false) + if err != nil { + t.Errorf("failed to encode rune 0x%02X: %v", b, err) + continue + } + + decoded, err := tokenizer.Decode(ids) + if err != nil { + t.Errorf("failed to decode rune 0x%02X: %v", b, err) + continue + } + + if b == 0x00 { + if len(decoded) != 0 { + t.Errorf("Decode(Encode(0x00)) should be empty, got %v", ids) + } + continue + } + + if decoded != input { + t.Errorf("rune 0x%02X failed roundtrip: got %q, want %q", b, decoded, input) + } + } + }) } func BenchmarkBytePairEncoding(b *testing.B) { From 91fc3c48e38256e69eb0a52c4540bd9ae0b8a660 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Wed, 20 Aug 2025 12:21:42 -0700 Subject: [PATCH 21/45] openai: remove reasoning as an api.Options (#11993) --- openai/openai.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/openai/openai.go b/openai/openai.go index 13b9c425f..9c7c41cb4 100644 --- a/openai/openai.go +++ b/openai/openai.go @@ -557,12 +557,10 @@ func fromChatRequest(r ChatCompletionRequest) (*api.ChatRequest, error) { var think *api.ThinkValue if r.Reasoning != nil { - options["reasoning"] = *r.Reasoning.Effort think = &api.ThinkValue{ Value: *r.Reasoning.Effort, } } else if r.ReasoningEffort != nil { - options["reasoning"] = *r.ReasoningEffort think = &api.ThinkValue{ Value: *r.ReasoningEffort, } From 073fa31df501d7cb943d3fa0fb19841da9651479 Mon Sep 17 00:00:00 2001 From: Jesse Gross Date: Wed, 20 Aug 2025 12:51:45 -0700 Subject: [PATCH 22/45] llm: Don't always evict models in CPU-only mode With old memory estimates, it's currently impossible to load more than one model at a time when no GPUs are available. This is because the check for whether we need to evict a model looks to see if all layers of the new model can be loaded onto GPUs, which is never true if there are no GPUs. Before the memory management changes, there was a special code path for CPU-only systems. This problem does not exist with new memory estimates. Fixes #11974 --- llm/memory.go | 12 ++++++++---- llm/server.go | 5 +---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/llm/memory.go b/llm/memory.go index ee4be7419..d8ae5e44a 100644 --- a/llm/memory.go +++ b/llm/memory.go @@ -30,7 +30,7 @@ func pickBestFullFitByLibrary(f *ggml.GGML, modelPath string, projectors []strin // Try to pack into as few GPUs as possible, starting from 1 GPU for numGPUs := 1; numGPUs <= len(sgl); numGPUs++ { gpuSubset := sgl[:numGPUs] - ok, estimatedVRAM := PredictServerFit(gpuSubset, f, adapters, projectors, opts, numParallel) + ok, estimatedVRAM := predictServerFit(gpuSubset, f, adapters, projectors, opts, numParallel) if ok { slog.Info("new model will fit in available VRAM across minimum required GPUs, loading", @@ -48,7 +48,7 @@ func pickBestFullFitByLibrary(f *ggml.GGML, modelPath string, projectors []strin // - try subsets of GPUs instead of just falling back to 1 or all in a family // Now try all the GPUS (OLLAMA_SCHED_SPREAD is set) - if ok, estimatedVRAM := PredictServerFit(sgl, f, adapters, projectors, opts, numParallel); ok { + if ok, estimatedVRAM := predictServerFit(sgl, f, adapters, projectors, opts, numParallel); ok { slog.Info("new model will fit in available VRAM, loading", "model", modelPath, "library", sgl[0].Library, @@ -71,7 +71,7 @@ func pickBestPartialFitByLibrary(f *ggml.GGML, projectors []string, adapters []s var bestEstimate uint64 var bestFit int for i, gl := range byLibrary { - _, estimatedVRAM := PredictServerFit(gl, f, adapters, projectors, opts, numParallel) + _, estimatedVRAM := predictServerFit(gl, f, adapters, projectors, opts, numParallel) if estimatedVRAM > bestEstimate { bestEstimate = estimatedVRAM bestFit = i @@ -81,7 +81,7 @@ func pickBestPartialFitByLibrary(f *ggml.GGML, projectors []string, adapters []s } // This algorithm looks for a complete fit to determine if we need to unload other models -func PredictServerFit(allGpus discover.GpuInfoList, f *ggml.GGML, adapters, projectors []string, opts api.Options, numParallel int) (bool, uint64) { +func predictServerFit(allGpus discover.GpuInfoList, f *ggml.GGML, adapters, projectors []string, opts api.Options, numParallel int) (bool, uint64) { // Split up the GPUs by type and try them var estimatedVRAM uint64 for _, gpus := range allGpus.ByLibrary() { @@ -97,6 +97,10 @@ func PredictServerFit(allGpus discover.GpuInfoList, f *ggml.GGML, adapters, proj return true, estimatedVRAM } } + + if len(gpus) == 1 && gpus[0].Library == "cpu" && estimate.TotalSize <= gpus[0].FreeMemory { + return true, estimatedVRAM + } } return false, estimatedVRAM } diff --git a/llm/server.go b/llm/server.go index ecdaa90e9..b05e9b82d 100644 --- a/llm/server.go +++ b/llm/server.go @@ -492,6 +492,7 @@ func (s *llamaServer) Load(ctx context.Context, gpus discover.GpuInfoList, requi if !requireFull { g = pickBestPartialFitByLibrary(s.ggml, []string{s.loadRequest.ProjectorPath}, s.loadRequest.LoraPath, s.options, gpus, s.numParallel) } else { + slog.Info("model requires more memory than is currently available, evicting a model to make space", "estimate", s.estimate) return ErrLoadRequiredFull } } @@ -524,10 +525,6 @@ func (s *llamaServer) Load(ctx context.Context, gpus discover.GpuInfoList, requi } } - if requireFull && len(gpus) == 1 && gpus[0].Library == "cpu" && s.estimate.TotalSize > gpus[0].FreeMemory { - return ErrLoadRequiredFull - } - slog.Info("offload", "", s.estimate) s.gpus = gpus From 4ae4f47b16fd75e10aa12e0f6c22001df5410d78 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Wed, 20 Aug 2025 15:39:18 -0700 Subject: [PATCH 23/45] gpt-oss: convert from hugging face format (#11907) --- convert/convert_gptoss.go | 100 +++++++++++++++++++++++++------------- 1 file changed, 66 insertions(+), 34 deletions(-) diff --git a/convert/convert_gptoss.go b/convert/convert_gptoss.go index bd362169b..c5a691d3d 100644 --- a/convert/convert_gptoss.go +++ b/convert/convert_gptoss.go @@ -15,19 +15,24 @@ import ( type gptossModel struct { ModelParameters - HiddenLayers uint32 `json:"num_hidden_layers"` - HiddenSize uint32 `json:"hidden_size"` - IntermediateSize uint32 `json:"intermediate_size"` - AttentionHeads uint32 `json:"num_attention_heads"` - KeyValueHeads uint32 `json:"num_key_value_heads"` - HeadDim uint32 `json:"head_dim"` - Experts uint32 `json:"num_experts"` - ExpertsPerToken uint32 `json:"experts_per_token"` - RMSNormEpsilon float32 `json:"rms_norm_eps"` - InitialContextLength uint32 `json:"initial_context_length"` - RopeTheta float32 `json:"rope_theta"` - RopeScalingFactor float32 `json:"rope_scaling_factor"` - SlidingWindow uint32 `json:"sliding_window"` + HiddenLayers uint32 `json:"num_hidden_layers"` + MaxPositionEmbeddings uint32 `json:"max_position_embeddings"` + HiddenSize uint32 `json:"hidden_size"` + IntermediateSize uint32 `json:"intermediate_size"` + AttentionHeads uint32 `json:"num_attention_heads"` + KeyValueHeads uint32 `json:"num_key_value_heads"` + HeadDim uint32 `json:"head_dim"` + Experts uint32 `json:"num_experts"` + LocalExperts uint32 `json:"num_local_experts"` + ExpertsPerToken uint32 `json:"experts_per_token"` + RMSNormEpsilon float32 `json:"rms_norm_eps"` + InitialContextLength uint32 `json:"initial_context_length"` + RopeTheta float32 `json:"rope_theta"` + RopeScalingFactor float32 `json:"rope_scaling_factor"` + RopeScaling struct { + Factor float32 `json:"factor"` + } `json:"rope_scaling"` + SlidingWindow uint32 `json:"sliding_window"` } var _ ModelConverter = (*gptossModel)(nil) @@ -36,11 +41,11 @@ func (m *gptossModel) KV(t *Tokenizer) ggml.KV { kv := m.ModelParameters.KV(t) kv["general.architecture"] = "gptoss" kv["general.file_type"] = uint32(4) - kv["gptoss.context_length"] = uint32(m.RopeScalingFactor * float32(m.InitialContextLength)) + kv["gptoss.context_length"] = cmp.Or(m.MaxPositionEmbeddings, uint32(m.RopeScalingFactor*float32(m.InitialContextLength))) kv["gptoss.block_count"] = m.HiddenLayers kv["gptoss.embedding_length"] = m.HiddenSize kv["gptoss.feed_forward_length"] = m.IntermediateSize - kv["gptoss.expert_count"] = m.Experts + kv["gptoss.expert_count"] = cmp.Or(m.Experts, m.LocalExperts) kv["gptoss.expert_used_count"] = m.ExpertsPerToken kv["gptoss.attention.head_count"] = m.AttentionHeads kv["gptoss.attention.head_count_kv"] = m.KeyValueHeads @@ -49,7 +54,7 @@ func (m *gptossModel) KV(t *Tokenizer) ggml.KV { kv["gptoss.attention.layer_norm_rms_epsilon"] = cmp.Or(m.RMSNormEpsilon, 1e-5) kv["gptoss.attention.sliding_window"] = m.SlidingWindow kv["gptoss.rope.freq_base"] = m.RopeTheta - kv["gptoss.rope.scaling.factor"] = m.RopeScalingFactor + kv["gptoss.rope.scaling.factor"] = cmp.Or(m.RopeScalingFactor, m.RopeScaling.Factor) kv["gptoss.rope.scaling.original_context_length"] = m.InitialContextLength kv["tokenizer.ggml.bos_token_id"] = uint32(199998) // <|startoftext|> kv["tokenizer.ggml.add_bos_token"] = false @@ -92,6 +97,11 @@ func (m *gptossModel) Tensors(ts []Tensor) []*ggml.Tensor { for name, mxfp4 := range mxfp4s { dims := mxfp4.blocks.Shape() + + if !strings.HasSuffix(name, ".weight") { + name += ".weight" + } + out = append(out, &ggml.Tensor{ Name: name, Kind: uint32(ggml.TensorTypeMXFP4), @@ -104,25 +114,47 @@ func (m *gptossModel) Tensors(ts []Tensor) []*ggml.Tensor { } func (m *gptossModel) Replacements() []string { - return []string{ - // noop replacements so other replacements will not be applied - ".blocks", ".blocks", - ".scales", ".scales", - // real replacements - "block", "blk", - "attn.norm", "attn_norm", - "attn.qkv", "attn_qkv", - "attn.sinks", "attn_sinks", - "attn.out", "attn_out", - "mlp.norm", "ffn_norm", - "mlp.gate", "ffn_gate_inp", - "mlp.mlp1_", "ffn_gate_up_exps.", - "mlp.mlp2_", "ffn_down_exps.", - "embedding", "token_embd", - "norm", "output_norm", - "unembedding", "output", - "scale", "weight", + var replacements []string + if m.MaxPositionEmbeddings > 0 { + // hf flavored model + replacements = []string{ + "lm_head", "output", + "model.embed_tokens", "token_embd", + "model.layers", "blk", + "input_layernorm", "attn_norm", + "self_attn.q_proj", "attn_q", + "self_attn.k_proj", "attn_k", + "self_attn.v_proj", "attn_v", + "self_attn.o_proj", "attn_out", + "self_attn.sinks", "attn_sinks", + "post_attention_layernorm", "ffn_norm", + "mlp.router", "ffn_gate_inp", + "mlp.experts.gate_up_proj_", "ffn_gate_up_exps.", + "mlp.experts.down_proj_", "ffn_down_exps.", + "model.norm", "output_norm", + } + } else { + replacements = []string{ + // noop replacements so other replacements will not be applied + ".blocks", ".blocks", + ".scales", ".scales", + // real replacements + "block", "blk", + "attn.norm", "attn_norm", + "attn.qkv", "attn_qkv", + "attn.sinks", "attn_sinks", + "attn.out", "attn_out", + "mlp.norm", "ffn_norm", + "mlp.gate", "ffn_gate_inp", + "mlp.mlp1_", "ffn_gate_up_exps.", + "mlp.mlp2_", "ffn_down_exps.", + "embedding", "token_embd", + "norm", "output_norm", + "unembedding", "output", + "scale", "weight", + } } + return replacements } type mxfp4 struct { From 7cce5aac76898099b954ee91f748f052d23e3253 Mon Sep 17 00:00:00 2001 From: Parth Sareen Date: Thu, 21 Aug 2025 13:56:22 -0700 Subject: [PATCH 24/45] harmony: move harmony parsing into a package (#12016) --- {server => harmony}/harmonyparser.go | 25 ++++----------- {server => harmony}/harmonyparser_test.go | 2 +- server/routes.go | 37 +++++++++++++++-------- 3 files changed, 32 insertions(+), 32 deletions(-) rename {server => harmony}/harmonyparser.go (95%) rename {server => harmony}/harmonyparser_test.go (99%) diff --git a/server/harmonyparser.go b/harmony/harmonyparser.go similarity index 95% rename from server/harmonyparser.go rename to harmony/harmonyparser.go index 4405cea44..e72496614 100644 --- a/server/harmonyparser.go +++ b/harmony/harmonyparser.go @@ -1,10 +1,9 @@ -package server +package harmony import ( "context" "fmt" "log/slog" - "slices" "strings" "unicode" @@ -20,18 +19,6 @@ const ( harmonyParserState_ParsingContent ) -func shouldUseHarmony(model Model) bool { - if slices.Contains([]string{"gptoss", "gpt-oss"}, model.Config.ModelFamily) { - // heuristic to check whether the template expects to be parsed via harmony: - // search for harmony tags that are nearly always used - if model.Template.Contains("<|start|>") && model.Template.Contains("<|end|>") { - return true - } - } - - return false -} - func (s harmonyParserState) String() string { switch s { // we're looking for the message start tag @@ -277,20 +264,20 @@ const ( // This is a higher level interface that maps harmony concepts into ollama concepts type HarmonyMessageHandler struct { state harmonyMessageState - harmonyParser *HarmonyParser - functionNameMap *FunctionNameMap + HarmonyParser *HarmonyParser + FunctionNameMap *FunctionNameMap } // NewHarmonyMessageHandler creates a new message handler func NewHarmonyMessageHandler() *HarmonyMessageHandler { return &HarmonyMessageHandler{ state: harmonyMessageState_Normal, - harmonyParser: &HarmonyParser{ + HarmonyParser: &HarmonyParser{ MessageStartTag: "<|start|>", MessageEndTag: "<|end|>", HeaderEndTag: "<|message|>", }, - functionNameMap: NewFunctionNameMap(), + FunctionNameMap: NewFunctionNameMap(), } } @@ -301,7 +288,7 @@ func (h *HarmonyMessageHandler) AddContent(content string, toolParser *HarmonyTo thinkingSb := strings.Builder{} toolContentSb := strings.Builder{} - events := h.harmonyParser.AddContent(content) + events := h.HarmonyParser.AddContent(content) for _, event := range events { switch event := event.(type) { case HarmonyEventHeaderComplete: diff --git a/server/harmonyparser_test.go b/harmony/harmonyparser_test.go similarity index 99% rename from server/harmonyparser_test.go rename to harmony/harmonyparser_test.go index 8a22f3404..b988a018f 100644 --- a/server/harmonyparser_test.go +++ b/harmony/harmonyparser_test.go @@ -1,4 +1,4 @@ -package server +package harmony import ( "fmt" diff --git a/server/routes.go b/server/routes.go index 60b7e3e84..cc8913537 100644 --- a/server/routes.go +++ b/server/routes.go @@ -32,6 +32,7 @@ import ( "github.com/ollama/ollama/envconfig" "github.com/ollama/ollama/format" "github.com/ollama/ollama/fs/ggml" + "github.com/ollama/ollama/harmony" "github.com/ollama/ollama/llm" "github.com/ollama/ollama/logutil" "github.com/ollama/ollama/openai" @@ -45,6 +46,18 @@ import ( "github.com/ollama/ollama/version" ) +func shouldUseHarmony(model *Model) bool { + if slices.Contains([]string{"gptoss", "gpt-oss"}, model.Config.ModelFamily) { + // heuristic to check whether the template expects to be parsed via harmony: + // search for harmony tags that are nearly always used + if model.Template.Contains("<|start|>") && model.Template.Contains("<|end|>") { + return true + } + } + + return false +} + func experimentEnabled(name string) bool { return slices.Contains(strings.Split(os.Getenv("OLLAMA_EXPERIMENT"), ","), name) } @@ -194,12 +207,12 @@ func (s *Server) GenerateHandler(c *gin.Context) { return } - useHarmony := shouldUseHarmony(*m) && !req.Raw - var harmonyMessageHandler *HarmonyMessageHandler - var harmonyToolParser *HarmonyToolCallAccumulator + useHarmony := shouldUseHarmony(m) && !req.Raw + var harmonyMessageHandler *harmony.HarmonyMessageHandler + var harmonyToolParser *harmony.HarmonyToolCallAccumulator if useHarmony { - harmonyMessageHandler = NewHarmonyMessageHandler() - harmonyMessageHandler.harmonyParser.AddImplicitStart() + harmonyMessageHandler = harmony.NewHarmonyMessageHandler() + harmonyMessageHandler.HarmonyParser.AddImplicitStart() harmonyToolParser = harmonyMessageHandler.CreateToolParser() } @@ -1603,19 +1616,19 @@ func (s *Server) ChatHandler(c *gin.Context) { } msgs = filterThinkTags(msgs, m) - var harmonyMessageHandler *HarmonyMessageHandler - var harmonyToolParser *HarmonyToolCallAccumulator + var harmonyMessageHandler *harmony.HarmonyMessageHandler + var harmonyToolParser *harmony.HarmonyToolCallAccumulator - useHarmony := shouldUseHarmony(*m) + useHarmony := shouldUseHarmony(m) processedTools := req.Tools if useHarmony { - harmonyMessageHandler = NewHarmonyMessageHandler() + harmonyMessageHandler = harmony.NewHarmonyMessageHandler() var lastMessage *api.Message if len(msgs) > 0 { lastMessage = &msgs[len(msgs)-1] } - harmonyMessageHandler.harmonyParser.AddImplicitStartOrPrefill(lastMessage) + harmonyMessageHandler.HarmonyParser.AddImplicitStartOrPrefill(lastMessage) harmonyToolParser = harmonyMessageHandler.CreateToolParser() // make a copy of tools to pass to the chat prompt. Function names may be @@ -1623,7 +1636,7 @@ func (s *Server) ChatHandler(c *gin.Context) { processedTools = make([]api.Tool, len(req.Tools)) copy(processedTools, req.Tools) for i, tool := range processedTools { - processedTools[i].Function.Name = harmonyMessageHandler.functionNameMap.ConvertAndAdd(tool.Function.Name) + processedTools[i].Function.Name = harmonyMessageHandler.FunctionNameMap.ConvertAndAdd(tool.Function.Name) } } @@ -1705,7 +1718,7 @@ func (s *Server) ChatHandler(c *gin.Context) { toolName, toolContent := harmonyToolParser.Drain() if toolName != nil { *toolName = strings.TrimPrefix(*toolName, "functions.") - *toolName = harmonyMessageHandler.functionNameMap.OriginalFromConverted(*toolName) + *toolName = harmonyMessageHandler.FunctionNameMap.OriginalFromConverted(*toolName) var args api.ToolCallFunctionArguments if err := json.Unmarshal([]byte(toolContent), &args); err != nil { errStr := fmt.Sprintf("error parsing tool call: raw='%s', err=%s", toolContent, err.Error()) From 2cb0a580f34377c8b014ce20d8fdb370cfc2a12e Mon Sep 17 00:00:00 2001 From: Devon Rifkin Date: Thu, 21 Aug 2025 21:03:12 -0700 Subject: [PATCH 25/45] thinking: fix double emit when no opening tag The thinking parser will automatically transition to being a pass-through if non-whitespace is seen before an opening tag. However, we weren't clearing the buffer after the first non-whitespace input, so in practice the first token would be emitted twice. Added a test that demonstrated this, and then fixed the bug. --- thinking/parser.go | 4 +++- thinking/parser_test.go | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/thinking/parser.go b/thinking/parser.go index a4d05e35a..bec0fb0e6 100644 --- a/thinking/parser.go +++ b/thinking/parser.go @@ -103,7 +103,9 @@ func eat(s *Parser) (string, string, bool) { // note that we use the original content, not the trimmed one because we // don't want to eat any whitespace in the real content if there were no // thinking tags - return "", s.acc.String(), false + untrimmed := s.acc.String() + s.acc.Reset() + return "", untrimmed, false } case thinkingState_ThinkingStartedEatingWhitespace: trimmed := strings.TrimLeftFunc(s.acc.String(), unicode.IsSpace) diff --git a/thinking/parser_test.go b/thinking/parser_test.go index 78c297cd9..460cf3924 100644 --- a/thinking/parser_test.go +++ b/thinking/parser_test.go @@ -58,6 +58,15 @@ func TestThinkingStreaming(t *testing.T) { wantContent: " abc", wantStateAfter: thinkingState_ThinkingDone, }, + // regression test for a bug where we were transitioning directly to + // ThinkingDone without clearing the buffer. This would cuase the first + // step to be outputted twice + { + input: "def", + wantThinking: "", + wantContent: "def", + wantStateAfter: thinkingState_ThinkingDone, + }, }, }, { From 109d4fc3b4448c9383393daa5bc64ef155917250 Mon Sep 17 00:00:00 2001 From: zoupingshi Date: Sat, 23 Aug 2025 02:00:27 +0800 Subject: [PATCH 26/45] chore: remove redundant words in comment (#12028) Signed-off-by: zoupingshi --- runner/llamarunner/cache.go | 2 +- runner/ollamarunner/cache.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/runner/llamarunner/cache.go b/runner/llamarunner/cache.go index 2e273e69c..44b246134 100644 --- a/runner/llamarunner/cache.go +++ b/runner/llamarunner/cache.go @@ -46,7 +46,7 @@ func NewInputCache(lc *llama.Context, kvSize int, numSlots int, multiUserCache b } // Locking: Operations on InputCacheSlot (including finding one -// through LoadCacheSlot) require a lock to be be held that serializes +// through LoadCacheSlot) require a lock to be held that serializes // these operations with each other and llama.Decode type InputCacheSlot struct { diff --git a/runner/ollamarunner/cache.go b/runner/ollamarunner/cache.go index 8c8a29d85..02827cd05 100644 --- a/runner/ollamarunner/cache.go +++ b/runner/ollamarunner/cache.go @@ -78,7 +78,7 @@ func (c *InputCache) Close() { } // Locking: Operations on InputCacheSlot (including finding one -// through LoadCacheSlot) require a lock to be be held that serializes +// through LoadCacheSlot) require a lock to be held that serializes // these operations with each other and processBatch type InputCacheSlot struct { From 4be4dc8717589c859734371a727bb7bc911c7ed8 Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Fri, 22 Aug 2025 12:00:16 -0700 Subject: [PATCH 27/45] server: skip parsing initial if provided in the prompt (#12024) --- server/routes.go | 4 + server/routes_generate_test.go | 230 +++++++++++++++++++++++++++++++++ 2 files changed, 234 insertions(+) diff --git a/server/routes.go b/server/routes.go index cc8913537..ae1662148 100644 --- a/server/routes.go +++ b/server/routes.go @@ -1673,6 +1673,10 @@ func (s *Server) ChatHandler(c *gin.Context) { OpeningTag: openingTag, ClosingTag: closingTag, } + + if strings.HasSuffix(strings.TrimSpace(prompt), openingTag) { + thinkingState.AddContent(openingTag) + } } var toolParser *tools.Parser diff --git a/server/routes_generate_test.go b/server/routes_generate_test.go index a57975f16..a3b83fc1a 100644 --- a/server/routes_generate_test.go +++ b/server/routes_generate_test.go @@ -969,3 +969,233 @@ func TestGenerate(t *testing.T) { } }) } + +func TestChatWithPromptEndingInThinkTag(t *testing.T) { + gin.SetMode(gin.TestMode) + + // Helper to create a standard thinking test setup + setupThinkingTest := func(t *testing.T) (*mockRunner, *Server) { + mock := &mockRunner{ + CompletionResponse: llm.CompletionResponse{ + Done: true, + DoneReason: llm.DoneReasonStop, + PromptEvalCount: 1, + PromptEvalDuration: 1, + EvalCount: 1, + EvalDuration: 1, + }, + } + + s := &Server{ + sched: &Scheduler{ + pendingReqCh: make(chan *LlmRequest, 1), + finishedReqCh: make(chan *LlmRequest, 1), + expiredCh: make(chan *runnerRef, 1), + unloadedCh: make(chan any, 1), + loaded: make(map[string]*runnerRef), + newServerFn: newMockServer(mock), + getGpuFn: discover.GetGPUInfo, + getCpuFn: discover.GetCPUInfo, + reschedDelay: 250 * time.Millisecond, + loadFn: func(req *LlmRequest, _ *ggml.GGML, _ discover.GpuInfoList, _ bool) bool { + time.Sleep(time.Millisecond) + req.successCh <- &runnerRef{llama: mock} + return false + }, + }, + } + + go s.sched.Run(t.Context()) + + // Create a model with thinking support + _, digest := createBinFile(t, ggml.KV{ + "general.architecture": "llama", + "llama.block_count": uint32(1), + "llama.context_length": uint32(8192), + "llama.embedding_length": uint32(4096), + "llama.attention.head_count": uint32(32), + "llama.attention.head_count_kv": uint32(8), + "tokenizer.ggml.tokens": []string{""}, + "tokenizer.ggml.scores": []float32{0}, + "tokenizer.ggml.token_type": []int32{0}, + }, []*ggml.Tensor{ + {Name: "token_embd.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.attn_norm.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.ffn_down.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.ffn_gate.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.ffn_up.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.ffn_norm.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.attn_k.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.attn_output.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.attn_q.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "blk.0.attn_v.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + {Name: "output.weight", Shape: []uint64{1}, WriterTo: bytes.NewReader(make([]byte, 4))}, + }) + + // Create model with thinking template that adds at the end + w := createRequest(t, s.CreateHandler, api.CreateRequest{ + Model: "test-thinking", + Files: map[string]string{"file.gguf": digest}, + Template: `{{- range .Messages }} +{{- if eq .Role "user" }}user: {{ .Content }} +{{ else if eq .Role "assistant" }}assistant: {{ if .Thinking }}{{ .Thinking }}{{ end }}{{ .Content }} +{{ end }}{{ end }}`, + Stream: &stream, + }) + + if w.Code != http.StatusOK { + t.Fatalf("expected status 200, got %d", w.Code) + } + + return mock, s + } + + mock, s := setupThinkingTest(t) + + // Helper to test chat responses + testChatRequest := func(t *testing.T, name string, userContent string, modelResponse string, expectedThinking string, expectedContent string, think bool) { + t.Run(name, func(t *testing.T) { + mock.CompletionResponse = llm.CompletionResponse{ + Content: modelResponse, + Done: true, + DoneReason: llm.DoneReasonStop, + PromptEvalCount: 1, + PromptEvalDuration: 1, + EvalCount: 1, + EvalDuration: 1, + } + mock.CompletionFn = nil + + streamRequest := false + req := api.ChatRequest{ + Model: "test-thinking", + Messages: []api.Message{ + {Role: "user", Content: userContent}, + }, + Stream: &streamRequest, + } + if think { + req.Think = &api.ThinkValue{Value: think} + } + + w := createRequest(t, s.ChatHandler, req) + if w.Code != http.StatusOK { + t.Fatalf("expected status 200, got %d", w.Code) + } + + var resp api.ChatResponse + if err := json.NewDecoder(w.Body).Decode(&resp); err != nil { + t.Fatal(err) + } + + if resp.Message.Thinking != expectedThinking { + t.Errorf("expected thinking %q, got %q", expectedThinking, resp.Message.Thinking) + } + + if resp.Message.Content != expectedContent { + t.Errorf("expected content %q, got %q", expectedContent, resp.Message.Content) + } + }) + } + + // Test cases - Note: Template adds at the end, and leading whitespace after is eaten by the parser + testChatRequest(t, "basic thinking response", + "Help me solve this problem", + " Let me think about this step by step... The answer is 42.", + "Let me think about this step by step... ", + "The answer is 42.", + true) + + testChatRequest(t, "thinking with multiple sentences", + "Explain quantum computing", + " First, I need to understand the basics. Quantum bits can be in superposition. Quantum computing uses quantum mechanics principles.", + "First, I need to understand the basics. Quantum bits can be in superposition. ", + "Quantum computing uses quantum mechanics principles.", + true) + + testChatRequest(t, "no thinking content", + "What is 2+2?", + " The answer is 4.", + "", + "The answer is 4.", + true) + + testChatRequest(t, "thinking disabled but template still adds think tag", + "Simple question", + " My thoughts The answer.", + "", + " My thoughts The answer.", + false) + + // Test streaming response with template-added + t.Run("streaming with thinking", func(t *testing.T) { + var wg sync.WaitGroup + wg.Add(1) + + mock.CompletionFn = func(ctx context.Context, r llm.CompletionRequest, fn func(r llm.CompletionResponse)) error { + defer wg.Done() + + // Verify the prompt ends with due to template + if !strings.HasSuffix(r.Prompt, "") { + t.Errorf("expected prompt to end with , got: %q", r.Prompt) + } + + // Simulate streaming chunks + responses := []llm.CompletionResponse{ + {Content: " I need to consider", Done: false, PromptEvalCount: 1, PromptEvalDuration: 1}, + {Content: " multiple factors here...", Done: false, PromptEvalCount: 1, PromptEvalDuration: 1}, + {Content: " Based on my analysis,", Done: false, PromptEvalCount: 1, PromptEvalDuration: 1}, + {Content: " the solution is straightforward.", Done: true, DoneReason: llm.DoneReasonStop, PromptEvalCount: 1, PromptEvalDuration: 1, EvalCount: 1, EvalDuration: 1}, + } + + for _, resp := range responses { + select { + case <-ctx.Done(): + return ctx.Err() + default: + fn(resp) + time.Sleep(10 * time.Millisecond) + } + } + return nil + } + + think := true + w := createRequest(t, s.ChatHandler, api.ChatRequest{ + Model: "test-thinking", + Messages: []api.Message{{Role: "user", Content: "Analyze this complex problem"}}, + Think: &api.ThinkValue{Value: think}, + Stream: &stream, + }) + + wg.Wait() + + if w.Code != http.StatusOK { + t.Fatalf("expected status 200, got %d", w.Code) + } + + // Parse streaming responses + decoder := json.NewDecoder(w.Body) + var allThinking, allContent strings.Builder + + for { + var resp api.ChatResponse + if err := decoder.Decode(&resp); err == io.EOF { + break + } else if err != nil { + t.Fatal(err) + } + allThinking.WriteString(resp.Message.Thinking) + allContent.WriteString(resp.Message.Content) + } + + // Note: Leading whitespace after is eaten by the parser + if got := allThinking.String(); got != "I need to consider multiple factors here... " { + t.Errorf("expected thinking %q, got %q", "I need to consider multiple factors here... ", got) + } + + if got := allContent.String(); got != "Based on my analysis, the solution is straightforward." { + t.Errorf("expected content %q, got %q", "Based on my analysis, the solution is straightforward.", got) + } + }) +} From 4bcb04ad886c0c7b66e6822c08fed4a1f03bece1 Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Fri, 22 Aug 2025 15:22:14 -0700 Subject: [PATCH 28/45] tools: avoid matching braces that are part of tool content (#12039) --- tools/tools.go | 33 +++++++++- tools/tools_test.go | 155 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 184 insertions(+), 4 deletions(-) diff --git a/tools/tools.go b/tools/tools.go index f9ca15530..80fc6e0d0 100644 --- a/tools/tools.go +++ b/tools/tools.go @@ -224,22 +224,45 @@ func findArguments(buffer []byte) (map[string]any, int) { return nil, 0 } + start := -1 var braces int - var start int = -1 + var inString, escaped bool + + for i := range buffer { + c := buffer[i] + + if escaped { + escaped = false + continue + } + + if c == '\\' { + escaped = true + continue + } + + if c == '"' { + inString = !inString + continue + } + + if inString { + continue + } - for i, c := range buffer { if c == '{' { if braces == 0 { start = i } braces++ - } else if c == '}' && braces > 0 { + } else if c == '}' { braces-- if braces == 0 && start != -1 { object := buffer[start : i+1] var data map[string]any if err := json.Unmarshal(object, &data); err != nil { + // not a valid object, keep looking start = -1 continue } @@ -282,6 +305,10 @@ func findArguments(buffer []byte) (map[string]any, int) { return data, i } + + if braces < 0 { + braces = 0 + } } } diff --git a/tools/tools_test.go b/tools/tools_test.go index 7f00be205..36b552c96 100644 --- a/tools/tools_test.go +++ b/tools/tools_test.go @@ -1,6 +1,7 @@ package tools import ( + "strings" "testing" "text/template" @@ -1140,11 +1141,163 @@ func TestFindArguments(t *testing.T) { }, { name: "deepseek", - buffer: []byte(`", "arguments": {"location": "Tokyo"}}`), + buffer: []byte(`"arguments": {"location": "Tokyo"}}`), want: map[string]any{ "location": "Tokyo", }, }, + { + name: "string with braces", + buffer: []byte(`{"name": "process_code", "arguments": {"code": "if (x > 0) { return true; }"}}`), + want: map[string]any{ + "code": "if (x > 0) { return true; }", + }, + }, + { + name: "string with nested json", + buffer: []byte(`{"name": "send_data", "arguments": {"payload": "{\"nested\": {\"key\": \"value\"}}"}}`), + want: map[string]any{ + "payload": `{"nested": {"key": "value"}}`, + }, + }, + { + name: "string with escaped quotes and braces", + buffer: []byte(`{"name": "analyze", "arguments": {"text": "The JSON is: {\"key\": \"val{ue}\"}"}}`), + want: map[string]any{ + "text": `The JSON is: {"key": "val{ue}"}`, + }, + }, + { + name: "multiple objects with string containing braces", + buffer: []byte(`{"name": "test", "arguments": {"query": "find } in text"}} {"name": "other"}`), + want: map[string]any{ + "query": "find } in text", + }, + }, + { + name: "unmatched closing brace in string", + buffer: []byte(`{"name": "search", "arguments": {"pattern": "regex: }"}}`), + want: map[string]any{ + "pattern": "regex: }", + }, + }, + { + name: "complex nested with mixed braces", + buffer: []byte(`{"name": "analyze", "arguments": {"data": "{\"items\": [{\"value\": \"}\"}, {\"code\": \"if (x) { return y; }\"}]}"}}`), + want: map[string]any{ + "data": `{"items": [{"value": "}"}, {"code": "if (x) { return y; }"}]}`, + }, + }, + { + name: "string with newline and braces", + buffer: []byte(`{"name": "format", "arguments": {"template": "{\n \"key\": \"value\"\n}"}}`), + want: map[string]any{ + "template": "{\n \"key\": \"value\"\n}", + }, + }, + { + name: "string with unicode escape", + buffer: []byte(`{"name": "test", "arguments": {"text": "Unicode: \u007B and \u007D"}}`), + want: map[string]any{ + "text": "Unicode: { and }", + }, + }, + { + name: "array arguments", + buffer: []byte(`{"name": "batch", "arguments": ["item1", "item2", "{\"nested\": true}"]}`), + want: nil, // This should return nil because arguments is not a map + }, + { + name: "escaped backslash before quote", + buffer: []byte(`{"name": "path", "arguments": {"dir": "C:\\Program Files\\{App}\\"}}`), + want: map[string]any{ + "dir": `C:\Program Files\{App}\`, + }, + }, + { + name: "single quotes not treated as string delimiters", + buffer: []byte(`{"name": "query", "arguments": {"sql": "SELECT * FROM users WHERE name = '{admin}'"}}`), + want: map[string]any{ + "sql": "SELECT * FROM users WHERE name = '{admin}'", + }, + }, + { + name: "incomplete json at buffer end", + buffer: []byte(`{"name": "test", "arguments": {"data": "some {"`), + want: nil, + }, + { + name: "multiple escaped quotes", + buffer: []byte(`{"name": "echo", "arguments": {"msg": "He said \"Hello {World}\" loudly"}}`), + want: map[string]any{ + "msg": `He said "Hello {World}" loudly`, + }, + }, + { + name: "json with comments style string", + buffer: []byte(`{"name": "code", "arguments": {"snippet": "// This is a comment with { and }"}}`), + want: map[string]any{ + "snippet": "// This is a comment with { and }", + }, + }, + { + name: "consecutive escaped backslashes", + buffer: []byte(`{"name": "test", "arguments": {"path": "C:\\\\{folder}\\\\"}}`), + want: map[string]any{ + "path": `C:\\{folder}\\`, + }, + }, + { + name: "empty string with braces after", + buffer: []byte(`{"name": "test", "arguments": {"a": "", "b": "{value}"}}`), + want: map[string]any{ + "a": "", + "b": "{value}", + }, + }, + { + name: "unicode in key names", + buffer: []byte(`{"name": "test", "arguments": {"key{": "value", "key}": "value2"}}`), + want: map[string]any{ + "key{": "value", + "key}": "value2", + }, + }, + { + name: "very long string with braces", + buffer: []byte(`{"name": "test", "arguments": {"data": "` + strings.Repeat("a{b}c", 100) + `"}}`), + want: map[string]any{ + "data": strings.Repeat("a{b}c", 100), + }, + }, + { + name: "tab characters and braces", + buffer: []byte(`{"name": "test", "arguments": {"code": "\tif (true) {\n\t\treturn;\n\t}"}}`), + want: map[string]any{ + "code": "\tif (true) {\n\t\treturn;\n\t}", + }, + }, + { + name: "null byte in string", + buffer: []byte(`{"name": "test", "arguments": {"data": "before\u0000{after}"}}`), + want: map[string]any{ + "data": "before\x00{after}", + }, + }, + { + name: "escaped quote at end of string", + buffer: []byte(`{"name": "test", "arguments": {"data": "text with quote at end\\\""}}`), + want: map[string]any{ + "data": `text with quote at end\"`, + }, + }, + { + name: "mixed array and object in arguments", + buffer: []byte(`{"name": "test", "arguments": {"items": ["{", "}", {"key": "value"}]}}`), + want: map[string]any{ + "items": []any{"{", "}", map[string]any{"key": "value"}}, + }, + }, } for _, tt := range tests { From d3450dd52efcbca0348e9e8ac42fad6263ec9f91 Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Fri, 22 Aug 2025 16:26:48 -0700 Subject: [PATCH 29/45] api: implement stringer for ToolFunctionParameters (#12038) --- api/types.go | 25 +++++++++++++++--------- api/types_test.go | 47 +++++++++++++++++++++++++++++++++++++++++++++ tools/tools_test.go | 32 ++++-------------------------- 3 files changed, 67 insertions(+), 37 deletions(-) diff --git a/api/types.go b/api/types.go index a3abc5568..85bdd3167 100644 --- a/api/types.go +++ b/api/types.go @@ -286,16 +286,23 @@ func mapToTypeScriptType(jsonType string) string { } } +type ToolFunctionParameters struct { + Type string `json:"type"` + Defs any `json:"$defs,omitempty"` + Items any `json:"items,omitempty"` + Required []string `json:"required"` + Properties map[string]ToolProperty `json:"properties"` +} + +func (t *ToolFunctionParameters) String() string { + bts, _ := json.Marshal(t) + return string(bts) +} + type ToolFunction struct { - Name string `json:"name"` - Description string `json:"description"` - Parameters struct { - Type string `json:"type"` - Defs any `json:"$defs,omitempty"` - Items any `json:"items,omitempty"` - Required []string `json:"required"` - Properties map[string]ToolProperty `json:"properties"` - } `json:"parameters"` + Name string `json:"name"` + Description string `json:"description"` + Parameters ToolFunctionParameters `json:"parameters"` } func (t *ToolFunction) String() string { diff --git a/api/types_test.go b/api/types_test.go index 841853808..fadaa646d 100644 --- a/api/types_test.go +++ b/api/types_test.go @@ -436,3 +436,50 @@ func TestThinking_UnmarshalJSON(t *testing.T) { }) } } + +func TestToolFunctionParameters_String(t *testing.T) { + tests := []struct { + name string + params ToolFunctionParameters + expected string + }{ + { + name: "simple object with string property", + params: ToolFunctionParameters{ + Type: "object", + Required: []string{"name"}, + Properties: map[string]ToolProperty{ + "name": { + Type: PropertyType{"string"}, + Description: "The name of the person", + }, + }, + }, + expected: `{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The name of the person"}}}`, + }, + { + name: "marshal failure returns empty string", + params: ToolFunctionParameters{ + Type: "object", + Defs: func() any { + // Create a cycle that will cause json.Marshal to fail + type selfRef struct { + Self *selfRef + } + s := &selfRef{} + s.Self = s + return s + }(), + Properties: map[string]ToolProperty{}, + }, + expected: "", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + result := test.params.String() + assert.Equal(t, test.expected, result) + }) + } +} diff --git a/tools/tools_test.go b/tools/tools_test.go index 36b552c96..2a449a0ea 100644 --- a/tools/tools_test.go +++ b/tools/tools_test.go @@ -41,13 +41,7 @@ func TestParser(t *testing.T) { Function: api.ToolFunction{ Name: "get_temperature", Description: "Retrieve the temperature for a given location", - Parameters: struct { - Type string `json:"type"` - Defs any `json:"$defs,omitempty"` - Items any `json:"items,omitempty"` - Required []string `json:"required"` - Properties map[string]api.ToolProperty `json:"properties"` - }{ + Parameters: api.ToolFunctionParameters{ Type: "object", Required: []string{"city"}, Properties: map[string]api.ToolProperty{ @@ -69,13 +63,7 @@ func TestParser(t *testing.T) { Function: api.ToolFunction{ Name: "get_conditions", Description: "Retrieve the current weather conditions for a given location", - Parameters: struct { - Type string `json:"type"` - Defs any `json:"$defs,omitempty"` - Items any `json:"items,omitempty"` - Required []string `json:"required"` - Properties map[string]api.ToolProperty `json:"properties"` - }{ + Parameters: api.ToolFunctionParameters{ Type: "object", Properties: map[string]api.ToolProperty{ "location": { @@ -105,13 +93,7 @@ func TestParser(t *testing.T) { Function: api.ToolFunction{ Name: "get_address", Description: "Get the address of a given location", - Parameters: struct { - Type string `json:"type"` - Defs any `json:"$defs,omitempty"` - Items any `json:"items,omitempty"` - Required []string `json:"required"` - Properties map[string]api.ToolProperty `json:"properties"` - }{ + Parameters: api.ToolFunctionParameters{ Type: "object", Properties: map[string]api.ToolProperty{ "location": { @@ -127,13 +109,7 @@ func TestParser(t *testing.T) { Function: api.ToolFunction{ Name: "add", Description: "Add two numbers", - Parameters: struct { - Type string `json:"type"` - Defs any `json:"$defs,omitempty"` - Items any `json:"items,omitempty"` - Required []string `json:"required"` - Properties map[string]api.ToolProperty `json:"properties"` - }{ + Parameters: api.ToolFunctionParameters{ Type: "object", Properties: map[string]api.ToolProperty{ "a": { From 30fb7e19f806c1b0f0fce19d088dbb126b36acaa Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Mon, 25 Aug 2025 09:58:16 -0700 Subject: [PATCH 30/45] remove extra field attr (#11205) --- model/models/gemma3/model.go | 2 +- model/models/llama4/model.go | 2 +- model/models/mistral3/model.go | 2 +- model/models/mllama/model.go | 2 +- model/models/qwen25vl/model.go | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/model/models/gemma3/model.go b/model/models/gemma3/model.go index 53bf82758..a216a5836 100644 --- a/model/models/gemma3/model.go +++ b/model/models/gemma3/model.go @@ -18,7 +18,7 @@ type Model struct { model.Base model.SentencePieceModel - *VisionModel `gguf:"v,vision"` + *VisionModel `gguf:"v"` *TextModel *MultiModalProjector `gguf:"mm"` diff --git a/model/models/llama4/model.go b/model/models/llama4/model.go index 8084760b0..e84f5e201 100644 --- a/model/models/llama4/model.go +++ b/model/models/llama4/model.go @@ -18,7 +18,7 @@ type Model struct { model.BytePairEncoding ImageProcessor - *VisionModel `gguf:"v,vision"` + *VisionModel `gguf:"v"` *Projector `gguf:"mm"` *TextModel } diff --git a/model/models/mistral3/model.go b/model/models/mistral3/model.go index 9d662fc11..4ed3d731d 100644 --- a/model/models/mistral3/model.go +++ b/model/models/mistral3/model.go @@ -18,7 +18,7 @@ type Model struct { model.BytePairEncoding *TextModel - *VisionModel `gguf:"v,vision"` + *VisionModel `gguf:"v"` *MultiModalProjector `gguf:"mm"` ImageProcessor diff --git a/model/models/mllama/model.go b/model/models/mllama/model.go index 45cb3e02c..be7e5daf1 100644 --- a/model/models/mllama/model.go +++ b/model/models/mllama/model.go @@ -17,7 +17,7 @@ type Model struct { model.Base model.BytePairEncoding - *VisionModel `gguf:"v,vision"` + *VisionModel `gguf:"v"` *TextModel Projector *nn.Linear `gguf:"mm.0"` diff --git a/model/models/qwen25vl/model.go b/model/models/qwen25vl/model.go index ee38cad92..924f3b643 100644 --- a/model/models/qwen25vl/model.go +++ b/model/models/qwen25vl/model.go @@ -18,7 +18,7 @@ type Model struct { model.BytePairEncoding *TextModel - *VisionModel `gguf:"v,vision"` + *VisionModel `gguf:"v"` ImageProcessor } From 85ccf7354dd8b32862e1a27398780094504c7fd8 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Tue, 26 Aug 2025 13:34:45 -0700 Subject: [PATCH 31/45] gptoss: enable flash attention by default (#11996) --- fs/ggml/ggml.go | 15 ++++++++++++++- llm/memory.go | 10 ++++++---- llm/server.go | 5 +++++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/fs/ggml/ggml.go b/fs/ggml/ggml.go index a739e99ba..dca0187b0 100644 --- a/fs/ggml/ggml.go +++ b/fs/ggml/ggml.go @@ -10,6 +10,7 @@ import ( "slices" "strings" + "github.com/ollama/ollama/format" "github.com/ollama/ollama/fs/util/bufioutil" ) @@ -479,7 +480,7 @@ func Decode(rs io.ReadSeeker, maxArraySize int) (*GGML, error) { }, nil } -func (f GGML) GraphSize(context, batch uint64, numParallel int, kvCacheType string) (kv []uint64, partialOffload, fullOffload uint64) { +func (f GGML) GraphSize(context, batch uint64, numParallel int, kvCacheType string, useFlashAttention bool) (kv []uint64, partialOffload, fullOffload uint64) { context *= uint64(numParallel) embedding := f.KV().EmbeddingLength() @@ -677,7 +678,12 @@ func (f GGML) GraphSize(context, batch uint64, numParallel int, kvCacheType stri kv[i] *= context } } + partialOffload = 2 * f.KV().HeadCountMax() / cmp.Or(f.KV().HeadCountKVMin(), 1) * kvTotal / 6 + if useFlashAttention { + // rough estimate of graph size with flash attention on + partialOffload = (4*uint64(numParallel) + context>>10 + 110) * format.MebiByte + } } return @@ -773,6 +779,13 @@ func (f GGML) SupportsFlashAttention() bool { return headCountK != 0 && headCountV != 0 && headCountK == headCountV } +// FlashAttention checks if the model should enable flash attention +func (f GGML) FlashAttention() bool { + return slices.Contains([]string{ + "gptoss", "gpt-oss", + }, f.KV().String("general.architecture")) +} + // kvCacheBytesPerElement returns the number of bytes per element for a given KV cache type func kvCacheBytesPerElement(cacheType string) float64 { switch cacheType { diff --git a/llm/memory.go b/llm/memory.go index d8ae5e44a..ce128eb58 100644 --- a/llm/memory.go +++ b/llm/memory.go @@ -195,17 +195,19 @@ func estimateGPULayers(gpus []discover.GpuInfo, f *ggml.GGML, projectors []strin slog.Warn("model missing blk.0 layer size") } - var kvct string - if envconfig.FlashAttention() && + useFlashAttention := (envconfig.FlashAttention() || f.FlashAttention()) && discover.GetGPUInfo().FlashAttentionSupported() && - f.SupportsFlashAttention() { + f.SupportsFlashAttention() + + var kvct string + if useFlashAttention { requested := strings.ToLower(envconfig.KvCacheType()) if requested != "" && f.SupportsKVCacheType(requested) { kvct = requested } } - kv, graphPartialOffload, graphFullOffload := f.GraphSize(uint64(opts.NumCtx), uint64(min(opts.NumCtx, opts.NumBatch)), numParallel, kvct) + kv, graphPartialOffload, graphFullOffload := f.GraphSize(uint64(opts.NumCtx), uint64(min(opts.NumCtx, opts.NumBatch)), numParallel, kvct, useFlashAttention) if len(kv) > 0 { layerSize += kv[0] diff --git a/llm/server.go b/llm/server.go index b05e9b82d..30cf5c360 100644 --- a/llm/server.go +++ b/llm/server.go @@ -195,6 +195,11 @@ func NewLlamaServer(gpus discover.GpuInfoList, modelPath string, f *ggml.GGML, a // This will disable flash attention unless all GPUs on the system support it, even if we end up selecting a subset // that can handle it. fa := envconfig.FlashAttention() + if f.FlashAttention() { + slog.Info("model wants flash attention") + fa = true + } + if fa && !gpus.FlashAttentionSupported() { slog.Warn("flash attention enabled but not supported by gpu") fa = false From 86834a279781d04d701babd3f14f36be9cc961e5 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Tue, 26 Aug 2025 13:57:46 -0700 Subject: [PATCH 32/45] convert: fix tensor sorting (#12015) there's two bugs here. 1. the check for a layer id is incorrect and should be >= 0 since layer 0 is valid 2. if both tensors have an layer identifier, it will only compare the layer id which will return 0 if the tensors are in the same layer. instead it should fallback to comparing the full tensor name --- fs/ggml/ggml.go | 3 ++- fs/ggml/gguf.go | 15 +++++++++------ fs/ggml/gguf_test.go | 36 ++++++++++++++++++------------------ 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/fs/ggml/ggml.go b/fs/ggml/ggml.go index dca0187b0..feba55edd 100644 --- a/fs/ggml/ggml.go +++ b/fs/ggml/ggml.go @@ -7,6 +7,7 @@ import ( "fmt" "io" "log/slog" + "math" "slices" "strings" @@ -276,7 +277,7 @@ type Tensor struct { func (t Tensor) block() (n int) { if _, err := fmt.Sscanf(t.Name, "blk.%d.", &n); err != nil { - return -1 + return math.MaxInt } return diff --git a/fs/ggml/gguf.go b/fs/ggml/gguf.go index 413eab5ed..fa613ca4b 100644 --- a/fs/ggml/gguf.go +++ b/fs/ggml/gguf.go @@ -533,12 +533,15 @@ func WriteGGUF(f *os.File, kv KV, ts []*Tensor) error { } } - slices.SortStableFunc(ts, func(a, b *Tensor) int { - if i, j := a.block(), b.block(); i > 0 && j > 0 { - return cmp.Compare(i, j) - } - return cmp.Compare(a.Name, b.Name) - }) + slices.SortStableFunc( + ts, + func(a, b *Tensor) int { + return cmp.Or( + cmp.Compare(a.block(), b.block()), + cmp.Compare(a.Name, b.Name), + ) + }, + ) var s uint64 for i := range ts { diff --git a/fs/ggml/gguf_test.go b/fs/ggml/gguf_test.go index bf7679182..e56bab8d2 100644 --- a/fs/ggml/gguf_test.go +++ b/fs/ggml/gguf_test.go @@ -11,24 +11,24 @@ import ( ) func TestWriteGGUF(t *testing.T) { - r := rand.New(rand.NewPCG(0, 0)) + b := bytes.NewBuffer(make([]byte, 2*3)) for range 8 { t.Run("shuffle", func(t *testing.T) { t.Parallel() ts := []*Tensor{ - {Name: "token_embd.weight", Shape: []uint64{2, 3}, WriterTo: bytes.NewBuffer(make([]byte, 2*3))}, - {Name: "blk.0.attn_norm.weight", Shape: []uint64{2, 3}, WriterTo: bytes.NewBuffer(make([]byte, 2*3))}, - {Name: "blk.1.attn_norm.weight", Shape: []uint64{2, 3}, WriterTo: bytes.NewBuffer(make([]byte, 2*3))}, - {Name: "blk.2.attn_norm.weight", Shape: []uint64{2, 3}, WriterTo: bytes.NewBuffer(make([]byte, 2*3))}, - {Name: "blk.3.attn_norm.weight", Shape: []uint64{2, 3}, WriterTo: bytes.NewBuffer(make([]byte, 2*3))}, - {Name: "blk.4.attn_norm.weight", Shape: []uint64{2, 3}, WriterTo: bytes.NewBuffer(make([]byte, 2*3))}, - {Name: "blk.5.attn_norm.weight", Shape: []uint64{2, 3}, WriterTo: bytes.NewBuffer(make([]byte, 2*3))}, - {Name: "output_norm.weight", Shape: []uint64{3, 2}, WriterTo: bytes.NewBuffer(make([]byte, 3*2))}, - {Name: "output.weight", Shape: []uint64{3, 2}, WriterTo: bytes.NewBuffer(make([]byte, 3*2))}, + {Name: "token_embd.weight", Shape: []uint64{2, 3}, WriterTo: b}, + {Name: "blk.0.ffn_norm.weight", Shape: []uint64{2, 3}, WriterTo: b}, + {Name: "blk.0.attn_norm.weight", Shape: []uint64{2, 3}, WriterTo: b}, + {Name: "blk.1.ffn_up.weight", Shape: []uint64{2, 3}, WriterTo: b}, + {Name: "blk.2.ffn_norm.weight", Shape: []uint64{2, 3}, WriterTo: b}, + {Name: "blk.1.ffn_down.weight", Shape: []uint64{2, 3}, WriterTo: b}, + {Name: "blk.0.attn_k.weight", Shape: []uint64{2, 3}, WriterTo: b}, + {Name: "output_norm.weight", Shape: []uint64{3, 2}, WriterTo: b}, + {Name: "output.weight", Shape: []uint64{3, 2}, WriterTo: b}, } - r.Shuffle(len(ts), func(i, j int) { + rand.Shuffle(len(ts), func(i, j int) { ts[i], ts[j] = ts[j], ts[i] }) @@ -63,14 +63,14 @@ func TestWriteGGUF(t *testing.T) { } if diff := cmp.Diff(Tensors{ - Offset: 608, + Offset: 592, items: []*Tensor{ - {Name: "blk.0.attn_norm.weight", Offset: 0, Shape: []uint64{2, 3}}, - {Name: "blk.1.attn_norm.weight", Offset: 32, Shape: []uint64{2, 3}}, - {Name: "blk.2.attn_norm.weight", Offset: 64, Shape: []uint64{2, 3}}, - {Name: "blk.3.attn_norm.weight", Offset: 96, Shape: []uint64{2, 3}}, - {Name: "blk.4.attn_norm.weight", Offset: 128, Shape: []uint64{2, 3}}, - {Name: "blk.5.attn_norm.weight", Offset: 160, Shape: []uint64{2, 3}}, + {Name: "blk.0.attn_k.weight", Offset: 0, Shape: []uint64{2, 3}}, + {Name: "blk.0.attn_norm.weight", Offset: 32, Shape: []uint64{2, 3}}, + {Name: "blk.0.ffn_norm.weight", Offset: 64, Shape: []uint64{2, 3}}, + {Name: "blk.1.ffn_down.weight", Offset: 96, Shape: []uint64{2, 3}}, + {Name: "blk.1.ffn_up.weight", Offset: 128, Shape: []uint64{2, 3}}, + {Name: "blk.2.ffn_norm.weight", Offset: 160, Shape: []uint64{2, 3}}, {Name: "output.weight", Offset: 192, Shape: []uint64{3, 2}}, {Name: "output_norm.weight", Offset: 224, Shape: []uint64{3, 2}}, {Name: "token_embd.weight", Offset: 256, Shape: []uint64{2, 3}}, From 59412fbb436f85f62b41231c1df91d1ebe286431 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Tue, 26 Aug 2025 16:41:02 -0700 Subject: [PATCH 33/45] convert(gptoss): mxfp4 to ggml layout to avoid jit conversion (#12018) * convert: return bytes written * ggml flavor mxfp4 * simplify jit conversion * comment --- convert/convert_gptoss.go | 17 +++++++++++++++-- convert/reader.go | 2 +- convert/reader_safetensors.go | 6 +++--- fs/ggml/ggml.go | 36 +++++++++++++++++------------------ fs/ggml/type.go | 11 ++++++----- ml/backend/ggml/ggml.go | 35 ++++++---------------------------- 6 files changed, 49 insertions(+), 58 deletions(-) diff --git a/convert/convert_gptoss.go b/convert/convert_gptoss.go index c5a691d3d..2048b18be 100644 --- a/convert/convert_gptoss.go +++ b/convert/convert_gptoss.go @@ -172,7 +172,20 @@ func (m *mxfp4) WriteTo(w io.Writer) (int64, error) { blocksDims[i] = int(d) } - var blocks tensor.Tensor = tensor.New(tensor.WithShape(blocksDims...), tensor.WithBacking(b.Bytes())) + bts := b.Bytes() + var tmp [16]byte + for i := 0; i < b.Len(); i += 16 { + for j := range 8 { + // transform a1b2c3 ... x7y8z9 -> 71xa82yb93zc + a, b := bts[i+j], bts[i+j+8] + tmp[2*j+0] = (a & 0x0F) | (b << 4) + tmp[2*j+1] = (a >> 4) | (b & 0xF0) + } + + copy(bts[i:i+16], tmp[:]) + } + + var blocks tensor.Tensor = tensor.New(tensor.WithShape(blocksDims...), tensor.WithBacking(bts)) var s bytes.Buffer if _, err := m.scales.WriteTo(&s); err != nil { @@ -206,5 +219,5 @@ func (m *mxfp4) WriteTo(w io.Writer) (int64, error) { return 0, err } - return 0, nil + return int64(len(u8s)), nil } diff --git a/convert/reader.go b/convert/reader.go index 907d2a9ef..b3f7a8660 100644 --- a/convert/reader.go +++ b/convert/reader.go @@ -33,8 +33,8 @@ func (t tensorBase) Shape() []uint64 { const ( tensorKindFP32 uint32 = iota tensorKindFP16 - tensorKindMXFP4 = 4 tensorKindBF16 = 30 + tensorKindMXFP4 = 39 ) func (t tensorBase) Kind() uint32 { diff --git a/convert/reader_safetensors.go b/convert/reader_safetensors.go index ccc596732..7f029f933 100644 --- a/convert/reader_safetensors.go +++ b/convert/reader_safetensors.go @@ -188,17 +188,17 @@ func (st safetensor) WriteTo(w io.Writer) (int64, error) { switch st.Kind() { case tensorKindFP32: - return 0, binary.Write(w, binary.LittleEndian, f32s) + return int64(len(f32s) * 4), binary.Write(w, binary.LittleEndian, f32s) case tensorKindFP16: f16s := make([]uint16, len(f32s)) for i := range f32s { f16s[i] = float16.Fromfloat32(f32s[i]).Bits() } - return 0, binary.Write(w, binary.LittleEndian, f16s) + return int64(len(f16s) * 2), binary.Write(w, binary.LittleEndian, f16s) case tensorKindBF16: u8s := bfloat16.EncodeFloat32(f32s) - return 0, binary.Write(w, binary.LittleEndian, u8s) + return int64(len(u8s)), binary.Write(w, binary.LittleEndian, u8s) default: return 0, fmt.Errorf("unknown storage type: %d", st.Kind()) } diff --git a/fs/ggml/ggml.go b/fs/ggml/ggml.go index feba55edd..3f4374cd0 100644 --- a/fs/ggml/ggml.go +++ b/fs/ggml/ggml.go @@ -290,24 +290,24 @@ func (t Tensor) blockSize() uint64 { func (t TensorType) BlockSize() uint64 { switch t { case - 0, // F32 - 1, // F16 - 24, // I8 - 25, // I16 - 26, // I32 - 27, // I64 - 28, // F64 - 30: // BF16 + TensorTypeF32, + TensorTypeF16, + TensorTypeI8, + TensorTypeI16, + TensorTypeI32, + TensorTypeI64, + TensorTypeF64, + TensorTypeBF16: return 1 case - 2, // Q4_0 - 3, // Q4_1 - 4, // MXFP4 - 6, // Q5_0 - 7, // Q5_1 - 8, // Q8_0 - 9, // Q8_1 - 20: // IQ4_NL + TensorTypeQ4_0, + TensorTypeQ4_1, + TensorTypeQ5_0, + TensorTypeQ5_1, + TensorTypeQ8_0, + TensorTypeQ8_1, + tensorTypeIQ4_NL, + 4, TensorTypeMXFP4: return 32 default: return 256 @@ -330,8 +330,6 @@ func (t TensorType) TypeSize() uint64 { return 2 + blockSize/2 case TensorTypeQ4_1: return 2 + 2 + blockSize/2 - case TensorTypeMXFP4, 39: - return 1 + blockSize/2 case TensorTypeQ5_0: return 2 + 4 + blockSize/2 case TensorTypeQ5_1: @@ -382,6 +380,8 @@ func (t TensorType) TypeSize() uint64 { return blockSize/8 + blockSize/16 + blockSize/32 case TensorTypeBF16: return 2 + case 4, TensorTypeMXFP4: + return 1 + blockSize/2 default: return 0 } diff --git a/fs/ggml/type.go b/fs/ggml/type.go index 3e5deb87b..1a31a5fd8 100644 --- a/fs/ggml/type.go +++ b/fs/ggml/type.go @@ -146,8 +146,6 @@ func (ftype FileType) ToTensorType() TensorType { return TensorTypeQ4_0 case fileTypeQ4_1: return TensorTypeQ4_1 - case fileTypeMXFP4: - return TensorTypeMXFP4 // Formerly unused tensorTypeQ4_2 case FileTypeQ8_0: return TensorTypeQ8_0 case fileTypeQ5_0: @@ -176,6 +174,8 @@ func (ftype FileType) ToTensorType() TensorType { return TensorTypeQ2_K case FileTypeBF16: return TensorTypeBF16 + case fileTypeMXFP4: + return TensorTypeMXFP4 default: slog.Warn("unsupported file type", "type", ftype) return 0 // F32 @@ -191,8 +191,8 @@ const ( TensorTypeF16 TensorTypeQ4_0 TensorTypeQ4_1 - TensorTypeMXFP4 // Formerly unused tensorTypeQ4_2 - tensorTypeQ4_3 // unused by GGML + tensorTypeQ4_2 + tensorTypeQ4_3 // unused by GGML TensorTypeQ5_0 TensorTypeQ5_1 TensorTypeQ8_0 @@ -226,6 +226,7 @@ const ( tensorTypeIQ4_NL_4_4 // unused by GGML tensorTypeIQ4_NL_4_8 // unused by GGML tensorTypeIQ4_NL_8_8 // unused by GGML + TensorTypeMXFP4 ) // ParseFileType parses the provided GGUF file type @@ -318,7 +319,7 @@ func (t TensorType) String() string { return "F64" case TensorTypeBF16: return "BF16" - case TensorTypeMXFP4: + case 4, TensorTypeMXFP4: return "MXFP4" default: return "unknown" diff --git a/ml/backend/ggml/ggml.go b/ml/backend/ggml/ggml.go index 13d898aad..e8403e06c 100644 --- a/ml/backend/ggml/ggml.go +++ b/ml/backend/ggml/ggml.go @@ -535,6 +535,7 @@ func (b *Backend) Load(ctx context.Context, progress func(float32)) error { const BS = 17 // MXFP4 block size bts := make([]byte, 8*BS*format.KibiByte) // ~128k block aligned var s uint64 + var tmp [16]byte for s < t.Size() { // Stop if either the parent context has been canceled or if any of the other tensors returned an error if err := ctx.Err(); err != nil { @@ -546,37 +547,13 @@ func (b *Backend) Load(ctx context.Context, progress func(float32)) error { return err } for j := range n / BS { - for i := 1; i < BS; i++ { - // swap nibbles - t_lo := bts[j*BS+i] & 0x0F - t_hi := bts[j*BS+i] & 0xF0 - bts[j*BS+i] = (t_lo << 4) | (t_hi >> 4) - } - // transform aaaa...bbbb... to abababab... - oi := 0 - tmp := [16]byte{} for i := 1; i < 9; i++ { - blk_a0 := bts[j*BS+i] & 0xF0 - blk_a1 := bts[j*BS+i] << 4 - blk_b0 := bts[j*BS+i+8] >> 4 - blk_b1 := bts[j*BS+i+8] & 0x0F - // swap once more - out0 := blk_a0 | blk_b0 - out1 := blk_a1 | blk_b1 - out_h0 := out0 & 0xF0 - out_l0 := out0 & 0x0F - out_h1 := out1 & 0xF0 - out_l1 := out1 & 0x0F - out0 = (out_h0 >> 4) | (out_l0 << 4) - out1 = (out_h1 >> 4) | (out_l1 << 4) - tmp[oi] = out0 - oi++ - tmp[oi] = out1 - oi++ - } - for i := range tmp { - bts[j*BS+i+1] = tmp[i] + // transform a1b2c3 ... x7y8z9 -> 71xa82yb93zc + a, b := bts[j*BS+i], bts[j*BS+i+8] + tmp[2*(i-1)] = (a & 0x0F) | (b << 4) + tmp[2*(i-1)+1] = (a >> 4) | (b & 0xF0) } + copy(bts[j*BS+1:j*BS+17], tmp[:]) } for _, tt := range tts { From 1081532430c68c95e84024af1b4830d48029f02b Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Wed, 27 Aug 2025 11:51:25 -0700 Subject: [PATCH 34/45] fix keep alive (#12041) --- api/types.go | 2 +- api/types_test.go | 7 ++++++- server/routes.go | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/api/types.go b/api/types.go index 85bdd3167..d3f6fc5a4 100644 --- a/api/types.go +++ b/api/types.go @@ -888,7 +888,7 @@ func (d *Duration) UnmarshalJSON(b []byte) (err error) { if t < 0 { d.Duration = time.Duration(math.MaxInt64) } else { - d.Duration = time.Duration(int(t) * int(time.Second)) + d.Duration = time.Duration(t * float64(time.Second)) } case string: d.Duration, err = time.ParseDuration(t) diff --git a/api/types_test.go b/api/types_test.go index fadaa646d..5393b4623 100644 --- a/api/types_test.go +++ b/api/types_test.go @@ -17,6 +17,11 @@ func TestKeepAliveParsingFromJSON(t *testing.T) { req string exp *Duration }{ + { + name: "Unset", + req: `{ }`, + exp: nil, + }, { name: "Positive Integer", req: `{ "keep_alive": 42 }`, @@ -25,7 +30,7 @@ func TestKeepAliveParsingFromJSON(t *testing.T) { { name: "Positive Float", req: `{ "keep_alive": 42.5 }`, - exp: &Duration{42 * time.Second}, + exp: &Duration{42500 * time.Millisecond}, }, { name: "Positive Integer String", diff --git a/server/routes.go b/server/routes.go index ae1662148..e6e4e2c47 100644 --- a/server/routes.go +++ b/server/routes.go @@ -189,7 +189,7 @@ func (s *Server) GenerateHandler(c *gin.Context) { } // expire the runner - if req.Prompt == "" && req.KeepAlive != nil && int(req.KeepAlive.Seconds()) == 0 { + if req.Prompt == "" && req.KeepAlive != nil && req.KeepAlive.Duration == 0 { s.sched.expireRunner(m) c.JSON(http.StatusOK, api.GenerateResponse{ @@ -1544,7 +1544,7 @@ func (s *Server) ChatHandler(c *gin.Context) { } // expire the runner - if len(req.Messages) == 0 && req.KeepAlive != nil && int(req.KeepAlive.Seconds()) == 0 { + if len(req.Messages) == 0 && req.KeepAlive != nil && req.KeepAlive.Duration == 0 { model, err := GetModel(req.Model) if err != nil { switch { From 9d97e6a9f1968a9ad85757aeccb2062f7249a3e9 Mon Sep 17 00:00:00 2001 From: Jesse Gross Date: Tue, 26 Aug 2025 14:17:43 -0700 Subject: [PATCH 35/45] ggml: Avoid allocating CUDA primary context on unused GPUs The recent memory management changes caused all GPUs to be visible to the runner, regardless of whether they are ultimately used. This caused CUDA devices to allocate a primary context (~300 MB VRAM) on each GPU, for each model. This is unnecessary, so we can both avoid touching GPUs that we exclude in the early stage of allocation and freeing the memory for any that we touch but don't use. The issue will continue to exist for the old engine, since it touches all devices during initialization. --- ...gml-Enable-resetting-backend-devices.patch | 130 ++++++++++++++++++ ml/backend/ggml/ggml.go | 12 ++ ml/backend/ggml/ggml/include/ggml-backend.h | 1 + ml/backend/ggml/ggml/src/ggml-backend-impl.h | 4 + ml/backend/ggml/ggml/src/ggml-backend.cpp | 8 ++ .../ggml/ggml/src/ggml-cuda/ggml-cuda.cu | 17 ++- .../ggml/ggml/src/ggml-cuda/vendors/hip.h | 1 + 7 files changed, 171 insertions(+), 2 deletions(-) create mode 100644 llama/patches/0024-ggml-Enable-resetting-backend-devices.patch diff --git a/llama/patches/0024-ggml-Enable-resetting-backend-devices.patch b/llama/patches/0024-ggml-Enable-resetting-backend-devices.patch new file mode 100644 index 000000000..84aefd1df --- /dev/null +++ b/llama/patches/0024-ggml-Enable-resetting-backend-devices.patch @@ -0,0 +1,130 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jesse Gross +Date: Wed, 27 Aug 2025 14:39:48 -0700 +Subject: [PATCH] ggml: Enable resetting backend devices + +Touching a CUDA device causes the allocation of a primary context +with CUDA data structures (~300 MB of VRAM). If a device is +unused then it can be reset to free these data structures. +--- + ggml/include/ggml-backend.h | 1 + + ggml/src/ggml-backend-impl.h | 4 ++++ + ggml/src/ggml-backend.cpp | 8 ++++++++ + ggml/src/ggml-cuda/ggml-cuda.cu | 17 +++++++++++++++-- + ggml/src/ggml-cuda/vendors/hip.h | 1 + + 5 files changed, 29 insertions(+), 2 deletions(-) + +diff --git a/ggml/include/ggml-backend.h b/ggml/include/ggml-backend.h +index b602a7c78..fda5ceb24 100644 +--- a/ggml/include/ggml-backend.h ++++ b/ggml/include/ggml-backend.h +@@ -167,6 +167,7 @@ extern "C" { + GGML_API void ggml_backend_dev_get_props(ggml_backend_dev_t device, struct ggml_backend_dev_props * props); + GGML_API ggml_backend_reg_t ggml_backend_dev_backend_reg(ggml_backend_dev_t device); + GGML_API ggml_backend_t ggml_backend_dev_init(ggml_backend_dev_t device, const char * params); ++ GGML_API void ggml_backend_dev_reset(ggml_backend_dev_t device); + GGML_API ggml_backend_buffer_type_t ggml_backend_dev_buffer_type(ggml_backend_dev_t device); + GGML_API ggml_backend_buffer_type_t ggml_backend_dev_host_buffer_type(ggml_backend_dev_t device); + GGML_API ggml_backend_buffer_t ggml_backend_dev_buffer_from_host_ptr(ggml_backend_dev_t device, void * ptr, size_t size, size_t max_tensor_size); +diff --git a/ggml/src/ggml-backend-impl.h b/ggml/src/ggml-backend-impl.h +index 81749a5a3..6f10c353b 100644 +--- a/ggml/src/ggml-backend-impl.h ++++ b/ggml/src/ggml-backend-impl.h +@@ -178,6 +178,10 @@ extern "C" { + ggml_backend_event_t (*event_new) (ggml_backend_dev_t dev); + void (*event_free) (ggml_backend_dev_t dev, ggml_backend_event_t event); + void (*event_synchronize) (ggml_backend_dev_t dev, ggml_backend_event_t event); ++ ++ // (optional) reset device, clearing existing allocations and context ++ // the caller must ensure that there are no outstanding buffers, as these will become invalid ++ void (*reset)(ggml_backend_dev_t dev); + }; + + struct ggml_backend_device { +diff --git a/ggml/src/ggml-backend.cpp b/ggml/src/ggml-backend.cpp +index 05a842ed5..6556943b0 100644 +--- a/ggml/src/ggml-backend.cpp ++++ b/ggml/src/ggml-backend.cpp +@@ -477,6 +477,14 @@ ggml_backend_t ggml_backend_dev_init(ggml_backend_dev_t device, const char * par + return device->iface.init_backend(device, params); + } + ++void ggml_backend_dev_reset(ggml_backend_dev_t device) { ++ if (device->iface.reset == NULL) { ++ return; ++ } ++ ++ device->iface.reset(device); ++} ++ + ggml_backend_buffer_type_t ggml_backend_dev_buffer_type(ggml_backend_dev_t device) { + return device->iface.get_buffer_type(device); + } +diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu +index c7f9dc3a5..e43fde523 100644 +--- a/ggml/src/ggml-cuda/ggml-cuda.cu ++++ b/ggml/src/ggml-cuda/ggml-cuda.cu +@@ -103,6 +103,11 @@ int ggml_cuda_get_device() { + return id; + } + ++void ggml_cuda_reset_device(int device) { ++ ggml_cuda_set_device(device); ++ CUDA_CHECK(cudaDeviceReset()); ++} ++ + static cudaError_t ggml_cuda_device_malloc(void ** ptr, size_t size, int device) { + ggml_cuda_set_device(device); + cudaError_t err; +@@ -3243,7 +3248,10 @@ static void ggml_backend_cuda_device_get_props(ggml_backend_dev_t dev, ggml_back + props->description = ggml_backend_cuda_device_get_description(dev); + props->id = ggml_backend_cuda_device_get_id(dev); + props->type = ggml_backend_cuda_device_get_type(dev); +- ggml_backend_cuda_device_get_memory(dev, &props->memory_free, &props->memory_total); ++ ++ // Memory reporting is disabled to avoid allocation of a CUDA primary context (~300 MB per device). ++ // If you need the memory data, call ggml_backend_dev_memory() explicitly. ++ props->memory_total = props->memory_free = 0; + + bool host_buffer = getenv("GGML_CUDA_NO_PINNED") == nullptr; + #ifdef GGML_CUDA_NO_PEER_COPY +@@ -3700,6 +3708,11 @@ static void ggml_backend_cuda_device_event_synchronize(ggml_backend_dev_t dev, g + CUDA_CHECK(cudaEventSynchronize((cudaEvent_t)event->context)); + } + ++static void ggml_backend_cuda_device_reset(ggml_backend_dev_t dev) { ++ ggml_backend_cuda_device_context * ctx = (ggml_backend_cuda_device_context *)dev->context; ++ ggml_cuda_reset_device(ctx->device); ++} ++ + static const ggml_backend_device_i ggml_backend_cuda_device_interface = { + /* .get_name = */ ggml_backend_cuda_device_get_name, + /* .get_description = */ ggml_backend_cuda_device_get_description, +@@ -3716,6 +3729,7 @@ static const ggml_backend_device_i ggml_backend_cuda_device_interface = { + /* .event_new = */ ggml_backend_cuda_device_event_new, + /* .event_free = */ ggml_backend_cuda_device_event_free, + /* .event_synchronize = */ ggml_backend_cuda_device_event_synchronize, ++ /* .reset = */ ggml_backend_cuda_device_reset, + }; + + // backend reg +@@ -3835,7 +3849,6 @@ ggml_backend_reg_t ggml_backend_cuda_reg() { + dev_ctx->device = i; + dev_ctx->name = GGML_CUDA_NAME + std::to_string(i); + +- ggml_cuda_set_device(i); + cudaDeviceProp prop; + CUDA_CHECK(cudaGetDeviceProperties(&prop, i)); + dev_ctx->description = prop.name; +diff --git a/ggml/src/ggml-cuda/vendors/hip.h b/ggml/src/ggml-cuda/vendors/hip.h +index c31f31923..cf22e60d2 100644 +--- a/ggml/src/ggml-cuda/vendors/hip.h ++++ b/ggml/src/ggml-cuda/vendors/hip.h +@@ -40,6 +40,7 @@ + #define cudaDeviceDisablePeerAccess hipDeviceDisablePeerAccess + #define cudaDeviceEnablePeerAccess hipDeviceEnablePeerAccess + #define cudaDeviceProp hipDeviceProp_t ++#define cudaDeviceReset hipDeviceReset + #define cudaDeviceSynchronize hipDeviceSynchronize + #define cudaError_t hipError_t + #define cudaErrorPeerAccessAlreadyEnabled hipErrorPeerAccessAlreadyEnabled diff --git a/ml/backend/ggml/ggml.go b/ml/backend/ggml/ggml.go index e8403e06c..6253c34ed 100644 --- a/ml/backend/ggml/ggml.go +++ b/ml/backend/ggml/ggml.go @@ -629,6 +629,18 @@ func (b *Backend) Load(ctx context.Context, progress func(float32)) error { }) } + // Cleanup any backend state from devices that we didn't end up using +nextDevice: + for _, d := range append(gpus, append(accels, cpus...)...) { + for _, backend := range b.schedBackends { + if d == C.ggml_backend_get_device(backend) { + continue nextDevice + } + } + + C.ggml_backend_dev_reset(d) + } + if err := g.Wait(); err != nil { return err } diff --git a/ml/backend/ggml/ggml/include/ggml-backend.h b/ml/backend/ggml/ggml/include/ggml-backend.h index b602a7c78..fda5ceb24 100644 --- a/ml/backend/ggml/ggml/include/ggml-backend.h +++ b/ml/backend/ggml/ggml/include/ggml-backend.h @@ -167,6 +167,7 @@ extern "C" { GGML_API void ggml_backend_dev_get_props(ggml_backend_dev_t device, struct ggml_backend_dev_props * props); GGML_API ggml_backend_reg_t ggml_backend_dev_backend_reg(ggml_backend_dev_t device); GGML_API ggml_backend_t ggml_backend_dev_init(ggml_backend_dev_t device, const char * params); + GGML_API void ggml_backend_dev_reset(ggml_backend_dev_t device); GGML_API ggml_backend_buffer_type_t ggml_backend_dev_buffer_type(ggml_backend_dev_t device); GGML_API ggml_backend_buffer_type_t ggml_backend_dev_host_buffer_type(ggml_backend_dev_t device); GGML_API ggml_backend_buffer_t ggml_backend_dev_buffer_from_host_ptr(ggml_backend_dev_t device, void * ptr, size_t size, size_t max_tensor_size); diff --git a/ml/backend/ggml/ggml/src/ggml-backend-impl.h b/ml/backend/ggml/ggml/src/ggml-backend-impl.h index 81749a5a3..6f10c353b 100644 --- a/ml/backend/ggml/ggml/src/ggml-backend-impl.h +++ b/ml/backend/ggml/ggml/src/ggml-backend-impl.h @@ -178,6 +178,10 @@ extern "C" { ggml_backend_event_t (*event_new) (ggml_backend_dev_t dev); void (*event_free) (ggml_backend_dev_t dev, ggml_backend_event_t event); void (*event_synchronize) (ggml_backend_dev_t dev, ggml_backend_event_t event); + + // (optional) reset device, clearing existing allocations and context + // the caller must ensure that there are no outstanding buffers, as these will become invalid + void (*reset)(ggml_backend_dev_t dev); }; struct ggml_backend_device { diff --git a/ml/backend/ggml/ggml/src/ggml-backend.cpp b/ml/backend/ggml/ggml/src/ggml-backend.cpp index 05a842ed5..6556943b0 100644 --- a/ml/backend/ggml/ggml/src/ggml-backend.cpp +++ b/ml/backend/ggml/ggml/src/ggml-backend.cpp @@ -477,6 +477,14 @@ ggml_backend_t ggml_backend_dev_init(ggml_backend_dev_t device, const char * par return device->iface.init_backend(device, params); } +void ggml_backend_dev_reset(ggml_backend_dev_t device) { + if (device->iface.reset == NULL) { + return; + } + + device->iface.reset(device); +} + ggml_backend_buffer_type_t ggml_backend_dev_buffer_type(ggml_backend_dev_t device) { return device->iface.get_buffer_type(device); } diff --git a/ml/backend/ggml/ggml/src/ggml-cuda/ggml-cuda.cu b/ml/backend/ggml/ggml/src/ggml-cuda/ggml-cuda.cu index c7f9dc3a5..e43fde523 100644 --- a/ml/backend/ggml/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ml/backend/ggml/ggml/src/ggml-cuda/ggml-cuda.cu @@ -103,6 +103,11 @@ int ggml_cuda_get_device() { return id; } +void ggml_cuda_reset_device(int device) { + ggml_cuda_set_device(device); + CUDA_CHECK(cudaDeviceReset()); +} + static cudaError_t ggml_cuda_device_malloc(void ** ptr, size_t size, int device) { ggml_cuda_set_device(device); cudaError_t err; @@ -3243,7 +3248,10 @@ static void ggml_backend_cuda_device_get_props(ggml_backend_dev_t dev, ggml_back props->description = ggml_backend_cuda_device_get_description(dev); props->id = ggml_backend_cuda_device_get_id(dev); props->type = ggml_backend_cuda_device_get_type(dev); - ggml_backend_cuda_device_get_memory(dev, &props->memory_free, &props->memory_total); + + // Memory reporting is disabled to avoid allocation of a CUDA primary context (~300 MB per device). + // If you need the memory data, call ggml_backend_dev_memory() explicitly. + props->memory_total = props->memory_free = 0; bool host_buffer = getenv("GGML_CUDA_NO_PINNED") == nullptr; #ifdef GGML_CUDA_NO_PEER_COPY @@ -3700,6 +3708,11 @@ static void ggml_backend_cuda_device_event_synchronize(ggml_backend_dev_t dev, g CUDA_CHECK(cudaEventSynchronize((cudaEvent_t)event->context)); } +static void ggml_backend_cuda_device_reset(ggml_backend_dev_t dev) { + ggml_backend_cuda_device_context * ctx = (ggml_backend_cuda_device_context *)dev->context; + ggml_cuda_reset_device(ctx->device); +} + static const ggml_backend_device_i ggml_backend_cuda_device_interface = { /* .get_name = */ ggml_backend_cuda_device_get_name, /* .get_description = */ ggml_backend_cuda_device_get_description, @@ -3716,6 +3729,7 @@ static const ggml_backend_device_i ggml_backend_cuda_device_interface = { /* .event_new = */ ggml_backend_cuda_device_event_new, /* .event_free = */ ggml_backend_cuda_device_event_free, /* .event_synchronize = */ ggml_backend_cuda_device_event_synchronize, + /* .reset = */ ggml_backend_cuda_device_reset, }; // backend reg @@ -3835,7 +3849,6 @@ ggml_backend_reg_t ggml_backend_cuda_reg() { dev_ctx->device = i; dev_ctx->name = GGML_CUDA_NAME + std::to_string(i); - ggml_cuda_set_device(i); cudaDeviceProp prop; CUDA_CHECK(cudaGetDeviceProperties(&prop, i)); dev_ctx->description = prop.name; diff --git a/ml/backend/ggml/ggml/src/ggml-cuda/vendors/hip.h b/ml/backend/ggml/ggml/src/ggml-cuda/vendors/hip.h index c31f31923..cf22e60d2 100644 --- a/ml/backend/ggml/ggml/src/ggml-cuda/vendors/hip.h +++ b/ml/backend/ggml/ggml/src/ggml-cuda/vendors/hip.h @@ -40,6 +40,7 @@ #define cudaDeviceDisablePeerAccess hipDeviceDisablePeerAccess #define cudaDeviceEnablePeerAccess hipDeviceEnablePeerAccess #define cudaDeviceProp hipDeviceProp_t +#define cudaDeviceReset hipDeviceReset #define cudaDeviceSynchronize hipDeviceSynchronize #define cudaError_t hipError_t #define cudaErrorPeerAccessAlreadyEnabled hipErrorPeerAccessAlreadyEnabled From 4383a3ab7a075eff78b31f7dc84c747e2fcd22b8 Mon Sep 17 00:00:00 2001 From: ofrancon Date: Thu, 28 Aug 2025 12:27:13 -0700 Subject: [PATCH 36/45] readme: add Neuro SAN to community integrations (#12109) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0680590f5..39283fa34 100644 --- a/README.md +++ b/README.md @@ -541,6 +541,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [OllamaPlusPlus](https://github.com/HardCodeDev777/OllamaPlusPlus) (Very simple C++ library for Ollama) - [any-llm](https://github.com/mozilla-ai/any-llm) (A single interface to use different llm providers by [mozilla.ai](https://www.mozilla.ai/)) - [any-agent](https://github.com/mozilla-ai/any-agent) (A single interface to use and evaluate different agent frameworks by [mozilla.ai](https://www.mozilla.ai/)) +- [Neuro SAN](https://github.com/cognizant-ai-lab/neuro-san-studio) (Data-driven multi-agent orchestration framework) with [example](https://github.com/cognizant-ai-lab/neuro-san-studio/blob/main/docs/user_guide.md#ollama) ### Mobile From ead4a9a1d073bdc2f175e429daa85f0e3a66fda7 Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Fri, 29 Aug 2025 12:17:31 -0700 Subject: [PATCH 37/45] Always filter devices (#12108) * Always filter devices Avoid crashing on unsupported AMD iGPUs * Remove cuda device filtering This interferes with mixed setups --- discover/amd_linux.go | 20 ++++++++++++++------ discover/amd_windows.go | 18 +++++++++++++----- discover/cuda_common.go | 13 ------------- discover/gpu.go | 30 ++++++++++++++++-------------- discover/gpu_darwin.go | 4 ++-- discover/gpu_oneapi.go | 21 --------------------- discover/types.go | 11 ++++++----- llm/server.go | 18 ++++++++++++++---- 8 files changed, 65 insertions(+), 70 deletions(-) delete mode 100644 discover/gpu_oneapi.go diff --git a/discover/amd_linux.go b/discover/amd_linux.go index ebffbdf66..0f2aa0673 100644 --- a/discover/amd_linux.go +++ b/discover/amd_linux.go @@ -277,6 +277,7 @@ func AMDGetGPUInfo() ([]RocmGPUInfo, error) { FreeMemory: (totalMemory - usedMemory), }, ID: ID, + filterID: gpuOrdinalID, Name: name, Compute: fmt.Sprintf("gfx%d%x%x", major, minor, patch), MinimumMemory: rocmMinimumMemory, @@ -394,7 +395,7 @@ func AMDGetGPUInfo() ([]RocmGPUInfo, error) { // Check for env var workarounds if name == "1002:687f" { // Vega RX 56 - gpuInfo.EnvWorkarounds = append(gpuInfo.EnvWorkarounds, [2]string{"HSA_ENABLE_SDMA", "0"}) + gpuInfo.EnvWorkarounds = append(gpuInfo.EnvWorkarounds, "HSA_ENABLE_SDMA=0") } // The GPU has passed all the verification steps and is supported @@ -523,19 +524,26 @@ func verifyKFDDriverAccess() error { return nil } -func rocmGetVisibleDevicesEnv(gpuInfo []GpuInfo) (string, string) { +func rocmGetVisibleDevicesEnv(gpuInfo []GpuInfo) string { ids := []string{} for _, info := range gpuInfo { if info.Library != "rocm" { - // TODO shouldn't happen if things are wired correctly... - slog.Debug("rocmGetVisibleDevicesEnv skipping over non-rocm device", "library", info.Library) continue } - ids = append(ids, info.ID) + // If the devices requires a numeric ID, for filtering purposes, we use the unfiltered ID number + if _, err := strconv.Atoi(info.ID); err == nil { + ids = append(ids, fmt.Sprintf("%d", info.filterID)) + } else { + ids = append(ids, info.ID) + } } + if len(ids) == 0 { + return "" + } + // There are 3 potential env vars to use to select GPUs. // ROCR_VISIBLE_DEVICES supports UUID or numeric so is our preferred on linux // GPU_DEVICE_ORDINAL supports numeric IDs only // HIP_VISIBLE_DEVICES supports numeric IDs only - return "ROCR_VISIBLE_DEVICES", strings.Join(ids, ",") + return "ROCR_VISIBLE_DEVICES=" + strings.Join(ids, ",") } diff --git a/discover/amd_windows.go b/discover/amd_windows.go index 0659d12f8..08608ad1c 100644 --- a/discover/amd_windows.go +++ b/discover/amd_windows.go @@ -111,6 +111,7 @@ func AMDGetGPUInfo() ([]RocmGPUInfo, error) { UnreliableFreeMemory: true, ID: strconv.Itoa(i), // TODO this is probably wrong if we specify visible devices + filterID: i, DependencyPath: []string{libDir}, MinimumMemory: rocmMinimumMemory, Name: name, @@ -200,19 +201,26 @@ func (gpus RocmGPUInfoList) RefreshFreeMemory() error { return nil } -func rocmGetVisibleDevicesEnv(gpuInfo []GpuInfo) (string, string) { +func rocmGetVisibleDevicesEnv(gpuInfo []GpuInfo) string { ids := []string{} for _, info := range gpuInfo { if info.Library != "rocm" { - // TODO shouldn't happen if things are wired correctly... - slog.Debug("rocmGetVisibleDevicesEnv skipping over non-rocm device", "library", info.Library) continue } - ids = append(ids, info.ID) + // If the devices requires a numeric ID, for filtering purposes, we use the unfiltered ID number + if _, err := strconv.Atoi(info.ID); err == nil { + ids = append(ids, fmt.Sprintf("%d", info.filterID)) + } else { + ids = append(ids, info.ID) + } } + if len(ids) == 0 { + return "" + } + // There are 3 potential env vars to use to select GPUs. // ROCR_VISIBLE_DEVICES supports UUID or numeric but does not work on Windows // HIP_VISIBLE_DEVICES supports numeric IDs only // GPU_DEVICE_ORDINAL supports numeric IDs only - return "HIP_VISIBLE_DEVICES", strings.Join(ids, ",") + return "HIP_VISIBLE_DEVICES=" + strings.Join(ids, ",") } diff --git a/discover/cuda_common.go b/discover/cuda_common.go index 3c7cb6698..b539f6b32 100644 --- a/discover/cuda_common.go +++ b/discover/cuda_common.go @@ -16,19 +16,6 @@ import ( // Included to drive logic for reducing Ollama-allocated overhead on L4T/Jetson devices. var CudaTegra string = os.Getenv("JETSON_JETPACK") -func cudaGetVisibleDevicesEnv(gpuInfo []GpuInfo) (string, string) { - ids := []string{} - for _, info := range gpuInfo { - if info.Library != "cuda" { - // TODO shouldn't happen if things are wired correctly... - slog.Debug("cudaGetVisibleDevicesEnv skipping over non-cuda device", "library", info.Library) - continue - } - ids = append(ids, info.ID) - } - return "CUDA_VISIBLE_DEVICES", strings.Join(ids, ",") -} - func cudaVariant(gpuInfo CudaGPUInfo) string { if runtime.GOARCH == "arm64" && runtime.GOOS == "linux" { if CudaTegra != "" { diff --git a/discover/gpu.go b/discover/gpu.go index f6e3c9cb1..b09626118 100644 --- a/discover/gpu.go +++ b/discover/gpu.go @@ -371,6 +371,15 @@ func GetGPUInfo() GpuInfoList { } rocmGPUs, err = AMDGetGPUInfo() + + // The ID field is used in context of the filtered set of GPUS + // so we have to replace any of these numeric IDs with their + // placement in this set of GPUs + for i := range rocmGPUs { + if _, err := strconv.Atoi(rocmGPUs[i].ID); err == nil { + rocmGPUs[i].ID = strconv.Itoa(i) + } + } if err != nil { bootstrapErrors = append(bootstrapErrors, err) } @@ -680,23 +689,16 @@ func getVerboseState() C.uint16_t { // Given the list of GPUs this instantiation is targeted for, // figure out the visible devices environment variable -// -// If different libraries are detected, the first one is what we use -func (l GpuInfoList) GetVisibleDevicesEnv() (string, string) { +func (l GpuInfoList) GetVisibleDevicesEnv() []string { if len(l) == 0 { - return "", "" + return nil } - switch l[0].Library { - case "cuda": - return cudaGetVisibleDevicesEnv(l) - case "rocm": - return rocmGetVisibleDevicesEnv(l) - case "oneapi": - return oneapiGetVisibleDevicesEnv(l) - default: - slog.Debug("no filter required for library " + l[0].Library) - return "", "" + vd := []string{} + // Only filter the AMD GPUs at this level, let all NVIDIA devices through + if tmp := rocmGetVisibleDevicesEnv(l); tmp != "" { + vd = append(vd, tmp) } + return vd } func GetSystemInfo() SystemInfo { diff --git a/discover/gpu_darwin.go b/discover/gpu_darwin.go index dd5bf6e27..29b44ff50 100644 --- a/discover/gpu_darwin.go +++ b/discover/gpu_darwin.go @@ -62,9 +62,9 @@ func GetCPUMem() (memInfo, error) { }, nil } -func (l GpuInfoList) GetVisibleDevicesEnv() (string, string) { +func (l GpuInfoList) GetVisibleDevicesEnv() []string { // No-op on darwin - return "", "" + return nil } func GetSystemInfo() SystemInfo { diff --git a/discover/gpu_oneapi.go b/discover/gpu_oneapi.go deleted file mode 100644 index 77941f5b3..000000000 --- a/discover/gpu_oneapi.go +++ /dev/null @@ -1,21 +0,0 @@ -//go:build linux || windows - -package discover - -import ( - "log/slog" - "strings" -) - -func oneapiGetVisibleDevicesEnv(gpuInfo []GpuInfo) (string, string) { - ids := []string{} - for _, info := range gpuInfo { - if info.Library != "oneapi" { - // TODO shouldn't happen if things are wired correctly... - slog.Debug("oneapiGetVisibleDevicesEnv skipping over non-sycl device", "library", info.Library) - continue - } - ids = append(ids, info.ID) - } - return "ONEAPI_DEVICE_SELECTOR", "level_zero:" + strings.Join(ids, ",") -} diff --git a/discover/types.go b/discover/types.go index 13a030fd5..1027aaac2 100644 --- a/discover/types.go +++ b/discover/types.go @@ -27,8 +27,8 @@ type GpuInfo struct { // TODO better name maybe "InferenceProcessor"? // Any extra PATH/LD_LIBRARY_PATH dependencies required for the Library to operate properly DependencyPath []string `json:"lib_path,omitempty"` - // Extra environment variables specific to the GPU as list of [key,value] - EnvWorkarounds [][2]string `json:"envs,omitempty"` + // Extra environment variables specific to the GPU as list of [key=value] + EnvWorkarounds []string `json:"envs,omitempty"` // Set to true if we can NOT reliably discover FreeMemory. A value of true indicates // the FreeMemory is best effort, and may over or under report actual memory usage @@ -36,9 +36,10 @@ type GpuInfo struct { // TODO better name maybe "InferenceProcessor"? UnreliableFreeMemory bool // GPU information - ID string `json:"gpu_id"` // string to use for selection of this specific GPU - Name string `json:"name"` // user friendly name if available - Compute string `json:"compute"` // Compute Capability or gfx + ID string `json:"gpu_id"` // string to use for selection of this specific GPU + filterID int //nolint:unused,nolintlint // AMD Workaround: The numeric ID of the device used to filter out other devices + Name string `json:"name"` // user friendly name if available + Compute string `json:"compute"` // Compute Capability or gfx // Driver Information - TODO no need to put this on each GPU DriverMajor int `json:"driver_major,omitempty"` diff --git a/llm/server.go b/llm/server.go index 30cf5c360..b9ffdc6c1 100644 --- a/llm/server.go +++ b/llm/server.go @@ -360,23 +360,28 @@ func NewLlamaServer(gpus discover.GpuInfoList, modelPath string, f *ggml.GGML, a s.cmd.Env = append(s.cmd.Env, "OLLAMA_LIBRARY_PATH="+strings.Join(ggmlPaths, string(filepath.ListSeparator))) - envWorkarounds := [][2]string{} + envWorkarounds := []string{} for _, gpu := range gpus { envWorkarounds = append(envWorkarounds, gpu.EnvWorkarounds...) } + // Always filter down the set of GPUs in case there are any unsupported devices that might crash + envWorkarounds = append(envWorkarounds, gpus.GetVisibleDevicesEnv()...) pathEnvVal := strings.Join(libraryPaths, string(filepath.ListSeparator)) // Update or add the path variable with our adjusted version pathNeeded := true + envWorkaroundDone := make([]bool, len(envWorkarounds)) for i := range s.cmd.Env { cmp := strings.SplitN(s.cmd.Env[i], "=", 2) if strings.EqualFold(cmp[0], pathEnv) { s.cmd.Env[i] = pathEnv + "=" + pathEnvVal pathNeeded = false } else if len(envWorkarounds) != 0 { - for _, kv := range envWorkarounds { - if strings.EqualFold(cmp[0], kv[0]) { - s.cmd.Env[i] = kv[0] + "=" + kv[1] + for j, kv := range envWorkarounds { + tmp := strings.SplitN(kv, "=", 2) + if strings.EqualFold(cmp[0], tmp[0]) { + s.cmd.Env[i] = kv + envWorkaroundDone[j] = true } } } @@ -384,6 +389,11 @@ func NewLlamaServer(gpus discover.GpuInfoList, modelPath string, f *ggml.GGML, a if pathNeeded { s.cmd.Env = append(s.cmd.Env, pathEnv+"="+pathEnvVal) } + for i, done := range envWorkaroundDone { + if !done { + s.cmd.Env = append(s.cmd.Env, envWorkarounds[i]) + } + } slog.Info("starting runner", "cmd", s.cmd) slog.Debug("subprocess", "", filteredEnv(s.cmd.Env)) From 517807cdf29d2c8d22bc748a2cfde2b61bd67c98 Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Fri, 29 Aug 2025 14:20:28 -0700 Subject: [PATCH 38/45] perf: build graph for next batch async to keep GPU busy (#11863) * perf: build graph for next batch in parallel to keep GPU busy This refactors the main run loop of the ollama runner to perform the main GPU intensive tasks (Compute+Floats) in a go routine so we can prepare the next batch in parallel to reduce the amount of time the GPU stalls waiting for the next batch of work. * tests: tune integration tests for ollama engine This tunes the integration tests to focus more on models supported by the new engine. --- integration/README.md | 7 +- integration/api_test.go | 2 +- integration/basic_test.go | 29 +++- integration/concurrency_test.go | 26 +-- integration/context_test.go | 63 +++++++- integration/llm_image_test.go | 17 +- integration/llm_test.go | 47 ------ integration/max_queue_test.go | 29 ++-- integration/utils_test.go | 138 +++++++++++++++- ml/backend.go | 3 + ml/backend/ggml/ggml.go | 16 ++ model/model.go | 8 +- model/models/gemma3/model.go | 16 +- model/models/llama4/model.go | 24 +-- model/models/mistral3/model.go | 12 +- model/models/mllama/model.go | 2 +- model/models/qwen25vl/model.go | 14 +- runner/ollamarunner/cache.go | 18 +-- runner/ollamarunner/cache_test.go | 100 ++++++------ runner/ollamarunner/runner.go | 255 +++++++++++++++++++++++++----- 20 files changed, 591 insertions(+), 235 deletions(-) delete mode 100644 integration/llm_test.go diff --git a/integration/README.md b/integration/README.md index e2bdd6b21..e52ba71ee 100644 --- a/integration/README.md +++ b/integration/README.md @@ -2,10 +2,13 @@ This directory contains integration tests to exercise Ollama end-to-end to verify behavior -By default, these tests are disabled so `go test ./...` will exercise only unit tests. To run integration tests you must pass the integration tag. `go test -tags=integration ./...` +By default, these tests are disabled so `go test ./...` will exercise only unit tests. To run integration tests you must pass the integration tag. `go test -tags=integration ./...` Some tests require additional tags to enable to allow scoped testing to keep the duration reasonable. For example, testing a broad set of models requires `-tags=integration,models` and a longer timeout (~60m or more depending on the speed of your GPU.). To view the current set of tag combinations use `find integration -type f | xargs grep "go:build"` The integration tests have 2 modes of operating. 1. By default, they will start the server on a random port, run the tests, and then shutdown the server. -2. If `OLLAMA_TEST_EXISTING` is set to a non-empty string, the tests will run against an existing running server, which can be remote +2. If `OLLAMA_TEST_EXISTING` is set to a non-empty string, the tests will run against an existing running server, which can be remote based on your `OLLAMA_HOST` environment variable + +> [!IMPORTANT] +> Before running the tests locally without the "test existing" setting, compile ollama from the top of the source tree `go build .` in addition to GPU support with cmake if applicable on your platform. The integration tests expect to find an ollama binary at the top of the tree. diff --git a/integration/api_test.go b/integration/api_test.go index d24f5001f..0baba8827 100644 --- a/integration/api_test.go +++ b/integration/api_test.go @@ -390,7 +390,7 @@ func TestAPIEmbeddings(t *testing.T) { client, _, cleanup := InitServerConnection(ctx, t) defer cleanup() req := api.EmbeddingRequest{ - Model: "orca-mini", + Model: libraryEmbedModels[0], Prompt: "why is the sky blue?", Options: map[string]interface{}{ "temperature": 0, diff --git a/integration/basic_test.go b/integration/basic_test.go index 13c2f22a2..60cff172b 100644 --- a/integration/basic_test.go +++ b/integration/basic_test.go @@ -11,7 +11,6 @@ import ( "time" "github.com/ollama/ollama/api" - "github.com/stretchr/testify/require" ) func TestBlueSky(t *testing.T) { @@ -37,8 +36,8 @@ func TestUnicode(t *testing.T) { // Set up the test data req := api.GenerateRequest{ // DeepSeek has a Unicode tokenizer regex, making it a unicode torture test - Model: "deepseek-coder-v2:16b-lite-instruct-q2_K", - Prompt: "天空为什么是蓝色的?", + Model: "deepseek-coder-v2:16b-lite-instruct-q2_K", // TODO is there an ollama-engine model we can switch to and keep the coverage? + Prompt: "天空为什么是蓝色的?", // Why is the sky blue? Stream: &stream, Options: map[string]any{ "temperature": 0, @@ -50,8 +49,20 @@ func TestUnicode(t *testing.T) { } client, _, cleanup := InitServerConnection(ctx, t) defer cleanup() - require.NoError(t, PullIfMissing(ctx, client, req.Model)) - DoGenerate(ctx, t, client, req, []string{"散射", "频率"}, 120*time.Second, 120*time.Second) + if err := PullIfMissing(ctx, client, req.Model); err != nil { + t.Fatal(err) + } + slog.Info("loading", "model", req.Model) + err := client.Generate(ctx, &api.GenerateRequest{Model: req.Model}, func(response api.GenerateResponse) error { return nil }) + if err != nil { + t.Fatalf("failed to load model %s: %s", req.Model, err) + } + skipIfNotGPULoaded(ctx, t, client, req.Model, 100) + + DoGenerate(ctx, t, client, req, []string{ + "散射", // scattering + "频率", // frequency + }, 120*time.Second, 120*time.Second) } func TestExtendedUnicodeOutput(t *testing.T) { @@ -69,7 +80,9 @@ func TestExtendedUnicodeOutput(t *testing.T) { } client, _, cleanup := InitServerConnection(ctx, t) defer cleanup() - require.NoError(t, PullIfMissing(ctx, client, req.Model)) + if err := PullIfMissing(ctx, client, req.Model); err != nil { + t.Fatal(err) + } DoGenerate(ctx, t, client, req, []string{"😀", "😊", "😁", "😂", "😄", "😃"}, 120*time.Second, 120*time.Second) } @@ -84,7 +97,9 @@ func TestUnicodeModelDir(t *testing.T) { } modelDir, err := os.MkdirTemp("", "ollama_埃") - require.NoError(t, err) + if err != nil { + t.Fatal(err) + } defer os.RemoveAll(modelDir) slog.Info("unicode", "OLLAMA_MODELS", modelDir) diff --git a/integration/concurrency_test.go b/integration/concurrency_test.go index 52a7f36bd..331bb6e75 100644 --- a/integration/concurrency_test.go +++ b/integration/concurrency_test.go @@ -14,8 +14,6 @@ import ( "testing" "time" - "github.com/stretchr/testify/require" - "github.com/ollama/ollama/api" "github.com/ollama/ollama/envconfig" "github.com/ollama/ollama/format" @@ -79,21 +77,21 @@ func TestMultiModelStress(t *testing.T) { t.Fatal(err) } + // All models compatible with ollama-engine smallModels := []string{ "llama3.2:1b", "qwen3:0.6b", - "gemma:2b", - "deepseek-r1:1.5b", - "starcoder2:3b", + "gemma2:2b", + "deepseek-r1:1.5b", // qwen2 arch + "gemma3:270m", } mediumModels := []string{ - "qwen3:8b", - "llama2", - "deepseek-r1:7b", - "mistral", - "dolphin-mistral", - "gemma:7b", - "codellama:7b", + "llama3.2:3b", // ~3.4G + "qwen3:8b", // ~6.6G + "gpt-oss:20b", // ~15G + "deepseek-r1:7b", // ~5.6G + "gemma3:4b", // ~5.8G + "gemma2:9b", // ~8.1G } var chosenModels []string @@ -114,7 +112,9 @@ func TestMultiModelStress(t *testing.T) { // Make sure all the models are pulled before we get started for _, model := range chosenModels { - require.NoError(t, PullIfMissing(ctx, client, model)) + if err := PullIfMissing(ctx, client, model); err != nil { + t.Fatal(err) + } } // Determine how many models we can load in parallel before we exceed VRAM diff --git a/integration/context_test.go b/integration/context_test.go index b28d11380..24c57dcf2 100644 --- a/integration/context_test.go +++ b/integration/context_test.go @@ -22,7 +22,7 @@ func TestLongInputContext(t *testing.T) { defer cancel() // Set up the test data req := api.GenerateRequest{ - Model: "llama2", + Model: smol, Prompt: "Oh, don’t speak to me of Austria. Perhaps I don’t understand things, but Austria never has wished, and does not wish, for war. She is betraying us! Russia alone must save Europe. Our gracious sovereign recognizes his high vocation and will be true to it. That is the one thing I have faith in! Our good and wonderful sovereign has to perform the noblest role on earth, and he is so virtuous and noble that God will not forsake him. He will fulfill his vocation and crush the hydra of revolution, which has become more terrible than ever in the person of this murderer and villain! We alone must avenge the blood of the just one.... Whom, I ask you, can we rely on?... England with her commercial spirit will not and cannot understand the Emperor Alexander’s loftiness of soul. She has refused to evacuate Malta. She wanted to find, and still seeks, some secret motive in our actions. What answer did Novosíltsev get? None. The English have not understood and cannot understand the self-abnegation of our Emperor who wants nothing for himself, but only desires the good of mankind. And what have they promised? Nothing! And what little they have promised they will not perform! Prussia has always declared that Buonaparte is invincible, and that all Europe is powerless before him.... And I don’t believe a word that Hardenburg says, or Haugwitz either. This famous Prussian neutrality is just a trap. I have faith only in God and the lofty destiny of our adored monarch. He will save Europe! What country is this referring to?", Stream: &stream, Options: map[string]any{ @@ -36,7 +36,7 @@ func TestLongInputContext(t *testing.T) { if err := PullIfMissing(ctx, client, req.Model); err != nil { t.Fatalf("PullIfMissing failed: %v", err) } - DoGenerate(ctx, t, client, req, []string{"russia", "germany", "france", "england", "austria", "prussia"}, 120*time.Second, 10*time.Second) + DoGenerate(ctx, t, client, req, []string{"russia", "germany", "france", "england", "austria", "prussia", "individuals", "coalition", "conflict"}, 120*time.Second, 10*time.Second) } func TestContextExhaustion(t *testing.T) { @@ -49,7 +49,7 @@ func TestContextExhaustion(t *testing.T) { defer cancel() // Set up the test data req := api.GenerateRequest{ - Model: "llama2", + Model: smol, Prompt: "Write me a story with a ton of emojis?", Stream: &stream, Options: map[string]any{ @@ -63,10 +63,10 @@ func TestContextExhaustion(t *testing.T) { if err := PullIfMissing(ctx, client, req.Model); err != nil { t.Fatalf("PullIfMissing failed: %v", err) } - DoGenerate(ctx, t, client, req, []string{"once", "upon", "lived"}, 120*time.Second, 10*time.Second) + DoGenerate(ctx, t, client, req, []string{"once", "upon", "lived", "sunny", "cloudy", "clear", "water"}, 120*time.Second, 10*time.Second) } -// Send multiple requests with prior context and ensure the response is coherant and expected +// Send multiple generate requests with prior context and ensure the response is coherant and expected func TestGenerateWithHistory(t *testing.T) { modelOverride := ollamaEngineChatModels[0] // Most recent ollama engine model req, resp := GenerateRequests() @@ -111,5 +111,56 @@ func TestGenerateWithHistory(t *testing.T) { }(i) } wg.Wait() - +} + +// Send multiple chat requests with prior context and ensure the response is coherant and expected +func TestChatWithHistory(t *testing.T) { + modelOverride := ollamaEngineChatModels[0] // Most recent ollama engine model + req, resp := ChatRequests() + numParallel := 2 + iterLimit := 2 + + softTimeout, hardTimeout := getTimeouts(t) + ctx, cancel := context.WithTimeout(context.Background(), hardTimeout) + defer cancel() + client, _, cleanup := InitServerConnection(ctx, t) + defer cleanup() + + // Get the server running (if applicable) warm the model up with a single initial empty request + slog.Info("loading", "model", modelOverride) + err := client.Generate(ctx, + &api.GenerateRequest{Model: modelOverride, KeepAlive: &api.Duration{Duration: 10 * time.Second}}, + func(response api.GenerateResponse) error { return nil }, + ) + if err != nil { + t.Fatalf("failed to load model %s: %s", modelOverride, err) + } + + var wg sync.WaitGroup + wg.Add(numParallel) + for i := range numParallel { + go func(i int) { + defer wg.Done() + k := i % len(req) + req[k].Model = modelOverride + for j := 0; j < iterLimit; j++ { + if time.Now().Sub(started) > softTimeout { + slog.Info("exceeded soft timeout, winding down test") + return + } + slog.Info("Starting", "thread", i, "iter", j) + // On slower GPUs it can take a while to process the concurrent requests + // so we allow a much longer initial timeout + assistant := DoChat(ctx, t, client, req[k], resp[k], 120*time.Second, 20*time.Second) + if assistant == nil { + t.Fatalf("didn't get an assistant response for context") + } + req[k].Messages = append(req[k].Messages, + *assistant, + api.Message{Role: "user", Content: "tell me more!"}, + ) + } + }(i) + } + wg.Wait() } diff --git a/integration/llm_image_test.go b/integration/llm_image_test.go index bbd031a93..9bf11257c 100644 --- a/integration/llm_image_test.go +++ b/integration/llm_image_test.go @@ -9,7 +9,6 @@ import ( "time" "github.com/ollama/ollama/api" - "github.com/stretchr/testify/require" ) func TestVisionModels(t *testing.T) { @@ -32,7 +31,9 @@ func TestVisionModels(t *testing.T) { for _, v := range testCases { t.Run(v.model, func(t *testing.T) { image, err := base64.StdEncoding.DecodeString(imageEncoding) - require.NoError(t, err) + if err != nil { + t.Fatal(err) + } req := api.GenerateRequest{ Model: v.model, Prompt: "what does the text in this image say?", @@ -52,7 +53,9 @@ func TestVisionModels(t *testing.T) { // Note: sometimes it returns "the ollamas" sometimes "the ollams" resp := "the ollam" defer cleanup() - require.NoError(t, PullIfMissing(ctx, client, req.Model)) + if err := PullIfMissing(ctx, client, req.Model); err != nil { + t.Fatal(err) + } // llava models on CPU can be quite slow to start DoGenerate(ctx, t, client, req, []string{resp}, 240*time.Second, 30*time.Second) }) @@ -62,7 +65,9 @@ func TestVisionModels(t *testing.T) { func TestIntegrationSplitBatch(t *testing.T) { skipUnderMinVRAM(t, 6) image, err := base64.StdEncoding.DecodeString(imageEncoding) - require.NoError(t, err) + if err != nil { + t.Fatal(err) + } req := api.GenerateRequest{ Model: "gemma3:4b", // Fill up a chunk of the batch so the image will partially spill over into the next one @@ -84,7 +89,9 @@ func TestIntegrationSplitBatch(t *testing.T) { defer cancel() client, _, cleanup := InitServerConnection(ctx, t) defer cleanup() - require.NoError(t, PullIfMissing(ctx, client, req.Model)) + if err := PullIfMissing(ctx, client, req.Model); err != nil { + t.Fatal(err) + } // llava models on CPU can be quite slow to start, DoGenerate(ctx, t, client, req, []string{resp}, 120*time.Second, 30*time.Second) } diff --git a/integration/llm_test.go b/integration/llm_test.go deleted file mode 100644 index 50249bf0f..000000000 --- a/integration/llm_test.go +++ /dev/null @@ -1,47 +0,0 @@ -//go:build integration - -package integration - -import ( - "context" - "testing" - "time" - - "github.com/ollama/ollama/api" -) - -// TODO - this would ideally be in the llm package, but that would require some refactoring of interfaces in the server -// package to avoid circular dependencies - -var ( - stream = false - req = [2]api.GenerateRequest{ - { - Model: smol, - Prompt: "why is the ocean blue?", - Stream: &stream, - Options: map[string]any{ - "seed": 42, - "temperature": 0.0, - }, - }, { - Model: smol, - Prompt: "what is the origin of the us thanksgiving holiday?", - Stream: &stream, - Options: map[string]any{ - "seed": 42, - "temperature": 0.0, - }, - }, - } - resp = [2][]string{ - {"sunlight", "scattering", "interact"}, - {"england", "english", "massachusetts", "pilgrims"}, - } -) - -func TestIntegrationSimple(t *testing.T) { - ctx, cancel := context.WithTimeout(context.Background(), time.Second*120) - defer cancel() - GenerateTestHelper(ctx, t, req[0], resp[0]) -} diff --git a/integration/max_queue_test.go b/integration/max_queue_test.go index 7bb9336a0..24e3101f2 100644 --- a/integration/max_queue_test.go +++ b/integration/max_queue_test.go @@ -13,12 +13,12 @@ import ( "testing" "time" - "github.com/stretchr/testify/require" - "github.com/ollama/ollama/api" ) func TestMaxQueue(t *testing.T) { + t.Skip("this test needs to be re-evaluated to use a proper embedding model") + if os.Getenv("OLLAMA_TEST_EXISTING") != "" { t.Skip("Max Queue test requires spawning a local server so we can adjust the queue size") return @@ -45,7 +45,9 @@ func TestMaxQueue(t *testing.T) { client, _, cleanup := InitServerConnection(ctx, t) defer cleanup() - require.NoError(t, PullIfMissing(ctx, client, req.Model)) + if err := PullIfMissing(ctx, client, req.Model); err != nil { + t.Fatal(err) + } // Context for the worker threads so we can shut them down // embedCtx, embedCancel := context.WithCancel(ctx) @@ -89,7 +91,9 @@ func TestMaxQueue(t *testing.T) { switch { case genErr == nil: successCount++ - require.Greater(t, len(resp.Embedding), 5) // somewhat arbitrary, but sufficient to be reasonable + if len(resp.Embedding) < 5 { // somewhat arbitrary, but sufficient to be reasonable + t.Fatalf("embeddings shorter than expected: %d", len(resp.Embedding)) + } case errors.Is(genErr, context.Canceled): canceledCount++ case strings.Contains(genErr.Error(), "busy"): @@ -97,7 +101,9 @@ func TestMaxQueue(t *testing.T) { case strings.Contains(genErr.Error(), "connection reset by peer"): resetByPeerCount++ default: - require.NoError(t, genErr, "%d request failed", i) + if genErr != nil { + t.Fatalf("%d request failed", i) + } } slog.Info("embed finished", "id", i) @@ -108,8 +114,13 @@ func TestMaxQueue(t *testing.T) { embedwg.Wait() slog.Info("embeds completed", "success", successCount, "busy", busyCount, "reset", resetByPeerCount, "canceled", canceledCount) - require.Equal(t, resetByPeerCount, 0, "Connections reset by peer, have you updated your fd and socket limits?") - require.True(t, busyCount > 0, "no requests hit busy error but some should have") - require.True(t, canceledCount == 0, "no requests should have been canceled due to timeout") - + if resetByPeerCount != 0 { + t.Fatalf("Connections reset by peer, have you updated your fd and socket limits? %d", resetByPeerCount) + } + if busyCount == 0 { + t.Fatalf("no requests hit busy error but some should have") + } + if canceledCount > 0 { + t.Fatalf("no requests should have been canceled due to timeout %d", canceledCount) + } } diff --git a/integration/utils_test.go b/integration/utils_test.go index d7e3790b1..2bb6a1570 100644 --- a/integration/utils_test.go +++ b/integration/utils_test.go @@ -9,6 +9,7 @@ import ( "fmt" "io" "log/slog" + "math" "math/rand" "net" "net/http" @@ -25,11 +26,11 @@ import ( "github.com/ollama/ollama/api" "github.com/ollama/ollama/app/lifecycle" "github.com/ollama/ollama/format" - "github.com/stretchr/testify/require" ) var ( - smol = "llama3.2:1b" + smol = "llama3.2:1b" + stream = false ) var ( @@ -435,7 +436,9 @@ func InitServerConnection(ctx context.Context, t *testing.T) (*api.Client, strin } lifecycle.ServerLogFile = fp.Name() fp.Close() - require.NoError(t, startServer(t, ctx, testEndpoint)) + if err := startServer(t, ctx, testEndpoint); err != nil { + t.Fatal(err) + } } return client, testEndpoint, func() { @@ -468,7 +471,9 @@ func InitServerConnection(ctx context.Context, t *testing.T) (*api.Client, strin func GenerateTestHelper(ctx context.Context, t *testing.T, genReq api.GenerateRequest, anyResp []string) { client, _, cleanup := InitServerConnection(ctx, t) defer cleanup() - require.NoError(t, PullIfMissing(ctx, client, genReq.Model)) + if err := PullIfMissing(ctx, client, genReq.Model); err != nil { + t.Fatal(err) + } DoGenerate(ctx, t, client, genReq, anyResp, 30*time.Second, 10*time.Second) } @@ -509,7 +514,9 @@ func DoGenerate(ctx context.Context, t *testing.T, client *api.Client, genReq ap slog.Warn("model is too large for the target test system", "model", genReq.Model, "error", genErr) return context } - require.NoError(t, genErr, "failed with %s request prompt %s ", genReq.Model, genReq.Prompt) + if genErr != nil { + t.Fatalf("%s failed with %s request prompt %s", genErr, genReq.Model, genReq.Prompt) + } // Verify the response contains the expected data response := buf.String() atLeastOne := false @@ -519,7 +526,9 @@ func DoGenerate(ctx context.Context, t *testing.T, client *api.Client, genReq ap break } } - require.True(t, atLeastOne, "%s: none of %v found in %s", genReq.Model, anyResp, response) + if !atLeastOne { + t.Fatalf("%s: none of %v found in %s", genReq.Model, anyResp, response) + } slog.Info("test pass", "model", genReq.Model, "prompt", genReq.Prompt, "contains", anyResp, "response", response) case <-ctx.Done(): t.Error("outer test context done while waiting for generate") @@ -561,17 +570,97 @@ func GenerateRequests() ([]api.GenerateRequest, [][]string) { [][]string{ {"sunlight", "scattering", "interact", "color", "surface", "depth", "red", "orange", "yellow", "absorbs", "wavelength"}, {"soil", "organic", "earth", "black", "tan", "chemical", "processes", "pigments", "particles", "iron oxide", "rust", "air", "water", "mixture", "mixing"}, - {"england", "english", "massachusetts", "pilgrims", "colonists", "independence", "british", "feast", "family", "gatherings", "traditions", "turkey", "colonial", "period", "harvest", "agricultural", "european settlers", "american revolution", "civil war", "16th century", "17th century", "native american", "united states"}, + {"england", "english", "massachusetts", "pilgrims", "colonists", "independence", "british", "feast", "family", "gatherings", "traditions", "turkey", "colonial", "period", "harvest", "agricultural", "european settlers", "american revolution", "civil war", "16th century", "17th century", "native american", "united states", "cultural", "hardship", "autumn", "festival"}, {"fourth", "july", "declaration", "independence"}, {"nitrogen", "oxygen", "carbon", "dioxide"}, } } +func DoChat(ctx context.Context, t *testing.T, client *api.Client, req api.ChatRequest, anyResp []string, initialTimeout, streamTimeout time.Duration) *api.Message { + stallTimer := time.NewTimer(initialTimeout) + var buf bytes.Buffer + role := "assistant" + fn := func(response api.ChatResponse) error { + // fmt.Print(".") + role = response.Message.Role + buf.Write([]byte(response.Message.Content)) + if !stallTimer.Reset(streamTimeout) { + return errors.New("stall was detected while streaming response, aborting") + } + return nil + } + + stream := true + req.Stream = &stream + done := make(chan int) + var genErr error + go func() { + genErr = client.Chat(ctx, &req, fn) + done <- 0 + }() + + select { + case <-stallTimer.C: + if buf.Len() == 0 { + t.Errorf("generate never started. Timed out after :%s", initialTimeout.String()) + } else { + t.Errorf("generate stalled. Response so far:%s", buf.String()) + } + case <-done: + if genErr != nil && strings.Contains(genErr.Error(), "model requires more system memory") { + slog.Warn("model is too large for the target test system", "model", req.Model, "error", genErr) + return nil + } + if genErr != nil { + t.Fatalf("%s failed with %s request prompt %v", genErr, req.Model, req.Messages) + } + + // Verify the response contains the expected data + response := buf.String() + atLeastOne := false + for _, resp := range anyResp { + if strings.Contains(strings.ToLower(response), resp) { + atLeastOne = true + break + } + } + if !atLeastOne { + t.Fatalf("%s: none of %v found in \"%s\" -- request was:%v", req.Model, anyResp, response, req.Messages) + } + + slog.Info("test pass", "model", req.Model, "messages", req.Messages, "contains", anyResp, "response", response) + case <-ctx.Done(): + t.Error("outer test context done while waiting for generate") + } + return &api.Message{Role: role, Content: buf.String()} +} + +func ChatRequests() ([]api.ChatRequest, [][]string) { + genReqs, results := GenerateRequests() + reqs := make([]api.ChatRequest, len(genReqs)) + // think := api.ThinkValue{Value: "low"} + for i := range reqs { + reqs[i].Model = genReqs[i].Model + reqs[i].Stream = genReqs[i].Stream + reqs[i].KeepAlive = genReqs[i].KeepAlive + // reqs[i].Think = &think + reqs[i].Messages = []api.Message{ + { + Role: "user", + Content: genReqs[i].Prompt, + }, + } + } + return reqs, results +} + func skipUnderMinVRAM(t *testing.T, gb uint64) { // TODO use info API in the future if s := os.Getenv("OLLAMA_MAX_VRAM"); s != "" { maxVram, err := strconv.ParseUint(s, 10, 64) - require.NoError(t, err) + if err != nil { + t.Fatal(err) + } // Don't hammer on small VRAM cards... if maxVram < gb*format.GibiByte { t.Skip("skipping with small VRAM to avoid timeouts") @@ -579,6 +668,39 @@ func skipUnderMinVRAM(t *testing.T, gb uint64) { } } +// Skip if the target model isn't X% GPU loaded to avoid excessive runtime +func skipIfNotGPULoaded(ctx context.Context, t *testing.T, client *api.Client, model string, minPercent int) { + models, err := client.ListRunning(ctx) + if err != nil { + t.Fatalf("failed to list running models: %s", err) + } + loaded := []string{} + for _, m := range models.Models { + loaded = append(loaded, m.Name) + if m.Name != model { + continue + } + gpuPercent := 0 + switch { + case m.SizeVRAM == 0: + gpuPercent = 0 + case m.SizeVRAM == m.Size: + gpuPercent = 100 + case m.SizeVRAM > m.Size || m.Size == 0: + t.Logf("unexpected size detected: %d", m.SizeVRAM) + default: + sizeCPU := m.Size - m.SizeVRAM + cpuPercent := math.Round(float64(sizeCPU) / float64(m.Size) * 110) + gpuPercent = int(100 - cpuPercent) + } + if gpuPercent < minPercent { + t.Skip(fmt.Sprintf("test requires minimum %d%% GPU load, but model %s only has %d%%", minPercent, model, gpuPercent)) + } + return + } + t.Skip(fmt.Sprintf("model %s not loaded - actually loaded: %v", model, loaded)) +} + func getTimeouts(t *testing.T) (soft time.Duration, hard time.Duration) { deadline, hasDeadline := t.Deadline() if !hasDeadline { diff --git a/ml/backend.go b/ml/backend.go index 705724821..57823e4d3 100644 --- a/ml/backend.go +++ b/ml/backend.go @@ -372,6 +372,7 @@ type Context interface { Forward(...Tensor) Context Compute(...Tensor) + ComputeWithNotify(func(), ...Tensor) // notify callback once compute has begun // Reserve is analogous to Compute but rather than executing a // graph, simply preallocates memory. Typically called with a @@ -401,6 +402,8 @@ type Tensor interface { Bytes() []byte Floats() []float32 + SetValueFromIntSlice(s []int32) + Neg(ctx Context) Tensor Add(ctx Context, t2 Tensor) Tensor Sub(ctx Context, t2 Tensor) Tensor diff --git a/ml/backend/ggml/ggml.go b/ml/backend/ggml/ggml.go index 6253c34ed..5fef97cdd 100644 --- a/ml/backend/ggml/ggml.go +++ b/ml/backend/ggml/ggml.go @@ -82,6 +82,7 @@ type Backend struct { // to the name that is used by the model definition tensorLoadTargets map[string][]string + schedMu sync.Mutex // Only one Compute can run at a time sched C.ggml_backend_sched_t schedBackends []C.ggml_backend_t schedBufts []C.ggml_backend_buffer_type_t @@ -758,6 +759,15 @@ func (c *Context) Forward(tensors ...ml.Tensor) ml.Context { } func (c *Context) Compute(tensors ...ml.Tensor) { + c.ComputeWithNotify(nil, tensors...) +} + +func (c *Context) ComputeWithNotify(cb func(), tensors ...ml.Tensor) { + c.b.schedMu.Lock() + defer c.b.schedMu.Unlock() + if cb != nil { + go cb() + } if status := C.ggml_backend_sched_graph_compute_async(c.b.sched, c.graph); status != C.GGML_STATUS_SUCCESS { panic(fmt.Errorf("error computing ggml graph: %v", status)) } @@ -1010,6 +1020,12 @@ func (t *Tensor) Floats() (data []float32) { return } +func (t *Tensor) SetValueFromIntSlice(s []int32) { + if len(s) > 0 { + C.ggml_backend_tensor_set(t.t, unsafe.Pointer(&s[0]), 0, C.ggml_nbytes(t.t)) + } +} + func (t *Tensor) DType() ml.DType { switch t.t._type { case C.GGML_TYPE_F32: diff --git a/model/model.go b/model/model.go index d0fe26d7e..190dedc76 100644 --- a/model/model.go +++ b/model/model.go @@ -64,7 +64,7 @@ type MultimodalProcessor interface { // This function is also responsible for updating MultimodalHash for any Multimodal // that is modified to ensure that there is a unique hash value that accurately // represents the contents. - PostTokenize([]input.Input) ([]input.Input, error) + PostTokenize([]*input.Input) ([]*input.Input, error) } // Base implements the common fields and methods for all models @@ -278,7 +278,7 @@ func canNil(t reflect.Type) bool { t.Kind() == reflect.Slice } -func Forward(ctx ml.Context, m Model, inputs []int32, batch input.Batch) (ml.Tensor, error) { +func Forward(ctx ml.Context, m Model, batch input.Batch) (ml.Tensor, error) { if len(batch.Positions) != len(batch.Sequences) { return nil, fmt.Errorf("length of positions (%v) must match length of seqs (%v)", len(batch.Positions), len(batch.Sequences)) } @@ -287,8 +287,6 @@ func Forward(ctx ml.Context, m Model, inputs []int32, batch input.Batch) (ml.Ten return nil, errors.New("batch size cannot be less than 1") } - batch.Inputs = ctx.Input().FromIntSlice(inputs, len(inputs)) - cache := m.Config().Cache if cache != nil { err := cache.StartForward(ctx, batch, false) @@ -302,7 +300,7 @@ func Forward(ctx ml.Context, m Model, inputs []int32, batch input.Batch) (ml.Ten return nil, err } - ctx.Forward(t).Compute(t) + ctx.Forward(t) return t, nil } diff --git a/model/models/gemma3/model.go b/model/models/gemma3/model.go index a216a5836..a4c90d9cf 100644 --- a/model/models/gemma3/model.go +++ b/model/models/gemma3/model.go @@ -112,8 +112,8 @@ func (m *Model) EncodeMultimodal(ctx ml.Context, multimodalData []byte) ([]input return []input.Multimodal{{Tensor: visionOutputs}}, nil } -func (m *Model) PostTokenize(inputs []input.Input) ([]input.Input, error) { - var result []input.Input +func (m *Model) PostTokenize(inputs []*input.Input) ([]*input.Input, error) { + var result []*input.Input for _, inp := range inputs { if len(inp.Multimodal) == 0 { @@ -122,17 +122,17 @@ func (m *Model) PostTokenize(inputs []input.Input) ([]input.Input, error) { inputMultimodal := inp.Multimodal[0].Tensor result = append(result, - input.Input{Token: 108, SameBatch: inputMultimodal.Dim(1) + 3}, // "\n\n" - input.Input{Token: 255999}, // """ - input.Input{Multimodal: []input.Multimodal{{Tensor: inputMultimodal}}, MultimodalHash: inp.MultimodalHash}, // image data is on the first placeholder + &input.Input{Token: 108, SameBatch: inputMultimodal.Dim(1) + 3}, // "\n\n" + &input.Input{Token: 255999}, // """ + &input.Input{Multimodal: []input.Multimodal{{Tensor: inputMultimodal}}, MultimodalHash: inp.MultimodalHash}, // image data is on the first placeholder ) // add image token placeholders - result = append(result, slices.Repeat([]input.Input{{Token: 0}}, inputMultimodal.Dim(1)-1)...) + result = append(result, slices.Repeat([]*input.Input{{Token: 0}}, inputMultimodal.Dim(1)-1)...) result = append(result, - input.Input{Token: 256000}, // - input.Input{Token: 108}, // "\n\n" + &input.Input{Token: 256000}, // + &input.Input{Token: 108}, // "\n\n" ) } } diff --git a/model/models/llama4/model.go b/model/models/llama4/model.go index e84f5e201..99a898d2d 100644 --- a/model/models/llama4/model.go +++ b/model/models/llama4/model.go @@ -134,16 +134,16 @@ type separator struct { y bool } -func (m *Model) PostTokenize(inputs []input.Input) ([]input.Input, error) { - var result []input.Input +func (m *Model) PostTokenize(inputs []*input.Input) ([]*input.Input, error) { + var result []*input.Input for _, inp := range inputs { if len(inp.Multimodal) == 0 { result = append(result, inp) continue } - var imageInputs []input.Input - imageInputs = append(imageInputs, input.Input{Token: 200080}) // <|image_start|> + var imageInputs []*input.Input + imageInputs = append(imageInputs, &input.Input{Token: 200080}) // <|image_start|> for i, mm := range inp.Multimodal { patchesPerChunk := mm.Tensor.Dim(1) @@ -151,20 +151,20 @@ func (m *Model) PostTokenize(inputs []input.Input) ([]input.Input, error) { if i < len(inp.Multimodal)-1 { separator := mm.Data.(*separator) - imageInputs = append(imageInputs, input.Input{Token: 200092, Multimodal: []input.Multimodal{{Tensor: mm.Tensor}}, MultimodalHash: inp.MultimodalHash, SameBatch: patchesPerChunk}) // <|patch|> - imageInputs = append(imageInputs, slices.Repeat([]input.Input{{Token: 200092}}, patchesPerChunk-1)...) + imageInputs = append(imageInputs, &input.Input{Token: 200092, Multimodal: []input.Multimodal{{Tensor: mm.Tensor}}, MultimodalHash: inp.MultimodalHash, SameBatch: patchesPerChunk}) // <|patch|> + imageInputs = append(imageInputs, slices.Repeat([]*input.Input{{Token: 200092}}, patchesPerChunk-1)...) if separator.x { - imageInputs = append(imageInputs, input.Input{Token: 200084}) // <|tile_x_separator|> + imageInputs = append(imageInputs, &input.Input{Token: 200084}) // <|tile_x_separator|> } if separator.y { - imageInputs = append(imageInputs, input.Input{Token: 200085}) // <|tile_y_separator|> + imageInputs = append(imageInputs, &input.Input{Token: 200085}) // <|tile_y_separator|> } } else { - imageInputs = append(imageInputs, input.Input{Token: 200090}) // <|image|> - imageInputs = append(imageInputs, input.Input{Token: 200092, Multimodal: []input.Multimodal{{Tensor: mm.Tensor}}, MultimodalHash: inp.MultimodalHash, SameBatch: patchesPerChunk}) // <|patch|> - imageInputs = append(imageInputs, slices.Repeat([]input.Input{{Token: 200092}}, patchesPerChunk-1)...) - imageInputs = append(imageInputs, input.Input{Token: 200080}) // <|image_end|> + imageInputs = append(imageInputs, &input.Input{Token: 200090}) // <|image|> + imageInputs = append(imageInputs, &input.Input{Token: 200092, Multimodal: []input.Multimodal{{Tensor: mm.Tensor}}, MultimodalHash: inp.MultimodalHash, SameBatch: patchesPerChunk}) // <|patch|> + imageInputs = append(imageInputs, slices.Repeat([]*input.Input{{Token: 200092}}, patchesPerChunk-1)...) + imageInputs = append(imageInputs, &input.Input{Token: 200080}) // <|image_end|> } } diff --git a/model/models/mistral3/model.go b/model/models/mistral3/model.go index 4ed3d731d..408e54d3d 100644 --- a/model/models/mistral3/model.go +++ b/model/models/mistral3/model.go @@ -133,22 +133,22 @@ func (m *Model) EncodeMultimodal(ctx ml.Context, multimodalData []byte) ([]input // [IMG]...[IMG][IMG_BREAK][IMG]...[IMG][IMG_BREAK][IMG]...[IMG][IMG_END] // Each sequence of [IMG]...[IMG] is a set of patches of vision embeddings // that can be processed together. -func (m *Model) PostTokenize(inputs []input.Input) ([]input.Input, error) { - var result []input.Input +func (m *Model) PostTokenize(inputs []*input.Input) ([]*input.Input, error) { + var result []*input.Input for _, inp := range inputs { if len(inp.Multimodal) == 0 { result = append(result, inp) } else { for i, row := range inp.Multimodal { // [IMG] - result = append(result, input.Input{Token: 10, Multimodal: []input.Multimodal{{Tensor: row.Tensor}}, MultimodalHash: inp.MultimodalHash, SameBatch: row.Tensor.Dim(1)}) - result = append(result, slices.Repeat([]input.Input{{Token: 10}}, row.Tensor.Dim(1)-1)...) + result = append(result, &input.Input{Token: 10, Multimodal: []input.Multimodal{{Tensor: row.Tensor}}, MultimodalHash: inp.MultimodalHash, SameBatch: row.Tensor.Dim(1)}) + result = append(result, slices.Repeat([]*input.Input{{Token: 10}}, row.Tensor.Dim(1)-1)...) if i == len(inp.Multimodal)-1 { // [IMG_END] - result = append(result, input.Input{Token: 13}) + result = append(result, &input.Input{Token: 13}) } else { // [IMG_BREAK] - result = append(result, input.Input{Token: 12}) + result = append(result, &input.Input{Token: 12}) } } } diff --git a/model/models/mllama/model.go b/model/models/mllama/model.go index be7e5daf1..d0ad4670e 100644 --- a/model/models/mllama/model.go +++ b/model/models/mllama/model.go @@ -90,7 +90,7 @@ func (m *Model) EncodeMultimodal(ctx ml.Context, multimodalData []byte) ([]input return []input.Multimodal{{Tensor: projectedOutputs}}, nil } -func (m *Model) PostTokenize(inputs []input.Input) ([]input.Input, error) { +func (m *Model) PostTokenize(inputs []*input.Input) ([]*input.Input, error) { for i := range inputs { if inputs[i].Multimodal != nil { inputs[i].Token = 128256 // <|image|> diff --git a/model/models/qwen25vl/model.go b/model/models/qwen25vl/model.go index 924f3b643..d73f499d2 100644 --- a/model/models/qwen25vl/model.go +++ b/model/models/qwen25vl/model.go @@ -89,8 +89,8 @@ func (m *Model) EncodeMultimodal(ctx ml.Context, multimodalData []byte) ([]input } // PostTokenize arranges Qwen-2.5-VL's inputs for the forward pass -func (m *Model) PostTokenize(inputs []input.Input) ([]input.Input, error) { - var result []input.Input +func (m *Model) PostTokenize(inputs []*input.Input) ([]*input.Input, error) { + var result []*input.Input var ( imageToken int32 = 151655 @@ -112,16 +112,16 @@ func (m *Model) PostTokenize(inputs []input.Input) ([]input.Input, error) { return nil, fmt.Errorf("failed to encode image prompt: %w", err) } for i := range pre { - result = append(result, input.Input{Token: pre[i]}) + result = append(result, &input.Input{Token: pre[i]}) } patchesPerChunk := inp.Multimodal[0].Tensor.Dim(1) // First add the vision start token - result = append(result, input.Input{Token: visionStartToken}) + result = append(result, &input.Input{Token: visionStartToken}) // Add the image token with the multimodal tensor data at the first position - result = append(result, input.Input{ + result = append(result, &input.Input{ Token: imageToken, Multimodal: inp.Multimodal, MultimodalHash: inp.MultimodalHash, @@ -129,9 +129,9 @@ func (m *Model) PostTokenize(inputs []input.Input) ([]input.Input, error) { }) // Add the placeholder tokens for the remaining positions (tokensPerGrid-1) - result = append(result, slices.Repeat([]input.Input{{Token: imageToken}}, patchesPerChunk-1)...) + result = append(result, slices.Repeat([]*input.Input{{Token: imageToken}}, patchesPerChunk-1)...) - result = append(result, input.Input{Token: visionEndToken}) + result = append(result, &input.Input{Token: visionEndToken}) } } diff --git a/runner/ollamarunner/cache.go b/runner/ollamarunner/cache.go index 02827cd05..8f30037c8 100644 --- a/runner/ollamarunner/cache.go +++ b/runner/ollamarunner/cache.go @@ -86,7 +86,7 @@ type InputCacheSlot struct { Id int // Inputs that are stored in the KV cache - Inputs []input.Input + Inputs []*input.Input // is this cache actively being processed as part of a sequence? InUse bool @@ -95,7 +95,7 @@ type InputCacheSlot struct { lastUsed time.Time } -func (c *InputCache) LoadCacheSlot(prompt []input.Input) (*InputCacheSlot, []input.Input, error) { +func (c *InputCache) LoadCacheSlot(prompt []*input.Input) (*InputCacheSlot, []*input.Input, error) { var slot *InputCacheSlot var numPast int32 var err error @@ -146,7 +146,7 @@ func (c *InputCache) LoadCacheSlot(prompt []input.Input) (*InputCacheSlot, []inp return slot, prompt, nil } -func (c *InputCache) findLongestCacheSlot(prompt []input.Input) (*InputCacheSlot, int32, error) { +func (c *InputCache) findLongestCacheSlot(prompt []*input.Input) (*InputCacheSlot, int32, error) { longest := int32(-1) var longestSlot *InputCacheSlot @@ -169,7 +169,7 @@ func (c *InputCache) findLongestCacheSlot(prompt []input.Input) (*InputCacheSlot return longestSlot, longest, nil } -func (c *InputCache) findBestCacheSlot(prompt []input.Input) (*InputCacheSlot, int32, error) { +func (c *InputCache) findBestCacheSlot(prompt []*input.Input) (*InputCacheSlot, int32, error) { oldest := time.Now() var oldestSlot *InputCacheSlot @@ -205,7 +205,7 @@ func (c *InputCache) findBestCacheSlot(prompt []input.Input) (*InputCacheSlot, i if longest > 0 && longestSlot != oldestSlot { slog.Debug("forking cache slot", "src", longestSlot.Id, "dst", oldestSlot.Id, "inputs", longest, "total", len(longestSlot.Inputs)) - oldestSlot.Inputs = make([]input.Input, longest) + oldestSlot.Inputs = make([]*input.Input, longest) copy(oldestSlot.Inputs, longestSlot.Inputs[:longest]) if c.cache != nil { c.cache.CopyPrefix(longestSlot.Id, oldestSlot.Id, longest) @@ -215,7 +215,7 @@ func (c *InputCache) findBestCacheSlot(prompt []input.Input) (*InputCacheSlot, i return oldestSlot, longest, nil } -func countCommonPrefix(a []input.Input, b []input.Input) int32 { +func countCommonPrefix(a []*input.Input, b []*input.Input) int32 { var count int32 for i := range a { @@ -250,7 +250,7 @@ func (c *InputCache) ShiftDiscard(inputLen int32, numKeep int32) int32 { } type ErrReprocessInputs struct { - Inputs []input.Input + Inputs []*input.Input } func (e *ErrReprocessInputs) Error() string { @@ -283,13 +283,13 @@ func (c *InputCache) ShiftCacheSlot(slot *InputCacheSlot, numKeep int32) error { "id", slot.Id, "error", err) // Create new input slice with preserved tokens (numKeep + remaining tokens after discard) - newInputs := make([]input.Input, numKeep+inputLen-(numKeep+discard)) + newInputs := make([]*input.Input, numKeep+inputLen-(numKeep+discard)) copy(newInputs[:numKeep], slot.Inputs[:numKeep]) copy(newInputs[numKeep:], slot.Inputs[numKeep+discard:]) // Reset the cache _ = c.cache.Remove(slot.Id, 0, math.MaxInt32) - slot.Inputs = []input.Input{} + slot.Inputs = []*input.Input{} // Return error with inputs that need to be reprocessed return &ErrReprocessInputs{Inputs: newInputs} diff --git a/runner/ollamarunner/cache_test.go b/runner/ollamarunner/cache_test.go index 6897b5e46..49cb6c547 100644 --- a/runner/ollamarunner/cache_test.go +++ b/runner/ollamarunner/cache_test.go @@ -13,50 +13,50 @@ import ( func TestCountCommon(t *testing.T) { tests := []struct { name string - t1 []input.Input - t2 []input.Input + t1 []*input.Input + t2 []*input.Input expected int32 }{ { name: "Equal", - t1: []input.Input{{Token: 1}, {Token: 2}, {Token: 3}}, - t2: []input.Input{{Token: 1}, {Token: 2}, {Token: 3}}, + t1: []*input.Input{{Token: 1}, {Token: 2}, {Token: 3}}, + t2: []*input.Input{{Token: 1}, {Token: 2}, {Token: 3}}, expected: 3, }, { name: "Prefix", - t1: []input.Input{{Token: 1}}, - t2: []input.Input{{Token: 1}, {Token: 2}, {Token: 3}}, + t1: []*input.Input{{Token: 1}}, + t2: []*input.Input{{Token: 1}, {Token: 2}, {Token: 3}}, expected: 1, }, { name: "Image Prefix", - t1: []input.Input{{MultimodalHash: 1}}, - t2: []input.Input{{MultimodalHash: 1}, {MultimodalHash: 2}, {MultimodalHash: 3}}, + t1: []*input.Input{{MultimodalHash: 1}}, + t2: []*input.Input{{MultimodalHash: 1}, {MultimodalHash: 2}, {MultimodalHash: 3}}, expected: 1, }, { name: "Mixed", - t1: []input.Input{{Token: 1}, {MultimodalHash: 1}}, - t2: []input.Input{{Token: 1}, {MultimodalHash: 1}, {Token: 5}}, + t1: []*input.Input{{Token: 1}, {MultimodalHash: 1}}, + t2: []*input.Input{{Token: 1}, {MultimodalHash: 1}, {Token: 5}}, expected: 2, }, { name: "Mixed, Same Length", - t1: []input.Input{{Token: 1}, {MultimodalHash: 1}}, - t2: []input.Input{{Token: 1}, {MultimodalHash: 2}}, + t1: []*input.Input{{Token: 1}, {MultimodalHash: 1}}, + t2: []*input.Input{{Token: 1}, {MultimodalHash: 2}}, expected: 1, }, { name: "Empty", - t1: []input.Input{}, - t2: []input.Input{{Token: 1}, {Token: 2}, {Token: 3}}, + t1: []*input.Input{}, + t2: []*input.Input{{Token: 1}, {Token: 2}, {Token: 3}}, expected: 0, }, { name: "Both Empty", - t1: []input.Input{}, - t2: []input.Input{}, + t1: []*input.Input{}, + t2: []*input.Input{}, expected: 0, }, } @@ -80,7 +80,7 @@ func TestFindCacheSlot(t *testing.T) { tests := []struct { name string cache InputCache - prompt []input.Input + prompt []*input.Input longest expected best expected }{ @@ -89,18 +89,18 @@ func TestFindCacheSlot(t *testing.T) { cache: InputCache{slots: []InputCacheSlot{ { Id: 0, - Inputs: []input.Input{}, + Inputs: []*input.Input{}, InUse: false, lastUsed: time.Time{}, }, { Id: 1, - Inputs: []input.Input{}, + Inputs: []*input.Input{}, InUse: false, lastUsed: time.Time{}, }, }}, - prompt: []input.Input{{Token: 1}}, + prompt: []*input.Input{{Token: 1}}, longest: expected{result: 0, len: 0}, best: expected{result: 0, len: 0}, }, @@ -109,18 +109,18 @@ func TestFindCacheSlot(t *testing.T) { cache: InputCache{slots: []InputCacheSlot{ { Id: 0, - Inputs: []input.Input{{Token: 1}}, + Inputs: []*input.Input{{Token: 1}}, InUse: false, lastUsed: time.Now().Add(-time.Second), }, { Id: 1, - Inputs: []input.Input{{Token: 1}, {Token: 2}}, + Inputs: []*input.Input{{Token: 1}, {Token: 2}}, InUse: false, lastUsed: time.Now().Add(-2 * time.Second), }, }}, - prompt: []input.Input{{Token: 1}, {Token: 2}}, + prompt: []*input.Input{{Token: 1}, {Token: 2}}, longest: expected{result: 1, len: 2}, best: expected{result: 1, len: 2}, }, @@ -129,18 +129,18 @@ func TestFindCacheSlot(t *testing.T) { cache: InputCache{slots: []InputCacheSlot{ { Id: 0, - Inputs: []input.Input{{Token: 1}, {Token: 2}}, + Inputs: []*input.Input{{Token: 1}, {Token: 2}}, InUse: false, lastUsed: time.Now().Add(-time.Second), }, { Id: 1, - Inputs: []input.Input{}, + Inputs: []*input.Input{}, InUse: false, lastUsed: time.Time{}, }, }}, - prompt: []input.Input{{Token: 2}}, + prompt: []*input.Input{{Token: 2}}, longest: expected{result: 0, len: 0}, best: expected{result: 1, len: 0}, }, @@ -150,19 +150,19 @@ func TestFindCacheSlot(t *testing.T) { slots: []InputCacheSlot{ { Id: 0, - Inputs: []input.Input{{Token: 1}, {Token: 2}}, + Inputs: []*input.Input{{Token: 1}, {Token: 2}}, InUse: false, lastUsed: time.Now().Add(-time.Second), }, { Id: 1, - Inputs: []input.Input{}, + Inputs: []*input.Input{}, InUse: false, lastUsed: time.Time{}, }, }, }, - prompt: []input.Input{{Token: 1}}, + prompt: []*input.Input{{Token: 1}}, longest: expected{result: 0, len: 1}, best: expected{result: 1, len: 1}, }, @@ -171,18 +171,18 @@ func TestFindCacheSlot(t *testing.T) { cache: InputCache{slots: []InputCacheSlot{ { Id: 0, - Inputs: []input.Input{{Token: 1}}, + Inputs: []*input.Input{{Token: 1}}, InUse: false, lastUsed: time.Now().Add(-time.Second), }, { Id: 1, - Inputs: []input.Input{{Token: 1}, {Token: 2}}, + Inputs: []*input.Input{{Token: 1}, {Token: 2}}, InUse: false, lastUsed: time.Now().Add(-2 * time.Second), }, }}, - prompt: []input.Input{{Token: 2}, {Token: 3}}, + prompt: []*input.Input{{Token: 2}, {Token: 3}}, longest: expected{result: 0, len: 0}, best: expected{result: 1, len: 0}, }, @@ -191,18 +191,18 @@ func TestFindCacheSlot(t *testing.T) { cache: InputCache{slots: []InputCacheSlot{ { Id: 0, - Inputs: []input.Input{{Token: 1}, {Token: 2}}, + Inputs: []*input.Input{{Token: 1}, {Token: 2}}, InUse: true, lastUsed: time.Now().Add(-time.Second), }, { Id: 1, - Inputs: []input.Input{{Token: 1}}, + Inputs: []*input.Input{{Token: 1}}, InUse: false, lastUsed: time.Now().Add(-2 * time.Second), }, }}, - prompt: []input.Input{{Token: 1}, {Token: 2}}, + prompt: []*input.Input{{Token: 1}, {Token: 2}}, longest: expected{result: 1, len: 1}, best: expected{result: 1, len: 2}, }, @@ -300,7 +300,7 @@ func TestLoadCacheSlot(t *testing.T) { tests := []struct { name string cache InputCache - prompt []input.Input + prompt []*input.Input wantErr bool expectedSlotId int expectedPrompt int // expected length of remaining prompt @@ -312,19 +312,19 @@ func TestLoadCacheSlot(t *testing.T) { slots: []InputCacheSlot{ { Id: 0, - Inputs: []input.Input{{Token: 1}, {Token: 2}}, + Inputs: []*input.Input{{Token: 1}, {Token: 2}}, InUse: false, lastUsed: time.Now().Add(-time.Second), }, { Id: 1, - Inputs: []input.Input{}, + Inputs: []*input.Input{}, InUse: false, lastUsed: time.Now().Add(-2 * time.Second), }, }, }, - prompt: []input.Input{{Token: 1}, {Token: 2}, {Token: 3}}, + prompt: []*input.Input{{Token: 1}, {Token: 2}, {Token: 3}}, wantErr: false, expectedSlotId: 0, expectedPrompt: 1, // Only token 3 remains @@ -336,19 +336,19 @@ func TestLoadCacheSlot(t *testing.T) { slots: []InputCacheSlot{ { Id: 0, - Inputs: []input.Input{{Token: 1}, {Token: 2}}, + Inputs: []*input.Input{{Token: 1}, {Token: 2}}, InUse: false, lastUsed: time.Now().Add(-time.Second), }, { Id: 1, - Inputs: []input.Input{}, + Inputs: []*input.Input{}, InUse: false, lastUsed: time.Now().Add(-2 * time.Second), }, }, }, - prompt: []input.Input{{Token: 1}, {Token: 2}, {Token: 3}}, + prompt: []*input.Input{{Token: 1}, {Token: 2}, {Token: 3}}, wantErr: false, expectedSlotId: 0, expectedPrompt: 1, // Only token 3 remains @@ -360,13 +360,13 @@ func TestLoadCacheSlot(t *testing.T) { slots: []InputCacheSlot{ { Id: 0, - Inputs: []input.Input{{Token: 1}, {Token: 2}}, + Inputs: []*input.Input{{Token: 1}, {Token: 2}}, InUse: false, lastUsed: time.Now().Add(-time.Second), }, }, }, - prompt: []input.Input{{Token: 1}, {Token: 2}}, + prompt: []*input.Input{{Token: 1}, {Token: 2}}, wantErr: false, expectedSlotId: 0, expectedPrompt: 1, // Should leave 1 token for sampling @@ -378,13 +378,13 @@ func TestLoadCacheSlot(t *testing.T) { slots: []InputCacheSlot{ { Id: 0, - Inputs: []input.Input{{Token: 1}, {Token: 2}}, + Inputs: []*input.Input{{Token: 1}, {Token: 2}}, InUse: true, lastUsed: time.Now().Add(-time.Second), }, }, }, - prompt: []input.Input{{Token: 1}, {Token: 2}, {Token: 3}}, + prompt: []*input.Input{{Token: 1}, {Token: 2}, {Token: 3}}, wantErr: true, expectedSlotId: -1, expectedPrompt: -1, @@ -452,7 +452,7 @@ func TestShiftCacheSlot(t *testing.T) { tests := []struct { name string numCtx int32 - inputs []input.Input + inputs []*input.Input numKeep int32 cacheErr bool wantErr any @@ -461,7 +461,7 @@ func TestShiftCacheSlot(t *testing.T) { { name: "Normal shift", numCtx: 10, - inputs: []input.Input{{Token: 1}, {Token: 2}, {Token: 3}, {Token: 4}, {Token: 5}, {Token: 6}, {Token: 7}, {Token: 8}, {Token: 9}, {Token: 10}}, + inputs: []*input.Input{{Token: 1}, {Token: 2}, {Token: 3}, {Token: 4}, {Token: 5}, {Token: 6}, {Token: 7}, {Token: 8}, {Token: 9}, {Token: 10}}, numKeep: 2, cacheErr: false, // No error wantErr: nil, @@ -470,7 +470,7 @@ func TestShiftCacheSlot(t *testing.T) { { name: "Cache removal fails", numCtx: 10, - inputs: []input.Input{{Token: 1}, {Token: 2}, {Token: 3}, {Token: 4}, {Token: 5}, {Token: 6}, {Token: 7}, {Token: 8}, {Token: 9}, {Token: 10}}, + inputs: []*input.Input{{Token: 1}, {Token: 2}, {Token: 3}, {Token: 4}, {Token: 5}, {Token: 6}, {Token: 7}, {Token: 8}, {Token: 9}, {Token: 10}}, numKeep: 2, cacheErr: true, wantErr: &ErrReprocessInputs{}, @@ -487,7 +487,7 @@ func TestShiftCacheSlot(t *testing.T) { } slot := &InputCacheSlot{ Id: 123, - Inputs: make([]input.Input, len(tt.inputs)), + Inputs: make([]*input.Input, len(tt.inputs)), } copy(slot.Inputs, tt.inputs) diff --git a/runner/ollamarunner/runner.go b/runner/ollamarunner/runner.go index 2f41f68f2..b8605db8c 100644 --- a/runner/ollamarunner/runner.go +++ b/runner/ollamarunner/runner.go @@ -17,6 +17,7 @@ import ( "reflect" "regexp" "runtime" + "runtime/debug" "strconv" "strings" "sync" @@ -51,10 +52,10 @@ type Sequence struct { iBatch int // prompt inputs left to evaluate - inputs []input.Input + inputs []*input.Input // inputs that have been added to a batch but not yet submitted to Forward - pendingInputs []input.Input + pendingInputs []*input.Input // tokens that have been generated but not returned yet (e.g. for stop sequences) pendingResponses []string @@ -182,8 +183,8 @@ func (s *Server) NewSequence(prompt string, images []llm.ImageData, params NewSe // inputs processes the prompt and images into a list of inputs // by splitting the prompt on [img-] tags, tokenizing text and // decoding images -func (s *Server) inputs(prompt string, images []llm.ImageData) ([]input.Input, []ml.Context, multimodalStore, error) { - var inputs []input.Input +func (s *Server) inputs(prompt string, images []llm.ImageData) ([]*input.Input, []ml.Context, multimodalStore, error) { + var inputs []*input.Input var ctxs []ml.Context var mmStore multimodalStore @@ -210,7 +211,7 @@ func (s *Server) inputs(prompt string, images []llm.ImageData) ([]input.Input, [ } for _, t := range tokens { - inputs = append(inputs, input.Input{Token: t}) + inputs = append(inputs, &input.Input{Token: t}) } // image - decode and store @@ -243,7 +244,7 @@ func (s *Server) inputs(prompt string, images []llm.ImageData) ([]input.Input, [ mmStore.addMultimodal(imageEmbeddings) - inputs = append(inputs, input.Input{Multimodal: imageEmbeddings, MultimodalHash: imageHash}) + inputs = append(inputs, &input.Input{Multimodal: imageEmbeddings, MultimodalHash: imageHash}) postTokenize = true } } @@ -259,6 +260,37 @@ func (s *Server) inputs(prompt string, images []llm.ImageData) ([]input.Input, [ return inputs, ctxs, mmStore, nil } +type batchState struct { + // id provides a counter for trace logging batches + id int + + // ctx holds the backend context used for this batch + ctx ml.Context + + // modelOutput holds the outputs from this batch + modelOutput ml.Tensor + + // batchInputs holds the input token pointers which may start as + // placeholders later filled in before calling ctx.Compute + batchInputs []*input.Input + + // batch contains the inputs for a model forward pass + batch input.Batch + + // full set of seqs at the time this batch was initiated + seqs []*Sequence + + // Signaled when this batches inputs are ready and compute can proceed + inputsReadyCh chan struct{} + + // Signaling when Compute is about to begin on this batch, and + // seqs have been updated to prepare for the next batch + computeStartedCh chan struct{} + + // Signaled when this batches outputs are complete and the next batch can proceed + outputsReadyCh chan struct{} +} + type Server struct { // modelPath is the location of the model to be loaded modelPath string @@ -290,6 +322,12 @@ type Server struct { // TODO (jmorganca): make this n_batch batchSize int + // Used to signal a hard failure during async processing which will panic the runner + hardErrCh chan error + + // Simple counter used only for trace logging batches + batchID int + // protects access to everything below this line // this is context state needed for decoding mu sync.Mutex @@ -362,33 +400,66 @@ func (s *Server) removeSequence(seqIndex int, reason llm.DoneReason) { s.seqsSem.Release(1) } +// track batch state between forwardBatch, computeBatch and predictForwardBatch + func (s *Server) run(ctx context.Context) { s.ready.Wait() + var activeBatch batchState for { select { case <-ctx.Done(): return + case err := <-s.hardErrCh: + panic(err) default: - err := s.processBatch() + var err error + activeBatch, err = s.forwardBatch(activeBatch) if err != nil { panic(err) } + go s.computeBatch(activeBatch) } } } -func (s *Server) processBatch() error { +// forwardBatch will calculate a batch. +func (s *Server) forwardBatch(pendingBatch batchState) (nextBatch batchState, err error) { + // If we have a pending batch still processing, wait until Compute has started + // before setting up the next batch so the seqs inputs are ready to receive their + // token values and we get the correct input pointers for the batchInputs + if pendingBatch.ctx != nil { + slog.Log(context.TODO(), logutil.LevelTrace, "forwardBatch waiting for compute to start", "pendingBatch.id", pendingBatch.id) + <-pendingBatch.computeStartedCh + slog.Log(context.TODO(), logutil.LevelTrace, "forwardBatch compute started, setting up next batch", "pendingBatch.id", pendingBatch.id, "id", s.batchID) + nextBatch.inputsReadyCh = pendingBatch.outputsReadyCh // Chain the ouputs from the pending batch to the next inputs batch + } else { + slog.Log(context.TODO(), logutil.LevelTrace, "forwardBatch no pending batch detected", "batchID", s.batchID) + // No pendingBatch, so the inputs will be ready in the seqs immediately + nextBatch.inputsReadyCh = make(chan struct{}, 1) + nextBatch.inputsReadyCh <- struct{}{} + } + s.mu.Lock() for s.allNil() { s.cond.Wait() // Wait until an item is added } defer s.mu.Unlock() - ctx := s.model.Backend().NewContext() - defer ctx.Close() + nextBatch.ctx = s.model.Backend().NewContext() + defer func() { + if err != nil { + nextBatch.ctx.Close() + nextBatch.ctx = nil + } + }() + nextBatch.id = s.batchID + nextBatch.seqs = append([]*Sequence{}, s.seqs...) + nextBatch.computeStartedCh = make(chan struct{}, 1) + nextBatch.outputsReadyCh = make(chan struct{}, 1) - var batchInputs []int32 + // Prepare the seqs and batch, but defer the input token values as we may not be ready yet + var batchInputs []*input.Input var batch input.Batch resumeSeq := -1 @@ -396,7 +467,6 @@ func (s *Server) processBatch() error { for range s.seqs { seqIdx = (seqIdx + 1) % len(s.seqs) seq := s.seqs[seqIdx] - if seq == nil { continue } @@ -404,12 +474,13 @@ func (s *Server) processBatch() error { // if past the num predict limit if seq.numPredict > 0 && seq.numPredicted >= seq.numPredict { s.removeSequence(seqIdx, llm.DoneReasonLength) + nextBatch.seqs[seqIdx] = nil continue } if !s.cache.enabled { seq.inputs = append(seq.cache.Inputs, seq.inputs...) - seq.cache.Inputs = []input.Input{} + seq.cache.Inputs = []*input.Input{} } batchSize := s.batchSize @@ -442,25 +513,28 @@ func (s *Server) processBatch() error { break } - err := s.cache.ShiftCacheSlot(seq.cache, seq.numKeep) + err = s.cache.ShiftCacheSlot(seq.cache, seq.numKeep) if err != nil { var reprocess *ErrReprocessInputs if errors.As(err, &reprocess) { // Prepend these inputs to the sequence's inputs queue for reprocessing seq.inputs = append(reprocess.Inputs, seq.inputs...) // Skip this sequence but continue processing the rest + nextBatch.seqs[seqIdx] = nil // clear this sequence for this batch + err = nil continue } else { - return err + return } } } - batchInputs = append(batchInputs, inp.Token) + batchInputs = append(batchInputs, seq.inputs[i]) if inp.Multimodal != nil { - mm, err := seq.mmStore.getMultimodal(s.model.Backend(), ctx, inp.Multimodal, false) + var mm []input.Multimodal + mm, err = seq.mmStore.getMultimodal(s.model.Backend(), nextBatch.ctx, inp.Multimodal, false) if err != nil { - return err + return } batch.Multimodal = append(batch.Multimodal, input.MultimodalIndex{Index: len(batchInputs) - 1, Multimodal: mm}) } @@ -472,6 +546,7 @@ func (s *Server) processBatch() error { if i+1 == len(seq.inputs) { batch.Outputs = append(batch.Outputs, int32(len(batchInputs)-1)) } + slog.Log(context.TODO(), logutil.LevelTrace, "forwardBatch iBatch", "batchID", s.batchID, "seqIdx", seqIdx, "seq.iBatch", seq.iBatch, "i+1", i+1, "len(seq.inputs)", len(seq.inputs)) seq.pendingInputs = append(seq.pendingInputs, inp) } @@ -485,36 +560,129 @@ func (s *Server) processBatch() error { } if len(batchInputs) == 0 { - return nil + slog.Log(context.TODO(), logutil.LevelTrace, "forwardBatch no batchInputs, going idle", "batchID", s.batchID) + nextBatch.ctx.Close() + nextBatch.ctx = nil + return } + s.batchID++ - modelOutput, err := model.Forward(ctx, s.model, batchInputs, batch) + // Actual batchInputs values will be injected into the batch.Inputs tensor before calling Compute + batch.Inputs = nextBatch.ctx.Input().Empty(ml.DTypeI32, len(batchInputs)) + nextBatch.modelOutput, err = model.Forward(nextBatch.ctx, s.model, batch) if err != nil { - return fmt.Errorf("failed to decode batch: %w", err) + err = fmt.Errorf("failed to build graph: %w", err) + return + } + nextBatch.batchInputs = batchInputs + nextBatch.batch = batch + + return +} + +// Async processing of the next batch +func (s *Server) computeBatch(activeBatch batchState) { + if activeBatch.ctx == nil { + // Nothing to compute + return + } + defer activeBatch.ctx.Close() + + // Wait until inputs are ready + slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: waiting for inputs to be ready", "batchID", activeBatch.id) + <-activeBatch.inputsReadyCh + slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: inputs are ready", "batchID", activeBatch.id) + + // Once we complete, signal the next batch of inputs are ready + // This will unblock the next computeBatch, or forwardBatch if new seqs come in + defer func() { + slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: outputs are ready", "batchID", activeBatch.id) + activeBatch.outputsReadyCh <- struct{}{} + }() + + s.mu.Lock() + + // Gather the actual input token values now that they're ready + batchInputs := make([]int32, len(activeBatch.batchInputs)) + for i := range batchInputs { + batchInputs[i] = activeBatch.batchInputs[i].Token } - logits := modelOutput.Floats() - + // Now we run part of the decoding algorithm to adjust the seq.inputs with placeholder tokens + // so that forwardBatch can build a batchInputs set which will eventually contain the actual + // decoded tokens. + nextBatchTokens := make([]*input.Input, len(s.seqs)) + iBatches := make([]int, len(s.seqs)) // Record the iBatch values before releasing the lock for i, seq := range s.seqs { + iBatches[i] = -1 if seq == nil { continue } + // Skip over any newly added or skipped sequences + if activeBatch.seqs[i] == nil { + continue + } - // After calling Forward, pending inputs are now in the cache + // Detect if the sequence we're processing has already been completed and replaced + // with a new sequence + if seq != activeBatch.seqs[i] { + slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: sequence replaced, discarding its results", "batchID", activeBatch.id, "seqIdx", i) + continue + } + + // Pending inputs will actually be in the cache after we call Compute. + // However, we have already resolved any placeholder tokens. + // + // It's possible for incoming sequences to look at the values that we've + // added to the cache here and start relying on them before we've done + // the computation. This is OK as long as we ensure that this batch's + // computation happens before any future batch's and we never fail + // (unless we take down the whole runner). if len(seq.pendingInputs) > 0 { seq.cache.Inputs = append(seq.cache.Inputs, seq.pendingInputs...) - seq.pendingInputs = []input.Input{} + seq.pendingInputs = []*input.Input{} } // don't sample prompt processing if len(seq.inputs) != 0 { if !s.cache.enabled { - return errors.New("caching disabled but unable to fit entire input in a batch") + s.hardErrCh <- fmt.Errorf("caching disabled but unable to fit entire input in a batch") + s.mu.Unlock() + return } continue } seq.numPredicted++ + nextToken := &input.Input{Token: 0} // placeholder we'll fill in after Compute/Floats + seq.inputs = []*input.Input{nextToken} + nextBatchTokens[i] = nextToken + iBatches[i] = seq.iBatch + } + + // At this point the seqs are ready for forwardBatch to move forward so unblock + s.mu.Unlock() + + activeBatch.batch.Inputs.SetValueFromIntSlice(batchInputs) + activeBatch.ctx.ComputeWithNotify( + func() { + slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: signaling computeStartedCh", "batchID", activeBatch.id) + activeBatch.computeStartedCh <- struct{}{} + }, + activeBatch.modelOutput) + logits := activeBatch.modelOutput.Floats() + + slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: logits ready", "batchID", activeBatch.id) + + s.mu.Lock() + defer s.mu.Unlock() + + slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: decoding", "batchID", activeBatch.id) + for i, seq := range s.seqs { + if seq == nil || nextBatchTokens[i] == nil { + continue + } + if seq.numPredicted == 1 { seq.startGenerationTime = time.Now() } @@ -522,36 +690,38 @@ func (s *Server) processBatch() error { // if done processing the prompt, generate an embedding and return if seq.embeddingOnly { // TODO(jessegross): Embedding support - slog.Warn("generation of embedding outputs not yet supported") + slog.Warn("generation of embedding outputs not yet supported", "id", activeBatch.id, "seqIdx", i) s.removeSequence(i, llm.DoneReasonStop) continue } // sample a token - vocabSize := len(logits) / len(batch.Outputs) - - token, err := seq.sampler.Sample(logits[seq.iBatch*vocabSize : (seq.iBatch+1)*vocabSize]) + vocabSize := len(logits) / len(activeBatch.batch.Outputs) + slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: vocab details", "batchID", activeBatch.id, "seqIdx", i, "len(logits)", len(logits), "len(activeBatch.batch.Outputs)", len(activeBatch.batch.Outputs), "vocabSize", vocabSize, "iBatches", iBatches) + token, err := seq.sampler.Sample(logits[iBatches[i]*vocabSize : (iBatches[i]+1)*vocabSize]) if err != nil { - return fmt.Errorf("failed to sample token: %w", err) + s.hardErrCh <- fmt.Errorf("failed to sample token: %w", err) + return } + nextBatchTokens[i].Token = token + // if it's an end of sequence token, break if s.model.(model.TextProcessor).Is(token, model.SpecialEOS) { // TODO (jmorganca): we should send this back // as it's important for the /api/generate context // seq.responses <- piece - + slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: EOS", "batchID", activeBatch.id, "seqIdx", i) s.removeSequence(i, llm.DoneReasonStop) continue } piece, err := s.model.(model.TextProcessor).Decode([]int32{token}) if err != nil { - return err + s.hardErrCh <- fmt.Errorf("failed to decode token: %w", err) + return } - seq.inputs = []input.Input{{Token: token}} - seq.pendingResponses = append(seq.pendingResponses, piece) sequence := strings.Join(seq.pendingResponses, "") @@ -575,6 +745,7 @@ func (s *Server) processBatch() error { if tokenTruncated || origLen == newLen { tokenLen-- } + seq.cache.Inputs = seq.cache.Inputs[:tokenLen] s.removeSequence(i, llm.DoneReasonStop) @@ -593,8 +764,6 @@ func (s *Server) processBatch() error { s.removeSequence(i, llm.DoneReasonConnectionClosed) } } - - return nil } func (s *Server) completion(w http.ResponseWriter, r *http.Request) { @@ -736,7 +905,10 @@ func (s *Server) reserveWorstCaseGraph() error { defer ctx.Close() var err error - inputs := make([]input.Input, s.batchSize) + inputs := make([]*input.Input, s.batchSize) + for i := range inputs { + inputs[i] = &input.Input{} + } mmStore := newMultimodalStore() // Multimodal strategy: @@ -778,8 +950,11 @@ func (s *Server) reserveWorstCaseGraph() error { } if len(inputs) < s.batchSize { - newInputs := make([]input.Input, s.batchSize) + newInputs := make([]*input.Input, s.batchSize) copy(newInputs, inputs) + for i := len(inputs); i < s.batchSize; i++ { + newInputs[i] = &input.Input{} + } inputs = newInputs } } @@ -842,6 +1017,7 @@ func (s *Server) allocModel( // Convert memory allocation panics to errors defer func() { if r := recover(); r != nil { + debug.PrintStack() if err, ok := r.(error); ok { panicErr = err } else { @@ -1011,6 +1187,7 @@ func Execute(args []string) error { server := &Server{ modelPath: *mpath, status: llm.ServerStatusLaunched, + hardErrCh: make(chan error, 1), } server.cond = sync.NewCond(&server.mu) From 66e73809a1eff2568711739541474f55222d31d3 Mon Sep 17 00:00:00 2001 From: alpha-nerd-nomyo Date: Sun, 31 Aug 2025 22:49:10 +0200 Subject: [PATCH 39/45] readme: add NOMYO Router to community integrations (#12129) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 39283fa34..26742e8a0 100644 --- a/README.md +++ b/README.md @@ -602,6 +602,7 @@ See the [API documentation](./docs/api.md) for all endpoints. - [UnityCodeLama](https://github.com/HardCodeDev777/UnityCodeLama) (Unity Edtior tool to analyze scripts via Ollama) - [NativeMind](https://github.com/NativeMindBrowser/NativeMindExtension) (Private, on-device AI Assistant, no cloud dependencies) - [GMAI - Gradle Managed AI](https://gmai.premex.se/) (Gradle plugin for automated Ollama lifecycle management during build phases) +- [NOMYO Router](https://github.com/nomyo-ai/nomyo-router) (A transparent Ollama proxy with model deployment aware routing which auto-manages multiple Ollama instances in a given network) ### Supported backends From e42300f25b646c2b261261758edbacebd40f00f0 Mon Sep 17 00:00:00 2001 From: pxwanglu Date: Mon, 1 Sep 2025 07:26:11 +0800 Subject: [PATCH 40/45] ml: fix struct field name in comment (#12123) --- ml/backend.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ml/backend.go b/ml/backend.go index 57823e4d3..154a0f1b5 100644 --- a/ml/backend.go +++ b/ml/backend.go @@ -266,7 +266,7 @@ func (m DeviceMemory) LogValue() slog.Value { // allocation is guaranteed to be provided so that if it failed, the caller can // accommodate that to make forward progress. type BackendMemory struct { - // InputsWeights are always located on the CPU and cannot be moved + // InputWeights are always located on the CPU and cannot be moved InputWeights Memory // CPU model components are located in system memory. This does not From 0cc90a8186359a197aa10d1dad361bc81b6ec2b2 Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Tue, 2 Sep 2025 09:43:55 -0700 Subject: [PATCH 41/45] harden uncaught exception registration (#12120) --- ...rden-uncaught-exception-registration.patch | 28 +++++++++++++++++++ ml/backend/ggml/ggml/src/ggml.cpp | 8 ++++-- 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 llama/patches/0025-harden-uncaught-exception-registration.patch diff --git a/llama/patches/0025-harden-uncaught-exception-registration.patch b/llama/patches/0025-harden-uncaught-exception-registration.patch new file mode 100644 index 000000000..d5fc2598c --- /dev/null +++ b/llama/patches/0025-harden-uncaught-exception-registration.patch @@ -0,0 +1,28 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Daniel Hiltgen +Date: Fri, 29 Aug 2025 16:53:08 -0700 +Subject: [PATCH] harden uncaught exception registration + +--- + ggml/src/ggml.cpp | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/ggml/src/ggml.cpp b/ggml/src/ggml.cpp +index 0d388d45..f5bcb446 100644 +--- a/ggml/src/ggml.cpp ++++ b/ggml/src/ggml.cpp +@@ -19,8 +19,12 @@ static bool ggml_uncaught_exception_init = []{ + return false; + } + const auto prev{std::get_terminate()}; +- GGML_ASSERT(prev != ggml_uncaught_exception); +- previous_terminate_handler = prev; ++ // GGML_ASSERT(prev != ggml_uncaught_exception); ++ if (prev != ggml_uncaught_exception) { ++ previous_terminate_handler = prev; ++ } else { ++ GGML_LOG_WARN("%s double registration of ggml_uncaught_exception\n", __func__); ++ } + std::set_terminate(ggml_uncaught_exception); + return true; + }(); diff --git a/ml/backend/ggml/ggml/src/ggml.cpp b/ml/backend/ggml/ggml/src/ggml.cpp index 0d388d455..f5bcb446d 100644 --- a/ml/backend/ggml/ggml/src/ggml.cpp +++ b/ml/backend/ggml/ggml/src/ggml.cpp @@ -19,8 +19,12 @@ static bool ggml_uncaught_exception_init = []{ return false; } const auto prev{std::get_terminate()}; - GGML_ASSERT(prev != ggml_uncaught_exception); - previous_terminate_handler = prev; + // GGML_ASSERT(prev != ggml_uncaught_exception); + if (prev != ggml_uncaught_exception) { + previous_terminate_handler = prev; + } else { + GGML_LOG_WARN("%s double registration of ggml_uncaught_exception\n", __func__); + } std::set_terminate(ggml_uncaught_exception); return true; }(); From 8149a3c86e3dca30b4883bf581757402e2f246f5 Mon Sep 17 00:00:00 2001 From: Jesse Gross Date: Tue, 2 Sep 2025 10:47:33 -0700 Subject: [PATCH 42/45] llm: Avoid underflow in free memory logging If a GPU's free memory is less than the reserved amount, we might get an underflow. Since it is an unsigned uint64, we print this as a large number rather than the more correct 0. This only affects logging, the actual layout code already handles this correctly. Bug #12138 --- llm/server.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/llm/server.go b/llm/server.go index b9ffdc6c1..b8d3cdd3d 100644 --- a/llm/server.go +++ b/llm/server.go @@ -678,8 +678,12 @@ func (s *ollamaServer) Load(ctx context.Context, gpus discover.GpuInfoList, requ if !(len(gpus) == 1 && gpus[0].Library == "cpu") { for _, gpu := range gpus { + available := gpu.FreeMemory - envconfig.GpuOverhead() - gpu.MinimumMemory + if gpu.FreeMemory < envconfig.GpuOverhead()+gpu.MinimumMemory { + available = 0 + } slog.Info("gpu memory", "id", gpu.ID, - "available", format.HumanBytes2(gpu.FreeMemory-envconfig.GpuOverhead()-gpu.MinimumMemory), + "available", format.HumanBytes2(available), "free", format.HumanBytes2(gpu.FreeMemory), "minimum", format.HumanBytes2(gpu.MinimumMemory), "overhead", format.HumanBytes2(envconfig.GpuOverhead())) From fb92b61754ed1ec1d9678564d18c202b32980589 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Tue, 2 Sep 2025 13:09:12 -0700 Subject: [PATCH 43/45] logutil: add Trace and TraceContext helpers (#12110) --- harmony/harmonyparser.go | 5 ++--- llm/server.go | 2 +- logutil/logutil.go | 9 +++++++++ ml/backend/ggml/ggml.go | 6 +++--- model/bytepairencoding.go | 5 ++--- model/model.go | 4 +--- model/sentencepiece.go | 9 ++++----- 7 files changed, 22 insertions(+), 18 deletions(-) diff --git a/harmony/harmonyparser.go b/harmony/harmonyparser.go index e72496614..a51819dda 100644 --- a/harmony/harmonyparser.go +++ b/harmony/harmonyparser.go @@ -1,7 +1,6 @@ package harmony import ( - "context" "fmt" "log/slog" "strings" @@ -292,7 +291,7 @@ func (h *HarmonyMessageHandler) AddContent(content string, toolParser *HarmonyTo for _, event := range events { switch event := event.(type) { case HarmonyEventHeaderComplete: - slog.Log(context.TODO(), logutil.LevelTrace, "harmony event header complete", "header", event.Header) + logutil.Trace("harmony event header complete", "header", event.Header) switch event.Header.Channel { case "analysis": if event.Header.Recipient != "" { @@ -315,7 +314,7 @@ func (h *HarmonyMessageHandler) AddContent(content string, toolParser *HarmonyTo h.state = harmonyMessageState_Normal } case HarmonyEventContentEmitted: - slog.Log(context.TODO(), logutil.LevelTrace, "harmony event content", "content", event.Content, "state", h.state) + logutil.Trace("harmony event content", "content", event.Content, "state", h.state) if h.state == harmonyMessageState_Normal { contentSb.WriteString(event.Content) } else if h.state == harmonyMessageState_Thinking { diff --git a/llm/server.go b/llm/server.go index b8d3cdd3d..664a69fb3 100644 --- a/llm/server.go +++ b/llm/server.go @@ -865,7 +865,7 @@ func (s *ollamaServer) createLayout(systemInfo discover.SystemInfo, systemGPUs d } layers[i] += memory.CPU.Weights[i].Size layers[i] += memory.CPU.Cache[i].Size - slog.Log(context.TODO(), logutil.LevelTrace, "layer to assign", "layer", i, "size", format.HumanBytes2(layers[i])) + logutil.Trace("layer to assign", "layer", i, "size", format.HumanBytes2(layers[i])) } gpuLayers := ml.GPULayersList{} diff --git a/logutil/logutil.go b/logutil/logutil.go index 406caf540..fff277b84 100644 --- a/logutil/logutil.go +++ b/logutil/logutil.go @@ -1,6 +1,7 @@ package logutil import ( + "context" "io" "log/slog" "path/filepath" @@ -27,3 +28,11 @@ func NewLogger(w io.Writer, level slog.Level) *slog.Logger { }, })) } + +func Trace(msg string, args ...any) { + slog.Log(context.TODO(), LevelTrace, msg, args...) +} + +func TraceContext(ctx context.Context, msg string, args ...any) { + slog.Log(ctx, LevelTrace, msg, args...) +} diff --git a/ml/backend/ggml/ggml.go b/ml/backend/ggml/ggml.go index 5fef97cdd..931386d56 100644 --- a/ml/backend/ggml/ggml.go +++ b/ml/backend/ggml/ggml.go @@ -271,7 +271,7 @@ func New(modelPath string, params ml.BackendParams) (ml.Backend, error) { tt := C.ggml_new_tensor(ctxs[bt], kind, C.int(len(t.source.Shape)), (*C.int64_t)(unsafe.Pointer(&t.source.Shape[0]))) C.ggml_set_name(tt, cname) - slog.Log(context.TODO(), logutil.LevelTrace, "created tensor", "name", name, "shape", t.source.Shape, "dtype", t.source.Kind, "buffer_type", C.GoString(C.ggml_backend_buft_name(bt))) + logutil.Trace("created tensor", "name", name, "shape", t.source.Shape, "dtype", t.source.Kind, "buffer_type", C.GoString(C.ggml_backend_buft_name(bt))) size := pad(C.ggml_backend_buft_get_alloc_size(bt, tt), C.ggml_backend_buft_get_alignment(bt)) if layer == -1 { @@ -378,7 +378,7 @@ func New(modelPath string, params ml.BackendParams) (ml.Backend, error) { } for bs := range maps.Values(bbs) { - slog.Log(context.TODO(), logutil.LevelTrace, "model weights", "buffer", C.GoString(C.ggml_backend_buffer_name(bs)), + logutil.Trace("model weights", "buffer", C.GoString(C.ggml_backend_buffer_name(bs)), "size", format.HumanBytes2(uint64(C.ggml_backend_buffer_get_size(bs)))) } @@ -811,7 +811,7 @@ func (c *Context) Reserve() { } } - slog.Log(context.TODO(), logutil.LevelTrace, "compute graph", "backend", C.GoString(C.ggml_backend_name(c.b.schedBackends[i])), + logutil.Trace("compute graph", "backend", C.GoString(C.ggml_backend_name(c.b.schedBackends[i])), "buffer_type", C.GoString(C.ggml_backend_buft_name(c.b.schedBufts[i])), "size", format.HumanBytes2(uint64(bufferStatus.size))) } diff --git a/model/bytepairencoding.go b/model/bytepairencoding.go index e4083dfce..b2cb11325 100644 --- a/model/bytepairencoding.go +++ b/model/bytepairencoding.go @@ -2,7 +2,6 @@ package model import ( "cmp" - "context" "fmt" "iter" "log/slog" @@ -202,7 +201,7 @@ func (bpe BytePairEncoding) Encode(s string, addSpecial bool) ([]int32, error) { } } - slog.Log(context.TODO(), logutil.LevelTrace, "encoded", "string", s, "ids", ids) + logutil.Trace("encoded", "string", s, "ids", ids) if addSpecial && len(ids) > 0 { ids = bpe.vocab.addSpecials(ids) @@ -243,6 +242,6 @@ func (bpe BytePairEncoding) Decode(ids []int32) (string, error) { } } - slog.Log(context.TODO(), logutil.LevelTrace, "decoded", "string", sb.String(), "from", lazyIdsString{ids: ids}) + logutil.Trace("decoded", "string", sb.String(), "from", lazyIdsString{ids: ids}) return sb.String(), nil } diff --git a/model/model.go b/model/model.go index 190dedc76..30754143a 100644 --- a/model/model.go +++ b/model/model.go @@ -1,12 +1,10 @@ package model import ( - "context" "errors" "fmt" _ "image/jpeg" _ "image/png" - "log/slog" "os" "reflect" "strconv" @@ -198,7 +196,7 @@ func populateFields(base Base, v reflect.Value, tags ...Tag) reflect.Value { names := fn(tagsCopy) for _, name := range names { if tensor := base.Backend().Get(strings.Join(name, ".")); tensor != nil { - slog.Log(context.TODO(), logutil.LevelTrace, "found tensor", "", tensor) + logutil.Trace("found tensor", "", tensor) vv.Set(reflect.ValueOf(tensor)) break } diff --git a/model/sentencepiece.go b/model/sentencepiece.go index 7d725f04f..4300f45f5 100644 --- a/model/sentencepiece.go +++ b/model/sentencepiece.go @@ -2,7 +2,6 @@ package model import ( "container/heap" - "context" "fmt" "log/slog" "strconv" @@ -25,7 +24,7 @@ func (spm SentencePieceModel) Vocabulary() *Vocabulary { } func NewSentencePieceModel(vocab *Vocabulary) SentencePieceModel { - slog.Log(context.TODO(), logutil.LevelTrace, "Tokens", "num tokens", len(vocab.Values), "vals", vocab.Values[:5], "scores", vocab.Scores[:5], "types", vocab.Types[:5]) + logutil.Trace("Tokens", "num tokens", len(vocab.Values), "vals", vocab.Values[:5], "scores", vocab.Scores[:5], "types", vocab.Types[:5]) counter := map[int]int{} var maxTokenLen int @@ -39,7 +38,7 @@ func NewSentencePieceModel(vocab *Vocabulary) SentencePieceModel { } } - slog.Log(context.TODO(), logutil.LevelTrace, "Token counts", "normal", counter[TOKEN_TYPE_NORMAL], "unknown", counter[TOKEN_TYPE_UNKNOWN], "control", counter[TOKEN_TYPE_CONTROL], + logutil.Trace("Token counts", "normal", counter[TOKEN_TYPE_NORMAL], "unknown", counter[TOKEN_TYPE_UNKNOWN], "control", counter[TOKEN_TYPE_CONTROL], "user defined", counter[TOKEN_TYPE_USER_DEFINED], "unused", counter[TOKEN_TYPE_UNUSED], "byte", counter[TOKEN_TYPE_BYTE], "max token len", maxTokenLen) @@ -182,7 +181,7 @@ func (spm SentencePieceModel) Encode(s string, addSpecial bool) ([]int32, error) } } - slog.Log(context.TODO(), logutil.LevelTrace, "encoded", "string", s, "ids", ids) + logutil.Trace("encoded", "string", s, "ids", ids) if addSpecial && len(ids) > 0 { ids = spm.vocab.addSpecials(ids) @@ -246,6 +245,6 @@ func (spm SentencePieceModel) Decode(ids []int32) (string, error) { } } - slog.Log(context.TODO(), logutil.LevelTrace, "decoded", "ids", ids, "string", sb.String()) + logutil.Trace("decoded", "ids", ids, "string", sb.String()) return sb.String(), nil } From b3e6120736e45cc47ed96fe46c8cf418cb3d8cff Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Wed, 3 Sep 2025 17:24:39 -0700 Subject: [PATCH 44/45] more logutil.Trace (#12177) --- runner/ollamarunner/runner.go | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/runner/ollamarunner/runner.go b/runner/ollamarunner/runner.go index b8605db8c..9b54a3720 100644 --- a/runner/ollamarunner/runner.go +++ b/runner/ollamarunner/runner.go @@ -429,12 +429,12 @@ func (s *Server) forwardBatch(pendingBatch batchState) (nextBatch batchState, er // before setting up the next batch so the seqs inputs are ready to receive their // token values and we get the correct input pointers for the batchInputs if pendingBatch.ctx != nil { - slog.Log(context.TODO(), logutil.LevelTrace, "forwardBatch waiting for compute to start", "pendingBatch.id", pendingBatch.id) + logutil.Trace("forwardBatch waiting for compute to start", "pendingBatch.id", pendingBatch.id) <-pendingBatch.computeStartedCh - slog.Log(context.TODO(), logutil.LevelTrace, "forwardBatch compute started, setting up next batch", "pendingBatch.id", pendingBatch.id, "id", s.batchID) + logutil.Trace("forwardBatch compute started, setting up next batch", "pendingBatch.id", pendingBatch.id, "id", s.batchID) nextBatch.inputsReadyCh = pendingBatch.outputsReadyCh // Chain the ouputs from the pending batch to the next inputs batch } else { - slog.Log(context.TODO(), logutil.LevelTrace, "forwardBatch no pending batch detected", "batchID", s.batchID) + logutil.Trace("forwardBatch no pending batch detected", "batchID", s.batchID) // No pendingBatch, so the inputs will be ready in the seqs immediately nextBatch.inputsReadyCh = make(chan struct{}, 1) nextBatch.inputsReadyCh <- struct{}{} @@ -546,7 +546,7 @@ func (s *Server) forwardBatch(pendingBatch batchState) (nextBatch batchState, er if i+1 == len(seq.inputs) { batch.Outputs = append(batch.Outputs, int32(len(batchInputs)-1)) } - slog.Log(context.TODO(), logutil.LevelTrace, "forwardBatch iBatch", "batchID", s.batchID, "seqIdx", seqIdx, "seq.iBatch", seq.iBatch, "i+1", i+1, "len(seq.inputs)", len(seq.inputs)) + logutil.Trace("forwardBatch iBatch", "batchID", s.batchID, "seqIdx", seqIdx, "seq.iBatch", seq.iBatch, "i+1", i+1, "len(seq.inputs)", len(seq.inputs)) seq.pendingInputs = append(seq.pendingInputs, inp) } @@ -560,7 +560,7 @@ func (s *Server) forwardBatch(pendingBatch batchState) (nextBatch batchState, er } if len(batchInputs) == 0 { - slog.Log(context.TODO(), logutil.LevelTrace, "forwardBatch no batchInputs, going idle", "batchID", s.batchID) + logutil.Trace("forwardBatch no batchInputs, going idle", "batchID", s.batchID) nextBatch.ctx.Close() nextBatch.ctx = nil return @@ -589,14 +589,14 @@ func (s *Server) computeBatch(activeBatch batchState) { defer activeBatch.ctx.Close() // Wait until inputs are ready - slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: waiting for inputs to be ready", "batchID", activeBatch.id) + logutil.Trace("computeBatch: waiting for inputs to be ready", "batchID", activeBatch.id) <-activeBatch.inputsReadyCh - slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: inputs are ready", "batchID", activeBatch.id) + logutil.Trace("computeBatch: inputs are ready", "batchID", activeBatch.id) // Once we complete, signal the next batch of inputs are ready // This will unblock the next computeBatch, or forwardBatch if new seqs come in defer func() { - slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: outputs are ready", "batchID", activeBatch.id) + logutil.Trace("computeBatch: outputs are ready", "batchID", activeBatch.id) activeBatch.outputsReadyCh <- struct{}{} }() @@ -626,7 +626,7 @@ func (s *Server) computeBatch(activeBatch batchState) { // Detect if the sequence we're processing has already been completed and replaced // with a new sequence if seq != activeBatch.seqs[i] { - slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: sequence replaced, discarding its results", "batchID", activeBatch.id, "seqIdx", i) + logutil.Trace("computeBatch: sequence replaced, discarding its results", "batchID", activeBatch.id, "seqIdx", i) continue } @@ -666,18 +666,18 @@ func (s *Server) computeBatch(activeBatch batchState) { activeBatch.batch.Inputs.SetValueFromIntSlice(batchInputs) activeBatch.ctx.ComputeWithNotify( func() { - slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: signaling computeStartedCh", "batchID", activeBatch.id) + logutil.Trace("computeBatch: signaling computeStartedCh", "batchID", activeBatch.id) activeBatch.computeStartedCh <- struct{}{} }, activeBatch.modelOutput) logits := activeBatch.modelOutput.Floats() - slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: logits ready", "batchID", activeBatch.id) + logutil.Trace("computeBatch: logits ready", "batchID", activeBatch.id) s.mu.Lock() defer s.mu.Unlock() - slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: decoding", "batchID", activeBatch.id) + logutil.Trace("computeBatch: decoding", "batchID", activeBatch.id) for i, seq := range s.seqs { if seq == nil || nextBatchTokens[i] == nil { continue @@ -697,7 +697,7 @@ func (s *Server) computeBatch(activeBatch batchState) { // sample a token vocabSize := len(logits) / len(activeBatch.batch.Outputs) - slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: vocab details", "batchID", activeBatch.id, "seqIdx", i, "len(logits)", len(logits), "len(activeBatch.batch.Outputs)", len(activeBatch.batch.Outputs), "vocabSize", vocabSize, "iBatches", iBatches) + logutil.Trace("computeBatch: vocab details", "batchID", activeBatch.id, "seqIdx", i, "len(logits)", len(logits), "len(activeBatch.batch.Outputs)", len(activeBatch.batch.Outputs), "vocabSize", vocabSize, "iBatches", iBatches) token, err := seq.sampler.Sample(logits[iBatches[i]*vocabSize : (iBatches[i]+1)*vocabSize]) if err != nil { s.hardErrCh <- fmt.Errorf("failed to sample token: %w", err) @@ -711,7 +711,7 @@ func (s *Server) computeBatch(activeBatch batchState) { // TODO (jmorganca): we should send this back // as it's important for the /api/generate context // seq.responses <- piece - slog.Log(context.TODO(), logutil.LevelTrace, "computeBatch: EOS", "batchID", activeBatch.id, "seqIdx", i) + logutil.Trace("computeBatch: EOS", "batchID", activeBatch.id, "seqIdx", i) s.removeSequence(i, llm.DoneReasonStop) continue } From 5994e8e8fdaca3815d5a49f27d3fab33ac9ef51f Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Thu, 4 Sep 2025 09:09:07 -0700 Subject: [PATCH 45/45] embedding gemma model (#12181) * ollama: add embeddings --- model/bytepairencoding.go | 3 +- model/model.go | 5 ++ model/models/gemma3/embed.go | 73 +++++++++++++++++++++++++ model/models/gemma3/model.go | 7 ++- model/models/gemma3/model_text.go | 9 ++-- model/sentencepiece.go | 3 +- model/vocabulary.go | 4 +- runner/ollamarunner/cache.go | 6 ++- runner/ollamarunner/cache_test.go | 2 +- runner/ollamarunner/runner.go | 90 ++++++++++++++++++++++++++----- 10 files changed, 175 insertions(+), 27 deletions(-) create mode 100644 model/models/gemma3/embed.go diff --git a/model/bytepairencoding.go b/model/bytepairencoding.go index b2cb11325..e21564aa5 100644 --- a/model/bytepairencoding.go +++ b/model/bytepairencoding.go @@ -201,12 +201,11 @@ func (bpe BytePairEncoding) Encode(s string, addSpecial bool) ([]int32, error) { } } - logutil.Trace("encoded", "string", s, "ids", ids) - if addSpecial && len(ids) > 0 { ids = bpe.vocab.addSpecials(ids) } + logutil.Trace("encoded", "string", s, "ids", ids) return ids, nil } diff --git a/model/model.go b/model/model.go index 30754143a..3a72f09aa 100644 --- a/model/model.go +++ b/model/model.go @@ -5,6 +5,7 @@ import ( "fmt" _ "image/jpeg" _ "image/png" + "math" "os" "reflect" "strconv" @@ -103,6 +104,10 @@ func New(modelPath string, params ml.BackendParams) (Model, error) { } arch := b.Config().Architecture() + if b.Config().Uint("pooling_type", math.MaxUint32) != math.MaxUint32 { + arch = arch + "_embed" + } + f, ok := models[arch] if !ok { return nil, fmt.Errorf("unsupported model architecture %q", arch) diff --git a/model/models/gemma3/embed.go b/model/models/gemma3/embed.go new file mode 100644 index 000000000..16c299e22 --- /dev/null +++ b/model/models/gemma3/embed.go @@ -0,0 +1,73 @@ +package gemma3 + +import ( + "errors" + + "github.com/ollama/ollama/fs" + "github.com/ollama/ollama/kvcache" + "github.com/ollama/ollama/ml" + "github.com/ollama/ollama/ml/nn" + "github.com/ollama/ollama/model" + "github.com/ollama/ollama/model/input" +) + +type embedModel struct { + model.Base + model.SentencePieceModel + + *TextModel + PoolingType uint32 + + Dense [2]*nn.Linear `gguf:"dense"` +} + +func (m *embedModel) Forward(ctx ml.Context, batch input.Batch) (ml.Tensor, error) { + batch.Outputs = batch.Positions // return all positions + hiddenStates := m.TextModel.Forward(ctx, batch, m.Cache) + + switch m.PoolingType { + case 0: // None + case 1: // Mean + hiddenStates = hiddenStates.Permute(ctx, 1, 0, 2, 3).Contiguous(ctx).Mean(ctx) + hiddenStates = hiddenStates.Permute(ctx, 1, 0, 2, 3).Contiguous(ctx) + default: + return nil, errors.New("unsupported pooling type") + } + + for _, dense := range m.Dense { + hiddenStates = dense.Forward(ctx, hiddenStates) + } + + return hiddenStates, nil +} + +func newEmbedModel(c fs.Config) (model.Model, error) { + m := &embedModel{ + SentencePieceModel: model.NewSentencePieceModel( + &model.Vocabulary{ + Values: c.Strings("tokenizer.ggml.tokens"), + Scores: c.Floats("tokenizer.ggml.scores"), + Types: c.Ints("tokenizer.ggml.token_type"), + AddBOS: c.Bool("tokenizer.ggml.add_bos_token", true), + BOS: []int32{int32(c.Uint("tokenizer.ggml.bos_token_id"))}, + AddEOS: c.Bool("tokenizer.ggml.add_eos_token", false), + EOS: append( + []int32{ + int32(c.Uint("tokenizer.ggml.eos_token_id")), + int32(c.Uint("tokenizer.ggml.eot_token_id", 106)), + }, + c.Ints("tokenizer.ggml.eos_token_ids")..., + ), + }, + ), + TextModel: newTextModel(c), + PoolingType: c.Uint("pooling_type", 0), + } + + m.Cache = kvcache.NewWrapperCache( + kvcache.NewSWACache(int32(c.Uint("attention.sliding_window")), m.Shift), + kvcache.NewCausalCache(m.Shift), + ) + + return m, nil +} diff --git a/model/models/gemma3/model.go b/model/models/gemma3/model.go index a4c90d9cf..5c92b6bf9 100644 --- a/model/models/gemma3/model.go +++ b/model/models/gemma3/model.go @@ -141,12 +141,11 @@ func (m *Model) PostTokenize(inputs []*input.Input) ([]*input.Input, error) { } func (m *Model) Forward(ctx ml.Context, batch input.Batch) (ml.Tensor, error) { - positions := ctx.Input().FromIntSlice(batch.Positions, len(batch.Positions)) - outputs := ctx.Input().FromIntSlice(batch.Outputs, len(batch.Outputs)) - - return m.TextModel.Forward(ctx, batch.Inputs, positions, outputs, batch, m.Cache), nil + hiddenStates := m.TextModel.Forward(ctx, batch, m.Cache) + return m.Output.Forward(ctx, hiddenStates), nil } func init() { model.Register("gemma3", New) + model.Register("gemma3_embed", newEmbedModel) } diff --git a/model/models/gemma3/model_text.go b/model/models/gemma3/model_text.go index 70d7797e9..2a3b23939 100644 --- a/model/models/gemma3/model_text.go +++ b/model/models/gemma3/model_text.go @@ -159,8 +159,11 @@ func (l *TextLayer) Forward(ctx ml.Context, layer int, hiddenState, positionIDs, return hiddenState.Add(ctx, residual) } -func (m *TextModel) Forward(ctx ml.Context, inputs, positions, outputs ml.Tensor, batch input.Batch, cache kvcache.Cache) ml.Tensor { - hiddenState := m.TokenEmbedding.Forward(ctx, inputs) +func (m *TextModel) Forward(ctx ml.Context, batch input.Batch, cache kvcache.Cache) ml.Tensor { + positions := ctx.Input().FromIntSlice(batch.Positions, len(batch.Positions)) + outputs := ctx.Input().FromIntSlice(batch.Outputs, len(batch.Outputs)) + + hiddenState := m.TokenEmbedding.Forward(ctx, batch.Inputs) hiddenState = hiddenState.Scale(ctx, math.Sqrt(float64(m.TextConfig.hiddenSize))) // set image embeddings @@ -198,5 +201,5 @@ func (m *TextModel) Forward(ctx ml.Context, inputs, positions, outputs ml.Tensor } hiddenState = m.OutputNorm.Forward(ctx, hiddenState, m.eps) - return m.Output.Forward(ctx, hiddenState) + return hiddenState } diff --git a/model/sentencepiece.go b/model/sentencepiece.go index 4300f45f5..827ce00d9 100644 --- a/model/sentencepiece.go +++ b/model/sentencepiece.go @@ -181,12 +181,11 @@ func (spm SentencePieceModel) Encode(s string, addSpecial bool) ([]int32, error) } } - logutil.Trace("encoded", "string", s, "ids", ids) - if addSpecial && len(ids) > 0 { ids = spm.vocab.addSpecials(ids) } + logutil.Trace("encoded", "string", s, "ids", ids) return ids, nil } diff --git a/model/vocabulary.go b/model/vocabulary.go index a86de58df..9b7fc789e 100644 --- a/model/vocabulary.go +++ b/model/vocabulary.go @@ -49,7 +49,7 @@ func (v *Vocabulary) addSpecials(ids []int32) []int32 { slog.Warn("adding bos token to prompt which already has it", "id", v.BOS) } - slog.Debug("adding bos token to prompt", "id", v.BOS) + slog.Debug("adding bos token to prompt", "id", v.BOS[0]) ids = append([]int32{v.BOS[0]}, ids...) } @@ -58,7 +58,7 @@ func (v *Vocabulary) addSpecials(ids []int32) []int32 { slog.Warn("adding eos token to prompt which already has it", "id", v.EOS) } - slog.Debug("adding eos token to prompt", "id", v.EOS) + slog.Debug("adding eos token to prompt", "id", v.EOS[0]) ids = append(ids, v.EOS[0]) } diff --git a/runner/ollamarunner/cache.go b/runner/ollamarunner/cache.go index 8f30037c8..955ef9b3d 100644 --- a/runner/ollamarunner/cache.go +++ b/runner/ollamarunner/cache.go @@ -95,7 +95,7 @@ type InputCacheSlot struct { lastUsed time.Time } -func (c *InputCache) LoadCacheSlot(prompt []*input.Input) (*InputCacheSlot, []*input.Input, error) { +func (c *InputCache) LoadCacheSlot(prompt []*input.Input, cachePrompt bool) (*InputCacheSlot, []*input.Input, error) { var slot *InputCacheSlot var numPast int32 var err error @@ -113,6 +113,10 @@ func (c *InputCache) LoadCacheSlot(prompt []*input.Input) (*InputCacheSlot, []*i return nil, nil, err } + if !cachePrompt { + numPast = 0 + } + slot.InUse = true slot.lastUsed = time.Now() diff --git a/runner/ollamarunner/cache_test.go b/runner/ollamarunner/cache_test.go index 49cb6c547..c0693e834 100644 --- a/runner/ollamarunner/cache_test.go +++ b/runner/ollamarunner/cache_test.go @@ -393,7 +393,7 @@ func TestLoadCacheSlot(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - slot, remainingPrompt, err := tt.cache.LoadCacheSlot(tt.prompt) + slot, remainingPrompt, err := tt.cache.LoadCacheSlot(tt.prompt, true) // Check error state if (err != nil) != tt.wantErr { diff --git a/runner/ollamarunner/runner.go b/runner/ollamarunner/runner.go index 9b54a3720..df3ce1d9f 100644 --- a/runner/ollamarunner/runner.go +++ b/runner/ollamarunner/runner.go @@ -11,6 +11,7 @@ import ( "image" "log" "log/slog" + "math" "net" "net/http" "os" @@ -405,6 +406,8 @@ func (s *Server) removeSequence(seqIndex int, reason llm.DoneReason) { func (s *Server) run(ctx context.Context) { s.ready.Wait() + supportsAsync := s.model.Backend().Config().Uint("pooling_type", math.MaxUint32) == math.MaxUint32 + var activeBatch batchState for { select { @@ -418,7 +421,12 @@ func (s *Server) run(ctx context.Context) { if err != nil { panic(err) } - go s.computeBatch(activeBatch) + + if supportsAsync { + go s.computeBatch(activeBatch) + } else { + s.computeBatch(activeBatch) + } } } } @@ -670,7 +678,8 @@ func (s *Server) computeBatch(activeBatch batchState) { activeBatch.computeStartedCh <- struct{}{} }, activeBatch.modelOutput) - logits := activeBatch.modelOutput.Floats() + + outputs := activeBatch.modelOutput.Floats() logutil.Trace("computeBatch: logits ready", "batchID", activeBatch.id) @@ -689,16 +698,15 @@ func (s *Server) computeBatch(activeBatch batchState) { // if done processing the prompt, generate an embedding and return if seq.embeddingOnly { - // TODO(jessegross): Embedding support - slog.Warn("generation of embedding outputs not yet supported", "id", activeBatch.id, "seqIdx", i) + seq.embedding <- outputs s.removeSequence(i, llm.DoneReasonStop) continue } // sample a token - vocabSize := len(logits) / len(activeBatch.batch.Outputs) - logutil.Trace("computeBatch: vocab details", "batchID", activeBatch.id, "seqIdx", i, "len(logits)", len(logits), "len(activeBatch.batch.Outputs)", len(activeBatch.batch.Outputs), "vocabSize", vocabSize, "iBatches", iBatches) - token, err := seq.sampler.Sample(logits[iBatches[i]*vocabSize : (iBatches[i]+1)*vocabSize]) + vocabSize := len(outputs) / len(activeBatch.batch.Outputs) + logutil.Trace("computeBatch: vocab details", "batchID", activeBatch.id, "seqIdx", i, "len(logits)", len(outputs), "len(activeBatch.batch.Outputs)", len(activeBatch.batch.Outputs), "vocabSize", vocabSize, "iBatches", iBatches) + token, err := seq.sampler.Sample(outputs[iBatches[i]*vocabSize : (iBatches[i]+1)*vocabSize]) if err != nil { s.hardErrCh <- fmt.Errorf("failed to sample token: %w", err) return @@ -834,7 +842,7 @@ func (s *Server) completion(w http.ResponseWriter, r *http.Request) { found := false for i, sq := range s.seqs { if sq == nil { - seq.cache, seq.inputs, err = s.cache.LoadCacheSlot(seq.inputs) + seq.cache, seq.inputs, err = s.cache.LoadCacheSlot(seq.inputs, true) if err != nil { s.mu.Unlock() s.seqsSem.Release(1) @@ -890,6 +898,67 @@ func (s *Server) completion(w http.ResponseWriter, r *http.Request) { } } +func (s *Server) embeddings(w http.ResponseWriter, r *http.Request) { + if s.model.Backend().Config().Uint("pooling_type", math.MaxUint32) == math.MaxUint32 { + http.Error(w, "this model does not support embeddings", http.StatusNotImplemented) + return + } + + var req llm.EmbeddingRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, fmt.Sprintf("bad request: %s", err), http.StatusBadRequest) + return + } + + w.Header().Set("Content-Type", "application/json") + seq, err := s.NewSequence(req.Content, nil, NewSequenceParams{embedding: true}) + if err != nil { + http.Error(w, fmt.Sprintf("failed to create new sequence: %v", err), http.StatusInternalServerError) + return + } + + if err := s.seqsSem.Acquire(r.Context(), 1); err != nil { + if errors.Is(err, context.Canceled) { + slog.Info("aborting embedding request due to client closing the connection") + } else { + http.Error(w, fmt.Sprintf("failed to acquire semaphore: %v", err), http.StatusInternalServerError) + } + return + } + + s.mu.Lock() + found := false + for i, sq := range s.seqs { + if sq == nil { + seq.cache, seq.inputs, err = s.cache.LoadCacheSlot(seq.inputs, false) + if err != nil { + s.mu.Unlock() + s.seqsSem.Release(1) + http.Error(w, fmt.Sprintf("failed to load cache: %v", err), http.StatusInternalServerError) + return + } + + s.seqs[i] = seq + s.cond.Signal() + found = true + break + } + } + s.mu.Unlock() + + if !found { + s.seqsSem.Release(1) + http.Error(w, "could not find an available sequence", http.StatusInternalServerError) + return + } + + if err := json.NewEncoder(w).Encode(&llm.EmbeddingResponse{ + Embedding: <-seq.embedding, + }); err != nil { + http.Error(w, fmt.Sprintf("failed to encode response: %v", err), http.StatusInternalServerError) + } +} + func (s *Server) health(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") if err := json.NewEncoder(w).Encode(&llm.ServerStatusResponse{ @@ -1206,10 +1275,7 @@ func Execute(args []string) error { mux := http.NewServeMux() // TODO: support embeddings mux.HandleFunc("POST /load", server.load) - mux.HandleFunc("POST /embedding", func(w http.ResponseWriter, r *http.Request) { - http.Error(w, "this model does not support embeddings", http.StatusNotImplemented) - }) - + mux.HandleFunc("POST /embedding", server.embeddings) mux.HandleFunc("POST /completion", server.completion) mux.HandleFunc("GET /health", server.health)