2025-07-06 01:38:02 +01:00
|
|
|
structure AppWith =
|
|
|
|
|
struct
|
|
|
|
|
open AppType
|
|
|
|
|
|
|
|
|
|
fun arrowX (app, arrowX) =
|
|
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, arrowX = _
|
|
|
|
|
, arrowY
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, canvasHeight
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r
|
|
|
|
|
, g
|
|
|
|
|
, b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
|
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = showGraph
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = fileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a = a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer = layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree = layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum = modalNum
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
2025-07-06 02:15:16 +01:00
|
|
|
fun arrowY (app, arrowY) =
|
2025-07-06 01:38:02 +01:00
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, arrowX
|
|
|
|
|
, arrowY = _
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, canvasHeight
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r
|
|
|
|
|
, g
|
|
|
|
|
, b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
|
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = showGraph
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = fileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a = a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer = layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree = layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum = modalNum
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
2025-07-11 00:57:29 +01:00
|
|
|
fun windowResize (app: app_type, windowWidth, windowHeight) : app_type =
|
2025-07-06 01:38:02 +01:00
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, xClickPoints = _
|
|
|
|
|
, yClickPoints = _
|
|
|
|
|
, windowWidth = _
|
|
|
|
|
, windowHeight = _
|
|
|
|
|
, arrowX
|
|
|
|
|
, arrowY
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, canvasHeight
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r
|
|
|
|
|
, g
|
|
|
|
|
, b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
|
2025-07-11 00:57:29 +01:00
|
|
|
val (xClickPoints, yClickPoints) =
|
|
|
|
|
ClickPoints.generate
|
|
|
|
|
(windowWidth, windowHeight, canvasWidth, canvasHeight)
|
2025-07-06 01:38:02 +01:00
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
|
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = showGraph
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = fileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a = a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer = layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree = layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum = modalNum
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
fun mousePosition (app: app_type, mouseX, mouseY) =
|
|
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, mouseX = _
|
|
|
|
|
, mouseY = _
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, arrowX
|
|
|
|
|
, arrowY
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, canvasHeight
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r
|
|
|
|
|
, g
|
|
|
|
|
, b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
|
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = showGraph
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = fileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a = a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer = layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree = layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum = modalNum
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
fun graphVisibility (app: app_type, shouldShowGraph) =
|
|
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, arrowX
|
|
|
|
|
, arrowY
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, canvasHeight
|
|
|
|
|
|
|
|
|
|
, showGraph = _
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r
|
|
|
|
|
, g
|
|
|
|
|
, b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
|
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = shouldShowGraph
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = fileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a = a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer = layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree = layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum = modalNum
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
fun mode (app: app_type, newMode) =
|
|
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode = _
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, arrowX
|
|
|
|
|
, arrowY
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, canvasHeight
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r
|
|
|
|
|
, g
|
|
|
|
|
, b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
in
|
|
|
|
|
{ mode = newMode
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
|
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = showGraph
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = fileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a = a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer = layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree = layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum = modalNum
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
fun fileBrowserAndPath (app: app_type, fileBrowser, path) =
|
|
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, arrowX
|
|
|
|
|
, arrowY
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, canvasHeight
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, openFilePath = _
|
|
|
|
|
, fileBrowser = _
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r
|
|
|
|
|
, g
|
|
|
|
|
, b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
|
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = showGraph
|
|
|
|
|
, openFilePath = path
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = 0
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a = a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer = layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree = layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum = modalNum
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
fun fileBrowserIdx (app: app_type, newFileBrowserIdx) =
|
|
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, arrowX
|
|
|
|
|
, arrowY
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, canvasHeight
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx = _
|
|
|
|
|
, r
|
|
|
|
|
, g
|
|
|
|
|
, b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
|
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = showGraph
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = newFileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a = a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer = layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree = layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum = modalNum
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
fun modalNum (app: app_type, newNum) : app_type =
|
|
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, arrowX
|
|
|
|
|
, arrowY
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, canvasHeight
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r
|
|
|
|
|
, g
|
|
|
|
|
, b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree
|
2025-07-11 17:30:57 +01:00
|
|
|
, modalNum = prevNum
|
2025-07-06 01:38:02 +01:00
|
|
|
} = app
|
2025-07-11 17:30:57 +01:00
|
|
|
|
|
|
|
|
val newNum = (prevNum * 10) + newNum
|
2025-07-06 01:38:02 +01:00
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
|
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = showGraph
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = fileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a = a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer = layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree = layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum = newNum
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
fun r (app: app_type) : app_type =
|
|
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, arrowX
|
|
|
|
|
, arrowY
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, canvasHeight
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r = _
|
|
|
|
|
, g
|
|
|
|
|
, b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
|
2025-07-11 17:30:57 +01:00
|
|
|
val r = Int.min (modalNum, 255)
|
2025-07-06 01:38:02 +01:00
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
|
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = showGraph
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = fileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a = a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer = layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree = layerTree
|
2025-07-11 16:39:39 +01:00
|
|
|
, modalNum = 0
|
2025-07-06 01:38:02 +01:00
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
fun g (app: app_type) : app_type =
|
|
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, arrowX
|
|
|
|
|
, arrowY
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, canvasHeight
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r
|
|
|
|
|
, g = _
|
|
|
|
|
, b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
|
2025-07-11 17:30:57 +01:00
|
|
|
val g = Int.min (modalNum, 255)
|
2025-07-06 01:38:02 +01:00
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
|
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = showGraph
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = fileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a = a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer = layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree = layerTree
|
2025-07-11 16:39:39 +01:00
|
|
|
, modalNum = 0
|
2025-07-06 01:38:02 +01:00
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
fun b (app: app_type) : app_type =
|
|
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, arrowX
|
|
|
|
|
, arrowY
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, canvasHeight
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r
|
|
|
|
|
, g
|
|
|
|
|
, b = _
|
2025-07-11 15:34:29 +01:00
|
|
|
, a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree
|
2025-07-06 01:38:02 +01:00
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
|
2025-07-11 17:30:57 +01:00
|
|
|
val b = Int.min (modalNum, 255)
|
2025-07-06 01:38:02 +01:00
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
|
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = showGraph
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = fileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
2025-07-11 15:34:29 +01:00
|
|
|
, a = a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer = layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree = layerTree
|
2025-07-11 16:39:39 +01:00
|
|
|
, modalNum = 0
|
2025-07-11 15:34:29 +01:00
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
fun a (app: app_type) : app_type =
|
|
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, arrowX
|
|
|
|
|
, arrowY
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, canvasHeight
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r
|
|
|
|
|
, g
|
|
|
|
|
, b
|
|
|
|
|
, a = _
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree
|
2025-07-11 15:34:29 +01:00
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
|
2025-07-11 17:30:57 +01:00
|
|
|
val a = Int.min (modalNum, 255)
|
2025-07-11 15:34:29 +01:00
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
|
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = showGraph
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = fileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
|
|
|
|
, a = a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer = layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree = layerTree
|
2025-07-11 16:39:39 +01:00
|
|
|
, modalNum = 0
|
2025-07-06 01:38:02 +01:00
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
2025-08-09 08:15:11 +01:00
|
|
|
fun layer (app: app_type) : app_type =
|
|
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, arrowX
|
|
|
|
|
, arrowY
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, canvasHeight
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r
|
|
|
|
|
, g
|
|
|
|
|
, b
|
|
|
|
|
, a
|
|
|
|
|
, layer = _
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree
|
2025-08-09 08:15:11 +01:00
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
|
|
|
|
|
val layer = modalNum
|
|
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
2025-08-09 09:32:34 +01:00
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = showGraph
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = fileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
|
|
|
|
, a = a
|
|
|
|
|
, layer = layer
|
|
|
|
|
, layerTree = layerTree
|
|
|
|
|
, modalNum = modalNum
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
fun layerTree (app: app_type, layerTree, arrowX, arrowY) : app_type =
|
|
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, arrowX = _
|
|
|
|
|
, arrowY = _
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, canvasHeight
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r
|
|
|
|
|
, g
|
|
|
|
|
, b
|
|
|
|
|
, a
|
|
|
|
|
, layer
|
|
|
|
|
, layerTree = _
|
|
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
2025-08-09 08:15:11 +01:00
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = showGraph
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = fileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
|
|
|
|
, a = a
|
|
|
|
|
, layer = layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree = layerTree
|
2025-08-09 08:15:11 +01:00
|
|
|
, modalNum = modalNum
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
2025-08-09 10:11:37 +01:00
|
|
|
fun canvasWidth (app: app_type, newCanvasWidth, newLayerTree) =
|
2025-07-11 17:30:57 +01:00
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, canvasWidth = _
|
|
|
|
|
, arrowX
|
|
|
|
|
, arrowY
|
|
|
|
|
, canvasHeight
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r
|
|
|
|
|
, g
|
|
|
|
|
, b
|
|
|
|
|
, a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer
|
2025-08-09 10:11:37 +01:00
|
|
|
, layerTree = _
|
2025-07-11 17:30:57 +01:00
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
|
2025-07-11 17:41:47 +01:00
|
|
|
val arrowX = Int.min (arrowX, newCanvasWidth)
|
2025-07-11 22:20:29 +01:00
|
|
|
val (xClickPoints, yClickPoints) =
|
|
|
|
|
ClickPoints.generate
|
|
|
|
|
(windowWidth, windowHeight, newCanvasWidth, canvasHeight)
|
2025-07-11 17:30:57 +01:00
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, canvasWidth = newCanvasWidth
|
2025-07-11 17:41:47 +01:00
|
|
|
, arrowX = arrowX
|
2025-07-11 17:30:57 +01:00
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
|
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = showGraph
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = fileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
|
|
|
|
, a = a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer = layer
|
2025-08-09 10:11:37 +01:00
|
|
|
, layerTree = newLayerTree
|
2025-07-11 17:30:57 +01:00
|
|
|
, modalNum = 0
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
2025-08-09 10:11:37 +01:00
|
|
|
fun canvasHeight (app: app_type, newCanvasHeight, newLayerTree) =
|
2025-07-11 22:57:20 +01:00
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, canvasHeight = _
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, arrowX
|
|
|
|
|
, arrowY
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r
|
|
|
|
|
, g
|
|
|
|
|
, b
|
|
|
|
|
, a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer
|
2025-08-09 10:11:37 +01:00
|
|
|
, layerTree = _
|
2025-07-11 22:57:20 +01:00
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
|
|
|
|
|
val arrowY = Int.min (arrowY, newCanvasHeight)
|
|
|
|
|
val (xClickPoints, yClickPoints) =
|
|
|
|
|
ClickPoints.generate
|
|
|
|
|
(windowWidth, windowHeight, canvasWidth, newCanvasHeight)
|
|
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, canvasHeight = newCanvasHeight
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
|
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph = showGraph
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = fileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
|
|
|
|
, a = a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer = layer
|
2025-08-09 10:11:37 +01:00
|
|
|
, layerTree = newLayerTree
|
2025-07-11 22:57:20 +01:00
|
|
|
, modalNum = 0
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
2025-08-09 07:04:03 +01:00
|
|
|
fun cursorColour (app, r, g, b, a) =
|
|
|
|
|
let
|
|
|
|
|
val
|
|
|
|
|
{ mode
|
|
|
|
|
, canvasHeight
|
|
|
|
|
, canvasWidth
|
|
|
|
|
, arrowX
|
|
|
|
|
, arrowY
|
|
|
|
|
, windowWidth
|
|
|
|
|
, windowHeight
|
|
|
|
|
, xClickPoints
|
|
|
|
|
, yClickPoints
|
|
|
|
|
|
|
|
|
|
, showGraph
|
|
|
|
|
, mouseX
|
|
|
|
|
, mouseY
|
|
|
|
|
, openFilePath
|
|
|
|
|
, fileBrowser
|
|
|
|
|
, fileBrowserIdx
|
|
|
|
|
, r = _
|
|
|
|
|
, g = _
|
|
|
|
|
, b = _
|
|
|
|
|
, a = _
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree
|
2025-08-09 07:04:03 +01:00
|
|
|
, modalNum
|
|
|
|
|
} = app
|
|
|
|
|
in
|
|
|
|
|
{ mode = mode
|
|
|
|
|
, canvasHeight = canvasHeight
|
|
|
|
|
, canvasWidth = canvasWidth
|
|
|
|
|
, arrowX = arrowX
|
|
|
|
|
, mouseX = mouseX
|
|
|
|
|
, mouseY = mouseY
|
|
|
|
|
, arrowY = arrowY
|
|
|
|
|
, windowWidth = windowWidth
|
|
|
|
|
, windowHeight = windowHeight
|
|
|
|
|
, xClickPoints = xClickPoints
|
|
|
|
|
, yClickPoints = yClickPoints
|
|
|
|
|
|
2025-07-12 07:17:52 +01:00
|
|
|
, showGraph = showGraph
|
|
|
|
|
, openFilePath = openFilePath
|
|
|
|
|
, fileBrowser = fileBrowser
|
|
|
|
|
, fileBrowserIdx = fileBrowserIdx
|
|
|
|
|
, r = r
|
|
|
|
|
, g = g
|
|
|
|
|
, b = b
|
|
|
|
|
, a = a
|
2025-08-09 08:15:11 +01:00
|
|
|
, layer = layer
|
2025-08-09 08:22:28 +01:00
|
|
|
, layerTree = layerTree
|
2025-07-12 07:17:52 +01:00
|
|
|
, modalNum = 0
|
|
|
|
|
}
|
|
|
|
|
end
|
2025-07-06 01:38:02 +01:00
|
|
|
end
|