public void restoreState(SaveState ss) {
		String[] pathArr = ss.getStrings("PathManagerPanel_PATH", new String[0]);

		if (pathArr.length == 0) {
			return;
		}

		/*
		 * Temporarily remove the listener to prevent too many
		 * notifications from being sent.
		 */
		pathModel.removeTableModelListener(pathModelListener);

		boolean[] enableArr =
			ss.getBooleans("PathManagerPanel_ENABLE", new boolean[pathArr.length]);
		boolean[] editArr = ss.getBooleans("PathManagerPanel_EDIT", new boolean[pathArr.length]);
		boolean[] readArr = ss.getBooleans("PathManagerPanel_READ", new boolean[pathArr.length]);

		List<Path> oldPaths = pathModel.getAllPaths();
		pathModel.clear();

		for (int i = 0; i < pathArr.length; i++) {
			Path path = new Path(pathArr[i], enableArr[i], editArr[i], readArr[i]);
			Path oldPath = getPath(path.getPathAsString(), oldPaths);
			if (oldPath != null) {
				if (!oldPath.isEditable()) {
					boolean enabled = path.isEnabled();
					path = oldPath;
					path.setEnabled(enabled);
				}
				oldPaths.remove(oldPath);
			}
			else if (path.isReadOnly()) {
				// skip read-only paths which are not present in the current config
				// This is needed to thin-out old default entries
				continue;
			}
			pathModel.addPath(path, false);
		}

		for (Path path : oldPaths) {
			if (!path.isEditable()) {
				pathModel.addPath(path, false);
			}
		}

		/*
		 * Reinstall the listener then fire the update.
		 */
		pathModel.addTableModelListener(pathModelListener);
		firePathsChanged();
	}
Restores the paths from the specified SaveState object.
@param ss the SaveState object
Ghidra/Framework/Docking/src/main/java/docking/widgets/pathmanager/PathManager.java