occam-file-system 5.0.114 → 5.0.116

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,9 +10,9 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  var _fileSystem = require("./utilities/fileSystem");
12
12
  function loadProject(projectsDirectoryPath, json, callback) {
13
- var directoryName = json.directoryName, topmostDirectoryName = directoryName, loadOnlyRecognisedFiles = false, project = (0, _fileSystem.loadProject)(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles);
13
+ var projectName = json.projectName, loadOnlyRecognisedFiles = false, project = (0, _fileSystem.loadProject)(projectName, projectsDirectoryPath, loadOnlyRecognisedFiles);
14
14
  json = project !== null ? project.toJSON() : null;
15
15
  return callback(json);
16
16
  }
17
17
 
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkUHJvamVjdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbG9hZFByb2plY3QgYXMgbG9hZFByb2plY3RFeCB9IGZyb20gXCIuL3V0aWxpdGllcy9maWxlU3lzdGVtXCJcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9hZFByb2plY3QocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBqc29uLCBjYWxsYmFjaykge1xuICBjb25zdCB7IGRpcmVjdG9yeU5hbWUgfSA9IGpzb24sXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gZGlyZWN0b3J5TmFtZSwgIC8vL1xuICAgICAgICBsb2FkT25seVJlY29nbmlzZWRGaWxlcyA9IGZhbHNlLCAvLy9cbiAgICAgICAgcHJvamVjdCA9IGxvYWRQcm9qZWN0RXgodG9wbW9zdERpcmVjdG9yeU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xuXG4gIGpzb24gPSAocHJvamVjdCAhPT0gbnVsbCkgPyAgLy8vXG4gICAgICAgICAgICBwcm9qZWN0LnRvSlNPTigpOlxuICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBjYWxsYmFjayhqc29uKTtcbn1cbiJdLCJuYW1lcyI6WyJsb2FkUHJvamVjdCIsInByb2plY3RzRGlyZWN0b3J5UGF0aCIsImpzb24iLCJjYWxsYmFjayIsImRpcmVjdG9yeU5hbWUiLCJ0b3Btb3N0RGlyZWN0b3J5TmFtZSIsImxvYWRPbmx5UmVjb2duaXNlZEZpbGVzIiwicHJvamVjdCIsImxvYWRQcm9qZWN0RXgiLCJ0b0pTT04iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQUlBOzs7ZUFBd0JBOzs7MEJBRnFCO0FBRTlCLFNBQVNBLFlBQVlDLHFCQUFxQixFQUFFQyxJQUFJLEVBQUVDLFFBQVEsRUFBRTtJQUN6RSxJQUFNLEFBQUVDLGdCQUFrQkYsS0FBbEJFLGVBQ0ZDLHVCQUF1QkQsZUFDdkJFLDBCQUEwQixLQUFLLEVBQy9CQyxVQUFVQyxJQUFBQSx1QkFBYSxFQUFDSCxzQkFBc0JKLHVCQUF1Qks7SUFFM0VKLE9BQU8sQUFBQ0ssWUFBWSxJQUFJLEdBQ2RBLFFBQVFFLE1BQU0sS0FDWixJQUFJO0lBRWhCLE9BQU9OLFNBQVNEO0FBQ2xCIn0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkUHJvamVjdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbG9hZFByb2plY3QgYXMgbG9hZFByb2plY3RFeCB9IGZyb20gXCIuL3V0aWxpdGllcy9maWxlU3lzdGVtXCJcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9hZFByb2plY3QocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBqc29uLCBjYWxsYmFjaykge1xuICBjb25zdCB7IHByb2plY3ROYW1lIH0gPSBqc29uLFxuICAgICAgICBsb2FkT25seVJlY29nbmlzZWRGaWxlcyA9IGZhbHNlLCAvLy9cbiAgICAgICAgcHJvamVjdCA9IGxvYWRQcm9qZWN0RXgocHJvamVjdE5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xuXG4gIGpzb24gPSAocHJvamVjdCAhPT0gbnVsbCkgPyAgLy8vXG4gICAgICAgICAgICBwcm9qZWN0LnRvSlNPTigpOlxuICAgICAgICAgICAgICBudWxsO1xuXG4gIHJldHVybiBjYWxsYmFjayhqc29uKTtcbn1cbiJdLCJuYW1lcyI6WyJsb2FkUHJvamVjdCIsInByb2plY3RzRGlyZWN0b3J5UGF0aCIsImpzb24iLCJjYWxsYmFjayIsInByb2plY3ROYW1lIiwibG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMiLCJwcm9qZWN0IiwibG9hZFByb2plY3RFeCIsInRvSlNPTiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBSUE7OztlQUF3QkE7OzswQkFGcUI7QUFFOUIsU0FBU0EsWUFBWUMscUJBQXFCLEVBQUVDLElBQUksRUFBRUMsUUFBUSxFQUFFO0lBQ3pFLElBQU0sQUFBRUMsY0FBZ0JGLEtBQWhCRSxhQUNGQywwQkFBMEIsS0FBSyxFQUMvQkMsVUFBVUMsSUFBQUEsdUJBQWEsRUFBQ0gsYUFBYUgsdUJBQXVCSTtJQUVsRUgsT0FBTyxBQUFDSSxZQUFZLElBQUksR0FDZEEsUUFBUUUsTUFBTSxLQUNaLElBQUk7SUFFaEIsT0FBT0wsU0FBU0Q7QUFDbEIifQ==
@@ -10,9 +10,9 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  var _fileSystem = require("./utilities/fileSystem");
12
12
  function loadRelease(projectsDirectoryPath, json, callback) {
13
- var fileName = json.fileName, topmostFileName = fileName, release = (0, _fileSystem.loadRelease)(topmostFileName, projectsDirectoryPath);
13
+ var releaseName = json.releaseName, release = (0, _fileSystem.loadRelease)(releaseName, projectsDirectoryPath);
14
14
  json = release !== null ? release.toJSON() : null;
15
15
  return callback(json);
16
16
  }
17
17
 
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkUmVsZWFzZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbG9hZFJlbGVhc2UgYXMgbG9hZFJlbGVhc2VFeCB9IGZyb20gXCIuL3V0aWxpdGllcy9maWxlU3lzdGVtXCJcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9hZFJlbGVhc2UocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBqc29uLCBjYWxsYmFjaykge1xuICBjb25zdCB7IGZpbGVOYW1lIH0gPSBqc29uLFxuICAgICAgICB0b3Btb3N0RmlsZU5hbWUgPSBmaWxlTmFtZSwgIC8vL1xuICAgICAgICByZWxlYXNlID0gbG9hZFJlbGVhc2VFeCh0b3Btb3N0RmlsZU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XG5cbiAganNvbiA9IChyZWxlYXNlICE9PSBudWxsKSA/ICAvLy9cbiAgICAgICAgICAgIHJlbGVhc2UudG9KU09OKCk6XG4gICAgICAgICAgICAgIG51bGw7XG5cbiAgcmV0dXJuIGNhbGxiYWNrKGpzb24pO1xufVxuIl0sIm5hbWVzIjpbImxvYWRSZWxlYXNlIiwicHJvamVjdHNEaXJlY3RvcnlQYXRoIiwianNvbiIsImNhbGxiYWNrIiwiZmlsZU5hbWUiLCJ0b3Btb3N0RmlsZU5hbWUiLCJyZWxlYXNlIiwibG9hZFJlbGVhc2VFeCIsInRvSlNPTiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBSUE7OztlQUF3QkE7OzswQkFGcUI7QUFFOUIsU0FBU0EsWUFBWUMscUJBQXFCLEVBQUVDLElBQUksRUFBRUMsUUFBUSxFQUFFO0lBQ3pFLElBQU0sQUFBRUMsV0FBYUYsS0FBYkUsVUFDRkMsa0JBQWtCRCxVQUNsQkUsVUFBVUMsSUFBQUEsdUJBQWEsRUFBQ0YsaUJBQWlCSjtJQUUvQ0MsT0FBTyxBQUFDSSxZQUFZLElBQUksR0FDZEEsUUFBUUUsTUFBTSxLQUNaLElBQUk7SUFFaEIsT0FBT0wsU0FBU0Q7QUFDbEIifQ==
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkUmVsZWFzZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbG9hZFJlbGVhc2UgYXMgbG9hZFJlbGVhc2VFeCB9IGZyb20gXCIuL3V0aWxpdGllcy9maWxlU3lzdGVtXCJcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9hZFJlbGVhc2UocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBqc29uLCBjYWxsYmFjaykge1xuICBjb25zdCB7IHJlbGVhc2VOYW1lIH0gPSBqc29uLFxuICAgICAgICByZWxlYXNlID0gbG9hZFJlbGVhc2VFeChyZWxlYXNlTmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcblxuICBqc29uID0gKHJlbGVhc2UgIT09IG51bGwpID8gIC8vL1xuICAgICAgICAgICAgcmVsZWFzZS50b0pTT04oKTpcbiAgICAgICAgICAgICAgbnVsbDtcblxuICByZXR1cm4gY2FsbGJhY2soanNvbik7XG59XG4iXSwibmFtZXMiOlsibG9hZFJlbGVhc2UiLCJwcm9qZWN0c0RpcmVjdG9yeVBhdGgiLCJqc29uIiwiY2FsbGJhY2siLCJyZWxlYXNlTmFtZSIsInJlbGVhc2UiLCJsb2FkUmVsZWFzZUV4IiwidG9KU09OIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFJQTs7O2VBQXdCQTs7OzBCQUZxQjtBQUU5QixTQUFTQSxZQUFZQyxxQkFBcUIsRUFBRUMsSUFBSSxFQUFFQyxRQUFRLEVBQUU7SUFDekUsSUFBTSxBQUFFQyxjQUFnQkYsS0FBaEJFLGFBQ0ZDLFVBQVVDLElBQUFBLHVCQUFhLEVBQUNGLGFBQWFIO0lBRTNDQyxPQUFPLEFBQUNHLFlBQVksSUFBSSxHQUNkQSxRQUFRRSxNQUFNLEtBQ1osSUFBSTtJQUVoQixPQUFPSixTQUFTRDtBQUNsQiJ9
@@ -62,13 +62,13 @@ function _interopRequireDefault(obj) {
62
62
  };
63
63
  }
64
64
  var first = _necessary.arrayUtilities.first, readFile = _necessary.fileSystemUtilities.readFile, writeFile = _necessary.fileSystemUtilities.writeFile, isEntryFile = _necessary.fileSystemUtilities.isEntryFile, readDirectory = _necessary.fileSystemUtilities.readDirectory, isEntryDirectory = _necessary.fileSystemUtilities.isEntryDirectory, concatenatePaths = _necessary.pathUtilities.concatenatePaths, topmostDirectoryNameFromPath = _necessary.pathUtilities.topmostDirectoryNameFromPath, topmostDirectoryPathFromPath = _necessary.pathUtilities.topmostDirectoryPathFromPath;
65
- function loadFile(path1, projectsDirectoryPath) {
65
+ function loadFile(path, projectsDirectoryPath) {
66
66
  var file = null;
67
67
  try {
68
- var topmostDirectoryName = topmostDirectoryNameFromPath(path1);
68
+ var topmostDirectoryName = topmostDirectoryNameFromPath(path);
69
69
  if (topmostDirectoryName !== null) {
70
70
  var absolutePath = concatenatePaths(projectsDirectoryPath, topmostDirectoryName), entryDirectory = isEntryDirectory(absolutePath);
71
- file = entryDirectory ? fileFromProject(path1, projectsDirectoryPath) : fileFromRelease(path1, projectsDirectoryPath);
71
+ file = entryDirectory ? fileFromProject(path, projectsDirectoryPath) : fileFromRelease(path, projectsDirectoryPath);
72
72
  }
73
73
  } catch (error) {
74
74
  ///
@@ -76,17 +76,20 @@ function loadFile(path1, projectsDirectoryPath) {
76
76
  return file;
77
77
  }
78
78
  function saveFile(file, projectsDirectoryPath) {
79
- var path1 = file.getPath(), content = file.getContent(), absolutePath = concatenatePaths(projectsDirectoryPath, path1), topmostAbsoluteDirectoryPath = topmostDirectoryPathFromPath(absolutePath);
79
+ var path = file.getPath(), content = file.getContent(), absolutePath = concatenatePaths(projectsDirectoryPath, path), topmostAbsoluteDirectoryPath = topmostDirectoryPathFromPath(absolutePath);
80
80
  _mkdirp.default.sync(topmostAbsoluteDirectoryPath);
81
81
  writeFile(absolutePath, content);
82
82
  }
83
83
  function loadFiles(paths, projectsDirectoryPath) {
84
84
  var files = null;
85
85
  try {
86
- var topmostDirectoryName = topmostDirectoryNameFromPath(path);
87
- if (topmostDirectoryName !== null) {
88
- var absolutePath = concatenatePaths(projectsDirectoryPath, topmostDirectoryName), entryDirectory = isEntryDirectory(absolutePath);
89
- files = entryDirectory ? filesFromProject(paths, projectsDirectoryPath) : filesFromRelease(paths, projectsDirectoryPath);
86
+ var pathsLength = paths.length;
87
+ if (pathsLength > 0) {
88
+ var firstPath = first(paths), path = firstPath, topmostDirectoryName = topmostDirectoryNameFromPath(path);
89
+ if (topmostDirectoryName !== null) {
90
+ var absolutePath = concatenatePaths(projectsDirectoryPath, topmostDirectoryName), entryDirectory = isEntryDirectory(absolutePath);
91
+ files = entryDirectory ? filesFromProject(paths, projectsDirectoryPath) : filesFromRelease(paths, projectsDirectoryPath);
92
+ }
90
93
  }
91
94
  } catch (error) {
92
95
  ///
@@ -103,10 +106,10 @@ function loadEntries(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecogn
103
106
  entriesFromRelativeDirectoryPath(entries, relativeDirectoryPath, projectsDirectoryPath, loadOnlyRecognisedFiles);
104
107
  return entries;
105
108
  }
106
- function loadRelease(topmostFileName, projectsDirectoryPath) {
109
+ function loadRelease(releaseName, projectsDirectoryPath) {
107
110
  var release = null;
108
111
  try {
109
- var name = topmostFileName, absolutePath = concatenatePaths(projectsDirectoryPath, name), entryFile = isEntryFile(absolutePath);
112
+ var name = releaseName, topmostFileName = releaseName, absolutePath = concatenatePaths(projectsDirectoryPath, topmostFileName), entryFile = isEntryFile(absolutePath);
110
113
  if (entryFile) {
111
114
  var json, entries;
112
115
  var content = readFile(absolutePath);
@@ -121,10 +124,10 @@ function loadRelease(topmostFileName, projectsDirectoryPath) {
121
124
  }
122
125
  return release;
123
126
  }
124
- function loadProject(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles) {
127
+ function loadProject(projectName, projectsDirectoryPath, loadOnlyRecognisedFiles) {
125
128
  var project = null;
126
129
  try {
127
- var name = topmostDirectoryName, entries = loadEntries(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles);
130
+ var name = projectName, topmostDirectoryName = projectName, entries = loadEntries(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles);
128
131
  project = _project.default.fromNameAndEntries(name, entries);
129
132
  } catch (error) {
130
133
  ///
@@ -151,12 +154,12 @@ function loadProjects(projectsDirectoryPath, loadOnlyRecognisedFiles) {
151
154
  });
152
155
  return projects;
153
156
  }
154
- function loadDirectory(path1, projectsDirectoryPath) {
157
+ function loadDirectory(path, projectsDirectoryPath) {
155
158
  var directory = null;
156
159
  try {
157
- var absolutePath = concatenatePaths(projectsDirectoryPath, path1), entryDirectory = isEntryDirectory(absolutePath);
160
+ var absolutePath = concatenatePaths(projectsDirectoryPath, path), entryDirectory = isEntryDirectory(absolutePath);
158
161
  if (entryDirectory) {
159
- directory = _directory.default.fromPath(path1);
162
+ directory = _directory.default.fromPath(path);
160
163
  }
161
164
  } catch (error) {
162
165
  ///
@@ -175,24 +178,24 @@ var _default = {
175
178
  loadProjects: loadProjects,
176
179
  loadDirectory: loadDirectory
177
180
  };
178
- function fileFromProject(path1, projectsDirectoryPath) {
181
+ function fileFromProject(path, projectsDirectoryPath) {
179
182
  var file = null;
180
- var absolutePath = concatenatePaths(projectsDirectoryPath, path1), entryFile = isEntryFile(absolutePath);
183
+ var absolutePath = concatenatePaths(projectsDirectoryPath, path), entryFile = isEntryFile(absolutePath);
181
184
  if (entryFile) {
182
185
  var content = readFile(absolutePath);
183
186
  content = (0, _content.convertContentTabsToWhitespace)(content); ///
184
- file = _file.default.fromPathAndContent(path1, content);
187
+ file = _file.default.fromPathAndContent(path, content);
185
188
  }
186
189
  return file;
187
190
  }
188
- function fileFromRelease(path1, projectsDirectoryPath) {
189
- var topmostDirectoryName = topmostDirectoryNameFromPath(path1), topmostFileName = topmostDirectoryName, release = loadRelease(topmostFileName, projectsDirectoryPath), file = release.getFile(path1);
191
+ function fileFromRelease(path, projectsDirectoryPath) {
192
+ var topmostDirectoryName = topmostDirectoryNameFromPath(path), topmostFileName = topmostDirectoryName, release = loadRelease(topmostFileName, projectsDirectoryPath), file = release.getFile(path);
190
193
  return file;
191
194
  }
192
195
  function filesFromProject(paths, projectsDirectoryPath) {
193
196
  var files = _files.default.fromNothing();
194
- paths.forEach(function(path1) {
195
- var file = fileFromProject(path1, projectsDirectoryPath);
197
+ paths.forEach(function(path) {
198
+ var file = fileFromProject(path, projectsDirectoryPath);
196
199
  files.addFile(file);
197
200
  });
198
201
  return files;
@@ -200,9 +203,9 @@ function filesFromProject(paths, projectsDirectoryPath) {
200
203
  function filesFromRelease(paths, projectsDirectoryPath) {
201
204
  var files = _files.default.fromNothing(), pathsLength = paths.length;
202
205
  if (pathsLength > 0) {
203
- var firstPath = first(paths), path1 = firstPath, topmostDirectoryName = topmostDirectoryNameFromPath(path1), topmostFileName = topmostDirectoryName, release = loadRelease(topmostFileName, projectsDirectoryPath);
204
- paths.forEach(function(path1) {
205
- var file = release.getFile(path1);
206
+ var firstPath = first(paths), path = firstPath, topmostDirectoryName = topmostDirectoryNameFromPath(path), topmostFileName = topmostDirectoryName, release = loadRelease(topmostFileName, projectsDirectoryPath);
207
+ paths.forEach(function(path) {
208
+ var file = release.getFile(path);
206
209
  files.addFile(file);
207
210
  });
208
211
  }
@@ -213,15 +216,15 @@ function entriesFromRelativeDirectoryPath(entries, relativeDirectoryPath, projec
213
216
  subEntryNames.forEach(function(subEntryName) {
214
217
  var subEntryNameHiddenName = (0, _name.isNameHiddenName)(subEntryName), loadUnrecognisedFilesAndDirectories = !loadOnlyRecognisedFiles;
215
218
  if (!subEntryNameHiddenName) {
216
- var path1 = concatenatePaths(relativeDirectoryPath, subEntryName), directory = loadDirectory(path1, projectsDirectoryPath);
219
+ var path = concatenatePaths(relativeDirectoryPath, subEntryName), directory = loadDirectory(path, projectsDirectoryPath);
217
220
  if (directory !== null) {
218
- var directoryPath = path1; ///
221
+ var directoryPath = path; ///
219
222
  if (loadUnrecognisedFilesAndDirectories) {
220
223
  entries.addDirectory(directory);
221
224
  }
222
225
  entriesFromRelativeDirectoryPath(entries, directoryPath, projectsDirectoryPath, loadOnlyRecognisedFiles); ///
223
226
  } else {
224
- var file = loadFile(path1, projectsDirectoryPath);
227
+ var file = loadFile(path, projectsDirectoryPath);
225
228
  if (file !== null) {
226
229
  var filePath = file.getPath(), filePathRecognisedFilePath = (0, _filePath.isFilePathRecognisedFilePath)(filePath), fileRecognisedFile = filePathRecognisedFilePath; ///
227
230
  if (fileRecognisedFile || loadUnrecognisedFilesAndDirectories) {
@@ -265,4 +268,4 @@ function topmostDirectoryNamesFromProjectsDirectoryPath(projectsDirectoryPath) {
265
268
  return topmostDirectoryNames;
266
269
  }
267
270
 
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZmlsZVN5c3RlbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBta2RpcnAgZnJvbSBcIm1rZGlycFwiO1xyXG5cclxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMsIHBhdGhVdGlsaXRpZXMsIGZpbGVTeXN0ZW1VdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XHJcblxyXG5pbXBvcnQgRmlsZSBmcm9tIFwiLi4vZmlsZVwiO1xyXG5pbXBvcnQgRmlsZXMgZnJvbSBcIi4uL2ZpbGVzXCI7XHJcbmltcG9ydCBFbnRyaWVzIGZyb20gXCIuLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBQcm9qZWN0IGZyb20gXCIuLi9wcm9qZWN0XCI7XHJcbmltcG9ydCBSZWxlYXNlIGZyb20gXCIuLi9yZWxlYXNlXCI7XHJcbmltcG9ydCBQcm9qZWN0cyBmcm9tIFwiLi4vcHJvamVjdHNcIjtcclxuaW1wb3J0IFJlbGVhc2VzIGZyb20gXCIuLi9yZWxlYXNlc1wiO1xyXG5pbXBvcnQgRGlyZWN0b3J5IGZyb20gXCIuLi9kaXJlY3RvcnlcIjtcclxuXHJcbmltcG9ydCB7IGlzTmFtZUhpZGRlbk5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL25hbWVcIjtcclxuaW1wb3J0IHsgaXNGaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aCB9IGZyb20gXCIuLi91dGlsaXRpZXMvZmlsZVBhdGhcIjtcclxuaW1wb3J0IHsgY29udmVydENvbnRlbnRUYWJzVG9XaGl0ZXNwYWNlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XHJcblxyXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcyxcclxuICAgICAgeyByZWFkRmlsZSwgd3JpdGVGaWxlLCBpc0VudHJ5RmlsZSwgcmVhZERpcmVjdG9yeSwgaXNFbnRyeURpcmVjdG9yeSB9ID0gZmlsZVN5c3RlbVV0aWxpdGllcyxcclxuICAgICAgeyBjb25jYXRlbmF0ZVBhdGhzLCB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLCB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoIH0gPSBwYXRoVXRpbGl0aWVzO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlKHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBmaWxlID0gbnVsbDtcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKTtcclxuXHJcbiAgICBpZiAodG9wbW9zdERpcmVjdG9yeU5hbWUgIT09IG51bGwpIHtcclxuICAgICAgY29uc3QgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHRvcG1vc3REaXJlY3RvcnlOYW1lKSxcclxuICAgICAgICAgICAgZW50cnlEaXJlY3RvcnkgPSBpc0VudHJ5RGlyZWN0b3J5KGFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgICBmaWxlID0gZW50cnlEaXJlY3RvcnkgP1xyXG4gICAgICAgICAgICAgICBmaWxlRnJvbVByb2plY3QocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSA6XHJcbiAgICAgICAgICAgICAgICAgZmlsZUZyb21SZWxlYXNlKHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzYXZlRmlsZShmaWxlLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCBwYXRoID0gZmlsZS5nZXRQYXRoKCksXHJcbiAgICAgICAgY29udGVudCA9IGZpbGUuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgIGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBwYXRoKSxcclxuICAgICAgICB0b3Btb3N0QWJzb2x1dGVEaXJlY3RvcnlQYXRoID0gdG9wbW9zdERpcmVjdG9yeVBhdGhGcm9tUGF0aChhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICBta2RpcnAuc3luYyh0b3Btb3N0QWJzb2x1dGVEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgd3JpdGVGaWxlKGFic29sdXRlUGF0aCwgY29udGVudCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXMocGF0aHMsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBmaWxlcyA9IG51bGw7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCk7XHJcblxyXG4gICAgaWYgKHRvcG1vc3REaXJlY3RvcnlOYW1lICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCB0b3Btb3N0RGlyZWN0b3J5TmFtZSksXHJcbiAgICAgICAgICAgIGVudHJ5RGlyZWN0b3J5ID0gaXNFbnRyeURpcmVjdG9yeShhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICAgICAgZmlsZXMgPSBlbnRyeURpcmVjdG9yeSA/XHJcbiAgICAgICAgICAgICAgICBmaWxlc0Zyb21Qcm9qZWN0KHBhdGhzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIDpcclxuICAgICAgICAgICAgICAgICAgZmlsZXNGcm9tUmVsZWFzZShwYXRocywgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuICAgIH1cclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgLy8vXHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmlsZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzYXZlRmlsZXMoZmlsZXMsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGZpbGVzLmZvckVhY2hGaWxlKChmaWxlKSA9PiB7XHJcbiAgICBzYXZlRmlsZShmaWxlLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZEVudHJpZXModG9wbW9zdERpcmVjdG9yeU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpIHtcclxuICBjb25zdCBlbnRyaWVzID0gRW50cmllcy5mcm9tTm90aGluZygpLFxyXG4gICAgICAgIHJlbGF0aXZlRGlyZWN0b3J5UGF0aCA9IHRvcG1vc3REaXJlY3RvcnlOYW1lOyAgLy8vXHJcblxyXG4gIGVudHJpZXNGcm9tUmVsYXRpdmVEaXJlY3RvcnlQYXRoKGVudHJpZXMsIHJlbGF0aXZlRGlyZWN0b3J5UGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcyk7XHJcblxyXG4gIHJldHVybiBlbnRyaWVzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZFJlbGVhc2UodG9wbW9zdEZpbGVOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBsZXQgcmVsZWFzZSA9IG51bGw7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBuYW1lID0gdG9wbW9zdEZpbGVOYW1lLCAvLy9cclxuICAgICAgICAgIGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBuYW1lKSxcclxuICAgICAgICAgIGVudHJ5RmlsZSA9IGlzRW50cnlGaWxlKGFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgaWYgKGVudHJ5RmlsZSkge1xyXG4gICAgICBsZXQganNvbixcclxuICAgICAgICAgIGVudHJpZXM7XHJcblxyXG4gICAgICBjb25zdCBjb250ZW50ID0gcmVhZEZpbGUoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICAgIGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xyXG5cclxuICAgICAgKHsgZW50cmllcyB9ID0ganNvbik7XHJcblxyXG4gICAgICBqc29uICA9IGVudHJpZXM7ICAvLy9cclxuXHJcbiAgICAgIGVudHJpZXMgPSBFbnRyaWVzLmZyb21KU09OKGpzb24pO1xyXG5cclxuICAgICAgcmVsZWFzZSA9IFJlbGVhc2UuZnJvbU5hbWVBbmRFbnRyaWVzKG5hbWUsIGVudHJpZXMpO1xyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAvLy9cclxuICB9XHJcblxyXG4gIHJldHVybiByZWxlYXNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZFByb2plY3QodG9wbW9zdERpcmVjdG9yeU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpIHtcclxuICBsZXQgcHJvamVjdCA9IG51bGw7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBuYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWUsICAvLy9cclxuICAgICAgICAgIGVudHJpZXMgPSBsb2FkRW50cmllcyh0b3Btb3N0RGlyZWN0b3J5TmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcyk7XHJcblxyXG4gICAgcHJvamVjdCA9IFByb2plY3QuZnJvbU5hbWVBbmRFbnRyaWVzKG5hbWUsIGVudHJpZXMpO1xyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAvLy9cclxuICB9XHJcblxyXG4gIHJldHVybiBwcm9qZWN0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZFJlbGVhc2VzKHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGNvbnN0IHJlbGVhc2VzID0gUmVsZWFzZXMuZnJvbU5vdGhpbmcoKSxcclxuICAgICAgICB0b3Btb3N0RmlsZU5hbWVzID0gdG9wbW9zdEZpbGVOYW1lc0Zyb21Qcm9qZWN0c0RpcmVjdG9yeVBhdGgocHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgdG9wbW9zdEZpbGVOYW1lcy5mb3JFYWNoKCh0b3Btb3N0RmlsZU5hbWUpID0+IHtcclxuICAgIGNvbnN0IHJlbGVhc2UgPSBsb2FkUmVsZWFzZSh0b3Btb3N0RmlsZU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gICAgaWYgKHJlbGVhc2UgIT09IG51bGwpIHtcclxuICAgICAgcmVsZWFzZXMuYWRkUmVsZWFzZShyZWxlYXNlKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIHJlbGVhc2VzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZFByb2plY3RzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpIHtcclxuICBjb25zdCBwcm9qZWN0cyA9IFByb2plY3RzLmZyb21Ob3RoaW5nKCksXHJcbiAgICAgICAgdG9wbW9zdERpcmVjdG9yeU5hbWVzID0gdG9wbW9zdERpcmVjdG9yeU5hbWVzRnJvbVByb2plY3RzRGlyZWN0b3J5UGF0aChwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICB0b3Btb3N0RGlyZWN0b3J5TmFtZXMuZm9yRWFjaCgodG9wbW9zdERpcmVjdG9yeU5hbWUpID0+IHtcclxuICAgIGNvbnN0IHByb2plY3QgPSBsb2FkUHJvamVjdCh0b3Btb3N0RGlyZWN0b3J5TmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcyk7XHJcblxyXG4gICAgaWYgKHByb2plY3QgIT09IG51bGwpIHtcclxuICAgICAgcHJvamVjdHMuYWRkUHJvamVjdChwcm9qZWN0KTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIHByb2plY3RzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZERpcmVjdG9yeShwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBsZXQgZGlyZWN0b3J5ID0gbnVsbDtcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBwYXRoKSxcclxuICAgICAgICAgIGVudHJ5RGlyZWN0b3J5ID0gaXNFbnRyeURpcmVjdG9yeShhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICAgIGlmIChlbnRyeURpcmVjdG9yeSkge1xyXG4gICAgICBkaXJlY3RvcnkgPSBEaXJlY3RvcnkuZnJvbVBhdGgocGF0aCk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGRpcmVjdG9yeTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGxvYWRGaWxlLFxyXG4gIHNhdmVGaWxlLFxyXG4gIGxvYWRGaWxlcyxcclxuICBzYXZlRmlsZXMsXHJcbiAgbG9hZEVudHJpZXMsXHJcbiAgbG9hZFJlbGVhc2UsXHJcbiAgbG9hZFByb2plY3QsXHJcbiAgbG9hZFJlbGVhc2VzLFxyXG4gIGxvYWRQcm9qZWN0cyxcclxuICBsb2FkRGlyZWN0b3J5XHJcbn07XHJcblxyXG5mdW5jdGlvbiBmaWxlRnJvbVByb2plY3QocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgbGV0IGZpbGUgPSBudWxsO1xyXG5cclxuICBjb25zdCBhYnNvbHV0ZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgcGF0aCksXHJcbiAgICAgICAgZW50cnlGaWxlID0gaXNFbnRyeUZpbGUoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgaWYgKGVudHJ5RmlsZSkge1xyXG4gICAgbGV0IGNvbnRlbnQgPSByZWFkRmlsZShhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICAgIGNvbnRlbnQgPSBjb252ZXJ0Q29udGVudFRhYnNUb1doaXRlc3BhY2UoY29udGVudCk7ICAvLy9cclxuXHJcbiAgICBmaWxlID0gRmlsZS5mcm9tUGF0aEFuZENvbnRlbnQocGF0aCwgY29udGVudCk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmlsZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZmlsZUZyb21SZWxlYXNlKHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGNvbnN0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSxcclxuICAgICAgICB0b3Btb3N0RmlsZU5hbWUgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZSwgLy8vXHJcbiAgICAgICAgcmVsZWFzZSA9IGxvYWRSZWxlYXNlKHRvcG1vc3RGaWxlTmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSxcclxuICAgICAgICBmaWxlID0gcmVsZWFzZS5nZXRGaWxlKHBhdGgpO1xyXG5cclxuICByZXR1cm4gZmlsZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZmlsZXNGcm9tUHJvamVjdChwYXRocywgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgY29uc3QgZmlsZXMgPSBGaWxlcy5mcm9tTm90aGluZygpO1xyXG5cclxuICBwYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XHJcbiAgICBjb25zdCBmaWxlID0gZmlsZUZyb21Qcm9qZWN0KHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gICAgZmlsZXMuYWRkRmlsZShmaWxlKTtcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIGZpbGVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaWxlc0Zyb21SZWxlYXNlKHBhdGhzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCBmaWxlcyA9IEZpbGVzLmZyb21Ob3RoaW5nKCksXHJcbiAgICAgICAgcGF0aHNMZW5ndGggPSBwYXRocy5sZW5ndGg7XHJcblxyXG4gIGlmIChwYXRoc0xlbmd0aCA+IDApIHtcclxuICAgIGNvbnN0IGZpcnN0UGF0aCA9IGZpcnN0KHBhdGhzKSxcclxuICAgICAgICAgIHBhdGggPSBmaXJzdFBhdGgsIC8vL1xyXG4gICAgICAgICAgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpLFxyXG4gICAgICAgICAgdG9wbW9zdEZpbGVOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWUsIC8vL1xyXG4gICAgICAgICAgcmVsZWFzZSA9IGxvYWRSZWxlYXNlKHRvcG1vc3RGaWxlTmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgICBwYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSByZWxlYXNlLmdldEZpbGUocGF0aCk7XHJcblxyXG4gICAgICBmaWxlcy5hZGRGaWxlKGZpbGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmlsZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVudHJpZXNGcm9tUmVsYXRpdmVEaXJlY3RvcnlQYXRoKGVudHJpZXMsIHJlbGF0aXZlRGlyZWN0b3J5UGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcykge1xyXG4gIGNvbnN0IGFic29sdXRlRGlyZWN0b3J5UGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCByZWxhdGl2ZURpcmVjdG9yeVBhdGgpLFxyXG4gICAgICAgIHN1YkVudHJ5TmFtZXMgPSByZWFkRGlyZWN0b3J5KGFic29sdXRlRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gIHN1YkVudHJ5TmFtZXMuZm9yRWFjaCgoc3ViRW50cnlOYW1lKSA9PiB7XHJcbiAgICBjb25zdCBzdWJFbnRyeU5hbWVIaWRkZW5OYW1lID0gaXNOYW1lSGlkZGVuTmFtZShzdWJFbnRyeU5hbWUpLFxyXG4gICAgICAgICAgbG9hZFVucmVjb2duaXNlZEZpbGVzQW5kRGlyZWN0b3JpZXMgPSAhbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXM7XHJcblxyXG4gICAgaWYgKCFzdWJFbnRyeU5hbWVIaWRkZW5OYW1lKSB7XHJcbiAgICAgIGNvbnN0IHBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHJlbGF0aXZlRGlyZWN0b3J5UGF0aCwgc3ViRW50cnlOYW1lKSxcclxuICAgICAgICAgICAgZGlyZWN0b3J5ID0gbG9hZERpcmVjdG9yeShwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICAgICAgaWYgKGRpcmVjdG9yeSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeVBhdGggPSBwYXRoOyAvLy9cclxuXHJcbiAgICAgICAgaWYgKGxvYWRVbnJlY29nbmlzZWRGaWxlc0FuZERpcmVjdG9yaWVzKSB7XHJcbiAgICAgICAgICBlbnRyaWVzLmFkZERpcmVjdG9yeShkaXJlY3RvcnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZW50cmllc0Zyb21SZWxhdGl2ZURpcmVjdG9yeVBhdGgoZW50cmllcywgZGlyZWN0b3J5UGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcyk7IC8vL1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBsb2FkRmlsZShwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICAgICAgICBpZiAoZmlsZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBmaWxlLmdldFBhdGgoKSxcclxuICAgICAgICAgICAgICAgIGZpbGVQYXRoUmVjb2duaXNlZEZpbGVQYXRoID0gaXNGaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aChmaWxlUGF0aCksXHJcbiAgICAgICAgICAgICAgICBmaWxlUmVjb2duaXNlZEZpbGUgPSBmaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aDsgIC8vL1xyXG5cclxuICAgICAgICAgIGlmIChmaWxlUmVjb2duaXNlZEZpbGUgfHwgbG9hZFVucmVjb2duaXNlZEZpbGVzQW5kRGlyZWN0b3JpZXMpIHtcclxuICAgICAgICAgICAgZW50cmllcy5hZGRGaWxlKGZpbGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b3Btb3N0RmlsZU5hbWVzRnJvbVByb2plY3RzRGlyZWN0b3J5UGF0aChwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBsZXQgdG9wbW9zdEZpbGVOYW1lcztcclxuXHJcbiAgY29uc3Qgc3ViRW50cnlOYW1lcyA9IHJlYWREaXJlY3RvcnkocHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgdG9wbW9zdEZpbGVOYW1lcyA9IHN1YkVudHJ5TmFtZXMucmVkdWNlKCh0b3Btb3N0RmlsZU5hbWVzLCBzdWJFbnRyeU5hbWUpID0+IHtcclxuICAgIGNvbnN0IGFic29sdXRlU3ViRW50cnlQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHN1YkVudHJ5TmFtZSksXHJcbiAgICAgICAgICBzdWJFbnRyeU5hbWVIaWRkZW5OYW1lID0gaXNOYW1lSGlkZGVuTmFtZShzdWJFbnRyeU5hbWUpO1xyXG5cclxuICAgIGlmICghc3ViRW50cnlOYW1lSGlkZGVuTmFtZSkge1xyXG4gICAgICBjb25zdCBzdWJFbnRyeUZpbGUgPSBpc0VudHJ5RmlsZShhYnNvbHV0ZVN1YkVudHJ5UGF0aCk7XHJcblxyXG4gICAgICBpZiAoc3ViRW50cnlGaWxlKSB7XHJcbiAgICAgICAgY29uc3QgdG9wbW9zdEZpbGVOYW1lID0gc3ViRW50cnlOYW1lOyAgLy8vXHJcblxyXG4gICAgICAgIHRvcG1vc3RGaWxlTmFtZXMucHVzaCh0b3Btb3N0RmlsZU5hbWUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9wbW9zdEZpbGVOYW1lcztcclxuICB9LCBbXSk7XHJcblxyXG4gIHJldHVybiB0b3Btb3N0RmlsZU5hbWVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5TmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoKHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCB0b3Btb3N0RGlyZWN0b3J5TmFtZXM7XHJcblxyXG4gIGNvbnN0IHN1YkVudHJ5TmFtZXMgPSByZWFkRGlyZWN0b3J5KHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gIHRvcG1vc3REaXJlY3RvcnlOYW1lcyA9IHN1YkVudHJ5TmFtZXMucmVkdWNlKCh0b3Btb3N0RGlyZWN0b3J5TmFtZXMsIHN1YkVudHJ5TmFtZSkgPT4ge1xyXG4gICAgY29uc3QgYWJzb2x1dGVTdWJFbnRyeVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgc3ViRW50cnlOYW1lKSxcclxuICAgICAgICAgIHN1YkVudHJ5TmFtZUhpZGRlbk5hbWUgPSBpc05hbWVIaWRkZW5OYW1lKHN1YkVudHJ5TmFtZSk7XHJcblxyXG4gICAgaWYgKCFzdWJFbnRyeU5hbWVIaWRkZW5OYW1lKSB7XHJcbiAgICAgIGNvbnN0IHN1YkVudHJ5RGlyZWN0b3J5ID0gaXNFbnRyeURpcmVjdG9yeShhYnNvbHV0ZVN1YkVudHJ5UGF0aCk7XHJcblxyXG4gICAgICBpZiAoc3ViRW50cnlEaXJlY3RvcnkpIHtcclxuICAgICAgICBjb25zdCB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHN1YkVudHJ5TmFtZTsgIC8vL1xyXG5cclxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZXMucHVzaCh0b3Btb3N0RGlyZWN0b3J5TmFtZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0b3Btb3N0RGlyZWN0b3J5TmFtZXM7XHJcbiAgfSwgW10pO1xyXG5cclxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWVzO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJsb2FkRmlsZSIsInNhdmVGaWxlIiwibG9hZEZpbGVzIiwic2F2ZUZpbGVzIiwibG9hZEVudHJpZXMiLCJsb2FkUmVsZWFzZSIsImxvYWRQcm9qZWN0IiwibG9hZFJlbGVhc2VzIiwibG9hZFByb2plY3RzIiwibG9hZERpcmVjdG9yeSIsImZpcnN0IiwiYXJyYXlVdGlsaXRpZXMiLCJyZWFkRmlsZSIsImZpbGVTeXN0ZW1VdGlsaXRpZXMiLCJ3cml0ZUZpbGUiLCJpc0VudHJ5RmlsZSIsInJlYWREaXJlY3RvcnkiLCJpc0VudHJ5RGlyZWN0b3J5IiwiY29uY2F0ZW5hdGVQYXRocyIsInBhdGhVdGlsaXRpZXMiLCJ0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoIiwidG9wbW9zdERpcmVjdG9yeVBhdGhGcm9tUGF0aCIsInBhdGgiLCJwcm9qZWN0c0RpcmVjdG9yeVBhdGgiLCJmaWxlIiwidG9wbW9zdERpcmVjdG9yeU5hbWUiLCJhYnNvbHV0ZVBhdGgiLCJlbnRyeURpcmVjdG9yeSIsImZpbGVGcm9tUHJvamVjdCIsImZpbGVGcm9tUmVsZWFzZSIsImVycm9yIiwiZ2V0UGF0aCIsImNvbnRlbnQiLCJnZXRDb250ZW50IiwidG9wbW9zdEFic29sdXRlRGlyZWN0b3J5UGF0aCIsIm1rZGlycCIsInN5bmMiLCJwYXRocyIsImZpbGVzIiwiZmlsZXNGcm9tUHJvamVjdCIsImZpbGVzRnJvbVJlbGVhc2UiLCJmb3JFYWNoRmlsZSIsImxvYWRPbmx5UmVjb2duaXNlZEZpbGVzIiwiZW50cmllcyIsIkVudHJpZXMiLCJmcm9tTm90aGluZyIsInJlbGF0aXZlRGlyZWN0b3J5UGF0aCIsImVudHJpZXNGcm9tUmVsYXRpdmVEaXJlY3RvcnlQYXRoIiwidG9wbW9zdEZpbGVOYW1lIiwicmVsZWFzZSIsIm5hbWUiLCJlbnRyeUZpbGUiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwiZnJvbUpTT04iLCJSZWxlYXNlIiwiZnJvbU5hbWVBbmRFbnRyaWVzIiwicHJvamVjdCIsIlByb2plY3QiLCJyZWxlYXNlcyIsIlJlbGVhc2VzIiwidG9wbW9zdEZpbGVOYW1lcyIsInRvcG1vc3RGaWxlTmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoIiwiZm9yRWFjaCIsImFkZFJlbGVhc2UiLCJwcm9qZWN0cyIsIlByb2plY3RzIiwidG9wbW9zdERpcmVjdG9yeU5hbWVzIiwidG9wbW9zdERpcmVjdG9yeU5hbWVzRnJvbVByb2plY3RzRGlyZWN0b3J5UGF0aCIsImFkZFByb2plY3QiLCJkaXJlY3RvcnkiLCJEaXJlY3RvcnkiLCJmcm9tUGF0aCIsImNvbnZlcnRDb250ZW50VGFic1RvV2hpdGVzcGFjZSIsIkZpbGUiLCJmcm9tUGF0aEFuZENvbnRlbnQiLCJnZXRGaWxlIiwiRmlsZXMiLCJhZGRGaWxlIiwicGF0aHNMZW5ndGgiLCJsZW5ndGgiLCJmaXJzdFBhdGgiLCJhYnNvbHV0ZURpcmVjdG9yeVBhdGgiLCJzdWJFbnRyeU5hbWVzIiwic3ViRW50cnlOYW1lIiwic3ViRW50cnlOYW1lSGlkZGVuTmFtZSIsImlzTmFtZUhpZGRlbk5hbWUiLCJsb2FkVW5yZWNvZ25pc2VkRmlsZXNBbmREaXJlY3RvcmllcyIsImRpcmVjdG9yeVBhdGgiLCJhZGREaXJlY3RvcnkiLCJmaWxlUGF0aCIsImZpbGVQYXRoUmVjb2duaXNlZEZpbGVQYXRoIiwiaXNGaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aCIsImZpbGVSZWNvZ25pc2VkRmlsZSIsInJlZHVjZSIsImFic29sdXRlU3ViRW50cnlQYXRoIiwic3ViRW50cnlGaWxlIiwicHVzaCIsInN1YkVudHJ5RGlyZWN0b3J5Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUF1QmdCQSxRQUFRO2VBQVJBOztJQXFCQUMsUUFBUTtlQUFSQTs7SUFXQUMsU0FBUztlQUFUQTs7SUFxQkFDLFNBQVM7ZUFBVEE7O0lBTUFDLFdBQVc7ZUFBWEE7O0lBU0FDLFdBQVc7ZUFBWEE7O0lBK0JBQyxXQUFXO2VBQVhBOztJQWVBQyxZQUFZO2VBQVpBOztJQWVBQyxZQUFZO2VBQVpBOztJQWVBQyxhQUFhO2VBQWJBOztJQWlCaEIsT0FXRTtlQVhGOzs7MkRBdExtQjt5QkFFZ0Q7eURBRWxEOzBEQUND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
271
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZmlsZVN5c3RlbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCBta2RpcnAgZnJvbSBcIm1rZGlycFwiO1xyXG5cclxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMsIHBhdGhVdGlsaXRpZXMsIGZpbGVTeXN0ZW1VdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XHJcblxyXG5pbXBvcnQgRmlsZSBmcm9tIFwiLi4vZmlsZVwiO1xyXG5pbXBvcnQgRmlsZXMgZnJvbSBcIi4uL2ZpbGVzXCI7XHJcbmltcG9ydCBFbnRyaWVzIGZyb20gXCIuLi9lbnRyaWVzXCI7XHJcbmltcG9ydCBQcm9qZWN0IGZyb20gXCIuLi9wcm9qZWN0XCI7XHJcbmltcG9ydCBSZWxlYXNlIGZyb20gXCIuLi9yZWxlYXNlXCI7XHJcbmltcG9ydCBQcm9qZWN0cyBmcm9tIFwiLi4vcHJvamVjdHNcIjtcclxuaW1wb3J0IFJlbGVhc2VzIGZyb20gXCIuLi9yZWxlYXNlc1wiO1xyXG5pbXBvcnQgRGlyZWN0b3J5IGZyb20gXCIuLi9kaXJlY3RvcnlcIjtcclxuXHJcbmltcG9ydCB7IGlzTmFtZUhpZGRlbk5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL25hbWVcIjtcclxuaW1wb3J0IHsgaXNGaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aCB9IGZyb20gXCIuLi91dGlsaXRpZXMvZmlsZVBhdGhcIjtcclxuaW1wb3J0IHsgY29udmVydENvbnRlbnRUYWJzVG9XaGl0ZXNwYWNlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XHJcblxyXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcyxcclxuICAgICAgeyByZWFkRmlsZSwgd3JpdGVGaWxlLCBpc0VudHJ5RmlsZSwgcmVhZERpcmVjdG9yeSwgaXNFbnRyeURpcmVjdG9yeSB9ID0gZmlsZVN5c3RlbVV0aWxpdGllcyxcclxuICAgICAgeyBjb25jYXRlbmF0ZVBhdGhzLCB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLCB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoIH0gPSBwYXRoVXRpbGl0aWVzO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlKHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBmaWxlID0gbnVsbDtcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKTtcclxuXHJcbiAgICBpZiAodG9wbW9zdERpcmVjdG9yeU5hbWUgIT09IG51bGwpIHtcclxuICAgICAgY29uc3QgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHRvcG1vc3REaXJlY3RvcnlOYW1lKSxcclxuICAgICAgICAgICAgZW50cnlEaXJlY3RvcnkgPSBpc0VudHJ5RGlyZWN0b3J5KGFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgICBmaWxlID0gZW50cnlEaXJlY3RvcnkgP1xyXG4gICAgICAgICAgICAgICBmaWxlRnJvbVByb2plY3QocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSA6XHJcbiAgICAgICAgICAgICAgICAgZmlsZUZyb21SZWxlYXNlKHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzYXZlRmlsZShmaWxlLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCBwYXRoID0gZmlsZS5nZXRQYXRoKCksXHJcbiAgICAgICAgY29udGVudCA9IGZpbGUuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgIGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBwYXRoKSxcclxuICAgICAgICB0b3Btb3N0QWJzb2x1dGVEaXJlY3RvcnlQYXRoID0gdG9wbW9zdERpcmVjdG9yeVBhdGhGcm9tUGF0aChhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICBta2RpcnAuc3luYyh0b3Btb3N0QWJzb2x1dGVEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgd3JpdGVGaWxlKGFic29sdXRlUGF0aCwgY29udGVudCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXMocGF0aHMsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBmaWxlcyA9IG51bGw7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBwYXRoc0xlbmd0aCA9IHBhdGhzLmxlbmd0aDtcclxuXHJcbiAgICBpZiAocGF0aHNMZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0UGF0aCA9IGZpcnN0KHBhdGhzKSxcclxuICAgICAgICAgICAgcGF0aCA9IGZpcnN0UGF0aCwgLy8vXHJcbiAgICAgICAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKTtcclxuXHJcbiAgICAgIGlmICh0b3Btb3N0RGlyZWN0b3J5TmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCB0b3Btb3N0RGlyZWN0b3J5TmFtZSksXHJcbiAgICAgICAgICAgICAgZW50cnlEaXJlY3RvcnkgPSBpc0VudHJ5RGlyZWN0b3J5KGFic29sdXRlUGF0aCk7XHJcblxyXG4gICAgICAgIGZpbGVzID0gZW50cnlEaXJlY3RvcnkgP1xyXG4gICAgICAgICAgICAgICAgICBmaWxlc0Zyb21Qcm9qZWN0KHBhdGhzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIDpcclxuICAgICAgICAgICAgICAgICAgICBmaWxlc0Zyb21SZWxlYXNlKHBhdGhzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbGVzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUZpbGVzKGZpbGVzLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBmaWxlcy5mb3JFYWNoRmlsZSgoZmlsZSkgPT4ge1xyXG4gICAgc2F2ZUZpbGUoZmlsZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFbnRyaWVzKHRvcG1vc3REaXJlY3RvcnlOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKSB7XHJcbiAgY29uc3QgZW50cmllcyA9IEVudHJpZXMuZnJvbU5vdGhpbmcoKSxcclxuICAgICAgICByZWxhdGl2ZURpcmVjdG9yeVBhdGggPSB0b3Btb3N0RGlyZWN0b3J5TmFtZTsgIC8vL1xyXG5cclxuICBlbnRyaWVzRnJvbVJlbGF0aXZlRGlyZWN0b3J5UGF0aChlbnRyaWVzLCByZWxhdGl2ZURpcmVjdG9yeVBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xyXG5cclxuICByZXR1cm4gZW50cmllcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRSZWxlYXNlKHJlbGVhc2VOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBsZXQgcmVsZWFzZSA9IG51bGw7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBuYW1lID0gcmVsZWFzZU5hbWUsIC8vL1xyXG4gICAgICAgICAgdG9wbW9zdEZpbGVOYW1lID0gcmVsZWFzZU5hbWUsICAvLy9cclxuICAgICAgICAgIGFic29sdXRlUGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCB0b3Btb3N0RmlsZU5hbWUpLFxyXG4gICAgICAgICAgZW50cnlGaWxlID0gaXNFbnRyeUZpbGUoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICBpZiAoZW50cnlGaWxlKSB7XHJcbiAgICAgIGxldCBqc29uLFxyXG4gICAgICAgICAgZW50cmllcztcclxuXHJcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZShhYnNvbHV0ZVBhdGgpO1xyXG5cclxuICAgICAganNvbiA9IEpTT04ucGFyc2UoY29udGVudCk7XHJcblxyXG4gICAgICAoeyBlbnRyaWVzIH0gPSBqc29uKTtcclxuXHJcbiAgICAgIGpzb24gID0gZW50cmllczsgIC8vL1xyXG5cclxuICAgICAgZW50cmllcyA9IEVudHJpZXMuZnJvbUpTT04oanNvbik7XHJcblxyXG4gICAgICByZWxlYXNlID0gUmVsZWFzZS5mcm9tTmFtZUFuZEVudHJpZXMobmFtZSwgZW50cmllcyk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIC8vL1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlbGVhc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkUHJvamVjdChwcm9qZWN0TmFtZSwgcHJvamVjdHNEaXJlY3RvcnlQYXRoLCBsb2FkT25seVJlY29nbmlzZWRGaWxlcykge1xyXG4gIGxldCBwcm9qZWN0ID0gbnVsbDtcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IG5hbWUgPSBwcm9qZWN0TmFtZSwgIC8vL1xyXG4gICAgICAgICAgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBwcm9qZWN0TmFtZSwgLy8vXHJcbiAgICAgICAgICBlbnRyaWVzID0gbG9hZEVudHJpZXModG9wbW9zdERpcmVjdG9yeU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xyXG5cclxuICAgIHByb2plY3QgPSBQcm9qZWN0LmZyb21OYW1lQW5kRW50cmllcyhuYW1lLCBlbnRyaWVzKTtcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgLy8vXHJcbiAgfVxyXG5cclxuICByZXR1cm4gcHJvamVjdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRSZWxlYXNlcyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCByZWxlYXNlcyA9IFJlbGVhc2VzLmZyb21Ob3RoaW5nKCksXHJcbiAgICAgICAgdG9wbW9zdEZpbGVOYW1lcyA9IHRvcG1vc3RGaWxlTmFtZXNGcm9tUHJvamVjdHNEaXJlY3RvcnlQYXRoKHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gIHRvcG1vc3RGaWxlTmFtZXMuZm9yRWFjaCgodG9wbW9zdEZpbGVOYW1lKSA9PiB7XHJcbiAgICBjb25zdCByZWxlYXNlID0gbG9hZFJlbGVhc2UodG9wbW9zdEZpbGVOYW1lLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICAgIGlmIChyZWxlYXNlICE9PSBudWxsKSB7XHJcbiAgICAgIHJlbGVhc2VzLmFkZFJlbGVhc2UocmVsZWFzZSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiByZWxlYXNlcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQcm9qZWN0cyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIGxvYWRPbmx5UmVjb2duaXNlZEZpbGVzKSB7XHJcbiAgY29uc3QgcHJvamVjdHMgPSBQcm9qZWN0cy5mcm9tTm90aGluZygpLFxyXG4gICAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lcyA9IHRvcG1vc3REaXJlY3RvcnlOYW1lc0Zyb21Qcm9qZWN0c0RpcmVjdG9yeVBhdGgocHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgdG9wbW9zdERpcmVjdG9yeU5hbWVzLmZvckVhY2goKHRvcG1vc3REaXJlY3RvcnlOYW1lKSA9PiB7XHJcbiAgICBjb25zdCBwcm9qZWN0ID0gbG9hZFByb2plY3QodG9wbW9zdERpcmVjdG9yeU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpO1xyXG5cclxuICAgIGlmIChwcm9qZWN0ICE9PSBudWxsKSB7XHJcbiAgICAgIHByb2plY3RzLmFkZFByb2plY3QocHJvamVjdCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBwcm9qZWN0cztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWREaXJlY3RvcnkocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgbGV0IGRpcmVjdG9yeSA9IG51bGw7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgcGF0aCksXHJcbiAgICAgICAgICBlbnRyeURpcmVjdG9yeSA9IGlzRW50cnlEaXJlY3RvcnkoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICBpZiAoZW50cnlEaXJlY3RvcnkpIHtcclxuICAgICAgZGlyZWN0b3J5ID0gRGlyZWN0b3J5LmZyb21QYXRoKHBhdGgpO1xyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAvLy9cclxuICB9XHJcblxyXG4gIHJldHVybiBkaXJlY3Rvcnk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBsb2FkRmlsZSxcclxuICBzYXZlRmlsZSxcclxuICBsb2FkRmlsZXMsXHJcbiAgc2F2ZUZpbGVzLFxyXG4gIGxvYWRFbnRyaWVzLFxyXG4gIGxvYWRSZWxlYXNlLFxyXG4gIGxvYWRQcm9qZWN0LFxyXG4gIGxvYWRSZWxlYXNlcyxcclxuICBsb2FkUHJvamVjdHMsXHJcbiAgbG9hZERpcmVjdG9yeVxyXG59O1xyXG5cclxuZnVuY3Rpb24gZmlsZUZyb21Qcm9qZWN0KHBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGxldCBmaWxlID0gbnVsbDtcclxuXHJcbiAgY29uc3QgYWJzb2x1dGVQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHBhdGgpLFxyXG4gICAgICAgIGVudHJ5RmlsZSA9IGlzRW50cnlGaWxlKGFic29sdXRlUGF0aCk7XHJcblxyXG4gIGlmIChlbnRyeUZpbGUpIHtcclxuICAgIGxldCBjb250ZW50ID0gcmVhZEZpbGUoYWJzb2x1dGVQYXRoKTtcclxuXHJcbiAgICBjb250ZW50ID0gY29udmVydENvbnRlbnRUYWJzVG9XaGl0ZXNwYWNlKGNvbnRlbnQpOyAgLy8vXHJcblxyXG4gICAgZmlsZSA9IEZpbGUuZnJvbVBhdGhBbmRDb250ZW50KHBhdGgsIGNvbnRlbnQpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbGVGcm9tUmVsZWFzZShwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBjb25zdCB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHRvcG1vc3REaXJlY3RvcnlOYW1lRnJvbVBhdGgocGF0aCksXHJcbiAgICAgICAgdG9wbW9zdEZpbGVOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWUsIC8vL1xyXG4gICAgICAgIHJlbGVhc2UgPSBsb2FkUmVsZWFzZSh0b3Btb3N0RmlsZU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCksXHJcbiAgICAgICAgZmlsZSA9IHJlbGVhc2UuZ2V0RmlsZShwYXRoKTtcclxuXHJcbiAgcmV0dXJuIGZpbGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbGVzRnJvbVByb2plY3QocGF0aHMsIHByb2plY3RzRGlyZWN0b3J5UGF0aCkge1xyXG4gIGNvbnN0IGZpbGVzID0gRmlsZXMuZnJvbU5vdGhpbmcoKTtcclxuXHJcbiAgcGF0aHMuZm9yRWFjaCgocGF0aCkgPT4ge1xyXG4gICAgY29uc3QgZmlsZSA9IGZpbGVGcm9tUHJvamVjdChwYXRoLCBwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICAgIGZpbGVzLmFkZEZpbGUoZmlsZSk7XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBmaWxlcztcclxufVxyXG5cclxuZnVuY3Rpb24gZmlsZXNGcm9tUmVsZWFzZShwYXRocywgcHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgY29uc3QgZmlsZXMgPSBGaWxlcy5mcm9tTm90aGluZygpLFxyXG4gICAgICAgIHBhdGhzTGVuZ3RoID0gcGF0aHMubGVuZ3RoO1xyXG5cclxuICBpZiAocGF0aHNMZW5ndGggPiAwKSB7XHJcbiAgICBjb25zdCBmaXJzdFBhdGggPSBmaXJzdChwYXRocyksXHJcbiAgICAgICAgICBwYXRoID0gZmlyc3RQYXRoLCAvLy9cclxuICAgICAgICAgIHRvcG1vc3REaXJlY3RvcnlOYW1lID0gdG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSxcclxuICAgICAgICAgIHRvcG1vc3RGaWxlTmFtZSA9IHRvcG1vc3REaXJlY3RvcnlOYW1lLCAvLy9cclxuICAgICAgICAgIHJlbGVhc2UgPSBsb2FkUmVsZWFzZSh0b3Btb3N0RmlsZU5hbWUsIHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gICAgcGF0aHMuZm9yRWFjaCgocGF0aCkgPT4ge1xyXG4gICAgICBjb25zdCBmaWxlID0gcmVsZWFzZS5nZXRGaWxlKHBhdGgpO1xyXG5cclxuICAgICAgZmlsZXMuYWRkRmlsZShmaWxlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbGVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbnRyaWVzRnJvbVJlbGF0aXZlRGlyZWN0b3J5UGF0aChlbnRyaWVzLCByZWxhdGl2ZURpcmVjdG9yeVBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpIHtcclxuICBjb25zdCBhYnNvbHV0ZURpcmVjdG9yeVBhdGggPSBjb25jYXRlbmF0ZVBhdGhzKHByb2plY3RzRGlyZWN0b3J5UGF0aCwgcmVsYXRpdmVEaXJlY3RvcnlQYXRoKSxcclxuICAgICAgICBzdWJFbnRyeU5hbWVzID0gcmVhZERpcmVjdG9yeShhYnNvbHV0ZURpcmVjdG9yeVBhdGgpO1xyXG5cclxuICBzdWJFbnRyeU5hbWVzLmZvckVhY2goKHN1YkVudHJ5TmFtZSkgPT4ge1xyXG4gICAgY29uc3Qgc3ViRW50cnlOYW1lSGlkZGVuTmFtZSA9IGlzTmFtZUhpZGRlbk5hbWUoc3ViRW50cnlOYW1lKSxcclxuICAgICAgICAgIGxvYWRVbnJlY29nbmlzZWRGaWxlc0FuZERpcmVjdG9yaWVzID0gIWxvYWRPbmx5UmVjb2duaXNlZEZpbGVzO1xyXG5cclxuICAgIGlmICghc3ViRW50cnlOYW1lSGlkZGVuTmFtZSkge1xyXG4gICAgICBjb25zdCBwYXRoID0gY29uY2F0ZW5hdGVQYXRocyhyZWxhdGl2ZURpcmVjdG9yeVBhdGgsIHN1YkVudHJ5TmFtZSksXHJcbiAgICAgICAgICAgIGRpcmVjdG9yeSA9IGxvYWREaXJlY3RvcnkocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgICAgIGlmIChkaXJlY3RvcnkgIT09IG51bGwpIHtcclxuICAgICAgICBjb25zdCBkaXJlY3RvcnlQYXRoID0gcGF0aDsgLy8vXHJcblxyXG4gICAgICAgIGlmIChsb2FkVW5yZWNvZ25pc2VkRmlsZXNBbmREaXJlY3Rvcmllcykge1xyXG4gICAgICAgICAgZW50cmllcy5hZGREaXJlY3RvcnkoZGlyZWN0b3J5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVudHJpZXNGcm9tUmVsYXRpdmVEaXJlY3RvcnlQYXRoKGVudHJpZXMsIGRpcmVjdG9yeVBhdGgsIHByb2plY3RzRGlyZWN0b3J5UGF0aCwgbG9hZE9ubHlSZWNvZ25pc2VkRmlsZXMpOyAvLy9cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBmaWxlID0gbG9hZEZpbGUocGF0aCwgcHJvamVjdHNEaXJlY3RvcnlQYXRoKTtcclxuXHJcbiAgICAgICAgaWYgKGZpbGUgIT09IG51bGwpIHtcclxuICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gZmlsZS5nZXRQYXRoKCksXHJcbiAgICAgICAgICAgICAgICBmaWxlUGF0aFJlY29nbmlzZWRGaWxlUGF0aCA9IGlzRmlsZVBhdGhSZWNvZ25pc2VkRmlsZVBhdGgoZmlsZVBhdGgpLFxyXG4gICAgICAgICAgICAgICAgZmlsZVJlY29nbmlzZWRGaWxlID0gZmlsZVBhdGhSZWNvZ25pc2VkRmlsZVBhdGg7ICAvLy9cclxuXHJcbiAgICAgICAgICBpZiAoZmlsZVJlY29nbmlzZWRGaWxlIHx8IGxvYWRVbnJlY29nbmlzZWRGaWxlc0FuZERpcmVjdG9yaWVzKSB7XHJcbiAgICAgICAgICAgIGVudHJpZXMuYWRkRmlsZShmaWxlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9wbW9zdEZpbGVOYW1lc0Zyb21Qcm9qZWN0c0RpcmVjdG9yeVBhdGgocHJvamVjdHNEaXJlY3RvcnlQYXRoKSB7XHJcbiAgbGV0IHRvcG1vc3RGaWxlTmFtZXM7XHJcblxyXG4gIGNvbnN0IHN1YkVudHJ5TmFtZXMgPSByZWFkRGlyZWN0b3J5KHByb2plY3RzRGlyZWN0b3J5UGF0aCk7XHJcblxyXG4gIHRvcG1vc3RGaWxlTmFtZXMgPSBzdWJFbnRyeU5hbWVzLnJlZHVjZSgodG9wbW9zdEZpbGVOYW1lcywgc3ViRW50cnlOYW1lKSA9PiB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZVN1YkVudHJ5UGF0aCA9IGNvbmNhdGVuYXRlUGF0aHMocHJvamVjdHNEaXJlY3RvcnlQYXRoLCBzdWJFbnRyeU5hbWUpLFxyXG4gICAgICAgICAgc3ViRW50cnlOYW1lSGlkZGVuTmFtZSA9IGlzTmFtZUhpZGRlbk5hbWUoc3ViRW50cnlOYW1lKTtcclxuXHJcbiAgICBpZiAoIXN1YkVudHJ5TmFtZUhpZGRlbk5hbWUpIHtcclxuICAgICAgY29uc3Qgc3ViRW50cnlGaWxlID0gaXNFbnRyeUZpbGUoYWJzb2x1dGVTdWJFbnRyeVBhdGgpO1xyXG5cclxuICAgICAgaWYgKHN1YkVudHJ5RmlsZSkge1xyXG4gICAgICAgIGNvbnN0IHRvcG1vc3RGaWxlTmFtZSA9IHN1YkVudHJ5TmFtZTsgIC8vL1xyXG5cclxuICAgICAgICB0b3Btb3N0RmlsZU5hbWVzLnB1c2godG9wbW9zdEZpbGVOYW1lKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRvcG1vc3RGaWxlTmFtZXM7XHJcbiAgfSwgW10pO1xyXG5cclxuICByZXR1cm4gdG9wbW9zdEZpbGVOYW1lcztcclxufVxyXG5cclxuZnVuY3Rpb24gdG9wbW9zdERpcmVjdG9yeU5hbWVzRnJvbVByb2plY3RzRGlyZWN0b3J5UGF0aChwcm9qZWN0c0RpcmVjdG9yeVBhdGgpIHtcclxuICBsZXQgdG9wbW9zdERpcmVjdG9yeU5hbWVzO1xyXG5cclxuICBjb25zdCBzdWJFbnRyeU5hbWVzID0gcmVhZERpcmVjdG9yeShwcm9qZWN0c0RpcmVjdG9yeVBhdGgpO1xyXG5cclxuICB0b3Btb3N0RGlyZWN0b3J5TmFtZXMgPSBzdWJFbnRyeU5hbWVzLnJlZHVjZSgodG9wbW9zdERpcmVjdG9yeU5hbWVzLCBzdWJFbnRyeU5hbWUpID0+IHtcclxuICAgIGNvbnN0IGFic29sdXRlU3ViRW50cnlQYXRoID0gY29uY2F0ZW5hdGVQYXRocyhwcm9qZWN0c0RpcmVjdG9yeVBhdGgsIHN1YkVudHJ5TmFtZSksXHJcbiAgICAgICAgICBzdWJFbnRyeU5hbWVIaWRkZW5OYW1lID0gaXNOYW1lSGlkZGVuTmFtZShzdWJFbnRyeU5hbWUpO1xyXG5cclxuICAgIGlmICghc3ViRW50cnlOYW1lSGlkZGVuTmFtZSkge1xyXG4gICAgICBjb25zdCBzdWJFbnRyeURpcmVjdG9yeSA9IGlzRW50cnlEaXJlY3RvcnkoYWJzb2x1dGVTdWJFbnRyeVBhdGgpO1xyXG5cclxuICAgICAgaWYgKHN1YkVudHJ5RGlyZWN0b3J5KSB7XHJcbiAgICAgICAgY29uc3QgdG9wbW9zdERpcmVjdG9yeU5hbWUgPSBzdWJFbnRyeU5hbWU7ICAvLy9cclxuXHJcbiAgICAgICAgdG9wbW9zdERpcmVjdG9yeU5hbWVzLnB1c2godG9wbW9zdERpcmVjdG9yeU5hbWUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWVzO1xyXG4gIH0sIFtdKTtcclxuXHJcbiAgcmV0dXJuIHRvcG1vc3REaXJlY3RvcnlOYW1lcztcclxufVxyXG4iXSwibmFtZXMiOlsibG9hZEZpbGUiLCJzYXZlRmlsZSIsImxvYWRGaWxlcyIsInNhdmVGaWxlcyIsImxvYWRFbnRyaWVzIiwibG9hZFJlbGVhc2UiLCJsb2FkUHJvamVjdCIsImxvYWRSZWxlYXNlcyIsImxvYWRQcm9qZWN0cyIsImxvYWREaXJlY3RvcnkiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwicmVhZEZpbGUiLCJmaWxlU3lzdGVtVXRpbGl0aWVzIiwid3JpdGVGaWxlIiwiaXNFbnRyeUZpbGUiLCJyZWFkRGlyZWN0b3J5IiwiaXNFbnRyeURpcmVjdG9yeSIsImNvbmNhdGVuYXRlUGF0aHMiLCJwYXRoVXRpbGl0aWVzIiwidG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aCIsInRvcG1vc3REaXJlY3RvcnlQYXRoRnJvbVBhdGgiLCJwYXRoIiwicHJvamVjdHNEaXJlY3RvcnlQYXRoIiwiZmlsZSIsInRvcG1vc3REaXJlY3RvcnlOYW1lIiwiYWJzb2x1dGVQYXRoIiwiZW50cnlEaXJlY3RvcnkiLCJmaWxlRnJvbVByb2plY3QiLCJmaWxlRnJvbVJlbGVhc2UiLCJlcnJvciIsImdldFBhdGgiLCJjb250ZW50IiwiZ2V0Q29udGVudCIsInRvcG1vc3RBYnNvbHV0ZURpcmVjdG9yeVBhdGgiLCJta2RpcnAiLCJzeW5jIiwicGF0aHMiLCJmaWxlcyIsInBhdGhzTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3RQYXRoIiwiZmlsZXNGcm9tUHJvamVjdCIsImZpbGVzRnJvbVJlbGVhc2UiLCJmb3JFYWNoRmlsZSIsImxvYWRPbmx5UmVjb2duaXNlZEZpbGVzIiwiZW50cmllcyIsIkVudHJpZXMiLCJmcm9tTm90aGluZyIsInJlbGF0aXZlRGlyZWN0b3J5UGF0aCIsImVudHJpZXNGcm9tUmVsYXRpdmVEaXJlY3RvcnlQYXRoIiwicmVsZWFzZU5hbWUiLCJyZWxlYXNlIiwibmFtZSIsInRvcG1vc3RGaWxlTmFtZSIsImVudHJ5RmlsZSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJmcm9tSlNPTiIsIlJlbGVhc2UiLCJmcm9tTmFtZUFuZEVudHJpZXMiLCJwcm9qZWN0TmFtZSIsInByb2plY3QiLCJQcm9qZWN0IiwicmVsZWFzZXMiLCJSZWxlYXNlcyIsInRvcG1vc3RGaWxlTmFtZXMiLCJ0b3Btb3N0RmlsZU5hbWVzRnJvbVByb2plY3RzRGlyZWN0b3J5UGF0aCIsImZvckVhY2giLCJhZGRSZWxlYXNlIiwicHJvamVjdHMiLCJQcm9qZWN0cyIsInRvcG1vc3REaXJlY3RvcnlOYW1lcyIsInRvcG1vc3REaXJlY3RvcnlOYW1lc0Zyb21Qcm9qZWN0c0RpcmVjdG9yeVBhdGgiLCJhZGRQcm9qZWN0IiwiZGlyZWN0b3J5IiwiRGlyZWN0b3J5IiwiZnJvbVBhdGgiLCJjb252ZXJ0Q29udGVudFRhYnNUb1doaXRlc3BhY2UiLCJGaWxlIiwiZnJvbVBhdGhBbmRDb250ZW50IiwiZ2V0RmlsZSIsIkZpbGVzIiwiYWRkRmlsZSIsImFic29sdXRlRGlyZWN0b3J5UGF0aCIsInN1YkVudHJ5TmFtZXMiLCJzdWJFbnRyeU5hbWUiLCJzdWJFbnRyeU5hbWVIaWRkZW5OYW1lIiwiaXNOYW1lSGlkZGVuTmFtZSIsImxvYWRVbnJlY29nbmlzZWRGaWxlc0FuZERpcmVjdG9yaWVzIiwiZGlyZWN0b3J5UGF0aCIsImFkZERpcmVjdG9yeSIsImZpbGVQYXRoIiwiZmlsZVBhdGhSZWNvZ25pc2VkRmlsZVBhdGgiLCJpc0ZpbGVQYXRoUmVjb2duaXNlZEZpbGVQYXRoIiwiZmlsZVJlY29nbmlzZWRGaWxlIiwicmVkdWNlIiwiYWJzb2x1dGVTdWJFbnRyeVBhdGgiLCJzdWJFbnRy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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-file-system",
3
3
  "author": "James Smith",
4
- "version": "5.0.114",
4
+ "version": "5.0.116",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-file-system",
7
7
  "description": "Occam's file system functionality.",
@@ -3,10 +3,9 @@
3
3
  import { loadProject as loadProjectEx } from "./utilities/fileSystem"
4
4
 
5
5
  export default function loadProject(projectsDirectoryPath, json, callback) {
6
- const { directoryName } = json,
7
- topmostDirectoryName = directoryName, ///
6
+ const { projectName } = json,
8
7
  loadOnlyRecognisedFiles = false, ///
9
- project = loadProjectEx(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles);
8
+ project = loadProjectEx(projectName, projectsDirectoryPath, loadOnlyRecognisedFiles);
10
9
 
11
10
  json = (project !== null) ? ///
12
11
  project.toJSON():
@@ -3,9 +3,8 @@
3
3
  import { loadRelease as loadReleaseEx } from "./utilities/fileSystem"
4
4
 
5
5
  export default function loadRelease(projectsDirectoryPath, json, callback) {
6
- const { fileName } = json,
7
- topmostFileName = fileName, ///
8
- release = loadReleaseEx(topmostFileName, projectsDirectoryPath);
6
+ const { releaseName } = json,
7
+ release = loadReleaseEx(releaseName, projectsDirectoryPath);
9
8
 
10
9
  json = (release !== null) ? ///
11
10
  release.toJSON():
@@ -57,15 +57,21 @@ export function loadFiles(paths, projectsDirectoryPath) {
57
57
  let files = null;
58
58
 
59
59
  try {
60
- const topmostDirectoryName = topmostDirectoryNameFromPath(path);
60
+ const pathsLength = paths.length;
61
61
 
62
- if (topmostDirectoryName !== null) {
63
- const absolutePath = concatenatePaths(projectsDirectoryPath, topmostDirectoryName),
64
- entryDirectory = isEntryDirectory(absolutePath);
62
+ if (pathsLength > 0) {
63
+ const firstPath = first(paths),
64
+ path = firstPath, ///
65
+ topmostDirectoryName = topmostDirectoryNameFromPath(path);
66
+
67
+ if (topmostDirectoryName !== null) {
68
+ const absolutePath = concatenatePaths(projectsDirectoryPath, topmostDirectoryName),
69
+ entryDirectory = isEntryDirectory(absolutePath);
65
70
 
66
- files = entryDirectory ?
67
- filesFromProject(paths, projectsDirectoryPath) :
68
- filesFromRelease(paths, projectsDirectoryPath);
71
+ files = entryDirectory ?
72
+ filesFromProject(paths, projectsDirectoryPath) :
73
+ filesFromRelease(paths, projectsDirectoryPath);
74
+ }
69
75
  }
70
76
  } catch (error) {
71
77
  ///
@@ -89,12 +95,13 @@ export function loadEntries(topmostDirectoryName, projectsDirectoryPath, loadOnl
89
95
  return entries;
90
96
  }
91
97
 
92
- export function loadRelease(topmostFileName, projectsDirectoryPath) {
98
+ export function loadRelease(releaseName, projectsDirectoryPath) {
93
99
  let release = null;
94
100
 
95
101
  try {
96
- const name = topmostFileName, ///
97
- absolutePath = concatenatePaths(projectsDirectoryPath, name),
102
+ const name = releaseName, ///
103
+ topmostFileName = releaseName, ///
104
+ absolutePath = concatenatePaths(projectsDirectoryPath, topmostFileName),
98
105
  entryFile = isEntryFile(absolutePath);
99
106
 
100
107
  if (entryFile) {
@@ -120,11 +127,12 @@ export function loadRelease(topmostFileName, projectsDirectoryPath) {
120
127
  return release;
121
128
  }
122
129
 
123
- export function loadProject(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles) {
130
+ export function loadProject(projectName, projectsDirectoryPath, loadOnlyRecognisedFiles) {
124
131
  let project = null;
125
132
 
126
133
  try {
127
- const name = topmostDirectoryName, ///
134
+ const name = projectName, ///
135
+ topmostDirectoryName = projectName, ///
128
136
  entries = loadEntries(topmostDirectoryName, projectsDirectoryPath, loadOnlyRecognisedFiles);
129
137
 
130
138
  project = Project.fromNameAndEntries(name, entries);