@robhan-cdk-lib/aws_grafana 0.0.1 → 0.0.3
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/.jsii +101 -109
- package/API.md +130 -93
- package/lib/workspace.d.ts +108 -54
- package/lib/workspace.js +5 -15
- package/package.json +2 -2
package/lib/workspace.js
CHANGED
|
@@ -137,10 +137,9 @@ var Status;
|
|
|
137
137
|
Status["LICENSE_REMOVAL_FAILED"] = "LICENSE_REMOVAL_FAILED";
|
|
138
138
|
})(Status || (exports.Status = Status = {}));
|
|
139
139
|
/**
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
* Amazon Managed Grafana workspaces using AWS CDK.
|
|
140
|
+
* Specifies a workspace. In a workspace, you can create Grafana dashboards and visualizations to
|
|
141
|
+
* analyze your metrics, logs, and traces. You don't have to build, package, or deploy any hardware
|
|
142
|
+
* to run the Grafana server.
|
|
144
143
|
*/
|
|
145
144
|
class Workspace extends constructs_1.Construct {
|
|
146
145
|
/**
|
|
@@ -618,15 +617,6 @@ class Workspace extends constructs_1.Construct {
|
|
|
618
617
|
}
|
|
619
618
|
return errors;
|
|
620
619
|
}
|
|
621
|
-
/**
|
|
622
|
-
* Creates a new Amazon Managed Grafana workspace.
|
|
623
|
-
*
|
|
624
|
-
* @param scope - The scope in which to define this construct
|
|
625
|
-
* @param id - The scoped construct ID
|
|
626
|
-
* @param props - Configuration properties for the workspace
|
|
627
|
-
*
|
|
628
|
-
* @throws Error if any of the provided properties fail validation
|
|
629
|
-
*/
|
|
630
620
|
constructor(scope, id, props) {
|
|
631
621
|
super(scope, id);
|
|
632
622
|
const errors = Workspace.validateProps(props);
|
|
@@ -690,5 +680,5 @@ class Workspace extends constructs_1.Construct {
|
|
|
690
680
|
}
|
|
691
681
|
exports.Workspace = Workspace;
|
|
692
682
|
_a = JSII_RTTI_SYMBOL_1;
|
|
693
|
-
Workspace[_a] = { fqn: "@robhan-cdk-lib/aws_grafana.Workspace", version: "0.0.
|
|
694
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQU1BLHlEQUEwRTtBQUUxRSwyQ0FBdUM7QUFFdkM7Ozs7O0dBS0c7QUFDSCxJQUFZLGlCQVVYO0FBVkQsV0FBWSxpQkFBaUI7SUFDM0I7O09BRUc7SUFDSCx3REFBbUMsQ0FBQTtJQUVuQzs7T0FFRztJQUNILGtEQUE2QixDQUFBO0FBQy9CLENBQUMsRUFWVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQVU1QjtBQUVEOzs7OztHQUtHO0FBQ0gsSUFBWSx1QkFVWDtBQVZELFdBQVksdUJBQXVCO0lBQ2pDOztPQUVHO0lBQ0gsOENBQW1CLENBQUE7SUFFbkI7O09BRUc7SUFDSCx3Q0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQVZXLHVCQUF1Qix1Q0FBdkIsdUJBQXVCLFFBVWxDO0FBMkJEOzs7R0FHRztBQUNILElBQVksd0JBS1g7QUFMRCxXQUFZLHdCQUF3QjtJQUNsQzs7T0FFRztJQUNILHVDQUFXLENBQUE7QUFDYixDQUFDLEVBTFcsd0JBQXdCLHdDQUF4Qix3QkFBd0IsUUFLbkM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsSUFBWSxlQVVYO0FBVkQsV0FBWSxlQUFlO0lBQ3pCOztPQUVHO0lBQ0gsd0RBQXFDLENBQUE7SUFFckM7O09BRUc7SUFDSCxzREFBbUMsQ0FBQTtBQUNyQyxDQUFDLEVBVlcsZUFBZSwrQkFBZixlQUFlLFFBVTFCO0FBK1BEOztHQUVHO0FBQ0gsSUFBWSx5QkFVWDtBQVZELFdBQVkseUJBQXlCO0lBQ25DOztPQUVHO0lBQ0gsc0RBQXlCLENBQUE7SUFFekI7O09BRUc7SUFDSCw4REFBaUMsQ0FBQTtBQUNuQyxDQUFDLEVBVlcseUJBQXlCLHlDQUF6Qix5QkFBeUIsUUFVcEM7QUFFRDs7R0FFRztBQUNILElBQVksTUF1RFg7QUF2REQsV0FBWSxNQUFNO0lBQ2hCOztPQUVHO0lBQ0gs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VyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFvQixDQUFDO0lBQ3BELENBQUM7O0FBaHhCSCw4QkFpeEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSVByZWZpeExpc3QsXG4gIElTZWN1cml0eUdyb3VwLFxuICBJU3VibmV0LFxuICBJVnBjRW5kcG9pbnQsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgQ2ZuV29ya3NwYWNlLCBDZm5Xb3Jrc3BhY2VQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ncmFmYW5hJztcbmltcG9ydCB7IElSb2xlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgd29ya3NwYWNlIGNhbiBhY2Nlc3MgQVdTIHJlc291cmNlcyBpbiB0aGlzIEFXUyBhY2NvdW50IG9ubHksIG9yIHdoZXRoZXIgaXRcbiAqIGNhbiBhbHNvIGFjY2VzcyBBV1MgcmVzb3VyY2VzIGluIG90aGVyIGFjY291bnRzIGluIHRoZSBzYW1lIG9yZ2FuaXphdGlvbi4gSWYgdGhpcyBpc1xuICogT1JHQU5JWkFUSU9OLCB0aGUgT3JnYW5pemF0aW9uYWxVbml0cyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoaWNoIG9yZ2FuaXphdGlvbmFsIHVuaXRzIHRoZVxuICogd29ya3NwYWNlIGNhbiBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBlbnVtIEFjY291bnRBY2Nlc3NUeXBlIHtcbiAgLyoqXG4gICAqIEFjY2VzcyBpcyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IEFXUyBhY2NvdW50IG9ubHkuXG4gICAqL1xuICBDVVJSRU5UX0FDQ09VTlQgPSAnQ1VSUkVOVF9BQ0NPVU5UJyxcblxuICAvKipcbiAgICogQWNjZXNzIGlzIGV4dGVuZGVkIHRvIHRoZSBlbnRpcmUgQVdTIG9yZ2FuaXphdGlvbi5cbiAgICovXG4gIE9SR0FOSVpBVElPTiA9ICdPUkdBTklaQVRJT04nLFxufVxuXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRoaXMgd29ya3NwYWNlIHVzZXMgU0FNTCAyLjAsIEFXUyBJQU0gSWRlbnRpdHkgQ2VudGVyLCBvciBib3RoIHRvIGF1dGhlbnRpY2F0ZVxuICogdXNlcnMgZm9yIHVzaW5nIHRoZSBHcmFmYW5hIGNvbnNvbGUgd2l0aGluIGEgd29ya3NwYWNlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dyYWZhbmEvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlV29ya3NwYWNlLmh0bWxcbiAqL1xuZXhwb3J0IGVudW0gQXV0aGVudGljYXRpb25Qcm92aWRlcnMge1xuICAvKipcbiAgICogQVdTIFNpbmdsZSBTaWduLU9uIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyLlxuICAgKi9cbiAgQVdTX1NTTyA9ICdBV1NfU1NPJyxcblxuICAvKipcbiAgICogU2VjdXJpdHkgQXNzZXJ0aW9uIE1hcmt1cCBMYW5ndWFnZSAoU0FNTCkgYXV0aGVudGljYXRpb24gcHJvdmlkZXIuXG4gICAqL1xuICBTQU1MID0gJ1NBTUwnLFxufVxuXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBuZXR3b3JrIGFjY2VzcyB0byB5b3VyIHdvcmtzcGFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrQWNjZXNzQ29udHJvbCB7XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBwcmVmaXggbGlzdCBJRHMuIEEgcHJlZml4IGxpc3QgaXMgYSBsaXN0IG9mIENJRFIgcmFuZ2VzIG9mIElQIGFkZHJlc3Nlcy4gVGhlIElQXG4gICAqIGFkZHJlc3NlcyBzcGVjaWZpZWQgYXJlIGFsbG93ZWQgdG8gYWNjZXNzIHlvdXIgd29ya3NwYWNlLiBJZiB0aGUgbGlzdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlXG4gICAqIGNvbmZpZ3VyYXRpb24gKHBhc3NlZCBhbiBlbXB0eSBhcnJheSkgdGhlbiBubyBJUCBhZGRyZXNzZXMgYXJlIGFsbG93ZWQgdG8gYWNjZXNzIHRoZVxuICAgKiB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIE1heGltdW0gb2YgNSBwcmVmaXggbGlzdHMgYWxsb3dlZC5cbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeExpc3RzPzogSVByZWZpeExpc3RbXTtcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgQW1hem9uIFZQQyBlbmRwb2ludCBJRHMgZm9yIHRoZSB3b3Jrc3BhY2UuIFlvdSBjYW4gY3JlYXRlIFZQQyBlbmRwb2ludHMgdG8geW91clxuICAgKiBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHdvcmtzcGFjZSBmb3IgYWNjZXNzIGZyb20gd2l0aGluIGEgVlBDLiBJZiBhIE5ldHdvcmtBY2Nlc3NDb25maWd1cmF0aW9uXG4gICAqIGlzIHNwZWNpZmllZCB0aGVuIG9ubHkgVlBDIGVuZHBvaW50cyBzcGVjaWZpZWQgaGVyZSBhcmUgYWxsb3dlZCB0byBhY2Nlc3MgdGhlIHdvcmtzcGFjZS4gSWZcbiAgICogeW91IHBhc3MgaW4gYW4gZW1wdHkgYXJyYXkgb2Ygc3RyaW5ncywgdGhlbiBubyBWUENzIGFyZSBhbGxvd2VkIHRvIGFjY2VzcyB0aGUgd29ya3NwYWNlLlxuICAgKlxuICAgKiBNYXhpbXVtIG9mIDUgVlBDIGVuZHBvaW50cyBhbGxvd2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjRW5kcG9pbnRzPzogSVZwY0VuZHBvaW50W107XG59XG5cbi8qKlxuICogVGhlIEFXUyBub3RpZmljYXRpb24gY2hhbm5lbHMgdGhhdCBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGNhbiBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBJQU0gcm9sZXMgYW5kXG4gKiBwZXJtaXNzaW9ucyBmb3IsIHRvIGFsbG93IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgdG8gdXNlIHRoZXNlIGNoYW5uZWxzLlxuICovXG5leHBvcnQgZW51bSBOb3RpZmljYXRpb25EZXN0aW5hdGlvbnMge1xuICAvKipcbiAgICogQW1hem9uIFNpbXBsZSBOb3RpZmljYXRpb24gU2VydmljZSAoU05TKSBhcyBub3RpZmljYXRpb24gZGVzdGluYXRpb24uXG4gICAqL1xuICBTTlMgPSAnU05TJyxcbn1cblxuLyoqXG4gKiBJZiB0aGlzIGlzIFNFUlZJQ0VfTUFOQUdFRCwgYW5kIHRoZSB3b3JrcGxhY2Ugd2FzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgQW1hem9uIE1hbmFnZWQgR3JhZmFuYVxuICogY29uc29sZSwgdGhlbiBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyB0aGUgSUFNIHJvbGVzIGFuZCBwcm92aXNpb25zIHRoZVxuICogcGVybWlzc2lvbnMgdGhhdCB0aGUgd29ya3NwYWNlIG5lZWRzIHRvIHVzZSBBV1MgZGF0YSBzb3VyY2VzIGFuZCBub3RpZmljYXRpb24gY2hhbm5lbHMuXG4gKlxuICogSWYgdGhpcyBpcyBDVVNUT01FUl9NQU5BR0VELCB5b3UgbXVzdCBtYW5hZ2UgdGhvc2Ugcm9sZXMgYW5kIHBlcm1pc3Npb25zIHlvdXJzZWxmLlxuXG4gKiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhIHdvcmtzcGFjZSBpbiBhIG1lbWJlciBhY2NvdW50IG9mIGFuIG9yZ2FuaXphdGlvbiBhbmQgdGhhdCBhY2NvdW50IGlzXG4gKiBub3QgYSBkZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciBhY2NvdW50LCBhbmQgeW91IHdhbnQgdGhlIHdvcmtzcGFjZSB0byBhY2Nlc3MgZGF0YSBzb3VyY2VzIGluXG4gKiBvdGhlciBBV1MgYWNjb3VudHMgaW4gdGhlIG9yZ2FuaXphdGlvbiwgdGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBzZXQgdG8gQ1VTVE9NRVJfTUFOQUdFRC5cbiAqL1xuZXhwb3J0IGVudW0gUGVybWlzc2lvblR5cGVzIHtcbiAgLyoqXG4gICAqIEN1c3RvbWVyLW1hbmFnZWQgcGVybWlzc2lvbnMgd2hlcmUgeW91IG1hbmFnZSB1c2VyIGFjY2VzcyB0byBHcmFmYW5hLlxuICAgKi9cbiAgQ1VTVE9NRVJfTUFOQUdFRCA9ICdDVVNUT01FUl9NQU5BR0VEJyxcblxuICAvKipcbiAgICogU2VydmljZS1tYW5hZ2VkIHBlcm1pc3Npb25zIHdoZXJlIEFXUyBtYW5hZ2VzIHVzZXIgYWNjZXNzIHRvIEdyYWZhbmEuXG4gICAqL1xuICBTRVJWSUNFX01BTkFHRUQgPSAnU0VSVklDRV9NQU5BR0VEJyxcbn1cblxuLyoqXG4gKiBBIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMgd2hpY2ggYXR0cmlidXRlcyBpbiB0aGUgSWRQIGFzc2VydGlvbiBhcmUgdG8gYmUgdXNlZCB0byBkZWZpbmVcbiAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VycyBhdXRoZW50aWNhdGVkIGJ5IHRoZSBJZFAgdG8gdXNlIHRoZSB3b3Jrc3BhY2UuXG4gKlxuICogRWFjaCBhdHRyaWJ1dGUgbXVzdCBiZSBhIHN0cmluZyB3aXRoIGxlbmd0aCBiZXR3ZWVuIDEgYW5kIDI1NiBjaGFyYWN0ZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNhbWxBc3NlcnRpb25BdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgd2l0aGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB1c2UgYXMgdGhlIGVtYWlsIG5hbWVzIGZvciBTQU1MIHVzZXJzLlxuICAgKlxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU2IGNoYXJhY3RlcnMgbG9uZy5cbiAgICovXG4gIHJlYWRvbmx5IGVtYWlsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHdpdGhpbiB0aGUgU0FNTCBhc3NlcnRpb24gdG8gdXNlIGFzIHRoZSB1c2VyIGZ1bGwgXCJmcmllbmRseVwiIG5hbWVzXG4gICAqIGZvciB1c2VyIGdyb3Vwcy5cbiAgICpcbiAgICogTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NiBjaGFyYWN0ZXJzIGxvbmcuXG4gICAqL1xuICByZWFkb25seSBncm91cHM6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgd2l0aGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB1c2UgYXMgdGhlIGxvZ2luIG5hbWVzIGZvciBTQU1MIHVzZXJzLlxuICAgKlxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU2IGNoYXJhY3RlcnMgbG9uZy5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ2luOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHdpdGhpbiB0aGUgU0FNTCBhc3NlcnRpb24gdG8gdXNlIGFzIHRoZSB1c2VyIGZ1bGwgXCJmcmllbmRseVwiIG5hbWVzXG4gICAqIGZvciBTQU1MIHVzZXJzLlxuICAgKlxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU2IGNoYXJhY3RlcnMgbG9uZy5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgd2l0aGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB1c2UgYXMgdGhlIHVzZXIgZnVsbCBcImZyaWVuZGx5XCIgbmFtZXNcbiAgICogZm9yIHRoZSB1c2Vycycgb3JnYW5pemF0aW9ucy5cbiAgICpcbiAgICogTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NiBjaGFyYWN0ZXJzIGxvbmcuXG4gICAqL1xuICByZWFkb25seSBvcmc6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgd2l0aGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB1c2UgYXMgdGhlIHVzZXIgcm9sZXMuXG4gICAqXG4gICAqIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTYgY2hhcmFjdGVycyBsb25nLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGlkZW50aXR5IHByb3ZpZGVyIChJZFApIG1ldGFkYXRhIHVzZWQgdG8gaW50ZWdyYXRlIHRoZSBpZGVudGl0eVxuICogcHJvdmlkZXIgd2l0aCB0aGlzIHdvcmtzcGFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYW1sSWRwTWV0YWRhdGEge1xuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgbG9jYXRpb24gY29udGFpbmluZyB0aGUgSWRQIG1ldGFkYXRhLlxuICAgKlxuICAgKiBNdXN0IGJlIGEgc3RyaW5nIHdpdGggbGVuZ3RoIGJldHdlZW4gMSBhbmQgMjA0OCBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVsbCBJZFAgbWV0YWRhdGEsIGluIFhNTCBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSB4bWw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhcnJheXMgdGhhdCBtYXAgZ3JvdXAgbmFtZXMgaW4gdGhlIFNBTUwgYXNzZXJ0aW9uIHRvIHRoZSBHcmFmYW5hIEFkbWluXG4gKiBhbmQgRWRpdG9yIHJvbGVzIGluIHRoZSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2FtbFJvbGVWYWx1ZXMge1xuICAvKipcbiAgICogQSBsaXN0IG9mIGdyb3VwcyBmcm9tIHRoZSBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGUgdG8gZ3JhbnQgdGhlIEdyYWZhbmEgQWRtaW4gcm9sZSB0by5cbiAgICpcbiAgICogTWF4aW11bSBvZiAyNTYgZWxlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBhZG1pbj86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ3JvdXBzIGZyb20gdGhlIFNBTUwgYXNzZXJ0aW9uIGF0dHJpYnV0ZSB0byBncmFudCB0aGUgR3JhZmFuYSBFZGl0b3Igcm9sZSB0by5cbiAgICpcbiAgICogTWF4aW11bSBvZiAyNTYgZWxlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3I/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgd29ya3NwYWNlIHVzZXMgU0FNTCwgdXNlIHRoaXMgc3RydWN0dXJlIHRvIG1hcCBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGVzIHRvIHdvcmtzcGFjZVxuICogdXNlciBpbmZvcm1hdGlvbiBhbmQgZGVmaW5lIHdoaWNoIGdyb3VwcyBpbiB0aGUgYXNzZXJ0aW9uIGF0dHJpYnV0ZSBhcmUgdG8gaGF2ZSB0aGUgQWRtaW4gYW5kXG4gKiBFZGl0b3Igcm9sZXMgaW4gdGhlIHdvcmtzcGFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYW1sQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBMaXN0cyB3aGljaCBvcmdhbml6YXRpb25zIGRlZmluZWQgaW4gdGhlIFNBTUwgYXNzZXJ0aW9uIGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQW1hem9uIE1hbmFnZWRcbiAgICogR3JhZmFuYSB3b3Jrc3BhY2UuIElmIHRoaXMgaXMgZW1wdHksIGFsbCBvcmdhbml6YXRpb25zIGluIHRoZSBhc3NlcnRpb24gYXR0cmlidXRlIGhhdmUgYWNjZXNzLlxuICAgKlxuICAgKiBNdXN0IGhhdmUgYmV0d2VlbiAxIGFuZCAyNTYgZWxlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkT3JnYW5pemF0aW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMgd2hpY2ggYXR0cmlidXRlcyBpbiB0aGUgU0FNTCBhc3NlcnRpb24gYXJlIHRvIGJlIHVzZWQgdG8gZGVmaW5lXG4gICAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VycyBhdXRoZW50aWNhdGVkIGJ5IHRoYXQgSWRQIHRvIHVzZSB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXJ0aW9uQXRycmlidXRlcz86IFNhbWxBc3NlcnRpb25BdHRyaWJ1dGVzO1xuXG4gIC8qKlxuICAgKiBBIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBpZGVudGl0eSBwcm92aWRlciAoSWRQKSBtZXRhZGF0YSB1c2VkIHRvIGludGVncmF0ZSB0aGUgaWRlbnRpdHlcbiAgICogcHJvdmlkZXIgd2l0aCB0aGlzIHdvcmtzcGFjZS5cbiAgICpcbiAgICogUmVxdWlyZWQgZmllbGQgZm9yIFNBTUwgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGlkcE1ldGFkYXRhOiBTYW1sSWRwTWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEhvdyBsb25nIGEgc2lnbi1vbiBzZXNzaW9uIGJ5IGEgU0FNTCB1c2VyIGlzIHZhbGlkLCBiZWZvcmUgdGhlIHVzZXIgaGFzIHRvIHNpZ24gb24gYWdhaW4uXG4gICAqXG4gICAqIE11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIuXG4gICAqL1xuICByZWFkb25seSBsb2dpblZhbGlkaXR5RHVyYXRpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgc3RydWN0dXJlIGNvbnRhaW5pbmcgYXJyYXlzIHRoYXQgbWFwIGdyb3VwIG5hbWVzIGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB0aGUgR3JhZmFuYSBBZG1pblxuICAgKiBhbmQgRWRpdG9yIHJvbGVzIGluIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICByZWFkb25seSByb2xlVmFsdWVzPzogU2FtbFJvbGVWYWx1ZXM7XG59XG5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIGFuIEFtYXpvbiBWUEMgdGhhdCBjb250YWlucyBkYXRhIHNvdXJjZXMgZm9yIHlvdXIgR3JhZmFuYVxuICogd29ya3NwYWNlIHRvIGNvbm5lY3QgdG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBBbWF6b24gRUMyIHNlY3VyaXR5IGdyb3VwcyBhdHRhY2hlZCB0byB0aGUgQW1hem9uIFZQQyBmb3IgeW91ciBHcmFmYW5hXG4gICAqIHdvcmtzcGFjZSB0byBjb25uZWN0LiBEdXBsaWNhdGVzIG5vdCBhbGxvd2VkLlxuICAgKlxuICAgKiBBcnJheSBNZW1iZXJzOiBNaW5pbXVtIG51bWJlciBvZiAxIGl0ZW1zLiBNYXhpbXVtIG51bWJlciBvZiA1IGl0ZW1zLlxuICAgKlxuICAgKiBSZXF1aXJlZCBmb3IgVlBDIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwczogSVNlY3VyaXR5R3JvdXBbXTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgQW1hem9uIEVDMiBzdWJuZXRzIGNyZWF0ZWQgaW4gdGhlIEFtYXpvbiBWUEMgZm9yIHlvdXIgR3JhZmFuYSB3b3Jrc3BhY2UgdG9cbiAgICogY29ubmVjdC4gRHVwbGljYXRlcyBub3QgYWxsb3dlZC5cbiAgICpcbiAgICogQXJyYXkgTWVtYmVyczogTWluaW11bSBudW1iZXIgb2YgMiBpdGVtcy4gTWF4aW11bSBudW1iZXIgb2YgNiBpdGVtcy5cbiAgICpcbiAgICogUmVxdWlyZWQgZm9yIFZQQyBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0czogSVN1Ym5ldFtdO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGFuIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgd29ya3NwYWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZVByb3BzIHtcbiAgLyoqXG4gICAqIFR5cGUgb2YgYWNjb3VudCBhY2Nlc3MgZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqIFJlcXVpcmVkIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudEFjY2Vzc1R5cGU6IEFjY291bnRBY2Nlc3NUeXBlO1xuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGlvbiBwcm92aWRlcnMgdG8gZW5hYmxlIGZvciB0aGUgd29ya3NwYWNlLlxuICAgKiBSZXF1aXJlZCBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzOiBBdXRoZW50aWNhdGlvblByb3ZpZGVyc1tdO1xuXG4gIC8qKlxuICAgKiBDbGllbnQgdG9rZW4gZm9yIGlkZW1wb3RlbnQgd29ya3NwYWNlIGNyZWF0aW9uLlxuICAgKiBNdXN0IGJlIDEtNjQgY2hhcmFjdGVycyBsb25nIGFuZCBjb250YWluIG9ubHkgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMuXG4gICAqL1xuICByZWFkb25seSBjbGllbnRUb2tlbj86IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCBvZiBkYXRhIHNvdXJjZXMgdG8gZW5hYmxlIGZvciB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVNvdXJjZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRGVzY3JpcHRpb24gb2YgdGhlIHdvcmtzcGFjZS5cbiAgICogTWF4aW11bSBsZW5ndGggb2YgMjA0OCBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYWZhbmEgdmVyc2lvbiBmb3IgdGhlIHdvcmtzcGFjZS5cbiAgICogTXVzdCBiZSAxLTI1NSBjaGFyYWN0ZXJzIGxvbmcuXG4gICAqL1xuICByZWFkb25seSBncmFmYW5hVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgd29ya3NwYWNlLlxuICAgKiBNdXN0IGJlIDEtMjU1IGNoYXJhY3RlcnMgbG9uZyBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBoeXBoZW5zLCBkb3RzLCB1bmRlcnNjb3JlcywgYW5kIHRpbGRlcy5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5ldHdvcmsgYWNjZXNzIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmb3IgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcmtBY2Nlc3NDb250cm9sPzogTmV0d29ya0FjY2Vzc0NvbnRyb2w7XG5cbiAgLyoqXG4gICAqIE5vdGlmaWNhdGlvbiBkZXN0aW5hdGlvbnMgdG8gZW5hYmxlIGZvciB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uRGVzdGluYXRpb25zPzogTm90aWZpY2F0aW9uRGVzdGluYXRpb25zW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2Ygb3JnYW5pemF0aW9uYWwgdW5pdHMgdG8gaW5jbHVkZSBpbiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uYWxVbml0cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBJQU0gcm9sZSB0byB1c2UgZm9yIHRoZSBvcmdhbml6YXRpb24uXG4gICAqIE1heGltdW0gbGVuZ3RoIG9mIDIwNDggY2hhcmFjdGVycy5cbiAgICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvblJvbGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQZXJtaXNzaW9uIHR5cGUgZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqIFJlcXVpcmVkIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlcztcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgdGhlIEdyYWZhbmEgcGx1Z2luIGFkbWluIHBhZ2UuXG4gICAqIERlZmF1bHQ6IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5BZG1pbkVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJQU0gcm9sZSB0byB1c2UgZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICByZWFkb25seSByb2xlPzogSVJvbGU7XG5cbiAgLyoqXG4gICAqIFNBTUwgY29uZmlndXJhdGlvbiBmb3IgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IHNhbWxDb25maWd1cmF0aW9uPzogU2FtbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIENsb3VkRm9ybWF0aW9uIHN0YWNrIHNldCB0byB1c2UuXG4gICAqL1xuICByZWFkb25seSBzdGFja1NldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZQQyBjb25maWd1cmF0aW9uIGZvciB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjQ29uZmlndXJhdGlvbj86IFZwY0NvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogU3RhdHVzIG9mIFNBTUwgY29uZmlndXJhdGlvbiBmb3IgYSBHcmFmYW5hIHdvcmtzcGFjZS5cbiAqL1xuZXhwb3J0IGVudW0gU2FtbENvbmZpZ3VyYXRpb25TdGF0dXNlcyB7XG4gIC8qKlxuICAgKiBTQU1MIGlzIGNvbmZpZ3VyZWQgZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBDT05GSUdVUkVEID0gJ0NPTkZJR1VSRUQnLFxuXG4gIC8qKlxuICAgKiBTQU1MIGlzIG5vdCBjb25maWd1cmVkIGZvciB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgTk9UX0NPTkZJR1VSRUQgPSAnTk9UX0NPTkZJR1VSRUQnLFxufVxuXG4vKipcbiAqIFN0YXR1cyBvZiBhIEdyYWZhbmEgd29ya3NwYWNlLlxuICovXG5leHBvcnQgZW51bSBTdGF0dXMge1xuICAvKipcbiAgICogV29ya3NwYWNlIGlzIGFjdGl2ZSBhbmQgcmVhZHkgdG8gdXNlLlxuICAgKi9cbiAgQUNUSVZFID0gJ0FDVElWRScsXG5cbiAgLyoqXG4gICAqIFdvcmtzcGFjZSBpcyBiZWluZyBjcmVhdGVkLlxuICAgKi9cbiAgQ1JFQVRJTkcgPSAnQ1JFQVRJTkcnLFxuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgaXMgYmVpbmcgZGVsZXRlZC5cbiAgICovXG4gIERFTEVUSU5HID0gJ0RFTEVUSU5HJyxcblxuICAvKipcbiAgICogV29ya3NwYWNlIG9wZXJhdGlvbiBoYXMgZmFpbGVkLlxuICAgKi9cbiAgRkFJTEVEID0gJ0ZBSUxFRCcsXG5cbiAgLyoqXG4gICAqIFdvcmtzcGFjZSBpcyBiZWluZyB1cGRhdGVkLlxuICAgKi9cbiAgVVBEQVRJTkcgPSAnVVBEQVRJTkcnLFxuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgaXMgYmVpbmcgdXBncmFkZWQuXG4gICAqL1xuICBVUEdSQURJTkcgPSAnVVBHUkFESU5HJyxcblxuICAvKipcbiAgICogV29ya3NwYWNlIGRlbGV0aW9uIGhhcyBmYWlsZWQuXG4gICAqL1xuICBERUxFVElPTl9GQUlMRUQgPSAnREVMRVRJT05fRkFJTEVEJyxcblxuICAvKipcbiAgICogV29ya3NwYWNlIGNyZWF0aW9uIGhhcyBmYWlsZWQuXG4gICAqL1xuICBDUkVBVElPTl9GQUlMRUQgPSAnQ1JFQVRJT05fRkFJTEVEJyxcblxuICAvKipcbiAgICogV29ya3NwYWNlIHVwZGF0ZSBoYXMgZmFpbGVkLlxuICAgKi9cbiAgVVBEQVRFX0ZBSUxFRCA9ICdVUERBVEVfRkFJTEVEJyxcblxuICAvKipcbiAgICogV29ya3NwYWNlIHVwZ3JhZGUgaGFzIGZhaWxlZC5cbiAgICovXG4gIFVQR1JBREVfRkFJTEVEID0gJ1VQR1JBREVfRkFJTEVEJyxcblxuICAvKipcbiAgICogTGljZW5zZSByZW1vdmFsIGhhcyBmYWlsZWQuXG4gICAqL1xuICBMSUNFTlNFX1JFTU9WQUxfRkFJTEVEID0gJ0xJQ0VOU0VfUkVNT1ZBTF9GQUlMRUQnLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB3b3Jrc3BhY2UuXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIGhpZ2gtbGV2ZWwgYWJzdHJhY3Rpb24gZm9yIGNyZWF0aW5nIGFuZCBtYW5hZ2luZ1xuICogQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB3b3Jrc3BhY2VzIHVzaW5nIEFXUyBDREsuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3Jrc3BhY2UgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBjbGllbnRUb2tlbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGNsaWVudCB0b2tlbiB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICAgKlxuICAgKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICAgKiAtIE11c3QgYmUgYSBzdHJpbmdcbiAgICogLSBNdXN0IGJlIGJldHdlZW4gMSBhbmQgNjQgY2hhcmFjdGVycyBsb25nXG4gICAqIC0gTXVzdCBjb250YWluIG9ubHkgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlQ2xpZW50VG9rZW4odG9rZW46IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKHRva2VuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBlcnJvcnM7IC8vIE9wdGlvbmFsIHByb3BlcnR5IGNhbiBiZSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRva2VuICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JzLnB1c2goJ2NsaWVudFRva2VuIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgIHJldHVybiBlcnJvcnM7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBpZiBub3QgYSBzdHJpbmdcbiAgICB9XG5cbiAgICBjb25zdCByZWdleCA9IC9eWyEtfl17MSw2NH0kLztcbiAgICBpZiAoIXJlZ2V4LnRlc3QodG9rZW4pKSB7XG4gICAgICBpZiAodG9rZW4ubGVuZ3RoIDwgMSB8fCB0b2tlbi5sZW5ndGggPiA2NCkge1xuICAgICAgICBlcnJvcnMucHVzaCgnY2xpZW50VG9rZW4gbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDY0IGNoYXJhY3RlcnMgbG9uZycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIS9eWyEtfl0qJC8udGVzdCh0b2tlbikpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ2NsaWVudFRva2VuIG11c3QgY29udGFpbiBvbmx5IHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGRlc2NyaXB0aW9uIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gLSBUaGUgZGVzY3JpcHRpb24gdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAgICpcbiAgICogVmFsaWRhdGlvbiBydWxlczpcbiAgICogLSBNdXN0IGJlIGEgc3RyaW5nXG4gICAqIC0gTWF4aW11bSBsZW5ndGggb2YgMjA0OCBjaGFyYWN0ZXJzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiB1bmtub3duKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXJyb3JzOyAvLyBPcHRpb25hbCBwcm9wZXJ0eSBjYW4gYmUgdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkZXNjcmlwdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdkZXNjcmlwdGlvbiBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgICByZXR1cm4gZXJyb3JzOyAvLyBObyBuZWVkIHRvIGNoZWNrIGZ1cnRoZXIgaWYgbm90IGEgc3RyaW5nXG4gICAgfVxuXG4gICAgaWYgKGRlc2NyaXB0aW9uLmxlbmd0aCA+IDIwNDgpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdkZXNjcmlwdGlvbiBjYW5ub3QgZXhjZWVkIDIwNDggY2hhcmFjdGVycycpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBncmFmYW5hVmVyc2lvbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gLSBUaGUgR3JhZmFuYSB2ZXJzaW9uIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gICAqXG4gICAqIFZhbGlkYXRpb24gcnVsZXM6XG4gICAqIC0gTXVzdCBiZSBhIHN0cmluZ1xuICAgKiAtIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTUgY2hhcmFjdGVycyBsb25nXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZUdyYWZhbmFWZXJzaW9uKHZlcnNpb246IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gT3B0aW9uYWwgcHJvcGVydHkgY2FuIGJlIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmVyc2lvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdncmFmYW5hVmVyc2lvbiBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgICByZXR1cm4gZXJyb3JzOyAvLyBObyBuZWVkIHRvIGNoZWNrIGZ1cnRoZXIgaWYgbm90IGEgc3RyaW5nXG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24ubGVuZ3RoIDwgMSkge1xuICAgICAgZXJyb3JzLnB1c2goJ2dyYWZhbmFWZXJzaW9uIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uLmxlbmd0aCA+IDI1NSkge1xuICAgICAgZXJyb3JzLnB1c2goJ2dyYWZhbmFWZXJzaW9uIGNhbm5vdCBleGNlZWQgMjU1IGNoYXJhY3RlcnMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgbmFtZSBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgd29ya3NwYWNlIG5hbWUgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAgICpcbiAgICogVmFsaWRhdGlvbiBydWxlczpcbiAgICogLSBNdXN0IGJlIGEgc3RyaW5nXG4gICAqIC0gTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NSBjaGFyYWN0ZXJzIGxvbmdcbiAgICogLSBDYW4gb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBoeXBoZW5zLCBkb3RzLCB1bmRlcnNjb3JlcywgYW5kIHRpbGRlc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVOYW1lKG5hbWU6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gT3B0aW9uYWwgcHJvcGVydHkgY2FuIGJlIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9ycy5wdXNoKCduYW1lIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgIHJldHVybiBlcnJvcnM7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBpZiBub3QgYSBzdHJpbmdcbiAgICB9XG5cbiAgICBjb25zdCByZWdleCA9IC9eW2EtekEtWjAtOVxcLS5ffl17MSwyNTV9JC87XG4gICAgaWYgKCFyZWdleC50ZXN0KG5hbWUpKSB7XG4gICAgICBpZiAobmFtZS5sZW5ndGggPCAxIHx8IG5hbWUubGVuZ3RoID4gMjU1KSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCduYW1lIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTUgY2hhcmFjdGVycyBsb25nJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghL15bYS16QS1aMC05XFwtLl9+XSokLy50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgICduYW1lIGNhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIGRvdHMsIHVuZGVyc2NvcmVzLCBhbmQgdGlsZGVzJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgbmV0d29ya0FjY2Vzc0NvbnRyb2wgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBuYWMgLSBUaGUgbmV0d29yayBhY2Nlc3MgY29udHJvbCBjb25maWd1cmF0aW9uIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gICAqXG4gICAqIFZhbGlkYXRpb24gcnVsZXM6XG4gICAqIC0gTXVzdCBiZSBhbiBvYmplY3RcbiAgICogLSBwcmVmaXhMaXN0cyAoaWYgcHJlc2VudCkgbXVzdCBiZSBhbiBhcnJheSB3aXRoIGF0IG1vc3QgNSBpdGVtc1xuICAgKiAtIHZwY0VuZHBvaW50cyAoaWYgcHJlc2VudCkgbXVzdCBiZSBhbiBhcnJheSB3aXRoIGF0IG1vc3QgNSBpdGVtc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVOZXR3b3JrQWNjZXNzQ29udHJvbChuYWM6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKG5hYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXJyb3JzOyAvLyBPcHRpb25hbCBwcm9wZXJ0eSBjYW4gYmUgdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgaWYgKCFuYWMgfHwgdHlwZW9mIG5hYyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGVycm9ycy5wdXNoKCduZXR3b3JrQWNjZXNzQ29udHJvbCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICBjb25zdCBuZXR3b3JrQWNjZXNzQ29udHJvbCA9IG5hYyBhcyBOZXR3b3JrQWNjZXNzQ29udHJvbDtcblxuICAgIC8vIENoZWNrIHByZWZpeExpc3RzIGlmIHByZXNlbnRcbiAgICBpZiAobmV0d29ya0FjY2Vzc0NvbnRyb2wucHJlZml4TGlzdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5ldHdvcmtBY2Nlc3NDb250cm9sLnByZWZpeExpc3RzKSkge1xuICAgICAgICBlcnJvcnMucHVzaCgncHJlZml4TGlzdHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgfSBlbHNlIGlmIChuZXR3b3JrQWNjZXNzQ29udHJvbC5wcmVmaXhMaXN0cy5sZW5ndGggPiA1KSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdwcmVmaXhMaXN0cyBjYW4gaGF2ZSBhdCBtb3N0IDUgaXRlbXMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayB2cGNFbmRwb2ludHMgaWYgcHJlc2VudFxuICAgIGlmIChuZXR3b3JrQWNjZXNzQ29udHJvbC52cGNFbmRwb2ludHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5ldHdvcmtBY2Nlc3NDb250cm9sLnZwY0VuZHBvaW50cykpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ3ZwY0VuZHBvaW50cyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICB9IGVsc2UgaWYgKG5ldHdvcmtBY2Nlc3NDb250cm9sLnZwY0VuZHBvaW50cy5sZW5ndGggPiA1KSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCd2cGNFbmRwb2ludHMgY2FuIGhhdmUgYXQgbW9zdCA1IGl0ZW1zJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIG9yZ2FuaXphdGlvblJvbGVOYW1lIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gcm9sZU5hbWUgLSBUaGUgb3JnYW5pemF0aW9uIHJvbGUgbmFtZSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICAgKlxuICAgKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICAgKiAtIE11c3QgYmUgYSBzdHJpbmdcbiAgICogLSBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjA0OCBjaGFyYWN0ZXJzIGxvbmdcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlT3JnYW5pemF0aW9uUm9sZU5hbWUocm9sZU5hbWU6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKHJvbGVOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBlcnJvcnM7IC8vIE9wdGlvbmFsIHByb3BlcnR5IGNhbiBiZSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJvbGVOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JzLnB1c2goJ29yZ2FuaXphdGlvblJvbGVOYW1lIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgIHJldHVybiBlcnJvcnM7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBpZiBub3QgYSBzdHJpbmdcbiAgICB9XG5cbiAgICBpZiAocm9sZU5hbWUubGVuZ3RoIDwgMSkge1xuICAgICAgZXJyb3JzLnB1c2goJ29yZ2FuaXphdGlvblJvbGVOYW1lIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgIH1cblxuICAgIGlmIChyb2xlTmFtZS5sZW5ndGggPiAyMDQ4KSB7XG4gICAgICBlcnJvcnMucHVzaCgnb3JnYW5pemF0aW9uUm9sZU5hbWUgY2Fubm90IGV4Y2VlZCAyMDQ4IGNoYXJhY3RlcnMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgU0FNTCBhc3NlcnRpb24gYXR0cmlidXRlcy5cbiAgICpcbiAgICogQHBhcmFtIG9iaiAtIFRoZSBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGVzIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gICAqXG4gICAqIFZhbGlkYXRpb24gcnVsZXM6XG4gICAqIC0gTXVzdCBiZSBhbiBvYmplY3RcbiAgICogLSBFYWNoIGF0dHJpYnV0ZSBtdXN0IGJlIGEgc3RyaW5nXG4gICAqIC0gRWFjaCBhdHRyaWJ1dGUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NiBjaGFyYWN0ZXJzIGxvbmdcbiAgICogLSBWYWxpZCBhdHRyaWJ1dGUga2V5cyBhcmU6ICdlbWFpbCcsICdncm91cHMnLCAnbG9naW4nLCAnbmFtZScsICdvcmcnLCAncm9sZSdcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlU2FtbEFzc2VydGlvbkF0dHJpYnV0ZXMob2JqOiB1bmtub3duKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gWydJbnB1dCBpcyBub3QgYW4gb2JqZWN0J107XG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IG9iaiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIGF0dHJpYnV0ZXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYXR0cmlidXRlc1trZXldO1xuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7IC8vIE9wdGlvbmFsIHByb3BlcnRpZXMgY2FuIGJlIHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICBlcnJvcnMucHVzaChgUHJvcGVydHkgJyR7a2V5fScgbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPCAxKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBQcm9wZXJ0eSAnJHtrZXl9JyBjYW5ub3QgYmUgZW1wdHlgKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gMjU2KSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgIGBQcm9wZXJ0eSAnJHtrZXl9JyBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mIDI1NiBjaGFyYWN0ZXJzYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgU0FNTCBJZFAgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSBvYmogLSBUaGUgU0FNTCBJZFAgbWV0YWRhdGEgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAgICpcbiAgICogVmFsaWRhdGlvbiBydWxlczpcbiAgICogLSBNdXN0IGJlIGFuIG9iamVjdFxuICAgKiAtIHVybCAoaWYgcHJlc2VudCkgbXVzdCBiZSBhIHN0cmluZyBiZXR3ZWVuIDEgYW5kIDIwNDggY2hhcmFjdGVycyBsb25nXG4gICAqIC0geG1sIChpZiBwcmVzZW50KSBtdXN0IGJlIGEgc3RyaW5nXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZVNhbWxJZHBNZXRhZGF0YShvYmo6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBbJ0lucHV0IGlzIG5vdCBhbiBvYmplY3QnXTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRhZGF0YSA9IG9iaiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIC8vIENoZWNrIHVybCBwcm9wZXJ0eSBpZiBwcmVzZW50XG4gICAgaWYgKG1ldGFkYXRhLnVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIG1ldGFkYXRhLnVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXCJQcm9wZXJ0eSAndXJsJyBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuICAgICAgfSBlbHNlIGlmIChtZXRhZGF0YS51cmwubGVuZ3RoIDwgMSkge1xuICAgICAgICBlcnJvcnMucHVzaChcIlByb3BlcnR5ICd1cmwnIGNhbm5vdCBiZSBlbXB0eVwiKTtcbiAgICAgIH0gZWxzZSBpZiAobWV0YWRhdGEudXJsLmxlbmd0aCA+IDIwNDgpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXCJQcm9wZXJ0eSAndXJsJyBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mIDIwNDggY2hhcmFjdGVyc1wiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayB4bWwgcHJvcGVydHkgaWYgcHJlc2VudFxuICAgIGlmIChtZXRhZGF0YS54bWwgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbWV0YWRhdGEueG1sICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JzLnB1c2goXCJQcm9wZXJ0eSAneG1sJyBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBTQU1MIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgU0FNTCBjb25maWd1cmF0aW9uIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gICAqXG4gICAqIFZhbGlkYXRpb24gcnVsZXM6XG4gICAqIC0gTXVzdCBiZSBhbiBvYmplY3RcbiAgICogLSBpZHBNZXRhZGF0YSBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSB2YWxpZFxuICAgKiAtIGFzc2VydGlvbkF0cnJpYnV0ZXMgKGlmIHByZXNlbnQpIG11c3QgYmUgdmFsaWRcbiAgICogLSBhbGxvd2VkT3JnYW5pemF0aW9ucyAoaWYgcHJlc2VudCkgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggMS0yNTYgZWxlbWVudHNcbiAgICogLSBsb2dpblZhbGlkaXR5RHVyYXRpb24gKGlmIHByZXNlbnQpIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXJcbiAgICogLSByb2xlVmFsdWVzIChpZiBwcmVzZW50KSBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIHZhbGlkIGFkbWluIGFuZCBlZGl0b3IgYXJyYXlzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZVNhbWxDb25maWd1cmF0aW9uKGNvbmZpZzogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBlcnJvcnM7IC8vIE9wdGlvbmFsIHByb3BlcnR5IGNhbiBiZSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZyB8fCB0eXBlb2YgY29uZmlnICE9PSAnb2JqZWN0Jykge1xuICAgICAgZXJyb3JzLnB1c2goJ3NhbWxDb25maWd1cmF0aW9uIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGNvbnN0IHNhbWxDb25maWcgPSBjb25maWcgYXMgU2FtbENvbmZpZ3VyYXRpb247XG5cbiAgICAvLyBDaGVjayBpZHBNZXRhZGF0YSAocmVxdWlyZWQpXG4gICAgaWYgKHNhbWxDb25maWcuaWRwTWV0YWRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3JzLnB1c2goJ2lkcE1ldGFkYXRhIGlzIHJlcXVpcmVkIGluIHNhbWxDb25maWd1cmF0aW9uJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlkcE1ldGFkYXRhRXJyb3JzID0gV29ya3NwYWNlLnZhbGlkYXRlU2FtbElkcE1ldGFkYXRhKFxuICAgICAgICBzYW1sQ29uZmlnLmlkcE1ldGFkYXRhLFxuICAgICAgKTtcbiAgICAgIGlmIChpZHBNZXRhZGF0YUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKC4uLmlkcE1ldGFkYXRhRXJyb3JzLm1hcCgoZXJyKSA9PiBgaWRwTWV0YWRhdGE6ICR7ZXJyfWApKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBhc3NlcnRpb25BdHJyaWJ1dGVzIGlmIHByZXNlbnRcbiAgICBpZiAoc2FtbENvbmZpZy5hc3NlcnRpb25BdHJyaWJ1dGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZUVycm9ycyA9IFdvcmtzcGFjZS52YWxpZGF0ZVNhbWxBc3NlcnRpb25BdHRyaWJ1dGVzKFxuICAgICAgICBzYW1sQ29uZmlnLmFzc2VydGlvbkF0cnJpYnV0ZXMsXG4gICAgICApO1xuICAgICAgaWYgKGF0dHJpYnV0ZUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgIC4uLmF0dHJpYnV0ZUVycm9ycy5tYXAoKGVycikgPT4gYGFzc2VydGlvbkF0cnJpYnV0ZXM6ICR7ZXJyfWApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGFsbG93ZWRPcmdhbml6YXRpb25zIGlmIHByZXNlbnRcbiAgICBpZiAoc2FtbENvbmZpZy5hbGxvd2VkT3JnYW5pemF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2FtbENvbmZpZy5hbGxvd2VkT3JnYW5pemF0aW9ucykpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ2FsbG93ZWRPcmdhbml6YXRpb25zIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzYW1sQ29uZmlnLmFsbG93ZWRPcmdhbml6YXRpb25zLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaCgnYWxsb3dlZE9yZ2FuaXphdGlvbnMgbXVzdCBoYXZlIGF0IGxlYXN0IDEgZWxlbWVudCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzYW1sQ29uZmlnLmFsbG93ZWRPcmdhbml6YXRpb25zLmxlbmd0aCA+IDI1Nikge1xuICAgICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgICAgJ2FsbG93ZWRPcmdhbml6YXRpb25zIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiAyNTYgZWxlbWVudHMnLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNhbWxDb25maWcuYWxsb3dlZE9yZ2FuaXphdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBvcmcgPSBzYW1sQ29uZmlnLmFsbG93ZWRPcmdhbml6YXRpb25zW2ldO1xuICAgICAgICAgIGlmICh0eXBlb2Ygb3JnICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goYGFsbG93ZWRPcmdhbml6YXRpb25zWyR7aX1dIG11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBsb2dpblZhbGlkaXR5RHVyYXRpb24gaWYgcHJlc2VudFxuICAgIGlmIChzYW1sQ29uZmlnLmxvZ2luVmFsaWRpdHlEdXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNhbWxDb25maWcubG9naW5WYWxpZGl0eUR1cmF0aW9uICE9PSAnbnVtYmVyJykge1xuICAgICAgICBlcnJvcnMucHVzaCgnbG9naW5WYWxpZGl0eUR1cmF0aW9uIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICAgIH0gZWxzZSBpZiAoc2FtbENvbmZpZy5sb2dpblZhbGlkaXR5RHVyYXRpb24gPD0gMCkge1xuICAgICAgICBlcnJvcnMucHVzaCgnbG9naW5WYWxpZGl0eUR1cmF0aW9uIG11c3QgYmUgcG9zaXRpdmUnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayByb2xlVmFsdWVzIGlmIHByZXNlbnRcbiAgICBpZiAoc2FtbENvbmZpZy5yb2xlVmFsdWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghc2FtbENvbmZpZy5yb2xlVmFsdWVzIHx8IHR5cGVvZiBzYW1sQ29uZmlnLnJvbGVWYWx1ZXMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdyb2xlVmFsdWVzIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDaGVjayBhZG1pbiBhcnJheSBpZiBwcmVzZW50XG4gICAgICAgIGlmIChzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuYWRtaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuYWRtaW4pKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCgncm9sZVZhbHVlcy5hZG1pbiBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtbENvbmZpZy5yb2xlVmFsdWVzLmFkbWluLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2FtbENvbmZpZy5yb2xlVmFsdWVzLmFkbWluW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGByb2xlVmFsdWVzLmFkbWluWyR7aX1dIG11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGVkaXRvciBhcnJheSBpZiBwcmVzZW50XG4gICAgICAgIGlmIChzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuZWRpdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2FtbENvbmZpZy5yb2xlVmFsdWVzLmVkaXRvcikpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKCdyb2xlVmFsdWVzLmVkaXRvciBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtbENvbmZpZy5yb2xlVmFsdWVzLmVkaXRvci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHNhbWxDb25maWcucm9sZVZhbHVlcy5lZGl0b3JbaV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYHJvbGVWYWx1ZXMuZWRpdG9yWyR7aX1dIG11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSB2cGNDb25maWd1cmF0aW9uIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gVGhlIFZQQyBjb25maWd1cmF0aW9uIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gICAqXG4gICAqIFZhbGlkYXRpb24gcnVsZXM6XG4gICAqIC0gTXVzdCBiZSBhbiBvYmplY3RcbiAgICogLSBzZWN1cml0eUdyb3VwcyBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBhcnJheSB3aXRoIDEtNSBpdGVtc1xuICAgKiAtIHN1Ym5ldHMgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYW4gYXJyYXkgd2l0aCAyLTYgaXRlbXNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlVnBjQ29uZmlndXJhdGlvbihjb25maWc6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXJyb3JzOyAvLyBPcHRpb25hbCBwcm9wZXJ0eSBjYW4gYmUgdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgaWYgKCFjb25maWcgfHwgdHlwZW9mIGNvbmZpZyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGVycm9ycy5wdXNoKCd2cGNDb25maWd1cmF0aW9uIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGNvbnN0IHZwY0NvbmZpZyA9IGNvbmZpZyBhcyBWcGNDb25maWd1cmF0aW9uO1xuXG4gICAgLy8gQ2hlY2sgc2VjdXJpdHlHcm91cHMgKHJlcXVpcmVkKVxuICAgIGlmICh2cGNDb25maWcuc2VjdXJpdHlHcm91cHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3JzLnB1c2goJ3NlY3VyaXR5R3JvdXBzIGlzIHJlcXVpcmVkIGluIHZwY0NvbmZpZ3VyYXRpb24nKTtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHZwY0NvbmZpZy5zZWN1cml0eUdyb3VwcykpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdzZWN1cml0eUdyb3VwcyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh2cGNDb25maWcuc2VjdXJpdHlHcm91cHMubGVuZ3RoIDwgMSkge1xuICAgICAgICBlcnJvcnMucHVzaCgnc2VjdXJpdHlHcm91cHMgbXVzdCBoYXZlIGF0IGxlYXN0IDEgaXRlbScpO1xuICAgICAgfVxuICAgICAgaWYgKHZwY0NvbmZpZy5zZWN1cml0eUdyb3Vwcy5sZW5ndGggPiA1KSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdzZWN1cml0eUdyb3VwcyBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gNSBpdGVtcycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIHN1Ym5ldHMgKHJlcXVpcmVkKVxuICAgIGlmICh2cGNDb25maWcuc3VibmV0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvcnMucHVzaCgnc3VibmV0cyBpcyByZXF1aXJlZCBpbiB2cGNDb25maWd1cmF0aW9uJyk7XG4gICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheSh2cGNDb25maWcuc3VibmV0cykpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdzdWJuZXRzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZwY0NvbmZpZy5zdWJuZXRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ3N1Ym5ldHMgbXVzdCBoYXZlIGF0IGxlYXN0IDIgaXRlbXMnKTtcbiAgICAgIH1cbiAgICAgIGlmICh2cGNDb25maWcuc3VibmV0cy5sZW5ndGggPiA2KSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdzdWJuZXRzIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiA2IGl0ZW1zJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYWxsIHdvcmtzcGFjZSBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUaGUgd29ya3NwYWNlIHByb3BlcnRpZXMgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAgICpcbiAgICogVGhpcyBtZXRob2QgYWdncmVnYXRlcyB2YWxpZGF0aW9uIHJlc3VsdHMgZnJvbSBhbGwgaW5kaXZpZHVhbCBwcm9wZXJ0eSB2YWxpZGF0b3JzLlxuICAgKiBJdCB0aHJvd3MgYW4gZXJyb3IgaWYgcHJvcHMgaXMgbm90IGFuIG9iamVjdC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlUHJvcHMocHJvcHM6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKCFwcm9wcyB8fCB0eXBlb2YgcHJvcHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3BzIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3Qgd29ya3NwYWNlUHJvcHMgPSBwcm9wcyBhcyBXb3Jrc3BhY2VQcm9wcztcblxuICAgIGlmICh3b3Jrc3BhY2VQcm9wcy5jbGllbnRUb2tlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjbGllbnRUb2tlbkVycm9ycyA9IFdvcmtzcGFjZS52YWxpZGF0ZUNsaWVudFRva2VuKFxuICAgICAgICB3b3Jrc3BhY2VQcm9wcy5jbGllbnRUb2tlbixcbiAgICAgICk7XG4gICAgICBpZiAoY2xpZW50VG9rZW5FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcnMucHVzaCguLi5jbGllbnRUb2tlbkVycm9ycy5tYXAoKGVycikgPT4gYGNsaWVudFRva2VuOiAke2Vycn1gKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uRXJyb3JzID0gV29ya3NwYWNlLnZhbGlkYXRlRGVzY3JpcHRpb24oXG4gICAgICAgIHdvcmtzcGFjZVByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgKTtcbiAgICAgIGlmIChkZXNjcmlwdGlvbkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKC4uLmRlc2NyaXB0aW9uRXJyb3JzLm1hcCgoZXJyKSA9PiBgZGVzY3JpcHRpb246ICR7ZXJyfWApKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya3NwYWNlUHJvcHMuZ3JhZmFuYVZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZ3JhZmFuYVZlcnNpb25FcnJvcnMgPSBXb3Jrc3BhY2UudmFsaWRhdGVHcmFmYW5hVmVyc2lvbihcbiAgICAgICAgd29ya3NwYWNlUHJvcHMuZ3JhZmFuYVZlcnNpb24sXG4gICAgICApO1xuICAgICAgaWYgKGdyYWZhbmFWZXJzaW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgLi4uZ3JhZmFuYVZlcnNpb25FcnJvcnMubWFwKChlcnIpID0+IGBncmFmYW5hVmVyc2lvbjogJHtlcnJ9YCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgbmFtZUVycm9ycyA9IFdvcmtzcGFjZS52YWxpZGF0ZU5hbWUod29ya3NwYWNlUHJvcHMubmFtZSk7XG4gICAgICBpZiAobmFtZUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKC4uLm5hbWVFcnJvcnMubWFwKChlcnIpID0+IGBuYW1lOiAke2Vycn1gKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLm5ldHdvcmtBY2Nlc3NDb250cm9sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG5ldHdvcmtBY2Nlc3NDb250cm9sRXJyb3JzID0gV29ya3NwYWNlLnZhbGlkYXRlTmV0d29ya0FjY2Vzc0NvbnRyb2woXG4gICAgICAgIHdvcmtzcGFjZVByb3BzLm5ldHdvcmtBY2Nlc3NDb250cm9sLFxuICAgICAgKTtcbiAgICAgIGlmIChuZXR3b3JrQWNjZXNzQ29udHJvbEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgIC4uLm5ldHdvcmtBY2Nlc3NDb250cm9sRXJyb3JzLm1hcChcbiAgICAgICAgICAgIChlcnIpID0+IGBuZXR3b3JrQWNjZXNzQ29udHJvbDogJHtlcnJ9YCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3Jrc3BhY2VQcm9wcy5vcmdhbml6YXRpb25Sb2xlTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmdhbml6YXRpb25Sb2xlTmFtZUVycm9ycyA9IFdvcmtzcGFjZS52YWxpZGF0ZU9yZ2FuaXphdGlvblJvbGVOYW1lKFxuICAgICAgICB3b3Jrc3BhY2VQcm9wcy5vcmdhbml6YXRpb25Sb2xlTmFtZSxcbiAgICAgICk7XG4gICAgICBpZiAob3JnYW5pemF0aW9uUm9sZU5hbWVFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAuLi5vcmdhbml6YXRpb25Sb2xlTmFtZUVycm9ycy5tYXAoXG4gICAgICAgICAgICAoZXJyKSA9PiBgb3JnYW5pemF0aW9uUm9sZU5hbWU6ICR7ZXJyfWAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya3NwYWNlUHJvcHMuc2FtbENvbmZpZ3VyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgc2FtbENvbmZpZ3VyYXRpb25FcnJvcnMgPSBXb3Jrc3BhY2UudmFsaWRhdGVTYW1sQ29uZmlndXJhdGlvbihcbiAgICAgICAgd29ya3NwYWNlUHJvcHMuc2FtbENvbmZpZ3VyYXRpb24sXG4gICAgICApO1xuICAgICAgaWYgKHNhbWxDb25maWd1cmF0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgLi4uc2FtbENvbmZpZ3VyYXRpb25FcnJvcnMubWFwKChlcnIpID0+IGBzYW1sQ29uZmlndXJhdGlvbjogJHtlcnJ9YCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLnZwY0NvbmZpZ3VyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdnBjQ29uZmlndXJhdGlvbkVycm9ycyA9IFdvcmtzcGFjZS52YWxpZGF0ZVZwY0NvbmZpZ3VyYXRpb24oXG4gICAgICAgIHdvcmtzcGFjZVByb3BzLnZwY0NvbmZpZ3VyYXRpb24sXG4gICAgICApO1xuICAgICAgaWYgKHZwY0NvbmZpZ3VyYXRpb25FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAuLi52cGNDb25maWd1cmF0aW9uRXJyb3JzLm1hcCgoZXJyKSA9PiBgdnBjQ29uZmlndXJhdGlvbjogJHtlcnJ9YCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBhY2NvdW50IGFjY2VzcyBmb3IgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhY2NvdW50QWNjZXNzVHlwZTogQWNjb3VudEFjY2Vzc1R5cGU7XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0aW9uIHByb3ZpZGVycyBlbmFibGVkIGZvciB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzOiBBdXRoZW50aWNhdGlvblByb3ZpZGVyc1tdO1xuXG4gIC8qKlxuICAgKiBDbGllbnQgdG9rZW4gdXNlZCBmb3IgaWRlbXBvdGVudCB3b3Jrc3BhY2UgY3JlYXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50VG9rZW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERhdGEgc291cmNlcyBlbmFibGVkIGZvciB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRhdGFTb3VyY2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIG9mIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOZXR3b3JrIGFjY2VzcyBjb250cm9sIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmV0d29ya0FjY2Vzc0NvbnRyb2w/OiBOZXR3b3JrQWNjZXNzQ29udHJvbDtcblxuICAvKipcbiAgICogTm90aWZpY2F0aW9uIGRlc3RpbmF0aW9ucyBlbmFibGVkIGZvciB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucz86IE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uc1tdO1xuXG4gIC8qKlxuICAgKiBPcmdhbml6YXRpb25hbCB1bml0cyBpbmNsdWRlZCBpbiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgSUFNIHJvbGUgdXNlZCBmb3IgdGhlIG9yZ2FuaXphdGlvbi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvcmdhbml6YXRpb25Sb2xlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUGVybWlzc2lvbiB0eXBlIGZvciB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZXM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIEdyYWZhbmEgcGx1Z2luIGFkbWluIHBhZ2UgaXMgZW5hYmxlZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwbHVnaW5BZG1pbkVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJQU0gcm9sZSB1c2VkIGZvciB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvbGU/OiBJUm9sZTtcblxuICAvKipcbiAgICogU0FNTCBjb25maWd1cmF0aW9uIGZvciB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNhbWxDb25maWd1cmF0aW9uPzogU2FtbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIENsb3VkRm9ybWF0aW9uIHN0YWNrIHNldCB1c2VkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YWNrU2V0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVlBDIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjQ29uZmlndXJhdGlvbj86IFZwY0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSB1bmRlcmx5aW5nIENsb3VkRm9ybWF0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB3b3Jrc3BhY2U6IENmbldvcmtzcGFjZTtcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIHdvcmtzcGFjZSB3YXMgY3JlYXRlZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGlvblRpbWVzdGFtcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmRwb2ludCBVUkwgZm9yIHRoZSBHcmFmYW5hIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFmYW5hIHZlcnNpb24gcnVubmluZyBpbiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYWZhbmFWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB3aGVuIHRoZSB3b3Jrc3BhY2Ugd2FzIGxhc3QgbW9kaWZpZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbW9kaWZpY2F0aW9uVGltZXN0YW1wOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN0YXR1cyBvZiBTQU1MIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2FtbENvbmZpZ3VyYXRpb25TdGF0dXM6IFNhbWxDb25maWd1cmF0aW9uU3RhdHVzZXM7XG5cbiAgLyoqXG4gICAqIFNTTyBjbGllbnQgSUQgZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3NvQ2xpZW50SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ3VycmVudCBzdGF0dXMgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXM6IFN0YXR1cztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHdvcmtzcGFjZS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgLSBUaGUgc2NvcGVkIGNvbnN0cnVjdCBJRFxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSB3b3Jrc3BhY2VcbiAgICpcbiAgICogQHRocm93cyBFcnJvciBpZiBhbnkgb2YgdGhlIHByb3ZpZGVkIHByb3BlcnRpZXMgZmFpbCB2YWxpZGF0aW9uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogV29ya3NwYWNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgZXJyb3JzID0gV29ya3NwYWNlLnZhbGlkYXRlUHJvcHMocHJvcHMpO1xuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHByb3BzOlxcbiR7ZXJyb3JzLmpvaW4oJ1xcbicpfWApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb3BzLmFjY291bnRBY2Nlc3NUeXBlID09PSBBY2NvdW50QWNjZXNzVHlwZS5DVVJSRU5UX0FDQ09VTlQgJiZcbiAgICAgICFwcm9wcy5yb2xlXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdSb2xlIG11c3QgYmUgcHJvdmlkZWQgd2hlbiBhY2NvdW50QWNjZXNzVHlwZSBpcyBDVVJSRU5UX0FDQ09VTlQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmFjY291bnRBY2Nlc3NUeXBlID0gcHJvcHMuYWNjb3VudEFjY2Vzc1R5cGU7XG4gICAgdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVycyA9IHByb3BzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzO1xuICAgIHRoaXMuY2xpZW50VG9rZW4gPSBwcm9wcy5jbGllbnRUb2tlbjtcbiAgICB0aGlzLmRhdGFTb3VyY2VzID0gcHJvcHMuZGF0YVNvdXJjZXM7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMubmV0d29ya0FjY2Vzc0NvbnRyb2wgPSBwcm9wcy5uZXR3b3JrQWNjZXNzQ29udHJvbDtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucyA9IHByb3BzLm5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucztcbiAgICB0aGlzLm9yZ2FuaXphdGlvbmFsVW5pdHMgPSBwcm9wcy5vcmdhbml6YXRpb25hbFVuaXRzO1xuICAgIHRoaXMub3JnYW5pemF0aW9uUm9sZU5hbWUgPSBwcm9wcy5vcmdhbml6YXRpb25Sb2xlTmFtZTtcbiAgICB0aGlzLnBlcm1pc3Npb25UeXBlID0gcHJvcHMucGVybWlzc2lvblR5cGU7XG4gICAgdGhpcy5wbHVnaW5BZG1pbkVuYWJsZWQgPSBwcm9wcy5wbHVnaW5BZG1pbkVuYWJsZWQ7XG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLnJvbGUgPSBwcm9wcy5yb2xlO1xuICAgIHRoaXMuc2FtbENvbmZpZ3VyYXRpb24gPSBwcm9wcy5zYW1sQ29uZmlndXJhdGlvbjtcbiAgICB0aGlzLnN0YWNrU2V0TmFtZSA9IHByb3BzLnN0YWNrU2V0TmFtZTtcbiAgICB0aGlzLnZwY0NvbmZpZ3VyYXRpb24gPSBwcm9wcy52cGNDb25maWd1cmF0aW9uO1xuXG4gICAgbGV0IGNmbldvcmtzcGFjZVByb3BzOiBDZm5Xb3Jrc3BhY2VQcm9wcyA9IHtcbiAgICAgIGFjY291bnRBY2Nlc3NUeXBlOiBwcm9wcy5hY2NvdW50QWNjZXNzVHlwZSxcbiAgICAgIGF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzOiBwcm9wcy5hdXRoZW50aWNhdGlvblByb3ZpZGVycyxcbiAgICAgIGNsaWVudFRva2VuOiBwcm9wcy5jbGllbnRUb2tlbixcbiAgICAgIGRhdGFTb3VyY2VzOiBwcm9wcy5kYXRhU291cmNlcyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGdyYWZhbmFWZXJzaW9uOiBwcm9wcy5ncmFmYW5hVmVyc2lvbixcbiAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICBub3RpZmljYXRpb25EZXN0aW5hdGlvbnM6IHByb3BzLm5vdGlmaWNhdGlvbkRlc3RpbmF0aW9ucyxcbiAgICAgIG9yZ2FuaXphdGlvbmFsVW5pdHM6IHByb3BzLm9yZ2FuaXphdGlvbmFsVW5pdHMsXG4gICAgICBvcmdhbml6YXRpb25Sb2xlTmFtZTogcHJvcHMub3JnYW5pemF0aW9uUm9sZU5hbWUsXG4gICAgICBwZXJtaXNzaW9uVHlwZTogcHJvcHMucGVybWlzc2lvblR5cGUsXG4gICAgICBwbHVnaW5BZG1pbkVuYWJsZWQ6IHByb3BzLnBsdWdpbkFkbWluRW5hYmxlZCxcbiAgICAgIHJvbGVBcm46IHByb3BzLnJvbGU/LnJvbGVBcm4sXG4gICAgICBzYW1sQ29uZmlndXJhdGlvbjogcHJvcHMuc2FtbENvbmZpZ3VyYXRpb24sXG4gICAgICBzdGFja1NldE5hbWU6IHByb3BzLnN0YWNrU2V0TmFtZSxcbiAgICAgIHZwY0NvbmZpZ3VyYXRpb246IHByb3BzLnZwY0NvbmZpZ3VyYXRpb25cbiAgICAgICAgPyB7XG4gICAgICAgICAgc2VjdXJpdHlHcm91cElkczogcHJvcHMudnBjQ29uZmlndXJhdGlvbi5zZWN1cml0eUdyb3Vwcy5tYXAoXG4gICAgICAgICAgICAoc2cpID0+IHNnLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgICAgICApLFxuICAgICAgICAgIHN1Ym5ldElkczogcHJvcHMudnBjQ29uZmlndXJhdGlvbi5zdWJuZXRzLm1hcChcbiAgICAgICAgICAgIChzdWJuZXQpID0+IHN1Ym5ldC5zdWJuZXRJZCxcbiAgICAgICAgICApLFxuICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICB0aGlzLndvcmtzcGFjZSA9IG5ldyBDZm5Xb3Jrc3BhY2UodGhpcywgJ1Jlc291cmNlJywgY2ZuV29ya3NwYWNlUHJvcHMpO1xuICAgIHRoaXMuY3JlYXRpb25UaW1lc3RhbXAgPSB0aGlzLndvcmtzcGFjZS5hdHRyQ3JlYXRpb25UaW1lc3RhbXA7XG4gICAgdGhpcy5lbmRwb2ludCA9IHRoaXMud29ya3NwYWNlLmF0dHJFbmRwb2ludDtcbiAgICB0aGlzLmdyYWZhbmFWZXJzaW9uID0gdGhpcy53b3Jrc3BhY2UuYXR0ckdyYWZhbmFWZXJzaW9uO1xuICAgIHRoaXMuaWQgPSB0aGlzLndvcmtzcGFjZS5hdHRySWQ7XG4gICAgdGhpcy5tb2RpZmljYXRpb25UaW1lc3RhbXAgPSB0aGlzLndvcmtzcGFjZS5hdHRyTW9kaWZpY2F0aW9uVGltZXN0YW1wO1xuICAgIHRoaXMuc2FtbENvbmZpZ3VyYXRpb25TdGF0dXMgPSB0aGlzLndvcmtzcGFjZVxuICAgICAgLmF0dHJTYW1sQ29uZmlndXJhdGlvblN0YXR1cyBhcyBTYW1sQ29uZmlndXJhdGlvblN0YXR1c2VzO1xuICAgIHRoaXMuc3NvQ2xpZW50SWQgPSB0aGlzLndvcmtzcGFjZS5hdHRyU3NvQ2xpZW50SWQ7XG4gICAgdGhpcy5zdGF0dXMgPSB0aGlzLndvcmtzcGFjZS5hdHRyU3RhdHVzIGFzIFN0YXR1cztcbiAgfVxufVxuIl19
|
|
683
|
+
Workspace[_a] = { fqn: "@robhan-cdk-lib/aws_grafana.Workspace", version: "0.0.3" };
|
|
684
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQU1BLHlEQUEwRTtBQUUxRSwyQ0FBdUM7QUFFdkM7Ozs7O0dBS0c7QUFDSCxJQUFZLGlCQVVYO0FBVkQsV0FBWSxpQkFBaUI7SUFDM0I7O09BRUc7SUFDSCx3REFBbUMsQ0FBQTtJQUVuQzs7T0FFRztJQUNILGtEQUE2QixDQUFBO0FBQy9CLENBQUMsRUFWVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQVU1QjtBQUVEOzs7OztHQUtHO0FBQ0gsSUFBWSx1QkFVWDtBQVZELFdBQVksdUJBQXVCO0lBQ2pDOztPQUVHO0lBQ0gsOENBQW1CLENBQUE7SUFFbkI7O09BRUc7SUFDSCx3Q0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQVZXLHVCQUF1Qix1Q0FBdkIsdUJBQXVCLFFBVWxDO0FBMkJEOzs7R0FHRztBQUNILElBQVksd0JBS1g7QUFMRCxXQUFZLHdCQUF3QjtJQUNsQzs7T0FFRztJQUNILHVDQUFXLENBQUE7QUFDYixDQUFDLEVBTFcsd0JBQXdCLHdDQUF4Qix3QkFBd0IsUUFLbkM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsSUFBWSxlQVVYO0FBVkQsV0FBWSxlQUFlO0lBQ3pCOztPQUVHO0lBQ0gsd0RBQXFDLENBQUE7SUFFckM7O09BRUc7SUFDSCxzREFBbUMsQ0FBQTtBQUNyQyxDQUFDLEVBVlcsZUFBZSwrQkFBZixlQUFlLFFBVTFCO0FBb1NEOztHQUVHO0FBQ0gsSUFBWSx5QkFVWDtBQVZELFdBQVkseUJBQXlCO0lBQ25DOztPQUVHO0lBQ0gsc0RBQXlCLENBQUE7SUFFekI7O09BRUc7SUFDSCw4REFBaUMsQ0FBQTtBQUNuQyxDQUFDLEVBVlcseUJBQXlCLHlDQUF6Qix5QkFBeUIsUUFVcEM7QUFFRDs7R0FFRztBQUNILElBQVksTUF1RFg7QUF2REQsV0FBWSxNQUFNO0lBQ2hCOztPQUVHO0lBQ0gs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QUFTLENBQUMsZUFBZSxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFvQixDQUFDO0lBQ3BELENBQUM7O0FBbHlCSCw4QkFteUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSVByZWZpeExpc3QsXG4gIElTZWN1cml0eUdyb3VwLFxuICBJU3VibmV0LFxuICBJVnBjRW5kcG9pbnQsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgQ2ZuV29ya3NwYWNlLCBDZm5Xb3Jrc3BhY2VQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ncmFmYW5hJztcbmltcG9ydCB7IElSb2xlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgd29ya3NwYWNlIGNhbiBhY2Nlc3MgQVdTIHJlc291cmNlcyBpbiB0aGlzIEFXUyBhY2NvdW50IG9ubHksIG9yIHdoZXRoZXIgaXRcbiAqIGNhbiBhbHNvIGFjY2VzcyBBV1MgcmVzb3VyY2VzIGluIG90aGVyIGFjY291bnRzIGluIHRoZSBzYW1lIG9yZ2FuaXphdGlvbi4gSWYgdGhpcyBpc1xuICogT1JHQU5JWkFUSU9OLCB0aGUgT3JnYW5pemF0aW9uYWxVbml0cyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoaWNoIG9yZ2FuaXphdGlvbmFsIHVuaXRzIHRoZVxuICogd29ya3NwYWNlIGNhbiBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBlbnVtIEFjY291bnRBY2Nlc3NUeXBlIHtcbiAgLyoqXG4gICAqIEFjY2VzcyBpcyBsaW1pdGVkIHRvIHRoZSBjdXJyZW50IEFXUyBhY2NvdW50IG9ubHkuXG4gICAqL1xuICBDVVJSRU5UX0FDQ09VTlQgPSAnQ1VSUkVOVF9BQ0NPVU5UJyxcblxuICAvKipcbiAgICogQWNjZXNzIGlzIGV4dGVuZGVkIHRvIHRoZSBlbnRpcmUgQVdTIG9yZ2FuaXphdGlvbi5cbiAgICovXG4gIE9SR0FOSVpBVElPTiA9ICdPUkdBTklaQVRJT04nLFxufVxuXG4vKipcbiAqIFNwZWNpZmllcyB3aGV0aGVyIHRoaXMgd29ya3NwYWNlIHVzZXMgU0FNTCAyLjAsIEFXUyBJQU0gSWRlbnRpdHkgQ2VudGVyLCBvciBib3RoIHRvIGF1dGhlbnRpY2F0ZVxuICogdXNlcnMgZm9yIHVzaW5nIHRoZSBHcmFmYW5hIGNvbnNvbGUgd2l0aGluIGEgd29ya3NwYWNlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dyYWZhbmEvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlV29ya3NwYWNlLmh0bWxcbiAqL1xuZXhwb3J0IGVudW0gQXV0aGVudGljYXRpb25Qcm92aWRlcnMge1xuICAvKipcbiAgICogQVdTIFNpbmdsZSBTaWduLU9uIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyLlxuICAgKi9cbiAgQVdTX1NTTyA9ICdBV1NfU1NPJyxcblxuICAvKipcbiAgICogU2VjdXJpdHkgQXNzZXJ0aW9uIE1hcmt1cCBMYW5ndWFnZSAoU0FNTCkgYXV0aGVudGljYXRpb24gcHJvdmlkZXIuXG4gICAqL1xuICBTQU1MID0gJ1NBTUwnLFxufVxuXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBuZXR3b3JrIGFjY2VzcyB0byB5b3VyIHdvcmtzcGFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrQWNjZXNzQ29udHJvbCB7XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBwcmVmaXggbGlzdCBJRHMuIEEgcHJlZml4IGxpc3QgaXMgYSBsaXN0IG9mIENJRFIgcmFuZ2VzIG9mIElQIGFkZHJlc3Nlcy4gVGhlIElQXG4gICAqIGFkZHJlc3NlcyBzcGVjaWZpZWQgYXJlIGFsbG93ZWQgdG8gYWNjZXNzIHlvdXIgd29ya3NwYWNlLiBJZiB0aGUgbGlzdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlXG4gICAqIGNvbmZpZ3VyYXRpb24gKHBhc3NlZCBhbiBlbXB0eSBhcnJheSkgdGhlbiBubyBJUCBhZGRyZXNzZXMgYXJlIGFsbG93ZWQgdG8gYWNjZXNzIHRoZVxuICAgKiB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIE1heGltdW0gb2YgNSBwcmVmaXggbGlzdHMgYWxsb3dlZC5cbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeExpc3RzPzogSVByZWZpeExpc3RbXTtcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgQW1hem9uIFZQQyBlbmRwb2ludCBJRHMgZm9yIHRoZSB3b3Jrc3BhY2UuIFlvdSBjYW4gY3JlYXRlIFZQQyBlbmRwb2ludHMgdG8geW91clxuICAgKiBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHdvcmtzcGFjZSBmb3IgYWNjZXNzIGZyb20gd2l0aGluIGEgVlBDLiBJZiBhIE5ldHdvcmtBY2Nlc3NDb25maWd1cmF0aW9uXG4gICAqIGlzIHNwZWNpZmllZCB0aGVuIG9ubHkgVlBDIGVuZHBvaW50cyBzcGVjaWZpZWQgaGVyZSBhcmUgYWxsb3dlZCB0byBhY2Nlc3MgdGhlIHdvcmtzcGFjZS4gSWZcbiAgICogeW91IHBhc3MgaW4gYW4gZW1wdHkgYXJyYXkgb2Ygc3RyaW5ncywgdGhlbiBubyBWUENzIGFyZSBhbGxvd2VkIHRvIGFjY2VzcyB0aGUgd29ya3NwYWNlLlxuICAgKlxuICAgKiBNYXhpbXVtIG9mIDUgVlBDIGVuZHBvaW50cyBhbGxvd2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjRW5kcG9pbnRzPzogSVZwY0VuZHBvaW50W107XG59XG5cbi8qKlxuICogVGhlIEFXUyBub3RpZmljYXRpb24gY2hhbm5lbHMgdGhhdCBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGNhbiBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBJQU0gcm9sZXMgYW5kXG4gKiBwZXJtaXNzaW9ucyBmb3IsIHRvIGFsbG93IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgdG8gdXNlIHRoZXNlIGNoYW5uZWxzLlxuICovXG5leHBvcnQgZW51bSBOb3RpZmljYXRpb25EZXN0aW5hdGlvbnMge1xuICAvKipcbiAgICogQW1hem9uIFNpbXBsZSBOb3RpZmljYXRpb24gU2VydmljZSAoU05TKSBhcyBub3RpZmljYXRpb24gZGVzdGluYXRpb24uXG4gICAqL1xuICBTTlMgPSAnU05TJyxcbn1cblxuLyoqXG4gKiBJZiB0aGlzIGlzIFNFUlZJQ0VfTUFOQUdFRCwgYW5kIHRoZSB3b3JrcGxhY2Ugd2FzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgQW1hem9uIE1hbmFnZWQgR3JhZmFuYVxuICogY29uc29sZSwgdGhlbiBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyB0aGUgSUFNIHJvbGVzIGFuZCBwcm92aXNpb25zIHRoZVxuICogcGVybWlzc2lvbnMgdGhhdCB0aGUgd29ya3NwYWNlIG5lZWRzIHRvIHVzZSBBV1MgZGF0YSBzb3VyY2VzIGFuZCBub3RpZmljYXRpb24gY2hhbm5lbHMuXG4gKlxuICogSWYgdGhpcyBpcyBDVVNUT01FUl9NQU5BR0VELCB5b3UgbXVzdCBtYW5hZ2UgdGhvc2Ugcm9sZXMgYW5kIHBlcm1pc3Npb25zIHlvdXJzZWxmLlxuXG4gKiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhIHdvcmtzcGFjZSBpbiBhIG1lbWJlciBhY2NvdW50IG9mIGFuIG9yZ2FuaXphdGlvbiBhbmQgdGhhdCBhY2NvdW50IGlzXG4gKiBub3QgYSBkZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciBhY2NvdW50LCBhbmQgeW91IHdhbnQgdGhlIHdvcmtzcGFjZSB0byBhY2Nlc3MgZGF0YSBzb3VyY2VzIGluXG4gKiBvdGhlciBBV1MgYWNjb3VudHMgaW4gdGhlIG9yZ2FuaXphdGlvbiwgdGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBzZXQgdG8gQ1VTVE9NRVJfTUFOQUdFRC5cbiAqL1xuZXhwb3J0IGVudW0gUGVybWlzc2lvblR5cGVzIHtcbiAgLyoqXG4gICAqIEN1c3RvbWVyLW1hbmFnZWQgcGVybWlzc2lvbnMgd2hlcmUgeW91IG1hbmFnZSB1c2VyIGFjY2VzcyB0byBHcmFmYW5hLlxuICAgKi9cbiAgQ1VTVE9NRVJfTUFOQUdFRCA9ICdDVVNUT01FUl9NQU5BR0VEJyxcblxuICAvKipcbiAgICogU2VydmljZS1tYW5hZ2VkIHBlcm1pc3Npb25zIHdoZXJlIEFXUyBtYW5hZ2VzIHVzZXIgYWNjZXNzIHRvIEdyYWZhbmEuXG4gICAqL1xuICBTRVJWSUNFX01BTkFHRUQgPSAnU0VSVklDRV9NQU5BR0VEJyxcbn1cblxuLyoqXG4gKiBBIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMgd2hpY2ggYXR0cmlidXRlcyBpbiB0aGUgSWRQIGFzc2VydGlvbiBhcmUgdG8gYmUgdXNlZCB0byBkZWZpbmVcbiAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VycyBhdXRoZW50aWNhdGVkIGJ5IHRoZSBJZFAgdG8gdXNlIHRoZSB3b3Jrc3BhY2UuXG4gKlxuICogRWFjaCBhdHRyaWJ1dGUgbXVzdCBiZSBhIHN0cmluZyB3aXRoIGxlbmd0aCBiZXR3ZWVuIDEgYW5kIDI1NiBjaGFyYWN0ZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNhbWxBc3NlcnRpb25BdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgd2l0aGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB1c2UgYXMgdGhlIGVtYWlsIG5hbWVzIGZvciBTQU1MIHVzZXJzLlxuICAgKlxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU2IGNoYXJhY3RlcnMgbG9uZy5cbiAgICovXG4gIHJlYWRvbmx5IGVtYWlsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHdpdGhpbiB0aGUgU0FNTCBhc3NlcnRpb24gdG8gdXNlIGFzIHRoZSB1c2VyIGZ1bGwgXCJmcmllbmRseVwiIG5hbWVzXG4gICAqIGZvciB1c2VyIGdyb3Vwcy5cbiAgICpcbiAgICogTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NiBjaGFyYWN0ZXJzIGxvbmcuXG4gICAqL1xuICByZWFkb25seSBncm91cHM6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgd2l0aGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB1c2UgYXMgdGhlIGxvZ2luIG5hbWVzIGZvciBTQU1MIHVzZXJzLlxuICAgKlxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU2IGNoYXJhY3RlcnMgbG9uZy5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ2luOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHdpdGhpbiB0aGUgU0FNTCBhc3NlcnRpb24gdG8gdXNlIGFzIHRoZSB1c2VyIGZ1bGwgXCJmcmllbmRseVwiIG5hbWVzXG4gICAqIGZvciBTQU1MIHVzZXJzLlxuICAgKlxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU2IGNoYXJhY3RlcnMgbG9uZy5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgd2l0aGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB1c2UgYXMgdGhlIHVzZXIgZnVsbCBcImZyaWVuZGx5XCIgbmFtZXNcbiAgICogZm9yIHRoZSB1c2Vycycgb3JnYW5pemF0aW9ucy5cbiAgICpcbiAgICogTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NiBjaGFyYWN0ZXJzIGxvbmcuXG4gICAqL1xuICByZWFkb25seSBvcmc6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgd2l0aGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB1c2UgYXMgdGhlIHVzZXIgcm9sZXMuXG4gICAqXG4gICAqIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTYgY2hhcmFjdGVycyBsb25nLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGlkZW50aXR5IHByb3ZpZGVyIChJZFApIG1ldGFkYXRhIHVzZWQgdG8gaW50ZWdyYXRlIHRoZSBpZGVudGl0eVxuICogcHJvdmlkZXIgd2l0aCB0aGlzIHdvcmtzcGFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYW1sSWRwTWV0YWRhdGEge1xuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgbG9jYXRpb24gY29udGFpbmluZyB0aGUgSWRQIG1ldGFkYXRhLlxuICAgKlxuICAgKiBNdXN0IGJlIGEgc3RyaW5nIHdpdGggbGVuZ3RoIGJldHdlZW4gMSBhbmQgMjA0OCBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVsbCBJZFAgbWV0YWRhdGEsIGluIFhNTCBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSB4bWw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhcnJheXMgdGhhdCBtYXAgZ3JvdXAgbmFtZXMgaW4gdGhlIFNBTUwgYXNzZXJ0aW9uIHRvIHRoZSBHcmFmYW5hIEFkbWluXG4gKiBhbmQgRWRpdG9yIHJvbGVzIGluIHRoZSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2FtbFJvbGVWYWx1ZXMge1xuICAvKipcbiAgICogQSBsaXN0IG9mIGdyb3VwcyBmcm9tIHRoZSBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGUgdG8gZ3JhbnQgdGhlIEdyYWZhbmEgQWRtaW4gcm9sZSB0by5cbiAgICpcbiAgICogTWF4aW11bSBvZiAyNTYgZWxlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBhZG1pbj86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ3JvdXBzIGZyb20gdGhlIFNBTUwgYXNzZXJ0aW9uIGF0dHJpYnV0ZSB0byBncmFudCB0aGUgR3JhZmFuYSBFZGl0b3Igcm9sZSB0by5cbiAgICpcbiAgICogTWF4aW11bSBvZiAyNTYgZWxlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3I/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgd29ya3NwYWNlIHVzZXMgU0FNTCwgdXNlIHRoaXMgc3RydWN0dXJlIHRvIG1hcCBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGVzIHRvIHdvcmtzcGFjZVxuICogdXNlciBpbmZvcm1hdGlvbiBhbmQgZGVmaW5lIHdoaWNoIGdyb3VwcyBpbiB0aGUgYXNzZXJ0aW9uIGF0dHJpYnV0ZSBhcmUgdG8gaGF2ZSB0aGUgQWRtaW4gYW5kXG4gKiBFZGl0b3Igcm9sZXMgaW4gdGhlIHdvcmtzcGFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYW1sQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBMaXN0cyB3aGljaCBvcmdhbml6YXRpb25zIGRlZmluZWQgaW4gdGhlIFNBTUwgYXNzZXJ0aW9uIGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQW1hem9uIE1hbmFnZWRcbiAgICogR3JhZmFuYSB3b3Jrc3BhY2UuIElmIHRoaXMgaXMgZW1wdHksIGFsbCBvcmdhbml6YXRpb25zIGluIHRoZSBhc3NlcnRpb24gYXR0cmlidXRlIGhhdmUgYWNjZXNzLlxuICAgKlxuICAgKiBNdXN0IGhhdmUgYmV0d2VlbiAxIGFuZCAyNTYgZWxlbWVudHMuXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkT3JnYW5pemF0aW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMgd2hpY2ggYXR0cmlidXRlcyBpbiB0aGUgU0FNTCBhc3NlcnRpb24gYXJlIHRvIGJlIHVzZWQgdG8gZGVmaW5lXG4gICAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VycyBhdXRoZW50aWNhdGVkIGJ5IHRoYXQgSWRQIHRvIHVzZSB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXJ0aW9uQXRycmlidXRlcz86IFNhbWxBc3NlcnRpb25BdHRyaWJ1dGVzO1xuXG4gIC8qKlxuICAgKiBBIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBpZGVudGl0eSBwcm92aWRlciAoSWRQKSBtZXRhZGF0YSB1c2VkIHRvIGludGVncmF0ZSB0aGUgaWRlbnRpdHlcbiAgICogcHJvdmlkZXIgd2l0aCB0aGlzIHdvcmtzcGFjZS5cbiAgICpcbiAgICogUmVxdWlyZWQgZmllbGQgZm9yIFNBTUwgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGlkcE1ldGFkYXRhOiBTYW1sSWRwTWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEhvdyBsb25nIGEgc2lnbi1vbiBzZXNzaW9uIGJ5IGEgU0FNTCB1c2VyIGlzIHZhbGlkLCBiZWZvcmUgdGhlIHVzZXIgaGFzIHRvIHNpZ24gb24gYWdhaW4uXG4gICAqXG4gICAqIE11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIuXG4gICAqL1xuICByZWFkb25seSBsb2dpblZhbGlkaXR5RHVyYXRpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEEgc3RydWN0dXJlIGNvbnRhaW5pbmcgYXJyYXlzIHRoYXQgbWFwIGdyb3VwIG5hbWVzIGluIHRoZSBTQU1MIGFzc2VydGlvbiB0byB0aGUgR3JhZmFuYSBBZG1pblxuICAgKiBhbmQgRWRpdG9yIHJvbGVzIGluIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICByZWFkb25seSByb2xlVmFsdWVzPzogU2FtbFJvbGVWYWx1ZXM7XG59XG5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIGFuIEFtYXpvbiBWUEMgdGhhdCBjb250YWlucyBkYXRhIHNvdXJjZXMgZm9yIHlvdXIgR3JhZmFuYVxuICogd29ya3NwYWNlIHRvIGNvbm5lY3QgdG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBBbWF6b24gRUMyIHNlY3VyaXR5IGdyb3VwcyBhdHRhY2hlZCB0byB0aGUgQW1hem9uIFZQQyBmb3IgeW91ciBHcmFmYW5hXG4gICAqIHdvcmtzcGFjZSB0byBjb25uZWN0LiBEdXBsaWNhdGVzIG5vdCBhbGxvd2VkLlxuICAgKlxuICAgKiBBcnJheSBNZW1iZXJzOiBNaW5pbXVtIG51bWJlciBvZiAxIGl0ZW1zLiBNYXhpbXVtIG51bWJlciBvZiA1IGl0ZW1zLlxuICAgKlxuICAgKiBSZXF1aXJlZCBmb3IgVlBDIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwczogSVNlY3VyaXR5R3JvdXBbXTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgQW1hem9uIEVDMiBzdWJuZXRzIGNyZWF0ZWQgaW4gdGhlIEFtYXpvbiBWUEMgZm9yIHlvdXIgR3JhZmFuYSB3b3Jrc3BhY2UgdG9cbiAgICogY29ubmVjdC4gRHVwbGljYXRlcyBub3QgYWxsb3dlZC5cbiAgICpcbiAgICogQXJyYXkgTWVtYmVyczogTWluaW11bSBudW1iZXIgb2YgMiBpdGVtcy4gTWF4aW11bSBudW1iZXIgb2YgNiBpdGVtcy5cbiAgICpcbiAgICogUmVxdWlyZWQgZm9yIFZQQyBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0czogSVN1Ym5ldFtdO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGFuIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgd29ya3NwYWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZVByb3BzIHtcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSB3b3Jrc3BhY2UgY2FuIGFjY2VzcyBBV1MgcmVzb3VyY2VzIGluIHRoaXMgQVdTIGFjY291bnQgb25seSwgb3Igd2hldGhlclxuICAgKiBpdCBjYW4gYWxzbyBhY2Nlc3MgQVdTIHJlc291cmNlcyBpbiBvdGhlciBhY2NvdW50cyBpbiB0aGUgc2FtZSBvcmdhbml6YXRpb24uIElmIHRoaXMgaXNcbiAgICogT1JHQU5JWkFUSU9OLCB0aGUgT3JnYW5pemF0aW9uYWxVbml0cyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoaWNoIG9yZ2FuaXphdGlvbmFsIHVuaXRzIHRoZVxuICAgKiB3b3Jrc3BhY2UgY2FuIGFjY2Vzcy5cbiAgICpcbiAgICogUmVxdWlyZWQgZmllbGQuXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50QWNjZXNzVHlwZTogQWNjb3VudEFjY2Vzc1R5cGU7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoaXMgd29ya3NwYWNlIHVzZXMgU0FNTCAyLjAsIEFXUyBJQU0gSWRlbnRpdHkgQ2VudGVyLCBvciBib3RoIHRvXG4gICAqIGF1dGhlbnRpY2F0ZSB1c2VycyBmb3IgdXNpbmcgdGhlIEdyYWZhbmEgY29uc29sZSB3aXRoaW4gYSB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIFJlcXVpcmVkIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aGVudGljYXRpb25Qcm92aWRlcnM6IEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzW107XG5cbiAgLyoqXG4gICAqIEEgdW5pcXVlLCBjYXNlLXNlbnNpdGl2ZSwgdXNlci1wcm92aWRlZCBpZGVudGlmaWVyIHRvIGVuc3VyZSB0aGUgaWRlbXBvdGVuY3kgb2YgdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIE11c3QgYmUgMS02NCBjaGFyYWN0ZXJzIGxvbmcgYW5kIGNvbnRhaW4gb25seSBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycy5cbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudFRva2VuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIEFXUyBkYXRhIHNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCB0byBoYXZlIElBTSByb2xlcyBhbmQgcGVybWlzc2lvbnNcbiAgICogY3JlYXRlZCB0byBhbGxvdyBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIHRvIHJlYWQgZGF0YSBmcm9tIHRoZXNlIHNvdXJjZXMuXG4gICAqIFRoaXMgbGlzdCBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgd29ya3NwYWNlIHdhcyBjcmVhdGVkIHRocm91Z2ggdGhlIEFXUyBjb25zb2xlLCBhbmQgdGhlXG4gICAqIHBlcm1pc3Npb25UeXBlIGlzIFNFUlZJQ0VfTUFOQUdFRC5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFTb3VyY2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB1c2VyLWRlZmluZWQgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmtzcGFjZS5cbiAgICpcbiAgICogTWF4aW11bSBsZW5ndGggb2YgMjA0OCBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBHcmFmYW5hIHRvIHN1cHBvcnQgaW4gdGhlIHdvcmtzcGFjZS4gRGVmYXVsdHMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uXG4gICAqIG9uIGNyZWF0ZSAoZm9yIGV4YW1wbGUsIDkuNCksIG9yIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHdvcmtzcGFjZSBvbiB1cGRhdGUuXG4gICAqIENhbiBvbmx5IGJlIHVzZWQgdG8gdXBncmFkZSAoZm9yIGV4YW1wbGUsIGZyb20gOC40IHRvIDkuNCksIG5vdCBkb3duZ3JhZGUgKGZvciBleGFtcGxlLCBmcm9tXG4gICAqIDkuNCB0byA4LjQpLlxuICAgKlxuICAgKiBNdXN0IGJlIDEtMjU1IGNoYXJhY3RlcnMgbG9uZy5cbiAgICovXG4gIHJlYWRvbmx5IGdyYWZhbmFWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgd29ya3NwYWNlLlxuICAgKlxuICAgKiBNdXN0IGJlIDEtMjU1IGNoYXJhY3RlcnMgbG9uZyBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBoeXBoZW5zLCBkb3RzLFxuICAgKiB1bmRlcnNjb3JlcywgYW5kIHRpbGRlcy5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBuZXR3b3JrIGFjY2VzcyB0byB5b3VyIHdvcmtzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcmtBY2Nlc3NDb250cm9sPzogTmV0d29ya0FjY2Vzc0NvbnRyb2w7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1Mgbm90aWZpY2F0aW9uIGNoYW5uZWxzIHRoYXQgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSBjYW4gYXV0b21hdGljYWxseSBjcmVhdGUgSUFNIHJvbGVzXG4gICAqIGFuZCBwZXJtaXNzaW9ucyBmb3IsIHRvIGFsbG93IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgdG8gdXNlIHRoZXNlIGNoYW5uZWxzLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uRGVzdGluYXRpb25zPzogTm90aWZpY2F0aW9uRGVzdGluYXRpb25zW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgb3JnYW5pemF0aW9uYWwgdW5pdHMgdGhhdCB0aGlzIHdvcmtzcGFjZSBpcyBhbGxvd2VkIHRvIHVzZSBkYXRhIHNvdXJjZXMgZnJvbSwgaWZcbiAgICogdGhpcyB3b3Jrc3BhY2UgaXMgaW4gYW4gYWNjb3VudCB0aGF0IGlzIHBhcnQgb2YgYW4gb3JnYW5pemF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uYWxVbml0cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBJQU0gcm9sZSB0byB1c2UgZm9yIHRoZSBvcmdhbml6YXRpb24uXG4gICAqIE1heGltdW0gbGVuZ3RoIG9mIDIwNDggY2hhcmFjdGVycy5cbiAgICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvblJvbGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiB0aGlzIGlzIFNFUlZJQ0VfTUFOQUdFRCwgYW5kIHRoZSB3b3JrcGxhY2Ugd2FzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgQW1hem9uIE1hbmFnZWQgR3JhZmFuYVxuICAgKiBjb25zb2xlLCB0aGVuIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgYXV0b21hdGljYWxseSBjcmVhdGVzIHRoZSBJQU0gcm9sZXMgYW5kIHByb3Zpc2lvbnMgdGhlXG4gICAqIHBlcm1pc3Npb25zIHRoYXQgdGhlIHdvcmtzcGFjZSBuZWVkcyB0byB1c2UgQVdTIGRhdGEgc291cmNlcyBhbmQgbm90aWZpY2F0aW9uIGNoYW5uZWxzLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIENVU1RPTUVSX01BTkFHRUQsIHlvdSBtdXN0IG1hbmFnZSB0aG9zZSByb2xlcyBhbmQgcGVybWlzc2lvbnMgeW91cnNlbGYuXG4gICAqXG4gICAqIElmIHlvdSBhcmUgd29ya2luZyB3aXRoIGEgd29ya3NwYWNlIGluIGEgbWVtYmVyIGFjY291bnQgb2YgYW4gb3JnYW5pemF0aW9uIGFuZCB0aGF0IGFjY291bnQgaXNcbiAgICogbm90IGEgZGVsZWdhdGVkIGFkbWluaXN0cmF0b3IgYWNjb3VudCwgYW5kIHlvdSB3YW50IHRoZSB3b3Jrc3BhY2UgdG8gYWNjZXNzIGRhdGEgc291cmNlcyBpblxuICAgKiBvdGhlciBBV1MgYWNjb3VudHMgaW4gdGhlIG9yZ2FuaXphdGlvbiwgdGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBzZXQgdG8gQ1VTVE9NRVJfTUFOQUdFRC5cbiAgICpcbiAgICogUmVxdWlyZWQgZmllbGQuXG4gICAqL1xuICByZWFkb25seSBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGVzO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHBsdWdpbiBhZG1pbmlzdHJhdGlvbiBpcyBlbmFibGVkIGluIHRoZSB3b3Jrc3BhY2UuIFNldHRpbmcgdG8gdHJ1ZSBhbGxvd3Mgd29ya3NwYWNlXG4gICAqIGFkbWlucyB0byBpbnN0YWxsLCB1bmluc3RhbGwsIGFuZCB1cGRhdGUgcGx1Z2lucyBmcm9tIHdpdGhpbiB0aGUgR3JhZmFuYSB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHdvcmtzcGFjZXMgdGhhdCBzdXBwb3J0IEdyYWZhbmEgdmVyc2lvbiA5IG9yIG5ld2VyLlxuICAgKlxuICAgKiBEZWZhdWx0OiBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luQWRtaW5FbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgZ3JhbnRzIHBlcm1pc3Npb25zIHRvIHRoZSBBV1MgcmVzb3VyY2VzIHRoYXQgdGhlIHdvcmtzcGFjZSB3aWxsIHZpZXcgZGF0YVxuICAgKiBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZT86IElSb2xlO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgd29ya3NwYWNlIHVzZXMgU0FNTCwgdXNlIHRoaXMgc3RydWN0dXJlIHRvIG1hcCBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGVzIHRvIHdvcmtzcGFjZVxuICAgKiB1c2VyIGluZm9ybWF0aW9uIGFuZCBkZWZpbmUgd2hpY2ggZ3JvdXBzIGluIHRoZSBhc3NlcnRpb24gYXR0cmlidXRlIGFyZSB0byBoYXZlIHRoZSBBZG1pbiBhbmRcbiAgICogRWRpdG9yIHJvbGVzIGluIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICByZWFkb25seSBzYW1sQ29uZmlndXJhdGlvbj86IFNhbWxDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQVdTIENsb3VkRm9ybWF0aW9uIHN0YWNrIHNldCB0aGF0IGlzIHVzZWQgdG8gZ2VuZXJhdGUgSUFNIHJvbGVzIHRvIGJlIHVzZWQgZm9yXG4gICAqIHRoaXMgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tTZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgYW4gQW1hem9uIFZQQyB0aGF0IGNvbnRhaW5zIGRhdGEgc291cmNlcyBmb3IgeW91ciBHcmFmYW5hXG4gICAqIHdvcmtzcGFjZSB0byBjb25uZWN0IHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjQ29uZmlndXJhdGlvbj86IFZwY0NvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogU3RhdHVzIG9mIFNBTUwgY29uZmlndXJhdGlvbiBmb3IgYSBHcmFmYW5hIHdvcmtzcGFjZS5cbiAqL1xuZXhwb3J0IGVudW0gU2FtbENvbmZpZ3VyYXRpb25TdGF0dXNlcyB7XG4gIC8qKlxuICAgKiBTQU1MIGlzIGNvbmZpZ3VyZWQgZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBDT05GSUdVUkVEID0gJ0NPTkZJR1VSRUQnLFxuXG4gIC8qKlxuICAgKiBTQU1MIGlzIG5vdCBjb25maWd1cmVkIGZvciB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgTk9UX0NPTkZJR1VSRUQgPSAnTk9UX0NPTkZJR1VSRUQnLFxufVxuXG4vKipcbiAqIFN0YXR1cyBvZiBhIEdyYWZhbmEgd29ya3NwYWNlLlxuICovXG5leHBvcnQgZW51bSBTdGF0dXMge1xuICAvKipcbiAgICogV29ya3NwYWNlIGlzIGFjdGl2ZSBhbmQgcmVhZHkgdG8gdXNlLlxuICAgKi9cbiAgQUNUSVZFID0gJ0FDVElWRScsXG5cbiAgLyoqXG4gICAqIFdvcmtzcGFjZSBpcyBiZWluZyBjcmVhdGVkLlxuICAgKi9cbiAgQ1JFQVRJTkcgPSAnQ1JFQVRJTkcnLFxuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgaXMgYmVpbmcgZGVsZXRlZC5cbiAgICovXG4gIERFTEVUSU5HID0gJ0RFTEVUSU5HJyxcblxuICAvKipcbiAgICogV29ya3NwYWNlIG9wZXJhdGlvbiBoYXMgZmFpbGVkLlxuICAgKi9cbiAgRkFJTEVEID0gJ0ZBSUxFRCcsXG5cbiAgLyoqXG4gICAqIFdvcmtzcGFjZSBpcyBiZWluZyB1cGRhdGVkLlxuICAgKi9cbiAgVVBEQVRJTkcgPSAnVVBEQVRJTkcnLFxuXG4gIC8qKlxuICAgKiBXb3Jrc3BhY2UgaXMgYmVpbmcgdXBncmFkZWQuXG4gICAqL1xuICBVUEdSQURJTkcgPSAnVVBHUkFESU5HJyxcblxuICAvKipcbiAgICogV29ya3NwYWNlIGRlbGV0aW9uIGhhcyBmYWlsZWQuXG4gICAqL1xuICBERUxFVElPTl9GQUlMRUQgPSAnREVMRVRJT05fRkFJTEVEJyxcblxuICAvKipcbiAgICogV29ya3NwYWNlIGNyZWF0aW9uIGhhcyBmYWlsZWQuXG4gICAqL1xuICBDUkVBVElPTl9GQUlMRUQgPSAnQ1JFQVRJT05fRkFJTEVEJyxcblxuICAvKipcbiAgICogV29ya3NwYWNlIHVwZGF0ZSBoYXMgZmFpbGVkLlxuICAgKi9cbiAgVVBEQVRFX0ZBSUxFRCA9ICdVUERBVEVfRkFJTEVEJyxcblxuICAvKipcbiAgICogV29ya3NwYWNlIHVwZ3JhZGUgaGFzIGZhaWxlZC5cbiAgICovXG4gIFVQR1JBREVfRkFJTEVEID0gJ1VQR1JBREVfRkFJTEVEJyxcblxuICAvKipcbiAgICogTGljZW5zZSByZW1vdmFsIGhhcyBmYWlsZWQuXG4gICAqL1xuICBMSUNFTlNFX1JFTU9WQUxfRkFJTEVEID0gJ0xJQ0VOU0VfUkVNT1ZBTF9GQUlMRUQnLFxufVxuXG4vKipcbiAqIFNwZWNpZmllcyBhIHdvcmtzcGFjZS4gSW4gYSB3b3Jrc3BhY2UsIHlvdSBjYW4gY3JlYXRlIEdyYWZhbmEgZGFzaGJvYXJkcyBhbmQgdmlzdWFsaXphdGlvbnMgdG9cbiAqIGFuYWx5emUgeW91ciBtZXRyaWNzLCBsb2dzLCBhbmQgdHJhY2VzLiBZb3UgZG9uJ3QgaGF2ZSB0byBidWlsZCwgcGFja2FnZSwgb3IgZGVwbG95IGFueSBoYXJkd2FyZVxuICogdG8gcnVuIHRoZSBHcmFmYW5hIHNlcnZlci5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtzcGFjZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGNsaWVudFRva2VuIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgY2xpZW50IHRva2VuIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gICAqXG4gICAqIFZhbGlkYXRpb24gcnVsZXM6XG4gICAqIC0gTXVzdCBiZSBhIHN0cmluZ1xuICAgKiAtIE11c3QgYmUgYmV0d2VlbiAxIGFuZCA2NCBjaGFyYWN0ZXJzIGxvbmdcbiAgICogLSBNdXN0IGNvbnRhaW4gb25seSBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVyc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVDbGllbnRUb2tlbih0b2tlbjogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodG9rZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gT3B0aW9uYWwgcHJvcGVydHkgY2FuIGJlIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcnMucHVzaCgnY2xpZW50VG9rZW4gbXVzdCBiZSBhIHN0cmluZycpO1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gTm8gbmVlZCB0byBjaGVjayBmdXJ0aGVyIGlmIG5vdCBhIHN0cmluZ1xuICAgIH1cblxuICAgIGNvbnN0IHJlZ2V4ID0gL15bIS1+XXsxLDY0fSQvO1xuICAgIGlmICghcmVnZXgudGVzdCh0b2tlbikpIHtcbiAgICAgIGlmICh0b2tlbi5sZW5ndGggPCAxIHx8IHRva2VuLmxlbmd0aCA+IDY0KSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdjbGllbnRUb2tlbiBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNjQgY2hhcmFjdGVycyBsb25nJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghL15bIS1+XSokLy50ZXN0KHRva2VuKSkge1xuICAgICAgICBlcnJvcnMucHVzaCgnY2xpZW50VG9rZW4gbXVzdCBjb250YWluIG9ubHkgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZGVzY3JpcHRpb24gcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiAtIFRoZSBkZXNjcmlwdGlvbiB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICAgKlxuICAgKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICAgKiAtIE11c3QgYmUgYSBzdHJpbmdcbiAgICogLSBNYXhpbXVtIGxlbmd0aCBvZiAyMDQ4IGNoYXJhY3RlcnNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBlcnJvcnM7IC8vIE9wdGlvbmFsIHByb3BlcnR5IGNhbiBiZSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRlc2NyaXB0aW9uICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JzLnB1c2goJ2Rlc2NyaXB0aW9uIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgIHJldHVybiBlcnJvcnM7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBpZiBub3QgYSBzdHJpbmdcbiAgICB9XG5cbiAgICBpZiAoZGVzY3JpcHRpb24ubGVuZ3RoID4gMjA0OCkge1xuICAgICAgZXJyb3JzLnB1c2goJ2Rlc2NyaXB0aW9uIGNhbm5vdCBleGNlZWQgMjA0OCBjaGFyYWN0ZXJzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGdyYWZhbmFWZXJzaW9uIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSBHcmFmYW5hIHZlcnNpb24gdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAgICpcbiAgICogVmFsaWRhdGlvbiBydWxlczpcbiAgICogLSBNdXN0IGJlIGEgc3RyaW5nXG4gICAqIC0gTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NSBjaGFyYWN0ZXJzIGxvbmdcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlR3JhZmFuYVZlcnNpb24odmVyc2lvbjogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXJyb3JzOyAvLyBPcHRpb25hbCBwcm9wZXJ0eSBjYW4gYmUgdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JzLnB1c2goJ2dyYWZhbmFWZXJzaW9uIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgIHJldHVybiBlcnJvcnM7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBpZiBub3QgYSBzdHJpbmdcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbi5sZW5ndGggPCAxKSB7XG4gICAgICBlcnJvcnMucHVzaCgnZ3JhZmFuYVZlcnNpb24gY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24ubGVuZ3RoID4gMjU1KSB7XG4gICAgICBlcnJvcnMucHVzaCgnZ3JhZmFuYVZlcnNpb24gY2Fubm90IGV4Y2VlZCAyNTUgY2hhcmFjdGVycycpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBuYW1lIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSB3b3Jrc3BhY2UgbmFtZSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICAgKlxuICAgKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICAgKiAtIE11c3QgYmUgYSBzdHJpbmdcbiAgICogLSBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU1IGNoYXJhY3RlcnMgbG9uZ1xuICAgKiAtIENhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIGRvdHMsIHVuZGVyc2NvcmVzLCBhbmQgdGlsZGVzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZU5hbWUobmFtZTogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXJyb3JzOyAvLyBPcHRpb25hbCBwcm9wZXJ0eSBjYW4gYmUgdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JzLnB1c2goJ25hbWUgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gTm8gbmVlZCB0byBjaGVjayBmdXJ0aGVyIGlmIG5vdCBhIHN0cmluZ1xuICAgIH1cblxuICAgIGNvbnN0IHJlZ2V4ID0gL15bYS16QS1aMC05XFwtLl9+XXsxLDI1NX0kLztcbiAgICBpZiAoIXJlZ2V4LnRlc3QobmFtZSkpIHtcbiAgICAgIGlmIChuYW1lLmxlbmd0aCA8IDEgfHwgbmFtZS5sZW5ndGggPiAyNTUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ25hbWUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NSBjaGFyYWN0ZXJzIGxvbmcnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEvXlthLXpBLVowLTlcXC0uX35dKiQvLnRlc3QobmFtZSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgJ25hbWUgY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVucywgZG90cywgdW5kZXJzY29yZXMsIGFuZCB0aWxkZXMnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBuZXR3b3JrQWNjZXNzQ29udHJvbCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIG5hYyAtIFRoZSBuZXR3b3JrIGFjY2VzcyBjb250cm9sIGNvbmZpZ3VyYXRpb24gdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAgICpcbiAgICogVmFsaWRhdGlvbiBydWxlczpcbiAgICogLSBNdXN0IGJlIGFuIG9iamVjdFxuICAgKiAtIHByZWZpeExpc3RzIChpZiBwcmVzZW50KSBtdXN0IGJlIGFuIGFycmF5IHdpdGggYXQgbW9zdCA1IGl0ZW1zXG4gICAqIC0gdnBjRW5kcG9pbnRzIChpZiBwcmVzZW50KSBtdXN0IGJlIGFuIGFycmF5IHdpdGggYXQgbW9zdCA1IGl0ZW1zXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZU5ldHdvcmtBY2Nlc3NDb250cm9sKG5hYzogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAobmFjID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBlcnJvcnM7IC8vIE9wdGlvbmFsIHByb3BlcnR5IGNhbiBiZSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAoIW5hYyB8fCB0eXBlb2YgbmFjICE9PSAnb2JqZWN0Jykge1xuICAgICAgZXJyb3JzLnB1c2goJ25ldHdvcmtBY2Nlc3NDb250cm9sIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGNvbnN0IG5ldHdvcmtBY2Nlc3NDb250cm9sID0gbmFjIGFzIE5ldHdvcmtBY2Nlc3NDb250cm9sO1xuXG4gICAgLy8gQ2hlY2sgcHJlZml4TGlzdHMgaWYgcHJlc2VudFxuICAgIGlmIChuZXR3b3JrQWNjZXNzQ29udHJvbC5wcmVmaXhMaXN0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkobmV0d29ya0FjY2Vzc0NvbnRyb2wucHJlZml4TGlzdHMpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdwcmVmaXhMaXN0cyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgICB9IGVsc2UgaWYgKG5ldHdvcmtBY2Nlc3NDb250cm9sLnByZWZpeExpc3RzLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ3ByZWZpeExpc3RzIGNhbiBoYXZlIGF0IG1vc3QgNSBpdGVtcycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIHZwY0VuZHBvaW50cyBpZiBwcmVzZW50XG4gICAgaWYgKG5ldHdvcmtBY2Nlc3NDb250cm9sLnZwY0VuZHBvaW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkobmV0d29ya0FjY2Vzc0NvbnRyb2wudnBjRW5kcG9pbnRzKSkge1xuICAgICAgICBlcnJvcnMucHVzaCgndnBjRW5kcG9pbnRzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgIH0gZWxzZSBpZiAobmV0d29ya0FjY2Vzc0NvbnRyb2wudnBjRW5kcG9pbnRzLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ3ZwY0VuZHBvaW50cyBjYW4gaGF2ZSBhdCBtb3N0IDUgaXRlbXMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgb3JnYW5pemF0aW9uUm9sZU5hbWUgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSByb2xlTmFtZSAtIFRoZSBvcmdhbml6YXRpb24gcm9sZSBuYW1lIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzIGlmIHZhbGlkYXRpb24gZmFpbHMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIHZhbGlkXG4gICAqXG4gICAqIFZhbGlkYXRpb24gcnVsZXM6XG4gICAqIC0gTXVzdCBiZSBhIHN0cmluZ1xuICAgKiAtIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAyMDQ4IGNoYXJhY3RlcnMgbG9uZ1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVPcmdhbml6YXRpb25Sb2xlTmFtZShyb2xlTmFtZTogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAocm9sZU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gT3B0aW9uYWwgcHJvcGVydHkgY2FuIGJlIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygcm9sZU5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcnMucHVzaCgnb3JnYW5pemF0aW9uUm9sZU5hbWUgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gTm8gbmVlZCB0byBjaGVjayBmdXJ0aGVyIGlmIG5vdCBhIHN0cmluZ1xuICAgIH1cblxuICAgIGlmIChyb2xlTmFtZS5sZW5ndGggPCAxKSB7XG4gICAgICBlcnJvcnMucHVzaCgnb3JnYW5pemF0aW9uUm9sZU5hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuXG4gICAgaWYgKHJvbGVOYW1lLmxlbmd0aCA+IDIwNDgpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdvcmdhbml6YXRpb25Sb2xlTmFtZSBjYW5ub3QgZXhjZWVkIDIwNDggY2hhcmFjdGVycycpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBAcGFyYW0gb2JqIC0gVGhlIFNBTUwgYXNzZXJ0aW9uIGF0dHJpYnV0ZXMgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAgICpcbiAgICogVmFsaWRhdGlvbiBydWxlczpcbiAgICogLSBNdXN0IGJlIGFuIG9iamVjdFxuICAgKiAtIEVhY2ggYXR0cmlidXRlIG11c3QgYmUgYSBzdHJpbmdcbiAgICogLSBFYWNoIGF0dHJpYnV0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU2IGNoYXJhY3RlcnMgbG9uZ1xuICAgKiAtIFZhbGlkIGF0dHJpYnV0ZSBrZXlzIGFyZTogJ2VtYWlsJywgJ2dyb3VwcycsICdsb2dpbicsICduYW1lJywgJ29yZycsICdyb2xlJ1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVTYW1sQXNzZXJ0aW9uQXR0cmlidXRlcyhvYmo6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBbJ0lucHV0IGlzIG5vdCBhbiBvYmplY3QnXTtcbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gb2JqIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gYXR0cmlidXRlcykge1xuICAgICAgY29uc3QgdmFsdWUgPSBhdHRyaWJ1dGVzW2tleV07XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTsgLy8gT3B0aW9uYWwgcHJvcGVydGllcyBjYW4gYmUgdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBQcm9wZXJ0eSAnJHtrZXl9JyBtdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYFByb3BlcnR5ICcke2tleX0nIGNhbm5vdCBiZSBlbXB0eWApO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAyNTYpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgYFByb3BlcnR5ICcke2tleX0nIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgMjU2IGNoYXJhY3RlcnNgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBTQU1MIElkUCBtZXRhZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIG9iaiAtIFRoZSBTQU1MIElkUCBtZXRhZGF0YSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICAgKlxuICAgKiBWYWxpZGF0aW9uIHJ1bGVzOlxuICAgKiAtIE11c3QgYmUgYW4gb2JqZWN0XG4gICAqIC0gdXJsIChpZiBwcmVzZW50KSBtdXN0IGJlIGEgc3RyaW5nIGJldHdlZW4gMSBhbmQgMjA0OCBjaGFyYWN0ZXJzIGxvbmdcbiAgICogLSB4bWwgKGlmIHByZXNlbnQpIG11c3QgYmUgYSBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlU2FtbElkcE1ldGFkYXRhKG9iajogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIFsnSW5wdXQgaXMgbm90IGFuIG9iamVjdCddO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGFkYXRhID0gb2JqIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgLy8gQ2hlY2sgdXJsIHByb3BlcnR5IGlmIHByZXNlbnRcbiAgICBpZiAobWV0YWRhdGEudXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgbWV0YWRhdGEudXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICBlcnJvcnMucHVzaChcIlByb3BlcnR5ICd1cmwnIG11c3QgYmUgYSBzdHJpbmdcIik7XG4gICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLnVybC5sZW5ndGggPCAxKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFwiUHJvcGVydHkgJ3VybCcgY2Fubm90IGJlIGVtcHR5XCIpO1xuICAgICAgfSBlbHNlIGlmIChtZXRhZGF0YS51cmwubGVuZ3RoID4gMjA0OCkge1xuICAgICAgICBlcnJvcnMucHVzaChcIlByb3BlcnR5ICd1cmwnIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgMjA0OCBjaGFyYWN0ZXJzXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIHhtbCBwcm9wZXJ0eSBpZiBwcmVzZW50XG4gICAgaWYgKG1ldGFkYXRhLnhtbCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBtZXRhZGF0YS54bWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcnMucHVzaChcIlByb3BlcnR5ICd4bWwnIG11c3QgYmUgYSBzdHJpbmdcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIFNBTUwgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZyAtIFRoZSBTQU1MIGNvbmZpZ3VyYXRpb24gdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAgICpcbiAgICogVmFsaWRhdGlvbiBydWxlczpcbiAgICogLSBNdXN0IGJlIGFuIG9iamVjdFxuICAgKiAtIGlkcE1ldGFkYXRhIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIHZhbGlkXG4gICAqIC0gYXNzZXJ0aW9uQXRycmlidXRlcyAoaWYgcHJlc2VudCkgbXVzdCBiZSB2YWxpZFxuICAgKiAtIGFsbG93ZWRPcmdhbml6YXRpb25zIChpZiBwcmVzZW50KSBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3Mgd2l0aCAxLTI1NiBlbGVtZW50c1xuICAgKiAtIGxvZ2luVmFsaWRpdHlEdXJhdGlvbiAoaWYgcHJlc2VudCkgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclxuICAgKiAtIHJvbGVWYWx1ZXMgKGlmIHByZXNlbnQpIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggdmFsaWQgYWRtaW4gYW5kIGVkaXRvciBhcnJheXNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlU2FtbENvbmZpZ3VyYXRpb24oY29uZmlnOiB1bmtub3duKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChjb25maWcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGVycm9yczsgLy8gT3B0aW9uYWwgcHJvcGVydHkgY2FuIGJlIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGlmICghY29uZmlnIHx8IHR5cGVvZiBjb25maWcgIT09ICdvYmplY3QnKSB7XG4gICAgICBlcnJvcnMucHVzaCgnc2FtbENvbmZpZ3VyYXRpb24gbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgY29uc3Qgc2FtbENvbmZpZyA9IGNvbmZpZyBhcyBTYW1sQ29uZmlndXJhdGlvbjtcblxuICAgIC8vIENoZWNrIGlkcE1ldGFkYXRhIChyZXF1aXJlZClcbiAgICBpZiAoc2FtbENvbmZpZy5pZHBNZXRhZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvcnMucHVzaCgnaWRwTWV0YWRhdGEgaXMgcmVxdWlyZWQgaW4gc2FtbENvbmZpZ3VyYXRpb24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaWRwTWV0YWRhdGFFcnJvcnMgPSBXb3Jrc3BhY2UudmFsaWRhdGVTYW1sSWRwTWV0YWRhdGEoXG4gICAgICAgIHNhbWxDb25maWcuaWRwTWV0YWRhdGEsXG4gICAgICApO1xuICAgICAgaWYgKGlkcE1ldGFkYXRhRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4uaWRwTWV0YWRhdGFFcnJvcnMubWFwKChlcnIpID0+IGBpZHBNZXRhZGF0YTogJHtlcnJ9YCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGFzc2VydGlvbkF0cnJpYnV0ZXMgaWYgcHJlc2VudFxuICAgIGlmIChzYW1sQ29uZmlnLmFzc2VydGlvbkF0cnJpYnV0ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYXR0cmlidXRlRXJyb3JzID0gV29ya3NwYWNlLnZhbGlkYXRlU2FtbEFzc2VydGlvbkF0dHJpYnV0ZXMoXG4gICAgICAgIHNhbWxDb25maWcuYXNzZXJ0aW9uQXRycmlidXRlcyxcbiAgICAgICk7XG4gICAgICBpZiAoYXR0cmlidXRlRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgLi4uYXR0cmlidXRlRXJyb3JzLm1hcCgoZXJyKSA9PiBgYXNzZXJ0aW9uQXRycmlidXRlczogJHtlcnJ9YCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgYWxsb3dlZE9yZ2FuaXphdGlvbnMgaWYgcHJlc2VudFxuICAgIGlmIChzYW1sQ29uZmlnLmFsbG93ZWRPcmdhbml6YXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShzYW1sQ29uZmlnLmFsbG93ZWRPcmdhbml6YXRpb25zKSkge1xuICAgICAgICBlcnJvcnMucHVzaCgnYWxsb3dlZE9yZ2FuaXphdGlvbnMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNhbWxDb25maWcuYWxsb3dlZE9yZ2FuaXphdGlvbnMubGVuZ3RoIDwgMSkge1xuICAgICAgICAgIGVycm9ycy5wdXNoKCdhbGxvd2VkT3JnYW5pemF0aW9ucyBtdXN0IGhhdmUgYXQgbGVhc3QgMSBlbGVtZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNhbWxDb25maWcuYWxsb3dlZE9yZ2FuaXphdGlvbnMubGVuZ3RoID4gMjU2KSB7XG4gICAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgICAnYWxsb3dlZE9yZ2FuaXphdGlvbnMgY2Fubm90IGhhdmUgbW9yZSB0aGFuIDI1NiBlbGVtZW50cycsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtbENvbmZpZy5hbGxvd2VkT3JnYW5pemF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IG9yZyA9IHNhbWxDb25maWcuYWxsb3dlZE9yZ2FuaXphdGlvbnNbaV07XG4gICAgICAgICAgaWYgKHR5cGVvZiBvcmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChgYWxsb3dlZE9yZ2FuaXphdGlvbnNbJHtpfV0gbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGxvZ2luVmFsaWRpdHlEdXJhdGlvbiBpZiBwcmVzZW50XG4gICAgaWYgKHNhbWxDb25maWcubG9naW5WYWxpZGl0eUR1cmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2FtbENvbmZpZy5sb2dpblZhbGlkaXR5RHVyYXRpb24gIT09ICdudW1iZXInKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdsb2dpblZhbGlkaXR5RHVyYXRpb24gbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgfSBlbHNlIGlmIChzYW1sQ29uZmlnLmxvZ2luVmFsaWRpdHlEdXJhdGlvbiA8PSAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdsb2dpblZhbGlkaXR5RHVyYXRpb24gbXVzdCBiZSBwb3NpdGl2ZScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIHJvbGVWYWx1ZXMgaWYgcHJlc2VudFxuICAgIGlmIChzYW1sQ29uZmlnLnJvbGVWYWx1ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFzYW1sQ29uZmlnLnJvbGVWYWx1ZXMgfHwgdHlwZW9mIHNhbWxDb25maWcucm9sZVZhbHVlcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ3JvbGVWYWx1ZXMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENoZWNrIGFkbWluIGFycmF5IGlmIHByZXNlbnRcbiAgICAgICAgaWYgKHNhbWxDb25maWcucm9sZVZhbHVlcy5hZG1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNhbWxDb25maWcucm9sZVZhbHVlcy5hZG1pbikpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKCdyb2xlVmFsdWVzLmFkbWluIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuYWRtaW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuYWRtaW5baV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYHJvbGVWYWx1ZXMuYWRtaW5bJHtpfV0gbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZWRpdG9yIGFycmF5IGlmIHByZXNlbnRcbiAgICAgICAgaWYgKHNhbWxDb25maWcucm9sZVZhbHVlcy5lZGl0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuZWRpdG9yKSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goJ3JvbGVWYWx1ZXMuZWRpdG9yIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzYW1sQ29uZmlnLnJvbGVWYWx1ZXMuZWRpdG9yLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2FtbENvbmZpZy5yb2xlVmFsdWVzLmVkaXRvcltpXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChgcm9sZVZhbHVlcy5lZGl0b3JbJHtpfV0gbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHZwY0NvbmZpZ3VyYXRpb24gcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBUaGUgVlBDIGNvbmZpZ3VyYXRpb24gdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXMgaWYgdmFsaWRhdGlvbiBmYWlscywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgdmFsaWRcbiAgICpcbiAgICogVmFsaWRhdGlvbiBydWxlczpcbiAgICogLSBNdXN0IGJlIGFuIG9iamVjdFxuICAgKiAtIHNlY3VyaXR5R3JvdXBzIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGFuIGFycmF5IHdpdGggMS01IGl0ZW1zXG4gICAqIC0gc3VibmV0cyBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBhcnJheSB3aXRoIDItNiBpdGVtc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVWcGNDb25maWd1cmF0aW9uKGNvbmZpZzogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBlcnJvcnM7IC8vIE9wdGlvbmFsIHByb3BlcnR5IGNhbiBiZSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZyB8fCB0eXBlb2YgY29uZmlnICE9PSAnb2JqZWN0Jykge1xuICAgICAgZXJyb3JzLnB1c2goJ3ZwY0NvbmZpZ3VyYXRpb24gbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgY29uc3QgdnBjQ29uZmlnID0gY29uZmlnIGFzIFZwY0NvbmZpZ3VyYXRpb247XG5cbiAgICAvLyBDaGVjayBzZWN1cml0eUdyb3VwcyAocmVxdWlyZWQpXG4gICAgaWYgKHZwY0NvbmZpZy5zZWN1cml0eUdyb3VwcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvcnMucHVzaCgnc2VjdXJpdHlHcm91cHMgaXMgcmVxdWlyZWQgaW4gdnBjQ29uZmlndXJhdGlvbicpO1xuICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkodnBjQ29uZmlnLnNlY3VyaXR5R3JvdXBzKSkge1xuICAgICAgZXJyb3JzLnB1c2goJ3NlY3VyaXR5R3JvdXBzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZwY0NvbmZpZy5zZWN1cml0eUdyb3Vwcy5sZW5ndGggPCAxKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdzZWN1cml0eUdyb3VwcyBtdXN0IGhhdmUgYXQgbGVhc3QgMSBpdGVtJyk7XG4gICAgICB9XG4gICAgICBpZiAodnBjQ29uZmlnLnNlY3VyaXR5R3JvdXBzLmxlbmd0aCA+IDUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ3NlY3VyaXR5R3JvdXBzIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiA1IGl0ZW1zJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgc3VibmV0cyAocmVxdWlyZWQpXG4gICAgaWYgKHZwY0NvbmZpZy5zdWJuZXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdzdWJuZXRzIGlzIHJlcXVpcmVkIGluIHZwY0NvbmZpZ3VyYXRpb24nKTtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHZwY0NvbmZpZy5zdWJuZXRzKSkge1xuICAgICAgZXJyb3JzLnB1c2goJ3N1Ym5ldHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodnBjQ29uZmlnLnN1Ym5ldHMubGVuZ3RoIDwgMikge1xuICAgICAgICBlcnJvcnMucHVzaCgnc3VibmV0cyBtdXN0IGhhdmUgYXQgbGVhc3QgMiBpdGVtcycpO1xuICAgICAgfVxuICAgICAgaWYgKHZwY0NvbmZpZy5zdWJuZXRzLmxlbmd0aCA+IDYpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goJ3N1Ym5ldHMgY2Fubm90IGhhdmUgbW9yZSB0aGFuIDYgaXRlbXMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhbGwgd29ya3NwYWNlIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSB3b3Jrc3BhY2UgcHJvcGVydGllcyB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBhZ2dyZWdhdGVzIHZhbGlkYXRpb24gcmVzdWx0cyBmcm9tIGFsbCBpbmRpdmlkdWFsIHByb3BlcnR5IHZhbGlkYXRvcnMuXG4gICAqIEl0IHRocm93cyBhbiBlcnJvciBpZiBwcm9wcyBpcyBub3QgYW4gb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVQcm9wcyhwcm9wczogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoIXByb3BzIHx8IHR5cGVvZiBwcm9wcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvcHMgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCB3b3Jrc3BhY2VQcm9wcyA9IHByb3BzIGFzIFdvcmtzcGFjZVByb3BzO1xuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLmNsaWVudFRva2VuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGNsaWVudFRva2VuRXJyb3JzID0gV29ya3NwYWNlLnZhbGlkYXRlQ2xpZW50VG9rZW4oXG4gICAgICAgIHdvcmtzcGFjZVByb3BzLmNsaWVudFRva2VuLFxuICAgICAgKTtcbiAgICAgIGlmIChjbGllbnRUb2tlbkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKC4uLmNsaWVudFRva2VuRXJyb3JzLm1hcCgoZXJyKSA9PiBgY2xpZW50VG9rZW46ICR7ZXJyfWApKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya3NwYWNlUHJvcHMuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZGVzY3JpcHRpb25FcnJvcnMgPSBXb3Jrc3BhY2UudmFsaWRhdGVEZXNjcmlwdGlvbihcbiAgICAgICAgd29ya3NwYWNlUHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICApO1xuICAgICAgaWYgKGRlc2NyaXB0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4uZGVzY3JpcHRpb25FcnJvcnMubWFwKChlcnIpID0+IGBkZXNjcmlwdGlvbjogJHtlcnJ9YCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3Jrc3BhY2VQcm9wcy5ncmFmYW5hVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBncmFmYW5hVmVyc2lvbkVycm9ycyA9IFdvcmtzcGFjZS52YWxpZGF0ZUdyYWZhbmFWZXJzaW9uKFxuICAgICAgICB3b3Jrc3BhY2VQcm9wcy5ncmFmYW5hVmVyc2lvbixcbiAgICAgICk7XG4gICAgICBpZiAoZ3JhZmFuYVZlcnNpb25FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAuLi5ncmFmYW5hVmVyc2lvbkVycm9ycy5tYXAoKGVycikgPT4gYGdyYWZhbmFWZXJzaW9uOiAke2Vycn1gKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya3NwYWNlUHJvcHMubmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBuYW1lRXJyb3JzID0gV29ya3NwYWNlLnZhbGlkYXRlTmFtZSh3b3Jrc3BhY2VQcm9wcy5uYW1lKTtcbiAgICAgIGlmIChuYW1lRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4ubmFtZUVycm9ycy5tYXAoKGVycikgPT4gYG5hbWU6ICR7ZXJyfWApKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya3NwYWNlUHJvcHMubmV0d29ya0FjY2Vzc0NvbnRyb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgbmV0d29ya0FjY2Vzc0NvbnRyb2xFcnJvcnMgPSBXb3Jrc3BhY2UudmFsaWRhdGVOZXR3b3JrQWNjZXNzQ29udHJvbChcbiAgICAgICAgd29ya3NwYWNlUHJvcHMubmV0d29ya0FjY2Vzc0NvbnRyb2wsXG4gICAgICApO1xuICAgICAgaWYgKG5ldHdvcmtBY2Nlc3NDb250cm9sRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgLi4ubmV0d29ya0FjY2Vzc0NvbnRyb2xFcnJvcnMubWFwKFxuICAgICAgICAgICAgKGVycikgPT4gYG5ldHdvcmtBY2Nlc3NDb250cm9sOiAke2Vycn1gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtzcGFjZVByb3BzLm9yZ2FuaXphdGlvblJvbGVOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9yZ2FuaXphdGlvblJvbGVOYW1lRXJyb3JzID0gV29ya3NwYWNlLnZhbGlkYXRlT3JnYW5pemF0aW9uUm9sZU5hbWUoXG4gICAgICAgIHdvcmtzcGFjZVByb3BzLm9yZ2FuaXphdGlvblJvbGVOYW1lLFxuICAgICAgKTtcbiAgICAgIGlmIChvcmdhbml6YXRpb25Sb2xlTmFtZUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgIC4uLm9yZ2FuaXphdGlvblJvbGVOYW1lRXJyb3JzLm1hcChcbiAgICAgICAgICAgIChlcnIpID0+IGBvcmdhbml6YXRpb25Sb2xlTmFtZTogJHtlcnJ9YCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3Jrc3BhY2VQcm9wcy5zYW1sQ29uZmlndXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzYW1sQ29uZmlndXJhdGlvbkVycm9ycyA9IFdvcmtzcGFjZS52YWxpZGF0ZVNhbWxDb25maWd1cmF0aW9uKFxuICAgICAgICB3b3Jrc3BhY2VQcm9wcy5zYW1sQ29uZmlndXJhdGlvbixcbiAgICAgICk7XG4gICAgICBpZiAoc2FtbENvbmZpZ3VyYXRpb25FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICAuLi5zYW1sQ29uZmlndXJhdGlvbkVycm9ycy5tYXAoKGVycikgPT4gYHNhbWxDb25maWd1cmF0aW9uOiAke2Vycn1gKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya3NwYWNlUHJvcHMudnBjQ29uZmlndXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB2cGNDb25maWd1cmF0aW9uRXJyb3JzID0gV29ya3NwYWNlLnZhbGlkYXRlVnBjQ29uZmlndXJhdGlvbihcbiAgICAgICAgd29ya3NwYWNlUHJvcHMudnBjQ29uZmlndXJhdGlvbixcbiAgICAgICk7XG4gICAgICBpZiAodnBjQ29uZmlndXJhdGlvbkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgIC4uLnZwY0NvbmZpZ3VyYXRpb25FcnJvcnMubWFwKChlcnIpID0+IGB2cGNDb25maWd1cmF0aW9uOiAke2Vycn1gKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSB3b3Jrc3BhY2UgY2FuIGFjY2VzcyBBV1MgcmVzb3VyY2VzIGluIHRoaXMgQVdTIGFjY291bnQgb25seSwgb3Igd2hldGhlclxuICAgKiBpdCBjYW4gYWxzbyBhY2Nlc3MgQVdTIHJlc291cmNlcyBpbiBvdGhlciBhY2NvdW50cyBpbiB0aGUgc2FtZSBvcmdhbml6YXRpb24uIElmIHRoaXMgaXNcbiAgICogT1JHQU5JWkFUSU9OLCB0aGUgT3JnYW5pemF0aW9uYWxVbml0cyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoaWNoIG9yZ2FuaXphdGlvbmFsIHVuaXRzIHRoZVxuICAgKiB3b3Jrc3BhY2UgY2FuIGFjY2Vzcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhY2NvdW50QWNjZXNzVHlwZTogQWNjb3VudEFjY2Vzc1R5cGU7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoaXMgd29ya3NwYWNlIHVzZXMgU0FNTCAyLjAsIEFXUyBJQU0gSWRlbnRpdHkgQ2VudGVyLCBvciBib3RoIHRvXG4gICAqIGF1dGhlbnRpY2F0ZSB1c2VycyBmb3IgdXNpbmcgdGhlIEdyYWZhbmEgY29uc29sZSB3aXRoaW4gYSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0aGVudGljYXRpb25Qcm92aWRlcnM6IEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJzW107XG5cbiAgLyoqXG4gICAqIEEgdW5pcXVlLCBjYXNlLXNlbnNpdGl2ZSwgdXNlci1wcm92aWRlZCBpZGVudGlmaWVyIHRvIGVuc3VyZSB0aGUgaWRlbXBvdGVuY3kgb2YgdGhlIHJlcXVlc3QuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50VG9rZW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgQVdTIGRhdGEgc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIHRvIGhhdmUgSUFNIHJvbGVzIGFuZCBwZXJtaXNzaW9uc1xuICAgKiBjcmVhdGVkIHRvIGFsbG93IEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmEgdG8gcmVhZCBkYXRhIGZyb20gdGhlc2Ugc291cmNlcy5cbiAgICpcbiAgICogVGhpcyBsaXN0IGlzIG9ubHkgdXNlZCB3aGVuIHRoZSB3b3Jrc3BhY2Ugd2FzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgQVdTIGNvbnNvbGUsIGFuZCB0aGVcbiAgICogcGVybWlzc2lvblR5cGUgaXMgU0VSVklDRV9NQU5BR0VELlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRhdGFTb3VyY2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB1c2VyLWRlZmluZWQgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgbmV0d29yayBhY2Nlc3MgdG8geW91ciB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmV0d29ya0FjY2Vzc0NvbnRyb2w/OiBOZXR3b3JrQWNjZXNzQ29udHJvbDtcblxuICAvKipcbiAgICogVGhlIEFXUyBub3RpZmljYXRpb24gY2hhbm5lbHMgdGhhdCBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGNhbiBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBJQU0gcm9sZXNcbiAgICogYW5kIHBlcm1pc3Npb25zIGZvciwgdG8gYWxsb3cgQW1hem9uIE1hbmFnZWQgR3JhZmFuYSB0byB1c2UgdGhlc2UgY2hhbm5lbHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm90aWZpY2F0aW9uRGVzdGluYXRpb25zPzogTm90aWZpY2F0aW9uRGVzdGluYXRpb25zW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgb3JnYW5pemF0aW9uYWwgdW5pdHMgdGhhdCB0aGlzIHdvcmtzcGFjZSBpcyBhbGxvd2VkIHRvIHVzZSBkYXRhIHNvdXJjZXMgZnJvbSwgaWZcbiAgICogdGhpcyB3b3Jrc3BhY2UgaXMgaW4gYW4gYWNjb3VudCB0aGF0IGlzIHBhcnQgb2YgYW4gb3JnYW5pemF0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIElBTSByb2xlIHRoYXQgaXMgdXNlZCB0byBhY2Nlc3MgcmVzb3VyY2VzIHRocm91Z2ggT3JnYW5pemF0aW9ucy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvcmdhbml6YXRpb25Sb2xlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBTRVJWSUNFX01BTkFHRUQsIGFuZCB0aGUgd29ya3BsYWNlIHdhcyBjcmVhdGVkIHRocm91Z2ggdGhlIEFtYXpvbiBNYW5hZ2VkIEdyYWZhbmFcbiAgICogY29uc29sZSwgdGhlbiBBbWF6b24gTWFuYWdlZCBHcmFmYW5hIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyB0aGUgSUFNIHJvbGVzIGFuZCBwcm92aXNpb25zIHRoZVxuICAgKiBwZXJtaXNzaW9ucyB0aGF0IHRoZSB3b3Jrc3BhY2UgbmVlZHMgdG8gdXNlIEFXUyBkYXRhIHNvdXJjZXMgYW5kIG5vdGlmaWNhdGlvbiBjaGFubmVscy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBDVVNUT01FUl9NQU5BR0VELCB5b3UgbXVzdCBtYW5hZ2UgdGhvc2Ugcm9sZXMgYW5kIHBlcm1pc3Npb25zIHlvdXJzZWxmLlxuICAgKlxuICAgKiBJZiB5b3UgYXJlIHdvcmtpbmcgd2l0aCBhIHdvcmtzcGFjZSBpbiBhIG1lbWJlciBhY2NvdW50IG9mIGFuIG9yZ2FuaXphdGlvbiBhbmQgdGhhdCBhY2NvdW50IGlzXG4gICAqIG5vdCBhIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGFjY291bnQsIGFuZCB5b3Ugd2FudCB0aGUgd29ya3NwYWNlIHRvIGFjY2VzcyBkYXRhIHNvdXJjZXMgaW5cbiAgICogb3RoZXIgQVdTIGFjY291bnRzIGluIHRoZSBvcmdhbml6YXRpb24sIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIENVU1RPTUVSX01BTkFHRUQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlcztcblxuICAvKipcbiAgICogV2hldGhlciBwbHVnaW4gYWRtaW5pc3RyYXRpb24gaXMgZW5hYmxlZCBpbiB0aGUgd29ya3NwYWNlLiBTZXR0aW5nIHRvIHRydWUgYWxsb3dzIHdvcmtzcGFjZVxuICAgKiBhZG1pbnMgdG8gaW5zdGFsbCwgdW5pbnN0YWxsLCBhbmQgdXBkYXRlIHBsdWdpbnMgZnJvbSB3aXRoaW4gdGhlIEdyYWZhbmEgd29ya3NwYWNlLlxuICAgKlxuICAgKiBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB3b3Jrc3BhY2VzIHRoYXQgc3VwcG9ydCBHcmFmYW5hIHZlcnNpb24gOSBvciBuZXdlci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwbHVnaW5BZG1pbkVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBncmFudHMgcGVybWlzc2lvbnMgdG8gdGhlIEFXUyByZXNvdXJjZXMgdGhhdCB0aGUgd29ya3NwYWNlIHdpbGwgdmlldyBkYXRhXG4gICAqIGZyb20uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZT86IElSb2xlO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgd29ya3NwYWNlIHVzZXMgU0FNTCwgdXNlIHRoaXMgc3RydWN0dXJlIHRvIG1hcCBTQU1MIGFzc2VydGlvbiBhdHRyaWJ1dGVzIHRvIHdvcmtzcGFjZVxuICAgKiB1c2VyIGluZm9ybWF0aW9uIGFuZCBkZWZpbmUgd2hpY2ggZ3JvdXBzIGluIHRoZSBhc3NlcnRpb24gYXR0cmlidXRlIGFyZSB0byBoYXZlIHRoZSBBZG1pbiBhbmRcbiAgICogRWRpdG9yIHJvbGVzIGluIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2FtbENvbmZpZ3VyYXRpb24/OiBTYW1sQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFXUyBDbG91ZEZvcm1hdGlvbiBzdGFjayBzZXQgdGhhdCBpcyB1c2VkIHRvIGdlbmVyYXRlIElBTSByb2xlcyB0byBiZSB1c2VkIGZvclxuICAgKiB0aGlzIHdvcmtzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGFja1NldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBhbiBBbWF6b24gVlBDIHRoYXQgY29udGFpbnMgZGF0YSBzb3VyY2VzIGZvciB5b3VyIEdyYWZhbmFcbiAgICogd29ya3NwYWNlIHRvIGNvbm5lY3QgdG8uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjQ29uZmlndXJhdGlvbj86IFZwY0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSB1bmRlcmx5aW5nIENsb3VkRm9ybWF0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB3b3Jrc3BhY2U6IENmbldvcmtzcGFjZTtcblxuICAvKipcbiAgICogVGhlIGRhdGUgdGhhdCB0aGUgd29ya3NwYWNlIHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0aW9uVGltZXN0YW1wOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgdGhhdCB1c2VycyBjYW4gdXNlIHRvIGFjY2VzcyB0aGUgR3JhZmFuYSBjb25zb2xlIGluIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW5kcG9pbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIEdyYWZhbmEgc3VwcG9ydGVkIGJ5IHRoaXMgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYWZhbmFWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgb2YgdGhpcyB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1vc3QgcmVjZW50IGRhdGUgdGhhdCB0aGUgd29ya3NwYWNlIHdhcyBtb2RpZmllZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtb2RpZmljYXRpb25UaW1lc3RhbXA6IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHdvcmtzcGFjZSdzIFNBTUwgY29uZmlndXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzYW1sQ29uZmlndXJhdGlvblN0YXR1czogU2FtbENvbmZpZ3VyYXRpb25TdGF0dXNlcztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBJQU0gSWRlbnRpdHkgQ2VudGVyLW1hbmFnZWQgYXBwbGljYXRpb24gdGhhdCBpcyBjcmVhdGVkIGJ5IEFtYXpvbiBNYW5hZ2VkXG4gICAqIEdyYWZhbmEuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3NvQ2xpZW50SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzOiBTdGF0dXM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFdvcmtzcGFjZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGVycm9ycyA9IFdvcmtzcGFjZS52YWxpZGF0ZVByb3BzKHByb3BzKTtcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcm9wczpcXG4ke2Vycm9ycy5qb2luKCdcXG4nKX1gKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy5hY2NvdW50QWNjZXNzVHlwZSA9PT0gQWNjb3VudEFjY2Vzc1R5cGUuQ1VSUkVOVF9BQ0NPVU5UICYmXG4gICAgICAhcHJvcHMucm9sZVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnUm9sZSBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gYWNjb3VudEFjY2Vzc1R5cGUgaXMgQ1VSUkVOVF9BQ0NPVU5UJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hY2NvdW50QWNjZXNzVHlwZSA9IHByb3BzLmFjY291bnRBY2Nlc3NUeXBlO1xuICAgIHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlcnMgPSBwcm9wcy5hdXRoZW50aWNhdGlvblByb3ZpZGVycztcbiAgICB0aGlzLmNsaWVudFRva2VuID0gcHJvcHMuY2xpZW50VG9rZW47XG4gICAgdGhpcy5kYXRhU291cmNlcyA9IHByb3BzLmRhdGFTb3VyY2VzO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBwcm9wcy5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLm5ldHdvcmtBY2Nlc3NDb250cm9sID0gcHJvcHMubmV0d29ya0FjY2Vzc0NvbnRyb2w7XG4gICAgdGhpcy5ub3RpZmljYXRpb25EZXN0aW5hdGlvbnMgPSBwcm9wcy5ub3RpZmljYXRpb25EZXN0aW5hdGlvbnM7XG4gICAgdGhpcy5vcmdhbml6YXRpb25hbFVuaXRzID0gcHJvcHMub3JnYW5pemF0aW9uYWxVbml0cztcbiAgICB0aGlzLm9yZ2FuaXphdGlvblJvbGVOYW1lID0gcHJvcHMub3JnYW5pemF0aW9uUm9sZU5hbWU7XG4gICAgdGhpcy5wZXJtaXNzaW9uVHlwZSA9IHByb3BzLnBlcm1pc3Npb25UeXBlO1xuICAgIHRoaXMucGx1Z2luQWRtaW5FbmFibGVkID0gcHJvcHMucGx1Z2luQWRtaW5FbmFibGVkO1xuICAgIHRoaXMubmFtZSA9IHByb3BzLm5hbWU7XG4gICAgdGhpcy5yb2xlID0gcHJvcHMucm9sZTtcbiAgICB0aGlzLnNhbWxDb25maWd1cmF0aW9uID0gcHJvcHMuc2FtbENvbmZpZ3VyYXRpb247XG4gICAgdGhpcy5zdGFja1NldE5hbWUgPSBwcm9wcy5zdGFja1NldE5hbWU7XG4gICAgdGhpcy52cGNDb25maWd1cmF0aW9uID0gcHJvcHMudnBjQ29uZmlndXJhdGlvbjtcblxuICAgIGxldCBjZm5Xb3Jrc3BhY2VQcm9wczogQ2ZuV29ya3NwYWNlUHJvcHMgPSB7XG4gICAgICBhY2NvdW50QWNjZXNzVHlwZTogcHJvcHMuYWNjb3VudEFjY2Vzc1R5cGUsXG4gICAgICBhdXRoZW50aWNhdGlvblByb3ZpZGVyczogcHJvcHMuYXV0aGVudGljYXRpb25Qcm92aWRlcnMsXG4gICAgICBjbGllbnRUb2tlbjogcHJvcHMuY2xpZW50VG9rZW4sXG4gICAgICBkYXRhU291cmNlczogcHJvcHMuZGF0YVNvdXJjZXMsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBncmFmYW5hVmVyc2lvbjogcHJvcHMuZ3JhZmFuYVZlcnNpb24sXG4gICAgICBuYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgbm90aWZpY2F0aW9uRGVzdGluYXRpb25zOiBwcm9wcy5ub3RpZmljYXRpb25EZXN0aW5hdGlvbnMsXG4gICAgICBvcmdhbml6YXRpb25hbFVuaXRzOiBwcm9wcy5vcmdhbml6YXRpb25hbFVuaXRzLFxuICAgICAgb3JnYW5pemF0aW9uUm9sZU5hbWU6IHByb3BzLm9yZ2FuaXphdGlvblJvbGVOYW1lLFxuICAgICAgcGVybWlzc2lvblR5cGU6IHByb3BzLnBlcm1pc3Npb25UeXBlLFxuICAgICAgcGx1Z2luQWRtaW5FbmFibGVkOiBwcm9wcy5wbHVnaW5BZG1pbkVuYWJsZWQsXG4gICAgICByb2xlQXJuOiBwcm9wcy5yb2xlPy5yb2xlQXJuLFxuICAgICAgc2FtbENvbmZpZ3VyYXRpb246IHByb3BzLnNhbWxDb25maWd1cmF0aW9uLFxuICAgICAgc3RhY2tTZXROYW1lOiBwcm9wcy5zdGFja1NldE5hbWUsXG4gICAgICB2cGNDb25maWd1cmF0aW9uOiBwcm9wcy52cGNDb25maWd1cmF0aW9uXG4gICAgICAgID8ge1xuICAgICAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IHByb3BzLnZwY0NvbmZpZ3VyYXRpb24uc2VjdXJpdHlHcm91cHMubWFwKFxuICAgICAgICAgICAgKHNnKSA9PiBzZy5zZWN1cml0eUdyb3VwSWQsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzdWJuZXRJZHM6IHByb3BzLnZwY0NvbmZpZ3VyYXRpb24uc3VibmV0cy5tYXAoXG4gICAgICAgICAgICAoc3VibmV0KSA9PiBzdWJuZXQuc3VibmV0SWQsXG4gICAgICAgICAgKSxcbiAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgdGhpcy53b3Jrc3BhY2UgPSBuZXcgQ2ZuV29ya3NwYWNlKHRoaXMsICdSZXNvdXJjZScsIGNmbldvcmtzcGFjZVByb3BzKTtcbiAgICB0aGlzLmNyZWF0aW9uVGltZXN0YW1wID0gdGhpcy53b3Jrc3BhY2UuYXR0ckNyZWF0aW9uVGltZXN0YW1wO1xuICAgIHRoaXMuZW5kcG9pbnQgPSB0aGlzLndvcmtzcGFjZS5hdHRyRW5kcG9pbnQ7XG4gICAgdGhpcy5ncmFmYW5hVmVyc2lvbiA9IHRoaXMud29ya3NwYWNlLmF0dHJHcmFmYW5hVmVyc2lvbjtcbiAgICB0aGlzLmlkID0gdGhpcy53b3Jrc3BhY2UuYXR0cklkO1xuICAgIHRoaXMubW9kaWZpY2F0aW9uVGltZXN0YW1wID0gdGhpcy53b3Jrc3BhY2UuYXR0ck1vZGlmaWNhdGlvblRpbWVzdGFtcDtcbiAgICB0aGlzLnNhbWxDb25maWd1cmF0aW9uU3RhdHVzID0gdGhpcy53b3Jrc3BhY2VcbiAgICAgIC5hdHRyU2FtbENvbmZpZ3VyYXRpb25TdGF0dXMgYXMgU2FtbENvbmZpZ3VyYXRpb25TdGF0dXNlcztcbiAgICB0aGlzLnNzb0NsaWVudElkID0gdGhpcy53b3Jrc3BhY2UuYXR0clNzb0NsaWVudElkO1xuICAgIHRoaXMuc3RhdHVzID0gdGhpcy53b3Jrc3BhY2UuYXR0clN0YXR1cyBhcyBTdGF0dXM7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"commit-and-tag-version": "^12",
|
|
45
45
|
"constructs": "10.0.5",
|
|
46
46
|
"eslint": "^9",
|
|
47
|
-
"eslint-import-resolver-typescript": "^4.
|
|
47
|
+
"eslint-import-resolver-typescript": "^4.4.0",
|
|
48
48
|
"eslint-plugin-import": "^2.31.0",
|
|
49
49
|
"jest": "^29.7.0",
|
|
50
50
|
"jest-junit": "^16",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
],
|
|
69
69
|
"main": "lib/index.js",
|
|
70
70
|
"license": "MIT",
|
|
71
|
-
"version": "0.0.
|
|
71
|
+
"version": "0.0.3",
|
|
72
72
|
"jest": {
|
|
73
73
|
"coverageProvider": "v8",
|
|
74
74
|
"testMatch": [
|