UNPKG

projen

Version:

CDK for software projects

673 lines • 169 kB
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PnpmWorkspaceYamlSchemaVersioningChangelogStorage = exports.PnpmWorkspaceYamlSchemaVersioningMaxBump = exports.PnpmWorkspaceYamlSchemaHoistingLimits = exports.PnpmWorkspaceYamlSchemaRuntimeOnFail = exports.PnpmWorkspaceYamlSchemaPmOnFail = exports.PnpmWorkspaceYamlSchemaAuditLevel = exports.PnpmWorkspaceYamlSchemaTrustPolicy = exports.PnpmWorkspaceYamlSchemaResolutionMode = exports.PnpmWorkspaceYamlSchemaSavePrefix = exports.PnpmWorkspaceYamlSchemaSaveWorkspaceProtocol = exports.PnpmWorkspaceYamlSchemaLinkWorkspacePackages = exports.PnpmWorkspaceYamlSchemaReporter = exports.PnpmWorkspaceYamlSchemaLoglevel = exports.PnpmWorkspaceYamlSchemaColor = exports.PnpmWorkspaceYamlSchemaPackageImportMethod = exports.PnpmWorkspaceYamlSchemaVirtualStoreType = exports.PnpmWorkspaceYamlSchemaNodePackageMapType = exports.PnpmWorkspaceYamlSchemaNodeLinker = exports.PnpmWorkspaceYamlSchemaCatalogMode = void 0;
exports.toJson_PnpmWorkspaceYamlSchema = toJson_PnpmWorkspaceYamlSchema;
exports.toJson_PnpmWorkspaceYamlSchemaPeerDependencyRules = toJson_PnpmWorkspaceYamlSchemaPeerDependencyRules;
exports.toJson_PnpmWorkspaceYamlSchemaUpdate = toJson_PnpmWorkspaceYamlSchemaUpdate;
exports.toJson_PnpmWorkspaceYamlSchemaUpdateConfig = toJson_PnpmWorkspaceYamlSchemaUpdateConfig;
exports.toJson_PnpmWorkspaceYamlSchemaAudit = toJson_PnpmWorkspaceYamlSchemaAudit;
exports.toJson_PnpmWorkspaceYamlSchemaAuditConfig = toJson_PnpmWorkspaceYamlSchemaAuditConfig;
exports.toJson_PnpmWorkspaceYamlSchemaSupportedArchitectures = toJson_PnpmWorkspaceYamlSchemaSupportedArchitectures;
exports.toJson_PnpmWorkspaceYamlSchemaExecutionEnv = toJson_PnpmWorkspaceYamlSchemaExecutionEnv;
exports.toJson_PnpmWorkspaceYamlSchemaTasks = toJson_PnpmWorkspaceYamlSchemaTasks;
exports.toJson_PnpmWorkspaceYamlSchemaVersioning = toJson_PnpmWorkspaceYamlSchemaVersioning;
exports.toJson_PnpmWorkspaceYamlSchemaVersioningEpics = toJson_PnpmWorkspaceYamlSchemaVersioningEpics;
exports.toJson_PnpmWorkspaceYamlSchemaVersioningChangelog = toJson_PnpmWorkspaceYamlSchemaVersioningChangelog;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
/**
 * Converts an object of type 'PnpmWorkspaceYamlSchema' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_PnpmWorkspaceYamlSchema(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'packages': obj.packages?.map(y => y),
        'catalog': ((obj.catalog) === undefined) ? undefined : (Object.entries(obj.catalog).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})),
        'catalogs': ((obj.catalogs) === undefined) ? undefined : (Object.entries(obj.catalogs).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: ((i[1]) === undefined) ? undefined : (Object.entries(i[1]).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})) }), {})),
        'catalogMode': obj.catalogMode,
        'cleanupUnusedCatalogs': obj.cleanupUnusedCatalogs,
        'catalogPrune': obj.catalogPrune,
        'onlyBuiltDependencies': obj.onlyBuiltDependencies?.map(y => y),
        'overrides': obj.overrides,
        'packageExtensions': obj.packageExtensions,
        'packageConfigs': obj.packageConfigs,
        'peerDependencyRules': toJson_PnpmWorkspaceYamlSchemaPeerDependencyRules(obj.peerDependencyRules),
        'neverBuiltDependencies': obj.neverBuiltDependencies?.map(y => y),
        'dangerouslyAllowAllBuilds': obj.dangerouslyAllowAllBuilds,
        'onlyBuiltDependenciesFile': obj.onlyBuiltDependenciesFile,
        'ignoredBuiltDependencies': obj.ignoredBuiltDependencies?.map(y => y),
        'allowedDeprecatedVersions': ((obj.allowedDeprecatedVersions) === undefined) ? undefined : (Object.entries(obj.allowedDeprecatedVersions).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})),
        'patchedDependencies': ((obj.patchedDependencies) === undefined) ? undefined : (Object.entries(obj.patchedDependencies).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})),
        'allowUnusedPatches': obj.allowUnusedPatches,
        'allowNonAppliedPatches': obj.allowNonAppliedPatches,
        'ignorePatchFailures': obj.ignorePatchFailures,
        'update': toJson_PnpmWorkspaceYamlSchemaUpdate(obj.update),
        'updateConfig': toJson_PnpmWorkspaceYamlSchemaUpdateConfig(obj.updateConfig),
        'configDependencies': obj.configDependencies,
        'audit': toJson_PnpmWorkspaceYamlSchemaAudit(obj.audit),
        'auditConfig': toJson_PnpmWorkspaceYamlSchemaAuditConfig(obj.auditConfig),
        'requiredScripts': obj.requiredScripts?.map(y => y),
        'supportedArchitectures': toJson_PnpmWorkspaceYamlSchemaSupportedArchitectures(obj.supportedArchitectures),
        'ignoredOptionalDependencies': obj.ignoredOptionalDependencies?.map(y => y),
        'executionEnv': toJson_PnpmWorkspaceYamlSchemaExecutionEnv(obj.executionEnv),
        'hoist': obj.hoist,
        'hoistWorkspacePackages': obj.hoistWorkspacePackages,
        'hoistPattern': obj.hoistPattern?.map(y => y),
        'publicHoistPattern': obj.publicHoistPattern?.map(y => y),
        'shamefullyHoist': obj.shamefullyHoist,
        'modulesDir': obj.modulesDir,
        'nodeLinker': obj.nodeLinker,
        'nodeExperimentalPackageMap': obj.nodeExperimentalPackageMap,
        'nodePackageMapType': obj.nodePackageMapType,
        'symlink': obj.symlink,
        'enableModulesDir': obj.enableModulesDir,
        'virtualStoreDir': obj.virtualStoreDir,
        'virtualStoreDirMaxLength': obj.virtualStoreDirMaxLength,
        'virtualStoreType': obj.virtualStoreType,
        'packageImportMethod': obj.packageImportMethod,
        'modulesCacheMaxAge': obj.modulesCacheMaxAge,
        'dlxCacheMaxAge': obj.dlxCacheMaxAge,
        'storeDir': obj.storeDir,
        'verifyStoreIntegrity': obj.verifyStoreIntegrity,
        'useRunningStoreServer': obj.useRunningStoreServer,
        'frozenStore': obj.frozenStore,
        'strictStorePkgContentCheck': obj.strictStorePkgContentCheck,
        'enableGlobalVirtualStore': obj.enableGlobalVirtualStore,
        'lockfile': obj.lockfile,
        'preferFrozenLockfile': obj.preferFrozenLockfile,
        'lockfileIncludeTarballUrl': obj.lockfileIncludeTarballUrl,
        'gitBranchLockfile': obj.gitBranchLockfile,
        'mergeGitBranchLockfilesBranchPattern': obj.mergeGitBranchLockfilesBranchPattern?.map(y => y),
        'peersSuffixMaxLength': obj.peersSuffixMaxLength,
        'registry': obj.registry,
        'ca': obj.ca,
        'cafile': obj.cafile,
        'cert': obj.cert,
        'key': obj.key,
        'gitShallowHosts': obj.gitShallowHosts?.map(y => y),
        'httpsProxy': obj.httpsProxy,
        'httpProxy': obj.httpProxy,
        'proxy': obj.proxy,
        'localAddress': obj.localAddress,
        'maxsockets': obj.maxsockets,
        'noProxy': obj.noProxy,
        'strictSsl': obj.strictSsl,
        'networkConcurrency': obj.networkConcurrency,
        'fetchRetries': obj.fetchRetries,
        'fetchRetryFactor': obj.fetchRetryFactor,
        'fetchRetryMintimeout': obj.fetchRetryMintimeout,
        'fetchRetryMaxtimeout': obj.fetchRetryMaxtimeout,
        'fetchTimeout': obj.fetchTimeout,
        'fetchWarnTimeoutMs': obj.fetchWarnTimeoutMs,
        'fetchMinSpeedKiBps': obj.fetchMinSpeedKiBps,
        'autoInstallPeers': obj.autoInstallPeers,
        'dedupePeerDependents': obj.dedupePeerDependents,
        'strictPeerDependencies': obj.strictPeerDependencies,
        'resolvePeersFromWorkspaceRoot': obj.resolvePeersFromWorkspaceRoot,
        'color': obj.color,
        'loglevel': obj.loglevel,
        'reporter': obj.reporter,
        'useBetaCli': obj.useBetaCli,
        'recursiveInstall': obj.recursiveInstall,
        'engineStrict': obj.engineStrict,
        'npmPath': obj.npmPath,
        'packageManagerStrict': obj.packageManagerStrict,
        'packageManagerStrictVersion': obj.packageManagerStrictVersion,
        'managePackageManagerVersions': obj.managePackageManagerVersions,
        'ignoreScripts': obj.ignoreScripts,
        'ignoreDepScripts': obj.ignoreDepScripts,
        'childConcurrency': obj.childConcurrency,
        'sideEffectsCache': obj.sideEffectsCache,
        'sideEffectsCacheReadonly': obj.sideEffectsCacheReadonly,
        'unsafePerm': obj.unsafePerm,
        'nodeOptions': obj.nodeOptions,
        'verifyDepsBeforeRun': obj.verifyDepsBeforeRun,
        'strictDepBuilds': obj.strictDepBuilds,
        'useNodeVersion': obj.useNodeVersion,
        'nodeVersion': obj.nodeVersion,
        'linkWorkspacePackages': obj.linkWorkspacePackages?.value,
        'injectWorkspacePackages': obj.injectWorkspacePackages,
        'syncInjectedDepsAfterScripts': obj.syncInjectedDepsAfterScripts?.map(y => y),
        'preferWorkspacePackages': obj.preferWorkspacePackages,
        'sharedWorkspaceLockfile': obj.sharedWorkspaceLockfile,
        'saveWorkspaceProtocol': obj.saveWorkspaceProtocol?.value,
        'includeWorkspaceRoot': obj.includeWorkspaceRoot,
        'ignoreWorkspaceCycles': obj.ignoreWorkspaceCycles,
        'ignoreWorkspaceRootCheck': obj.ignoreWorkspaceRootCheck,
        'disallowWorkspaceCycles': obj.disallowWorkspaceCycles,
        'workspaceConcurrency': obj.workspaceConcurrency,
        'tasks': ((obj.tasks) === undefined) ? undefined : (Object.entries(obj.tasks).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: toJson_PnpmWorkspaceYamlSchemaTasks(i[1]) }), {})),
        'failIfNoMatch': obj.failIfNoMatch,
        'forceLegacyDeploy': obj.forceLegacyDeploy,
        'savePrefix': obj.savePrefix,
        'tag': obj.tag,
        'globalDir': obj.globalDir,
        'globalBinDir': obj.globalBinDir,
        'globalShims': obj.globalShims,
        'stateDir': obj.stateDir,
        'cacheDir': obj.cacheDir,
        'useStderr': obj.useStderr,
        'updateNotifier': obj.updateNotifier,
        'ci': obj.ci,
        'preferSymlinkedExecutables': obj.preferSymlinkedExecutables,
        'ignoreCompatibilityDb': obj.ignoreCompatibilityDb,
        'resolutionMode': obj.resolutionMode,
        'registrySupportsTimeField': obj.registrySupportsTimeField,
        'extendNodePath': obj.extendNodePath,
        'deployAllFiles': obj.deployAllFiles,
        'dedupeDirectDeps': obj.dedupeDirectDeps,
        'dedupeInjectedDeps': obj.dedupeInjectedDeps,
        'optimisticRepeatInstall': obj.optimisticRepeatInstall,
        'gitChecks': obj.gitChecks,
        'embedReadme': obj.embedReadme,
        'publishBranch': obj.publishBranch,
        'versioning': toJson_PnpmWorkspaceYamlSchemaVersioning(obj.versioning),
        'provenance': obj.provenance,
        'pnpmfile': obj.pnpmfile,
        'globalPnpmfile': obj.globalPnpmfile,
        'ignorePnpmfile': obj.ignorePnpmfile,
        'patchesDir': obj.patchesDir,
        'enablePrePostScripts': obj.enablePrePostScripts,
        'scriptShell': obj.scriptShell,
        'shellEmulator': obj.shellEmulator,
        'saveExact': obj.saveExact,
        'minimumReleaseAge': obj.minimumReleaseAge,
        'minimumReleaseAgeExclude': obj.minimumReleaseAgeExclude?.map(y => y),
        'minimumReleaseAgeStrict': obj.minimumReleaseAgeStrict,
        'minimumReleaseAgeExcludePrune': obj.minimumReleaseAgeExcludePrune,
        'preferOffline': obj.preferOffline,
        'trustPolicy': obj.trustPolicy,
        'trustPolicyExclude': obj.trustPolicyExclude?.map(y => y),
        'allowBuilds': obj.allowBuilds,
        'blockExoticSubdeps': obj.blockExoticSubdeps,
        'trustPolicyIgnoreAfter': obj.trustPolicyIgnoreAfter,
        'auditLevel': obj.auditLevel,
        'dedupePeers': obj.dedupePeers,
        'npmrcAuthFile': obj.npmrcAuthFile,
        'minimumReleaseAgeIgnoreMissingTime': obj.minimumReleaseAgeIgnoreMissingTime,
        'registries': ((obj.registries) === undefined) ? undefined : (Object.entries(obj.registries).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})),
        'namedRegistries': ((obj.namedRegistries) === undefined) ? undefined : (Object.entries(obj.namedRegistries).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})),
        'virtualStoreOnly': obj.virtualStoreOnly,
        'pmOnFail': obj.pmOnFail,
        'runtimeOnFail': obj.runtimeOnFail,
        'nodeDownloadMirrors': ((obj.nodeDownloadMirrors) === undefined) ? undefined : (Object.entries(obj.nodeDownloadMirrors).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})),
        'trustLockfile': obj.trustLockfile,
        'hoistingLimits': obj.hoistingLimits,
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
/**
 * Controlling if and how dependencies are added to the default catalog
 *
 * @schema PnpmWorkspaceYamlSchemaCatalogMode
 */
var PnpmWorkspaceYamlSchemaCatalogMode;
(function (PnpmWorkspaceYamlSchemaCatalogMode) {
    /** strict */
    PnpmWorkspaceYamlSchemaCatalogMode["STRICT"] = "strict";
    /** prefer */
    PnpmWorkspaceYamlSchemaCatalogMode["PREFER"] = "prefer";
    /** manual */
    PnpmWorkspaceYamlSchemaCatalogMode["MANUAL"] = "manual";
})(PnpmWorkspaceYamlSchemaCatalogMode || (exports.PnpmWorkspaceYamlSchemaCatalogMode = PnpmWorkspaceYamlSchemaCatalogMode = {}));
/**
 * Converts an object of type 'PnpmWorkspaceYamlSchemaPeerDependencyRules' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_PnpmWorkspaceYamlSchemaPeerDependencyRules(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'ignoreMissing': obj.ignoreMissing?.map(y => y),
        'allowedVersions': obj.allowedVersions,
        'allowAny': obj.allowAny?.map(y => y),
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/**
 * Converts an object of type 'PnpmWorkspaceYamlSchemaUpdate' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_PnpmWorkspaceYamlSchemaUpdate(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'ignoreDeps': obj.ignoreDeps?.map(y => y),
        'changeset': obj.changeset,
        'githubActions': obj.githubActions,
        'githubActionsServer': obj.githubActionsServer,
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/**
 * Converts an object of type 'PnpmWorkspaceYamlSchemaUpdateConfig' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_PnpmWorkspaceYamlSchemaUpdateConfig(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'ignoreDependencies': obj.ignoreDependencies?.map(y => y),
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/**
 * Converts an object of type 'PnpmWorkspaceYamlSchemaAudit' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_PnpmWorkspaceYamlSchemaAudit(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'level': obj.level,
        'ignore': obj.ignore?.map(y => y),
        'ignorePrune': obj.ignorePrune,
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/**
 * Converts an object of type 'PnpmWorkspaceYamlSchemaAuditConfig' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_PnpmWorkspaceYamlSchemaAuditConfig(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'ignoreCves': obj.ignoreCves?.map(y => y),
        'ignoreGhsas': obj.ignoreGhsas?.map(y => y),
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/**
 * Converts an object of type 'PnpmWorkspaceYamlSchemaSupportedArchitectures' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_PnpmWorkspaceYamlSchemaSupportedArchitectures(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'os': obj.os?.map(y => y),
        'cpu': obj.cpu?.map(y => y),
        'libc': obj.libc?.map(y => y),
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/**
 * Converts an object of type 'PnpmWorkspaceYamlSchemaExecutionEnv' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_PnpmWorkspaceYamlSchemaExecutionEnv(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'nodeVersion': obj.nodeVersion,
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
/**
 * Defines what linker should be used for installing Node packages.
 *
 * @schema PnpmWorkspaceYamlSchemaNodeLinker
 */
var PnpmWorkspaceYamlSchemaNodeLinker;
(function (PnpmWorkspaceYamlSchemaNodeLinker) {
    /** isolated */
    PnpmWorkspaceYamlSchemaNodeLinker["ISOLATED"] = "isolated";
    /** hoisted */
    PnpmWorkspaceYamlSchemaNodeLinker["HOISTED"] = "hoisted";
    /** pnp */
    PnpmWorkspaceYamlSchemaNodeLinker["PNP"] = "pnp";
})(PnpmWorkspaceYamlSchemaNodeLinker || (exports.PnpmWorkspaceYamlSchemaNodeLinker = PnpmWorkspaceYamlSchemaNodeLinker = {}));
/**
 * Controls how node_modules/.package-map.json is generated. standard - only declared dependencies are available through the package map. loose - also maps packages that are reachable through the installed node_modules layout, which can allow undeclared hoisted dependencies to resolve.
 *
 * @schema PnpmWorkspaceYamlSchemaNodePackageMapType
 */
var PnpmWorkspaceYamlSchemaNodePackageMapType;
(function (PnpmWorkspaceYamlSchemaNodePackageMapType) {
    /** standard */
    PnpmWorkspaceYamlSchemaNodePackageMapType["STANDARD"] = "standard";
    /** loose */
    PnpmWorkspaceYamlSchemaNodePackageMapType["LOOSE"] = "loose";
})(PnpmWorkspaceYamlSchemaNodePackageMapType || (exports.PnpmWorkspaceYamlSchemaNodePackageMapType = PnpmWorkspaceYamlSchemaNodePackageMapType = {}));
/**
 * Determines where the virtual store is located. When set to project, a separate virtual store is created in each project's node_modules/.pnpm. When set to global, a single store is shared by every project on the machine, with each project's node_modules holding only symlinks into it. Added in pnpm v11.23.0.
 *
 * @schema PnpmWorkspaceYamlSchemaVirtualStoreType
 */
var PnpmWorkspaceYamlSchemaVirtualStoreType;
(function (PnpmWorkspaceYamlSchemaVirtualStoreType) {
    /** project */
    PnpmWorkspaceYamlSchemaVirtualStoreType["PROJECT"] = "project";
    /** global */
    PnpmWorkspaceYamlSchemaVirtualStoreType["GLOBAL"] = "global";
})(PnpmWorkspaceYamlSchemaVirtualStoreType || (exports.PnpmWorkspaceYamlSchemaVirtualStoreType = PnpmWorkspaceYamlSchemaVirtualStoreType = {}));
/**
 * Controls the way packages are imported from the store (if you want to disable symlinks inside node_modules, then you need to change the nodeLinker setting, not this one).
 *
 * @schema PnpmWorkspaceYamlSchemaPackageImportMethod
 */
var PnpmWorkspaceYamlSchemaPackageImportMethod;
(function (PnpmWorkspaceYamlSchemaPackageImportMethod) {
    /** auto */
    PnpmWorkspaceYamlSchemaPackageImportMethod["AUTO"] = "auto";
    /** hardlink */
    PnpmWorkspaceYamlSchemaPackageImportMethod["HARDLINK"] = "hardlink";
    /** copy */
    PnpmWorkspaceYamlSchemaPackageImportMethod["COPY"] = "copy";
    /** clone */
    PnpmWorkspaceYamlSchemaPackageImportMethod["CLONE"] = "clone";
    /** clone-or-copy */
    PnpmWorkspaceYamlSchemaPackageImportMethod["CLONE_HYPHEN_OR_HYPHEN_COPY"] = "clone-or-copy";
})(PnpmWorkspaceYamlSchemaPackageImportMethod || (exports.PnpmWorkspaceYamlSchemaPackageImportMethod = PnpmWorkspaceYamlSchemaPackageImportMethod = {}));
/**
 * Controls colors in the output.
 *
 * @schema PnpmWorkspaceYamlSchemaColor
 */
var PnpmWorkspaceYamlSchemaColor;
(function (PnpmWorkspaceYamlSchemaColor) {
    /** always */
    PnpmWorkspaceYamlSchemaColor["ALWAYS"] = "always";
    /** auto */
    PnpmWorkspaceYamlSchemaColor["AUTO"] = "auto";
    /** never */
    PnpmWorkspaceYamlSchemaColor["NEVER"] = "never";
})(PnpmWorkspaceYamlSchemaColor || (exports.PnpmWorkspaceYamlSchemaColor = PnpmWorkspaceYamlSchemaColor = {}));
/**
 * Any logs at or higher than the given level will be shown.
 *
 * @schema PnpmWorkspaceYamlSchemaLoglevel
 */
var PnpmWorkspaceYamlSchemaLoglevel;
(function (PnpmWorkspaceYamlSchemaLoglevel) {
    /** debug */
    PnpmWorkspaceYamlSchemaLoglevel["DEBUG"] = "debug";
    /** info */
    PnpmWorkspaceYamlSchemaLoglevel["INFO"] = "info";
    /** warn */
    PnpmWorkspaceYamlSchemaLoglevel["WARN"] = "warn";
    /** error */
    PnpmWorkspaceYamlSchemaLoglevel["ERROR"] = "error";
})(PnpmWorkspaceYamlSchemaLoglevel || (exports.PnpmWorkspaceYamlSchemaLoglevel = PnpmWorkspaceYamlSchemaLoglevel = {}));
/**
 * Allows you to customize the output style of the logs.
 * https://pnpm.io/cli/install#--reportername
 *
 * @schema PnpmWorkspaceYamlSchemaReporter
 */
var PnpmWorkspaceYamlSchemaReporter;
(function (PnpmWorkspaceYamlSchemaReporter) {
    /** silent */
    PnpmWorkspaceYamlSchemaReporter["SILENT"] = "silent";
    /** default */
    PnpmWorkspaceYamlSchemaReporter["DEFAULT"] = "default";
    /** append-only */
    PnpmWorkspaceYamlSchemaReporter["APPEND_HYPHEN_ONLY"] = "append-only";
    /** ndjson */
    PnpmWorkspaceYamlSchemaReporter["NDJSON"] = "ndjson";
})(PnpmWorkspaceYamlSchemaReporter || (exports.PnpmWorkspaceYamlSchemaReporter = PnpmWorkspaceYamlSchemaReporter = {}));
/**
 * If this is enabled, locally available packages are linked to node_modules instead of being downloaded from the registry.
 *
 * @schema PnpmWorkspaceYamlSchemaLinkWorkspacePackages
 */
class PnpmWorkspaceYamlSchemaLinkWorkspacePackages {
    value;
    static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.PnpmWorkspaceYamlSchemaLinkWorkspacePackages", version: "0.104.8" };
    static fromBoolean(value) {
        return new PnpmWorkspaceYamlSchemaLinkWorkspacePackages(value);
    }
    static fromString(value) {
        return new PnpmWorkspaceYamlSchemaLinkWorkspacePackages(value);
    }
    constructor(value) {
        this.value = value;
    }
}
exports.PnpmWorkspaceYamlSchemaLinkWorkspacePackages = PnpmWorkspaceYamlSchemaLinkWorkspacePackages;
/**
 * This setting controls how dependencies that are linked from the workspace are added to package.json.
 *
 * @schema PnpmWorkspaceYamlSchemaSaveWorkspaceProtocol
 */
class PnpmWorkspaceYamlSchemaSaveWorkspaceProtocol {
    value;
    static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.PnpmWorkspaceYamlSchemaSaveWorkspaceProtocol", version: "0.104.8" };
    static fromBoolean(value) {
        return new PnpmWorkspaceYamlSchemaSaveWorkspaceProtocol(value);
    }
    static fromString(value) {
        return new PnpmWorkspaceYamlSchemaSaveWorkspaceProtocol(value);
    }
    constructor(value) {
        this.value = value;
    }
}
exports.PnpmWorkspaceYamlSchemaSaveWorkspaceProtocol = PnpmWorkspaceYamlSchemaSaveWorkspaceProtocol;
/**
 * Converts an object of type 'PnpmWorkspaceYamlSchemaTasks' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_PnpmWorkspaceYamlSchemaTasks(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'dependsOn': obj.dependsOn?.map(y => y),
        'concurrency': obj.concurrency,
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
/**
 * Configure how versions of packages installed to a package.json file get prefixed.
 *
 * @schema PnpmWorkspaceYamlSchemaSavePrefix
 */
var PnpmWorkspaceYamlSchemaSavePrefix;
(function (PnpmWorkspaceYamlSchemaSavePrefix) {
    /** ^ */
    PnpmWorkspaceYamlSchemaSavePrefix["VALUE_CARAT"] = "^";
    /** ~ */
    PnpmWorkspaceYamlSchemaSavePrefix["VALUE_TILDE"] = "~";
    /** = */
    PnpmWorkspaceYamlSchemaSavePrefix["VALUE_EQUALS"] = "=";
})(PnpmWorkspaceYamlSchemaSavePrefix || (exports.PnpmWorkspaceYamlSchemaSavePrefix = PnpmWorkspaceYamlSchemaSavePrefix = {}));
/**
 * Determines how pnpm resolves dependencies, See https://pnpm.io/settings#resolutionmode
 *
 * @schema PnpmWorkspaceYamlSchemaResolutionMode
 */
var PnpmWorkspaceYamlSchemaResolutionMode;
(function (PnpmWorkspaceYamlSchemaResolutionMode) {
    /** highest */
    PnpmWorkspaceYamlSchemaResolutionMode["HIGHEST"] = "highest";
    /** time-based */
    PnpmWorkspaceYamlSchemaResolutionMode["TIME_HYPHEN_BASED"] = "time-based";
    /** lowest-direct */
    PnpmWorkspaceYamlSchemaResolutionMode["LOWEST_HYPHEN_DIRECT"] = "lowest-direct";
})(PnpmWorkspaceYamlSchemaResolutionMode || (exports.PnpmWorkspaceYamlSchemaResolutionMode = PnpmWorkspaceYamlSchemaResolutionMode = {}));
/**
 * Converts an object of type 'PnpmWorkspaceYamlSchemaVersioning' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_PnpmWorkspaceYamlSchemaVersioning(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'fixed': obj.fixed?.map(y => y?.map(y => y)),
        'ignore': obj.ignore?.map(y => y),
        'maxBump': obj.maxBump,
        'lanes': ((obj.lanes) === undefined) ? undefined : (Object.entries(obj.lanes).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})),
        'epics': obj.epics?.map(y => toJson_PnpmWorkspaceYamlSchemaVersioningEpics(y)),
        'changelog': toJson_PnpmWorkspaceYamlSchemaVersioningChangelog(obj.changelog),
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
/**
 * When set to no-downgrade, pnpm will fail if a package's trust level has decreased compared to previous releases. For example, if a package was previously published by a trusted publisher but now only has provenance or no trust evidence, installation will fail. This helps prevent installing potentially compromised versions.
 *
 * @schema PnpmWorkspaceYamlSchemaTrustPolicy
 */
var PnpmWorkspaceYamlSchemaTrustPolicy;
(function (PnpmWorkspaceYamlSchemaTrustPolicy) {
    /** off */
    PnpmWorkspaceYamlSchemaTrustPolicy["OFF"] = "off";
    /** no-downgrade */
    PnpmWorkspaceYamlSchemaTrustPolicy["NO_HYPHEN_DOWNGRADE"] = "no-downgrade";
})(PnpmWorkspaceYamlSchemaTrustPolicy || (exports.PnpmWorkspaceYamlSchemaTrustPolicy = PnpmWorkspaceYamlSchemaTrustPolicy = {}));
/**
 * Only print advisories with severity greater than or equal to this level.
 *
 * @schema PnpmWorkspaceYamlSchemaAuditLevel
 */
var PnpmWorkspaceYamlSchemaAuditLevel;
(function (PnpmWorkspaceYamlSchemaAuditLevel) {
    /** low */
    PnpmWorkspaceYamlSchemaAuditLevel["LOW"] = "low";
    /** moderate */
    PnpmWorkspaceYamlSchemaAuditLevel["MODERATE"] = "moderate";
    /** high */
    PnpmWorkspaceYamlSchemaAuditLevel["HIGH"] = "high";
    /** critical */
    PnpmWorkspaceYamlSchemaAuditLevel["CRITICAL"] = "critical";
})(PnpmWorkspaceYamlSchemaAuditLevel || (exports.PnpmWorkspaceYamlSchemaAuditLevel = PnpmWorkspaceYamlSchemaAuditLevel = {}));
/**
 * Overrides the `onFail` behavior of both the `packageManager` field and `devEngines.packageManager` when the running pnpm version does not match the declared one.
 *
 * @schema PnpmWorkspaceYamlSchemaPmOnFail
 */
var PnpmWorkspaceYamlSchemaPmOnFail;
(function (PnpmWorkspaceYamlSchemaPmOnFail) {
    /** download */
    PnpmWorkspaceYamlSchemaPmOnFail["DOWNLOAD"] = "download";
    /** error */
    PnpmWorkspaceYamlSchemaPmOnFail["ERROR"] = "error";
    /** warn */
    PnpmWorkspaceYamlSchemaPmOnFail["WARN"] = "warn";
    /** ignore */
    PnpmWorkspaceYamlSchemaPmOnFail["IGNORE"] = "ignore";
})(PnpmWorkspaceYamlSchemaPmOnFail || (exports.PnpmWorkspaceYamlSchemaPmOnFail = PnpmWorkspaceYamlSchemaPmOnFail = {}));
/**
 * Overrides the `onFail` field of `devEngines.runtime` (and `engines.runtime`) in the root project's `package.json`. This is useful when you want a different local behavior than what is written in the manifest — for instance, forcing pnpm to download the declared runtime even when the manifest sets `onFail: "warn"`.
 *
 * @schema PnpmWorkspaceYamlSchemaRuntimeOnFail
 */
var PnpmWorkspaceYamlSchemaRuntimeOnFail;
(function (PnpmWorkspaceYamlSchemaRuntimeOnFail) {
    /** download */
    PnpmWorkspaceYamlSchemaRuntimeOnFail["DOWNLOAD"] = "download";
    /** error */
    PnpmWorkspaceYamlSchemaRuntimeOnFail["ERROR"] = "error";
    /** warn */
    PnpmWorkspaceYamlSchemaRuntimeOnFail["WARN"] = "warn";
    /** ignore */
    PnpmWorkspaceYamlSchemaRuntimeOnFail["IGNORE"] = "ignore";
})(PnpmWorkspaceYamlSchemaRuntimeOnFail || (exports.PnpmWorkspaceYamlSchemaRuntimeOnFail = PnpmWorkspaceYamlSchemaRuntimeOnFail = {}));
/**
 * Added a new hoistingLimits setting for `nodeLinker: hoisted` installs, mirroring yarn's `nmHoistingLimits`. It accepts `none` (the default — hoist as far as possible), workspaces (hoist only as far as each workspace package), or dependencies (hoist only up to each workspace package's direct dependencies).
 *
 * @schema PnpmWorkspaceYamlSchemaHoistingLimits
 */
var PnpmWorkspaceYamlSchemaHoistingLimits;
(function (PnpmWorkspaceYamlSchemaHoistingLimits) {
    /** none */
    PnpmWorkspaceYamlSchemaHoistingLimits["NONE"] = "none";
    /** workspaces */
    PnpmWorkspaceYamlSchemaHoistingLimits["WORKSPACES"] = "workspaces";
    /** dependencies */
    PnpmWorkspaceYamlSchemaHoistingLimits["DEPENDENCIES"] = "dependencies";
})(PnpmWorkspaceYamlSchemaHoistingLimits || (exports.PnpmWorkspaceYamlSchemaHoistingLimits = PnpmWorkspaceYamlSchemaHoistingLimits = {}));
/**
 * Caps the bump that a release from the current checkout may apply, after dependent propagation and fixed-group resolution.
 *
 * @schema PnpmWorkspaceYamlSchemaVersioningMaxBump
 */
var PnpmWorkspaceYamlSchemaVersioningMaxBump;
(function (PnpmWorkspaceYamlSchemaVersioningMaxBump) {
    /** patch */
    PnpmWorkspaceYamlSchemaVersioningMaxBump["PATCH"] = "patch";
    /** minor */
    PnpmWorkspaceYamlSchemaVersioningMaxBump["MINOR"] = "minor";
    /** major */
    PnpmWorkspaceYamlSchemaVersioningMaxBump["MAJOR"] = "major";
})(PnpmWorkspaceYamlSchemaVersioningMaxBump || (exports.PnpmWorkspaceYamlSchemaVersioningMaxBump = PnpmWorkspaceYamlSchemaVersioningMaxBump = {}));
/**
 * Converts an object of type 'PnpmWorkspaceYamlSchemaVersioningEpics' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_PnpmWorkspaceYamlSchemaVersioningEpics(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'lead': obj.lead,
        'packages': obj.packages?.map(y => y),
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/**
 * Converts an object of type 'PnpmWorkspaceYamlSchemaVersioningChangelog' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_PnpmWorkspaceYamlSchemaVersioningChangelog(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'storage': obj.storage,
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
/**
 * Changelog storage mode. `registry` composes changelog entries at publish time, while `repository` commits CHANGELOG.md files in packages.
 *
 * @schema PnpmWorkspaceYamlSchemaVersioningChangelogStorage
 */
var PnpmWorkspaceYamlSchemaVersioningChangelogStorage;
(function (PnpmWorkspaceYamlSchemaVersioningChangelogStorage) {
    /** registry */
    PnpmWorkspaceYamlSchemaVersioningChangelogStorage["REGISTRY"] = "registry";
    /** repository */
    PnpmWorkspaceYamlSchemaVersioningChangelogStorage["REPOSITORY"] = "repository";
})(PnpmWorkspaceYamlSchemaVersioningChangelogStorage || (exports.PnpmWorkspaceYamlSchemaVersioningChangelogStorage = PnpmWorkspaceYamlSchemaVersioningChangelogStorage = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG5wbS13b3Jrc3BhY2UtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmFzY3JpcHQvcG5wbS13b3Jrc3BhY2UtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTZyQ0Esd0VBa0xDO0FBZ0RELDhHQVNDO0FBeUNELG9GQVVDO0FBb0JELGdHQU9DO0FBa0NELGtGQVNDO0FBMkJELDhGQVFDO0FBOEJELG9IQVNDO0FBb0JELGdHQU9DO0FBa0tELGtGQVFDO0FBcUZELDRGQVlDO0FBbUhELHNHQVFDO0FBc0JELDhHQU9DOztBQWozQkQ7OztHQUdHO0FBQ0gscUZBQXFGO0FBQ3JGLFNBQWdCLDhCQUE4QixDQUFDLEdBQXdDO0lBQ3JGLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQUMsT0FBTyxTQUFTLENBQUM7SUFBQyxDQUFDO0lBQzVDLE1BQU0sTUFBTSxHQUFHO1FBQ2IsVUFBVSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLFNBQVMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM5SixVQUFVLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsUyxhQUFhLEVBQUUsR0FBRyxDQUFDLFdBQVc7UUFDOUIsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLHFCQUFxQjtRQUNsRCxjQUFjLEVBQUUsR0FBRyxDQUFDLFlBQVk7UUFDaEMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRCxX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QUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUcsQ0FBQztBQXNCRDs7O0dBR0c7QUFDSCxxRkFBcUY7QUFDckYsU0FBZ0IseUNBQXlDLENBQUMsR0FBbUQ7SUFDM0csSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7UUFBQyxPQUFPLFNBQVMsQ0FBQztJQUFDLENBQUM7SUFDNUMsTUFBTSxNQUFNLEdBQUc7UUFDYixZQUFZLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQzVDLENBQUM7SUFDRiwwQkFBMEI7SUFDMUIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUcsQ0FBQztBQXlCRDs7O0dBR0c7QUFDSCxxRkFB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LENBQUM7QUFDRCxvRkFBb0Y7QUFFcEY7Ozs7R0FJRztBQUNILElBQVksaURBS1g7QUFMRCxXQUFZLGlEQUFpRDtJQUMzRCxlQUFlO0lBQ2YsMEVBQXFCLENBQUE7SUFDckIsaUJBQWlCO0lBQ2pCLDhFQUF5QixDQUFBO0FBQzNCLENBQUMsRUFMVyxpREFBaUQsaUVBQWpELGlEQUFpRCxRQUs1RCIsInNvdXJjZXNDb250ZW50IjpbIi8vIH5+IEdlbmVyYXRlZCBieSBwcm9qZW4uIFRvIG1vZGlmeSwgZWRpdCAucHJvamVucmMudHMgYW5kIHJ1biBcIm5vZGUgLi9wcm9qZW4uanNcIi5cbi8qKlxuICogSlNPTiBzY2hlbWEgZm9yIHBucG0td29ya3NwYWNlLnlhbWwgZmlsZXNcbiAqXG4gKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEge1xuICAvKipcbiAgICogV29ya3NwYWNlIHBhY2thZ2UgcGF0aHMuIEdsb2IgcGF0dGVybnMgYXJlIHN1cHBvcnRlZFxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3BhY2thZ2VzXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBEZWZpbmUgZGVwZW5kZW5jeSB2ZXJzaW9uIHJhbmdlcyBhcyByZXVzYWJsZSBjb25zdGFudHMsXG4gICAqIGZvciBsYXRlciByZWZlcmVuY2UgaW4gcGFja2FnZS5qc29uIGZpbGVzLlxuICAgKiBUaGlzIChzaW5ndWxhcikgZmllbGQgY3JlYXRlcyBhIGNhdGFsb2cgbmFtZWQgZGVmYXVsdC5cbiAgICpcbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNjYXRhbG9nXG4gICAqL1xuICByZWFkb25seSBjYXRhbG9nPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogRGVmaW5lIGFyYml0cmFyaWx5IG5hbWVkIGNhdGFsb2dzXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjY2F0YWxvZ3NcbiAgICovXG4gIHJlYWRvbmx5IGNhdGFsb2dzPzogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH07XG5cbiAgLyoqXG4gICAqIENvbnRyb2xsaW5nIGlmIGFuZCBob3cgZGVwZW5kZW5jaWVzIGFyZSBhZGRlZCB0byB0aGUgZGVmYXVsdCBjYXRhbG9nXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjY2F0YWxvZ01vZGVcbiAgICovXG4gIHJlYWRvbmx5IGNhdGFsb2dNb2RlPzogUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFDYXRhbG9nTW9kZTtcblxuICAvKipcbiAgICogV2hlbiBzZXQgdG8gYHRydWVgLCBwbnBtIHdpbGwgcmVtb3ZlIHVudXNlZCBjYXRhbG9nIGVudHJpZXMgZHVyaW5nIGluc3RhbGxhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNjbGVhbnVwVW51c2VkQ2F0YWxvZ3NcbiAgICovXG4gIHJlYWRvbmx5IGNsZWFudXBVbnVzZWRDYXRhbG9ncz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUsIHBucG0gd2lsbCByZW1vdmUgdW51c2VkIGNhdGFsb2cgZW50cmllcyBkdXJpbmcgaW5zdGFsbGF0aW9uLiBgY2xlYW51cFVudXNlZENhdGFsb2dzYCBpcyB0aGUgZGVwcmVjYXRlZCBzcGVsbGluZyBvZiB0aGlzIHNldHRpbmcgYW5kIGNvbnRpbnVlcyB0byB3b3JrOyB3aGVuIGJvdGggYXJlIHNldCwgYGNhdGFsb2dQcnVuZWAgd2lucy5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNjYXRhbG9nUHJ1bmVcbiAgICovXG4gIHJlYWRvbmx5IGNhdGFsb2dQcnVuZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwYWNrYWdlIG5hbWVzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgZXhlY3V0ZWQgZHVyaW5nIGluc3RhbGxhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNvbmx5QnVpbHREZXBlbmRlbmNpZXNcbiAgICovXG4gIHJlYWRvbmx5IG9ubHlCdWlsdERlcGVuZGVuY2llcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIG92ZXJyaWRlIGFueSBkZXBlbmRlbmN5IGluIHRoZSBkZXBlbmRlbmN5IGdyYXBoLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI292ZXJyaWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogYW55O1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGV4dGVuZCB0aGUgZXhpc3RpbmcgcGFja2FnZSBkZWZpbml0aW9ucyB3aXRoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjcGFja2FnZUV4dGVuc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VFeHRlbnNpb25zPzogYW55O1xuXG4gIC8qKlxuICAgKiBQZXItd29ya3NwYWNlLXByb2plY3QgcG5wbSBzZXR0aW5ncyB0aGF0IHJlcGxhY2UgcHJvamVjdC1zcGVjaWZpYyAubnBtcmMgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjcGFja2FnZUNvbmZpZ3NcbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VDb25maWdzPzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3BlZXJEZXBlbmRlbmN5UnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IHBlZXJEZXBlbmRlbmN5UnVsZXM/OiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVBlZXJEZXBlbmRlbmN5UnVsZXM7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBkZXBlbmRlbmNpZXMgdG8gcnVuIGJ1aWxkcyBmb3IuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjbmV2ZXJCdWlsdERlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgbmV2ZXJCdWlsdERlcGVuZGVuY2llcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSwgYWxsIGJ1aWxkIHNjcmlwdHMgKGUuZy4gcHJlaW5zdGFsbCwgaW5zdGFsbCwgcG9zdGluc3RhbGwpIGZyb20gZGVwZW5kZW5jaWVzIHdpbGwgcnVuIGF1dG9tYXRpY2FsbHksIHdpdGhvdXQgcmVxdWlyaW5nIGFwcHJvdmFsLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2Rhbmdlcm91c2x5QWxsb3dBbGxCdWlsZHNcbiAgICovXG4gIHJlYWRvbmx5IGRhbmdlcm91c2x5QWxsb3dBbGxCdWlsZHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBKU09OIGZpbGUgdGhhdCBsaXN0cyB0aGUgb25seSBwYWNrYWdlcyBwZXJtaXR0ZWQgdG8gcnVuIGluc3RhbGxhdGlvbiBzY3JpcHRzIGR1cmluZyB0aGUgcG5wbSBpbnN0YWxsIHByb2Nlc3MuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjb25seUJ1aWx0RGVwZW5kZW5jaWVzRmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgb25seUJ1aWx0RGVwZW5kZW5jaWVzRmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHBhY2thZ2UgbmFtZXMgdGhhdCBzaG91bGQgbm90IGJlIGJ1aWx0IGR1cmluZyBpbnN0YWxsYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjaWdub3JlZEJ1aWx0RGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVkQnVpbHREZXBlbmRlbmNpZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGRlcHJlY2F0ZWQgdmVyc2lvbnMgdGhhdCB0aGUgd2FybmluZ3MgYXJlIHN1cHByZXNzZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjYWxsb3dlZERlcHJlY2F0ZWRWZXJzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZERlcHJlY2F0ZWRWZXJzaW9ucz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgcGF0Y2hlZC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNwYXRjaGVkRGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBwYXRjaGVkRGVwZW5kZW5jaWVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogV2hlbiB0cnVlLCBpbnN0YWxsYXRpb24gd29uJ3QgZmFpbCBpZiBzb21lIG9mIHRoZSBwYXRjaGVzIGZyb20gdGhlIFwicGF0Y2hlZERlcGVuZGVuY2llc1wiIGZpZWxkIHdlcmUgbm90IGFwcGxpZWQuIChQcmV2aW91c2x5IG5hbWVkIFwiYWxsb3dOb25BcHBsaWVkUGF0Y2hlc1wiKVxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2FsbG93VW51c2VkUGF0Y2hlc1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dVbnVzZWRQYXRjaGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiB0cnVlLCBpbnN0YWxsYXRpb24gd29uJ3QgZmFpbCBpZiBzb21lIG9mIHRoZSBwYXRjaGVzIGZyb20gdGhlIFwicGF0Y2hlZERlcGVuZGVuY2llc1wiIGZpZWxkIHdlcmUgbm90IGFwcGxpZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjYWxsb3dOb25BcHBsaWVkUGF0Y2hlc1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dOb25BcHBsaWVkUGF0Y2hlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgaXMgdW5kZWZpbmVkLiBFcnJvcnMgb3V0IHdoZW4gYSBwYXRjaCB3aXRoIGFuIGV4YWN0IHZlcnNpb24gb3IgdmVyc2lvbiByYW5nZSBmYWlscy4gSWdub3JlcyBmYWlsdXJlcyBmcm9tIG5hbWUtb25seSBwYXRjaGVzLiBXaGVuIHRydWUsIHByaW50cyBhIHdhcm5pbmcgaW5zdGVhZCBvZiBmYWlsaW5nIHdoZW4gYW55IHBhdGNoIGNhbm5vdCBiZSBhcHBsaWVkLiBXaGVuIGZhbHNlLCBlcnJvcnMgb3V0IGZvciBhbnkgcGF0Y2ggZmFpbHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkLiBFcnJvcnMgb3V0IHdoZW4gYSBwYXRjaCB3aXRoIGFuIGV4YWN0IHZlcnNpb24gb3IgdmVyc2lvbiByYW5nZSBmYWlscy4gSWdub3JlcyBmYWlsdXJlcyBmcm9tIG5hbWUtb25seSBwYXRjaGVzLiBXaGVuIHRydWUsIHByaW50cyBhIHdhcm5pbmcgaW5zdGVhZCBvZiBmYWlsaW5nIHdoZW4gYW55IHBhdGNoIGNhbm5vdCBiZSBhcHBsaWVkLiBXaGVuIGZhbHNlLCBlcnJvcnMgb3V0IGZvciBhbnkgcGF0Y2ggZmFpbHVyZS5cbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNpZ25vcmVQYXRjaEZhaWx1cmVzXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVQYXRjaEZhaWx1cmVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSN1cGRhdGVcbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZT86IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVXBkYXRlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3VwZGF0ZUNvbmZpZ1xuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlQ29uZmlnPzogUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFVcGRhdGVDb25maWc7XG5cbiAgLyoqXG4gICAqIENvbmZpZyBkZXBlbmRlbmNpZXMgYWxsb3cgeW91IHRvIHNoYXJlIGFuZCBjZW50cmFsaXplIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNldHRpbmdzLCBhbmQgaG9va3MgYWNyb3NzIG11bHRpcGxlIHByb2plY3RzLiBUaGV5IGFyZSBpbnN0YWxsZWQgYmVmb3JlIGFsbCByZWd1bGFyIGRlcGVuZGVuY2llcyAoJ2RlcGVuZGVuY2llcycsICdkZXZEZXBlbmRlbmNpZXMnLCAnb3B0aW9uYWxEZXBlbmRlbmNpZXMnKSwgbWFraW5nIHRoZW0gaWRlYWwgZm9yIHNldHRpbmcgdXAgY3VzdG9tIGhvb2tzLCBwYXRjaGVzLCBhbmQgY2F0YWxvZyBlbnRyaWVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2NvbmZpZ0RlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnRGVwZW5kZW5jaWVzPzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2F1ZGl0XG4gICAqL1xuICByZWFkb25seSBhdWRpdD86IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hQXVkaXQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjYXVkaXRDb25maWdcbiAgICovXG4gIHJlYWRvbmx5IGF1ZGl0Q29uZmlnPzogUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFBdWRpdENvbmZpZztcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHNjcmlwdHMgdGhhdCBtdXN0IGV4aXN0IGluIGVhY2ggcHJvamVjdC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNyZXF1aXJlZFNjcmlwdHNcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkU2NyaXB0cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlcyBmb3Igd2hpY2ggeW91J2QgbGlrZSB0byBpbnN0YWxsIG9wdGlvbmFsIGRlcGVuZGVuY2llcywgZXZlbiBpZiB0aGV5IGRvbid0IG1hdGNoIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIHN5c3RlbSBydW5uaW5nIHRoZSBpbnN0YWxsLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3N1cHBvcnRlZEFyY2hpdGVjdHVyZXNcbiAgICovXG4gIHJlYWRvbmx5IHN1cHBvcnRlZEFyY2hpdGVjdHVyZXM/OiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVN1cHBvcnRlZEFyY2hpdGVjdHVyZXM7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBvcHRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCB0aGUgaW5zdGFsbCBzaG91bGQgYmUgc2tpcHBlZC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNpZ25vcmVkT3B0aW9uYWxEZXBlbmRlbmNpZXNcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZWRPcHRpb25hbERlcGVuZGVuY2llcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2V4ZWN1dGlvbkVudlxuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uRW52PzogUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFFeGVjdXRpb25FbnY7XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgYWxsIGRlcGVuZGVuY2llcyBhcmUgaG9pc3RlZCB0byBub2RlX21vZHVsZXMvLnBucG0vbm9kZV9tb2R1bGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2hvaXN0XG4gICAqL1xuICByZWFkb25seSBob2lzdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgcGFja2FnZXMgZnJvbSB0aGUgd29ya3NwYWNlcyBhcmUgc3ltbGlua2VkIHRvIGVpdGhlciA8d29ya3NwYWNlX3Jvb3Q+L25vZGVfbW9kdWxlcy8ucG5wbS9ub2RlX21vZHVsZXMgb3IgdG8gPHdvcmtzcGFjZV9yb290Pi9ub2RlX21vZHVsZXMgZGVwZW5kaW5nIG9uIG90aGVyIGhvaXN0aW5nIHNldHRpbmdzIChob2lzdFBhdHRlcm4gYW5kIHB1YmxpY0hvaXN0UGF0dGVybikuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjaG9pc3RXb3Jrc3BhY2VQYWNrYWdlc1xuICAgKi9cbiAgcmVhZG9ubHkgaG9pc3RXb3Jrc3BhY2VQYWNrYWdlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRlbGxzIHBucG0gd2hpY2ggcGFja2FnZXMgc2hvdWxkIGJlIGhvaXN0ZWQgdG8gbm9kZV9tb2R1bGVzLy5wbnBtL25vZGVfbW9kdWxlc1xuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2hvaXN0UGF0dGVyblxuICAgKi9cbiAgcmVhZG9ubHkgaG9pc3RQYXR0ZXJuPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFVubGlrZSBob2lzdFBhdHRlcm4sIHdoaWNoIGhvaXN0cyBkZXBlbmRlbmNpZXMgdG8gYSBoaWRkZW4gbW9kdWxlcyBkaXJlY3RvcnkgaW5zaWRlIHRoZSB2aXJ0dWFsIHN0b3JlLCBwdWJsaWNIb2lzdFBhdHRlcm4gaG9pc3RzIGRlcGVuZGVuY2llcyBtYXRjaGluZyB0aGUgcGF0dGVybiB0byB0aGUgcm9vdCBtb2R1bGVzIGRpcmVjdG9yeS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNwdWJsaWNIb2lzdFBhdHRlcm5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0hvaXN0UGF0dGVybj86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0LCBwbnBtIGNyZWF0ZXMgYSBzZW1pc3RyaWN0IG5vZGVfbW9kdWxlcywgbWVhbmluZyBkZXBlbmRlbmNpZXMgaGF2ZSBhY2Nlc3MgdG8gdW5kZWNsYXJlZCBkZXBlbmRlbmNpZXMgYnV0IG1vZHVsZXMgb3V0c2lkZSBvZiBub2RlX21vZHVsZXMgZG8gbm90LlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3NoYW1lZnVsbHlIb2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgc2hhbWVmdWxseUhvaXN0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdG9yeSBpbiB3aGljaCBkZXBlbmRlbmNpZXMgd2lsbCBiZSBpbnN0YWxsZWQgKGluc3RlYWQgb2Ygbm9kZV9tb2R1bGVzKS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNtb2R1bGVzRGlyXG4gICAqL1xuICByZWFkb25seSBtb2R1bGVzRGlyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHdoYXQgbGlua2VyIHNob3VsZCBiZSB1c2VkIGZvciBpbnN0YWxsaW5nIE5vZGUgcGFja2FnZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjbm9kZUxpbmtlclxuICAgKi9cbiAgcmVhZG9ubHkgbm9kZUxpbmtlcj86IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hTm9kZUxpbmtlcjtcblxuICAvKipcbiAgICogV2hlbiB0cnVlLCBwbnBtIGluamVjdHMgdGhlIGdlbmVyYXRlZCBub2RlX21vZHVsZXMvLnBhY2thZ2UtbWFwLmpzb24gaW50byBwbnBtLW1hbmFnZWQgTm9kZS5qcyBzY3JpcHQgZW52aXJvbm1lbnRzIGJ5IGFkZGluZyBOb2RlJ3MgLS1leHBlcmltZW50YWwtcGFja2FnZS1tYXAgb3B0aW9uIHRvIE5PREVfT1BUSU9OUy4gc2VlIGh0dHBzOi8vcG5wbS5pby9zZXR0aW5ncy9ub2RlLW1vZHVsZXMjbm9kZWV4cGVyaW1lbnRhbHBhY2thZ2VtYXBcbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNub2RlRXhwZXJpbWVudGFsUGFja2FnZU1hcFxuICAgKi9cbiAgcmVhZG9ubHkgbm9kZUV4cGVyaW1lbnRhbFBhY2thZ2VNYXA/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyBob3cgbm9kZV9tb2R1bGVzLy5wYWNrYWdlLW1hcC5qc29uIGlzIGdlbmVyYXRlZC4gc3RhbmRhcmQgLSBvbmx5IGRlY2xhcmVkIGRlcGVuZGVuY2llcyBhcmUgYXZhaWxhYmxlIHRocm91Z2ggdGhlIHBhY2thZ2UgbWFwLiBsb29zZSAtIGFsc28gbWFwcyBwYWNrYWdlcyB0aGF0IGFyZSByZWFjaGFibGUgdGhyb3VnaCB0aGUgaW5zdGFsbGVkIG5vZGVfbW9kdWxlcyBsYXlvdXQsIHdoaWNoIGNhbiBhbGxvdyB1bmRlY2xhcmVkIGhvaXN0ZWQgZGVwZW5kZW5jaWVzIHRvIHJlc29sdmUuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjbm9kZVBhY2thZ2VNYXBUeXBlXG4gICAqL1xuICByZWFkb25seSBub2RlUGFja2FnZU1hcFR5cGU/OiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYU5vZGVQYWNrYWdlTWFwVHlwZTtcblxuICAvKipcbiAgICogV2hlbiBzeW1saW5rIGlzIHNldCB0byBmYWxzZSwgcG5wbSBjcmVhdGVzIGEgdmlydHVhbCBzdG9yZSBkaXJlY3Rvcnkgd2l0aG91dCBhbnkgc3ltbGlua3MuIEl0IGlzIGEgdXNlZnVsIHNldHRpbmcgdG9nZXRoZXIgd2l0aCBub2RlTGlua2VyPXBucC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNzeW1saW5rXG4gICAqL1xuICByZWFkb25seSBzeW1saW5rPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiBmYWxzZSwgcG5wbSB3aWxsIG5vdCB3cml0ZSBhbnkgZmlsZXMgdG8gdGhlIG1vZHVsZXMgZGlyZWN0b3J5IChub2RlX21vZHVsZXMpLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2VuYWJsZU1vZHVsZXNEaXJcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZU1vZHVsZXNEaXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHdpdGggbGlua3MgdG8gdGhlIHN0b3JlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3ZpcnR1YWxTdG9yZURpclxuICAgKi9cbiAgcmVhZG9ubHkgdmlydHVhbFN0b3JlRGlyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbGVuZ3RoIG9mIGRpcmVjdG9yeSBuYW1lcyBpbnNpZGUgdGhlIHZpcnR1YWwgc3RvcmUgZGlyZWN0b3J5IChub2RlX21vZHVsZXMvLnBucG0pLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3ZpcnR1YWxTdG9yZURpck1heExlbmd0aFxuICAgKi9cbiAgcmVhZG9ubHkgdmlydHVhbFN0b3JlRGlyTWF4TGVuZ3RoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXJlIHRoZSB2aXJ0dWFsIHN0b3JlIGlzIGxvY2F0ZWQuIFdoZW4gc2V0IHRvIHByb2plY3QsIGEgc2VwYXJhdGUgdmlydHVhbCBzdG9yZSBpcyBjcmVhdGVkIGluIGVhY2ggcHJvamVjdCdzIG5vZGVfbW9kdWxlcy8ucG5wbS4gV2hlbiBzZXQgdG8gZ2xvYmFsLCBhIHNpbmdsZSBzdG9yZSBpcyBzaGFyZWQgYnkgZXZlcnkgcHJvamVjdCBvbiB0aGUgbWFjaGluZSwgd2l0aCBlYWNoIHByb2plY3QncyBub2RlX21vZHVsZXMgaG9sZGluZyBvbmx5IHN5bWxpbmtzIGludG8gaXQuIEFkZGVkIGluIHBucG0gdjExLjIzLjAuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjdmlydHVhbFN0b3JlVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdmlydHVhbFN0b3JlVHlwZT86IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVmlydHVhbFN0b3JlVHlwZTtcblxuICAvKipcbiAgICogQ29udHJvbHMgdGhlIHdheSBwYWNrYWdlcyBhcmUgaW1wb3J0ZWQgZnJvbSB0aGUgc3RvcmUgKGlmIHlvdSB3YW50IHRvIGRpc2FibGUgc3ltbGlua3MgaW5zaWRlIG5vZGVfbW9kdWxlcywgdGhlbiB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlIG5vZGVMaW5rZXIgc2V0dGluZywgbm90IHRoaXMgb25lKS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNwYWNrYWdlSW1wb3J0TWV0aG9kXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlSW1wb3J0TWV0aG9kPzogUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFQYWNrYWdlSW1wb3J0TWV0aG9kO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBpbiBtaW51dGVzIGFmdGVyIHdoaWNoIG9ycGhhbiBwYWNrYWdlcyBmcm9tIHRoZSBtb2R1bGVzIGRpcmVjdG9yeSBzaG91bGQgYmUgcmVtb3ZlZC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNtb2R1bGVzQ2FjaGVNYXhBZ2VcbiAgICovXG4gIHJlYWRvbmx5IG1vZHVsZXNDYWNoZU1heEFnZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRpbWUgaW4gbWludXRlcyBhZnRlciB3aGljaCBkbHggY2FjaGUgZXhwaXJlcy5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNkbHhDYWNoZU1heEFnZVxuICAgKi9cbiAgcmVhZG9ubHkgZGx4Q2FjaGVNYXhBZ2U/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiB3aGVyZSBhbGwgdGhlIHBhY2thZ2VzIGFyZSBzYXZlZCBvbiB0aGUgZGlzay5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNzdG9yZURpclxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmVEaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIGlmIGEgZmlsZSBpbiB0aGUgc3RvcmUgaGFzIGJlZW4gbW9kaWZpZWQsIHRoZSBjb250ZW50IG9mIHRoaXMgZmlsZSBpcyBjaGVja2VkIGJlZm9yZSBsaW5raW5nIGl0IHRvIGEgcHJvamVjdCdzIG5vZGVfbW9kdWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSN2ZXJpZnlTdG9yZUludGVncml0eVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyaWZ5U3RvcmVJbnRlZ3JpdHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZXByZWNhdGVkLiBPbmx5IGFsbG93cyBpbnN0YWxsYXRpb24gd2l0aCBhIHN0b3JlIHNlcnZlci4gSWYgbm8gc3RvcmUgc2VydmVyIGlzIHJ1bm5pbmcsIGluc3RhbGxhdGlvbiB3aWxsIGZhaWwuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjdXNlUnVubmluZ1N0b3JlU2VydmVyXG4gICAqL1xuICByZWFkb25seSB1c2VSdW5uaW5nU3RvcmVTZXJ2ZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNYWtlcyBwbnBtIGluc3RhbGwgd29yayBhZ2FpbnN0IGEgcmVhZC1vbmx5IHBhY2thZ2Ugc3RvcmUgKHN1Y2ggYXMgYSBOaXggc3RvcmUgb3IgT0NJIGltYWdlIGxheWVyKS4gV2hlbiBlbmFibGVkLCBwbnBtIG9wZW5zIHRoZSBzdG9yZSdzIFNRTGl0ZSBkYXRhYmFzZSBpbiBpbW11dGFibGUgbW9kZSBhbmQgbmV2ZXIgd3JpdGVzIHRvIHRoZSBzdG9yZS4gV29ya3MgYmVzdCB0b2dldGhlciB3aXRoIC0tb2ZmbGluZSBhbmQgLS1mcm96ZW4tbG9ja2ZpbGU7IGluY29tcGF0aWJsZSB3aXRoIC0tZm9yY2UuIEFkZGVkIGluIHBucG0gdjExLjcuMC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNmcm96ZW5TdG9yZVxuICAgKi9cbiAgcmVhZG9ubHkgZnJvemVuU3RvcmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTb21lIHJlZ2lzdHJpZXMgYWxsb3cgdGhlIGV4YWN0IHNhbWUgY29udGVudCB0byBiZSBwdWJsaXNoZWQgdW5kZXIgZGlmZmVyZW50IHBhY2thZ2UgbmFtZXMgYW5kL29yIHZlcnNpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3N0cmljdFN0b3JlUGtnQ29udGVudENoZWNrXG4gICAqL1xuICByZWFkb25seSBzdHJpY3RTdG9yZVBrZ0NvbnRlbnRDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gZW5hYmxlZCwgbm9kZV9tb2R1bGVzIGNvbnRhaW5zIG9ubHkgc3ltbGlua3MgdG8gYSBjZW50cmFsIHZpcnR1YWwgc3RvcmUsIHJhdGhlciB0aGFuIHRvIG5vZGVfbW9kdWxlcy8ucG5wbS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNlbmFibGVHbG9iYWxWaXJ0dWFsU3RvcmVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZUdsb2JhbFZpcnR1YWxTdG9yZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIGZhbHNlLCBwbnBtIHdvbid0IHJlYWQgb3IgZ2VuZXJhdGUgYSBwbnBtLWxvY2sueWFtbCBmaWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2xvY2tmaWxlXG4gICAqL1xuICByZWFkb25seSBsb2NrZmlsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUgYW5kIHRoZSBhdmFpbGFibGUgcG5wbS1sb2NrLnlhbWwgc2F0aXNmaWVzIHRoZSBwYWNrYWdlLmpzb24gZGVwZW5kZW5jaWVzIGRpcmVjdGl2ZSwgYSBoZWFkbGVzcyBpbnN0YWxsYXRpb24gaXMgcGVyZm9ybWVkLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3ByZWZlckZyb3plbkxvY2tmaWxlXG4gICAqL1xuICByZWFkb25seSBwcmVmZXJGcm96ZW5Mb2NrZmlsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgZnVsbCBVUkwgdG8gdGhlIHBhY2thZ2UncyB0YXJiYWxsIHRvIGV2ZXJ5IGVudHJ5IGluIHBucG0tbG9jay55YW1sLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2xvY2tmaWxlSW5jbHVkZVRhcmJhbGxVcmxcbiAgICovXG4gIHJlYWRvbmx5IGxvY2tmaWxlSW5jbHVkZVRhcmJhbGxVcmw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byB0cnVlLCB0aGUgZ2VuZXJhdGVkIGxvY2tmaWxlIG5hbWUgYWZ0ZXIgaW5zdGFsbGF0aW9uIHdpbGwgYmUgbmFtZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgYnJhbmNoIG5hbWUgdG8gY29tcGxldGVseSBhdm9pZCBtZXJnZSBjb25mbGljdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjZ2l0QnJhbmNoTG9ja2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IGdpdEJyYW5jaExvY2tmaWxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhpcyBjb25maWd1cmF0aW9uIG1hdGNoZXMgdGhlIGN1cnJlbnQgYnJhbmNoIG5hbWUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gbWVyZ2UgYWxsIGdpdCBicmFuY2ggbG9ja2ZpbGUgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjbWVyZ2VHaXRCcmFuY2hMb2NrZmlsZXNCcmFuY2hQYXR0ZXJuXG4gICAqL1xuICByZWFkb25seSBtZXJnZUdpdEJyYW5jaExvY2tmaWxlc0JyYW5jaFBhdHRlcm4/OiBhbnlbXTtcblxuICAvKipcbiAgICogTWF4IGxlbmd0aCBvZiB0aGUgcGVlciBJRHMgc3VmZml4IGFkZGVkIHRvIGRlcGVuZGVuY3kga2V5cyBpbiB0aGUgbG9ja2ZpbGUuIElmIHRoZSBzdWZmaXggaXMgbG9uZ2VyLCBpdCBpcyByZXBsYWNlZCB3aXRoIGEgaGFzaC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNwZWVyc1N1ZmZpeE1heExlbmd0aFxuICAgKi9cbiAgcmVhZG9ubHkgcGVlcnNTdWZmaXhNYXhMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIFVSTCBvZiB0aGUgbnBtIHBhY2thZ2UgcmVnaXN0cnkgKHRyYWlsaW5nIHNsYXNoIGluY2x1ZGVkKS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNyZWdpc3RyeVxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaXN0cnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgc2lnbmluZyBjZXJ0aWZpY2F0ZSB0aGF0IGlzIHRydXN0ZWQgZm9yIFNTTCBjb25uZWN0aW9ucyB0byB0aGUgcmVnaXN0cnkuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjY2FcbiAgICovXG4gIHJlYWRvbmx5IGNhPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHBhdGggdG8gYSBmaWxlIGNvbnRhaW5pbmcgb25lIG9yIG11bHRpcGxlIENlcnRpZmljYXRlIEF1dGhvcml0eSBzaWduaW5nIGNlcnRpZmljYXRlcy5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNjYWZpbGVcbiAgICovXG4gIHJlYWRvbmx5IGNhZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjbGllbnQgY2VydGlmaWNhdGUgdG8gcGFzcyB3aGVuIGFjY2Vzc2luZyB0aGUgcmVnaXN0cnkuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjY2VydFxuICAgKi9cbiAgcmVhZG9ubHkgY2VydD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjbGllbnQga2V5IHRvIHBhc3Mgd2hlbiBhY2Nlc3NpbmcgdGhlIHJlZ2lzdHJ5LlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIGZldGNoaW5nIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBHaXQgcmVwb3NpdG9yaWVzLCBpZiB0aGUgaG9zdCBpcyBsaXN0ZWQgaW4gdGhpcyBzZXR0aW5nLCBwbnBtIHdpbGwgdXNlIHNoYWxsb3cgY2xvbmluZyB0byBmZXRjaCBvbmx5IHRoZSBuZWVkZWQgY29tbWl0LCBub3QgYWxsIHRoZSBoaXN0b3J5LlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2dpdFNoYWxsb3dIb3N0c1xuICAgKi9cbiAgcmVhZG9ubHkgZ2l0U2hhbGxvd0hvc3RzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgcHJveHkgdG8gdXNlIGZvciBvdXRnb2luZyBIVFRQUyByZXF1ZXN0cy4gSWYgdGhlIEhUVFBTX1BST1hZLCBodHRwc19wcm94eSwgSFRUUF9QUk9YWSBvciBodHRwX3Byb3h5IGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgc2V0LCB0aGVpciB2YWx1ZXMgd2lsbCBiZSB1c2VkIGluc3RlYWQuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjaHR0cHNQcm94eVxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cHNQcm94eT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBwcm94eSB0byB1c2UgZm9yIG91dGdvaW5nIEhUVFAgcmVxdWVzdHMuIElmIHRoZSBIVFRQX1BST1hZIG9yIGh0dHBfcHJveHkgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBzZXQsIHByb3h5IHNldHRpbmdzIHdpbGwgYmUgaG9ub3JlZCBieSB0aGUgdW5kZXJseWluZyByZXF1ZXN0IGxpYnJhcnkuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjaHR0cFByb3h5XG4gICAqL1xuICByZWFkb25seSBodHRwUHJveHk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIG5wbSdzIGxlZ2FjeSBwcm94eSBzZXR0aW5nLCB1c2VkIGFzIHRoZSBmYWxsYmFjayBmb3IgYm90aCBodHRwc1Byb3h5IGFuZCBodHRwUHJveHkuIElmIHRoZSBIVFRQX1BST1hZIG9yIGh0dHBfcHJveHkgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBzZXQsIHByb3h5IHNldHRpbmdzIHdpbGwgYmUgaG9ub3JlZCBieSB0aGUgdW5kZXJseWluZyByZXF1ZXN0IGxpYnJhcnkuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjcHJveHlcbiAgICovXG4gIHJlYWRvbmx5IHByb3h5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSVAgYWRkcmVzcyBvZiB0aGUgbG9jYWwgaW50ZXJmYWNlIHRvIHVzZSB3aGVuIG1ha2luZyBjb25uZWN0aW9ucyB0byB0aGUgbnBtIHJlZ2lzdHJ5LlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2xvY2FsQWRkcmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgbG9jYWxBZGRyZXNzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgdG8gdXNlIHBlciBvcmlnaW4gKHByb3RvY29sL2hvc3QvcG9ydCBjb21iaW5hdGlvbikuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjbWF4c29ja2V0c1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4c29ja2V0cz86IG51bWJlcjtcblxuICAvKipcbiAgICogQSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nIG9mIGRvbWFpbiBleHRlbnNpb25zIHRoYXQgYSBwcm94eSBzaG91bGQgbm90IGJlIHVzZWQgZm9yLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI25vUHJveHlcbiAgICovXG4gIHJlYWRvbmx5IG5vUHJveHk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGRvIFNTTCBrZXkgdmFsaWRhdGlvbiB3aGVuIG1ha2luZyByZXF1ZXN0cyB0byB0aGUgcmVnaXN0cnkgdmlhIEhUVFBTLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3N0cmljdFNzbFxuICAgKi9cbiAgcmVhZG9ubHkgc3RyaWN0U3NsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIEhUVFAoUykgcmVxdWVzdHMgdG8gcHJvY2VzcyBzaW11bHRhbmVvdXNseS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNuZXR3b3JrQ29uY3VycmVuY3lcbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcmtDb25jdXJyZW5jeT86IG51bWJlcjtcblxuICAvKipcbiAgICogSG93IG1hbnkgdGltZXMgdG8gcmV0cnkgaWYgcG5wbSBmYWlscyB0byBmZXRjaCBmcm9tIHRoZSByZWdpc3RyeS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNmZXRjaFJldHJpZXNcbiAgICovXG4gIHJlYWRvbmx5IGZldGNoUmV0cmllcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGV4cG9uZW50aWFsIGZhY3RvciBmb3IgcmV0cnkgYmFja29mZi5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNmZXRjaFJldHJ5RmFjdG9yXG4gICAqL1xuICByZWFkb25seSBmZXRjaFJldHJ5RmFjdG9yPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSAoYmFzZSkgdGltZW91dCBmb3IgcmV0cnlpbmcgcmVxdWVzdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjZmV0Y2hSZXRyeU1pbnRpbWVvdXRcbiAgICovXG4gIHJlYWRvbmx5IGZldGNoUmV0cnlNaW50aW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBmYWxsYmFjayB0aW1lb3V0IHRvIGVuc3VyZSB0aGUgcmV0cnkgZmFjdG9yIGRvZXMgbm90IG1ha2UgcmVxdWVzdHMgdG9vIGxvbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjZmV0Y2hSZXRyeU1heHRpbWVvdXRcbiAgICovXG4gIHJlYWRvbmx5IGZldGNoUmV0cnlNYXh0aW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGZvciBIVFRQIHJlcXVlc3RzIHRvIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2ZldGNoVGltZW91dFxuICAgKi9cbiAgcmVhZG9ubHkgZmV0Y2hUaW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHdhcm5pbmcgbWVzc2FnZSBpcyBkaXNwbGF5ZWQgaWYgYSBtZXRhZGF0YSByZXF1ZXN0IHRvIHRoZSByZWdpc3RyeSB0YWtlcyBsb25nZXIgdGhhbiB0aGUgc3BlY2lmaWVkIHRocmVzaG9sZCAoaW4gbWlsbGlzZWNvbmRzKS4gQWRkZWQgaW4gcG5wbSB2MTAuMTguMC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNmZXRjaFdhcm5UaW1lb3V0TXNcbiAgICovXG4gIHJlYWRvbmx5IGZldGNoV2FyblRpbWVvdXRNcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQSB3YXJuaW5nIG1lc3NhZ2UgaXMgZGlzcGxheWVkIGlmIHRoZSBkb3dubG9hZCBzcGVlZCBvZiBhIHRhcmJhbGwgZnJvbSB0aGUgcmVnaXN0cnkgZmFsbHMgYmVsb3cgdGhlIHNwZWNpZmllZCB0aHJlc2hvbGQgKGluIEtpQi9zKS4gQWRkZWQgaW4gcG5wbSB2MTAuMTguMC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNmZXRjaE1pblNwZWVkS2lCcHNcbiAgICovXG4gIHJlYWRvbmx5IGZldGNoTWluU3BlZWRLaUJwcz86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hlbiB0cnVlLCBhbnkgbWlzc2luZyBub24tb3B0aW9uYWwgcGVlciBkZXBlbmRlbmNpZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2F1dG9JbnN0YWxsUGVlcnNcbiAgICovXG4gIHJlYWRvbmx5IGF1dG9JbnN0YWxsUGVlcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRoaXMgc2V0dGluZyBpcyBzZXQgdG8gdHJ1ZSwgcGFja2FnZXMgd2l0aCBwZWVyIGRlcGVuZGVuY2llcyB3aWxsIGJlIGRlZHVwbGljYXRlZCBhZnRlciBwZWVycyByZXNvbHV0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2RlZHVwZVBlZXJEZXBlbmRlbnRzXG4gICAqL1xuICByZWFkb25seSBkZWR1cGVQZWVyRGVwZW5kZW50cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgZW5hYmxlZCwgY29tbWFuZHMgd2lsbCBmYWlsIGlmIHRoZXJlIGlzIGEgbWlzc2luZyBvciBpbnZhbGlkIHBlZXIgZGVwZW5kZW5jeSBpbiB0aGUgdHJlZS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNzdHJpY3RQZWVyRGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBzdHJpY3RQZWVyRGVwZW5kZW5jaWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiBlbmFibGVkLCBkZXBlbmRlbmNpZXMgb2YgdGhlIHJvb3Qgd29ya3NwYWNlIHByb2plY3QgYXJlIHVzZWQgdG8gcmVzb2x2ZSBwZWVyIGRlcGVuZGVuY2llcyBvZiBhbnkgcHJvamVjdHMgaW4gdGhlIHdvcmtzcGFjZS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNyZXNvbHZlUGVlcnNGcm9tV29ya3NwYWNlUm9vdFxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZVBlZXJzRnJvbVdvcmtzcGFjZVJvb3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyBjb2xvcnMgaW4gdGhlIG91dHB1dC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNjb2xvclxuICAgKi9cbiAgcmVhZG9ubHkgY29sb3I/OiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYUNvbG9yO1xuXG4gIC8qKlxuICAgKiBBbnkgbG9ncyBhdCBvciBoaWdoZXIgdGhhbiB0aGUgZ2l2ZW4gbGV2ZWwgd2lsbCBiZSBzaG93bi5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNsb2dsZXZlbFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nbGV2ZWw/OiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYUxvZ2xldmVsO1xuXG4gIC8qKlxuICAgKiBBbGxvd3MgeW91IHRvIGN1c3RvbWl6ZSB0aGUgb3V0cHV0IHN0eWxlIG9mIHRoZSBsb2dzLlxuICAgKiBodHRwczovL3BucG0uaW8vY2xpL2luc3RhbGwjLS1yZXBvcnRlcm5hbWVcbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNyZXBvcnRlclxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3J0ZXI/OiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVJlcG9ydGVyO1xuXG4gIC8qKlxuICAgKiBFeHBlcmltZW50YWwgb3B0aW9uIHRoYXQgZW5hYmxlcyBiZXRhIGZlYXR1cmVzIG9mIHRoZSBDTEkuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjdXNlQmV0YUNsaVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlQmV0YUNsaT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgZW5hYmxlZCwgdGhlIHByaW1hcnkgYmVoYXZpb3VyIG9mIHBucG0gaW5zdGFsbCBiZWNvbWVzIHRoYXQgb2YgcG5wbSBpbnN0YWxsIC1yLCBtZWFuaW5nIHRoZSBpbnN0YWxsIGlzIHBlcmZvcm1lZCBvbiBhbGwgd29ya3NwYWNlIG9yIHN1YmRpcmVjdG9yeSBwYWNrYWdlcy5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNyZWN1cnNpdmVJbnN0YWxsXG4gICAqL1xuICByZWFkb25seSByZWN1cnNpdmVJbnN0YWxsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBlbmFibGVkLCBwbnBtIHdpbGwgbm90IGluc3RhbGwgYW55IHBhY2thZ2UgdGhhdCBjbGFpbXMgdG8gbm90IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCBOb2RlIHZlcnNpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjZW5naW5lU3RyaWN0XG4gICAqL1xuICByZWFkb25seSBlbmdpbmVTdHJpY3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gb2YgdGhlIG5wbSBiaW5hcnkgdGhhdCBwbnBtIHVzZXMgZm9yIHNvbWUgYWN0aW9ucywgbGlrZSBwdWJsaXNoaW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI25wbVBhdGhcbiAgICovXG4gIHJlYWRvbmx5IG5wbVBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgc2V0dGluZyBpcyBkaXNhYmxlZCwgcG5wbSB3aWxsIG5vdCBmYWlsIGlmIGEgZGlmZmVyZW50IHBhY2thZ2UgbWFuYWdlciBpcyBzcGVjaWZpZWQgaW4gdGhlIHBhY2thZ2VNYW5hZ2VyIGZpZWxkIG9mIHBhY2thZ2UuanNvbi4gV2hlbiBlbmFibGVkLCBvbmx5IHRoZSBwYWNrYWdlIG5hbWUgaXMgY2hlY2tlZCAoc2luY2UgcG5wbSB2OS4yLjApLCBzbyB5b3UgY2FuIHN0aWxsIHJ1biBhbnkgdmVyc2lvbiBvZiBwbnBtIHJlZ2FyZGxlc3Mgb2YgdGhlIHZlcnNpb24gc3BlY2lmaWVkIGluIHRoZSBwYWNrYWdlTWFuYWdlciBmaWVsZC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNwYWNrYWdlTWFuYWdlclN0cmljdFxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZU1hbmFnZXJTdHJpY3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVuIGVuYWJsZWQsIHBucG0gd2lsbCBmYWlsIGlmIGl0cyB2ZXJzaW9uIGRvZXNuJ3QgZXhhY3RseSBtYXRjaCB0aGUgdmVyc2lvbiBzcGVjaWZpZWQgaW4gdGhlIHBhY2thZ2VNYW5hZ2VyIGZpZWxkIG9mIHBhY2thZ2UuanNvbi5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNwYWNrYWdlTWFuYWdlclN0cmljdFZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VNYW5hZ2VyU3RyaWN0VmVyc2lvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gZW5hYmxlZCwgcG5wbSB3aWxsIGF1dG9tYXRpY2FsbHkgZG93bmxvYWQgYW5kIHJ1biB0aGUgdmVyc2lvbiBvZiBwbnBtIHNwZWNpZmllZCBpbiB0aGUgcGFja2FnZU1hbmFnZXIgZmllbGQgb2YgcGFja2FnZS5qc29uLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI21hbmFnZVBhY2thZ2VNYW5hZ2VyVmVyc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IG1hbmFnZVBhY2thZ2VNYW5hZ2VyVmVyc2lvbnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEbyBub3QgZXhlY3V0ZSBhbnkgc2NyaXB0cyBkZWZpbmVkIGluIHRoZSBwcm9qZWN0IHBhY2thZ2UuanNvbiBhbmQgaXRzIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNpZ25vcmVTY3JpcHRzXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVTY3JpcHRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRG8gbm90IGV4ZWN1dGUgYW55IHNjcmlwdHMgb2YgdGhlIGluc3RhbGxlZCBwYWNrYWdlcy4gU2NyaXB0cyBvZiB0aGUgcHJvamVjdHMgYXJlIGV4ZWN1dGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2lnbm9yZURlcFNjcmlwdHNcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZURlcFNjcmlwdHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2hpbGQgcHJvY2Vzc2VzIHRvIGFsbG9jYXRlIHNpbXVsdGFuZW91c2x5IHRvIGJ1aWxkIG5vZGVfbW9kdWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNjaGlsZENvbmN1cnJlbmN5XG4gICAqL1xuICByZWFkb25seSBjaGlsZENvbmN1cnJlbmN5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBVc2UgYW5kIGNhY2hlIHRoZSByZXN1bHRzIG9mIChwcmUvcG9zdClpbnN0YWxsIGhvb2tzLlxuICAgKiBXaGVuIGEgcHJlL3Bvc3QgaW5zdGFsbCBzY3JpcHQgbW9kaWZ5IHRoZSBjb250ZW50cyBvZiBhIHBhY2thZ2UgKGUuZy4gYnVpbGQgb3V0cHV0KSwgcG5wbSBzYXZlcyB0aGUgbW9kaWZpZWQgcGFja2FnZSBpbiB0aGUgZ2xvYmFsIHN0b3JlLiBPbiBmdXR1cmUgaW5zdGFsbHMgb24gdGhlIHNhbWUgbWFjaGluZSwgcG5wbSByZXVzZXMgdGhpcyBjYWNoZWQsIHByZWJ1aWx0IHZlcnNpb24uXG4gICAqIEFuIG9iamVjdCBpcyB0aGUgY2Fub25pY2FsIHdheSB0byBkZWNsYXJlIHRoZSByZW1vdGUgdGllcjsgYHNpZGVFZmZlY3RzQ2FjaGU6IHRydWVgIGlzIHRoZSBzaG9ydGhhbmQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjc2lkZUVmZmVjdHNDYWNoZVxuICAgKi9cbiAgcmVhZG9ubHkgc2lkZUVmZmVjdHNDYWNoZT86IGFueTtcblxuICAvKipcbiAgICogT25seSB1c2UgdGhlIHNpZGUgZWZmZWN0cyBjYWNoZSBpZiBwcmVzZW50LCBkbyBub3QgY3JlYXRlIGl0IGZvciBuZXcgcGFja2FnZXMuIFRoZSBvbGRlciBzcGVsbGluZyBvZiBzaWRlRWZmZWN0c0NhY2hlOiB7IHJlYWQ6IHRydWUsIHdyaXRlOiBmYWxzZSB9LlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3NpZGVFZmZlY3RzQ2FjaGVSZWFkb25seVxuICAgKi9cbiAgcmVhZG9ubHkgc2lkZUVmZmVjdHNDYWNoZVJlYWRvbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gZW5hYmxlIFVJRC9HSUQgc3dpdGNoaW5nIHdoZW4gcnVubmluZyBwYWNrYWdlIHNjcmlwdHMuIElmIHNldCBleHBsaWNpdGx5IHRvIGZhbHNlLCB0aGVuIGluc3RhbGxpbmcgYXMgYSBub24tcm9vdCB1c2VyIHdpbGwgZmFpbC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSN1bnNhZmVQZXJtXG4gICAqL1xuICByZWFkb25seSB1bnNhZmVQZXJtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyB0byBwYXNzIHRocm91Z2ggdG8gTm9kZS5qcyB2aWEgdGhlIE5PREVfT1BUSU9OUyBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNub2RlT3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9kZU9wdGlvbnM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoaXMgc2V0dGluZyBhbGxvd3MgdGhlIGNoZWNraW5nIG9mIHRoZSBzdGF0ZSBvZiBkZXBlbmRlbmNpZXMgYmVmb3JlIHJ1bm5pbmcgc2NyaXB0cy5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSN2ZXJpZnlEZXBzQmVmb3JlUnVuXG4gICAqL1xuICByZWFkb25seSB2ZXJpZnlEZXBzQmVmb3JlUnVuPzogYW55O1xuXG4gIC8qKlxuICAgKiBXaGVuIHN0cmljdERlcEJ1aWxkcyBpcyBlbmFibGVkLCB0aGUgaW5zdGFsbGF0aW9uIHdpbGwgZXhpdCB3aXRoIGEgbm9uLXplcm8gZXhpdCBjb2RlIGlmIGFueSBkZXBlbmRlbmNpZXMgaGF2ZSB1bnJldmlld2VkIGJ1aWxkIHNjcmlwdHMgKGFrYSBwb3N0aW5zdGFsbCBzY3JpcHRzKS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNzdHJpY3REZXBCdWlsZHNcbiAgICovXG4gIHJlYWRvbmx5IHN0cmljdERlcEJ1aWxkcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGljaCBleGFjdCBOb2RlLmpzIHZlcnNpb24gc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBwcm9qZWN0J3MgcnVudGltZS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSN1c2VOb2RlVmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgdXNlTm9kZVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlLmpzIHZlcnNpb24gdG8gdXNlIHdoZW4gY2hlY2tpbmcgYSBwYWNrYWdlJ3MgZW5naW5lcyBzZXR0aW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI25vZGVWZXJzaW9uXG4gICAqL1xuICByZWFkb25seSBub2RlVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBlbmFibGVkLCBsb2NhbGx5IGF2YWlsYWJsZSBwYWNrYWdlcyBhcmUgbGlua2VkIHRvIG5vZGVfbW9kdWxlcyBpbnN0ZWFkIG9mIGJlaW5nIGRvd25sb2FkZWQgZnJvbSB0aGUgcmVnaXN0cnkuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjbGlua1dvcmtzcGFjZVBhY2thZ2VzXG4gICAqL1xuICByZWFkb25seSBsaW5rV29ya3NwYWNlUGFja2FnZXM/OiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYUxpbmtXb3Jrc3BhY2VQYWNrYWdlcztcblxuICAvKipcbiAgICogRW5hYmxlcyBoYXJkLWxpbmtpbmcgb2YgYWxsIGxvY2FsIHdvcmtzcGFjZSBkZXBlbmRlbmNpZXMgaW5zdGVhZCBvZiBzeW1saW5raW5nIHRoZW0uXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjaW5qZWN0V29ya3NwYWNlUGFja2FnZXNcbiAgICovXG4gIHJlYWRvbmx5IGluamVjdFdvcmtzcGFjZVBhY2thZ2VzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5qZWN0ZWQgd29ya3NwYWNlIGRlcGVuZGVuY2llcyBhcmUgY29sbGVjdGlvbnMgb2YgaGFyZGxpbmtzLCB3aGljaCBkb24ndCBhZGQgb3IgcmVtb3ZlIHRoZSBmaWxlcyB3aGVuIHRoZWlyIHNvdXJjZXMgY2hhbmdlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3N5bmNJbmplY3RlZERlcHNBZnRlclNjcmlwdHNcbiAgICovXG4gIHJlYWRvbmx5IHN5bmNJbmplY3RlZERlcHNBZnRlclNjcmlwdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBlbmFibGVkLCBsb2NhbCBwYWNrYWdlcyBmcm9tIHRoZSB3b3Jrc3BhY2UgYXJlIHByZWZlcnJlZCBvdmVyIHBhY2thZ2VzIGZyb20gdGhlIHJlZ2lzdHJ5LCBldmVuIGlmIHRoZXJlIGlzIGEgbmV3ZXIgdmVyc2lvbiBvZiB0aGUgcGFja2FnZSBpbiB0aGUgcmVnaXN0cnkuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjcHJlZmVyV29ya3NwYWNlUGFja2FnZXNcbiAgICovXG4gIHJlYWRvbmx5IHByZWZlcldvcmtzcGFjZVBhY2thZ2VzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBlbmFibGVkLCBwbnBtIGNyZWF0ZXMgYSBzaW5nbGUgcG5wbS1sb2NrLnlhbWwgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgd29ya3NwYWNlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3NoYXJlZFdvcmtzcGFjZUxvY2tmaWxlXG4gICAqL1xuICByZWFkb25seSBzaGFyZWRXb3Jrc3BhY2VMb2NrZmlsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoaXMgc2V0dGluZyBjb250cm9scyBob3cgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGxpbmtlZCBmcm9tIHRoZSB3b3Jrc3BhY2UgYXJlIGFkZGVkIHRvIHBhY2thZ2UuanNvbi5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNzYXZlV29ya3NwYWNlUHJvdG9jb2xcbiAgICovXG4gIHJlYWRvbmx5IHNhdmVXb3Jrc3BhY2VQcm90b2NvbD86IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hU2F2ZVdvcmtzcGFjZVByb3RvY29sO1xuXG4gIC8qKlxuICAgKiBXaGVuIGV4ZWN1dGluZyBjb21tYW5kcyByZWN1cnNpdmVseSBpbiBhIHdvcmtzcGFjZSwgZXhlY3V0ZSB0aGVtIG9uIHRoZSByb290IHdvcmtzcGFjZSBwcm9qZWN0IGFzIHdlbGwuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjaW5jbHVkZVdvcmtzcGFjZVJvb3RcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVXb3Jrc3BhY2VSb290PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiBzZXQgdG8gdHJ1ZSwgbm8gd29ya3NwYWNlIGN5Y2xlIHdhcm5pbmdzIHdpbGwgYmUgcHJpbnRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNpZ25vcmVXb3Jrc3BhY2VDeWNsZXNcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZVdvcmtzcGFjZUN5Y2xlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFkZGluZyBhIG5ldyBkZXBlbmRlbmN5IHRvIHRoZSByb290IHdvcmtzcGFjZSBwYWNrYWdlIGZhaWxzLCB1bmxlc3MgdGhlIC0taWdub3JlLXdvcmtzcGFjZS1yb290LWNoZWNrIG9yIC13IGZsYWcgaXMgdXNlZC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNpZ25vcmVXb3Jrc3BhY2VSb290Q2hlY2tcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZVdvcmtzcGFjZVJvb3RDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUsIGluc3RhbGxhdGlvbiB3aWxsIGZhaWwgaWYgdGhlIHdvcmtzcGFjZSBoYXMgY3ljbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2Rpc2FsbG93V29ya3NwYWNlQ3ljbGVzXG4gICAqL1xuICByZWFkb25seSBkaXNhbGxvd1dvcmtzcGFjZUN5Y2xlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGFza3MgdG8gcnVuIHNpbXVsdGFuZW91c2x5LiBGb3IgdW5saW1pdGVkIGNvbmN1cnJlbmN5IHVzZSBJbmZpbml0eS4gWW91IGNhbiBzZXQgdGhlIHZhbHVlIHRvIDw9IDAgYW5kIGl0IHdpbGwgdXNlIGFtb3VudCBvZiBDUFUgY29yZXMgb2YgdGhlIGhvc3QgbWludXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBwcm92aWRlZCBudW1iZXIgYXM6IG1heCgxLCAobnVtYmVyIG9mIGNvcmVzKSAtIGFicyh3b3Jrc3BhY2VDb25jdXJyZW5jeSkpLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3dvcmtzcGFjZUNvbmN1cnJlbmN5XG4gICAqL1xuICByZWFkb25seSB3b3Jrc3BhY2VDb25jdXJyZW5jeT86IG51bWJlcjtcblxuICAvKipcbiAgICogQ29uZmlndXJlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcyBhbmQgcGVyLXRhc2sgY29uY3VycmVuY3kgbGltaXRzIGZvciByZWN1cnNpdmUgcnVucyAoYHBucG0gLXIgcnVuIDxzY3JpcHQ+YCkuIEEgdGFzayBpcyBhIHNjcmlwdCBpbiBvbmUgd29ya3NwYWNlIHByb2plY3Q7IGl0IGJlY29tZXMgcmVhZHkgYWZ0ZXIgZXZlcnkgdGFzayBpdCBkZXBlbmRzIG9uIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkuIEEgdGFzayB3aXRoIG5vIGVudHJ5IHVuZGVyIHRhc2tzIGRlZmF1bHRzIHRvIGRlcGVuZGluZyBvbiB0aGUgc2FtZSB0YXNrIGluIGl0cyB3b3Jrc3BhY2UgZGVwZW5kZW5jaWVzLCBidXQgb25jZSBhIHRhc2sgaGFzIGFuIGVudHJ5LCBhbiBvbWl0dGVkIGRlcGVuZHNPbiBpcyB0aGUgc2FtZSBhcyBgZGVwZW5kc09uOiBbXWAuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjdGFza3NcbiAgICovXG4gIHJlYWRvbmx5IHRhc2tzPzogeyBba2V5OiBzdHJpbmddOiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVRhc2tzIH07XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIHBucG0gd2lsbCBmYWlsIGlmIG5vIHBhY2thZ2VzIG1hdGNoIHRoZSBmaWx0ZXJcbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNmYWlsSWZOb01hdGNoXG4gICAqL1xuICByZWFkb25seSBmYWlsSWZOb01hdGNoPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCwgcG5wbSBkZXBsb3kgd2lsbCB0cnkgY3JlYXRpbmcgYSBkZWRpY2F0ZWQgbG9ja2ZpbGUgZnJvbSBhIHNoYXJlZCBsb2NrZmlsZSBmb3IgZGVwbG95bWVudC4gSWYgdGhpcyBzZXR0aW5nIGlzIHNldCB0byB0cnVlLCB0aGUgbGVnYWN5IGRlcGxveSBiZWhhdmlvciB3aWxsIGJlIHVzZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjZm9yY2VMZWdhY3lEZXBsb3lcbiAgICovXG4gIHJlYWRvbmx5IGZvcmNlTGVnYWN5RGVwbG95PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJlIGhvdyB2ZXJzaW9ucyBvZiBwYWNrYWdlcyBpbnN0YWxsZWQgdG8gYSBwYWNrYWdlLmpzb24gZmlsZSBnZXQgcHJlZml4ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjc2F2ZVByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgc2F2ZVByZWZpeD86IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hU2F2ZVByZWZpeDtcblxuICAvKipcbiAgICogSWYgeW91IHBucG0gYWRkIGEgcGFja2FnZSBhbmQgeW91IGRvbid0IHByb3ZpZGUgYSBzcGVjaWZpYyB2ZXJzaW9uLCB0aGVuIGl0IHdpbGwgaW5zdGFsbCB0aGUgcGFja2FnZSBhdCB0aGUgdmVyc2lvbiByZWdpc3RlcmVkIHVuZGVyIHRoZSB0YWcgZnJvbSB0aGlzIHNldHRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjdGFnXG4gICAqL1xuICByZWFkb25seSB0YWc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgYSBjdXN0b20gZGlyZWN0b3J5IHRvIHN0b3JlIGdsb2JhbCBwYWNrYWdlcy5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNnbG9iYWxEaXJcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbERpcj86IHN0cmluZztcblxuICAvKipcbiAgICogQWxsb3dzIHRvIHNldCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBmb3IgdGhlIGJpbiBmaWxlcyBvZiBnbG9iYWxseSBpbnN0YWxsZWQgcGFja2FnZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjZ2xvYmFsQmluRGlyXG4gICAqL1xuICByZWFkb25seSBnbG9iYWxCaW5EaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoaWNoIGdsb2JhbGx5IGluc3RhbGxlZCBwYWNrYWdlcyBnZXQgcHJvamVjdC1hd2FyZSBzaGltcywgd2hpY2ggYXJlIGdsb2JhbCBjb21tYW5kcyB0aGF0IHJ1biB0aGUgdmVyc2lvbiBzcGVjaWZpZWQgYnkgdGhlIGN1cnJlbnQgcHJvamVjdCBpbnN0ZWFkIG9mIHRoZSBnbG9iYWxseSBpbnN0YWxsZWQgb25lLiBBIGJvb2xlYW4gZGlzYWJsZXMgKGZhbHNlKSBvciByZXNldHMgdG8gdGhlIGRlZmF1bHRzICh0cnVlKSwgd2hpbGUgYW4gb2JqZWN0IG1hcHMgcGFja2FnZSBuYW1lcyB0byBhIHBvbGljeTogXCJhdXRvXCIgKG9yIHRydWUpIHRvIHN3aXRjaCBhdXRvbWF0aWNhbGx5IHdoZW4gcHVibGlzaGVyLWF1dGhlbnRpY2F0ZWQsIFwicHJvbXB0XCIgdG8gY29uZmlybSBvbiBlYWNoIHVzZSwgXCJhbHdheXNcIiB0byBzd2l0Y2ggdW5jb25kaXRpb25hbGx5LCBvciBmYWxzZSB0byBkaXNhYmxlLiBPYmplY3QgZW50cmllcyBtZXJnZSB3aXRoIHRoZSBidWlsdC1pbiBkZWZhdWx0cyAoe1wibm9kZVwiOiBcImF1dG9cIiwgXCJkZW5vXCI6IFwiYXV0b1wiLCBcImJ1blwiOiBcImF1dG9cIn0pLiBBZGRlZCBpbiBwbnBtIHYxMi4wLjAtcmMuMi5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNnbG9iYWxTaGltc1xuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFsU2hpbXM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiB3aGVyZSBhbGwgdGhlIHBhY2thZ2VzIGFyZSBzYXZlZCBvbiB0aGUgZGlzay5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNzdGF0ZURpclxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGVEaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgY2FjaGUgKHBhY2thZ2UgbWV0YWRhdGEgYW5kIGRseCkuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjY2FjaGVEaXJcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlRGlyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIGFsbCB0aGUgb3V0cHV0IGlzIHdyaXR0ZW4gdG8gc3RkZXJyLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3VzZVN0ZGVyclxuICAgKi9cbiAgcmVhZG9ubHkgdXNlU3RkZXJyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiB0cnVlLCBwbnBtIHdpbGwgY2hlY2sgZm9yIHVwZGF0ZXMgdG8gdGhlIGluc3RhbGxlZCBwYWNrYWdlcyBhbmQgbm90aWZ5IHRoZSB1c2VyLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3VwZGF0ZU5vdGlmaWVyXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVOb3RpZmllcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEV4cGxpY2l0bHkgdGVsbHMgcG5wbSB3aGV0aGVyIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGlzIGEgQ29udGludW91cyBJbnRlZ3JhdGlvbiBzeXN0ZW0sIG92ZXJyaWRpbmcgcG5wbSdzIGF1dG9tYXRpYyBDSSBkZXRlY3Rpb24uIEFkZGVkIGluIHBucG0gdjEwLjEyLjEuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjY2lcbiAgICovXG4gIHJlYWRvbmx5IGNpPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3JlYXRlIHN5bWxpbmtzIHRvIGV4ZWN1dGFibGVzIGluIG5vZGVfbW9kdWxlcy8uYmluIGluc3RlYWQgb2YgY29tbWFuZCBzaGltcy4gVGhpcyBzZXR0aW5nIGlzIGlnbm9yZWQgb24gV2luZG93cywgd2hlcmUgb25seSBjb21tYW5kIHNoaW1zIHdvcmsuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjcHJlZmVyU3ltbGlua2VkRXhlY3V0YWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IHByZWZlclN5bWxpbmtlZEV4ZWN1dGFibGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRHVyaW5nIGluc3RhbGxhdGlvbiB0aGUgZGVwZW5kZW5jaWVzIG9mIHNvbWUgcGFja2FnZXMgYXJlIGF1dG9tYXRpY2FsbHkgcGF0Y2hlZC4gSWYgeW91IHdhbnQgdG8gZGlzYWJsZSB0aGlzLCBzZXQgdGhpcyBjb25maWcgdG8gZmFsc2UuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjaWdub3JlQ29tcGF0aWJpbGl0eURiXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVDb21wYXRpYmlsaXR5RGI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGhvdyBwbnBtIHJlc29sdmVzIGRlcGVuZGVuY2llcywgU2VlIGh0dHBzOi8vcG5wbS5pby9zZXR0aW5ncyNyZXNvbHV0aW9ubW9kZVxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3Jlc29sdXRpb25Nb2RlXG4gICAqL1xuICByZWFkb25seSByZXNvbHV0aW9uTW9kZT86IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hUmVzb2x1dGlvbk1vZGU7XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHRvIHRydWUgaWYgdGhlIHJlZ2lzdHJ5IHRoYXQgeW91IGFyZSB1c2luZyByZXR1cm5zIHRoZSBcInRpbWVcIiBmaWVsZCBpbiB0aGUgYWJicmV2aWF0ZWQgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjcmVnaXN0cnlTdXBwb3J0c1RpbWVGaWVsZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaXN0cnlTdXBwb3J0c1RpbWVGaWVsZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gZmFsc2UsIHRoZSBOT0RFX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCBpbiB0aGUgY29tbWFuZCBzaGltcy5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNleHRlbmROb2RlUGF0aFxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZW5kTm9kZVBhdGg/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVuIGRlcGxveWluZyBhIHBhY2thZ2Ugb3IgaW5zdGFsbGluZyBhIGxvY2FsIHBhY2thZ2UsIGFsbCBmaWxlcyBvZiB0aGUgcGFja2FnZSBhcmUgY29waWVkLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2RlcGxveUFsbEZpbGVzXG4gICAqL1xuICByZWFkb25seSBkZXBsb3lBbGxGaWxlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUsIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBhbHJlYWR5IHN5bWxpbmtlZCB0byB0aGUgcm9vdCBub2RlX21vZHVsZXMgZGlyZWN0b3J5IG9mIHRoZSB3b3Jrc3BhY2Ugd2lsbCBub3QgYmUgc3ltbGlua2VkIHRvIHN1YnByb2plY3Qgbm9kZV9tb2R1bGVzIGRpcmVjdG9yaWVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2RlZHVwZURpcmVjdERlcHNcbiAgICovXG4gIHJlYWRvbmx5IGRlZHVwZURpcmVjdERlcHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRoaXMgc2V0dGluZyBpcyBlbmFibGVkLCBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgaW5qZWN0ZWQgd2lsbCBiZSBzeW1saW5rZWQgZnJvbSB0aGUgd29ya3NwYWNlIHdoZW5ldmVyIHBvc3NpYmxlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2RlZHVwZUluamVjdGVkRGVwc1xuICAgKi9cbiAgcmVhZG9ubHkgZGVkdXBlSW5qZWN0ZWREZXBzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiBlbmFibGVkLCBhIGZhc3QgY2hlY2sgd2lsbCBiZSBwZXJmb3JtZWQgYmVmb3JlIHByb2NlZWRpbmcgdG8gaW5zdGFsbGF0aW9uLiBUaGlzIHdheSBhIHJlcGVhdCBpbnN0YWxsIG9yIGFuIGluc3RhbGwgb24gYSBwcm9qZWN0IHdpdGggZXZlcnl0aGluZyB1cC10by1kYXRlIGJlY29tZXMgYSBsb3QgZmFzdGVyLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI29wdGltaXN0aWNSZXBlYXRJbnN0YWxsXG4gICAqL1xuICByZWFkb25seSBvcHRpbWlzdGljUmVwZWF0SW5zdGFsbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGN1cnJlbnQgYnJhbmNoIGlzIHlvdXIgcHVibGlzaCBicmFuY2gsIGNsZWFuLCBhbmQgdXAtdG8tZGF0ZSB3aXRoIHJlbW90ZS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNnaXRDaGVja3NcbiAgICovXG4gIHJlYWRvbmx5IGdpdENoZWNrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVORE9DVU1FTlRFRC4gV2hlbiBgdHJ1ZWAsIGBwbnBtIHB1Ymxpc2hgIHdyaXRlcyB0aGUgUkVBRE1FIGZpbGUncyBjb250ZW50IGludG8gdGhlIHB1Ymxpc2hlZCBwYWNrYWdlLmpzb24gKHRoZSBgcmVhZG1lYCBmaWVsZCksIHNvIHJlZ2lzdHJpZXMgc3VjaCBhcyBucG1qcy5jb20gcmVuZGVyIHRoZSBwYWNrYWdlJ3MgUkVBRE1FLiBBZGRlZCBpbiBwbnBtIDYuMjguMDsgcG5wbSBkb2VzIG5vdCBlbWJlZCB0aGUgUkVBRE1FIHVubGVzcyB0aGlzIGlzIGVuYWJsZWQuIEl0IGFsc28gd29uJ3Qgb3ZlcnJpZGUgYSBgcmVhZG1lYCBmaWVsZCBhbHJlYWR5IHNldCBpbiB0aGUgcGFja2FnZS5qc29uXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjZW1iZWRSZWFkbWVcbiAgICovXG4gIHJlYWRvbmx5IGVtYmVkUmVhZG1lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHByaW1hcnkgYnJhbmNoIG9mIHRoZSByZXBvc2l0b3J5IHdoaWNoIGlzIHVzZWQgZm9yIHB1Ymxpc2hpbmcgdGhlIGxhdGVzdCBjaGFuZ2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3B1Ymxpc2hCcmFuY2hcbiAgICovXG4gIHJlYWRvbmx5IHB1Ymxpc2hCcmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb25pbmcgc2V0dGluZ3MgZm9yIHBucG0ncyBuYXRpdmUgd29ya3NwYWNlIHJlbGVhc2UgbWFuYWdlbWVudCwgdXNlZCBieSBgcG5wbSBjaGFuZ2VgIGFuZCByZWN1cnNpdmUgYHBucG0gdmVyc2lvbmAuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjdmVyc2lvbmluZ1xuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbmluZz86IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVmVyc2lvbmluZztcblxuICAvKipcbiAgICogV2hlbiBwdWJsaXNoaW5nIGZyb20gYSBzdXBwb3J0ZWQgY2xvdWQgQ0kvQ0Qgc3lzdGVtLCB0aGUgcGFja2FnZSB3aWxsIGJlIHB1YmxpY2x5IGxpbmtlZCB0byB3aGVyZSBpdCB3YXMgYnVpbHQgYW5kIHB1Ymxpc2hlZCBmcm9tLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3Byb3ZlbmFuY2VcbiAgICovXG4gIHJlYWRvbmx5IHByb3ZlbmFuY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gb2YgdGhlIGxvY2FsIHBucG1maWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3BucG1maWxlXG4gICAqL1xuICByZWFkb25seSBwbnBtZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxvY2F0aW9uIG9mIGEgZ2xvYmFsIHBucG1maWxlLiBBIGdsb2JhbCBwbnBtZmlsZSBpcyB1c2VkIGJ5IGFsbCBwcm9qZWN0cyBkdXJpbmcgaW5zdGFsbGF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI2dsb2JhbFBucG1maWxlXG4gICAqL1xuICByZWFkb25seSBnbG9iYWxQbnBtZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogLnBucG1maWxlLmNqcyB3aWxsIGJlIGlnbm9yZWQuIFVzZWZ1bCB0b2dldGhlciB3aXRoIC0taWdub3JlLXNjcmlwdHMgd2hlbiB5b3Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCBubyBzY3JpcHQgZ2V0cyBleGVjdXRlZCBkdXJpbmcgaW5zdGFsbC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNpZ25vcmVQbnBtZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlUG5wbWZpbGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2VuZXJhdGVkIHBhdGNoIGZpbGUgd2lsbCBiZSBzYXZlZCB0byB0aGlzIGRpcmVjdG9yeS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNwYXRjaGVzRGlyXG4gICAqL1xuICByZWFkb25seSBwYXRjaGVzRGlyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHBucG0gd2lsbCBydW4gYW55IHByZS9wb3N0IHNjcmlwdHMgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNlbmFibGVQcmVQb3N0U2NyaXB0c1xuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlUHJlUG9zdFNjcmlwdHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc2hlbGwgdG8gdXNlIGZvciBzY3JpcHRzIHJ1biB3aXRoIHRoZSBwbnBtIHJ1biBjb21tYW5kLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3NjcmlwdFNoZWxsXG4gICAqL1xuICByZWFkb25seSBzY3JpcHRTaGVsbD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hlbiB0cnVlLCBwbnBtIHdpbGwgdXNlIGEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiBhIGJhc2gtbGlrZSBzaGVsbCB0byBleGVjdXRlIHNjcmlwdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjc2hlbGxFbXVsYXRvclxuICAgKi9cbiAgcmVhZG9ubHkgc2hlbGxFbXVsYXRvcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNhdmVkIGRlcGVuZGVuY2llcyB3aWxsIGJlIGNvbmZpZ3VyZWQgd2l0aCBhbiBleGFjdCB2ZXJzaW9uIHJhdGhlciB0aGFuIHVzaW5nIHBucG0ncyBkZWZhdWx0IHNlbXZlciByYW5nZSBvcGVyYXRvci5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNzYXZlRXhhY3RcbiAgICovXG4gIHJlYWRvbmx5IHNhdmVFeGFjdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIG1pbmltdW1SZWxlYXNlQWdlIGRlZmluZXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG1pbnV0ZXMgdGhhdCBtdXN0IHBhc3MgYWZ0ZXIgYSB2ZXJzaW9uIGlzIHB1Ymxpc2hlZCBiZWZvcmUgcG5wbSB3aWxsIGluc3RhbGwgaXQuIFRoaXMgYXBwbGllcyB0byBhbGwgZGVwZW5kZW5jaWVzLCBpbmNsdWRpbmcgdHJhbnNpdGl2ZSBvbmVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI21pbmltdW1SZWxlYXNlQWdlXG4gICAqL1xuICByZWFkb25seSBtaW5pbXVtUmVsZWFzZUFnZT86IG51bWJlcjtcblxuICAvKipcbiAgICogSWYgeW91IHNldCBgbWluaW11bVJlbGVhc2VBZ2VgIGJ1dCBuZWVkIGNlcnRhaW4gZGVwZW5kZW5jaWVzIHRvIGFsd2F5cyBpbnN0YWxsIHRoZSBuZXdlc3QgdmVyc2lvbiBpbW1lZGlhdGVseSwgeW91IGNhbiBsaXN0IHRoZW0gdW5kZXIgYG1pbmltdW1SZWxlYXNlQWdlRXhjbHVkZWAuIFRoZSBleGNsdXNpb24gd29ya3MgYnkgYHBhY2thZ2UgbmFtZWAgYW5kIGFwcGxpZXMgdG8gYWxsIHZlcnNpb25zIG9mIHRoYXQgcGFja2FnZS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNtaW5pbXVtUmVsZWFzZUFnZUV4Y2x1ZGVcbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1SZWxlYXNlQWdlRXhjbHVkZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyBob3cgcG5wbSBiZWhhdmVzIHdoZW4gbm8gdmVyc2lvbiBvZiBhIGRlcGVuZGVuY3kgc2F0aXNmaWVzIHRoZSBtaW5pbXVtUmVsZWFzZUFnZSBjb25zdHJhaW50IHdpdGhpbiB0aGUgcmVxdWVzdGVkIHJhbmdlLlxuICAgKiBodHRwczovL3BucG0uaW8vc2V0dGluZ3MjbWluaW11bXJlbGVhc2VhZ2VzdHJpY3RcbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNtaW5pbXVtUmVsZWFzZUFnZVN0cmljdFxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVJlbGVhc2VBZ2VTdHJpY3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byB0cnVlLCBwbnBtIGFkZCwgcG5wbSB1cGRhdGUsIGFuZCBwbnBtIHJlbW92ZSBwcnVuZSB0aGUgZW50cmllcyBvZiBtaW5pbXVtUmVsZWFzZUFnZUV4Y2x1ZGUgaW4gcG5wbS13b3Jrc3BhY2UueWFtbCB0aGF0IHRoZSBmcmVzaGx5IHdyaXR0ZW4gbG9ja2ZpbGUgbm8gbG9uZ2VyIHJlc29sdmVzOiBhIHZlcnNpb24gdGhhdCBpcyBnb25lIGlzIGRyb3BwZWQgKGFuIGVudHJ5IGlzIHJlbW92ZWQgb25jZSBub25lIG9mIGl0cyB2ZXJzaW9ucyByZW1haW4pLCBhbmQgYW4gZW50cnkgZm9yIGEgcGFja2FnZSB0aGF0IGlzIG5vIGxvbmdlciBpbiB0aGUgbG9ja2ZpbGUgaXMgcmVtb3ZlZCB0b28uIE5hbWUgcGF0dGVybnMgKEBteW9yZy8qKSBhcmUgYWx3YXlzIGtlcHQuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjbWluaW11bVJlbGVhc2VBZ2VFeGNsdWRlUHJ1bmVcbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1SZWxlYXNlQWdlRXhjbHVkZVBydW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQnlwYXNzIHN0YWxlbmVzcyBjaGVja3MgZm9yIGNhY2hlZCBkYXRhLiBNaXNzaW5nIGRhdGEgd2lsbCBzdGlsbCBiZSByZXF1ZXN0ZWQgZnJvbSB0aGUgc2VydmVyLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI3ByZWZlck9mZmxpbmVcbiAgICovXG4gIHJlYWRvbmx5IHByZWZlck9mZmxpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byBuby1kb3duZ3JhZGUsIHBucG0gd2lsbCBmYWlsIGlmIGEgcGFja2FnZSdzIHRydXN0IGxldmVsIGhhcyBkZWNyZWFzZWQgY29tcGFyZWQgdG8gcHJldmlvdXMgcmVsZWFzZXMuIEZvciBleGFtcGxlLCBpZiBhIHBhY2thZ2Ugd2FzIHByZXZpb3VzbHkgcHVibGlzaGVkIGJ5IGEgdHJ1c3RlZCBwdWJsaXNoZXIgYnV0IG5vdyBvbmx5IGhhcyBwcm92ZW5hbmNlIG9yIG5vIHRydXN0IGV2aWRlbmNlLCBpbnN0YWxsYXRpb24gd2lsbCBmYWlsLiBUaGlzIGhlbHBzIHByZXZlbnQgaW5zdGFsbGluZyBwb3RlbnRpYWxseSBjb21wcm9taXNlZCB2ZXJzaW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSN0cnVzdFBvbGljeVxuICAgKi9cbiAgcmVhZG9ubHkgdHJ1c3RQb2xpY3k/OiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVRydXN0UG9saWN5O1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIG5vdyBsaXN0IG9uZSBvciBtb3JlIHNwZWNpZmljIHBhY2thZ2VzIG9yIHZlcnNpb25zIHRoYXQgcG5wbSBzaG91bGQgYWxsb3cgdG8gaW5zdGFsbCwgZXZlbiBpZiB0aG9zZSBwYWNrYWdlcyBkb24ndCBzYXRpc2Z5IHRoZSB0cnVzdCBwb2xpY3kgcmVxdWlyZW1lbnQuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjdHJ1c3RQb2xpY3lFeGNsdWRlXG4gICAqL1xuICByZWFkb25seSB0cnVzdFBvbGljeUV4Y2x1ZGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBtYXAgb2YgcGFja2FnZSBtYXRjaGVycyB0byBleHBsaWNpdGx5IGFsbG93IChgdHJ1ZWApIG9yIGRpc2FsbG93IChgZmFsc2VgKSBzY3JpcHQgZXhlY3V0aW9uLiBUaGlzIGZpZWxkIHJlcGxhY2VzIGBvbmx5QnVpbHREZXBlbmRlbmNpZXNgIGFuZCBgaWdub3JlZEJ1aWx0RGVwZW5kZW5jaWVzYCAod2hpY2ggYXJlIGFsc28gZGVwcmVjYXRlZCBieSB0aGlzIG5ldyBzZXR0aW5nKSwgcHJvdmlkaW5nIGEgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNhbGxvd0J1aWxkc1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dCdWlsZHM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUsIGl0IHByZXZlbnRzIHRoZSByZXNvbHV0aW9uIG9mIGV4b3RpYyBwcm90b2NvbHMgKGxpa2UgZ2l0K3NzaDogb3IgZGlyZWN0IGh0dHBzOiB0YXJiYWxscykgaW4gdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMuIE9ubHkgZGlyZWN0IGRlcGVuZGVuY2llcyBhcmUgYWxsb3dlZCB0byB1c2UgZXhvdGljIHNvdXJjZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjYmxvY2tFeG90aWNTdWJkZXBzXG4gICAqL1xuICByZWFkb25seSBibG9ja0V4b3RpY1N1YmRlcHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbGxvd3MgaWdub3JpbmcgdGhlIHRydXN0IHBvbGljeSBjaGVjayBmb3IgcGFja2FnZXMgcHVibGlzaGVkIG1vcmUgdGhhbiB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaW51dGVzIGFnby4gVGhpcyBpcyB1c2VmdWwgd2hlbiBlbmFibGluZyBzdHJpY3QgdHJ1c3QgcG9saWNpZXMsIGFzIGl0IGFsbG93cyBvbGRlciB2ZXJzaW9ucyBvZiBwYWNrYWdlcyAod2hpY2ggbWF5IGxhY2sgYSBwcm9jZXNzIGZvciBwdWJsaXNoaW5nIHdpdGggc2lnbmF0dXJlcyBvciBwcm92ZW5hbmNlKSB0byBiZSBpbnN0YWxsZWQgd2l0aG91dCBtYW51YWwgZXhjbHVzaW9uLCBhc3N1bWluZyB0aGV5IGFyZSBzYWZlIGR1ZSB0byB0aGVpciBhZ2UuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjdHJ1c3RQb2xpY3lJZ25vcmVBZnRlclxuICAgKi9cbiAgcmVhZG9ubHkgdHJ1c3RQb2xpY3lJZ25vcmVBZnRlcj86IG51bWJlcjtcblxuICAvKipcbiAgICogQ29udHJvbHMgdGhlIGxldmVsIG9mIGlzc3VlcyByZXBvcnRlZCBieSBgcG5wbSBhdWRpdGAuIFdoZW4gc2V0IHRvICdsb3cnLCBhbGwgdnVsbmVyYWJpbGl0aWVzIGFyZSByZXBvcnRlZC4gV2hlbiBzZXQgdG8gJ21vZGVyYXRlJywgJ2hpZ2gnLCBvciAnY3JpdGljYWwnLCBvbmx5IHZ1bG5lcmFiaWxpdGllcyB3aXRoIHRoYXQgc2V2ZXJpdHkgb3IgaGlnaGVyIGFyZSByZXBvcnRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNhdWRpdExldmVsXG4gICAqL1xuICByZWFkb25seSBhdWRpdExldmVsPzogUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFBdWRpdExldmVsO1xuXG4gIC8qKlxuICAgKiBXaGVuIGVuYWJsZWQsIHBlZXIgZGVwZW5kZW5jeSBzdWZmaXhlcyB1c2UgdmVyc2lvbi1vbmx5IGlkZW50aWZpZXJzIChgbmFtZUB2ZXJzaW9uYCkgaW5zdGVhZCBvZiBmdWxsIGRlcCBwYXRocywgZWxpbWluYXRpbmcgbmVzdGVkIHN1ZmZpeGVzIGxpa2UgYChmb29AMS4wLjAoYmFyQDIuMC4wKSlgLiBUaGlzIGRyYW1hdGljYWxseSByZWR1Y2VzIHRoZSBudW1iZXIgb2YgcGFja2FnZSBpbnN0YW5jZXMgaW4gcHJvamVjdHMgd2l0aCBtYW55IHJlY3Vyc2l2ZSBwZWVyIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNkZWR1cGVQZWVyc1xuICAgKi9cbiAgcmVhZG9ubHkgZGVkdXBlUGVlcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byBhIGZpbGUgY29udGFpbmluZyByZWdpc3RyeSBhdXRoZW50aWNhdGlvbiB0b2tlbnMuIEJ5IGRlZmF1bHQsIHBucG0gcmVhZHMgYXV0aCB0b2tlbnMgZnJvbSB+Ly5ucG1yYyBhcyBhIGZhbGxiYWNrIGZvciByZWdpc3RyeSBhdXRoZW50aWNhdGlvbi4gVXNlIHRoaXMgc2V0dGluZyB0byBwb2ludCB0byBhIGRpZmZlcmVudCBmaWxlIGluc3RlYWQuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjbnBtcmNBdXRoRmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgbnBtcmNBdXRoRmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIHBucG0gc2tpcHMgdGhlIGBtaW5pbXVtUmVsZWFzZUFnZWAgY2hlY2sgZm9yIGEgcGFja2FnZSB3aG9zZSByZWdpc3RyeSBtZXRhZGF0YSBkb2VzIG5vdCBpbmNsdWRlIHRoZSB0aW1lIGZpZWxkIChzb21lIHByaXZhdGUgcmVnaXN0cmllcyBhbmQgbWlycm9ycyBvbWl0IGl0KS4gU2V0IHRvIGBmYWxzZWAgdG8gZmFpbCByZXNvbHV0aW9uIGluIHRoYXQgY2FzZSBpbnN0ZWFkIG9mIGluc3RhbGxpbmcgdGhlIHBhY2thZ2UuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjbWluaW11bVJlbGVhc2VBZ2VJZ25vcmVNaXNzaW5nVGltZVxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVJlbGVhc2VBZ2VJZ25vcmVNaXNzaW5nVGltZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSByZWdpc3RyaWVzIGZvciBzY29wZWQgcGFja2FnZXMgaW4gYHBucG0td29ya3NwYWNlLnlhbWxgLiBUaGUgYGRlZmF1bHRgIGtleSBzZXRzIHRoZSBtYWluIHJlZ2lzdHJ5IChlcXVpdmFsZW50IHRvIHRoZSBgcmVnaXN0cnlgIGAubnBtcmNgIHNldHRpbmcpLiBTY29wZWQga2V5cyBjb25maWd1cmUgcmVnaXN0cmllcyBmb3Igc3BlY2lmaWMgcGFja2FnZSBzY29wZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjcmVnaXN0cmllc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVnaXN0cmllcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIERlZmluZXMgbmFtZWQgcmVnaXN0cnkgYWxpYXNlcyB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgcHJlZml4IHdoZW4gaW5zdGFsbGluZyBwYWNrYWdlcywgZS5nLiBgcG5wbSBhZGQgd29yazpAY29ycC9saWJAXjIuMC4wYCByZXNvbHZlcyBgQGNvcnAvbGliQF4yLjAuMGAgYWdhaW5zdCB0aGUgY29uZmlndXJlZCBVUkwuIEJ1aWx0LWluIGFsaWFzZXMgYGdoOmAgKGh0dHBzOi8vbnBtLnBrZy5naXRodWIuY29tLykgYW5kIGBucG1qczpgIChodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8pIHdvcmsgd2l0aG91dCBhbnkgY29uZmlndXJhdGlvbiBhbmQgY2FuIGJlIG92ZXJyaWRkZW4uIEFuIGFsaWFzIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGxldHRlcnMsIGRpZ2l0cywgYC5gLCBgX2AsIGFuZCBgLWAuIEFkZGVkIGluIHBucG0gMTEuMS4wLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI25hbWVkUmVnaXN0cmllc1xuICAgKi9cbiAgcmVhZG9ubHkgbmFtZWRSZWdpc3RyaWVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogV2hlbiBzZXQgdG8gdHJ1ZSwgcG5wbSBwb3B1bGF0ZXMgdGhlIHZpcnR1YWwgc3RvcmUgd2l0aG91dCBjcmVhdGluZyBpbXBvcnRlciBzeW1saW5rcywgaG9pc3RpbmcsIGJpbiBsaW5rcywgb3IgcnVubmluZyBsaWZlY3ljbGUgc2NyaXB0cy4gVGhpcyBpcyB1c2VmdWwgZm9yIHByZS1wb3B1bGF0aW5nIGEgc3RvcmUgKGUuZy4sIGluIE5peCBidWlsZHMpIHdpdGhvdXQgY3JlYXRpbmcgdW5uZWNlc3NhcnkgcHJvamVjdC1sZXZlbCBhcnRpZmFjdHMuIHBucG0gZmV0Y2ggdXNlcyB0aGlzIG1vZGUgaW50ZXJuYWxseS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSN2aXJ0dWFsU3RvcmVPbmx5XG4gICAqL1xuICByZWFkb25seSB2aXJ0dWFsU3RvcmVPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3ZlcnJpZGVzIHRoZSBgb25GYWlsYCBiZWhhdmlvciBvZiBib3RoIHRoZSBgcGFja2FnZU1hbmFnZXJgIGZpZWxkIGFuZCBgZGV2RW5naW5lcy5wYWNrYWdlTWFuYWdlcmAgd2hlbiB0aGUgcnVubmluZyBwbnBtIHZlcnNpb24gZG9lcyBub3QgbWF0Y2ggdGhlIGRlY2xhcmVkIG9uZS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYSNwbU9uRmFpbFxuICAgKi9cbiAgcmVhZG9ubHkgcG1PbkZhaWw/OiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVBtT25GYWlsO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdGhlIGBvbkZhaWxgIGZpZWxkIG9mIGBkZXZFbmdpbmVzLnJ1bnRpbWVgIChhbmQgYGVuZ2luZXMucnVudGltZWApIGluIHRoZSByb290IHByb2plY3QncyBgcGFja2FnZS5qc29uYC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCBhIGRpZmZlcmVudCBsb2NhbCBiZWhhdmlvciB0aGFuIHdoYXQgaXMgd3JpdHRlbiBpbiB0aGUgbWFuaWZlc3Qg4oCUIGZvciBpbnN0YW5jZSwgZm9yY2luZyBwbnBtIHRvIGRvd25sb2FkIHRoZSBkZWNsYXJlZCBydW50aW1lIGV2ZW4gd2hlbiB0aGUgbWFuaWZlc3Qgc2V0cyBgb25GYWlsOiBcIndhcm5cImAuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjcnVudGltZU9uRmFpbFxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZU9uRmFpbD86IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hUnVudGltZU9uRmFpbDtcblxuICAvKipcbiAgICogQ29uZmlndXJlIGN1c3RvbSBOb2RlLmpzIGRvd25sb2FkIG1pcnJvcnMgaW4gYHBucG0td29ya3NwYWNlLnlhbWxgLiBUaGUga2V5cyBhcmUgcmVsZWFzZSBjaGFubmVscyAoYHJlbGVhc2VgLCBgcmNgLCBgbmlnaHRseWAsIGB2OC1jYW5hcnlgLCBldGMuKSBhbmQgdGhlIHZhbHVlcyBhcmUgYmFzZSBVUkxzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hI25vZGVEb3dubG9hZE1pcnJvcnNcbiAgICovXG4gIHJlYWRvbmx5IG5vZGVEb3dubG9hZE1pcnJvcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBIG5ldyB0cnVzdExvY2tmaWxlIHNldHRpbmcgY29udHJvbHMgd2hldGhlciBwbnBtIGluc3RhbGwgcmUtYXBwbGllcyB0aGUgYG1pbmltdW1SZWxlYXNlQWdlYCAvIGB0cnVzdFBvbGljeTogJ25vLWRvd25ncmFkZSdgIGNoZWNrcyB0byBldmVyeSBlbnRyeSBpbiB0aGUgbG9hZGVkIGxvY2tmaWxlLiBXaGVuIHRydWUsIHRoZSBpbnN0YWxsIHRyZWF0cyB0aGUgbG9ja2ZpbGUgYXMgYWxyZWFkeS10cnVzdGVkIGFuZCBza2lwcyB0aGUgdmVyaWZpY2F0aW9uIHBhc3Mg4oCUIHVzZWZ1bCBmb3IgY2xvc2VkLXNvdXJjZSBwcm9qZWN0cyB3aGVyZSBldmVyeSBjb21taXQgY29tZXMgZnJvbSBhIHRydXN0ZWQgYXV0aG9yLiBUaGUgZGVmYXVsdCBpcyBmYWxzZSwgc28gdmVyaWZpY2F0aW9uIHN0YXlzIG9uIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjdHJ1c3RMb2NrZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJ1c3RMb2NrZmlsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFkZGVkIGEgbmV3IGhvaXN0aW5nTGltaXRzIHNldHRpbmcgZm9yIGBub2RlTGlua2VyOiBob2lzdGVkYCBpbnN0YWxscywgbWlycm9yaW5nIHlhcm4ncyBgbm1Ib2lzdGluZ0xpbWl0c2AuIEl0IGFjY2VwdHMgYG5vbmVgICh0aGUgZGVmYXVsdCDigJQgaG9pc3QgYXMgZmFyIGFzIHBvc3NpYmxlKSwgd29ya3NwYWNlcyAoaG9pc3Qgb25seSBhcyBmYXIgYXMgZWFjaCB3b3Jrc3BhY2UgcGFja2FnZSksIG9yIGRlcGVuZGVuY2llcyAoaG9pc3Qgb25seSB1cCB0byBlYWNoIHdvcmtzcGFjZSBwYWNrYWdlJ3MgZGlyZWN0IGRlcGVuZGVuY2llcykuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEjaG9pc3RpbmdMaW1pdHNcbiAgICovXG4gIHJlYWRvbmx5IGhvaXN0aW5nTGltaXRzPzogUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFIb2lzdGluZ0xpbWl0cztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWEnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9QbnBtV29ya3NwYWNlWWFtbFNjaGVtYShvYmo6IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncGFja2FnZXMnOiBvYmoucGFja2FnZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdjYXRhbG9nJzogKChvYmouY2F0YWxvZykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmNhdGFsb2cpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpLFxuICAgICdjYXRhbG9ncyc6ICgob2JqLmNhdGFsb2dzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouY2F0YWxvZ3MpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiAoKGlbMV0pID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKGlbMV0pLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpIH0pLCB7fSkpLFxuICAgICdjYXRhbG9nTW9kZSc6IG9iai5jYXRhbG9nTW9kZSxcbiAgICAnY2xlYW51cFVudXNlZENhdGFsb2dzJzogb2JqLmNsZWFudXBVbnVzZWRDYXRhbG9ncyxcbiAgICAnY2F0YWxvZ1BydW5lJzogb2JqLmNhdGFsb2dQcnVuZSxcbiAgICAnb25seUJ1aWx0RGVwZW5kZW5jaWVzJzogb2JqLm9ubHlCdWlsdERlcGVuZGVuY2llcz8ubWFwKHkgPT4geSksXG4gICAgJ292ZXJyaWRlcyc6IG9iai5vdmVycmlkZXMsXG4gICAgJ3BhY2thZ2VFeHRlbnNpb25zJzogb2JqLnBhY2thZ2VFeHRlbnNpb25zLFxuICAgICdwYWNrYWdlQ29uZmlncyc6IG9iai5wYWNrYWdlQ29uZmlncyxcbiAgICAncGVlckRlcGVuZGVuY3lSdWxlcyc6IHRvSnNvbl9QbnBtV29ya3NwYWNlWWFtbFNjaGVtYVBlZXJEZXBlbmRlbmN5UnVsZXMob2JqLnBlZXJEZXBlbmRlbmN5UnVsZXMpLFxuICAgICduZXZlckJ1aWx0RGVwZW5kZW5jaWVzJzogb2JqLm5ldmVyQnVpbHREZXBlbmRlbmNpZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdkYW5nZXJvdXNseUFsbG93QWxsQnVpbGRzJzogb2JqLmRhbmdlcm91c2x5QWxsb3dBbGxCdWlsZHMsXG4gICAgJ29ubHlCdWlsdERlcGVuZGVuY2llc0ZpbGUnOiBvYmoub25seUJ1aWx0RGVwZW5kZW5jaWVzRmlsZSxcbiAgICAnaWdub3JlZEJ1aWx0RGVwZW5kZW5jaWVzJzogb2JqLmlnbm9yZWRCdWlsdERlcGVuZGVuY2llcz8ubWFwKHkgPT4geSksXG4gICAgJ2FsbG93ZWREZXByZWNhdGVkVmVyc2lvbnMnOiAoKG9iai5hbGxvd2VkRGVwcmVjYXRlZFZlcnNpb25zKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouYWxsb3dlZERlcHJlY2F0ZWRWZXJzaW9ucykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSksXG4gICAgJ3BhdGNoZWREZXBlbmRlbmNpZXMnOiAoKG9iai5wYXRjaGVkRGVwZW5kZW5jaWVzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmoucGF0Y2hlZERlcGVuZGVuY2llcykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSksXG4gICAgJ2FsbG93VW51c2VkUGF0Y2hlcyc6IG9iai5hbGxvd1VudXNlZFBhdGNoZXMsXG4gICAgJ2FsbG93Tm9uQXBwbGllZFBhdGNoZXMnOiBvYmouYWxsb3dOb25BcHBsaWVkUGF0Y2hlcyxcbiAgICAnaWdub3JlUGF0Y2hGYWlsdXJlcyc6IG9iai5pZ25vcmVQYXRjaEZhaWx1cmVzLFxuICAgICd1cGRhdGUnOiB0b0pzb25fUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFVcGRhdGUob2JqLnVwZGF0ZSksXG4gICAgJ3VwZGF0ZUNvbmZpZyc6IHRvSnNvbl9QbnBtV29ya3NwYWNlWWFtbFNjaGVtYVVwZGF0ZUNvbmZpZyhvYmoudXBkYXRlQ29uZmlnKSxcbiAgICAnY29uZmlnRGVwZW5kZW5jaWVzJzogb2JqLmNvbmZpZ0RlcGVuZGVuY2llcyxcbiAgICAnYXVkaXQnOiB0b0pzb25fUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFBdWRpdChvYmouYXVkaXQpLFxuICAgICdhdWRpdENvbmZpZyc6IHRvSnNvbl9QbnBtV29ya3NwYWNlWWFtbFNjaGVtYUF1ZGl0Q29uZmlnKG9iai5hdWRpdENvbmZpZyksXG4gICAgJ3JlcXVpcmVkU2NyaXB0cyc6IG9iai5yZXF1aXJlZFNjcmlwdHM/Lm1hcCh5ID0+IHkpLFxuICAgICdzdXBwb3J0ZWRBcmNoaXRlY3R1cmVzJzogdG9Kc29uX1BucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hU3VwcG9ydGVkQXJjaGl0ZWN0dXJlcyhvYmouc3VwcG9ydGVkQXJjaGl0ZWN0dXJlcyksXG4gICAgJ2lnbm9yZWRPcHRpb25hbERlcGVuZGVuY2llcyc6IG9iai5pZ25vcmVkT3B0aW9uYWxEZXBlbmRlbmNpZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdleGVjdXRpb25FbnYnOiB0b0pzb25fUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFFeGVjdXRpb25FbnYob2JqLmV4ZWN1dGlvbkVudiksXG4gICAgJ2hvaXN0Jzogb2JqLmhvaXN0LFxuICAgICdob2lzdFdvcmtzcGFjZVBhY2thZ2VzJzogb2JqLmhvaXN0V29ya3NwYWNlUGFja2FnZXMsXG4gICAgJ2hvaXN0UGF0dGVybic6IG9iai5ob2lzdFBhdHRlcm4/Lm1hcCh5ID0+IHkpLFxuICAgICdwdWJsaWNIb2lzdFBhdHRlcm4nOiBvYmoucHVibGljSG9pc3RQYXR0ZXJuPy5tYXAoeSA9PiB5KSxcbiAgICAnc2hhbWVmdWxseUhvaXN0Jzogb2JqLnNoYW1lZnVsbHlIb2lzdCxcbiAgICAnbW9kdWxlc0Rpcic6IG9iai5tb2R1bGVzRGlyLFxuICAgICdub2RlTGlua2VyJzogb2JqLm5vZGVMaW5rZXIsXG4gICAgJ25vZGVFeHBlcmltZW50YWxQYWNrYWdlTWFwJzogb2JqLm5vZGVFeHBlcmltZW50YWxQYWNrYWdlTWFwLFxuICAgICdub2RlUGFja2FnZU1hcFR5cGUnOiBvYmoubm9kZVBhY2thZ2VNYXBUeXBlLFxuICAgICdzeW1saW5rJzogb2JqLnN5bWxpbmssXG4gICAgJ2VuYWJsZU1vZHVsZXNEaXInOiBvYmouZW5hYmxlTW9kdWxlc0RpcixcbiAgICAndmlydHVhbFN0b3JlRGlyJzogb2JqLnZpcnR1YWxTdG9yZURpcixcbiAgICAndmlydHVhbFN0b3JlRGlyTWF4TGVuZ3RoJzogb2JqLnZpcnR1YWxTdG9yZURpck1heExlbmd0aCxcbiAgICAndmlydHVhbFN0b3JlVHlwZSc6IG9iai52aXJ0dWFsU3RvcmVUeXBlLFxuICAgICdwYWNrYWdlSW1wb3J0TWV0aG9kJzogb2JqLnBhY2thZ2VJbXBvcnRNZXRob2QsXG4gICAgJ21vZHVsZXNDYWNoZU1heEFnZSc6IG9iai5tb2R1bGVzQ2FjaGVNYXhBZ2UsXG4gICAgJ2RseENhY2hlTWF4QWdlJzogb2JqLmRseENhY2hlTWF4QWdlLFxuICAgICdzdG9yZURpcic6IG9iai5zdG9yZURpcixcbiAgICAndmVyaWZ5U3RvcmVJbnRlZ3JpdHknOiBvYmoudmVyaWZ5U3RvcmVJbnRlZ3JpdHksXG4gICAgJ3VzZVJ1bm5pbmdTdG9yZVNlcnZlcic6IG9iai51c2VSdW5uaW5nU3RvcmVTZXJ2ZXIsXG4gICAgJ2Zyb3plblN0b3JlJzogb2JqLmZyb3plblN0b3JlLFxuICAgICdzdHJpY3RTdG9yZVBrZ0NvbnRlbnRDaGVjayc6IG9iai5zdHJpY3RTdG9yZVBrZ0NvbnRlbnRDaGVjayxcbiAgICAnZW5hYmxlR2xvYmFsVmlydHVhbFN0b3JlJzogb2JqLmVuYWJsZUdsb2JhbFZpcnR1YWxTdG9yZSxcbiAgICAnbG9ja2ZpbGUnOiBvYmoubG9ja2ZpbGUsXG4gICAgJ3ByZWZlckZyb3plbkxvY2tmaWxlJzogb2JqLnByZWZlckZyb3plbkxvY2tmaWxlLFxuICAgICdsb2NrZmlsZUluY2x1ZGVUYXJiYWxsVXJsJzogb2JqLmxvY2tmaWxlSW5jbHVkZVRhcmJhbGxVcmwsXG4gICAgJ2dpdEJyYW5jaExvY2tmaWxlJzogb2JqLmdpdEJyYW5jaExvY2tmaWxlLFxuICAgICdtZXJnZUdpdEJyYW5jaExvY2tmaWxlc0JyYW5jaFBhdHRlcm4nOiBvYmoubWVyZ2VHaXRCcmFuY2hMb2NrZmlsZXNCcmFuY2hQYXR0ZXJuPy5tYXAoeSA9PiB5KSxcbiAgICAncGVlcnNTdWZmaXhNYXhMZW5ndGgnOiBvYmoucGVlcnNTdWZmaXhNYXhMZW5ndGgsXG4gICAgJ3JlZ2lzdHJ5Jzogb2JqLnJlZ2lzdHJ5LFxuICAgICdjYSc6IG9iai5jYSxcbiAgICAnY2FmaWxlJzogb2JqLmNhZmlsZSxcbiAgICAnY2VydCc6IG9iai5jZXJ0LFxuICAgICdrZXknOiBvYmoua2V5LFxuICAgICdnaXRTaGFsbG93SG9zdHMnOiBvYmouZ2l0U2hhbGxvd0hvc3RzPy5tYXAoeSA9PiB5KSxcbiAgICAnaHR0cHNQcm94eSc6IG9iai5odHRwc1Byb3h5LFxuICAgICdodHRwUHJveHknOiBvYmouaHR0cFByb3h5LFxuICAgICdwcm94eSc6IG9iai5wcm94eSxcbiAgICAnbG9jYWxBZGRyZXNzJzogb2JqLmxvY2FsQWRkcmVzcyxcbiAgICAnbWF4c29ja2V0cyc6IG9iai5tYXhzb2NrZXRzLFxuICAgICdub1Byb3h5Jzogb2JqLm5vUHJveHksXG4gICAgJ3N0cmljdFNzbCc6IG9iai5zdHJpY3RTc2wsXG4gICAgJ25ldHdvcmtDb25jdXJyZW5jeSc6IG9iai5uZXR3b3JrQ29uY3VycmVuY3ksXG4gICAgJ2ZldGNoUmV0cmllcyc6IG9iai5mZXRjaFJldHJpZXMsXG4gICAgJ2ZldGNoUmV0cnlGYWN0b3InOiBvYmouZmV0Y2hSZXRyeUZhY3RvcixcbiAgICAnZmV0Y2hSZXRyeU1pbnRpbWVvdXQnOiBvYmouZmV0Y2hSZXRyeU1pbnRpbWVvdXQsXG4gICAgJ2ZldGNoUmV0cnlNYXh0aW1lb3V0Jzogb2JqLmZldGNoUmV0cnlNYXh0aW1lb3V0LFxuICAgICdmZXRjaFRpbWVvdXQnOiBvYmouZmV0Y2hUaW1lb3V0LFxuICAgICdmZXRjaFdhcm5UaW1lb3V0TXMnOiBvYmouZmV0Y2hXYXJuVGltZW91dE1zLFxuICAgICdmZXRjaE1pblNwZWVkS2lCcHMnOiBvYmouZmV0Y2hNaW5TcGVlZEtpQnBzLFxuICAgICdhdXRvSW5zdGFsbFBlZXJzJzogb2JqLmF1dG9JbnN0YWxsUGVlcnMsXG4gICAgJ2RlZHVwZVBlZXJEZXBlbmRlbnRzJzogb2JqLmRlZHVwZVBlZXJEZXBlbmRlbnRzLFxuICAgICdzdHJpY3RQZWVyRGVwZW5kZW5jaWVzJzogb2JqLnN0cmljdFBlZXJEZXBlbmRlbmNpZXMsXG4gICAgJ3Jlc29sdmVQZWVyc0Zyb21Xb3Jrc3BhY2VSb290Jzogb2JqLnJlc29sdmVQZWVyc0Zyb21Xb3Jrc3BhY2VSb290LFxuICAgICdjb2xvcic6IG9iai5jb2xvcixcbiAgICAnbG9nbGV2ZWwnOiBvYmoubG9nbGV2ZWwsXG4gICAgJ3JlcG9ydGVyJzogb2JqLnJlcG9ydGVyLFxuICAgICd1c2VCZXRhQ2xpJzogb2JqLnVzZUJldGFDbGksXG4gICAgJ3JlY3Vyc2l2ZUluc3RhbGwnOiBvYmoucmVjdXJzaXZlSW5zdGFsbCxcbiAgICAnZW5naW5lU3RyaWN0Jzogb2JqLmVuZ2luZVN0cmljdCxcbiAgICAnbnBtUGF0aCc6IG9iai5ucG1QYXRoLFxuICAgICdwYWNrYWdlTWFuYWdlclN0cmljdCc6IG9iai5wYWNrYWdlTWFuYWdlclN0cmljdCxcbiAgICAncGFja2FnZU1hbmFnZXJTdHJpY3RWZXJzaW9uJzogb2JqLnBhY2thZ2VNYW5hZ2VyU3RyaWN0VmVyc2lvbixcbiAgICAnbWFuYWdlUGFja2FnZU1hbmFnZXJWZXJzaW9ucyc6IG9iai5tYW5hZ2VQYWNrYWdlTWFuYWdlclZlcnNpb25zLFxuICAgICdpZ25vcmVTY3JpcHRzJzogb2JqLmlnbm9yZVNjcmlwdHMsXG4gICAgJ2lnbm9yZURlcFNjcmlwdHMnOiBvYmouaWdub3JlRGVwU2NyaXB0cyxcbiAgICAnY2hpbGRDb25jdXJyZW5jeSc6IG9iai5jaGlsZENvbmN1cnJlbmN5LFxuICAgICdzaWRlRWZmZWN0c0NhY2hlJzogb2JqLnNpZGVFZmZlY3RzQ2FjaGUsXG4gICAgJ3NpZGVFZmZlY3RzQ2FjaGVSZWFkb25seSc6IG9iai5zaWRlRWZmZWN0c0NhY2hlUmVhZG9ubHksXG4gICAgJ3Vuc2FmZVBlcm0nOiBvYmoudW5zYWZlUGVybSxcbiAgICAnbm9kZU9wdGlvbnMnOiBvYmoubm9kZU9wdGlvbnMsXG4gICAgJ3ZlcmlmeURlcHNCZWZvcmVSdW4nOiBvYmoudmVyaWZ5RGVwc0JlZm9yZVJ1bixcbiAgICAnc3RyaWN0RGVwQnVpbGRzJzogb2JqLnN0cmljdERlcEJ1aWxkcyxcbiAgICAndXNlTm9kZVZlcnNpb24nOiBvYmoudXNlTm9kZVZlcnNpb24sXG4gICAgJ25vZGVWZXJzaW9uJzogb2JqLm5vZGVWZXJzaW9uLFxuICAgICdsaW5rV29ya3NwYWNlUGFja2FnZXMnOiBvYmoubGlua1dvcmtzcGFjZVBhY2thZ2VzPy52YWx1ZSxcbiAgICAnaW5qZWN0V29ya3NwYWNlUGFja2FnZXMnOiBvYmouaW5qZWN0V29ya3NwYWNlUGFja2FnZXMsXG4gICAgJ3N5bmNJbmplY3RlZERlcHNBZnRlclNjcmlwdHMnOiBvYmouc3luY0luamVjdGVkRGVwc0FmdGVyU2NyaXB0cz8ubWFwKHkgPT4geSksXG4gICAgJ3ByZWZlcldvcmtzcGFjZVBhY2thZ2VzJzogb2JqLnByZWZlcldvcmtzcGFjZVBhY2thZ2VzLFxuICAgICdzaGFyZWRXb3Jrc3BhY2VMb2NrZmlsZSc6IG9iai5zaGFyZWRXb3Jrc3BhY2VMb2NrZmlsZSxcbiAgICAnc2F2ZVdvcmtzcGFjZVByb3RvY29sJzogb2JqLnNhdmVXb3Jrc3BhY2VQcm90b2NvbD8udmFsdWUsXG4gICAgJ2luY2x1ZGVXb3Jrc3BhY2VSb290Jzogb2JqLmluY2x1ZGVXb3Jrc3BhY2VSb290LFxuICAgICdpZ25vcmVXb3Jrc3BhY2VDeWNsZXMnOiBvYmouaWdub3JlV29ya3NwYWNlQ3ljbGVzLFxuICAgICdpZ25vcmVXb3Jrc3BhY2VSb290Q2hlY2snOiBvYmouaWdub3JlV29ya3NwYWNlUm9vdENoZWNrLFxuICAgICdkaXNhbGxvd1dvcmtzcGFjZUN5Y2xlcyc6IG9iai5kaXNhbGxvd1dvcmtzcGFjZUN5Y2xlcyxcbiAgICAnd29ya3NwYWNlQ29uY3VycmVuY3knOiBvYmoud29ya3NwYWNlQ29uY3VycmVuY3ksXG4gICAgJ3Rhc2tzJzogKChvYmoudGFza3MpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai50YXNrcykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IHRvSnNvbl9QbnBtV29ya3NwYWNlWWFtbFNjaGVtYVRhc2tzKGlbMV0pIH0pLCB7fSkpLFxuICAgICdmYWlsSWZOb01hdGNoJzogb2JqLmZhaWxJZk5vTWF0Y2gsXG4gICAgJ2ZvcmNlTGVnYWN5RGVwbG95Jzogb2JqLmZvcmNlTGVnYWN5RGVwbG95LFxuICAgICdzYXZlUHJlZml4Jzogb2JqLnNhdmVQcmVmaXgsXG4gICAgJ3RhZyc6IG9iai50YWcsXG4gICAgJ2dsb2JhbERpcic6IG9iai5nbG9iYWxEaXIsXG4gICAgJ2dsb2JhbEJpbkRpcic6IG9iai5nbG9iYWxCaW5EaXIsXG4gICAgJ2dsb2JhbFNoaW1zJzogb2JqLmdsb2JhbFNoaW1zLFxuICAgICdzdGF0ZURpcic6IG9iai5zdGF0ZURpcixcbiAgICAnY2FjaGVEaXInOiBvYmouY2FjaGVEaXIsXG4gICAgJ3VzZVN0ZGVycic6IG9iai51c2VTdGRlcnIsXG4gICAgJ3VwZGF0ZU5vdGlmaWVyJzogb2JqLnVwZGF0ZU5vdGlmaWVyLFxuICAgICdjaSc6IG9iai5jaSxcbiAgICAncHJlZmVyU3ltbGlua2VkRXhlY3V0YWJsZXMnOiBvYmoucHJlZmVyU3ltbGlua2VkRXhlY3V0YWJsZXMsXG4gICAgJ2lnbm9yZUNvbXBhdGliaWxpdHlEYic6IG9iai5pZ25vcmVDb21wYXRpYmlsaXR5RGIsXG4gICAgJ3Jlc29sdXRpb25Nb2RlJzogb2JqLnJlc29sdXRpb25Nb2RlLFxuICAgICdyZWdpc3RyeVN1cHBvcnRzVGltZUZpZWxkJzogb2JqLnJlZ2lzdHJ5U3VwcG9ydHNUaW1lRmllbGQsXG4gICAgJ2V4dGVuZE5vZGVQYXRoJzogb2JqLmV4dGVuZE5vZGVQYXRoLFxuICAgICdkZXBsb3lBbGxGaWxlcyc6IG9iai5kZXBsb3lBbGxGaWxlcyxcbiAgICAnZGVkdXBlRGlyZWN0RGVwcyc6IG9iai5kZWR1cGVEaXJlY3REZXBzLFxuICAgICdkZWR1cGVJbmplY3RlZERlcHMnOiBvYmouZGVkdXBlSW5qZWN0ZWREZXBzLFxuICAgICdvcHRpbWlzdGljUmVwZWF0SW5zdGFsbCc6IG9iai5vcHRpbWlzdGljUmVwZWF0SW5zdGFsbCxcbiAgICAnZ2l0Q2hlY2tzJzogb2JqLmdpdENoZWNrcyxcbiAgICAnZW1iZWRSZWFkbWUnOiBvYmouZW1iZWRSZWFkbWUsXG4gICAgJ3B1Ymxpc2hCcmFuY2gnOiBvYmoucHVibGlzaEJyYW5jaCxcbiAgICAndmVyc2lvbmluZyc6IHRvSnNvbl9QbnBtV29ya3NwYWNlWWFtbFNjaGVtYVZlcnNpb25pbmcob2JqLnZlcnNpb25pbmcpLFxuICAgICdwcm92ZW5hbmNlJzogb2JqLnByb3ZlbmFuY2UsXG4gICAgJ3BucG1maWxlJzogb2JqLnBucG1maWxlLFxuICAgICdnbG9iYWxQbnBtZmlsZSc6IG9iai5nbG9iYWxQbnBtZmlsZSxcbiAgICAnaWdub3JlUG5wbWZpbGUnOiBvYmouaWdub3JlUG5wbWZpbGUsXG4gICAgJ3BhdGNoZXNEaXInOiBvYmoucGF0Y2hlc0RpcixcbiAgICAnZW5hYmxlUHJlUG9zdFNjcmlwdHMnOiBvYmouZW5hYmxlUHJlUG9zdFNjcmlwdHMsXG4gICAgJ3NjcmlwdFNoZWxsJzogb2JqLnNjcmlwdFNoZWxsLFxuICAgICdzaGVsbEVtdWxhdG9yJzogb2JqLnNoZWxsRW11bGF0b3IsXG4gICAgJ3NhdmVFeGFjdCc6IG9iai5zYXZlRXhhY3QsXG4gICAgJ21pbmltdW1SZWxlYXNlQWdlJzogb2JqLm1pbmltdW1SZWxlYXNlQWdlLFxuICAgICdtaW5pbXVtUmVsZWFzZUFnZUV4Y2x1ZGUnOiBvYmoubWluaW11bVJlbGVhc2VBZ2VFeGNsdWRlPy5tYXAoeSA9PiB5KSxcbiAgICAnbWluaW11bVJlbGVhc2VBZ2VTdHJpY3QnOiBvYmoubWluaW11bVJlbGVhc2VBZ2VTdHJpY3QsXG4gICAgJ21pbmltdW1SZWxlYXNlQWdlRXhjbHVkZVBydW5lJzogb2JqLm1pbmltdW1SZWxlYXNlQWdlRXhjbHVkZVBydW5lLFxuICAgICdwcmVmZXJPZmZsaW5lJzogb2JqLnByZWZlck9mZmxpbmUsXG4gICAgJ3RydXN0UG9saWN5Jzogb2JqLnRydXN0UG9saWN5LFxuICAgICd0cnVzdFBvbGljeUV4Y2x1ZGUnOiBvYmoudHJ1c3RQb2xpY3lFeGNsdWRlPy5tYXAoeSA9PiB5KSxcbiAgICAnYWxsb3dCdWlsZHMnOiBvYmouYWxsb3dCdWlsZHMsXG4gICAgJ2Jsb2NrRXhvdGljU3ViZGVwcyc6IG9iai5ibG9ja0V4b3RpY1N1YmRlcHMsXG4gICAgJ3RydXN0UG9saWN5SWdub3JlQWZ0ZXInOiBvYmoudHJ1c3RQb2xpY3lJZ25vcmVBZnRlcixcbiAgICAnYXVkaXRMZXZlbCc6IG9iai5hdWRpdExldmVsLFxuICAgICdkZWR1cGVQZWVycyc6IG9iai5kZWR1cGVQZWVycyxcbiAgICAnbnBtcmNBdXRoRmlsZSc6IG9iai5ucG1yY0F1dGhGaWxlLFxuICAgICdtaW5pbXVtUmVsZWFzZUFnZUlnbm9yZU1pc3NpbmdUaW1lJzogb2JqLm1pbmltdW1SZWxlYXNlQWdlSWdub3JlTWlzc2luZ1RpbWUsXG4gICAgJ3JlZ2lzdHJpZXMnOiAoKG9iai5yZWdpc3RyaWVzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmoucmVnaXN0cmllcykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSksXG4gICAgJ25hbWVkUmVnaXN0cmllcyc6ICgob2JqLm5hbWVkUmVnaXN0cmllcykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLm5hbWVkUmVnaXN0cmllcykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSksXG4gICAgJ3ZpcnR1YWxTdG9yZU9ubHknOiBvYmoudmlydHVhbFN0b3JlT25seSxcbiAgICAncG1PbkZhaWwnOiBvYmoucG1PbkZhaWwsXG4gICAgJ3J1bnRpbWVPbkZhaWwnOiBvYmoucnVudGltZU9uRmFpbCxcbiAgICAnbm9kZURvd25sb2FkTWlycm9ycyc6ICgob2JqLm5vZGVEb3dubG9hZE1pcnJvcnMpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5ub2RlRG93bmxvYWRNaXJyb3JzKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pKSxcbiAgICAndHJ1c3RMb2NrZmlsZSc6IG9iai50cnVzdExvY2tmaWxlLFxuICAgICdob2lzdGluZ0xpbWl0cyc6IG9iai5ob2lzdGluZ0xpbWl0cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIENvbnRyb2xsaW5nIGlmIGFuZCBob3cgZGVwZW5kZW5jaWVzIGFyZSBhZGRlZCB0byB0aGUgZGVmYXVsdCBjYXRhbG9nXG4gKlxuICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYUNhdGFsb2dNb2RlXG4gKi9cbmV4cG9ydCBlbnVtIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hQ2F0YWxvZ01vZGUge1xuICAvKiogc3RyaWN0ICovXG4gIFNUUklDVCA9IFwic3RyaWN0XCIsXG4gIC8qKiBwcmVmZXIgKi9cbiAgUFJFRkVSID0gXCJwcmVmZXJcIixcbiAgLyoqIG1hbnVhbCAqL1xuICBNQU5VQUwgPSBcIm1hbnVhbFwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFQZWVyRGVwZW5kZW5jeVJ1bGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFQZWVyRGVwZW5kZW5jeVJ1bGVzIHtcbiAgLyoqXG4gICAqIHBucG0gd2lsbCBub3QgcHJpbnQgd2FybmluZ3MgYWJvdXQgbWlzc2luZyBwZWVyIGRlcGVuZGVuY2llcyBmcm9tIHRoaXMgbGlzdC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVBlZXJEZXBlbmRlbmN5UnVsZXMjaWdub3JlTWlzc2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlTWlzc2luZz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBVbm1ldCBwZWVyIGRlcGVuZGVuY3kgd2FybmluZ3Mgd2lsbCBub3QgYmUgcHJpbnRlZCBmb3IgcGVlciBkZXBlbmRlbmNpZXMgb2YgdGhlIHNwZWNpZmllZCByYW5nZS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVBlZXJEZXBlbmRlbmN5UnVsZXMjYWxsb3dlZFZlcnNpb25zXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkVmVyc2lvbnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEFueSBwZWVyIGRlcGVuZGVuY3kgbWF0Y2hpbmcgdGhlIHBhdHRlcm4gd2lsbCBiZSByZXNvbHZlZCBmcm9tIGFueSB2ZXJzaW9uLCByZWdhcmRsZXNzIG9mIHRoZSByYW5nZSBzcGVjaWZpZWQgaW4gXCJwZWVyRGVwZW5kZW5jaWVzXCIuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFQZWVyRGVwZW5kZW5jeVJ1bGVzI2FsbG93QW55XG4gICAqL1xuICByZWFkb25seSBhbGxvd0FueT86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVBlZXJEZXBlbmRlbmN5UnVsZXMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9QbnBtV29ya3NwYWNlWWFtbFNjaGVtYVBlZXJEZXBlbmRlbmN5UnVsZXMob2JqOiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVBlZXJEZXBlbmRlbmN5UnVsZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdpZ25vcmVNaXNzaW5nJzogb2JqLmlnbm9yZU1pc3Npbmc/Lm1hcCh5ID0+IHkpLFxuICAgICdhbGxvd2VkVmVyc2lvbnMnOiBvYmouYWxsb3dlZFZlcnNpb25zLFxuICAgICdhbGxvd0FueSc6IG9iai5hbGxvd0FueT8ubWFwKHkgPT4geSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVXBkYXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFVcGRhdGUge1xuICAvKipcbiAgICogQSBsaXN0IG9mIGRlcGVuZGVuY3kgbmFtZSBwYXR0ZXJucyB0aGF0IHBucG0gdXBkYXRlIGFuZCBwbnBtIG91dGRhdGVkIHNob3VsZCBza2lwLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVXBkYXRlI2lnbm9yZURlcHNcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZURlcHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hlbiB0cnVlLCBwbnBtIHVwZGF0ZSB3cml0ZXMgYSBjaGFuZ2UgaW50ZW50IGFmdGVyIHVwZGF0aW5nIHdvcmtzcGFjZSBtYW5pZmVzdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFVcGRhdGUjY2hhbmdlc2V0XG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VzZXQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHBucG0gdXBkYXRlIGFuZCBwbnBtIG91dGRhdGVkIGFsc28gY2hlY2sgdGhlIEdpdEh1YiBBY3Rpb25zIHJlZmVyZW5jZWQgYnkgdGhlIHJlcG9zaXRvcnkncyB3b3JrZmxvdyBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVVwZGF0ZSNnaXRodWJBY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBnaXRodWJBY3Rpb25zPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGJhc2UgVVJMIG9mIHRoZSBHaXRIdWIgc2VydmVyIHRoYXQgaG9zdHMgdGhlIHJlcG9zaXRvcmllcyBvZiB0aGUgR2l0SHViIEFjdGlvbnMgcmVmZXJlbmNlZCBieSB0aGUgd29ya2Zsb3cgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFVcGRhdGUjZ2l0aHViQWN0aW9uc1NlcnZlclxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViQWN0aW9uc1NlcnZlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFVcGRhdGUnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9QbnBtV29ya3NwYWNlWWFtbFNjaGVtYVVwZGF0ZShvYmo6IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVXBkYXRlIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnaWdub3JlRGVwcyc6IG9iai5pZ25vcmVEZXBzPy5tYXAoeSA9PiB5KSxcbiAgICAnY2hhbmdlc2V0Jzogb2JqLmNoYW5nZXNldCxcbiAgICAnZ2l0aHViQWN0aW9ucyc6IG9iai5naXRodWJBY3Rpb25zLFxuICAgICdnaXRodWJBY3Rpb25zU2VydmVyJzogb2JqLmdpdGh1YkFjdGlvbnNTZXJ2ZXIsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVXBkYXRlQ29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFVcGRhdGVDb25maWcge1xuICAvKipcbiAgICogQSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQgd2hlbiBydW5uaW5nIFwicG5wbSBvdXRkYXRlZFwiIG9yIFwicG5wbSB1cGRhdGUgLS1sYXRlc3RcIi5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVVwZGF0ZUNvbmZpZyNpZ25vcmVEZXBlbmRlbmNpZXNcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZURlcGVuZGVuY2llcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVVwZGF0ZUNvbmZpZycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1BucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVXBkYXRlQ29uZmlnKG9iajogUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFVcGRhdGVDb25maWcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdpZ25vcmVEZXBlbmRlbmNpZXMnOiBvYmouaWdub3JlRGVwZW5kZW5jaWVzPy5tYXAoeSA9PiB5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFBdWRpdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hQXVkaXQge1xuICAvKipcbiAgICogT25seSBwcmludCBhZHZpc29yaWVzIHdpdGggc2V2ZXJpdHkgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoaXMgbGV2ZWwuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFBdWRpdCNsZXZlbFxuICAgKi9cbiAgcmVhZG9ubHkgbGV2ZWw/OiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYUF1ZGl0TGV2ZWw7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBHSFNBIGNvZGVzIHRoYXQgd2lsbCBiZSBpZ25vcmVkIGJ5IHBucG0gYXVkaXQuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFBdWRpdCNpZ25vcmVcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgYHBucG0gYXVkaXQgLS1maXhgIHJlbW92ZXMgdGhlIGBhdWRpdC5pZ25vcmVgIGVudHJpZXMgd2hvc2UgR0hTQSBubyBsb25nZXIgYXBwZWFycyBpbiB0aGUgYXVkaXQgcmVwb3J0LCBzbyBhIGxpc3Qgb2YgdG9sZXJhdGVkIGFkdmlzb3JpZXMgZG9lc24ndCBhY2N1bXVsYXRlIGVudHJpZXMgZm9yIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBsb25nIGdvbmUuIEFkZGVkIGluOiB2MTEuMjUuMCBhbmQgdjEyLjAuMC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYUF1ZGl0I2lnbm9yZVBydW5lXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVQcnVuZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1BucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hQXVkaXQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9QbnBtV29ya3NwYWNlWWFtbFNjaGVtYUF1ZGl0KG9iajogUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFBdWRpdCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2xldmVsJzogb2JqLmxldmVsLFxuICAgICdpZ25vcmUnOiBvYmouaWdub3JlPy5tYXAoeSA9PiB5KSxcbiAgICAnaWdub3JlUHJ1bmUnOiBvYmouaWdub3JlUHJ1bmUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hQXVkaXRDb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYUF1ZGl0Q29uZmlnIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBDVkUgSURzIHRoYXQgd2lsbCBiZSBpZ25vcmVkIGJ5IFwicG5wbSBhdWRpdFwiLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hQXVkaXRDb25maWcjaWdub3JlQ3Zlc1xuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlQ3Zlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgR0hTQSBDb2RlcyB0aGF0IHdpbGwgYmUgaWdub3JlZCBieSBcInBucG0gYXVkaXRcIi5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYUF1ZGl0Q29uZmlnI2lnbm9yZUdoc2FzXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVHaHNhcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdQbnBtV29ya3NwYWNlWWFtbFNjaGVtYUF1ZGl0Q29uZmlnJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFBdWRpdENvbmZpZyhvYmo6IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hQXVkaXRDb25maWcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdpZ25vcmVDdmVzJzogb2JqLmlnbm9yZUN2ZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdpZ25vcmVHaHNhcyc6IG9iai5pZ25vcmVHaHNhcz8ubWFwKHkgPT4geSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgYXJjaGl0ZWN0dXJlcyBmb3Igd2hpY2ggeW91J2QgbGlrZSB0byBpbnN0YWxsIG9wdGlvbmFsIGRlcGVuZGVuY2llcywgZXZlbiBpZiB0aGV5IGRvbid0IG1hdGNoIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIHN5c3RlbSBydW5uaW5nIHRoZSBpbnN0YWxsLlxuICpcbiAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFTdXBwb3J0ZWRBcmNoaXRlY3R1cmVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFTdXBwb3J0ZWRBcmNoaXRlY3R1cmVzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFTdXBwb3J0ZWRBcmNoaXRlY3R1cmVzI29zXG4gICAqL1xuICByZWFkb25seSBvcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hU3VwcG9ydGVkQXJjaGl0ZWN0dXJlcyNjcHVcbiAgICovXG4gIHJlYWRvbmx5IGNwdT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hU3VwcG9ydGVkQXJjaGl0ZWN0dXJlcyNsaWJjXG4gICAqL1xuICByZWFkb25seSBsaWJjPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1BucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hU3VwcG9ydGVkQXJjaGl0ZWN0dXJlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1BucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hU3VwcG9ydGVkQXJjaGl0ZWN0dXJlcyhvYmo6IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hU3VwcG9ydGVkQXJjaGl0ZWN0dXJlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ29zJzogb2JqLm9zPy5tYXAoeSA9PiB5KSxcbiAgICAnY3B1Jzogb2JqLmNwdT8ubWFwKHkgPT4geSksXG4gICAgJ2xpYmMnOiBvYmoubGliYz8ubWFwKHkgPT4geSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hRXhlY3V0aW9uRW52XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFFeGVjdXRpb25FbnYge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHdoaWNoIGV4YWN0IE5vZGUuanMgdmVyc2lvbiBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIHByb2plY3QncyBydW50aW1lLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hRXhlY3V0aW9uRW52I25vZGVWZXJzaW9uXG4gICAqL1xuICByZWFkb25seSBub2RlVmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFFeGVjdXRpb25FbnYnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9QbnBtV29ya3NwYWNlWWFtbFNjaGVtYUV4ZWN1dGlvbkVudihvYmo6IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hRXhlY3V0aW9uRW52IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbm9kZVZlcnNpb24nOiBvYmoubm9kZVZlcnNpb24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBEZWZpbmVzIHdoYXQgbGlua2VyIHNob3VsZCBiZSB1c2VkIGZvciBpbnN0YWxsaW5nIE5vZGUgcGFja2FnZXMuXG4gKlxuICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYU5vZGVMaW5rZXJcbiAqL1xuZXhwb3J0IGVudW0gUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFOb2RlTGlua2VyIHtcbiAgLyoqIGlzb2xhdGVkICovXG4gIElTT0xBVEVEID0gXCJpc29sYXRlZFwiLFxuICAvKiogaG9pc3RlZCAqL1xuICBIT0lTVEVEID0gXCJob2lzdGVkXCIsXG4gIC8qKiBwbnAgKi9cbiAgUE5QID0gXCJwbnBcIixcbn1cblxuLyoqXG4gKiBDb250cm9scyBob3cgbm9kZV9tb2R1bGVzLy5wYWNrYWdlLW1hcC5qc29uIGlzIGdlbmVyYXRlZC4gc3RhbmRhcmQgLSBvbmx5IGRlY2xhcmVkIGRlcGVuZGVuY2llcyBhcmUgYXZhaWxhYmxlIHRocm91Z2ggdGhlIHBhY2thZ2UgbWFwLiBsb29zZSAtIGFsc28gbWFwcyBwYWNrYWdlcyB0aGF0IGFyZSByZWFjaGFibGUgdGhyb3VnaCB0aGUgaW5zdGFsbGVkIG5vZGVfbW9kdWxlcyBsYXlvdXQsIHdoaWNoIGNhbiBhbGxvdyB1bmRlY2xhcmVkIGhvaXN0ZWQgZGVwZW5kZW5jaWVzIHRvIHJlc29sdmUuXG4gKlxuICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYU5vZGVQYWNrYWdlTWFwVHlwZVxuICovXG5leHBvcnQgZW51bSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYU5vZGVQYWNrYWdlTWFwVHlwZSB7XG4gIC8qKiBzdGFuZGFyZCAqL1xuICBTVEFOREFSRCA9IFwic3RhbmRhcmRcIixcbiAgLyoqIGxvb3NlICovXG4gIExPT1NFID0gXCJsb29zZVwiLFxufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hlcmUgdGhlIHZpcnR1YWwgc3RvcmUgaXMgbG9jYXRlZC4gV2hlbiBzZXQgdG8gcHJvamVjdCwgYSBzZXBhcmF0ZSB2aXJ0dWFsIHN0b3JlIGlzIGNyZWF0ZWQgaW4gZWFjaCBwcm9qZWN0J3Mgbm9kZV9tb2R1bGVzLy5wbnBtLiBXaGVuIHNldCB0byBnbG9iYWwsIGEgc2luZ2xlIHN0b3JlIGlzIHNoYXJlZCBieSBldmVyeSBwcm9qZWN0IG9uIHRoZSBtYWNoaW5lLCB3aXRoIGVhY2ggcHJvamVjdCdzIG5vZGVfbW9kdWxlcyBob2xkaW5nIG9ubHkgc3ltbGlua3MgaW50byBpdC4gQWRkZWQgaW4gcG5wbSB2MTEuMjMuMC5cbiAqXG4gKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVmlydHVhbFN0b3JlVHlwZVxuICovXG5leHBvcnQgZW51bSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVZpcnR1YWxTdG9yZVR5cGUge1xuICAvKiogcHJvamVjdCAqL1xuICBQUk9KRUNUID0gXCJwcm9qZWN0XCIsXG4gIC8qKiBnbG9iYWwgKi9cbiAgR0xPQkFMID0gXCJnbG9iYWxcIixcbn1cblxuLyoqXG4gKiBDb250cm9scyB0aGUgd2F5IHBhY2thZ2VzIGFyZSBpbXBvcnRlZCBmcm9tIHRoZSBzdG9yZSAoaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBzeW1saW5rcyBpbnNpZGUgbm9kZV9tb2R1bGVzLCB0aGVuIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgbm9kZUxpbmtlciBzZXR0aW5nLCBub3QgdGhpcyBvbmUpLlxuICpcbiAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFQYWNrYWdlSW1wb3J0TWV0aG9kXG4gKi9cbmV4cG9ydCBlbnVtIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hUGFja2FnZUltcG9ydE1ldGhvZCB7XG4gIC8qKiBhdXRvICovXG4gIEFVVE8gPSBcImF1dG9cIixcbiAgLyoqIGhhcmRsaW5rICovXG4gIEhBUkRMSU5LID0gXCJoYXJkbGlua1wiLFxuICAvKiogY29weSAqL1xuICBDT1BZID0gXCJjb3B5XCIsXG4gIC8qKiBjbG9uZSAqL1xuICBDTE9ORSA9IFwiY2xvbmVcIixcbiAgLyoqIGNsb25lLW9yLWNvcHkgKi9cbiAgQ0xPTkVfSFlQSEVOX09SX0hZUEhFTl9DT1BZID0gXCJjbG9uZS1vci1jb3B5XCIsXG59XG5cbi8qKlxuICogQ29udHJvbHMgY29sb3JzIGluIHRoZSBvdXRwdXQuXG4gKlxuICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYUNvbG9yXG4gKi9cbmV4cG9ydCBlbnVtIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hQ29sb3Ige1xuICAvKiogYWx3YXlzICovXG4gIEFMV0FZUyA9IFwiYWx3YXlzXCIsXG4gIC8qKiBhdXRvICovXG4gIEFVVE8gPSBcImF1dG9cIixcbiAgLyoqIG5ldmVyICovXG4gIE5FVkVSID0gXCJuZXZlclwiLFxufVxuXG4vKipcbiAqIEFueSBsb2dzIGF0IG9yIGhpZ2hlciB0aGFuIHRoZSBnaXZlbiBsZXZlbCB3aWxsIGJlIHNob3duLlxuICpcbiAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFMb2dsZXZlbFxuICovXG5leHBvcnQgZW51bSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYUxvZ2xldmVsIHtcbiAgLyoqIGRlYnVnICovXG4gIERFQlVHID0gXCJkZWJ1Z1wiLFxuICAvKiogaW5mbyAqL1xuICBJTkZPID0gXCJpbmZvXCIsXG4gIC8qKiB3YXJuICovXG4gIFdBUk4gPSBcIndhcm5cIixcbiAgLyoqIGVycm9yICovXG4gIEVSUk9SID0gXCJlcnJvclwiLFxufVxuXG4vKipcbiAqIEFsbG93cyB5b3UgdG8gY3VzdG9taXplIHRoZSBvdXRwdXQgc3R5bGUgb2YgdGhlIGxvZ3MuXG4gKiBodHRwczovL3BucG0uaW8vY2xpL2luc3RhbGwjLS1yZXBvcnRlcm5hbWVcbiAqXG4gKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hUmVwb3J0ZXJcbiAqL1xuZXhwb3J0IGVudW0gUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFSZXBvcnRlciB7XG4gIC8qKiBzaWxlbnQgKi9cbiAgU0lMRU5UID0gXCJzaWxlbnRcIixcbiAgLyoqIGRlZmF1bHQgKi9cbiAgREVGQVVMVCA9IFwiZGVmYXVsdFwiLFxuICAvKiogYXBwZW5kLW9ubHkgKi9cbiAgQVBQRU5EX0hZUEhFTl9PTkxZID0gXCJhcHBlbmQtb25seVwiLFxuICAvKiogbmRqc29uICovXG4gIE5ESlNPTiA9IFwibmRqc29uXCIsXG59XG5cbi8qKlxuICogSWYgdGhpcyBpcyBlbmFibGVkLCBsb2NhbGx5IGF2YWlsYWJsZSBwYWNrYWdlcyBhcmUgbGlua2VkIHRvIG5vZGVfbW9kdWxlcyBpbnN0ZWFkIG9mIGJlaW5nIGRvd25sb2FkZWQgZnJvbSB0aGUgcmVnaXN0cnkuXG4gKlxuICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYUxpbmtXb3Jrc3BhY2VQYWNrYWdlc1xuICovXG5leHBvcnQgY2xhc3MgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFMaW5rV29ya3NwYWNlUGFja2FnZXMge1xuICBwdWJsaWMgc3RhdGljIGZyb21Cb29sZWFuKHZhbHVlOiBib29sZWFuKTogUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFMaW5rV29ya3NwYWNlUGFja2FnZXMge1xuICAgIHJldHVybiBuZXcgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFMaW5rV29ya3NwYWNlUGFja2FnZXModmFsdWUpO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyh2YWx1ZTogc3RyaW5nKTogUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFMaW5rV29ya3NwYWNlUGFja2FnZXMge1xuICAgIHJldHVybiBuZXcgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFMaW5rV29ya3NwYWNlUGFja2FnZXModmFsdWUpO1xuICB9XG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHZhbHVlOiBib29sZWFuIHwgc3RyaW5nKSB7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIHNldHRpbmcgY29udHJvbHMgaG93IGRlcGVuZGVuY2llcyB0aGF0IGFyZSBsaW5rZWQgZnJvbSB0aGUgd29ya3NwYWNlIGFyZSBhZGRlZCB0byBwYWNrYWdlLmpzb24uXG4gKlxuICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVNhdmVXb3Jrc3BhY2VQcm90b2NvbFxuICovXG5leHBvcnQgY2xhc3MgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFTYXZlV29ya3NwYWNlUHJvdG9jb2wge1xuICBwdWJsaWMgc3RhdGljIGZyb21Cb29sZWFuKHZhbHVlOiBib29sZWFuKTogUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFTYXZlV29ya3NwYWNlUHJvdG9jb2wge1xuICAgIHJldHVybiBuZXcgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFTYXZlV29ya3NwYWNlUHJvdG9jb2wodmFsdWUpO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyh2YWx1ZTogc3RyaW5nKTogUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFTYXZlV29ya3NwYWNlUHJvdG9jb2wge1xuICAgIHJldHVybiBuZXcgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFTYXZlV29ya3NwYWNlUHJvdG9jb2wodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHZhbHVlOiBib29sZWFuIHwgc3RyaW5nKSB7XG4gIH1cbn1cblxuLyoqXG4gKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVGFza3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVRhc2tzIHtcbiAgLyoqXG4gICAqIFRhc2tzIHRoaXMgdGFzayBkZXBlbmRzIG9uLiBFYWNoIGVudHJ5IGlzIGVpdGhlciB0aGUgdGFzayBpbiB0aGUgc2FtZSBwcm9qZWN0IChlLmcuIGBidWlsZGApIG9yIHRoZSB0YXNrIGluIGVhY2ggc2VsZWN0ZWQgd29ya3NwYWNlIGRlcGVuZGVuY3kgb2YgdGhlIHByb2plY3QgKGUuZy4gYF5idWlsZGApLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVGFza3MjZGVwZW5kc09uXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRzT24/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBwb3NpdGl2ZSBpbnRlZ2VyIGxpbWl0aW5nIGhvdyBtYW55IGluc3RhbmNlcyBvZiB0aGlzIG5hbWVkIHRhc2sgbWF5IHJ1biBhY3Jvc3Mgd29ya3NwYWNlIHByb2plY3RzIGF0IG9uY2UuIFRoaXMgbGltaXQgaXMgc2VwYXJhdGUgZnJvbSB3b3Jrc3BhY2VDb25jdXJyZW5jeS5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVRhc2tzI2NvbmN1cnJlbmN5XG4gICAqL1xuICByZWFkb25seSBjb25jdXJyZW5jeT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFUYXNrcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1BucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVGFza3Mob2JqOiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVRhc2tzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZGVwZW5kc09uJzogb2JqLmRlcGVuZHNPbj8ubWFwKHkgPT4geSksXG4gICAgJ2NvbmN1cnJlbmN5Jzogb2JqLmNvbmN1cnJlbmN5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29uZmlndXJlIGhvdyB2ZXJzaW9ucyBvZiBwYWNrYWdlcyBpbnN0YWxsZWQgdG8gYSBwYWNrYWdlLmpzb24gZmlsZSBnZXQgcHJlZml4ZWQuXG4gKlxuICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVNhdmVQcmVmaXhcbiAqL1xuZXhwb3J0IGVudW0gUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFTYXZlUHJlZml4IHtcbiAgLyoqIF4gKi9cbiAgVkFMVUVfQ0FSQVQgPSBcIl5cIixcbiAgLyoqIH4gKi9cbiAgVkFMVUVfVElMREUgPSBcIn5cIixcbiAgLyoqID0gKi9cbiAgVkFMVUVfRVFVQUxTID0gXCI9XCIsXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBob3cgcG5wbSByZXNvbHZlcyBkZXBlbmRlbmNpZXMsIFNlZSBodHRwczovL3BucG0uaW8vc2V0dGluZ3MjcmVzb2x1dGlvbm1vZGVcbiAqXG4gKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hUmVzb2x1dGlvbk1vZGVcbiAqL1xuZXhwb3J0IGVudW0gUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFSZXNvbHV0aW9uTW9kZSB7XG4gIC8qKiBoaWdoZXN0ICovXG4gIEhJR0hFU1QgPSBcImhpZ2hlc3RcIixcbiAgLyoqIHRpbWUtYmFzZWQgKi9cbiAgVElNRV9IWVBIRU5fQkFTRUQgPSBcInRpbWUtYmFzZWRcIixcbiAgLyoqIGxvd2VzdC1kaXJlY3QgKi9cbiAgTE9XRVNUX0hZUEhFTl9ESVJFQ1QgPSBcImxvd2VzdC1kaXJlY3RcIixcbn1cblxuLyoqXG4gKiBWZXJzaW9uaW5nIHNldHRpbmdzIGZvciBwbnBtJ3MgbmF0aXZlIHdvcmtzcGFjZSByZWxlYXNlIG1hbmFnZW1lbnQsIHVzZWQgYnkgYHBucG0gY2hhbmdlYCBhbmQgcmVjdXJzaXZlIGBwbnBtIHZlcnNpb25gLlxuICpcbiAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFWZXJzaW9uaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFWZXJzaW9uaW5nIHtcbiAgLyoqXG4gICAqIEdyb3VwcyBvZiB3b3Jrc3BhY2UgcHJvamVjdHMgdGhhdCBhbHdheXMgcmVsZWFzZSB0b2dldGhlciBhdCBvbmUgc2hhcmVkIHZlcnNpb24uIFRoZSBzaGFyZWQgdmVyc2lvbiBpcyB0aGUgaGlnaGVzdCBjdXJyZW50IHZlcnNpb24gaW4gdGhlIGdyb3VwLCBidW1wZWQgYnkgdGhlIGxhcmdlc3QgYnVtcCBhbnkgbWVtYmVyIG5lZWRzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVmVyc2lvbmluZyNmaXhlZFxuICAgKi9cbiAgcmVhZG9ubHkgZml4ZWQ/OiBzdHJpbmdbXVtdO1xuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgcHJvamVjdHMgcGVybWFuZW50bHkgZXhjbHVkZWQgZnJvbSB2ZXJzaW9uaW5nIGFuZCBkZXBlbmRlbnQgcHJvcGFnYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFWZXJzaW9uaW5nI2lnbm9yZVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENhcHMgdGhlIGJ1bXAgdGhhdCBhIHJlbGVhc2UgZnJvbSB0aGUgY3VycmVudCBjaGVja291dCBtYXkgYXBwbHksIGFmdGVyIGRlcGVuZGVudCBwcm9wYWdhdGlvbiBhbmQgZml4ZWQtZ3JvdXAgcmVzb2x1dGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVZlcnNpb25pbmcjbWF4QnVtcFxuICAgKi9cbiAgcmVhZG9ubHkgbWF4QnVtcD86IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVmVyc2lvbmluZ01heEJ1bXA7XG5cbiAgLyoqXG4gICAqIE1hcHMgYSB3b3Jrc3BhY2UgcHJvamVjdCB0byBhIHJlbGVhc2UgbGFuZS4gVW5saXN0ZWQgcHJvamVjdHMgYXJlIG9uIHRoZSByZXNlcnZlZCBgbWFpbmAgbGFuZSBhbmQgcmVsZWFzZSBzdGFibGUgdmVyc2lvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFWZXJzaW9uaW5nI2xhbmVzXG4gICAqL1xuICByZWFkb25seSBsYW5lcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFRpZXMgbWVtYmVyIHByb2plY3RzIHRvIGEgbGVhZCBwcm9qZWN0IGFuZCBjb25zdHJhaW5zIHRoZWlyIG1ham9yIHZlcnNpb25zIHRvIHRoZSBsZWFkJ3MgbWFqb3ItdmVyc2lvbiBiYW5kLlxuICAgKlxuICAgKiBAc2NoZW1hIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVmVyc2lvbmluZyNlcGljc1xuICAgKi9cbiAgcmVhZG9ubHkgZXBpY3M/OiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVZlcnNpb25pbmdFcGljc1tdO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGVyZSByZWxlYXNlIGNoYW5nZWxvZyBjb250ZW50IGlzIHN0b3JlZC5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVZlcnNpb25pbmcjY2hhbmdlbG9nXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2Vsb2c/OiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVZlcnNpb25pbmdDaGFuZ2Vsb2c7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1BucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVmVyc2lvbmluZycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1BucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVmVyc2lvbmluZyhvYmo6IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVmVyc2lvbmluZyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ZpeGVkJzogb2JqLmZpeGVkPy5tYXAoeSA9PiB5Py5tYXAoeSA9PiB5KSksXG4gICAgJ2lnbm9yZSc6IG9iai5pZ25vcmU/Lm1hcCh5ID0+IHkpLFxuICAgICdtYXhCdW1wJzogb2JqLm1heEJ1bXAsXG4gICAgJ2xhbmVzJzogKChvYmoubGFuZXMpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5sYW5lcykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSksXG4gICAgJ2VwaWNzJzogb2JqLmVwaWNzPy5tYXAoeSA9PiB0b0pzb25fUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFWZXJzaW9uaW5nRXBpY3MoeSkpLFxuICAgICdjaGFuZ2Vsb2cnOiB0b0pzb25fUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFWZXJzaW9uaW5nQ2hhbmdlbG9nKG9iai5jaGFuZ2Vsb2cpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogV2hlbiBzZXQgdG8gbm8tZG93bmdyYWRlLCBwbnBtIHdpbGwgZmFpbCBpZiBhIHBhY2thZ2UncyB0cnVzdCBsZXZlbCBoYXMgZGVjcmVhc2VkIGNvbXBhcmVkIHRvIHByZXZpb3VzIHJlbGVhc2VzLiBGb3IgZXhhbXBsZSwgaWYgYSBwYWNrYWdlIHdhcyBwcmV2aW91c2x5IHB1Ymxpc2hlZCBieSBhIHRydXN0ZWQgcHVibGlzaGVyIGJ1dCBub3cgb25seSBoYXMgcHJvdmVuYW5jZSBvciBubyB0cnVzdCBldmlkZW5jZSwgaW5zdGFsbGF0aW9uIHdpbGwgZmFpbC4gVGhpcyBoZWxwcyBwcmV2ZW50IGluc3RhbGxpbmcgcG90ZW50aWFsbHkgY29tcHJvbWlzZWQgdmVyc2lvbnMuXG4gKlxuICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVRydXN0UG9saWN5XG4gKi9cbmV4cG9ydCBlbnVtIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVHJ1c3RQb2xpY3kge1xuICAvKiogb2ZmICovXG4gIE9GRiA9IFwib2ZmXCIsXG4gIC8qKiBuby1kb3duZ3JhZGUgKi9cbiAgTk9fSFlQSEVOX0RPV05HUkFERSA9IFwibm8tZG93bmdyYWRlXCIsXG59XG5cbi8qKlxuICogT25seSBwcmludCBhZHZpc29yaWVzIHdpdGggc2V2ZXJpdHkgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoaXMgbGV2ZWwuXG4gKlxuICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYUF1ZGl0TGV2ZWxcbiAqL1xuZXhwb3J0IGVudW0gUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFBdWRpdExldmVsIHtcbiAgLyoqIGxvdyAqL1xuICBMT1cgPSBcImxvd1wiLFxuICAvKiogbW9kZXJhdGUgKi9cbiAgTU9ERVJBVEUgPSBcIm1vZGVyYXRlXCIsXG4gIC8qKiBoaWdoICovXG4gIEhJR0ggPSBcImhpZ2hcIixcbiAgLyoqIGNyaXRpY2FsICovXG4gIENSSVRJQ0FMID0gXCJjcml0aWNhbFwiLFxufVxuXG4vKipcbiAqIE92ZXJyaWRlcyB0aGUgYG9uRmFpbGAgYmVoYXZpb3Igb2YgYm90aCB0aGUgYHBhY2thZ2VNYW5hZ2VyYCBmaWVsZCBhbmQgYGRldkVuZ2luZXMucGFja2FnZU1hbmFnZXJgIHdoZW4gdGhlIHJ1bm5pbmcgcG5wbSB2ZXJzaW9uIGRvZXMgbm90IG1hdGNoIHRoZSBkZWNsYXJlZCBvbmUuXG4gKlxuICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVBtT25GYWlsXG4gKi9cbmV4cG9ydCBlbnVtIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hUG1PbkZhaWwge1xuICAvKiogZG93bmxvYWQgKi9cbiAgRE9XTkxPQUQgPSBcImRvd25sb2FkXCIsXG4gIC8qKiBlcnJvciAqL1xuICBFUlJPUiA9IFwiZXJyb3JcIixcbiAgLyoqIHdhcm4gKi9cbiAgV0FSTiA9IFwid2FyblwiLFxuICAvKiogaWdub3JlICovXG4gIElHTk9SRSA9IFwiaWdub3JlXCIsXG59XG5cbi8qKlxuICogT3ZlcnJpZGVzIHRoZSBgb25GYWlsYCBmaWVsZCBvZiBgZGV2RW5naW5lcy5ydW50aW1lYCAoYW5kIGBlbmdpbmVzLnJ1bnRpbWVgKSBpbiB0aGUgcm9vdCBwcm9qZWN0J3MgYHBhY2thZ2UuanNvbmAuIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgYSBkaWZmZXJlbnQgbG9jYWwgYmVoYXZpb3IgdGhhbiB3aGF0IGlzIHdyaXR0ZW4gaW4gdGhlIG1hbmlmZXN0IOKAlCBmb3IgaW5zdGFuY2UsIGZvcmNpbmcgcG5wbSB0byBkb3dubG9hZCB0aGUgZGVjbGFyZWQgcnVudGltZSBldmVuIHdoZW4gdGhlIG1hbmlmZXN0IHNldHMgYG9uRmFpbDogXCJ3YXJuXCJgLlxuICpcbiAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFSdW50aW1lT25GYWlsXG4gKi9cbmV4cG9ydCBlbnVtIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hUnVudGltZU9uRmFpbCB7XG4gIC8qKiBkb3dubG9hZCAqL1xuICBET1dOTE9BRCA9IFwiZG93bmxvYWRcIixcbiAgLyoqIGVycm9yICovXG4gIEVSUk9SID0gXCJlcnJvclwiLFxuICAvKiogd2FybiAqL1xuICBXQVJOID0gXCJ3YXJuXCIsXG4gIC8qKiBpZ25vcmUgKi9cbiAgSUdOT1JFID0gXCJpZ25vcmVcIixcbn1cblxuLyoqXG4gKiBBZGRlZCBhIG5ldyBob2lzdGluZ0xpbWl0cyBzZXR0aW5nIGZvciBgbm9kZUxpbmtlcjogaG9pc3RlZGAgaW5zdGFsbHMsIG1pcnJvcmluZyB5YXJuJ3MgYG5tSG9pc3RpbmdMaW1pdHNgLiBJdCBhY2NlcHRzIGBub25lYCAodGhlIGRlZmF1bHQg4oCUIGhvaXN0IGFzIGZhciBhcyBwb3NzaWJsZSksIHdvcmtzcGFjZXMgKGhvaXN0IG9ubHkgYXMgZmFyIGFzIGVhY2ggd29ya3NwYWNlIHBhY2thZ2UpLCBvciBkZXBlbmRlbmNpZXMgKGhvaXN0IG9ubHkgdXAgdG8gZWFjaCB3b3Jrc3BhY2UgcGFja2FnZSdzIGRpcmVjdCBkZXBlbmRlbmNpZXMpLlxuICpcbiAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFIb2lzdGluZ0xpbWl0c1xuICovXG5leHBvcnQgZW51bSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYUhvaXN0aW5nTGltaXRzIHtcbiAgLyoqIG5vbmUgKi9cbiAgTk9ORSA9IFwibm9uZVwiLFxuICAvKiogd29ya3NwYWNlcyAqL1xuICBXT1JLU1BBQ0VTID0gXCJ3b3Jrc3BhY2VzXCIsXG4gIC8qKiBkZXBlbmRlbmNpZXMgKi9cbiAgREVQRU5ERU5DSUVTID0gXCJkZXBlbmRlbmNpZXNcIixcbn1cblxuLyoqXG4gKiBDYXBzIHRoZSBidW1wIHRoYXQgYSByZWxlYXNlIGZyb20gdGhlIGN1cnJlbnQgY2hlY2tvdXQgbWF5IGFwcGx5LCBhZnRlciBkZXBlbmRlbnQgcHJvcGFnYXRpb24gYW5kIGZpeGVkLWdyb3VwIHJlc29sdXRpb24uXG4gKlxuICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVZlcnNpb25pbmdNYXhCdW1wXG4gKi9cbmV4cG9ydCBlbnVtIFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVmVyc2lvbmluZ01heEJ1bXAge1xuICAvKiogcGF0Y2ggKi9cbiAgUEFUQ0ggPSBcInBhdGNoXCIsXG4gIC8qKiBtaW5vciAqL1xuICBNSU5PUiA9IFwibWlub3JcIixcbiAgLyoqIG1ham9yICovXG4gIE1BSk9SID0gXCJtYWpvclwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFWZXJzaW9uaW5nRXBpY3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVZlcnNpb25pbmdFcGljcyB7XG4gIC8qKlxuICAgKiBMZWFkIHdvcmtzcGFjZSBwcm9qZWN0IG5hbWUgb3IgYSBgLi9gLXByZWZpeGVkIHdvcmtzcGFjZS1yZWxhdGl2ZSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFWZXJzaW9uaW5nRXBpY3MjbGVhZFxuICAgKi9cbiAgcmVhZG9ubHkgbGVhZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm9qZWN0IHNlbGVjdG9ycyBtYXRjaGVkIGluIG9yZGVyLCBzdXBwb3J0aW5nIG5hbWUgZ2xvYnMsIGAuL2AtcHJlZml4ZWQgZGlyZWN0b3J5IGdsb2JzLCBhbmQgYCFgLXByZWZpeGVkIG5lZ2F0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVZlcnNpb25pbmdFcGljcyNwYWNrYWdlc1xuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVZlcnNpb25pbmdFcGljcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1BucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hVmVyc2lvbmluZ0VwaWNzKG9iajogUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFWZXJzaW9uaW5nRXBpY3MgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdsZWFkJzogb2JqLmxlYWQsXG4gICAgJ3BhY2thZ2VzJzogb2JqLnBhY2thZ2VzPy5tYXAoeSA9PiB5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIENvbnRyb2xzIHdoZXJlIHJlbGVhc2UgY2hhbmdlbG9nIGNvbnRlbnQgaXMgc3RvcmVkLlxuICpcbiAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFWZXJzaW9uaW5nQ2hhbmdlbG9nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFWZXJzaW9uaW5nQ2hhbmdlbG9nIHtcbiAgLyoqXG4gICAqIENoYW5nZWxvZyBzdG9yYWdlIG1vZGUuIGByZWdpc3RyeWAgY29tcG9zZXMgY2hhbmdlbG9nIGVudHJpZXMgYXQgcHVibGlzaCB0aW1lLCB3aGlsZSBgcmVwb3NpdG9yeWAgY29tbWl0cyBDSEFOR0VMT0cubWQgZmlsZXMgaW4gcGFja2FnZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFWZXJzaW9uaW5nQ2hhbmdlbG9nI3N0b3JhZ2VcbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2U/OiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVZlcnNpb25pbmdDaGFuZ2Vsb2dTdG9yYWdlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVZlcnNpb25pbmdDaGFuZ2Vsb2cnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9QbnBtV29ya3NwYWNlWWFtbFNjaGVtYVZlcnNpb25pbmdDaGFuZ2Vsb2cob2JqOiBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVZlcnNpb25pbmdDaGFuZ2Vsb2cgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdzdG9yYWdlJzogb2JqLnN0b3JhZ2UsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDaGFuZ2Vsb2cgc3RvcmFnZSBtb2RlLiBgcmVnaXN0cnlgIGNvbXBvc2VzIGNoYW5nZWxvZyBlbnRyaWVzIGF0IHB1Ymxpc2ggdGltZSwgd2hpbGUgYHJlcG9zaXRvcnlgIGNvbW1pdHMgQ0hBTkdFTE9HLm1kIGZpbGVzIGluIHBhY2thZ2VzLlxuICpcbiAqIEBzY2hlbWEgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFWZXJzaW9uaW5nQ2hhbmdlbG9nU3RvcmFnZVxuICovXG5leHBvcnQgZW51bSBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYVZlcnNpb25pbmdDaGFuZ2Vsb2dTdG9yYWdlIHtcbiAgLyoqIHJlZ2lzdHJ5ICovXG4gIFJFR0lTVFJZID0gXCJyZWdpc3RyeVwiLFxuICAvKiogcmVwb3NpdG9yeSAqL1xuICBSRVBPU0lUT1JZID0gXCJyZXBvc2l0b3J5XCIsXG59XG4iXX0=