Socket
Socket
Sign inDemoInstall

express-cassandra

Package Overview
Dependencies
105
Maintainers
1
Versions
97
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.2.3 to 2.2.4

.nyc_output/4fbfe99a7ceb02cef1154374a19d4c99.json

10

CHANGELOG.md

@@ -9,2 +9,9 @@ # Changelog

## [2.2.4] - 2018-10-04
### Fixed
- Field type validation message display undefined value when invalid type is used
### Changed
- Upgraded locked package dependencies to resolve security warning
## [2.2.3] - 2018-07-10

@@ -493,3 +500,4 @@ ### Fixed

[Unreleased]: https://github.com/masumsoft/express-cassandra/compare/v2.2.3...master
[Unreleased]: https://github.com/masumsoft/express-cassandra/compare/v2.2.4...master
[2.2.4]: https://github.com/masumsoft/express-cassandra/compare/v2.2.3...v2.2.4
[2.2.3]: https://github.com/masumsoft/express-cassandra/compare/v2.2.2...v2.2.3

@@ -496,0 +504,0 @@ [2.2.2]: https://github.com/masumsoft/express-cassandra/compare/v2.2.1...v2.2.2

2

docs/installation.md

@@ -17,3 +17,3 @@ # Installation

npm install express-cassandra gremlin
npm install express-cassandra gremlin@2.6.0

@@ -20,0 +20,0 @@ For older cassandra 2.x (no longer supported)

@@ -39,14 +39,14 @@ 'use strict';

if (!_.has(datatypes, fieldtype)) {
throw new Error(util.format('Invalid field type "%s" for field: %s', fieldObject.type, fieldName));
throw new Error(util.format('Invalid field type "%s" for field: %s', fieldtype, fieldName));
}
if (['map', 'list', 'set', 'frozen'].includes(fieldObject.type)) {
if (['map', 'list', 'set', 'frozen'].includes(fieldtype)) {
if (!fieldObject.typeDef) {
throw new Error(util.format('Missing typeDef for field type "%s" on field: %s', fieldObject.type, fieldName));
throw new Error(util.format('Missing typeDef for field type "%s" on field: %s', fieldtype, fieldName));
}
if (typeof fieldObject.typeDef !== 'string') {
throw new Error(util.format('Invalid typeDef for field type "%s" on field: %s', fieldObject.type, fieldName));
throw new Error(util.format('Invalid typeDef for field type "%s" on field: %s', fieldtype, fieldName));
}
}
if (!this.is_field_default_value_valid(modelSchema, fieldName)) {
throw new Error(util.format('Invalid defult value for field: %s(%s)', fieldName, fieldObject.type));
throw new Error(util.format('Invalid default value for field: %s(%s)', fieldName, fieldtype));
}

@@ -397,2 +397,2 @@ },

module.exports = schemer;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0b3JzL3NjaGVtYS5qcyJdLCJuYW1lcyI6WyJfIiwicmVxdWlyZSIsInV0aWwiLCJkYXRhdHlwZXMiLCJzY2hlbWVyIiwidmFsaWRhdGVfdGFibGVfbmFtZSIsInRhYmxlTmFtZSIsInRlc3QiLCJoYXNfZmllbGQiLCJtb2RlbFNjaGVtYSIsImZpZWxkTmFtZSIsIm9wdGlvbkZpZWxkTmFtZXMiLCJvcHRpb25zIiwidGltZXN0YW1wcyIsInRpbWVzdGFtcE9wdGlvbnMiLCJjcmVhdGVkQXQiLCJ1cGRhdGVkQXQiLCJwdXNoIiwidmVyc2lvbnMiLCJ2ZXJzaW9uT3B0aW9ucyIsImtleSIsImhhcyIsImZpZWxkcyIsImluY2x1ZGVzIiwidmFsaWRhdGVfZmllbGQiLCJmaWVsZE9iamVjdCIsIkVycm9yIiwiZm9ybWF0IiwiZmllbGR0eXBlIiwiZ2V0X2ZpZWxkX3R5cGUiLCJ0eXBlIiwidHlwZURlZiIsImlzX2ZpZWxkX2RlZmF1bHRfdmFsdWVfdmFsaWQiLCJ2YWxpZGF0ZV9wcmltYXJ5X2tleSIsInZpcnR1YWwiLCJpc0FycmF5IiwibGVuZ3RoIiwiZm9yRWFjaCIsInBhcnRpdGlvbktleUZpZWxkIiwicHJpbWFyeUtleUZpZWxkIiwicHJpbWFyeUtleUluZGV4IiwiY2x1c3RlcmluZ19vcmRlciIsImlzUGxhaW5PYmplY3QiLCJjbHVzdGVyaW5nT3JkZXIiLCJjbHVzdGVyaW5nRmllbGROYW1lIiwidG9Mb3dlckNhc2UiLCJpbmRleE9mIiwidmFsaWRhdGVfbWF0ZXJpYWxpemVkX3ZpZXciLCJtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0IiwibWF0ZXJpYWxpemVkVmlld05hbWUiLCJzZWxlY3QiLCJtYXRlcmlhbGl6ZWRWaWV3U2VsZWN0RmllbGQiLCJtYXRlcmlhbGl6ZWRWaWV3UGFydGl0aW9uS2V5RmllbGQiLCJtYXRlcmlhbGl6ZWRWaWV3UHJpbWFyeUtleUZpZWxkIiwibWF0ZXJpYWxpemVkVmlld1ByaW1hcnlLZXlJbmRleCIsIm12Q2x1c3RlcmluZ09yZGVyIiwibXZsdXN0ZXJpbmdGaWVsZE5hbWUiLCJ2YWxpZGF0ZV9pbmRleCIsImluZGV4RGVmIiwiaW5kZXhOYW1lTGlzdCIsInJlcGxhY2UiLCJzcGxpdCIsInZhbGlkYXRlX2N1c3RvbV9pbmRleCIsImN1c3RvbUluZGV4Iiwib24iLCJ1c2luZyIsInZhbGlkYXRlX21vZGVsX3NjaGVtYSIsIk9iamVjdCIsImtleXMiLCJtYXRlcmlhbGl6ZWRfdmlld3MiLCJpbmRleGVzIiwiY3VzdG9tX2luZGV4IiwiY3VzdG9tX2luZGV4ZXMiLCJmb3JtYXRfdmFsaWRhdGlvbl9ydWxlIiwicnVsZSIsImZpZWxkbmFtZSIsInZhbGlkYXRvciIsIm1lc3NhZ2UiLCJnZXRfZ2VuZXJpY192YWxpZGF0aW9uX21lc3NhZ2UiLCJmMSIsImJpbmQiLCJ2YWx1ZSIsInByb3BOYW1lIiwiZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZSIsInZhbGlkYXRvcnMiLCIkZGJfZnVuY3Rpb24iLCJ2IiwiZ2V0X3ZhbGlkYXRvcnMiLCJ0eXBlRmllbGRWYWxpZGF0b3IiLCJnZW5lcmljX3R5cGVfdmFsaWRhdG9yIiwiZmllbGQiLCJBcnJheSIsImZpZWxkcnVsZSIsImlzX3JlcXVpcmVkX2ZpZWxkIiwicmVxdWlyZWQiLCJpc19wcmltYXJ5X2tleV9maWVsZCIsImRlZmF1bHQiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQU1BLElBQUlDLFFBQVEsUUFBUixDQUFWO0FBQ0EsSUFBTUMsT0FBT0QsUUFBUSxNQUFSLENBQWI7O0FBRUEsSUFBTUUsWUFBWUYsUUFBUSxhQUFSLENBQWxCOztBQUVBLElBQU1HLFVBQVU7QUFDZEMsc0JBQW9CQyxTQUFwQixFQUErQjtBQUM3QixXQUFRLE9BQU9BLFNBQVAsS0FBcUIsUUFBckIsSUFBaUMsMEJBQTBCQyxJQUExQixDQUErQkQsU0FBL0IsQ0FBekM7QUFDRCxHQUhhO0FBSWRFLFlBQVVDLFdBQVYsRUFBdUJDLFNBQXZCLEVBQWtDO0FB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QWthQW1FLE9BQU9DLE9BQVAsR0FBaUI5RixPQUFqQiIsImZpbGUiOiJzY2hlbWEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5jb25zdCBkYXRhdHlwZXMgPSByZXF1aXJlKCcuL2RhdGF0eXBlcycpO1xuXG5jb25zdCBzY2hlbWVyID0ge1xuICB2YWxpZGF0ZV90YWJsZV9uYW1lKHRhYmxlTmFtZSkge1xuICAgIHJldHVybiAodHlwZW9mIHRhYmxlTmFtZSA9PT0gJ3N0cmluZycgJiYgL15bYS16QS1aXStbYS16QS1aMC05X10qLy50ZXN0KHRhYmxlTmFtZSkpO1xuICB9LFxuICBoYXNfZmllbGQobW9kZWxTY2hlbWEsIGZpZWxkTmFtZSkge1xuICAgIGNvbnN0IG9wdGlvbkZpZWxkTmFtZXMgPSBbXTtcbiAgICBpZiAobW9kZWxTY2hlbWEub3B0aW9ucykge1xuICAgICAgaWYgKG1vZGVsU2NoZW1hLm9wdGlvbnMudGltZXN0YW1wcykge1xuICAgICAgICBjb25zdCB0aW1lc3RhbXBPcHRpb25zID0ge1xuICAgICAgICAgIGNyZWF0ZWRBdDogbW9kZWxTY2hlbWEub3B0aW9ucy50aW1lc3RhbXBzLmNyZWF0ZWRBdCB8fCAnY3JlYXRlZEF0JyxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG1vZGVsU2NoZW1hLm9wdGlvbnMudGltZXN0YW1wcy51cGRhdGVkQXQgfHwgJ3VwZGF0ZWRBdCcsXG4gICAgICAgIH07XG4gICAgICAgIG9wdGlvbkZpZWxkTmFtZXMucHVzaCh0aW1lc3RhbXBPcHRpb25zLmNyZWF0ZWRBdCk7XG4gICAgICAgIG9wdGlvbkZpZWxkTmFtZXMucHVzaCh0aW1lc3RhbXBPcHRpb25zLnVwZGF0ZWRBdCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2RlbFNjaGVtYS5vcHRpb25zLnZlcnNpb25zKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb25PcHRpb25zID0ge1xuICAgICAgICAgIGtleTogbW9kZWxTY2hlbWEub3B0aW9ucy52ZXJzaW9ucy5rZXkgfHwgJ19fdicsXG4gICAgICAgIH07XG4gICAgICAgIG9wdGlvbkZpZWxkTmFtZXMucHVzaCh2ZXJzaW9uT3B0aW9ucy5rZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXy5oYXMobW9kZWxTY2hlbWEuZmllbGRzLCBmaWVsZE5hbWUpIHx8IG9wdGlvbkZpZWxkTmFtZXMuaW5jbHVkZXMoZmllbGROYW1lKTtcbiAgfSxcbiAgdmFsaWRhdGVfZmllbGQobW9kZWxTY2hlbWEsIGZpZWxkT2JqZWN0LCBmaWVsZE5hbWUpIHtcbiAgICBpZiAoIWZpZWxkT2JqZWN0KSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdTY2hlbWEgZmllbGQgXCIlc1wiIGlzIG5vdCBwcm9wZXJseSBkZWZpbmVkJywgZmllbGROYW1lKSkpO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZHR5cGUgPSB0aGlzLmdldF9maWVsZF90eXBlKG1vZGVsU2NoZW1hLCBmaWVsZE5hbWUpO1xuICAgIGlmICghXy5oYXMoZGF0YXR5cGVzLCBmaWVsZHR5cGUpKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdJbnZhbGlkIGZpZWxkIHR5cGUgXCIlc1wiIGZvciBmaWVsZDogJXMnLCBmaWVsZE9iamVjdC50eXBlLCBmaWVsZE5hbWUpKSk7XG4gICAgfVxuICAgIGlmIChbJ21hcCcsICdsaXN0JywgJ3NldCcsICdmcm96ZW4nXS5pbmNsdWRlcyhmaWVsZE9iamVjdC50eXBlKSkge1xuICAgICAgaWYgKCFmaWVsZE9iamVjdC50eXBlRGVmKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ01pc3NpbmcgdHlwZURlZiBmb3IgZmllbGQgdHlwZSBcIiVzXCIgb24gZmllbGQ6ICVzJywgZmllbGRPYmplY3QudHlwZSwgZmllbGROYW1lKSkpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBmaWVsZE9iamVjdC50eXBlRGVmICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdJbnZhbGlkIHR5cGVEZWYgZm9yIGZpZWxkIHR5cGUgXCIlc1wiIG9uIGZpZWxkOiAlcycsIGZpZWxkT2JqZWN0LnR5cGUsIGZpZWxkTmFtZSkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEodGhpcy5pc19maWVsZF9kZWZhdWx0X3ZhbHVlX3ZhbGlkKG1vZGVsU2NoZW1hLCBmaWVsZE5hbWUpKSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnSW52YWxpZCBkZWZ1bHQgdmFsdWUgZm9yIGZpZWxkOiAlcyglcyknLCBmaWVsZE5hbWUsIGZpZWxkT2JqZWN0LnR5cGUpKSk7XG4gICAgfVxuICB9LFxuXG4gIHZhbGlkYXRlX3ByaW1hcnlfa2V5KG1vZGVsU2NoZW1hKSB7XG4gICAgaWYgKHR5cGVvZiAobW9kZWxTY2hlbWEua2V5WzBdKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICghdGhpcy5oYXNfZmllbGQobW9kZWxTY2hlbWEsIG1vZGVsU2NoZW1hLmtleVswXSkpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcignUGFydGl0aW9uIEtleSBtdXN0IGFsc28gYmUgYSB2YWxpZCBmaWVsZCBuYW1lJykpO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1ttb2RlbFNjaGVtYS5rZXlbMF1dICYmIG1vZGVsU2NoZW1hLmZpZWxkc1ttb2RlbFNjaGVtYS5rZXlbMF1dLnZpcnR1YWwpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcihcIlBhcnRpdGlvbiBLZXkgbXVzdCBhbHNvIGJlIGEgZGIgZmllbGQgbmFtZSwgY2FuJ3QgYmUgYSB2aXJ0dWFsIGZpZWxkIG5hbWVcIikpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXy5pc0FycmF5KG1vZGVsU2NoZW1hLmtleVswXSkpIHtcbiAgICAgIGlmIChtb2RlbFNjaGVtYS5rZXlbMF0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IoXCJQYXJ0aXRpb24gS2V5IGFycmF5IGNhbid0IGJlIGVtcHR5XCIpKTtcbiAgICAgIH1cbiAgICAgIG1vZGVsU2NoZW1hLmtleVswXS5mb3JFYWNoKChwYXJ0aXRpb25LZXlGaWVsZCkgPT4ge1xuICAgICAgICBpZiAoKHR5cGVvZiAocGFydGl0aW9uS2V5RmllbGQpICE9PSAnc3RyaW5nJykgfHwgIXRoaXMuaGFzX2ZpZWxkKG1vZGVsU2NoZW1hLCBwYXJ0aXRpb25LZXlGaWVsZCkpIHtcbiAgICAgICAgICB0aHJvdyAobmV3IEVycm9yKCdQYXJ0aXRpb24gS2V5IGFycmF5IG11c3QgY29udGFpbiBvbmx5IHZhbGlkIGZpZWxkIG5hbWVzJykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RlbFNjaGVtYS5maWVsZHNbcGFydGl0aW9uS2V5RmllbGRdICYmIG1vZGVsU2NoZW1hLmZpZWxkc1twYXJ0aXRpb25LZXlGaWVsZF0udmlydHVhbCkge1xuICAgICAgICAgIHRocm93IChuZXcgRXJyb3IoXCJQYXJ0aXRpb24gS2V5IGFycmF5IG11c3QgY29udGFpbiBvbmx5IGRiIGZpZWxkIG5hbWVzLCBjYW4ndCBjb250YWluIHZpcnR1YWwgZmllbGQgbmFtZXNcIikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcignUGFydGl0aW9uIEtleSBtdXN0IGJlIGEgZmllbGQgbmFtZSBzdHJpbmcsIG9yIGFycmF5IG9mIGZpZWxkIG5hbWVzJykpO1xuICAgIH1cblxuICAgIG1vZGVsU2NoZW1hLmtleS5mb3JFYWNoKChwcmltYXJ5S2V5RmllbGQsIHByaW1hcnlLZXlJbmRleCkgPT4ge1xuICAgICAgaWYgKHByaW1hcnlLZXlJbmRleCA+IDApIHtcbiAgICAgICAgaWYgKCh0eXBlb2YgKHByaW1hcnlLZXlGaWVsZCkgIT09ICdzdHJpbmcnKSB8fCAhdGhpcy5oYXNfZmllbGQobW9kZWxTY2hlbWEsIHByaW1hcnlLZXlGaWVsZCkpIHtcbiAgICAgICAgICB0aHJvdyAobmV3IEVycm9yKCdDbHVzdGVyaW5nIEtleXMgbXVzdCBiZSB2YWxpZCBmaWVsZCBuYW1lcycpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kZWxTY2hlbWEuZmllbGRzW3ByaW1hcnlLZXlGaWVsZF0gJiYgbW9kZWxTY2hlbWEuZmllbGRzW3ByaW1hcnlLZXlGaWVsZF0udmlydHVhbCkge1xuICAgICAgICAgIHRocm93IChuZXcgRXJyb3IoXCJDbHVzdGVyaW5nIEtleXMgbXVzdCBiZSBkYiBmaWVsZCBuYW1lcywgY2FuJ3QgYmUgdmlydHVhbCBmaWVsZCBuYW1lc1wiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChtb2RlbFNjaGVtYS5jbHVzdGVyaW5nX29yZGVyKSB7XG4gICAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChtb2RlbFNjaGVtYS5jbHVzdGVyaW5nX29yZGVyKSkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKCdjbHVzdGVyaW5nX29yZGVyIG11c3QgYmUgYW4gb2JqZWN0IG9mIGNsdXN0ZXJpbmdfa2V5IGF0dHJpYnV0ZXMnKSk7XG4gICAgICB9XG5cbiAgICAgIF8uZm9yRWFjaChtb2RlbFNjaGVtYS5jbHVzdGVyaW5nX29yZGVyLCAoY2x1c3RlcmluZ09yZGVyLCBjbHVzdGVyaW5nRmllbGROYW1lKSA9PiB7XG4gICAgICAgIGlmICghWydhc2MnLCAnZGVzYyddLmluY2x1ZGVzKGNsdXN0ZXJpbmdPcmRlci50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgIHRocm93IChuZXcgRXJyb3IoJ2NsdXN0ZXJpbmdfb3JkZXIgYXR0cmlidXRlIHZhbHVlcyBjYW4gb25seSBiZSBBU0Mgb3IgREVTQycpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kZWxTY2hlbWEua2V5LmluZGV4T2YoY2x1c3RlcmluZ0ZpZWxkTmFtZSkgPCAxKSB7XG4gICAgICAgICAgdGhyb3cgKG5ldyBFcnJvcignY2x1c3RlcmluZ19vcmRlciBmaWVsZCBhdHRyaWJ1dGVzIG11c3QgYmUgY2x1c3RlcmluZyBrZXlzIG9ubHknKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICB2YWxpZGF0ZV9tYXRlcmlhbGl6ZWRfdmlldyhtb2RlbFNjaGVtYSwgbWF0ZXJpYWxpemVkVmlld09iamVjdCwgbWF0ZXJpYWxpemVkVmlld05hbWUpIHtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0KSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnYXR0cmlidXRlIFwiJXNcIiB1bmRlciBtYXRlcmlhbGl6ZWRfdmlld3MgbXVzdCBiZSBhbiBvYmplY3QnLCBtYXRlcmlhbGl6ZWRWaWV3TmFtZSkpKTtcbiAgICB9XG5cbiAgICBpZiAoIW1hdGVyaWFsaXplZFZpZXdPYmplY3Quc2VsZWN0IHx8ICFtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LmtleSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnbWF0ZXJpYWxpemVkX3ZpZXcgXCIlc1wiIG11c3QgaGF2ZSBcInNlbGVjdFwiIGFuZCBcImtleVwiIGF0dHJpYnV0ZXMnLCBtYXRlcmlhbGl6ZWRWaWV3TmFtZSkpKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNBcnJheShtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LnNlbGVjdCkgfHwgIV8uaXNBcnJheShtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LmtleSkpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ1wic2VsZWN0XCIgYW5kIFwia2V5XCIgYXR0cmlidXRlcyBtdXN0IGJlIGFuIGFycmF5IHVuZGVyIGF0dHJpYnV0ZSAlcyBvZiBtYXRlcmlhbGl6ZWRfdmlld3MnLCBtYXRlcmlhbGl6ZWRWaWV3TmFtZSkpKTtcbiAgICB9XG5cbiAgICBtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LnNlbGVjdC5mb3JFYWNoKChtYXRlcmlhbGl6ZWRWaWV3U2VsZWN0RmllbGQpID0+IHtcbiAgICAgIGlmICgodHlwZW9mIChtYXRlcmlhbGl6ZWRWaWV3U2VsZWN0RmllbGQpICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHx8ICEodGhpcy5oYXNfZmllbGQobW9kZWxTY2hlbWEsIG1hdGVyaWFsaXplZFZpZXdTZWxlY3RGaWVsZClcbiAgICAgICAgICAgIHx8IG1hdGVyaWFsaXplZFZpZXdTZWxlY3RGaWVsZCA9PT0gJyonKSkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KFxuICAgICAgICAgICd0aGUgc2VsZWN0IGF0dHJpYnV0ZSB1bmRlciBtYXRlcmlhbGl6ZWRfdmlldyAlcyBtdXN0IGJlIGFuIGFycmF5IG9mIGZpZWxkIG5hbWUgc3RyaW5ncyBvciBbXCIqXCJdJyxcbiAgICAgICAgICBtYXRlcmlhbGl6ZWRWaWV3TmFtZSxcbiAgICAgICAgKSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kZWxTY2hlbWEuZmllbGRzW21hdGVyaWFsaXplZFZpZXdTZWxlY3RGaWVsZF1cbiAgICAgICAgICAmJiBtb2RlbFNjaGVtYS5maWVsZHNbbWF0ZXJpYWxpemVkVmlld1NlbGVjdEZpZWxkXS52aXJ0dWFsKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoXG4gICAgICAgICAgJ3RoZSBzZWxlY3QgYXR0cmlidXRlIHVuZGVyICVzIG9mIG1hdGVyaWFsaXplZF92aWV3cyBtdXN0IGJlIGFuIGFycmF5IG9mIGRiIGZpZWxkIG5hbWVzLCAnICtcbiAgICAgICAgICAnY2Fubm90IGNvbnRhaW4gYW55IHZpcnR1YWwgZmllbGQgbmFtZScsXG4gICAgICAgICAgbWF0ZXJpYWxpemVkVmlld05hbWUsXG4gICAgICAgICkpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHZhbGlkYXRlIG1hdGVyaWFsaXplZF92aWV3IHByaW1hcnkga2V5XG4gICAgaWYgKHR5cGVvZiAobWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXlbMF0pID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKCF0aGlzLmhhc19maWVsZChtb2RlbFNjaGVtYSwgbWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXlbMF0pKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ21hdGVyaWFsaXplZF92aWV3ICVzOiBwYXJ0aXRpb24ga2V5IHN0cmluZyBtdXN0IG1hdGNoIGEgdmFsaWQgZmllbGQgbmFtZScsIG1hdGVyaWFsaXplZFZpZXdOYW1lKSkpO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1ttYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LmtleVswXV1cbiAgICAgICAgJiYgbW9kZWxTY2hlbWEuZmllbGRzW21hdGVyaWFsaXplZFZpZXdPYmplY3Qua2V5WzBdXS52aXJ0dWFsKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoXG4gICAgICAgICAgJ21hdGVyaWFsaXplZF92aWV3ICVzOiBwYXJ0aXRpb24ga2V5IG11c3QgbWF0Y2ggYSBkYiBmaWVsZCBuYW1lLCBjYW5ub3QgYmUgYSB2aXJ0dWFsIGZpZWxkIG5hbWUnLFxuICAgICAgICAgIG1hdGVyaWFsaXplZFZpZXdOYW1lLFxuICAgICAgICApKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChfLmlzQXJyYXkobWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXlbMF0pKSB7XG4gICAgICBpZiAobWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXlbMF0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ21hdGVyaWFsaXplZF92aWV3ICVzOiBwYXJ0aXRpb24ga2V5IGFycmF5IGNhbm5vdCBiZSBlbXB0eScsIG1hdGVyaWFsaXplZFZpZXdOYW1lKSkpO1xuICAgICAgfVxuICAgICAgbWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXlbMF0uZm9yRWFjaCgobWF0ZXJpYWxpemVkVmlld1BhcnRpdGlvbktleUZpZWxkKSA9PiB7XG4gICAgICAgIGlmICgodHlwZW9mIChtYXRlcmlhbGl6ZWRWaWV3UGFydGl0aW9uS2V5RmllbGQpICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHx8ICF0aGlzLmhhc19maWVsZChtb2RlbFNjaGVtYSwgbWF0ZXJpYWxpemVkVmlld1BhcnRpdGlvbktleUZpZWxkKSkge1xuICAgICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoXG4gICAgICAgICAgICAnbWF0ZXJpYWxpemVkX3ZpZXcgJXM6IHBhcnRpdGlvbiBrZXkgYXJyYXkgbXVzdCBjb250YWluIG9ubHkgdmFsaWQgZmllbGQgbmFtZXMnLFxuICAgICAgICAgICAgbWF0ZXJpYWxpemVkVmlld05hbWUsXG4gICAgICAgICAgKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RlbFNjaGVtYS5maWVsZHNbbWF0ZXJpYWxpemVkVmlld1BhcnRpdGlvbktleUZpZWxkXVxuICAgICAgICAgICYmIG1vZGVsU2NoZW1hLmZpZWxkc1ttYXRlcmlhbGl6ZWRWaWV3UGFydGl0aW9uS2V5RmllbGRdLnZpcnR1YWwpIHtcbiAgICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KFxuICAgICAgICAgICAgJ21hdGVyaWFsaXplZF92aWV3ICVzOiBwYXJ0aXRpb24ga2V5IGFycmF5IG11c3QgY29udGFpbiBvbmx5IGRiIGZpZWxkIG5hbWVzLCAnICtcbiAgICAgICAgICAgICdjYW5ub3QgY29udGFpbiB2aXJ0dWFsIGZpZWxkIG5hbWVzJyxcbiAgICAgICAgICAgIG1hdGVyaWFsaXplZFZpZXdOYW1lLFxuICAgICAgICAgICkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoXG4gICAgICAgICdtYXRlcmlhbGl6ZWRfdmlldyAlczogcGFydGl0aW9uIGtleSBtdXN0IGJlIGEgZmllbGQgbmFtZSBzdHJpbmcsIG9yIGFycmF5IG9mIGZpZWxkIG5hbWVzJyxcbiAgICAgICAgbWF0ZXJpYWxpemVkVmlld05hbWUsXG4gICAgICApKSk7XG4gICAgfVxuXG4gICAgbWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXkuZm9yRWFjaCgobWF0ZXJpYWxpemVkVmlld1ByaW1hcnlLZXlGaWVsZCwgbWF0ZXJpYWxpemVkVmlld1ByaW1hcnlLZXlJbmRleCkgPT4ge1xuICAgICAgaWYgKG1hdGVyaWFsaXplZFZpZXdQcmltYXJ5S2V5SW5kZXggPiAwKSB7XG4gICAgICAgIGlmICgodHlwZW9mIChtYXRlcmlhbGl6ZWRWaWV3UHJpbWFyeUtleUZpZWxkKSAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICB8fCAhdGhpcy5oYXNfZmllbGQobW9kZWxTY2hlbWEsIG1hdGVyaWFsaXplZFZpZXdQcmltYXJ5S2V5RmllbGQpKSB7XG4gICAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnbWF0ZXJpYWxpemVkX3ZpZXcgJXM6IGNsdXN0ZXJpbmcga2V5cyBtdXN0IGJlIHZhbGlkIGZpZWxkIG5hbWVzJywgbWF0ZXJpYWxpemVkVmlld05hbWUpKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1ttYXRlcmlhbGl6ZWRWaWV3UHJpbWFyeUtleUZpZWxkXVxuICAgICAgICAgICYmIG1vZGVsU2NoZW1hLmZpZWxkc1ttYXRlcmlhbGl6ZWRWaWV3UHJpbWFyeUtleUZpZWxkXS52aXJ0dWFsKSB7XG4gICAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdChcbiAgICAgICAgICAgICdtYXRlcmlhbGl6ZWRfdmlldyAlczogY2x1c3RlcmluZyBrZXlzIG11c3QgYmUgZGIgZmllbGQgbmFtZXMsIGNhbm5vdCBjb250YWluIHZpcnR1YWwgZmllbGRzJyxcbiAgICAgICAgICAgIG1hdGVyaWFsaXplZFZpZXdOYW1lLFxuICAgICAgICAgICkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG1hdGVyaWFsaXplZFZpZXdPYmplY3QuY2x1c3RlcmluZ19vcmRlcikge1xuICAgICAgaWYgKCFfLmlzUGxhaW5PYmplY3QobWF0ZXJpYWxpemVkVmlld09iamVjdC5jbHVzdGVyaW5nX29yZGVyKSkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KFxuICAgICAgICAgICdtYXRlcmlhbGl6ZWRfdmlldyAlczogY2x1c3RlcmluZ19vcmRlciBtdXN0IGJlIGFuIG9iamVjdCBvZiBjbHVzdGVyaW5nX2tleSBhdHRyaWJ1dGVzJyxcbiAgICAgICAgICBtYXRlcmlhbGl6ZWRWaWV3TmFtZSxcbiAgICAgICAgKSkpO1xuICAgICAgfVxuXG4gICAgICBfLmZvckVhY2gobWF0ZXJpYWxpemVkVmlld09iamVjdC5jbHVzdGVyaW5nX29yZGVyLCAobXZDbHVzdGVyaW5nT3JkZXIsIG12bHVzdGVyaW5nRmllbGROYW1lKSA9PiB7XG4gICAgICAgIGlmICghWydhc2MnLCAnZGVzYyddLmluY2x1ZGVzKG12Q2x1c3RlcmluZ09yZGVyLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnbWF0ZXJpYWxpemVkX3ZpZXcgJXM6IGNsdXN0ZXJpbmdfb3JkZXIgYXR0cmlidXRlIHZhbHVlcyBjYW4gb25seSBiZSBBU0Mgb3IgREVTQycsIG1hdGVyaWFsaXplZFZpZXdOYW1lKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LmtleS5pbmRleE9mKG12bHVzdGVyaW5nRmllbGROYW1lKSA8IDEpIHtcbiAgICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KFxuICAgICAgICAgICAgJ21hdGVyaWFsaXplZF92aWV3ICVzOiBjbHVzdGVyaW5nX29yZGVyIGZpZWxkIGF0dHJpYnV0ZXMgbXVzdCBiZSBjbHVzdGVyaW5nIGtleXMgb25seScsXG4gICAgICAgICAgICBtYXRlcmlhbGl6ZWRWaWV3TmFtZSxcbiAgICAgICAgICApKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICB2YWxpZGF0ZV9pbmRleChtb2RlbFNjaGVtYSwgaW5kZXhEZWYpIHtcbiAgICBpZiAodHlwZW9mIGluZGV4RGVmICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcignaW5kZXhlcyBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXhOYW1lTGlzdCA9IGluZGV4RGVmLnJlcGxhY2UoL1tcIlxcc10vZywgJycpLnNwbGl0KC9bKCldL2cpO1xuICAgIGlmIChpbmRleE5hbWVMaXN0Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGluZGV4TmFtZUxpc3RbMF0gPSBpbmRleE5hbWVMaXN0WzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoIVsnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmdWxsJ10uaW5jbHVkZXMoaW5kZXhOYW1lTGlzdFswXSkpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnaW5kZXggXCIlc1wiIGlzIG5vdCBkZWZpbmVkIHByb3Blcmx5JywgaW5kZXhEZWYpKSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaGFzX2ZpZWxkKG1vZGVsU2NoZW1hLCBpbmRleE5hbWVMaXN0WzFdKSkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdcIiVzXCIgaXMgbm90IGEgdmFsaWQgZmllbGQgbmFtZSwgaW5kZXhlcyBtdXN0IGJlIGRlZmluZWQgb24gZmllbGQgbmFtZXMnLCBpbmRleE5hbWVMaXN0WzFdKSkpO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1tpbmRleE5hbWVMaXN0WzFdXSAmJiBtb2RlbFNjaGVtYS5maWVsZHNbaW5kZXhOYW1lTGlzdFsxXV0udmlydHVhbCkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKFwiaW5kZXhlcyBtdXN0IGJlIGFuIGFycmF5IG9mIGRiIGZpZWxkIG5hbWVzLCBjYW4ndCBjb250YWluIHZpcnR1YWwgZmllbGRzXCIpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLmhhc19maWVsZChtb2RlbFNjaGVtYSwgaW5kZXhOYW1lTGlzdFswXSkpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnXCIlc1wiIGlzIG5vdCBhIHZhbGlkIGZpZWxkLCBpbmRleGVzIG11c3QgYmUgZGVmaW5lZCBvbiBmaWVsZCBuYW1lcycsIGluZGV4TmFtZUxpc3RbMF0pKSk7XG4gICAgICB9XG4gICAgICBpZiAobW9kZWxTY2hlbWEuZmllbGRzW2luZGV4TmFtZUxpc3RbMF1dICYmIG1vZGVsU2NoZW1hLmZpZWxkc1tpbmRleE5hbWVMaXN0WzBdXS52aXJ0dWFsKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IoXCJpbmRleGVzIG11c3QgYmUgYW4gYXJyYXkgb2YgZGIgZmllbGQgbmFtZXMsIGNhbid0IGNvbnRhaW4gdmlydHVhbCBmaWVsZHNcIikpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB2YWxpZGF0ZV9jdXN0b21faW5kZXgobW9kZWxTY2hlbWEsIGN1c3RvbUluZGV4KSB7XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY3VzdG9tSW5kZXgpKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKCdjdXN0b21faW5kZXggbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCBwcm9wZXIgaW5kZXhpbmcgYXR0cmlidXRlcycpKTtcbiAgICB9XG4gICAgaWYgKCh0eXBlb2YgKGN1c3RvbUluZGV4Lm9uKSAhPT0gJ3N0cmluZycpIHx8ICF0aGlzLmhhc19maWVsZChtb2RlbFNjaGVtYSwgY3VzdG9tSW5kZXgub24pKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKFwiY3VzdG9tX2luZGV4IG11c3QgaGF2ZSBhbiAnb24nIGF0dHJpYnV0ZSB3aXRoIHN0cmluZyB2YWx1ZSBhbmQgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGZpZWxkIG5hbWVcIikpO1xuICAgIH1cbiAgICBpZiAobW9kZWxTY2hlbWEuZmllbGRzW2N1c3RvbUluZGV4Lm9uXSAmJiBtb2RlbFNjaGVtYS5maWVsZHNbY3VzdG9tSW5kZXgub25dLnZpcnR1YWwpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IoXCJjdXN0b21faW5kZXggJ29uJyBhdHRyaWJ1dGUgbXVzdCBiZSBhIGRiIGZpZWxkIG5hbWUsIGNhbid0IGNvbnRhaW4gdmlydHVhbCBmaWVsZHNcIikpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIChjdXN0b21JbmRleC51c2luZykgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKFwiY3VzdG9tX2luZGV4IG11c3QgaGF2ZSBhICd1c2luZycgYXR0cmlidXRlIHdpdGggc3RyaW5nIHZhbHVlXCIpKTtcbiAgICB9XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY3VzdG9tSW5kZXgub3B0aW9ucykpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IoJ2N1c3RvbV9pbmRleCBtdXN0IGhhdmUgYW4gXCJvcHRpb25zXCIgYXR0cmlidXRlIGFuZCBpdCBtdXN0IGJlIGFuIG9iamVjdCwgJyArXG4gICAgICAgICdwYXNzIGJsYW5rIHt9IG9iamVjdCBpZiBubyBvcHRpb25zIGFyZSByZXF1aXJlZCcpKTtcbiAgICB9XG4gIH0sXG5cbiAgdmFsaWRhdGVfbW9kZWxfc2NoZW1hKG1vZGVsU2NoZW1hKSB7XG4gICAgaWYgKCFtb2RlbFNjaGVtYSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcignQSBzY2hlbWEgbXVzdCBiZSBzcGVjaWZpZWQnKSk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QobW9kZWxTY2hlbWEuZmllbGRzKSB8fCBPYmplY3Qua2V5cyhtb2RlbFNjaGVtYS5maWVsZHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcignU2NoZW1hIG11c3QgY29udGFpbiBhIG5vbi1lbXB0eSBcImZpZWxkc1wiIG1hcCBvYmplY3QnKSk7XG4gICAgfVxuXG4gICAgaWYgKCFtb2RlbFNjaGVtYS5rZXkgfHwgIV8uaXNBcnJheShtb2RlbFNjaGVtYS5rZXkpKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKCdTY2hlbWEgbXVzdCBjb250YWluIFwia2V5XCIgaW4gdGhlIGZvcm06IFsgW3BhcnRpdGlvbmtleTEsIC4uLl0sIGNsdXN0ZXJpbmdrZXkxLCAuLi5dJykpO1xuICAgIH1cblxuICAgIF8uZm9yRWFjaChtb2RlbFNjaGVtYS5maWVsZHMsIChmaWVsZE9iamVjdCwgZmllbGROYW1lKSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlX2ZpZWxkKG1vZGVsU2NoZW1hLCBmaWVsZE9iamVjdCwgZmllbGROYW1lKTtcbiAgICB9KTtcblxuICAgIHRoaXMudmFsaWRhdGVfcHJpbWFyeV9rZXkobW9kZWxTY2hlbWEpO1xuXG4gICAgaWYgKG1vZGVsU2NoZW1hLm1hdGVyaWFsaXplZF92aWV3cykge1xuICAgICAgaWYgKCFfLmlzUGxhaW5PYmplY3QobW9kZWxTY2hlbWEubWF0ZXJpYWxpemVkX3ZpZXdzKSkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKCdtYXRlcmlhbGl6ZWRfdmlld3MgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCB2aWV3IG5hbWVzIGFzIGF0dHJpYnV0ZXMnKSk7XG4gICAgICB9XG4gICAgICBfLmZvckVhY2gobW9kZWxTY2hlbWEubWF0ZXJpYWxpemVkX3ZpZXdzLCAobWF0ZXJpYWxpemVkVmlld09iamVjdCwgbWF0ZXJpYWxpemVkVmlld05hbWUpID0+IHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZV9tYXRlcmlhbGl6ZWRfdmlldyhtb2RlbFNjaGVtYSwgbWF0ZXJpYWxpemVkVmlld09iamVjdCwgbWF0ZXJpYWxpemVkVmlld05hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGVsU2NoZW1hLmluZGV4ZXMpIHtcbiAgICAgIGlmICghXy5pc0FycmF5KG1vZGVsU2NoZW1hLmluZGV4ZXMpKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IoJ2luZGV4ZXMgbXVzdCBiZSBhbiBhcnJheSBvZiBmaWVsZCBuYW1lIHN0cmluZ3MnKSk7XG4gICAgICB9XG5cbiAgICAgIG1vZGVsU2NoZW1hLmluZGV4ZXMuZm9yRWFjaCgoaW5kZXhEZWYpID0+IHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZV9pbmRleChtb2RlbFNjaGVtYSwgaW5kZXhEZWYpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGVsU2NoZW1hLmN1c3RvbV9pbmRleCAmJiBtb2RlbFNjaGVtYS5jdXN0b21faW5kZXhlcykge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcignYm90aCBjdXN0b21faW5kZXggYW5kIGN1c3RvbV9pbmRleGVzIGFyZSBkZWZpbmVkIGluIHNjaGVtYSwgb25seSBvbmUgb2YgdGhlbSBzaG91bGQgYmUgZGVmaW5lZCcpKTtcbiAgICB9XG5cbiAgICBpZiAobW9kZWxTY2hlbWEuY3VzdG9tX2luZGV4KSB7XG4gICAgICB0aGlzLnZhbGlkYXRlX2N1c3RvbV9pbmRleChtb2RlbFNjaGVtYSwgbW9kZWxTY2hlbWEuY3VzdG9tX2luZGV4KTtcbiAgICB9XG5cbiAgICBpZiAobW9kZWxTY2hlbWEuY3VzdG9tX2luZGV4ZXMpIHtcbiAgICAgIGlmICghXy5pc0FycmF5KG1vZGVsU2NoZW1hLmN1c3RvbV9pbmRleGVzKSkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKCdjdXN0b21faW5kZXhlcyBtdXN0IGJlIGFuIGFycmF5IHdpdGggb2JqZWN0cyB3aXRoIHByb3BlciBpbmRleGluZyBhdHRyaWJ1dGVzJykpO1xuICAgICAgfVxuICAgICAgbW9kZWxTY2hlbWEuY3VzdG9tX2luZGV4ZXMuZm9yRWFjaCgoY3VzdG9tSW5kZXgpID0+IHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZV9jdXN0b21faW5kZXgobW9kZWxTY2hlbWEsIGN1c3RvbUluZGV4KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICBmb3JtYXRfdmFsaWRhdGlvbl9ydWxlKHJ1bGUsIGZpZWxkbmFtZSkge1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHJ1bGUpKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdWYWxpZGF0aW9uIHJ1bGUgZm9yIFwiJXNcIiBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JywgZmllbGRuYW1lKSkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJ1bGUudmFsaWRhdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdSdWxlIHZhbGlkYXRvciBmb3IgXCIlc1wiIG11c3QgYmUgYSB2YWxpZCBmdW5jdGlvbicsIGZpZWxkbmFtZSkpKTtcbiAgICB9XG4gICAgaWYgKCFydWxlLm1lc3NhZ2UpIHtcbiAgICAgIHJ1bGUubWVzc2FnZSA9IHRoaXMuZ2V0X2dlbmVyaWNfdmFsaWRhdGlvbl9tZXNzYWdlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJ1bGUubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJ1bGUubWVzc2FnZSA9IGZ1bmN0aW9uIGYxKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHV0aWwuZm9ybWF0KG1lc3NhZ2UpO1xuICAgICAgfS5iaW5kKG51bGwsIHJ1bGUubWVzc2FnZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcnVsZS5tZXNzYWdlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdJbnZhbGlkIHZhbGlkYXRvciBtZXNzYWdlIGZvciBcIiVzXCIsIG11c3QgYmUgc3RyaW5nIG9yIGEgZnVuY3Rpb24nLCBmaWVsZG5hbWUpKSk7XG4gICAgfVxuICAgIHJldHVybiBydWxlO1xuICB9LFxuXG4gIGdldF9nZW5lcmljX3ZhbGlkYXRpb25fbWVzc2FnZSh2YWx1ZSwgcHJvcE5hbWUsIGZpZWxkdHlwZSkge1xuICAgIHJldHVybiB1dGlsLmZvcm1hdCgnSW52YWxpZCBWYWx1ZTogXCIlc1wiIGZvciBGaWVsZDogJXMgKFR5cGU6ICVzKScsIHZhbHVlLCBwcm9wTmFtZSwgZmllbGR0eXBlKTtcbiAgfSxcblxuICBnZXRfdmFsaWRhdGlvbl9tZXNzYWdlKHZhbGlkYXRvcnMsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgKF8uaXNQbGFpbk9iamVjdCh2YWx1ZSkgJiYgdmFsdWUuJGRiX2Z1bmN0aW9uKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgdiA9IDA7IHYgPCB2YWxpZGF0b3JzLmxlbmd0aDsgdisrKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRvcnNbdl0udmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmICghdmFsaWRhdG9yc1t2XS52YWxpZGF0b3IodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbGlkYXRvcnNbdl0ubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcblxuICBnZXRfdmFsaWRhdG9ycyhtb2RlbFNjaGVtYSwgZmllbGRuYW1lKSB7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IFtdO1xuICAgIGNvbnN0IGZpZWxkdHlwZSA9IHRoaXMuZ2V0X2ZpZWxkX3R5cGUobW9kZWxTY2hlbWEsIGZpZWxkbmFtZSk7XG4gICAgY29uc3QgdHlwZUZpZWxkVmFsaWRhdG9yID0gZGF0YXR5cGVzLmdlbmVyaWNfdHlwZV92YWxpZGF0b3IoZmllbGR0eXBlKTtcblxuICAgIGlmICh0eXBlRmllbGRWYWxpZGF0b3IpIHtcbiAgICAgIHZhbGlkYXRvcnMucHVzaCh0eXBlRmllbGRWYWxpZGF0b3IpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkID0gbW9kZWxTY2hlbWEuZmllbGRzW2ZpZWxkbmFtZV07XG4gICAgaWYgKHR5cGVvZiBmaWVsZC5ydWxlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiBmaWVsZC5ydWxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZpZWxkLnJ1bGUgPSB7XG4gICAgICAgICAgdmFsaWRhdG9yOiBmaWVsZC5ydWxlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuZ2V0X2dlbmVyaWNfdmFsaWRhdGlvbl9tZXNzYWdlLFxuICAgICAgICB9O1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goZmllbGQucnVsZSk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQucnVsZS52YWxpZGF0b3JzKSkge1xuICAgICAgICBmaWVsZC5ydWxlLnZhbGlkYXRvcnMuZm9yRWFjaCgoZmllbGRydWxlKSA9PiB7XG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMuZm9ybWF0X3ZhbGlkYXRpb25fcnVsZShmaWVsZHJ1bGUsIGZpZWxkbmFtZSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZmllbGQucnVsZS52YWxpZGF0b3IpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMuZm9ybWF0X3ZhbGlkYXRpb25fcnVsZShmaWVsZC5ydWxlLCBmaWVsZG5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9ycztcbiAgfSxcblxuICBnZXRfZmllbGRfdHlwZShtb2RlbFNjaGVtYSwgZmllbGROYW1lKSB7XG4gICAgY29uc3QgZmllbGRPYmplY3QgPSBtb2RlbFNjaGVtYS5maWVsZHNbZmllbGROYW1lXTtcblxuICAgIGlmICh0eXBlb2YgZmllbGRPYmplY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZmllbGRPYmplY3Q7XG4gICAgfVxuICAgIGlmIChfLmlzUGxhaW5PYmplY3QoZmllbGRPYmplY3QpKSB7XG4gICAgICByZXR1cm4gZmllbGRPYmplY3QudHlwZTtcbiAgICB9XG4gICAgdGhyb3cgKG5ldyBFcnJvcignRmllbGQgdHlwZSBub3QgZGVmaW5lZCBwcm9wZXJseScpKTtcbiAgfSxcblxuICBpc19yZXF1aXJlZF9maWVsZChtb2RlbFNjaGVtYSwgZmllbGROYW1lKSB7XG4gICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLnJ1bGUgJiYgbW9kZWxTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0ucnVsZS5yZXF1aXJlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICBpc19wcmltYXJ5X2tleV9maWVsZChtb2RlbFNjaGVtYSwgZmllbGROYW1lKSB7XG4gICAgaWYgKG1vZGVsU2NoZW1hLmtleS5pbmNsdWRlcyhmaWVsZE5hbWUpIHx8IG1vZGVsU2NoZW1hLmtleVswXS5pbmNsdWRlcyhmaWVsZE5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuXG4gIGlzX2ZpZWxkX2RlZmF1bHRfdmFsdWVfdmFsaWQobW9kZWxTY2hlbWEsIGZpZWxkTmFtZSkge1xuICAgIGlmIChfLmlzUGxhaW5PYmplY3QobW9kZWxTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0pICYmIG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLmRlZmF1bHQpIHtcbiAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QobW9kZWxTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0uZGVmYXVsdClcbiAgICAgICAgICAmJiAhKG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLmRlZmF1bHQuJGRiX2Z1bmN0aW9uKSkge1xuICAgICAgICByZXR1cm4gWydtYXAnLCAnbGlzdCcsICdzZXQnLCAnZnJvemVuJ10uaW5jbHVkZXMobW9kZWxTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0udHlwZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2NoZW1lcjtcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0b3JzL3NjaGVtYS5qcyJdLCJuYW1lcyI6WyJfIiwicmVxdWlyZSIsInV0aWwiLCJkYXRhdHlwZXMiLCJzY2hlbWVyIiwidmFsaWRhdGVfdGFibGVfbmFtZSIsInRhYmxlTmFtZSIsInRlc3QiLCJoYXNfZmllbGQiLCJtb2RlbFNjaGVtYSIsImZpZWxkTmFtZSIsIm9wdGlvbkZpZWxkTmFtZXMiLCJvcHRpb25zIiwidGltZXN0YW1wcyIsInRpbWVzdGFtcE9wdGlvbnMiLCJjcmVhdGVkQXQiLCJ1cGRhdGVkQXQiLCJwdXNoIiwidmVyc2lvbnMiLCJ2ZXJzaW9uT3B0aW9ucyIsImtleSIsImhhcyIsImZpZWxkcyIsImluY2x1ZGVzIiwidmFsaWRhdGVfZmllbGQiLCJmaWVsZE9iamVjdCIsIkVycm9yIiwiZm9ybWF0IiwiZmllbGR0eXBlIiwiZ2V0X2ZpZWxkX3R5cGUiLCJ0eXBlRGVmIiwiaXNfZmllbGRfZGVmYXVsdF92YWx1ZV92YWxpZCIsInZhbGlkYXRlX3ByaW1hcnlfa2V5IiwidmlydHVhbCIsImlzQXJyYXkiLCJsZW5ndGgiLCJmb3JFYWNoIiwicGFydGl0aW9uS2V5RmllbGQiLCJwcmltYXJ5S2V5RmllbGQiLCJwcmltYXJ5S2V5SW5kZXgiLCJjbHVzdGVyaW5nX29yZGVyIiwiaXNQbGFpbk9iamVjdCIsImNsdXN0ZXJpbmdPcmRlciIsImNsdXN0ZXJpbmdGaWVsZE5hbWUiLCJ0b0xvd2VyQ2FzZSIsImluZGV4T2YiLCJ2YWxpZGF0ZV9tYXRlcmlhbGl6ZWRfdmlldyIsIm1hdGVyaWFsaXplZFZpZXdPYmplY3QiLCJtYXRlcmlhbGl6ZWRWaWV3TmFtZSIsInNlbGVjdCIsIm1hdGVyaWFsaXplZFZpZXdTZWxlY3RGaWVsZCIsIm1hdGVyaWFsaXplZFZpZXdQYXJ0aXRpb25LZXlGaWVsZCIsIm1hdGVyaWFsaXplZFZpZXdQcmltYXJ5S2V5RmllbGQiLCJtYXRlcmlhbGl6ZWRWaWV3UHJpbWFyeUtleUluZGV4IiwibXZDbHVzdGVyaW5nT3JkZXIiLCJtdmx1c3RlcmluZ0ZpZWxkTmFtZSIsInZhbGlkYXRlX2luZGV4IiwiaW5kZXhEZWYiLCJpbmRleE5hbWVMaXN0IiwicmVwbGFjZSIsInNwbGl0IiwidmFsaWRhdGVfY3VzdG9tX2luZGV4IiwiY3VzdG9tSW5kZXgiLCJvbiIsInVzaW5nIiwidmFsaWRhdGVfbW9kZWxfc2NoZW1hIiwiT2JqZWN0Iiwia2V5cyIsIm1hdGVyaWFsaXplZF92aWV3cyIsImluZGV4ZXMiLCJjdXN0b21faW5kZXgiLCJjdXN0b21faW5kZXhlcyIsImZvcm1hdF92YWxpZGF0aW9uX3J1bGUiLCJydWxlIiwiZmllbGRuYW1lIiwidmFsaWRhdG9yIiwibWVzc2FnZSIsImdldF9nZW5lcmljX3ZhbGlkYXRpb25fbWVzc2FnZSIsImYxIiwiYmluZCIsInZhbHVlIiwicHJvcE5hbWUiLCJnZXRfdmFsaWRhdGlvbl9tZXNzYWdlIiwidmFsaWRhdG9ycyIsIiRkYl9mdW5jdGlvbiIsInYiLCJnZXRfdmFsaWRhdG9ycyIsInR5cGVGaWVsZFZhbGlkYXRvciIsImdlbmVyaWNfdHlwZV92YWxpZGF0b3IiLCJmaWVsZCIsIkFycmF5IiwiZmllbGRydWxlIiwidHlwZSIsImlzX3JlcXVpcmVkX2ZpZWxkIiwicmVxdWlyZWQiLCJpc19wcmltYXJ5X2tleV9maWVsZCIsImRlZmF1bHQiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQU1BLElBQUlDLFFBQVEsUUFBUixDQUFWO0FBQ0EsSUFBTUMsT0FBT0QsUUFBUSxNQUFSLENBQWI7O0FBRUEsSUFBTUUsWUFBWUYsUUFBUSxhQUFSLENBQWxCOztBQUVBLElBQU1HLFVBQVU7QUFDZEMsc0JBQW9CQyxTQUFwQixFQUErQjtBQUM3QixXQUFRLE9BQU9BLFNBQVAsS0FBcUIsUUFBckIsSUFBaUMsMEJBQTBCQyxJQUExQixDQUErQkQsU0FBL0IsQ0FBekM7QUFDRCxHQUhhO0FBSWRFLFlBQVVDLFdBQVYsRUFBdUJDLFNBQXZCLEVBQWtDO0FB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LCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuY29uc3QgZGF0YXR5cGVzID0gcmVxdWlyZSgnLi9kYXRhdHlwZXMnKTtcblxuY29uc3Qgc2NoZW1lciA9IHtcbiAgdmFsaWRhdGVfdGFibGVfbmFtZSh0YWJsZU5hbWUpIHtcbiAgICByZXR1cm4gKHR5cGVvZiB0YWJsZU5hbWUgPT09ICdzdHJpbmcnICYmIC9eW2EtekEtWl0rW2EtekEtWjAtOV9dKi8udGVzdCh0YWJsZU5hbWUpKTtcbiAgfSxcbiAgaGFzX2ZpZWxkKG1vZGVsU2NoZW1hLCBmaWVsZE5hbWUpIHtcbiAgICBjb25zdCBvcHRpb25GaWVsZE5hbWVzID0gW107XG4gICAgaWYgKG1vZGVsU2NoZW1hLm9wdGlvbnMpIHtcbiAgICAgIGlmIChtb2RlbFNjaGVtYS5vcHRpb25zLnRpbWVzdGFtcHMpIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wT3B0aW9ucyA9IHtcbiAgICAgICAgICBjcmVhdGVkQXQ6IG1vZGVsU2NoZW1hLm9wdGlvbnMudGltZXN0YW1wcy5jcmVhdGVkQXQgfHwgJ2NyZWF0ZWRBdCcsXG4gICAgICAgICAgdXBkYXRlZEF0OiBtb2RlbFNjaGVtYS5vcHRpb25zLnRpbWVzdGFtcHMudXBkYXRlZEF0IHx8ICd1cGRhdGVkQXQnLFxuICAgICAgICB9O1xuICAgICAgICBvcHRpb25GaWVsZE5hbWVzLnB1c2godGltZXN0YW1wT3B0aW9ucy5jcmVhdGVkQXQpO1xuICAgICAgICBvcHRpb25GaWVsZE5hbWVzLnB1c2godGltZXN0YW1wT3B0aW9ucy51cGRhdGVkQXQpO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kZWxTY2hlbWEub3B0aW9ucy52ZXJzaW9ucykge1xuICAgICAgICBjb25zdCB2ZXJzaW9uT3B0aW9ucyA9IHtcbiAgICAgICAgICBrZXk6IG1vZGVsU2NoZW1hLm9wdGlvbnMudmVyc2lvbnMua2V5IHx8ICdfX3YnLFxuICAgICAgICB9O1xuICAgICAgICBvcHRpb25GaWVsZE5hbWVzLnB1c2godmVyc2lvbk9wdGlvbnMua2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF8uaGFzKG1vZGVsU2NoZW1hLmZpZWxkcywgZmllbGROYW1lKSB8fCBvcHRpb25GaWVsZE5hbWVzLmluY2x1ZGVzKGZpZWxkTmFtZSk7XG4gIH0sXG4gIHZhbGlkYXRlX2ZpZWxkKG1vZGVsU2NoZW1hLCBmaWVsZE9iamVjdCwgZmllbGROYW1lKSB7XG4gICAgaWYgKCFmaWVsZE9iamVjdCkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnU2NoZW1hIGZpZWxkIFwiJXNcIiBpcyBub3QgcHJvcGVybHkgZGVmaW5lZCcsIGZpZWxkTmFtZSkpKTtcbiAgICB9XG4gICAgY29uc3QgZmllbGR0eXBlID0gdGhpcy5nZXRfZmllbGRfdHlwZShtb2RlbFNjaGVtYSwgZmllbGROYW1lKTtcbiAgICBpZiAoIV8uaGFzKGRhdGF0eXBlcywgZmllbGR0eXBlKSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnSW52YWxpZCBmaWVsZCB0eXBlIFwiJXNcIiBmb3IgZmllbGQ6ICVzJywgZmllbGR0eXBlLCBmaWVsZE5hbWUpKSk7XG4gICAgfVxuICAgIGlmIChbJ21hcCcsICdsaXN0JywgJ3NldCcsICdmcm96ZW4nXS5pbmNsdWRlcyhmaWVsZHR5cGUpKSB7XG4gICAgICBpZiAoIWZpZWxkT2JqZWN0LnR5cGVEZWYpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnTWlzc2luZyB0eXBlRGVmIGZvciBmaWVsZCB0eXBlIFwiJXNcIiBvbiBmaWVsZDogJXMnLCBmaWVsZHR5cGUsIGZpZWxkTmFtZSkpKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZmllbGRPYmplY3QudHlwZURlZiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnSW52YWxpZCB0eXBlRGVmIGZvciBmaWVsZCB0eXBlIFwiJXNcIiBvbiBmaWVsZDogJXMnLCBmaWVsZHR5cGUsIGZpZWxkTmFtZSkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEodGhpcy5pc19maWVsZF9kZWZhdWx0X3ZhbHVlX3ZhbGlkKG1vZGVsU2NoZW1hLCBmaWVsZE5hbWUpKSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBmaWVsZDogJXMoJXMpJywgZmllbGROYW1lLCBmaWVsZHR5cGUpKSk7XG4gICAgfVxuICB9LFxuXG4gIHZhbGlkYXRlX3ByaW1hcnlfa2V5KG1vZGVsU2NoZW1hKSB7XG4gICAgaWYgKHR5cGVvZiAobW9kZWxTY2hlbWEua2V5WzBdKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICghdGhpcy5oYXNfZmllbGQobW9kZWxTY2hlbWEsIG1vZGVsU2NoZW1hLmtleVswXSkpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcignUGFydGl0aW9uIEtleSBtdXN0IGFsc28gYmUgYSB2YWxpZCBmaWVsZCBuYW1lJykpO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1ttb2RlbFNjaGVtYS5rZXlbMF1dICYmIG1vZGVsU2NoZW1hLmZpZWxkc1ttb2RlbFNjaGVtYS5rZXlbMF1dLnZpcnR1YWwpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcihcIlBhcnRpdGlvbiBLZXkgbXVzdCBhbHNvIGJlIGEgZGIgZmllbGQgbmFtZSwgY2FuJ3QgYmUgYSB2aXJ0dWFsIGZpZWxkIG5hbWVcIikpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXy5pc0FycmF5KG1vZGVsU2NoZW1hLmtleVswXSkpIHtcbiAgICAgIGlmIChtb2RlbFNjaGVtYS5rZXlbMF0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IoXCJQYXJ0aXRpb24gS2V5IGFycmF5IGNhbid0IGJlIGVtcHR5XCIpKTtcbiAgICAgIH1cbiAgICAgIG1vZGVsU2NoZW1hLmtleVswXS5mb3JFYWNoKChwYXJ0aXRpb25LZXlGaWVsZCkgPT4ge1xuICAgICAgICBpZiAoKHR5cGVvZiAocGFydGl0aW9uS2V5RmllbGQpICE9PSAnc3RyaW5nJykgfHwgIXRoaXMuaGFzX2ZpZWxkKG1vZGVsU2NoZW1hLCBwYXJ0aXRpb25LZXlGaWVsZCkpIHtcbiAgICAgICAgICB0aHJvdyAobmV3IEVycm9yKCdQYXJ0aXRpb24gS2V5IGFycmF5IG11c3QgY29udGFpbiBvbmx5IHZhbGlkIGZpZWxkIG5hbWVzJykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RlbFNjaGVtYS5maWVsZHNbcGFydGl0aW9uS2V5RmllbGRdICYmIG1vZGVsU2NoZW1hLmZpZWxkc1twYXJ0aXRpb25LZXlGaWVsZF0udmlydHVhbCkge1xuICAgICAgICAgIHRocm93IChuZXcgRXJyb3IoXCJQYXJ0aXRpb24gS2V5IGFycmF5IG11c3QgY29udGFpbiBvbmx5IGRiIGZpZWxkIG5hbWVzLCBjYW4ndCBjb250YWluIHZpcnR1YWwgZmllbGQgbmFtZXNcIikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcignUGFydGl0aW9uIEtleSBtdXN0IGJlIGEgZmllbGQgbmFtZSBzdHJpbmcsIG9yIGFycmF5IG9mIGZpZWxkIG5hbWVzJykpO1xuICAgIH1cblxuICAgIG1vZGVsU2NoZW1hLmtleS5mb3JFYWNoKChwcmltYXJ5S2V5RmllbGQsIHByaW1hcnlLZXlJbmRleCkgPT4ge1xuICAgICAgaWYgKHByaW1hcnlLZXlJbmRleCA+IDApIHtcbiAgICAgICAgaWYgKCh0eXBlb2YgKHByaW1hcnlLZXlGaWVsZCkgIT09ICdzdHJpbmcnKSB8fCAhdGhpcy5oYXNfZmllbGQobW9kZWxTY2hlbWEsIHByaW1hcnlLZXlGaWVsZCkpIHtcbiAgICAgICAgICB0aHJvdyAobmV3IEVycm9yKCdDbHVzdGVyaW5nIEtleXMgbXVzdCBiZSB2YWxpZCBmaWVsZCBuYW1lcycpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kZWxTY2hlbWEuZmllbGRzW3ByaW1hcnlLZXlGaWVsZF0gJiYgbW9kZWxTY2hlbWEuZmllbGRzW3ByaW1hcnlLZXlGaWVsZF0udmlydHVhbCkge1xuICAgICAgICAgIHRocm93IChuZXcgRXJyb3IoXCJDbHVzdGVyaW5nIEtleXMgbXVzdCBiZSBkYiBmaWVsZCBuYW1lcywgY2FuJ3QgYmUgdmlydHVhbCBmaWVsZCBuYW1lc1wiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChtb2RlbFNjaGVtYS5jbHVzdGVyaW5nX29yZGVyKSB7XG4gICAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChtb2RlbFNjaGVtYS5jbHVzdGVyaW5nX29yZGVyKSkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKCdjbHVzdGVyaW5nX29yZGVyIG11c3QgYmUgYW4gb2JqZWN0IG9mIGNsdXN0ZXJpbmdfa2V5IGF0dHJpYnV0ZXMnKSk7XG4gICAgICB9XG5cbiAgICAgIF8uZm9yRWFjaChtb2RlbFNjaGVtYS5jbHVzdGVyaW5nX29yZGVyLCAoY2x1c3RlcmluZ09yZGVyLCBjbHVzdGVyaW5nRmllbGROYW1lKSA9PiB7XG4gICAgICAgIGlmICghWydhc2MnLCAnZGVzYyddLmluY2x1ZGVzKGNsdXN0ZXJpbmdPcmRlci50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgIHRocm93IChuZXcgRXJyb3IoJ2NsdXN0ZXJpbmdfb3JkZXIgYXR0cmlidXRlIHZhbHVlcyBjYW4gb25seSBiZSBBU0Mgb3IgREVTQycpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kZWxTY2hlbWEua2V5LmluZGV4T2YoY2x1c3RlcmluZ0ZpZWxkTmFtZSkgPCAxKSB7XG4gICAgICAgICAgdGhyb3cgKG5ldyBFcnJvcignY2x1c3RlcmluZ19vcmRlciBmaWVsZCBhdHRyaWJ1dGVzIG11c3QgYmUgY2x1c3RlcmluZyBrZXlzIG9ubHknKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICB2YWxpZGF0ZV9tYXRlcmlhbGl6ZWRfdmlldyhtb2RlbFNjaGVtYSwgbWF0ZXJpYWxpemVkVmlld09iamVjdCwgbWF0ZXJpYWxpemVkVmlld05hbWUpIHtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0KSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnYXR0cmlidXRlIFwiJXNcIiB1bmRlciBtYXRlcmlhbGl6ZWRfdmlld3MgbXVzdCBiZSBhbiBvYmplY3QnLCBtYXRlcmlhbGl6ZWRWaWV3TmFtZSkpKTtcbiAgICB9XG5cbiAgICBpZiAoIW1hdGVyaWFsaXplZFZpZXdPYmplY3Quc2VsZWN0IHx8ICFtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LmtleSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnbWF0ZXJpYWxpemVkX3ZpZXcgXCIlc1wiIG11c3QgaGF2ZSBcInNlbGVjdFwiIGFuZCBcImtleVwiIGF0dHJpYnV0ZXMnLCBtYXRlcmlhbGl6ZWRWaWV3TmFtZSkpKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaXNBcnJheShtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LnNlbGVjdCkgfHwgIV8uaXNBcnJheShtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LmtleSkpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ1wic2VsZWN0XCIgYW5kIFwia2V5XCIgYXR0cmlidXRlcyBtdXN0IGJlIGFuIGFycmF5IHVuZGVyIGF0dHJpYnV0ZSAlcyBvZiBtYXRlcmlhbGl6ZWRfdmlld3MnLCBtYXRlcmlhbGl6ZWRWaWV3TmFtZSkpKTtcbiAgICB9XG5cbiAgICBtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LnNlbGVjdC5mb3JFYWNoKChtYXRlcmlhbGl6ZWRWaWV3U2VsZWN0RmllbGQpID0+IHtcbiAgICAgIGlmICgodHlwZW9mIChtYXRlcmlhbGl6ZWRWaWV3U2VsZWN0RmllbGQpICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHx8ICEodGhpcy5oYXNfZmllbGQobW9kZWxTY2hlbWEsIG1hdGVyaWFsaXplZFZpZXdTZWxlY3RGaWVsZClcbiAgICAgICAgICAgIHx8IG1hdGVyaWFsaXplZFZpZXdTZWxlY3RGaWVsZCA9PT0gJyonKSkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KFxuICAgICAgICAgICd0aGUgc2VsZWN0IGF0dHJpYnV0ZSB1bmRlciBtYXRlcmlhbGl6ZWRfdmlldyAlcyBtdXN0IGJlIGFuIGFycmF5IG9mIGZpZWxkIG5hbWUgc3RyaW5ncyBvciBbXCIqXCJdJyxcbiAgICAgICAgICBtYXRlcmlhbGl6ZWRWaWV3TmFtZSxcbiAgICAgICAgKSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kZWxTY2hlbWEuZmllbGRzW21hdGVyaWFsaXplZFZpZXdTZWxlY3RGaWVsZF1cbiAgICAgICAgICAmJiBtb2RlbFNjaGVtYS5maWVsZHNbbWF0ZXJpYWxpemVkVmlld1NlbGVjdEZpZWxkXS52aXJ0dWFsKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoXG4gICAgICAgICAgJ3RoZSBzZWxlY3QgYXR0cmlidXRlIHVuZGVyICVzIG9mIG1hdGVyaWFsaXplZF92aWV3cyBtdXN0IGJlIGFuIGFycmF5IG9mIGRiIGZpZWxkIG5hbWVzLCAnICtcbiAgICAgICAgICAnY2Fubm90IGNvbnRhaW4gYW55IHZpcnR1YWwgZmllbGQgbmFtZScsXG4gICAgICAgICAgbWF0ZXJpYWxpemVkVmlld05hbWUsXG4gICAgICAgICkpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHZhbGlkYXRlIG1hdGVyaWFsaXplZF92aWV3IHByaW1hcnkga2V5XG4gICAgaWYgKHR5cGVvZiAobWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXlbMF0pID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKCF0aGlzLmhhc19maWVsZChtb2RlbFNjaGVtYSwgbWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXlbMF0pKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ21hdGVyaWFsaXplZF92aWV3ICVzOiBwYXJ0aXRpb24ga2V5IHN0cmluZyBtdXN0IG1hdGNoIGEgdmFsaWQgZmllbGQgbmFtZScsIG1hdGVyaWFsaXplZFZpZXdOYW1lKSkpO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1ttYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LmtleVswXV1cbiAgICAgICAgJiYgbW9kZWxTY2hlbWEuZmllbGRzW21hdGVyaWFsaXplZFZpZXdPYmplY3Qua2V5WzBdXS52aXJ0dWFsKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoXG4gICAgICAgICAgJ21hdGVyaWFsaXplZF92aWV3ICVzOiBwYXJ0aXRpb24ga2V5IG11c3QgbWF0Y2ggYSBkYiBmaWVsZCBuYW1lLCBjYW5ub3QgYmUgYSB2aXJ0dWFsIGZpZWxkIG5hbWUnLFxuICAgICAgICAgIG1hdGVyaWFsaXplZFZpZXdOYW1lLFxuICAgICAgICApKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChfLmlzQXJyYXkobWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXlbMF0pKSB7XG4gICAgICBpZiAobWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXlbMF0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ21hdGVyaWFsaXplZF92aWV3ICVzOiBwYXJ0aXRpb24ga2V5IGFycmF5IGNhbm5vdCBiZSBlbXB0eScsIG1hdGVyaWFsaXplZFZpZXdOYW1lKSkpO1xuICAgICAgfVxuICAgICAgbWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXlbMF0uZm9yRWFjaCgobWF0ZXJpYWxpemVkVmlld1BhcnRpdGlvbktleUZpZWxkKSA9PiB7XG4gICAgICAgIGlmICgodHlwZW9mIChtYXRlcmlhbGl6ZWRWaWV3UGFydGl0aW9uS2V5RmllbGQpICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHx8ICF0aGlzLmhhc19maWVsZChtb2RlbFNjaGVtYSwgbWF0ZXJpYWxpemVkVmlld1BhcnRpdGlvbktleUZpZWxkKSkge1xuICAgICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoXG4gICAgICAgICAgICAnbWF0ZXJpYWxpemVkX3ZpZXcgJXM6IHBhcnRpdGlvbiBrZXkgYXJyYXkgbXVzdCBjb250YWluIG9ubHkgdmFsaWQgZmllbGQgbmFtZXMnLFxuICAgICAgICAgICAgbWF0ZXJpYWxpemVkVmlld05hbWUsXG4gICAgICAgICAgKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RlbFNjaGVtYS5maWVsZHNbbWF0ZXJpYWxpemVkVmlld1BhcnRpdGlvbktleUZpZWxkXVxuICAgICAgICAgICYmIG1vZGVsU2NoZW1hLmZpZWxkc1ttYXRlcmlhbGl6ZWRWaWV3UGFydGl0aW9uS2V5RmllbGRdLnZpcnR1YWwpIHtcbiAgICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KFxuICAgICAgICAgICAgJ21hdGVyaWFsaXplZF92aWV3ICVzOiBwYXJ0aXRpb24ga2V5IGFycmF5IG11c3QgY29udGFpbiBvbmx5IGRiIGZpZWxkIG5hbWVzLCAnICtcbiAgICAgICAgICAgICdjYW5ub3QgY29udGFpbiB2aXJ0dWFsIGZpZWxkIG5hbWVzJyxcbiAgICAgICAgICAgIG1hdGVyaWFsaXplZFZpZXdOYW1lLFxuICAgICAgICAgICkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoXG4gICAgICAgICdtYXRlcmlhbGl6ZWRfdmlldyAlczogcGFydGl0aW9uIGtleSBtdXN0IGJlIGEgZmllbGQgbmFtZSBzdHJpbmcsIG9yIGFycmF5IG9mIGZpZWxkIG5hbWVzJyxcbiAgICAgICAgbWF0ZXJpYWxpemVkVmlld05hbWUsXG4gICAgICApKSk7XG4gICAgfVxuXG4gICAgbWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXkuZm9yRWFjaCgobWF0ZXJpYWxpemVkVmlld1ByaW1hcnlLZXlGaWVsZCwgbWF0ZXJpYWxpemVkVmlld1ByaW1hcnlLZXlJbmRleCkgPT4ge1xuICAgICAgaWYgKG1hdGVyaWFsaXplZFZpZXdQcmltYXJ5S2V5SW5kZXggPiAwKSB7XG4gICAgICAgIGlmICgodHlwZW9mIChtYXRlcmlhbGl6ZWRWaWV3UHJpbWFyeUtleUZpZWxkKSAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICB8fCAhdGhpcy5oYXNfZmllbGQobW9kZWxTY2hlbWEsIG1hdGVyaWFsaXplZFZpZXdQcmltYXJ5S2V5RmllbGQpKSB7XG4gICAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnbWF0ZXJpYWxpemVkX3ZpZXcgJXM6IGNsdXN0ZXJpbmcga2V5cyBtdXN0IGJlIHZhbGlkIGZpZWxkIG5hbWVzJywgbWF0ZXJpYWxpemVkVmlld05hbWUpKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1ttYXRlcmlhbGl6ZWRWaWV3UHJpbWFyeUtleUZpZWxkXVxuICAgICAgICAgICYmIG1vZGVsU2NoZW1hLmZpZWxkc1ttYXRlcmlhbGl6ZWRWaWV3UHJpbWFyeUtleUZpZWxkXS52aXJ0dWFsKSB7XG4gICAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdChcbiAgICAgICAgICAgICdtYXRlcmlhbGl6ZWRfdmlldyAlczogY2x1c3RlcmluZyBrZXlzIG11c3QgYmUgZGIgZmllbGQgbmFtZXMsIGNhbm5vdCBjb250YWluIHZpcnR1YWwgZmllbGRzJyxcbiAgICAgICAgICAgIG1hdGVyaWFsaXplZFZpZXdOYW1lLFxuICAgICAgICAgICkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG1hdGVyaWFsaXplZFZpZXdPYmplY3QuY2x1c3RlcmluZ19vcmRlcikge1xuICAgICAgaWYgKCFfLmlzUGxhaW5PYmplY3QobWF0ZXJpYWxpemVkVmlld09iamVjdC5jbHVzdGVyaW5nX29yZGVyKSkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KFxuICAgICAgICAgICdtYXRlcmlhbGl6ZWRfdmlldyAlczogY2x1c3RlcmluZ19vcmRlciBtdXN0IGJlIGFuIG9iamVjdCBvZiBjbHVzdGVyaW5nX2tleSBhdHRyaWJ1dGVzJyxcbiAgICAgICAgICBtYXRlcmlhbGl6ZWRWaWV3TmFtZSxcbiAgICAgICAgKSkpO1xuICAgICAgfVxuXG4gICAgICBfLmZvckVhY2gobWF0ZXJpYWxpemVkVmlld09iamVjdC5jbHVzdGVyaW5nX29yZGVyLCAobXZDbHVzdGVyaW5nT3JkZXIsIG12bHVzdGVyaW5nRmllbGROYW1lKSA9PiB7XG4gICAgICAgIGlmICghWydhc2MnLCAnZGVzYyddLmluY2x1ZGVzKG12Q2x1c3RlcmluZ09yZGVyLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnbWF0ZXJpYWxpemVkX3ZpZXcgJXM6IGNsdXN0ZXJpbmdfb3JkZXIgYXR0cmlidXRlIHZhbHVlcyBjYW4gb25seSBiZSBBU0Mgb3IgREVTQycsIG1hdGVyaWFsaXplZFZpZXdOYW1lKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LmtleS5pbmRleE9mKG12bHVzdGVyaW5nRmllbGROYW1lKSA8IDEpIHtcbiAgICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KFxuICAgICAgICAgICAgJ21hdGVyaWFsaXplZF92aWV3ICVzOiBjbHVzdGVyaW5nX29yZGVyIGZpZWxkIGF0dHJpYnV0ZXMgbXVzdCBiZSBjbHVzdGVyaW5nIGtleXMgb25seScsXG4gICAgICAgICAgICBtYXRlcmlhbGl6ZWRWaWV3TmFtZSxcbiAgICAgICAgICApKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICB2YWxpZGF0ZV9pbmRleChtb2RlbFNjaGVtYSwgaW5kZXhEZWYpIHtcbiAgICBpZiAodHlwZW9mIGluZGV4RGVmICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcignaW5kZXhlcyBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXhOYW1lTGlzdCA9IGluZGV4RGVmLnJlcGxhY2UoL1tcIlxcc10vZywgJycpLnNwbGl0KC9bKCldL2cpO1xuICAgIGlmIChpbmRleE5hbWVMaXN0Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGluZGV4TmFtZUxpc3RbMF0gPSBpbmRleE5hbWVMaXN0WzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoIVsnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmdWxsJ10uaW5jbHVkZXMoaW5kZXhOYW1lTGlzdFswXSkpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnaW5kZXggXCIlc1wiIGlzIG5vdCBkZWZpbmVkIHByb3Blcmx5JywgaW5kZXhEZWYpKSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaGFzX2ZpZWxkKG1vZGVsU2NoZW1hLCBpbmRleE5hbWVMaXN0WzFdKSkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdcIiVzXCIgaXMgbm90IGEgdmFsaWQgZmllbGQgbmFtZSwgaW5kZXhlcyBtdXN0IGJlIGRlZmluZWQgb24gZmllbGQgbmFtZXMnLCBpbmRleE5hbWVMaXN0WzFdKSkpO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1tpbmRleE5hbWVMaXN0WzFdXSAmJiBtb2RlbFNjaGVtYS5maWVsZHNbaW5kZXhOYW1lTGlzdFsxXV0udmlydHVhbCkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKFwiaW5kZXhlcyBtdXN0IGJlIGFuIGFycmF5IG9mIGRiIGZpZWxkIG5hbWVzLCBjYW4ndCBjb250YWluIHZpcnR1YWwgZmllbGRzXCIpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLmhhc19maWVsZChtb2RlbFNjaGVtYSwgaW5kZXhOYW1lTGlzdFswXSkpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnXCIlc1wiIGlzIG5vdCBhIHZhbGlkIGZpZWxkLCBpbmRleGVzIG11c3QgYmUgZGVmaW5lZCBvbiBmaWVsZCBuYW1lcycsIGluZGV4TmFtZUxpc3RbMF0pKSk7XG4gICAgICB9XG4gICAgICBpZiAobW9kZWxTY2hlbWEuZmllbGRzW2luZGV4TmFtZUxpc3RbMF1dICYmIG1vZGVsU2NoZW1hLmZpZWxkc1tpbmRleE5hbWVMaXN0WzBdXS52aXJ0dWFsKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IoXCJpbmRleGVzIG11c3QgYmUgYW4gYXJyYXkgb2YgZGIgZmllbGQgbmFtZXMsIGNhbid0IGNvbnRhaW4gdmlydHVhbCBmaWVsZHNcIikpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB2YWxpZGF0ZV9jdXN0b21faW5kZXgobW9kZWxTY2hlbWEsIGN1c3RvbUluZGV4KSB7XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY3VzdG9tSW5kZXgpKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKCdjdXN0b21faW5kZXggbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCBwcm9wZXIgaW5kZXhpbmcgYXR0cmlidXRlcycpKTtcbiAgICB9XG4gICAgaWYgKCh0eXBlb2YgKGN1c3RvbUluZGV4Lm9uKSAhPT0gJ3N0cmluZycpIHx8ICF0aGlzLmhhc19maWVsZChtb2RlbFNjaGVtYSwgY3VzdG9tSW5kZXgub24pKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKFwiY3VzdG9tX2luZGV4IG11c3QgaGF2ZSBhbiAnb24nIGF0dHJpYnV0ZSB3aXRoIHN0cmluZyB2YWx1ZSBhbmQgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGZpZWxkIG5hbWVcIikpO1xuICAgIH1cbiAgICBpZiAobW9kZWxTY2hlbWEuZmllbGRzW2N1c3RvbUluZGV4Lm9uXSAmJiBtb2RlbFNjaGVtYS5maWVsZHNbY3VzdG9tSW5kZXgub25dLnZpcnR1YWwpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IoXCJjdXN0b21faW5kZXggJ29uJyBhdHRyaWJ1dGUgbXVzdCBiZSBhIGRiIGZpZWxkIG5hbWUsIGNhbid0IGNvbnRhaW4gdmlydHVhbCBmaWVsZHNcIikpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIChjdXN0b21JbmRleC51c2luZykgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKFwiY3VzdG9tX2luZGV4IG11c3QgaGF2ZSBhICd1c2luZycgYXR0cmlidXRlIHdpdGggc3RyaW5nIHZhbHVlXCIpKTtcbiAgICB9XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY3VzdG9tSW5kZXgub3B0aW9ucykpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IoJ2N1c3RvbV9pbmRleCBtdXN0IGhhdmUgYW4gXCJvcHRpb25zXCIgYXR0cmlidXRlIGFuZCBpdCBtdXN0IGJlIGFuIG9iamVjdCwgJyArXG4gICAgICAgICdwYXNzIGJsYW5rIHt9IG9iamVjdCBpZiBubyBvcHRpb25zIGFyZSByZXF1aXJlZCcpKTtcbiAgICB9XG4gIH0sXG5cbiAgdmFsaWRhdGVfbW9kZWxfc2NoZW1hKG1vZGVsU2NoZW1hKSB7XG4gICAgaWYgKCFtb2RlbFNjaGVtYSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcignQSBzY2hlbWEgbXVzdCBiZSBzcGVjaWZpZWQnKSk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QobW9kZWxTY2hlbWEuZmllbGRzKSB8fCBPYmplY3Qua2V5cyhtb2RlbFNjaGVtYS5maWVsZHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcignU2NoZW1hIG11c3QgY29udGFpbiBhIG5vbi1lbXB0eSBcImZpZWxkc1wiIG1hcCBvYmplY3QnKSk7XG4gICAgfVxuXG4gICAgaWYgKCFtb2RlbFNjaGVtYS5rZXkgfHwgIV8uaXNBcnJheShtb2RlbFNjaGVtYS5rZXkpKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKCdTY2hlbWEgbXVzdCBjb250YWluIFwia2V5XCIgaW4gdGhlIGZvcm06IFsgW3BhcnRpdGlvbmtleTEsIC4uLl0sIGNsdXN0ZXJpbmdrZXkxLCAuLi5dJykpO1xuICAgIH1cblxuICAgIF8uZm9yRWFjaChtb2RlbFNjaGVtYS5maWVsZHMsIChmaWVsZE9iamVjdCwgZmllbGROYW1lKSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlX2ZpZWxkKG1vZGVsU2NoZW1hLCBmaWVsZE9iamVjdCwgZmllbGROYW1lKTtcbiAgICB9KTtcblxuICAgIHRoaXMudmFsaWRhdGVfcHJpbWFyeV9rZXkobW9kZWxTY2hlbWEpO1xuXG4gICAgaWYgKG1vZGVsU2NoZW1hLm1hdGVyaWFsaXplZF92aWV3cykge1xuICAgICAgaWYgKCFfLmlzUGxhaW5PYmplY3QobW9kZWxTY2hlbWEubWF0ZXJpYWxpemVkX3ZpZXdzKSkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKCdtYXRlcmlhbGl6ZWRfdmlld3MgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCB2aWV3IG5hbWVzIGFzIGF0dHJpYnV0ZXMnKSk7XG4gICAgICB9XG4gICAgICBfLmZvckVhY2gobW9kZWxTY2hlbWEubWF0ZXJpYWxpemVkX3ZpZXdzLCAobWF0ZXJpYWxpemVkVmlld09iamVjdCwgbWF0ZXJpYWxpemVkVmlld05hbWUpID0+IHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZV9tYXRlcmlhbGl6ZWRfdmlldyhtb2RlbFNjaGVtYSwgbWF0ZXJpYWxpemVkVmlld09iamVjdCwgbWF0ZXJpYWxpemVkVmlld05hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGVsU2NoZW1hLmluZGV4ZXMpIHtcbiAgICAgIGlmICghXy5pc0FycmF5KG1vZGVsU2NoZW1hLmluZGV4ZXMpKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IoJ2luZGV4ZXMgbXVzdCBiZSBhbiBhcnJheSBvZiBmaWVsZCBuYW1lIHN0cmluZ3MnKSk7XG4gICAgICB9XG5cbiAgICAgIG1vZGVsU2NoZW1hLmluZGV4ZXMuZm9yRWFjaCgoaW5kZXhEZWYpID0+IHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZV9pbmRleChtb2RlbFNjaGVtYSwgaW5kZXhEZWYpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGVsU2NoZW1hLmN1c3RvbV9pbmRleCAmJiBtb2RlbFNjaGVtYS5jdXN0b21faW5kZXhlcykge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcignYm90aCBjdXN0b21faW5kZXggYW5kIGN1c3RvbV9pbmRleGVzIGFyZSBkZWZpbmVkIGluIHNjaGVtYSwgb25seSBvbmUgb2YgdGhlbSBzaG91bGQgYmUgZGVmaW5lZCcpKTtcbiAgICB9XG5cbiAgICBpZiAobW9kZWxTY2hlbWEuY3VzdG9tX2luZGV4KSB7XG4gICAgICB0aGlzLnZhbGlkYXRlX2N1c3RvbV9pbmRleChtb2RlbFNjaGVtYSwgbW9kZWxTY2hlbWEuY3VzdG9tX2luZGV4KTtcbiAgICB9XG5cbiAgICBpZiAobW9kZWxTY2hlbWEuY3VzdG9tX2luZGV4ZXMpIHtcbiAgICAgIGlmICghXy5pc0FycmF5KG1vZGVsU2NoZW1hLmN1c3RvbV9pbmRleGVzKSkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKCdjdXN0b21faW5kZXhlcyBtdXN0IGJlIGFuIGFycmF5IHdpdGggb2JqZWN0cyB3aXRoIHByb3BlciBpbmRleGluZyBhdHRyaWJ1dGVzJykpO1xuICAgICAgfVxuICAgICAgbW9kZWxTY2hlbWEuY3VzdG9tX2luZGV4ZXMuZm9yRWFjaCgoY3VzdG9tSW5kZXgpID0+IHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZV9jdXN0b21faW5kZXgobW9kZWxTY2hlbWEsIGN1c3RvbUluZGV4KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICBmb3JtYXRfdmFsaWRhdGlvbl9ydWxlKHJ1bGUsIGZpZWxkbmFtZSkge1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHJ1bGUpKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdWYWxpZGF0aW9uIHJ1bGUgZm9yIFwiJXNcIiBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JywgZmllbGRuYW1lKSkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJ1bGUudmFsaWRhdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdSdWxlIHZhbGlkYXRvciBmb3IgXCIlc1wiIG11c3QgYmUgYSB2YWxpZCBmdW5jdGlvbicsIGZpZWxkbmFtZSkpKTtcbiAgICB9XG4gICAgaWYgKCFydWxlLm1lc3NhZ2UpIHtcbiAgICAgIHJ1bGUubWVzc2FnZSA9IHRoaXMuZ2V0X2dlbmVyaWNfdmFsaWRhdGlvbl9tZXNzYWdlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJ1bGUubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJ1bGUubWVzc2FnZSA9IGZ1bmN0aW9uIGYxKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHV0aWwuZm9ybWF0KG1lc3NhZ2UpO1xuICAgICAgfS5iaW5kKG51bGwsIHJ1bGUubWVzc2FnZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcnVsZS5tZXNzYWdlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdJbnZhbGlkIHZhbGlkYXRvciBtZXNzYWdlIGZvciBcIiVzXCIsIG11c3QgYmUgc3RyaW5nIG9yIGEgZnVuY3Rpb24nLCBmaWVsZG5hbWUpKSk7XG4gICAgfVxuICAgIHJldHVybiBydWxlO1xuICB9LFxuXG4gIGdldF9nZW5lcmljX3ZhbGlkYXRpb25fbWVzc2FnZSh2YWx1ZSwgcHJvcE5hbWUsIGZpZWxkdHlwZSkge1xuICAgIHJldHVybiB1dGlsLmZvcm1hdCgnSW52YWxpZCBWYWx1ZTogXCIlc1wiIGZvciBGaWVsZDogJXMgKFR5cGU6ICVzKScsIHZhbHVlLCBwcm9wTmFtZSwgZmllbGR0eXBlKTtcbiAgfSxcblxuICBnZXRfdmFsaWRhdGlvbl9tZXNzYWdlKHZhbGlkYXRvcnMsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgKF8uaXNQbGFpbk9iamVjdCh2YWx1ZSkgJiYgdmFsdWUuJGRiX2Z1bmN0aW9uKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgdiA9IDA7IHYgPCB2YWxpZGF0b3JzLmxlbmd0aDsgdisrKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRvcnNbdl0udmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmICghdmFsaWRhdG9yc1t2XS52YWxpZGF0b3IodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbGlkYXRvcnNbdl0ubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcblxuICBnZXRfdmFsaWRhdG9ycyhtb2RlbFNjaGVtYSwgZmllbGRuYW1lKSB7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IFtdO1xuICAgIGNvbnN0IGZpZWxkdHlwZSA9IHRoaXMuZ2V0X2ZpZWxkX3R5cGUobW9kZWxTY2hlbWEsIGZpZWxkbmFtZSk7XG4gICAgY29uc3QgdHlwZUZpZWxkVmFsaWRhdG9yID0gZGF0YXR5cGVzLmdlbmVyaWNfdHlwZV92YWxpZGF0b3IoZmllbGR0eXBlKTtcblxuICAgIGlmICh0eXBlRmllbGRWYWxpZGF0b3IpIHtcbiAgICAgIHZhbGlkYXRvcnMucHVzaCh0eXBlRmllbGRWYWxpZGF0b3IpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkID0gbW9kZWxTY2hlbWEuZmllbGRzW2ZpZWxkbmFtZV07XG4gICAgaWYgKHR5cGVvZiBmaWVsZC5ydWxlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiBmaWVsZC5ydWxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZpZWxkLnJ1bGUgPSB7XG4gICAgICAgICAgdmFsaWRhdG9yOiBmaWVsZC5ydWxlLFxuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuZ2V0X2dlbmVyaWNfdmFsaWRhdGlvbl9tZXNzYWdlLFxuICAgICAgICB9O1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goZmllbGQucnVsZSk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQucnVsZS52YWxpZGF0b3JzKSkge1xuICAgICAgICBmaWVsZC5ydWxlLnZhbGlkYXRvcnMuZm9yRWFjaCgoZmllbGRydWxlKSA9PiB7XG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMuZm9ybWF0X3ZhbGlkYXRpb25fcnVsZShmaWVsZHJ1bGUsIGZpZWxkbmFtZSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZmllbGQucnVsZS52YWxpZGF0b3IpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMuZm9ybWF0X3ZhbGlkYXRpb25fcnVsZShmaWVsZC5ydWxlLCBmaWVsZG5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9ycztcbiAgfSxcblxuICBnZXRfZmllbGRfdHlwZShtb2RlbFNjaGVtYSwgZmllbGROYW1lKSB7XG4gICAgY29uc3QgZmllbGRPYmplY3QgPSBtb2RlbFNjaGVtYS5maWVsZHNbZmllbGROYW1lXTtcblxuICAgIGlmICh0eXBlb2YgZmllbGRPYmplY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZmllbGRPYmplY3Q7XG4gICAgfVxuICAgIGlmIChfLmlzUGxhaW5PYmplY3QoZmllbGRPYmplY3QpKSB7XG4gICAgICByZXR1cm4gZmllbGRPYmplY3QudHlwZTtcbiAgICB9XG4gICAgdGhyb3cgKG5ldyBFcnJvcignRmllbGQgdHlwZSBub3QgZGVmaW5lZCBwcm9wZXJseScpKTtcbiAgfSxcblxuICBpc19yZXF1aXJlZF9maWVsZChtb2RlbFNjaGVtYSwgZmllbGROYW1lKSB7XG4gICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLnJ1bGUgJiYgbW9kZWxTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0ucnVsZS5yZXF1aXJlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICBpc19wcmltYXJ5X2tleV9maWVsZChtb2RlbFNjaGVtYSwgZmllbGROYW1lKSB7XG4gICAgaWYgKG1vZGVsU2NoZW1hLmtleS5pbmNsdWRlcyhmaWVsZE5hbWUpIHx8IG1vZGVsU2NoZW1hLmtleVswXS5pbmNsdWRlcyhmaWVsZE5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuXG4gIGlzX2ZpZWxkX2RlZmF1bHRfdmFsdWVfdmFsaWQobW9kZWxTY2hlbWEsIGZpZWxkTmFtZSkge1xuICAgIGlmIChfLmlzUGxhaW5PYmplY3QobW9kZWxTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0pICYmIG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLmRlZmF1bHQpIHtcbiAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QobW9kZWxTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0uZGVmYXVsdClcbiAgICAgICAgICAmJiAhKG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLmRlZmF1bHQuJGRiX2Z1bmN0aW9uKSkge1xuICAgICAgICByZXR1cm4gWydtYXAnLCAnbGlzdCcsICdzZXQnLCAnZnJvemVuJ10uaW5jbHVkZXMobW9kZWxTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0udHlwZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2NoZW1lcjtcbiJdfQ==
{
"name": "express-cassandra",
"version": "2.2.3",
"version": "2.2.4",
"dependencies": {

@@ -5,0 +5,0 @@ "JSONStream": "^1.3.1",

@@ -58,3 +58,3 @@ [![Build Status](https://travis-ci.org/masumsoft/express-cassandra.svg)](https://travis-ci.org/masumsoft/express-cassandra)

npm install express-cassandra gremlin
npm install express-cassandra gremlin@2.6.0

@@ -61,0 +61,0 @@ For older cassandra 2.x (no longer supported)

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc