@firestartr/cli 0.1.15 → 0.1.18
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/build/index.js +92 -22
- package/build/provisioner/dist-cdktf/index.js +3 -1
- package/build/provisioner/dist-cdktf/index.js.map +1 -1
- package/build/provisioner/dist-cdktf/src/cdktf.d.ts +1 -1
- package/build/provisioner/dist-cdktf/src/cdktf.js +2 -5
- package/build/provisioner/dist-cdktf/src/entities/firestartrgithubgroup/helpers/TeamsHelper.js +1 -0
- package/build/provisioner/dist-cdktf/src/handlers/index.d.ts +1 -1
- package/build/provisioner/dist-cdktf/src/resources/resource.js +1 -2
- package/build/provisioner/dist-cdktf/tsconfig.cdktf.tsbuildinfo +1 -1
- package/package.json +1 -1
package/build/index.js
CHANGED
|
@@ -228145,9 +228145,10 @@ exports["default"] = {
|
|
|
228145
228145
|
"use strict";
|
|
228146
228146
|
|
|
228147
228147
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
228148
|
-
exports.TFWorkspaceRefCR = exports.TFWorkspaceRefRegex = void 0;
|
|
228148
|
+
exports.TFWorkspaceRefCR = exports.GroupRefRegex = exports.TFWorkspaceRefRegex = void 0;
|
|
228149
228149
|
const regModuleName = /[\w\-\.]+/;
|
|
228150
228150
|
exports.TFWorkspaceRefRegex = new RegExp(`\\$\\{\\{\\s*tfworkspace\\:(${regModuleName.source})\\:outputs\\.(${regModuleName.source})\\s*\\}\\}`, 'ig');
|
|
228151
|
+
exports.GroupRefRegex = new RegExp(`group\\:(${regModuleName.source})`, 'ig');
|
|
228151
228152
|
exports.TFWorkspaceRefCR = new RegExp(`\\$\\{\\{\\s*references\\.(${regModuleName.source})\\s*\\}\\}`, 'i');
|
|
228152
228153
|
|
|
228153
228154
|
|
|
@@ -228159,9 +228160,9 @@ exports.TFWorkspaceRefCR = new RegExp(`\\$\\{\\{\\s*references\\.(${regModuleNam
|
|
|
228159
228160
|
"use strict";
|
|
228160
228161
|
|
|
228161
228162
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
228162
|
-
exports.
|
|
228163
|
-
exports.
|
|
228164
|
-
exports.toJson_TfResultSpecReference = exports.TfResultSpecAction = exports.toJson_TfResultSpec = exports.toJson_TfResultProps = exports.TfResult = exports.FirestartrTerraformWorkspacePlanSpecContextProvidersRefKind = exports.FirestartrTerraformWorkspacePlanSpecContextBackendRefKind = exports.FirestartrTerraformWorkspacePlanSpecReferencesRefKind = exports.toJson_FirestartrTerraformWorkspacePlanSpecContextProvidersRef = exports.toJson_FirestartrTerraformWorkspacePlanSpecContextBackendRef = exports.toJson_FirestartrTerraformWorkspacePlanSpecWriteConnectionSecretToRefOutputs = void 0;
|
|
228163
|
+
exports.toJson_FirestartrGithubRepositorySpecPermissionsRef = exports.toJson_FirestartrGithubRepositorySpecPagesSource = exports.toJson_FirestartrGithubRepositorySpecActionsOidc = exports.FirestartrGithubRepositorySpecRepoVisibility = exports.toJson_FirestartrGithubRepositorySpecFirestartrTechnology = exports.toJson_FirestartrGithubRepositorySpecContextProvider = exports.toJson_FirestartrGithubRepositorySpecContextBackend = exports.toJson_FirestartrGithubRepositorySpecWriteConnectionSecretToRef = exports.toJson_FirestartrGithubRepositorySpecBranchProtections = exports.toJson_FirestartrGithubRepositorySpecPermissions = exports.toJson_FirestartrGithubRepositorySpecPages = exports.toJson_FirestartrGithubRepositorySpecActions = exports.toJson_FirestartrGithubRepositorySpecRepo = exports.toJson_FirestartrGithubRepositorySpecFirestartr = exports.toJson_FirestartrGithubRepositorySpecContext = exports.toJson_FirestartrGithubRepositorySpec = exports.toJson_FirestartrGithubRepositoryProps = exports.FirestartrGithubRepository = exports.FirestartrGithubMembershipSpecContextProviderRefKind = exports.FirestartrGithubMembershipSpecContextBackendRefKind = exports.toJson_FirestartrGithubMembershipSpecContextProviderRef = exports.toJson_FirestartrGithubMembershipSpecContextBackendRef = exports.toJson_FirestartrGithubMembershipSpecWriteConnectionSecretToRefOutputs = exports.toJson_FirestartrGithubMembershipSpecContextProvider = exports.toJson_FirestartrGithubMembershipSpecContextBackend = exports.toJson_FirestartrGithubMembershipSpecWriteConnectionSecretToRef = exports.toJson_FirestartrGithubMembershipSpecFirestartr = exports.toJson_FirestartrGithubMembershipSpecContext = exports.FirestartrGithubMembershipSpecRole = exports.toJson_FirestartrGithubMembershipSpec = exports.toJson_FirestartrGithubMembershipProps = exports.FirestartrGithubMembership = exports.FirestartrGithubGroupSpecContextProviderRefKind = exports.FirestartrGithubGroupSpecContextBackendRefKind = exports.toJson_FirestartrGithubGroupSpecContextProviderRef = exports.toJson_FirestartrGithubGroupSpecContextBackendRef = exports.toJson_FirestartrGithubGroupSpecWriteConnectionSecretToRefOutputs = exports.toJson_FirestartrGithubGroupSpecContextProvider = exports.toJson_FirestartrGithubGroupSpecContextBackend = exports.toJson_FirestartrGithubGroupSpecMembersRef = exports.toJson_FirestartrGithubGroupSpecParentTeamRef = exports.toJson_FirestartrGithubGroupSpecWriteConnectionSecretToRef = exports.toJson_FirestartrGithubGroupSpecFirestartr = exports.toJson_FirestartrGithubGroupSpecContext = exports.toJson_FirestartrGithubGroupSpecMembers = exports.toJson_FirestartrGithubGroupSpecParentTeam = exports.FirestartrGithubGroupSpecPrivacy = exports.toJson_FirestartrGithubGroupSpec = exports.toJson_FirestartrGithubGroupProps = exports.FirestartrGithubGroup = void 0;
|
|
228164
|
+
exports.toJson_FirestartrTerraformWorkspacePlanSpecContextBackend = exports.toJson_FirestartrTerraformWorkspacePlanSpecWriteConnectionSecretToRef = exports.toJson_FirestartrTerraformWorkspacePlanSpecReferences = exports.FirestartrTerraformWorkspacePlanSpecSource = exports.toJson_FirestartrTerraformWorkspacePlanSpecFirestartr = exports.toJson_FirestartrTerraformWorkspacePlanSpecContext = exports.toJson_FirestartrTerraformWorkspacePlanSpec = exports.toJson_FirestartrTerraformWorkspacePlanProps = exports.FirestartrTerraformWorkspacePlan = exports.FirestartrTerraformWorkspaceSpecContextProvidersRefKind = exports.FirestartrTerraformWorkspaceSpecContextBackendRefKind = exports.FirestartrTerraformWorkspaceSpecReferencesRefKind = exports.toJson_FirestartrTerraformWorkspaceSpecContextProvidersRef = exports.toJson_FirestartrTerraformWorkspaceSpecContextBackendRef = exports.toJson_FirestartrTerraformWorkspaceSpecWriteConnectionSecretToRefOutputs = exports.toJson_FirestartrTerraformWorkspaceSpecReferencesRef = exports.toJson_FirestartrTerraformWorkspaceSpecContextProviders = exports.toJson_FirestartrTerraformWorkspaceSpecContextBackend = exports.toJson_FirestartrTerraformWorkspaceSpecWriteConnectionSecretToRef = exports.toJson_FirestartrTerraformWorkspaceSpecReferences = exports.FirestartrTerraformWorkspaceSpecSource = exports.toJson_FirestartrTerraformWorkspaceSpecFirestartr = exports.toJson_FirestartrTerraformWorkspaceSpecContext = exports.toJson_FirestartrTerraformWorkspaceSpec = exports.toJson_FirestartrTerraformWorkspaceProps = exports.FirestartrTerraformWorkspace = exports.toJson_FirestartrProviderConfigSpecSecretsSecretRef = exports.toJson_FirestartrProviderConfigSpecSecrets = exports.toJson_FirestartrProviderConfigSpec = exports.toJson_FirestartrProviderConfigProps = exports.FirestartrProviderConfig = exports.FirestartrGithubRepositoryFeatureSpecContextProviderRefKind = exports.FirestartrGithubRepositoryFeatureSpecContextBackendRefKind = exports.toJson_FirestartrGithubRepositoryFeatureSpecContextProviderRef = exports.toJson_FirestartrGithubRepositoryFeatureSpecContextBackendRef = exports.toJson_FirestartrGithubRepositoryFeatureSpecRepositoryTargetRef = exports.toJson_FirestartrGithubRepositoryFeatureSpecContextProvider = exports.toJson_FirestartrGithubRepositoryFeatureSpecContextBackend = exports.toJson_FirestartrGithubRepositoryFeatureSpecFiles = exports.toJson_FirestartrGithubRepositoryFeatureSpecRepositoryTarget = exports.toJson_FirestartrGithubRepositoryFeatureSpecContext = exports.toJson_FirestartrGithubRepositoryFeatureSpecFirestartr = exports.toJson_FirestartrGithubRepositoryFeatureSpec = exports.toJson_FirestartrGithubRepositoryFeatureProps = exports.FirestartrGithubRepositoryFeature = exports.FirestartrGithubRepositorySpecContextProviderRefKind = exports.FirestartrGithubRepositorySpecContextBackendRefKind = exports.toJson_FirestartrGithubRepositorySpecContextProviderRef = exports.toJson_FirestartrGithubRepositorySpecContextBackendRef = exports.toJson_FirestartrGithubRepositorySpecWriteConnectionSecretToRefOutputs = void 0;
|
|
228165
|
+
exports.toJson_TfResultSpecReference = exports.TfResultSpecAction = exports.toJson_TfResultSpec = exports.toJson_TfResultProps = exports.TfResult = exports.FirestartrTerraformWorkspacePlanSpecContextProvidersRefKind = exports.FirestartrTerraformWorkspacePlanSpecContextBackendRefKind = exports.FirestartrTerraformWorkspacePlanSpecReferencesRefKind = exports.toJson_FirestartrTerraformWorkspacePlanSpecContextProvidersRef = exports.toJson_FirestartrTerraformWorkspacePlanSpecContextBackendRef = exports.toJson_FirestartrTerraformWorkspacePlanSpecWriteConnectionSecretToRefOutputs = exports.toJson_FirestartrTerraformWorkspacePlanSpecReferencesRef = exports.toJson_FirestartrTerraformWorkspacePlanSpecContextProviders = void 0;
|
|
228165
228166
|
// generated by cdk8s
|
|
228166
228167
|
const cdk8s_1 = __nccwpck_require__(77228);
|
|
228167
228168
|
/**
|
|
@@ -228234,6 +228235,7 @@ function toJson_FirestartrGithubGroupSpec(obj) {
|
|
|
228234
228235
|
'org': obj.org,
|
|
228235
228236
|
'privacy': obj.privacy,
|
|
228236
228237
|
'description': obj.description,
|
|
228238
|
+
'parentTeam': toJson_FirestartrGithubGroupSpecParentTeam(obj.parentTeam),
|
|
228237
228239
|
'members': (_a = obj.members) === null || _a === void 0 ? void 0 : _a.map(y => toJson_FirestartrGithubGroupSpecMembers(y)),
|
|
228238
228240
|
'context': toJson_FirestartrGithubGroupSpecContext(obj.context),
|
|
228239
228241
|
'firestartr': toJson_FirestartrGithubGroupSpecFirestartr(obj.firestartr),
|
|
@@ -228254,6 +228256,21 @@ var FirestartrGithubGroupSpecPrivacy;
|
|
|
228254
228256
|
/** secret */
|
|
228255
228257
|
FirestartrGithubGroupSpecPrivacy["SECRET"] = "secret";
|
|
228256
228258
|
})(FirestartrGithubGroupSpecPrivacy = exports.FirestartrGithubGroupSpecPrivacy || (exports.FirestartrGithubGroupSpecPrivacy = {}));
|
|
228259
|
+
/**
|
|
228260
|
+
* Converts an object of type 'FirestartrGithubGroupSpecParentTeam' to JSON representation.
|
|
228261
|
+
*/
|
|
228262
|
+
/* eslint-disable max-len, quote-props */
|
|
228263
|
+
function toJson_FirestartrGithubGroupSpecParentTeam(obj) {
|
|
228264
|
+
if (obj === undefined) {
|
|
228265
|
+
return undefined;
|
|
228266
|
+
}
|
|
228267
|
+
const result = {
|
|
228268
|
+
'ref': toJson_FirestartrGithubGroupSpecParentTeamRef(obj.ref),
|
|
228269
|
+
};
|
|
228270
|
+
// filter undefined values
|
|
228271
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : (Object.assign(Object.assign({}, r), { [i[0]]: i[1] })), {});
|
|
228272
|
+
}
|
|
228273
|
+
exports.toJson_FirestartrGithubGroupSpecParentTeam = toJson_FirestartrGithubGroupSpecParentTeam;
|
|
228257
228274
|
/**
|
|
228258
228275
|
* Converts an object of type 'FirestartrGithubGroupSpecMembers' to JSON representation.
|
|
228259
228276
|
*/
|
|
@@ -228317,6 +228334,23 @@ function toJson_FirestartrGithubGroupSpecWriteConnectionSecretToRef(obj) {
|
|
|
228317
228334
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : (Object.assign(Object.assign({}, r), { [i[0]]: i[1] })), {});
|
|
228318
228335
|
}
|
|
228319
228336
|
exports.toJson_FirestartrGithubGroupSpecWriteConnectionSecretToRef = toJson_FirestartrGithubGroupSpecWriteConnectionSecretToRef;
|
|
228337
|
+
/**
|
|
228338
|
+
* Converts an object of type 'FirestartrGithubGroupSpecParentTeamRef' to JSON representation.
|
|
228339
|
+
*/
|
|
228340
|
+
/* eslint-disable max-len, quote-props */
|
|
228341
|
+
function toJson_FirestartrGithubGroupSpecParentTeamRef(obj) {
|
|
228342
|
+
if (obj === undefined) {
|
|
228343
|
+
return undefined;
|
|
228344
|
+
}
|
|
228345
|
+
const result = {
|
|
228346
|
+
'kind': obj.kind,
|
|
228347
|
+
'name': obj.name,
|
|
228348
|
+
'needsSecret': obj.needsSecret,
|
|
228349
|
+
};
|
|
228350
|
+
// filter undefined values
|
|
228351
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : (Object.assign(Object.assign({}, r), { [i[0]]: i[1] })), {});
|
|
228352
|
+
}
|
|
228353
|
+
exports.toJson_FirestartrGithubGroupSpecParentTeamRef = toJson_FirestartrGithubGroupSpecParentTeamRef;
|
|
228320
228354
|
/**
|
|
228321
228355
|
* Converts an object of type 'FirestartrGithubGroupSpecMembersRef' to JSON representation.
|
|
228322
228356
|
*/
|
|
@@ -230063,7 +230097,7 @@ function toJson_TfResultSpecReference(obj) {
|
|
|
230063
230097
|
}
|
|
230064
230098
|
exports.toJson_TfResultSpecReference = toJson_TfResultSpecReference;
|
|
230065
230099
|
/* eslint-enable max-len, quote-props */
|
|
230066
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXN0YXJ0ci5kZXYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9pbXBvcnRzL2ZpcmVzdGFydHIuZGV2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUJBQXFCO0FBQ3JCLGlDQUF1RTtBQUl2RTs7OztHQUlHO0FBQ0gsTUFBYSxxQkFBc0IsU0FBUSxpQkFBUztJQXVCbEQ7Ozs7O09BS0c7SUFDSCxZQUFtQixLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUFvQyxFQUFFO1FBQ3JGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxrQ0FDVixxQkFBcUIsQ0FBQyxHQUFHLEdBQ3pCLEtBQUssRUFDUixDQUFDO0lBQ0wsQ0FBQztJQXpCRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQW9DLEVBQUU7UUFDM0QsdUNBQ0sscUJBQXFCLENBQUMsR0FBRyxHQUN6QixpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsRUFDM0M7SUFDSixDQUFDO0lBZUQ7O09BRUc7SUFDSSxNQUFNO1FBQ1gsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRWhDLHVDQUNLLHFCQUFxQixDQUFDLEdBQUcsR0FDekIsaUNBQWlDLENBQUMsUUFBUSxDQUFDLEVBQzlDO0lBQ0osQ0FBQzs7QUE5Q0gsc0RBK0NDO0FBOUNDOztHQUVHO0FBQ29CLHlCQUFHLEdBQXFCO0lBQzdDLFVBQVUsRUFBRSxtQkFBbUI7SUFDL0IsSUFBSSxFQUFFLHVCQUF1QjtDQUM5QixDQUFBO0FBNERIOztHQUVHO0FBQ0gseUNBQXlDO0FBQ3pDLFNBQWdCLGlDQUFpQyxDQUFDLEdBQTJDO0lBQzNGLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0tBQUU7SUFDNUMsTUFBTSxNQUFNLEdBQUc7UUFDYixVQUFVLEVBQUUsR0FBRyxDQUFDLFFBQVE7UUFDeEIsTUFBTSxFQUFFLGdDQUFnQyxDQUFDLEdBQUcs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SUFDMUIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlDQUFNLENBQUMsS0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFHLENBQUM7QUFSRCxvRUFRQztBQUNELHdDQUF3QyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGdlbmVyYXRlZCBieSBjZGs4c1xuaW1wb3J0IHsgQXBpT2JqZWN0LCBBcGlPYmplY3RNZXRhZGF0YSwgR3JvdXBWZXJzaW9uS2luZCB9IGZyb20gJ2NkazhzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgR2l0SHViIGdyb3Vwc1xuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwXG4gKi9cbmV4cG9ydCBjbGFzcyBGaXJlc3RhcnRyR2l0aHViR3JvdXAgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJGaXJlc3RhcnRyR2l0aHViR3JvdXBcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2ZpcmVzdGFydHIuZGV2L3YxJyxcbiAgICBraW5kOiAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJGaXJlc3RhcnRyR2l0aHViR3JvdXBcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJHaXRodWJHcm91cC5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwUHJvcHMocHJvcHMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViR3JvdXAuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHN1cGVyLnRvSnNvbigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJHaXRodWJHcm91cC5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwUHJvcHMocmVzb2x2ZWQpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJlc291cmNlIHRvIGhhbmRsZSBHaXRIdWIgZ3JvdXBzXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBBcGlPYmplY3RNZXRhZGF0YTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXAjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWM7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwUHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFByb3BzKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwUHJvcHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtZXRhZGF0YSc6IG9iai5tZXRhZGF0YSxcbiAgICAnc3BlYyc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjKG9iai5zcGVjKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyNvcmdcbiAgICovXG4gIHJlYWRvbmx5IG9yZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMjcHJpdmFjeVxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmFjeTogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1ByaXZhY3k7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyNkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyNtZW1iZXJzXG4gICAqL1xuICByZWFkb25seSBtZW1iZXJzOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVyc1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMjY29udGV4dFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dDogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyNmaXJlc3RhcnRyXG4gICAqL1xuICByZWFkb25seSBmaXJlc3RhcnRyOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjRmlyZXN0YXJ0cjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjI3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gICAqL1xuICByZWFkb25seSB3cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZjogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnb3JnJzogb2JqLm9yZyxcbiAgICAncHJpdmFjeSc6IG9iai5wcml2YWN5LFxuICAgICdkZXNjcmlwdGlvbic6IG9iai5kZXNjcmlwdGlvbixcbiAgICAnbWVtYmVycyc6IG9iai5tZW1iZXJzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnMoeSkpLFxuICAgICdjb250ZXh0JzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0KG9iai5jb250ZXh0KSxcbiAgICAnZmlyZXN0YXJ0cic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjRmlyZXN0YXJ0cihvYmouZmlyZXN0YXJ0ciksXG4gICAgJ3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZihvYmoud3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1ByaXZhY3lcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1ByaXZhY3kge1xuICAvKiogY2xvc2VkICovXG4gIENMT1NFRCA9IFwiY2xvc2VkXCIsXG4gIC8qKiBzZWNyZXQgKi9cbiAgU0VDUkVUID0gXCJzZWNyZXRcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVycyNyZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlZjogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHQjYmFja2VuZFxuICAgKi9cbiAgcmVhZG9ubHkgYmFja2VuZDogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0I3Byb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcjogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlcjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHQob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2JhY2tlbmQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kKG9iai5iYWNrZW5kKSxcbiAgICAncHJvdmlkZXInOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlcihvYmoucHJvdmlkZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0ZpcmVzdGFydHJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjRmlyZXN0YXJ0ciB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNGaXJlc3RhcnRyI3RmU3RhdGVLZXlcbiAgICovXG4gIHJlYWRvbmx5IHRmU3RhdGVLZXk/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0ZpcmVzdGFydHInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNGaXJlc3RhcnRyKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0ZpcmVzdGFydHIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICd0ZlN0YXRlS2V5Jzogb2JqLnRmU3RhdGVLZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjb3V0cHV0c1xuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0cz86IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZihvYmo6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnb3V0cHV0cyc6IG9iai5vdXRwdXRzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVyc1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVyc1JlZiNuZWVkc1NlY3JldFxuICAgKi9cbiAgcmVhZG9ubHkgbmVlZHNTZWNyZXQ6IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnbmVlZHNTZWNyZXQnOiBvYmoubmVlZHNTZWNyZXQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmQge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmQjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZChvYmo6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlciB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXIjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXJSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlcihvYmo6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlclJlZihvYmoucmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXJSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlclJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlclJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kIHtcbiAgLyoqIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZyAqL1xuICBGSVJFU1RBUlRSX1BST1ZJREVSX0NPTkZJRyA9IFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgR2l0SHViIG1lbWJlcnNoaXBzIHRvIGEgR2l0SHViIG9yZ2FuaXphdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwXG4gKi9cbmV4cG9ydCBjbGFzcyBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcIkZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdmaXJlc3RhcnRyLmRldi92MScsXG4gICAga2luZDogJ0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFByb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXAuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwUHJvcHMocHJvcHMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLkZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcC5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBQcm9wcyhyZXNvbHZlZCksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEEgcmVzb3VyY2UgdG8gaGFuZGxlIEdpdEh1YiBtZW1iZXJzaGlwcyB0byBhIEdpdEh1YiBvcmdhbml6YXRpb24uXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE6IEFwaU9iamVjdE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlYztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFByb3BzKG9iajogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBQcm9wcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ21ldGFkYXRhJzogb2JqLm1ldGFkYXRhLFxuICAgICdzcGVjJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlYyhvYmouc3BlYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMjb3JnXG4gICAqL1xuICByZWFkb25seSBvcmc6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMjcm9sZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZTogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjUm9sZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMjY29udGV4dFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dDogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMjZmlyZXN0YXJ0clxuICAgKi9cbiAgcmVhZG9ubHkgZmlyZXN0YXJ0cjogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjRmlyZXN0YXJ0cjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMjd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZcbiAgICovXG4gIHJlYWRvbmx5IHdyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmPzogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdvcmcnOiBvYmoub3JnLFxuICAgICdyb2xlJzogb2JqLnJvbGUsXG4gICAgJ2NvbnRleHQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dChvYmouY29udGV4dCksXG4gICAgJ2ZpcmVzdGFydHInOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjRmlyZXN0YXJ0cihvYmouZmlyZXN0YXJ0ciksXG4gICAgJ3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iai53cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNSb2xlXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1JvbGUge1xuICAvKiogbWVtYmVyICovXG4gIE1FTUJFUiA9IFwibWVtYmVyXCIsXG4gIC8qKiBhZG1pbiAqL1xuICBBRE1JTiA9IFwiYWRtaW5cIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dCNiYWNrZW5kXG4gICAqL1xuICByZWFkb25seSBiYWNrZW5kOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0I3Byb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcjogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHQob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYmFja2VuZCc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZChvYmouYmFja2VuZCksXG4gICAgJ3Byb3ZpZGVyJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlcihvYmoucHJvdmlkZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjRmlyZXN0YXJ0clxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0ZpcmVzdGFydHIge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNGaXJlc3RhcnRyI3RmU3RhdGVLZXlcbiAgICovXG4gIHJlYWRvbmx5IHRmU3RhdGVLZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNGaXJlc3RhcnRyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNGaXJlc3RhcnRyKG9iajogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjRmlyZXN0YXJ0ciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3RmU3RhdGVLZXknOiBvYmoudGZTdGF0ZUtleSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjb3V0cHV0c1xuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0czogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ291dHB1dHMnOiBvYmoub3V0cHV0cz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmQjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZChvYmo6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXJSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXIob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmRSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZFJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZFJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmRSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmRSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXJSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXJSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXJSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZFJlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnICovXG4gIEZJUkVTVEFSVFJfUFJPVklERVJfQ09ORklHID0gXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgdGhlIEdpdEh1YiByZXBvcyBvZiBhbiBvcmdhbml6YXRpb24uXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVxuICovXG5leHBvcnQgY2xhc3MgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnkgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnZmlyZXN0YXJ0ci5kZXYvdjEnLFxuICAgIGtpbmQ6ICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeScsXG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlQcm9wcyA9IHt9KTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnkuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMocHJvcHMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4uRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnkuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHN1cGVyLnRvSnNvbigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5LkdWSyxcbiAgICAgIC4uLnRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVByb3BzKHJlc29sdmVkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgdGhlIEdpdEh1YiByZXBvcyBvZiBhbiBvcmdhbml6YXRpb24uXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeSNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBBcGlPYmplY3RNZXRhZGF0YTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeSNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVByb3BzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbWV0YWRhdGEnOiBvYmoubWV0YWRhdGEsXG4gICAgJ3NwZWMnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjKG9iai5zcGVjKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNvcmdcbiAgICovXG4gIHJlYWRvbmx5IG9yZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNjb250ZXh0XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNmaXJlc3RhcnRyXG4gICAqL1xuICByZWFkb25seSBmaXJlc3RhcnRyOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNyZXBvXG4gICAqL1xuICByZWFkb25seSByZXBvOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNhY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBhY3Rpb25zOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNwYWdlc1xuICAgKi9cbiAgcmVhZG9ubHkgcGFnZXM/OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlcztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWMjcGVybWlzc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNicmFuY2hQcm90ZWN0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoUHJvdGVjdGlvbnM6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zW107XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjI3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gICAqL1xuICByZWFkb25seSB3cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZjogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdvcmcnOiBvYmoub3JnLFxuICAgICdjb250ZXh0JzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHQob2JqLmNvbnRleHQpLFxuICAgICdmaXJlc3RhcnRyJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHIob2JqLmZpcmVzdGFydHIpLFxuICAgICdyZXBvJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8ob2JqLnJlcG8pLFxuICAgICdhY3Rpb25zJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnMob2JqLmFjdGlvbnMpLFxuICAgICdwYWdlcyc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlcyhvYmoucGFnZXMpLFxuICAgICdwZXJtaXNzaW9ucyc6IG9iai5wZXJtaXNzaW9ucz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zKHkpKSxcbiAgICAnYnJhbmNoUHJvdGVjdGlvbnMnOiBvYmouYnJhbmNoUHJvdGVjdGlvbnM/Lm1hcCh5ID0+IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyh5KSksXG4gICAgJ3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iai53cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHQjYmFja2VuZFxuICAgKi9cbiAgcmVhZG9ubHkgYmFja2VuZDogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dCNwcm92aWRlclxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXI6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlcjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0KG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2JhY2tlbmQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmQob2JqLmJhY2tlbmQpLFxuICAgICdwcm92aWRlcic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXIob2JqLnByb3ZpZGVyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0ciN0ZlN0YXRlS2V5XG4gICAqL1xuICByZWFkb25seSB0ZlN0YXRlS2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0ciN0ZWNobm9sb2d5XG4gICAqL1xuICByZWFkb25seSB0ZWNobm9sb2d5OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyVGVjaG5vbG9neTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0ciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3RmU3RhdGVLZXknOiBvYmoudGZTdGF0ZUtleSxcbiAgICAndGVjaG5vbG9neSc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyVGVjaG5vbG9neShvYmoudGVjaG5vbG9neSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jYWxsb3dNZXJnZUNvbW1pdFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dNZXJnZUNvbW1pdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyNhbGxvd1NxdWFzaE1lcmdlXG4gICAqL1xuICByZWFkb25seSBhbGxvd1NxdWFzaE1lcmdlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2FsbG93UmViYXNlTWVyZ2VcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93UmViYXNlTWVyZ2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jYWxsb3dBdXRvTWVyZ2VcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93QXV0b01lcmdlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2RlbGV0ZUJyYW5jaE9uTWVyZ2VcbiAgICovXG4gIHJlYWRvbmx5IGRlbGV0ZUJyYW5jaE9uTWVyZ2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jYXV0b0luaXRcbiAgICovXG4gIHJlYWRvbmx5IGF1dG9Jbml0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2FyY2hpdmVPbkRlc3Ryb3lcbiAgICovXG4gIHJlYWRvbmx5IGFyY2hpdmVPbkRlc3Ryb3k/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jYWxsb3dVcGRhdGVCcmFuY2hcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93VXBkYXRlQnJhbmNoPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2hhc0lzc3Vlc1xuICAgKi9cbiAgcmVhZG9ubHkgaGFzSXNzdWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2hhc1dpa2lcbiAgICovXG4gIHJlYWRvbmx5IGhhc1dpa2k/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jcGFnZXNcbiAgICovXG4gIHJlYWRvbmx5IHBhZ2VzPzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jdmlzaWJpbGl0eVxuICAgKi9cbiAgcmVhZG9ubHkgdmlzaWJpbGl0eTogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwb1Zpc2liaWxpdHk7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyNkZWZhdWx0QnJhbmNoXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0QnJhbmNoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyNjb2Rlb3duZXJzXG4gICAqL1xuICByZWFkb25seSBjb2Rlb3duZXJzPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8ob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZGVzY3JpcHRpb24nOiBvYmouZGVzY3JpcHRpb24sXG4gICAgJ2FsbG93TWVyZ2VDb21taXQnOiBvYmouYWxsb3dNZXJnZUNvbW1pdCxcbiAgICAnYWxsb3dTcXVhc2hNZXJnZSc6IG9iai5hbGxvd1NxdWFzaE1lcmdlLFxuICAgICdhbGxvd1JlYmFzZU1lcmdlJzogb2JqLmFsbG93UmViYXNlTWVyZ2UsXG4gICAgJ2FsbG93QXV0b01lcmdlJzogb2JqLmFsbG93QXV0b01lcmdlLFxuICAgICdkZWxldGVCcmFuY2hPbk1lcmdlJzogb2JqLmRlbGV0ZUJyYW5jaE9uTWVyZ2UsXG4gICAgJ2F1dG9Jbml0Jzogb2JqLmF1dG9Jbml0LFxuICAgICdhcmNoaXZlT25EZXN0cm95Jzogb2JqLmFyY2hpdmVPbkRlc3Ryb3ksXG4gICAgJ2FsbG93VXBkYXRlQnJhbmNoJzogb2JqLmFsbG93VXBkYXRlQnJhbmNoLFxuICAgICdoYXNJc3N1ZXMnOiBvYmouaGFzSXNzdWVzLFxuICAgICdoYXNXaWtpJzogb2JqLmhhc1dpa2ksXG4gICAgJ3BhZ2VzJzogb2JqLnBhZ2VzLFxuICAgICd2aXNpYmlsaXR5Jzogb2JqLnZpc2liaWxpdHksXG4gICAgJ2RlZmF1bHRCcmFuY2gnOiBvYmouZGVmYXVsdEJyYW5jaCxcbiAgICAnY29kZW93bmVycyc6IG9iai5jb2Rlb3duZXJzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQWN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zI29pZGNcbiAgICovXG4gIHJlYWRvbmx5IG9pZGM6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnNPaWRjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnb2lkYyc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zT2lkYyhvYmoub2lkYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXMjY25hbWVcbiAgICovXG4gIHJlYWRvbmx5IGNuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzI3NvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlPzogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXNTb3VyY2U7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdjbmFtZSc6IG9iai5jbmFtZSxcbiAgICAnc291cmNlJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzU291cmNlKG9iai5zb3VyY2UpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9ucyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zI3JvbGVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnMjY29sbGFib3JhdG9yXG4gICAqL1xuICByZWFkb25seSBjb2xsYWJvcmF0b3I/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnMjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY/OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1JlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9ucycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9ucyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JvbGUnOiBvYmoucm9sZSxcbiAgICAnY29sbGFib3JhdG9yJzogb2JqLmNvbGxhYm9yYXRvcixcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zI2JyYW5jaFxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnMjc3RhdHVzQ2hlY2tzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXNDaGVja3M/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyNyZXF1aXJlZFJldmlld2Vyc0NvdW50XG4gICAqL1xuICByZWFkb25seSByZXF1aXJlZFJldmlld2Vyc0NvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zI3JlcXVpcmVkQ29kZW93bmVyc1Jldmlld2Vyc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWRDb2Rlb3duZXJzUmV2aWV3ZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyNlbmZvcmNlQWRtaW5zXG4gICAqL1xuICByZWFkb25seSBlbmZvcmNlQWRtaW5zPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyNyZXF1aXJlU2lnbmVkQ29tbWl0c1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZVNpZ25lZENvbW1pdHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zI3JlcXVpcmVDb252ZXJzYXRpb25SZXNvbHV0aW9uXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlQ29udmVyc2F0aW9uUmVzb2x1dGlvbj86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdicmFuY2gnOiBvYmouYnJhbmNoLFxuICAgICdzdGF0dXNDaGVja3MnOiBvYmouc3RhdHVzQ2hlY2tzPy5tYXAoeSA9PiB5KSxcbiAgICAncmVxdWlyZWRSZXZpZXdlcnNDb3VudCc6IG9iai5yZXF1aXJlZFJldmlld2Vyc0NvdW50LFxuICAgICdyZXF1aXJlZENvZGVvd25lcnNSZXZpZXdlcnMnOiBvYmoucmVxdWlyZWRDb2Rlb3duZXJzUmV2aWV3ZXJzLFxuICAgICdlbmZvcmNlQWRtaW5zJzogb2JqLmVuZm9yY2VBZG1pbnMsXG4gICAgJ3JlcXVpcmVTaWduZWRDb21taXRzJzogb2JqLnJlcXVpcmVTaWduZWRDb21taXRzLFxuICAgICdyZXF1aXJlQ29udmVyc2F0aW9uUmVzb2x1dGlvbic6IG9iai5yZXF1aXJlQ29udmVyc2F0aW9uUmVzb2x1dGlvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjb3V0cHV0c1xuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0czogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ291dHB1dHMnOiBvYmoub3V0cHV0cz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmQjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZChvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXJSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXIob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0clRlY2hub2xvZ3lcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyVGVjaG5vbG9neSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHJUZWNobm9sb2d5I3N0YWNrXG4gICAqL1xuICByZWFkb25seSBzdGFjaz86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyVGVjaG5vbG9neSN2ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHJUZWNobm9sb2d5JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyVGVjaG5vbG9neShvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHJUZWNobm9sb2d5IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnc3RhY2snOiBvYmouc3RhY2ssXG4gICAgJ3ZlcnNpb24nOiBvYmoudmVyc2lvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG9WaXNpYmlsaXR5XG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG9WaXNpYmlsaXR5IHtcbiAgLyoqIHByaXZhdGUgKi9cbiAgUFJJVkFURSA9IFwicHJpdmF0ZVwiLFxuICAvKiogcHVibGljICovXG4gIFBVQkxJQyA9IFwicHVibGljXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zT2lkY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnNPaWRjIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQWN0aW9uc09pZGMjdXNlRGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgdXNlRGVmYXVsdDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zT2lkYyNpbmNsdWRlQ2xhaW1LZXlzXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlQ2xhaW1LZXlzOiBzdHJpbmdbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zT2lkYycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQWN0aW9uc09pZGMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zT2lkYyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3VzZURlZmF1bHQnOiBvYmoudXNlRGVmYXVsdCxcbiAgICAnaW5jbHVkZUNsYWltS2V5cyc6IG9iai5pbmNsdWRlQ2xhaW1LZXlzPy5tYXAoeSA9PiB5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXNTb3VyY2Uge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlc1NvdXJjZSNicmFuY2hcbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlc1NvdXJjZSNwYXRoXG4gICAqL1xuICByZWFkb25seSBwYXRoPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzU291cmNlJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlc1NvdXJjZShvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzU291cmNlIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYnJhbmNoJzogb2JqLmJyYW5jaCxcbiAgICAncGF0aCc6IG9iai5wYXRoLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnNSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1JlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnNSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1JlZiNuZWVkc1NlY3JldFxuICAgKi9cbiAgcmVhZG9ubHkgbmVlZHNTZWNyZXQ/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1JlZihvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2luZCc6IG9iai5raW5kLFxuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ25lZWRzU2VjcmV0Jzogb2JqLm5lZWRzU2VjcmV0LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZFJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZFJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXJSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXJSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXJSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZFJlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnICovXG4gIEZJUkVTVEFSVFJfUFJPVklERVJfQ09ORklHID0gXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgZmVhdHVyZXMgZm9yIEdpdEh1YiByZXBvcy5cbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVxuICovXG5leHBvcnQgY2xhc3MgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdmaXJlc3RhcnRyLmRldi92MScsXG4gICAga2luZDogJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZScsXG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmUuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVByb3BzKHByb3BzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcIkZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4uRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmUuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVByb3BzKHJlc29sdmVkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgZmVhdHVyZXMgZm9yIEdpdEh1YiByZXBvcy5cbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVByb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IEFwaU9iamVjdE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZSNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjPzogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlYztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVQcm9wcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlUHJvcHMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVQcm9wcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ21ldGFkYXRhJzogb2JqLm1ldGFkYXRhLFxuICAgICdzcGVjJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMob2JqLnNwZWMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjI2ZpcmVzdGFydHJcbiAgICovXG4gIHJlYWRvbmx5IGZpcmVzdGFydHI/OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlyZXN0YXJ0cjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjI3R5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjI29yZ1xuICAgKi9cbiAgcmVhZG9ubHkgb3JnOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlYyNjb250ZXh0XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjI3ZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjI3JlcG9zaXRvcnlUYXJnZXRcbiAgICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcnlUYXJnZXQ6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMjZmlsZXNcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVzOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlsZXNbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlYyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ZpcmVzdGFydHInOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpcmVzdGFydHIob2JqLmZpcmVzdGFydHIpLFxuICAgICd0eXBlJzogb2JqLnR5cGUsXG4gICAgJ29yZyc6IG9iai5vcmcsXG4gICAgJ2NvbnRleHQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHQob2JqLmNvbnRleHQpLFxuICAgICd2ZXJzaW9uJzogb2JqLnZlcnNpb24sXG4gICAgJ3JlcG9zaXRvcnlUYXJnZXQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXQob2JqLnJlcG9zaXRvcnlUYXJnZXQpLFxuICAgICdmaWxlcyc6IG9iai5maWxlcz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaWxlcyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlyZXN0YXJ0clxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaXJlc3RhcnRyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpcmVzdGFydHIjdGZTdGF0ZUtleVxuICAgKi9cbiAgcmVhZG9ubHkgdGZTdGF0ZUtleTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaXJlc3RhcnRyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlyZXN0YXJ0cihvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaXJlc3RhcnRyIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAndGZTdGF0ZUtleSc6IG9iai50ZlN0YXRlS2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0I2JhY2tlbmRcbiAgICovXG4gIHJlYWRvbmx5IGJhY2tlbmQ6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dCNwcm92aWRlclxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXI6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXI7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0KG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdiYWNrZW5kJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZChvYmouYmFja2VuZCksXG4gICAgJ3Byb3ZpZGVyJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXIob2JqLnByb3ZpZGVyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXQge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldCNyZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlZjogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXRSZWY7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXQjYnJhbmNoXG4gICAqL1xuICByZWFkb25seSBicmFuY2g6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXQob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldFJlZihvYmoucmVmKSxcbiAgICAnYnJhbmNoJzogb2JqLmJyYW5jaCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaWxlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaWxlcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaWxlcyNwYXRoXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpbGVzI3VzZXJNYW5hZ2VkXG4gICAqL1xuICByZWFkb25seSB1c2VyTWFuYWdlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlsZXMjY29udGVudFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpbGVzKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpbGVzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncGF0aCc6IG9iai5wYXRoLFxuICAgICd1c2VyTWFuYWdlZCc6IG9iai51c2VyTWFuYWdlZCxcbiAgICAnY29udGVudCc6IG9iai5jb250ZW50LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmQob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXIge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXIob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXJSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldFJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0UmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXRSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0UmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldFJlZiNuZWVkc1NlY3JldFxuICAgKi9cbiAgcmVhZG9ubHkgbmVlZHNTZWNyZXQ6IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXRSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0UmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXRSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnbmVlZHNTZWNyZXQnOiBvYmoubmVlZHNTZWNyZXQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZFJlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2luZCc6IG9iai5raW5kLFxuICAgICduYW1lJzogb2JqLm5hbWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXJSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZktpbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZihvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXJSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZFJlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnICovXG4gIEZJUkVTVEFSVFJfUFJPVklERVJfQ09ORklHID0gXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIixcbn1cblxuXG4vKipcbiAqIEEgcmVzb3VyY2UgdG8gaGFuZGxlIGJhY2tlbmQgYW5kIHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcbiAqL1xuZXhwb3J0IGNsYXNzIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZyBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnZmlyZXN0YXJ0ci5kZXYvdjEnLFxuICAgIGtpbmQ6ICdGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcnLFxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJQcm92aWRlckNvbmZpZy5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnUHJvcHMocHJvcHMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4uRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyUHJvdmlkZXJDb25maWcuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1Byb3BzKHJlc29sdmVkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgYmFja2VuZCBhbmQgcHJvdmlkZXIgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1Byb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YTogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM6IEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWM7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnUHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1Byb3BzKG9iajogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnUHJvcHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtZXRhZGF0YSc6IG9iai5tZXRhZGF0YSxcbiAgICAnc3BlYyc6IHRvSnNvbl9GaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjKG9iai5zcGVjKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYyN0eXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYyNzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMjdmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMjY29uZmlnXG4gICAqL1xuICByZWFkb25seSBjb25maWc6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjI2lubGluZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5saW5lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMjZW52XG4gICAqL1xuICByZWFkb25seSBlbnY/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYyNzZWNyZXRzXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRzPzogeyBba2V5OiBzdHJpbmddOiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0cyB9O1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMob2JqOiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAndHlwZSc6IG9iai50eXBlLFxuICAgICdzb3VyY2UnOiBvYmouc291cmNlLFxuICAgICd2ZXJzaW9uJzogb2JqLnZlcnNpb24sXG4gICAgJ2NvbmZpZyc6IG9iai5jb25maWcsXG4gICAgJ2lubGluZSc6IG9iai5pbmxpbmUsXG4gICAgJ2Vudic6IG9iai5lbnYsXG4gICAgJ3NlY3JldHMnOiAoKG9iai5zZWNyZXRzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouc2VjcmV0cykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IHRvSnNvbl9GaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0cyhpWzFdKSB9KSwge30pKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0cyNzZWNyZXRSZWZcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldFJlZjogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHNTZWNyZXRSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzKG9iajogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdzZWNyZXRSZWYnOiB0b0pzb25fRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHNTZWNyZXRSZWYob2JqLnNlY3JldFJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0c1NlY3JldFJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzU2VjcmV0UmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHNTZWNyZXRSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzU2VjcmV0UmVmI25hbWVzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHNTZWNyZXRSZWYja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0c1NlY3JldFJlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHNTZWNyZXRSZWYob2JqOiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0c1NlY3JldFJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnbmFtZXNwYWNlJzogb2JqLm5hbWVzcGFjZSxcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuXG4vKipcbiAqIEEgd29ya3NwYWNlIHRvIGhhbmRsZSBUZXJyYWZvcm0gY29kZVxuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVxuICovXG5leHBvcnQgY2xhc3MgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcIkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2ZpcmVzdGFydHIuZGV2L3YxJyxcbiAgICBraW5kOiAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZScsXG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlLkdWSyxcbiAgICAgIC4uLnRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUHJvcHMocHJvcHMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlLkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlLkdWSyxcbiAgICAgIC4uLnRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUHJvcHMocmVzb2x2ZWQpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBIHdvcmtzcGFjZSB0byBoYW5kbGUgVGVycmFmb3JtIGNvZGVcbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YTogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZSNzcGVjXG4gICAqL1xuICByZWFkb25seSBzcGVjOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlYztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQcm9wcyhvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQcm9wcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ21ldGFkYXRhJzogb2JqLm1ldGFkYXRhLFxuICAgICdzcGVjJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjKG9iai5zcGVjKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlYyNjb250ZXh0XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjI2ZpcmVzdGFydHJcbiAgICovXG4gIHJlYWRvbmx5IGZpcmVzdGFydHI6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjRmlyZXN0YXJ0cjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlYyNtb2R1bGVcbiAgICovXG4gIHJlYWRvbmx5IG1vZHVsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlYyNzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZT86IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjU291cmNlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjI3ZhbHVlc1xuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjI3JlZmVyZW5jZXNcbiAgICovXG4gIHJlYWRvbmx5IHJlZmVyZW5jZXM/OiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlYyN3cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZlxuICAgKi9cbiAgcmVhZG9ubHkgd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY/OiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlYyhvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnY29udGV4dCc6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHQob2JqLmNvbnRleHQpLFxuICAgICdmaXJlc3RhcnRyJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjRmlyZXN0YXJ0cihvYmouZmlyZXN0YXJ0ciksXG4gICAgJ21vZHVsZSc6IG9iai5tb2R1bGUsXG4gICAgJ3NvdXJjZSc6IG9iai5zb3VyY2UsXG4gICAgJ3ZhbHVlcyc6IG9iai52YWx1ZXMsXG4gICAgJ3JlZmVyZW5jZXMnOiBvYmoucmVmZXJlbmNlcz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlcyh5KSksXG4gICAgJ3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYob2JqLndyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dCNiYWNrZW5kXG4gICAqL1xuICByZWFkb25seSBiYWNrZW5kOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dCNwcm92aWRlcnNcbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyczogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHQob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdiYWNrZW5kJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmQob2JqLmJhY2tlbmQpLFxuICAgICdwcm92aWRlcnMnOiBvYmoucHJvdmlkZXJzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjRmlyZXN0YXJ0clxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjRmlyZXN0YXJ0ciB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjRmlyZXN0YXJ0ciN0ZlN0YXRlS2V5XG4gICAqL1xuICByZWFkb25seSB0ZlN0YXRlS2V5OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNGaXJlc3RhcnRyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0ZpcmVzdGFydHIob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0ZpcmVzdGFydHIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICd0ZlN0YXRlS2V5Jzogb2JqLnRmU3RhdGVLZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1NvdXJjZVxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1NvdXJjZSB7XG4gIC8qKiBSZW1vdGUgKi9cbiAgUkVNT1RFID0gXCJSZW1vdGVcIixcbiAgLyoqIElubGluZSAqL1xuICBJTkxJTkUgPSBcIklubGluZVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmPzogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmI291dHB1dHNcbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dHM6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZihvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ291dHB1dHMnOiBvYmoub3V0cHV0cz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZCNyZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlZjogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnMob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlc1JlZktpbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWYja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlc1JlZihvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlc1JlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICdrZXknOiBvYmoua2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2luZCc6IG9iai5raW5kLFxuICAgICduYW1lJzogb2JqLm5hbWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVyc1JlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzUmVmKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2luZCc6IG9iai5raW5kLFxuICAgICduYW1lJzogb2JqLm5hbWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWZLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlc1JlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZSAqL1xuICBGSVJFU1RBUlRSX1RFUlJBRk9STV9XT1JLU1BBQ0UgPSBcIkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kIHtcbiAgLyoqIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZyAqL1xuICBGSVJFU1RBUlRSX1BST1ZJREVSX0NPTkZJRyA9IFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWZLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVyc1JlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnICovXG4gIEZJUkVTVEFSVFJfUFJPVklERVJfQ09ORklHID0gXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIixcbn1cblxuXG4vKipcbiAqIEEgd29ya3NwYWNlIHRvIGhhbmRsZSBUZXJyYWZvcm0gY29kZVxuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5cbiAqL1xuZXhwb3J0IGNsYXNzIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5cIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2ZpcmVzdGFydHIuZGV2L3YxJyxcbiAgICBraW5kOiAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW4nLFxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcIkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhbi5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5Qcm9wcyhwcm9wcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4uRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW4uR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHN1cGVyLnRvSnNvbigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuLkdWSyxcbiAgICAgIC4uLnRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblByb3BzKHJlc29sdmVkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSB3b3Jrc3BhY2UgdG8gaGFuZGxlIFRlcnJhZm9ybSBjb2RlXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhbiNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE6IEFwaU9iamVjdE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlYztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblByb3BzKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5Qcm9wcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ21ldGFkYXRhJzogb2JqLm1ldGFkYXRhLFxuICAgICdzcGVjJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlYyhvYmouc3BlYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMjY29udGV4dFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dD86IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjI2ZpcmVzdGFydHJcbiAgICovXG4gIHJlYWRvbmx5IGZpcmVzdGFydHI6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0ZpcmVzdGFydHI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjI21vZHVsZVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlYyNzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZT86IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1NvdXJjZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMjdmFsdWVzXG4gICAqL1xuICByZWFkb25seSB2YWx1ZXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjI3JlZmVyZW5jZXNcbiAgICovXG4gIHJlYWRvbmx5IHJlZmVyZW5jZXM/OiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzW107XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjI3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gICAqL1xuICByZWFkb25seSB3cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZj86IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlYycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnY29udGV4dCc6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0KG9iai5jb250ZXh0KSxcbiAgICAnZmlyZXN0YXJ0cic6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNGaXJlc3RhcnRyKG9iai5maXJlc3RhcnRyKSxcbiAgICAnbW9kdWxlJzogb2JqLm1vZHVsZSxcbiAgICAnc291cmNlJzogb2JqLnNvdXJjZSxcbiAgICAndmFsdWVzJzogb2JqLnZhbHVlcyxcbiAgICAncmVmZXJlbmNlcyc6IG9iai5yZWZlcmVuY2VzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlcyh5KSksXG4gICAgJ3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iai53cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHQjYmFja2VuZFxuICAgKi9cbiAgcmVhZG9ubHkgYmFja2VuZDogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dCNwcm92aWRlcnNcbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyczogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVyc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHQob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYmFja2VuZCc6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZChvYmouYmFja2VuZCksXG4gICAgJ3Byb3ZpZGVycyc6IG9iai5wcm92aWRlcnM/Lm1hcCh5ID0+IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0ZpcmVzdGFydHJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNGaXJlc3RhcnRyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjRmlyZXN0YXJ0ciN0ZlN0YXRlS2V5XG4gICAqL1xuICByZWFkb25seSB0ZlN0YXRlS2V5OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjRmlyZXN0YXJ0cicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjRmlyZXN0YXJ0cihvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0ZpcmVzdGFydHIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICd0ZlN0YXRlS2V5Jzogb2JqLnRmU3RhdGVLZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNTb3VyY2VcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjU291cmNlIHtcbiAgLyoqIFJlbW90ZSAqL1xuICBSRU1PVEUgPSBcIlJlbW90ZVwiLFxuICAvKiogSW5saW5lICovXG4gIElOTElORSA9IFwiSW5saW5lXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXMjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmPzogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmI291dHB1dHNcbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dHM6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0c1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZihvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICdvdXRwdXRzJzogb2JqLm91dHB1dHM/Lm1hcCh5ID0+IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmQob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFJlZihvYmoucmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVycyNyZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlZjogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVyc1JlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVycyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNSZWYja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzUmVmKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICdrZXknOiBvYmoua2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmRSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmRSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmRSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVyc1JlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVyc1JlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZSAqL1xuICBGSVJFU1RBUlRSX1RFUlJBRk9STV9XT1JLU1BBQ0UgPSBcIkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFJlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnICovXG4gIEZJUkVTVEFSVFJfUFJPVklERVJfQ09ORklHID0gXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWZLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWZLaW5kIHtcbiAgLyoqIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZyAqL1xuICBGSVJFU1RBUlRSX1BST1ZJREVSX0NPTkZJRyA9IFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIsXG59XG5cblxuLyoqXG4gKiBBIHJlc291cmNlIHRvIGhhbmRsZSBUZXJyYWZvcm0gcmVzdWx0cy5cbiAqXG4gKiBAc2NoZW1hIFRGUmVzdWx0XG4gKi9cbmV4cG9ydCBjbGFzcyBUZlJlc3VsdCBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcIlRGUmVzdWx0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdmaXJlc3RhcnRyLmRldi92MScsXG4gICAga2luZDogJ1RGUmVzdWx0JyxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJURlJlc3VsdFwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBUZlJlc3VsdFByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5UZlJlc3VsdC5HVkssXG4gICAgICAuLi50b0pzb25fVGZSZXN1bHRQcm9wcyhwcm9wcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJURlJlc3VsdFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVGZSZXN1bHRQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5UZlJlc3VsdC5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gS3ViZXJuZXRlcyBKU09OLlxuICAgKi9cbiAgcHVibGljIHRvSnNvbigpOiBhbnkge1xuICAgIGNvbnN0IHJlc29sdmVkID0gc3VwZXIudG9Kc29uKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uVGZSZXN1bHQuR1ZLLFxuICAgICAgLi4udG9Kc29uX1RmUmVzdWx0UHJvcHMocmVzb2x2ZWQpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJlc291cmNlIHRvIGhhbmRsZSBUZXJyYWZvcm0gcmVzdWx0cy5cbiAqXG4gKiBAc2NoZW1hIFRGUmVzdWx0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGZSZXN1bHRQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIFRGUmVzdWx0I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IEFwaU9iamVjdE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFRGUmVzdWx0I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBUZlJlc3VsdFNwZWM7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVGZSZXN1bHRQcm9wcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVGZSZXN1bHRQcm9wcyhvYmo6IFRmUmVzdWx0UHJvcHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtZXRhZGF0YSc6IG9iai5tZXRhZGF0YSxcbiAgICAnc3BlYyc6IHRvSnNvbl9UZlJlc3VsdFNwZWMob2JqLnNwZWMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgVGZSZXN1bHRTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGZSZXN1bHRTcGVjIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgVGZSZXN1bHRTcGVjI2FjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uPzogVGZSZXN1bHRTcGVjQWN0aW9uO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFRmUmVzdWx0U3BlYyNyZWZlcmVuY2VcbiAgICovXG4gIHJlYWRvbmx5IHJlZmVyZW5jZT86IFRmUmVzdWx0U3BlY1JlZmVyZW5jZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBUZlJlc3VsdFNwZWMjcmVzdWx0XG4gICAqL1xuICByZWFkb25seSByZXN1bHQ/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVGZSZXN1bHRTcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9UZlJlc3VsdFNwZWMob2JqOiBUZlJlc3VsdFNwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhY3Rpb24nOiBvYmouYWN0aW9uLFxuICAgICdyZWZlcmVuY2UnOiB0b0pzb25fVGZSZXN1bHRTcGVjUmVmZXJlbmNlKG9iai5yZWZlcmVuY2UpLFxuICAgICdyZXN1bHQnOiBvYmoucmVzdWx0LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgVGZSZXN1bHRTcGVjQWN0aW9uXG4gKi9cbmV4cG9ydCBlbnVtIFRmUmVzdWx0U3BlY0FjdGlvbiB7XG4gIC8qKiBpbml0ICovXG4gIElOSVQgPSBcImluaXRcIixcbiAgLyoqIHBsYW4gKi9cbiAgUExBTiA9IFwicGxhblwiLFxuICAvKiogYXBwbHkgKi9cbiAgQVBQTFkgPSBcImFwcGx5XCIsXG4gIC8qKiBkZXN0cm95ICovXG4gIERFU1RST1kgPSBcImRlc3Ryb3lcIixcbiAgLyoqIHN5bnRoICovXG4gIFNZTlRIID0gXCJzeW50aFwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgVGZSZXN1bHRTcGVjUmVmZXJlbmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGZSZXN1bHRTcGVjUmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgVGZSZXN1bHRTcGVjUmVmZXJlbmNlI3JlZktpbmRcbiAgICovXG4gIHJlYWRvbmx5IHJlZktpbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBUZlJlc3VsdFNwZWNSZWZlcmVuY2UjcmVmTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVmTmFtZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1RmUmVzdWx0U3BlY1JlZmVyZW5jZScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVGZSZXN1bHRTcGVjUmVmZXJlbmNlKG9iajogVGZSZXN1bHRTcGVjUmVmZXJlbmNlIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmS2luZCc6IG9iai5yZWZLaW5kLFxuICAgICdyZWZOYW1lJzogb2JqLnJlZk5hbWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbiJdfQ==
|
|
230100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXN0YXJ0ci5kZXYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9pbXBvcnRzL2ZpcmVzdGFydHIuZGV2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUJBQXFCO0FBQ3JCLGlDQUF1RTtBQUl2RTs7OztHQUlHO0FBQ0gsTUFBYSxxQkFBc0IsU0FBUSxpQkFBUztJQXVCbEQ7Ozs7O09BS0c7SUFDSCxZQUFtQixLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUFvQyxFQUFFO1FBQ3JGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxrQ0FDVixxQkFBcUIsQ0FBQyxHQUFHLEdBQ3pCLEtBQUssRUFDUixDQUFDO0lBQ0wsQ0FBQztJQXpCRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQW9DLEVBQUU7UUFDM0QsdUNBQ0sscUJBQXFCLENBQUMsR0FBRyxHQUN6QixpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsRUFDM0M7SUFDSixDQUFDO0lBZUQ7O09BRUc7SUFDSSxNQUFNO1FBQ1gsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRWhDLHVDQUNLLHFCQUFxQixDQUFDLEdBQUcsR0FDekIsaUNBQWlDLENBQUMsUUFBUSxDQUFDLEVBQzlDO0lBQ0osQ0FBQzs7QUE5Q0gsc0RBK0NDO0FBOUNDOztHQUVHO0FBQ29CLHlCQUFHLEdBQXFCO0lBQzdDLFVBQVUsRUFBRSxtQkFBbUI7SUFDL0IsSUFBSSxFQUFFLHVCQUF1QjtDQUM5QixDQUFBO0FBNERIOztHQUVHO0FBQ0gseUNBQXlDO0FBQ3pDLFNBQWdCLGlDQUFpQyxDQUFDLEdBQTJDO0lBQzNGLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0tBQUU7SUFDNUMsTUFBTSxNQUFNLEdBQUc7UUFDYixVQUFVLEVBQUUsR0FBRyxDQUFDLFFBQVE7UUFDeEIsTUFBTSxFQUFFLGdDQUFnQyxDQUFDLEdBQUcs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O0lBQ2pGLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0tBQUU7SUFDNUMsTUFBTSxNQUFNLEdBQUc7UUFDYixTQUFTLEVBQUUsR0FBRyxDQUFDLE9BQU87UUFDdEIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxPQUFPO0tBQ3ZCLENBQUM7SUFDRiwwQkFBMEI7SUFDMUIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlDQUFNLENBQUMsS0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFHLENBQUM7QUFSRCxvRUFRQztBQUNELHdDQUF3QyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGdlbmVyYXRlZCBieSBjZGs4c1xuaW1wb3J0IHsgQXBpT2JqZWN0LCBBcGlPYmplY3RNZXRhZGF0YSwgR3JvdXBWZXJzaW9uS2luZCB9IGZyb20gJ2NkazhzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgR2l0SHViIGdyb3Vwc1xuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwXG4gKi9cbmV4cG9ydCBjbGFzcyBGaXJlc3RhcnRyR2l0aHViR3JvdXAgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJGaXJlc3RhcnRyR2l0aHViR3JvdXBcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2ZpcmVzdGFydHIuZGV2L3YxJyxcbiAgICBraW5kOiAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJGaXJlc3RhcnRyR2l0aHViR3JvdXBcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJHaXRodWJHcm91cC5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwUHJvcHMocHJvcHMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViR3JvdXAuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHN1cGVyLnRvSnNvbigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJHaXRodWJHcm91cC5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwUHJvcHMocmVzb2x2ZWQpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJlc291cmNlIHRvIGhhbmRsZSBHaXRIdWIgZ3JvdXBzXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cCNtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBBcGlPYmplY3RNZXRhZGF0YTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXAjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWM7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwUHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFByb3BzKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwUHJvcHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtZXRhZGF0YSc6IG9iai5tZXRhZGF0YSxcbiAgICAnc3BlYyc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjKG9iai5zcGVjKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyNvcmdcbiAgICovXG4gIHJlYWRvbmx5IG9yZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMjcHJpdmFjeVxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmFjeTogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1ByaXZhY3k7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyNkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyNwYXJlbnRUZWFtXG4gICAqL1xuICByZWFkb25seSBwYXJlbnRUZWFtPzogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW07XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyNtZW1iZXJzXG4gICAqL1xuICByZWFkb25seSBtZW1iZXJzOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVyc1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMjY29udGV4dFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dDogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlYyNmaXJlc3RhcnRyXG4gICAqL1xuICByZWFkb25seSBmaXJlc3RhcnRyOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjRmlyZXN0YXJ0cjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjI3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gICAqL1xuICByZWFkb25seSB3cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZjogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWMob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnb3JnJzogb2JqLm9yZyxcbiAgICAncHJpdmFjeSc6IG9iai5wcml2YWN5LFxuICAgICdkZXNjcmlwdGlvbic6IG9iai5kZXNjcmlwdGlvbixcbiAgICAncGFyZW50VGVhbSc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbShvYmoucGFyZW50VGVhbSksXG4gICAgJ21lbWJlcnMnOiBvYmoubWVtYmVycz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzKHkpKSxcbiAgICAnY29udGV4dCc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dChvYmouY29udGV4dCksXG4gICAgJ2ZpcmVzdGFydHInOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0ZpcmVzdGFydHIob2JqLmZpcmVzdGFydHIpLFxuICAgICd3cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYob2JqLndyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQcml2YWN5XG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQcml2YWN5IHtcbiAgLyoqIGNsb3NlZCAqL1xuICBDTE9TRUQgPSBcImNsb3NlZFwiLFxuICAvKiogc2VjcmV0ICovXG4gIFNFQ1JFVCA9IFwic2VjcmV0XCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW0jcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbShvYmo6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVycyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVyc1JlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVycycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnMob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVycyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVyc1JlZihvYmoucmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHQge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dCNiYWNrZW5kXG4gICAqL1xuICByZWFkb25seSBiYWNrZW5kOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHQjcHJvdmlkZXJcbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dChvYmo6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYmFja2VuZCc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmQob2JqLmJhY2tlbmQpLFxuICAgICdwcm92aWRlcic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyKG9iai5wcm92aWRlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjRmlyZXN0YXJ0clxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNGaXJlc3RhcnRyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0ZpcmVzdGFydHIjdGZTdGF0ZUtleVxuICAgKi9cbiAgcmVhZG9ubHkgdGZTdGF0ZUtleT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjRmlyZXN0YXJ0cicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0ZpcmVzdGFydHIob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjRmlyZXN0YXJ0ciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3RmU3RhdGVLZXknOiBvYmoudGZTdGF0ZUtleSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiNvdXRwdXRzXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRzPzogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0c1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICdvdXRwdXRzJzogb2JqLm91dHB1dHM/Lm1hcCh5ID0+IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW1SZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbVJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW1SZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNQYXJlbnRUZWFtUmVmI25lZWRzU2VjcmV0XG4gICAqL1xuICByZWFkb25seSBuZWVkc1NlY3JldDogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbVJlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1BhcmVudFRlYW1SZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjUGFyZW50VGVhbVJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICduZWVkc1NlY3JldCc6IG9iai5uZWVkc1NlY3JldCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVyc1JlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNNZW1iZXJzUmVmI25lZWRzU2VjcmV0XG4gICAqL1xuICByZWFkb25seSBuZWVkc1NlY3JldDogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVyc1JlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY01lbWJlcnNSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjTWVtYmVyc1JlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICduZWVkc1NlY3JldCc6IG9iai5uZWVkc1NlY3JldCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZCNyZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlZjogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZihvYmoucmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlciNyZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlZjogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlclJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyKG9iajogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyhvYmo6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZktpbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRCYWNrZW5kUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZihvYmo6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwU3BlY0NvbnRleHRQcm92aWRlclJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXJSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXJSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXJSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXJSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXJSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2luZCc6IG9iai5raW5kLFxuICAgICduYW1lJzogb2JqLm5hbWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViR3JvdXBTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0QmFja2VuZFJlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnICovXG4gIEZJUkVTVEFSVFJfUFJPVklERVJfQ09ORklHID0gXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXJSZWZLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJHaXRodWJHcm91cFNwZWNDb250ZXh0UHJvdmlkZXJSZWZLaW5kIHtcbiAgLyoqIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZyAqL1xuICBGSVJFU1RBUlRSX1BST1ZJREVSX0NPTkZJRyA9IFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIsXG59XG5cblxuLyoqXG4gKiBBIHJlc291cmNlIHRvIGhhbmRsZSBHaXRIdWIgbWVtYmVyc2hpcHMgdG8gYSBHaXRIdWIgb3JnYW5pemF0aW9uLlxuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBcbiAqL1xuZXhwb3J0IGNsYXNzIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2ZpcmVzdGFydHIuZGV2L3YxJyxcbiAgICBraW5kOiAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXAnLFxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcIkZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwUHJvcHMpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcC5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBQcm9wcyhwcm9wcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4uRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXAuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHN1cGVyLnRvSnNvbigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwLkdWSyxcbiAgICAgIC4uLnRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFByb3BzKHJlc29sdmVkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgR2l0SHViIG1lbWJlcnNoaXBzIHRvIGEgR2l0SHViIG9yZ2FuaXphdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YTogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXAjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYzogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwUHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwUHJvcHMob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFByb3BzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbWV0YWRhdGEnOiBvYmoubWV0YWRhdGEsXG4gICAgJ3NwZWMnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjKG9iai5zcGVjKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlYyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlYyNvcmdcbiAgICovXG4gIHJlYWRvbmx5IG9yZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlYyNyb2xlXG4gICAqL1xuICByZWFkb25seSByb2xlOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNSb2xlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlYyNjb250ZXh0XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlYyNmaXJlc3RhcnRyXG4gICAqL1xuICByZWFkb25seSBmaXJlc3RhcnRyOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNGaXJlc3RhcnRyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlYyN3cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZlxuICAgKi9cbiAgcmVhZG9ubHkgd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY/OiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlYyhvYmo6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlYyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ29yZyc6IG9iai5vcmcsXG4gICAgJ3JvbGUnOiBvYmoucm9sZSxcbiAgICAnY29udGV4dCc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0KG9iai5jb250ZXh0KSxcbiAgICAnZmlyZXN0YXJ0cic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNGaXJlc3RhcnRyKG9iai5maXJlc3RhcnRyKSxcbiAgICAnd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYob2JqLndyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1JvbGVcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjUm9sZSB7XG4gIC8qKiBtZW1iZXIgKi9cbiAgTUVNQkVSID0gXCJtZW1iZXJcIixcbiAgLyoqIGFkbWluICovXG4gIEFETUlOID0gXCJhZG1pblwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHQge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0I2JhY2tlbmRcbiAgICovXG4gIHJlYWRvbmx5IGJhY2tlbmQ6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHQjcHJvdmlkZXJcbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXI7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dChvYmo6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdiYWNrZW5kJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kKG9iai5iYWNrZW5kKSxcbiAgICAncHJvdmlkZXInOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyKG9iai5wcm92aWRlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNGaXJlc3RhcnRyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjRmlyZXN0YXJ0ciB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0ZpcmVzdGFydHIjdGZTdGF0ZUtleVxuICAgKi9cbiAgcmVhZG9ubHkgdGZTdGF0ZUtleTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0ZpcmVzdGFydHInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0ZpcmVzdGFydHIob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNGaXJlc3RhcnRyIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAndGZTdGF0ZUtleSc6IG9iai50ZlN0YXRlS2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiNvdXRwdXRzXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRzOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnb3V0cHV0cyc6IG9iai5vdXRwdXRzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmQge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZCNyZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlZjogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmRSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kKG9iajogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXIge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXIjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlcihvYmo6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXJSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyhvYmo6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IG9iai5rZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZFJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmRSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZFJlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0QmFja2VuZFJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZktpbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXJSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZihvYmo6IEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRQcm92aWRlclJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJHaXRodWJNZW1iZXJzaGlwU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1Yk1lbWJlcnNoaXBTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViTWVtYmVyc2hpcFNwZWNDb250ZXh0UHJvdmlkZXJSZWZLaW5kIHtcbiAgLyoqIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZyAqL1xuICBGSVJFU1RBUlRSX1BST1ZJREVSX0NPTkZJRyA9IFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIsXG59XG5cblxuLyoqXG4gKiBBIHJlc291cmNlIHRvIGhhbmRsZSB0aGUgR2l0SHViIHJlcG9zIG9mIGFuIG9yZ2FuaXphdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5XG4gKi9cbmV4cG9ydCBjbGFzcyBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeSBleHRlbmRzIEFwaU9iamVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcGlWZXJzaW9uIGFuZCBraW5kIGZvciBcIkZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdmaXJlc3RhcnRyLmRldi92MScsXG4gICAga2luZDogJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5JyxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVwiLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmlmZXN0KHByb3BzOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeS5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlQcm9wcyhwcm9wcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeS5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gS3ViZXJuZXRlcyBKU09OLlxuICAgKi9cbiAgcHVibGljIHRvSnNvbigpOiBhbnkge1xuICAgIGNvbnN0IHJlc29sdmVkID0gc3VwZXIudG9Kc29uKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnkuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMocmVzb2x2ZWQpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJlc291cmNlIHRvIGhhbmRsZSB0aGUgR2l0SHViIHJlcG9zIG9mIGFuIG9yZ2FuaXphdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5I21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IEFwaU9iamVjdE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWM7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlQcm9wcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlQcm9wcyhvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5UHJvcHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtZXRhZGF0YSc6IG9iai5tZXRhZGF0YSxcbiAgICAnc3BlYyc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWMob2JqLnNwZWMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjI29yZ1xuICAgKi9cbiAgcmVhZG9ubHkgb3JnOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjI2NvbnRleHRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjI2ZpcmVzdGFydHJcbiAgICovXG4gIHJlYWRvbmx5IGZpcmVzdGFydHI6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjI3JlcG9cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG87XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjI2FjdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbnM6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjI3BhZ2VzXG4gICAqL1xuICByZWFkb25seSBwYWdlcz86IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyNwZXJtaXNzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvbnM6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zW107XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjI2JyYW5jaFByb3RlY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBicmFuY2hQcm90ZWN0aW9uczogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWMjd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZcbiAgICovXG4gIHJlYWRvbmx5IHdyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyhvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlYyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ29yZyc6IG9iai5vcmcsXG4gICAgJ2NvbnRleHQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dChvYmouY29udGV4dCksXG4gICAgJ2ZpcmVzdGFydHInOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0cihvYmouZmlyZXN0YXJ0ciksXG4gICAgJ3JlcG8nOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyhvYmoucmVwbyksXG4gICAgJ2FjdGlvbnMnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQWN0aW9ucyhvYmouYWN0aW9ucyksXG4gICAgJ3BhZ2VzJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzKG9iai5wYWdlcyksXG4gICAgJ3Blcm1pc3Npb25zJzogb2JqLnBlcm1pc3Npb25zPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnMoeSkpLFxuICAgICdicmFuY2hQcm90ZWN0aW9ucyc6IG9iai5icmFuY2hQcm90ZWN0aW9ucz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zKHkpKSxcbiAgICAnd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYob2JqLndyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dCNiYWNrZW5kXG4gICAqL1xuICByZWFkb25seSBiYWNrZW5kOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0I3Byb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcjogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHQob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYmFja2VuZCc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZChvYmouYmFja2VuZCksXG4gICAgJ3Byb3ZpZGVyJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlcihvYmoucHJvdmlkZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0clxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHIge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyI3RmU3RhdGVLZXlcbiAgICovXG4gIHJlYWRvbmx5IHRmU3RhdGVLZXk6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyI3RlY2hub2xvZ3lcbiAgICovXG4gIHJlYWRvbmx5IHRlY2hub2xvZ3k6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHJUZWNobm9sb2d5O1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHIob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAndGZTdGF0ZUtleSc6IG9iai50ZlN0YXRlS2V5LFxuICAgICd0ZWNobm9sb2d5JzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHJUZWNobm9sb2d5KG9iai50ZWNobm9sb2d5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyNkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyNhbGxvd01lcmdlQ29tbWl0XG4gICAqL1xuICByZWFkb25seSBhbGxvd01lcmdlQ29tbWl0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2FsbG93U3F1YXNoTWVyZ2VcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93U3F1YXNoTWVyZ2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jYWxsb3dSZWJhc2VNZXJnZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dSZWJhc2VNZXJnZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyNhbGxvd0F1dG9NZXJnZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dBdXRvTWVyZ2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jZGVsZXRlQnJhbmNoT25NZXJnZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlQnJhbmNoT25NZXJnZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyNhdXRvSW5pdFxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b0luaXQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jYXJjaGl2ZU9uRGVzdHJveVxuICAgKi9cbiAgcmVhZG9ubHkgYXJjaGl2ZU9uRGVzdHJveT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyNhbGxvd1VwZGF0ZUJyYW5jaFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dVcGRhdGVCcmFuY2g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jaGFzSXNzdWVzXG4gICAqL1xuICByZWFkb25seSBoYXNJc3N1ZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8jaGFzV2lraVxuICAgKi9cbiAgcmVhZG9ubHkgaGFzV2lraT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyNwYWdlc1xuICAgKi9cbiAgcmVhZG9ubHkgcGFnZXM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyN2aXNpYmlsaXR5XG4gICAqL1xuICByZWFkb25seSB2aXNpYmlsaXR5OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvVmlzaWJpbGl0eTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2RlZmF1bHRCcmFuY2hcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRCcmFuY2g6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNSZXBvI2NvZGVvd25lcnNcbiAgICovXG4gIHJlYWRvbmx5IGNvZGVvd25lcnM/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwbyhvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1JlcG8gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkZXNjcmlwdGlvbic6IG9iai5kZXNjcmlwdGlvbixcbiAgICAnYWxsb3dNZXJnZUNvbW1pdCc6IG9iai5hbGxvd01lcmdlQ29tbWl0LFxuICAgICdhbGxvd1NxdWFzaE1lcmdlJzogb2JqLmFsbG93U3F1YXNoTWVyZ2UsXG4gICAgJ2FsbG93UmViYXNlTWVyZ2UnOiBvYmouYWxsb3dSZWJhc2VNZXJnZSxcbiAgICAnYWxsb3dBdXRvTWVyZ2UnOiBvYmouYWxsb3dBdXRvTWVyZ2UsXG4gICAgJ2RlbGV0ZUJyYW5jaE9uTWVyZ2UnOiBvYmouZGVsZXRlQnJhbmNoT25NZXJnZSxcbiAgICAnYXV0b0luaXQnOiBvYmouYXV0b0luaXQsXG4gICAgJ2FyY2hpdmVPbkRlc3Ryb3knOiBvYmouYXJjaGl2ZU9uRGVzdHJveSxcbiAgICAnYWxsb3dVcGRhdGVCcmFuY2gnOiBvYmouYWxsb3dVcGRhdGVCcmFuY2gsXG4gICAgJ2hhc0lzc3Vlcyc6IG9iai5oYXNJc3N1ZXMsXG4gICAgJ2hhc1dpa2knOiBvYmouaGFzV2lraSxcbiAgICAncGFnZXMnOiBvYmoucGFnZXMsXG4gICAgJ3Zpc2liaWxpdHknOiBvYmoudmlzaWJpbGl0eSxcbiAgICAnZGVmYXVsdEJyYW5jaCc6IG9iai5kZWZhdWx0QnJhbmNoLFxuICAgICdjb2Rlb3duZXJzJzogb2JqLmNvZGVvd25lcnMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQWN0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnMjb2lkY1xuICAgKi9cbiAgcmVhZG9ubHkgb2lkYzogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQWN0aW9uc09pZGM7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQWN0aW9ucycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQWN0aW9ucyhvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdvaWRjJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnNPaWRjKG9iai5vaWRjKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlcyNjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgY25hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXMjc291cmNlXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U/OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlc1NvdXJjZTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2NuYW1lJzogb2JqLmNuYW1lLFxuICAgICdzb3VyY2UnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXNTb3VyY2Uob2JqLnNvdXJjZSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnMjcm9sZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9ucyNjb2xsYWJvcmF0b3JcbiAgICovXG4gIHJlYWRvbmx5IGNvbGxhYm9yYXRvcj86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9ucyNyZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlZj86IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9ucyhvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncm9sZSc6IG9iai5yb2xlLFxuICAgICdjb2xsYWJvcmF0b3InOiBvYmouY29sbGFib3JhdG9yLFxuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnNSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnMjYnJhbmNoXG4gICAqL1xuICByZWFkb25seSBicmFuY2g6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyNzdGF0dXNDaGVja3NcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1c0NoZWNrcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zI3JlcXVpcmVkUmV2aWV3ZXJzQ291bnRcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkUmV2aWV3ZXJzQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnMjcmVxdWlyZWRDb2Rlb3duZXJzUmV2aWV3ZXJzXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlZENvZGVvd25lcnNSZXZpZXdlcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zI2VuZm9yY2VBZG1pbnNcbiAgICovXG4gIHJlYWRvbmx5IGVuZm9yY2VBZG1pbnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0JyYW5jaFByb3RlY3Rpb25zI3JlcXVpcmVTaWduZWRDb21taXRzXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlU2lnbmVkQ29tbWl0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnMjcmVxdWlyZUNvbnZlcnNhdGlvblJlc29sdXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVDb252ZXJzYXRpb25SZXNvbHV0aW9uPzogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQnJhbmNoUHJvdGVjdGlvbnMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNCcmFuY2hQcm90ZWN0aW9ucyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2JyYW5jaCc6IG9iai5icmFuY2gsXG4gICAgJ3N0YXR1c0NoZWNrcyc6IG9iai5zdGF0dXNDaGVja3M/Lm1hcCh5ID0+IHkpLFxuICAgICdyZXF1aXJlZFJldmlld2Vyc0NvdW50Jzogb2JqLnJlcXVpcmVkUmV2aWV3ZXJzQ291bnQsXG4gICAgJ3JlcXVpcmVkQ29kZW93bmVyc1Jldmlld2Vycyc6IG9iai5yZXF1aXJlZENvZGVvd25lcnNSZXZpZXdlcnMsXG4gICAgJ2VuZm9yY2VBZG1pbnMnOiBvYmouZW5mb3JjZUFkbWlucyxcbiAgICAncmVxdWlyZVNpZ25lZENvbW1pdHMnOiBvYmoucmVxdWlyZVNpZ25lZENvbW1pdHMsXG4gICAgJ3JlcXVpcmVDb252ZXJzYXRpb25SZXNvbHV0aW9uJzogb2JqLnJlcXVpcmVDb252ZXJzYXRpb25SZXNvbHV0aW9uLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiNvdXRwdXRzXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRzOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnb3V0cHV0cyc6IG9iai5vdXRwdXRzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmQge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZCNyZWZcbiAgICovXG4gIHJlYWRvbmx5IHJlZjogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXIge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXIjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlcihvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXJSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNGaXJlc3RhcnRyVGVjaG5vbG9neVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHJUZWNobm9sb2d5IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0clRlY2hub2xvZ3kjc3RhY2tcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHJUZWNobm9sb2d5I3ZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0clRlY2hub2xvZ3knIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0ZpcmVzdGFydHJUZWNobm9sb2d5KG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjRmlyZXN0YXJ0clRlY2hub2xvZ3kgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdzdGFjayc6IG9iai5zdGFjayxcbiAgICAndmVyc2lvbic6IG9iai52ZXJzaW9uLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwb1Zpc2liaWxpdHlcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUmVwb1Zpc2liaWxpdHkge1xuICAvKiogcHJpdmF0ZSAqL1xuICBQUklWQVRFID0gXCJwcml2YXRlXCIsXG4gIC8qKiBwdWJsaWMgKi9cbiAgUFVCTElDID0gXCJwdWJsaWNcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnNPaWRjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQWN0aW9uc09pZGMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zT2lkYyN1c2VEZWZhdWx0XG4gICAqL1xuICByZWFkb25seSB1c2VEZWZhdWx0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnNPaWRjI2luY2x1ZGVDbGFpbUtleXNcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVDbGFpbUtleXM6IHN0cmluZ1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnNPaWRjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNBY3Rpb25zT2lkYyhvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0FjdGlvbnNPaWRjIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAndXNlRGVmYXVsdCc6IG9iai51c2VEZWZhdWx0LFxuICAgICdpbmNsdWRlQ2xhaW1LZXlzJzogb2JqLmluY2x1ZGVDbGFpbUtleXM/Lm1hcCh5ID0+IHkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXNTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQYWdlc1NvdXJjZSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzU291cmNlI2JyYW5jaFxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzU291cmNlI3BhdGhcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXNTb3VyY2UnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1BhZ2VzU291cmNlKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGFnZXNTb3VyY2UgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdicmFuY2gnOiBvYmouYnJhbmNoLFxuICAgICdwYXRoJzogb2JqLnBhdGgsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnNSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNQZXJtaXNzaW9uc1JlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zUmVmI25lZWRzU2VjcmV0XG4gICAqL1xuICByZWFkb25seSBuZWVkc1NlY3JldD86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnNSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1Blcm1pc3Npb25zUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjUGVybWlzc2lvbnNSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnbmVlZHNTZWNyZXQnOiBvYmoubmVlZHNTZWNyZXQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyhvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IG9iai5rZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZFJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZFJlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0QmFja2VuZFJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZktpbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXJSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZihvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRQcm92aWRlclJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5U3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeVNwZWNDb250ZXh0UHJvdmlkZXJSZWZLaW5kIHtcbiAgLyoqIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZyAqL1xuICBGSVJFU1RBUlRSX1BST1ZJREVSX0NPTkZJRyA9IFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIsXG59XG5cblxuLyoqXG4gKiBBIHJlc291cmNlIHRvIGhhbmRsZSBmZWF0dXJlcyBmb3IgR2l0SHViIHJlcG9zLlxuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlXG4gKi9cbmV4cG9ydCBjbGFzcyBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmUgZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2ZpcmVzdGFydHIuZGV2L3YxJyxcbiAgICBraW5kOiAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVcIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlUHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZS5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlUHJvcHMocHJvcHMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhIFwiRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmUuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHN1cGVyLnRvSnNvbigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZS5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlUHJvcHMocmVzb2x2ZWQpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJlc291cmNlIHRvIGhhbmRsZSBmZWF0dXJlcyBmb3IgR2l0SHViIHJlcG9zLlxuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmUjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVQcm9wcyhvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVByb3BzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbWV0YWRhdGEnOiBvYmoubWV0YWRhdGEsXG4gICAgJ3NwZWMnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlYyhvYmouc3BlYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlYyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMjZmlyZXN0YXJ0clxuICAgKi9cbiAgcmVhZG9ubHkgZmlyZXN0YXJ0cj86IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaXJlc3RhcnRyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMjdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMjb3JnXG4gICAqL1xuICByZWFkb25seSBvcmc6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjI2NvbnRleHRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMjdmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMjcmVwb3NpdG9yeVRhcmdldFxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yeVRhcmdldDogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlYyNmaWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXM6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaWxlc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZmlyZXN0YXJ0cic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlyZXN0YXJ0cihvYmouZmlyZXN0YXJ0ciksXG4gICAgJ3R5cGUnOiBvYmoudHlwZSxcbiAgICAnb3JnJzogb2JqLm9yZyxcbiAgICAnY29udGV4dCc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dChvYmouY29udGV4dCksXG4gICAgJ3ZlcnNpb24nOiBvYmoudmVyc2lvbixcbiAgICAncmVwb3NpdG9yeVRhcmdldCc6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldChvYmoucmVwb3NpdG9yeVRhcmdldCksXG4gICAgJ2ZpbGVzJzogb2JqLmZpbGVzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpbGVzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaXJlc3RhcnRyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpcmVzdGFydHIge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlyZXN0YXJ0ciN0ZlN0YXRlS2V5XG4gICAqL1xuICByZWFkb25seSB0ZlN0YXRlS2V5OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpcmVzdGFydHInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaXJlc3RhcnRyKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpcmVzdGFydHIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICd0ZlN0YXRlS2V5Jzogb2JqLnRmU3RhdGVLZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHQjYmFja2VuZFxuICAgKi9cbiAgcmVhZG9ubHkgYmFja2VuZDogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0I3Byb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcjogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlcjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHQob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2JhY2tlbmQnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kKG9iai5iYWNrZW5kKSxcbiAgICAncHJvdmlkZXInOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlcihvYmoucHJvdmlkZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0I3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldFJlZjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldCNicmFuY2hcbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaDogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldChvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0UmVmKG9iai5yZWYpLFxuICAgICdicmFuY2gnOiBvYmouYnJhbmNoLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpbGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpbGVzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpbGVzI3BhdGhcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlsZXMjdXNlck1hbmFnZWRcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJNYW5hZ2VkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNGaWxlcyNjb250ZW50XG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0ZpbGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlsZXMob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjRmlsZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdwYXRoJzogb2JqLnBhdGgsXG4gICAgJ3VzZXJNYW5hZ2VkJzogb2JqLnVzZXJNYW5hZ2VkLFxuICAgICdjb250ZW50Jzogb2JqLmNvbnRlbnQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmQge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmQjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZFJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZChvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlciB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXIjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXJSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlcihvYmo6IEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXIgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZihvYmoucmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0UmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXRSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldFJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXRSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNSZXBvc2l0b3J5VGFyZ2V0UmVmI25lZWRzU2VjcmV0XG4gICAqL1xuICByZWFkb25seSBuZWVkc1NlY3JldDogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldFJlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY1JlcG9zaXRvcnlUYXJnZXRSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjUmVwb3NpdG9yeVRhcmdldFJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICduZWVkc1NlY3JldCc6IG9iai5uZWVkc1NlY3JldCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZFJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZFJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZFJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0QmFja2VuZFJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVNwZWNDb250ZXh0UHJvdmlkZXJSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmKG9iajogRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRQcm92aWRlclJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0ckdpdGh1YlJlcG9zaXRvcnlGZWF0dXJlU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kIHtcbiAgLyoqIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZyAqL1xuICBGSVJFU1RBUlRSX1BST1ZJREVSX0NPTkZJRyA9IFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyR2l0aHViUmVwb3NpdG9yeUZlYXR1cmVTcGVjQ29udGV4dFByb3ZpZGVyUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG5cbi8qKlxuICogQSByZXNvdXJjZSB0byBoYW5kbGUgYmFja2VuZCBhbmQgcHJvdmlkZXIgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1xuICovXG5leHBvcnQgY2xhc3MgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdmaXJlc3RhcnRyLmRldi92MScsXG4gICAga2luZDogJ0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZycsXG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1Byb3BzKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnLkdWSyxcbiAgICAgIC4uLnRvSnNvbl9GaXJlc3RhcnRyUHJvdmlkZXJDb25maWdQcm9wcyhwcm9wcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIiBBUEkgb2JqZWN0XG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgb2JqZWN0XG4gICAqIEBwYXJhbSBpZCBhIHNjb3BlLWxvY2FsIG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5GaXJlc3RhcnRyUHJvdmlkZXJDb25maWcuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHN1cGVyLnRvSnNvbigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJQcm92aWRlckNvbmZpZy5HVkssXG4gICAgICAuLi50b0pzb25fRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnUHJvcHMocmVzb2x2ZWQpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJlc291cmNlIHRvIGhhbmRsZSBiYWNrZW5kIGFuZCBwcm92aWRlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnUHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhOiBBcGlPYmplY3RNZXRhZGF0YTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYzogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdQcm9wcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnUHJvcHMob2JqOiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdQcm9wcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ21ldGFkYXRhJzogb2JqLm1ldGFkYXRhLFxuICAgICdzcGVjJzogdG9Kc29uX0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMob2JqLnNwZWMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjI3R5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjI3NvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYyN2ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYyNjb25maWdcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMjaW5saW5lXG4gICAqL1xuICByZWFkb25seSBpbmxpbmU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYyNlbnZcbiAgICovXG4gIHJlYWRvbmx5IGVudj86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjI3NlY3JldHNcbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldHM/OiB7IFtrZXk6IHN0cmluZ106IEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzIH07XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlYyhvYmo6IEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICd0eXBlJzogb2JqLnR5cGUsXG4gICAgJ3NvdXJjZSc6IG9iai5zb3VyY2UsXG4gICAgJ3ZlcnNpb24nOiBvYmoudmVyc2lvbixcbiAgICAnY29uZmlnJzogb2JqLmNvbmZpZyxcbiAgICAnaW5saW5lJzogb2JqLmlubGluZSxcbiAgICAnZW52Jzogb2JqLmVudixcbiAgICAnc2VjcmV0cyc6ICgob2JqLnNlY3JldHMpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5zZWNyZXRzKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogdG9Kc29uX0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzKGlbMV0pIH0pLCB7fSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0cyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzI3NlY3JldFJlZlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0UmVmOiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0c1NlY3JldFJlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0cycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHMob2JqOiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0cyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3NlY3JldFJlZic6IHRvSnNvbl9GaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0c1NlY3JldFJlZihvYmouc2VjcmV0UmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzU2VjcmV0UmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHNTZWNyZXRSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0c1NlY3JldFJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnU3BlY1NlY3JldHNTZWNyZXRSZWYjbmFtZXNwYWNlXG4gICAqL1xuICByZWFkb25seSBuYW1lc3BhY2U6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0c1NlY3JldFJlZiNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzU2VjcmV0UmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyUHJvdmlkZXJDb25maWdTcGVjU2VjcmV0c1NlY3JldFJlZihvYmo6IEZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1NwZWNTZWNyZXRzU2VjcmV0UmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICduYW1lc3BhY2UnOiBvYmoubmFtZXNwYWNlLFxuICAgICdrZXknOiBvYmoua2V5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG5cbi8qKlxuICogQSB3b3Jrc3BhY2UgdG8gaGFuZGxlIFRlcnJhZm9ybSBjb2RlXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlXG4gKi9cbmV4cG9ydCBjbGFzcyBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlIGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnZmlyZXN0YXJ0ci5kZXYvdjEnLFxuICAgIGtpbmQ6ICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlJyxcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgS3ViZXJuZXRlcyBtYW5pZmVzdCBmb3IgXCJGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlXCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2UuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQcm9wcyhwcm9wcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgXCJGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2UuR1ZLLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHN1cGVyLnRvSnNvbigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2UuR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQcm9wcyhyZXNvbHZlZCksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEEgd29ya3NwYWNlIHRvIGhhbmRsZSBUZXJyYWZvcm0gY29kZVxuICpcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2UjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhOiBBcGlPYmplY3RNZXRhZGF0YTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlI3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQcm9wcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVByb3BzKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVByb3BzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbWV0YWRhdGEnOiBvYmoubWV0YWRhdGEsXG4gICAgJ3NwZWMnOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWMob2JqLnNwZWMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlYyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjI2NvbnRleHRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ/OiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWMjZmlyZXN0YXJ0clxuICAgKi9cbiAgcmVhZG9ubHkgZmlyZXN0YXJ0cjogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNGaXJlc3RhcnRyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjI21vZHVsZVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjI3NvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlPzogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWMjdmFsdWVzXG4gICAqL1xuICByZWFkb25seSB2YWx1ZXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWMjcmVmZXJlbmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVmZXJlbmNlcz86IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlc1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjI3dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gICAqL1xuICByZWFkb25seSB3cml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZj86IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdjb250ZXh0JzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dChvYmouY29udGV4dCksXG4gICAgJ2ZpcmVzdGFydHInOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNGaXJlc3RhcnRyKG9iai5maXJlc3RhcnRyKSxcbiAgICAnbW9kdWxlJzogb2JqLm1vZHVsZSxcbiAgICAnc291cmNlJzogb2JqLnNvdXJjZSxcbiAgICAndmFsdWVzJzogb2JqLnZhbHVlcyxcbiAgICAncmVmZXJlbmNlcyc6IG9iai5yZWZlcmVuY2VzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzKHkpKSxcbiAgICAnd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZihvYmoud3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0I2JhY2tlbmRcbiAgICovXG4gIHJlYWRvbmx5IGJhY2tlbmQ6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0I3Byb3ZpZGVyc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXJzOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dChvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2JhY2tlbmQnOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZChvYmouYmFja2VuZCksXG4gICAgJ3Byb3ZpZGVycyc6IG9iai5wcm92aWRlcnM/Lm1hcCh5ID0+IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNGaXJlc3RhcnRyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNGaXJlc3RhcnRyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNGaXJlc3RhcnRyI3RmU3RhdGVLZXlcbiAgICovXG4gIHJlYWRvbmx5IHRmU3RhdGVLZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0ZpcmVzdGFydHInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjRmlyZXN0YXJ0cihvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjRmlyZXN0YXJ0ciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3RmU3RhdGVLZXknOiBvYmoudGZTdGF0ZUtleSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjU291cmNlXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjU291cmNlIHtcbiAgLyoqIFJlbW90ZSAqL1xuICBSRU1PVEUgPSBcIlJlbW90ZVwiLFxuICAvKiogSW5saW5lICovXG4gIElOTElORSA9IFwiSW5saW5lXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXMjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXMjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY/OiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXMob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjb3V0cHV0c1xuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0czogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnb3V0cHV0cyc6IG9iai5vdXRwdXRzPy5tYXAoeSA9PiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmQge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmQob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnMjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVyc1JlZjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVycyhvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVycyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlZic6IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmS2luZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1JlZmVyZW5jZXNSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlc1JlZiNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlc1JlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2luZCc6IG9iai5raW5kLFxuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ2tleSc6IG9iai5rZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IG9iai5rZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRCYWNrZW5kUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZktpbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZihvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dEJhY2tlbmRSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVyc1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVyc1JlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVyc1JlZiNraW5kXG4gICAqL1xuICByZWFkb25seSBraW5kOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVyc1JlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzUmVmJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWYob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlU3BlY0NvbnRleHRQcm92aWRlcnNSZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdraW5kJzogb2JqLmtpbmQsXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjUmVmZXJlbmNlc1JlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNSZWZlcmVuY2VzUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlICovXG4gIEZJUkVTVEFSVFJfVEVSUkFGT1JNX1dPUktTUEFDRSA9IFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0QmFja2VuZFJlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnICovXG4gIEZJUkVTVEFSVFJfUFJPVklERVJfQ09ORklHID0gXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VTcGVjQ29udGV4dFByb3ZpZGVyc1JlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVNwZWNDb250ZXh0UHJvdmlkZXJzUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG5cbi8qKlxuICogQSB3b3Jrc3BhY2UgdG8gaGFuZGxlIFRlcnJhZm9ybSBjb2RlXG4gKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblxuICovXG5leHBvcnQgY2xhc3MgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW4gZXh0ZW5kcyBBcGlPYmplY3Qge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCJGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblwiXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdWSzogR3JvdXBWZXJzaW9uS2luZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAnZmlyZXN0YXJ0ci5kZXYvdjEnLFxuICAgIGtpbmQ6ICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhbicsXG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5cIi5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYW5pZmVzdChwcm9wczogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5Qcm9wcyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuLkdWSyxcbiAgICAgIC4uLnRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblByb3BzKHByb3BzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcIkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuXCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhbi5HVkssXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gS3ViZXJuZXRlcyBKU09OLlxuICAgKi9cbiAgcHVibGljIHRvSnNvbigpOiBhbnkge1xuICAgIGNvbnN0IHJlc29sdmVkID0gc3VwZXIudG9Kc29uKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW4uR1ZLLFxuICAgICAgLi4udG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuUHJvcHMocmVzb2x2ZWQpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBIHdvcmtzcGFjZSB0byBoYW5kbGUgVGVycmFmb3JtIGNvZGVcbiAqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5Qcm9wcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuI21ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YTogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW4jc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYzogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuUHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuUHJvcHMob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblByb3BzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbWV0YWRhdGEnOiBvYmoubWV0YWRhdGEsXG4gICAgJ3NwZWMnOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjKG9iai5zcGVjKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlYyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlYyNjb250ZXh0XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMjZmlyZXN0YXJ0clxuICAgKi9cbiAgcmVhZG9ubHkgZmlyZXN0YXJ0cjogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjRmlyZXN0YXJ0cjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMjbW9kdWxlXG4gICAqL1xuICByZWFkb25seSBtb2R1bGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjI3NvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlPzogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjU291cmNlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlYyN2YWx1ZXNcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlcz86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMjcmVmZXJlbmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVmZXJlbmNlcz86IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMjd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZcbiAgICovXG4gIHJlYWRvbmx5IHdyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmPzogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdjb250ZXh0JzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHQob2JqLmNvbnRleHQpLFxuICAgICdmaXJlc3RhcnRyJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0ZpcmVzdGFydHIob2JqLmZpcmVzdGFydHIpLFxuICAgICdtb2R1bGUnOiBvYmoubW9kdWxlLFxuICAgICdzb3VyY2UnOiBvYmouc291cmNlLFxuICAgICd2YWx1ZXMnOiBvYmoudmFsdWVzLFxuICAgICdyZWZlcmVuY2VzJzogb2JqLnJlZmVyZW5jZXM/Lm1hcCh5ID0+IHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzKHkpKSxcbiAgICAnd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYob2JqLndyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dCNiYWNrZW5kXG4gICAqL1xuICByZWFkb25seSBiYWNrZW5kOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0I3Byb3ZpZGVyc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXJzOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dChvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdiYWNrZW5kJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kKG9iai5iYWNrZW5kKSxcbiAgICAncHJvdmlkZXJzJzogb2JqLnByb3ZpZGVycz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjRmlyZXN0YXJ0clxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0ZpcmVzdGFydHIge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNGaXJlc3RhcnRyI3RmU3RhdGVLZXlcbiAgICovXG4gIHJlYWRvbmx5IHRmU3RhdGVLZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNGaXJlc3RhcnRyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNGaXJlc3RhcnRyKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjRmlyZXN0YXJ0ciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3RmU3RhdGVLZXknOiBvYmoudGZTdGF0ZUtleSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1NvdXJjZVxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNTb3VyY2Uge1xuICAvKiogUmVtb3RlICovXG4gIFJFTU9URSA9IFwiUmVtb3RlXCIsXG4gIC8qKiBJbmxpbmUgKi9cbiAgSU5MSU5FID0gXCJJbmxpbmVcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlcyNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXMjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY/OiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXMob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICdyZWYnOiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZihvYmoucmVmKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYjb3V0cHV0c1xuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0czogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWZPdXRwdXRzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmKG9iajogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjV3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ291dHB1dHMnOiBvYmoub3V0cHV0cz8ubWFwKHkgPT4gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmQjcmVmXG4gICAqL1xuICByZWFkb25seSByZWY6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZChvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmKG9iai5yZWYpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVyc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzI3JlZlxuICAgKi9cbiAgcmVhZG9ubHkgcmVmOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnMob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVmJzogdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWYob2JqLnJlZiksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzUmVmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZktpbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZiNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjUmVmZXJlbmNlc1JlZiNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1JlZmVyZW5jZXNSZWYob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2luZCc6IG9iai5raW5kLFxuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ2tleSc6IG9iai5rZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNXcml0ZUNvbm5lY3Rpb25TZWNyZXRUb1JlZk91dHB1dHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyhvYmo6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY1dyaXRlQ29ubmVjdGlvblNlY3JldFRvUmVmT3V0cHV0cyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IG9iai5rZXksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFJlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmRSZWYja2luZFxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFJlZicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmRSZWYob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0QmFja2VuZFJlZiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tpbmQnOiBvYmoua2luZCxcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVyc1JlZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWYge1xuICAvKipcbiAgICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmI2tpbmRcbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWZLaW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWYjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRQcm92aWRlcnNSZWYob2JqOiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNDb250ZXh0UHJvdmlkZXJzUmVmIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2luZCc6IG9iai5raW5kLFxuICAgICduYW1lJzogb2JqLm5hbWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzUmVmS2luZFxuICovXG5leHBvcnQgZW51bSBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblNwZWNSZWZlcmVuY2VzUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlICovXG4gIEZJUkVTVEFSVFJfVEVSUkFGT1JNX1dPUktTUEFDRSA9IFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dEJhY2tlbmRSZWZLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIEZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuU3BlY0NvbnRleHRCYWNrZW5kUmVmS2luZCB7XG4gIC8qKiBGaXJlc3RhcnRyUHJvdmlkZXJDb25maWcgKi9cbiAgRklSRVNUQVJUUl9QUk9WSURFUl9DT05GSUcgPSBcIkZpcmVzdGFydHJQcm92aWRlckNvbmZpZ1wiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVyc1JlZktpbmRcbiAqL1xuZXhwb3J0IGVudW0gRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5TcGVjQ29udGV4dFByb3ZpZGVyc1JlZktpbmQge1xuICAvKiogRmlyZXN0YXJ0clByb3ZpZGVyQ29uZmlnICovXG4gIEZJUkVTVEFSVFJfUFJPVklERVJfQ09ORklHID0gXCJGaXJlc3RhcnRyUHJvdmlkZXJDb25maWdcIixcbn1cblxuXG4vKipcbiAqIEEgcmVzb3VyY2UgdG8gaGFuZGxlIFRlcnJhZm9ybSByZXN1bHRzLlxuICpcbiAqIEBzY2hlbWEgVEZSZXN1bHRcbiAqL1xuZXhwb3J0IGNsYXNzIFRmUmVzdWx0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiVEZSZXN1bHRcIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVks6IEdyb3VwVmVyc2lvbktpbmQgPSB7XG4gICAgYXBpVmVyc2lvbjogJ2ZpcmVzdGFydHIuZGV2L3YxJyxcbiAgICBraW5kOiAnVEZSZXN1bHQnLFxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcIlRGUmVzdWx0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IFRmUmVzdWx0UHJvcHMgPSB7fSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLlRmUmVzdWx0LkdWSyxcbiAgICAgIC4uLnRvSnNvbl9UZlJlc3VsdFByb3BzKHByb3BzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcIlRGUmVzdWx0XCIgQVBJIG9iamVjdFxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdFxuICAgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wc1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUZlJlc3VsdFByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLlRmUmVzdWx0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5UZlJlc3VsdC5HVkssXG4gICAgICAuLi50b0pzb25fVGZSZXN1bHRQcm9wcyhyZXNvbHZlZCksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEEgcmVzb3VyY2UgdG8gaGFuZGxlIFRlcnJhZm9ybSByZXN1bHRzLlxuICpcbiAqIEBzY2hlbWEgVEZSZXN1bHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZlJlc3VsdFByb3BzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgVEZSZXN1bHQjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgVEZSZXN1bHQjc3BlY1xuICAgKi9cbiAgcmVhZG9ubHkgc3BlYz86IFRmUmVzdWx0U3BlYztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdUZlJlc3VsdFByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9UZlJlc3VsdFByb3BzKG9iajogVGZSZXN1bHRQcm9wcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ21ldGFkYXRhJzogb2JqLm1ldGFkYXRhLFxuICAgICdzcGVjJzogdG9Kc29uX1RmUmVzdWx0U3BlYyhvYmouc3BlYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBUZlJlc3VsdFNwZWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZlJlc3VsdFNwZWMge1xuICAvKipcbiAgICogQHNjaGVtYSBUZlJlc3VsdFNwZWMjYWN0aW9uXG4gICAqL1xuICByZWFkb25seSBhY3Rpb24/OiBUZlJlc3VsdFNwZWNBY3Rpb247XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgVGZSZXN1bHRTcGVjI3JlZmVyZW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVmZXJlbmNlPzogVGZSZXN1bHRTcGVjUmVmZXJlbmNlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFRmUmVzdWx0U3BlYyNyZXN1bHRcbiAgICovXG4gIHJlYWRvbmx5IHJlc3VsdD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdUZlJlc3VsdFNwZWMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1RmUmVzdWx0U3BlYyhvYmo6IFRmUmVzdWx0U3BlYyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FjdGlvbic6IG9iai5hY3Rpb24sXG4gICAgJ3JlZmVyZW5jZSc6IHRvSnNvbl9UZlJlc3VsdFNwZWNSZWZlcmVuY2Uob2JqLnJlZmVyZW5jZSksXG4gICAgJ3Jlc3VsdCc6IG9iai5yZXN1bHQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBUZlJlc3VsdFNwZWNBY3Rpb25cbiAqL1xuZXhwb3J0IGVudW0gVGZSZXN1bHRTcGVjQWN0aW9uIHtcbiAgLyoqIGluaXQgKi9cbiAgSU5JVCA9IFwiaW5pdFwiLFxuICAvKiogcGxhbiAqL1xuICBQTEFOID0gXCJwbGFuXCIsXG4gIC8qKiBhcHBseSAqL1xuICBBUFBMWSA9IFwiYXBwbHlcIixcbiAgLyoqIGRlc3Ryb3kgKi9cbiAgREVTVFJPWSA9IFwiZGVzdHJveVwiLFxuICAvKiogc3ludGggKi9cbiAgU1lOVEggPSBcInN5bnRoXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBUZlJlc3VsdFNwZWNSZWZlcmVuY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZlJlc3VsdFNwZWNSZWZlcmVuY2Uge1xuICAvKipcbiAgICogQHNjaGVtYSBUZlJlc3VsdFNwZWNSZWZlcmVuY2UjcmVmS2luZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVmS2luZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFRmUmVzdWx0U3BlY1JlZmVyZW5jZSNyZWZOYW1lXG4gICAqL1xuICByZWFkb25seSByZWZOYW1lOiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVGZSZXN1bHRTcGVjUmVmZXJlbmNlJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9UZlJlc3VsdFNwZWNSZWZlcmVuY2Uob2JqOiBUZlJlc3VsdFNwZWNSZWZlcmVuY2UgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWZLaW5kJzogb2JqLnJlZktpbmQsXG4gICAgJ3JlZk5hbWUnOiBvYmoucmVmTmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuIl19
|
|
230067
230101
|
|
|
230068
230102
|
/***/ }),
|
|
230069
230103
|
|
|
@@ -230852,6 +230886,17 @@ class GithubGroupChart extends base_1.BaseGithubChart {
|
|
|
230852
230886
|
}
|
|
230853
230887
|
});
|
|
230854
230888
|
}
|
|
230889
|
+
const parentTeam = claim.parent ? (0, refresolver_1.resolveClaimRef)("GroupClaim", (0, claimUtils_1.resolveStringReference)(claim.parent).name).metadata.name : undefined;
|
|
230890
|
+
let parentTeamRef = undefined;
|
|
230891
|
+
if (parentTeam) {
|
|
230892
|
+
parentTeamRef = {
|
|
230893
|
+
ref: {
|
|
230894
|
+
kind: "FirestartrGithubGroup",
|
|
230895
|
+
name: parentTeam,
|
|
230896
|
+
needsSecret: true
|
|
230897
|
+
}
|
|
230898
|
+
};
|
|
230899
|
+
}
|
|
230855
230900
|
return {
|
|
230856
230901
|
metadata: { name: claim.providers.github.name },
|
|
230857
230902
|
spec: {
|
|
@@ -230859,6 +230904,7 @@ class GithubGroupChart extends base_1.BaseGithubChart {
|
|
|
230859
230904
|
privacy: claim.providers.github.privacy || 'closed',
|
|
230860
230905
|
description: claim.description,
|
|
230861
230906
|
members: memberRefList,
|
|
230907
|
+
parentTeam: parentTeamRef,
|
|
230862
230908
|
firestartr: { tfStateKey: firestartrId },
|
|
230863
230909
|
writeConnectionSecretToRef: {
|
|
230864
230910
|
name: `firestartrgithubgroup-${claim.providers.github.name}-outputs`.toLowerCase(),
|
|
@@ -230879,7 +230925,7 @@ class GithubGroupChart extends base_1.BaseGithubChart {
|
|
|
230879
230925
|
}
|
|
230880
230926
|
}
|
|
230881
230927
|
exports.GithubGroupChart = GithubGroupChart;
|
|
230882
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
230928
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBDbGFpbUNoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NoYXJ0cy9naXRodWIvZ3JvdXBDbGFpbUNoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUFnRTtBQUNoRSxvRUFFeUM7QUFHekMsbURBQW9EO0FBQ3BELGlDQUF5QztBQUd6QyxNQUFhLGdCQUFpQixTQUFRLHNCQUFlO0lBRW5ELFFBQVE7UUFFTixNQUFNLEtBQUssR0FBcUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVsRCxNQUFNLFlBQVksR0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXRELE1BQU0sYUFBYSxHQUFVLEVBQUUsQ0FBQztRQUVoQyxLQUFLLE1BQU0sZUFBZSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRTtZQUVuRCxJQUFJLE1BQVcsQ0FBQztZQUVoQixNQUFNLEdBQUcsSUFBQSxtQ0FBc0IsRUFBQyxlQUFlLENBQUMsQ0FBQztZQUVqRCxNQUFNLElBQUksR0FBRyxJQUFBLDZCQUFlLEVBRTFCLE1BQU0sQ0FBQyxJQUFJLEtBQUssdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUVwRSxNQUFNLENBQUMsSUFBSSxDQUVaLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUVoQixhQUFhLENBQUMsSUFBSSxDQUFDO2dCQUVqQixHQUFHLEVBQUU7b0JBRUgsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO29CQUVqQixJQUFJO29CQUVKLFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSSxLQUFLLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7aUJBRXBFO2FBRUYsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFBLDZCQUFlLEVBRS9DLFlBQVksRUFFWixJQUFBLG1DQUFzQixFQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBRTFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRTVCLElBQUksYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUU5QixJQUFHLFVBQVUsRUFBQztZQUVaLGFBQWEsR0FBRztnQkFFWixHQUFHLEVBQUU7b0JBRUgsSUFBSSxFQUFFLHVCQUF1QjtvQkFFN0IsSUFBSSxFQUFFLFVBQVU7b0JBRWhCLFdBQVcsRUFBRSxJQUFJO2lCQUVsQjthQUNKLENBQUE7U0FFRjtRQUVELE9BQU87WUFFTCxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO1lBRS9DLElBQUksRUFBRTtnQkFFSixHQUFHLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRztnQkFFL0IsT0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxRQUFRO2dCQUVuRCxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7Z0JBRTlCLE9BQU8sRUFBRSxhQUFhO2dCQUV0QixVQUFVLEVBQUUsYUFBYTtnQkFFekIsVUFBVSxFQUFFLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRTtnQkFFeEMsMEJBQTBCLEVBQUU7b0JBRTFCLElBQUksRUFBRSx5QkFBeUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFO29CQUVsRixPQUFPLEVBQUU7d0JBRVAsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO3dCQUViLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTt3QkFFakIsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO3FCQUVoQjtpQkFFRjthQUNGO1NBQ0YsQ0FBQTtJQUNILENBQUM7SUFFRCxHQUFHO1FBQ0QsT0FBTyxzQ0FBcUIsQ0FBQyxHQUFHLENBQUE7SUFDbEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLFFBQWE7UUFFN0IsT0FBTyxJQUFJLHNDQUFxQixDQUU5QixJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUV2QyxDQUFBO0lBRUgsQ0FBQztDQUVGO0FBckhELDRDQXFIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlc29sdmVTdHJpbmdSZWZlcmVuY2UgfSBmcm9tICcuLi8uLi91dGlscy9jbGFpbVV0aWxzJztcbmltcG9ydCB7XG4gIEZpcmVzdGFydHJHaXRodWJHcm91cCwgRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwUHJvcHNcbn0gZnJvbSAnLi4vLi4vLi4vaW1wb3J0cy9maXJlc3RhcnRyLmRldic7XG5pbXBvcnQgeyBJVW5pdGlhbGl6ZWRTdGF0ZUtleSB9IGZyb20gJy4uLy4uL2NsYWltcy9iYXNlJztcbmltcG9ydCB7IElHaXRodWJUZWFtQ2xhaW0gfSBmcm9tICcuLi8uLi9jbGFpbXMvZ2l0aHViL2dyb3VwJztcbmltcG9ydCB7IHJlc29sdmVDbGFpbVJlZiB9IGZyb20gJy4uLy4uL3JlZnJlc29sdmVyJztcbmltcG9ydCB7IEJhc2VHaXRodWJDaGFydCB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBHcm91cFZlcnNpb25LaW5kIH0gZnJvbSAnY2RrOHMnO1xuXG5leHBvcnQgY2xhc3MgR2l0aHViR3JvdXBDaGFydCBleHRlbmRzIEJhc2VHaXRodWJDaGFydCB7XG5cbiAgdGVtcGxhdGUoKTogRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwUHJvcHMgfCBJVW5pdGlhbGl6ZWRTdGF0ZUtleSB7XG5cbiAgICBjb25zdCBjbGFpbTogSUdpdGh1YlRlYW1DbGFpbSA9IHRoaXMuZ2V0KFwiY2xhaW1cIik7XG5cbiAgICBjb25zdCBmaXJlc3RhcnRySWQ6IHN0cmluZyA9IHRoaXMuZ2V0KFwiZmlyZXN0YXJ0cklkXCIpO1xuXG4gICAgY29uc3QgbWVtYmVyUmVmTGlzdDogYW55W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgbWVtYmVyU3RyaW5nUmVmIG9mIChjbGFpbS5tZW1iZXJzIHx8IFtdKSkge1xuXG4gICAgICBsZXQgbWVtYmVyOiBhbnk7XG5cbiAgICAgIG1lbWJlciA9IHJlc29sdmVTdHJpbmdSZWZlcmVuY2UobWVtYmVyU3RyaW5nUmVmKTtcblxuICAgICAgY29uc3QgbmFtZSA9IHJlc29sdmVDbGFpbVJlZihcblxuICAgICAgICBtZW1iZXIua2luZCA9PT0gXCJGaXJlc3RhcnRyR2l0aHViR3JvdXBcIiA/IFwiR3JvdXBDbGFpbVwiIDogXCJVc2VyQ2xhaW1cIixcblxuICAgICAgICBtZW1iZXIubmFtZVxuXG4gICAgICApLm1ldGFkYXRhLm5hbWU7XG5cbiAgICAgIG1lbWJlclJlZkxpc3QucHVzaCh7XG5cbiAgICAgICAgcmVmOiB7XG5cbiAgICAgICAgICBraW5kOiBtZW1iZXIua2luZCxcblxuICAgICAgICAgIG5hbWUsXG5cbiAgICAgICAgICBuZWVkc1NlY3JldDogbWVtYmVyLmtpbmQgPT09IFwiRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwXCIgPyB0cnVlIDogZmFsc2UsXG5cbiAgICAgICAgfVxuXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRUZWFtID0gY2xhaW0ucGFyZW50ID8gcmVzb2x2ZUNsYWltUmVmKFxuICAgICAgXG4gICAgICBcIkdyb3VwQ2xhaW1cIiwgXG4gICAgICBcbiAgICAgIHJlc29sdmVTdHJpbmdSZWZlcmVuY2UoY2xhaW0ucGFyZW50KS5uYW1lXG4gICAgXG4gICAgKS5tZXRhZGF0YS5uYW1lIDogdW5kZWZpbmVkO1xuICAgIFxuICAgIGxldCBwYXJlbnRUZWFtUmVmID0gdW5kZWZpbmVkO1xuICAgIFxuICAgIGlmKHBhcmVudFRlYW0pe1xuICAgICAgXG4gICAgICBwYXJlbnRUZWFtUmVmID0ge1xuICAgICAgICAgIFxuICAgICAgICAgIHJlZjoge1xuICAgIFxuICAgICAgICAgICAga2luZDogXCJGaXJlc3RhcnRyR2l0aHViR3JvdXBcIixcbiAgICBcbiAgICAgICAgICAgIG5hbWU6IHBhcmVudFRlYW0sXG4gICAgXG4gICAgICAgICAgICBuZWVkc1NlY3JldDogdHJ1ZVxuICAgICAgICAgIFxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICBcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcblxuICAgICAgbWV0YWRhdGE6IHsgbmFtZTogY2xhaW0ucHJvdmlkZXJzLmdpdGh1Yi5uYW1lIH0sXG5cbiAgICAgIHNwZWM6IHtcblxuICAgICAgICBvcmc6IGNsYWltLnByb3ZpZGVycy5naXRodWIub3JnLFxuXG4gICAgICAgIHByaXZhY3k6IGNsYWltLnByb3ZpZGVycy5naXRodWIucHJpdmFjeSB8fCAnY2xvc2VkJyxcblxuICAgICAgICBkZXNjcmlwdGlvbjogY2xhaW0uZGVzY3JpcHRpb24sXG5cbiAgICAgICAgbWVtYmVyczogbWVtYmVyUmVmTGlzdCxcblxuICAgICAgICBwYXJlbnRUZWFtOiBwYXJlbnRUZWFtUmVmLFxuXG4gICAgICAgIGZpcmVzdGFydHI6IHsgdGZTdGF0ZUtleTogZmlyZXN0YXJ0cklkIH0sXG5cbiAgICAgICAgd3JpdGVDb25uZWN0aW9uU2VjcmV0VG9SZWY6IHtcblxuICAgICAgICAgIG5hbWU6IGBmaXJlc3RhcnRyZ2l0aHViZ3JvdXAtJHtjbGFpbS5wcm92aWRlcnMuZ2l0aHViLm5hbWV9LW91dHB1dHNgLnRvTG93ZXJDYXNlKCksXG5cbiAgICAgICAgICBvdXRwdXRzOiBbXG5cbiAgICAgICAgICAgIHsga2V5OiBcImlkXCIgfSxcblxuICAgICAgICAgICAgeyBrZXk6IFwibm9kZUlkXCIgfSxcblxuICAgICAgICAgICAgeyBrZXk6IFwic2x1Z1wiIH1cblxuICAgICAgICAgIF1cblxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGd2aygpOiBHcm91cFZlcnNpb25LaW5kIHtcbiAgICByZXR1cm4gRmlyZXN0YXJ0ckdpdGh1Ykdyb3VwLkdWS1xuICB9XG5cbiAgaW5zdGFuY2VBcGlPYmplY3QodGVtcGxhdGU6IGFueSk6IEZpcmVzdGFydHJHaXRodWJHcm91cCB7XG5cbiAgICByZXR1cm4gbmV3IEZpcmVzdGFydHJHaXRodWJHcm91cChcblxuICAgICAgdGhpcywgdGVtcGxhdGUubWV0YWRhdGEubmFtZSwgdGVtcGxhdGVcblxuICAgIClcblxuICB9XG5cbn1cbiJdfQ==
|
|
230883
230929
|
|
|
230884
230930
|
/***/ }),
|
|
230885
230931
|
|
|
@@ -235364,7 +235410,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
235364
235410
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
235365
235411
|
};
|
|
235366
235412
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
235367
|
-
exports.getTfWorkspacesRefs = exports.extractRefs = void 0;
|
|
235413
|
+
exports.getTfWorkspacesRefs = exports.getGroupParentRef = exports.extractRefs = void 0;
|
|
235368
235414
|
const catalog_common_1 = __importDefault(__nccwpck_require__(74100));
|
|
235369
235415
|
function extractRefs(renderClaims, kind) {
|
|
235370
235416
|
const result = {};
|
|
@@ -235375,6 +235421,12 @@ function extractRefs(renderClaims, kind) {
|
|
|
235375
235421
|
case "TFWorkspaceClaim":
|
|
235376
235422
|
refs = getTfWorkspacesRefs(claim.providers.terraform.values);
|
|
235377
235423
|
break;
|
|
235424
|
+
case "GroupClaim":
|
|
235425
|
+
/**
|
|
235426
|
+
* Groups can have refs to other groups in parent property
|
|
235427
|
+
**/
|
|
235428
|
+
refs = getGroupParentRef(claim.parent);
|
|
235429
|
+
break;
|
|
235378
235430
|
default:
|
|
235379
235431
|
throw new Error(`No refs for kind ${kind}`);
|
|
235380
235432
|
}
|
|
@@ -235386,6 +235438,18 @@ function extractRefs(renderClaims, kind) {
|
|
|
235386
235438
|
return result;
|
|
235387
235439
|
}
|
|
235388
235440
|
exports.extractRefs = extractRefs;
|
|
235441
|
+
function getGroupParentRef(parent, references = []) {
|
|
235442
|
+
if (!parent)
|
|
235443
|
+
return [];
|
|
235444
|
+
const regex = catalog_common_1.default.types.regex.GroupRefRegex;
|
|
235445
|
+
for (const match of parent.matchAll(regex)) {
|
|
235446
|
+
console.log(match);
|
|
235447
|
+
const [_, claimName] = match;
|
|
235448
|
+
references.push(claimName);
|
|
235449
|
+
}
|
|
235450
|
+
return references;
|
|
235451
|
+
}
|
|
235452
|
+
exports.getGroupParentRef = getGroupParentRef;
|
|
235389
235453
|
function getTfWorkspacesRefs(values, references = []) {
|
|
235390
235454
|
const regex = catalog_common_1.default.types.regex.TFWorkspaceRefRegex;
|
|
235391
235455
|
for (let key in values) {
|
|
@@ -235404,7 +235468,7 @@ function getTfWorkspacesRefs(values, references = []) {
|
|
|
235404
235468
|
return references;
|
|
235405
235469
|
}
|
|
235406
235470
|
exports.getTfWorkspacesRefs = getTfWorkspacesRefs;
|
|
235407
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
235471
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmc0V4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWZzU29ydGVyL3JlZnNFeHRyYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0Esb0VBQW9DO0FBRXBDLFNBQWdCLFdBQVcsQ0FBQyxZQUEwQixFQUFFLElBQVk7SUFFaEUsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFBO0lBRXRCLEtBQUssTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFO1FBRTVCLE1BQU0sS0FBSyxHQUFJLFlBQVksQ0FBQyxHQUFxQixDQUFTLENBQUMsS0FBSyxDQUFBO1FBRWhFLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUViLFFBQU8sSUFBSSxFQUFFO1lBRVQsS0FBSyxrQkFBa0I7Z0JBRXJCLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFFOUQsTUFBTTtZQUVOLEtBQUssWUFBWTtnQkFFZjs7b0JBRUk7Z0JBQ0osSUFBSSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFFeEMsTUFBTTtZQUVOO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDLENBQUE7U0FHaEQ7UUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHO1lBQ2pCLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtZQUNuQyxJQUFJLEVBQUUsSUFBSTtTQUNiLENBQUE7S0FDSjtJQUVELE9BQU8sTUFBTSxDQUFBO0FBRWYsQ0FBQztBQXpDSCxrQ0F5Q0c7QUFFRCxTQUFnQixpQkFBaUIsQ0FBQyxNQUFjLEVBQUUsYUFBb0IsRUFBRTtJQUV0RSxJQUFHLENBQUMsTUFBTTtRQUFFLE9BQU8sRUFBRSxDQUFBO0lBRXJCLE1BQU0sS0FBSyxHQUFHLHdCQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUE7SUFFOUMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDbEIsTUFBTSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDNUIsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUM1QjtJQUVELE9BQU8sVUFBVSxDQUFBO0FBRW5CLENBQUM7QUFkRCw4Q0FjQztBQUVELFNBQWdCLG1CQUFtQixDQUFDLE1BQVcsRUFBRSxhQUFvQixFQUFFO0lBRXJFLE1BQU0sS0FBSyxHQUFHLHdCQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQTtJQUVwRCxLQUFLLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRTtRQUV0QixRQUFRLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBRXhCLEtBQUssUUFBUTtnQkFDWCxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQzdDLE1BQU07WUFFUixLQUFLLFFBQVE7Z0JBQ1gsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUMvQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQTtvQkFDNUIsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDNUI7Z0JBQ0QsTUFBTTtTQUVUO0tBRUo7SUFJRCxPQUFPLFVBQVUsQ0FBQTtBQUVuQixDQUFDO0FBM0JELGtEQTJCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbmRlckNsYWltS2V5LCBSZW5kZXJDbGFpbXMgfSBmcm9tIFwiLi4vcmVuZGVyZXJcIjtcbmltcG9ydCBjb21tb24gZnJvbSAnY2F0YWxvZ19jb21tb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFJlZnMocmVuZGVyQ2xhaW1zOiBSZW5kZXJDbGFpbXMsIGtpbmQ6IHN0cmluZykge1xuXG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcmVuZGVyQ2xhaW1zKSB7XG5cbiAgICAgICAgY29uc3QgY2xhaW0gPSAocmVuZGVyQ2xhaW1zW2tleSBhcyBSZW5kZXJDbGFpbUtleV0gYXMgYW55KS5jbGFpbVxuICAgICAgICBcbiAgICAgICAgbGV0IHJlZnMgPSBbXVxuXG4gICAgICAgIHN3aXRjaChraW5kKSB7XG5cbiAgICAgICAgICAgIGNhc2UgXCJURldvcmtzcGFjZUNsYWltXCI6ICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgcmVmcyA9IGdldFRmV29ya3NwYWNlc1JlZnMoY2xhaW0ucHJvdmlkZXJzLnRlcnJhZm9ybS52YWx1ZXMpXG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwiR3JvdXBDbGFpbVwiOlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAqIEdyb3VwcyBjYW4gaGF2ZSByZWZzIHRvIG90aGVyIGdyb3VwcyBpbiBwYXJlbnQgcHJvcGVydHlcbiAgICAgICAgICAgICAgICoqLyBcbiAgICAgICAgICAgICAgcmVmcyA9IGdldEdyb3VwUGFyZW50UmVmKGNsYWltLnBhcmVudClcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcmVmcyBmb3Iga2luZCAke2tpbmR9YClcbiAgICAgICAgICAgIFxuXG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHRbY2xhaW0ubmFtZV0gPSB7XG4gICAgICAgICAgICBuYW1lOiBgJHtjbGFpbS5raW5kfS0ke2NsYWltLm5hbWV9YCxcbiAgICAgICAgICAgIHJlZnM6IHJlZnNcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcblxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldEdyb3VwUGFyZW50UmVmKHBhcmVudDogc3RyaW5nLCByZWZlcmVuY2VzOiBhbnlbXSA9IFtdKXtcblxuICAgIGlmKCFwYXJlbnQpIHJldHVybiBbXVxuICAgIFxuICAgIGNvbnN0IHJlZ2V4ID0gY29tbW9uLnR5cGVzLnJlZ2V4Lkdyb3VwUmVmUmVnZXhcblxuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgcGFyZW50Lm1hdGNoQWxsKHJlZ2V4KSkge1xuICAgICAgY29uc29sZS5sb2cobWF0Y2gpXG4gICAgICBjb25zdCBbXywgY2xhaW1OYW1lXSA9IG1hdGNoXG4gICAgICByZWZlcmVuY2VzLnB1c2goY2xhaW1OYW1lKTtcbiAgICB9XG4gICAgICAgIFxuICAgIHJldHVybiByZWZlcmVuY2VzXG5cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRUZldvcmtzcGFjZXNSZWZzKHZhbHVlczogYW55LCByZWZlcmVuY2VzOiBhbnlbXSA9IFtdKXtcbiAgXG4gICAgY29uc3QgcmVnZXggPSBjb21tb24udHlwZXMucmVnZXguVEZXb3Jrc3BhY2VSZWZSZWdleFxuIFxuICAgIGZvciAobGV0IGtleSBpbiB2YWx1ZXMpIHtcblxuICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWVzW2tleV0pIHtcblxuICAgICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICBnZXRUZldvcmtzcGFjZXNSZWZzKHZhbHVlc1trZXldLCByZWZlcmVuY2VzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgdmFsdWVzW2tleV0ubWF0Y2hBbGwocmVnZXgpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IFtfLCBjbGFpbU5hbWVdID0gbWF0Y2hcbiAgICAgICAgICAgICAgcmVmZXJlbmNlcy5wdXNoKGNsYWltTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG5cbiAgICB9XG4gICAgXG4gICAgXG5cbiAgICByZXR1cm4gcmVmZXJlbmNlc1xuXG4gIH1cbiJdfQ==
|
|
235408
235472
|
|
|
235409
235473
|
/***/ }),
|
|
235410
235474
|
|
|
@@ -235473,9 +235537,9 @@ function sortRefs(data, claim, ordered = [], visiting = [], visited = []) {
|
|
|
235473
235537
|
}
|
|
235474
235538
|
}
|
|
235475
235539
|
function hasSelfRefs(kind) {
|
|
235476
|
-
return ["TFWorkspaceClaim"].includes(kind);
|
|
235540
|
+
return ["TFWorkspaceClaim", "GroupClaim"].includes(kind);
|
|
235477
235541
|
}
|
|
235478
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
235542
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmc1NvcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWZzU29ydGVyL3JlZnNTb3J0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbURBQTZDO0FBRTdDOzs7O0dBSUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxZQUEwQixFQUFFLEtBQWU7SUFFaEYsSUFBSSxNQUFNLEdBQWlCLEVBQUUsQ0FBQTtJQUU3QixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtRQUV4QixLQUFLLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRTtZQUU1QixJQUFJLFlBQVksQ0FBQyxHQUFxQixDQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBRWpFLE1BQU0sQ0FBQyxHQUFxQixDQUFDLEdBQUcsWUFBWSxDQUFDLEdBQXFCLENBQUMsQ0FBQTthQUV0RTtTQUVKO1FBRUQsTUFBTSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQTtLQUN4QztJQUVELE9BQU8sTUFBTSxDQUFBO0FBRWYsQ0FBQztBQXJCRCx3REFxQkM7QUFHRCxTQUFTLGdCQUFnQixDQUFDLFlBQTBCLEVBQUUsSUFBVztJQUU3RCxJQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBRXJCLE9BQU8sWUFBWSxDQUFBO0tBRXBCO0lBRUQsTUFBTSxlQUFlLEdBQWlCLEVBQUUsQ0FBQTtJQUV4QyxNQUFNLElBQUksR0FBUSxJQUFBLDJCQUFXLEVBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBRWpELE1BQU0sT0FBTyxHQUFVLEVBQUUsQ0FBQztJQUUxQixNQUFNLFFBQVEsR0FBVSxFQUFFLENBQUM7SUFFM0IsTUFBTSxPQUFPLEdBQVUsRUFBRSxDQUFDO0lBRTFCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUVuQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFFMUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUV2RDtLQUVGO0lBRUQsS0FBSyxNQUFNLEVBQUUsSUFBSSxPQUFPLEVBQUU7UUFFeEIsZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO0tBRWpEO0lBRUQsT0FBTyxlQUFlLENBQUE7QUFFeEIsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsVUFBaUIsRUFBRSxFQUFFLFdBQWtCLEVBQUUsRUFBRSxVQUFpQixFQUFFO0lBRXJHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBRWpELE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBRXJFO0lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUVqRCxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXJCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtZQUVkLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtnQkFFNUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRW5DLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtvQkFFckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLEdBQUcseUJBQXlCLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2lCQUUxRTtnQkFFRCxRQUFRLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFFOUQ7U0FFRjtRQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUVyQjtBQUVILENBQUM7QUFHRCxTQUFTLFdBQVcsQ0FBQyxJQUFZO0lBRS9CLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7QUFFMUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbmRlckNsYWltS2V5LCBSZW5kZXJDbGFpbXMgfSBmcm9tIFwiLi4vcmVuZGVyZXJcIlxuaW1wb3J0IHsgZXh0cmFjdFJlZnMgfSBmcm9tIFwiLi9yZWZzRXh0cmFjdG9yXCJcblxuLyoqXG4gKiBAcGFyYW0gcmVuZGVyQ2xhaW1zIHJlbmRlckNsYWltcyB0byBzb3J0XG4gKiBAcGFyYW0ga2luZHMga2luZHMgdG8gZ2V0IGZyb20gcmVuZGVyQ2xhaW1zXG4gKiBAcmV0dXJucyByZW5kZXJDbGFpbXMgd2l0aCBvbmx5IHRoZSBraW5kcyBzcGVjaWZpZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRSZW5kZXJDbGFpbXNCeUtpbmQocmVuZGVyQ2xhaW1zOiBSZW5kZXJDbGFpbXMsIGtpbmRzOiBzdHJpbmdbXSk6IFJlbmRlckNsYWltcyB7XG5cbiAgbGV0IHJlc3VsdDogUmVuZGVyQ2xhaW1zID0ge31cblxuICBmb3IgKGNvbnN0IGtpbmQgb2Yga2luZHMpIHtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIHJlbmRlckNsYWltcykge1xuXG4gICAgICAgIGlmKChyZW5kZXJDbGFpbXNba2V5IGFzIFJlbmRlckNsYWltS2V5XSBhcyBhbnkpLmNsYWltLmtpbmQgPT09IGtpbmQpIHtcblxuICAgICAgICAgICAgcmVzdWx0W2tleSBhcyBSZW5kZXJDbGFpbUtleV0gPSByZW5kZXJDbGFpbXNba2V5IGFzIFJlbmRlckNsYWltS2V5XVxuXG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHJlc3VsdCA9IHNvcnRTZWxmS2luZFJlZnMocmVzdWx0LCBraW5kKVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxuXG59XG5cblxuZnVuY3Rpb24gc29ydFNlbGZLaW5kUmVmcyhyZW5kZXJDbGFpbXM6IFJlbmRlckNsYWltcywga2luZDpzdHJpbmcpIHtcbiAgXG4gICAgaWYoIWhhc1NlbGZSZWZzKGtpbmQpKSB7XG5cbiAgICAgIHJldHVybiByZW5kZXJDbGFpbXNcblxuICAgIH1cblxuICAgIGNvbnN0IG5ld1JlbmRlckNsYWltczogUmVuZGVyQ2xhaW1zID0ge31cblxuICAgIGNvbnN0IGRhdGE6IGFueSA9IGV4dHJhY3RSZWZzKHJlbmRlckNsYWltcywga2luZClcblxuICAgIGNvbnN0IG9yZGVyZWQ6IGFueVtdID0gW107XG4gICAgXG4gICAgY29uc3QgdmlzaXRpbmc6IGFueVtdID0gW107XG4gICAgXG4gICAgY29uc3QgdmlzaXRlZDogYW55W10gPSBbXTtcbiAgXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZGF0YSkpIHtcbiAgICBcbiAgICAgIGlmICghdmlzaXRlZC5maW5kKG9iaiA9PiBvYmoubmFtZSA9PT0ga2V5KSkge1xuICAgIFxuICAgICAgICBzb3J0UmVmcyhkYXRhLCBkYXRhW2tleV0sIG9yZGVyZWQsIHZpc2l0aW5nLCB2aXNpdGVkKTtcbiAgICBcbiAgICAgIH1cbiAgICAgIFxuICAgIH1cbiAgICBcbiAgICBmb3IgKGNvbnN0IGNyIG9mIG9yZGVyZWQpIHtcbiAgICBcbiAgICAgIG5ld1JlbmRlckNsYWltc1tjci5uYW1lXSA9IHJlbmRlckNsYWltc1tjci5uYW1lXVxuICAgIFxuICAgIH1cblxuICAgIHJldHVybiBuZXdSZW5kZXJDbGFpbXNcblxuICB9XG4gIFxuICBmdW5jdGlvbiBzb3J0UmVmcyhkYXRhOiBhbnksIGNsYWltOiBhbnksIG9yZGVyZWQ6IGFueVtdID0gW10sIHZpc2l0aW5nOiBhbnlbXSA9IFtdLCB2aXNpdGVkOiBhbnlbXSA9IFtdKSB7XG5cbiAgICBpZiAodmlzaXRpbmcuZmluZChvYmogPT4gb2JqLm5hbWUgPT09IGNsYWltLm5hbWUpKSB7XG4gICAgXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENpcmN1bGFyIGRlcGVuZGVuY3kgZGV0ZWN0ZWQgZm9yIFwiJHtjbGFpbS5uYW1lfVwiYCk7XG4gICAgXG4gICAgfVxuICBcbiAgICBpZiAoIXZpc2l0ZWQuZmluZChvYmogPT4gb2JqLm5hbWUgPT09IGNsYWltLm5hbWUpKSB7XG4gICAgICBcbiAgICAgIHZpc2l0aW5nLnB1c2goY2xhaW0pO1xuICBcbiAgICAgIGlmIChjbGFpbS5yZWZzKSB7XG4gIFxuICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiBjbGFpbS5yZWZzKSB7XG4gICAgICAgICBcbiAgICAgICAgICBjb25zdCByZWZlcmVuY2VkT2JqZWN0ID0gZGF0YVtyZWZdO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmICghcmVmZXJlbmNlZE9iamVjdCkge1xuICBcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIFwiJHtyZWZ9XCIgZG9lcyBub3QgZXhpc3QgZm9yIFwiJHtjbGFpbS5uYW1lfVwiYCk7XG4gICAgICAgICAgXG4gICAgICAgICAgfVxuICBcbiAgICAgICAgICBzb3J0UmVmcyhkYXRhLCByZWZlcmVuY2VkT2JqZWN0LCBvcmRlcmVkLCB2aXNpdGluZywgdmlzaXRlZCk7XG4gICAgICBcbiAgICAgICAgfVxuICAgICAgXG4gICAgICB9XG4gIFxuICAgICAgdmlzaXRlZC5wdXNoKHZpc2l0aW5nLnBvcCgpKTtcbiAgXG4gICAgICBvcmRlcmVkLnB1c2goY2xhaW0pO1xuICAgIFxuICAgIH1cbiAgXG4gIH1cblxuXG4gIGZ1bmN0aW9uIGhhc1NlbGZSZWZzKGtpbmQ6IHN0cmluZyl7XG5cbiAgICByZXR1cm4gW1wiVEZXb3Jrc3BhY2VDbGFpbVwiLCBcIkdyb3VwQ2xhaW1cIl0uaW5jbHVkZXMoa2luZClcblxuICB9XG4iXX0=
|
|
235479
235543
|
|
|
235480
235544
|
/***/ }),
|
|
235481
235545
|
|
|
@@ -238522,12 +238586,13 @@ class CollectionMixins {
|
|
|
238522
238586
|
if (filters.length === 0)
|
|
238523
238587
|
return elementList;
|
|
238524
238588
|
if (this.IS_FILTER_BY_NAME_SET(filters, kind)) {
|
|
238525
|
-
this.FILTER_BY_NAME_APPLY(filters, kind, (names) => {
|
|
238526
|
-
|
|
238589
|
+
return this.FILTER_BY_NAME_APPLY(filters, kind, (names) => {
|
|
238590
|
+
const result = elementList.filter((el) => names.indexOf(el) !== -1);
|
|
238591
|
+
return result;
|
|
238527
238592
|
});
|
|
238528
238593
|
}
|
|
238529
238594
|
if (this.IS_FILTER_BY_REGEXP_SET(filters, kind)) {
|
|
238530
|
-
this.FILTER_BY_REGEXP_APPLY(filters, kind, (nameRegExp) => {
|
|
238595
|
+
return this.FILTER_BY_REGEXP_APPLY(filters, kind, (nameRegExp) => {
|
|
238531
238596
|
return elementList.filter((el) => nameRegExp.test(el));
|
|
238532
238597
|
});
|
|
238533
238598
|
}
|
|
@@ -238626,6 +238691,7 @@ var CollectionFilterTypes;
|
|
|
238626
238691
|
// gh-groups,NAME=foo
|
|
238627
238692
|
// gh-repo,REGEXP=foo*
|
|
238628
238693
|
// gh-members,FUNCTION=fName
|
|
238694
|
+
// gh-repo,SKIP=SKIP
|
|
238629
238695
|
const FILTER_REG = new RegExp(/([\-\w]+)\,(\w+)\=(.+)/);
|
|
238630
238696
|
function filtersBuilder(args, functions) {
|
|
238631
238697
|
return args.map((arg) => {
|
|
@@ -238633,7 +238699,7 @@ function filtersBuilder(args, functions) {
|
|
|
238633
238699
|
throw `Filters builder: "${arg}" is not a filter or incorrect format`;
|
|
238634
238700
|
}
|
|
238635
238701
|
else {
|
|
238636
|
-
const [kind, type, value] = FILTER_REG.exec(arg) || ["", "", ""];
|
|
238702
|
+
const [_, kind, type, value] = FILTER_REG.exec(arg) || ["", "", ""];
|
|
238637
238703
|
return {
|
|
238638
238704
|
type: type,
|
|
238639
238705
|
kind,
|
|
@@ -238648,7 +238714,6 @@ exports.filtersBuilder = filtersBuilder;
|
|
|
238648
238714
|
function compileReg(value) {
|
|
238649
238715
|
return new RegExp(value);
|
|
238650
238716
|
}
|
|
238651
|
-
// function to filter a list of elem
|
|
238652
238717
|
|
|
238653
238718
|
|
|
238654
238719
|
/***/ }),
|
|
@@ -238726,6 +238791,15 @@ class GroupGithubDecanter extends base_1.GithubDecanter {
|
|
|
238726
238791
|
path: "/providers",
|
|
238727
238792
|
});
|
|
238728
238793
|
}
|
|
238794
|
+
__decantParent() {
|
|
238795
|
+
if (this.data.groupDetails.parent) {
|
|
238796
|
+
this.__patchClaim({
|
|
238797
|
+
op: "add",
|
|
238798
|
+
value: `group:${this.data.groupDetails.parent.name}`,
|
|
238799
|
+
path: "/parent",
|
|
238800
|
+
});
|
|
238801
|
+
}
|
|
238802
|
+
}
|
|
238729
238803
|
async __gatherMembers() {
|
|
238730
238804
|
this.data["members"] = (await github_1.default.team.getTeamMembers(this.data.groupDetails.name, this.org)).map((member) => { return { name: member.login, role: member.role }; });
|
|
238731
238805
|
}
|
|
@@ -243820,14 +243894,11 @@ exports.runCDKTF = void 0;
|
|
|
243820
243894
|
const catalog_common_1 = __importDefault(__nccwpck_require__(74100));
|
|
243821
243895
|
const child_process_1 = __nccwpck_require__(32081);
|
|
243822
243896
|
const path = __importStar(__nccwpck_require__(71017));
|
|
243823
|
-
async function runCDKTF(entity, action, deps
|
|
243897
|
+
async function runCDKTF(entity, action, deps) {
|
|
243824
243898
|
// ! If we are into a compiled environmet, the folder must be set to current dir plus /provisioner because everything is on the same file at projects root
|
|
243825
243899
|
// ? Is there a better way to check compiled env than look for packages directory in path ?
|
|
243826
243900
|
let workDir = __dirname.split(path.sep).includes('packages') ? path.join(__dirname, '..') : path.join(__dirname, 'provisioner');
|
|
243827
|
-
isImport =
|
|
243828
|
-
isImport ??
|
|
243829
|
-
entity?.metadata?.annotations[catalog_common_1.default.generic.getFirestartrAnnotation("import")] ??
|
|
243830
|
-
false;
|
|
243901
|
+
const isImport = entity?.metadata?.annotations[catalog_common_1.default.generic.getFirestartrAnnotation("import")];
|
|
243831
243902
|
workDir = workDir.split("/dist")[0];
|
|
243832
243903
|
return new Promise((ok, ko) => {
|
|
243833
243904
|
const cdktfProcess = (0, child_process_1.spawn)("cdktf", [action, "--log-level", "DEBUG", "--auto-approve"], {
|
|
@@ -244442,8 +244513,7 @@ class Resource {
|
|
|
244442
244513
|
return this.get('main_artifact');
|
|
244443
244514
|
}
|
|
244444
244515
|
async synth() {
|
|
244445
|
-
|
|
244446
|
-
await (0, cdktf_1.runCDKTF)(this.get('main_artifact'), "synth", this.get('deps'), isImport);
|
|
244516
|
+
await (0, cdktf_1.runCDKTF)(this.get('main_artifact'), "synth", this.get('deps'));
|
|
244447
244517
|
}
|
|
244448
244518
|
log(msg) {
|
|
244449
244519
|
this.logFn(msg);
|