velocious 1.0.617 → 1.0.618
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/build/background-jobs/client.js +12 -3
- package/build/background-jobs/socket-request.js +4 -0
- package/build/database/migration/index.js +2 -1
- package/build/database/pool/async-tracked-multi-connection.js +78 -1
- package/build/database/pool/base.js +32 -0
- package/build/database/pool/single-multi-use.js +65 -4
- package/build/src/background-jobs/client.d.ts +4 -1
- package/build/src/background-jobs/client.d.ts.map +1 -1
- package/build/src/background-jobs/client.js +12 -4
- package/build/src/background-jobs/socket-request.d.ts.map +1 -1
- package/build/src/background-jobs/socket-request.js +4 -1
- package/build/src/database/migration/index.d.ts +3 -2
- package/build/src/database/migration/index.d.ts.map +1 -1
- package/build/src/database/migration/index.js +3 -2
- package/build/src/database/pool/async-tracked-multi-connection.d.ts +20 -0
- package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
- package/build/src/database/pool/async-tracked-multi-connection.js +75 -2
- package/build/src/database/pool/base.d.ts +25 -0
- package/build/src/database/pool/base.d.ts.map +1 -1
- package/build/src/database/pool/base.js +30 -1
- package/build/src/database/pool/single-multi-use.d.ts +30 -3
- package/build/src/database/pool/single-multi-use.d.ts.map +1 -1
- package/build/src/database/pool/single-multi-use.js +58 -5
- package/build/src/testing/shared-transaction-connection-coordinator.d.ts +5 -0
- package/build/src/testing/shared-transaction-connection-coordinator.d.ts.map +1 -1
- package/build/src/testing/shared-transaction-connection-coordinator.js +28 -4
- package/build/src/testing/test-runner.d.ts +75 -0
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +201 -10
- package/build/testing/shared-transaction-connection-coordinator.js +29 -3
- package/build/testing/test-runner.js +198 -9
- package/package.json +1 -1
- package/src/background-jobs/client.js +12 -3
- package/src/background-jobs/socket-request.js +4 -0
- package/src/database/migration/index.js +2 -1
- package/src/database/pool/async-tracked-multi-connection.js +78 -1
- package/src/database/pool/base.js +32 -0
- package/src/database/pool/single-multi-use.js +65 -4
- package/src/testing/shared-transaction-connection-coordinator.js +29 -3
- package/src/testing/test-runner.js +198 -9
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// @ts-check
|
|
2
|
+
/** @typedef {import("../table-data/table-column.js").TableColumnArgsType} AddColumnArgsType */
|
|
2
3
|
/**
|
|
3
4
|
* CreateTableIdArgsType type.
|
|
4
5
|
* @typedef {object} CreateTableIdArgsType
|
|
@@ -98,7 +99,7 @@ export default class VelociousDatabaseMigration {
|
|
|
98
99
|
* @param {string} tableName - Table name.
|
|
99
100
|
* @param {string} columnName - Column name.
|
|
100
101
|
* @param {string} columnType - Column type.
|
|
101
|
-
* @param {
|
|
102
|
+
* @param {AddColumnArgsType} [args] - Options object.
|
|
102
103
|
* @returns {Promise<void>} - Resolves when complete.
|
|
103
104
|
*/
|
|
104
105
|
async addColumn(tableName, columnName, columnType, args) {
|
|
@@ -836,4 +837,4 @@ export function dedicatedAuditTableName(modelTableName) {
|
|
|
836
837
|
}
|
|
837
838
|
return `${modelTableName}_audits`;
|
|
838
839
|
}
|
|
839
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvbWlncmF0aW9uL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7Ozs7R0FLRztBQUNIOzs7OztHQUtHO0FBQ0g7OztHQUdHO0FBQ0g7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDM0UsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxhQUFhLE1BQU0sZ0NBQWdDLENBQUE7QUFDMUQsT0FBTyxXQUFXLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxlQUFlLE1BQU0sK0JBQStCLENBQUE7QUFDM0QsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUE7QUFDdkQsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUE7QUFDOUMsT0FBTyxVQUFVLE1BQU0sOEJBQThCLENBQUE7QUFDckQsTUFBTSxtQkFBb0IsU0FBUSxLQUFLO0NBQUc7QUFFMUMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLENBQUE7QUFFNUIsTUFBTSxDQUFDLE9BQU8sT0FBTywwQkFBMEI7SUFDN0M7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsbUJBQW1CO1FBQ3BDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxtQkFBbUIsQ0FBQTtJQUNqRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLHNCQUFzQjtRQUMzQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxrQkFBa0IsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFDO1FBQzdELElBQUksQ0FBQyxrQkFBa0I7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUE7UUFDeEUsSUFBSSxDQUFDLEVB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LE9BQU8sVUFBVSxDQUFBO0lBQ25CLENBQUM7Q0FDRjtBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsY0FBYztJQUNwRCxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxPQUFPLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBQ2hELENBQUM7SUFFRCxPQUFPLEdBQUcsY0FBYyxTQUFTLENBQUE7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKipcbiAqIENyZWF0ZVRhYmxlSWRBcmdzVHlwZSB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gQ3JlYXRlVGFibGVJZEFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBbZGVmYXVsdF0gLSBEZWZhdWx0IHZhbHVlIGZvciB0aGUgSUQgY29sdW1uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0eXBlXSAtIENvbHVtbiB0eXBlIGZvciB0aGUgSUQgY29sdW1uLlxuICovXG4vKipcbiAqIENyZWF0ZVRhYmxlQXJnc1R5cGUgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IENyZWF0ZVRhYmxlQXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lmTm90RXhpc3RzXSAtIFNraXAgY3JlYXRpb24gaWYgdGhlIHRhYmxlIGFscmVhZHkgZXhpc3RzLlxuICogQHByb3BlcnR5IHtDcmVhdGVUYWJsZUlkQXJnc1R5cGUgfCBmYWxzZX0gW2lkXSAtIElEIGNvbHVtbiBvcHRpb25zIG9yIGZhbHNlIHRvIHNraXAgSUQuXG4gKi9cbi8qKlxuICogQ3JlYXRlVGFibGVDYWxsYmFja1R5cGUgdHlwZS5cbiAqIEB0eXBlZGVmIHsodGFibGU6IFRhYmxlRGF0YSkgPT4gdm9pZH0gQ3JlYXRlVGFibGVDYWxsYmFja1R5cGVcbiAqL1xuLyoqXG4gKiBMZWdhY3lMb2NhbERhdGVUaW1lc01pZ3JhdGlvbkFyZ3NUeXBlIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMZWdhY3lMb2NhbERhdGVUaW1lc01pZ3JhdGlvbkFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gW2NvbHVtbnNCeVRhYmxlXSAtIEV4cGxpY2l0IGRhdGV0aW1lIGNvbHVtbnMga2V5ZWQgYnkgdGFibGUgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbGVnYWN5TG9jYWxPZmZzZXRNaW51dGVzXSAtIFVUQy1taW51cy1sb2NhbCBvZmZzZXQgaW4gbWludXRlcyBmb3IgbGVnYWN5IHJvd3MuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbdGFibGVzXSAtIFRhYmxlcyB0byBtaWdyYXRlLiBEZWZhdWx0cyB0byBhbGwgbm9uLWludGVybmFsIHRhYmxlcy5cbiAqL1xuXG5pbXBvcnQgeyBjb252ZXJ0TGVnYWN5RGF0ZVZhbHVlVG9VdGNTdG9yYWdlIH0gZnJvbSBcIi4uL2RhdGV0aW1lLXN0b3JhZ2UuanNcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCBDaGFuZ2VUYWJsZSBmcm9tIFwiLi9jaGFuZ2UtdGFibGUuanNcIlxuaW1wb3J0IENyZWF0ZUluZGV4QmFzZSBmcm9tIFwiLi4vcXVlcnkvY3JlYXRlLWluZGV4LWJhc2UuanNcIlxuaW1wb3J0IFRhYmxlQ29sdW1uIGZyb20gXCIuLi90YWJsZS1kYXRhL3RhYmxlLWNvbHVtbi5qc1wiXG5pbXBvcnQgVGFibGVEYXRhIGZyb20gXCIuLi90YWJsZS1kYXRhL2luZGV4LmpzXCJcbmltcG9ydCBUYWJsZUluZGV4IGZyb20gXCIuLi90YWJsZS1kYXRhL3RhYmxlLWluZGV4LmpzXCJcbmNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuXG5leHBvcnQge05vdEltcGxlbWVudGVkRXJyb3J9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlTWlncmF0aW9uIHtcbiAgLyoqXG4gICAqIFJ1bnMgb24gZGF0YWJhc2VzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBkYXRhYmFzZUlkZW50aWZpZXJzIC0gRGF0YWJhc2UgaWRlbnRpZmllcnMuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHN0YXRpYyBvbkRhdGFiYXNlcyhkYXRhYmFzZUlkZW50aWZpZXJzKSB7XG4gICAgdGhpcy5fZGF0YWJhc2VJZGVudGlmaWVycyA9IGRhdGFiYXNlSWRlbnRpZmllcnNcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBkYXRhYmFzZSBpZGVudGlmaWVycy5cbiAgICogQHJldHVybnMge3N0cmluZ1tdIHwgdW5kZWZpbmVkfSAtIFRoZSBkYXRhYmFzZSBpZGVudGlmaWVycy5cbiAgICovXG4gIHN0YXRpYyBnZXREYXRhYmFzZUlkZW50aWZpZXJzKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhYmFzZUlkZW50aWZpZXJzXG4gIH1cblxuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmRhdGFiYXNlSWRlbnRpZmllciAtIERhdGFiYXNlIGlkZW50aWZpZXIuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGFyZ3MuZGIgLSBEYXRhYmFzZSBjb25uZWN0aW9uLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIGRhdGFiYXNlSWRlbnRpZmllciA9IFwiZGVmYXVsdFwiLCBkYn0pIHtcbiAgICBpZiAoIWRhdGFiYXNlSWRlbnRpZmllcikgdGhyb3cgbmV3IEVycm9yKFwiTm8gZGF0YWJhc2UgaWRlbnRpZmllciBnaXZlblwiKVxuICAgIGlmICghZGIpIHRocm93IG5ldyBFcnJvcihcIk5vICdkYicgZ2l2ZW5cIilcblxuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLl9kYXRhYmFzZUlkZW50aWZpZXIgPSBkYXRhYmFzZUlkZW50aWZpZXJcbiAgICB0aGlzLl9kYiA9IGRiXG4gIH1cblxuICBfZ2V0RGF0YWJhc2VJZGVudGlmaWVyKCkge1xuICAgIGlmICghdGhpcy5fZGF0YWJhc2VJZGVudGlmaWVyKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBkYXRhYmFzZSBpZGVudGlmaWVyIHNldFwiKVxuXG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlSWRlbnRpZmllclxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGRyaXZlci5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSAtIFRoZSBkcml2ZXIuXG4gICAqL1xuICBnZXREcml2ZXIoKSB7IHJldHVybiB0aGlzLl9kYiB9XG4gIGNvbm5lY3Rpb24oKSB7IHJldHVybiB0aGlzLmdldERyaXZlcigpIH1cblxuICBhc3luYyBjaGFuZ2UoKSB7XG4gICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoXCInY2hhbmdlJyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIGFzeW5jIHVwKCkge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKFwiJ2NoYW5nZScgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICBhc3luYyBkb3duKCkge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKFwiJ2NoYW5nZScgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBleGVjdXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3FsIC0gU1FMIHN0cmluZy5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLlF1ZXJ5UmVzdWx0VHlwZT59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgZXhlY3V0ZS5cbiAgICovXG4gIGFzeW5jIGV4ZWN1dGUoc3FsKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdGlvbigpLnF1ZXJ5KHNxbClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGFkZCBjb2x1bW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uTmFtZSAtIENvbHVtbiBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uVHlwZSAtIENvbHVtbiB0eXBlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3RhYmxlLWRhdGEvdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgYWRkQ29sdW1uKHRhYmxlTmFtZSwgY29sdW1uTmFtZSwgY29sdW1uVHlwZSwgYXJncykge1xuICAgIGlmICghY29sdW1uVHlwZSkgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29sdW1uIHR5cGUgZ2l2ZW5cIilcblxuICAgIGNvbnN0IHRhYmxlQ29sdW1uQXJncyA9IE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBjb2x1bW5UeXBlfSwgYXJncylcbiAgICBjb25zdCB0YWJsZURhdGEgPSBuZXcgVGFibGVEYXRhKHRhYmxlTmFtZSlcblxuICAgIHRhYmxlRGF0YS5hZGRDb2x1bW4oY29sdW1uTmFtZSwgdGFibGVDb2x1bW5BcmdzKVxuXG4gICAgY29uc3Qgc3FscyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuYWx0ZXJUYWJsZVNRTHModGFibGVEYXRhKVxuXG4gICAgZm9yIChjb25zdCBzcWwgb2Ygc3Fscykge1xuICAgICAgYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5xdWVyeShzcWwpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcmVtb3ZlIGNvbHVtbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2x1bW5OYW1lIC0gQ29sdW1uIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyByZW1vdmVDb2x1bW4odGFibGVOYW1lLCBjb2x1bW5OYW1lKSB7XG4gICAgY29uc3QgdGFibGVDb2x1bW5BcmdzID0gT2JqZWN0LmFzc2lnbih7ZHJvcENvbHVtbjogdHJ1ZX0pXG4gICAgY29uc3QgdGFibGVEYXRhID0gbmV3IFRhYmxlRGF0YSh0YWJsZU5hbWUpXG5cbiAgICB0YWJsZURhdGEuYWRkQ29sdW1uKGNvbHVtbk5hbWUsIHRhYmxlQ29sdW1uQXJncylcblxuICAgIGNvbnN0IHNxbHMgPSBhd2FpdCB0aGlzLmdldERyaXZlcigpLmFsdGVyVGFibGVTUUxzKHRhYmxlRGF0YSlcblxuICAgIGZvciAoY29uc3Qgc3FsIG9mIHNxbHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkucXVlcnkoc3FsKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRJbmRleEFyZ3NUeXBlIHR5cGUuXG4gICAqIEB0eXBlZGVmIHtvYmplY3R9IEFkZEluZGV4QXJnc1R5cGVcbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbaWZOb3RFeGlzdHNdIC0gU2tpcCBjcmVhdGlvbiBpZiB0aGUgaW5kZXggYWxyZWFkeSBleGlzdHMuXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbmFtZV0gLSBFeHBsaWNpdCBpbmRleCBuYW1lIHRvIHVzZS5cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbdW5pcXVlXSAtIFdoZXRoZXIgdGhlIGluZGV4IHNob3VsZCBiZSB1bmlxdWUuXG4gICAqL1xuICAvKipcbiAgICogUnVucyBhZGQgaW5kZXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEFycmF5PHN0cmluZyB8IGltcG9ydChcIi4uL3RhYmxlLWRhdGEvdGFibGUtY29sdW1uLmpzXCIpLmRlZmF1bHQ+fSBjb2x1bW5zIC0gQ29sdW1uIG5hbWUgb3IgYXJyYXkgb2YgY29sdW1uIG5hbWVzLlxuICAgKiBAcGFyYW0ge0FkZEluZGV4QXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgYWRkSW5kZXgodGFibGVOYW1lLCBjb2x1bW5zLCBhcmdzKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZENvbHVtbnMgPSB0eXBlb2YgY29sdW1ucyA9PT0gXCJzdHJpbmdcIiA/IFtjb2x1bW5zXSA6IGNvbHVtbnNcbiAgICBjb25zdCBjcmVhdGVJbmRleEFyZ3MgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBjb2x1bW5zOiBub3JtYWxpemVkQ29sdW1ucyxcbiAgICAgICAgdGFibGVOYW1lXG4gICAgICB9LFxuICAgICAgYXJnc1xuICAgIClcbiAgICBjb25zdCBzcWxzID0gYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5jcmVhdGVJbmRleFNRTHMoY3JlYXRlSW5kZXhBcmdzKVxuXG4gICAgZm9yIChjb25zdCBzcWwgb2Ygc3Fscykge1xuICAgICAgYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5xdWVyeShzcWwpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZUluZGV4QXJnc1R5cGUgdHlwZS5cbiAgICogQHR5cGVkZWYge29iamVjdH0gUmVtb3ZlSW5kZXhBcmdzVHlwZVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIC0gRXhwbGljaXQgaW5kZXggbmFtZSB0byByZW1vdmUuXG4gICAqL1xuICAvKipcbiAgICogUnVucyByZW1vdmUgaW5kZXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEFycmF5PHN0cmluZyB8IGltcG9ydChcIi4uL3RhYmxlLWRhdGEvdGFibGUtY29sdW1uLmpzXCIpLmRlZmF1bHQ+fSBuYW1lT3JDb2x1bW5zIC0gSW5kZXggbmFtZSBvciBjb2x1bW5zIHdob3NlIGRlZmF1bHQgYWRkSW5kZXggbmFtZSBzaG91bGQgYmUgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHtSZW1vdmVJbmRleEFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHJlbW92ZUluZGV4KHRhYmxlTmFtZSwgbmFtZU9yQ29sdW1ucywgYXJncyA9IHt9KSB7XG4gICAgY29uc3Qge25hbWUsIC4uLnJlc3RBcmdzfSA9IGFyZ3NcblxuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBjb25zdCByZW1vdmVJbmRleE5hbWUgPSBuYW1lIHx8IHRoaXMuX3JlbW92ZUluZGV4TmFtZSh0YWJsZU5hbWUsIG5hbWVPckNvbHVtbnMpXG4gICAgY29uc3Qgc3FscyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkucmVtb3ZlSW5kZXhTUUxzKHtuYW1lOiByZW1vdmVJbmRleE5hbWUsIHRhYmxlTmFtZX0pXG5cbiAgICBmb3IgKGNvbnN0IHNxbCBvZiBzcWxzKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldERyaXZlcigpLnF1ZXJ5KHNxbClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyByZW1vdmUgaW5kZXggbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgQXJyYXk8c3RyaW5nIHwgaW1wb3J0KFwiLi4vdGFibGUtZGF0YS90YWJsZS1jb2x1bW4uanNcIikuZGVmYXVsdD59IG5hbWVPckNvbHVtbnMgLSBJbmRleCBuYW1lIG9yIGNvbHVtbnMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGluZGV4IG5hbWUuXG4gICAqL1xuICBfcmVtb3ZlSW5kZXhOYW1lKHRhYmxlTmFtZSwgbmFtZU9yQ29sdW1ucykge1xuICAgIGlmICh0eXBlb2YgbmFtZU9yQ29sdW1ucyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIG5hbWVPckNvbHVtbnNcblxuICAgIGNvbnN0IGNyZWF0ZUluZGV4ID0gbmV3IENyZWF0ZUluZGV4QmFzZSh7XG4gICAgICBjb2x1bW5zOiBuYW1lT3JDb2x1bW5zLFxuICAgICAgZHJpdmVyOiB0aGlzLmdldERyaXZlcigpLFxuICAgICAgdGFibGVOYW1lXG4gICAgfSlcblxuICAgIHJldHVybiBjcmVhdGVJbmRleC5nZW5lcmF0ZUluZGV4TmFtZSgpXG4gIH1cblxuICAvKipcbiAgICogQWRkRm9yZWlnbktleUFyZ3NUeXBlIHR5cGUuXG4gICAqIEB0eXBlZGVmIHtvYmplY3R9IEFkZEZvcmVpZ25LZXlBcmdzVHlwZVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gW2NvbHVtbk5hbWVdIC0gT3ZlcnJpZGUgdGhlIGRlcml2ZWQgRksgY29sdW1uIG5hbWUgKGRlZmF1bHQ6IGAke3JlZmVyZW5jZV91bmRlcnNjb3JlZH1faWRgKS5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIE92ZXJyaWRlIHRoZSBkZXJpdmVkIGNvbnN0cmFpbnQgbmFtZSAoZGVmYXVsdDogYGZrXyR7dGFibGVOYW1lfV8ke3JlZmVyZW5jZU5hbWV9YCkuXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcmVmZXJlbmNlZENvbHVtbk5hbWVdIC0gT3ZlcnJpZGUgdGhlIHJlZmVyZW5jZWQgY29sdW1uIG5hbWUgKGRlZmF1bHQ6IGBpZGApLlxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gW3JlZmVyZW5jZWRUYWJsZU5hbWVdIC0gT3ZlcnJpZGUgdGhlIGRlcml2ZWQgcmVmZXJlbmNlZCB0YWJsZSAoZGVmYXVsdDogcGx1cmFsaXplZCBgcmVmZXJlbmNlTmFtZWApLlxuICAgKi9cbiAgLyoqXG4gICAqIFJ1bnMgYWRkIGZvcmVpZ24ga2V5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgdGhlIEZLIGxpdmVzIG9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmZXJlbmNlTmFtZSAtIFNpbmd1bGFyIHJlZmVyZW5jZSBuYW1lLiBEZWZhdWx0cyBkZXJpdmVcbiAgICogICB0aGUgRksgY29sdW1uIGFzIGAke3JlZmVyZW5jZX1faWRgLCB0aGUgcmVmZXJlbmNlZCB0YWJsZSBieSBwbHVyYWxpemluZ1xuICAgKiAgIHRoZSByZWZlcmVuY2UsIHRoZSByZWZlcmVuY2VkIGNvbHVtbiBhcyBgaWRgLCBhbmQgdGhlIGNvbnN0cmFpbnQgbmFtZVxuICAgKiAgIGFzIGBma18ke3RhYmxlTmFtZX1fJHtyZWZlcmVuY2VOYW1lfWAuIE92ZXJyaWRlIGFueSBvZiB0aG9zZSB2aWEgYGFyZ3NgXG4gICAqICAgd2hlbiB0aGUgc2NoZW1hIGRvZXNuJ3QgZm9sbG93IHRoZSBjb252ZW50aW9uLlxuICAgKiBAcGFyYW0ge0FkZEZvcmVpZ25LZXlBcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9uYWwgb3ZlcnJpZGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgYWRkRm9yZWlnbktleSh0YWJsZU5hbWUsIHJlZmVyZW5jZU5hbWUsIGFyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHtjb2x1bW5OYW1lLCBuYW1lLCByZWZlcmVuY2VkQ29sdW1uTmFtZSwgcmVmZXJlbmNlZFRhYmxlTmFtZSwgLi4ucmVzdEFyZ3N9ID0gYXJnc1xuXG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGNvbnN0IHJlZmVyZW5jZU5hbWVVbmRlcnNjb3JlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKHJlZmVyZW5jZU5hbWUpXG4gICAgY29uc3QgcmVzb2x2ZWRSZWZlcmVuY2VkVGFibGVOYW1lID0gcmVmZXJlbmNlZFRhYmxlTmFtZSB8fCBpbmZsZWN0aW9uLnBsdXJhbGl6ZShyZWZlcmVuY2VOYW1lVW5kZXJzY29yZSlcbiAgICBjb25zdCByZXNvbHZlZENvbHVtbk5hbWUgPSBjb2x1bW5OYW1lIHx8IGAke3JlZmVyZW5jZU5hbWVVbmRlcnNjb3JlfV9pZGBcbiAgICBjb25zdCByZXNvbHZlZFJlZmVyZW5jZWRDb2x1bW5OYW1lID0gcmVmZXJlbmNlZENvbHVtbk5hbWUgfHwgXCJpZFwiXG4gICAgY29uc3QgcmVzb2x2ZWROYW1lID0gbmFtZSB8fCBgZmtfJHt0YWJsZU5hbWV9XyR7cmVmZXJlbmNlTmFtZX1gXG5cbiAgICBhd2FpdCB0aGlzLmdldERyaXZlcigpLmFkZEZvcmVpZ25LZXkoXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICByZXNvbHZlZENvbHVtbk5hbWUsXG4gICAgICByZXNvbHZlZFJlZmVyZW5jZWRUYWJsZU5hbWUsXG4gICAgICByZXNvbHZlZFJlZmVyZW5jZWRDb2x1bW5OYW1lLFxuICAgICAge1xuICAgICAgICBpc05ld0ZvcmVpZ25LZXk6IHRydWUsXG4gICAgICAgIG5hbWU6IHJlc29sdmVkTmFtZVxuICAgICAgfVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVGb3JlaWduS2V5QXJnc1R5cGUgdHlwZS5cbiAgICogQHR5cGVkZWYge29iamVjdH0gUmVtb3ZlRm9yZWlnbktleUFyZ3NUeXBlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29sdW1uTmFtZV0gLSBPdmVycmlkZSB0aGUgZGVyaXZlZCBmb3JlaWduLWtleSBjb2x1bW4gbmFtZS5cbiAgICovXG4gIC8qKlxuICAgKiBSdW5zIHJlbW92ZSBmb3JlaWduIGtleS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIHRoZSBmb3JlaWduIGtleSBsaXZlcyBvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZmVyZW5jZU5hbWUgLSBTaW5ndWxhciByZWZlcmVuY2UgbmFtZSB1c2VkIHRvIGRlcml2ZSB0aGUgRksgY29sdW1uLlxuICAgKiBAcGFyYW0ge1JlbW92ZUZvcmVpZ25LZXlBcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9uYWwgb3ZlcnJpZGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlRm9yZWlnbktleSh0YWJsZU5hbWUsIHJlZmVyZW5jZU5hbWUsIGFyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHtjb2x1bW5OYW1lLCAuLi5yZXN0QXJnc30gPSBhcmdzXG5cbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgY29uc3QgcmVzb2x2ZWRDb2x1bW5OYW1lID0gY29sdW1uTmFtZSB8fCBgJHtpbmZsZWN0aW9uLnVuZGVyc2NvcmUocmVmZXJlbmNlTmFtZSl9X2lkYFxuICAgIGNvbnN0IGRyaXZlciA9IHRoaXMuZ2V0RHJpdmVyKClcbiAgICBsZXQgbWF4aW11bVJlbW92YWxzID0gMFxuICAgIGxldCBwcmV2aW91c01hdGNoaW5nQ291bnQgPSAwXG5cbiAgICBmb3IgKGxldCByZW1vdmFsQXR0ZW1wdCA9IDA7IDsgcmVtb3ZhbEF0dGVtcHQrKykge1xuICAgICAgY29uc3QgdGFibGUgPSBhd2FpdCBkcml2ZXIuZ2V0VGFibGVCeU5hbWUodGFibGVOYW1lKVxuXG4gICAgICBpZiAoIXRhYmxlKSB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlICR7dGFibGVOYW1lfSBkb2VzIG5vdCBleGlzdGApXG5cbiAgICAgIGNvbnN0IGZvcmVpZ25LZXlzID0gYXdhaXQgdGFibGUuZ2V0Rm9yZWlnbktleXMoKVxuICAgICAgY29uc3QgbWF0Y2hpbmdGb3JlaWduS2V5cyA9IGZvcmVpZ25LZXlzLmZpbHRlcigoZm9yZWlnbktleSkgPT4gZm9yZWlnbktleS5nZXRDb2x1bW5OYW1lKCkgPT0gcmVzb2x2ZWRDb2x1bW5OYW1lKVxuXG4gICAgICBpZiAobWF0Y2hpbmdGb3JlaWduS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKHJlbW92YWxBdHRlbXB0ID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoYE5vIGZvcmVpZ24ga2V5IG9uICR7dGFibGVOYW1lfS4ke3Jlc29sdmVkQ29sdW1uTmFtZX1gKVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAocmVtb3ZhbEF0dGVtcHQgPT09IDApIHtcbiAgICAgICAgbWF4aW11bVJlbW92YWxzID0gbWF0Y2hpbmdGb3JlaWduS2V5cy5sZW5ndGhcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2hpbmdGb3JlaWduS2V5cy5sZW5ndGggPj0gcHJldmlvdXNNYXRjaGluZ0NvdW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRm9yZWlnbiBrZXkgcmVtb3ZhbCBkaWQgbm90IHJlZHVjZSBtYXRjaGVzIG9uICR7dGFibGVOYW1lfS4ke3Jlc29sdmVkQ29sdW1uTmFtZX1gKVxuICAgICAgfVxuXG4gICAgICBpZiAocmVtb3ZhbEF0dGVtcHQgPj0gbWF4aW11bVJlbW92YWxzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRm9yZWlnbiBrZXkgcmVtb3ZhbCBleGNlZWRlZCBleHBlY3RlZCBtYXRjaGVzIG9uICR7dGFibGVOYW1lfS4ke3Jlc29sdmVkQ29sdW1uTmFtZX1gKVxuICAgICAgfVxuXG4gICAgICBwcmV2aW91c01hdGNoaW5nQ291bnQgPSBtYXRjaGluZ0ZvcmVpZ25LZXlzLmxlbmd0aFxuICAgICAgYXdhaXQgZHJpdmVyLnJlbW92ZUZvcmVpZ25LZXkodGFibGVOYW1lLCBtYXRjaGluZ0ZvcmVpZ25LZXlzWzBdKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGFkZCByZWZlcmVuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmZXJlbmNlTmFtZSAtIFJlZmVyZW5jZSBuYW1lLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmZvcmVpZ25LZXldIC0gV2hldGhlciBmb3JlaWduIGtleS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5udWxsXSAtIFdoZXRoZXIgbnVsbGFibGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy50eXBlXSAtIFR5cGUgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy51bmlxdWVdIC0gV2hldGhlciB1bmlxdWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBhZGRSZWZlcmVuY2UodGFibGVOYW1lLCByZWZlcmVuY2VOYW1lLCBhcmdzKSB7XG4gICAgY29uc3Qge2ZvcmVpZ25LZXksIG51bGw6IG51bGxhYmxlLCB0eXBlLCB1bmlxdWUsIC4uLnJlc3RBcmdzfSA9IGFyZ3NcbiAgICBjb25zdCBjb2x1bW5OYW1lID0gYCR7aW5mbGVjdGlvbi51bmRlcnNjb3JlKHJlZmVyZW5jZU5hbWUpfV9pZGBcblxuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBjb25zdCBjb2x1bW5UeXBlID0gdHlwZSB8fCBcImludGVnZXJcIlxuICAgIGNvbnN0IGNvbHVtbkFyZ3MgPSBudWxsYWJsZSAhPT0gdW5kZWZpbmVkID8ge251bGw6IG51bGxhYmxlfSA6IHVuZGVmaW5lZFxuXG4gICAgYXdhaXQgdGhpcy5hZGRDb2x1bW4odGFibGVOYW1lLCBjb2x1bW5OYW1lLCBjb2x1bW5UeXBlLCBjb2x1bW5BcmdzKVxuICAgIGF3YWl0IHRoaXMuYWRkSW5kZXgodGFibGVOYW1lLCBbY29sdW1uTmFtZV0sIHt1bmlxdWU6IHVuaXF1ZX0pXG5cbiAgICBpZiAoZm9yZWlnbktleSkge1xuICAgICAgYXdhaXQgdGhpcy5hZGRGb3JlaWduS2V5KHRhYmxlTmFtZSwgcmVmZXJlbmNlTmFtZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlUmVmZXJlbmNlQXJnc1R5cGUgdHlwZS5cbiAgICogQHR5cGVkZWYge29iamVjdH0gUmVtb3ZlUmVmZXJlbmNlQXJnc1R5cGVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtjb2x1bW5OYW1lXSAtIE92ZXJyaWRlIHRoZSBkZXJpdmVkIHJlZmVyZW5jZSBjb2x1bW4gbmFtZS5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtpbmRleE5hbWVdIC0gRXhwbGljaXQgZ2VuZXJhdGVkIGluZGV4IG5hbWUgdG8gcmVtb3ZlLlxuICAgKi9cbiAgLyoqXG4gICAqIFJ1bnMgcmVtb3ZlIHJlZmVyZW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZlcmVuY2VOYW1lIC0gUmVmZXJlbmNlIG5hbWUuXG4gICAqIEBwYXJhbSB7UmVtb3ZlUmVmZXJlbmNlQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbmFsIG92ZXJyaWRlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHJlbW92ZVJlZmVyZW5jZSh0YWJsZU5hbWUsIHJlZmVyZW5jZU5hbWUsIGFyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHtjb2x1bW5OYW1lLCBpbmRleE5hbWUsIC4uLnJlc3RBcmdzfSA9IGFyZ3NcblxuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBjb25zdCByZXNvbHZlZENvbHVtbk5hbWUgPSBjb2x1bW5OYW1lIHx8IGAke2luZmxlY3Rpb24udW5kZXJzY29yZShyZWZlcmVuY2VOYW1lKX1faWRgXG4gICAgY29uc3QgZHJpdmVyID0gdGhpcy5nZXREcml2ZXIoKVxuICAgIGNvbnN0IHRhYmxlID0gYXdhaXQgZHJpdmVyLmdldFRhYmxlQnlOYW1lKHRhYmxlTmFtZSlcblxuICAgIGlmICghdGFibGUpIHRocm93IG5ldyBFcnJvcihgVGFibGUgJHt0YWJsZU5hbWV9IGRvZXMgbm90IGV4aXN0YClcblxuICAgIGNvbnN0IGZvcmVpZ25LZXlzID0gYXdhaXQgdGFibGUuZ2V0Rm9yZWlnbktleXMoKVxuXG4gICAgZm9yIChjb25zdCBmb3JlaWduS2V5IG9mIGZvcmVpZ25LZXlzKSB7XG4gICAgICBpZiAoZm9yZWlnbktleS5nZXRDb2x1bW5OYW1lKCkgIT0gcmVzb2x2ZWRDb2x1bW5OYW1lKSBjb250aW51ZVxuXG4gICAgICBhd2FpdCBkcml2ZXIucmVtb3ZlRm9yZWlnbktleSh0YWJsZU5hbWUsIGZvcmVpZ25LZXkpXG4gICAgfVxuXG4gICAgY29uc3QgZXhwZWN0ZWRJbmRleE5hbWUgPSBpbmRleE5hbWUgfHwgdGhpcy5fcmVtb3ZlSW5kZXhOYW1lKHRhYmxlTmFtZSwgW3Jlc29sdmVkQ29sdW1uTmFtZV0pXG4gICAgY29uc3QgaW5kZXhlcyA9IGF3YWl0IHRhYmxlLmdldEluZGV4ZXMoKVxuICAgIGNvbnN0IGdlbmVyYXRlZEluZGV4ID0gaW5kZXhlcy5maW5kKChpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaW5kZXhDb2x1bW5OYW1lcyA9IGluZGV4LmdldENvbHVtbk5hbWVzKClcblxuICAgICAgcmV0dXJuICFpbmRleC5pc1ByaW1hcnlLZXkoKSAmJlxuICAgICAgICBpbmRleC5nZXROYW1lKCkgPT0gZXhwZWN0ZWRJbmRleE5hbWUgJiZcbiAgICAgICAgaW5kZXhDb2x1bW5OYW1lcy5sZW5ndGggPT0gMSAmJlxuICAgICAgICBpbmRleENvbHVtbk5hbWVzWzBdID09IHJlc29sdmVkQ29sdW1uTmFtZVxuICAgIH0pXG5cbiAgICBpZiAoZ2VuZXJhdGVkSW5kZXgpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVtb3ZlSW5kZXgodGFibGVOYW1lLCBnZW5lcmF0ZWRJbmRleC5nZXROYW1lKCkpXG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5yZW1vdmVDb2x1bW4odGFibGVOYW1lLCByZXNvbHZlZENvbHVtbk5hbWUpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBjaGFuZ2UgY29sdW1uIG51bGwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uTmFtZSAtIENvbHVtbiBuYW1lLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG51bGxhYmxlIC0gV2hldGhlciBudWxsYWJsZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGNoYW5nZUNvbHVtbk51bGwodGFibGVOYW1lLCBjb2x1bW5OYW1lLCBudWxsYWJsZSkge1xuICAgIGNvbnN0IHRhYmxlID0gYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5nZXRUYWJsZUJ5TmFtZSh0YWJsZU5hbWUpXG5cbiAgICBpZiAoIXRhYmxlKSB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlICR7dGFibGVOYW1lfSBkb2VzIG5vdCBleGlzdGApXG5cbiAgICBjb25zdCBjb2x1bW4gPSBhd2FpdCB0YWJsZS5nZXRDb2x1bW5CeU5hbWUoY29sdW1uTmFtZSlcblxuICAgIGlmICghY29sdW1uKSB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiAke2NvbHVtbk5hbWV9IGRvZXMgbm90IGV4aXN0IGluIHRhYmxlICR7dGFibGVOYW1lfWApXG5cbiAgICBhd2FpdCBjb2x1bW4uY2hhbmdlTnVsbGFibGUobnVsbGFibGUpXG4gIH1cblxuICAvKipcbiAgICogTWlncmF0ZXMgbGVnYWN5IHRpbWV6b25lLWxlc3MgbG9jYWwgZGF0ZXRpbWUgcm93cyBpbnRvIFVUQyBkYXRldGltZSBzdG9yYWdlLlxuICAgKiBOZXcgU1FMaXRlIFVUQyByb3dzIGluY2x1ZGUgYSB0aW1lem9uZSBzdWZmaXggYW5kIGFyZSBza2lwcGVkLlxuICAgKiBAcGFyYW0ge0xlZ2FjeUxvY2FsRGF0ZVRpbWVzTWlncmF0aW9uQXJnc1R5cGV9IFthcmdzXSAtIE1pZ3JhdGlvbiBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgbWlncmF0ZUxlZ2FjeUxvY2FsRGF0ZVRpbWVzVG9VdGNTdG9yYWdlKGFyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHtjb2x1bW5zQnlUYWJsZSwgbGVnYWN5TG9jYWxPZmZzZXRNaW51dGVzLCB0YWJsZXMsIC4uLnJlc3RBcmdzfSA9IGFyZ3NcblxuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBjb25zdCB0YWJsZU5hbWVzID0gYXdhaXQgdGhpcy5fbGVnYWN5TG9jYWxEYXRlVGltZXNUYWJsZU5hbWVzKHRhYmxlcylcblxuICAgIGZvciAoY29uc3QgdGFibGVOYW1lIG9mIHRhYmxlTmFtZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuX21pZ3JhdGVMZWdhY3lMb2NhbERhdGVUaW1lc1RhYmxlKHtcbiAgICAgICAgY29sdW1uc0J5VGFibGUsXG4gICAgICAgIGxlZ2FjeUxvY2FsT2Zmc2V0TWludXRlcyxcbiAgICAgICAgdGFibGVOYW1lXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0YWJsZSBuYW1lcyBmb3IgYSBsZWdhY3kgbG9jYWwgZGF0ZXRpbWUgbWlncmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdIHwgdW5kZWZpbmVkfSB0YWJsZXMgLSBFeHBsaWNpdCB0YWJsZSBuYW1lcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fSAtIFRhYmxlIG5hbWVzLlxuICAgKi9cbiAgYXN5bmMgX2xlZ2FjeUxvY2FsRGF0ZVRpbWVzVGFibGVOYW1lcyh0YWJsZXMpIHtcbiAgICBpZiAodGFibGVzKSByZXR1cm4gdGFibGVzXG5cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuZ2V0VGFibGVzKCkpXG4gICAgICAubWFwKCh0YWJsZSkgPT4gdGFibGUuZ2V0TmFtZSgpKVxuICAgICAgLmZpbHRlcigodGFibGVOYW1lKSA9PiB0YWJsZU5hbWUgIT0gXCJzY2hlbWFfbWlncmF0aW9uc1wiICYmICF0YWJsZU5hbWUuc3RhcnRzV2l0aChcInNxbGl0ZV9cIikpXG4gIH1cblxuICAvKipcbiAgICogTWlncmF0ZXMgb25lIHRhYmxlJ3MgbGVnYWN5IGxvY2FsIGRhdGV0aW1lIHZhbHVlcy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiB8IHVuZGVmaW5lZH0gYXJncy5jb2x1bW5zQnlUYWJsZSAtIEV4cGxpY2l0IGNvbHVtbnMga2V5ZWQgYnkgdGFibGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBhcmdzLmxlZ2FjeUxvY2FsT2Zmc2V0TWludXRlcyAtIFVUQy1taW51cy1sb2NhbCBvZmZzZXQgaW4gbWludXRlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIF9taWdyYXRlTGVnYWN5TG9jYWxEYXRlVGltZXNUYWJsZSh7Y29sdW1uc0J5VGFibGUsIGxlZ2FjeUxvY2FsT2Zmc2V0TWludXRlcywgdGFibGVOYW1lfSkge1xuICAgIGNvbnN0IGRyaXZlciA9IHRoaXMuZ2V0RHJpdmVyKClcbiAgICBjb25zdCB0YWJsZSA9IGF3YWl0IGRyaXZlci5nZXRUYWJsZUJ5TmFtZU9yRmFpbCh0YWJsZU5hbWUpXG4gICAgY29uc3QgY29sdW1ucyA9IGF3YWl0IHRoaXMuX2xlZ2FjeUxvY2FsRGF0ZVRpbWVzQ29sdW1ucyh7Y29sdW1uc0J5VGFibGUsIHRhYmxlfSlcblxuICAgIGlmIChjb2x1bW5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG5cbiAgICBjb25zdCBwcmltYXJ5S2V5Q29sdW1uID0gYXdhaXQgdGhpcy5fbGVnYWN5TG9jYWxEYXRlVGltZXNQcmltYXJ5S2V5KHRhYmxlKVxuICAgIGNvbnN0IHNlbGVjdGVkQ29sdW1ucyA9IFtwcmltYXJ5S2V5Q29sdW1uLCAuLi5jb2x1bW5zXVxuICAgIGNvbnN0IHNlbGVjdFNxbCA9IHNlbGVjdGVkQ29sdW1uc1xuICAgICAgLm1hcCgoY29sdW1uTmFtZSkgPT4gZHJpdmVyLnF1b3RlQ29sdW1uKGNvbHVtbk5hbWUpKVxuICAgICAgLmpvaW4oXCIsIFwiKVxuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBkcml2ZXIucXVlcnkoYFNFTEVDVCAke3NlbGVjdFNxbH0gRlJPTSAke2RyaXZlci5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9YClcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGZvciAoY29uc3QgY29sdW1uTmFtZSBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm93W2NvbHVtbk5hbWVdXG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID0gY29udmVydExlZ2FjeURhdGVWYWx1ZVRvVXRjU3RvcmFnZSh2YWx1ZSwge1xuICAgICAgICAgIGRhdGFiYXNlVHlwZTogZHJpdmVyLmdldFR5cGUoKSxcbiAgICAgICAgICBsZWdhY3lMb2NhbE9mZnNldE1pbnV0ZXNcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoY29udmVydGVkVmFsdWUgPT09IHZhbHVlKSBjb250aW51ZVxuXG4gICAgICAgIGF3YWl0IGRyaXZlci5xdWVyeShgXG4gICAgICAgICAgVVBEQVRFICR7ZHJpdmVyLnF1b3RlVGFibGUodGFibGVOYW1lKX1cbiAgICAgICAgICBTRVQgJHtkcml2ZXIucXVvdGVDb2x1bW4oY29sdW1uTmFtZSl9ID0gJHtkcml2ZXIucXVvdGUoY29udmVydGVkVmFsdWUpfVxuICAgICAgICAgIFdIRVJFICR7ZHJpdmVyLnF1b3RlQ29sdW1uKHByaW1hcnlLZXlDb2x1bW4pfSA9ICR7ZHJpdmVyLnF1b3RlKHJvd1twcmltYXJ5S2V5Q29sdW1uXSl9XG4gICAgICAgIGApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGRhdGUtbGlrZSBjb2x1bW5zIGZvciBvbmUgdGFibGUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gfCB1bmRlZmluZWR9IGFyZ3MuY29sdW1uc0J5VGFibGUgLSBFeHBsaWNpdCBjb2x1bW5zIGtleWVkIGJ5IHRhYmxlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS10YWJsZS5qc1wiKS5kZWZhdWx0fSBhcmdzLnRhYmxlIC0gVGFibGUgbWV0YWRhdGEuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn0gLSBEYXRlLWxpa2UgY29sdW1uIG5hbWVzLlxuICAgKi9cbiAgYXN5bmMgX2xlZ2FjeUxvY2FsRGF0ZVRpbWVzQ29sdW1ucyh7Y29sdW1uc0J5VGFibGUsIHRhYmxlfSkge1xuICAgIGNvbnN0IGV4cGxpY2l0Q29sdW1ucyA9IGNvbHVtbnNCeVRhYmxlPy5bdGFibGUuZ2V0TmFtZSgpXVxuXG4gICAgaWYgKGV4cGxpY2l0Q29sdW1ucykgcmV0dXJuIGV4cGxpY2l0Q29sdW1uc1xuXG4gICAgcmV0dXJuIChhd2FpdCB0YWJsZS5nZXRDb2x1bW5zKCkpXG4gICAgICAuZmlsdGVyKChjb2x1bW4pID0+IHRoaXMuX2xlZ2FjeUxvY2FsRGF0ZVRpbWVzQ29sdW1uSXNEYXRlTGlrZShjb2x1bW4pKVxuICAgICAgLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uZ2V0TmFtZSgpKVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgY29sdW1uIHNob3VsZCBiZSBpbmNsdWRlZCBieSBkZWZhdWx0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS1jb2x1bW4uanNcIikuZGVmYXVsdH0gY29sdW1uIC0gQ29sdW1uIG1ldGFkYXRhLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSBjb2x1bW4gaXMgZGF0ZS1saWtlLlxuICAgKi9cbiAgX2xlZ2FjeUxvY2FsRGF0ZVRpbWVzQ29sdW1uSXNEYXRlTGlrZShjb2x1bW4pIHtcbiAgICBjb25zdCBjb2x1bW5UeXBlID0gY29sdW1uLmdldFR5cGUoKS50b0xvd2VyQ2FzZSgpXG5cbiAgICByZXR1cm4gY29sdW1uVHlwZS5pbmNsdWRlcyhcImRhdGVcIikgfHwgY29sdW1uVHlwZS5pbmNsdWRlcyhcInRpbWVzdGFtcFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBzaW5nbGUgcHJpbWFyeSBrZXkgY29sdW1uIGZvciByb3cgdXBkYXRlcy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UtdGFibGUuanNcIikuZGVmYXVsdH0gdGFibGUgLSBUYWJsZSBtZXRhZGF0YS5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBQcmltYXJ5IGtleSBjb2x1bW4gbmFtZS5cbiAgICovXG4gIGFzeW5jIF9sZWdhY3lMb2NhbERhdGVUaW1lc1ByaW1hcnlLZXkodGFibGUpIHtcbiAgICBjb25zdCBwcmltYXJ5S2V5Q29sdW1ucyA9IChhd2FpdCB0YWJsZS5nZXRDb2x1bW5zKCkpLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uZ2V0UHJpbWFyeUtleSgpKVxuXG4gICAgaWYgKHByaW1hcnlLZXlDb2x1bW5zLmxlbmd0aCAhPSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHByaW1hcnkga2V5IG9uICR7dGFibGUuZ2V0TmFtZSgpfSBidXQgZm91bmQgJHtwcmltYXJ5S2V5Q29sdW1ucy5sZW5ndGh9YClcbiAgICB9XG5cbiAgICByZXR1cm4gcHJpbWFyeUtleUNvbHVtbnNbMF0uZ2V0TmFtZSgpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBjb2x1bW4gZXhpc3RzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbHVtbk5hbWUgLSBDb2x1bW4gbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gUmVzb2x2ZXMgd2l0aCBXaGV0aGVyIGNvbHVtbiBleGlzdHMuXG4gICAqL1xuICBhc3luYyBjb2x1bW5FeGlzdHModGFibGVOYW1lLCBjb2x1bW5OYW1lKSB7XG4gICAgY29uc3QgdGFibGUgPSBhd2FpdCB0aGlzLmdldERyaXZlcigpLmdldFRhYmxlQnlOYW1lKHRhYmxlTmFtZSlcblxuICAgIGlmICh0YWJsZSkge1xuICAgICAgY29uc3QgY29sdW1uID0gYXdhaXQgdGFibGUuZ2V0Q29sdW1uQnlOYW1lKGNvbHVtbk5hbWUpXG5cbiAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQm9vbGVhbihmYWxzZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhbiBpbmRleCB3aXRoIHRoZSBnaXZlbiBuYW1lIGV4aXN0cyBvbiBhIHRhYmxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGluZGV4TmFtZSAtIEluZGV4IG5hbWUgdG8gbG9vayBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgdGhlIGluZGV4IGV4aXN0cyBvbiB0aGUgdGFibGUuXG4gICAqL1xuICBhc3luYyBpbmRleEV4aXN0cyh0YWJsZU5hbWUsIGluZGV4TmFtZSkge1xuICAgIGNvbnN0IHRhYmxlID0gYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5nZXRUYWJsZUJ5TmFtZSh0YWJsZU5hbWUsIHt0aHJvd0Vycm9yOiBmYWxzZX0pXG5cbiAgICBpZiAodGFibGUpIHtcbiAgICAgIGZvciAoY29uc3QgaW5kZXggb2YgYXdhaXQgdGFibGUuZ2V0SW5kZXhlcygpKSB7XG4gICAgICAgIGlmIChpbmRleC5nZXROYW1lKCkgPT0gaW5kZXhOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIGRhdGFiYXNlIHNjaGVtYSBmb3IgYSBnYXAtbGVzcyBwb3NpdGlvbmFsIGxpc3QuIEFkZHMgdGhlXG4gICAqIHBvc2l0aW9uIGNvbHVtbiAoSU5UIE5PVCBOVUxMKSBpZiBhYnNlbnQgYW5kIGNyZWF0ZXMgYSBVTklRVUUgaW5kZXggb25cbiAgICogKHNjb3BlLCBwb3NpdGlvbikuIFRoaXMgaXMgdGhlIHNjaGVtYS1zaWRlIGNvdW50ZXJwYXJ0IG9mXG4gICAqIGBNb2RlbC5hY3RzQXNMaXN0KClgLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBvc2l0aW9uQ29sdW1uIC0gQ29sdW1uIG5hbWUgZm9yIHRoZSBwb3NpdGlvbiAoZS5nLiBcInJvd19udW1iZXJcIikuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuc2NvcGUgLSBDb2x1bW4gbmFtZSBmb3IgdGhlIHNjb3BlIChlLmcuIFwiYm9hcmRfY29sdW1uX2lkXCIpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGFkZEFjdHNBc0xpc3QodGFibGVOYW1lLCBwb3NpdGlvbkNvbHVtbiwge3Njb3BlfSkge1xuICAgIGlmICghKGF3YWl0IHRoaXMuY29sdW1uRXhpc3RzKHRhYmxlTmFtZSwgcG9zaXRpb25Db2x1bW4pKSkge1xuICAgICAgYXdhaXQgdGhpcy5hZGRDb2x1bW4odGFibGVOYW1lLCBwb3NpdGlvbkNvbHVtbiwgXCJpbnRlZ2VyXCIsIHtudWxsOiBmYWxzZX0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hhbmdlQ29sdW1uTnVsbCh0YWJsZU5hbWUsIHBvc2l0aW9uQ29sdW1uLCBmYWxzZSlcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmFkZEluZGV4KHRhYmxlTmFtZSwgW3Njb3BlLCBwb3NpdGlvbkNvbHVtbl0sIHt1bmlxdWU6IHRydWV9KVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0YWJsZSB3aXRoIGRlZmF1bHQgb3B0aW9ucy5cbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge0NyZWF0ZVRhYmxlQ2FsbGJhY2tUeXBlfSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0YWJsZSB3aXRoIGV4cGxpY2l0IG9wdGlvbnMuXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtDcmVhdGVUYWJsZUFyZ3NUeXBlfSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7Q3JlYXRlVGFibGVDYWxsYmFja1R5cGV9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICAvKipcbiAgICogUnVucyBjcmVhdGUgdGFibGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge0NyZWF0ZVRhYmxlQXJnc1R5cGUgfCBDcmVhdGVUYWJsZUNhbGxiYWNrVHlwZX0gYXJnMSAtIEFyZzEuXG4gICAqIEBwYXJhbSB7Q3JlYXRlVGFibGVDYWxsYmFja1R5cGUgfCB1bmRlZmluZWR9IFthcmcyXSAtIEFyZzIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBjcmVhdGVUYWJsZSh0YWJsZU5hbWUsIGFyZzEsIGFyZzIpIHtcbiAgICBsZXQgYXJnc1xuICAgIGxldCBjYWxsYmFja1xuXG4gICAgaWYgKHR5cGVvZiBhcmcxID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgYXJncyA9IHt9XG4gICAgICBjYWxsYmFjayA9IGFyZzFcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncyA9IGFyZzFcbiAgICAgIGNhbGxiYWNrID0gYXJnMlxuICAgIH1cblxuICAgIGNvbnN0IHtpZCA9IHt9LCBpZk5vdEV4aXN0cyA9IGZhbHNlLCAuLi5yZXN0QXJnc30gPSBhcmdzXG4gICAgY29uc3QgZHJpdmVyID0gdGhpcy5nZXREcml2ZXIoKVxuICAgIGNvbnN0IGRlZmF1bHRQcmltYXJ5S2V5VHlwZSA9IGRyaXZlci5wcmltYXJ5S2V5VHlwZSgpXG4gICAgbGV0IGlkRGVmYXVsdCwgaWRUeXBlLCByZXN0QXJnc0lkXG5cbiAgICBpZiAoaWQgIT09IGZhbHNlKSB7XG4gICAgICAoe2RlZmF1bHQ6IGlkRGVmYXVsdCwgdHlwZTogaWRUeXBlLCAuLi5yZXN0QXJnc0lkfSA9IGlkKVxuXG4gICAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzSWQpXG4gICAgfVxuXG4gICAgaWYgKCFpZFR5cGUpIHtcbiAgICAgIGlkVHlwZSA9IGRlZmF1bHRQcmltYXJ5S2V5VHlwZVxuICAgIH1cbiAgICBjb25zdCBkcml2ZXJTdXBwb3J0c0RlZmF1bHRVVUlEID0gZHJpdmVyLnN1cHBvcnRzRGVmYXVsdFByaW1hcnlLZXlVVUlEPy4oKVxuICAgIGNvbnN0IGxvd2VySWRUeXBlID0gaWRUeXBlPy50b0xvd2VyQ2FzZSgpXG4gICAgY29uc3QgaXNVVUlEUHJpbWFyeUtleSA9IGxvd2VySWRUeXBlID09IFwidXVpZFwiXG4gICAgY29uc3QgbnVtZXJpY0F1dG9JbmNyZW1lbnRUeXBlcyA9IFtcImludFwiLCBcImludGVnZXJcIiwgXCJiaWdpbnRcIiwgXCJzbWFsbGludFwiLCBcInRpbnlpbnRcIl1cbiAgICBsZXQgaWRBdXRvSW5jcmVtZW50ID0gbnVtZXJpY0F1dG9JbmNyZW1lbnRUeXBlcy5pbmNsdWRlcyhsb3dlcklkVHlwZSB8fCBcIlwiKVxuXG4gICAgaWYgKGlzVVVJRFByaW1hcnlLZXkpIHtcbiAgICAgIGlkQXV0b0luY3JlbWVudCA9IGZhbHNlXG5cbiAgICAgIGlmIChkcml2ZXJTdXBwb3J0c0RlZmF1bHRVVUlEKSB7XG4gICAgICAgIGlmIChpZERlZmF1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlkRGVmYXVsdCA9ICgpID0+IFwiVVVJRCgpXCJcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpZERlZmF1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMZXQgYXBwbGljYXRpb24gY29kZSBhc3NpZ24gVVVJRHMgKHNlZSBEYXRhYmFzZVJlY29yZC5pbnNlcnQpIHdoZW4gdGhlIGRyaXZlciBjYW4ndCBkbyBpdC5cbiAgICAgICAgaWREZWZhdWx0ID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICAvLyBJZiBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IFVVSUQoKSBidXQgdGhlIGNhbGxlciBleHBsaWNpdGx5IHNldCBhIGRlZmF1bHQsIHJlc3BlY3QgaXQuXG4gICAgfVxuXG4gICAgY29uc3QgdGFibGVEYXRhID0gbmV3IFRhYmxlRGF0YSh0YWJsZU5hbWUsIHtpZk5vdEV4aXN0cywgcHJpbWFyeUtleVR5cGU6IGRlZmF1bHRQcmltYXJ5S2V5VHlwZX0pXG5cbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgaWYgKCEoaWRUeXBlIGluIHRhYmxlRGF0YSkpIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcHJpbWFyeSBrZXkgdHlwZTogJHtpZFR5cGV9YClcblxuICAgIGlmIChpZCAhPT0gZmFsc2UpIHtcbiAgICAgIHRhYmxlRGF0YS5hZGRDb2x1bW4oXCJpZFwiLCB7YXV0b0luY3JlbWVudDogaWRBdXRvSW5jcmVtZW50LCBkZWZhdWx0OiBpZERlZmF1bHQsIG51bGw6IGZhbHNlLCBwcmltYXJ5S2V5OiB0cnVlLCB0eXBlOiBpZFR5cGV9KVxuICAgIH1cblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2sodGFibGVEYXRhKVxuICAgIH1cblxuICAgIGNvbnN0IHNxbHMgPSBhd2FpdCBkcml2ZXIuY3JlYXRlVGFibGVTcWwodGFibGVEYXRhKVxuXG4gICAgZm9yIChjb25zdCBzcWwgb2Ygc3Fscykge1xuICAgICAgYXdhaXQgdGhpcy5fZGIucXVlcnkoc3FsKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VUYWJsZUFyZ3NUeXBlIHR5cGUuXG4gICAqIEB0eXBlZGVmIHtvYmplY3R9IENoYW5nZVRhYmxlQXJnc1R5cGVcbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbYnVsa10gLSBDb21iaW5lIGNvbXBhdGlibGUgY29udGlndW91cyBEREwgaW50byBzaW5nbGVcbiAgICogICBBTFRFUiBUQUJMRSBzdGF0ZW1lbnRzIG9uIGRyaXZlcnMgdGhhdCBzdXBwb3J0IGJ1bGsgYWx0ZXJzIChNeVNRTC9NYXJpYURCXG4gICAqICAgYW5kIFBvc3RncmVTUUwpLiBgYnVsa2AgY29udHJvbHMgRERMIGdyb3VwaW5nIG9ubHksIG5vdCB0cmFuc2FjdGlvbmFsXG4gICAqICAgYXRvbWljaXR5OyB1bmNoYW5nZWQgZHJpdmVycyBleGVjdXRlIHRoZSByZWNvcmRlZCBjb21tYW5kcyBzZXF1ZW50aWFsbHkuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBDaGFuZ2VUYWJsZUNhbGxiYWNrVHlwZSB0eXBlLlxuICAgKiBAdHlwZWRlZiB7KHRhYmxlOiBpbXBvcnQoXCIuL2NoYW5nZS10YWJsZS5qc1wiKS5kZWZhdWx0KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gQ2hhbmdlVGFibGVDYWxsYmFja1R5cGVcbiAgICovXG5cbiAgLyoqXG4gICAqIENoYW5nZXMgYSB0YWJsZSB1c2luZyBhIFJhaWxzLXN0eWxlIHRhYmxlLXNjb3BlZCByZWNvcmRlci5cbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge0NoYW5nZVRhYmxlQ2FsbGJhY2tUeXBlfSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgLyoqXG4gICAqIENoYW5nZXMgYSB0YWJsZSB3aXRoIGV4cGxpY2l0IG9wdGlvbnMuXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtDaGFuZ2VUYWJsZUFyZ3NUeXBlfSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7Q2hhbmdlVGFibGVDYWxsYmFja1R5cGV9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICAvKipcbiAgICogUnVucyBjaGFuZ2UgdGFibGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge0NoYW5nZVRhYmxlQXJnc1R5cGUgfCBDaGFuZ2VUYWJsZUNhbGxiYWNrVHlwZX0gYXJnMSAtIEFyZzEuXG4gICAqIEBwYXJhbSB7Q2hhbmdlVGFibGVDYWxsYmFja1R5cGUgfCB1bmRlZmluZWR9IFthcmcyXSAtIEFyZzIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBjaGFuZ2VUYWJsZSh0YWJsZU5hbWUsIGFyZzEsIGFyZzIpIHtcbiAgICBsZXQgYXJncyA9IC8qKiBAdHlwZSB7Q2hhbmdlVGFibGVBcmdzVHlwZX0gKi8gKHt9KVxuICAgIGxldCBjYWxsYmFja1xuXG4gICAgaWYgKHR5cGVvZiBhcmcxID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgY2FsbGJhY2sgPSBhcmcxXG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MgPSBhcmcxIHx8IHt9XG4gICAgICBjYWxsYmFjayA9IGFyZzJcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiTm8gY2FsbGJhY2sgZ2l2ZW5cIilcblxuICAgIGNvbnN0IHtidWxrID0gZmFsc2UsIC4uLnJlc3RBcmdzfSA9IGFyZ3NcblxuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBjb25zdCB0YWJsZSA9IG5ldyBDaGFuZ2VUYWJsZSh7dGFibGVOYW1lfSlcblxuICAgIGF3YWl0IGNhbGxiYWNrKHRhYmxlKVxuXG4gICAgYXdhaXQgdGhpcy5fZXhlY3V0ZUNoYW5nZVRhYmxlT3BlcmF0aW9ucyh0YWJsZU5hbWUsIHRhYmxlLmdldE9wZXJhdGlvbnMoKSwge2J1bGt9KVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHJlY29yZGVkIGNoYW5nZVRhYmxlIG9wZXJhdGlvbnMuIFdpdGggYGJ1bGtgIGVuYWJsZWQgb24gYVxuICAgKiBzdXBwb3J0aW5nIGRyaXZlciwgY29tcGF0aWJsZSBjb250aWd1b3VzIGNvbHVtbiBvcGVyYXRpb25zIGFjY3VtdWxhdGUgaW50b1xuICAgKiBhIHNpbmdsZSBUYWJsZURhdGEgZmx1c2hlZCB0aHJvdWdoIGBhbHRlclRhYmxlU1FMc2A7IGluY29tcGF0aWJsZSBjb21tYW5kc1xuICAgKiBmbHVzaCB0aGUgYmF0Y2ggZmlyc3QgYW5kIHJ1biB0aHJvdWdoIHRoZSBleGlzdGluZyBtaWdyYXRpb24gaGVscGVycy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9jaGFuZ2UtdGFibGUuanNcIikuQ2hhbmdlVGFibGVPcGVyYXRpb25UeXBlW119IG9wZXJhdGlvbnMgLSBSZWNvcmRlZCBvcGVyYXRpb25zLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFyZ3MuYnVsayAtIFdoZXRoZXIgdG8gZW5hYmxlIGJ1bGsgY29tbWFuZCBncm91cGluZy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIF9leGVjdXRlQ2hhbmdlVGFibGVPcGVyYXRpb25zKHRhYmxlTmFtZSwgb3BlcmF0aW9ucywge2J1bGt9KSB7XG4gICAgY29uc3QgZHJpdmVyID0gdGhpcy5nZXREcml2ZXIoKVxuICAgIGNvbnN0IGJ1bGtTdXBwb3J0ZWQgPSBidWxrICYmIGRyaXZlci5zdXBwb3J0c0J1bGtBbHRlcigpXG5cbiAgICBpZiAoIWJ1bGtTdXBwb3J0ZWQpIHtcbiAgICAgIGZvciAoY29uc3Qgb3BlcmF0aW9uIG9mIG9wZXJhdGlvbnMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5fZXhlY3V0ZUNoYW5nZVRhYmxlT3BlcmF0aW9uKHRhYmxlTmFtZSwgb3BlcmF0aW9uKVxuICAgICAgfVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgYmF0Y2ggPSBuZXcgVGFibGVEYXRhKHRhYmxlTmFtZSlcblxuICAgIGNvbnN0IGZsdXNoQmF0Y2ggPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoYmF0Y2guZ2V0Q29sdW1ucygpLmxlbmd0aCA9PSAwICYmIGJhdGNoLmdldEluZGV4ZXMoKS5sZW5ndGggPT0gMCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHNxbHMgPSBhd2FpdCBkcml2ZXIuYWx0ZXJUYWJsZVNRTHMoYmF0Y2gpXG5cbiAgICAgIGZvciAoY29uc3Qgc3FsIG9mIHNxbHMpIHtcbiAgICAgICAgYXdhaXQgZHJpdmVyLnF1ZXJ5KHNxbClcbiAgICAgIH1cblxuICAgICAgYmF0Y2ggPSBuZXcgVGFibGVEYXRhKHRhYmxlTmFtZSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICBzd2l0Y2ggKG9wZXJhdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJhZGRDb2x1bW5cIjoge1xuICAgICAgICAgIGlmICghb3BlcmF0aW9uLmNvbHVtblR5cGUpIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbHVtbiB0eXBlIGdpdmVuXCIpXG5cbiAgICAgICAgICAvLyBGbHVzaCBhbiBhbHJlYWR5LXJlY29yZGVkIGluZGV4IGJhdGNoIGZpcnN0IHNvIHRoZSBlbWl0dGVkIFNRTCBrZWVwc1xuICAgICAgICAgIC8vIHRoZSByZWNvcmRlZCBkZWNsYXJhdGlvbiBvcmRlciAoaW5kZXggYmVmb3JlIGNvbHVtbikuXG4gICAgICAgICAgaWYgKGJhdGNoLmdldEluZGV4ZXMoKS5sZW5ndGggPiAwKSBhd2FpdCBmbHVzaEJhdGNoKClcblxuICAgICAgICAgIGJhdGNoLmFkZENvbHVtbihuZXcgVGFibGVDb2x1bW4ob3BlcmF0aW9uLmNvbHVtbk5hbWUsIE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBvcGVyYXRpb24uY29sdW1uVHlwZX0sIG9wZXJhdGlvbi5hcmdzKSkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwicmVtb3ZlQ29sdW1uXCI6XG4gICAgICAgICAgLy8gRmx1c2ggYW4gYWxyZWFkeS1yZWNvcmRlZCBpbmRleCBiYXRjaCBmaXJzdCBzbyB0aGUgZW1pdHRlZCBTUUwga2VlcHNcbiAgICAgICAgICAvLyB0aGUgcmVjb3JkZWQgZGVjbGFyYXRpb24gb3JkZXIgKGluZGV4IGJlZm9yZSBjb2x1bW4pLlxuICAgICAgICAgIGlmIChiYXRjaC5nZXRJbmRleGVzKCkubGVuZ3RoID4gMCkgYXdhaXQgZmx1c2hCYXRjaCgpXG5cbiAgICAgICAgICBiYXRjaC5hZGRDb2x1bW4obmV3IFRhYmxlQ29sdW1uKG9wZXJhdGlvbi5jb2x1bW5OYW1lLCB7ZHJvcENvbHVtbjogdHJ1ZX0pKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgXCJhZGRJbmRleFwiOlxuICAgICAgICAgIC8vIERyaXZlcnMgd2l0aG91dCBgc3VwcG9ydHNCdWxrQWx0ZXJJbmRleGVzYCAoUG9zdGdyZVNRTCkga2VlcCBpbmRleGVzXG4gICAgICAgICAgLy8gc3RhbmRhbG9uZSBiZWNhdXNlIHRoZWlyIEFMVEVSIFRBQkxFIGRvZXMgbm90IGNhcnJ5IENSRUFURSBJTkRFWFxuICAgICAgICAgIC8vIGNsYXVzZXMuIEFuIGlmTm90RXhpc3RzIGluZGV4IGlzIG5ldmVyIGNvbWJpbmVkIGJlY2F1c2UgdGhlIGNvbWJpbmVkXG4gICAgICAgICAgLy8gYnVsayBmb3JtIGNhbm5vdCBleHByZXNzIHRoYXQgZ3VhcmQuXG4gICAgICAgICAgaWYgKCFkcml2ZXIuc3VwcG9ydHNCdWxrQWx0ZXJJbmRleGVzKCkgfHwgb3BlcmF0aW9uLmFyZ3M/LmlmTm90RXhpc3RzKSB7XG4gICAgICAgICAgICBhd2FpdCBmbHVzaEJhdGNoKClcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2V4ZWN1dGVDaGFuZ2VUYWJsZU9wZXJhdGlvbih0YWJsZU5hbWUsIG9wZXJhdGlvbilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmF0Y2guYWRkSW5kZXgodGhpcy5fY2hhbmdlVGFibGVUYWJsZUluZGV4KHRhYmxlTmFtZSwgb3BlcmF0aW9uKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhd2FpdCBmbHVzaEJhdGNoKClcbiAgICAgICAgICBhd2FpdCB0aGlzLl9leGVjdXRlQ2hhbmdlVGFibGVPcGVyYXRpb24odGFibGVOYW1lLCBvcGVyYXRpb24pXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgZmx1c2hCYXRjaCgpXG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgVGFibGVJbmRleCBmb3IgYSBiYXRjaCBmcm9tIGEgcmVjb3JkZWQgYWRkSW5kZXggb3BlcmF0aW9uLFxuICAgKiByZXNvbHZpbmcgdGhlIGRlZmF1bHQgYWRkSW5kZXggbmFtZSBlYWdlcmx5IHNvIGEgY29tYmluZWQgTXlTUUwgQUxURVJcbiAgICogbmV2ZXIgc2lsZW50bHkgbmFtZXMgdGhlIGluZGV4IGRpZmZlcmVudGx5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2NoYW5nZS10YWJsZS5qc1wiKS5DaGFuZ2VUYWJsZUFkZEluZGV4T3BlcmF0aW9uVHlwZX0gb3BlcmF0aW9uIC0gUmVjb3JkZWQgb3BlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7VGFibGVJbmRleH0gLSBUaGUgdGFibGUgaW5kZXguXG4gICAqL1xuICBfY2hhbmdlVGFibGVUYWJsZUluZGV4KHRhYmxlTmFtZSwgb3BlcmF0aW9uKSB7XG4gICAgY29uc3Qge2FyZ3MsIGNvbHVtbnN9ID0gb3BlcmF0aW9uXG4gICAgLy8gQW4gaWZOb3RFeGlzdHMgaW5kZXggbmV2ZXIgcmVhY2hlcyBiYXRjaGluZyAoaXQgaXMgZmx1c2hlZCBzdGFuZGFsb25lKSxcbiAgICAvLyBzbyB0aGUgY29tYmluZWQgQUxURVIgY2Fubm90IGNhcnJ5IHRoYXQgZ3VhcmQuXG4gICAgY29uc3Qge25hbWUsIC4uLnJlc3RJbmRleEFyZ3N9ID0gYXJncyB8fCB7fVxuICAgIGNvbnN0IGluZGV4TmFtZSA9IG5hbWUgfHwgbmV3IENyZWF0ZUluZGV4QmFzZSh7Y29sdW1ucywgZHJpdmVyOiB0aGlzLmdldERyaXZlcigpLCB0YWJsZU5hbWV9KS5nZW5lcmF0ZUluZGV4TmFtZSgpXG5cbiAgICByZXR1cm4gbmV3IFRhYmxlSW5kZXgoY29sdW1ucywgT2JqZWN0LmFzc2lnbih7fSwgcmVzdEluZGV4QXJncywge25hbWU6IGluZGV4TmFtZX0pKVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGEgc2luZ2xlIHJlY29yZGVkIGNoYW5nZVRhYmxlIG9wZXJhdGlvbiB0aHJvdWdoIHRoZSBleGlzdGluZ1xuICAgKiBtaWdyYXRpb24gaGVscGVyIHdpdGggdGhlIHNhbWUgc2VtYW50aWNzIGFzIGEgZGlyZWN0IGhlbHBlciBjYWxsLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2NoYW5nZS10YWJsZS5qc1wiKS5DaGFuZ2VUYWJsZU9wZXJhdGlvblR5cGV9IG9wZXJhdGlvbiAtIFJlY29yZGVkIG9wZXJhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIF9leGVjdXRlQ2hhbmdlVGFibGVPcGVyYXRpb24odGFibGVOYW1lLCBvcGVyYXRpb24pIHtcbiAgICBzd2l0Y2ggKG9wZXJhdGlvbi50eXBlKSB7XG4gICAgICBjYXNlIFwiYWRkQ29sdW1uXCI6XG4gICAgICAgIGF3YWl0IHRoaXMuYWRkQ29sdW1uKHRhYmxlTmFtZSwgb3BlcmF0aW9uLmNvbHVtbk5hbWUsIG9wZXJhdGlvbi5jb2x1bW5UeXBlLCBvcGVyYXRpb24uYXJncylcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJyZW1vdmVDb2x1bW5cIjpcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVDb2x1bW4odGFibGVOYW1lLCBvcGVyYXRpb24uY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJhZGRJbmRleFwiOlxuICAgICAgICBhd2FpdCB0aGlzLmFkZEluZGV4KHRhYmxlTmFtZSwgb3BlcmF0aW9uLmNvbHVtbnMsIG9wZXJhdGlvbi5hcmdzKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcInJlbW92ZUluZGV4XCI6XG4gICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlSW5kZXgodGFibGVOYW1lLCBvcGVyYXRpb24ubmFtZU9yQ29sdW1ucywgb3BlcmF0aW9uLmFyZ3MpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwiYWRkUmVmZXJlbmNlXCI6XG4gICAgICAgIGF3YWl0IHRoaXMuYWRkUmVmZXJlbmNlKHRhYmxlTmFtZSwgb3BlcmF0aW9uLnJlZmVyZW5jZU5hbWUsIG9wZXJhdGlvbi5hcmdzIHx8IHt9KVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcInJlbW92ZVJlZmVyZW5jZVwiOlxuICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZVJlZmVyZW5jZSh0YWJsZU5hbWUsIG9wZXJhdGlvbi5yZWZlcmVuY2VOYW1lLCBvcGVyYXRpb24uYXJncylcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJyZW5hbWVDb2x1bW5cIjpcbiAgICAgICAgYXdhaXQgdGhpcy5yZW5hbWVDb2x1bW4odGFibGVOYW1lLCBvcGVyYXRpb24ub2xkQ29sdW1uTmFtZSwgb3BlcmF0aW9uLm5ld0NvbHVtbk5hbWUpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwiY2hhbmdlQ29sdW1uTnVsbFwiOlxuICAgICAgICBhd2FpdCB0aGlzLmNoYW5nZUNvbHVtbk51bGwodGFibGVOYW1lLCBvcGVyYXRpb24uY29sdW1uTmFtZSwgb3BlcmF0aW9uLm51bGxhYmxlKVxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBjaGFuZ2UgdGFibGUgb3BlcmF0aW9uXCIpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZHJvcCB0YWJsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBkcm9wVGFibGUodGFibGVOYW1lKSB7XG4gICAgYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5kcm9wVGFibGUodGFibGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcmVuYW1lIGNvbHVtbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvbGRDb2x1bW5OYW1lIC0gUHJldmlvdXMgY29sdW1uIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdDb2x1bW5OYW1lIC0gTmV3IGNvbHVtbiBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcmVuYW1lQ29sdW1uKHRhYmxlTmFtZSwgb2xkQ29sdW1uTmFtZSwgbmV3Q29sdW1uTmFtZSkge1xuICAgIGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkucmVuYW1lQ29sdW1uKHRhYmxlTmFtZSwgb2xkQ29sdW1uTmFtZSwgbmV3Q29sdW1uTmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRhYmxlIGV4aXN0cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFJlc29sdmVzIHdpdGggV2hldGhlciB0YWJsZSBleGlzdHMuXG4gICAqL1xuICBhc3luYyB0YWJsZUV4aXN0cyh0YWJsZU5hbWUpIHtcbiAgICBjb25zdCBleGlzdHMgPSBhd2FpdCB0aGlzLmdldERyaXZlcigpLnRhYmxlRXhpc3RzKHRhYmxlTmFtZSlcblxuICAgIHJldHVybiBleGlzdHNcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXI6IGNyZWF0ZXMgdGhlIHNoYXJlZCBhdWRpdCB0YWJsZXMgKGBhdWRpdF9hY3Rpb25zYCxcbiAgICogYGF1ZGl0X2F1ZGl0YWJsZV90eXBlc2AsIGBhdWRpdHNgKS4gQ2FsbCBmcm9tIGB1cCgpYCBpbiBhIG1pZ3JhdGlvbi5cbiAgICogQHBhcmFtIHt7aWQ/OiB7dHlwZT86IHN0cmluZ319fSBbb3B0aW9uc10gLSBJRCBjb2x1bW4gb3B0aW9ucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBjcmVhdGVTaGFyZWRBdWRpdFRhYmxlcyhvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBpZCA9IG9wdGlvbnMuaWQgfHwge31cblxuICAgIGF3YWl0IHRoaXMuY3JlYXRlVGFibGUoXCJhdWRpdF9hY3Rpb25zXCIsIHtpZH0sICh0YWJsZSkgPT4ge1xuICAgICAgdGFibGUuc3RyaW5nKFwiYWN0aW9uXCIsIHtpbmRleDoge3VuaXF1ZTogdHJ1ZX0sIG51bGw6IGZhbHNlfSlcbiAgICAgIHRhYmxlLnRpbWVzdGFtcHMoKVxuICAgIH0pXG5cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVRhYmxlKFwiYXVkaXRfYXVkaXRhYmxlX3R5cGVzXCIsIHtpZH0sICh0YWJsZSkgPT4ge1xuICAgICAgdGFibGUuc3RyaW5nKFwibmFtZVwiLCB7aW5kZXg6IHt1bmlxdWU6IHRydWV9LCBudWxsOiBmYWxzZX0pXG4gICAgICB0YWJsZS50aW1lc3RhbXBzKClcbiAgICB9KVxuXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVUYWJsZShcImF1ZGl0c1wiLCB7aWR9LCAodGFibGUpID0+IHtcbiAgICAgIHRhYmxlLnJlZmVyZW5jZXMoXCJhdWRpdF9hY3Rpb25cIiwge2ZvcmVpZ25LZXk6IHRydWUsIG51bGw6IGZhbHNlfSlcbiAgICAgIHRhYmxlLnJlZmVyZW5jZXMoXCJhdWRpdF9hdWRpdGFibGVfdHlwZVwiLCB7Zm9yZWlnbktleTogdHJ1ZSwgbnVsbDogZmFsc2V9KVxuICAgICAgdGFibGUucmVmZXJlbmNlcyhcImF1ZGl0YWJsZVwiLCB7bnVsbDogZmFsc2UsIHBvbHltb3JwaGljOiB0cnVlfSlcbiAgICAgIHRhYmxlLmpzb24oXCJhdWRpdGVkX2NoYW5nZXNcIilcbiAgICAgIHRhYmxlLmpzb24oXCJwYXJhbXNcIilcbiAgICAgIHRhYmxlLnRpbWVzdGFtcHMoKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogSGVscGVyOiBjcmVhdGVzIGEgZGVkaWNhdGVkIGF1ZGl0IHRhYmxlIGZvciBhIG1vZGVsIChlLmcuXG4gICAqIGBwcm9qZWN0X2F1ZGl0c2AgZm9yIHRoZSBgcHJvamVjdHNgIHRhYmxlKS4gQ2FsbCBmcm9tIGB1cCgpYFxuICAgKiBpbiBhIG1pZ3JhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsVGFibGVOYW1lIC0gTW9kZWwgdGFibGUgbmFtZSAoZS5nLiBcInByb2plY3RzXCIpLlxuICAgKiBAcGFyYW0ge3tpZD86IHt0eXBlPzogc3RyaW5nfX19IFtvcHRpb25zXSAtIElEIGNvbHVtbiBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBUaGUgY3JlYXRlZCBhdWRpdCB0YWJsZSBuYW1lLlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlRGVkaWNhdGVkQXVkaXRUYWJsZShtb2RlbFRhYmxlTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgYXVkaXRUYWJsZSA9IGRlZGljYXRlZEF1ZGl0VGFibGVOYW1lKG1vZGVsVGFibGVOYW1lKVxuICAgIGNvbnN0IGlkID0gb3B0aW9ucy5pZCB8fCB7fVxuXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVUYWJsZShhdWRpdFRhYmxlLCB7aWR9LCAodGFibGUpID0+IHtcbiAgICAgIGNvbnN0IHJlZktleSA9IGluZmxlY3Rpb24uc2luZ3VsYXJpemUobW9kZWxUYWJsZU5hbWUpXG5cbiAgICAgIHRhYmxlLnJlZmVyZW5jZXMocmVmS2V5LCB7Zm9yZWlnbktleTogdHJ1ZSwgbnVsbDogZmFsc2V9KVxuICAgICAgdGFibGUucmVmZXJlbmNlcyhcImF1ZGl0X2FjdGlvblwiLCB7Zm9yZWlnbktleTogdHJ1ZSwgbnVsbDogZmFsc2V9KVxuICAgICAgdGFibGUuanNvbihcImF1ZGl0ZWRfY2hhbmdlc1wiKVxuICAgICAgdGFibGUuanNvbihcInBhcmFtc1wiKVxuICAgICAgdGFibGUudGltZXN0YW1wcygpXG4gICAgfSlcblxuICAgIHJldHVybiBhdWRpdFRhYmxlXG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZWRpY2F0ZWQgYXVkaXQgdGFibGUgbmFtZSBmb3IgYSBtb2RlbCB0YWJsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbFRhYmxlTmFtZSAtIE1vZGVsIHRhYmxlIG5hbWUgKGUuZy4gXCJwcm9qZWN0c1wiKS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IERlZGljYXRlZCBhdWRpdCB0YWJsZSBuYW1lIChlLmcuIFwicHJvamVjdF9hdWRpdHNcIikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWRpY2F0ZWRBdWRpdFRhYmxlTmFtZShtb2RlbFRhYmxlTmFtZSkge1xuICBpZiAobW9kZWxUYWJsZU5hbWUuZW5kc1dpdGgoXCJzXCIpKSB7XG4gICAgcmV0dXJuIGAke21vZGVsVGFibGVOYW1lLnNsaWNlKDAsIC0xKX1fYXVkaXRzYFxuICB9XG5cbiAgcmV0dXJuIGAke21vZGVsVGFibGVOYW1lfV9hdWRpdHNgXG59XG4iXX0=
|
|
840
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvbWlncmF0aW9uL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWiwrRkFBK0Y7QUFDL0Y7Ozs7O0dBS0c7QUFDSDs7Ozs7R0FLRztBQUNIOzs7R0FHRztBQUNIOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzNFLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sYUFBYSxNQUFNLGdDQUFnQyxDQUFBO0FBQzFELE9BQU8sV0FBVyxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sZUFBZSxNQUFNLCtCQUErQixDQUFBO0FBQzNELE9BQU8sV0FBVyxNQUFNLCtCQUErQixDQUFBO0FBQ3ZELE9BQU8sU0FBUyxNQUFNLHdCQUF3QixDQUFBO0FBQzlDLE9BQU8sVUFBVSxNQUFNLDhCQUE4QixDQUFBO0FBQ3JELE1BQU0sbUJBQW9CLFNBQVEsS0FBSztDQUFHO0FBRTFDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxDQUFBO0FBRTVCLE1BQU0sQ0FBQyxPQUFPLE9BQU8sMEJBQTBCO0lBQzdDOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsV0FBVyxDQUFDLG1CQUFtQjtRQUNwQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUE7SUFDakQsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxzQkFBc0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFlBQVksRUFBQyxhQUFhLEVBQUUsa0JBQWtCLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBQztRQUM3RCxJQUFJLENBQUMsa0JBQWtCO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1FBQ3hF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QUFDLENBQUE7UUFFRixPQUFPLFVBQVUsQ0FBQTtJQUNuQixDQUFDO0NBQ0Y7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLGNBQWM7SUFDcEQsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDakMsT0FBTyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUNoRCxDQUFDO0lBRUQsT0FBTyxHQUFHLGNBQWMsU0FBUyxDQUFBO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCIuLi90YWJsZS1kYXRhL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBBZGRDb2x1bW5BcmdzVHlwZSAqL1xuLyoqXG4gKiBDcmVhdGVUYWJsZUlkQXJnc1R5cGUgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IENyZWF0ZVRhYmxlSWRBcmdzVHlwZVxuICogQHByb3BlcnR5IHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gW2RlZmF1bHRdIC0gRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIElEIGNvbHVtbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdHlwZV0gLSBDb2x1bW4gdHlwZSBmb3IgdGhlIElEIGNvbHVtbi5cbiAqL1xuLyoqXG4gKiBDcmVhdGVUYWJsZUFyZ3NUeXBlIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDcmVhdGVUYWJsZUFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpZk5vdEV4aXN0c10gLSBTa2lwIGNyZWF0aW9uIGlmIHRoZSB0YWJsZSBhbHJlYWR5IGV4aXN0cy5cbiAqIEBwcm9wZXJ0eSB7Q3JlYXRlVGFibGVJZEFyZ3NUeXBlIHwgZmFsc2V9IFtpZF0gLSBJRCBjb2x1bW4gb3B0aW9ucyBvciBmYWxzZSB0byBza2lwIElELlxuICovXG4vKipcbiAqIENyZWF0ZVRhYmxlQ2FsbGJhY2tUeXBlIHR5cGUuXG4gKiBAdHlwZWRlZiB7KHRhYmxlOiBUYWJsZURhdGEpID0+IHZvaWR9IENyZWF0ZVRhYmxlQ2FsbGJhY2tUeXBlXG4gKi9cbi8qKlxuICogTGVnYWN5TG9jYWxEYXRlVGltZXNNaWdyYXRpb25BcmdzVHlwZSB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gTGVnYWN5TG9jYWxEYXRlVGltZXNNaWdyYXRpb25BcmdzVHlwZVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT59IFtjb2x1bW5zQnlUYWJsZV0gLSBFeHBsaWNpdCBkYXRldGltZSBjb2x1bW5zIGtleWVkIGJ5IHRhYmxlIG5hbWUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2xlZ2FjeUxvY2FsT2Zmc2V0TWludXRlc10gLSBVVEMtbWludXMtbG9jYWwgb2Zmc2V0IGluIG1pbnV0ZXMgZm9yIGxlZ2FjeSByb3dzLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW3RhYmxlc10gLSBUYWJsZXMgdG8gbWlncmF0ZS4gRGVmYXVsdHMgdG8gYWxsIG5vbi1pbnRlcm5hbCB0YWJsZXMuXG4gKi9cblxuaW1wb3J0IHsgY29udmVydExlZ2FjeURhdGVWYWx1ZVRvVXRjU3RvcmFnZSB9IGZyb20gXCIuLi9kYXRldGltZS1zdG9yYWdlLmpzXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uLy4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5pbXBvcnQgQ2hhbmdlVGFibGUgZnJvbSBcIi4vY2hhbmdlLXRhYmxlLmpzXCJcbmltcG9ydCBDcmVhdGVJbmRleEJhc2UgZnJvbSBcIi4uL3F1ZXJ5L2NyZWF0ZS1pbmRleC1iYXNlLmpzXCJcbmltcG9ydCBUYWJsZUNvbHVtbiBmcm9tIFwiLi4vdGFibGUtZGF0YS90YWJsZS1jb2x1bW4uanNcIlxuaW1wb3J0IFRhYmxlRGF0YSBmcm9tIFwiLi4vdGFibGUtZGF0YS9pbmRleC5qc1wiXG5pbXBvcnQgVGFibGVJbmRleCBmcm9tIFwiLi4vdGFibGUtZGF0YS90YWJsZS1pbmRleC5qc1wiXG5jbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuZXhwb3J0IHtOb3RJbXBsZW1lbnRlZEVycm9yfVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZU1pZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBSdW5zIG9uIGRhdGFiYXNlcy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gZGF0YWJhc2VJZGVudGlmaWVycyAtIERhdGFiYXNlIGlkZW50aWZpZXJzLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzdGF0aWMgb25EYXRhYmFzZXMoZGF0YWJhc2VJZGVudGlmaWVycykge1xuICAgIHRoaXMuX2RhdGFiYXNlSWRlbnRpZmllcnMgPSBkYXRhYmFzZUlkZW50aWZpZXJzXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgZGF0YWJhc2UgaWRlbnRpZmllcnMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXSB8IHVuZGVmaW5lZH0gLSBUaGUgZGF0YWJhc2UgaWRlbnRpZmllcnMuXG4gICAqL1xuICBzdGF0aWMgZ2V0RGF0YWJhc2VJZGVudGlmaWVycygpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YWJhc2VJZGVudGlmaWVyc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5kYXRhYmFzZUlkZW50aWZpZXIgLSBEYXRhYmFzZSBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBhcmdzLmRiIC0gRGF0YWJhc2UgY29ubmVjdGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCBkYXRhYmFzZUlkZW50aWZpZXIgPSBcImRlZmF1bHRcIiwgZGJ9KSB7XG4gICAgaWYgKCFkYXRhYmFzZUlkZW50aWZpZXIpIHRocm93IG5ldyBFcnJvcihcIk5vIGRhdGFiYXNlIGlkZW50aWZpZXIgZ2l2ZW5cIilcbiAgICBpZiAoIWRiKSB0aHJvdyBuZXcgRXJyb3IoXCJObyAnZGInIGdpdmVuXCIpXG5cbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5fZGF0YWJhc2VJZGVudGlmaWVyID0gZGF0YWJhc2VJZGVudGlmaWVyXG4gICAgdGhpcy5fZGIgPSBkYlxuICB9XG5cbiAgX2dldERhdGFiYXNlSWRlbnRpZmllcigpIHtcbiAgICBpZiAoIXRoaXMuX2RhdGFiYXNlSWRlbnRpZmllcikgdGhyb3cgbmV3IEVycm9yKFwiTm8gZGF0YWJhc2UgaWRlbnRpZmllciBzZXRcIilcblxuICAgIHJldHVybiB0aGlzLl9kYXRhYmFzZUlkZW50aWZpZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBkcml2ZXIuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gLSBUaGUgZHJpdmVyLlxuICAgKi9cbiAgZ2V0RHJpdmVyKCkgeyByZXR1cm4gdGhpcy5fZGIgfVxuICBjb25uZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5nZXREcml2ZXIoKSB9XG5cbiAgYXN5bmMgY2hhbmdlKCkge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKFwiJ2NoYW5nZScgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICBhc3luYyB1cCgpIHtcbiAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcihcIidjaGFuZ2UnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgYXN5bmMgZG93bigpIHtcbiAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcihcIidjaGFuZ2UnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZXhlY3V0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNxbCAtIFNRTCBzdHJpbmcuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5RdWVyeVJlc3VsdFR5cGU+fSAtIFJlc29sdmVzIHdpdGggdGhlIGV4ZWN1dGUuXG4gICAqL1xuICBhc3luYyBleGVjdXRlKHNxbCkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rpb24oKS5xdWVyeShzcWwpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBhZGQgY29sdW1uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbHVtbk5hbWUgLSBDb2x1bW4gbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbHVtblR5cGUgLSBDb2x1bW4gdHlwZS5cbiAgICogQHBhcmFtIHtBZGRDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBhZGRDb2x1bW4odGFibGVOYW1lLCBjb2x1bW5OYW1lLCBjb2x1bW5UeXBlLCBhcmdzKSB7XG4gICAgaWYgKCFjb2x1bW5UeXBlKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb2x1bW4gdHlwZSBnaXZlblwiKVxuXG4gICAgY29uc3QgdGFibGVDb2x1bW5BcmdzID0gT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IGNvbHVtblR5cGV9LCBhcmdzKVxuICAgIGNvbnN0IHRhYmxlRGF0YSA9IG5ldyBUYWJsZURhdGEodGFibGVOYW1lKVxuXG4gICAgdGFibGVEYXRhLmFkZENvbHVtbihjb2x1bW5OYW1lLCB0YWJsZUNvbHVtbkFyZ3MpXG5cbiAgICBjb25zdCBzcWxzID0gYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5hbHRlclRhYmxlU1FMcyh0YWJsZURhdGEpXG5cbiAgICBmb3IgKGNvbnN0IHNxbCBvZiBzcWxzKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldERyaXZlcigpLnF1ZXJ5KHNxbClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyByZW1vdmUgY29sdW1uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbHVtbk5hbWUgLSBDb2x1bW4gbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHJlbW92ZUNvbHVtbih0YWJsZU5hbWUsIGNvbHVtbk5hbWUpIHtcbiAgICBjb25zdCB0YWJsZUNvbHVtbkFyZ3MgPSBPYmplY3QuYXNzaWduKHtkcm9wQ29sdW1uOiB0cnVlfSlcbiAgICBjb25zdCB0YWJsZURhdGEgPSBuZXcgVGFibGVEYXRhKHRhYmxlTmFtZSlcblxuICAgIHRhYmxlRGF0YS5hZGRDb2x1bW4oY29sdW1uTmFtZSwgdGFibGVDb2x1bW5BcmdzKVxuXG4gICAgY29uc3Qgc3FscyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuYWx0ZXJUYWJsZVNRTHModGFibGVEYXRhKVxuXG4gICAgZm9yIChjb25zdCBzcWwgb2Ygc3Fscykge1xuICAgICAgYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5xdWVyeShzcWwpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZEluZGV4QXJnc1R5cGUgdHlwZS5cbiAgICogQHR5cGVkZWYge29iamVjdH0gQWRkSW5kZXhBcmdzVHlwZVxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpZk5vdEV4aXN0c10gLSBTa2lwIGNyZWF0aW9uIGlmIHRoZSBpbmRleCBhbHJlYWR5IGV4aXN0cy5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIEV4cGxpY2l0IGluZGV4IG5hbWUgdG8gdXNlLlxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFt1bmlxdWVdIC0gV2hldGhlciB0aGUgaW5kZXggc2hvdWxkIGJlIHVuaXF1ZS5cbiAgICovXG4gIC8qKlxuICAgKiBSdW5zIGFkZCBpbmRleC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgQXJyYXk8c3RyaW5nIHwgaW1wb3J0KFwiLi4vdGFibGUtZGF0YS90YWJsZS1jb2x1bW4uanNcIikuZGVmYXVsdD59IGNvbHVtbnMgLSBDb2x1bW4gbmFtZSBvciBhcnJheSBvZiBjb2x1bW4gbmFtZXMuXG4gICAqIEBwYXJhbSB7QWRkSW5kZXhBcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBhZGRJbmRleCh0YWJsZU5hbWUsIGNvbHVtbnMsIGFyZ3MpIHtcbiAgICBjb25zdCBub3JtYWxpemVkQ29sdW1ucyA9IHR5cGVvZiBjb2x1bW5zID09PSBcInN0cmluZ1wiID8gW2NvbHVtbnNdIDogY29sdW1uc1xuICAgIGNvbnN0IGNyZWF0ZUluZGV4QXJncyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7XG4gICAgICAgIGNvbHVtbnM6IG5vcm1hbGl6ZWRDb2x1bW5zLFxuICAgICAgICB0YWJsZU5hbWVcbiAgICAgIH0sXG4gICAgICBhcmdzXG4gICAgKVxuICAgIGNvbnN0IHNxbHMgPSBhd2FpdCB0aGlzLmdldERyaXZlcigpLmNyZWF0ZUluZGV4U1FMcyhjcmVhdGVJbmRleEFyZ3MpXG5cbiAgICBmb3IgKGNvbnN0IHNxbCBvZiBzcWxzKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldERyaXZlcigpLnF1ZXJ5KHNxbClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlSW5kZXhBcmdzVHlwZSB0eXBlLlxuICAgKiBAdHlwZWRlZiB7b2JqZWN0fSBSZW1vdmVJbmRleEFyZ3NUeXBlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbmFtZV0gLSBFeHBsaWNpdCBpbmRleCBuYW1lIHRvIHJlbW92ZS5cbiAgICovXG4gIC8qKlxuICAgKiBSdW5zIHJlbW92ZSBpbmRleC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgQXJyYXk8c3RyaW5nIHwgaW1wb3J0KFwiLi4vdGFibGUtZGF0YS90YWJsZS1jb2x1bW4uanNcIikuZGVmYXVsdD59IG5hbWVPckNvbHVtbnMgLSBJbmRleCBuYW1lIG9yIGNvbHVtbnMgd2hvc2UgZGVmYXVsdCBhZGRJbmRleCBuYW1lIHNob3VsZCBiZSByZW1vdmVkLlxuICAgKiBAcGFyYW0ge1JlbW92ZUluZGV4QXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlSW5kZXgodGFibGVOYW1lLCBuYW1lT3JDb2x1bW5zLCBhcmdzID0ge30pIHtcbiAgICBjb25zdCB7bmFtZSwgLi4ucmVzdEFyZ3N9ID0gYXJnc1xuXG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGNvbnN0IHJlbW92ZUluZGV4TmFtZSA9IG5hbWUgfHwgdGhpcy5fcmVtb3ZlSW5kZXhOYW1lKHRhYmxlTmFtZSwgbmFtZU9yQ29sdW1ucylcbiAgICBjb25zdCBzcWxzID0gYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5yZW1vdmVJbmRleFNRTHMoe25hbWU6IHJlbW92ZUluZGV4TmFtZSwgdGFibGVOYW1lfSlcblxuICAgIGZvciAoY29uc3Qgc3FsIG9mIHNxbHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkucXVlcnkoc3FsKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHJlbW92ZSBpbmRleCBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBBcnJheTxzdHJpbmcgfCBpbXBvcnQoXCIuLi90YWJsZS1kYXRhL3RhYmxlLWNvbHVtbi5qc1wiKS5kZWZhdWx0Pn0gbmFtZU9yQ29sdW1ucyAtIEluZGV4IG5hbWUgb3IgY29sdW1ucy5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgaW5kZXggbmFtZS5cbiAgICovXG4gIF9yZW1vdmVJbmRleE5hbWUodGFibGVOYW1lLCBuYW1lT3JDb2x1bW5zKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lT3JDb2x1bW5zID09PSBcInN0cmluZ1wiKSByZXR1cm4gbmFtZU9yQ29sdW1uc1xuXG4gICAgY29uc3QgY3JlYXRlSW5kZXggPSBuZXcgQ3JlYXRlSW5kZXhCYXNlKHtcbiAgICAgIGNvbHVtbnM6IG5hbWVPckNvbHVtbnMsXG4gICAgICBkcml2ZXI6IHRoaXMuZ2V0RHJpdmVyKCksXG4gICAgICB0YWJsZU5hbWVcbiAgICB9KVxuXG4gICAgcmV0dXJuIGNyZWF0ZUluZGV4LmdlbmVyYXRlSW5kZXhOYW1lKClcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRGb3JlaWduS2V5QXJnc1R5cGUgdHlwZS5cbiAgICogQHR5cGVkZWYge29iamVjdH0gQWRkRm9yZWlnbktleUFyZ3NUeXBlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29sdW1uTmFtZV0gLSBPdmVycmlkZSB0aGUgZGVyaXZlZCBGSyBjb2x1bW4gbmFtZSAoZGVmYXVsdDogYCR7cmVmZXJlbmNlX3VuZGVyc2NvcmVkfV9pZGApLlxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIC0gT3ZlcnJpZGUgdGhlIGRlcml2ZWQgY29uc3RyYWludCBuYW1lIChkZWZhdWx0OiBgZmtfJHt0YWJsZU5hbWV9XyR7cmVmZXJlbmNlTmFtZX1gKS5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZWZlcmVuY2VkQ29sdW1uTmFtZV0gLSBPdmVycmlkZSB0aGUgcmVmZXJlbmNlZCBjb2x1bW4gbmFtZSAoZGVmYXVsdDogYGlkYCkuXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcmVmZXJlbmNlZFRhYmxlTmFtZV0gLSBPdmVycmlkZSB0aGUgZGVyaXZlZCByZWZlcmVuY2VkIHRhYmxlIChkZWZhdWx0OiBwbHVyYWxpemVkIGByZWZlcmVuY2VOYW1lYCkuXG4gICAqL1xuICAvKipcbiAgICogUnVucyBhZGQgZm9yZWlnbiBrZXkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSB0aGUgRksgbGl2ZXMgb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZlcmVuY2VOYW1lIC0gU2luZ3VsYXIgcmVmZXJlbmNlIG5hbWUuIERlZmF1bHRzIGRlcml2ZVxuICAgKiAgIHRoZSBGSyBjb2x1bW4gYXMgYCR7cmVmZXJlbmNlfV9pZGAsIHRoZSByZWZlcmVuY2VkIHRhYmxlIGJ5IHBsdXJhbGl6aW5nXG4gICAqICAgdGhlIHJlZmVyZW5jZSwgdGhlIHJlZmVyZW5jZWQgY29sdW1uIGFzIGBpZGAsIGFuZCB0aGUgY29uc3RyYWludCBuYW1lXG4gICAqICAgYXMgYGZrXyR7dGFibGVOYW1lfV8ke3JlZmVyZW5jZU5hbWV9YC4gT3ZlcnJpZGUgYW55IG9mIHRob3NlIHZpYSBgYXJnc2BcbiAgICogICB3aGVuIHRoZSBzY2hlbWEgZG9lc24ndCBmb2xsb3cgdGhlIGNvbnZlbnRpb24uXG4gICAqIEBwYXJhbSB7QWRkRm9yZWlnbktleUFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25hbCBvdmVycmlkZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBhZGRGb3JlaWduS2V5KHRhYmxlTmFtZSwgcmVmZXJlbmNlTmFtZSwgYXJncyA9IHt9KSB7XG4gICAgY29uc3Qge2NvbHVtbk5hbWUsIG5hbWUsIHJlZmVyZW5jZWRDb2x1bW5OYW1lLCByZWZlcmVuY2VkVGFibGVOYW1lLCAuLi5yZXN0QXJnc30gPSBhcmdzXG5cbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgY29uc3QgcmVmZXJlbmNlTmFtZVVuZGVyc2NvcmUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUocmVmZXJlbmNlTmFtZSlcbiAgICBjb25zdCByZXNvbHZlZFJlZmVyZW5jZWRUYWJsZU5hbWUgPSByZWZlcmVuY2VkVGFibGVOYW1lIHx8IGluZmxlY3Rpb24ucGx1cmFsaXplKHJlZmVyZW5jZU5hbWVVbmRlcnNjb3JlKVxuICAgIGNvbnN0IHJlc29sdmVkQ29sdW1uTmFtZSA9IGNvbHVtbk5hbWUgfHwgYCR7cmVmZXJlbmNlTmFtZVVuZGVyc2NvcmV9X2lkYFxuICAgIGNvbnN0IHJlc29sdmVkUmVmZXJlbmNlZENvbHVtbk5hbWUgPSByZWZlcmVuY2VkQ29sdW1uTmFtZSB8fCBcImlkXCJcbiAgICBjb25zdCByZXNvbHZlZE5hbWUgPSBuYW1lIHx8IGBma18ke3RhYmxlTmFtZX1fJHtyZWZlcmVuY2VOYW1lfWBcblxuICAgIGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuYWRkRm9yZWlnbktleShcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIHJlc29sdmVkQ29sdW1uTmFtZSxcbiAgICAgIHJlc29sdmVkUmVmZXJlbmNlZFRhYmxlTmFtZSxcbiAgICAgIHJlc29sdmVkUmVmZXJlbmNlZENvbHVtbk5hbWUsXG4gICAgICB7XG4gICAgICAgIGlzTmV3Rm9yZWlnbktleTogdHJ1ZSxcbiAgICAgICAgbmFtZTogcmVzb2x2ZWROYW1lXG4gICAgICB9XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZUZvcmVpZ25LZXlBcmdzVHlwZSB0eXBlLlxuICAgKiBAdHlwZWRlZiB7b2JqZWN0fSBSZW1vdmVGb3JlaWduS2V5QXJnc1R5cGVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtjb2x1bW5OYW1lXSAtIE92ZXJyaWRlIHRoZSBkZXJpdmVkIGZvcmVpZ24ta2V5IGNvbHVtbiBuYW1lLlxuICAgKi9cbiAgLyoqXG4gICAqIFJ1bnMgcmVtb3ZlIGZvcmVpZ24ga2V5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgdGhlIGZvcmVpZ24ga2V5IGxpdmVzIG9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmZXJlbmNlTmFtZSAtIFNpbmd1bGFyIHJlZmVyZW5jZSBuYW1lIHVzZWQgdG8gZGVyaXZlIHRoZSBGSyBjb2x1bW4uXG4gICAqIEBwYXJhbSB7UmVtb3ZlRm9yZWlnbktleUFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25hbCBvdmVycmlkZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyByZW1vdmVGb3JlaWduS2V5KHRhYmxlTmFtZSwgcmVmZXJlbmNlTmFtZSwgYXJncyA9IHt9KSB7XG4gICAgY29uc3Qge2NvbHVtbk5hbWUsIC4uLnJlc3RBcmdzfSA9IGFyZ3NcblxuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBjb25zdCByZXNvbHZlZENvbHVtbk5hbWUgPSBjb2x1bW5OYW1lIHx8IGAke2luZmxlY3Rpb24udW5kZXJzY29yZShyZWZlcmVuY2VOYW1lKX1faWRgXG4gICAgY29uc3QgZHJpdmVyID0gdGhpcy5nZXREcml2ZXIoKVxuICAgIGxldCBtYXhpbXVtUmVtb3ZhbHMgPSAwXG4gICAgbGV0IHByZXZpb3VzTWF0Y2hpbmdDb3VudCA9IDBcblxuICAgIGZvciAobGV0IHJlbW92YWxBdHRlbXB0ID0gMDsgOyByZW1vdmFsQXR0ZW1wdCsrKSB7XG4gICAgICBjb25zdCB0YWJsZSA9IGF3YWl0IGRyaXZlci5nZXRUYWJsZUJ5TmFtZSh0YWJsZU5hbWUpXG5cbiAgICAgIGlmICghdGFibGUpIHRocm93IG5ldyBFcnJvcihgVGFibGUgJHt0YWJsZU5hbWV9IGRvZXMgbm90IGV4aXN0YClcblxuICAgICAgY29uc3QgZm9yZWlnbktleXMgPSBhd2FpdCB0YWJsZS5nZXRGb3JlaWduS2V5cygpXG4gICAgICBjb25zdCBtYXRjaGluZ0ZvcmVpZ25LZXlzID0gZm9yZWlnbktleXMuZmlsdGVyKChmb3JlaWduS2V5KSA9PiBmb3JlaWduS2V5LmdldENvbHVtbk5hbWUoKSA9PSByZXNvbHZlZENvbHVtbk5hbWUpXG5cbiAgICAgIGlmIChtYXRjaGluZ0ZvcmVpZ25LZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAocmVtb3ZhbEF0dGVtcHQgPT09IDApIHRocm93IG5ldyBFcnJvcihgTm8gZm9yZWlnbiBrZXkgb24gJHt0YWJsZU5hbWV9LiR7cmVzb2x2ZWRDb2x1bW5OYW1lfWApXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChyZW1vdmFsQXR0ZW1wdCA9PT0gMCkge1xuICAgICAgICBtYXhpbXVtUmVtb3ZhbHMgPSBtYXRjaGluZ0ZvcmVpZ25LZXlzLmxlbmd0aFxuICAgICAgfSBlbHNlIGlmIChtYXRjaGluZ0ZvcmVpZ25LZXlzLmxlbmd0aCA+PSBwcmV2aW91c01hdGNoaW5nQ291bnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3JlaWduIGtleSByZW1vdmFsIGRpZCBub3QgcmVkdWNlIG1hdGNoZXMgb24gJHt0YWJsZU5hbWV9LiR7cmVzb2x2ZWRDb2x1bW5OYW1lfWApXG4gICAgICB9XG5cbiAgICAgIGlmIChyZW1vdmFsQXR0ZW1wdCA+PSBtYXhpbXVtUmVtb3ZhbHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3JlaWduIGtleSByZW1vdmFsIGV4Y2VlZGVkIGV4cGVjdGVkIG1hdGNoZXMgb24gJHt0YWJsZU5hbWV9LiR7cmVzb2x2ZWRDb2x1bW5OYW1lfWApXG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzTWF0Y2hpbmdDb3VudCA9IG1hdGNoaW5nRm9yZWlnbktleXMubGVuZ3RoXG4gICAgICBhd2FpdCBkcml2ZXIucmVtb3ZlRm9yZWlnbktleSh0YWJsZU5hbWUsIG1hdGNoaW5nRm9yZWlnbktleXNbMF0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYWRkIHJlZmVyZW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZlcmVuY2VOYW1lIC0gUmVmZXJlbmNlIG5hbWUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuZm9yZWlnbktleV0gLSBXaGV0aGVyIGZvcmVpZ24ga2V5LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLm51bGxdIC0gV2hldGhlciBudWxsYWJsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnR5cGVdIC0gVHlwZSBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLnVuaXF1ZV0gLSBXaGV0aGVyIHVuaXF1ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGFkZFJlZmVyZW5jZSh0YWJsZU5hbWUsIHJlZmVyZW5jZU5hbWUsIGFyZ3MpIHtcbiAgICBjb25zdCB7Zm9yZWlnbktleSwgbnVsbDogbnVsbGFibGUsIHR5cGUsIHVuaXF1ZSwgLi4ucmVzdEFyZ3N9ID0gYXJnc1xuICAgIGNvbnN0IGNvbHVtbk5hbWUgPSBgJHtpbmZsZWN0aW9uLnVuZGVyc2NvcmUocmVmZXJlbmNlTmFtZSl9X2lkYFxuXG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGNvbnN0IGNvbHVtblR5cGUgPSB0eXBlIHx8IFwiaW50ZWdlclwiXG4gICAgY29uc3QgY29sdW1uQXJncyA9IG51bGxhYmxlICE9PSB1bmRlZmluZWQgPyB7bnVsbDogbnVsbGFibGV9IDogdW5kZWZpbmVkXG5cbiAgICBhd2FpdCB0aGlzLmFkZENvbHVtbih0YWJsZU5hbWUsIGNvbHVtbk5hbWUsIGNvbHVtblR5cGUsIGNvbHVtbkFyZ3MpXG4gICAgYXdhaXQgdGhpcy5hZGRJbmRleCh0YWJsZU5hbWUsIFtjb2x1bW5OYW1lXSwge3VuaXF1ZTogdW5pcXVlfSlcblxuICAgIGlmIChmb3JlaWduS2V5KSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZEZvcmVpZ25LZXkodGFibGVOYW1lLCByZWZlcmVuY2VOYW1lKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVSZWZlcmVuY2VBcmdzVHlwZSB0eXBlLlxuICAgKiBAdHlwZWRlZiB7b2JqZWN0fSBSZW1vdmVSZWZlcmVuY2VBcmdzVHlwZVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gW2NvbHVtbk5hbWVdIC0gT3ZlcnJpZGUgdGhlIGRlcml2ZWQgcmVmZXJlbmNlIGNvbHVtbiBuYW1lLlxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gW2luZGV4TmFtZV0gLSBFeHBsaWNpdCBnZW5lcmF0ZWQgaW5kZXggbmFtZSB0byByZW1vdmUuXG4gICAqL1xuICAvKipcbiAgICogUnVucyByZW1vdmUgcmVmZXJlbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZmVyZW5jZU5hbWUgLSBSZWZlcmVuY2UgbmFtZS5cbiAgICogQHBhcmFtIHtSZW1vdmVSZWZlcmVuY2VBcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9uYWwgb3ZlcnJpZGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlUmVmZXJlbmNlKHRhYmxlTmFtZSwgcmVmZXJlbmNlTmFtZSwgYXJncyA9IHt9KSB7XG4gICAgY29uc3Qge2NvbHVtbk5hbWUsIGluZGV4TmFtZSwgLi4ucmVzdEFyZ3N9ID0gYXJnc1xuXG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGNvbnN0IHJlc29sdmVkQ29sdW1uTmFtZSA9IGNvbHVtbk5hbWUgfHwgYCR7aW5mbGVjdGlvbi51bmRlcnNjb3JlKHJlZmVyZW5jZU5hbWUpfV9pZGBcbiAgICBjb25zdCBkcml2ZXIgPSB0aGlzLmdldERyaXZlcigpXG4gICAgY29uc3QgdGFibGUgPSBhd2FpdCBkcml2ZXIuZ2V0VGFibGVCeU5hbWUodGFibGVOYW1lKVxuXG4gICAgaWYgKCF0YWJsZSkgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSAke3RhYmxlTmFtZX0gZG9lcyBub3QgZXhpc3RgKVxuXG4gICAgY29uc3QgZm9yZWlnbktleXMgPSBhd2FpdCB0YWJsZS5nZXRGb3JlaWduS2V5cygpXG5cbiAgICBmb3IgKGNvbnN0IGZvcmVpZ25LZXkgb2YgZm9yZWlnbktleXMpIHtcbiAgICAgIGlmIChmb3JlaWduS2V5LmdldENvbHVtbk5hbWUoKSAhPSByZXNvbHZlZENvbHVtbk5hbWUpIGNvbnRpbnVlXG5cbiAgICAgIGF3YWl0IGRyaXZlci5yZW1vdmVGb3JlaWduS2V5KHRhYmxlTmFtZSwgZm9yZWlnbktleSlcbiAgICB9XG5cbiAgICBjb25zdCBleHBlY3RlZEluZGV4TmFtZSA9IGluZGV4TmFtZSB8fCB0aGlzLl9yZW1vdmVJbmRleE5hbWUodGFibGVOYW1lLCBbcmVzb2x2ZWRDb2x1bW5OYW1lXSlcbiAgICBjb25zdCBpbmRleGVzID0gYXdhaXQgdGFibGUuZ2V0SW5kZXhlcygpXG4gICAgY29uc3QgZ2VuZXJhdGVkSW5kZXggPSBpbmRleGVzLmZpbmQoKGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpbmRleENvbHVtbk5hbWVzID0gaW5kZXguZ2V0Q29sdW1uTmFtZXMoKVxuXG4gICAgICByZXR1cm4gIWluZGV4LmlzUHJpbWFyeUtleSgpICYmXG4gICAgICAgIGluZGV4LmdldE5hbWUoKSA9PSBleHBlY3RlZEluZGV4TmFtZSAmJlxuICAgICAgICBpbmRleENvbHVtbk5hbWVzLmxlbmd0aCA9PSAxICYmXG4gICAgICAgIGluZGV4Q29sdW1uTmFtZXNbMF0gPT0gcmVzb2x2ZWRDb2x1bW5OYW1lXG4gICAgfSlcblxuICAgIGlmIChnZW5lcmF0ZWRJbmRleCkge1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdmVJbmRleCh0YWJsZU5hbWUsIGdlbmVyYXRlZEluZGV4LmdldE5hbWUoKSlcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnJlbW92ZUNvbHVtbih0YWJsZU5hbWUsIHJlc29sdmVkQ29sdW1uTmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNoYW5nZSBjb2x1bW4gbnVsbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2x1bW5OYW1lIC0gQ29sdW1uIG5hbWUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbnVsbGFibGUgLSBXaGV0aGVyIG51bGxhYmxlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgY2hhbmdlQ29sdW1uTnVsbCh0YWJsZU5hbWUsIGNvbHVtbk5hbWUsIG51bGxhYmxlKSB7XG4gICAgY29uc3QgdGFibGUgPSBhd2FpdCB0aGlzLmdldERyaXZlcigpLmdldFRhYmxlQnlOYW1lKHRhYmxlTmFtZSlcblxuICAgIGlmICghdGFibGUpIHRocm93IG5ldyBFcnJvcihgVGFibGUgJHt0YWJsZU5hbWV9IGRvZXMgbm90IGV4aXN0YClcblxuICAgIGNvbnN0IGNvbHVtbiA9IGF3YWl0IHRhYmxlLmdldENvbHVtbkJ5TmFtZShjb2x1bW5OYW1lKVxuXG4gICAgaWYgKCFjb2x1bW4pIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICR7Y29sdW1uTmFtZX0gZG9lcyBub3QgZXhpc3QgaW4gdGFibGUgJHt0YWJsZU5hbWV9YClcblxuICAgIGF3YWl0IGNvbHVtbi5jaGFuZ2VOdWxsYWJsZShudWxsYWJsZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBNaWdyYXRlcyBsZWdhY3kgdGltZXpvbmUtbGVzcyBsb2NhbCBkYXRldGltZSByb3dzIGludG8gVVRDIGRhdGV0aW1lIHN0b3JhZ2UuXG4gICAqIE5ldyBTUUxpdGUgVVRDIHJvd3MgaW5jbHVkZSBhIHRpbWV6b25lIHN1ZmZpeCBhbmQgYXJlIHNraXBwZWQuXG4gICAqIEBwYXJhbSB7TGVnYWN5TG9jYWxEYXRlVGltZXNNaWdyYXRpb25BcmdzVHlwZX0gW2FyZ3NdIC0gTWlncmF0aW9uIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBtaWdyYXRlTGVnYWN5TG9jYWxEYXRlVGltZXNUb1V0Y1N0b3JhZ2UoYXJncyA9IHt9KSB7XG4gICAgY29uc3Qge2NvbHVtbnNCeVRhYmxlLCBsZWdhY3lMb2NhbE9mZnNldE1pbnV0ZXMsIHRhYmxlcywgLi4ucmVzdEFyZ3N9ID0gYXJnc1xuXG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGNvbnN0IHRhYmxlTmFtZXMgPSBhd2FpdCB0aGlzLl9sZWdhY3lMb2NhbERhdGVUaW1lc1RhYmxlTmFtZXModGFibGVzKVxuXG4gICAgZm9yIChjb25zdCB0YWJsZU5hbWUgb2YgdGFibGVOYW1lcykge1xuICAgICAgYXdhaXQgdGhpcy5fbWlncmF0ZUxlZ2FjeUxvY2FsRGF0ZVRpbWVzVGFibGUoe1xuICAgICAgICBjb2x1bW5zQnlUYWJsZSxcbiAgICAgICAgbGVnYWN5TG9jYWxPZmZzZXRNaW51dGVzLFxuICAgICAgICB0YWJsZU5hbWVcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRhYmxlIG5hbWVzIGZvciBhIGxlZ2FjeSBsb2NhbCBkYXRldGltZSBtaWdyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCB1bmRlZmluZWR9IHRhYmxlcyAtIEV4cGxpY2l0IHRhYmxlIG5hbWVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmdbXT59IC0gVGFibGUgbmFtZXMuXG4gICAqL1xuICBhc3luYyBfbGVnYWN5TG9jYWxEYXRlVGltZXNUYWJsZU5hbWVzKHRhYmxlcykge1xuICAgIGlmICh0YWJsZXMpIHJldHVybiB0YWJsZXNcblxuICAgIHJldHVybiAoYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5nZXRUYWJsZXMoKSlcbiAgICAgIC5tYXAoKHRhYmxlKSA9PiB0YWJsZS5nZXROYW1lKCkpXG4gICAgICAuZmlsdGVyKCh0YWJsZU5hbWUpID0+IHRhYmxlTmFtZSAhPSBcInNjaGVtYV9taWdyYXRpb25zXCIgJiYgIXRhYmxlTmFtZS5zdGFydHNXaXRoKFwic3FsaXRlX1wiKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBNaWdyYXRlcyBvbmUgdGFibGUncyBsZWdhY3kgbG9jYWwgZGF0ZXRpbWUgdmFsdWVzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHwgdW5kZWZpbmVkfSBhcmdzLmNvbHVtbnNCeVRhYmxlIC0gRXhwbGljaXQgY29sdW1ucyBrZXllZCBieSB0YWJsZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGFyZ3MubGVnYWN5TG9jYWxPZmZzZXRNaW51dGVzIC0gVVRDLW1pbnVzLWxvY2FsIG9mZnNldCBpbiBtaW51dGVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy50YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgX21pZ3JhdGVMZWdhY3lMb2NhbERhdGVUaW1lc1RhYmxlKHtjb2x1bW5zQnlUYWJsZSwgbGVnYWN5TG9jYWxPZmZzZXRNaW51dGVzLCB0YWJsZU5hbWV9KSB7XG4gICAgY29uc3QgZHJpdmVyID0gdGhpcy5nZXREcml2ZXIoKVxuICAgIGNvbnN0IHRhYmxlID0gYXdhaXQgZHJpdmVyLmdldFRhYmxlQnlOYW1lT3JGYWlsKHRhYmxlTmFtZSlcbiAgICBjb25zdCBjb2x1bW5zID0gYXdhaXQgdGhpcy5fbGVnYWN5TG9jYWxEYXRlVGltZXNDb2x1bW5zKHtjb2x1bW5zQnlUYWJsZSwgdGFibGV9KVxuXG4gICAgaWYgKGNvbHVtbnMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICAgIGNvbnN0IHByaW1hcnlLZXlDb2x1bW4gPSBhd2FpdCB0aGlzLl9sZWdhY3lMb2NhbERhdGVUaW1lc1ByaW1hcnlLZXkodGFibGUpXG4gICAgY29uc3Qgc2VsZWN0ZWRDb2x1bW5zID0gW3ByaW1hcnlLZXlDb2x1bW4sIC4uLmNvbHVtbnNdXG4gICAgY29uc3Qgc2VsZWN0U3FsID0gc2VsZWN0ZWRDb2x1bW5zXG4gICAgICAubWFwKChjb2x1bW5OYW1lKSA9PiBkcml2ZXIucXVvdGVDb2x1bW4oY29sdW1uTmFtZSkpXG4gICAgICAuam9pbihcIiwgXCIpXG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IGRyaXZlci5xdWVyeShgU0VMRUNUICR7c2VsZWN0U3FsfSBGUk9NICR7ZHJpdmVyLnF1b3RlVGFibGUodGFibGVOYW1lKX1gKVxuXG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgZm9yIChjb25zdCBjb2x1bW5OYW1lIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uTmFtZV1cbiAgICAgICAgY29uc3QgY29udmVydGVkVmFsdWUgPSBjb252ZXJ0TGVnYWN5RGF0ZVZhbHVlVG9VdGNTdG9yYWdlKHZhbHVlLCB7XG4gICAgICAgICAgZGF0YWJhc2VUeXBlOiBkcml2ZXIuZ2V0VHlwZSgpLFxuICAgICAgICAgIGxlZ2FjeUxvY2FsT2Zmc2V0TWludXRlc1xuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChjb252ZXJ0ZWRWYWx1ZSA9PT0gdmFsdWUpIGNvbnRpbnVlXG5cbiAgICAgICAgYXdhaXQgZHJpdmVyLnF1ZXJ5KGBcbiAgICAgICAgICBVUERBVEUgJHtkcml2ZXIucXVvdGVUYWJsZSh0YWJsZU5hbWUpfVxuICAgICAgICAgIFNFVCAke2RyaXZlci5xdW90ZUNvbHVtbihjb2x1bW5OYW1lKX0gPSAke2RyaXZlci5xdW90ZShjb252ZXJ0ZWRWYWx1ZSl9XG4gICAgICAgICAgV0hFUkUgJHtkcml2ZXIucXVvdGVDb2x1bW4ocHJpbWFyeUtleUNvbHVtbil9ID0gJHtkcml2ZXIucXVvdGUocm93W3ByaW1hcnlLZXlDb2x1bW5dKX1cbiAgICAgICAgYClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgZGF0ZS1saWtlIGNvbHVtbnMgZm9yIG9uZSB0YWJsZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiB8IHVuZGVmaW5lZH0gYXJncy5jb2x1bW5zQnlUYWJsZSAtIEV4cGxpY2l0IGNvbHVtbnMga2V5ZWQgYnkgdGFibGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLXRhYmxlLmpzXCIpLmRlZmF1bHR9IGFyZ3MudGFibGUgLSBUYWJsZSBtZXRhZGF0YS5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fSAtIERhdGUtbGlrZSBjb2x1bW4gbmFtZXMuXG4gICAqL1xuICBhc3luYyBfbGVnYWN5TG9jYWxEYXRlVGltZXNDb2x1bW5zKHtjb2x1bW5zQnlUYWJsZSwgdGFibGV9KSB7XG4gICAgY29uc3QgZXhwbGljaXRDb2x1bW5zID0gY29sdW1uc0J5VGFibGU/Llt0YWJsZS5nZXROYW1lKCldXG5cbiAgICBpZiAoZXhwbGljaXRDb2x1bW5zKSByZXR1cm4gZXhwbGljaXRDb2x1bW5zXG5cbiAgICByZXR1cm4gKGF3YWl0IHRhYmxlLmdldENvbHVtbnMoKSlcbiAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gdGhpcy5fbGVnYWN5TG9jYWxEYXRlVGltZXNDb2x1bW5Jc0RhdGVMaWtlKGNvbHVtbikpXG4gICAgICAubWFwKChjb2x1bW4pID0+IGNvbHVtbi5nZXROYW1lKCkpXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYSBjb2x1bW4gc2hvdWxkIGJlIGluY2x1ZGVkIGJ5IGRlZmF1bHQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLWNvbHVtbi5qc1wiKS5kZWZhdWx0fSBjb2x1bW4gLSBDb2x1bW4gbWV0YWRhdGEuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhlIGNvbHVtbiBpcyBkYXRlLWxpa2UuXG4gICAqL1xuICBfbGVnYWN5TG9jYWxEYXRlVGltZXNDb2x1bW5Jc0RhdGVMaWtlKGNvbHVtbikge1xuICAgIGNvbnN0IGNvbHVtblR5cGUgPSBjb2x1bW4uZ2V0VHlwZSgpLnRvTG93ZXJDYXNlKClcblxuICAgIHJldHVybiBjb2x1bW5UeXBlLmluY2x1ZGVzKFwiZGF0ZVwiKSB8fCBjb2x1bW5UeXBlLmluY2x1ZGVzKFwidGltZXN0YW1wXCIpXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIHNpbmdsZSBwcmltYXJ5IGtleSBjb2x1bW4gZm9yIHJvdyB1cGRhdGVzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS10YWJsZS5qc1wiKS5kZWZhdWx0fSB0YWJsZSAtIFRhYmxlIG1ldGFkYXRhLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAtIFByaW1hcnkga2V5IGNvbHVtbiBuYW1lLlxuICAgKi9cbiAgYXN5bmMgX2xlZ2FjeUxvY2FsRGF0ZVRpbWVzUHJpbWFyeUtleSh0YWJsZSkge1xuICAgIGNvbnN0IHByaW1hcnlLZXlDb2x1bW5zID0gKGF3YWl0IHRhYmxlLmdldENvbHVtbnMoKSkuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5nZXRQcmltYXJ5S2V5KCkpXG5cbiAgICBpZiAocHJpbWFyeUtleUNvbHVtbnMubGVuZ3RoICE9IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcHJpbWFyeSBrZXkgb24gJHt0YWJsZS5nZXROYW1lKCl9IGJ1dCBmb3VuZCAke3ByaW1hcnlLZXlDb2x1bW5zLmxlbmd0aH1gKVxuICAgIH1cblxuICAgIHJldHVybiBwcmltYXJ5S2V5Q29sdW1uc1swXS5nZXROYW1lKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNvbHVtbiBleGlzdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uTmFtZSAtIENvbHVtbiBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBSZXNvbHZlcyB3aXRoIFdoZXRoZXIgY29sdW1uIGV4aXN0cy5cbiAgICovXG4gIGFzeW5jIGNvbHVtbkV4aXN0cyh0YWJsZU5hbWUsIGNvbHVtbk5hbWUpIHtcbiAgICBjb25zdCB0YWJsZSA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuZ2V0VGFibGVCeU5hbWUodGFibGVOYW1lKVxuXG4gICAgaWYgKHRhYmxlKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBhd2FpdCB0YWJsZS5nZXRDb2x1bW5CeU5hbWUoY29sdW1uTmFtZSlcblxuICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBCb29sZWFuKGZhbHNlKVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGFuIGluZGV4IHdpdGggdGhlIGdpdmVuIG5hbWUgZXhpc3RzIG9uIGEgdGFibGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaW5kZXhOYW1lIC0gSW5kZXggbmFtZSB0byBsb29rIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciB0aGUgaW5kZXggZXhpc3RzIG9uIHRoZSB0YWJsZS5cbiAgICovXG4gIGFzeW5jIGluZGV4RXhpc3RzKHRhYmxlTmFtZSwgaW5kZXhOYW1lKSB7XG4gICAgY29uc3QgdGFibGUgPSBhd2FpdCB0aGlzLmdldERyaXZlcigpLmdldFRhYmxlQnlOYW1lKHRhYmxlTmFtZSwge3Rocm93RXJyb3I6IGZhbHNlfSlcblxuICAgIGlmICh0YWJsZSkge1xuICAgICAgZm9yIChjb25zdCBpbmRleCBvZiBhd2FpdCB0YWJsZS5nZXRJbmRleGVzKCkpIHtcbiAgICAgICAgaWYgKGluZGV4LmdldE5hbWUoKSA9PSBpbmRleE5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgZGF0YWJhc2Ugc2NoZW1hIGZvciBhIGdhcC1sZXNzIHBvc2l0aW9uYWwgbGlzdC4gQWRkcyB0aGVcbiAgICogcG9zaXRpb24gY29sdW1uIChJTlQgTk9UIE5VTEwpIGlmIGFic2VudCBhbmQgY3JlYXRlcyBhIFVOSVFVRSBpbmRleCBvblxuICAgKiAoc2NvcGUsIHBvc2l0aW9uKS4gVGhpcyBpcyB0aGUgc2NoZW1hLXNpZGUgY291bnRlcnBhcnQgb2ZcbiAgICogYE1vZGVsLmFjdHNBc0xpc3QoKWAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcG9zaXRpb25Db2x1bW4gLSBDb2x1bW4gbmFtZSBmb3IgdGhlIHBvc2l0aW9uIChlLmcuIFwicm93X251bWJlclwiKS5cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5zY29wZSAtIENvbHVtbiBuYW1lIGZvciB0aGUgc2NvcGUgKGUuZy4gXCJib2FyZF9jb2x1bW5faWRcIikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgYWRkQWN0c0FzTGlzdCh0YWJsZU5hbWUsIHBvc2l0aW9uQ29sdW1uLCB7c2NvcGV9KSB7XG4gICAgaWYgKCEoYXdhaXQgdGhpcy5jb2x1bW5FeGlzdHModGFibGVOYW1lLCBwb3NpdGlvbkNvbHVtbikpKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZENvbHVtbih0YWJsZU5hbWUsIHBvc2l0aW9uQ29sdW1uLCBcImludGVnZXJcIiwge251bGw6IGZhbHNlfSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5jaGFuZ2VDb2x1bW5OdWxsKHRhYmxlTmFtZSwgcG9zaXRpb25Db2x1bW4sIGZhbHNlKVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuYWRkSW5kZXgodGFibGVOYW1lLCBbc2NvcGUsIHBvc2l0aW9uQ29sdW1uXSwge3VuaXF1ZTogdHJ1ZX0pXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRhYmxlIHdpdGggZGVmYXVsdCBvcHRpb25zLlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7Q3JlYXRlVGFibGVDYWxsYmFja1R5cGV9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICAvKipcbiAgICogQ3JlYXRlcyBhIHRhYmxlIHdpdGggZXhwbGljaXQgb3B0aW9ucy5cbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge0NyZWF0ZVRhYmxlQXJnc1R5cGV9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtDcmVhdGVUYWJsZUNhbGxiYWNrVHlwZX0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIC8qKlxuICAgKiBSdW5zIGNyZWF0ZSB0YWJsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7Q3JlYXRlVGFibGVBcmdzVHlwZSB8IENyZWF0ZVRhYmxlQ2FsbGJhY2tUeXBlfSBhcmcxIC0gQXJnMS5cbiAgICogQHBhcmFtIHtDcmVhdGVUYWJsZUNhbGxiYWNrVHlwZSB8IHVuZGVmaW5lZH0gW2FyZzJdIC0gQXJnMi5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVRhYmxlKHRhYmxlTmFtZSwgYXJnMSwgYXJnMikge1xuICAgIGxldCBhcmdzXG4gICAgbGV0IGNhbGxiYWNrXG5cbiAgICBpZiAodHlwZW9mIGFyZzEgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBhcmdzID0ge31cbiAgICAgIGNhbGxiYWNrID0gYXJnMVxuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzID0gYXJnMVxuICAgICAgY2FsbGJhY2sgPSBhcmcyXG4gICAgfVxuXG4gICAgY29uc3Qge2lkID0ge30sIGlmTm90RXhpc3RzID0gZmFsc2UsIC4uLnJlc3RBcmdzfSA9IGFyZ3NcbiAgICBjb25zdCBkcml2ZXIgPSB0aGlzLmdldERyaXZlcigpXG4gICAgY29uc3QgZGVmYXVsdFByaW1hcnlLZXlUeXBlID0gZHJpdmVyLnByaW1hcnlLZXlUeXBlKClcbiAgICBsZXQgaWREZWZhdWx0LCBpZFR5cGUsIHJlc3RBcmdzSWRcblxuICAgIGlmIChpZCAhPT0gZmFsc2UpIHtcbiAgICAgICh7ZGVmYXVsdDogaWREZWZhdWx0LCB0eXBlOiBpZFR5cGUsIC4uLnJlc3RBcmdzSWR9ID0gaWQpXG5cbiAgICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3NJZClcbiAgICB9XG5cbiAgICBpZiAoIWlkVHlwZSkge1xuICAgICAgaWRUeXBlID0gZGVmYXVsdFByaW1hcnlLZXlUeXBlXG4gICAgfVxuICAgIGNvbnN0IGRyaXZlclN1cHBvcnRzRGVmYXVsdFVVSUQgPSBkcml2ZXIuc3VwcG9ydHNEZWZhdWx0UHJpbWFyeUtleVVVSUQ/LigpXG4gICAgY29uc3QgbG93ZXJJZFR5cGUgPSBpZFR5cGU/LnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBpc1VVSURQcmltYXJ5S2V5ID0gbG93ZXJJZFR5cGUgPT0gXCJ1dWlkXCJcbiAgICBjb25zdCBudW1lcmljQXV0b0luY3JlbWVudFR5cGVzID0gW1wiaW50XCIsIFwiaW50ZWdlclwiLCBcImJpZ2ludFwiLCBcInNtYWxsaW50XCIsIFwidGlueWludFwiXVxuICAgIGxldCBpZEF1dG9JbmNyZW1lbnQgPSBudW1lcmljQXV0b0luY3JlbWVudFR5cGVzLmluY2x1ZGVzKGxvd2VySWRUeXBlIHx8IFwiXCIpXG5cbiAgICBpZiAoaXNVVUlEUHJpbWFyeUtleSkge1xuICAgICAgaWRBdXRvSW5jcmVtZW50ID0gZmFsc2VcblxuICAgICAgaWYgKGRyaXZlclN1cHBvcnRzRGVmYXVsdFVVSUQpIHtcbiAgICAgICAgaWYgKGlkRGVmYXVsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWREZWZhdWx0ID0gKCkgPT4gXCJVVUlEKClcIlxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlkRGVmYXVsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExldCBhcHBsaWNhdGlvbiBjb2RlIGFzc2lnbiBVVUlEcyAoc2VlIERhdGFiYXNlUmVjb3JkLmluc2VydCkgd2hlbiB0aGUgZHJpdmVyIGNhbid0IGRvIGl0LlxuICAgICAgICBpZERlZmF1bHQgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIC8vIElmIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgVVVJRCgpIGJ1dCB0aGUgY2FsbGVyIGV4cGxpY2l0bHkgc2V0IGEgZGVmYXVsdCwgcmVzcGVjdCBpdC5cbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZURhdGEgPSBuZXcgVGFibGVEYXRhKHRhYmxlTmFtZSwge2lmTm90RXhpc3RzLCBwcmltYXJ5S2V5VHlwZTogZGVmYXVsdFByaW1hcnlLZXlUeXBlfSlcblxuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBpZiAoIShpZFR5cGUgaW4gdGFibGVEYXRhKSkgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBwcmltYXJ5IGtleSB0eXBlOiAke2lkVHlwZX1gKVxuXG4gICAgaWYgKGlkICE9PSBmYWxzZSkge1xuICAgICAgdGFibGVEYXRhLmFkZENvbHVtbihcImlkXCIsIHthdXRvSW5jcmVtZW50OiBpZEF1dG9JbmNyZW1lbnQsIGRlZmF1bHQ6IGlkRGVmYXVsdCwgbnVsbDogZmFsc2UsIHByaW1hcnlLZXk6IHRydWUsIHR5cGU6IGlkVHlwZX0pXG4gICAgfVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayh0YWJsZURhdGEpXG4gICAgfVxuXG4gICAgY29uc3Qgc3FscyA9IGF3YWl0IGRyaXZlci5jcmVhdGVUYWJsZVNxbCh0YWJsZURhdGEpXG5cbiAgICBmb3IgKGNvbnN0IHNxbCBvZiBzcWxzKSB7XG4gICAgICBhd2FpdCB0aGlzLl9kYi5xdWVyeShzcWwpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZVRhYmxlQXJnc1R5cGUgdHlwZS5cbiAgICogQHR5cGVkZWYge29iamVjdH0gQ2hhbmdlVGFibGVBcmdzVHlwZVxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtidWxrXSAtIENvbWJpbmUgY29tcGF0aWJsZSBjb250aWd1b3VzIERETCBpbnRvIHNpbmdsZVxuICAgKiAgIEFMVEVSIFRBQkxFIHN0YXRlbWVudHMgb24gZHJpdmVycyB0aGF0IHN1cHBvcnQgYnVsayBhbHRlcnMgKE15U1FML01hcmlhREJcbiAgICogICBhbmQgUG9zdGdyZVNRTCkuIGBidWxrYCBjb250cm9scyBEREwgZ3JvdXBpbmcgb25seSwgbm90IHRyYW5zYWN0aW9uYWxcbiAgICogICBhdG9taWNpdHk7IHVuY2hhbmdlZCBkcml2ZXJzIGV4ZWN1dGUgdGhlIHJlY29yZGVkIGNvbW1hbmRzIHNlcXVlbnRpYWxseS5cbiAgICovXG5cbiAgLyoqXG4gICAqIENoYW5nZVRhYmxlQ2FsbGJhY2tUeXBlIHR5cGUuXG4gICAqIEB0eXBlZGVmIHsodGFibGU6IGltcG9ydChcIi4vY2hhbmdlLXRhYmxlLmpzXCIpLmRlZmF1bHQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+fSBDaGFuZ2VUYWJsZUNhbGxiYWNrVHlwZVxuICAgKi9cblxuICAvKipcbiAgICogQ2hhbmdlcyBhIHRhYmxlIHVzaW5nIGEgUmFpbHMtc3R5bGUgdGFibGUtc2NvcGVkIHJlY29yZGVyLlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7Q2hhbmdlVGFibGVDYWxsYmFja1R5cGV9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICAvKipcbiAgICogQ2hhbmdlcyBhIHRhYmxlIHdpdGggZXhwbGljaXQgb3B0aW9ucy5cbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge0NoYW5nZVRhYmxlQXJnc1R5cGV9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtDaGFuZ2VUYWJsZUNhbGxiYWNrVHlwZX0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIC8qKlxuICAgKiBSdW5zIGNoYW5nZSB0YWJsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRhYmxlIG5hbWUuXG4gICAqIEBwYXJhbSB7Q2hhbmdlVGFibGVBcmdzVHlwZSB8IENoYW5nZVRhYmxlQ2FsbGJhY2tUeXBlfSBhcmcxIC0gQXJnMS5cbiAgICogQHBhcmFtIHtDaGFuZ2VUYWJsZUNhbGxiYWNrVHlwZSB8IHVuZGVmaW5lZH0gW2FyZzJdIC0gQXJnMi5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGNoYW5nZVRhYmxlKHRhYmxlTmFtZSwgYXJnMSwgYXJnMikge1xuICAgIGxldCBhcmdzID0gLyoqIEB0eXBlIHtDaGFuZ2VUYWJsZUFyZ3NUeXBlfSAqLyAoe30pXG4gICAgbGV0IGNhbGxiYWNrXG5cbiAgICBpZiAodHlwZW9mIGFyZzEgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBjYWxsYmFjayA9IGFyZzFcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncyA9IGFyZzEgfHwge31cbiAgICAgIGNhbGxiYWNrID0gYXJnMlxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjYWxsYmFjayBnaXZlblwiKVxuXG4gICAgY29uc3Qge2J1bGsgPSBmYWxzZSwgLi4ucmVzdEFyZ3N9ID0gYXJnc1xuXG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGNvbnN0IHRhYmxlID0gbmV3IENoYW5nZVRhYmxlKHt0YWJsZU5hbWV9KVxuXG4gICAgYXdhaXQgY2FsbGJhY2sodGFibGUpXG5cbiAgICBhd2FpdCB0aGlzLl9leGVjdXRlQ2hhbmdlVGFibGVPcGVyYXRpb25zKHRhYmxlTmFtZSwgdGFibGUuZ2V0T3BlcmF0aW9ucygpLCB7YnVsa30pXG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgcmVjb3JkZWQgY2hhbmdlVGFibGUgb3BlcmF0aW9ucy4gV2l0aCBgYnVsa2AgZW5hYmxlZCBvbiBhXG4gICAqIHN1cHBvcnRpbmcgZHJpdmVyLCBjb21wYXRpYmxlIGNvbnRpZ3VvdXMgY29sdW1uIG9wZXJhdGlvbnMgYWNjdW11bGF0ZSBpbnRvXG4gICAqIGEgc2luZ2xlIFRhYmxlRGF0YSBmbHVzaGVkIHRocm91Z2ggYGFsdGVyVGFibGVTUUxzYDsgaW5jb21wYXRpYmxlIGNvbW1hbmRzXG4gICAqIGZsdXNoIHRoZSBiYXRjaCBmaXJzdCBhbmQgcnVuIHRocm91Z2ggdGhlIGV4aXN0aW5nIG1pZ3JhdGlvbiBoZWxwZXJzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2NoYW5nZS10YWJsZS5qc1wiKS5DaGFuZ2VUYWJsZU9wZXJhdGlvblR5cGVbXX0gb3BlcmF0aW9ucyAtIFJlY29yZGVkIG9wZXJhdGlvbnMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXJncy5idWxrIC0gV2hldGhlciB0byBlbmFibGUgYnVsayBjb21tYW5kIGdyb3VwaW5nLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgX2V4ZWN1dGVDaGFuZ2VUYWJsZU9wZXJhdGlvbnModGFibGVOYW1lLCBvcGVyYXRpb25zLCB7YnVsa30pIHtcbiAgICBjb25zdCBkcml2ZXIgPSB0aGlzLmdldERyaXZlcigpXG4gICAgY29uc3QgYnVsa1N1cHBvcnRlZCA9IGJ1bGsgJiYgZHJpdmVyLnN1cHBvcnRzQnVsa0FsdGVyKClcblxuICAgIGlmICghYnVsa1N1cHBvcnRlZCkge1xuICAgICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2Ygb3BlcmF0aW9ucykge1xuICAgICAgICBhd2FpdCB0aGlzLl9leGVjdXRlQ2hhbmdlVGFibGVPcGVyYXRpb24odGFibGVOYW1lLCBvcGVyYXRpb24pXG4gICAgICB9XG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBiYXRjaCA9IG5ldyBUYWJsZURhdGEodGFibGVOYW1lKVxuXG4gICAgY29uc3QgZmx1c2hCYXRjaCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChiYXRjaC5nZXRDb2x1bW5zKCkubGVuZ3RoID09IDAgJiYgYmF0Y2guZ2V0SW5kZXhlcygpLmxlbmd0aCA9PSAwKSByZXR1cm5cblxuICAgICAgY29uc3Qgc3FscyA9IGF3YWl0IGRyaXZlci5hbHRlclRhYmxlU1FMcyhiYXRjaClcblxuICAgICAgZm9yIChjb25zdCBzcWwgb2Ygc3Fscykge1xuICAgICAgICBhd2FpdCBkcml2ZXIucXVlcnkoc3FsKVxuICAgICAgfVxuXG4gICAgICBiYXRjaCA9IG5ldyBUYWJsZURhdGEodGFibGVOYW1lKVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgb3BlcmF0aW9uIG9mIG9wZXJhdGlvbnMpIHtcbiAgICAgIHN3aXRjaCAob3BlcmF0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImFkZENvbHVtblwiOiB7XG4gICAgICAgICAgaWYgKCFvcGVyYXRpb24uY29sdW1uVHlwZSkgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29sdW1uIHR5cGUgZ2l2ZW5cIilcblxuICAgICAgICAgIC8vIEZsdXNoIGFuIGFscmVhZHktcmVjb3JkZWQgaW5kZXggYmF0Y2ggZmlyc3Qgc28gdGhlIGVtaXR0ZWQgU1FMIGtlZXBzXG4gICAgICAgICAgLy8gdGhlIHJlY29yZGVkIGRlY2xhcmF0aW9uIG9yZGVyIChpbmRleCBiZWZvcmUgY29sdW1uKS5cbiAgICAgICAgICBpZiAoYmF0Y2guZ2V0SW5kZXhlcygpLmxlbmd0aCA+IDApIGF3YWl0IGZsdXNoQmF0Y2goKVxuXG4gICAgICAgICAgYmF0Y2guYWRkQ29sdW1uKG5ldyBUYWJsZUNvbHVtbihvcGVyYXRpb24uY29sdW1uTmFtZSwgT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IG9wZXJhdGlvbi5jb2x1bW5UeXBlfSwgb3BlcmF0aW9uLmFyZ3MpKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJyZW1vdmVDb2x1bW5cIjpcbiAgICAgICAgICAvLyBGbHVzaCBhbiBhbHJlYWR5LXJlY29yZGVkIGluZGV4IGJhdGNoIGZpcnN0IHNvIHRoZSBlbWl0dGVkIFNRTCBrZWVwc1xuICAgICAgICAgIC8vIHRoZSByZWNvcmRlZCBkZWNsYXJhdGlvbiBvcmRlciAoaW5kZXggYmVmb3JlIGNvbHVtbikuXG4gICAgICAgICAgaWYgKGJhdGNoLmdldEluZGV4ZXMoKS5sZW5ndGggPiAwKSBhd2FpdCBmbHVzaEJhdGNoKClcblxuICAgICAgICAgIGJhdGNoLmFkZENvbHVtbihuZXcgVGFibGVDb2x1bW4ob3BlcmF0aW9uLmNvbHVtbk5hbWUsIHtkcm9wQ29sdW1uOiB0cnVlfSkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBcImFkZEluZGV4XCI6XG4gICAgICAgICAgLy8gRHJpdmVycyB3aXRob3V0IGBzdXBwb3J0c0J1bGtBbHRlckluZGV4ZXNgIChQb3N0Z3JlU1FMKSBrZWVwIGluZGV4ZXNcbiAgICAgICAgICAvLyBzdGFuZGFsb25lIGJlY2F1c2UgdGhlaXIgQUxURVIgVEFCTEUgZG9lcyBub3QgY2FycnkgQ1JFQVRFIElOREVYXG4gICAgICAgICAgLy8gY2xhdXNlcy4gQW4gaWZOb3RFeGlzdHMgaW5kZXggaXMgbmV2ZXIgY29tYmluZWQgYmVjYXVzZSB0aGUgY29tYmluZWRcbiAgICAgICAgICAvLyBidWxrIGZvcm0gY2Fubm90IGV4cHJlc3MgdGhhdCBndWFyZC5cbiAgICAgICAgICBpZiAoIWRyaXZlci5zdXBwb3J0c0J1bGtBbHRlckluZGV4ZXMoKSB8fCBvcGVyYXRpb24uYXJncz8uaWZOb3RFeGlzdHMpIHtcbiAgICAgICAgICAgIGF3YWl0IGZsdXNoQmF0Y2goKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZXhlY3V0ZUNoYW5nZVRhYmxlT3BlcmF0aW9uKHRhYmxlTmFtZSwgb3BlcmF0aW9uKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiYXRjaC5hZGRJbmRleCh0aGlzLl9jaGFuZ2VUYWJsZVRhYmxlSW5kZXgodGFibGVOYW1lLCBvcGVyYXRpb24pKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGF3YWl0IGZsdXNoQmF0Y2goKVxuICAgICAgICAgIGF3YWl0IHRoaXMuX2V4ZWN1dGVDaGFuZ2VUYWJsZU9wZXJhdGlvbih0YWJsZU5hbWUsIG9wZXJhdGlvbilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBmbHVzaEJhdGNoKClcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBUYWJsZUluZGV4IGZvciBhIGJhdGNoIGZyb20gYSByZWNvcmRlZCBhZGRJbmRleCBvcGVyYXRpb24sXG4gICAqIHJlc29sdmluZyB0aGUgZGVmYXVsdCBhZGRJbmRleCBuYW1lIGVhZ2VybHkgc28gYSBjb21iaW5lZCBNeVNRTCBBTFRFUlxuICAgKiBuZXZlciBzaWxlbnRseSBuYW1lcyB0aGUgaW5kZXggZGlmZmVyZW50bHkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vY2hhbmdlLXRhYmxlLmpzXCIpLkNoYW5nZVRhYmxlQWRkSW5kZXhPcGVyYXRpb25UeXBlfSBvcGVyYXRpb24gLSBSZWNvcmRlZCBvcGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtUYWJsZUluZGV4fSAtIFRoZSB0YWJsZSBpbmRleC5cbiAgICovXG4gIF9jaGFuZ2VUYWJsZVRhYmxlSW5kZXgodGFibGVOYW1lLCBvcGVyYXRpb24pIHtcbiAgICBjb25zdCB7YXJncywgY29sdW1uc30gPSBvcGVyYXRpb25cbiAgICAvLyBBbiBpZk5vdEV4aXN0cyBpbmRleCBuZXZlciByZWFjaGVzIGJhdGNoaW5nIChpdCBpcyBmbHVzaGVkIHN0YW5kYWxvbmUpLFxuICAgIC8vIHNvIHRoZSBjb21iaW5lZCBBTFRFUiBjYW5ub3QgY2FycnkgdGhhdCBndWFyZC5cbiAgICBjb25zdCB7bmFtZSwgLi4ucmVzdEluZGV4QXJnc30gPSBhcmdzIHx8IHt9XG4gICAgY29uc3QgaW5kZXhOYW1lID0gbmFtZSB8fCBuZXcgQ3JlYXRlSW5kZXhCYXNlKHtjb2x1bW5zLCBkcml2ZXI6IHRoaXMuZ2V0RHJpdmVyKCksIHRhYmxlTmFtZX0pLmdlbmVyYXRlSW5kZXhOYW1lKClcblxuICAgIHJldHVybiBuZXcgVGFibGVJbmRleChjb2x1bW5zLCBPYmplY3QuYXNzaWduKHt9LCByZXN0SW5kZXhBcmdzLCB7bmFtZTogaW5kZXhOYW1lfSkpXG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBzaW5nbGUgcmVjb3JkZWQgY2hhbmdlVGFibGUgb3BlcmF0aW9uIHRocm91Z2ggdGhlIGV4aXN0aW5nXG4gICAqIG1pZ3JhdGlvbiBoZWxwZXIgd2l0aCB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgYSBkaXJlY3QgaGVscGVyIGNhbGwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUYWJsZSBuYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vY2hhbmdlLXRhYmxlLmpzXCIpLkNoYW5nZVRhYmxlT3BlcmF0aW9uVHlwZX0gb3BlcmF0aW9uIC0gUmVjb3JkZWQgb3BlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgX2V4ZWN1dGVDaGFuZ2VUYWJsZU9wZXJhdGlvbih0YWJsZU5hbWUsIG9wZXJhdGlvbikge1xuICAgIHN3aXRjaCAob3BlcmF0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJhZGRDb2x1bW5cIjpcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRDb2x1bW4odGFibGVOYW1lLCBvcGVyYXRpb24uY29sdW1uTmFtZSwgb3BlcmF0aW9uLmNvbHVtblR5cGUsIG9wZXJhdGlvbi5hcmdzKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcInJlbW92ZUNvbHVtblwiOlxuICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUNvbHVtbih0YWJsZU5hbWUsIG9wZXJhdGlvbi5jb2x1bW5OYW1lKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImFkZEluZGV4XCI6XG4gICAgICAgIGF3YWl0IHRoaXMuYWRkSW5kZXgodGFibGVOYW1lLCBvcGVyYXRpb24uY29sdW1ucywgb3BlcmF0aW9uLmFyZ3MpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwicmVtb3ZlSW5kZXhcIjpcbiAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVJbmRleCh0YWJsZU5hbWUsIG9wZXJhdGlvbi5uYW1lT3JDb2x1bW5zLCBvcGVyYXRpb24uYXJncylcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJhZGRSZWZlcmVuY2VcIjpcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRSZWZlcmVuY2UodGFibGVOYW1lLCBvcGVyYXRpb24ucmVmZXJlbmNlTmFtZSwgb3BlcmF0aW9uLmFyZ3MgfHwge30pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwicmVtb3ZlUmVmZXJlbmNlXCI6XG4gICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUmVmZXJlbmNlKHRhYmxlTmFtZSwgb3BlcmF0aW9uLnJlZmVyZW5jZU5hbWUsIG9wZXJhdGlvbi5hcmdzKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcInJlbmFtZUNvbHVtblwiOlxuICAgICAgICBhd2FpdCB0aGlzLnJlbmFtZUNvbHVtbih0YWJsZU5hbWUsIG9wZXJhdGlvbi5vbGRDb2x1bW5OYW1lLCBvcGVyYXRpb24ubmV3Q29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJjaGFuZ2VDb2x1bW5OdWxsXCI6XG4gICAgICAgIGF3YWl0IHRoaXMuY2hhbmdlQ29sdW1uTnVsbCh0YWJsZU5hbWUsIG9wZXJhdGlvbi5jb2x1bW5OYW1lLCBvcGVyYXRpb24ubnVsbGFibGUpXG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGNoYW5nZSB0YWJsZSBvcGVyYXRpb25cIilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBkcm9wIHRhYmxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGRyb3BUYWJsZSh0YWJsZU5hbWUpIHtcbiAgICBhd2FpdCB0aGlzLmdldERyaXZlcigpLmRyb3BUYWJsZSh0YWJsZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogUnVucyByZW5hbWUgY29sdW1uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9sZENvbHVtbk5hbWUgLSBQcmV2aW91cyBjb2x1bW4gbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld0NvbHVtbk5hbWUgLSBOZXcgY29sdW1uIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyByZW5hbWVDb2x1bW4odGFibGVOYW1lLCBvbGRDb2x1bW5OYW1lLCBuZXdDb2x1bW5OYW1lKSB7XG4gICAgYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5yZW5hbWVDb2x1bW4odGFibGVOYW1lLCBvbGRDb2x1bW5OYW1lLCBuZXdDb2x1bW5OYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGFibGUgZXhpc3RzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGFibGUgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gUmVzb2x2ZXMgd2l0aCBXaGV0aGVyIHRhYmxlIGV4aXN0cy5cbiAgICovXG4gIGFzeW5jIHRhYmxlRXhpc3RzKHRhYmxlTmFtZSkge1xuICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkudGFibGVFeGlzdHModGFibGVOYW1lKVxuXG4gICAgcmV0dXJuIGV4aXN0c1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlcjogY3JlYXRlcyB0aGUgc2hhcmVkIGF1ZGl0IHRhYmxlcyAoYGF1ZGl0X2FjdGlvbnNgLFxuICAgKiBgYXVkaXRfYXVkaXRhYmxlX3R5cGVzYCwgYGF1ZGl0c2ApLiBDYWxsIGZyb20gYHVwKClgIGluIGEgbWlncmF0aW9uLlxuICAgKiBAcGFyYW0ge3tpZD86IHt0eXBlPzogc3RyaW5nfX19IFtvcHRpb25zXSAtIElEIGNvbHVtbiBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVNoYXJlZEF1ZGl0VGFibGVzKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGlkID0gb3B0aW9ucy5pZCB8fCB7fVxuXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVUYWJsZShcImF1ZGl0X2FjdGlvbnNcIiwge2lkfSwgKHRhYmxlKSA9PiB7XG4gICAgICB0YWJsZS5zdHJpbmcoXCJhY3Rpb25cIiwge2luZGV4OiB7dW5pcXVlOiB0cnVlfSwgbnVsbDogZmFsc2V9KVxuICAgICAgdGFibGUudGltZXN0YW1wcygpXG4gICAgfSlcblxuICAgIGF3YWl0IHRoaXMuY3JlYXRlVGFibGUoXCJhdWRpdF9hdWRpdGFibGVfdHlwZXNcIiwge2lkfSwgKHRhYmxlKSA9PiB7XG4gICAgICB0YWJsZS5zdHJpbmcoXCJuYW1lXCIsIHtpbmRleDoge3VuaXF1ZTogdHJ1ZX0sIG51bGw6IGZhbHNlfSlcbiAgICAgIHRhYmxlLnRpbWVzdGFtcHMoKVxuICAgIH0pXG5cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVRhYmxlKFwiYXVkaXRzXCIsIHtpZH0sICh0YWJsZSkgPT4ge1xuICAgICAgdGFibGUucmVmZXJlbmNlcyhcImF1ZGl0X2FjdGlvblwiLCB7Zm9yZWlnbktleTogdHJ1ZSwgbnVsbDogZmFsc2V9KVxuICAgICAgdGFibGUucmVmZXJlbmNlcyhcImF1ZGl0X2F1ZGl0YWJsZV90eXBlXCIsIHtmb3JlaWduS2V5OiB0cnVlLCBudWxsOiBmYWxzZX0pXG4gICAgICB0YWJsZS5yZWZlcmVuY2VzKFwiYXVkaXRhYmxlXCIsIHtudWxsOiBmYWxzZSwgcG9seW1vcnBoaWM6IHRydWV9KVxuICAgICAgdGFibGUuanNvbihcImF1ZGl0ZWRfY2hhbmdlc1wiKVxuICAgICAgdGFibGUuanNvbihcInBhcmFtc1wiKVxuICAgICAgdGFibGUudGltZXN0YW1wcygpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXI6IGNyZWF0ZXMgYSBkZWRpY2F0ZWQgYXVkaXQgdGFibGUgZm9yIGEgbW9kZWwgKGUuZy5cbiAgICogYHByb2plY3RfYXVkaXRzYCBmb3IgdGhlIGBwcm9qZWN0c2AgdGFibGUpLiBDYWxsIGZyb20gYHVwKClgXG4gICAqIGluIGEgbWlncmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxUYWJsZU5hbWUgLSBNb2RlbCB0YWJsZSBuYW1lIChlLmcuIFwicHJvamVjdHNcIikuXG4gICAqIEBwYXJhbSB7e2lkPzoge3R5cGU/OiBzdHJpbmd9fX0gW29wdGlvbnNdIC0gSUQgY29sdW1uIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IFRoZSBjcmVhdGVkIGF1ZGl0IHRhYmxlIG5hbWUuXG4gICAqL1xuICBhc3luYyBjcmVhdGVEZWRpY2F0ZWRBdWRpdFRhYmxlKG1vZGVsVGFibGVOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBhdWRpdFRhYmxlID0gZGVkaWNhdGVkQXVkaXRUYWJsZU5hbWUobW9kZWxUYWJsZU5hbWUpXG4gICAgY29uc3QgaWQgPSBvcHRpb25zLmlkIHx8IHt9XG5cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVRhYmxlKGF1ZGl0VGFibGUsIHtpZH0sICh0YWJsZSkgPT4ge1xuICAgICAgY29uc3QgcmVmS2V5ID0gaW5mbGVjdGlvbi5zaW5ndWxhcml6ZShtb2RlbFRhYmxlTmFtZSlcblxuICAgICAgdGFibGUucmVmZXJlbmNlcyhyZWZLZXksIHtmb3JlaWduS2V5OiB0cnVlLCBudWxsOiBmYWxzZX0pXG4gICAgICB0YWJsZS5yZWZlcmVuY2VzKFwiYXVkaXRfYWN0aW9uXCIsIHtmb3JlaWduS2V5OiB0cnVlLCBudWxsOiBmYWxzZX0pXG4gICAgICB0YWJsZS5qc29uKFwiYXVkaXRlZF9jaGFuZ2VzXCIpXG4gICAgICB0YWJsZS5qc29uKFwicGFyYW1zXCIpXG4gICAgICB0YWJsZS50aW1lc3RhbXBzKClcbiAgICB9KVxuXG4gICAgcmV0dXJuIGF1ZGl0VGFibGVcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlZGljYXRlZCBhdWRpdCB0YWJsZSBuYW1lIGZvciBhIG1vZGVsIHRhYmxlLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsVGFibGVOYW1lIC0gTW9kZWwgdGFibGUgbmFtZSAoZS5nLiBcInByb2plY3RzXCIpLlxuICogQHJldHVybnMge3N0cmluZ30gRGVkaWNhdGVkIGF1ZGl0IHRhYmxlIG5hbWUgKGUuZy4gXCJwcm9qZWN0X2F1ZGl0c1wiKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZGljYXRlZEF1ZGl0VGFibGVOYW1lKG1vZGVsVGFibGVOYW1lKSB7XG4gIGlmIChtb2RlbFRhYmxlTmFtZS5lbmRzV2l0aChcInNcIikpIHtcbiAgICByZXR1cm4gYCR7bW9kZWxUYWJsZU5hbWUuc2xpY2UoMCwgLTEpfV9hdWRpdHNgXG4gIH1cblxuICByZXR1cm4gYCR7bW9kZWxUYWJsZU5hbWV9X2F1ZGl0c2Bcbn1cbiJdfQ==
|
|
@@ -82,6 +82,8 @@ export default class VelociousDatabasePoolAsyncTrackedMultiConnection extends Ba
|
|
|
82
82
|
* @type {import("./base.js").TestSharedConnectionRegistration | undefined}
|
|
83
83
|
*/
|
|
84
84
|
_testSharedConnectionRegistration: import("./base.js").TestSharedConnectionRegistration | undefined;
|
|
85
|
+
/** Attempt-owned shared connections keyed by resolved physical configuration. */
|
|
86
|
+
_testSharedConnectionsByReuseKey: Map<any, any>;
|
|
85
87
|
/**
|
|
86
88
|
* Connections.
|
|
87
89
|
* @type {import("../drivers/base.js").default[]} */
|
|
@@ -189,6 +191,11 @@ export default class VelociousDatabasePoolAsyncTrackedMultiConnection extends Ba
|
|
|
189
191
|
* @returns {Promise<void>} - Resolves when the connection is checked in or closed.
|
|
190
192
|
*/
|
|
191
193
|
checkin(connection: import("../drivers/base.js").default): Promise<void>;
|
|
194
|
+
/**
|
|
195
|
+
* Permanently removes and closes a checked-out connection.
|
|
196
|
+
* @param {import("../drivers/base.js").default} connection - Connection that must not return to the pool.
|
|
197
|
+
*/
|
|
198
|
+
discard(connection: import("../drivers/base.js").default): Promise<void>;
|
|
192
199
|
/**
|
|
193
200
|
* Runs close checked out connection after checkin failure.
|
|
194
201
|
* @param {import("../drivers/base.js").default} connection - Connection that failed check-in cleanup.
|
|
@@ -467,6 +474,13 @@ export default class VelociousDatabasePoolAsyncTrackedMultiConnection extends Ba
|
|
|
467
474
|
* @returns {import("./base.js").TestSharedConnectionRegistration} - Opaque registration handle.
|
|
468
475
|
*/
|
|
469
476
|
setTestSharedConnectionProvider(provider: () => import("../drivers/base.js").default | undefined): import("./base.js").TestSharedConnectionRegistration;
|
|
477
|
+
/**
|
|
478
|
+
* Registers an attempt-owned connection for exactly one physical configuration.
|
|
479
|
+
* @param {import("../drivers/base.js").default} connection - Attempt-owned connection.
|
|
480
|
+
* @param {string} reuseKey - Resolved physical configuration identity.
|
|
481
|
+
* @returns {import("./base.js").TestSharedConnectionRegistration} - Opaque registration handle.
|
|
482
|
+
*/
|
|
483
|
+
setTestSharedConnectionForConfiguration(connection: import("../drivers/base.js").default, reuseKey: string): import("./base.js").TestSharedConnectionRegistration;
|
|
470
484
|
/**
|
|
471
485
|
* Clears the current shared connection registration. A supplied stale registration
|
|
472
486
|
* cannot clear a provider installed by a newer lifecycle.
|
|
@@ -484,6 +498,12 @@ export default class VelociousDatabasePoolAsyncTrackedMultiConnection extends Ba
|
|
|
484
498
|
* @returns {T} - Callback result.
|
|
485
499
|
*/
|
|
486
500
|
runWithTestSharedConnection<T>(callback: () => T): T;
|
|
501
|
+
/**
|
|
502
|
+
* Resolves a test-shared connection only while its checkout ID is still owned by this pool.
|
|
503
|
+
* Fallback-only registrations have no checkout ID and must enter the normal checkout path.
|
|
504
|
+
* @returns {import("../drivers/base.js").default | undefined} - Active shared connection.
|
|
505
|
+
*/
|
|
506
|
+
activeTestSharedConnection(): import("../drivers/base.js").default | undefined;
|
|
487
507
|
/**
|
|
488
508
|
* Resolves the connection currently eligible for in-process test request sharing.
|
|
489
509
|
* @returns {import("../drivers/base.js").default | undefined} - Shared connection.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async-tracked-multi-connection.d.ts","sourceRoot":"","sources":["../../../../src/database/pool/async-tracked-multi-connection.js"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"async-tracked-multi-connection.d.ts","sourceRoot":"","sources":["../../../../src/database/pool/async-tracked-multi-connection.js"],"names":[],"mappings":"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"}
|