From ec51346de8070e81d76e27826434c45184f33d71 Mon Sep 17 00:00:00 2001 From: Braell Dotson Date: Mon, 29 Jun 2026 15:59:34 -0500 Subject: [PATCH 1/4] Add Bearkat Centralization statistics plugin --- modules/BearkatCentralization/README.md | 4 + modules/BearkatCentralization/pom.xml | 82 ++++ .../gephidegreeplugin/Centralization.java | 446 ++++++++++++++++++ .../CentralizationBuilder.java | 24 + .../gephidegreeplugin/CentralizationUI.java | 58 +++ .../src/main/nbm/manifest.mf | 5 + pom.xml | 1 + 7 files changed, 620 insertions(+) create mode 100644 modules/BearkatCentralization/README.md create mode 100644 modules/BearkatCentralization/pom.xml create mode 100644 modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/Centralization.java create mode 100644 modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/CentralizationBuilder.java create mode 100644 modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/CentralizationUI.java create mode 100644 modules/BearkatCentralization/src/main/nbm/manifest.mf diff --git a/modules/BearkatCentralization/README.md b/modules/BearkatCentralization/README.md new file mode 100644 index 000000000..36b1586cf --- /dev/null +++ b/modules/BearkatCentralization/README.md @@ -0,0 +1,4 @@ +## Bearkat Centralization + +This README supports Markdown, see [syntax](https://help.github.com/articles/markdown-basics/) + diff --git a/modules/BearkatCentralization/pom.xml b/modules/BearkatCentralization/pom.xml new file mode 100644 index 000000000..85833621f --- /dev/null +++ b/modules/BearkatCentralization/pom.xml @@ -0,0 +1,82 @@ + + + 4.0.0 + + gephi-plugin-parent + org.gephi + 0.11.1 + + + edu.shsu + bearkat-centralization + 1.3.0 + nbm + + Bearkat Centralization + + + + org.netbeans.api + org-openide-util-lookup + RELEASE130 + + + + org.gephi + graph-api + + + + org.gephi + statistics-api + + + + org.gephi + utils-longtask + + + + org.gephi + statistics-plugin + + + + org.gephi + statistics-plugin-ui + + + + + + + org.apache.netbeans.utilities + nbm-maven-plugin + + MIT + Braell Dotson + bdotson10516@gmail.com + https://github.com/bbraell/BearKat-Degree-Centralization---SHSU-Braell-Dotson + https://github.com/bbraell/gephi-plugins.git + + + + + + + + + + + + oss-sonatype + oss-sonatype + https://oss.sonatype.org/content/repositories/snapshots/ + + true + + + + + + diff --git a/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/Centralization.java b/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/Centralization.java new file mode 100644 index 000000000..2a8737d61 --- /dev/null +++ b/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/Centralization.java @@ -0,0 +1,446 @@ +package com.mycompany.gephidegreeplugin; + +import org.gephi.graph.api.Column; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.Table; +import org.gephi.statistics.plugin.EigenvectorCentrality; +import org.gephi.statistics.plugin.GraphDistance; +import org.gephi.statistics.spi.Statistics; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.Map; +import java.util.Queue; + +public class Centralization implements Statistics { + + private double degreeCentralization; + private double weightedDegreeCentralization; + private double inDegreeCentralization; + private double outDegreeCentralization; + private double betweennessCentralization; + private double eigenvectorCentralization; + private double closenessCentralization; + private double harmonicClosenessCentralization; + private boolean directed; + + @Override + public void execute(GraphModel graphModel) { + Graph graph = graphModel.getGraph(); + directed = graphModel.isDirected(); + + calculateDegreeCentralization(graphModel, graph); + calculateWeightedDegreeCentralization(graphModel, graph); + + if (directed) { + calculateInDegreeCentralization(graphModel); + calculateOutDegreeCentralization(graphModel); + } + + calculateBetweennessCentralization(graphModel, graph); + calculateEigenvectorCentralization(graphModel, graph); + calculateClosenessCentralization(graphModel, graph); + calculateHarmonicClosenessCentralization(graphModel, graph); + } + + private void calculateDegreeCentralization(GraphModel graphModel, Graph graph) { + int n = graph.getNodeCount(); + + Table nodeTable = graphModel.getNodeTable(); + Column col = nodeTable.getColumn("degree_centrality"); + + if (col == null) { + col = nodeTable.addColumn("degree_centrality", Double.class); + } + + int maxDegree = 0; + + for (Node node : graph.getNodes()) { + int degree = graph.getDegree(node); + maxDegree = Math.max(maxDegree, degree); + node.setAttribute(col, (double) degree); + } + + double numerator = 0; + + for (Node node : graph.getNodes()) { + int degree = graph.getDegree(node); + numerator += maxDegree - degree; + } + + double denominator = (n - 1.0) * (n - 2.0); + degreeCentralization = denominator > 0 ? numerator / denominator : 0; + } + + private void calculateWeightedDegreeCentralization(GraphModel graphModel, Graph graph) { + int n = graph.getNodeCount(); + + Table nodeTable = graphModel.getNodeTable(); + Column col = nodeTable.getColumn("weighted_degree_centrality"); + + if (col == null) { + col = nodeTable.addColumn("weighted_degree_centrality", Double.class); + } + + double maxWeightedDegree = 0; + + for (Node node : graph.getNodes()) { + double weightedDegree = 0; + + for (Edge edge : graph.getEdges(node)) { + double weight = edge.getWeight(); + + if (weight <= 0) { + weight = 1.0; + } + + weightedDegree += weight; + } + + node.setAttribute(col, weightedDegree); + maxWeightedDegree = Math.max(maxWeightedDegree, weightedDegree); + } + + double numerator = 0; + + for (Node node : graph.getNodes()) { + Double weightedDegree = (Double) node.getAttribute(col); + + if (weightedDegree == null) { + weightedDegree = 0.0; + } + + numerator += maxWeightedDegree - weightedDegree; + } + + double denominator = maxWeightedDegree * (n - 1.0); + weightedDegreeCentralization = denominator > 0 ? numerator / denominator : 0; + } + + private void calculateInDegreeCentralization(GraphModel graphModel) { + DirectedGraph graph = graphModel.getDirectedGraph(); + int n = graph.getNodeCount(); + + Table nodeTable = graphModel.getNodeTable(); + Column col = nodeTable.getColumn("in_degree_centrality"); + + if (col == null) { + col = nodeTable.addColumn("in_degree_centrality", Double.class); + } + + int maxInDegree = 0; + + for (Node node : graph.getNodes()) { + int inDegree = graph.getInDegree(node); + maxInDegree = Math.max(maxInDegree, inDegree); + node.setAttribute(col, (double) inDegree); + } + + double numerator = 0; + + for (Node node : graph.getNodes()) { + int inDegree = graph.getInDegree(node); + numerator += maxInDegree - inDegree; + } + + double denominator = (n - 1.0) * (n - 1.0); + inDegreeCentralization = denominator > 0 ? numerator / denominator : 0; + } + + private void calculateOutDegreeCentralization(GraphModel graphModel) { + DirectedGraph graph = graphModel.getDirectedGraph(); + int n = graph.getNodeCount(); + + Table nodeTable = graphModel.getNodeTable(); + Column col = nodeTable.getColumn("out_degree_centrality"); + + if (col == null) { + col = nodeTable.addColumn("out_degree_centrality", Double.class); + } + + int maxOutDegree = 0; + + for (Node node : graph.getNodes()) { + int outDegree = graph.getOutDegree(node); + maxOutDegree = Math.max(maxOutDegree, outDegree); + node.setAttribute(col, (double) outDegree); + } + + double numerator = 0; + + for (Node node : graph.getNodes()) { + int outDegree = graph.getOutDegree(node); + numerator += maxOutDegree - outDegree; + } + + double denominator = (n - 1.0) * (n - 1.0); + outDegreeCentralization = denominator > 0 ? numerator / denominator : 0; + } + + private void calculateBetweennessCentralization(GraphModel graphModel, Graph graph) { + GraphDistance distance = new GraphDistance(); + distance.setDirected(graphModel.isDirected()); + distance.execute(graphModel); + + int n = graph.getNodeCount(); + + Table nodeTable = graphModel.getNodeTable(); + Column betweenCol = nodeTable.getColumn(GraphDistance.BETWEENNESS); + Column myCol = nodeTable.getColumn("betweenness_centrality"); + + if (myCol == null) { + myCol = nodeTable.addColumn("betweenness_centrality", Double.class); + } + + double maxBetweenness = 0; + + for (Node node : graph.getNodes()) { + Double value = (Double) node.getAttribute(betweenCol); + + if (value == null) { + value = 0.0; + } + + node.setAttribute(myCol, value); + maxBetweenness = Math.max(maxBetweenness, value); + } + + double numerator = 0; + + for (Node node : graph.getNodes()) { + Double value = (Double) node.getAttribute(myCol); + + if (value == null) { + value = 0.0; + } + + numerator += maxBetweenness - value; + } + + double denominator; + +if (n > 2) { + if (graphModel.isDirected()) { + denominator = (n - 1.0) * (n - 1.0) * (n - 2.0); + } else { + denominator = ((n - 1.0) * (n - 1.0) * (n - 2.0)) / 2.0; + } +} else { + denominator = 1; +} + betweennessCentralization = denominator > 0 ? numerator / denominator : 0; + } + + private void calculateEigenvectorCentralization(GraphModel graphModel, Graph graph) { + EigenvectorCentrality eigenvector = new EigenvectorCentrality(); + eigenvector.execute(graphModel); + + int n = graph.getNodeCount(); + + Table nodeTable = graphModel.getNodeTable(); + Column eigenCol = nodeTable.getColumn(EigenvectorCentrality.EIGENVECTOR); + Column myCol = nodeTable.getColumn("eigenvector_centrality"); + + if (myCol == null) { + myCol = nodeTable.addColumn("eigenvector_centrality", Double.class); + } + + double maxEigenvector = 0; + + for (Node node : graph.getNodes()) { + Double value = (Double) node.getAttribute(eigenCol); + + if (value == null) { + value = 0.0; + } + + node.setAttribute(myCol, value); + maxEigenvector = Math.max(maxEigenvector, value); + } + + double numerator = 0; + + for (Node node : graph.getNodes()) { + Double value = (Double) node.getAttribute(myCol); + + if (value == null) { + value = 0.0; + } + + numerator += maxEigenvector - value; + } + + double denominator = n - 1.0; + eigenvectorCentralization = denominator > 0 ? numerator / denominator : 0; + } + + private void calculateClosenessCentralization(GraphModel graphModel, Graph graph) { + int n = graph.getNodeCount(); + + Table nodeTable = graphModel.getNodeTable(); + Column closenessCol = nodeTable.getColumn(GraphDistance.CLOSENESS); + Column myCol = nodeTable.getColumn("closeness_centrality"); + + if (myCol == null) { + myCol = nodeTable.addColumn("closeness_centrality", Double.class); + } + + double maxCloseness = 0; + + for (Node node : graph.getNodes()) { + Double value = (Double) node.getAttribute(closenessCol); + + if (value == null) { + value = 0.0; + } + + node.setAttribute(myCol, value); + maxCloseness = Math.max(maxCloseness, value); + } + + double numerator = 0; + + for (Node node : graph.getNodes()) { + Double value = (Double) node.getAttribute(myCol); + + if (value == null) { + value = 0.0; + } + + numerator += maxCloseness - value; + } + + double denominator = n - 2.0; + closenessCentralization = denominator > 0 ? numerator / denominator : 0; + } + + private void calculateHarmonicClosenessCentralization(GraphModel graphModel, Graph graph) { + int n = graph.getNodeCount(); + + Table nodeTable = graphModel.getNodeTable(); + Column col = nodeTable.getColumn("harmonic_closeness_centrality"); + + if (col == null) { + col = nodeTable.addColumn("harmonic_closeness_centrality", Double.class); + } + + double maxHarmonic = 0; + + for (Node node : graph.getNodes()) { + Map distances = bfsDistances(graphModel, graph, node); + double harmonic = 0; + + for (Node other : graph.getNodes()) { + if (!node.equals(other)) { + Integer distance = distances.get(other); + + if (distance != null && distance > 0) { + harmonic += 1.0 / distance; + } + } + } + + node.setAttribute(col, harmonic); + maxHarmonic = Math.max(maxHarmonic, harmonic); + } + + double numerator = 0; + + for (Node node : graph.getNodes()) { + Double harmonic = (Double) node.getAttribute(col); + + if (harmonic == null) { + harmonic = 0.0; + } + + numerator += maxHarmonic - harmonic; + } + + double denominator; + + if (n > 2) { + if (graphModel.isDirected()) { + denominator = (n - 1.0) * (n - 1.0); + } else { + denominator = ((n - 1.0) * (n - 2.0)) / 2.0; + } + } else { + denominator = 1; + } + + harmonicClosenessCentralization = denominator > 0 ? numerator / denominator : 0; +} + +private Map bfsDistances(GraphModel graphModel, Graph graph, Node start) { + Map distances = new HashMap<>(); + Queue queue = new LinkedList<>(); + + distances.put(start, 0); + queue.add(start); + + while (!queue.isEmpty()) { + Node current = queue.poll(); + int currentDistance = distances.get(current); + + for (Node neighbor : graph.getNeighbors(current)) { + if (!distances.containsKey(neighbor)) { + distances.put(neighbor, currentDistance + 1); + queue.add(neighbor); + } + } + } + + return distances; +} + + @Override + public String getReport() { + String directedText; + + if (directed) { + directedText = "

In-Degree Centralization: " + inDegreeCentralization + "

" + + "

Out-Degree Centralization: " + outDegreeCentralization + "

"; + } else { + directedText = "

In-Degree Centralization: Not applicable for undirected graphs

" + + "

Out-Degree Centralization: Not applicable for undirected graphs

"; + } + + return "" + + "

Bearkat Centralization Report

" + + "

Degree Centralization: " + degreeCentralization + "

" ++ "

Weighted Degree Centralization: " + weightedDegreeCentralization + "

" ++ directedText ++ "

Betweenness Centralization: " + betweennessCentralization + "

" ++ "

Eigenvector Centralization: " + eigenvectorCentralization + "

" ++ "

Closeness Centralization: " + closenessCentralization + "

" ++ "

Harmonic Closeness Centralization: " + harmonicClosenessCentralization + "

" + ++ "
" ++ "

Notes and Interpretation

" + ++ "

Closeness Centralization: " ++ "Standard closeness centralization may be affected by disconnected graphs or isolates because shortest-path distances become undefined. " ++ "The closeness values reported by this plugin rely on Gephi's underlying implementation. " ++ "For disconnected networks, Harmonic Closeness Centralization is generally the preferred measure because unreachable nodes contribute 0 through reciprocal distances.

" + ++ "

Eigenvector Centralization: " ++ "Eigenvector centralization may vary across software packages because implementations can differ in eigenvector normalization methods and graph-level centralization normalization. " ++ "Results should therefore be interpreted with attention to the software and methodology used.

" + ++ "
" ++ "

Node-level values for every metric are available in Data Laboratory → Nodes.

" + + "
" ++ "

Citations:

" ++ "

Freeman, Linton C. “Centrality in Social Networks Conceptual Clarification.” " ++ "Social Networks 1, no. 3 (1978): 215–39.

" ++ "

Borgatti, Stephen P. “Identifying Sets of Key Players in a Social Network.” " ++ "Computational & Mathematical Organization Theory 12 (2006): 21–34.

" ++ "

Gil, J. and Schmidt, S. (1996). “The Origin of the Mexican Network of Power.” " ++ "Proceedings of the International Social Network Conference, Charleston, SC, 22–25.

" ++ "

Programmed by Braell Dotson and Dr. Nate Jones at Sam Houston State University.

" + + ""; + } +} \ No newline at end of file diff --git a/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/CentralizationBuilder.java b/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/CentralizationBuilder.java new file mode 100644 index 000000000..62232f93f --- /dev/null +++ b/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/CentralizationBuilder.java @@ -0,0 +1,24 @@ +package com.mycompany.gephidegreeplugin; + +import org.gephi.statistics.spi.Statistics; +import org.gephi.statistics.spi.StatisticsBuilder; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = StatisticsBuilder.class) +public class CentralizationBuilder implements StatisticsBuilder { + + @Override +public String getName() { + return "Centralization"; +} + + @Override + public Statistics getStatistics() { + return new Centralization(); + } + + @Override + public Class getStatisticsClass() { + return Centralization.class; + } +} \ No newline at end of file diff --git a/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/CentralizationUI.java b/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/CentralizationUI.java new file mode 100644 index 000000000..88766ed19 --- /dev/null +++ b/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/CentralizationUI.java @@ -0,0 +1,58 @@ +package com.mycompany.gephidegreeplugin; + +import javax.swing.JPanel; +import org.gephi.statistics.spi.Statistics; +import org.gephi.statistics.spi.StatisticsUI; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = StatisticsUI.class) + +public class CentralizationUI implements StatisticsUI { + + private Centralization centralization; + + @Override + public JPanel getSettingsPanel() { + return null; + } + + @Override + public void setup(Statistics statistics) { + this.centralization = (Centralization) statistics; + } + + @Override + public void unsetup() { + this.centralization = null; + } + + @Override + public Class getStatisticsClass() { + return Centralization.class; + } + + @Override + public String getValue() { + return "Done"; + } + + @Override +public String getDisplayName() { + return "Centralization"; +} + + @Override + public String getShortDescription() { + return "Measures weighted connections between nodes"; + } + + @Override + public String getCategory() { + return StatisticsUI.CATEGORY_NETWORK_OVERVIEW; + } + + @Override + public int getPosition() { + return 999; + } +} diff --git a/modules/BearkatCentralization/src/main/nbm/manifest.mf b/modules/BearkatCentralization/src/main/nbm/manifest.mf new file mode 100644 index 000000000..f6dad7c95 --- /dev/null +++ b/modules/BearkatCentralization/src/main/nbm/manifest.mf @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +OpenIDE-Module-Name: Bearkat Centralization +OpenIDE-Module-Short-Description: Computes multiple graph centralization metrics from a single Gephi Statistics report. +OpenIDE-Module-Long-Description: Bearkat Centralization computes degree, weighted degree, in-degree, out-degree, betweenness, eigenvector, closeness, and harmonic closeness centralization from a single Statistics report. The plugin also exports node-level values to the Data Laboratory and supports both directed and undirected networks. +OpenIDE-Module-Display-Category: Metric diff --git a/pom.xml b/pom.xml index 64a951086..7b1ae4daf 100644 --- a/pom.xml +++ b/pom.xml @@ -12,6 +12,7 @@ + modules/BearkatCentralization From 3a7de54a1d249514b887acc0dd5057f491e03396 Mon Sep 17 00:00:00 2001 From: Braell Dotson Date: Mon, 29 Jun 2026 16:17:31 -0500 Subject: [PATCH 2/4] Update README and add plugin resources --- modules/BearkatCentralization/README.md | 40 ++++++++++++++++++- .../gephidegreeplugin/Bundle.properties | 6 +++ 2 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 modules/BearkatCentralization/src/main/resources/com/mycompany/gephidegreeplugin/Bundle.properties diff --git a/modules/BearkatCentralization/README.md b/modules/BearkatCentralization/README.md index 36b1586cf..08127ac77 100644 --- a/modules/BearkatCentralization/README.md +++ b/modules/BearkatCentralization/README.md @@ -1,4 +1,40 @@ -## Bearkat Centralization +# Bearkat Centralization -This README supports Markdown, see [syntax](https://help.github.com/articles/markdown-basics/) +Bearkat Centralization is a Gephi Statistics plugin that calculates multiple graph centralization metrics from a single report. +## Features + +The plugin calculates: + +* Degree Centralization +* Weighted Degree Centralization +* In-Degree Centralization +* Out-Degree Centralization +* Betweenness Centralization +* Eigenvector Centralization +* Closeness Centralization +* Harmonic Closeness Centralization + +The plugin also writes node-level values to the Data Laboratory so users can inspect individual node scores after running the statistic. + +## Usage + +1. Open or import a graph in Gephi. +2. Go to the Statistics panel. +3. Run **Centralization**. +4. View graph-level results in the generated report. +5. View node-level values in **Data Laboratory → Nodes**. + +## Notes + +Harmonic closeness centralization is included because standard closeness centralization can be affected by disconnected graphs or isolates. Harmonic closeness uses reciprocal distances, allowing unreachable nodes to contribute 0. + +Eigenvector centralization may vary across software packages because implementations may use different eigenvector normalization methods and graph-level centralization formulas. + +## Credits + +Programmed by Braell Dotson and Dr. Nate Jones at Sam Houston State University. + +## Reference + +Freeman, Linton C. “Centrality in Social Networks: Conceptual Clarification.” *Social Networks* 1, no. 3 (1978): 215–239. diff --git a/modules/BearkatCentralization/src/main/resources/com/mycompany/gephidegreeplugin/Bundle.properties b/modules/BearkatCentralization/src/main/resources/com/mycompany/gephidegreeplugin/Bundle.properties new file mode 100644 index 000000000..e15ee32c6 --- /dev/null +++ b/modules/BearkatCentralization/src/main/resources/com/mycompany/gephidegreeplugin/Bundle.properties @@ -0,0 +1,6 @@ +#Localized module labels. Defaults taken from POM (, , ) if unset. +#OpenIDE-Module-Name= +#OpenIDE-Module-Short-Description= +#OpenIDE-Module-Long-Description= +#OpenIDE-Module-Display-Category= +#Mon Mar 30 13:40:32 CDT 2026 From bdb5d46f3a2dcf9718cfb4438cd82031f1f80076 Mon Sep 17 00:00:00 2001 From: Braell Dotson Date: Thu, 2 Jul 2026 13:17:09 -0500 Subject: [PATCH 3/4] Rename statistic to Bearkat Centralization --- .../com/mycompany/gephidegreeplugin/CentralizationBuilder.java | 2 +- .../java/com/mycompany/gephidegreeplugin/CentralizationUI.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/CentralizationBuilder.java b/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/CentralizationBuilder.java index 62232f93f..f76017bdf 100644 --- a/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/CentralizationBuilder.java +++ b/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/CentralizationBuilder.java @@ -9,7 +9,7 @@ public class CentralizationBuilder implements StatisticsBuilder { @Override public String getName() { - return "Centralization"; + return "Bearkat Centralization"; } @Override diff --git a/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/CentralizationUI.java b/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/CentralizationUI.java index 88766ed19..e644ce332 100644 --- a/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/CentralizationUI.java +++ b/modules/BearkatCentralization/src/main/java/com/mycompany/gephidegreeplugin/CentralizationUI.java @@ -38,7 +38,7 @@ public String getValue() { @Override public String getDisplayName() { - return "Centralization"; + return "Bearkat Centralization"; } @Override From f8df45debd2ff2e8f0b3c8a0662367b1515455e1 Mon Sep 17 00:00:00 2001 From: bbraell Date: Thu, 2 Jul 2026 13:28:50 -0500 Subject: [PATCH 4/4] Add files via upload --- .../BearkatCentralization-1.3.0.nbm | Bin 0 -> 28515 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 modules/BearkatCentralization/BearkatCentralization-1.3.0.nbm diff --git a/modules/BearkatCentralization/BearkatCentralization-1.3.0.nbm b/modules/BearkatCentralization/BearkatCentralization-1.3.0.nbm new file mode 100644 index 0000000000000000000000000000000000000000..bbe123c78f91cd2217ec8f2a70d7e74b1f97026d GIT binary patch literal 28515 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

9A!qQ&F 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 literal 0 HcmV?d00001