guardian/interactive-uk-historic-temperatures
Duplication Places in code with 6 or more lines that are exactly the same. |
Duplication Overall
- 74% duplication:
- 8,522 cleaned lines of cleaned code (without empty lines, comments, and frequently duplicated constructs such as imports)
- 6,387 duplicated lines
- 276,478 duplicates
Duplication per Extension
Duplication per Component (primary)
Duplication Between Components (50+ lines)
flowchart TB
n0["assets"]
n1["gis"]
n0 ---|"5208"| n1
classDef default fill:#00b2ee,stroke:#ffffff,color:#000000;
classDef highlighted fill:#00b2ee,stroke:#ffffff,color:#000000;
linkStyle 0 stroke:#DC143CFF,stroke-width:10px
Download:
Mermaid (.mmd)
(open online Mermaid editor)
2D force graph
|
3D force graph
Show more details on duplication between components...
From Component
--> To Component
Duplicated
Lines
File Pairs
Details
assets (100%)
  --> gis (73%)
5208
138384 file pairs
details...
flowchart TB
n0["assets"]
n1["gis"]
n0 ---|"5208"| n1
classDef default fill:#00b2ee,stroke:#ffffff,color:#000000;
classDef highlighted fill:#00b2ee,stroke:#ffffff,color:#000000;
linkStyle 0 stroke:#DC143CFF,stroke-width:10px
Show more details on duplication between components...
| From Component --> To Component |
Duplicated Lines |
File Pairs | Details |
|---|---|---|---|
| assets (100%)   --> gis (73%) |
5208 | 138384 file pairs | details... |
Longest Duplicates
The list of 50 longest duplicates.
| Size | # | Folders | Files | Lines | Code |
|---|---|---|---|---|---|
| 99 | x 2 | shared/cssshared/css | 1:112 (94%)1:112 (94%) | view | |
| 85 | x 2 | atoms/default/client/cssatoms/rainfall-winter/client/css | 1:99 (100%)1:99 (100%) | view | |
| 85 | x 2 | atoms/droughts/client/cssatoms/rainfall-summer/client/css | 1:99 (100%)1:99 (100%) | view | |
| 85 | x 2 | atoms/default/client/cssatoms/rainfall-summer/client/css | 1:99 (100%)1:99 (100%) | view | |
| 85 | x 2 | atoms/droughts/client/cssatoms/rainfall-winter/client/css | 1:99 (100%)1:99 (100%) | view | |
| 85 | x 2 | atoms/default/client/cssatoms/droughts/client/css | 1:99 (100%)1:99 (100%) | view | |
| 85 | x 2 | atoms/rainfall-summer/client/cssatoms/rainfall-winter/client/css | 1:99 (100%)1:99 (100%) | view | |
| 33 | x 2 | atoms/rainfall-summer/client/jsatoms/rainfall-winter/client/js | 26:70 (64%)26:70 (63%) | view | |
| 30 | x 2 | atoms/rainfall-summer/client/cssatoms/rainfall-winter/client/css | 18:65 (73%)18:65 (73%) | view | |
| 24 | x 2 | atoms/rainfall-summer/client/cssatoms/rainfall-winter/client/css | 1:27 (100%)1:27 (100%) | view | |
| 24 | x 2 | atoms/default/client/cssatoms/droughts/client/css | 1:27 (100%)1:27 (100%) | view | |
| 24 | x 2 | atoms/default/client/cssatoms/droughts/client/css | 20:58 (64%)17:55 (68%) | view | |
| 24 | x 2 | atoms/default/client/cssatoms/rainfall-summer/client/css | 1:27 (100%)1:27 (100%) | view | |
| 24 | x 2 | atoms/droughts/client/cssatoms/rainfall-winter/client/css | 1:27 (100%)1:27 (100%) | view | |
| 24 | x 2 | atoms/droughts/client/cssatoms/rainfall-summer/client/css | 1:27 (100%)1:27 (100%) | view | |
| 24 | x 2 | atoms/default/client/cssatoms/rainfall-winter/client/css | 1:27 (100%)1:27 (100%) | view | |
| 21 | x 2 | shared/jsshared/js | 46:84 (38%)90:128 (27%) | view | |
| 20 | x 2 | atoms/droughts/client/cssatoms/rainfall-winter/client/css | 23:55 (57%)33:65 (48%) | view | |
| 20 | x 2 | atoms/default/client/cssatoms/rainfall-summer/client/css | 26:58 (54%)33:65 (48%) | view | |
| 20 | x 2 | atoms/default/client/cssatoms/rainfall-winter/client/css | 26:58 (54%)33:65 (48%) | view | |
| 20 | x 2 | atoms/droughts/client/cssatoms/rainfall-summer/client/css | 23:55 (57%)33:65 (48%) | view | |
| 18 | x 2 | atoms/default/client/jsatoms/rainfall-winter/client/js | 1:24 (100%)1:24 (100%) | view | |
| 18 | x 2 | atoms/rainfall-summer/client/jsatoms/rainfall-winter/client/js | 1:24 (100%)1:24 (100%) | view | |
| 18 | x 2 | atoms/default/client/jsatoms/rainfall-summer/client/js | 1:24 (100%)1:24 (100%) | view | |
| 18 | x 2 | atoms/droughts/client/jsatoms/rainfall-summer/client/js | 1:24 (100%)1:24 (100%) | view | |
| 18 | x 2 | atoms/default/client/jsatoms/droughts/client/js | 1:24 (100%)1:24 (100%) | view | |
| 18 | x 2 | atoms/droughts/client/jsatoms/rainfall-winter/client/js | 1:24 (100%)1:24 (100%) | view | |
| 16 | x 2 | atoms/droughts/client/jsatoms/rainfall-winter/client/js | 1:24 (100%)1:24 (100%) | view | |
| 16 | x 2 | atoms/default/client/jsatoms/rainfall-summer/client/js | 1:24 (100%)1:24 (100%) | view | |
| 16 | x 2 | atoms/rainfall-summer/client/jsatoms/rainfall-winter/client/js | 1:24 (100%)1:24 (100%) | view | |
| 16 | x 2 | atoms/default/client/jsatoms/droughts/client/js | 1:24 (100%)1:24 (100%) | view | |
| 16 | x 2 | atoms/default/client/jsatoms/rainfall-winter/client/js | 1:24 (100%)1:24 (100%) | view | |
| 16 | x 2 | atoms/droughts/client/jsatoms/rainfall-summer/client/js | 1:24 (100%)1:24 (100%) | view | |
| 14 | x 2 | shared/jsshared/js | 25:39 (25%)41:55 (18%) | view | |
| 12 | x 2 | shared/jsshared/js | 3:14 (22%)5:16 (15%) | view | |
| 10 | x 2 | gisgis | 973:982 (1%)993:1002 (1%) | view | |
| 9 | x 2 | atoms/default/client/cssatoms/rainfall-summer/client/css | 2:14 (24%)2:14 (21%) | view | |
| 9 | x 2 | atoms/default/client/cssatoms/droughts/client/css | 2:14 (24%)2:14 (25%) | view | |
| 9 | x 2 | atoms/droughts/client/cssatoms/rainfall-summer/client/css | 2:14 (25%)2:14 (21%) | view | |
| 8 | x 2 | atoms/rainfall-summer/client/jsatoms/rainfall-winter/client/js | 8:19 (15%)8:19 (15%) | view | |
| 8 | x 2 | atoms/droughts/client/cssatoms/rainfall-winter/client/css | 2:12 (22%)2:12 (19%) | view | |
| 8 | x 2 | atoms/rainfall-summer/client/cssatoms/rainfall-winter/client/css | 2:12 (19%)2:12 (19%) | view | |
| 8 | x 2 | atoms/default/client/cssatoms/rainfall-winter/client/css | 2:12 (21%)2:12 (19%) | view | |
| 7 | x 2 | gisgis | 589:612 (<1%)1115:1138 (<1%) | view | |
| 7 | x 2 | gisgis | 721:748 (<1%)1110:1137 (<1%) | view | |
| 7 | x 2 | assets/winter-rainfall-imgassets/winter-rainfall-img | 1:8 (100%)1:8 (100%) | view | |
| 7 | x 2 | gis/rainfall/winter-rainfall-pnggis/rainfall/winter-rainfall-png | 1:8 (100%)1:8 (100%) | view | |
| 7 | x 2 | assets/winter-rainfall-imggis/rainfall/winter-rainfall-png | 1:8 (100%)1:8 (100%) | view | |
| 7 | x 2 | gis/rainfall/summer-rainfall-pnggis/rainfall/summer-rainfall-png | 1:8 (100%)1:8 (100%) | view | |
| 7 | x 2 | assets/winter-rainfall-imggis/rainfall/winter-rainfall-png | 1:8 (100%)1:8 (100%) | view |
Most Frequent Duplicates
The list of 50 most frequently found duplicates.
| Size | # | Folders | Files | Lines | Code |
|---|---|---|---|---|---|
| 6 | x 744 | gis/rainfall/winter-rainfall-pnggis/rainfall/winter-rainfall-pngassets/winter-rainfall-imgassets/winter-rainfall-imggis/rainfall/winter-rainfall-pnggis/rainfall/winter-rainfall-pnggis/rainfall/summer-rainfall-pnggis/rainfall/winter-rainfall-pngassets/winter-rainfall-imggis/rainfall/summer-rainfall-png... | raster-1925-band1-coloured.png.aux.xmlraster-2008-band1-coloured.png.aux.xmlraster-1980-band1-coloured.png.aux.xmlraster-1988-band1-coloured.png.aux.xmlraster-1924-band1-coloured.png.aux.xmlraster-2018-band1-coloured.png.aux.xmlraster-1901-band3-coloured.png.aux.xmlraster-1932-band1-coloured.png.aux.xmlraster-2021-band1-coloured.png.aux.xmlraster-1991-band3-coloured.png.aux.xml... |
1:7 (85%)1:7 (85%)1:7 (85%)1:7 (85%)1:7 (85%)1:7 (85%)1:7 (85%)1:7 (85%)1:7 (85%)1:7 (85%)... | view |
| 6 | x 744 | gis/rainfall/winter-rainfall-pnggis/rainfall/winter-rainfall-pngassets/winter-rainfall-imgassets/winter-rainfall-imggis/rainfall/winter-rainfall-pnggis/rainfall/winter-rainfall-pnggis/rainfall/summer-rainfall-pnggis/rainfall/winter-rainfall-pngassets/winter-rainfall-imggis/rainfall/summer-rainfall-png... | raster-1925-band1-coloured.png.aux.xmlraster-2008-band1-coloured.png.aux.xmlraster-1980-band1-coloured.png.aux.xmlraster-1988-band1-coloured.png.aux.xmlraster-1924-band1-coloured.png.aux.xmlraster-2018-band1-coloured.png.aux.xmlraster-1901-band3-coloured.png.aux.xmlraster-1932-band1-coloured.png.aux.xmlraster-2021-band1-coloured.png.aux.xmlraster-1991-band3-coloured.png.aux.xml... |
2:8 (85%)2:8 (85%)2:8 (85%)2:8 (85%)2:8 (85%)2:8 (85%)2:8 (85%)2:8 (85%)2:8 (85%)2:8 (85%)... | view |
| 6 | x 8 | atoms/rainfall-summer/client/cssatoms/rainfall-winter/client/cssatoms/default/client/cssatoms/droughts/client/cssatoms/default/client/cssatoms/rainfall-summer/client/cssatoms/rainfall-winter/client/cssatoms/droughts/client/css | 2:7 (25%)2:7 (25%)2:7 (25%)2:7 (25%)35:40 (7%)35:40 (7%)35:40 (7%)35:40 (7%) | view | |
| 6 | x 8 | atoms/droughts/client/cssatoms/rainfall-winter/client/cssatoms/default/client/cssatoms/rainfall-summer/client/cssatoms/rainfall-winter/client/cssatoms/droughts/client/cssatoms/rainfall-summer/client/cssatoms/default/client/css | 38:43 (17%)48:53 (14%)20:25 (25%)20:25 (25%)20:25 (25%)20:25 (25%)48:53 (14%)41:46 (16%) | view | |
| 6 | x 8 | atoms/droughts/client/cssatoms/rainfall-winter/client/cssatoms/default/client/cssatoms/rainfall-summer/client/cssatoms/rainfall-winter/client/cssatoms/droughts/client/cssatoms/rainfall-summer/client/cssatoms/default/client/css | 39:44 (17%)49:54 (14%)21:26 (25%)21:26 (25%)21:26 (25%)21:26 (25%)49:54 (14%)42:47 (16%) | view | |
| 6 | x 4 | atoms/droughts/client/cssatoms/rainfall-winter/client/cssatoms/default/client/cssatoms/rainfall-summer/client/css | 47:54 (17%)57:64 (14%)50:57 (16%)57:64 (14%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 85:91 (7%)85:91 (7%)85:91 (7%)85:91 (7%) | view | |
| 6 | x 4 | atoms/rainfall-summer/client/cssatoms/rainfall-winter/client/cssatoms/default/client/cssatoms/droughts/client/css | 14:20 (25%)14:20 (25%)14:20 (25%)14:20 (25%) | view | |
| 6 | x 4 | atoms/droughts/client/cssatoms/rainfall-winter/client/cssatoms/default/client/cssatoms/rainfall-summer/client/css | 2:10 (17%)2:10 (14%)2:10 (16%)2:10 (14%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 30:36 (7%)30:36 (7%)30:36 (7%)30:36 (7%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 8:15 (7%)8:15 (7%)8:15 (7%)8:15 (7%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 13:20 (7%)13:20 (7%)13:20 (7%)13:20 (7%) | view | |
| 6 | x 4 | atoms/droughts/client/jsatoms/rainfall-winter/client/jsatoms/default/client/jsatoms/rainfall-summer/client/js | 10:17 (37%)10:17 (37%)10:17 (37%)10:17 (37%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 76:82 (7%)76:82 (7%)76:82 (7%)76:82 (7%) | view | |
| 6 | x 4 | atoms/droughts/client/jsatoms/rainfall-winter/client/jsatoms/default/client/jsatoms/rainfall-summer/client/js | 8:14 (37%)8:14 (37%)8:14 (37%)8:14 (37%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 56:62 (7%)56:62 (7%)56:62 (7%)56:62 (7%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 73:79 (7%)73:79 (7%)73:79 (7%)73:79 (7%) | view | |
| 6 | x 4 | atoms/rainfall-summer/client/cssatoms/rainfall-winter/client/cssatoms/default/client/cssatoms/droughts/client/css | 19:24 (25%)19:24 (25%)19:24 (25%)19:24 (25%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 9:16 (7%)9:16 (7%)9:16 (7%)9:16 (7%) | view | |
| 6 | x 4 | atoms/droughts/client/jsatoms/rainfall-winter/client/jsatoms/default/client/jsatoms/rainfall-summer/client/js | 13:20 (37%)13:20 (37%)13:20 (37%)13:20 (37%) | view | |
| 6 | x 4 | atoms/droughts/client/jsatoms/rainfall-winter/client/jsatoms/default/client/jsatoms/rainfall-summer/client/js | 11:17 (33%)11:17 (33%)11:17 (33%)11:17 (33%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 12:18 (7%)12:18 (7%)12:18 (7%)12:18 (7%) | view | |
| 6 | x 4 | atoms/rainfall-summer/client/cssatoms/rainfall-winter/client/cssatoms/default/client/cssatoms/droughts/client/css | 11:18 (25%)11:18 (25%)11:18 (25%)11:18 (25%) | view | |
| 6 | x 4 | atoms/droughts/client/jsatoms/rainfall-winter/client/jsatoms/default/client/jsatoms/rainfall-summer/client/js | 8:15 (33%)8:15 (33%)8:15 (33%)8:15 (33%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 10:17 (7%)10:17 (7%)10:17 (7%)10:17 (7%) | view | |
| 6 | x 4 | atoms/rainfall-summer/client/cssatoms/rainfall-winter/client/cssatoms/default/client/cssatoms/droughts/client/css | 5:11 (25%)5:11 (25%)5:11 (25%)5:11 (25%) | view | |
| 6 | x 4 | atoms/droughts/client/jsatoms/rainfall-winter/client/jsatoms/default/client/jsatoms/rainfall-summer/client/js | 16:21 (33%)16:21 (33%)16:21 (33%)16:21 (33%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 53:59 (7%)53:59 (7%)53:59 (7%)53:59 (7%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 5:12 (7%)5:12 (7%)5:12 (7%)5:12 (7%) | view | |
| 6 | x 4 | atoms/droughts/client/cssatoms/rainfall-winter/client/cssatoms/default/client/cssatoms/rainfall-summer/client/css | 45:52 (17%)55:62 (14%)48:55 (16%)55:62 (14%) | view | |
| 6 | x 4 | atoms/droughts/client/jsatoms/rainfall-winter/client/jsatoms/default/client/jsatoms/rainfall-summer/client/js | 1:9 (37%)1:9 (37%)1:9 (37%)1:9 (37%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 1:8 (7%)1:8 (7%)1:8 (7%)1:8 (7%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 23:29 (7%)23:29 (7%)23:29 (7%)23:29 (7%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 28:34 (7%)28:34 (7%)28:34 (7%)28:34 (7%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 71:77 (7%)71:77 (7%)71:77 (7%)71:77 (7%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 70:76 (7%)70:76 (7%)70:76 (7%)70:76 (7%) | view | |
| 6 | x 4 | atoms/droughts/client/jsatoms/rainfall-winter/client/jsatoms/default/client/jsatoms/rainfall-summer/client/js | 16:24 (37%)16:24 (37%)16:24 (37%)16:24 (37%) | view | |
| 6 | x 4 | atoms/droughts/client/jsatoms/rainfall-winter/client/jsatoms/default/client/jsatoms/rainfall-summer/client/js | 6:12 (33%)6:12 (33%)6:12 (33%)6:12 (33%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 67:72 (7%)67:72 (7%)67:72 (7%)67:72 (7%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 57:64 (7%)57:64 (7%)57:64 (7%)57:64 (7%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 44:49 (7%)44:49 (7%)44:49 (7%)44:49 (7%) | view | |
| 6 | x 4 | atoms/droughts/client/jsatoms/rainfall-winter/client/jsatoms/default/client/jsatoms/rainfall-summer/client/js | 3:12 (37%)3:12 (37%)3:12 (37%)3:12 (37%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 24:30 (7%)24:30 (7%)24:30 (7%)24:30 (7%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 54:60 (7%)54:60 (7%)54:60 (7%)54:60 (7%) | view | |
| 6 | x 4 | atoms/droughts/client/cssatoms/rainfall-winter/client/cssatoms/default/client/cssatoms/rainfall-summer/client/css | 35:40 (17%)45:50 (14%)38:43 (16%)45:50 (14%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 61:67 (7%)61:67 (7%)61:67 (7%)61:67 (7%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 68:73 (7%)68:73 (7%)68:73 (7%)68:73 (7%) | view | |
| 6 | x 4 | atoms/rainfall-summer/client/cssatoms/rainfall-winter/client/cssatoms/default/client/cssatoms/droughts/client/css | 1:6 (25%)1:6 (25%)1:6 (25%)1:6 (25%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 87:93 (7%)87:93 (7%)87:93 (7%)87:93 (7%) | view | |
| 6 | x 4 | atoms/default/client/cssatoms/rainfall-winter/client/cssatoms/rainfall-summer/client/cssatoms/droughts/client/css | 79:85 (7%)79:85 (7%)79:85 (7%)79:85 (7%) | view |
Duplicated Units
The list of top 2 duplicated units.
About This Analysis
- For duplication, we look at places in code where there are 6 or more lines of code that are exactly the same.
- Before duplication is calculated, the code is cleaned to remove empty lines, comments, and frequently duplicated constructs such as imports.
- You should aim at having as little as possible (<5%) of duplicated code as high-level of duplication can lead to maintenance difficulties, poor factoring, and logical contradictions.
Learn more...
- To learn more about duplications and techniques for eliminating duplication, Sokrates recommends the following resources:
- Avoid Repetition, MartinFlower.com (IEEE Software article)
- Refactoring duplicated code, sourcemaking.com
- Beck Design Rules, MartinFowler.com
- DRY (Don't Repeat Yourself) Principle, Wikipedia
- The Cut-and-Paste Programming Software Development Anti-Pattern, sourcemaking.com
- Code Smells / Duplicated Code, Jeff Atwood, codinghorror.com:
- "Duplicated code is the bane of software development. Stamp out duplication whenever possible. You should always be on the lookout for more subtle cases of near-duplication, too. Don't Repeat Yourself!"
- Reducing Coupling, MartinFlower.com (IEEE Software article):
- "There are several ways to describe coupling, but it boils down to this: If changing one module in a program requires changing another module, then coupling exists. ... Duplication always implies coupling, because changing one piece of duplicate code implies changing the other."