@wavemaker/app-ng-runtime 11.15.5-rc.259 → 11.15.5-rc.262
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.
- package/components/base/fesm2022/index.mjs +1 -1
- package/components/containers/accordion/fesm2022/index.mjs +1 -1
- package/components/data/table/bundles/index.umd.js +5 -1
- package/components/data/table/esm2022/table.component.mjs +6 -2
- package/components/data/table/fesm2022/index.mjs +5 -1
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/input/calendar/fesm2022/index.mjs +1 -1
- package/components/input/chips/fesm2022/index.mjs +1 -1
- package/components/input/dataset-aware-form/fesm2022/index.mjs +1 -1
- package/components/navigation/menu/fesm2022/index.mjs +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/dynamic/fesm2022/index.mjs +2 -2
- package/scripts/datatable/datatable.js +6 -0
- package/variables/bundles/index.umd.js +88 -7
- package/variables/esm2022/service/variables.service.mjs +15 -3
- package/variables/esm2022/util/variable/service-variable.utils.mjs +25 -7
- package/variables/esm2022/util/variable/variables.utils.mjs +52 -2
- package/variables/fesm2022/index.mjs +89 -8
- package/variables/fesm2022/index.mjs.map +1 -1
- package/variables/service/variables.service.d.ts +2 -1
- package/variables/util/variable/variables.utils.d.ts +7 -0
|
@@ -15,6 +15,24 @@ import { concat, forEach, get, includes, isArray, isEmpty, isNull, isObject, isU
|
|
|
15
15
|
const isBodyTypeQueryOrProcedure = (variable) => {
|
|
16
16
|
return (includes(['QueryExecution', 'ProcedureExecution'], variable.controller)) && (includes(['put', 'post'], variable.operationType));
|
|
17
17
|
};
|
|
18
|
+
const appendQueryParam = (queryParams, paramName, paramValue, preEncoded = false) => {
|
|
19
|
+
const encodedValue = preEncoded ? paramValue : encodeURIComponent(paramValue);
|
|
20
|
+
const pair = `${paramName}=${encodedValue}`;
|
|
21
|
+
return queryParams ? `${queryParams}&${pair}` : `?${pair}`;
|
|
22
|
+
};
|
|
23
|
+
const getQueryParamValues = (param, paramValue) => {
|
|
24
|
+
if (isArray(paramValue)) {
|
|
25
|
+
// 'multi' (duplicate query-param bindings) repeats the param, e.g. tag=a&tag=b.
|
|
26
|
+
if (param.collectionFormat === 'multi') {
|
|
27
|
+
return map(paramValue, (value) => ({ value, preEncoded: false }));
|
|
28
|
+
}
|
|
29
|
+
// Otherwise, join into a single comma-separated value, e.g. tag=a,b. Encode each
|
|
30
|
+
// element individually so the joining commas stay literal (unambiguously the
|
|
31
|
+
// separator) while a comma inside an element's own value stays escaped as %2C.
|
|
32
|
+
return [{ value: map(paramValue, (value) => encodeURIComponent(value)).join(','), preEncoded: true }];
|
|
33
|
+
}
|
|
34
|
+
return [{ value: paramValue, preEncoded: false }];
|
|
35
|
+
};
|
|
18
36
|
/**
|
|
19
37
|
* returns true if the variable is a Query service variable
|
|
20
38
|
* @param {string} controller
|
|
@@ -232,12 +250,12 @@ export class ServiceVariableUtils {
|
|
|
232
250
|
if (isNull(paramValue) && isQueryServiceVar(variable.controller, variable.serviceType)) {
|
|
233
251
|
break;
|
|
234
252
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
queryParams
|
|
240
|
-
}
|
|
253
|
+
getQueryParamValues(param, paramValue).forEach(({ value: queryValue, preEncoded }) => {
|
|
254
|
+
if (isNull(queryValue) && isQueryServiceVar(variable.controller, variable.serviceType)) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
queryParams = appendQueryParam(queryParams, param.name, queryValue, preEncoded);
|
|
258
|
+
});
|
|
241
259
|
break;
|
|
242
260
|
case 'PATH':
|
|
243
261
|
/* replacing the path param based on the regular expression in the relative path */
|
|
@@ -373,4 +391,4 @@ export class ServiceVariableUtils {
|
|
|
373
391
|
});
|
|
374
392
|
}
|
|
375
393
|
}
|
|
376
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS12YXJpYWJsZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhcmlhYmxlcy9zcmMvdXRpbC92YXJpYWJsZS9zZXJ2aWNlLXZhcmlhYmxlLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXBGLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pJLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFDSCxNQUFNLEVBQ04sT0FBTyxFQUNQLEdBQUcsRUFDSCxRQUFRLEVBQ1IsT0FBTyxFQUNQLE9BQU8sRUFDUCxNQUFNLEVBQ04sUUFBUSxFQUNSLFdBQVcsRUFDWCxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFDakIsT0FBTyxFQUFFLE9BQU8sRUFDbkIsTUFBTSxXQUFXLENBQUM7QUFFbkI7Ozs7OztHQU1HO0FBQ0gsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO0lBQzVDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxhQUFh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QUFDLENBQUMsRUFBRSxVQUFVLEtBQUs7WUFDZixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleHRyYWN0VHlwZSwgZ2V0QmxvYiwgaXNEYXRlVGltZVR5cGUsIGlzRGVmaW5lZCwgcmVwbGFjZSB9IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHsgJHJvb3RTY29wZSwgQ09OU1RBTlRTLCBTV0FHR0VSX0NPTlNUQU5UUywgVkFSSUFCTEVfQ09OU1RBTlRTLCBXU19DT05TVEFOVFMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdmFyaWFibGVzLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBpc0ZpbGVVcGxvYWRTdXBwb3J0ZWQgfSBmcm9tICcuL3ZhcmlhYmxlcy51dGlscyc7XG5pbXBvcnQgeyBnZXRBY2Nlc3NUb2tlbiB9IGZyb20gJy4vLi4vb0F1dGgudXRpbHMnO1xuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJy4uLy4uL3V0aWwvdmFyaWFibGUvdmFyaWFibGVzLnV0aWxzJztcbmltcG9ydCB7IFBhZ2luYXRpb25VdGlscyB9IGZyb20gJy4uLy4uL3V0aWwvdmFyaWFibGUvcGFnaW5hdGlvbi51dGlscyc7XG5pbXBvcnQge1xuICAgIGNvbmNhdCxcbiAgICBmb3JFYWNoLFxuICAgIGdldCxcbiAgICBpbmNsdWRlcyxcbiAgICBpc0FycmF5LFxuICAgIGlzRW1wdHksXG4gICAgaXNOdWxsLFxuICAgIGlzT2JqZWN0LFxuICAgIGlzVW5kZWZpbmVkLFxuICAgIGpvaW4sIG1hcCwgcmVqZWN0LFxuICAgIHRvTG93ZXIsIHRvVXBwZXJcbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG4vKipcbiAqIHJldHVybnMgdHJ1ZSBpZiBhIFNlcnZpY2UgdmFyaWFibGUgaXM6XG4gKiAgLSBmb3IgYSBxdWVyeS9wcm9jZWR1cmVcbiAqICAtIHBlcmZvcm1zIGEgUFVUL1BPU1Qgb3BlcmF0aW9uLCBpLmUsIHRha2VzIGEgUmVxdWVzdCBCb2R5IGFzIGlucHV0XG4gKiBAcGFyYW0gdmFyaWFibGVcbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmNvbnN0IGlzQm9keVR5cGVRdWVyeU9yUHJvY2VkdXJlID0gKHZhcmlhYmxlKSA9PiB7XG4gICAgcmV0dXJuIChpbmNsdWRlcyhbJ1F1ZXJ5RXhlY3V0aW9uJywgJ1Byb2NlZHVyZUV4ZWN1dGlvbiddLCB2YXJpYWJsZS5jb250cm9sbGVyKSkgJiYgKGluY2x1ZGVzKFsncHV0JywgJ3Bvc3QnXSwgdmFyaWFibGUub3BlcmF0aW9uVHlwZSkpO1xufTtcblxuLyoqXG4gKiByZXR1cm5zIHRydWUgaWYgdGhlIHZhcmlhYmxlIGlzIGEgUXVlcnkgc2VydmljZSB2YXJpYWJsZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRyb2xsZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZXJ2aWNlVHlwZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGlzUXVlcnlTZXJ2aWNlVmFyID0gKGNvbnRyb2xsZXI6IHN0cmluZywgc2VydmljZVR5cGU6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBjb250cm9sbGVyID09PSBWQVJJQUJMRV9DT05TVEFOVFMuQ09OVFJPTExFUl9UWVBFLlFVRVJZICYmIHNlcnZpY2VUeXBlID09PSBWQVJJQUJMRV9DT05TVEFOVFMuU0VSVklDRV9UWVBFLkRBVEE7XG59O1xuXG4vKipcbiAqIEFwcGVuZCBnaXZlbiB2YWx1ZSB0byB0aGUgZm9ybWRhdGFcbiAqIEBwYXJhbSBmb3JtRGF0YVxuICogQHBhcmFtIHBhcmFtIC0gUGFyYW0gZnJvbSB3aGljaCB2YWx1ZSBoYXMgdG8gYmUgdGFrZW5cbiAqIEBwYXJhbSBwYXJhbVZhbHVlIC0gVmFsdWUgd2hpY2ggaXMgdG8gYmUgYXBwZW5kZWQgdG8gZm9ybWRhdGFcbiAqL1xuY29uc3QgZ2V0Rm9ybURhdGEgPSAoZm9ybURhdGEsIHBhcmFtLCBwYXJhbVZhbHVlKSA9PiB7XG4gICAgY29uc3QgcGFyYW1UeXBlID0gdG9Mb3dlcihleHRyYWN0VHlwZShnZXQocGFyYW0sICdpdGVtcy50eXBlJykgfHwgcGFyYW0udHlwZSkpLFxuICAgICAgICBwYXJhbUNvbnRlbnRUeXBlID0gQ09OU1RBTlRTLmlzU3R1ZGlvTW9kZSA/IHBhcmFtWyd4LVdNLUNPTlRFTlRfVFlQRSddIDogcGFyYW0uY29udGVudFR5cGU7XG4gICAgaWYgKGlzRmlsZVVwbG9hZFN1cHBvcnRlZCgpKSB7XG4gICAgICAgIGlmICgocGFyYW1UeXBlICE9PSAnZmlsZScpICYmIChwYXJhbUNvbnRlbnRUeXBlID09PSAnc3RyaW5nJyB8fCAhcGFyYW1Db250ZW50VHlwZSkpIHtcbiAgICAgICAgICAgIGlmIChpc09iamVjdChwYXJhbVZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHBhcmFtVmFsdWUgPSBKU09OLnN0cmluZ2lmeShwYXJhbVZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChwYXJhbS5uYW1lLCBwYXJhbVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHBhcmFtVmFsdWUpICYmIHBhcmFtVHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgICAgZm9yRWFjaChwYXJhbVZhbHVlLCBmdW5jdGlvbiAoZmlsZU9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQocGFyYW0ubmFtZSwgKGZpbGVPYmplY3QgJiYgZmlsZU9iamVjdC5jb250ZW50KSB8fCBnZXRCbG9iKGZpbGVPYmplY3QpLCBmaWxlT2JqZWN0Lm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQocGFyYW0ubmFtZSwgZ2V0QmxvYihwYXJhbVZhbHVlLCBwYXJhbUNvbnRlbnRUeXBlKSwgcGFyYW1WYWx1ZSAmJiBwYXJhbVZhbHVlLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtRGF0YTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENoZWNrIGZvciBtaXNzaW5nIHJlcXVpcmVkIHBhcmFtcyBhbmQgZm9ybWF0IHRoZSBkYXRlL3RpbWUgcGFyYW0gdmFsdWVzXG4gKiBAcGFyYW0gaW5wdXREYXRhXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiBAcmV0dXJucyB7e3JlcXVlc3RCb2R5OiB7fTsgbWlzc2luZ1BhcmFtczogYW55W119fVxuICovXG5jb25zdCBwcm9jZXNzUmVxdWVzdEJvZHkgPSAoaW5wdXREYXRhLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHt9LFxuICAgICAgICBtaXNzaW5nUGFyYW1zID0gW107XG4gICAgbGV0IHBhcmFtVmFsdWU7XG4gICAgZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgICBwYXJhbVZhbHVlID0gZ2V0KGlucHV0RGF0YSwgcGFyYW0ubmFtZSk7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQocGFyYW1WYWx1ZSkgJiYgcGFyYW1WYWx1ZSAhPT0gJycgJiYgcGFyYW1WYWx1ZSAhPT0gbnVsbCAmJiAhcGFyYW0ucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHBhcmFtVmFsdWUgPSBpc0RhdGVUaW1lVHlwZShwYXJhbS50eXBlKSA/IGZvcm1hdERhdGUocGFyYW1WYWx1ZSwgcGFyYW0udHlwZSkgOiBwYXJhbVZhbHVlO1xuICAgICAgICAgICAgLy8gQ29uc3RydWN0ICcsJyBzZXBhcmF0ZWQgc3RyaW5nIGlmIHBhcmFtIGlzIG5vdCBhcnJheSB0eXBlIGJ1dCB2YWx1ZSBpcyBhbiBhcnJheVxuICAgICAgICAgICAgaWYgKGlzQXJyYXkocGFyYW1WYWx1ZSkgJiYgdG9Mb3dlcihleHRyYWN0VHlwZShwYXJhbS50eXBlKSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1WYWx1ZSA9IGpvaW4ocGFyYW1WYWx1ZSwgJywnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcXVlc3RCb2R5W3BhcmFtLm5hbWVdID0gcGFyYW1WYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbS5yZXF1aXJlZCkge1xuICAgICAgICAgICAgbWlzc2luZ1BhcmFtcy5wdXNoKHBhcmFtLm5hbWUgfHwgcGFyYW0uaWQpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3JlcXVlc3RCb2R5JzogcmVxdWVzdEJvZHksXG4gICAgICAgICdtaXNzaW5nUGFyYW1zJzogbWlzc2luZ1BhcmFtc1xuICAgIH07XG59O1xuXG4vKipcbiAqIERvbmUgb25seSBmb3IgSFRUUCBjYWxscyBtYWRlIHZpYSB0aGUgcHJveHkgc2VydmVyXG4gKiBHb2VzIHRob3VnaCByZXF1ZXN0IGhlYWRlcnMsIGFwcGVuZHMgJ1gtJyB0byBjZXJ0YWluIGhlYWRlcnNcbiAqIHRoZXNlIGhlYWRlcnMgbmVlZCBub3QgYmUgcHJvY2Vzc2VkIGF0IHByb3h5IHNlcnZlciBhbmQgc2hvdWxkIGRpcmVjdGx5IGJlIHBhc3NlZCB0byB0aGUgc2VydmVyXG4gKiBlLmcuIEF1dGhvcml6YXRpb24sIENvb2tpZSwgZXRjLlxuICogQHBhcmFtIGhlYWRlcnNcbiAqIEByZXR1cm5zIHt7fX1cbiAqL1xuY29uc3QgY2xvYWtIZWFkZXJzRm9yUHJveHkgPSAoaGVhZGVycykgPT4ge1xuICAgIGNvbnN0IF9oZWFkZXJzID0ge30sXG4gICAgICAgIFVOQ0xPQUtFRF9IRUFERVJTID0gVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5VTkNMT0FLRURfSEVBREVSUyxcbiAgICAgICAgQ0xPQUtfUFJFRklYID0gVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5QUkVGSVguQ0xPQUtfSEVBREVSX0tFWTtcbiAgICBmb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uICh2YWwsIGtleSkge1xuICAgICAgICBpZiAoaW5jbHVkZXMoVU5DTE9BS0VEX0hFQURFUlMsIGtleS50b1VwcGVyQ2FzZSgpKSkge1xuICAgICAgICAgICAgX2hlYWRlcnNba2V5XSA9IHZhbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF9oZWFkZXJzW0NMT0FLX1BSRUZJWCArIGtleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfaGVhZGVycztcbn07XG5cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlVmFyaWFibGVVdGlscyB7XG4gICAgLyoqXG4gICAgICogcHJlcGFyZXMgdGhlIEhUVFAgcmVxdWVzdCBpbmZvIGZvciBhIFNlcnZpY2UgVmFyaWFibGVcbiAgICAgKiBAcGFyYW0gdmFyaWFibGVcbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uSW5mb1xuICAgICAqIEBwYXJhbSBpbnB1dEZpZWxkc1xuICAgICAqIEByZXR1cm5zIHthbnl9XG4gICAgICovXG4gICAgc3RhdGljIGNvbnN0cnVjdFJlcXVlc3RQYXJhbXModmFyaWFibGUsIG9wZXJhdGlvbkluZm8sIGlucHV0RmllbGRzLCBvcHRpb25zPykge1xuICAgICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlIHx8IHt9O1xuXG4gICAgICAgIC8vIG9wZXJhdGlvbkluZm8gaXMgc3BlY2lmaWNhbGx5IG51bGwgZm9yIHVuX2F1dGhvcml6ZWQgYWNjZXNzXG4gICAgICAgIGlmIChvcGVyYXRpb25JbmZvID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICdlcnJvcicgOiB7XG4gICAgICAgICAgICAgICAgICAgICd0eXBlJzogVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5FUlJfVFlQRS5VU0VSX1VOQVVUSE9SSVNFRCxcbiAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiBWQVJJQUJMRV9DT05TVEFOVFMuUkVTVF9TRVJWSUNFLkVSUl9NU0cuVVNFUl9VTkFVVEhPUklTRUQsXG4gICAgICAgICAgICAgICAgICAgICdmaWVsZCc6ICdfd21TZXJ2aWNlT3BlcmF0aW9uSW5mbydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGlzRW1wdHkob3BlcmF0aW9uSW5mbykpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJ2Vycm9yJyA6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiBWQVJJQUJMRV9DT05TVEFOVFMuUkVTVF9TRVJWSUNFLkVSUl9UWVBFLk1FVEFEQVRBX01JU1NJTkcsXG4gICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5FUlJfTVNHLk1FVEFEQVRBX01JU1NJTkcsXG4gICAgICAgICAgICAgICAgICAgICdmaWVsZCc6ICdfd21TZXJ2aWNlT3BlcmF0aW9uSW5mbydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbkluZm8gJiYgb3BlcmF0aW9uSW5mby5pbnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICdlcnJvcicgOiB7XG4gICAgICAgICAgICAgICAgICAgICd0eXBlJzogVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5FUlJfVFlQRS5DUlVEX09QRVJBVElPTl9NSVNTSU5HLFxuICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6IFZBUklBQkxFX0NPTlNUQU5UUy5SRVNUX1NFUlZJQ0UuRVJSX01TRy5DUlVEX09QRVJBVElPTl9NSVNTSU5HLFxuICAgICAgICAgICAgICAgICAgICAnZmllbGQnOiAnX3dtU2VydmljZU9wZXJhdGlvbkluZm8nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpcmVjdFBhdGggPSBvcGVyYXRpb25JbmZvLmRpcmVjdFBhdGggfHwgJycsXG4gICAgICAgIHJlbGF0aXZlUGF0aCA9IG9wZXJhdGlvbkluZm8uYmFzZVBhdGggPyBvcGVyYXRpb25JbmZvLmJhc2VQYXRoICsgb3BlcmF0aW9uSW5mby5yZWxhdGl2ZVBhdGggOiBvcGVyYXRpb25JbmZvLnJlbGF0aXZlUGF0aCxcbiAgICAgICAgaXNCb2R5VHlwZVF1ZXJ5UHJvY2VkdXJlID0gaXNCb2R5VHlwZVF1ZXJ5T3JQcm9jZWR1cmUodmFyaWFibGUpO1xuICAgICAgICBsZXQgcXVlcnlQYXJhbXMgPSAnJyxcbiAgICAgICAgYm9keUluZm8sXG4gICAgICAgIGhlYWRlcnMgPSB7fSxcbiAgICAgICAgcmVxdWVzdEJvZHksXG4gICAgICAgIHVybCxcbiAgICAgICAgcmVxdWlyZWRQYXJhbU1pc3NpbmcgPSBbXSxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBwYXRoUGFyYW1SZXgsXG4gICAgICAgIGludm9rZVBhcmFtcyxcbiAgICAgICAgYXV0aERldGFpbHMgPSBudWxsLFxuICAgICAgICB1bmFtZSxcbiAgICAgICAgcHN3ZCxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgaXNQcm94eUNhbGwsXG4gICAgICAgIHBhcmFtVmFsdWVJbmZvLFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIHNlY3VyaXR5RGVmbk9iaixcbiAgICAgICAgYWNjZXNzVG9rZW4sXG4gICAgICAgIHdpdGhDcmVkZW50aWFscztcblxuICAgICAgICBmdW5jdGlvbiBnZXRGb3JtRGF0YU9iaigpIHtcbiAgICAgICAgICAgIGlmIChmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgICByZXR1cm4gZm9ybURhdGE7XG4gICAgICAgIH1cblxuICAgICAgICBzZWN1cml0eURlZm5PYmogPSBnZXQob3BlcmF0aW9uSW5mby5zZWN1cml0eURlZmluaXRpb25zLCAnMCcpO1xuXG4gICAgICAgIGlmIChzZWN1cml0eURlZm5PYmopIHtcbiAgICAgICAgICAgIHN3aXRjaCAoc2VjdXJpdHlEZWZuT2JqLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFZBUklBQkxFX0NPTlNUQU5UUy5SRVNUX1NFUlZJQ0UuU0VDVVJJVFlfREVGTi5PQVVUSDI6XG4gICAgICAgICAgICAgICAgICAgIGFjY2Vzc1Rva2VuID0gZ2V0QWNjZXNzVG9rZW4oc2VjdXJpdHlEZWZuT2JqW1ZBUklBQkxFX0NPTlNUQU5UUy5SRVNUX1NFUlZJQ0UuT0FVVEhfUFJPVklERVJfS0VZXSwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY2Nlc3NUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1tWQVJJQUJMRV9DT05TVEFOVFMuUkVTVF9TRVJWSUNFLkFVVEhfSERSX0tFWV0gPSBWQVJJQUJMRV9DT05TVEFOVFMuUkVTVF9TRVJWSUNFLlBSRUZJWC5BVVRIX0hEUl9WQUwuT0FVVEggKyAnICcgKyBhY2Nlc3NUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHlwZScgOiBWQVJJQUJMRV9DT05TVEFOVFMuUkVTVF9TRVJWSUNFLkVSUl9UWVBFLk5PX0FDQ0VTU1RPS0VOLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZScgOiBWQVJJQUJMRV9DT05TVEFOVFMuUkVTVF9TRVJWSUNFLkVSUl9NU0cuTk9fQUNDRVNTVE9LRU5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZWN1cml0eURlZm5PYmonOiBzZWN1cml0eURlZm5PYmpcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBWQVJJQUJMRV9DT05TVEFOVFMuUkVTVF9TRVJWSUNFLlNFQ1VSSVRZX0RFRk4uQkFTSUM6XG4gICAgICAgICAgICAgICAgICAgIHVuYW1lID0gaW5wdXRGaWVsZHNbJ3dtX2F1dGhfdXNlcm5hbWUnXTtcbiAgICAgICAgICAgICAgICAgICAgcHN3ZCA9IGlucHV0RmllbGRzWyd3bV9hdXRoX3Bhc3N3b3JkJ107XG4gICAgICAgICAgICAgICAgICAgIGlmICh1bmFtZSAmJiBwc3dkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPW1ZJQkhVXTogYmFzNjQgZW5jb2RpbmcgYWx0ZXJuYXRpdmUuXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW1ZBUklBQkxFX0NPTlNUQU5UUy5SRVNUX1NFUlZJQ0UuQVVUSF9IRFJfS0VZXSA9IFZBUklBQkxFX0NPTlNUQU5UUy5SRVNUX1NFUlZJQ0UuUFJFRklYLkFVVEhfSERSX1ZBTC5CQVNJQyArICcgJyArIGJ0b2EodW5hbWUgKyAnOicgKyBwc3dkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhEZXRhaWxzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5BVVRIX1RZUEUuQkFTSUNcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvcic6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnIDogVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5FUlJfVFlQRS5OT19DUkVERU5USUFMUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiBWQVJJQUJMRV9DT05TVEFOVFMuUkVTVF9TRVJWSUNFLkVSUl9NU0cuTk9fQ1JFREVOVElBTFNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZWN1cml0eURlZm5PYmonOiBzZWN1cml0eURlZm5PYmpcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2V0IHF1ZXJ5IHBhcmFtcywgaWYgcGFnaW5hdGlvbiBpbmZvIGlzIHByZXNlbnQgYW5kIHRoZSBpbmZvIHNob3VsZCBiZSBwcmVzZW50IGluIHF1ZXJ5XG4gICAgICAgIFBhZ2luYXRpb25VdGlscy5jaGVja1BhZ2luYXRpb25BdFF1ZXJ5KG9wZXJhdGlvbkluZm8sIHZhcmlhYmxlLCBvcHRpb25zKTtcblxuICAgICAgICBvcGVyYXRpb25JbmZvLnByb3h5U2V0dGluZ3MgPSBvcGVyYXRpb25JbmZvLnByb3h5U2V0dGluZ3MgfHwge3dlYjogdHJ1ZSwgbW9iaWxlOiBmYWxzZX07XG4gICAgICAgIG1ldGhvZCA9IG9wZXJhdGlvbkluZm8uaHR0cE1ldGhvZCB8fCBvcGVyYXRpb25JbmZvLm1ldGhvZFR5cGU7XG4gICAgICAgIGlzUHJveHlDYWxsID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25JbmZvLnByb3h5U2V0dGluZ3Mud2ViO1xuICAgICAgICB9KCkpO1xuICAgICAgICB3aXRoQ3JlZGVudGlhbHMgPSBvcGVyYXRpb25JbmZvLnByb3h5U2V0dGluZ3Mud2l0aENyZWRlbnRpYWxzO1xuICAgICAgICB1cmwgPSBpc1Byb3h5Q2FsbCA/IHJlbGF0aXZlUGF0aCA6IGRpcmVjdFBhdGg7XG5cbiAgICAgICAgLyogbG9vcCB0aHJvdWdoIGFsbCB0aGUgcGFyYW1ldGVycyAqL1xuICAgICAgICBmb3JFYWNoKG9wZXJhdGlvbkluZm8ucGFyYW1ldGVycywgZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICAgICAgICAvLyBTZXQgcGFyYW1zIGJhc2VkIG9uIGN1cnJlbnQgd29ya3NwYWNlXG4gICAgICAgICAgICBmdW5jdGlvbiBzZXRQYXJhbXNPZkNoaWxkTm9kZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWMgY2FzZSBmb3IgYm9keSB0eXBlIHF1ZXJ5L3Byb2NlZHVyZSB2YXJpYWJsZSB3aXRoIHF1ZXJ5IHBhcmFtc1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRGaWVsZHNbcGFyYW0ubmFtZV0gJiYgaXNPYmplY3QoaW5wdXRGaWVsZHNbcGFyYW0ubmFtZV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbVZhbHVlSW5mbyA9IGlucHV0RmllbGRzW3BhcmFtLm5hbWVdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1WYWx1ZUluZm8gPSBpbnB1dEZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMgPSBnZXQob3BlcmF0aW9uSW5mbywgWydkZWZpbml0aW9ucycsIHBhcmFtLnR5cGVdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBGb3IgQXBpIERlc2lnbmVyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtVmFsdWVJbmZvID0gcGFyYW1WYWx1ZSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyYW0uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcGFyYW1WYWx1ZSA9IHBhcmFtLnNhbXBsZVZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoKGlzRGVmaW5lZChwYXJhbVZhbHVlKSAmJiBwYXJhbVZhbHVlICE9PSBudWxsICYmIHBhcmFtVmFsdWUgIT09ICcnKSB8fCAoaXNCb2R5VHlwZVF1ZXJ5UHJvY2VkdXJlICYmIHBhcmFtLnR5cGUgIT09ICdmaWxlJykpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgZGF0ZVRpbWUgcGFyYW1zIGZvciBkYXRhU2VydmljZSB2YXJpYWJsZXNcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUuc2VydmljZVR5cGUgPT09IFZBUklBQkxFX0NPTlNUQU5UUy5TRVJWSUNFX1RZUEUuREFUQSAmJiBpc0RhdGVUaW1lVHlwZShwYXJhbS50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbVZhbHVlID0gZm9ybWF0RGF0ZShwYXJhbVZhbHVlLCBwYXJhbS50eXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gQ29uc3RydWN0ICcsJyBzZXBhcmF0ZWQgc3RyaW5nIGlmIHBhcmFtIGlzIG5vdCBhcnJheSB0eXBlIGJ1dCB2YWx1ZSBpcyBhbiBhcnJheVxuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHBhcmFtVmFsdWUpICYmIHRvTG93ZXIoZXh0cmFjdFR5cGUocGFyYW0udHlwZSkpID09PSAnc3RyaW5nJyAmJiB2YXJpYWJsZS5zZXJ2aWNlVHlwZSA9PT0gVkFSSUFCTEVfQ09OU1RBTlRTLlNFUlZJQ0VfVFlQRS5EQVRBKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtVmFsdWUgPSBqb2luKHBhcmFtVmFsdWUsICcsJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN3aXRjaCAocGFyYW0ucGFyYW1ldGVyVHlwZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1FVRVJZJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBudWxsIHZhbHVlZCBxdWVyeSBwYXJhbXMgZm9yIHF1ZXJ5U2VydmljZSB2YXJpYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTnVsbChwYXJhbVZhbHVlKSAmJiBpc1F1ZXJ5U2VydmljZVZhcih2YXJpYWJsZS5jb250cm9sbGVyLCB2YXJpYWJsZS5zZXJ2aWNlVHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyA9ICc/JyArIHBhcmFtLm5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQocGFyYW1WYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zICs9ICcmJyArIHBhcmFtLm5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQocGFyYW1WYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUEFUSCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiByZXBsYWNpbmcgdGhlIHBhdGggcGFyYW0gYmFzZWQgb24gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiB0aGUgcmVsYXRpdmUgcGF0aCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFBhcmFtUmV4ID0gbmV3IFJlZ0V4cCgnXFxcXHMqXFxcXHtcXFxccyonICsgcGFyYW0ubmFtZSArICcoOlxcXFwuXFxcXCspP1xcXFxzKlxcXFx9XFxcXHMqJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShwYXRoUGFyYW1SZXgsIHBhcmFtVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0hFQURFUic6XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW3BhcmFtLm5hbWVdID0gcGFyYW1WYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdCT0RZJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBwb3N0L3B1dCBxdWVyeSBtZXRob2RzIHdyYXAgdGhlIGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNCb2R5VHlwZVF1ZXJ5UHJvY2VkdXJlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFyYW1zT2ZDaGlsZE5vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5SW5mbyA9IHByb2Nlc3NSZXF1ZXN0Qm9keShwYXJhbVZhbHVlSW5mbywgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keSA9IGJvZHlJbmZvLnJlcXVlc3RCb2R5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkUGFyYW1NaXNzaW5nID0gY29uY2F0KHJlcXVpcmVkUGFyYW1NaXNzaW5nLCBib2R5SW5mby5taXNzaW5nUGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBwYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0ZPUk1EQVRBJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0JvZHlUeXBlUXVlcnlQcm9jZWR1cmUgJiYgcGFyYW0ubmFtZSA9PT0gU1dBR0dFUl9DT05TVEFOVFMuV01fREFUQV9KU09OKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFyYW1zT2ZDaGlsZE5vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIHF1ZXJ5L3Byb2NlZHVyZSBmb3JtRGF0YSBub24tZmlsZSBwYXJhbXMgcGFyYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keUluZm8gPSBwcm9jZXNzUmVxdWVzdEJvZHkocGFyYW1WYWx1ZUluZm8sIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBnZXRGb3JtRGF0YShnZXRGb3JtRGF0YU9iaigpLCBwYXJhbSwgYm9keUluZm8ucmVxdWVzdEJvZHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkUGFyYW1NaXNzaW5nID0gY29uY2F0KHJlcXVpcmVkUGFyYW1NaXNzaW5nLCBib2R5SW5mby5taXNzaW5nUGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBnZXRGb3JtRGF0YShnZXRGb3JtRGF0YU9iaigpLCBwYXJhbSwgcGFyYW1WYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWRQYXJhbU1pc3NpbmcucHVzaChwYXJhbS5uYW1lIHx8IHBhcmFtLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaWYgcmVxdWlyZWQgcGFyYW0gbm90IGZvdW5kLCByZXR1cm4gZXJyb3JcbiAgICAgICAgaWYgKHJlcXVpcmVkUGFyYW1NaXNzaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAnZXJyb3InOiB7XG4gICAgICAgICAgICAgICAgICAgICd0eXBlJzogVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5FUlJfVFlQRS5SRVFVSVJFRF9GSUVMRF9NSVNTSU5HLFxuICAgICAgICAgICAgICAgICAgICAnZmllbGQnOiByZXF1aXJlZFBhcmFtTWlzc2luZy5qb2luKCcsJyksXG4gICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogcmVwbGFjZShWQVJJQUJMRV9DT05TVEFOVFMuUkVTVF9TRVJWSUNFLkVSUl9NU0cuUkVRVUlSRURfRklFTERfTUlTU0lORywgW3JlcXVpcmVkUGFyYW1NaXNzaW5nLmpvaW4oJywnKV0pLFxuICAgICAgICAgICAgICAgICAgICAnc2tpcERlZmF1bHROb3RpZmljYXRpb24nOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldHRpbmcgYXBwcm9wcmlhdGUgY29udGVudC1UeXBlIGZvciByZXF1ZXN0IGFjY2VwdGluZyByZXF1ZXN0IGJvZHkgbGlrZSBQT1NULCBQVVQsIGV0Y1xuICAgICAgICBpZiAoIWluY2x1ZGVzKFdTX0NPTlNUQU5UUy5OT05fQk9EWV9IVFRQX01FVEhPRFMsIHRvVXBwZXIobWV0aG9kKSkpIHtcbiAgICAgICAgICAgIC8qQmFzZWQgb24gdGhlIGZvcm1EYXRhIGJyb3dzZXIgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgY29udGVudCB0eXBlIHRvICdtdWx0aXBhcnQvZm9ybS1kYXRhJyBhbmQgd2Via2l0IGJvdW5kYXJ5Ki9cbiAgICAgICAgICAgIGlmICghKG9wZXJhdGlvbkluZm8uY29uc3VtZXMgJiYgKG9wZXJhdGlvbkluZm8uY29uc3VtZXNbMF0gPT09IFdTX0NPTlNUQU5UUy5DT05URU5UX1RZUEVTLk1VTFRJUEFSVF9GT1JNREFUQSkpKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAob3BlcmF0aW9uSW5mby5jb25zdW1lcyAmJiBvcGVyYXRpb25JbmZvLmNvbnN1bWVzWzBdKSB8fCAnYXBwbGljYXRpb24vanNvbic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGUgY29uc3VtZXMgaGFzIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBhbmRcbiAgICAgICAgLy8gaWYgdGhlIGh0dHAgcmVxdWVzdCBvZiBnaXZlbiBtZXRob2QgdHlwZSBjYW4gaGF2ZSBib2R5IHNlbmQgdGhlIHF1ZXJ5UGFyYW1zIGFzIEZvcm0gRGF0YVxuICAgICAgICBpZiAoaW5jbHVkZXMob3BlcmF0aW9uSW5mby5jb25zdW1lcywgV1NfQ09OU1RBTlRTLkNPTlRFTlRfVFlQRVMuRk9STV9VUkxfRU5DT0RFRClcbiAgICAgICAgICAgICYmICFpbmNsdWRlcyhXU19DT05TVEFOVFMuTk9OX0JPRFlfSFRUUF9NRVRIT0RTLCAobWV0aG9kIHx8ICcnKS50b1VwcGVyQ2FzZSgpKSkge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSAnPycgYXQgdGhlIHN0YXJ0IG9mIHRoZSBxdWVyeVBhcmFtc1xuICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSAocmVxdWVzdEJvZHkgPyByZXF1ZXN0Qm9keSArICcmJyA6ICcnKSArIHF1ZXJ5UGFyYW1zLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gV1NfQ09OU1RBTlRTLkNPTlRFTlRfVFlQRVMuRk9STV9VUkxfRU5DT0RFRDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVybCArPSBxdWVyeVBhcmFtcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgICAqIGZvciBwcm94eSBjYWxsczpcbiAgICAgICAgICogIC0gY2xvYWsgdGhlIHByb3BlciBoZWFkZXJzIChyZXF1aXJlZCBvbmx5IGZvciBSRVNUIHNlcnZpY2VzKVxuICAgICAgICAgKiAgLSBwcmVwYXJlIGNvbXBsZXRlIHVybCBmcm9tIHJlbGF0aXZlVXJsXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoaXNQcm94eUNhbGwpIHtcbiAgICAgICAgICAgIC8vIGF2b2lkaW5nIGNsb2FrSGVhZGVyc0ZvclByb3h5IHdoZW4gdGhlIG1ldGhvZCBpcyBpbnZva2VkIGZyb20gYXBpZGVzaWduZXIuXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9ICh2YXJpYWJsZS5zZXJ2aWNlVHlwZSAhPT0gVkFSSUFCTEVfQ09OU1RBTlRTLlNFUlZJQ0VfVFlQRS5SRVNUICYmIHZhcmlhYmxlLnNlcnZpY2VUeXBlICE9PSBWQVJJQUJMRV9DT05TVEFOVFMuU0VSVklDRV9UWVBFLk9QRU5BUEkpIHx8IG9wZXJhdGlvbkluZm8uc2tpcENsb2FrSGVhZGVycyA/IGhlYWRlcnMgOiBjbG9ha0hlYWRlcnNGb3JQcm94eShoZWFkZXJzKTtcbiAgICAgICAgICAgIGlmICh2YXJpYWJsZS5nZXRQcmVmYWJOYW1lKCkgJiYgVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU1VQUE9SVEVEX1NFUlZJQ0VTLmluZGV4T2YodmFyaWFibGUuc2VydmljZVR5cGUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIC8qIGlmIGl0IGlzIGEgcHJlZmFiIHZhcmlhYmxlICh1c2VkIGluIGEgbm9ybWFsIHByb2plY3QpLCBtb2RpZnkgdGhlIHVybCAqL1xuICAgICAgICAgICAgICAgIHVybCA9ICdwcmVmYWJzLycgKyB2YXJpYWJsZS5nZXRQcmVmYWJOYW1lKCkgKyB1cmw7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gJ2ludm9rZVByZWZhYlJlc3RTZXJ2aWNlJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXZhcmlhYmxlLmdldFByZWZhYk5hbWUoKSkge1xuICAgICAgICAgICAgICAgIHVybCA9ICdzZXJ2aWNlcycgKyB1cmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cmwgPSAkcm9vdFNjb3BlLnByb2plY3QuZGVwbG95ZWRVcmwgKyB1cmw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBwYWdpbmF0aW9uIGluZm8gZXhpc3RzLCBwcm9jZXNzIGluZm8gaW4gcmVxdWVzdCBoZWFkZXJzIG9yIGJvZHkgYmFzZWQgb24gdGhlIG1ldGFkYXRhXG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb25JbmZvID0gUGFnaW5hdGlvblV0aWxzLmdldFBhZ2luYXRpb25JbmZvKG9wZXJhdGlvbkluZm8sIHZhcmlhYmxlKTtcbiAgICAgICAgaWYgKHBhZ2luYXRpb25JbmZvICYmIHZhcmlhYmxlLnBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBQYWdpbmF0aW9uVXRpbHMuc2V0UGFnaW5hdGlvbkF0UmVxKHBhZ2luYXRpb25JbmZvLCBvcGVyYXRpb25JbmZvLCB2YXJpYWJsZSwgaGVhZGVycywgcmVxdWVzdEJvZHksIHVybCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAocmVzcCkge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwWydoZWFkZXJzJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVycyA9IHJlc3BbJ2hlYWRlcnMnXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BbJ3JlcXVlc3RCb2R5J10pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSByZXNwWydyZXF1ZXN0Qm9keSddXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwWyd1cmwnXSkge1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSByZXNwWyd1cmwnXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qY3JlYXRpbmcgdGhlIHBhcmFtcyBuZWVkZWQgdG8gaW52b2tlIHRoZSBzZXJ2aWNlLiB1cmwgaXMgZ2VuZXJhdGVkIGZyb20gdGhlIHJlbGF0aXZlIHBhdGggZm9yIHRoZSBvcGVyYXRpb24qL1xuICAgICAgICBpbnZva2VQYXJhbXMgPSB7XG4gICAgICAgICAgICAncHJvamVjdElEJzogJHJvb3RTY29wZS5wcm9qZWN0LmlkLFxuICAgICAgICAgICAgJ3VybCc6IHVybCxcbiAgICAgICAgICAgICd0YXJnZXQnOiB0YXJnZXQsXG4gICAgICAgICAgICAnbWV0aG9kJzogbWV0aG9kLFxuICAgICAgICAgICAgJ2hlYWRlcnMnOiBoZWFkZXJzLFxuICAgICAgICAgICAgJ2RhdGEnOiByZXF1ZXN0Qm9keSxcbiAgICAgICAgICAgICdhdXRoRGV0YWlscyc6IGF1dGhEZXRhaWxzLFxuICAgICAgICAgICAgJ2lzRGlyZWN0Q2FsbCc6ICFpc1Byb3h5Q2FsbCxcbiAgICAgICAgICAgICdpc0V4dFVSTCc6IHZhcmlhYmxlLnNlcnZpY2VUeXBlID09PSBWQVJJQUJMRV9DT05TVEFOVFMuU0VSVklDRV9UWVBFLlJFU1QsXG4gICAgICAgICAgICAnd2l0aENyZWRlbnRpYWxzJzogd2l0aENyZWRlbnRpYWxzXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGludm9rZVBhcmFtcztcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNGaWxlVXBsb2FkUmVxdWVzdCh2YXJpYWJsZSkge1xuICAgICAgICAvLyB0ZW1wb3JhcnkgZml4LCBoYXZlIHRvIGZpbmQgcHJvcGVyIHNvbHV0aW9uIGZvciBkZWNpZGluZyB3ZWF0aGVyIHRvIHVwbG9hZCBmaWxlIHRocm91Z2ggdmFyaWFibGVcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLnNlcnZpY2UgPT09ICdGaWxlU2VydmljZScgJiYgdmFyaWFibGUub3BlcmF0aW9uID09PSAndXBsb2FkRmlsZSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhcnJheSBvZiBxdWVyeSBwYXJhbSBuYW1lcyBmb3IgdmFyaWFibGUgb3RoZXIgdGhlbiBwYWdlLHNpemUsc29ydFxuICAgICAqIEBwYXJhbXMge3BhcmFtc30gcGFyYW1zIG9mIHRoZSB2YXJpYWJsZVxuICAgICAqL1xuICAgIHN0YXRpYyBleGNsdWRlUGFnaW5hdGlvblBhcmFtcyhwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIG1hcChyZWplY3QocGFyYW1zLCAocGFyYW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpbmNsdWRlcyhWQVJJQUJMRV9DT05TVEFOVFMuUEFHSU5BVElPTl9QQVJBTVMsIHBhcmFtLm5hbWUpO1xuICAgICAgICB9KSwgZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyYW0ubmFtZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS12YXJpYWJsZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhcmlhYmxlcy9zcmMvdXRpbC92YXJpYWJsZS9zZXJ2aWNlLXZhcmlhYmxlLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXBGLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pJLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFDSCxNQUFNLEVBQ04sT0FBTyxFQUNQLEdBQUcsRUFDSCxRQUFRLEVBQ1IsT0FBTyxFQUNQLE9BQU8sRUFDUCxNQUFNLEVBQ04sUUFBUSxFQUNSLFdBQVcsRUFDWCxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFDakIsT0FBTyxFQUFFLE9BQU8sRUFDbkIsTUFBTSxXQUFXLENBQUM7QUFFbkI7Ozs7OztHQU1HO0FBQ0gsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO0lBQzVDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxhQUFh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QUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNoQyxPQUFPLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxLQUFLO1lBQ2YsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0cmFjdFR5cGUsIGdldEJsb2IsIGlzRGF0ZVRpbWVUeXBlLCBpc0RlZmluZWQsIHJlcGxhY2UgfSBmcm9tICdAd20vY29yZSc7XG5cbmltcG9ydCB7ICRyb290U2NvcGUsIENPTlNUQU5UUywgU1dBR0dFUl9DT05TVEFOVFMsIFZBUklBQkxFX0NPTlNUQU5UUywgV1NfQ09OU1RBTlRTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3ZhcmlhYmxlcy5jb25zdGFudHMnO1xuaW1wb3J0IHsgaXNGaWxlVXBsb2FkU3VwcG9ydGVkIH0gZnJvbSAnLi92YXJpYWJsZXMudXRpbHMnO1xuaW1wb3J0IHsgZ2V0QWNjZXNzVG9rZW4gfSBmcm9tICcuLy4uL29BdXRoLnV0aWxzJztcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICcuLi8uLi91dGlsL3ZhcmlhYmxlL3ZhcmlhYmxlcy51dGlscyc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uVXRpbHMgfSBmcm9tICcuLi8uLi91dGlsL3ZhcmlhYmxlL3BhZ2luYXRpb24udXRpbHMnO1xuaW1wb3J0IHtcbiAgICBjb25jYXQsXG4gICAgZm9yRWFjaCxcbiAgICBnZXQsXG4gICAgaW5jbHVkZXMsXG4gICAgaXNBcnJheSxcbiAgICBpc0VtcHR5LFxuICAgIGlzTnVsbCxcbiAgICBpc09iamVjdCxcbiAgICBpc1VuZGVmaW5lZCxcbiAgICBqb2luLCBtYXAsIHJlamVjdCxcbiAgICB0b0xvd2VyLCB0b1VwcGVyXG59IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuLyoqXG4gKiByZXR1cm5zIHRydWUgaWYgYSBTZXJ2aWNlIHZhcmlhYmxlIGlzOlxuICogIC0gZm9yIGEgcXVlcnkvcHJvY2VkdXJlXG4gKiAgLSBwZXJmb3JtcyBhIFBVVC9QT1NUIG9wZXJhdGlvbiwgaS5lLCB0YWtlcyBhIFJlcXVlc3QgQm9keSBhcyBpbnB1dFxuICogQHBhcmFtIHZhcmlhYmxlXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5jb25zdCBpc0JvZHlUeXBlUXVlcnlPclByb2NlZHVyZSA9ICh2YXJpYWJsZSkgPT4ge1xuICAgIHJldHVybiAoaW5jbHVkZXMoWydRdWVyeUV4ZWN1dGlvbicsICdQcm9jZWR1cmVFeGVjdXRpb24nXSwgdmFyaWFibGUuY29udHJvbGxlcikpICYmIChpbmNsdWRlcyhbJ3B1dCcsICdwb3N0J10sIHZhcmlhYmxlLm9wZXJhdGlvblR5cGUpKTtcbn07XG5cbmNvbnN0IGFwcGVuZFF1ZXJ5UGFyYW0gPSAocXVlcnlQYXJhbXMsIHBhcmFtTmFtZSwgcGFyYW1WYWx1ZSwgcHJlRW5jb2RlZCA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgZW5jb2RlZFZhbHVlID0gcHJlRW5jb2RlZCA/IHBhcmFtVmFsdWUgOiBlbmNvZGVVUklDb21wb25lbnQocGFyYW1WYWx1ZSk7XG4gICAgY29uc3QgcGFpciA9IGAke3BhcmFtTmFtZX09JHtlbmNvZGVkVmFsdWV9YDtcbiAgICByZXR1cm4gcXVlcnlQYXJhbXMgPyBgJHtxdWVyeVBhcmFtc30mJHtwYWlyfWAgOiBgPyR7cGFpcn1gO1xufTtcblxuY29uc3QgZ2V0UXVlcnlQYXJhbVZhbHVlcyA9IChwYXJhbSwgcGFyYW1WYWx1ZSkgPT4ge1xuICAgIGlmIChpc0FycmF5KHBhcmFtVmFsdWUpKSB7XG4gICAgICAgIC8vICdtdWx0aScgKGR1cGxpY2F0ZSBxdWVyeS1wYXJhbSBiaW5kaW5ncykgcmVwZWF0cyB0aGUgcGFyYW0sIGUuZy4gdGFnPWEmdGFnPWIuXG4gICAgICAgIGlmIChwYXJhbS5jb2xsZWN0aW9uRm9ybWF0ID09PSAnbXVsdGknKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFwKHBhcmFtVmFsdWUsICh2YWx1ZSkgPT4gKHt2YWx1ZSwgcHJlRW5jb2RlZDogZmFsc2V9KSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBqb2luIGludG8gYSBzaW5nbGUgY29tbWEtc2VwYXJhdGVkIHZhbHVlLCBlLmcuIHRhZz1hLGIuIEVuY29kZSBlYWNoXG4gICAgICAgIC8vIGVsZW1lbnQgaW5kaXZpZHVhbGx5IHNvIHRoZSBqb2luaW5nIGNvbW1hcyBzdGF5IGxpdGVyYWwgKHVuYW1iaWd1b3VzbHkgdGhlXG4gICAgICAgIC8vIHNlcGFyYXRvcikgd2hpbGUgYSBjb21tYSBpbnNpZGUgYW4gZWxlbWVudCdzIG93biB2YWx1ZSBzdGF5cyBlc2NhcGVkIGFzICUyQy5cbiAgICAgICAgcmV0dXJuIFt7dmFsdWU6IG1hcChwYXJhbVZhbHVlLCAodmFsdWUpID0+IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpLmpvaW4oJywnKSwgcHJlRW5jb2RlZDogdHJ1ZX1dO1xuICAgIH1cbiAgICByZXR1cm4gW3t2YWx1ZTogcGFyYW1WYWx1ZSwgcHJlRW5jb2RlZDogZmFsc2V9XTtcbn07XG5cbi8qKlxuICogcmV0dXJucyB0cnVlIGlmIHRoZSB2YXJpYWJsZSBpcyBhIFF1ZXJ5IHNlcnZpY2UgdmFyaWFibGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250cm9sbGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VydmljZVR5cGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBpc1F1ZXJ5U2VydmljZVZhciA9IChjb250cm9sbGVyOiBzdHJpbmcsIHNlcnZpY2VUeXBlOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gY29udHJvbGxlciA9PT0gVkFSSUFCTEVfQ09OU1RBTlRTLkNPTlRST0xMRVJfVFlQRS5RVUVSWSAmJiBzZXJ2aWNlVHlwZSA9PT0gVkFSSUFCTEVfQ09OU1RBTlRTLlNFUlZJQ0VfVFlQRS5EQVRBO1xufTtcblxuLyoqXG4gKiBBcHBlbmQgZ2l2ZW4gdmFsdWUgdG8gdGhlIGZvcm1kYXRhXG4gKiBAcGFyYW0gZm9ybURhdGFcbiAqIEBwYXJhbSBwYXJhbSAtIFBhcmFtIGZyb20gd2hpY2ggdmFsdWUgaGFzIHRvIGJlIHRha2VuXG4gKiBAcGFyYW0gcGFyYW1WYWx1ZSAtIFZhbHVlIHdoaWNoIGlzIHRvIGJlIGFwcGVuZGVkIHRvIGZvcm1kYXRhXG4gKi9cbmNvbnN0IGdldEZvcm1EYXRhID0gKGZvcm1EYXRhLCBwYXJhbSwgcGFyYW1WYWx1ZSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtVHlwZSA9IHRvTG93ZXIoZXh0cmFjdFR5cGUoZ2V0KHBhcmFtLCAnaXRlbXMudHlwZScpIHx8IHBhcmFtLnR5cGUpKSxcbiAgICAgICAgcGFyYW1Db250ZW50VHlwZSA9IENPTlNUQU5UUy5pc1N0dWRpb01vZGUgPyBwYXJhbVsneC1XTS1DT05URU5UX1RZUEUnXSA6IHBhcmFtLmNvbnRlbnRUeXBlO1xuICAgIGlmIChpc0ZpbGVVcGxvYWRTdXBwb3J0ZWQoKSkge1xuICAgICAgICBpZiAoKHBhcmFtVHlwZSAhPT0gJ2ZpbGUnKSAmJiAocGFyYW1Db250ZW50VHlwZSA9PT0gJ3N0cmluZycgfHwgIXBhcmFtQ29udGVudFR5cGUpKSB7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QocGFyYW1WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBwYXJhbVZhbHVlID0gSlNPTi5zdHJpbmdpZnkocGFyYW1WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQocGFyYW0ubmFtZSwgcGFyYW1WYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheShwYXJhbVZhbHVlKSAmJiBwYXJhbVR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgIGZvckVhY2gocGFyYW1WYWx1ZSwgZnVuY3Rpb24gKGZpbGVPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKHBhcmFtLm5hbWUsIChmaWxlT2JqZWN0ICYmIGZpbGVPYmplY3QuY29udGVudCkgfHwgZ2V0QmxvYihmaWxlT2JqZWN0KSwgZmlsZU9iamVjdC5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKHBhcmFtLm5hbWUsIGdldEJsb2IocGFyYW1WYWx1ZSwgcGFyYW1Db250ZW50VHlwZSksIHBhcmFtVmFsdWUgJiYgcGFyYW1WYWx1ZS5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybURhdGE7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDaGVjayBmb3IgbWlzc2luZyByZXF1aXJlZCBwYXJhbXMgYW5kIGZvcm1hdCB0aGUgZGF0ZS90aW1lIHBhcmFtIHZhbHVlc1xuICogQHBhcmFtIGlucHV0RGF0YVxuICogQHBhcmFtIHBhcmFtc1xuICogQHJldHVybnMge3tyZXF1ZXN0Qm9keToge307IG1pc3NpbmdQYXJhbXM6IGFueVtdfX1cbiAqL1xuY29uc3QgcHJvY2Vzc1JlcXVlc3RCb2R5ID0gKGlucHV0RGF0YSwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7fSxcbiAgICAgICAgbWlzc2luZ1BhcmFtcyA9IFtdO1xuICAgIGxldCBwYXJhbVZhbHVlO1xuICAgIGZvckVhY2gocGFyYW1zLCBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgICAgcGFyYW1WYWx1ZSA9IGdldChpbnB1dERhdGEsIHBhcmFtLm5hbWUpO1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHBhcmFtVmFsdWUpICYmIHBhcmFtVmFsdWUgIT09ICcnICYmIHBhcmFtVmFsdWUgIT09IG51bGwgJiYgIXBhcmFtLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICBwYXJhbVZhbHVlID0gaXNEYXRlVGltZVR5cGUocGFyYW0udHlwZSkgPyBmb3JtYXREYXRlKHBhcmFtVmFsdWUsIHBhcmFtLnR5cGUpIDogcGFyYW1WYWx1ZTtcbiAgICAgICAgICAgIC8vIENvbnN0cnVjdCAnLCcgc2VwYXJhdGVkIHN0cmluZyBpZiBwYXJhbSBpcyBub3QgYXJyYXkgdHlwZSBidXQgdmFsdWUgaXMgYW4gYXJyYXlcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHBhcmFtVmFsdWUpICYmIHRvTG93ZXIoZXh0cmFjdFR5cGUocGFyYW0udHlwZSkpID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHBhcmFtVmFsdWUgPSBqb2luKHBhcmFtVmFsdWUsICcsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXF1ZXN0Qm9keVtwYXJhbS5uYW1lXSA9IHBhcmFtVmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW0ucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIG1pc3NpbmdQYXJhbXMucHVzaChwYXJhbS5uYW1lIHx8IHBhcmFtLmlkKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgICdyZXF1ZXN0Qm9keSc6IHJlcXVlc3RCb2R5LFxuICAgICAgICAnbWlzc2luZ1BhcmFtcyc6IG1pc3NpbmdQYXJhbXNcbiAgICB9O1xufTtcblxuLyoqXG4gKiBEb25lIG9ubHkgZm9yIEhUVFAgY2FsbHMgbWFkZSB2aWEgdGhlIHByb3h5IHNlcnZlclxuICogR29lcyB0aG91Z2ggcmVxdWVzdCBoZWFkZXJzLCBhcHBlbmRzICdYLScgdG8gY2VydGFpbiBoZWFkZXJzXG4gKiB0aGVzZSBoZWFkZXJzIG5lZWQgbm90IGJlIHByb2Nlc3NlZCBhdCBwcm94eSBzZXJ2ZXIgYW5kIHNob3VsZCBkaXJlY3RseSBiZSBwYXNzZWQgdG8gdGhlIHNlcnZlclxuICogZS5nLiBBdXRob3JpemF0aW9uLCBDb29raWUsIGV0Yy5cbiAqIEBwYXJhbSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7e319XG4gKi9cbmNvbnN0IGNsb2FrSGVhZGVyc0ZvclByb3h5ID0gKGhlYWRlcnMpID0+IHtcbiAgICBjb25zdCBfaGVhZGVycyA9IHt9LFxuICAgICAgICBVTkNMT0FLRURfSEVBREVSUyA9IFZBUklBQkxFX0NPTlNUQU5UUy5SRVNUX1NFUlZJQ0UuVU5DTE9BS0VEX0hFQURFUlMsXG4gICAgICAgIENMT0FLX1BSRUZJWCA9IFZBUklBQkxFX0NPTlNUQU5UUy5SRVNUX1NFUlZJQ0UuUFJFRklYLkNMT0FLX0hFQURFUl9LRVk7XG4gICAgZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcbiAgICAgICAgaWYgKGluY2x1ZGVzKFVOQ0xPQUtFRF9IRUFERVJTLCBrZXkudG9VcHBlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIF9oZWFkZXJzW2tleV0gPSB2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfaGVhZGVyc1tDTE9BS19QUkVGSVggKyBrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX2hlYWRlcnM7XG59O1xuXG5leHBvcnQgY2xhc3MgU2VydmljZVZhcmlhYmxlVXRpbHMge1xuICAgIC8qKlxuICAgICAqIHByZXBhcmVzIHRoZSBIVFRQIHJlcXVlc3QgaW5mbyBmb3IgYSBTZXJ2aWNlIFZhcmlhYmxlXG4gICAgICogQHBhcmFtIHZhcmlhYmxlXG4gICAgICogQHBhcmFtIG9wZXJhdGlvbkluZm9cbiAgICAgKiBAcGFyYW0gaW5wdXRGaWVsZHNcbiAgICAgKiBAcmV0dXJucyB7YW55fVxuICAgICAqL1xuICAgIHN0YXRpYyBjb25zdHJ1Y3RSZXF1ZXN0UGFyYW1zKHZhcmlhYmxlLCBvcGVyYXRpb25JbmZvLCBpbnB1dEZpZWxkcywgb3B0aW9ucz8pIHtcbiAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZSB8fCB7fTtcblxuICAgICAgICAvLyBvcGVyYXRpb25JbmZvIGlzIHNwZWNpZmljYWxseSBudWxsIGZvciB1bl9hdXRob3JpemVkIGFjY2Vzc1xuICAgICAgICBpZiAob3BlcmF0aW9uSW5mbyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAnZXJyb3InIDoge1xuICAgICAgICAgICAgICAgICAgICAndHlwZSc6IFZBUklBQkxFX0NPTlNUQU5UUy5SRVNUX1NFUlZJQ0UuRVJSX1RZUEUuVVNFUl9VTkFVVEhPUklTRUQsXG4gICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5FUlJfTVNHLlVTRVJfVU5BVVRIT1JJU0VELFxuICAgICAgICAgICAgICAgICAgICAnZmllbGQnOiAnX3dtU2VydmljZU9wZXJhdGlvbkluZm8nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0VtcHR5KG9wZXJhdGlvbkluZm8pKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICdlcnJvcicgOiB7XG4gICAgICAgICAgICAgICAgICAgICd0eXBlJzogVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5FUlJfVFlQRS5NRVRBREFUQV9NSVNTSU5HLFxuICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6IFZBUklBQkxFX0NPTlNUQU5UUy5SRVNUX1NFUlZJQ0UuRVJSX01TRy5NRVRBREFUQV9NSVNTSU5HLFxuICAgICAgICAgICAgICAgICAgICAnZmllbGQnOiAnX3dtU2VydmljZU9wZXJhdGlvbkluZm8nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb25JbmZvICYmIG9wZXJhdGlvbkluZm8uaW52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAnZXJyb3InIDoge1xuICAgICAgICAgICAgICAgICAgICAndHlwZSc6IFZBUklBQkxFX0NPTlNUQU5UUy5SRVNUX1NFUlZJQ0UuRVJSX1RZUEUuQ1JVRF9PUEVSQVRJT05fTUlTU0lORyxcbiAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiBWQVJJQUJMRV9DT05TVEFOVFMuUkVTVF9TRVJWSUNFLkVSUl9NU0cuQ1JVRF9PUEVSQVRJT05fTUlTU0lORyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZpZWxkJzogJ193bVNlcnZpY2VPcGVyYXRpb25JbmZvJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaXJlY3RQYXRoID0gb3BlcmF0aW9uSW5mby5kaXJlY3RQYXRoIHx8ICcnLFxuICAgICAgICByZWxhdGl2ZVBhdGggPSBvcGVyYXRpb25JbmZvLmJhc2VQYXRoID8gb3BlcmF0aW9uSW5mby5iYXNlUGF0aCArIG9wZXJhdGlvbkluZm8ucmVsYXRpdmVQYXRoIDogb3BlcmF0aW9uSW5mby5yZWxhdGl2ZVBhdGgsXG4gICAgICAgIGlzQm9keVR5cGVRdWVyeVByb2NlZHVyZSA9IGlzQm9keVR5cGVRdWVyeU9yUHJvY2VkdXJlKHZhcmlhYmxlKTtcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1zID0gJycsXG4gICAgICAgIGJvZHlJbmZvLFxuICAgICAgICBoZWFkZXJzID0ge30sXG4gICAgICAgIHJlcXVlc3RCb2R5LFxuICAgICAgICB1cmwsXG4gICAgICAgIHJlcXVpcmVkUGFyYW1NaXNzaW5nID0gW10sXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgcGF0aFBhcmFtUmV4LFxuICAgICAgICBpbnZva2VQYXJhbXMsXG4gICAgICAgIGF1dGhEZXRhaWxzID0gbnVsbCxcbiAgICAgICAgdW5hbWUsXG4gICAgICAgIHBzd2QsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgZm9ybURhdGEsXG4gICAgICAgIGlzUHJveHlDYWxsLFxuICAgICAgICBwYXJhbVZhbHVlSW5mbyxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBzZWN1cml0eURlZm5PYmosXG4gICAgICAgIGFjY2Vzc1Rva2VuLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM7XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0Rm9ybURhdGFPYmooKSB7XG4gICAgICAgICAgICBpZiAoZm9ybURhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1EYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VjdXJpdHlEZWZuT2JqID0gZ2V0KG9wZXJhdGlvbkluZm8uc2VjdXJpdHlEZWZpbml0aW9ucywgJzAnKTtcblxuICAgICAgICBpZiAoc2VjdXJpdHlEZWZuT2JqKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHNlY3VyaXR5RGVmbk9iai50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBWQVJJQUJMRV9DT05TVEFOVFMuUkVTVF9TRVJWSUNFLlNFQ1VSSVRZX0RFRk4uT0FVVEgyOlxuICAgICAgICAgICAgICAgICAgICBhY2Nlc3NUb2tlbiA9IGdldEFjY2Vzc1Rva2VuKHNlY3VyaXR5RGVmbk9ialtWQVJJQUJMRV9DT05TVEFOVFMuUkVTVF9TRVJWSUNFLk9BVVRIX1BST1ZJREVSX0tFWV0sIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5BVVRIX0hEUl9LRVldID0gVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5QUkVGSVguQVVUSF9IRFJfVkFMLk9BVVRIICsgJyAnICsgYWNjZXNzVG9rZW47XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvcic6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnIDogVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5FUlJfVFlQRS5OT19BQ0NFU1NUT0tFTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnIDogVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5FUlJfTVNHLk5PX0FDQ0VTU1RPS0VOXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VjdXJpdHlEZWZuT2JqJzogc2VjdXJpdHlEZWZuT2JqXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5TRUNVUklUWV9ERUZOLkJBU0lDOlxuICAgICAgICAgICAgICAgICAgICB1bmFtZSA9IGlucHV0RmllbGRzWyd3bV9hdXRoX3VzZXJuYW1lJ107XG4gICAgICAgICAgICAgICAgICAgIHBzd2QgPSBpbnB1dEZpZWxkc1snd21fYXV0aF9wYXNzd29yZCddO1xuICAgICAgICAgICAgICAgICAgICBpZiAodW5hbWUgJiYgcHN3ZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ET1tWSUJIVV06IGJhczY0IGVuY29kaW5nIGFsdGVybmF0aXZlLlxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1tWQVJJQUJMRV9DT05TVEFOVFMuUkVTVF9TRVJWSUNFLkFVVEhfSERSX0tFWV0gPSBWQVJJQUJMRV9DT05TVEFOVFMuUkVTVF9TRVJWSUNFLlBSRUZJWC5BVVRIX0hEUl9WQUwuQkFTSUMgKyAnICcgKyBidG9hKHVuYW1lICsgJzonICsgcHN3ZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoRGV0YWlscyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6IFZBUklBQkxFX0NPTlNUQU5UUy5SRVNUX1NFUlZJQ0UuQVVUSF9UWVBFLkJBU0lDXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3InOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJyA6IFZBUklBQkxFX0NPTlNUQU5UUy5SRVNUX1NFUlZJQ0UuRVJSX1RZUEUuTk9fQ1JFREVOVElBTFMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5FUlJfTVNHLk5PX0NSRURFTlRJQUxTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VjdXJpdHlEZWZuT2JqJzogc2VjdXJpdHlEZWZuT2JqXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHNldCBxdWVyeSBwYXJhbXMsIGlmIHBhZ2luYXRpb24gaW5mbyBpcyBwcmVzZW50IGFuZCB0aGUgaW5mbyBzaG91bGQgYmUgcHJlc2VudCBpbiBxdWVyeVxuICAgICAgICBQYWdpbmF0aW9uVXRpbHMuY2hlY2tQYWdpbmF0aW9uQXRRdWVyeShvcGVyYXRpb25JbmZvLCB2YXJpYWJsZSwgb3B0aW9ucyk7XG5cbiAgICAgICAgb3BlcmF0aW9uSW5mby5wcm94eVNldHRpbmdzID0gb3BlcmF0aW9uSW5mby5wcm94eVNldHRpbmdzIHx8IHt3ZWI6IHRydWUsIG1vYmlsZTogZmFsc2V9O1xuICAgICAgICBtZXRob2QgPSBvcGVyYXRpb25JbmZvLmh0dHBNZXRob2QgfHwgb3BlcmF0aW9uSW5mby5tZXRob2RUeXBlO1xuICAgICAgICBpc1Byb3h5Q2FsbCA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5mby5wcm94eVNldHRpbmdzLndlYjtcbiAgICAgICAgfSgpKTtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzID0gb3BlcmF0aW9uSW5mby5wcm94eVNldHRpbmdzLndpdGhDcmVkZW50aWFscztcbiAgICAgICAgdXJsID0gaXNQcm94eUNhbGwgPyByZWxhdGl2ZVBhdGggOiBkaXJlY3RQYXRoO1xuXG4gICAgICAgIC8qIGxvb3AgdGhyb3VnaCBhbGwgdGhlIHBhcmFtZXRlcnMgKi9cbiAgICAgICAgZm9yRWFjaChvcGVyYXRpb25JbmZvLnBhcmFtZXRlcnMsIGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgICAgICAgLy8gU2V0IHBhcmFtcyBiYXNlZCBvbiBjdXJyZW50IHdvcmtzcGFjZVxuICAgICAgICAgICAgZnVuY3Rpb24gc2V0UGFyYW1zT2ZDaGlsZE5vZGUoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0RmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmljIGNhc2UgZm9yIGJvZHkgdHlwZSBxdWVyeS9wcm9jZWR1cmUgdmFyaWFibGUgd2l0aCBxdWVyeSBwYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0RmllbGRzW3BhcmFtLm5hbWVdICYmIGlzT2JqZWN0KGlucHV0RmllbGRzW3BhcmFtLm5hbWVdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1WYWx1ZUluZm8gPSBpbnB1dEZpZWxkc1twYXJhbS5uYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtVmFsdWVJbmZvID0gaW5wdXRGaWVsZHM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0gZ2V0KG9wZXJhdGlvbkluZm8sIFsnZGVmaW5pdGlvbnMnLCBwYXJhbS50eXBlXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIEFwaSBEZXNpZ25lclxuICAgICAgICAgICAgICAgICAgICBwYXJhbVZhbHVlSW5mbyA9IHBhcmFtVmFsdWUgfHwge307XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHBhcmFtVmFsdWUgPSBwYXJhbS5zYW1wbGVWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKChpc0RlZmluZWQocGFyYW1WYWx1ZSkgJiYgcGFyYW1WYWx1ZSAhPT0gbnVsbCAmJiBwYXJhbVZhbHVlICE9PSAnJykgfHwgKGlzQm9keVR5cGVRdWVyeVByb2NlZHVyZSAmJiBwYXJhbS50eXBlICE9PSAnZmlsZScpKSB7XG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IGRhdGVUaW1lIHBhcmFtcyBmb3IgZGF0YVNlcnZpY2UgdmFyaWFibGVzXG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLnNlcnZpY2VUeXBlID09PSBWQVJJQUJMRV9DT05TVEFOVFMuU0VSVklDRV9UWVBFLkRBVEEgJiYgaXNEYXRlVGltZVR5cGUocGFyYW0udHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1WYWx1ZSA9IGZvcm1hdERhdGUocGFyYW1WYWx1ZSwgcGFyYW0udHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdCAnLCcgc2VwYXJhdGVkIHN0cmluZyBpZiBwYXJhbSBpcyBub3QgYXJyYXkgdHlwZSBidXQgdmFsdWUgaXMgYW4gYXJyYXlcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShwYXJhbVZhbHVlKSAmJiB0b0xvd2VyKGV4dHJhY3RUeXBlKHBhcmFtLnR5cGUpKSA9PT0gJ3N0cmluZycgJiYgdmFyaWFibGUuc2VydmljZVR5cGUgPT09IFZBUklBQkxFX0NPTlNUQU5UUy5TRVJWSUNFX1RZUEUuREFUQSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbVZhbHVlID0gam9pbihwYXJhbVZhbHVlLCAnLCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhcmFtLnBhcmFtZXRlclR5cGUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdRVUVSWSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgbnVsbCB2YWx1ZWQgcXVlcnkgcGFyYW1zIGZvciBxdWVyeVNlcnZpY2UgdmFyaWFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc051bGwocGFyYW1WYWx1ZSkgJiYgaXNRdWVyeVNlcnZpY2VWYXIodmFyaWFibGUuY29udHJvbGxlciwgdmFyaWFibGUuc2VydmljZVR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRRdWVyeVBhcmFtVmFsdWVzKHBhcmFtLCBwYXJhbVZhbHVlKS5mb3JFYWNoKCh7dmFsdWU6IHF1ZXJ5VmFsdWUsIHByZUVuY29kZWR9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTnVsbChxdWVyeVZhbHVlKSAmJiBpc1F1ZXJ5U2VydmljZVZhcih2YXJpYWJsZS5jb250cm9sbGVyLCB2YXJpYWJsZS5zZXJ2aWNlVHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyA9IGFwcGVuZFF1ZXJ5UGFyYW0ocXVlcnlQYXJhbXMsIHBhcmFtLm5hbWUsIHF1ZXJ5VmFsdWUsIHByZUVuY29kZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUEFUSCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiByZXBsYWNpbmcgdGhlIHBhdGggcGFyYW0gYmFzZWQgb24gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiB0aGUgcmVsYXRpdmUgcGF0aCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFBhcmFtUmV4ID0gbmV3IFJlZ0V4cCgnXFxcXHMqXFxcXHtcXFxccyonICsgcGFyYW0ubmFtZSArICcoOlxcXFwuXFxcXCspP1xcXFxzKlxcXFx9XFxcXHMqJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShwYXRoUGFyYW1SZXgsIHBhcmFtVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0hFQURFUic6XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW3BhcmFtLm5hbWVdID0gcGFyYW1WYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdCT0RZJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBwb3N0L3B1dCBxdWVyeSBtZXRob2RzIHdyYXAgdGhlIGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNCb2R5VHlwZVF1ZXJ5UHJvY2VkdXJlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFyYW1zT2ZDaGlsZE5vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5SW5mbyA9IHByb2Nlc3NSZXF1ZXN0Qm9keShwYXJhbVZhbHVlSW5mbywgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keSA9IGJvZHlJbmZvLnJlcXVlc3RCb2R5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkUGFyYW1NaXNzaW5nID0gY29uY2F0KHJlcXVpcmVkUGFyYW1NaXNzaW5nLCBib2R5SW5mby5taXNzaW5nUGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBwYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0ZPUk1EQVRBJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0JvZHlUeXBlUXVlcnlQcm9jZWR1cmUgJiYgcGFyYW0ubmFtZSA9PT0gU1dBR0dFUl9DT05TVEFOVFMuV01fREFUQV9KU09OKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFyYW1zT2ZDaGlsZE5vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9jZXNzIHF1ZXJ5L3Byb2NlZHVyZSBmb3JtRGF0YSBub24tZmlsZSBwYXJhbXMgcGFyYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keUluZm8gPSBwcm9jZXNzUmVxdWVzdEJvZHkocGFyYW1WYWx1ZUluZm8sIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBnZXRGb3JtRGF0YShnZXRGb3JtRGF0YU9iaigpLCBwYXJhbSwgYm9keUluZm8ucmVxdWVzdEJvZHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkUGFyYW1NaXNzaW5nID0gY29uY2F0KHJlcXVpcmVkUGFyYW1NaXNzaW5nLCBib2R5SW5mby5taXNzaW5nUGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBnZXRGb3JtRGF0YShnZXRGb3JtRGF0YU9iaigpLCBwYXJhbSwgcGFyYW1WYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgcmVxdWlyZWRQYXJhbU1pc3NpbmcucHVzaChwYXJhbS5uYW1lIHx8IHBhcmFtLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaWYgcmVxdWlyZWQgcGFyYW0gbm90IGZvdW5kLCByZXR1cm4gZXJyb3JcbiAgICAgICAgaWYgKHJlcXVpcmVkUGFyYW1NaXNzaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAnZXJyb3InOiB7XG4gICAgICAgICAgICAgICAgICAgICd0eXBlJzogVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU0VSVklDRS5FUlJfVFlQRS5SRVFVSVJFRF9GSUVMRF9NSVNTSU5HLFxuICAgICAgICAgICAgICAgICAgICAnZmllbGQnOiByZXF1aXJlZFBhcmFtTWlzc2luZy5qb2luKCcsJyksXG4gICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogcmVwbGFjZShWQVJJQUJMRV9DT05TVEFOVFMuUkVTVF9TRVJWSUNFLkVSUl9NU0cuUkVRVUlSRURfRklFTERfTUlTU0lORywgW3JlcXVpcmVkUGFyYW1NaXNzaW5nLmpvaW4oJywnKV0pLFxuICAgICAgICAgICAgICAgICAgICAnc2tpcERlZmF1bHROb3RpZmljYXRpb24nOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldHRpbmcgYXBwcm9wcmlhdGUgY29udGVudC1UeXBlIGZvciByZXF1ZXN0IGFjY2VwdGluZyByZXF1ZXN0IGJvZHkgbGlrZSBQT1NULCBQVVQsIGV0Y1xuICAgICAgICBpZiAoIWluY2x1ZGVzKFdTX0NPTlNUQU5UUy5OT05fQk9EWV9IVFRQX01FVEhPRFMsIHRvVXBwZXIobWV0aG9kKSkpIHtcbiAgICAgICAgICAgIC8qQmFzZWQgb24gdGhlIGZvcm1EYXRhIGJyb3dzZXIgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgY29udGVudCB0eXBlIHRvICdtdWx0aXBhcnQvZm9ybS1kYXRhJyBhbmQgd2Via2l0IGJvdW5kYXJ5Ki9cbiAgICAgICAgICAgIGlmICghKG9wZXJhdGlvbkluZm8uY29uc3VtZXMgJiYgKG9wZXJhdGlvbkluZm8uY29uc3VtZXNbMF0gPT09IFdTX0NPTlNUQU5UUy5DT05URU5UX1RZUEVTLk1VTFRJUEFSVF9GT1JNREFUQSkpKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAob3BlcmF0aW9uSW5mby5jb25zdW1lcyAmJiBvcGVyYXRpb25JbmZvLmNvbnN1bWVzWzBdKSB8fCAnYXBwbGljYXRpb24vanNvbic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGUgY29uc3VtZXMgaGFzIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBhbmRcbiAgICAgICAgLy8gaWYgdGhlIGh0dHAgcmVxdWVzdCBvZiBnaXZlbiBtZXRob2QgdHlwZSBjYW4gaGF2ZSBib2R5IHNlbmQgdGhlIHF1ZXJ5UGFyYW1zIGFzIEZvcm0gRGF0YVxuICAgICAgICBpZiAoaW5jbHVkZXMob3BlcmF0aW9uSW5mby5jb25zdW1lcywgV1NfQ09OU1RBTlRTLkNPTlRFTlRfVFlQRVMuRk9STV9VUkxfRU5DT0RFRClcbiAgICAgICAgICAgICYmICFpbmNsdWRlcyhXU19DT05TVEFOVFMuTk9OX0JPRFlfSFRUUF9NRVRIT0RTLCAobWV0aG9kIHx8ICcnKS50b1VwcGVyQ2FzZSgpKSkge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSAnPycgYXQgdGhlIHN0YXJ0IG9mIHRoZSBxdWVyeVBhcmFtc1xuICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSAocmVxdWVzdEJvZHkgPyByZXF1ZXN0Qm9keSArICcmJyA6ICcnKSArIHF1ZXJ5UGFyYW1zLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gV1NfQ09OU1RBTlRTLkNPTlRFTlRfVFlQRVMuRk9STV9VUkxfRU5DT0RFRDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVybCArPSBxdWVyeVBhcmFtcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgICAqIGZvciBwcm94eSBjYWxsczpcbiAgICAgICAgICogIC0gY2xvYWsgdGhlIHByb3BlciBoZWFkZXJzIChyZXF1aXJlZCBvbmx5IGZvciBSRVNUIHNlcnZpY2VzKVxuICAgICAgICAgKiAgLSBwcmVwYXJlIGNvbXBsZXRlIHVybCBmcm9tIHJlbGF0aXZlVXJsXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoaXNQcm94eUNhbGwpIHtcbiAgICAgICAgICAgIC8vIGF2b2lkaW5nIGNsb2FrSGVhZGVyc0ZvclByb3h5IHdoZW4gdGhlIG1ldGhvZCBpcyBpbnZva2VkIGZyb20gYXBpZGVzaWduZXIuXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9ICh2YXJpYWJsZS5zZXJ2aWNlVHlwZSAhPT0gVkFSSUFCTEVfQ09OU1RBTlRTLlNFUlZJQ0VfVFlQRS5SRVNUICYmIHZhcmlhYmxlLnNlcnZpY2VUeXBlICE9PSBWQVJJQUJMRV9DT05TVEFOVFMuU0VSVklDRV9UWVBFLk9QRU5BUEkpIHx8IG9wZXJhdGlvbkluZm8uc2tpcENsb2FrSGVhZGVycyA/IGhlYWRlcnMgOiBjbG9ha0hlYWRlcnNGb3JQcm94eShoZWFkZXJzKTtcbiAgICAgICAgICAgIGlmICh2YXJpYWJsZS5nZXRQcmVmYWJOYW1lKCkgJiYgVkFSSUFCTEVfQ09OU1RBTlRTLlJFU1RfU1VQUE9SVEVEX1NFUlZJQ0VTLmluZGV4T2YodmFyaWFibGUuc2VydmljZVR5cGUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIC8qIGlmIGl0IGlzIGEgcHJlZmFiIHZhcmlhYmxlICh1c2VkIGluIGEgbm9ybWFsIHByb2plY3QpLCBtb2RpZnkgdGhlIHVybCAqL1xuICAgICAgICAgICAgICAgIHVybCA9ICdwcmVmYWJzLycgKyB2YXJpYWJsZS5nZXRQcmVmYWJOYW1lKCkgKyB1cmw7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gJ2ludm9rZVByZWZhYlJlc3RTZXJ2aWNlJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXZhcmlhYmxlLmdldFByZWZhYk5hbWUoKSkge1xuICAgICAgICAgICAgICAgIHVybCA9ICdzZXJ2aWNlcycgKyB1cmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cmwgPSAkcm9vdFNjb3BlLnByb2plY3QuZGVwbG95ZWRVcmwgKyB1cmw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBwYWdpbmF0aW9uIGluZm8gZXhpc3RzLCBwcm9jZXNzIGluZm8gaW4gcmVxdWVzdCBoZWFkZXJzIG9yIGJvZHkgYmFzZWQgb24gdGhlIG1ldGFkYXRhXG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb25JbmZvID0gUGFnaW5hdGlvblV0aWxzLmdldFBhZ2luYXRpb25JbmZvKG9wZXJhdGlvbkluZm8sIHZhcmlhYmxlKTtcbiAgICAgICAgaWYgKHBhZ2luYXRpb25JbmZvICYmIHZhcmlhYmxlLnBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3AgPSBQYWdpbmF0aW9uVXRpbHMuc2V0UGFnaW5hdGlvbkF0UmVxKHBhZ2luYXRpb25JbmZvLCBvcGVyYXRpb25JbmZvLCB2YXJpYWJsZSwgaGVhZGVycywgcmVxdWVzdEJvZHksIHVybCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAocmVzcCkge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwWydoZWFkZXJzJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVycyA9IHJlc3BbJ2hlYWRlcnMnXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BbJ3JlcXVlc3RCb2R5J10pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSByZXNwWydyZXF1ZXN0Qm9keSddXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwWyd1cmwnXSkge1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSByZXNwWyd1cmwnXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qY3JlYXRpbmcgdGhlIHBhcmFtcyBuZWVkZWQgdG8gaW52b2tlIHRoZSBzZXJ2aWNlLiB1cmwgaXMgZ2VuZXJhdGVkIGZyb20gdGhlIHJlbGF0aXZlIHBhdGggZm9yIHRoZSBvcGVyYXRpb24qL1xuICAgICAgICBpbnZva2VQYXJhbXMgPSB7XG4gICAgICAgICAgICAncHJvamVjdElEJzogJHJvb3RTY29wZS5wcm9qZWN0LmlkLFxuICAgICAgICAgICAgJ3VybCc6IHVybCxcbiAgICAgICAgICAgICd0YXJnZXQnOiB0YXJnZXQsXG4gICAgICAgICAgICAnbWV0aG9kJzogbWV0aG9kLFxuICAgICAgICAgICAgJ2hlYWRlcnMnOiBoZWFkZXJzLFxuICAgICAgICAgICAgJ2RhdGEnOiByZXF1ZXN0Qm9keSxcbiAgICAgICAgICAgICdhdXRoRGV0YWlscyc6IGF1dGhEZXRhaWxzLFxuICAgICAgICAgICAgJ2lzRGlyZWN0Q2FsbCc6ICFpc1Byb3h5Q2FsbCxcbiAgICAgICAgICAgICdpc0V4dFVSTCc6IHZhcmlhYmxlLnNlcnZpY2VUeXBlID09PSBWQVJJQUJMRV9DT05TVEFOVFMuU0VSVklDRV9UWVBFLlJFU1QsXG4gICAgICAgICAgICAnd2l0aENyZWRlbnRpYWxzJzogd2l0aENyZWRlbnRpYWxzXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGludm9rZVBhcmFtcztcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNGaWxlVXBsb2FkUmVxdWVzdCh2YXJpYWJsZSkge1xuICAgICAgICAvLyB0ZW1wb3JhcnkgZml4LCBoYXZlIHRvIGZpbmQgcHJvcGVyIHNvbHV0aW9uIGZvciBkZWNpZGluZyB3ZWF0aGVyIHRvIHVwbG9hZCBmaWxlIHRocm91Z2ggdmFyaWFibGVcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLnNlcnZpY2UgPT09ICdGaWxlU2VydmljZScgJiYgdmFyaWFibGUub3BlcmF0aW9uID09PSAndXBsb2FkRmlsZSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhcnJheSBvZiBxdWVyeSBwYXJhbSBuYW1lcyBmb3IgdmFyaWFibGUgb3RoZXIgdGhlbiBwYWdlLHNpemUsc29ydFxuICAgICAqIEBwYXJhbXMge3BhcmFtc30gcGFyYW1zIG9mIHRoZSB2YXJpYWJsZVxuICAgICAqL1xuICAgIHN0YXRpYyBleGNsdWRlUGFnaW5hdGlvblBhcmFtcyhwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIG1hcChyZWplY3QocGFyYW1zLCAocGFyYW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpbmNsdWRlcyhWQVJJQUJMRV9DT05TVEFOVFMuUEFHSU5BVElPTl9QQVJBTVMsIHBhcmFtLm5hbWUpO1xuICAgICAgICB9KSwgZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyYW0ubmFtZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|