@aerokit/sdk 12.77.0 → 12.79.0
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/dist/cjs/bpm/process.js +4 -1
- package/dist/cjs/bpm/tasks.js +3 -1
- package/dist/cjs/bpm/tracer.js +3 -1
- package/dist/cjs/cms/cmis.js +105 -177
- package/dist/cjs/db/database.js +5 -1
- package/dist/cjs/db/query.js +19 -1
- package/dist/cjs/db/repository.js +2 -1
- package/dist/cjs/db/sql.js +5 -2
- package/dist/cjs/etcd/client.js +4 -1
- package/dist/cjs/http/errors/ForbiddenError.js +9 -9
- package/dist/cjs/http/errors/ValidationError.js +9 -9
- package/dist/cjs/http/request.js +2 -1
- package/dist/cjs/http/response.js +102 -188
- package/dist/cjs/http/rs/resource-http-controller.js +4 -1
- package/dist/cjs/http/rs/resource-mappings.js +6 -3
- package/dist/cjs/http/rs/resource-method.js +10 -1
- package/dist/cjs/http/rs/resource.js +11 -1
- package/dist/cjs/http/upload.js +3 -1
- package/dist/cjs/io/files.js +5 -7
- package/dist/cjs/io/streams.js +5 -1
- package/dist/cjs/io/zip.js +4 -1
- package/dist/cjs/job/scheduler.js +4 -1
- package/dist/cjs/kafka/consumer.js +3 -2
- package/dist/cjs/kafka/producer.js +3 -1
- package/dist/cjs/log/logging.js +2 -1
- package/dist/cjs/mail/client.js +2 -1
- package/dist/cjs/messaging/consumer.js +3 -1
- package/dist/cjs/messaging/producer.js +3 -1
- package/dist/cjs/mongodb/client.js +26 -1
- package/dist/cjs/mongodb/dao.js +3 -1
- package/dist/cjs/net/soap.js +15 -1
- package/dist/cjs/net/websockets.js +5 -1
- package/dist/cjs/platform/engines.js +2 -1
- package/dist/cjs/platform/os.js +7 -9
- package/dist/cjs/platform/problems.js +7 -13
- package/dist/cjs/platform/registry.js +4 -1
- package/dist/cjs/platform/repository.js +4 -1
- package/dist/cjs/platform/workspace.js +8 -1
- package/dist/cjs/redis/client.js +2 -1
- package/dist/cjs/security/oauth.js +2 -1
- package/dist/cjs/template/engines.js +6 -1
- package/dist/dts/db/query.d.ts +10 -0
- package/dist/esm/bpm/process.mjs +4 -1
- package/dist/esm/bpm/tasks.mjs +3 -1
- package/dist/esm/bpm/tracer.mjs +3 -1
- package/dist/esm/cms/cmis.mjs +105 -177
- package/dist/esm/db/database.mjs +5 -1
- package/dist/esm/db/query.mjs +19 -1
- package/dist/esm/db/repository.mjs +2 -1
- package/dist/esm/db/sql.mjs +5 -2
- package/dist/esm/etcd/client.mjs +4 -1
- package/dist/esm/http/errors/ForbiddenError.mjs +9 -9
- package/dist/esm/http/errors/ValidationError.mjs +9 -9
- package/dist/esm/http/request.mjs +2 -1
- package/dist/esm/http/response.mjs +102 -188
- package/dist/esm/http/rs/resource-http-controller.mjs +4 -1
- package/dist/esm/http/rs/resource-mappings.mjs +6 -3
- package/dist/esm/http/rs/resource-method.mjs +10 -1
- package/dist/esm/http/rs/resource.mjs +11 -1
- package/dist/esm/http/upload.mjs +3 -1
- package/dist/esm/io/files.mjs +5 -7
- package/dist/esm/io/streams.mjs +5 -1
- package/dist/esm/io/zip.mjs +4 -1
- package/dist/esm/job/scheduler.mjs +4 -1
- package/dist/esm/kafka/consumer.mjs +3 -2
- package/dist/esm/kafka/producer.mjs +3 -1
- package/dist/esm/log/logging.mjs +2 -1
- package/dist/esm/mail/client.mjs +2 -1
- package/dist/esm/messaging/consumer.mjs +3 -1
- package/dist/esm/messaging/producer.mjs +3 -1
- package/dist/esm/mongodb/client.mjs +26 -1
- package/dist/esm/mongodb/dao.mjs +3 -1
- package/dist/esm/net/soap.mjs +15 -1
- package/dist/esm/net/websockets.mjs +5 -1
- package/dist/esm/platform/engines.mjs +2 -1
- package/dist/esm/platform/os.mjs +7 -9
- package/dist/esm/platform/problems.mjs +7 -13
- package/dist/esm/platform/registry.mjs +4 -1
- package/dist/esm/platform/repository.mjs +4 -1
- package/dist/esm/platform/workspace.mjs +8 -1
- package/dist/esm/redis/client.mjs +2 -1
- package/dist/esm/security/oauth.mjs +2 -1
- package/dist/esm/template/engines.mjs +6 -1
- package/package.json +1 -1
|
@@ -2,6 +2,11 @@ const MongoDBFacade = Java.type("org.eclipse.dirigible.components.api.mongodb.Mo
|
|
|
2
2
|
const TimeUnit = Java.type("java.util.concurrent.TimeUnit");
|
|
3
3
|
import { UUID } from "@aerokit/sdk/utils/uuid";
|
|
4
4
|
class DBObject {
|
|
5
|
+
/**
|
|
6
|
+
* The underlying native Java object representing the BSON document.
|
|
7
|
+
* @private
|
|
8
|
+
*/
|
|
9
|
+
native;
|
|
5
10
|
/**
|
|
6
11
|
* Constructs a new DBObject instance.
|
|
7
12
|
* @param native The native MongoDB object (e.g., com.mongodb.DBObject)
|
|
@@ -102,6 +107,11 @@ function createBasicDBObject() {
|
|
|
102
107
|
return dbObject;
|
|
103
108
|
}
|
|
104
109
|
class Client {
|
|
110
|
+
/**
|
|
111
|
+
* The underlying native MongoDB client object.
|
|
112
|
+
* @private
|
|
113
|
+
*/
|
|
114
|
+
native;
|
|
105
115
|
/**
|
|
106
116
|
* Constructs a new MongoDB Client instance.
|
|
107
117
|
* @param uri The MongoDB connection URI.
|
|
@@ -128,6 +138,11 @@ class Client {
|
|
|
128
138
|
}
|
|
129
139
|
}
|
|
130
140
|
class DB {
|
|
141
|
+
/**
|
|
142
|
+
* The underlying native MongoDB DB object.
|
|
143
|
+
* @private
|
|
144
|
+
*/
|
|
145
|
+
native;
|
|
131
146
|
/**
|
|
132
147
|
* Constructs a new DB instance.
|
|
133
148
|
* @param native The native MongoDB DB object.
|
|
@@ -146,6 +161,11 @@ class DB {
|
|
|
146
161
|
}
|
|
147
162
|
}
|
|
148
163
|
class DBCollection {
|
|
164
|
+
/**
|
|
165
|
+
* The underlying native MongoDB DBCollection object.
|
|
166
|
+
* @private
|
|
167
|
+
*/
|
|
168
|
+
native;
|
|
149
169
|
/**
|
|
150
170
|
* Constructs a new DBCollection instance.
|
|
151
171
|
* @param native The native MongoDB DBCollection object.
|
|
@@ -431,6 +451,11 @@ class DBCollection {
|
|
|
431
451
|
}
|
|
432
452
|
}
|
|
433
453
|
class DBCursor {
|
|
454
|
+
/**
|
|
455
|
+
* The underlying native MongoDB DBCursor object.
|
|
456
|
+
* @private
|
|
457
|
+
*/
|
|
458
|
+
native;
|
|
434
459
|
/**
|
|
435
460
|
* Constructs a new DBCursor instance.
|
|
436
461
|
* @param native The native MongoDB DBCursor object.
|
|
@@ -605,4 +630,4 @@ export {
|
|
|
605
630
|
DBObject,
|
|
606
631
|
createBasicDBObject
|
|
607
632
|
};
|
|
608
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21vbmdvZGIvY2xpZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBNb25nb0RCRmFjYWRlID0gSmF2YS50eXBlKFwib3JnLmVjbGlwc2UuZGlyaWdpYmxlLmNvbXBvbmVudHMuYXBpLm1vbmdvZGIuTW9uZ29EQkZhY2FkZVwiKTtcbmNvbnN0IFRpbWVVbml0ID0gSmF2YS50eXBlKFwiamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXRcIik7XG5pbXBvcnQgeyBVVUlEIH0gZnJvbSBcIkBhZXJva2l0L3Nkay91dGlscy91dWlkXCI7XG5cbi8qKlxuICogRGVmaW5lIGEgY29tbW9uIHR5cGUgZm9yIGlucHV0IHRvIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdCBlaXRoZXIgYSBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdFxuICogKHdoaWNoIHdpbGwgYmUgaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gREJPYmplY3QpIG9yIGFuIGV4aXN0aW5nIERCT2JqZWN0IHdyYXBwZXIgaW5zdGFuY2UuXG4gKi9cbnR5cGUgREJJbnB1dCA9IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBEQk9iamVjdCB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbi8qKlxuICogREJPYmplY3Qgb2JqZWN0IHJlcHJlc2VudHMgYSBCU09OIGRvY3VtZW50IHVzZWQgZm9yIHF1ZXJpZXMsIGluc2VydGlvbnMsIGFuZCB1cGRhdGVzLlxuICogSXQgd3JhcHMgdGhlIHVuZGVybHlpbmcgbmF0aXZlIEphdmEgb2JqZWN0LlxuICovXG5leHBvcnQgY2xhc3MgREJPYmplY3Qge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIEphdmEgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgQlNPTiBkb2N1bWVudC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBuYXRpdmU6IGFueTtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgREJPYmplY3QgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIG5hdGl2ZSBUaGUgbmF0aXZlIE1vbmdvREIgb2JqZWN0IChlLmcuLCBjb20ubW9uZ29kYi5EQk9iamVjdClcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuICAgICAgICB0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmRzIGEga2V5LXZhbHVlIHBhaXIgdG8gdGhlIERCT2JqZWN0LlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGZpZWxkIG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBhcHBlbmQuXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgREJPYmplY3QgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBhcHBlbmQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBEQk9iamVjdCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIERCT2JqZWN0IHRvIGEgc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gKEpTT04pLlxuICAgICAqIEByZXR1cm5zIEEgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHRvSnNvbigpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnRvSnNvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBvYmplY3QgYXMgYSBwYXJ0aWFsIG9iamVjdCAodXNlZCBpbnRlcm5hbGx5IGJ5IE1vbmdvREIgZHJpdmVyKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWFya0FzUGFydGlhbE9iamVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYXRpdmUubWFya0FzUGFydGlhbE9iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgb2JqZWN0IGlzIGEgcGFydGlhbCBvYmplY3QuXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBwYXJ0aWFsLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGlzUGFydGlhbE9iamVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmlzUGFydGlhbE9iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgREJPYmplY3QgY29udGFpbnMgYSBmaWVsZCB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGZpZWxkIG5hbWUuXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZmllbGQgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGNvbnRhaW5zRmllbGQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmNvbnRhaW5zRmllbGQoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleS5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBmaWVsZCBuYW1lLlxuICAgICAqIEByZXR1cm5zIFRoZSBmaWVsZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmdldChrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFB1dHMgYSBrZXktdmFsdWUgcGFpciBpbnRvIHRoZSBEQk9iamVjdC5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBmaWVsZCBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHV0LlxuICAgICAqIEByZXR1cm5zIFRoZSBwcmV2aW91cyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSwgb3IgbnVsbC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcHV0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnB1dChrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgZmllbGQgZnJvbSB0aGUgREJPYmplY3QuXG4gICAgICogQHBhcmFtIGtleSBUaGUgZmllbGQgbmFtZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMgVGhlIHJlbW92ZWQgZmllbGQgdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUZpZWxkKGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnJlbW92ZUZpZWxkKGtleSk7XG4gICAgfVxuXG59XG5cbi8qKlxuICogQ29waWVzIHRoZSBwcm9wZXJ0aWVzIGZyb20gdGhlIG5hdGl2ZSBNb25nb0RCIG9iamVjdCdzIEpTT04gcmVwcmVzZW50YXRpb25cbiAqIG9udG8gdGhlIHB1YmxpYyBwcm9wZXJ0aWVzIG9mIHRoZSBEQk9iamVjdCB3cmFwcGVyIGluc3RhbmNlLlxuICogVGhpcyBhbGxvd3MgZGlyZWN0IGFjY2VzcyBsaWtlIGBkYk9iamVjdC5maWVsZE5hbWVgLlxuICogQHBhcmFtIGRiT2JqZWN0IFRoZSBEQk9iamVjdCB3cmFwcGVyIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIGV4dHJhY3RlZCBwcm9wZXJ0aWVzIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdChkYk9iamVjdDogREJPYmplY3QpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAoIWRiT2JqZWN0Lm5hdGl2ZSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIC8vIFBhcnNlIHRoZSBuYXRpdmUgb2JqZWN0J3MgSlNPTiByZXByZXNlbnRhdGlvblxuICAgIHZhciBleHRyYWN0ZWQgPSBKU09OLnBhcnNlKGRiT2JqZWN0Lm5hdGl2ZS50b0pzb24oKSk7XG4gICAgLy8gQ29weSBhbGwgcHJvcGVydGllcyB0byB0aGUgd3JhcHBlciBpbnN0YW5jZVxuICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBleHRyYWN0ZWQpIHtcbiAgICAgICAgZGJPYmplY3RbcHJvcGVydHlOYW1lXSA9IGV4dHJhY3RlZFtwcm9wZXJ0eU5hbWVdO1xuICAgIH1cbiAgICByZXR1cm4gZXh0cmFjdGVkO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBpbXBsaWNpdGx5IGNvbnZlcnQgYSBwbGFpbiBKUyBvYmplY3QgdG8gYSBEQk9iamVjdCxcbiAqIG9yIHJldHVybiB0aGUgZXhpc3RpbmcgREJPYmplY3QgaW5zdGFuY2UuXG4gKiBAcGFyYW0gb2JqZWN0IElucHV0IG9iamVjdCB3aGljaCBjYW4gYmUgYSBwbGFpbiBvYmplY3QsIERCT2JqZWN0LCBvciB1bmRlZmluZWQvbnVsbC5cbiAqIEByZXR1cm5zIERCT2JqZWN0IG9yIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gaW1wbGljaXQob2JqZWN0OiBEQklucHV0KTogREJPYmplY3QgfCB1bmRlZmluZWQge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIEV4cGxpY2l0bHkgcmV0dXJuIHVuZGVmaW5lZCBpZiBpbnB1dCBpcyBmYWxzeVxuICAgIH1cbiAgICAvLyBDaGVjayBpZiBpdCBhbHJlYWR5IGhhcyB0aGUgbmF0aXZlIHByb3BlcnR5IChhc3N1bWVzIGl0J3MgYSBEQk9iamVjdCBvciBzaW1pbGFyIHdyYXBwZXIpXG4gICAgaWYgKChvYmplY3QgYXMgYW55KS5uYXRpdmUpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCBhcyBEQk9iamVjdDtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHBsYWluIG9iamVjdCB0byBEQk9iamVjdFxuICAgIHZhciBkYk9iamVjdCA9IGNyZWF0ZUJhc2ljREJPYmplY3QoKTtcblxuICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBvYmplY3QpIHtcbiAgICAgICAgZGJPYmplY3QuYXBwZW5kKHByb3BlcnR5TmFtZSwgb2JqZWN0W3Byb3BlcnR5TmFtZV0pO1xuICAgIH1cbiAgICByZXR1cm4gZGJPYmplY3Q7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgREJPYmplY3QgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBIG5ldyBEQk9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJhc2ljREJPYmplY3QoKTogREJPYmplY3Qge1xuICAgIGNvbnN0IGRiT2JqZWN0ID0gbmV3IERCT2JqZWN0KE1vbmdvREJGYWNhZGUuY3JlYXRlQmFzaWNEQk9iamVjdCgpKTtcbiAgICBleHRyYWN0KGRiT2JqZWN0KTtcbiAgICByZXR1cm4gZGJPYmplY3Q7XG59XG5cbi8qKlxuICogQ2xpZW50IG9iamVjdCB3cmFwcGVyIGZvciBjb25uZWN0aW5nIHRvIE1vbmdvREIuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbGllbnQge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIE1vbmdvREIgY2xpZW50IG9iamVjdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IE1vbmdvREIgQ2xpZW50IGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB1cmkgVGhlIE1vbmdvREIgY29ubmVjdGlvbiBVUkkuXG4gICAgICogQHBhcmFtIHVzZXIgVGhlIHVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgVGhlIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdXNlcjogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gTW9uZ29EQkZhY2FkZS5nZXRDbGllbnQodXJpLCB1c2VyLCBwYXNzd29yZClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSBkYXRhYmFzZSBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gbmFtZSBPcHRpb25hbCBuYW1lIG9mIHRoZSBkYXRhYmFzZS4gSWYgbm90IHByb3ZpZGVkLCB0aGUgZGVmYXVsdCBkYXRhYmFzZSBuYW1lIGlzIHVzZWQuXG4gICAgICogQHJldHVybnMgQSBEQiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0REIobmFtZT86IHN0cmluZyk6IERCIHtcbiAgICAgICAgbGV0IG5hdGl2ZSA9IG51bGw7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5nZXREQihuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHREQiA9IE1vbmdvREJGYWNhZGUuZ2V0RGVmYXVsdERhdGFiYXNlTmFtZSgpO1xuICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0REIoZGVmYXVsdERCKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgREIobmF0aXZlKTtcbiAgICB9XG59XG5cbi8qKlxuICogREIgb2JqZWN0IHdyYXBwZXIgZm9yIGEgTW9uZ29EQiBkYXRhYmFzZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERCIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBNb25nb0RCIERCIG9iamVjdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IERCIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBuYXRpdmUgVGhlIG5hdGl2ZSBNb25nb0RCIERCIG9iamVjdC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuICAgICAgICB0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSBjb2xsZWN0aW9uIGluc3RhbmNlIGZyb20gdGhlIGRhdGFiYXNlLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEByZXR1cm5zIEEgREJDb2xsZWN0aW9uIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb2xsZWN0aW9uKG5hbWU6IHN0cmluZyk6IERCQ29sbGVjdGlvbiB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmdldENvbGxlY3Rpb24obmFtZSk7XG4gICAgICAgIHJldHVybiBuZXcgREJDb2xsZWN0aW9uKG5hdGl2ZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIERCQ29sbGVjdGlvbiBvYmplY3Qgd3JhcHBlciBmb3IgYSBNb25nb0RCIGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBEQkNvbGxlY3Rpb24ge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIE1vbmdvREIgREJDb2xsZWN0aW9uIG9iamVjdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IERCQ29sbGVjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gbmF0aXZlIFRoZSBuYXRpdmUgTW9uZ29EQiBEQkNvbGxlY3Rpb24gb2JqZWN0LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gbmF0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluc2VydHMgYSBkb2N1bWVudCBpbnRvIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBkYk9iamVjdCBUaGUgZG9jdW1lbnQgdG8gaW5zZXJ0IChjYW4gYmUgYSBwbGFpbiBKUyBvYmplY3Qgb3IgREJPYmplY3QpLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbnNlcnQoZGJPYmplY3Q6IERCSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGJvID0gaW1wbGljaXQoZGJPYmplY3QpO1xuICAgICAgICBpZiAoZGJvKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZS5pbnNlcnQoZGJvLm5hdGl2ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBkb2N1bWVudHMgbWF0Y2hpbmcgdGhlIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgcXVlcnkgc3BlY2lmaWNhdGlvbiAoY2FuIGJlIGEgcGxhaW4gSlMgb2JqZWN0IG9yIERCT2JqZWN0KS5cbiAgICAgKiBAcGFyYW0gcHJvamVjdGlvbiBUaGUgZmllbGRzIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSAoY2FuIGJlIGEgcGxhaW4gSlMgb2JqZWN0IG9yIERCT2JqZWN0KS5cbiAgICAgKiBAcmV0dXJucyBBIERCQ3Vyc29yIGZvciBpdGVyYXRpbmcgb3ZlciByZXN1bHRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kKHF1ZXJ5PzogREJJbnB1dCwgcHJvamVjdGlvbj86IERCSW5wdXQpOiBEQkN1cnNvciB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGNvbnN0IHAgPSBpbXBsaWNpdChwcm9qZWN0aW9uKTtcblxuICAgICAgICB2YXIgbmF0aXZlID0gbnVsbDtcbiAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZmluZChxLm5hdGl2ZSwgcC5uYXRpdmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kKHEubmF0aXZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5hdGl2ZSA9IHRoaXMubmF0aXZlLmZpbmQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgREJDdXJzb3IobmF0aXZlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBhIHNpbmdsZSBkb2N1bWVudCBtYXRjaGluZyB0aGUgcXVlcnkuXG4gICAgICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSBzcGVjaWZpY2F0aW9uLlxuICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uIFRoZSBmaWVsZHMgdG8gaW5jbHVkZSBvciBleGNsdWRlLlxuICAgICAqIEBwYXJhbSBzb3J0IFRoZSBzb3J0aW5nIHNwZWNpZmljYXRpb24uXG4gICAgICogQHJldHVybnMgVGhlIGZvdW5kIGRvY3VtZW50IGFzIGEgREJPYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGZpbmRPbmUocXVlcnk6IERCSW5wdXQsIHByb2plY3Rpb246IERCSW5wdXQsIHNvcnQ6IERCSW5wdXQpOiBEQk9iamVjdCB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGNvbnN0IHAgPSBpbXBsaWNpdChwcm9qZWN0aW9uKTtcbiAgICAgICAgY29uc3QgcyA9IGltcGxpY2l0KHNvcnQpO1xuXG4gICAgICAgIHZhciBkYk9iamVjdCA9IGNyZWF0ZUJhc2ljREJPYmplY3QoKTtcbiAgICAgICAgdmFyIG5hdGl2ZSA9IG51bGw7XG4gICAgICAgIGlmIChxKSB7XG4gICAgICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZSA9IHRoaXMubmF0aXZlLmZpbmRPbmUocS5uYXRpdmUsIHAubmF0aXZlLCBzLm5hdGl2ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZmluZE9uZShxLm5hdGl2ZSwgcC5uYXRpdmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZmluZE9uZShxLm5hdGl2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kT25lKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGJPYmplY3QubmF0aXZlID0gbmF0aXZlO1xuICAgICAgICBleHRyYWN0KGRiT2JqZWN0KTtcbiAgICAgICAgcmV0dXJuIGRiT2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIGEgc2luZ2xlIGRvY3VtZW50IGJ5IGl0cyBzdHJpbmcgSUQuXG4gICAgICogQHBhcmFtIGlkIFRoZSBzdHJpbmcgSUQgb2YgdGhlIGRvY3VtZW50LlxuICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uIFRoZSBmaWVsZHMgdG8gaW5jbHVkZSBvciBleGNsdWRlLlxuICAgICAqIEByZXR1cm5zIFRoZSBmb3VuZCBkb2N1bWVudCBhcyBhIERCT2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kT25lQnlJZChpZDogc3RyaW5nLCBwcm9qZWN0aW9uPzogREJJbnB1dCk6IERCT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcCA9IGltcGxpY2l0KHByb2plY3Rpb24pO1xuICAgICAgICBjb25zdCBkYk9iamVjdCA9IGNyZWF0ZUJhc2ljREJPYmplY3QoKTtcbiAgICAgICAgbGV0IG5hdGl2ZSA9IG51bGw7XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kT25lKGlkLCBwLm5hdGl2ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kT25lKGlkKTtcbiAgICAgICAgfVxuICAgICAgICBkYk9iamVjdC5uYXRpdmUgPSBuYXRpdmU7XG4gICAgICAgIGV4dHJhY3QoZGJPYmplY3QpO1xuICAgICAgICByZXR1cm4gZGJPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ291bnRzIHRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uLCBvcHRpb25hbGx5IGZpbHRlcmVkIGJ5IGEgcXVlcnkuXG4gICAgICogQHBhcmFtIHF1ZXJ5IE9wdGlvbmFsIHF1ZXJ5IHRvIGZpbHRlciB0aGUgY291bnQuXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBkb2N1bWVudHMuXG4gICAgICovXG4gICAgcHVibGljIGNvdW50KHF1ZXJ5PzogREJJbnB1dCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGlmIChxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuY291bnQocS5uYXRpdmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZS5jb3VudCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvdW50IG9mIGRvY3VtZW50cyAoYWxpYXMgZm9yIGNvdW50KS5cbiAgICAgKiBAcGFyYW0gcXVlcnkgT3B0aW9uYWwgcXVlcnkgdG8gZmlsdGVyIHRoZSBjb3VudC5cbiAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGRvY3VtZW50cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q291bnQocXVlcnk6IERCSW5wdXQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBxID0gaW1wbGljaXQocXVlcnkpO1xuICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmdldENvdW50KHEubmF0aXZlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZ2V0Q291bnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluZGV4IG9uIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBrZXlzIFRoZSBpbmRleCBrZXkgc3BlY2lmaWNhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBpbmRleCBvcHRpb25zLlxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVJbmRleChrZXlzOiBEQklucHV0LCBvcHRpb25zOiBEQklucHV0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGsgPSBpbXBsaWNpdChrZXlzKTtcbiAgICAgICAgY29uc3QgbyA9IGltcGxpY2l0KG9wdGlvbnMpO1xuICAgICAgICBpZiAoaykge1xuICAgICAgICAgICAgaWYgKG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZS5jcmVhdGVJbmRleChrLm5hdGl2ZSwgby5uYXRpdmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZS5jcmVhdGVJbmRleChrLm5hdGl2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdCBsZWFzdCBLZXlzIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbmRleCBvbiBhIHNpbmdsZSBmaWVsZCBieSBuYW1lLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBpbmRleC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlSW5kZXhGb3JGaWVsZChuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlLmNyZWF0ZUluZGV4KG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGZpbGVkIG5hbWUgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgZGlzdGluY3QgdmFsdWVzIGZvciBhIHNwZWNpZmllZCBmaWVsZCBhY3Jvc3MgYSBjb2xsZWN0aW9uLlxuICAgICAqIE5PVEU6IFRoZSBzaWduYXR1cmUgaW4gdGhlIG9yaWdpbmFsIGNvZGUgc2VlbXMgc2xpZ2h0bHkgb2ZmIGNvbXBhcmVkIHRvIHR5cGljYWwgTW9uZ29EQiBkcml2ZXJzLlxuICAgICAqIFRoaXMgaW1wbGVtZW50YXRpb24gZm9sbG93cyB0aGUgb3JpZ2luYWwgc3RydWN0dXJlIHVzaW5nIGBrZXlzLm5hdGl2ZWAgaWYgYGtleXNgIGlzIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBmaWVsZCBuYW1lLlxuICAgICAqIEBwYXJhbSBxdWVyeSBPcHRpb25hbCBxdWVyeSB0byBmaWx0ZXIgcmVzdWx0cy5cbiAgICAgKiBAcGFyYW0ga2V5cyBPcHRpb25hbCBrZXlzIHRvIHVzZSBmb3IgZGlzdGluY3QgKHJlcGxhY2VzICduYW1lJyBpZiBwcm92aWRlZCBhbmQgcXVlcnkgZXhpc3RzKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGlzdGluY3QobmFtZTogc3RyaW5nLCBxdWVyeTogREJJbnB1dCwga2V5czogREJJbnB1dCk6IHZvaWQge1xuICAgICAgICBjb25zdCBxID0gaW1wbGljaXQocXVlcnkpO1xuICAgICAgICBjb25zdCBrID0gaW1wbGljaXQoa2V5cyk7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHF1ZXJ5IGlzIHByb3ZpZGVkLCB1c2Uga2V5cyBmb3IgdGhlIGZpZWxkIG5hbWUgaWYgayBpcyBwcmVzZW50LCBvdGhlcndpc2UgdXNlICduYW1lJ1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLmRpc3RpbmN0KGsgPyBrLm5hdGl2ZSA6IG5hbWUsIHEubmF0aXZlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmUuZGlzdGluY3QobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdCBsZWFzdCB0aGUgZmlsZWQgbmFtZSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGEgc3BlY2lmaWVkIGluZGV4LlxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgbmFtZSBvZiB0aGUgaW5kZXggb3IgdGhlIERCT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgaW5kZXgga2V5cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZHJvcEluZGV4KGluZGV4OiBzdHJpbmcgfCBEQklucHV0KTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZS5kcm9wSW5kZXgoaW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGJvID0gaW1wbGljaXQoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKGRibykge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLmRyb3BJbmRleChkYm8ubmF0aXZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGEgc3BlY2lmaWVkIGluZGV4IGJ5IG5hbWUuXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGluZGV4LlxuICAgICAqL1xuICAgIHB1YmxpYyBkcm9wSW5kZXhCeU5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmRyb3BJbmRleChuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyBhbGwgaW5kZXhlcyBvbiB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZHJvcEluZGV4ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmRyb3BJbmRleGVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBkb2N1bWVudHMgZnJvbSB0aGUgY29sbGVjdGlvbiBtYXRjaGluZyB0aGUgcXVlcnkuXG4gICAgICogQHBhcmFtIHF1ZXJ5IFRoZSBkZWxldGlvbiBxdWVyeSBzcGVjaWZpY2F0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmUocXVlcnk6IERCSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcSA9IGltcGxpY2l0KHF1ZXJ5KTtcbiAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlLnJlbW92ZShxLm5hdGl2ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5hbWVzIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBuZXdOYW1lIFRoZSBuZXcgbmFtZSBmb3IgdGhlIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIHJlbmFtZShuZXdOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYXRpdmUucmVuYW1lKG5ld05hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIGEgZG9jdW1lbnQgdG8gdGhlIGNvbGxlY3Rpb24uIElmIHRoZSBkb2N1bWVudCBoYXMgYW4gYF9pZGAsIGl0IHBlcmZvcm1zIGFuIHVwZGF0ZTtcbiAgICAgKiBvdGhlcndpc2UsIGl0IHBlcmZvcm1zIGFuIGluc2VydC5cbiAgICAgKiBAcGFyYW0gZGJPYmplY3QgVGhlIGRvY3VtZW50IHRvIHNhdmUuXG4gICAgICovXG4gICAgcHVibGljIHNhdmUoZGJPYmplY3Q6IERCSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGJvID0gaW1wbGljaXQoZGJPYmplY3QpO1xuICAgICAgICBpZiAoZGJvKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZS5zYXZlKGRiby5uYXRpdmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBkb2N1bWVudHMgaW4gdGhlIGNvbGxlY3Rpb24gbWF0Y2hpbmcgdGhlIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgdXBkYXRlIHF1ZXJ5IHNwZWNpZmljYXRpb24uXG4gICAgICogQHBhcmFtIHVwZGF0ZSBUaGUgdXBkYXRlIG9wZXJhdGlvbiBzcGVjaWZpY2F0aW9uIChlLmcuLCB7JHNldDogey4uLn19KS5cbiAgICAgKiBAcGFyYW0gdXBzZXJ0IElmIHRydWUsIGNyZWF0ZXMgYSBuZXcgZG9jdW1lbnQgaWYgbm8gZG9jdW1lbnRzIG1hdGNoIHRoZSBxdWVyeS5cbiAgICAgKiBAcGFyYW0gbXVsdGkgSWYgdHJ1ZSwgdXBkYXRlcyBhbGwgZG9jdW1lbnRzIG1hdGNoaW5nIHRoZSBxdWVyeTsgb3RoZXJ3aXNlLCBvbmx5IG9uZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlKHF1ZXJ5OiBEQklucHV0LCB1cGRhdGU6IERCSW5wdXQsIHVwc2VydD86IGJvb2xlYW4sIG11bHRpPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBxID0gaW1wbGljaXQocXVlcnkpO1xuICAgICAgICBjb25zdCB1ID0gaW1wbGljaXQodXBkYXRlKTtcbiAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgIGlmICh1KSB7XG4gICAgICAgICAgICAgICAgaWYgKHVwc2VydCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXVsdGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLnVwZGF0ZShxLm5hdGl2ZSwgdS5uYXRpdmUsIHVwc2VydCwgbXVsdGkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmUudXBkYXRlKHEubmF0aXZlLCB1Lm5hdGl2ZSwgdXBzZXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLnVwZGF0ZShxLm5hdGl2ZSwgdS5uYXRpdmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHVwZGF0ZSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBxdWVyeSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgbXVsdGlwbGUgZG9jdW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uIG1hdGNoaW5nIHRoZSBxdWVyeS5cbiAgICAgKiAoRXF1aXZhbGVudCB0byBjYWxsaW5nIGB1cGRhdGVgIHdpdGggYG11bHRpPXRydWVgIGFuZCBgdXBzZXJ0PXRydWVgIGltcGxpY2l0bHkpLlxuICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgdXBkYXRlIHF1ZXJ5IHNwZWNpZmljYXRpb24uXG4gICAgICogQHBhcmFtIHVwZGF0ZSBUaGUgdXBkYXRlIG9wZXJhdGlvbiBzcGVjaWZpY2F0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVNdWx0aShxdWVyeTogREJJbnB1dCwgdXBkYXRlOiBEQklucHV0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGNvbnN0IHUgPSBpbXBsaWNpdCh1cGRhdGUpO1xuICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZS51cGRhdGUocS5uYXRpdmUsIHUubmF0aXZlLCB0cnVlLCB0cnVlKTsgLy8gQXNzdW1pbmcgdXBkYXRlTXVsdGkgbWVhbnMgdXBzZXJ0PXRydWUgYW5kIG11bHRpPXRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHVwZGF0ZSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBxdWVyeSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBuZXh0IHNlcXVlbnRpYWwgSUQgYmFzZWQgb24gdGhlIGxhcmdlc3QgZXhpc3RpbmcgYF9pZGAgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAgICogQXNzdW1lcyBgX2lkYCBpcyBhIG51bWVyaWMgZmllbGQuXG4gICAgICogQHJldHVybnMgVGhlIG5leHQgYXZhaWxhYmxlIHNlcXVlbnRpYWwgSUQgKHN0YXJ0aW5nIGF0IDEgaWYgY29sbGVjdGlvbiBpcyBlbXB0eSkuXG4gICAgICovXG4gICAgcHVibGljIGdldE5leHRJZCgpOiBudW1iZXIge1xuICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5maW5kKHt9LCB7IFwiX2lkXCI6IDEgfSkuc29ydCh7IFwiX2lkXCI6IC0xIH0pLmxpbWl0KDEpO1xuICAgICAgICBpZiAoIWN1cnNvci5oYXNOZXh0KCkpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnNvci5uZXh0KClbXCJfaWRcIl0gKyAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgbmV3IHJhbmRvbSBVVUlEIChVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcikuXG4gICAgICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVVUlELlxuICAgICAqL1xuICAgIHB1YmxpYyBnZW5lcmF0ZVVVSUQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFVVSUQucmFuZG9tKCk7XG4gICAgfVxuXG59XG5cbi8qKlxuICogREJDdXJzb3Igb2JqZWN0IHdyYXBwZXIgZm9yIGl0ZXJhdGluZyBvdmVyIHJlc3VsdHMgb2YgYSBNb25nb0RCIHF1ZXJ5LlxuICovXG5leHBvcnQgY2xhc3MgREJDdXJzb3Ige1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIE1vbmdvREIgREJDdXJzb3Igb2JqZWN0LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgREJDdXJzb3IgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIG5hdGl2ZSBUaGUgbmF0aXZlIE1vbmdvREIgREJDdXJzb3Igb2JqZWN0LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gbmF0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNpbmdsZSByZXN1bHQgZnJvbSB0aGUgY3Vyc29yLlxuICAgICAqIEByZXR1cm5zIEEgREJPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBkb2N1bWVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25lKCk6IERCT2JqZWN0IHtcbiAgICAgICAgY29uc3QgZGJPYmplY3QgPSBuZXcgREJPYmplY3QodGhpcy5uYXRpdmUub25lKCkpO1xuICAgICAgICBleHRyYWN0KGRiT2JqZWN0KTtcbiAgICAgICAgcmV0dXJuIGRiT2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGJhdGNoIHNpemUgZm9yIHRoZSBjdXJzb3IuXG4gICAgICogQHBhcmFtIG51bWJlck9mRWxlbWVudHMgVGhlIGJhdGNoIHNpemUuXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgYmF0Y2hTaXplKG51bWJlck9mRWxlbWVudHM6IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUuYmF0Y2hTaXplKG51bWJlck9mRWxlbWVudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGJhdGNoIHNpemUuXG4gICAgICogQHJldHVybnMgVGhlIGJhdGNoIHNpemUuXG4gICAgICovXG4gICAgcHVibGljIGdldEJhdGNoU2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZ2V0QmF0Y2hTaXplKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sbGVjdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBjdXJzb3IuXG4gICAgICogQHJldHVybnMgVGhlIERCQ29sbGVjdGlvbiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29sbGVjdGlvbigpOiBEQkNvbGxlY3Rpb24ge1xuICAgICAgICByZXR1cm4gbmV3IERCQ29sbGVjdGlvbih0aGlzLm5hdGl2ZS5nZXRDb2xsZWN0aW9uKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGN1cnNvciBJRC5cbiAgICAgKiBAcmV0dXJucyBUaGUgY3Vyc29yIElEIHN0cmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q3Vyc29ySWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmdldEN1cnNvcklkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcHJvamVjdGlvbiBvYmplY3QgKGZpZWxkcyB3YW50ZWQpIHVzZWQgaW4gdGhlIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIFRoZSBwcm9qZWN0aW9uIERCT2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRLZXlzV2FudGVkKCk6IERCT2JqZWN0IHtcbiAgICAgICAgY29uc3QgZGJPYmplY3QgPSBuZXcgREJPYmplY3QodGhpcy5uYXRpdmUuZ2V0S2V5c1dhbnRlZCgpKTtcbiAgICAgICAgZXh0cmFjdChkYk9iamVjdCk7XG4gICAgICAgIHJldHVybiBkYk9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsaW1pdCBzZXQgb24gdGhlIGN1cnNvci5cbiAgICAgKiBAcmV0dXJucyBUaGUgbGltaXQgbnVtYmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRMaW1pdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TGltaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGN1cnNvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgbmV4dCBkb2N1bWVudCBpbiB0aGUgY3Vyc29yLlxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlcmUgaXMgYSBuZXh0IGRvY3VtZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGhhc05leHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZS5oYXNOZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBuZXh0IGRvY3VtZW50IGluIHRoZSBjdXJzb3IuXG4gICAgICogQHJldHVybnMgVGhlIG5leHQgZG9jdW1lbnQgYXMgYSBEQk9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmV4dCgpOiBEQk9iamVjdCB7XG4gICAgICAgIGNvbnN0IGRiT2JqZWN0ID0gbmV3IERCT2JqZWN0KHRoaXMubmF0aXZlLm5leHQoKSk7XG4gICAgICAgIGV4dHJhY3QoZGJPYmplY3QpO1xuICAgICAgICByZXR1cm4gZGJPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcXVlcnkgb2JqZWN0IHVzZWQgdG8gY3JlYXRlIHRoaXMgY3Vyc29yLlxuICAgICAqIEByZXR1cm5zIFRoZSBxdWVyeSBEQk9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UXVlcnkoKTogREJPYmplY3Qge1xuICAgICAgICBjb25zdCBkYk9iamVjdCA9IG5ldyBEQk9iamVjdCh0aGlzLm5hdGl2ZS5nZXRRdWVyeSgpKTtcbiAgICAgICAgZXh0cmFjdChkYk9iamVjdCk7XG4gICAgICAgIHJldHVybiBkYk9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIG1hdGNoZWQgYnkgdGhlIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIFRoZSB0b3RhbCBudW1iZXIgb2YgZG9jdW1lbnRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmxlbmd0aCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIHF1ZXJ5IHJldHVybnMgdGhlIHJlc3VsdHMuXG4gICAgICogQHBhcmFtIG9yZGVyQnkgVGhlIHNvcnRpbmcgc3BlY2lmaWNhdGlvbiAoZS5nLiwge2ZpZWxkOiAxfSBmb3IgYXNjZW5kaW5nKS5cbiAgICAgKiBAcmV0dXJucyBUaGUgREJDdXJzb3IgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBzb3J0KG9yZGVyQnk6IERCSW5wdXQpOiBEQkN1cnNvciB7XG4gICAgICAgIGNvbnN0IGRibyA9IGltcGxpY2l0KG9yZGVyQnkpO1xuICAgICAgICBpZiAoIWRibykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIG9yZGVyQnkgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYXRpdmUuc29ydChkYm8ubmF0aXZlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGltaXRzIHRoZSBudW1iZXIgb2YgcmVzdWx0cyB0byBiZSByZXR1cm5lZC5cbiAgICAgKiBAcGFyYW0gbGltaXQgVGhlIG1heGltdW0gbnVtYmVyIG9mIGRvY3VtZW50cyB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGltaXQobGltaXQ6IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUubGltaXQobGltaXQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGV4Y2x1c2l2ZSB1cHBlciBib3VuZCBmb3IgYSBzcGVjaWZpYyBpbmRleC5cbiAgICAgKiBAcGFyYW0gbWluIFRoZSBtaW5pbXVtIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIFRoZSBEQkN1cnNvciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAgICovXG4gICAgcHVibGljIG1pbihtaW46IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUubWluKG1pbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgZXhjbHVzaXZlIHVwcGVyIGJvdW5kIGZvciBhIHNwZWNpZmljIGluZGV4LlxuICAgICAqIEBwYXJhbSBtYXggVGhlIG1heGltdW0gdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWF4KG1heDogbnVtYmVyKTogREJDdXJzb3Ige1xuICAgICAgICB0aGlzLm5hdGl2ZS5tYXgobWF4KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIHRpbWVvdXQgZm9yIHRoZSBzZXJ2ZXIgdG8gZXhlY3V0ZSB0aGUgcXVlcnkuXG4gICAgICogQHBhcmFtIG1heFRpbWUgVGhlIG1heGltdW0gdGltZSBpbiBtaWxsaXNlY29uZHMuXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWF4VGltZShtYXhUaW1lOiBudW1iZXIpOiBEQkN1cnNvciB7XG4gICAgICAgIHRoaXMubmF0aXZlLm1heFRpbWUobWF4VGltZSwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0IHNldC5cbiAgICAgKiBAcmV0dXJucyBUaGUgc2l6ZSBudW1iZXIuXG4gICAgICovXG4gICAgcHVibGljIHNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnNpemUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTa2lwcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkb2N1bWVudHMuXG4gICAgICogQHBhcmFtIG51bWJlck9mRWxlbWVudHMgVGhlIG51bWJlciBvZiBkb2N1bWVudHMgdG8gc2tpcC5cbiAgICAgKiBAcmV0dXJucyBUaGUgREJDdXJzb3IgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBza2lwKG51bWJlck9mRWxlbWVudHM6IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUuc2tpcChudW1iZXJPZkVsZW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQSxNQUFNLGdCQUFnQixLQUFLLEtBQUssNERBQTREO0FBQzVGLE1BQU0sV0FBVyxLQUFLLEtBQUssK0JBQStCO0FBQzFELFNBQVMsWUFBWTtBQVlkLE1BQU0sU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFZbEIsWUFBWSxRQUFhO0FBQ3JCLFNBQUssU0FBUztBQUFBLEVBQ2xCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyxPQUFPLEtBQWEsT0FBc0I7QUFDN0MsU0FBSyxPQUFPLE9BQU8sS0FBSyxLQUFLO0FBQzdCLFdBQU87QUFBQSxFQUNYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1PLFNBQWlDO0FBQ3BDLFdBQU8sS0FBSyxPQUFPLE9BQU87QUFBQSxFQUM5QjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS08sc0JBQTRCO0FBQy9CLFNBQUssT0FBTyxvQkFBb0I7QUFBQSxFQUNwQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNTyxrQkFBMkI7QUFDOUIsV0FBTyxLQUFLLE9BQU8sZ0JBQWdCO0FBQUEsRUFDdkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTyxjQUFjLEtBQXNCO0FBQ3ZDLFdBQU8sS0FBSyxPQUFPLGNBQWMsR0FBRztBQUFBLEVBQ3hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT08sSUFBSSxLQUFrQjtBQUN6QixXQUFPLEtBQUssT0FBTyxJQUFJLEdBQUc7QUFBQSxFQUM5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sSUFBSSxLQUFhLE9BQWlCO0FBQ3JDLFdBQU8sS0FBSyxPQUFPLElBQUksS0FBSyxLQUFLO0FBQUEsRUFD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QUFDdEIsV0FBTyxLQUFLLE9BQU8sUUFBUTtBQUFBLEVBQy9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1PLE9BQWlCO0FBQ3BCLFVBQU0sV0FBVyxJQUFJLFNBQVMsS0FBSyxPQUFPLEtBQUssQ0FBQztBQUNoRCxZQUFRLFFBQVE7QUFDaEIsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTU8sV0FBcUI7QUFDeEIsVUFBTSxXQUFXLElBQUksU0FBUyxLQUFLLE9BQU8sU0FBUyxDQUFDO0FBQ3BELFlBQVEsUUFBUTtBQUNoQixXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNTyxTQUFpQjtBQUNwQixXQUFPLEtBQUssT0FBTyxPQUFPO0FBQUEsRUFDOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTyxLQUFLLFNBQTRCO0FBQ3BDLFVBQU0sTUFBTSxTQUFTLE9BQU87QUFDNUIsUUFBSSxDQUFDLEtBQUs7QUFDTixZQUFNLElBQUksTUFBTSx3Q0FBd0M7QUFBQSxJQUM1RDtBQUNBLFNBQUssT0FBTyxLQUFLLElBQUksTUFBTTtBQUMzQixXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9PLE1BQU0sT0FBeUI7QUFDbEMsU0FBSyxPQUFPLE1BQU0sS0FBSztBQUN2QixXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9PLElBQUksS0FBdUI7QUFDOUIsU0FBSyxPQUFPLElBQUksR0FBRztBQUNuQixXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9PLElBQUksS0FBdUI7QUFDOUIsU0FBSyxPQUFPLElBQUksR0FBRztBQUNuQixXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9PLFFBQVEsU0FBMkI7QUFDdEMsU0FBSyxPQUFPLFFBQVEsU0FBUyxTQUFTLFlBQVk7QUFDbEQsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTU8sT0FBZTtBQUNsQixXQUFPLEtBQUssT0FBTyxLQUFLO0FBQUEsRUFDNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTyxLQUFLLGtCQUFvQztBQUM1QyxTQUFLLE9BQU8sS0FBSyxnQkFBZ0I7QUFDakMsV0FBTztBQUFBLEVBQ1g7QUFFSjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
633
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21vbmdvZGIvY2xpZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBNb25nb0RCRmFjYWRlID0gSmF2YS50eXBlKFwib3JnLmVjbGlwc2UuZGlyaWdpYmxlLmNvbXBvbmVudHMuYXBpLm1vbmdvZGIuTW9uZ29EQkZhY2FkZVwiKTtcbmNvbnN0IFRpbWVVbml0ID0gSmF2YS50eXBlKFwiamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXRcIik7XG5pbXBvcnQgeyBVVUlEIH0gZnJvbSBcIkBhZXJva2l0L3Nkay91dGlscy91dWlkXCI7XG5cbi8qKlxuICogRGVmaW5lIGEgY29tbW9uIHR5cGUgZm9yIGlucHV0IHRvIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdCBlaXRoZXIgYSBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdFxuICogKHdoaWNoIHdpbGwgYmUgaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gREJPYmplY3QpIG9yIGFuIGV4aXN0aW5nIERCT2JqZWN0IHdyYXBwZXIgaW5zdGFuY2UuXG4gKi9cbnR5cGUgREJJbnB1dCA9IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBEQk9iamVjdCB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbi8qKlxuICogREJPYmplY3Qgb2JqZWN0IHJlcHJlc2VudHMgYSBCU09OIGRvY3VtZW50IHVzZWQgZm9yIHF1ZXJpZXMsIGluc2VydGlvbnMsIGFuZCB1cGRhdGVzLlxuICogSXQgd3JhcHMgdGhlIHVuZGVybHlpbmcgbmF0aXZlIEphdmEgb2JqZWN0LlxuICovXG5leHBvcnQgY2xhc3MgREJPYmplY3Qge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIEphdmEgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgQlNPTiBkb2N1bWVudC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBuYXRpdmU6IGFueTtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgREJPYmplY3QgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIG5hdGl2ZSBUaGUgbmF0aXZlIE1vbmdvREIgb2JqZWN0IChlLmcuLCBjb20ubW9uZ29kYi5EQk9iamVjdClcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuICAgICAgICB0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmRzIGEga2V5LXZhbHVlIHBhaXIgdG8gdGhlIERCT2JqZWN0LlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGZpZWxkIG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBhcHBlbmQuXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgREJPYmplY3QgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBhcHBlbmQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBEQk9iamVjdCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIERCT2JqZWN0IHRvIGEgc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gKEpTT04pLlxuICAgICAqIEByZXR1cm5zIEEgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHRvSnNvbigpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnRvSnNvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBvYmplY3QgYXMgYSBwYXJ0aWFsIG9iamVjdCAodXNlZCBpbnRlcm5hbGx5IGJ5IE1vbmdvREIgZHJpdmVyKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWFya0FzUGFydGlhbE9iamVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYXRpdmUubWFya0FzUGFydGlhbE9iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgb2JqZWN0IGlzIGEgcGFydGlhbCBvYmplY3QuXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBwYXJ0aWFsLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGlzUGFydGlhbE9iamVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmlzUGFydGlhbE9iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgREJPYmplY3QgY29udGFpbnMgYSBmaWVsZCB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGZpZWxkIG5hbWUuXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZmllbGQgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGNvbnRhaW5zRmllbGQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmNvbnRhaW5zRmllbGQoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleS5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBmaWVsZCBuYW1lLlxuICAgICAqIEByZXR1cm5zIFRoZSBmaWVsZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmdldChrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFB1dHMgYSBrZXktdmFsdWUgcGFpciBpbnRvIHRoZSBEQk9iamVjdC5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBmaWVsZCBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHV0LlxuICAgICAqIEByZXR1cm5zIFRoZSBwcmV2aW91cyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSwgb3IgbnVsbC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcHV0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnB1dChrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgZmllbGQgZnJvbSB0aGUgREJPYmplY3QuXG4gICAgICogQHBhcmFtIGtleSBUaGUgZmllbGQgbmFtZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMgVGhlIHJlbW92ZWQgZmllbGQgdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUZpZWxkKGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnJlbW92ZUZpZWxkKGtleSk7XG4gICAgfVxuXG59XG5cbi8qKlxuICogQ29waWVzIHRoZSBwcm9wZXJ0aWVzIGZyb20gdGhlIG5hdGl2ZSBNb25nb0RCIG9iamVjdCdzIEpTT04gcmVwcmVzZW50YXRpb25cbiAqIG9udG8gdGhlIHB1YmxpYyBwcm9wZXJ0aWVzIG9mIHRoZSBEQk9iamVjdCB3cmFwcGVyIGluc3RhbmNlLlxuICogVGhpcyBhbGxvd3MgZGlyZWN0IGFjY2VzcyBsaWtlIGBkYk9iamVjdC5maWVsZE5hbWVgLlxuICogQHBhcmFtIGRiT2JqZWN0IFRoZSBEQk9iamVjdCB3cmFwcGVyIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIGV4dHJhY3RlZCBwcm9wZXJ0aWVzIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdChkYk9iamVjdDogREJPYmplY3QpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAoIWRiT2JqZWN0Lm5hdGl2ZSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIC8vIFBhcnNlIHRoZSBuYXRpdmUgb2JqZWN0J3MgSlNPTiByZXByZXNlbnRhdGlvblxuICAgIHZhciBleHRyYWN0ZWQgPSBKU09OLnBhcnNlKGRiT2JqZWN0Lm5hdGl2ZS50b0pzb24oKSk7XG4gICAgLy8gQ29weSBhbGwgcHJvcGVydGllcyB0byB0aGUgd3JhcHBlciBpbnN0YW5jZVxuICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBleHRyYWN0ZWQpIHtcbiAgICAgICAgZGJPYmplY3RbcHJvcGVydHlOYW1lXSA9IGV4dHJhY3RlZFtwcm9wZXJ0eU5hbWVdO1xuICAgIH1cbiAgICByZXR1cm4gZXh0cmFjdGVkO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBpbXBsaWNpdGx5IGNvbnZlcnQgYSBwbGFpbiBKUyBvYmplY3QgdG8gYSBEQk9iamVjdCxcbiAqIG9yIHJldHVybiB0aGUgZXhpc3RpbmcgREJPYmplY3QgaW5zdGFuY2UuXG4gKiBAcGFyYW0gb2JqZWN0IElucHV0IG9iamVjdCB3aGljaCBjYW4gYmUgYSBwbGFpbiBvYmplY3QsIERCT2JqZWN0LCBvciB1bmRlZmluZWQvbnVsbC5cbiAqIEByZXR1cm5zIERCT2JqZWN0IG9yIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gaW1wbGljaXQob2JqZWN0OiBEQklucHV0KTogREJPYmplY3QgfCB1bmRlZmluZWQge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIEV4cGxpY2l0bHkgcmV0dXJuIHVuZGVmaW5lZCBpZiBpbnB1dCBpcyBmYWxzeVxuICAgIH1cbiAgICAvLyBDaGVjayBpZiBpdCBhbHJlYWR5IGhhcyB0aGUgbmF0aXZlIHByb3BlcnR5IChhc3N1bWVzIGl0J3MgYSBEQk9iamVjdCBvciBzaW1pbGFyIHdyYXBwZXIpXG4gICAgaWYgKChvYmplY3QgYXMgYW55KS5uYXRpdmUpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCBhcyBEQk9iamVjdDtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHBsYWluIG9iamVjdCB0byBEQk9iamVjdFxuICAgIHZhciBkYk9iamVjdCA9IGNyZWF0ZUJhc2ljREJPYmplY3QoKTtcblxuICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBvYmplY3QpIHtcbiAgICAgICAgZGJPYmplY3QuYXBwZW5kKHByb3BlcnR5TmFtZSwgb2JqZWN0W3Byb3BlcnR5TmFtZV0pO1xuICAgIH1cbiAgICByZXR1cm4gZGJPYmplY3Q7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgREJPYmplY3QgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBIG5ldyBEQk9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJhc2ljREJPYmplY3QoKTogREJPYmplY3Qge1xuICAgIGNvbnN0IGRiT2JqZWN0ID0gbmV3IERCT2JqZWN0KE1vbmdvREJGYWNhZGUuY3JlYXRlQmFzaWNEQk9iamVjdCgpKTtcbiAgICBleHRyYWN0KGRiT2JqZWN0KTtcbiAgICByZXR1cm4gZGJPYmplY3Q7XG59XG5cbi8qKlxuICogQ2xpZW50IG9iamVjdCB3cmFwcGVyIGZvciBjb25uZWN0aW5nIHRvIE1vbmdvREIuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbGllbnQge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIE1vbmdvREIgY2xpZW50IG9iamVjdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IE1vbmdvREIgQ2xpZW50IGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB1cmkgVGhlIE1vbmdvREIgY29ubmVjdGlvbiBVUkkuXG4gICAgICogQHBhcmFtIHVzZXIgVGhlIHVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgVGhlIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdXNlcjogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gTW9uZ29EQkZhY2FkZS5nZXRDbGllbnQodXJpLCB1c2VyLCBwYXNzd29yZClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSBkYXRhYmFzZSBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gbmFtZSBPcHRpb25hbCBuYW1lIG9mIHRoZSBkYXRhYmFzZS4gSWYgbm90IHByb3ZpZGVkLCB0aGUgZGVmYXVsdCBkYXRhYmFzZSBuYW1lIGlzIHVzZWQuXG4gICAgICogQHJldHVybnMgQSBEQiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0REIobmFtZT86IHN0cmluZyk6IERCIHtcbiAgICAgICAgbGV0IG5hdGl2ZSA9IG51bGw7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5nZXREQihuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHREQiA9IE1vbmdvREJGYWNhZGUuZ2V0RGVmYXVsdERhdGFiYXNlTmFtZSgpO1xuICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0REIoZGVmYXVsdERCKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgREIobmF0aXZlKTtcbiAgICB9XG59XG5cbi8qKlxuICogREIgb2JqZWN0IHdyYXBwZXIgZm9yIGEgTW9uZ29EQiBkYXRhYmFzZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERCIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBNb25nb0RCIERCIG9iamVjdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IERCIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBuYXRpdmUgVGhlIG5hdGl2ZSBNb25nb0RCIERCIG9iamVjdC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuICAgICAgICB0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSBjb2xsZWN0aW9uIGluc3RhbmNlIGZyb20gdGhlIGRhdGFiYXNlLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEByZXR1cm5zIEEgREJDb2xsZWN0aW9uIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb2xsZWN0aW9uKG5hbWU6IHN0cmluZyk6IERCQ29sbGVjdGlvbiB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmdldENvbGxlY3Rpb24obmFtZSk7XG4gICAgICAgIHJldHVybiBuZXcgREJDb2xsZWN0aW9uKG5hdGl2ZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIERCQ29sbGVjdGlvbiBvYmplY3Qgd3JhcHBlciBmb3IgYSBNb25nb0RCIGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBEQkNvbGxlY3Rpb24ge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIE1vbmdvREIgREJDb2xsZWN0aW9uIG9iamVjdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IERCQ29sbGVjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gbmF0aXZlIFRoZSBuYXRpdmUgTW9uZ29EQiBEQkNvbGxlY3Rpb24gb2JqZWN0LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gbmF0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluc2VydHMgYSBkb2N1bWVudCBpbnRvIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBkYk9iamVjdCBUaGUgZG9jdW1lbnQgdG8gaW5zZXJ0IChjYW4gYmUgYSBwbGFpbiBKUyBvYmplY3Qgb3IgREJPYmplY3QpLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbnNlcnQoZGJPYmplY3Q6IERCSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGJvID0gaW1wbGljaXQoZGJPYmplY3QpO1xuICAgICAgICBpZiAoZGJvKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZS5pbnNlcnQoZGJvLm5hdGl2ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBkb2N1bWVudHMgbWF0Y2hpbmcgdGhlIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgcXVlcnkgc3BlY2lmaWNhdGlvbiAoY2FuIGJlIGEgcGxhaW4gSlMgb2JqZWN0IG9yIERCT2JqZWN0KS5cbiAgICAgKiBAcGFyYW0gcHJvamVjdGlvbiBUaGUgZmllbGRzIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSAoY2FuIGJlIGEgcGxhaW4gSlMgb2JqZWN0IG9yIERCT2JqZWN0KS5cbiAgICAgKiBAcmV0dXJucyBBIERCQ3Vyc29yIGZvciBpdGVyYXRpbmcgb3ZlciByZXN1bHRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kKHF1ZXJ5PzogREJJbnB1dCwgcHJvamVjdGlvbj86IERCSW5wdXQpOiBEQkN1cnNvciB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGNvbnN0IHAgPSBpbXBsaWNpdChwcm9qZWN0aW9uKTtcblxuICAgICAgICB2YXIgbmF0aXZlID0gbnVsbDtcbiAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZmluZChxLm5hdGl2ZSwgcC5uYXRpdmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kKHEubmF0aXZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5hdGl2ZSA9IHRoaXMubmF0aXZlLmZpbmQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgREJDdXJzb3IobmF0aXZlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBhIHNpbmdsZSBkb2N1bWVudCBtYXRjaGluZyB0aGUgcXVlcnkuXG4gICAgICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSBzcGVjaWZpY2F0aW9uLlxuICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uIFRoZSBmaWVsZHMgdG8gaW5jbHVkZSBvciBleGNsdWRlLlxuICAgICAqIEBwYXJhbSBzb3J0IFRoZSBzb3J0aW5nIHNwZWNpZmljYXRpb24uXG4gICAgICogQHJldHVybnMgVGhlIGZvdW5kIGRvY3VtZW50IGFzIGEgREJPYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGZpbmRPbmUocXVlcnk6IERCSW5wdXQsIHByb2plY3Rpb246IERCSW5wdXQsIHNvcnQ6IERCSW5wdXQpOiBEQk9iamVjdCB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGNvbnN0IHAgPSBpbXBsaWNpdChwcm9qZWN0aW9uKTtcbiAgICAgICAgY29uc3QgcyA9IGltcGxpY2l0KHNvcnQpO1xuXG4gICAgICAgIHZhciBkYk9iamVjdCA9IGNyZWF0ZUJhc2ljREJPYmplY3QoKTtcbiAgICAgICAgdmFyIG5hdGl2ZSA9IG51bGw7XG4gICAgICAgIGlmIChxKSB7XG4gICAgICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZSA9IHRoaXMubmF0aXZlLmZpbmRPbmUocS5uYXRpdmUsIHAubmF0aXZlLCBzLm5hdGl2ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZmluZE9uZShxLm5hdGl2ZSwgcC5uYXRpdmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZmluZE9uZShxLm5hdGl2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kT25lKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGJPYmplY3QubmF0aXZlID0gbmF0aXZlO1xuICAgICAgICBleHRyYWN0KGRiT2JqZWN0KTtcbiAgICAgICAgcmV0dXJuIGRiT2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIGEgc2luZ2xlIGRvY3VtZW50IGJ5IGl0cyBzdHJpbmcgSUQuXG4gICAgICogQHBhcmFtIGlkIFRoZSBzdHJpbmcgSUQgb2YgdGhlIGRvY3VtZW50LlxuICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uIFRoZSBmaWVsZHMgdG8gaW5jbHVkZSBvciBleGNsdWRlLlxuICAgICAqIEByZXR1cm5zIFRoZSBmb3VuZCBkb2N1bWVudCBhcyBhIERCT2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kT25lQnlJZChpZDogc3RyaW5nLCBwcm9qZWN0aW9uPzogREJJbnB1dCk6IERCT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcCA9IGltcGxpY2l0KHByb2plY3Rpb24pO1xuICAgICAgICBjb25zdCBkYk9iamVjdCA9IGNyZWF0ZUJhc2ljREJPYmplY3QoKTtcbiAgICAgICAgbGV0IG5hdGl2ZSA9IG51bGw7XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kT25lKGlkLCBwLm5hdGl2ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kT25lKGlkKTtcbiAgICAgICAgfVxuICAgICAgICBkYk9iamVjdC5uYXRpdmUgPSBuYXRpdmU7XG4gICAgICAgIGV4dHJhY3QoZGJPYmplY3QpO1xuICAgICAgICByZXR1cm4gZGJPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ291bnRzIHRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uLCBvcHRpb25hbGx5IGZpbHRlcmVkIGJ5IGEgcXVlcnkuXG4gICAgICogQHBhcmFtIHF1ZXJ5IE9wdGlvbmFsIHF1ZXJ5IHRvIGZpbHRlciB0aGUgY291bnQuXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBkb2N1bWVudHMuXG4gICAgICovXG4gICAgcHVibGljIGNvdW50KHF1ZXJ5PzogREJJbnB1dCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGlmIChxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuY291bnQocS5uYXRpdmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZS5jb3VudCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvdW50IG9mIGRvY3VtZW50cyAoYWxpYXMgZm9yIGNvdW50KS5cbiAgICAgKiBAcGFyYW0gcXVlcnkgT3B0aW9uYWwgcXVlcnkgdG8gZmlsdGVyIHRoZSBjb3VudC5cbiAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGRvY3VtZW50cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q291bnQocXVlcnk6IERCSW5wdXQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBxID0gaW1wbGljaXQocXVlcnkpO1xuICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmdldENvdW50KHEubmF0aXZlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZ2V0Q291bnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluZGV4IG9uIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBrZXlzIFRoZSBpbmRleCBrZXkgc3BlY2lmaWNhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBpbmRleCBvcHRpb25zLlxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVJbmRleChrZXlzOiBEQklucHV0LCBvcHRpb25zOiBEQklucHV0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGsgPSBpbXBsaWNpdChrZXlzKTtcbiAgICAgICAgY29uc3QgbyA9IGltcGxpY2l0KG9wdGlvbnMpO1xuICAgICAgICBpZiAoaykge1xuICAgICAgICAgICAgaWYgKG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZS5jcmVhdGVJbmRleChrLm5hdGl2ZSwgby5uYXRpdmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZS5jcmVhdGVJbmRleChrLm5hdGl2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdCBsZWFzdCBLZXlzIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbmRleCBvbiBhIHNpbmdsZSBmaWVsZCBieSBuYW1lLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBpbmRleC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlSW5kZXhGb3JGaWVsZChuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlLmNyZWF0ZUluZGV4KG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGZpbGVkIG5hbWUgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgZGlzdGluY3QgdmFsdWVzIGZvciBhIHNwZWNpZmllZCBmaWVsZCBhY3Jvc3MgYSBjb2xsZWN0aW9uLlxuICAgICAqIE5PVEU6IFRoZSBzaWduYXR1cmUgaW4gdGhlIG9yaWdpbmFsIGNvZGUgc2VlbXMgc2xpZ2h0bHkgb2ZmIGNvbXBhcmVkIHRvIHR5cGljYWwgTW9uZ29EQiBkcml2ZXJzLlxuICAgICAqIFRoaXMgaW1wbGVtZW50YXRpb24gZm9sbG93cyB0aGUgb3JpZ2luYWwgc3RydWN0dXJlIHVzaW5nIGBrZXlzLm5hdGl2ZWAgaWYgYGtleXNgIGlzIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBmaWVsZCBuYW1lLlxuICAgICAqIEBwYXJhbSBxdWVyeSBPcHRpb25hbCBxdWVyeSB0byBmaWx0ZXIgcmVzdWx0cy5cbiAgICAgKiBAcGFyYW0ga2V5cyBPcHRpb25hbCBrZXlzIHRvIHVzZSBmb3IgZGlzdGluY3QgKHJlcGxhY2VzICduYW1lJyBpZiBwcm92aWRlZCBhbmQgcXVlcnkgZXhpc3RzKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGlzdGluY3QobmFtZTogc3RyaW5nLCBxdWVyeTogREJJbnB1dCwga2V5czogREJJbnB1dCk6IHZvaWQge1xuICAgICAgICBjb25zdCBxID0gaW1wbGljaXQocXVlcnkpO1xuICAgICAgICBjb25zdCBrID0gaW1wbGljaXQoa2V5cyk7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHF1ZXJ5IGlzIHByb3ZpZGVkLCB1c2Uga2V5cyBmb3IgdGhlIGZpZWxkIG5hbWUgaWYgayBpcyBwcmVzZW50LCBvdGhlcndpc2UgdXNlICduYW1lJ1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLmRpc3RpbmN0KGsgPyBrLm5hdGl2ZSA6IG5hbWUsIHEubmF0aXZlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmUuZGlzdGluY3QobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdCBsZWFzdCB0aGUgZmlsZWQgbmFtZSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGEgc3BlY2lmaWVkIGluZGV4LlxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgbmFtZSBvZiB0aGUgaW5kZXggb3IgdGhlIERCT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgaW5kZXgga2V5cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZHJvcEluZGV4KGluZGV4OiBzdHJpbmcgfCBEQklucHV0KTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZS5kcm9wSW5kZXgoaW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGJvID0gaW1wbGljaXQoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKGRibykge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLmRyb3BJbmRleChkYm8ubmF0aXZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGEgc3BlY2lmaWVkIGluZGV4IGJ5IG5hbWUuXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGluZGV4LlxuICAgICAqL1xuICAgIHB1YmxpYyBkcm9wSW5kZXhCeU5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmRyb3BJbmRleChuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyBhbGwgaW5kZXhlcyBvbiB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZHJvcEluZGV4ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmRyb3BJbmRleGVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBkb2N1bWVudHMgZnJvbSB0aGUgY29sbGVjdGlvbiBtYXRjaGluZyB0aGUgcXVlcnkuXG4gICAgICogQHBhcmFtIHF1ZXJ5IFRoZSBkZWxldGlvbiBxdWVyeSBzcGVjaWZpY2F0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmUocXVlcnk6IERCSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcSA9IGltcGxpY2l0KHF1ZXJ5KTtcbiAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlLnJlbW92ZShxLm5hdGl2ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5hbWVzIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBuZXdOYW1lIFRoZSBuZXcgbmFtZSBmb3IgdGhlIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIHJlbmFtZShuZXdOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYXRpdmUucmVuYW1lKG5ld05hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIGEgZG9jdW1lbnQgdG8gdGhlIGNvbGxlY3Rpb24uIElmIHRoZSBkb2N1bWVudCBoYXMgYW4gYF9pZGAsIGl0IHBlcmZvcm1zIGFuIHVwZGF0ZTtcbiAgICAgKiBvdGhlcndpc2UsIGl0IHBlcmZvcm1zIGFuIGluc2VydC5cbiAgICAgKiBAcGFyYW0gZGJPYmplY3QgVGhlIGRvY3VtZW50IHRvIHNhdmUuXG4gICAgICovXG4gICAgcHVibGljIHNhdmUoZGJPYmplY3Q6IERCSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGJvID0gaW1wbGljaXQoZGJPYmplY3QpO1xuICAgICAgICBpZiAoZGJvKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZS5zYXZlKGRiby5uYXRpdmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBkb2N1bWVudHMgaW4gdGhlIGNvbGxlY3Rpb24gbWF0Y2hpbmcgdGhlIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgdXBkYXRlIHF1ZXJ5IHNwZWNpZmljYXRpb24uXG4gICAgICogQHBhcmFtIHVwZGF0ZSBUaGUgdXBkYXRlIG9wZXJhdGlvbiBzcGVjaWZpY2F0aW9uIChlLmcuLCB7JHNldDogey4uLn19KS5cbiAgICAgKiBAcGFyYW0gdXBzZXJ0IElmIHRydWUsIGNyZWF0ZXMgYSBuZXcgZG9jdW1lbnQgaWYgbm8gZG9jdW1lbnRzIG1hdGNoIHRoZSBxdWVyeS5cbiAgICAgKiBAcGFyYW0gbXVsdGkgSWYgdHJ1ZSwgdXBkYXRlcyBhbGwgZG9jdW1lbnRzIG1hdGNoaW5nIHRoZSBxdWVyeTsgb3RoZXJ3aXNlLCBvbmx5IG9uZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlKHF1ZXJ5OiBEQklucHV0LCB1cGRhdGU6IERCSW5wdXQsIHVwc2VydD86IGJvb2xlYW4sIG11bHRpPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBxID0gaW1wbGljaXQocXVlcnkpO1xuICAgICAgICBjb25zdCB1ID0gaW1wbGljaXQodXBkYXRlKTtcbiAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgIGlmICh1KSB7XG4gICAgICAgICAgICAgICAgaWYgKHVwc2VydCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXVsdGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLnVwZGF0ZShxLm5hdGl2ZSwgdS5uYXRpdmUsIHVwc2VydCwgbXVsdGkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmUudXBkYXRlKHEubmF0aXZlLCB1Lm5hdGl2ZSwgdXBzZXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLnVwZGF0ZShxLm5hdGl2ZSwgdS5uYXRpdmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHVwZGF0ZSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBxdWVyeSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgbXVsdGlwbGUgZG9jdW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uIG1hdGNoaW5nIHRoZSBxdWVyeS5cbiAgICAgKiAoRXF1aXZhbGVudCB0byBjYWxsaW5nIGB1cGRhdGVgIHdpdGggYG11bHRpPXRydWVgIGFuZCBgdXBzZXJ0PXRydWVgIGltcGxpY2l0bHkpLlxuICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgdXBkYXRlIHF1ZXJ5IHNwZWNpZmljYXRpb24uXG4gICAgICogQHBhcmFtIHVwZGF0ZSBUaGUgdXBkYXRlIG9wZXJhdGlvbiBzcGVjaWZpY2F0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVNdWx0aShxdWVyeTogREJJbnB1dCwgdXBkYXRlOiBEQklucHV0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGNvbnN0IHUgPSBpbXBsaWNpdCh1cGRhdGUpO1xuICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZS51cGRhdGUocS5uYXRpdmUsIHUubmF0aXZlLCB0cnVlLCB0cnVlKTsgLy8gQXNzdW1pbmcgdXBkYXRlTXVsdGkgbWVhbnMgdXBzZXJ0PXRydWUgYW5kIG11bHRpPXRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHVwZGF0ZSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBxdWVyeSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBuZXh0IHNlcXVlbnRpYWwgSUQgYmFzZWQgb24gdGhlIGxhcmdlc3QgZXhpc3RpbmcgYF9pZGAgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAgICogQXNzdW1lcyBgX2lkYCBpcyBhIG51bWVyaWMgZmllbGQuXG4gICAgICogQHJldHVybnMgVGhlIG5leHQgYXZhaWxhYmxlIHNlcXVlbnRpYWwgSUQgKHN0YXJ0aW5nIGF0IDEgaWYgY29sbGVjdGlvbiBpcyBlbXB0eSkuXG4gICAgICovXG4gICAgcHVibGljIGdldE5leHRJZCgpOiBudW1iZXIge1xuICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5maW5kKHt9LCB7IFwiX2lkXCI6IDEgfSkuc29ydCh7IFwiX2lkXCI6IC0xIH0pLmxpbWl0KDEpO1xuICAgICAgICBpZiAoIWN1cnNvci5oYXNOZXh0KCkpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnNvci5uZXh0KClbXCJfaWRcIl0gKyAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgbmV3IHJhbmRvbSBVVUlEIChVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcikuXG4gICAgICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVVUlELlxuICAgICAqL1xuICAgIHB1YmxpYyBnZW5lcmF0ZVVVSUQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFVVSUQucmFuZG9tKCk7XG4gICAgfVxuXG59XG5cbi8qKlxuICogREJDdXJzb3Igb2JqZWN0IHdyYXBwZXIgZm9yIGl0ZXJhdGluZyBvdmVyIHJlc3VsdHMgb2YgYSBNb25nb0RCIHF1ZXJ5LlxuICovXG5leHBvcnQgY2xhc3MgREJDdXJzb3Ige1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIE1vbmdvREIgREJDdXJzb3Igb2JqZWN0LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgREJDdXJzb3IgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIG5hdGl2ZSBUaGUgbmF0aXZlIE1vbmdvREIgREJDdXJzb3Igb2JqZWN0LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gbmF0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNpbmdsZSByZXN1bHQgZnJvbSB0aGUgY3Vyc29yLlxuICAgICAqIEByZXR1cm5zIEEgREJPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBkb2N1bWVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25lKCk6IERCT2JqZWN0IHtcbiAgICAgICAgY29uc3QgZGJPYmplY3QgPSBuZXcgREJPYmplY3QodGhpcy5uYXRpdmUub25lKCkpO1xuICAgICAgICBleHRyYWN0KGRiT2JqZWN0KTtcbiAgICAgICAgcmV0dXJuIGRiT2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGJhdGNoIHNpemUgZm9yIHRoZSBjdXJzb3IuXG4gICAgICogQHBhcmFtIG51bWJlck9mRWxlbWVudHMgVGhlIGJhdGNoIHNpemUuXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgYmF0Y2hTaXplKG51bWJlck9mRWxlbWVudHM6IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUuYmF0Y2hTaXplKG51bWJlck9mRWxlbWVudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGJhdGNoIHNpemUuXG4gICAgICogQHJldHVybnMgVGhlIGJhdGNoIHNpemUuXG4gICAgICovXG4gICAgcHVibGljIGdldEJhdGNoU2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZ2V0QmF0Y2hTaXplKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sbGVjdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBjdXJzb3IuXG4gICAgICogQHJldHVybnMgVGhlIERCQ29sbGVjdGlvbiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29sbGVjdGlvbigpOiBEQkNvbGxlY3Rpb24ge1xuICAgICAgICByZXR1cm4gbmV3IERCQ29sbGVjdGlvbih0aGlzLm5hdGl2ZS5nZXRDb2xsZWN0aW9uKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGN1cnNvciBJRC5cbiAgICAgKiBAcmV0dXJucyBUaGUgY3Vyc29yIElEIHN0cmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q3Vyc29ySWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmdldEN1cnNvcklkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcHJvamVjdGlvbiBvYmplY3QgKGZpZWxkcyB3YW50ZWQpIHVzZWQgaW4gdGhlIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIFRoZSBwcm9qZWN0aW9uIERCT2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRLZXlzV2FudGVkKCk6IERCT2JqZWN0IHtcbiAgICAgICAgY29uc3QgZGJPYmplY3QgPSBuZXcgREJPYmplY3QodGhpcy5uYXRpdmUuZ2V0S2V5c1dhbnRlZCgpKTtcbiAgICAgICAgZXh0cmFjdChkYk9iamVjdCk7XG4gICAgICAgIHJldHVybiBkYk9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsaW1pdCBzZXQgb24gdGhlIGN1cnNvci5cbiAgICAgKiBAcmV0dXJucyBUaGUgbGltaXQgbnVtYmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRMaW1pdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TGltaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGN1cnNvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgbmV4dCBkb2N1bWVudCBpbiB0aGUgY3Vyc29yLlxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlcmUgaXMgYSBuZXh0IGRvY3VtZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGhhc05leHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZS5oYXNOZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBuZXh0IGRvY3VtZW50IGluIHRoZSBjdXJzb3IuXG4gICAgICogQHJldHVybnMgVGhlIG5leHQgZG9jdW1lbnQgYXMgYSBEQk9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmV4dCgpOiBEQk9iamVjdCB7XG4gICAgICAgIGNvbnN0IGRiT2JqZWN0ID0gbmV3IERCT2JqZWN0KHRoaXMubmF0aXZlLm5leHQoKSk7XG4gICAgICAgIGV4dHJhY3QoZGJPYmplY3QpO1xuICAgICAgICByZXR1cm4gZGJPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcXVlcnkgb2JqZWN0IHVzZWQgdG8gY3JlYXRlIHRoaXMgY3Vyc29yLlxuICAgICAqIEByZXR1cm5zIFRoZSBxdWVyeSBEQk9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UXVlcnkoKTogREJPYmplY3Qge1xuICAgICAgICBjb25zdCBkYk9iamVjdCA9IG5ldyBEQk9iamVjdCh0aGlzLm5hdGl2ZS5nZXRRdWVyeSgpKTtcbiAgICAgICAgZXh0cmFjdChkYk9iamVjdCk7XG4gICAgICAgIHJldHVybiBkYk9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIG1hdGNoZWQgYnkgdGhlIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIFRoZSB0b3RhbCBudW1iZXIgb2YgZG9jdW1lbnRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmxlbmd0aCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIHF1ZXJ5IHJldHVybnMgdGhlIHJlc3VsdHMuXG4gICAgICogQHBhcmFtIG9yZGVyQnkgVGhlIHNvcnRpbmcgc3BlY2lmaWNhdGlvbiAoZS5nLiwge2ZpZWxkOiAxfSBmb3IgYXNjZW5kaW5nKS5cbiAgICAgKiBAcmV0dXJucyBUaGUgREJDdXJzb3IgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBzb3J0KG9yZGVyQnk6IERCSW5wdXQpOiBEQkN1cnNvciB7XG4gICAgICAgIGNvbnN0IGRibyA9IGltcGxpY2l0KG9yZGVyQnkpO1xuICAgICAgICBpZiAoIWRibykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIG9yZGVyQnkgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYXRpdmUuc29ydChkYm8ubmF0aXZlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGltaXRzIHRoZSBudW1iZXIgb2YgcmVzdWx0cyB0byBiZSByZXR1cm5lZC5cbiAgICAgKiBAcGFyYW0gbGltaXQgVGhlIG1heGltdW0gbnVtYmVyIG9mIGRvY3VtZW50cyB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGltaXQobGltaXQ6IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUubGltaXQobGltaXQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGV4Y2x1c2l2ZSB1cHBlciBib3VuZCBmb3IgYSBzcGVjaWZpYyBpbmRleC5cbiAgICAgKiBAcGFyYW0gbWluIFRoZSBtaW5pbXVtIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIFRoZSBEQkN1cnNvciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAgICovXG4gICAgcHVibGljIG1pbihtaW46IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUubWluKG1pbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgZXhjbHVzaXZlIHVwcGVyIGJvdW5kIGZvciBhIHNwZWNpZmljIGluZGV4LlxuICAgICAqIEBwYXJhbSBtYXggVGhlIG1heGltdW0gdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWF4KG1heDogbnVtYmVyKTogREJDdXJzb3Ige1xuICAgICAgICB0aGlzLm5hdGl2ZS5tYXgobWF4KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIHRpbWVvdXQgZm9yIHRoZSBzZXJ2ZXIgdG8gZXhlY3V0ZSB0aGUgcXVlcnkuXG4gICAgICogQHBhcmFtIG1heFRpbWUgVGhlIG1heGltdW0gdGltZSBpbiBtaWxsaXNlY29uZHMuXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWF4VGltZShtYXhUaW1lOiBudW1iZXIpOiBEQkN1cnNvciB7XG4gICAgICAgIHRoaXMubmF0aXZlLm1heFRpbWUobWF4VGltZSwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0IHNldC5cbiAgICAgKiBAcmV0dXJucyBUaGUgc2l6ZSBudW1iZXIuXG4gICAgICovXG4gICAgcHVibGljIHNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnNpemUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTa2lwcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkb2N1bWVudHMuXG4gICAgICogQHBhcmFtIG51bWJlck9mRWxlbWVudHMgVGhlIG51bWJlciBvZiBkb2N1bWVudHMgdG8gc2tpcC5cbiAgICAgKiBAcmV0dXJucyBUaGUgREJDdXJzb3IgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBza2lwKG51bWJlck9mRWxlbWVudHM6IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUuc2tpcChudW1iZXJPZkVsZW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQSxNQUFNLGdCQUFnQixLQUFLLEtBQUssNERBQTREO0FBQzVGLE1BQU0sV0FBVyxLQUFLLEtBQUssK0JBQStCO0FBQzFELFNBQVMsWUFBWTtBQVlkLE1BQU0sU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNUCxZQUFZLFFBQWE7QUFDckIsU0FBSyxTQUFTO0FBQUEsRUFDbEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFPLE9BQU8sS0FBYSxPQUFzQjtBQUM3QyxTQUFLLE9BQU8sT0FBTyxLQUFLLEtBQUs7QUFDN0IsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTU8sU0FBaUM7QUFDcEMsV0FBTyxLQUFLLE9BQU8sT0FBTztBQUFBLEVBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLTyxzQkFBNEI7QUFDL0IsU0FBSyxPQUFPLG9CQUFvQjtBQUFBLEVBQ3BDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1PLGtCQUEyQjtBQUM5QixXQUFPLEtBQUssT0FBTyxnQkFBZ0I7QUFBQSxFQUN2QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9PLGNBQWMsS0FBc0I7QUFDdkMsV0FBTyxLQUFLLE9BQU8sY0FBYyxHQUFHO0FBQUEsRUFDeEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTyxJQUFJLEtBQWtCO0FBQ3pCLFdBQU8sS0FBSyxPQUFPLElBQUksR0FBRztBQUFBLEVBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyxJQUFJLEtBQWEsT0FBaUI7QUFDckMsV0FBTyxLQUFL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
|
package/dist/esm/mongodb/dao.mjs
CHANGED
|
@@ -7,6 +7,8 @@ const dbUri = Configurations.get("DIRIGIBLE_MONGODB_CLIENT_URI", "mongodb://loca
|
|
|
7
7
|
const mongoClient = new Client(dbUri, null, null);
|
|
8
8
|
const db = mongoClient.getDB();
|
|
9
9
|
class DAO {
|
|
10
|
+
orm;
|
|
11
|
+
$log;
|
|
10
12
|
constructor(orm, logCtxName = "mongodb.dao") {
|
|
11
13
|
this.orm = dirigibleOrm.get(orm);
|
|
12
14
|
let loggerName = logCtxName;
|
|
@@ -357,4 +359,4 @@ export {
|
|
|
357
359
|
create,
|
|
358
360
|
dao
|
|
359
361
|
};
|
|
360
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21vbmdvZGIvZGFvLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZ2xvYmFscyB9IGZyb20gXCJAYWVyb2tpdC9zZGsvY29yZVwiXG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tIFwiLi9jbGllbnRcIlxuaW1wb3J0ICogYXMgZGlyaWdpYmxlT3JtIGZyb20gXCJAYWVyb2tpdC9zZGsvZGIvb3JtXCI7XG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSBcIkBhZXJva2l0L3Nkay9sb2dcIjtcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zIH0gZnJvbSBcIkBhZXJva2l0L3Nkay9jb3JlXCI7XG5cbmNvbnN0IGRiVXJpID0gQ29uZmlndXJhdGlvbnMuZ2V0KFwiRElSSUdJQkxFX01PTkdPREJfQ0xJRU5UX1VSSVwiLCBcIm1vbmdvZGI6Ly9sb2NhbGhvc3Q6MjcwMTdcIik7XG5cbmNvbnN0IG1vbmdvQ2xpZW50ID0gbmV3IENsaWVudChkYlVyaSwgbnVsbCwgbnVsbCk7XG5jb25zdCBkYiA9IG1vbmdvQ2xpZW50LmdldERCKCk7XG5cbmV4cG9ydCBjbGFzcyBEQU8ge1xuICAgIHByaXZhdGUgb3JtOiBhbnk7XG4gICAgJGxvZztcblxuICAgIGNvbnN0cnVjdG9yKG9ybTogYW55LCBsb2dDdHhOYW1lOiBzdHJpbmcgPSAnbW9uZ29kYi5kYW8nKSB7XG4gICAgICAgIHRoaXMub3JtID0gZGlyaWdpYmxlT3JtLmdldChvcm0pO1xuXG4gICAgICAgIGxldCBsb2dnZXJOYW1lID0gbG9nQ3R4TmFtZTtcbiAgICAgICAgaWYgKHRoaXMub3JtLnRhYmxlKSB7XG4gICAgICAgICAgICBsb2dnZXJOYW1lID0gJ21vbmdvZGIuZGFvLicgKyAodGhpcy5vcm0udGFibGUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kbG9nID0gTG9nZ2luZy5nZXRMb2dnZXIobG9nZ2VyTmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeShldmVudCwgLi4uYSk6IHZvaWQge1xuICAgICAgICB2YXIgZnVuYyA9IHRoaXNbZXZlbnRdO1xuICAgICAgICBpZiAoIXRoaXNbZXZlbnRdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignSWxsZWdhbCBhcmd1bWVudC4gTm90IGEgZnVuY3Rpb246ICcgKyBmdW5jKTtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncy5zbGljZSgxKSk7XG4gICAgfVxuXG4gICAgLy9QcmVwYXJlIGEgSlNPTiBvYmplY3QgZm9yIGluc2VydCBpbnRvIERCXG4gICAgcHVibGljIGNyZWF0ZU5vU1FMRW50aXR5KGVudGl0eSk6IGFueSB7XG4gICAgICAgIHZhciBwZXJzaXN0ZW50SXRlbSA9IHt9O1xuICAgICAgICB2YXIgbWFuZGF0b3JpZXMgPSB0aGlzLm9ybS5nZXRNYW5kYXRvcnlQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFuZGF0b3JpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChtYW5kYXRvcmllc1tpXS5kYlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcGVyc2lzdGVudEl0ZW1bbWFuZGF0b3JpZXNbaV0ubmFtZV0gPSBtYW5kYXRvcmllc1tpXS5kYlZhbHVlLmFwcGx5KHRoaXMsIFtlbnRpdHlbbWFuZGF0b3JpZXNbaV0ubmFtZV0sIGVudGl0eV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZXJzaXN0ZW50SXRlbVttYW5kYXRvcmllc1tpXS5uYW1lXSA9IGVudGl0eVttYW5kYXRvcmllc1tpXS5uYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgb3B0aW9uYWxzID0gdGhpcy5vcm0uZ2V0T3B0aW9uYWxQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uYWxzW2ldLmRiVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHBlcnNpc3RlbnRJdGVtW29wdGlvbmFsc1tpXS5uYW1lXSA9IG9wdGlvbmFsc1tpXS5kYlZhbHVlLmFwcGx5KHRoaXMsIFtlbnRpdHlbb3B0aW9uYWxzW2ldLm5hbWVdLCBlbnRpdHldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVyc2lzdGVudEl0ZW1bb3B0aW9uYWxzW2ldLm5hbWVdID0gZW50aXR5W29wdGlvbmFsc1tpXS5uYW1lXSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGVudGl0eVtvcHRpb25hbHNbaV0ubmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1zZ0lkU2VnbWVudCA9IHBlcnNpc3RlbnRJdGVtW3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSA/IFwiW1wiICsgcGVyc2lzdGVudEl0ZW1bdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdICsgXCJdXCIgOiBcIlwiO1xuICAgICAgICB0aGlzLiRsb2cuaW5mbyhcIlRyYW5zZm9ybWF0aW9uIHRvIHt9IERCIEpTT04gb2JqZWN0IGZpbmlzaGVkXCIsICh0aGlzLm9ybS50YWJsZSArIG1zZ0lkU2VnbWVudCkpO1xuICAgICAgICByZXR1cm4gcGVyc2lzdGVudEl0ZW07XG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyB2YWxpZGF0ZUVudGl0eShlbnRpdHksIHNraXApOiB2b2lkIHtcbiAgICAgICAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkIHx8IGVudGl0eSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50OiBlbnRpdHkgaXMgJyArIGVudGl0eSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNraXApIHtcbiAgICAgICAgICAgIGlmIChza2lwLmNvbnN0cnVjdG9yICE9PSBBcnJheSkge1xuICAgICAgICAgICAgICAgIHNraXAgPSBbc2tpcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNraXAubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBza2lwW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBtYW5kYXRvcmllcyA9IHRoaXMub3JtLmdldE1hbmRhdG9yeVByb3BlcnRpZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYW5kYXRvcmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHByb3BOYW1lID0gbWFuZGF0b3JpZXNbaV0ubmFtZTtcbiAgICAgICAgICAgIGlmICgoc2tpcCAmJiBza2lwLmluZGV4T2YocHJvcE5hbWUpID4gLTEpIHx8IG1hbmRhdG9yaWVzW2ldLnR5cGUudG9VcHBlckNhc2UoKSA9PT0gJ0JPT0xFQU4nKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdmFyIHByb3BWYWx1ZSA9IGVudGl0eVtwcm9wTmFtZV07XG4gICAgICAgICAgICBpZiAocHJvcFZhbHVlID09PSB1bmRlZmluZWQgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsICcgKyBwcm9wTmFtZSArICcgYXR0cmlidXRlIHZhbHVlIGluICcgKyB0aGlzLm9ybS50YWJsZSArICcgZW50aXR5OiAnICsgcHJvcFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgaW5zZXJ0KF9lbnRpdHkpIHtcbiAgICBcbiAgICAgICAgdmFyIGVudGl0aWVzID0gX2VudGl0eTtcbiAgICAgICAgaWYgKF9lbnRpdHkuY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICAgICAgICBlbnRpdGllcyA9IFtfZW50aXR5XTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICB0aGlzLiRsb2cuaW5mbygnSW5zZXJ0aW5nIHt9IHt9JywgdGhpcy5vcm0udGFibGUsIChlbnRpdGllcy5sZW5ndGggPT09IDEgPyAnZW50aXR5JyA6ICdlbnRpdGllcycpKTtcbiAgICBcbiAgICAgICAgdmFyIHVwZGF0ZWRSZWNvcmRDb3VudCA9IDA7XG4gICAgICAgIHZhciBpZHMgPSBbXTtcbiAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRpdGllcy5sZW5ndGg7IGkrKykge1xuICAgIFxuICAgICAgICAgICAgdmFyIGVudGl0eSA9IGVudGl0aWVzW2ldO1xuICAgIFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUVudGl0eShlbnRpdHksIFt0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZV0pO1xuICAgIFxuICAgICAgICAgICAgdmFyIGRiRW50aXR5ID0gdGhpcy5jcmVhdGVOb1NRTEVudGl0eShlbnRpdHkpO1xuICAgIFxuICAgICAgICAgICAgdHJ5IHtcbiAgICBcbiAgICAgICAgICAgICAgICB2YXIgY29sbGVjdGlvbiA9IGRiLmdldENvbGxlY3Rpb24odGhpcy5vcm0udGFibGUpO1xuICAgICAgICAgICAgICAgIHZhciBpZCA9IGNvbGxlY3Rpb24uZ2V0TmV4dElkKCk7XG4gICAgXG4gICAgICAgICAgICAgICAgZGJFbnRpdHlbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdID0gaWQ7XG4gICAgICAgICAgICAgICAgZGJFbnRpdHlbXCJfaWRcIl0gPSBpZDtcbiAgICBcbiAgICBcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLmluc2VydChkYkVudGl0eSk7XG4gICAgICAgICAgICAgICAgdXBkYXRlZFJlY29yZENvdW50Kys7XG4gICAgXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnkoJ2FmdGVySW5zZXJ0JywgZGJFbnRpdHkpO1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5KCdiZWZvcmVJbnNlcnRBc3NvY2lhdGlvblNldHMnLCBkYkVudGl0eSk7XG4gICAgXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRSZWNvcmRDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWRzLnB1c2goZGJFbnRpdHlbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9nLmluZm8oJ3t9W10gZW50aXR5IGluc2VydGVkJywgdGhpcy5vcm0udGFibGUsIGRiRW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9nLmluZm8oJ05vIGNoYW5nZXMgaW5jdXJyZWQgaW4ge30nLCB0aGlzLm9ybS50YWJsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgIFxuICAgIFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGxvZy5lcnJvcihcIkluc2VydGluZyB7fSB7fSBmYWlsZWRcIiwgdGhpcy5vcm0udGFibGUsIChlbnRpdGllcy5sZW5ndGggPT09IDEgPyAnZW50aXR5JyA6ICdlbnRpdGllcycpLCBlKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygnUm9sbGluZyBiYWNrIGNoYW5nZXMgYWZ0ZXIgZmFpbGVkIHt9W3t9XSBpbnNlcnQuICcsIHRoaXMub3JtLnRhYmxlLCBkYkVudGl0eVt0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZV0pO1xuICAgICAgICAgICAgICAgIGlmIChkYkVudGl0eVt0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKGRiRW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9nLmVycm9yKCdDb3VsZCBub3Qgcm9sbGJhY2sgY2hhbmdlcyBhZnRlciBmYWlsZWQge31be31dIGluc2VydC4gJywgdGhpcy5vcm0udGFibGUsIGRiRW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXG4gICAgICAgIGlmIChfZW50aXR5LmNvbnN0cnVjdG9yICE9PSBBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBpZHNbMF07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBpZHM7XG4gICAgfVxuICAgIFxuICAgIC8vIHVwZGF0ZSBlbnRpdHkgZnJvbSBhIEpTT04gb2JqZWN0LiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgdXBkYXRlZCBlbnRpdHkuXG4gICAgcHVibGljIHVwZGF0ZShlbnRpdHkpIHtcbiAgICBcbiAgICAgICAgdGhpcy4kbG9nLmluZm8oJ1VwZGF0aW5nIHt9W3t9XSBlbnRpdHknLCB0aGlzLm9ybS50YWJsZSwgZW50aXR5ICE9PSB1bmRlZmluZWQgPyBlbnRpdHlbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdIDogZW50aXR5KTtcbiAgICBcbiAgICAgICAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkIHx8IGVudGl0eSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50OiBlbnRpdHkgaXMgJyArIGVudGl0eSk7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdmFyIGlnbm9yZWRQcm9wZXJ0aWVzID0gdGhpcy5vcm0uZ2V0TWFuZGF0b3J5UHJvcGVydGllcygpXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eS5hbGxvd2VkT3BzICYmIHByb3BlcnR5LmFsbG93ZWRPcHMuaW5kZXhPZigndXBkYXRlJykgPCAwO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5Lm5hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUVudGl0eShlbnRpdHksIGlnbm9yZWRQcm9wZXJ0aWVzKTtcbiAgICBcbiAgICAgICAgdmFyIGRiRW50aXR5ID0gdGhpcy5jcmVhdGVOb1NRTEVudGl0eShlbnRpdHkpO1xuICAgICAgICBkYkVudGl0eVt0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZV0gPSBlbnRpdHlbXCJfaWRcIl07XG4gICAgICAgIGRiRW50aXR5W1wiX2lkXCJdID0gZW50aXR5W1wiX2lkXCJdO1xuICAgIFxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnkoJ2JlZm9yZVVwZGF0ZUVudGl0eScsIGRiRW50aXR5KTtcbiAgICBcbiAgICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZGIuZ2V0Q29sbGVjdGlvbih0aGlzLm9ybS50YWJsZSk7XG4gICAgICAgICAgICBjb2xsZWN0aW9uLnVwZGF0ZSh7IFwiX2lkXCI6IGVudGl0eVtcIl9pZFwiXSB9LCBkYkVudGl0eSk7XG4gICAgXG4gICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygne31be31dIGVudGl0eSB1cGRhdGVkJywgdGhpcy5vcm0udGFibGUsIGRiRW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSk7XG4gICAgXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy4kbG9nLmVycm9yKCdVcGRhdGluZyB7fVt7fV0gZmFpbGVkJywgdGhpcy5vcm0udGFibGUsIGVudGl0eSAhPT0gdW5kZWZpbmVkID8gZW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSA6IGVudGl0eSwgZSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBcbiAgICAvLyBkZWxldGUgZW50aXR5IGJ5IGlkLCBvciBhcnJheSBvZiBpZHMsIG9yIGRlbGV0ZSBhbGwgKGlmIG5vdCBhcmd1bWVudCBpcyBwcm92aWRlZCkuXG4gICAgcHVibGljIHJlbW92ZShpZCkge1xuICAgIFxuICAgICAgICB2YXIgaWRzID0gW107XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpZHMgPSB0aGlzLmxpc3Qoe1xuICAgICAgICAgICAgICAgIFwiJHNlbGVjdFwiOiBbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdXG4gICAgICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKGVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbnRbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhcmd1bWVudHNbMF0uY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWRzID0gW2FyZ3VtZW50c1swXV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlkcyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIFxuICAgICAgICB0aGlzLiRsb2cuaW5mbygnRGVsZXRpbmcgJyArIHRoaXMub3JtLnRhYmxlICsgKChpZHMgIT09IHVuZGVmaW5lZCAmJiBpZHMubGVuZ3RoID09PSAxKSA/ICdbJyArIGlkc1swXSArICddIGVudGl0eScgOiBpZHMubGVuZ3RoICsgJyBlbnRpdGllcycpKTtcbiAgICBcbiAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICBcbiAgICAgICAgICAgIHZhciBpZCA9IGlkc1tpXTtcbiAgICBcbiAgICAgICAgICAgIGlmIChpZHMubGVuZ3RoID4gMSlcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygnRGVsZXRpbmcge31be31dIGVudGl0eScsIHRoaXMub3JtLnRhYmxlLCBpZCk7XG4gICAgXG4gICAgICAgICAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCB8fCBpZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSWxsZWdhbCBhcmd1bWVudCBmb3IgaWQgcGFyYW1ldGVyOicgKyBpZCk7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICB0cnkge1xuICAgIFxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5KCdiZWZvcmVSZW1vdmVFbnRpdHknLCBpZCk7XG4gICAgXG4gICAgICAgICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBkYi5nZXRDb2xsZWN0aW9uKHRoaXMub3JtLnRhYmxlKTtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLnJlbW92ZSh7IFwiX2lkXCI6IGlkIH0pO1xuICAgIFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGxvZy5lcnJvcignRGVsZXRpbmcge31be31dIGVudGl0eSBmYWlsZWQnLCB0aGlzLm9ybS50YWJsZSwgaWQsIGUpO1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgIH1cbiAgICBcbiAgICB9XG4gICAgXG4gICAgcHVibGljIGV4cGFuZChleHBhbnNpb25QYXRoLCBjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuJGxvZy5pbmZvKCdFeHBhbmRpbmcgZm9yIGFzc29jaWF0aW9uIHBhdGgge30gYW5kIGNvbnRleHQgZW50aXR5IHt9JywgZXhwYW5zaW9uUGF0aCwgKHR5cGVvZiBhcmd1bWVudHNbMV0gIT09ICdvYmplY3QnID8gJ2lkICcgOiAnJykgKyBKU09OLnN0cmluZ2lmeShhcmd1bWVudHNbMV0pKTtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBcbiAgICAvKiBcbiAgICAgICAgUmVhZHMgYSBzaW5nbGUgZW50aXR5IGJ5IGlkLCBwYXJzZWQgaW50byBKU09OIG9iamVjdC4gXG4gICAgICAgIElmIHJlcXVlc3RlZCBhcyBleHBhbmRlZCB0aGUgcmV0dXJuZWQgZW50aXR5IHdpbGwgY29tcHJpc2UgYXNzb2NpYXRlZCAoZGVwZW5kZW50KSBlbnRpdGllcyB0b28uIEV4cGFuZCBjYW4gYmUgYSBzdHJpbmcgdGhhIHRpcyBhIHZhbGlkIGFzc29jaWF0aW9uIG5hbWUgZGVmaW5lZCBpbiB0aGlzIGRhbyBvcm0gb3JcbiAgICAgICAgYW4gYXJyYXkgb2Ygc3VjaCBuYW1lcy5cbiAgICAqL1xuICAgIHB1YmxpYyBmaW5kKGlkLCBleHBhbmQsIHNlbGVjdCkge1xuICAgIFxuICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlkID0gYXJndW1lbnRzWzBdLmlkO1xuICAgICAgICAgICAgZXhwYW5kID0gYXJndW1lbnRzWzBdLiRleHBhbmQgfHwgYXJndW1lbnRzWzBdLmV4cGFuZDtcbiAgICAgICAgICAgIHNlbGVjdCA9IGFyZ3VtZW50c1swXS4kc2VsZWN0IHx8IGFyZ3VtZW50c1swXS5zZWxlY3Q7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdGhpcy4kbG9nLmluZm8oJ0ZpbmRpbmcge31be31dIGVudGl0eSB3aXRoIGxpc3QgcGFyYW1ldGVycyBleHBhbmRbe31dLCBzZWxlY3Rbe31dJywgdGhpcy5vcm0udGFibGUsIGlkLCBleHBhbmQsIHNlbGVjdCk7XG4gICAgXG4gICAgICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkIHx8IGlkID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQgZm9yIGlkIHBhcmFtZXRlcjonICsgaWQpO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgZW50aXR5O1xuICAgICAgICAgICAgaWYgKHNlbGVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdC5jb25zdHJ1Y3RvciAhPT0gQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgPSBzZWxlY3Quc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKHNlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWwuY29uc3RydWN0b3IgIT09IFN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQ6IHNlbGVjdCBhcnJheSBjb21wb25lbnRzIGFyZSBleHBlY3RlZCBvdCBiZSBzdHJpbmdzIGJ1dCBmb3VuZCAnICsgKHR5cGVvZiBzZWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQ6IHNlbGVjdCBpcyBleHBlY3RlZCB0byBiZSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBidXQgd2FzICcgKyAodHlwZW9mIHNlbGVjdCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9lbnN1cmUgdGhhdCBqb2lua2V5cyBmb3IgcmVxdWlyZWQgZXhwYW5kcyBhcmUgYXZhaWxhYmxlIGFuZCBub3QgZmlsdGVyZWQgYnkgc2VsZWN0XG4gICAgICAgICAgICBpZiAoc2VsZWN0ICE9PSB1bmRlZmluZWQgJiYgZXhwYW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3QucHVzaCh0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICB2YXIgcGFyYW1zID0ge307XG4gICAgICAgICAgICBwYXJhbXNbXCJfaWRcIl0gPSBpZDtcbiAgICBcbiAgICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZGIuZ2V0Q29sbGVjdGlvbih0aGlzLm9ybS50YWJsZSk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBlbnRpdHkgPSBjb2xsZWN0aW9uLmZpbmQocGFyYW1zLCBzZWxlY3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbnRpdHkgPSBjb2xsZWN0aW9uLmZpbmRPbmVCeUlkKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICBcbiAgICAgICAgICAgIGlmIChlbnRpdHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygne31be31dIGVudGl0eSBmb3VuZCcsIHRoaXMub3JtLnRhYmxlLCBpZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnkoJ2FmdGVyRm91bmQnLCBlbnRpdHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygne31be31dIGVudGl0eSBub3QgZm91bmQnLCB0aGlzLm9ybS50YWJsZSwgaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVudGl0eTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy4kbG9nLmVycm9yKFwiRmluZGluZyB7fVt7fV0gZW50aXRpeSBmYWlsZWQuXCIsIHRoaXMub3JtLnRhYmxlLCBpZCwgZSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyBjb3VudCgpOiBudW1iZXIge1xuICAgIFxuICAgICAgICB0aGlzLiRsb2cuaW5mbygnQ291bnRpbmcgJyArIHRoaXMub3JtLnRhYmxlICsgJyBlbnRpdGllcycpO1xuICAgIFxuICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBkYi5nZXRDb2xsZWN0aW9uKHRoaXMub3JtLnRhYmxlKTtcbiAgICAgICAgICAgIGNvdW50ID0gY29sbGVjdGlvbi5jb3VudCgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLiRsb2cuZXJyb3IoJ0NvdW50aW5nIHt9IGVudGl0aWVzIGZhaWxlZCcsIHRoaXMub3JtLnRhYmxlLCBlKTtcbiAgICAgICAgICAgIC8vIGUuZXJyQ29udGV4dCA9IHBhcmFtZXRlcmljU3RhdGVtZW50LnRvU3RyaW5nKCk7IC8vIFRPRE86IHBhcmFtZXRlcmljU3RhdGVtZW50P1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICB0aGlzLiRsb2cuaW5mbygne30ge30gZW50aXRpZXMgY291bnRlZCcsIFN0cmluZyhjb3VudCksIHRoaXMub3JtLnRhYmxlKTtcbiAgICBcbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH07XG4gICAgXG4gICAgLypcbiAgICAgKiBsaXN0IHBhcmFtZXRlcnM6XG4gICAgICogLSAkZXhwYW5kXG4gICAgICogLSAkZmlsdGVyXG4gICAgICogLSAkc2VsZWN0XG4gICAgICogLSAkc29ydFxuICAgICAqIC0gJG9yZGVyIFxuICAgICAqIC0gJGxpbWl0XG4gICAgICogLSAkb2Zmc2V0XG4gICAgICovXG4gICAgcHVibGljIGxpc3Qoc2V0dGluZ3MpIHtcbiAgICBcbiAgICAgICAgc2V0dGluZ3MgPSBzZXR0aW5ncyB8fCB7fTtcbiAgICBcbiAgICAgICAgdmFyIGV4cGFuZCA9IHNldHRpbmdzLiRleHBhbmQgfHwgc2V0dGluZ3MuZXhwYW5kO1xuICAgICAgICBpZiAoZXhwYW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChleHBhbmQuY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4cGFuZC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBhbmQuaW5kZXhPZignLCcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLiRleHBhbmQgPSBleHBhbmQuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKGV4cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHAuY29uc3RydWN0b3IgIT09IFN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQ6IGV4cGFuZCBhcnJheSBjb21wb25lbnRzIGFyZSBleHBlY3RlZCBvdCBiZSBzdHJpbmdzIGJ1dCBmb3VuZCAnICsgKHR5cGVvZiBleHApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuJGV4cGFuZCA9IFtleHBhbmRdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQ6IGV4cGFuZCBpcyBleHBlY3RlZCB0byBiZSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBidXQgd2FzICcgKyAodHlwZW9mIGV4cGFuZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIFxuICAgICAgICB2YXIgc2VsZWN0ID0gc2V0dGluZ3MuJHNlbGVjdCB8fCBzZXR0aW5ncy5zZWxlY3Q7XG4gICAgICAgIGlmIChzZWxlY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHNlbGVjdC5jb25zdHJ1Y3RvciAhPT0gQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0LmNvbnN0cnVjdG9yID09PSBTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdC5pbmRleE9mKCcsJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuJHNlbGVjdCA9IHNlbGVjdC5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAoZXhwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cC5jb25zdHJ1Y3RvciAhPT0gU3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignSWxsZWdhbCBhcmd1bWVudDogc2VsZWN0IGFycmF5IGNvbXBvbmVudHMgYXJlIGV4cGVjdGVkIG90IGJlIHN0cmluZ3MgYnV0IGZvdW5kICcgKyAodHlwZW9mIGV4cCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHAudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy4kc2VsZWN0ID0gW3NlbGVjdF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignSWxsZWdhbCBhcmd1bWVudDogc2VsZWN0IGlzIGV4cGVjdGVkIHRvIGJlIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIGJ1dCB3YXMgJyArICh0eXBlb2YgZXhwYW5kKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXG4gICAgICAgIHZhciBsaXN0QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGxpc3RBcmdzLnB1c2goJyAnICsga2V5ICsgJ1snICsgc2V0dGluZ3Nba2V5XSArICddJyk7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdGhpcy4kbG9nLmluZm8oJ0xpc3Rpbmcge30gZW50aXR5IGNvbGxlY3Rpb24gd2l0aCBsaXN0IG9wZXJhdG9yczoge30nLCB0aGlzLm9ybS50YWJsZSwgbGlzdEFyZ3Muam9pbignLCcpKTtcbiAgICBcbiAgICAgICAgaWYgKHNldHRpbmdzLiRzZWxlY3QgIT09IHVuZGVmaW5lZCAmJiBleHBhbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2V0dGluZ3MuJHNlbGVjdC5wdXNoKHRoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lKTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICAvL3NpbXBsaXN0aWMgZmlsdGVyaW5nIG9mIChvbmx5KSBzdHJpbmcgcHJvcGVydGllcyB3aXRoIGxpa2VcbiAgICAgICAgaWYgKHNldHRpbmdzLiRmaWx0ZXIpIHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy4kZmlsdGVyLmluZGV4T2YoJywnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZ3MuJGZpbHRlciA9IHNldHRpbmdzLiRmaWx0ZXIuc3BsaXQoJywnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZ3MuJGZpbHRlciA9IFtzZXR0aW5ncy4kZmlsdGVyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldHRpbmdzLiRmaWx0ZXIgPSBzZXR0aW5ncy4kZmlsdGVyLmZpbHRlcihmdW5jdGlvbiAoZmlsdGVyRmllbGQpIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJvcCA9IHRoaXMub3Jtc3RhdGVtZW50cy5vcm0uZ2V0UHJvcGVydHkoZmlsdGVyRmllbGQpO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSB1bmRlZmluZWQgfHwgcHJvcC50eXBlLnRvVXBwZXJDYXNlKCkgIT09ICdWQVJDSEFSJyB8fCBzZXR0aW5nc1twcm9wLm5hbWVdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBzZXR0aW5nc1twcm9wLm5hbWVdID0gJyUnICsgc2V0dGluZ3NbcHJvcC5uYW1lXSArICclJztcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBlbnRpdGllcyA9IFtdO1xuICAgICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBkYi5nZXRDb2xsZWN0aW9uKHRoaXMub3JtLnRhYmxlKTtcbiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBjb2xsZWN0aW9uLmZpbmQoKTtcbiAgICAgICAgICAgIHdoaWxlIChjdXJzb3IuaGFzTmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgZW50aXRpZXMucHVzaChjdXJzb3IubmV4dCgpKTtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIHRoaXMuJGxvZy5pbmZvKCd7fSB7fSBlbnRpdGllcyBmb3VuZCcsIGVudGl0aWVzLmxlbmd0aCwgdGhpcy5vcm0udGFibGUpO1xuICAgIFxuICAgICAgICAgICAgcmV0dXJuIGVudGl0aWVzO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLiRsb2cuZXJyb3IoXCJMaXN0aW5nIHt9IGVudGl0aWVzIGZhaWxlZC5cIiwgdGhpcy5vcm0udGFibGUsIGUpO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgZXhpc3RzVGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgY3JlYXRlVGFibGUoKTogdm9pZCB7XG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyBkcm9wVGFibGUoKTogREFPIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG4vKipcbiAqIG9EZWZpbml0aW9uIGNhbiBiZSB0YWJsZSBkZWZpbml0aW9uIG9yIHN0YW5kYXJkIG9ybSBkZWZpbml0aW9uIG9iamVjdC4gT3IgaXQgY2FuIGJlIGEgdmFsaWQgcGF0aCB0b1xuICogYSAudGFibGUgZmlsZSwgb3IgYW55IG90aGVyIHRleHQgZmlsZSBjb250aWFuaW5nIGEgc3RhbmRhcmQgZGFvIG9ybSBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKG9EZWZpbml0aW9uLCBsb2dDdHhOYW1lLCBkYXRhU291cmNlTmFtZSwgZGF0YWJhc2VUeXBlKSB7XG4gICAgdmFyIG9ybTtcblxuICAgIG9ybSA9IG9EZWZpbml0aW9uO1xuXG4gICAgdmFyIHByb2R1Y3ROYW1lID0gZ2xvYmFscy5nZXQoZGF0YWJhc2VUeXBlICsgXCJfXCIgKyBkYXRhU291cmNlTmFtZSk7XG4gICAgaWYgKCFwcm9kdWN0TmFtZSkge1xuICAgICAgICBwcm9kdWN0TmFtZSA9IFwiTW9uZ29EQlwiO1xuICAgICAgICBnbG9iYWxzLnNldChkYXRhYmFzZVR5cGUgKyBcIl9cIiArIGRhdGFTb3VyY2VOYW1lLCBwcm9kdWN0TmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEQU8ob3JtLCBsb2dDdHhOYW1lKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkYW8ob0RlZmluaXRpb24sIGxvZ0N0eE5hbWUsIGRhdGFTb3VyY2VOYW1lLCBkYXRhYmFzZVR5cGUpIHtcbiAgICByZXR1cm4gY3JlYXRlKG9EZWZpbml0aW9uLCBsb2dDdHhOYW1lLCBkYXRhU291cmNlTmFtZSwgZGF0YWJhc2VUeXBlKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUVBLFNBQVMsZUFBZTtBQUN4QixTQUFTLGNBQWM7QUFDdkIsWUFBWSxrQkFBa0I7QUFDOUIsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsc0JBQXNCO0FBRS9CLE1BQU0sUUFBUSxlQUFlLElBQUksZ0NBQWdDLDJCQUEyQjtBQUU1RixNQUFNLGNBQWMsSUFBSSxPQUFPLE9BQU8sTUFBTSxJQUFJO0FBQ2hELE1BQU0sS0FBSyxZQUFZLE1BQU07QUFFdEIsTUFBTSxJQUFJO0FBQUEsRUFJYixZQUFZLEtBQVUsYUFBcUIsZUFBZTtBQUN0RCxTQUFLLE1BQU0sYUFBYSxJQUFJLEdBQUc7QUFFL0IsUUFBSSxhQUFhO0FBQ2pCLFFBQUksS0FBSyxJQUFJLE9BQU87QUFDaEIsbUJBQWEsaUJBQWtCLEtBQUssSUFBSSxNQUFNLFlBQVk7QUFBQSxJQUM5RDtBQUNBLFNBQUssT0FBTyxRQUFRLFVBQVUsVUFBVTtBQUFBLEVBQzVDO0FBQUEsRUFFTyxPQUFPLFVBQVUsR0FBUztBQUM3QixRQUFJLE9BQU8sS0FBSyxLQUFLO0FBQ3JCLFFBQUksQ0FBQyxLQUFLLEtBQUs7QUFDWDtBQUNKLFFBQUksT0FBTyxTQUFTO0FBQ2hCLFlBQU0sTUFBTSx1Q0FBdUMsSUFBSTtBQUMzRCxRQUFJLE9BQU8sQ0FBQyxFQUFFLE1BQU0sS0FBSyxTQUFTO0FBQ2xDLFNBQUssTUFBTSxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUM7QUFBQSxFQUNsQztBQUFBO0FBQUEsRUFHTyxrQkFBa0IsUUFBYTtBQUNsQyxR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
|
|
362
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21vbmdvZGIvZGFvLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZ2xvYmFscyB9IGZyb20gXCJAYWVyb2tpdC9zZGsvY29yZVwiXG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tIFwiLi9jbGllbnRcIlxuaW1wb3J0ICogYXMgZGlyaWdpYmxlT3JtIGZyb20gXCJAYWVyb2tpdC9zZGsvZGIvb3JtXCI7XG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSBcIkBhZXJva2l0L3Nkay9sb2dcIjtcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zIH0gZnJvbSBcIkBhZXJva2l0L3Nkay9jb3JlXCI7XG5cbmNvbnN0IGRiVXJpID0gQ29uZmlndXJhdGlvbnMuZ2V0KFwiRElSSUdJQkxFX01PTkdPREJfQ0xJRU5UX1VSSVwiLCBcIm1vbmdvZGI6Ly9sb2NhbGhvc3Q6MjcwMTdcIik7XG5cbmNvbnN0IG1vbmdvQ2xpZW50ID0gbmV3IENsaWVudChkYlVyaSwgbnVsbCwgbnVsbCk7XG5jb25zdCBkYiA9IG1vbmdvQ2xpZW50LmdldERCKCk7XG5cbmV4cG9ydCBjbGFzcyBEQU8ge1xuICAgIHByaXZhdGUgb3JtOiBhbnk7XG4gICAgJGxvZztcblxuICAgIGNvbnN0cnVjdG9yKG9ybTogYW55LCBsb2dDdHhOYW1lOiBzdHJpbmcgPSAnbW9uZ29kYi5kYW8nKSB7XG4gICAgICAgIHRoaXMub3JtID0gZGlyaWdpYmxlT3JtLmdldChvcm0pO1xuXG4gICAgICAgIGxldCBsb2dnZXJOYW1lID0gbG9nQ3R4TmFtZTtcbiAgICAgICAgaWYgKHRoaXMub3JtLnRhYmxlKSB7XG4gICAgICAgICAgICBsb2dnZXJOYW1lID0gJ21vbmdvZGIuZGFvLicgKyAodGhpcy5vcm0udGFibGUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kbG9nID0gTG9nZ2luZy5nZXRMb2dnZXIobG9nZ2VyTmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeShldmVudCwgLi4uYSk6IHZvaWQge1xuICAgICAgICB2YXIgZnVuYyA9IHRoaXNbZXZlbnRdO1xuICAgICAgICBpZiAoIXRoaXNbZXZlbnRdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignSWxsZWdhbCBhcmd1bWVudC4gTm90IGEgZnVuY3Rpb246ICcgKyBmdW5jKTtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncy5zbGljZSgxKSk7XG4gICAgfVxuXG4gICAgLy9QcmVwYXJlIGEgSlNPTiBvYmplY3QgZm9yIGluc2VydCBpbnRvIERCXG4gICAgcHVibGljIGNyZWF0ZU5vU1FMRW50aXR5KGVudGl0eSk6IGFueSB7XG4gICAgICAgIHZhciBwZXJzaXN0ZW50SXRlbSA9IHt9O1xuICAgICAgICB2YXIgbWFuZGF0b3JpZXMgPSB0aGlzLm9ybS5nZXRNYW5kYXRvcnlQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFuZGF0b3JpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChtYW5kYXRvcmllc1tpXS5kYlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcGVyc2lzdGVudEl0ZW1bbWFuZGF0b3JpZXNbaV0ubmFtZV0gPSBtYW5kYXRvcmllc1tpXS5kYlZhbHVlLmFwcGx5KHRoaXMsIFtlbnRpdHlbbWFuZGF0b3JpZXNbaV0ubmFtZV0sIGVudGl0eV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZXJzaXN0ZW50SXRlbVttYW5kYXRvcmllc1tpXS5uYW1lXSA9IGVudGl0eVttYW5kYXRvcmllc1tpXS5uYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgb3B0aW9uYWxzID0gdGhpcy5vcm0uZ2V0T3B0aW9uYWxQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uYWxzW2ldLmRiVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHBlcnNpc3RlbnRJdGVtW29wdGlvbmFsc1tpXS5uYW1lXSA9IG9wdGlvbmFsc1tpXS5kYlZhbHVlLmFwcGx5KHRoaXMsIFtlbnRpdHlbb3B0aW9uYWxzW2ldLm5hbWVdLCBlbnRpdHldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVyc2lzdGVudEl0ZW1bb3B0aW9uYWxzW2ldLm5hbWVdID0gZW50aXR5W29wdGlvbmFsc1tpXS5uYW1lXSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGVudGl0eVtvcHRpb25hbHNbaV0ubmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1zZ0lkU2VnbWVudCA9IHBlcnNpc3RlbnRJdGVtW3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSA/IFwiW1wiICsgcGVyc2lzdGVudEl0ZW1bdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdICsgXCJdXCIgOiBcIlwiO1xuICAgICAgICB0aGlzLiRsb2cuaW5mbyhcIlRyYW5zZm9ybWF0aW9uIHRvIHt9IERCIEpTT04gb2JqZWN0IGZpbmlzaGVkXCIsICh0aGlzLm9ybS50YWJsZSArIG1zZ0lkU2VnbWVudCkpO1xuICAgICAgICByZXR1cm4gcGVyc2lzdGVudEl0ZW07XG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyB2YWxpZGF0ZUVudGl0eShlbnRpdHksIHNraXApOiB2b2lkIHtcbiAgICAgICAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkIHx8IGVudGl0eSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50OiBlbnRpdHkgaXMgJyArIGVudGl0eSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNraXApIHtcbiAgICAgICAgICAgIGlmIChza2lwLmNvbnN0cnVjdG9yICE9PSBBcnJheSkge1xuICAgICAgICAgICAgICAgIHNraXAgPSBbc2tpcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNraXAubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBza2lwW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBtYW5kYXRvcmllcyA9IHRoaXMub3JtLmdldE1hbmRhdG9yeVByb3BlcnRpZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYW5kYXRvcmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHByb3BOYW1lID0gbWFuZGF0b3JpZXNbaV0ubmFtZTtcbiAgICAgICAgICAgIGlmICgoc2tpcCAmJiBza2lwLmluZGV4T2YocHJvcE5hbWUpID4gLTEpIHx8IG1hbmRhdG9yaWVzW2ldLnR5cGUudG9VcHBlckNhc2UoKSA9PT0gJ0JPT0xFQU4nKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdmFyIHByb3BWYWx1ZSA9IGVudGl0eVtwcm9wTmFtZV07XG4gICAgICAgICAgICBpZiAocHJvcFZhbHVlID09PSB1bmRlZmluZWQgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsICcgKyBwcm9wTmFtZSArICcgYXR0cmlidXRlIHZhbHVlIGluICcgKyB0aGlzLm9ybS50YWJsZSArICcgZW50aXR5OiAnICsgcHJvcFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgaW5zZXJ0KF9lbnRpdHkpIHtcbiAgICBcbiAgICAgICAgdmFyIGVudGl0aWVzID0gX2VudGl0eTtcbiAgICAgICAgaWYgKF9lbnRpdHkuY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICAgICAgICBlbnRpdGllcyA9IFtfZW50aXR5XTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICB0aGlzLiRsb2cuaW5mbygnSW5zZXJ0aW5nIHt9IHt9JywgdGhpcy5vcm0udGFibGUsIChlbnRpdGllcy5sZW5ndGggPT09IDEgPyAnZW50aXR5JyA6ICdlbnRpdGllcycpKTtcbiAgICBcbiAgICAgICAgdmFyIHVwZGF0ZWRSZWNvcmRDb3VudCA9IDA7XG4gICAgICAgIHZhciBpZHMgPSBbXTtcbiAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRpdGllcy5sZW5ndGg7IGkrKykge1xuICAgIFxuICAgICAgICAgICAgdmFyIGVudGl0eSA9IGVudGl0aWVzW2ldO1xuICAgIFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUVudGl0eShlbnRpdHksIFt0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZV0pO1xuICAgIFxuICAgICAgICAgICAgdmFyIGRiRW50aXR5ID0gdGhpcy5jcmVhdGVOb1NRTEVudGl0eShlbnRpdHkpO1xuICAgIFxuICAgICAgICAgICAgdHJ5IHtcbiAgICBcbiAgICAgICAgICAgICAgICB2YXIgY29sbGVjdGlvbiA9IGRiLmdldENvbGxlY3Rpb24odGhpcy5vcm0udGFibGUpO1xuICAgICAgICAgICAgICAgIHZhciBpZCA9IGNvbGxlY3Rpb24uZ2V0TmV4dElkKCk7XG4gICAgXG4gICAgICAgICAgICAgICAgZGJFbnRpdHlbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdID0gaWQ7XG4gICAgICAgICAgICAgICAgZGJFbnRpdHlbXCJfaWRcIl0gPSBpZDtcbiAgICBcbiAgICBcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLmluc2VydChkYkVudGl0eSk7XG4gICAgICAgICAgICAgICAgdXBkYXRlZFJlY29yZENvdW50Kys7XG4gICAgXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnkoJ2FmdGVySW5zZXJ0JywgZGJFbnRpdHkpO1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5KCdiZWZvcmVJbnNlcnRBc3NvY2lhdGlvblNldHMnLCBkYkVudGl0eSk7XG4gICAgXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRSZWNvcmRDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWRzLnB1c2goZGJFbnRpdHlbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9nLmluZm8oJ3t9W10gZW50aXR5IGluc2VydGVkJywgdGhpcy5vcm0udGFibGUsIGRiRW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9nLmluZm8oJ05vIGNoYW5nZXMgaW5jdXJyZWQgaW4ge30nLCB0aGlzLm9ybS50YWJsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgIFxuICAgIFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGxvZy5lcnJvcihcIkluc2VydGluZyB7fSB7fSBmYWlsZWRcIiwgdGhpcy5vcm0udGFibGUsIChlbnRpdGllcy5sZW5ndGggPT09IDEgPyAnZW50aXR5JyA6ICdlbnRpdGllcycpLCBlKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygnUm9sbGluZyBiYWNrIGNoYW5nZXMgYWZ0ZXIgZmFpbGVkIHt9W3t9XSBpbnNlcnQuICcsIHRoaXMub3JtLnRhYmxlLCBkYkVudGl0eVt0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZV0pO1xuICAgICAgICAgICAgICAgIGlmIChkYkVudGl0eVt0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKGRiRW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9nLmVycm9yKCdDb3VsZCBub3Qgcm9sbGJhY2sgY2hhbmdlcyBhZnRlciBmYWlsZWQge31be31dIGluc2VydC4gJywgdGhpcy5vcm0udGFibGUsIGRiRW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXG4gICAgICAgIGlmIChfZW50aXR5LmNvbnN0cnVjdG9yICE9PSBBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBpZHNbMF07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBpZHM7XG4gICAgfVxuICAgIFxuICAgIC8vIHVwZGF0ZSBlbnRpdHkgZnJvbSBhIEpTT04gb2JqZWN0LiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgdXBkYXRlZCBlbnRpdHkuXG4gICAgcHVibGljIHVwZGF0ZShlbnRpdHkpIHtcbiAgICBcbiAgICAgICAgdGhpcy4kbG9nLmluZm8oJ1VwZGF0aW5nIHt9W3t9XSBlbnRpdHknLCB0aGlzLm9ybS50YWJsZSwgZW50aXR5ICE9PSB1bmRlZmluZWQgPyBlbnRpdHlbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdIDogZW50aXR5KTtcbiAgICBcbiAgICAgICAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkIHx8IGVudGl0eSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50OiBlbnRpdHkgaXMgJyArIGVudGl0eSk7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdmFyIGlnbm9yZWRQcm9wZXJ0aWVzID0gdGhpcy5vcm0uZ2V0TWFuZGF0b3J5UHJvcGVydGllcygpXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eS5hbGxvd2VkT3BzICYmIHByb3BlcnR5LmFsbG93ZWRPcHMuaW5kZXhPZigndXBkYXRlJykgPCAwO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5Lm5hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUVudGl0eShlbnRpdHksIGlnbm9yZWRQcm9wZXJ0aWVzKTtcbiAgICBcbiAgICAgICAgdmFyIGRiRW50aXR5ID0gdGhpcy5jcmVhdGVOb1NRTEVudGl0eShlbnRpdHkpO1xuICAgICAgICBkYkVudGl0eVt0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZV0gPSBlbnRpdHlbXCJfaWRcIl07XG4gICAgICAgIGRiRW50aXR5W1wiX2lkXCJdID0gZW50aXR5W1wiX2lkXCJdO1xuICAgIFxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnkoJ2JlZm9yZVVwZGF0ZUVudGl0eScsIGRiRW50aXR5KTtcbiAgICBcbiAgICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZGIuZ2V0Q29sbGVjdGlvbih0aGlzLm9ybS50YWJsZSk7XG4gICAgICAgICAgICBjb2xsZWN0aW9uLnVwZGF0ZSh7IFwiX2lkXCI6IGVudGl0eVtcIl9pZFwiXSB9LCBkYkVudGl0eSk7XG4gICAgXG4gICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygne31be31dIGVudGl0eSB1cGRhdGVkJywgdGhpcy5vcm0udGFibGUsIGRiRW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSk7XG4gICAgXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy4kbG9nLmVycm9yKCdVcGRhdGluZyB7fVt7fV0gZmFpbGVkJywgdGhpcy5vcm0udGFibGUsIGVudGl0eSAhPT0gdW5kZWZpbmVkID8gZW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSA6IGVudGl0eSwgZSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBcbiAgICAvLyBkZWxldGUgZW50aXR5IGJ5IGlkLCBvciBhcnJheSBvZiBpZHMsIG9yIGRlbGV0ZSBhbGwgKGlmIG5vdCBhcmd1bWVudCBpcyBwcm92aWRlZCkuXG4gICAgcHVibGljIHJlbW92ZShpZCkge1xuICAgIFxuICAgICAgICB2YXIgaWRzID0gW107XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpZHMgPSB0aGlzLmxpc3Qoe1xuICAgICAgICAgICAgICAgIFwiJHNlbGVjdFwiOiBbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdXG4gICAgICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKGVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbnRbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhcmd1bWVudHNbMF0uY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWRzID0gW2FyZ3VtZW50c1swXV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlkcyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIFxuICAgICAgICB0aGlzLiRsb2cuaW5mbygnRGVsZXRpbmcgJyArIHRoaXMub3JtLnRhYmxlICsgKChpZHMgIT09IHVuZGVmaW5lZCAmJiBpZHMubGVuZ3RoID09PSAxKSA/ICdbJyArIGlkc1swXSArICddIGVudGl0eScgOiBpZHMubGVuZ3RoICsgJyBlbnRpdGllcycpKTtcbiAgICBcbiAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICBcbiAgICAgICAgICAgIHZhciBpZCA9IGlkc1tpXTtcbiAgICBcbiAgICAgICAgICAgIGlmIChpZHMubGVuZ3RoID4gMSlcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygnRGVsZXRpbmcge31be31dIGVudGl0eScsIHRoaXMub3JtLnRhYmxlLCBpZCk7XG4gICAgXG4gICAgICAgICAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCB8fCBpZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSWxsZWdhbCBhcmd1bWVudCBmb3IgaWQgcGFyYW1ldGVyOicgKyBpZCk7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICB0cnkge1xuICAgIFxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5KCdiZWZvcmVSZW1vdmVFbnRpdHknLCBpZCk7XG4gICAgXG4gICAgICAgICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBkYi5nZXRDb2xsZWN0aW9uKHRoaXMub3JtLnRhYmxlKTtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLnJlbW92ZSh7IFwiX2lkXCI6IGlkIH0pO1xuICAgIFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGxvZy5lcnJvcignRGVsZXRpbmcge31be31dIGVudGl0eSBmYWlsZWQnLCB0aGlzLm9ybS50YWJsZSwgaWQsIGUpO1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgIH1cbiAgICBcbiAgICB9XG4gICAgXG4gICAgcHVibGljIGV4cGFuZChleHBhbnNpb25QYXRoLCBjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuJGxvZy5pbmZvKCdFeHBhbmRpbmcgZm9yIGFzc29jaWF0aW9uIHBhdGgge30gYW5kIGNvbnRleHQgZW50aXR5IHt9JywgZXhwYW5zaW9uUGF0aCwgKHR5cGVvZiBhcmd1bWVudHNbMV0gIT09ICdvYmplY3QnID8gJ2lkICcgOiAnJykgKyBKU09OLnN0cmluZ2lmeShhcmd1bWVudHNbMV0pKTtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBcbiAgICAvKiBcbiAgICAgICAgUmVhZHMgYSBzaW5nbGUgZW50aXR5IGJ5IGlkLCBwYXJzZWQgaW50byBKU09OIG9iamVjdC4gXG4gICAgICAgIElmIHJlcXVlc3RlZCBhcyBleHBhbmRlZCB0aGUgcmV0dXJuZWQgZW50aXR5IHdpbGwgY29tcHJpc2UgYXNzb2NpYXRlZCAoZGVwZW5kZW50KSBlbnRpdGllcyB0b28uIEV4cGFuZCBjYW4gYmUgYSBzdHJpbmcgdGhhIHRpcyBhIHZhbGlkIGFzc29jaWF0aW9uIG5hbWUgZGVmaW5lZCBpbiB0aGlzIGRhbyBvcm0gb3JcbiAgICAgICAgYW4gYXJyYXkgb2Ygc3VjaCBuYW1lcy5cbiAgICAqL1xuICAgIHB1YmxpYyBmaW5kKGlkLCBleHBhbmQsIHNlbGVjdCkge1xuICAgIFxuICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlkID0gYXJndW1lbnRzWzBdLmlkO1xuICAgICAgICAgICAgZXhwYW5kID0gYXJndW1lbnRzWzBdLiRleHBhbmQgfHwgYXJndW1lbnRzWzBdLmV4cGFuZDtcbiAgICAgICAgICAgIHNlbGVjdCA9IGFyZ3VtZW50c1swXS4kc2VsZWN0IHx8IGFyZ3VtZW50c1swXS5zZWxlY3Q7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdGhpcy4kbG9nLmluZm8oJ0ZpbmRpbmcge31be31dIGVudGl0eSB3aXRoIGxpc3QgcGFyYW1ldGVycyBleHBhbmRbe31dLCBzZWxlY3Rbe31dJywgdGhpcy5vcm0udGFibGUsIGlkLCBleHBhbmQsIHNlbGVjdCk7XG4gICAgXG4gICAgICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkIHx8IGlkID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQgZm9yIGlkIHBhcmFtZXRlcjonICsgaWQpO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgZW50aXR5O1xuICAgICAgICAgICAgaWYgKHNlbGVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdC5jb25zdHJ1Y3RvciAhPT0gQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgPSBzZWxlY3Quc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKHNlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWwuY29uc3RydWN0b3IgIT09IFN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQ6IHNlbGVjdCBhcnJheSBjb21wb25lbnRzIGFyZSBleHBlY3RlZCBvdCBiZSBzdHJpbmdzIGJ1dCBmb3VuZCAnICsgKHR5cGVvZiBzZWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQ6IHNlbGVjdCBpcyBleHBlY3RlZCB0byBiZSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBidXQgd2FzICcgKyAodHlwZW9mIHNlbGVjdCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9lbnN1cmUgdGhhdCBqb2lua2V5cyBmb3IgcmVxdWlyZWQgZXhwYW5kcyBhcmUgYXZhaWxhYmxlIGFuZCBub3QgZmlsdGVyZWQgYnkgc2VsZWN0XG4gICAgICAgICAgICBpZiAoc2VsZWN0ICE9PSB1bmRlZmluZWQgJiYgZXhwYW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3QucHVzaCh0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICB2YXIgcGFyYW1zID0ge307XG4gICAgICAgICAgICBwYXJhbXNbXCJfaWRcIl0gPSBpZDtcbiAgICBcbiAgICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZGIuZ2V0Q29sbGVjdGlvbih0aGlzLm9ybS50YWJsZSk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBlbnRpdHkgPSBjb2xsZWN0aW9uLmZpbmQocGFyYW1zLCBzZWxlY3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbnRpdHkgPSBjb2xsZWN0aW9uLmZpbmRPbmVCeUlkKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICBcbiAgICAgICAgICAgIGlmIChlbnRpdHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygne31be31dIGVudGl0eSBmb3VuZCcsIHRoaXMub3JtLnRhYmxlLCBpZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnkoJ2FmdGVyRm91bmQnLCBlbnRpdHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygne31be31dIGVudGl0eSBub3QgZm91bmQnLCB0aGlzLm9ybS50YWJsZSwgaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVudGl0eTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy4kbG9nLmVycm9yKFwiRmluZGluZyB7fVt7fV0gZW50aXRpeSBmYWlsZWQuXCIsIHRoaXMub3JtLnRhYmxlLCBpZCwgZSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyBjb3VudCgpOiBudW1iZXIge1xuICAgIFxuICAgICAgICB0aGlzLiRsb2cuaW5mbygnQ291bnRpbmcgJyArIHRoaXMub3JtLnRhYmxlICsgJyBlbnRpdGllcycpO1xuICAgIFxuICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBkYi5nZXRDb2xsZWN0aW9uKHRoaXMub3JtLnRhYmxlKTtcbiAgICAgICAgICAgIGNvdW50ID0gY29sbGVjdGlvbi5jb3VudCgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLiRsb2cuZXJyb3IoJ0NvdW50aW5nIHt9IGVudGl0aWVzIGZhaWxlZCcsIHRoaXMub3JtLnRhYmxlLCBlKTtcbiAgICAgICAgICAgIC8vIGUuZXJyQ29udGV4dCA9IHBhcmFtZXRlcmljU3RhdGVtZW50LnRvU3RyaW5nKCk7IC8vIFRPRE86IHBhcmFtZXRlcmljU3RhdGVtZW50P1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICB0aGlzLiRsb2cuaW5mbygne30ge30gZW50aXRpZXMgY291bnRlZCcsIFN0cmluZyhjb3VudCksIHRoaXMub3JtLnRhYmxlKTtcbiAgICBcbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH07XG4gICAgXG4gICAgLypcbiAgICAgKiBsaXN0IHBhcmFtZXRlcnM6XG4gICAgICogLSAkZXhwYW5kXG4gICAgICogLSAkZmlsdGVyXG4gICAgICogLSAkc2VsZWN0XG4gICAgICogLSAkc29ydFxuICAgICAqIC0gJG9yZGVyIFxuICAgICAqIC0gJGxpbWl0XG4gICAgICogLSAkb2Zmc2V0XG4gICAgICovXG4gICAgcHVibGljIGxpc3Qoc2V0dGluZ3MpIHtcbiAgICBcbiAgICAgICAgc2V0dGluZ3MgPSBzZXR0aW5ncyB8fCB7fTtcbiAgICBcbiAgICAgICAgdmFyIGV4cGFuZCA9IHNldHRpbmdzLiRleHBhbmQgfHwgc2V0dGluZ3MuZXhwYW5kO1xuICAgICAgICBpZiAoZXhwYW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChleHBhbmQuY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4cGFuZC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBhbmQuaW5kZXhPZignLCcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLiRleHBhbmQgPSBleHBhbmQuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKGV4cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHAuY29uc3RydWN0b3IgIT09IFN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQ6IGV4cGFuZCBhcnJheSBjb21wb25lbnRzIGFyZSBleHBlY3RlZCBvdCBiZSBzdHJpbmdzIGJ1dCBmb3VuZCAnICsgKHR5cGVvZiBleHApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuJGV4cGFuZCA9IFtleHBhbmRdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQ6IGV4cGFuZCBpcyBleHBlY3RlZCB0byBiZSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBidXQgd2FzICcgKyAodHlwZW9mIGV4cGFuZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIFxuICAgICAgICB2YXIgc2VsZWN0ID0gc2V0dGluZ3MuJHNlbGVjdCB8fCBzZXR0aW5ncy5zZWxlY3Q7XG4gICAgICAgIGlmIChzZWxlY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHNlbGVjdC5jb25zdHJ1Y3RvciAhPT0gQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0LmNvbnN0cnVjdG9yID09PSBTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdC5pbmRleE9mKCcsJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuJHNlbGVjdCA9IHNlbGVjdC5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAoZXhwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cC5jb25zdHJ1Y3RvciAhPT0gU3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignSWxsZWdhbCBhcmd1bWVudDogc2VsZWN0IGFycmF5IGNvbXBvbmVudHMgYXJlIGV4cGVjdGVkIG90IGJlIHN0cmluZ3MgYnV0IGZvdW5kICcgKyAodHlwZW9mIGV4cCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHAudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy4kc2VsZWN0ID0gW3NlbGVjdF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignSWxsZWdhbCBhcmd1bWVudDogc2VsZWN0IGlzIGV4cGVjdGVkIHRvIGJlIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIGJ1dCB3YXMgJyArICh0eXBlb2YgZXhwYW5kKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXG4gICAgICAgIHZhciBsaXN0QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGxpc3RBcmdzLnB1c2goJyAnICsga2V5ICsgJ1snICsgc2V0dGluZ3Nba2V5XSArICddJyk7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdGhpcy4kbG9nLmluZm8oJ0xpc3Rpbmcge30gZW50aXR5IGNvbGxlY3Rpb24gd2l0aCBsaXN0IG9wZXJhdG9yczoge30nLCB0aGlzLm9ybS50YWJsZSwgbGlzdEFyZ3Muam9pbignLCcpKTtcbiAgICBcbiAgICAgICAgaWYgKHNldHRpbmdzLiRzZWxlY3QgIT09IHVuZGVmaW5lZCAmJiBleHBhbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2V0dGluZ3MuJHNlbGVjdC5wdXNoKHRoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lKTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICAvL3NpbXBsaXN0aWMgZmlsdGVyaW5nIG9mIChvbmx5KSBzdHJpbmcgcHJvcGVydGllcyB3aXRoIGxpa2VcbiAgICAgICAgaWYgKHNldHRpbmdzLiRmaWx0ZXIpIHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy4kZmlsdGVyLmluZGV4T2YoJywnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZ3MuJGZpbHRlciA9IHNldHRpbmdzLiRmaWx0ZXIuc3BsaXQoJywnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZ3MuJGZpbHRlciA9IFtzZXR0aW5ncy4kZmlsdGVyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldHRpbmdzLiRmaWx0ZXIgPSBzZXR0aW5ncy4kZmlsdGVyLmZpbHRlcihmdW5jdGlvbiAoZmlsdGVyRmllbGQpIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJvcCA9IHRoaXMub3Jtc3RhdGVtZW50cy5vcm0uZ2V0UHJvcGVydHkoZmlsdGVyRmllbGQpO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSB1bmRlZmluZWQgfHwgcHJvcC50eXBlLnRvVXBwZXJDYXNlKCkgIT09ICdWQVJDSEFSJyB8fCBzZXR0aW5nc1twcm9wLm5hbWVdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBzZXR0aW5nc1twcm9wLm5hbWVdID0gJyUnICsgc2V0dGluZ3NbcHJvcC5uYW1lXSArICclJztcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBlbnRpdGllcyA9IFtdO1xuICAgICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBkYi5nZXRDb2xsZWN0aW9uKHRoaXMub3JtLnRhYmxlKTtcbiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBjb2xsZWN0aW9uLmZpbmQoKTtcbiAgICAgICAgICAgIHdoaWxlIChjdXJzb3IuaGFzTmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgZW50aXRpZXMucHVzaChjdXJzb3IubmV4dCgpKTtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIHRoaXMuJGxvZy5pbmZvKCd7fSB7fSBlbnRpdGllcyBmb3VuZCcsIGVudGl0aWVzLmxlbmd0aCwgdGhpcy5vcm0udGFibGUpO1xuICAgIFxuICAgICAgICAgICAgcmV0dXJuIGVudGl0aWVzO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLiRsb2cuZXJyb3IoXCJMaXN0aW5nIHt9IGVudGl0aWVzIGZhaWxlZC5cIiwgdGhpcy5vcm0udGFibGUsIGUpO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgZXhpc3RzVGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgY3JlYXRlVGFibGUoKTogdm9pZCB7XG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyBkcm9wVGFibGUoKTogREFPIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG4vKipcbiAqIG9EZWZpbml0aW9uIGNhbiBiZSB0YWJsZSBkZWZpbml0aW9uIG9yIHN0YW5kYXJkIG9ybSBkZWZpbml0aW9uIG9iamVjdC4gT3IgaXQgY2FuIGJlIGEgdmFsaWQgcGF0aCB0b1xuICogYSAudGFibGUgZmlsZSwgb3IgYW55IG90aGVyIHRleHQgZmlsZSBjb250aWFuaW5nIGEgc3RhbmRhcmQgZGFvIG9ybSBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKG9EZWZpbml0aW9uLCBsb2dDdHhOYW1lLCBkYXRhU291cmNlTmFtZSwgZGF0YWJhc2VUeXBlKSB7XG4gICAgdmFyIG9ybTtcblxuICAgIG9ybSA9IG9EZWZpbml0aW9uO1xuXG4gICAgdmFyIHByb2R1Y3ROYW1lID0gZ2xvYmFscy5nZXQoZGF0YWJhc2VUeXBlICsgXCJfXCIgKyBkYXRhU291cmNlTmFtZSk7XG4gICAgaWYgKCFwcm9kdWN0TmFtZSkge1xuICAgICAgICBwcm9kdWN0TmFtZSA9IFwiTW9uZ29EQlwiO1xuICAgICAgICBnbG9iYWxzLnNldChkYXRhYmFzZVR5cGUgKyBcIl9cIiArIGRhdGFTb3VyY2VOYW1lLCBwcm9kdWN0TmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEQU8ob3JtLCBsb2dDdHhOYW1lKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkYW8ob0RlZmluaXRpb24sIGxvZ0N0eE5hbWUsIGRhdGFTb3VyY2VOYW1lLCBkYXRhYmFzZVR5cGUpIHtcbiAgICByZXR1cm4gY3JlYXRlKG9EZWZpbml0aW9uLCBsb2dDdHhOYW1lLCBkYXRhU291cmNlTmFtZSwgZGF0YWJhc2VUeXBlKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUVBLFNBQVMsZUFBZTtBQUN4QixTQUFTLGNBQWM7QUFDdkIsWUFBWSxrQkFBa0I7QUFDOUIsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsc0JBQXNCO0FBRS9CLE1BQU0sUUFBUSxlQUFlLElBQUksZ0NBQWdDLDJCQUEyQjtBQUU1RixNQUFNLGNBQWMsSUFBSSxPQUFPLE9BQU8sTUFBTSxJQUFJO0FBQ2hELE1BQU0sS0FBSyxZQUFZLE1BQU07QUFFdEIsTUFBTSxJQUFJO0FBQUEsRUFDTDtBQUFBLEVBQ1I7QUFBQSxFQUVBLFlBQVksS0FBVSxhQUFxQixlQUFlO0FBQ3RELFNBQUssTUFBTSxhQUFhLElBQUksR0FBRztBQUUvQixRQUFJLGFBQWE7QUFDakIsUUFBSSxLQUFLLElBQUksT0FBTztBQUNoQixtQkFBYSxpQkFBa0IsS0FBSyxJQUFJLE1BQU0sWUFBWTtBQUFBLElBQzlEO0FBQ0EsU0FBSyxPQUFPLFFBQVEsVUFBVSxVQUFVO0FBQUEsRUFDNUM7QUFBQSxFQUVPLE9BQU8sVUFBVSxHQUFTO0FBQzdCLFFBQUksT0FBTyxLQUFLLEtBQUs7QUFDckIsUUFBSSxDQUFDLEtBQUssS0FBSztBQUNYO0FBQ0osUUFBSSxPQUFPLFNBQVM7QUFDaEIsWUFBTSxNQUFNLHVDQUF1QyxJQUFJO0FBQzNELFFBQUksT0FBTyxDQUFDLEVBQUUsTUFBTSxLQUFLLFNBQVM7QUFDbEMsU0FBSyxNQUFNLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQztBQUFBLEVBQ2xDO0FBQUE7QUFBQSxFQUdP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
|
package/dist/esm/net/soap.mjs
CHANGED
|
@@ -64,6 +64,8 @@ class SOAP {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
class Message {
|
|
67
|
+
// Renamed to native to signal internal-use property, improving encapsulation
|
|
68
|
+
native;
|
|
67
69
|
constructor(native) {
|
|
68
70
|
this.native = native;
|
|
69
71
|
}
|
|
@@ -83,6 +85,8 @@ class Message {
|
|
|
83
85
|
}
|
|
84
86
|
}
|
|
85
87
|
class Part {
|
|
88
|
+
// Renamed to native
|
|
89
|
+
native;
|
|
86
90
|
constructor(native) {
|
|
87
91
|
this.native = native;
|
|
88
92
|
}
|
|
@@ -91,6 +95,8 @@ class Part {
|
|
|
91
95
|
}
|
|
92
96
|
}
|
|
93
97
|
class MimeHeaders {
|
|
98
|
+
// Renamed to native
|
|
99
|
+
native;
|
|
94
100
|
constructor(native) {
|
|
95
101
|
this.native = native;
|
|
96
102
|
}
|
|
@@ -104,6 +110,8 @@ class MimeHeaders {
|
|
|
104
110
|
}
|
|
105
111
|
}
|
|
106
112
|
class Envelope {
|
|
113
|
+
// Renamed to native
|
|
114
|
+
native;
|
|
107
115
|
constructor(native) {
|
|
108
116
|
this.native = native;
|
|
109
117
|
}
|
|
@@ -121,6 +129,8 @@ class Envelope {
|
|
|
121
129
|
}
|
|
122
130
|
}
|
|
123
131
|
class Body {
|
|
132
|
+
// Renamed to native
|
|
133
|
+
native;
|
|
124
134
|
constructor(native) {
|
|
125
135
|
this.native = native;
|
|
126
136
|
}
|
|
@@ -137,6 +147,8 @@ class Body {
|
|
|
137
147
|
}
|
|
138
148
|
}
|
|
139
149
|
class Header {
|
|
150
|
+
// Renamed to native
|
|
151
|
+
native;
|
|
140
152
|
constructor(native) {
|
|
141
153
|
this.native = native;
|
|
142
154
|
}
|
|
@@ -145,6 +157,7 @@ class Header {
|
|
|
145
157
|
}
|
|
146
158
|
}
|
|
147
159
|
class Name {
|
|
160
|
+
native;
|
|
148
161
|
constructor(native) {
|
|
149
162
|
this.native = native;
|
|
150
163
|
}
|
|
@@ -165,6 +178,7 @@ class Name {
|
|
|
165
178
|
}
|
|
166
179
|
}
|
|
167
180
|
class Element {
|
|
181
|
+
native;
|
|
168
182
|
constructor(native) {
|
|
169
183
|
this.native = native;
|
|
170
184
|
}
|
|
@@ -206,4 +220,4 @@ if (typeof module !== "undefined") {
|
|
|
206
220
|
export {
|
|
207
221
|
SOAP
|
|
208
222
|
};
|
|
209
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25ldC9zb2FwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSBcIkBhZXJva2l0L3Nkay9odHRwL3JlcXVlc3RcIjtcbmltcG9ydCB7IEJhc2U2NCB9IGZyb20gXCJAYWVyb2tpdC9zZGsvdXRpbHMvYmFzZTY0XCI7XG5pbXBvcnQgeyBTdHJlYW1zLCBJbnB1dFN0cmVhbSB9IGZyb20gXCJAYWVyb2tpdC9zZGsvaW8vc3RyZWFtc1wiO1xuXG5jb25zdCBNZXNzYWdlRmFjdG9yeSA9IEphdmEudHlwZShcImpha2FydGEueG1sLnNvYXAuTWVzc2FnZUZhY3RvcnlcIik7XG5jb25zdCBNaW1lSGVhZGVyc0ludGVybmFsID0gSmF2YS50eXBlKFwiamFrYXJ0YS54bWwuc29hcC5NaW1lSGVhZGVyc1wiKTtcbmNvbnN0IFNPQVBDb25uZWN0aW9uRmFjdG9yeSA9IEphdmEudHlwZShcImpha2FydGEueG1sLnNvYXAuU09BUENvbm5lY3Rpb25GYWN0b3J5XCIpO1xuXG4vKipcbiAqIFV0aWxpdHkgY2xhc3MgZm9yIGNyZWF0aW5nLCBwYXJzaW5nLCBhbmQgY2FsbGluZyBTT0FQIG1lc3NhZ2VzLlxuICogSXQgd3JhcHMgdGhlIHVuZGVybHlpbmcgSmF2YSBqYXZheC54bWwuc29hcCBBUEkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTT0FQIHtcblxuXHQvKipcblx0ICogQ2FsbCBhIGdpdmVuIFNPQVAgZW5kcG9pbnQgd2l0aCBhIGdpdmVuIHJlcXVlc3QgbWVzc2FnZVxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgU09BUCBNZXNzYWdlIHdyYXBwZXIgb2JqZWN0LlxuXHQgKiBAcGFyYW0gdXJsIFRoZSB0YXJnZXQgU09BUCBlbmRwb2ludCBVUkwuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGNhbGwobWVzc2FnZTogTWVzc2FnZSwgdXJsOiBzdHJpbmcpIHtcblx0XHRjb25zdCBzb2FwQ29ubmVjdGlvbkZhY3RvcnkgPSBTT0FQQ29ubmVjdGlvbkZhY3RvcnkubmV3SW5zdGFuY2UoKTtcblx0XHRjb25zdCBpbnRlcm5hbENvbm5lY3Rpb24gPSBzb2FwQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlQ29ubmVjdGlvbigpO1xuXHRcdC8vIEFjY2Vzc2luZyB0aGUgaW50ZXJuYWwgcHJvcGVydHkgbmF0aXZlIChyZW5hbWVkIGZyb20gJ25hdGl2ZScgZm9yIGJldHRlciBlbmNhcHN1bGF0aW9uKVxuXHRcdGNvbnN0IGludGVybmFsUmVzcG9uc2UgPSBpbnRlcm5hbENvbm5lY3Rpb24uY2FsbChtZXNzYWdlLm5hdGl2ZSwgdXJsKTtcblx0XHRyZXR1cm4gbmV3IE1lc3NhZ2UoaW50ZXJuYWxSZXNwb25zZSk7XG5cdH1cblxuXHRwdWJsaWMgc3RhdGljIHRydXN0QWxsKCkge1xuXHRcdC8vIFRPRE86IEltcGxlbWVudCBsb2dpYyBmb3IgdHJ1c3RpbmcgYWxsIGNlcnRpZmljYXRlcyBpZiByZXF1aXJlZCBieSB0aGUgU0RLIGVudmlyb25tZW50XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgU09BUCBtZXNzYWdlLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBjcmVhdGVNZXNzYWdlKCk6IE1lc3NhZ2Uge1xuXHRcdHJldHVybiBuZXcgTWVzc2FnZShNZXNzYWdlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU1lc3NhZ2UoKSk7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGEgU09BUCBtZXNzYWdlIGZyb20gYW4gSW5wdXRTdHJlYW0gYW5kIE1pbWVIZWFkZXJzLlxuXHQgKiBAcGFyYW0gbWltZUhlYWRlcnMgVGhlIE1pbWVIZWFkZXJzIHdyYXBwZXIgb2JqZWN0LlxuXHQgKiBAcGFyYW0gaW5wdXRTdHJlYW0gVGhlIElucHV0U3RyZWFtIHdyYXBwZXIgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBwYXJzZU1lc3NhZ2UobWltZUhlYWRlcnM6IE1pbWVIZWFkZXJzLCBpbnB1dFN0cmVhbTogSW5wdXRTdHJlYW0pOiBNZXNzYWdlIHtcblx0XHRjb25zdCBpbnRlcm5hbEZhY3RvcnkgPSBNZXNzYWdlRmFjdG9yeS5uZXdJbnN0YW5jZSgpO1xuXHRcdC8vIFVzZSBuYXRpdmUgZm9yIGludGVybmFsIEphdmEgb2JqZWN0IGFjY2Vzc1xuXHRcdGlmIChpbnB1dFN0cmVhbS5uYXRpdmUpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgZm9yIGludGVybmFsIEphdmEgb2JqZWN0IGFjY2Vzc1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbE1lc3NhZ2UgPSBpbnRlcm5hbEZhY3RvcnkuY3JlYXRlTWVzc2FnZShtaW1lSGVhZGVycy5uYXRpdmUsIGlucHV0U3RyZWFtLm5hdGl2ZSk7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsUGFydCA9IGludGVybmFsTWVzc2FnZS5nZXRTT0FQUGFydCgpO1xuXHRcdFx0XHRpbnRlcm5hbFBhcnQuZ2V0RW52ZWxvcGUoKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBNZXNzYWdlKGludGVybmFsTWVzc2FnZSk7XG5cdFx0XHR9IGNhdGNoIChlOiBhbnkpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgcHJvdmlkZWQgaXMgbnVsbCBvciBpbiBhIHdyb25nIGZvcm1hdC4gSFRUUCBtZXRob2QgdXNlZCBtdXN0IGJlIFBPU1QuIFwiICsgZS5tZXNzYWdlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgcHJvdmlkZWQgaXMgbnVsbC5cIik7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGEgU09BUCBtZXNzYWdlIGZyb20gdGhlIGN1cnJlbnQgSFRUUCByZXF1ZXN0IGlucHV0IHN0cmVhbS5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgcGFyc2VSZXF1ZXN0KCk6IE1lc3NhZ2Uge1xuXHRcdGlmIChSZXF1ZXN0LmdldE1ldGhvZCgpLnRvVXBwZXJDYXNlKCkgIT09IFwiUE9TVFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJIVFRQIG1ldGhvZCB1c2VkIG11c3QgYmUgUE9TVC5cIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW5wdXRTdHJlYW0gPSBSZXF1ZXN0LmdldElucHV0U3RyZWFtKCk7XG5cdFx0Y29uc3QgbWltZUhlYWRlcnMgPSB0aGlzLmNyZWF0ZU1pbWVIZWFkZXJzKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5wYXJzZU1lc3NhZ2UobWltZUhlYWRlcnMsIGlucHV0U3RyZWFtKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSBNaW1lSGVhZGVycyBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGNyZWF0ZU1pbWVIZWFkZXJzKCk6IE1pbWVIZWFkZXJzIHtcblx0XHRjb25zdCBpbnRlcm5hbE1pbWVIZWFkZXJzID0gbmV3IE1pbWVIZWFkZXJzSW50ZXJuYWwoKTtcblx0XHRyZXR1cm4gbmV3IE1pbWVIZWFkZXJzKGludGVybmFsTWltZUhlYWRlcnMpO1xuXHR9XG59XG5cbi8qKlxuICogU09BUCBNZXNzYWdlIFdyYXBwZXJcbiAqL1xuY2xhc3MgTWVzc2FnZSB7XG5cblx0Ly8gUmVuYW1lZCB0byBuYXRpdmUgdG8gc2lnbmFsIGludGVybmFsLXVzZSBwcm9wZXJ0eSwgaW1wcm92aW5nIGVuY2Fwc3VsYXRpb25cblx0cHVibGljIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UGFydCgpOiBQYXJ0IHtcblx0XHRyZXR1cm4gbmV3IFBhcnQodGhpcy5uYXRpdmUuZ2V0U09BUFBhcnQoKSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWltZUhlYWRlcnMoKTogTWltZUhlYWRlcnMge1xuXHRcdHJldHVybiBuZXcgTWltZUhlYWRlcnModGhpcy5uYXRpdmUuZ2V0TWltZUhlYWRlcnMoKSk7XG5cdH1cblxuXHRwdWJsaWMgc2F2ZSgpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5zYXZlQ2hhbmdlcygpO1xuXHR9XG5cblx0cHVibGljIGdldFRleHQoKTogc3RyaW5nIHtcblx0XHRjb25zdCBvdXRwdXRTdHJlYW0gPSBTdHJlYW1zLmNyZWF0ZUJ5dGVBcnJheU91dHB1dFN0cmVhbSgpO1xuXHRcdC8vIFVzZSBuYXRpdmUgZm9yIGludGVybmFsIEphdmEgb2JqZWN0IGFjY2Vzc1xuXHRcdHRoaXMubmF0aXZlLndyaXRlVG8ob3V0cHV0U3RyZWFtLm5hdGl2ZSk7XG5cdFx0cmV0dXJuIG91dHB1dFN0cmVhbS5nZXRUZXh0KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBTT0FQIFBhcnQgV3JhcHBlclxuICovXG5jbGFzcyBQYXJ0IHtcblxuXHQvLyBSZW5hbWVkIHRvIG5hdGl2ZVxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RW52ZWxvcGUoKTogRW52ZWxvcGUge1xuXHRcdHJldHVybiBuZXcgRW52ZWxvcGUodGhpcy5uYXRpdmUuZ2V0RW52ZWxvcGUoKSk7XG5cdH1cbn1cblxuLyoqXG4gKiBTT0FQIE1pbWUgSGVhZGVycyBXcmFwcGVyXG4gKi9cbmNsYXNzIE1pbWVIZWFkZXJzIHtcblxuXHQvLyBSZW5hbWVkIHRvIG5hdGl2ZVxuXHRwdWJsaWMgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBhZGRIZWFkZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUuYWRkSGVhZGVyKG5hbWUsIHZhbHVlKTtcblx0fVxuXG5cdHB1YmxpYyBhZGRCYXNpY0F1dGhlbnRpY2F0aW9uSGVhZGVyKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB1c2VyQW5kUGFzc3dvcmQgPSBgJHt1c2VybmFtZX06JHtwYXNzd29yZH1gO1xuXHRcdGNvbnN0IGJhc2ljQXV0aCA9IEJhc2U2NC5lbmNvZGUodXNlckFuZFBhc3N3b3JkKTtcblx0XHR0aGlzLm5hdGl2ZS5hZGRIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIGBCYXNpYyAke2Jhc2ljQXV0aH1gKTtcblx0fVxufVxuXG4vKipcbiAqIFNPQVAgRW52ZWxvcGUgV3JhcHBlclxuICovXG5jbGFzcyBFbnZlbG9wZSB7XG5cdC8vIFJlbmFtZWQgdG8gbmF0aXZlXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBhZGROYW1lc3BhY2VEZWNsYXJhdGlvbihwcmVmaXg6IHN0cmluZywgdXJpOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5hZGROYW1lc3BhY2VEZWNsYXJhdGlvbihwcmVmaXgsIHVyaSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Qm9keSgpOiBCb2R5IHtcblx0XHRyZXR1cm4gbmV3IEJvZHkodGhpcy5uYXRpdmUuZ2V0Qm9keSgpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRIZWFkZXIoKTogSGVhZGVyIHtcblx0XHRyZXR1cm4gbmV3IEhlYWRlcih0aGlzLm5hdGl2ZS5nZXRIZWFkZXIoKSk7XG5cdH1cblxuXHRwdWJsaWMgY3JlYXRlTmFtZShsb2NhbE5hbWU6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIHVyaTogc3RyaW5nKTogTmFtZSB7XG5cdFx0cmV0dXJuIG5ldyBOYW1lKHRoaXMubmF0aXZlLmNyZWF0ZU5hbWUobG9jYWxOYW1lLCBwcmVmaXgsIHVyaSkpO1xuXHR9XG59XG5cbi8qKlxuICogU09BUCBCb2R5IFdyYXBwZXJcbiAqL1xuY2xhc3MgQm9keSB7XG5cdC8vIFJlbmFtZWQgdG8gbmF0aXZlXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBhZGRDaGlsZEVsZW1lbnQobG9jYWxOYW1lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKTogRWxlbWVudCB7XG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50KHRoaXMubmF0aXZlLmFkZENoaWxkRWxlbWVudChsb2NhbE5hbWUsIHByZWZpeCkpO1xuXHR9XG5cblx0cHVibGljIGdldENoaWxkRWxlbWVudHMoKTogRWxlbWVudFtdIHtcblx0XHRjb25zdCBjaGlsZEVsZW1lbnRzID0gW107XG5cdFx0Y29uc3QgaW50ZXJuYWxFbGVtZW50c0l0ZXJhdG9yID0gdGhpcy5uYXRpdmUuZ2V0Q2hpbGRFbGVtZW50cygpO1xuXHRcdHdoaWxlIChpbnRlcm5hbEVsZW1lbnRzSXRlcmF0b3IuaGFzTmV4dCgpKSB7XG5cdFx0XHRjaGlsZEVsZW1lbnRzLnB1c2gobmV3IEVsZW1lbnQoaW50ZXJuYWxFbGVtZW50c0l0ZXJhdG9yLm5leHQoKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gY2hpbGRFbGVtZW50cztcblx0fVxufVxuXG4vKipcbiAqIFNPQVAgSGVhZGVyIFdyYXBwZXJcbiAqL1xuY2xhc3MgSGVhZGVyIHtcblx0Ly8gUmVuYW1lZCB0byBuYXRpdmVcblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHR9XG5cblx0cHVibGljIGFkZEhlYWRlckVsZW1lbnQoZWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLmFkZEhlYWRlckVsZW1lbnQoZWxlbWVudC5uYXRpdmUpO1xuXHR9XG59XG5cbi8qKlxuICogU09BUCBOYW1lIFdyYXBwZXJcbiAqL1xuY2xhc3MgTmFtZSB7XG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXHRcblx0cHVibGljIGdldE5hdGl2ZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBnZXRMb2NhbE5hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TG9jYWxOYW1lKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJlZml4KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFByZWZpeCgpO1xuXHR9XG5cblx0cHVibGljIGdldFF1YWxpZmllZE5hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0UXVhbGlmaWVkTmFtZSgpO1xuXHR9XG5cblx0cHVibGljIGdldFVSSSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRVUkkoKTtcblx0fVxufVxuXG4vKipcbiAqIFNPQVAgRWxlbWVudCBXcmFwcGVyXG4gKi9cbmNsYXNzIEVsZW1lbnQge1xuXHRwdWJsaWMgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBhZGRDaGlsZEVsZW1lbnQobG9jYWxOYW1lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50KHRoaXMubmF0aXZlLmFkZENoaWxkRWxlbWVudChsb2NhbE5hbWUsIHByZWZpeCkpO1xuXHR9XG5cblx0cHVibGljIGFkZFRleHROb2RlKHRleHQ6IHN0cmluZyk6IEVsZW1lbnQge1xuXHRcdHJldHVybiBuZXcgRWxlbWVudCh0aGlzLm5hdGl2ZS5hZGRUZXh0Tm9kZSh0ZXh0KSk7XG5cdH1cblxuXHRwdWJsaWMgYWRkQXR0cmlidXRlKG5hbWU6IE5hbWUsIHZhbHVlOiBhbnkpOiBFbGVtZW50IHtcblx0XHQvLyBVc2UgbmFtZS5uYXRpdmUgZm9yIGludGVybmFsIEphdmEgb2JqZWN0IGFjY2Vzc1xuXHRcdHJldHVybiBuZXcgRWxlbWVudCh0aGlzLm5hdGl2ZS5hZGRBdHRyaWJ1dGUobmFtZS5nZXROYXRpdmUoKSwgdmFsdWUpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRDaGlsZEVsZW1lbnRzKCk6IEVsZW1lbnRbXSB7XG5cdFx0Y29uc3QgY2hpbGRFbGVtZW50cyA9IFtdO1xuXHRcdGNvbnN0IGludGVybmFsRWxlbWVudHNJdGVyYXRvciA9IHRoaXMubmF0aXZlLmdldENoaWxkRWxlbWVudHMoKTtcblx0XHR3aGlsZSAoaW50ZXJuYWxFbGVtZW50c0l0ZXJhdG9yLmhhc05leHQoKSkge1xuXHRcdFx0Y2hpbGRFbGVtZW50cy5wdXNoKG5ldyBFbGVtZW50KGludGVybmFsRWxlbWVudHNJdGVyYXRvci5uZXh0KCkpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNoaWxkRWxlbWVudHM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RWxlbWVudE5hbWUoKTogTmFtZSB8IHVuZGVmaW5lZCB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGludGVybmFsTmFtZSA9IHRoaXMubmF0aXZlLmdldEVsZW1lbnROYW1lKCk7XG5cdFx0XHRyZXR1cm4gbmV3IE5hbWUoaW50ZXJuYWxOYW1lKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvLyBUaGlzIGNhdGNoIGhhbmRsZXMgY2FzZXMgd2hlcmUgdGhlIGVsZW1lbnQgbWlnaHQgbm90IGJlIGEgU09BUEVsZW1lbnRcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHB1YmxpYyBnZXRWYWx1ZSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRWYWx1ZSgpO1xuXHR9XG5cblx0cHVibGljIGlzU09BUEVsZW1lbnQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RWxlbWVudE5hbWUoKSAhPT0gdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8vIEB0cy1pZ25vcmVcbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHQvLyBAdHMtaWdub3JlXG5cdG1vZHVsZS5leHBvcnRzID0gU09BUDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsZUFBZTtBQUN4QixTQUFTLGNBQWM7QUFDdkIsU0FBUyxlQUE0QjtBQUVyQyxNQUFNLGlCQUFpQixLQUFLLEtBQUssaUNBQWlDO0FBQ2xFLE1BQU0sc0JBQXNCLEtBQUssS0FBSyw4QkFBOEI7QUFDcEUsTUFBTSx3QkFBd0IsS0FBSyxLQUFLLHdDQUF3QztBQU16RSxNQUFNLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPakIsT0FBYyxLQUFLLFNBQWtCLEtBQWE7QUFDakQsVUFBTSx3QkFBd0Isc0JBQXNCLFlBQVk7QUFDaEUsVUFBTSxxQkFBcUIsc0JBQXNCLGlCQUFpQjtBQUVsRSxVQUFNLG1CQUFtQixtQkFBbUIsS0FBSyxRQUFRLFFBQVEsR0FBRztBQUNwRSxXQUFPLElBQUksUUFBUSxnQkFBZ0I7QUFBQSxFQUNwQztBQUFBLEVBRUEsT0FBYyxXQUFXO0FBQUEsRUFFekI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLE9BQWMsZ0JBQXlCO0FBQ3RDLFdBQU8sSUFBSSxRQUFRLGVBQWUsWUFBWSxFQUFFLGNBQWMsQ0FBQztBQUFBLEVBQ2hFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsT0FBYyxhQUFhLGFBQTBCLGFBQW1DO0FBQ3ZGLFVBQU0sa0JBQWtCLGVBQWUsWUFBWTtBQUVuRCxRQUFJLFlBQVksUUFBUTtBQUN2QixVQUFJO0FBRUgsY0FBTSxrQkFBa0IsZ0JBQWdCLGNBQWMsWUFBWSxRQUFRLFlBQVksTUFBTTtB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
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25ldC9zb2FwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSBcIkBhZXJva2l0L3Nkay9odHRwL3JlcXVlc3RcIjtcbmltcG9ydCB7IEJhc2U2NCB9IGZyb20gXCJAYWVyb2tpdC9zZGsvdXRpbHMvYmFzZTY0XCI7XG5pbXBvcnQgeyBTdHJlYW1zLCBJbnB1dFN0cmVhbSB9IGZyb20gXCJAYWVyb2tpdC9zZGsvaW8vc3RyZWFtc1wiO1xuXG5jb25zdCBNZXNzYWdlRmFjdG9yeSA9IEphdmEudHlwZShcImpha2FydGEueG1sLnNvYXAuTWVzc2FnZUZhY3RvcnlcIik7XG5jb25zdCBNaW1lSGVhZGVyc0ludGVybmFsID0gSmF2YS50eXBlKFwiamFrYXJ0YS54bWwuc29hcC5NaW1lSGVhZGVyc1wiKTtcbmNvbnN0IFNPQVBDb25uZWN0aW9uRmFjdG9yeSA9IEphdmEudHlwZShcImpha2FydGEueG1sLnNvYXAuU09BUENvbm5lY3Rpb25GYWN0b3J5XCIpO1xuXG4vKipcbiAqIFV0aWxpdHkgY2xhc3MgZm9yIGNyZWF0aW5nLCBwYXJzaW5nLCBhbmQgY2FsbGluZyBTT0FQIG1lc3NhZ2VzLlxuICogSXQgd3JhcHMgdGhlIHVuZGVybHlpbmcgSmF2YSBqYXZheC54bWwuc29hcCBBUEkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTT0FQIHtcblxuXHQvKipcblx0ICogQ2FsbCBhIGdpdmVuIFNPQVAgZW5kcG9pbnQgd2l0aCBhIGdpdmVuIHJlcXVlc3QgbWVzc2FnZVxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgU09BUCBNZXNzYWdlIHdyYXBwZXIgb2JqZWN0LlxuXHQgKiBAcGFyYW0gdXJsIFRoZSB0YXJnZXQgU09BUCBlbmRwb2ludCBVUkwuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGNhbGwobWVzc2FnZTogTWVzc2FnZSwgdXJsOiBzdHJpbmcpIHtcblx0XHRjb25zdCBzb2FwQ29ubmVjdGlvbkZhY3RvcnkgPSBTT0FQQ29ubmVjdGlvbkZhY3RvcnkubmV3SW5zdGFuY2UoKTtcblx0XHRjb25zdCBpbnRlcm5hbENvbm5lY3Rpb24gPSBzb2FwQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlQ29ubmVjdGlvbigpO1xuXHRcdC8vIEFjY2Vzc2luZyB0aGUgaW50ZXJuYWwgcHJvcGVydHkgbmF0aXZlIChyZW5hbWVkIGZyb20gJ25hdGl2ZScgZm9yIGJldHRlciBlbmNhcHN1bGF0aW9uKVxuXHRcdGNvbnN0IGludGVybmFsUmVzcG9uc2UgPSBpbnRlcm5hbENvbm5lY3Rpb24uY2FsbChtZXNzYWdlLm5hdGl2ZSwgdXJsKTtcblx0XHRyZXR1cm4gbmV3IE1lc3NhZ2UoaW50ZXJuYWxSZXNwb25zZSk7XG5cdH1cblxuXHRwdWJsaWMgc3RhdGljIHRydXN0QWxsKCkge1xuXHRcdC8vIFRPRE86IEltcGxlbWVudCBsb2dpYyBmb3IgdHJ1c3RpbmcgYWxsIGNlcnRpZmljYXRlcyBpZiByZXF1aXJlZCBieSB0aGUgU0RLIGVudmlyb25tZW50XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgU09BUCBtZXNzYWdlLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBjcmVhdGVNZXNzYWdlKCk6IE1lc3NhZ2Uge1xuXHRcdHJldHVybiBuZXcgTWVzc2FnZShNZXNzYWdlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU1lc3NhZ2UoKSk7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGEgU09BUCBtZXNzYWdlIGZyb20gYW4gSW5wdXRTdHJlYW0gYW5kIE1pbWVIZWFkZXJzLlxuXHQgKiBAcGFyYW0gbWltZUhlYWRlcnMgVGhlIE1pbWVIZWFkZXJzIHdyYXBwZXIgb2JqZWN0LlxuXHQgKiBAcGFyYW0gaW5wdXRTdHJlYW0gVGhlIElucHV0U3RyZWFtIHdyYXBwZXIgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBwYXJzZU1lc3NhZ2UobWltZUhlYWRlcnM6IE1pbWVIZWFkZXJzLCBpbnB1dFN0cmVhbTogSW5wdXRTdHJlYW0pOiBNZXNzYWdlIHtcblx0XHRjb25zdCBpbnRlcm5hbEZhY3RvcnkgPSBNZXNzYWdlRmFjdG9yeS5uZXdJbnN0YW5jZSgpO1xuXHRcdC8vIFVzZSBuYXRpdmUgZm9yIGludGVybmFsIEphdmEgb2JqZWN0IGFjY2Vzc1xuXHRcdGlmIChpbnB1dFN0cmVhbS5uYXRpdmUpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgZm9yIGludGVybmFsIEphdmEgb2JqZWN0IGFjY2Vzc1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbE1lc3NhZ2UgPSBpbnRlcm5hbEZhY3RvcnkuY3JlYXRlTWVzc2FnZShtaW1lSGVhZGVycy5uYXRpdmUsIGlucHV0U3RyZWFtLm5hdGl2ZSk7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsUGFydCA9IGludGVybmFsTWVzc2FnZS5nZXRTT0FQUGFydCgpO1xuXHRcdFx0XHRpbnRlcm5hbFBhcnQuZ2V0RW52ZWxvcGUoKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBNZXNzYWdlKGludGVybmFsTWVzc2FnZSk7XG5cdFx0XHR9IGNhdGNoIChlOiBhbnkpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgcHJvdmlkZWQgaXMgbnVsbCBvciBpbiBhIHdyb25nIGZvcm1hdC4gSFRUUCBtZXRob2QgdXNlZCBtdXN0IGJlIFBPU1QuIFwiICsgZS5tZXNzYWdlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgcHJvdmlkZWQgaXMgbnVsbC5cIik7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGEgU09BUCBtZXNzYWdlIGZyb20gdGhlIGN1cnJlbnQgSFRUUCByZXF1ZXN0IGlucHV0IHN0cmVhbS5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgcGFyc2VSZXF1ZXN0KCk6IE1lc3NhZ2Uge1xuXHRcdGlmIChSZXF1ZXN0LmdldE1ldGhvZCgpLnRvVXBwZXJDYXNlKCkgIT09IFwiUE9TVFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJIVFRQIG1ldGhvZCB1c2VkIG11c3QgYmUgUE9TVC5cIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW5wdXRTdHJlYW0gPSBSZXF1ZXN0LmdldElucHV0U3RyZWFtKCk7XG5cdFx0Y29uc3QgbWltZUhlYWRlcnMgPSB0aGlzLmNyZWF0ZU1pbWVIZWFkZXJzKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5wYXJzZU1lc3NhZ2UobWltZUhlYWRlcnMsIGlucHV0U3RyZWFtKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSBNaW1lSGVhZGVycyBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGNyZWF0ZU1pbWVIZWFkZXJzKCk6IE1pbWVIZWFkZXJzIHtcblx0XHRjb25zdCBpbnRlcm5hbE1pbWVIZWFkZXJzID0gbmV3IE1pbWVIZWFkZXJzSW50ZXJuYWwoKTtcblx0XHRyZXR1cm4gbmV3IE1pbWVIZWFkZXJzKGludGVybmFsTWltZUhlYWRlcnMpO1xuXHR9XG59XG5cbi8qKlxuICogU09BUCBNZXNzYWdlIFdyYXBwZXJcbiAqL1xuY2xhc3MgTWVzc2FnZSB7XG5cblx0Ly8gUmVuYW1lZCB0byBuYXRpdmUgdG8gc2lnbmFsIGludGVybmFsLXVzZSBwcm9wZXJ0eSwgaW1wcm92aW5nIGVuY2Fwc3VsYXRpb25cblx0cHVibGljIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UGFydCgpOiBQYXJ0IHtcblx0XHRyZXR1cm4gbmV3IFBhcnQodGhpcy5uYXRpdmUuZ2V0U09BUFBhcnQoKSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWltZUhlYWRlcnMoKTogTWltZUhlYWRlcnMge1xuXHRcdHJldHVybiBuZXcgTWltZUhlYWRlcnModGhpcy5uYXRpdmUuZ2V0TWltZUhlYWRlcnMoKSk7XG5cdH1cblxuXHRwdWJsaWMgc2F2ZSgpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5zYXZlQ2hhbmdlcygpO1xuXHR9XG5cblx0cHVibGljIGdldFRleHQoKTogc3RyaW5nIHtcblx0XHRjb25zdCBvdXRwdXRTdHJlYW0gPSBTdHJlYW1zLmNyZWF0ZUJ5dGVBcnJheU91dHB1dFN0cmVhbSgpO1xuXHRcdC8vIFVzZSBuYXRpdmUgZm9yIGludGVybmFsIEphdmEgb2JqZWN0IGFjY2Vzc1xuXHRcdHRoaXMubmF0aXZlLndyaXRlVG8ob3V0cHV0U3RyZWFtLm5hdGl2ZSk7XG5cdFx0cmV0dXJuIG91dHB1dFN0cmVhbS5nZXRUZXh0KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBTT0FQIFBhcnQgV3JhcHBlclxuICovXG5jbGFzcyBQYXJ0IHtcblxuXHQvLyBSZW5hbWVkIHRvIG5hdGl2ZVxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RW52ZWxvcGUoKTogRW52ZWxvcGUge1xuXHRcdHJldHVybiBuZXcgRW52ZWxvcGUodGhpcy5uYXRpdmUuZ2V0RW52ZWxvcGUoKSk7XG5cdH1cbn1cblxuLyoqXG4gKiBTT0FQIE1pbWUgSGVhZGVycyBXcmFwcGVyXG4gKi9cbmNsYXNzIE1pbWVIZWFkZXJzIHtcblxuXHQvLyBSZW5hbWVkIHRvIG5hdGl2ZVxuXHRwdWJsaWMgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBhZGRIZWFkZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUuYWRkSGVhZGVyKG5hbWUsIHZhbHVlKTtcblx0fVxuXG5cdHB1YmxpYyBhZGRCYXNpY0F1dGhlbnRpY2F0aW9uSGVhZGVyKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB1c2VyQW5kUGFzc3dvcmQgPSBgJHt1c2VybmFtZX06JHtwYXNzd29yZH1gO1xuXHRcdGNvbnN0IGJhc2ljQXV0aCA9IEJhc2U2NC5lbmNvZGUodXNlckFuZFBhc3N3b3JkKTtcblx0XHR0aGlzLm5hdGl2ZS5hZGRIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIGBCYXNpYyAke2Jhc2ljQXV0aH1gKTtcblx0fVxufVxuXG4vKipcbiAqIFNPQVAgRW52ZWxvcGUgV3JhcHBlclxuICovXG5jbGFzcyBFbnZlbG9wZSB7XG5cdC8vIFJlbmFtZWQgdG8gbmF0aXZlXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBhZGROYW1lc3BhY2VEZWNsYXJhdGlvbihwcmVmaXg6IHN0cmluZywgdXJpOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5hZGROYW1lc3BhY2VEZWNsYXJhdGlvbihwcmVmaXgsIHVyaSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Qm9keSgpOiBCb2R5IHtcblx0XHRyZXR1cm4gbmV3IEJvZHkodGhpcy5uYXRpdmUuZ2V0Qm9keSgpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRIZWFkZXIoKTogSGVhZGVyIHtcblx0XHRyZXR1cm4gbmV3IEhlYWRlcih0aGlzLm5hdGl2ZS5nZXRIZWFkZXIoKSk7XG5cdH1cblxuXHRwdWJsaWMgY3JlYXRlTmFtZShsb2NhbE5hbWU6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIHVyaTogc3RyaW5nKTogTmFtZSB7XG5cdFx0cmV0dXJuIG5ldyBOYW1lKHRoaXMubmF0aXZlLmNyZWF0ZU5hbWUobG9jYWxOYW1lLCBwcmVmaXgsIHVyaSkpO1xuXHR9XG59XG5cbi8qKlxuICogU09BUCBCb2R5IFdyYXBwZXJcbiAqL1xuY2xhc3MgQm9keSB7XG5cdC8vIFJlbmFtZWQgdG8gbmF0aXZlXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBhZGRDaGlsZEVsZW1lbnQobG9jYWxOYW1lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKTogRWxlbWVudCB7XG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50KHRoaXMubmF0aXZlLmFkZENoaWxkRWxlbWVudChsb2NhbE5hbWUsIHByZWZpeCkpO1xuXHR9XG5cblx0cHVibGljIGdldENoaWxkRWxlbWVudHMoKTogRWxlbWVudFtdIHtcblx0XHRjb25zdCBjaGlsZEVsZW1lbnRzID0gW107XG5cdFx0Y29uc3QgaW50ZXJuYWxFbGVtZW50c0l0ZXJhdG9yID0gdGhpcy5uYXRpdmUuZ2V0Q2hpbGRFbGVtZW50cygpO1xuXHRcdHdoaWxlIChpbnRlcm5hbEVsZW1lbnRzSXRlcmF0b3IuaGFzTmV4dCgpKSB7XG5cdFx0XHRjaGlsZEVsZW1lbnRzLnB1c2gobmV3IEVsZW1lbnQoaW50ZXJuYWxFbGVtZW50c0l0ZXJhdG9yLm5leHQoKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gY2hpbGRFbGVtZW50cztcblx0fVxufVxuXG4vKipcbiAqIFNPQVAgSGVhZGVyIFdyYXBwZXJcbiAqL1xuY2xhc3MgSGVhZGVyIHtcblx0Ly8gUmVuYW1lZCB0byBuYXRpdmVcblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHR9XG5cblx0cHVibGljIGFkZEhlYWRlckVsZW1lbnQoZWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLmFkZEhlYWRlckVsZW1lbnQoZWxlbWVudC5uYXRpdmUpO1xuXHR9XG59XG5cbi8qKlxuICogU09BUCBOYW1lIFdyYXBwZXJcbiAqL1xuY2xhc3MgTmFtZSB7XG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXHRcblx0cHVibGljIGdldE5hdGl2ZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBnZXRMb2NhbE5hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TG9jYWxOYW1lKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJlZml4KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFByZWZpeCgpO1xuXHR9XG5cblx0cHVibGljIGdldFF1YWxpZmllZE5hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0UXVhbGlmaWVkTmFtZSgpO1xuXHR9XG5cblx0cHVibGljIGdldFVSSSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRVUkkoKTtcblx0fVxufVxuXG4vKipcbiAqIFNPQVAgRWxlbWVudCBXcmFwcGVyXG4gKi9cbmNsYXNzIEVsZW1lbnQge1xuXHRwdWJsaWMgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBhZGRDaGlsZEVsZW1lbnQobG9jYWxOYW1lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50KHRoaXMubmF0aXZlLmFkZENoaWxkRWxlbWVudChsb2NhbE5hbWUsIHByZWZpeCkpO1xuXHR9XG5cblx0cHVibGljIGFkZFRleHROb2RlKHRleHQ6IHN0cmluZyk6IEVsZW1lbnQge1xuXHRcdHJldHVybiBuZXcgRWxlbWVudCh0aGlzLm5hdGl2ZS5hZGRUZXh0Tm9kZSh0ZXh0KSk7XG5cdH1cblxuXHRwdWJsaWMgYWRkQXR0cmlidXRlKG5hbWU6IE5hbWUsIHZhbHVlOiBhbnkpOiBFbGVtZW50IHtcblx0XHQvLyBVc2UgbmFtZS5uYXRpdmUgZm9yIGludGVybmFsIEphdmEgb2JqZWN0IGFjY2Vzc1xuXHRcdHJldHVybiBuZXcgRWxlbWVudCh0aGlzLm5hdGl2ZS5hZGRBdHRyaWJ1dGUobmFtZS5nZXROYXRpdmUoKSwgdmFsdWUpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRDaGlsZEVsZW1lbnRzKCk6IEVsZW1lbnRbXSB7XG5cdFx0Y29uc3QgY2hpbGRFbGVtZW50cyA9IFtdO1xuXHRcdGNvbnN0IGludGVybmFsRWxlbWVudHNJdGVyYXRvciA9IHRoaXMubmF0aXZlLmdldENoaWxkRWxlbWVudHMoKTtcblx0XHR3aGlsZSAoaW50ZXJuYWxFbGVtZW50c0l0ZXJhdG9yLmhhc05leHQoKSkge1xuXHRcdFx0Y2hpbGRFbGVtZW50cy5wdXNoKG5ldyBFbGVtZW50KGludGVybmFsRWxlbWVudHNJdGVyYXRvci5uZXh0KCkpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNoaWxkRWxlbWVudHM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RWxlbWVudE5hbWUoKTogTmFtZSB8IHVuZGVmaW5lZCB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGludGVybmFsTmFtZSA9IHRoaXMubmF0aXZlLmdldEVsZW1lbnROYW1lKCk7XG5cdFx0XHRyZXR1cm4gbmV3IE5hbWUoaW50ZXJuYWxOYW1lKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvLyBUaGlzIGNhdGNoIGhhbmRsZXMgY2FzZXMgd2hlcmUgdGhlIGVsZW1lbnQgbWlnaHQgbm90IGJlIGEgU09BUEVsZW1lbnRcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHB1YmxpYyBnZXRWYWx1ZSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRWYWx1ZSgpO1xuXHR9XG5cblx0cHVibGljIGlzU09BUEVsZW1lbnQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RWxlbWVudE5hbWUoKSAhPT0gdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8vIEB0cy1pZ25vcmVcbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHQvLyBAdHMtaWdub3JlXG5cdG1vZHVsZS5leHBvcnRzID0gU09BUDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsZUFBZTtBQUN4QixTQUFTLGNBQWM7QUFDdkIsU0FBUyxlQUE0QjtBQUVyQyxNQUFNLGlCQUFpQixLQUFLLEtBQUssaUNBQWlDO0FBQ2xFLE1BQU0sc0JBQXNCLEtBQUssS0FBSyw4QkFBOEI7QUFDcEUsTUFBTSx3QkFBd0IsS0FBSyxLQUFLLHdDQUF3QztBQU16RSxNQUFNLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPakIsT0FBYyxLQUFLLFNBQWtCLEtBQWE7QUFDakQsVUFBTSx3QkFBd0Isc0JBQXNCLFlBQVk7QUFDaEUsVUFBTSxxQkFBcUIsc0JBQXNCLGlCQUFpQjtBQUVsRSxVQUFNLG1CQUFtQixtQkFBbUIsS0FBSyxRQUFRLFFBQVEsR0FBRztBQUNwRSxXQUFPLElBQUksUUFBUSxnQkFBZ0I7QUFBQSxFQUNwQztBQUFBLEVBRUEsT0FBYyxXQUFXO0FBQUEsRUFFekI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLE9BQWMsZ0JBQXlCO0FBQ3RDLFdBQU8sSUFBSSxRQUFRLGVBQWUsWUFBWSxFQUFFLGNBQWMsQ0FBQztBQUFBLEVBQ2hFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsT0FBYyxhQUFhLGFBQTBCLGFBQW1DO0FBQ3ZGLFVBQU0sa0JBQWtCLGVBQWUsWUFBWTtBQUVuRCxRQUFJLFlBQVksUUFBUTtBQUN2QixVQUFJO0FBRUgsY0FBTSxrQkFBa0IsZ0JBQWdCLGNBQWMsWUFBWSxRQUFRLFlBQVksTUFBTTtB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
|