{
  "title" : "Duplication",
  "timestamp" : "2026-01-18 17:11:46",
  "duplicates" : [ {
    "blockSize" : 15,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "runtime/src/jvmTest/kotlin/AppInstallUrlTest.kt",
        "extension" : "kt",
        "linesOfCode" : 95,
        "components" : [ "primary::runtime" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 86,
      "startLine" : 28,
      "endLine" : 43,
      "cleanedStartLine" : 21,
      "cleanedEndLine" : 35
    }, {
      "file" : {
        "relativePath" : "runtime/src/jvmTest/kotlin/AppInstallUrlTest.kt",
        "extension" : "kt",
        "linesOfCode" : 95,
        "components" : [ "primary::runtime" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 86,
      "startLine" : 60,
      "endLine" : 75,
      "cleanedStartLine" : 50,
      "cleanedEndLine" : 64
    } ]
  }, {
    "blockSize" : 11,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "runtime/src/jvmTest/kotlin/AppInstallUrlTest.kt",
        "extension" : "kt",
        "linesOfCode" : 95,
        "components" : [ "primary::runtime" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 86,
      "startLine" : 45,
      "endLine" : 57,
      "cleanedStartLine" : 37,
      "cleanedEndLine" : 47
    }, {
      "file" : {
        "relativePath" : "runtime/src/jvmTest/kotlin/AppInstallUrlTest.kt",
        "extension" : "kt",
        "linesOfCode" : 95,
        "components" : [ "primary::runtime" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 86,
      "startLine" : 77,
      "endLine" : 89,
      "cleanedStartLine" : 66,
      "cleanedEndLine" : 76
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "runtime/src/commonMain/kotlin/space/jetbrains/api/runtime/RestResource.kt",
        "extension" : "kt",
        "linesOfCode" : 76,
        "components" : [ "primary::runtime" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 67,
      "startLine" : 17,
      "endLine" : 26,
      "cleanedStartLine" : 10,
      "cleanedEndLine" : 19
    }, {
      "file" : {
        "relativePath" : "runtime/src/commonMain/kotlin/space/jetbrains/api/runtime/RestResource.kt",
        "extension" : "kt",
        "linesOfCode" : 76,
        "components" : [ "primary::runtime" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 67,
      "startLine" : 36,
      "endLine" : 45,
      "cleanedStartLine" : 28,
      "cleanedEndLine" : 37
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "runtime/src/commonMain/kotlin/space/jetbrains/api/runtime/RestResource.kt",
        "extension" : "kt",
        "linesOfCode" : 76,
        "components" : [ "primary::runtime" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 67,
      "startLine" : 19,
      "endLine" : 26,
      "cleanedStartLine" : 12,
      "cleanedEndLine" : 19
    }, {
      "file" : {
        "relativePath" : "runtime/src/commonMain/kotlin/space/jetbrains/api/runtime/RestResource.kt",
        "extension" : "kt",
        "linesOfCode" : 76,
        "components" : [ "primary::runtime" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 67,
      "startLine" : 57,
      "endLine" : 64,
      "cleanedStartLine" : 48,
      "cleanedEndLine" : 55
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "runtime/src/commonMain/kotlin/space/jetbrains/api/runtime/RestResource.kt",
        "extension" : "kt",
        "linesOfCode" : 76,
        "components" : [ "primary::runtime" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 67,
      "startLine" : 38,
      "endLine" : 45,
      "cleanedStartLine" : 30,
      "cleanedEndLine" : 37
    }, {
      "file" : {
        "relativePath" : "runtime/src/commonMain/kotlin/space/jetbrains/api/runtime/RestResource.kt",
        "extension" : "kt",
        "linesOfCode" : 76,
        "components" : [ "primary::runtime" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 67,
      "startLine" : 57,
      "endLine" : 64,
      "cleanedStartLine" : 48,
      "cleanedEndLine" : 55
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateTypes.kt",
        "extension" : "kt",
        "linesOfCode" : 281,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 233,
      "startLine" : 161,
      "endLine" : 167,
      "cleanedStartLine" : 120,
      "cleanedEndLine" : 126
    }, {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateTypes.kt",
        "extension" : "kt",
        "linesOfCode" : 281,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 233,
      "startLine" : 183,
      "endLine" : 189,
      "cleanedStartLine" : 140,
      "cleanedEndLine" : 146
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateTypes.kt",
        "extension" : "kt",
        "linesOfCode" : 281,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 233,
      "startLine" : 144,
      "endLine" : 150,
      "cleanedStartLine" : 104,
      "cleanedEndLine" : 110
    }, {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateTypes.kt",
        "extension" : "kt",
        "linesOfCode" : 281,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 233,
      "startLine" : 183,
      "endLine" : 189,
      "cleanedStartLine" : 140,
      "cleanedEndLine" : 146
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateTypes.kt",
        "extension" : "kt",
        "linesOfCode" : 281,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 233,
      "startLine" : 136,
      "endLine" : 142,
      "cleanedStartLine" : 96,
      "cleanedEndLine" : 102
    }, {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateTypes.kt",
        "extension" : "kt",
        "linesOfCode" : 281,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 233,
      "startLine" : 175,
      "endLine" : 181,
      "cleanedStartLine" : 132,
      "cleanedEndLine" : 138
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateTypes.kt",
        "extension" : "kt",
        "linesOfCode" : 281,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 233,
      "startLine" : 153,
      "endLine" : 159,
      "cleanedStartLine" : 112,
      "cleanedEndLine" : 118
    }, {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateTypes.kt",
        "extension" : "kt",
        "linesOfCode" : 281,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 233,
      "startLine" : 175,
      "endLine" : 181,
      "cleanedStartLine" : 132,
      "cleanedEndLine" : 138
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "runtime/src/commonMain/kotlin/space/jetbrains/api/runtime/SpaceHttpClient.kt",
        "extension" : "kt",
        "linesOfCode" : 220,
        "components" : [ "primary::runtime" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 185,
      "startLine" : 60,
      "endLine" : 66,
      "cleanedStartLine" : 35,
      "cleanedEndLine" : 41
    }, {
      "file" : {
        "relativePath" : "runtime/src/commonMain/kotlin/space/jetbrains/api/runtime/SpaceHttpClient.kt",
        "extension" : "kt",
        "linesOfCode" : 220,
        "components" : [ "primary::runtime" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 185,
      "startLine" : 82,
      "endLine" : 88,
      "cleanedStartLine" : 56,
      "cleanedEndLine" : 62
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GeneratePartials.kt",
        "extension" : "kt",
        "linesOfCode" : 326,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 272,
      "startLine" : 32,
      "endLine" : 40,
      "cleanedStartLine" : 21,
      "cleanedEndLine" : 27
    }, {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateStructures.kt",
        "extension" : "kt",
        "linesOfCode" : 265,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 229,
      "startLine" : 91,
      "endLine" : 99,
      "cleanedStartLine" : 68,
      "cleanedEndLine" : 74
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateTypes.kt",
        "extension" : "kt",
        "linesOfCode" : 281,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 233,
      "startLine" : 144,
      "endLine" : 150,
      "cleanedStartLine" : 104,
      "cleanedEndLine" : 110
    }, {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateTypes.kt",
        "extension" : "kt",
        "linesOfCode" : 281,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 233,
      "startLine" : 161,
      "endLine" : 167,
      "cleanedStartLine" : 120,
      "cleanedEndLine" : 126
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateTypes.kt",
        "extension" : "kt",
        "linesOfCode" : 281,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 233,
      "startLine" : 136,
      "endLine" : 142,
      "cleanedStartLine" : 96,
      "cleanedEndLine" : 102
    }, {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateTypes.kt",
        "extension" : "kt",
        "linesOfCode" : 281,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 233,
      "startLine" : 153,
      "endLine" : 159,
      "cleanedStartLine" : 112,
      "cleanedEndLine" : 118
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "runtime/src/commonMain/kotlin/space/jetbrains/api/runtime/ApiPair.kt",
        "extension" : "kt",
        "linesOfCode" : 52,
        "components" : [ "primary::runtime" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 45,
      "startLine" : 51,
      "endLine" : 61,
      "cleanedStartLine" : 36,
      "cleanedEndLine" : 42
    }, {
      "file" : {
        "relativePath" : "runtime/src/commonMain/kotlin/space/jetbrains/api/runtime/ApiTriple.kt",
        "extension" : "kt",
        "linesOfCode" : 67,
        "components" : [ "primary::runtime" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 59,
      "startLine" : 61,
      "endLine" : 71,
      "cleanedStartLine" : 45,
      "cleanedEndLine" : 51
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "runtime/src/jvmTest/kotlin/AppInstallUrlTest.kt",
        "extension" : "kt",
        "linesOfCode" : 95,
        "components" : [ "primary::runtime" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 86,
      "startLine" : 13,
      "endLine" : 19,
      "cleanedStartLine" : 8,
      "cleanedEndLine" : 14
    }, {
      "file" : {
        "relativePath" : "runtime/src/jvmTest/kotlin/AppInstallUrlTest.kt",
        "extension" : "kt",
        "linesOfCode" : 95,
        "components" : [ "primary::runtime" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 86,
      "startLine" : 41,
      "endLine" : 48,
      "cleanedStartLine" : 34,
      "cleanedEndLine" : 40
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateResources.kt",
        "extension" : "kt",
        "linesOfCode" : 406,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 333,
      "startLine" : 28,
      "endLine" : 34,
      "cleanedStartLine" : 18,
      "cleanedEndLine" : 23
    }, {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateTypes.kt",
        "extension" : "kt",
        "linesOfCode" : 281,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 233,
      "startLine" : 37,
      "endLine" : 43,
      "cleanedStartLine" : 21,
      "cleanedEndLine" : 26
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/HA_Model.kt",
        "extension" : "kt",
        "linesOfCode" : 239,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 220,
      "startLine" : 256,
      "endLine" : 261,
      "cleanedStartLine" : 205,
      "cleanedEndLine" : 210
    }, {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/HA_Model.kt",
        "extension" : "kt",
        "linesOfCode" : 239,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 220,
      "startLine" : 266,
      "endLine" : 271,
      "cleanedStartLine" : 214,
      "cleanedEndLine" : 219
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateStructures.kt",
        "extension" : "kt",
        "linesOfCode" : 265,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 229,
      "startLine" : 90,
      "endLine" : 96,
      "cleanedStartLine" : 67,
      "cleanedEndLine" : 72
    }, {
      "file" : {
        "relativePath" : "generator/src/main/kotlin/space/jetbrains/api/generator/GenerateTypes.kt",
        "extension" : "kt",
        "linesOfCode" : 281,
        "components" : [ "primary::generator" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 233,
      "startLine" : 55,
      "endLine" : 61,
      "cleanedStartLine" : 34,
      "cleanedEndLine" : 39
    } ]
  } ],
  "overallDuplication" : null
}