Move SSD loaded truth area copy to typed Kotlin

ober

c35153020a5b76c6978d19682616948c89529657

diff --git a/templates/ssd-review.ss b/templates/ssd-review.ss
index 130a04c..5784d68 100644
--- a/templates/ssd-review.ss
+++ b/templates/ssd-review.ss
@@ -4635,7 +4635,7 @@
                 detectorSourceWithTruth detectionTruthNote detectionOcrNote
                 detectionLearnedNote shouldLoadLocalTruth
                 localTruthForDetection existingTruthForDetection
-                copyExistingTruthSsdArea
+                copyExistingTruthSsdArea copyLoadedTruthSsdArea
                 shouldUseExistingTruth shouldApplyExistingTruth
                 shouldUseExistingTruthObject shouldApplyExistingTruthObject
                 shouldApplyLearnedGuesses learnedGuessesForDetection
@@ -5372,6 +5372,9 @@
           (if (truthPresent truth)
             (SsdSession-ssdArea-set! session (nullableTruthSsdAreaRect truth))
             (begin)))
+        (def (copyLoadedTruthSsdArea (session : SsdSession)
+                                     (truth : JSONObject)) : Unit
+          (SsdSession-ssdArea-set! session (truthSsdAreaRect truth)))
         (def (shouldUseExistingTruth (existingTruthGroupCount : Int32)
                                      (forceDetect : Bool)) : Bool
           (and (> existingTruthGroupCount (int32 0))
@@ -7246,7 +7249,7 @@
        "            if (!truthPresent(truth)) return@thread"
        "            val loadedTruth = truthJsonObjectOrEmpty(truth)"
        "            val merged = makeRemoteTruthMergeSession(session)"
-       "            merged.ssdArea = truthSsdAreaRect(loadedTruth)"
+       "            copyLoadedTruthSsdArea(merged, loadedTruth)"
        "            truthStore.applyTruth(merged)"
        "            ssdSessionPruneGroupsOutsideSsdArea(merged)"
        "            runOnUiThread {"