| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.removeDirAndFiles = removeDirAndFiles;
- var fs = _interopRequireWildcard(require("fs"), true);
- var path = _interopRequireWildcard(require("path"), true);
- var querystring = _interopRequireWildcard(require("query-string"), true);
- var errors = _interopRequireWildcard(require("./errors.js"), true);
- var _helper = require("./internal/helper.js");
- var _type = require("./internal/type.js");
- exports.RETENTION_MODES = _type.RETENTION_MODES;
- exports.ENCRYPTION_TYPES = _type.ENCRYPTION_TYPES;
- exports.LEGAL_HOLD_STATUS = _type.LEGAL_HOLD_STATUS;
- exports.RETENTION_VALIDITY_UNITS = _type.RETENTION_VALIDITY_UNITS;
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
- const DEFAULT_REGION = 'us-east-1';
- exports.DEFAULT_REGION = DEFAULT_REGION;
- const PRESIGN_EXPIRY_DAYS_MAX = 24 * 60 * 60 * 7; // 7 days in seconds
- exports.PRESIGN_EXPIRY_DAYS_MAX = PRESIGN_EXPIRY_DAYS_MAX;
- class CopySourceOptions {
- constructor({
- Bucket,
- Object,
- VersionID = '',
- MatchETag = '',
- NoMatchETag = '',
- MatchModifiedSince = null,
- MatchUnmodifiedSince = null,
- MatchRange = false,
- Start = 0,
- End = 0,
- Encryption = undefined
- }) {
- this.Bucket = Bucket;
- this.Object = Object;
- this.VersionID = VersionID;
- this.MatchETag = MatchETag;
- this.NoMatchETag = NoMatchETag;
- this.MatchModifiedSince = MatchModifiedSince;
- this.MatchUnmodifiedSince = MatchUnmodifiedSince;
- this.MatchRange = MatchRange;
- this.Start = Start;
- this.End = End;
- this.Encryption = Encryption;
- }
- validate() {
- if (!(0, _helper.isValidBucketName)(this.Bucket)) {
- throw new errors.InvalidBucketNameError('Invalid Source bucket name: ' + this.Bucket);
- }
- if (!(0, _helper.isValidObjectName)(this.Object)) {
- throw new errors.InvalidObjectNameError(`Invalid Source object name: ${this.Object}`);
- }
- if (this.MatchRange && this.Start !== -1 && this.End !== -1 && this.Start > this.End || this.Start < 0) {
- throw new errors.InvalidObjectNameError('Source start must be non-negative, and start must be at most end.');
- } else if (this.MatchRange && !(0, _helper.isNumber)(this.Start) || !(0, _helper.isNumber)(this.End)) {
- throw new errors.InvalidObjectNameError('MatchRange is specified. But Invalid Start and End values are specified.');
- }
- return true;
- }
- getHeaders() {
- const headerOptions = {};
- headerOptions['x-amz-copy-source'] = encodeURI(this.Bucket + '/' + this.Object);
- if (!(0, _helper.isEmpty)(this.VersionID)) {
- headerOptions['x-amz-copy-source'] = `${encodeURI(this.Bucket + '/' + this.Object)}?versionId=${this.VersionID}`;
- }
- if (!(0, _helper.isEmpty)(this.MatchETag)) {
- headerOptions['x-amz-copy-source-if-match'] = this.MatchETag;
- }
- if (!(0, _helper.isEmpty)(this.NoMatchETag)) {
- headerOptions['x-amz-copy-source-if-none-match'] = this.NoMatchETag;
- }
- if (!(0, _helper.isEmpty)(this.MatchModifiedSince)) {
- headerOptions['x-amz-copy-source-if-modified-since'] = this.MatchModifiedSince;
- }
- if (!(0, _helper.isEmpty)(this.MatchUnmodifiedSince)) {
- headerOptions['x-amz-copy-source-if-unmodified-since'] = this.MatchUnmodifiedSince;
- }
- return headerOptions;
- }
- }
- /**
- * @deprecated use nodejs fs module
- */
- exports.CopySourceOptions = CopySourceOptions;
- function removeDirAndFiles(dirPath, removeSelf = true) {
- if (removeSelf) {
- return fs.rmSync(dirPath, {
- recursive: true,
- force: true
- });
- }
- fs.readdirSync(dirPath).forEach(item => {
- fs.rmSync(path.join(dirPath, item), {
- recursive: true,
- force: true
- });
- });
- }
- class CopyDestinationOptions {
- constructor({
- Bucket,
- Object,
- Encryption,
- UserMetadata,
- UserTags,
- LegalHold,
- RetainUntilDate,
- Mode,
- MetadataDirective,
- Headers
- }) {
- this.Bucket = Bucket;
- this.Object = Object;
- this.Encryption = Encryption ?? undefined; // null input will become undefined, easy for runtime assert
- this.UserMetadata = UserMetadata;
- this.UserTags = UserTags;
- this.LegalHold = LegalHold;
- this.Mode = Mode; // retention mode
- this.RetainUntilDate = RetainUntilDate;
- this.MetadataDirective = MetadataDirective;
- this.Headers = Headers;
- }
- getHeaders() {
- const replaceDirective = 'REPLACE';
- const headerOptions = {};
- const userTags = this.UserTags;
- if (!(0, _helper.isEmpty)(userTags)) {
- headerOptions['X-Amz-Tagging-Directive'] = replaceDirective;
- headerOptions['X-Amz-Tagging'] = (0, _helper.isObject)(userTags) ? querystring.stringify(userTags) : (0, _helper.isString)(userTags) ? userTags : '';
- }
- if (this.Mode) {
- headerOptions['X-Amz-Object-Lock-Mode'] = this.Mode; // GOVERNANCE or COMPLIANCE
- }
- if (this.RetainUntilDate) {
- headerOptions['X-Amz-Object-Lock-Retain-Until-Date'] = this.RetainUntilDate; // needs to be UTC.
- }
- if (this.LegalHold) {
- headerOptions['X-Amz-Object-Lock-Legal-Hold'] = this.LegalHold; // ON or OFF
- }
- if (this.UserMetadata) {
- for (const [key, value] of Object.entries(this.UserMetadata)) {
- headerOptions[`X-Amz-Meta-${key}`] = value.toString();
- }
- }
- if (this.MetadataDirective) {
- headerOptions[`X-Amz-Metadata-Directive`] = this.MetadataDirective;
- }
- if (this.Encryption) {
- const encryptionHeaders = (0, _helper.getEncryptionHeaders)(this.Encryption);
- for (const [key, value] of Object.entries(encryptionHeaders)) {
- headerOptions[key] = value;
- }
- }
- if (this.Headers) {
- for (const [key, value] of Object.entries(this.Headers)) {
- headerOptions[key] = value;
- }
- }
- return headerOptions;
- }
- validate() {
- if (!(0, _helper.isValidBucketName)(this.Bucket)) {
- throw new errors.InvalidBucketNameError('Invalid Destination bucket name: ' + this.Bucket);
- }
- if (!(0, _helper.isValidObjectName)(this.Object)) {
- throw new errors.InvalidObjectNameError(`Invalid Destination object name: ${this.Object}`);
- }
- if (!(0, _helper.isEmpty)(this.UserMetadata) && !(0, _helper.isObject)(this.UserMetadata)) {
- throw new errors.InvalidObjectNameError(`Destination UserMetadata should be an object with key value pairs`);
- }
- if (!(0, _helper.isEmpty)(this.Mode) && ![_type.RETENTION_MODES.GOVERNANCE, _type.RETENTION_MODES.COMPLIANCE].includes(this.Mode)) {
- throw new errors.InvalidObjectNameError(`Invalid Mode specified for destination object it should be one of [GOVERNANCE,COMPLIANCE]`);
- }
- if (this.Encryption !== undefined && (0, _helper.isEmptyObject)(this.Encryption)) {
- throw new errors.InvalidObjectNameError(`Invalid Encryption configuration for destination object `);
- }
- return true;
- }
- }
- /**
- * maybe this should be a generic type for Records, leave it for later refactor
- */
- exports.CopyDestinationOptions = CopyDestinationOptions;
- class SelectResults {
- constructor({
- records,
- // parsed data as stream
- response,
- // original response stream
- stats,
- // stats as xml
- progress // stats as xml
- }) {
- this.records = records;
- this.response = response;
- this.stats = stats;
- this.progress = progress;
- }
- setStats(stats) {
- this.stats = stats;
- }
- getStats() {
- return this.stats;
- }
- setProgress(progress) {
- this.progress = progress;
- }
- getProgress() {
- return this.progress;
- }
- setResponse(response) {
- this.response = response;
- }
- getResponse() {
- return this.response;
- }
- setRecords(records) {
- this.records = records;
- }
- getRecords() {
- return this.records;
- }
- }
- exports.SelectResults = SelectResults;
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsInBhdGgiLCJxdWVyeXN0cmluZyIsImVycm9ycyIsIl9oZWxwZXIiLCJfdHlwZSIsImV4cG9ydHMiLCJSRVRFTlRJT05fTU9ERVMiLCJFTkNSWVBUSU9OX1RZUEVTIiwiTEVHQUxfSE9MRF9TVEFUVVMiLCJSRVRFTlRJT05fVkFMSURJVFlfVU5JVFMiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJERUZBVUxUX1JFR0lPTiIsIlBSRVNJR05fRVhQSVJZX0RBWVNfTUFYIiwiQ29weVNvdXJjZU9wdGlvbnMiLCJjb25zdHJ1Y3RvciIsIkJ1Y2tldCIsIlZlcnNpb25JRCIsIk1hdGNoRVRhZyIsIk5vTWF0Y2hFVGFnIiwiTWF0Y2hNb2RpZmllZFNpbmNlIiwiTWF0Y2hVbm1vZGlmaWVkU2luY2UiLCJNYXRjaFJhbmdlIiwiU3RhcnQiLCJFbmQiLCJFbmNyeXB0aW9uIiwidW5kZWZpbmVkIiwidmFsaWRhdGUiLCJpc1ZhbGlkQnVja2V0TmFtZSIsIkludmFsaWRCdWNrZXROYW1lRXJyb3IiLCJpc1ZhbGlkT2JqZWN0TmFtZSIsIkludmFsaWRPYmplY3ROYW1lRXJyb3IiLCJpc051bWJlciIsImdldEhlYWRlcnMiLCJoZWFkZXJPcHRpb25zIiwiZW5jb2RlVVJJIiwiaXNFbXB0eSIsInJlbW92ZURpckFuZEZpbGVzIiwiZGlyUGF0aCIsInJlbW92ZVNlbGYiLCJybVN5bmMiLCJyZWN1cnNpdmUiLCJmb3JjZSIsInJlYWRkaXJTeW5jIiwiZm9yRWFjaCIsIml0ZW0iLCJqb2luIiwiQ29weURlc3RpbmF0aW9uT3B0aW9ucyIsIlVzZXJNZXRhZGF0YSIsIlVzZXJUYWdzIiwiTGVnYWxIb2xkIiwiUmV0YWluVW50aWxEYXRlIiwiTW9kZSIsIk1ldGFkYXRhRGlyZWN0aXZlIiwiSGVhZGVycyIsInJlcGxhY2VEaXJlY3RpdmUiLCJ1c2VyVGFncyIsImlzT2JqZWN0Iiwic3RyaW5naWZ5IiwiaXNTdHJpbmciLCJrZXkiLCJ2YWx1ZSIsImVudHJpZXMiLCJ0b1N0cmluZyIsImVuY3J5cHRpb25IZWFkZXJzIiwiZ2V0RW5jcnlwdGlvbkhlYWRlcnMiLCJHT1ZFUk5BTkNFIiwiQ09NUExJQU5DRSIsImluY2x1ZGVzIiwiaXNFbXB0eU9iamVjdCIsIlNlbGVjdFJlc3VsdHMiLCJyZWNvcmRzIiwicmVzcG9uc2UiLCJzdGF0cyIsInByb2dyZXNzIiwic2V0U3RhdHMiLCJnZXRTdGF0cyIsInNldFByb2dyZXNzIiwiZ2V0UHJvZ3Jlc3MiLCJzZXRSZXNwb25zZSIsImdldFJlc3BvbnNlIiwic2V0UmVjb3JkcyIsImdldFJlY29yZHMiXSwic291cmNlcyI6WyJoZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCdcblxuaW1wb3J0ICogYXMgcXVlcnlzdHJpbmcgZnJvbSAncXVlcnktc3RyaW5nJ1xuXG5pbXBvcnQgKiBhcyBlcnJvcnMgZnJvbSAnLi9lcnJvcnMudHMnXG5pbXBvcnQge1xuICBnZXRFbmNyeXB0aW9uSGVhZGVycyxcbiAgaXNFbXB0eSxcbiAgaXNFbXB0eU9iamVjdCxcbiAgaXNOdW1iZXIsXG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNWYWxpZEJ1Y2tldE5hbWUsXG4gIGlzVmFsaWRPYmplY3ROYW1lLFxufSBmcm9tICcuL2ludGVybmFsL2hlbHBlci50cydcbmltcG9ydCB0eXBlIHsgRW5jcnlwdGlvbiwgT2JqZWN0TWV0YURhdGEsIFJlcXVlc3RIZWFkZXJzIH0gZnJvbSAnLi9pbnRlcm5hbC90eXBlLnRzJ1xuaW1wb3J0IHsgUkVURU5USU9OX01PREVTIH0gZnJvbSAnLi9pbnRlcm5hbC90eXBlLnRzJ1xuXG5leHBvcnQgeyBFTkNSWVBUSU9OX1RZUEVTLCBMRUdBTF9IT0xEX1NUQVRVUywgUkVURU5USU9OX01PREVTLCBSRVRFTlRJT05fVkFMSURJVFlfVU5JVFMgfSBmcm9tICcuL2ludGVybmFsL3R5cGUudHMnXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFR0lPTiA9ICd1cy1lYXN0LTEnXG5cbmV4cG9ydCBjb25zdCBQUkVTSUdOX0VYUElSWV9EQVlTX01BWCA9IDI0ICogNjAgKiA2MCAqIDcgLy8gNyBkYXlzIGluIHNlY29uZHNcblxuZXhwb3J0IGludGVyZmFjZSBJQ29weVNvdXJjZU9wdGlvbnMge1xuICBCdWNrZXQ6IHN0cmluZ1xuICBPYmplY3Q6IHN0cmluZ1xuICAvKipcbiAgICogVmFsaWQgdmVyc2lvbklkXG4gICAqL1xuICBWZXJzaW9uSUQ/OiBzdHJpbmdcbiAgLyoqXG4gICAqIEV0YWcgdG8gbWF0Y2hcbiAgICovXG4gIE1hdGNoRVRhZz86IHN0cmluZ1xuICAvKipcbiAgICogRXRhZyB0byBleGNsdWRlXG4gICAqL1xuICBOb01hdGNoRVRhZz86IHN0cmluZ1xuICAvKipcbiAgICogTW9kaWZpZWQgRGF0ZSBvZiB0aGUgb2JqZWN0L3BhcnQuICBVVEMgRGF0ZSBpbiBzdHJpbmcgZm9ybWF0XG4gICAqL1xuICBNYXRjaE1vZGlmaWVkU2luY2U/OiBzdHJpbmcgfCBudWxsXG4gIC8qKlxuICAgKiBNb2RpZmllZCBEYXRlIG9mIHRoZSBvYmplY3QvcGFydCB0byBleGNsdWRlIFVUQyBEYXRlIGluIHN0cmluZyBmb3JtYXRcbiAgICovXG4gIE1hdGNoVW5tb2RpZmllZFNpbmNlPzogc3RyaW5nIHwgbnVsbFxuICAvKipcbiAgICogdHJ1ZSBvciBmYWxzZSBPYmplY3QgcmFuZ2UgdG8gbWF0Y2hcbiAgICovXG4gIE1hdGNoUmFuZ2U/OiBib29sZWFuXG4gIFN0YXJ0PzogbnVtYmVyXG4gIEVuZD86IG51bWJlclxuICBFbmNyeXB0aW9uPzogRW5jcnlwdGlvblxufVxuXG5leHBvcnQgY2xhc3MgQ29weVNvdXJjZU9wdGlvbnMge1xuICBwdWJsaWMgcmVhZG9ubHkgQnVja2V0OiBzdHJpbmdcbiAgcHVibGljIHJlYWRvbmx5IE9iamVjdDogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBWZXJzaW9uSUQ6IHN0cmluZ1xuICBwdWJsaWMgTWF0Y2hFVGFnOiBzdHJpbmdcbiAgcHJpdmF0ZSByZWFkb25seSBOb01hdGNoRVRhZzogc3RyaW5nXG4gIHByaXZhdGUgcmVhZG9ubHkgTWF0Y2hNb2RpZmllZFNpbmNlOiBzdHJpbmcgfCBudWxsXG4gIHByaXZhdGUgcmVhZG9ubHkgTWF0Y2hVbm1vZGlmaWVkU2luY2U6IHN0cmluZyB8IG51bGxcbiAgcHVibGljIHJlYWRvbmx5IE1hdGNoUmFuZ2U6IGJvb2xlYW5cbiAgcHVibGljIHJlYWRvbmx5IFN0YXJ0OiBudW1iZXJcbiAgcHVibGljIHJlYWRvbmx5IEVuZDogbnVtYmVyXG4gIHByaXZhdGUgcmVhZG9ubHkgRW5jcnlwdGlvbj86IEVuY3J5cHRpb25cblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgQnVja2V0LFxuICAgIE9iamVjdCxcbiAgICBWZXJzaW9uSUQgPSAnJyxcbiAgICBNYXRjaEVUYWcgPSAnJyxcbiAgICBOb01hdGNoRVRhZyA9ICcnLFxuICAgIE1hdGNoTW9kaWZpZWRTaW5jZSA9IG51bGwsXG4gICAgTWF0Y2hVbm1vZGlmaWVkU2luY2UgPSBudWxsLFxuICAgIE1hdGNoUmFuZ2UgPSBmYWxzZSxcbiAgICBTdGFydCA9IDAsXG4gICAgRW5kID0gMCxcbiAgICBFbmNyeXB0aW9uID0gdW5kZWZpbmVkLFxuICB9OiBJQ29weVNvdXJjZU9wdGlvbnMpIHtcbiAgICB0aGlzLkJ1Y2tldCA9IEJ1Y2tldFxuICAgIHRoaXMuT2JqZWN0ID0gT2JqZWN0XG4gICAgdGhpcy5WZXJzaW9uSUQgPSBWZXJzaW9uSURcbiAgICB0aGlzLk1hdGNoRVRhZyA9IE1hdGNoRVRhZ1xuICAgIHRoaXMuTm9NYXRjaEVUYWcgPSBOb01hdGNoRVRhZ1xuICAgIHRoaXMuTWF0Y2hNb2RpZmllZFNpbmNlID0gTWF0Y2hNb2RpZmllZFNpbmNlXG4gICAgdGhpcy5NYXRjaFVubW9kaWZpZWRTaW5jZSA9IE1hdGNoVW5tb2RpZmllZFNpbmNlXG4gICAgdGhpcy5NYXRjaFJhbmdlID0gTWF0Y2hSYW5nZVxuICAgIHRoaXMuU3RhcnQgPSBTdGFydFxuICAgIHRoaXMuRW5kID0gRW5kXG4gICAgdGhpcy5FbmNyeXB0aW9uID0gRW5jcnlwdGlvblxuICB9XG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgaWYgKCFpc1ZhbGlkQnVja2V0TmFtZSh0aGlzLkJ1Y2tldCkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEJ1Y2tldE5hbWVFcnJvcignSW52YWxpZCBTb3VyY2UgYnVja2V0IG5hbWU6ICcgKyB0aGlzLkJ1Y2tldClcbiAgICB9XG4gICAgaWYgKCFpc1ZhbGlkT2JqZWN0TmFtZSh0aGlzLk9iamVjdCkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZE9iamVjdE5hbWVFcnJvcihgSW52YWxpZCBTb3VyY2Ugb2JqZWN0IG5hbWU6ICR7dGhpcy5PYmplY3R9YClcbiAgICB9XG4gICAgaWYgKCh0aGlzLk1hdGNoUmFuZ2UgJiYgdGhpcy5TdGFydCAhPT0gLTEgJiYgdGhpcy5FbmQgIT09IC0xICYmIHRoaXMuU3RhcnQgPiB0aGlzLkVuZCkgfHwgdGhpcy5TdGFydCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZE9iamVjdE5hbWVFcnJvcignU291cmNlIHN0YXJ0IG11c3QgYmUgbm9uLW5lZ2F0aXZlLCBhbmQgc3RhcnQgbXVzdCBiZSBhdCBtb3N0IGVuZC4nKVxuICAgIH0gZWxzZSBpZiAoKHRoaXMuTWF0Y2hSYW5nZSAmJiAhaXNOdW1iZXIodGhpcy5TdGFydCkpIHx8ICFpc051bWJlcih0aGlzLkVuZCkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZE9iamVjdE5hbWVFcnJvcihcbiAgICAgICAgJ01hdGNoUmFuZ2UgaXMgc3BlY2lmaWVkLiBCdXQgSW52YWxpZCBTdGFydCBhbmQgRW5kIHZhbHVlcyBhcmUgc3BlY2lmaWVkLicsXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGdldEhlYWRlcnMoKTogUmVxdWVzdEhlYWRlcnMge1xuICAgIGNvbnN0IGhlYWRlck9wdGlvbnM6IFJlcXVlc3RIZWFkZXJzID0ge31cbiAgICBoZWFkZXJPcHRpb25zWyd4LWFtei1jb3B5LXNvdXJjZSddID0gZW5jb2RlVVJJKHRoaXMuQnVja2V0ICsgJy8nICsgdGhpcy5PYmplY3QpXG5cbiAgICBpZiAoIWlzRW1wdHkodGhpcy5WZXJzaW9uSUQpKSB7XG4gICAgICBoZWFkZXJPcHRpb25zWyd4LWFtei1jb3B5LXNvdXJjZSddID0gYCR7ZW5jb2RlVVJJKHRoaXMuQnVja2V0ICsgJy8nICsgdGhpcy5PYmplY3QpfT92ZXJzaW9uSWQ9JHt0aGlzLlZlcnNpb25JRH1gXG4gICAgfVxuXG4gICAgaWYgKCFpc0VtcHR5KHRoaXMuTWF0Y2hFVGFnKSkge1xuICAgICAgaGVhZGVyT3B0aW9uc1sneC1hbXotY29weS1zb3VyY2UtaWYtbWF0Y2gnXSA9IHRoaXMuTWF0Y2hFVGFnXG4gICAgfVxuICAgIGlmICghaXNFbXB0eSh0aGlzLk5vTWF0Y2hFVGFnKSkge1xuICAgICAgaGVhZGVyT3B0aW9uc1sneC1hbXotY29weS1zb3VyY2UtaWYtbm9uZS1tYXRjaCddID0gdGhpcy5Ob01hdGNoRVRhZ1xuICAgIH1cblxuICAgIGlmICghaXNFbXB0eSh0aGlzLk1hdGNoTW9kaWZpZWRTaW5jZSkpIHtcbiAgICAgIGhlYWRlck9wdGlvbnNbJ3gtYW16LWNvcHktc291cmNlLWlmLW1vZGlmaWVkLXNpbmNlJ10gPSB0aGlzLk1hdGNoTW9kaWZpZWRTaW5jZVxuICAgIH1cbiAgICBpZiAoIWlzRW1wdHkodGhpcy5NYXRjaFVubW9kaWZpZWRTaW5jZSkpIHtcbiAgICAgIGhlYWRlck9wdGlvbnNbJ3gtYW16LWNvcHktc291cmNlLWlmLXVubW9kaWZpZWQtc2luY2UnXSA9IHRoaXMuTWF0Y2hVbm1vZGlmaWVkU2luY2VcbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyT3B0aW9uc1xuICB9XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIG5vZGVqcyBmcyBtb2R1bGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURpckFuZEZpbGVzKGRpclBhdGg6IHN0cmluZywgcmVtb3ZlU2VsZiA9IHRydWUpIHtcbiAgaWYgKHJlbW92ZVNlbGYpIHtcbiAgICByZXR1cm4gZnMucm1TeW5jKGRpclBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxuICB9XG5cbiAgZnMucmVhZGRpclN5bmMoZGlyUGF0aCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgIGZzLnJtU3luYyhwYXRoLmpvaW4oZGlyUGF0aCwgaXRlbSksIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxuICB9KVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb3B5RGVzdGluYXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIEJ1Y2tldCBuYW1lXG4gICAqL1xuICBCdWNrZXQ6IHN0cmluZ1xuICAvKipcbiAgICogT2JqZWN0IE5hbWUgZm9yIHRoZSBkZXN0aW5hdGlvbiAoY29tcG9zZWQvY29waWVkKSBvYmplY3QgZGVmYXVsdHNcbiAgICovXG4gIE9iamVjdDogc3RyaW5nXG4gIC8qKlxuICAgKiBFbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgdG8ge31cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIEVuY3J5cHRpb24/OiBFbmNyeXB0aW9uXG4gIFVzZXJNZXRhZGF0YT86IE9iamVjdE1ldGFEYXRhXG4gIC8qKlxuICAgKiBxdWVyeS1zdHJpbmcgZW5jb2RlZCBzdHJpbmcgb3IgUmVjb3JkPHN0cmluZywgc3RyaW5nPiBPYmplY3RcbiAgICovXG4gIFVzZXJUYWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHN0cmluZ1xuICBMZWdhbEhvbGQ/OiAnb24nIHwgJ29mZidcbiAgLyoqXG4gICAqIFVUQyBEYXRlIFN0cmluZ1xuICAgKi9cbiAgUmV0YWluVW50aWxEYXRlPzogc3RyaW5nXG4gIE1vZGU/OiBSRVRFTlRJT05fTU9ERVNcbiAgTWV0YWRhdGFEaXJlY3RpdmU/OiAnQ09QWScgfCAnUkVQTEFDRSdcbiAgLyoqXG4gICAqIEV4dHJhIGhlYWRlcnMgZm9yIHRoZSB0YXJnZXQgb2JqZWN0XG4gICAqL1xuICBIZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxufVxuXG5leHBvcnQgY2xhc3MgQ29weURlc3RpbmF0aW9uT3B0aW9ucyB7XG4gIHB1YmxpYyByZWFkb25seSBCdWNrZXQ6IHN0cmluZ1xuICBwdWJsaWMgcmVhZG9ubHkgT2JqZWN0OiBzdHJpbmdcbiAgcHJpdmF0ZSByZWFkb25seSBFbmNyeXB0aW9uPzogRW5jcnlwdGlvblxuICBwcml2YXRlIHJlYWRvbmx5IFVzZXJNZXRhZGF0YT86IE9iamVjdE1ldGFEYXRhXG4gIHByaXZhdGUgcmVhZG9ubHkgVXNlclRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgc3RyaW5nXG4gIHByaXZhdGUgcmVhZG9ubHkgTGVnYWxIb2xkPzogJ29uJyB8ICdvZmYnXG4gIHByaXZhdGUgcmVhZG9ubHkgUmV0YWluVW50aWxEYXRlPzogc3RyaW5nXG4gIHByaXZhdGUgcmVhZG9ubHkgTW9kZT86IFJFVEVOVElPTl9NT0RFU1xuICBwcml2YXRlIHJlYWRvbmx5IE1ldGFkYXRhRGlyZWN0aXZlPzogc3RyaW5nXG4gIHByaXZhdGUgcmVhZG9ubHkgSGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgQnVja2V0LFxuICAgIE9iamVjdCxcbiAgICBFbmNyeXB0aW9uLFxuICAgIFVzZXJNZXRhZGF0YSxcbiAgICBVc2VyVGFncyxcbiAgICBMZWdhbEhvbGQsXG4gICAgUmV0YWluVW50aWxEYXRlLFxuICAgIE1vZGUsXG4gICAgTWV0YWRhdGFEaXJlY3RpdmUsXG4gICAgSGVhZGVycyxcbiAgfTogSUNvcHlEZXN0aW5hdGlvbk9wdGlvbnMpIHtcbiAgICB0aGlzLkJ1Y2tldCA9IEJ1Y2tldFxuICAgIHRoaXMuT2JqZWN0ID0gT2JqZWN0XG4gICAgdGhpcy5FbmNyeXB0aW9uID0gRW5jcnlwdGlvbiA/PyB1bmRlZmluZWQgLy8gbnVsbCBpbnB1dCB3aWxsIGJlY29tZSB1bmRlZmluZWQsIGVhc3kgZm9yIHJ1bnRpbWUgYXNzZXJ0XG4gICAgdGhpcy5Vc2VyTWV0YWRhdGEgPSBVc2VyTWV0YWRhdGFcbiAgICB0aGlzLlVzZXJUYWdzID0gVXNlclRhZ3NcbiAgICB0aGlzLkxlZ2FsSG9sZCA9IExlZ2FsSG9sZFxuICAgIHRoaXMuTW9kZSA9IE1vZGUgLy8gcmV0ZW50aW9uIG1vZGVcbiAgICB0aGlzLlJldGFpblVudGlsRGF0ZSA9IFJldGFpblVudGlsRGF0ZVxuICAgIHRoaXMuTWV0YWRhdGFEaXJlY3RpdmUgPSBNZXRhZGF0YURpcmVjdGl2ZVxuICAgIHRoaXMuSGVhZGVycyA9IEhlYWRlcnNcbiAgfVxuXG4gIGdldEhlYWRlcnMoKTogUmVxdWVzdEhlYWRlcnMge1xuICAgIGNvbnN0IHJlcGxhY2VEaXJlY3RpdmUgPSAnUkVQTEFDRSdcbiAgICBjb25zdCBoZWFkZXJPcHRpb25zOiBSZXF1ZXN0SGVhZGVycyA9IHt9XG5cbiAgICBjb25zdCB1c2VyVGFncyA9IHRoaXMuVXNlclRhZ3NcbiAgICBpZiAoIWlzRW1wdHkodXNlclRhZ3MpKSB7XG4gICAgICBoZWFkZXJPcHRpb25zWydYLUFtei1UYWdnaW5nLURpcmVjdGl2ZSddID0gcmVwbGFjZURpcmVjdGl2ZVxuICAgICAgaGVhZGVyT3B0aW9uc1snWC1BbXotVGFnZ2luZyddID0gaXNPYmplY3QodXNlclRhZ3MpXG4gICAgICAgID8gcXVlcnlzdHJpbmcuc3RyaW5naWZ5KHVzZXJUYWdzKVxuICAgICAgICA6IGlzU3RyaW5nKHVzZXJUYWdzKVxuICAgICAgICA/IHVzZXJUYWdzXG4gICAgICAgIDogJydcbiAgICB9XG5cbiAgICBpZiAodGhpcy5Nb2RlKSB7XG4gICAgICBoZWFkZXJPcHRpb25zWydYLUFtei1PYmplY3QtTG9jay1Nb2RlJ10gPSB0aGlzLk1vZGUgLy8gR09WRVJOQU5DRSBvciBDT01QTElBTkNFXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuUmV0YWluVW50aWxEYXRlKSB7XG4gICAgICBoZWFkZXJPcHRpb25zWydYLUFtei1PYmplY3QtTG9jay1SZXRhaW4tVW50aWwtRGF0ZSddID0gdGhpcy5SZXRhaW5VbnRpbERhdGUgLy8gbmVlZHMgdG8gYmUgVVRDLlxuICAgIH1cblxuICAgIGlmICh0aGlzLkxlZ2FsSG9sZCkge1xuICAgICAgaGVhZGVyT3B0aW9uc1snWC1BbXotT2JqZWN0LUxvY2stTGVnYWwtSG9sZCddID0gdGhpcy5MZWdhbEhvbGQgLy8gT04gb3IgT0ZGXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuVXNlck1ldGFkYXRhKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLlVzZXJNZXRhZGF0YSkpIHtcbiAgICAgICAgaGVhZGVyT3B0aW9uc1tgWC1BbXotTWV0YS0ke2tleX1gXSA9IHZhbHVlLnRvU3RyaW5nKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5NZXRhZGF0YURpcmVjdGl2ZSkge1xuICAgICAgaGVhZGVyT3B0aW9uc1tgWC1BbXotTWV0YWRhdGEtRGlyZWN0aXZlYF0gPSB0aGlzLk1ldGFkYXRhRGlyZWN0aXZlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuRW5jcnlwdGlvbikge1xuICAgICAgY29uc3QgZW5jcnlwdGlvbkhlYWRlcnMgPSBnZXRFbmNyeXB0aW9uSGVhZGVycyh0aGlzLkVuY3J5cHRpb24pXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbmNyeXB0aW9uSGVhZGVycykpIHtcbiAgICAgICAgaGVhZGVyT3B0aW9uc1trZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuSGVhZGVycykge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5IZWFkZXJzKSkge1xuICAgICAgICBoZWFkZXJPcHRpb25zW2tleV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJPcHRpb25zXG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICBpZiAoIWlzVmFsaWRCdWNrZXROYW1lKHRoaXMuQnVja2V0KSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQnVja2V0TmFtZUVycm9yKCdJbnZhbGlkIERlc3RpbmF0aW9uIGJ1Y2tldCBuYW1lOiAnICsgdGhpcy5CdWNrZXQpXG4gICAgfVxuICAgIGlmICghaXNWYWxpZE9iamVjdE5hbWUodGhpcy5PYmplY3QpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRPYmplY3ROYW1lRXJyb3IoYEludmFsaWQgRGVzdGluYXRpb24gb2JqZWN0IG5hbWU6ICR7dGhpcy5PYmplY3R9YClcbiAgICB9XG4gICAgaWYgKCFpc0VtcHR5KHRoaXMuVXNlck1ldGFkYXRhKSAmJiAhaXNPYmplY3QodGhpcy5Vc2VyTWV0YWRhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRPYmplY3ROYW1lRXJyb3IoYERlc3RpbmF0aW9uIFVzZXJNZXRhZGF0YSBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGgga2V5IHZhbHVlIHBhaXJzYClcbiAgICB9XG5cbiAgICBpZiAoIWlzRW1wdHkodGhpcy5Nb2RlKSAmJiAhW1JFVEVOVElPTl9NT0RFUy5HT1ZFUk5BTkNFLCBSRVRFTlRJT05fTU9ERVMuQ09NUExJQU5DRV0uaW5jbHVkZXModGhpcy5Nb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkT2JqZWN0TmFtZUVycm9yKFxuICAgICAgICBgSW52YWxpZCBNb2RlIHNwZWNpZmllZCBmb3IgZGVzdGluYXRpb24gb2JqZWN0IGl0IHNob3VsZCBiZSBvbmUgb2YgW0dPVkVSTkFOQ0UsQ09NUExJQU5DRV1gLFxuICAgICAgKVxuICAgIH1cblxuICAgIGlmICh0aGlzLkVuY3J5cHRpb24gIT09IHVuZGVmaW5lZCAmJiBpc0VtcHR5T2JqZWN0KHRoaXMuRW5jcnlwdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZE9iamVjdE5hbWVFcnJvcihgSW52YWxpZCBFbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIGRlc3RpbmF0aW9uIG9iamVjdCBgKVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbi8qKlxuICogbWF5YmUgdGhpcyBzaG91bGQgYmUgYSBnZW5lcmljIHR5cGUgZm9yIFJlY29yZHMsIGxlYXZlIGl0IGZvciBsYXRlciByZWZhY3RvclxuICovXG5leHBvcnQgY2xhc3MgU2VsZWN0UmVzdWx0cyB7XG4gIHByaXZhdGUgcmVjb3Jkcz86IHVua25vd25cbiAgcHJpdmF0ZSByZXNwb25zZT86IHVua25vd25cbiAgcHJpdmF0ZSBzdGF0cz86IHN0cmluZ1xuICBwcml2YXRlIHByb2dyZXNzPzogdW5rbm93blxuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICByZWNvcmRzLCAvLyBwYXJzZWQgZGF0YSBhcyBzdHJlYW1cbiAgICByZXNwb25zZSwgLy8gb3JpZ2luYWwgcmVzcG9uc2Ugc3RyZWFtXG4gICAgc3RhdHMsIC8vIHN0YXRzIGFzIHhtbFxuICAgIHByb2dyZXNzLCAvLyBzdGF0cyBhcyB4bWxcbiAgfToge1xuICAgIHJlY29yZHM/OiB1bmtub3duXG4gICAgcmVzcG9uc2U/OiB1bmtub3duXG4gICAgc3RhdHM/OiBzdHJpbmdcbiAgICBwcm9ncmVzcz86IHVua25vd25cbiAgfSkge1xuICAgIHRoaXMucmVjb3JkcyA9IHJlY29yZHNcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2VcbiAgICB0aGlzLnN0YXRzID0gc3RhdHNcbiAgICB0aGlzLnByb2dyZXNzID0gcHJvZ3Jlc3NcbiAgfVxuXG4gIHNldFN0YXRzKHN0YXRzOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0YXRzID0gc3RhdHNcbiAgfVxuXG4gIGdldFN0YXRzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRzXG4gIH1cblxuICBzZXRQcm9ncmVzcyhwcm9ncmVzczogdW5rbm93bikge1xuICAgIHRoaXMucHJvZ3Jlc3MgPSBwcm9ncmVzc1xuICB9XG5cbiAgZ2V0UHJvZ3Jlc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NcbiAgfVxuXG4gIHNldFJlc3BvbnNlKHJlc3BvbnNlOiB1bmtub3duKSB7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlXG4gIH1cblxuICBnZXRSZXNwb25zZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZVxuICB9XG5cbiAgc2V0UmVjb3JkcyhyZWNvcmRzOiB1bmtub3duKSB7XG4gICAgdGhpcy5yZWNvcmRzID0gcmVjb3Jkc1xuICB9XG5cbiAgZ2V0UmVjb3JkcygpOiB1bmtub3duIHtcbiAgICByZXR1cm4gdGhpcy5yZWNvcmRzXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsRUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsSUFBQSxHQUFBRix1QkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUUsV0FBQSxHQUFBSCx1QkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUcsTUFBQSxHQUFBSix1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBV0EsSUFBQUssS0FBQSxHQUFBTCxPQUFBO0FBQW9ETSxPQUFBLENBQUFDLGVBQUEsR0FBQUYsS0FBQSxDQUFBRSxlQUFBO0FBQUFELE9BQUEsQ0FBQUUsZ0JBQUEsR0FBQUgsS0FB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
|