@tiba-spark/client-shared-lib 26.1.0-164 → 26.1.0-178
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/esm2022/libraries/constants/version-constants.mjs +2 -1
- package/esm2022/libraries/service-proxy/identity-service-proxies.mjs +1 -164
- package/fesm2022/tiba-spark-client-shared-lib.mjs +2 -167
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/constants/version-constants.d.ts +1 -0
- package/libraries/constants/version-constants.d.ts.map +1 -1
- package/libraries/service-proxy/identity-service-proxies.d.ts +0 -53
- package/libraries/service-proxy/identity-service-proxies.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1607,87 +1607,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1607
1607
|
type: Inject,
|
|
1608
1608
|
args: [API_BASE_URL]
|
|
1609
1609
|
}] }] });
|
|
1610
|
-
export class ValidationIdentityServiceProxy {
|
|
1611
|
-
constructor(http, baseUrl) {
|
|
1612
|
-
this.jsonParseReviver = undefined;
|
|
1613
|
-
this.http = http;
|
|
1614
|
-
this.baseUrl = baseUrl ?? "";
|
|
1615
|
-
}
|
|
1616
|
-
/**
|
|
1617
|
-
* @return Success
|
|
1618
|
-
*/
|
|
1619
|
-
getOnlineValidatorContext() {
|
|
1620
|
-
let url_ = this.baseUrl + "/api/services/web/validation/online-validator-context";
|
|
1621
|
-
url_ = url_.replace(/[?&]$/, "");
|
|
1622
|
-
let options_ = {
|
|
1623
|
-
observe: "response",
|
|
1624
|
-
responseType: "blob",
|
|
1625
|
-
headers: new HttpHeaders({
|
|
1626
|
-
"Accept": "text/plain"
|
|
1627
|
-
})
|
|
1628
|
-
};
|
|
1629
|
-
return this.http.request("get", url_, options_).pipe(_observableMergeMap((response_) => {
|
|
1630
|
-
return this.processGetOnlineValidatorContext(response_);
|
|
1631
|
-
})).pipe(_observableCatch((response_) => {
|
|
1632
|
-
if (response_ instanceof HttpResponseBase) {
|
|
1633
|
-
try {
|
|
1634
|
-
return this.processGetOnlineValidatorContext(response_);
|
|
1635
|
-
}
|
|
1636
|
-
catch (e) {
|
|
1637
|
-
return _observableThrow(e);
|
|
1638
|
-
}
|
|
1639
|
-
}
|
|
1640
|
-
else
|
|
1641
|
-
return _observableThrow(response_);
|
|
1642
|
-
}));
|
|
1643
|
-
}
|
|
1644
|
-
processGetOnlineValidatorContext(response) {
|
|
1645
|
-
const status = response.status;
|
|
1646
|
-
const responseBlob = response instanceof HttpResponse ? response.body :
|
|
1647
|
-
response.error instanceof Blob ? response.error : undefined;
|
|
1648
|
-
let _headers = {};
|
|
1649
|
-
if (response.headers) {
|
|
1650
|
-
for (let key of response.headers.keys()) {
|
|
1651
|
-
_headers[key] = response.headers.get(key);
|
|
1652
|
-
}
|
|
1653
|
-
}
|
|
1654
|
-
if (status === 404) {
|
|
1655
|
-
return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
|
|
1656
|
-
let result404 = null;
|
|
1657
|
-
let resultData404 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
|
|
1658
|
-
result404 = ProblemDetails.fromJS(resultData404);
|
|
1659
|
-
return throwException("Not Found", status, _responseText, _headers, result404);
|
|
1660
|
-
}));
|
|
1661
|
-
}
|
|
1662
|
-
else if (status === 200) {
|
|
1663
|
-
return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
|
|
1664
|
-
let result200 = null;
|
|
1665
|
-
let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver);
|
|
1666
|
-
result200 = OnlineValidatorContextDtoHttpResponseData.fromJS(resultData200);
|
|
1667
|
-
return _observableOf(result200);
|
|
1668
|
-
}));
|
|
1669
|
-
}
|
|
1670
|
-
else if (status !== 200 && status !== 204) {
|
|
1671
|
-
return blobToText(responseBlob).pipe(_observableMergeMap(_responseText => {
|
|
1672
|
-
return throwException("An unexpected server error occurred.", status, _responseText, _headers);
|
|
1673
|
-
}));
|
|
1674
|
-
}
|
|
1675
|
-
return _observableOf(null);
|
|
1676
|
-
}
|
|
1677
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ValidationIdentityServiceProxy, deps: [{ token: HttpClient }, { token: API_BASE_URL, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1678
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ValidationIdentityServiceProxy }); }
|
|
1679
|
-
}
|
|
1680
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ValidationIdentityServiceProxy, decorators: [{
|
|
1681
|
-
type: Injectable
|
|
1682
|
-
}], ctorParameters: () => [{ type: i1.HttpClient, decorators: [{
|
|
1683
|
-
type: Inject,
|
|
1684
|
-
args: [HttpClient]
|
|
1685
|
-
}] }, { type: undefined, decorators: [{
|
|
1686
|
-
type: Optional
|
|
1687
|
-
}, {
|
|
1688
|
-
type: Inject,
|
|
1689
|
-
args: [API_BASE_URL]
|
|
1690
|
-
}] }] });
|
|
1691
1610
|
export class ActivateResponseDto {
|
|
1692
1611
|
constructor(data) {
|
|
1693
1612
|
if (data) {
|
|
@@ -2675,88 +2594,6 @@ export class ObjectHttpResponseData {
|
|
|
2675
2594
|
return result;
|
|
2676
2595
|
}
|
|
2677
2596
|
}
|
|
2678
|
-
export class OnlineValidatorContextDto {
|
|
2679
|
-
constructor(data) {
|
|
2680
|
-
if (data) {
|
|
2681
|
-
for (var property in data) {
|
|
2682
|
-
if (data.hasOwnProperty(property))
|
|
2683
|
-
this[property] = data[property];
|
|
2684
|
-
}
|
|
2685
|
-
}
|
|
2686
|
-
}
|
|
2687
|
-
init(_data) {
|
|
2688
|
-
if (_data) {
|
|
2689
|
-
this.guid = _data["guid"];
|
|
2690
|
-
this.parkId = _data["parkId"];
|
|
2691
|
-
this.parkName = _data["parkName"];
|
|
2692
|
-
this.companyId = _data["companyId"];
|
|
2693
|
-
this.subCompanyId = _data["subCompanyId"];
|
|
2694
|
-
this.validationTypeId = _data["validationTypeId"];
|
|
2695
|
-
}
|
|
2696
|
-
}
|
|
2697
|
-
static fromJS(data) {
|
|
2698
|
-
data = typeof data === 'object' ? data : {};
|
|
2699
|
-
let result = new OnlineValidatorContextDto();
|
|
2700
|
-
result.init(data);
|
|
2701
|
-
return result;
|
|
2702
|
-
}
|
|
2703
|
-
toJSON(data) {
|
|
2704
|
-
data = typeof data === 'object' ? data : {};
|
|
2705
|
-
data["guid"] = this.guid;
|
|
2706
|
-
data["parkId"] = this.parkId;
|
|
2707
|
-
data["parkName"] = this.parkName;
|
|
2708
|
-
data["companyId"] = this.companyId;
|
|
2709
|
-
data["subCompanyId"] = this.subCompanyId;
|
|
2710
|
-
data["validationTypeId"] = this.validationTypeId;
|
|
2711
|
-
return data;
|
|
2712
|
-
}
|
|
2713
|
-
clone() {
|
|
2714
|
-
const json = this.toJSON();
|
|
2715
|
-
let result = new OnlineValidatorContextDto();
|
|
2716
|
-
result.init(json);
|
|
2717
|
-
return result;
|
|
2718
|
-
}
|
|
2719
|
-
}
|
|
2720
|
-
export class OnlineValidatorContextDtoHttpResponseData {
|
|
2721
|
-
constructor(data) {
|
|
2722
|
-
if (data) {
|
|
2723
|
-
for (var property in data) {
|
|
2724
|
-
if (data.hasOwnProperty(property))
|
|
2725
|
-
this[property] = data[property];
|
|
2726
|
-
}
|
|
2727
|
-
}
|
|
2728
|
-
}
|
|
2729
|
-
init(_data) {
|
|
2730
|
-
if (_data) {
|
|
2731
|
-
this.errorMessage = _data["errorMessage"];
|
|
2732
|
-
this.isSuccess = _data["isSuccess"];
|
|
2733
|
-
this.statusCode = _data["statusCode"];
|
|
2734
|
-
this.data = _data["data"] ? OnlineValidatorContextDto.fromJS(_data["data"]) : undefined;
|
|
2735
|
-
this.successMessage = _data["successMessage"];
|
|
2736
|
-
}
|
|
2737
|
-
}
|
|
2738
|
-
static fromJS(data) {
|
|
2739
|
-
data = typeof data === 'object' ? data : {};
|
|
2740
|
-
let result = new OnlineValidatorContextDtoHttpResponseData();
|
|
2741
|
-
result.init(data);
|
|
2742
|
-
return result;
|
|
2743
|
-
}
|
|
2744
|
-
toJSON(data) {
|
|
2745
|
-
data = typeof data === 'object' ? data : {};
|
|
2746
|
-
data["errorMessage"] = this.errorMessage;
|
|
2747
|
-
data["isSuccess"] = this.isSuccess;
|
|
2748
|
-
data["statusCode"] = this.statusCode;
|
|
2749
|
-
data["data"] = this.data ? this.data.toJSON() : undefined;
|
|
2750
|
-
data["successMessage"] = this.successMessage;
|
|
2751
|
-
return data;
|
|
2752
|
-
}
|
|
2753
|
-
clone() {
|
|
2754
|
-
const json = this.toJSON();
|
|
2755
|
-
let result = new OnlineValidatorContextDtoHttpResponseData();
|
|
2756
|
-
result.init(json);
|
|
2757
|
-
return result;
|
|
2758
|
-
}
|
|
2759
|
-
}
|
|
2760
2597
|
export var ParkBranchType;
|
|
2761
2598
|
(function (ParkBranchType) {
|
|
2762
2599
|
ParkBranchType[ParkBranchType["Park"] = 0] = "Park";
|
|
@@ -4150,4 +3987,4 @@ function blobToText(blob) {
|
|
|
4150
3987
|
}
|
|
4151
3988
|
});
|
|
4152
3989
|
}
|
|
4153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktc2VydmljZS1wcm94aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9zZXJ2aWNlLXByb3h5L2lkZW50aXR5LXNlcnZpY2UtcHJveGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3QkFBd0I7QUFDeEIsbUJBQW1CO0FBQ25CLDJIQUEySDtBQUMzSCxvQkFBb0I7QUFDcEIsd0JBQXdCO0FBRXhCLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsdUNBQXVDO0FBRXZDLE9BQU8sRUFBRSxRQUFRLElBQUksbUJBQW1CLEVBQUUsVUFBVSxJQUFJLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLElBQUksZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9GLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQzs7O0FBRTVCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBUyxjQUFjLENBQUMsQ0FBQztBQUd2RSxNQUFNLE9BQU8seUJBQXlCO0lBS2xDLFlBQWdDLElBQWdCLEVBQW9DLE9BQWdCO1FBRjFGLHFCQUFnQixHQUFtRCxTQUFTLENBQUM7UUFHbkYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxPQUFP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WUFDRixNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIDxhdXRvLWdlbmVyYXRlZD5cbi8vICAgICBHZW5lcmF0ZWQgdXNpbmcgdGhlIE5Td2FnIHRvb2xjaGFpbiB2MTQuNC4wLjAgKE5Kc29uU2NoZW1hIHYxMS4zLjIuMCAoTmV3dG9uc29mdC5Kc29uIHYxMy4wLjAuMCkpIChodHRwOi8vTlN3YWcub3JnKVxuLy8gPC9hdXRvLWdlbmVyYXRlZD5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIFJlU2hhcnBlciBkaXNhYmxlIEluY29uc2lzdGVudE5hbWluZ1xuXG5pbXBvcnQgeyBtZXJnZU1hcCBhcyBfb2JzZXJ2YWJsZU1lcmdlTWFwLCBjYXRjaEVycm9yIGFzIF9vYnNlcnZhYmxlQ2F0Y2ggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIGFzIF9vYnNlcnZhYmxlVGhyb3csIG9mIGFzIF9vYnNlcnZhYmxlT2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgT3B0aW9uYWwsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlLCBIdHRwUmVzcG9uc2VCYXNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmV4cG9ydCBjb25zdCBBUElfQkFTRV9VUkwgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignQVBJX0JBU0VfVVJMJyk7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBc3NldElkZW50aXR5U2VydmljZVByb3h5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gaWRlbnRpZmllciAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldExvZ28oaWRlbnRpZmllcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvYXNzZXQvbG9nbz9cIjtcbiAgICAgICAgaWYgKGlkZW50aWZpZXIgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdpZGVudGlmaWVyJyBjYW5ub3QgYmUgbnVsbC5cIik7XG4gICAgICAgIGVsc2UgaWYgKGlkZW50aWZpZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHVybF8gKz0gXCJJZGVudGlmaWVyPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBpZGVudGlmaWVyKSArIFwiJlwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRMb2dvKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRMb2dvKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8TG9nb0R0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8TG9nb0R0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRMb2dvKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQmFja29mZmljZVVzZXJJZGVudGl0eVNlcnZpY2VQcm94eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGJvZHkgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBiYWNrb2ZmaWNlQXV0aGVudGljYXRlKGJvZHk6IEF1dGhlbnRpY2F0ZUJhY2tvZmZpY2VTc29SZXF1ZXN0RHRvIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvYmFja29mZmljZXVzZXIvYXV0aGVudGljYXRlXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NCYWNrb2ZmaWNlQXV0aGVudGljYXRlKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NCYWNrb2ZmaWNlQXV0aGVudGljYXRlKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0JhY2tvZmZpY2VBdXRoZW50aWNhdGUocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMikge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAyOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDIgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMiA9IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMik7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDIpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDE6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwMSA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDAxID0gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25JZGVudGl0eVNlcnZpY2VQcm94eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0T25saW5lVmFsaWRhdG9yVmVyc2lvbigpOiBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL2NvbmZpZ3VyYXRpb24vb25saW5lLXZhbGlkYXRvci12ZXJzaW9uXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldE9ubGluZVZhbGlkYXRvclZlcnNpb24ocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldE9ubGluZVZhbGlkYXRvclZlcnNpb24ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRPbmxpbmVWYWxpZGF0b3JWZXJzaW9uKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gT2JqZWN0SHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0U2V0dGluZ3NCeUNhdGVnb3J5KGNhdGVnb3J5OiBTZXR0aW5nc0NhdGVnb3J5KTogT2JzZXJ2YWJsZTxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi9jb25maWd1cmF0aW9uL3NldHRpbmdzL3tjYXRlZ29yeX1cIjtcbiAgICAgICAgaWYgKGNhdGVnb3J5ID09PSB1bmRlZmluZWQgfHwgY2F0ZWdvcnkgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdjYXRlZ29yeScgbXVzdCBiZSBkZWZpbmVkLlwiKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZShcIntjYXRlZ29yeX1cIiwgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBjYXRlZ29yeSkpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRTZXR0aW5nc0J5Q2F0ZWdvcnkocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldFNldHRpbmdzQnlDYXRlZ29yeShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0dldFNldHRpbmdzQnlDYXRlZ29yeShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IE9iamVjdEh0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldEFwcENvbmZpZ3VyYXRpb24oKTogT2JzZXJ2YWJsZTxBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvY29uZmlndXJhdGlvblwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRBcHBDb25maWd1cmF0aW9uKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRBcHBDb25maWd1cmF0aW9uKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8QXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8QXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRBcHBDb25maWd1cmF0aW9uKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRmFjaWxpdHlJZGVudGl0eVNlcnZpY2VQcm94eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGFwcE1vZHVsZSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGZhY2lsaXR5QWxsKGFwcE1vZHVsZTogQXBwTW9kdWxlIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvZmFjaWxpdHkvYmFzaWM/XCI7XG4gICAgICAgIGlmIChhcHBNb2R1bGUgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdhcHBNb2R1bGUnIGNhbm5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgZWxzZSBpZiAoYXBwTW9kdWxlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB1cmxfICs9IFwiYXBwTW9kdWxlPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBhcHBNb2R1bGUpICsgXCImXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZhY2lsaXR5QWxsKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NGYWNpbGl0eUFsbChyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzRmFjaWxpdHlBbGwocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8U21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYXBwTW9kdWxlIChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0RmFjaWxpdHlUcmVlKGFwcE1vZHVsZTogQXBwTW9kdWxlIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL2ZhY2lsaXR5L3RyZWU/XCI7XG4gICAgICAgIGlmIChhcHBNb2R1bGUgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdhcHBNb2R1bGUnIGNhbm5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgZWxzZSBpZiAoYXBwTW9kdWxlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB1cmxfICs9IFwiYXBwTW9kdWxlPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBhcHBNb2R1bGUpICsgXCImXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldEZhY2lsaXR5VHJlZShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0RmFjaWxpdHlUcmVlKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8RmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0dldEZhY2lsaXR5VHJlZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8RmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gRmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExvY2FsaXphdGlvbklkZW50aXR5U2VydmljZVByb3h5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ga2V5TmFtZSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGdldFJlc291cmNlKGtleU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8RmlsZVJlc3BvbnNlPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi9sb2NhbGl6YXRpb24vZ2V0LXJlc291cmNlP1wiO1xuICAgICAgICBpZiAoa2V5TmFtZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ2tleU5hbWUnIGNhbm5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgZWxzZSBpZiAoa2V5TmFtZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdXJsXyArPSBcImtleU5hbWU9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIGtleU5hbWUpICsgXCImXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldFJlc291cmNlKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRSZXNvdXJjZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEZpbGVSZXNwb25zZT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxGaWxlUmVzcG9uc2U+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRSZXNvdXJjZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8RmlsZVJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA2KSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50RGlzcG9zaXRpb24gPSByZXNwb25zZS5oZWFkZXJzID8gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LWRpc3Bvc2l0aW9uXCIpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IGZpbGVOYW1lTWF0Y2ggPSBjb250ZW50RGlzcG9zaXRpb24gPyAvZmlsZW5hbWVcXCo9KD86KFxcXFw/WydcIl0pKC4qPylcXDF8KD86W15cXHNdKycuKj8nKT8oW147XFxuXSopKS9nLmV4ZWMoY29udGVudERpc3Bvc2l0aW9uKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBmaWxlTmFtZSA9IGZpbGVOYW1lTWF0Y2ggJiYgZmlsZU5hbWVNYXRjaC5sZW5ndGggPiAxID8gZmlsZU5hbWVNYXRjaFszXSB8fCBmaWxlTmFtZU1hdGNoWzJdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaWxlTmFtZU1hdGNoID0gY29udGVudERpc3Bvc2l0aW9uID8gL2ZpbGVuYW1lPVwiPyhbXlwiXSo/KVwiPyg7fCQpL2cuZXhlYyhjb250ZW50RGlzcG9zaXRpb24pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWVNYXRjaCAmJiBmaWxlTmFtZU1hdGNoLmxlbmd0aCA+IDEgPyBmaWxlTmFtZU1hdGNoWzFdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YoeyBmaWxlTmFtZTogZmlsZU5hbWUsIGRhdGE6IHJlc3BvbnNlQmxvYiBhcyBhbnksIHN0YXR1czogc3RhdHVzLCBoZWFkZXJzOiBfaGVhZGVycyB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8RmlsZVJlc3BvbnNlPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU21hcnRwYXJrSWRlbnRpdHlTZXJ2aWNlUHJveHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIHZlcnNpb25zKCk6IE9ic2VydmFibGU8U3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi9zbWFydHBhcmsvdmVyc2lvbnNcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmVyc2lvbnMocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZlcnNpb25zKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8U3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1ZlcnNpb25zKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8U3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGVuYW50SWRlbnRpdHlTZXJ2aWNlUHJveHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBuYW1lIChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0VGVuYW50RGV0YWlscyhuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi90ZW5hbnQvZGV0YWlscz9cIjtcbiAgICAgICAgaWYgKG5hbWUgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICduYW1lJyBjYW5ub3QgYmUgbnVsbC5cIik7XG4gICAgICAgIGVsc2UgaWYgKG5hbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHVybF8gKz0gXCJuYW1lPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBuYW1lKSArIFwiJlwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRUZW5hbnREZXRhaWxzKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRUZW5hbnREZXRhaWxzKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NHZXRUZW5hbnREZXRhaWxzKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGhpcmRQYXJ0eUlkZW50aXR5U2VydmljZVByb3h5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBtZSgpOiBPYnNlcnZhYmxlPFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi90aGlyZHBhcnR5L21lXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01lKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzTWUocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gVGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8VGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBVc2Vyc0lkZW50aXR5U2VydmljZVByb3h5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm9keSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGF1dGhlbnRpY2F0ZShib2R5OiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3VzZXJzL2F1dGhlbnRpY2F0ZVwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgYm9keTogY29udGVudF8sXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzQXV0aGVudGljYXRlKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBdXRoZW50aWNhdGUocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzQXV0aGVudGljYXRlKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDAxOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDEgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwMSA9IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhNDAxKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIlVuYXV0aG9yaXplZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDEpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcmVmcmVzaFRva2VuIChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgcmVmcmVzaFRva2VuKHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi91c2Vycy9yZWZyZXNoLXRva2VuXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJSZWZyZXNoVG9rZW5cIjogcmVmcmVzaFRva2VuICE9PSB1bmRlZmluZWQgJiYgcmVmcmVzaFRva2VuICE9PSBudWxsID8gXCJcIiArIHJlZnJlc2hUb2tlbiA6IFwiXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NSZWZyZXNoVG9rZW4ocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JlZnJlc2hUb2tlbihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8UmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1JlZnJlc2hUb2tlbihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8UmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8UmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBhY3RpdmF0aW9uVG9rZW4gKG9wdGlvbmFsKSBcbiAgICAgKiBAcGFyYW0gcGFzc3dvcmRDaGFuZ2VUeXBlIChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgdmFsaWRhdGVBY3RpdmF0aW9uKGFjdGl2YXRpb25Ub2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLCBwYXNzd29yZENoYW5nZVR5cGU6IFBhc3N3b3JkQ2hhbmdlVHlwZSB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3VzZXJzL3ZhbGlkYXRlLWFjdGl2YXRpb24/XCI7XG4gICAgICAgIGlmIChwYXNzd29yZENoYW5nZVR5cGUgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICdwYXNzd29yZENoYW5nZVR5cGUnIGNhbm5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgZWxzZSBpZiAocGFzc3dvcmRDaGFuZ2VUeXBlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB1cmxfICs9IFwicGFzc3dvcmRDaGFuZ2VUeXBlPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyBwYXNzd29yZENoYW5nZVR5cGUpICsgXCImXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY3RpdmF0aW9uVG9rZW5cIjogYWN0aXZhdGlvblRva2VuICE9PSB1bmRlZmluZWQgJiYgYWN0aXZhdGlvblRva2VuICE9PSBudWxsID8gXCJcIiArIGFjdGl2YXRpb25Ub2tlbiA6IFwiXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NWYWxpZGF0ZUFjdGl2YXRpb24ocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZhbGlkYXRlQWN0aXZhdGlvbihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzVmFsaWRhdGVBY3RpdmF0aW9uKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGJvZHkgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBhdXRoZW50aWNhdGVNb2JpbGUoYm9keTogQXV0aGVudGljYXRlUmVxdWVzdER0byB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8SW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvYXV0aGVudGljYXRlLW1vYmlsZVwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgYm9keTogY29udGVudF8sXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzQXV0aGVudGljYXRlTW9iaWxlKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBdXRoZW50aWNhdGVNb2JpbGUocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NBdXRoZW50aWNhdGVNb2JpbGUocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMTogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDAxID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDEgPSBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTQwMSk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJVbmF1dGhvcml6ZWRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDAxKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8SW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib2R5IChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgbXVsdGlUZW5hbnRzQXV0aGVudGljYXRlKGJvZHk6IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3VzZXJzL211bHRpLXRlbmFudHMtYXV0aGVudGljYXRlXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NNdWx0aVRlbmFudHNBdXRoZW50aWNhdGUocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc011bHRpVGVuYW50c0F1dGhlbnRpY2F0ZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc011bHRpVGVuYW50c0F1dGhlbnRpY2F0ZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDAxOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDEgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwMSA9IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhNDAxKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIlVuYXV0aG9yaXplZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDEpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGJvZHkgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICB2ZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25Mb2dpbihib2R5OiBWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8gfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvdmVyaWZ5LTJmYS1hdXRoLWxvZ2luXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25Mb2dpbihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uTG9naW4ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uTG9naW4ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDE6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwMSA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDAxID0gVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhNDAxKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIlVuYXV0aG9yaXplZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDEpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm9keSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIHZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbihib2R5OiBWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8gfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvdmVyaWZ5LTJmYS1hdXRoXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb24ocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb24ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDE6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwMSA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDAxID0gVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhNDAxKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIlVuYXV0aG9yaXplZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDEpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBlbmFibGUyRmFjdG9yQXV0aEZvclVzZXIodXNlcklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMve3VzZXJJZH0vZW5hYmxlLTJmYVwiO1xuICAgICAgICBpZiAodXNlcklkID09PSB1bmRlZmluZWQgfHwgdXNlcklkID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAndXNlcklkJyBtdXN0IGJlIGRlZmluZWQuXCIpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKFwie3VzZXJJZH1cIiwgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyB1c2VySWQpKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwdXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRW5hYmxlMkZhY3RvckF1dGhGb3JVc2VyKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NFbmFibGUyRmFjdG9yQXV0aEZvclVzZXIocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzRW5hYmxlMkZhY3RvckF1dGhGb3JVc2VyKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZGlzYWJsZTJGYWN0b3JBdXRoRm9yVXNlcih1c2VySWQ6IG51bWJlcik6IE9ic2VydmFibGU8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi91c2Vycy97dXNlcklkfS9kaXNhYmxlLTJmYVwiO1xuICAgICAgICBpZiAodXNlcklkID09PSB1bmRlZmluZWQgfHwgdXNlcklkID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAndXNlcklkJyBtdXN0IGJlIGRlZmluZWQuXCIpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKFwie3VzZXJJZH1cIiwgZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIgKyB1c2VySWQpKTtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwdXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGlzYWJsZTJGYWN0b3JBdXRoRm9yVXNlcihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGlzYWJsZTJGYWN0b3JBdXRoRm9yVXNlcihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NEaXNhYmxlMkZhY3RvckF1dGhGb3JVc2VyKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGJvZHkgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBvcGVuSWRBdXRoZW50aWNhdGUoYm9keTogQXV0aGVudGljYXRlV2ViU3NvUmVxdWVzdER0byB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi91c2Vycy9vaWRjLWF1dGhcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb25cIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09wZW5JZEF1dGhlbnRpY2F0ZShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzT3BlbklkQXV0aGVudGljYXRlKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc09wZW5JZEF1dGhlbnRpY2F0ZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAyKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDI6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMiA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAyID0gQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAyKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMTogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDAxID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDEgPSBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTQwMSk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJVbmF1dGhvcml6ZWRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDAxKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbklkZW50aXR5U2VydmljZVByb3h5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBnZXRPbmxpbmVWYWxpZGF0b3JDb250ZXh0KCk6IE9ic2VydmFibGU8T25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3ZhbGlkYXRpb24vb25saW5lLXZhbGlkYXRvci1jb250ZXh0XCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldE9ubGluZVZhbGlkYXRvckNvbnRleHQocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldE9ubGluZVZhbGlkYXRvckNvbnRleHQocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0dldE9ubGluZVZhbGlkYXRvckNvbnRleHQocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8T25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3RpdmF0ZVJlc3BvbnNlRHRvIGltcGxlbWVudHMgSUFjdGl2YXRlUmVzcG9uc2VEdG8ge1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZmFTZXR1cDogVGZhU2V0dXBEdG87XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUFjdGl2YXRlUmVzcG9uc2VEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMudGZhU2V0dXAgPSBfZGF0YVtcInRmYVNldHVwXCJdID8gVGZhU2V0dXBEdG8uZnJvbUpTKF9kYXRhW1widGZhU2V0dXBcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEFjdGl2YXRlUmVzcG9uc2VEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFjdGl2YXRlUmVzcG9uc2VEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJ0ZmFTZXR1cFwiXSA9IHRoaXMudGZhU2V0dXAgPyB0aGlzLnRmYVNldHVwLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEFjdGl2YXRlUmVzcG9uc2VEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBY3RpdmF0ZVJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQWN0aXZhdGVSZXNwb25zZUR0byB7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRmYVNldHVwOiBUZmFTZXR1cER0bztcbn1cblxuZXhwb3J0IGNsYXNzIEFwcENvbmZpZ3VyYXRpb25EdG8gaW1wbGVtZW50cyBJQXBwQ29uZmlndXJhdGlvbkR0byB7XG4gICAgbmV3RWRnZUZsYWc6IGJvb2xlYW47XG4gICAgbGF0ZXN0RWRnZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBhbmFseXRpY3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGZlZWRiYWNrVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwbWw6IG51bWJlcjtcbiAgICBtaW5pbXVtU3VwcG9ydGVkU3BhcmtBcGlTZXJ2aWNlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIG1pbmltdW1Db21wYXRpYmxlU3BhcmtBcGlTZXJ2aWNlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBcHBDb25maWd1cmF0aW9uRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5uZXdFZGdlRmxhZyA9IF9kYXRhW1wibmV3RWRnZUZsYWdcIl07XG4gICAgICAgICAgICB0aGlzLmxhdGVzdEVkZ2VWZXJzaW9uID0gX2RhdGFbXCJsYXRlc3RFZGdlVmVyc2lvblwiXTtcbiAgICAgICAgICAgIHRoaXMuYW5hbHl0aWNzVG9rZW4gPSBfZGF0YVtcImFuYWx5dGljc1Rva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5mZWVkYmFja1Rva2VuID0gX2RhdGFbXCJmZWVkYmFja1Rva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5wbWwgPSBfZGF0YVtcInBtbFwiXTtcbiAgICAgICAgICAgIHRoaXMubWluaW11bVN1cHBvcnRlZFNwYXJrQXBpU2VydmljZVZlcnNpb24gPSBfZGF0YVtcIm1pbmltdW1TdXBwb3J0ZWRTcGFya0FwaVNlcnZpY2VWZXJzaW9uXCJdO1xuICAgICAgICAgICAgdGhpcy5taW5pbXVtQ29tcGF0aWJsZVNwYXJrQXBpU2VydmljZVZlcnNpb24gPSBfZGF0YVtcIm1pbmltdW1Db21wYXRpYmxlU3BhcmtBcGlTZXJ2aWNlVmVyc2lvblwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXBwQ29uZmlndXJhdGlvbkR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXBwQ29uZmlndXJhdGlvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wibmV3RWRnZUZsYWdcIl0gPSB0aGlzLm5ld0VkZ2VGbGFnO1xuICAgICAgICBkYXRhW1wibGF0ZXN0RWRnZVZlcnNpb25cIl0gPSB0aGlzLmxhdGVzdEVkZ2VWZXJzaW9uO1xuICAgICAgICBkYXRhW1wiYW5hbHl0aWNzVG9rZW5cIl0gPSB0aGlzLmFuYWx5dGljc1Rva2VuO1xuICAgICAgICBkYXRhW1wiZmVlZGJhY2tUb2tlblwiXSA9IHRoaXMuZmVlZGJhY2tUb2tlbjtcbiAgICAgICAgZGF0YVtcInBtbFwiXSA9IHRoaXMucG1sO1xuICAgICAgICBkYXRhW1wibWluaW11bVN1cHBvcnRlZFNwYXJrQXBpU2VydmljZVZlcnNpb25cIl0gPSB0aGlzLm1pbmltdW1TdXBwb3J0ZWRTcGFya0FwaVNlcnZpY2VWZXJzaW9uO1xuICAgICAgICBkYXRhW1wibWluaW11bUNvbXBhdGlibGVTcGFya0FwaVNlcnZpY2VWZXJzaW9uXCJdID0gdGhpcy5taW5pbXVtQ29tcGF0aWJsZVNwYXJrQXBpU2VydmljZVZlcnNpb247XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEFwcENvbmZpZ3VyYXRpb25EdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBcHBDb25maWd1cmF0aW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXBwQ29uZmlndXJhdGlvbkR0byB7XG4gICAgbmV3RWRnZUZsYWc6IGJvb2xlYW47XG4gICAgbGF0ZXN0RWRnZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBhbmFseXRpY3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGZlZWRiYWNrVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwbWw6IG51bWJlcjtcbiAgICBtaW5pbXVtU3VwcG9ydGVkU3BhcmtBcGlTZXJ2aWNlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIG1pbmltdW1Db21wYXRpYmxlU3BhcmtBcGlTZXJ2aWNlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBBcHBDb25maWd1cmF0aW9uRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBBcHBDb25maWd1cmF0aW9uRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXBwQ29uZmlndXJhdGlvbkR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBBcHBNb2R1bGUge1xuICAgIENjID0gMCxcbiAgICBNYW5hZ2VtZW50ID0gMSxcbiAgICBTZXR0aW5ncyA9IDIsXG4gICAgVmFsaWRhdGlvbiA9IDMsXG4gICAgR3Vlc3RzID0gNCxcbiAgICBSZXBvcnRzID0gNSxcbiAgICBNb250aGxpZXMgPSA2LFxuICAgIEJhY2tvZmZpY2UgPSA3LFxuICAgIFBpID0gOCxcbiAgICBBY2NvdW50cyA9IDksXG4gICAgTG90Q29uZmlndXJhdGlvbiA9IDEwLFxuICAgIEVDb21tZXJjZUJhY2tvZmZpY2UgPSAxMSxcbiAgICBTY2FuMlBheSA9IDEyLFxufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8gaW1wbGVtZW50cyBJQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZUJhY2tvZmZpY2VTc29SZXF1ZXN0RHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5jb2RlID0gX2RhdGFbXCJjb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy50ZW5hbnROYW1lID0gX2RhdGFbXCJ0ZW5hbnROYW1lXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVCYWNrb2ZmaWNlU3NvUmVxdWVzdER0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImNvZGVcIl0gPSB0aGlzLmNvZGU7XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnROYW1lXCJdID0gdGhpcy50ZW5hbnROYW1lO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVCYWNrb2ZmaWNlU3NvUmVxdWVzdER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZUJhY2tvZmZpY2VTc29SZXF1ZXN0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8ge1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGVtcG9yYXJ5QmxvY2tlZFRpbWU6IG51bWJlcjtcbiAgICB0ZW5hbnQ6IFRlbmFudER0bztcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBfZGF0YVtcImFjY2Vzc1Rva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy50ZW1wb3JhcnlCbG9ja2VkVGltZSA9IF9kYXRhW1widGVtcG9yYXJ5QmxvY2tlZFRpbWVcIl07XG4gICAgICAgICAgICB0aGlzLnRlbmFudCA9IF9kYXRhW1widGVuYW50XCJdID8gVGVuYW50RHRvLmZyb21KUyhfZGF0YVtcInRlbmFudFwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiYWNjZXNzVG9rZW5cIl0gPSB0aGlzLmFjY2Vzc1Rva2VuO1xuICAgICAgICBkYXRhW1widGVtcG9yYXJ5QmxvY2tlZFRpbWVcIl0gPSB0aGlzLnRlbXBvcmFyeUJsb2NrZWRUaW1lO1xuICAgICAgICBkYXRhW1widGVuYW50XCJdID0gdGhpcy50ZW5hbnQgPyB0aGlzLnRlbmFudC50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8ge1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGVtcG9yYXJ5QmxvY2tlZFRpbWU6IG51bWJlcjtcbiAgICB0ZW5hbnQ6IFRlbmFudER0bztcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gaW1wbGVtZW50cyBJQXV0aGVudGljYXRlUmVxdWVzdER0byB7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBwYXNzd29yZDogc3RyaW5nO1xuICAgIHRlbmFudElkOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgdGVuYW50TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBdXRoZW50aWNhdGVSZXF1ZXN0RHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy51c2VybmFtZSA9IF9kYXRhW1widXNlcm5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnBhc3N3b3JkID0gX2RhdGFbXCJwYXNzd29yZFwiXTtcbiAgICAgICAgICAgIHRoaXMudGVuYW50SWQgPSBfZGF0YVtcInRlbmFudElkXCJdO1xuICAgICAgICAgICAgdGhpcy50ZW5hbnROYW1lID0gX2RhdGFbXCJ0ZW5hbnROYW1lXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJ1c2VybmFtZVwiXSA9IHRoaXMudXNlcm5hbWU7XG4gICAgICAgIGRhdGFbXCJwYXNzd29yZFwiXSA9IHRoaXMucGFzc3dvcmQ7XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnRJZFwiXSA9IHRoaXMudGVuYW50SWQ7XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnROYW1lXCJdID0gdGhpcy50ZW5hbnROYW1lO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVxdWVzdER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZVJlcXVlc3REdG8ge1xuICAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICB0ZW5hbnRJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIHRlbmFudE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvIHtcbiAgICB1c2VySWQ6IG51bWJlcjtcbiAgICBmaXJzdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsYXN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVzZXJuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdXNlclN0YXR1czogVXNlclN0YXR1cztcbiAgICBwYXNzd29yZEV4cGlyYXRpb246IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgbW9kdWxlczogQXV0aGVudGljYXRlVXNlck1vZHVsZUR0b1tdIHwgdW5kZWZpbmVkO1xuICAgIGRlZmF1bHRNb2R1bGU6IEFwcE1vZHVsZTtcbiAgICB0aGlyZFBhcnR5VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZnJlc2hJbnRlcnZhbDogbnVtYmVyO1xuICAgIGV4cGlyYXRpb246IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc2V0dGluZ3M6IFNwYXJrU2V0dGluZ3NEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnQ6IFRlbmFudER0bztcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdXNlcklzVGVtcG9yYXJ5QmxvY2tlZDogYm9vbGVhbjtcbiAgICBwYXNzd29yZEV4cGlyYXRpb25TdGF0ZTogUGFzc3dvcmRFeHBpcmF0aW9uU3RhdGU7XG4gICAgZGF5c1RvRXhwaXJlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgdHdvRmFjdG9yQXV0aGVudGljYXRpb246IGJvb2xlYW47XG4gICAgdHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG86IFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvO1xuICAgIHNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvOiBTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bztcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJJZCA9IF9kYXRhW1widXNlcklkXCJdO1xuICAgICAgICAgICAgdGhpcy5maXJzdE5hbWUgPSBfZGF0YVtcImZpcnN0TmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMubGFzdE5hbWUgPSBfZGF0YVtcImxhc3ROYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy51c2VybmFtZSA9IF9kYXRhW1widXNlcm5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnVzZXJTdGF0dXMgPSBfZGF0YVtcInVzZXJTdGF0dXNcIl07XG4gICAgICAgICAgICB0aGlzLnBhc3N3b3JkRXhwaXJhdGlvbiA9IF9kYXRhW1wicGFzc3dvcmRFeHBpcmF0aW9uXCJdID8gbW9tZW50KF9kYXRhW1wicGFzc3dvcmRFeHBpcmF0aW9uXCJdLnRvU3RyaW5nKCkpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcIm1vZHVsZXNcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJtb2R1bGVzXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXMucHVzaChBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvLmZyb21KUyhpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRNb2R1bGUgPSBfZGF0YVtcImRlZmF1bHRNb2R1bGVcIl07XG4gICAgICAgICAgICB0aGlzLnRoaXJkUGFydHlUb2tlbiA9IF9kYXRhW1widGhpcmRQYXJ0eVRva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IF9kYXRhW1wiYWNjZXNzVG9rZW5cIl07XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IF9kYXRhW1wicmVmcmVzaFRva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoSW50ZXJ2YWwgPSBfZGF0YVtcInJlZnJlc2hJbnRlcnZhbFwiXTtcbiAgICAgICAgICAgIHRoaXMuZXhwaXJhdGlvbiA9IF9kYXRhW1wiZXhwaXJhdGlvblwiXSA/IG1vbWVudChfZGF0YVtcImV4cGlyYXRpb25cIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wic2V0dGluZ3NcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncyA9IFtdIGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIF9kYXRhW1wic2V0dGluZ3NcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MucHVzaChTcGFya1NldHRpbmdzRHRvLmZyb21KUyhpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRlbmFudCA9IF9kYXRhW1widGVuYW50XCJdID8gVGVuYW50RHRvLmZyb21KUyhfZGF0YVtcInRlbmFudFwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBfZGF0YVtcIm1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLnVzZXJJc1RlbXBvcmFyeUJsb2NrZWQgPSBfZGF0YVtcInVzZXJJc1RlbXBvcmFyeUJsb2NrZWRcIl07XG4gICAgICAgICAgICB0aGlzLnBhc3N3b3JkRXhwaXJhdGlvblN0YXRlID0gX2RhdGFbXCJwYXNzd29yZEV4cGlyYXRpb25TdGF0ZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF5c1RvRXhwaXJlID0gX2RhdGFbXCJkYXlzVG9FeHBpcmVcIl07XG4gICAgICAgICAgICB0aGlzLnR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uID0gX2RhdGFbXCJ0d29GYWN0b3JBdXRoZW50aWNhdGlvblwiXTtcbiAgICAgICAgICAgIHRoaXMudHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8gPSBfZGF0YVtcInR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvXCJdID8gVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8uZnJvbUpTKF9kYXRhW1widHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG9cIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvID0gX2RhdGFbXCJzaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0b1wiXSA/IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvLmZyb21KUyhfZGF0YVtcInNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVzcG9uc2VEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcInVzZXJJZFwiXSA9IHRoaXMudXNlcklkO1xuICAgICAgICBkYXRhW1wiZmlyc3ROYW1lXCJdID0gdGhpcy5maXJzdE5hbWU7XG4gICAgICAgIGRhdGFbXCJsYXN0TmFtZVwiXSA9IHRoaXMubGFzdE5hbWU7XG4gICAgICAgIGRhdGFbXCJ1c2VybmFtZVwiXSA9IHRoaXMudXNlcm5hbWU7XG4gICAgICAgIGRhdGFbXCJ1c2VyU3RhdHVzXCJdID0gdGhpcy51c2VyU3RhdHVzO1xuICAgICAgICBkYXRhW1wicGFzc3dvcmRFeHBpcmF0aW9uXCJdID0gdGhpcy5wYXNzd29yZEV4cGlyYXRpb24gPyB0aGlzLnBhc3N3b3JkRXhwaXJhdGlvbi50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMubW9kdWxlcykpIHtcbiAgICAgICAgICAgIGRhdGFbXCJtb2R1bGVzXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMubW9kdWxlcylcbiAgICAgICAgICAgICAgICBkYXRhW1wibW9kdWxlc1wiXS5wdXNoKGl0ZW0gPyBpdGVtLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJkZWZhdWx0TW9kdWxlXCJdID0gdGhpcy5kZWZhdWx0TW9kdWxlO1xuICAgICAgICBkYXRhW1widGhpcmRQYXJ0eVRva2VuXCJdID0gdGhpcy50aGlyZFBhcnR5VG9rZW47XG4gICAgICAgIGRhdGFbXCJhY2Nlc3NUb2tlblwiXSA9IHRoaXMuYWNjZXNzVG9rZW47XG4gICAgICAgIGRhdGFbXCJyZWZyZXNoVG9rZW5cIl0gPSB0aGlzLnJlZnJlc2hUb2tlbjtcbiAgICAgICAgZGF0YVtcInJlZnJlc2hJbnRlcnZhbFwiXSA9IHRoaXMucmVmcmVzaEludGVydmFsO1xuICAgICAgICBkYXRhW1wiZXhwaXJhdGlvblwiXSA9IHRoaXMuZXhwaXJhdGlvbiA/IHRoaXMuZXhwaXJhdGlvbi50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuc2V0dGluZ3MpKSB7XG4gICAgICAgICAgICBkYXRhW1wic2V0dGluZ3NcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5zZXR0aW5ncylcbiAgICAgICAgICAgICAgICBkYXRhW1wic2V0dGluZ3NcIl0ucHVzaChpdGVtID8gaXRlbS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW1widGVuYW50XCJdID0gdGhpcy50ZW5hbnQgPyB0aGlzLnRlbmFudC50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJtZXNzYWdlXCJdID0gdGhpcy5tZXNzYWdlO1xuICAgICAgICBkYXRhW1widXNlcklzVGVtcG9yYXJ5QmxvY2tlZFwiXSA9IHRoaXMudXNlcklzVGVtcG9yYXJ5QmxvY2tlZDtcbiAgICAgICAgZGF0YVtcInBhc3N3b3JkRXhwaXJhdGlvblN0YXRlXCJdID0gdGhpcy5wYXNzd29yZEV4cGlyYXRpb25TdGF0ZTtcbiAgICAgICAgZGF0YVtcImRheXNUb0V4cGlyZVwiXSA9IHRoaXMuZGF5c1RvRXhwaXJlO1xuICAgICAgICBkYXRhW1widHdvRmFjdG9yQXV0aGVudGljYXRpb25cIl0gPSB0aGlzLnR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uO1xuICAgICAgICBkYXRhW1widHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG9cIl0gPSB0aGlzLnR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvID8gdGhpcy50d29GYWN0b3JBdXRoZW50aWNhdGlvbkR0by50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG9cIl0gPSB0aGlzLnNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvID8gdGhpcy5zaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0by50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG8ge1xuICAgIHVzZXJJZDogbnVtYmVyO1xuICAgIGZpcnN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxhc3ROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdXNlcm5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VyU3RhdHVzOiBVc2VyU3RhdHVzO1xuICAgIHBhc3N3b3JkRXhwaXJhdGlvbjogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBtb2R1bGVzOiBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgZGVmYXVsdE1vZHVsZTogQXBwTW9kdWxlO1xuICAgIHRoaXJkUGFydHlUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaEludGVydmFsOiBudW1iZXI7XG4gICAgZXhwaXJhdGlvbjogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzZXR0aW5nczogU3BhcmtTZXR0aW5nc0R0b1tdIHwgdW5kZWZpbmVkO1xuICAgIHRlbmFudDogVGVuYW50RHRvO1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VySXNUZW1wb3JhcnlCbG9ja2VkOiBib29sZWFuO1xuICAgIHBhc3N3b3JkRXhwaXJhdGlvblN0YXRlOiBQYXNzd29yZEV4cGlyYXRpb25TdGF0ZTtcbiAgICBkYXlzVG9FeHBpcmU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICB0d29GYWN0b3JBdXRoZW50aWNhdGlvbjogYm9vbGVhbjtcbiAgICB0d29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bzogVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG87XG4gICAgc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG86IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gQXV0aGVudGljYXRlUmVzcG9uc2VEdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b1tdIHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wiZGF0YVwiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcImRhdGFcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvLmZyb21KUyhpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YSkpIHtcbiAgICAgICAgICAgIGRhdGFbXCJkYXRhXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuZGF0YSlcbiAgICAgICAgICAgICAgICBkYXRhW1wiZGF0YVwiXS5wdXNoKGl0ZW0gPyBpdGVtLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8gaW1wbGVtZW50cyBJQXV0aGVudGljYXRlVXNlck1vZHVsZUR0byB7XG4gICAgbW9kdWxlOiBBcHBNb2R1bGU7XG4gICAgc3ViTW9kdWxlOiBTdWJNb2R1bGVbXSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlVXNlck1vZHVsZUR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubW9kdWxlID0gX2RhdGFbXCJtb2R1bGVcIl07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcInN1Yk1vZHVsZVwiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Yk1vZHVsZSA9IFtdIGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIF9kYXRhW1wic3ViTW9kdWxlXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Yk1vZHVsZS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJtb2R1bGVcIl0gPSB0aGlzLm1vZHVsZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5zdWJNb2R1bGUpKSB7XG4gICAgICAgICAgICBkYXRhW1wic3ViTW9kdWxlXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuc3ViTW9kdWxlKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJzdWJNb2R1bGVcIl0ucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlVXNlck1vZHVsZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8ge1xuICAgIG1vZHVsZTogQXBwTW9kdWxlO1xuICAgIHN1Yk1vZHVsZTogU3ViTW9kdWxlW10gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVXZWJTc29SZXF1ZXN0RHRvIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUgPSBfZGF0YVtcImNvZGVcIl07XG4gICAgICAgICAgICB0aGlzLnRlbmFudE5hbWUgPSBfZGF0YVtcInRlbmFudE5hbWVcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImNvZGVcIl0gPSB0aGlzLmNvZGU7XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnROYW1lXCJdID0gdGhpcy50ZW5hbnROYW1lO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVXZWJTc29SZXF1ZXN0RHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlV2ViU3NvUmVxdWVzdER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBGYWNpbGl0eUJhc2ljRHRvIGltcGxlbWVudHMgSUZhY2lsaXR5QmFzaWNEdG8ge1xuICAgIGlkOiBudW1iZXI7XG4gICAgY2xvdWRJZDogbnVtYmVyO1xuICAgIGNsb3VkUGFyZW50SWQ6IG51bWJlcjtcbiAgICBpc0Jhc2ljOiBib29sZWFuO1xuICAgIG11bHRpUGFya1BhcmVudElEOiBudW1iZXI7XG4gICAgc2l0ZUNvZGU6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGFyZW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgaXNNdWx0aVBhcms6IG51bWJlcjtcbiAgICB0aW1lRHJpZnQ6IG51bWJlcjtcbiAgICBzZXJ2ZXJEYXRlVGltZTogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzcFRpbWVab25lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdG90YWxTcGFjZTogbnVtYmVyO1xuICAgIGlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNDcmVkaXRTZXJ2ZXJFbmFibGVkOiBib29sZWFuO1xuICAgIGlzTFBSQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzTFBSRW5hYmxlZDogYm9vbGVhbjtcbiAgICBpc1RpY2tldExlc3NFbmFibGVkOiBib29sZWFuO1xuICAgIGxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBjcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgbWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgYWN0aXZlOiBudW1iZXI7XG4gICAgcGVybWlzc2lvbnM6IHsgW2tleTogc3RyaW5nXTogUGVybWlzc2lvbkR0bzsgfSB8IHVuZGVmaW5lZDtcbiAgICBmZWF0dXJlUGVybWlzc2lvbnM6IFBlcm1pc3Npb25UeXBlW10gfCB1bmRlZmluZWQ7XG4gICAgZXh0ZXJuYWxJZGVudGlmaWVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUZhY2lsaXR5QmFzaWNEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gX2RhdGFbXCJpZFwiXTtcbiAgICAgICAgICAgIHRoaXMuY2xvdWRJZCA9IF9kYXRhW1wiY2xvdWRJZFwiXTtcbiAgICAgICAgICAgIHRoaXMuY2xvdWRQYXJlbnRJZCA9IF9kYXRhW1wiY2xvdWRQYXJlbnRJZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNCYXNpYyA9IF9kYXRhW1wiaXNCYXNpY1wiXTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlQYXJrUGFyZW50SUQgPSBfZGF0YVtcIm11bHRpUGFya1BhcmVudElEXCJdO1xuICAgICAgICAgICAgdGhpcy5zaXRlQ29kZSA9IF9kYXRhW1wic2l0ZUNvZGVcIl07XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBfZGF0YVtcIm5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnBhcmVudCA9IF9kYXRhW1wicGFyZW50XCJdO1xuICAgICAgICAgICAgdGhpcy5pc011bHRpUGFyayA9IF9kYXRhW1wiaXNNdWx0aVBhcmtcIl07XG4gICAgICAgICAgICB0aGlzLnRpbWVEcmlmdCA9IF9kYXRhW1widGltZURyaWZ0XCJdO1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJEYXRlVGltZSA9IF9kYXRhW1wic2VydmVyRGF0ZVRpbWVcIl0gPyBtb21lbnQoX2RhdGFbXCJzZXJ2ZXJEYXRlVGltZVwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zcFRpbWVab25lID0gX2RhdGFbXCJzcFRpbWVab25lXCJdO1xuICAgICAgICAgICAgdGhpcy50b3RhbFNwYWNlID0gX2RhdGFbXCJ0b3RhbFNwYWNlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkID0gX2RhdGFbXCJpc01haW5Db250cm9sbGVyQ29ubmVjdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZCA9IF9kYXRhW1wiaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWRcIl07XG4gICAgICAgICAgICB0aGlzLmlzQ3JlZGl0U2VydmVyRW5hYmxlZCA9IF9kYXRhW1wiaXNDcmVkaXRTZXJ2ZXJFbmFibGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc0xQUkNvbm5lY3RlZCA9IF9kYXRhW1wiaXNMUFJDb25uZWN0ZWRcIl07XG4gICAgICAgICAgICB0aGlzLmlzTFBSRW5hYmxlZCA9IF9kYXRhW1wiaXNMUFJFbmFibGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1RpY2tldExlc3NFbmFibGVkID0gX2RhdGFbXCJpc1RpY2tldExlc3NFbmFibGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBfZGF0YVtcImxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcImxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBfZGF0YVtcImNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcImNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IF9kYXRhW1wibWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPyBtb21lbnQoX2RhdGFbXCJtYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBfZGF0YVtcImFjdGl2ZVwiXTtcbiAgICAgICAgICAgIGlmIChfZGF0YVtcInBlcm1pc3Npb25zXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gX2RhdGFbXCJwZXJtaXNzaW9uc1wiXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGFbXCJwZXJtaXNzaW9uc1wiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5wZXJtaXNzaW9ucylba2V5XSA9IF9kYXRhW1wicGVybWlzc2lvbnNcIl1ba2V5XSA/IFBlcm1pc3Npb25EdG8uZnJvbUpTKF9kYXRhW1wicGVybWlzc2lvbnNcIl1ba2V5XSkgOiBuZXcgUGVybWlzc2lvbkR0bygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wiZmVhdHVyZVBlcm1pc3Npb25zXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZVBlcm1pc3Npb25zID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJmZWF0dXJlUGVybWlzc2lvbnNcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZVBlcm1pc3Npb25zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmV4dGVybmFsSWRlbnRpZmllciA9IF9kYXRhW1wiZXh0ZXJuYWxJZGVudGlmaWVyXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBGYWNpbGl0eUJhc2ljRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBGYWNpbGl0eUJhc2ljRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpZFwiXSA9IHRoaXMuaWQ7XG4gICAgICAgIGRhdGFbXCJjbG91ZElkXCJdID0gdGhpcy5jbG91ZElkO1xuICAgICAgICBkYXRhW1wiY2xvdWRQYXJlbnRJZFwiXSA9IHRoaXMuY2xvdWRQYXJlbnRJZDtcbiAgICAgICAgZGF0YVtcImlzQmFzaWNcIl0gPSB0aGlzLmlzQmFzaWM7XG4gICAgICAgIGRhdGFbXCJtdWx0aVBhcmtQYXJlbnRJRFwiXSA9IHRoaXMubXVsdGlQYXJrUGFyZW50SUQ7XG4gICAgICAgIGRhdGFbXCJzaXRlQ29kZVwiXSA9IHRoaXMuc2l0ZUNvZGU7XG4gICAgICAgIGRhdGFbXCJuYW1lXCJdID0gdGhpcy5uYW1lO1xuICAgICAgICBkYXRhW1wicGFyZW50XCJdID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGRhdGFbXCJpc011bHRpUGFya1wiXSA9IHRoaXMuaXNNdWx0aVBhcms7XG4gICAgICAgIGRhdGFbXCJ0aW1lRHJpZnRcIl0gPSB0aGlzLnRpbWVEcmlmdDtcbiAgICAgICAgZGF0YVtcInNlcnZlckRhdGVUaW1lXCJdID0gdGhpcy5zZXJ2ZXJEYXRlVGltZSA/IHRoaXMuc2VydmVyRGF0ZVRpbWUudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3BUaW1lWm9uZVwiXSA9IHRoaXMuc3BUaW1lWm9uZTtcbiAgICAgICAgZGF0YVtcInRvdGFsU3BhY2VcIl0gPSB0aGlzLnRvdGFsU3BhY2U7XG4gICAgICAgIGRhdGFbXCJpc01haW5Db250cm9sbGVyQ29ubmVjdGVkXCJdID0gdGhpcy5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWRcIl0gPSB0aGlzLmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNDcmVkaXRTZXJ2ZXJFbmFibGVkXCJdID0gdGhpcy5pc0NyZWRpdFNlcnZlckVuYWJsZWQ7XG4gICAgICAgIGRhdGFbXCJpc0xQUkNvbm5lY3RlZFwiXSA9IHRoaXMuaXNMUFJDb25uZWN0ZWQ7XG4gICAgICAgIGRhdGFbXCJpc0xQUkVuYWJsZWRcIl0gPSB0aGlzLmlzTFBSRW5hYmxlZDtcbiAgICAgICAgZGF0YVtcImlzVGlja2V0TGVzc0VuYWJsZWRcIl0gPSB0aGlzLmlzVGlja2V0TGVzc0VuYWJsZWQ7XG4gICAgICAgIGRhdGFbXCJscHJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/IHRoaXMubHByRGlzY29ubmVjdGVkVGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcImNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA9IHRoaXMuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wibWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcC50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJhY3RpdmVcIl0gPSB0aGlzLmFjdGl2ZTtcbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGRhdGFbXCJwZXJtaXNzaW9uc1wiXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wicGVybWlzc2lvbnNcIl0pW2tleV0gPSB0aGlzLnBlcm1pc3Npb25zW2tleV0gPyB0aGlzLnBlcm1pc3Npb25zW2tleV0udG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZlYXR1cmVQZXJtaXNzaW9ucykpIHtcbiAgICAgICAgICAgIGRhdGFbXCJmZWF0dXJlUGVybWlzc2lvbnNcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5mZWF0dXJlUGVybWlzc2lvbnMpXG4gICAgICAgICAgICAgICAgZGF0YVtcImZlYXR1cmVQZXJtaXNzaW9uc1wiXS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJleHRlcm5hbElkZW50aWZpZXJcIl0gPSB0aGlzLmV4dGVybmFsSWRlbnRpZmllcjtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogRmFjaWxpdHlCYXNpY0R0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZhY2lsaXR5QmFzaWNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGYWNpbGl0eUJhc2ljRHRvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGNsb3VkSWQ6IG51bWJlcjtcbiAgICBjbG91ZFBhcmVudElkOiBudW1iZXI7XG4gICAgaXNCYXNpYzogYm9vbGVhbjtcbiAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVtYmVyO1xuICAgIHNpdGVDb2RlOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBhcmVudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGlzTXVsdGlQYXJrOiBudW1iZXI7XG4gICAgdGltZURyaWZ0OiBudW1iZXI7XG4gICAgc2VydmVyRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc3BUaW1lWm9uZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRvdGFsU3BhY2U6IG51bWJlcjtcbiAgICBpc01haW5Db250cm9sbGVyQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzQ3JlZGl0U2VydmVyRW5hYmxlZDogYm9vbGVhbjtcbiAgICBpc0xQUkNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc0xQUkVuYWJsZWQ6IGJvb2xlYW47XG4gICAgaXNUaWNrZXRMZXNzRW5hYmxlZDogYm9vbGVhbjtcbiAgICBscHJEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIG1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIGFjdGl2ZTogbnVtYmVyO1xuICAgIHBlcm1pc3Npb25zOiB7IFtrZXk6IHN0cmluZ106IFBlcm1pc3Npb25EdG87IH0gfCB1bmRlZmluZWQ7XG4gICAgZmVhdHVyZVBlcm1pc3Npb25zOiBQZXJtaXNzaW9uVHlwZVtdIHwgdW5kZWZpbmVkO1xuICAgIGV4dGVybmFsSWRlbnRpZmllcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcyB7XG4gICAgTWFudWFsbHlSdW5aID0gMSxcbiAgICBVcGRhdGVTZXR0aW5ncyA9IDIsXG4gICAgU2V0QWN0aXZlUmF0ZSA9IDMsXG4gICAgVXBkYXRlTUNEYXRlVGltZSA9IDQsXG4gICAgUnVuTWFjcm8gPSA1LFxuICAgIFRyYW5zbWl0U3BlY2lhbERheXMgPSA2LFxufVxuXG5leHBvcnQgY2xhc3MgRmFjaWxpdHlUcmVlRHRvIGltcGxlbWVudHMgSUZhY2lsaXR5VHJlZUR0byB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBjbG91ZElkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBhcmVudDogbnVtYmVyO1xuICAgIGd1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0eXBlOiBQYXJrQnJhbmNoVHlwZTtcbiAgICBzbWFydFBhcmtPcmlnaW5UeXBlOiBTbWFydFBhcmtUeXBlO1xuICAgIGxvY2FsSWQ6IG51bWJlcjtcbiAgICBjaGlsZHJlbjogRmFjaWxpdHlUcmVlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgYWN0aXZlOiBib29sZWFuO1xuICAgIGlzUmVnaXN0ZXJlZFRvU2NhblRvUGF5OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElGYWNpbGl0eVRyZWVEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gX2RhdGFbXCJpZFwiXTtcbiAgICAgICAgICAgIHRoaXMuY2xvdWRJZCA9IF9kYXRhW1wiY2xvdWRJZFwiXTtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50ID0gX2RhdGFbXCJwYXJlbnRcIl07XG4gICAgICAgICAgICB0aGlzLmd1aWQgPSBfZGF0YVtcImd1aWRcIl07XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBfZGF0YVtcInR5cGVcIl07XG4gICAgICAgICAgICB0aGlzLnNtYXJ0UGFya09yaWdpblR5cGUgPSBfZGF0YVtcInNtYXJ0UGFya09yaWdpblR5cGVcIl07XG4gICAgICAgICAgICB0aGlzLmxvY2FsSWQgPSBfZGF0YVtcImxvY2FsSWRcIl07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcImNoaWxkcmVuXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcImNoaWxkcmVuXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goRmFjaWxpdHlUcmVlRHRvLmZyb21KUyhpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IF9kYXRhW1wiYWN0aXZlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1JlZ2lzdGVyZWRUb1NjYW5Ub1BheSA9IF9kYXRhW1wiaXNSZWdpc3RlcmVkVG9TY2FuVG9QYXlcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEZhY2lsaXR5VHJlZUR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgRmFjaWxpdHlUcmVlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpZFwiXSA9IHRoaXMuaWQ7XG4gICAgICAgIGRhdGFbXCJjbG91ZElkXCJdID0gdGhpcy5jbG91ZElkO1xuICAgICAgICBkYXRhW1wibmFtZVwiXSA9IHRoaXMubmFtZTtcbiAgICAgICAgZGF0YVtcInBhcmVudFwiXSA9IHRoaXMucGFyZW50O1xuICAgICAgICBkYXRhW1wiZ3VpZFwiXSA9IHRoaXMuZ3VpZDtcbiAgICAgICAgZGF0YVtcInR5cGVcIl0gPSB0aGlzLnR5cGU7XG4gICAgICAgIGRhdGFbXCJzbWFydFBhcmtPcmlnaW5UeXBlXCJdID0gdGhpcy5zbWFydFBhcmtPcmlnaW5UeXBlO1xuICAgICAgICBkYXRhW1wibG9jYWxJZFwiXSA9IHRoaXMubG9jYWxJZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGRhdGFbXCJjaGlsZHJlblwiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJjaGlsZHJlblwiXS5wdXNoKGl0ZW0gPyBpdGVtLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJhY3RpdmVcIl0gPSB0aGlzLmFjdGl2ZTtcbiAgICAgICAgZGF0YVtcImlzUmVnaXN0ZXJlZFRvU2NhblRvUGF5XCJdID0gdGhpcy5pc1JlZ2lzdGVyZWRUb1NjYW5Ub1BheTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogRmFjaWxpdHlUcmVlRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgRmFjaWxpdHlUcmVlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRmFjaWxpdHlUcmVlRHRvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGNsb3VkSWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGFyZW50OiBudW1iZXI7XG4gICAgZ3VpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHR5cGU6IFBhcmtCcmFuY2hUeXBlO1xuICAgIHNtYXJ0UGFya09yaWdpblR5cGU6IFNtYXJ0UGFya1R5cGU7XG4gICAgbG9jYWxJZDogbnVtYmVyO1xuICAgIGNoaWxkcmVuOiBGYWNpbGl0eVRyZWVEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgaXNSZWdpc3RlcmVkVG9TY2FuVG9QYXk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJRmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogRmFjaWxpdHlUcmVlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJRmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcImRhdGFcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJkYXRhXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChGYWNpbGl0eVRyZWVEdG8uZnJvbUpTKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YSkpIHtcbiAgICAgICAgICAgIGRhdGFbXCJkYXRhXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuZGF0YSlcbiAgICAgICAgICAgICAgICBkYXRhW1wiZGF0YVwiXS5wdXNoKGl0ZW0gPyBpdGVtLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEZhY2lsaXR5VHJlZUR0b1tdIHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIEh0dHBTdGF0dXNDb2RlIHtcbiAgICBDb250aW51ZSA9IDEwMCxcbiAgICBTd2l0Y2hpbmdQcm90b2NvbHMgPSAxMDEsXG4gICAgUHJvY2Vzc2luZyA9IDEwMixcbiAgICBFYXJseUhpbnRzID0gMTAzLFxuICAgIE9LID0gMjAwLFxuICAgIENyZWF0ZWQgPSAyMDEsXG4gICAgQWNjZXB0ZWQgPSAyMDIsXG4gICAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uID0gMjAzLFxuICAgIE5vQ29udGVudCA9IDIwNCxcbiAgICBSZXNldENvbnRlbnQgPSAyMDUsXG4gICAgUGFydGlhbENvbnRlbnQgPSAyMDYsXG4gICAgTXVsdGlTdGF0dXMgPSAyMDcsXG4gICAgQWxyZWFkeVJlcG9ydGVkID0gMjA4LFxuICAgIElNVXNlZCA9IDIyNixcbiAgICBNdWx0aXBsZUNob2ljZXMgPSAzMDAsXG4gICAgQW1iaWd1b3VzID0gMzAxLFxuICAgIE1vdmVkUGVybWFuZW50bHkgPSAzMDIsXG4gICAgTW92ZWQgPSAzMDMsXG4gICAgRm91bmQgPSAzMDQsXG4gICAgUmVkaXJlY3QgPSAzMDUsXG4gICAgU2VlT3RoZXIgPSAzMDYsXG4gICAgUmVkaXJlY3RNZXRob2QgPSAzMDcsXG4gICAgTm90TW9kaWZpZWQgPSAzMDgsXG4gICAgVXNlUHJveHkgPSA0MDAsXG4gICAgVW51c2VkID0gNDAxLFxuICAgIFRlbXBvcmFyeVJlZGlyZWN0ID0gNDAyLFxuICAgIFJlZGlyZWN0S2VlcFZlcmIgPSA0MDMsXG4gICAgUGVybWFuZW50UmVkaXJlY3QgPSA0MDQsXG4gICAgQmFkUmVxdWVzdCA9IDQwNSxcbiAgICBVbmF1dGhvcml6ZWQgPSA0MDYsXG4gICAgUGF5bWVudFJlcXVpcmVkID0gNDA3LFxuICAgIEZvcmJpZGRlbiA9IDQwOCxcbiAgICBOb3RGb3VuZCA9IDQwOSxcbiAgICBNZXRob2ROb3RBbGxvd2VkID0gNDEwLFxuICAgIE5vdEFjY2VwdGFibGUgPSA0MTEsXG4gICAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkID0gNDEyLFxuICAgIFJlcXVlc3RUaW1lb3V0ID0gNDEzLFxuICAgIENvbmZsaWN0ID0gNDE0LFxuICAgIEdvbmUgPSA0MTUsXG4gICAgTGVuZ3RoUmVxdWlyZWQgPSA0MTYsXG4gICAgUHJlY29uZGl0aW9uRmFpbGVkID0gNDE3LFxuICAgIFJlcXVlc3RFbnRpdHlUb29MYXJnZSA9IDQyMSxcbiAgICBSZXF1ZXN0VXJpVG9vTG9uZyA9IDQyMixcbiAgICBVbnN1cHBvcnRlZE1lZGlhVHlwZSA9IDQyMyxcbiAgICBSZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlID0gNDI0LFxuICAgIEV4cGVjdGF0aW9uRmFpbGVkID0gNDI2LFxuICAgIE1pc2RpcmVjdGVkUmVxdWVzdCA9IDQyOCxcbiAgICBVbnByb2Nlc3NhYmxlRW50aXR5ID0gNDI5LFxuICAgIFVucHJvY2Vzc2FibGVDb250ZW50ID0gNDMxLFxuICAgIExvY2tlZCA9IDQ1MSxcbiAgICBGYWlsZWREZXBlbmRlbmN5ID0gNTAwLFxuICAgIFVwZ3JhZGVSZXF1aXJlZCA9IDUwMSxcbiAgICBQcmVjb25kaXRpb25SZXF1aXJlZCA9IDUwMixcbiAgICBUb29NYW55UmVxdWVzdHMgPSA1MDMsXG4gICAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlID0gNTA0LFxuICAgIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zID0gNTA1LFxuICAgIEludGVybmFsU2VydmVyRXJyb3IgPSA1MDYsXG4gICAgTm90SW1wbGVtZW50ZWQgPSA1MDcsXG4gICAgQmFkR2F0ZXdheSA9IDUwOCxcbiAgICBTZXJ2aWNlVW5hdmFpbGFibGUgPSA1MTAsXG4gICAgR2F0ZXdheVRpbWVvdXQgPSA1MTEsXG59XG5cbmV4cG9ydCBjbGFzcyBJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiB7IFtrZXk6IHN0cmluZ106IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvOyB9IHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIGlmIChfZGF0YVtcImRhdGFcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIF9kYXRhW1wiZGF0YVwiXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGFbXCJkYXRhXCJdLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLmRhdGEpW2tleV0gPSBfZGF0YVtcImRhdGFcIl1ba2V5XSA/IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl1ba2V5XSkgOiBuZXcgQXV0aGVudGljYXRlUmVzcG9uc2VEdG8oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGRhdGFbXCJkYXRhXCJdID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wiZGF0YVwiXSlba2V5XSA9IHRoaXMuZGF0YVtrZXldID8gdGhpcy5kYXRhW2tleV0udG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiB7IFtrZXk6IHN0cmluZ106IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvOyB9IHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dvRHRvIGltcGxlbWVudHMgSUxvZ29EdG8ge1xuICAgIGltYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUxvZ29EdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlID0gX2RhdGFbXCJpbWFnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogTG9nb0R0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgTG9nb0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiaW1hZ2VcIl0gPSB0aGlzLmltYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBMb2dvRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgTG9nb0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ29EdG8ge1xuICAgIGltYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IExvZ29EdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJTG9nb0R0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IExvZ29EdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgTG9nb0R0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTG9nb0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBMb2dvRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBPYmplY3RIdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSU9iamVjdEh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBhbnkgfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IE9iamVjdEh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE9iamVjdEh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YTtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE9iamVjdEh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElPYmplY3RIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogYW55IHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvIGltcGxlbWVudHMgSU9ubGluZVZhbGlkYXRvckNvbnRleHREdG8ge1xuICAgIGd1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwYXJrSWQ6IG51bWJlcjtcbiAgICBwYXJrTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbXBhbnlJZDogbnVtYmVyO1xuICAgIHN1YkNvbXBhbnlJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIHZhbGlkYXRpb25UeXBlSWQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJT25saW5lVmFsaWRhdG9yQ29udGV4dER0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZ3VpZCA9IF9kYXRhW1wiZ3VpZFwiXTtcbiAgICAgICAgICAgIHRoaXMucGFya0lkID0gX2RhdGFbXCJwYXJrSWRcIl07XG4gICAgICAgICAgICB0aGlzLnBhcmtOYW1lID0gX2RhdGFbXCJwYXJrTmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMuY29tcGFueUlkID0gX2RhdGFbXCJjb21wYW55SWRcIl07XG4gICAgICAgICAgICB0aGlzLnN1YkNvbXBhbnlJZCA9IF9kYXRhW1wic3ViQ29tcGFueUlkXCJdO1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uVHlwZUlkID0gX2RhdGFbXCJ2YWxpZGF0aW9uVHlwZUlkXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJndWlkXCJdID0gdGhpcy5ndWlkO1xuICAgICAgICBkYXRhW1wicGFya0lkXCJdID0gdGhpcy5wYXJrSWQ7XG4gICAgICAgIGRhdGFbXCJwYXJrTmFtZVwiXSA9IHRoaXMucGFya05hbWU7XG4gICAgICAgIGRhdGFbXCJjb21wYW55SWRcIl0gPSB0aGlzLmNvbXBhbnlJZDtcbiAgICAgICAgZGF0YVtcInN1YkNvbXBhbnlJZFwiXSA9IHRoaXMuc3ViQ29tcGFueUlkO1xuICAgICAgICBkYXRhW1widmFsaWRhdGlvblR5cGVJZFwiXSA9IHRoaXMudmFsaWRhdGlvblR5cGVJZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogT25saW5lVmFsaWRhdG9yQ29udGV4dER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvIHtcbiAgICBndWlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGFya0lkOiBudW1iZXI7XG4gICAgcGFya05hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjb21wYW55SWQ6IG51bWJlcjtcbiAgICBzdWJDb21wYW55SWQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICB2YWxpZGF0aW9uVHlwZUlkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE9ubGluZVZhbGlkYXRvckNvbnRleHREdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJT25saW5lVmFsaWRhdG9yQ29udGV4dER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBPbmxpbmVWYWxpZGF0b3JDb250ZXh0RHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIFBhcmtCcmFuY2hUeXBlIHtcbiAgICBQYXJrID0gMCxcbiAgICBHcm91cCA9IDEsXG59XG5cbmV4cG9ydCBlbnVtIFBhc3N3b3JkQ2hhbmdlVHlwZSB7XG4gICAgUmVnaXN0cmF0aW9uID0gMCxcbiAgICBGb3Jnb3QgPSAxLFxuICAgIEV4cGlyYXRpb24gPSAyLFxufVxuXG5leHBvcnQgZW51bSBQYXNzd29yZEV4cGlyYXRpb25TdGF0ZSB7XG4gICAgTm90RXhwaXJlZCA9IDEsXG4gICAgQWJvdXRUb0V4cGlyZSA9IDIsXG4gICAgRXhwaXJlZCA9IDMsXG59XG5cbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uRHRvIGltcGxlbWVudHMgSVBlcm1pc3Npb25EdG8ge1xuICAgIHR5cGU6IFBlcm1pc3Npb25UeXBlO1xuICAgIGdyb3VwOiBQZXJtaXNzaW9uR3JvdXA7XG4gICAgc2VydmljZTogUGVybWlzc2lvblNlcnZpY2U7XG4gICAgbW9kdWxlOiBBcHBNb2R1bGU7XG4gICAgc3ViTW9kdWxlOiBTdWJNb2R1bGU7XG4gICAgbWFpbjogYm9vbGVhbjtcbiAgICBkaXNwbGF5OiBib29sZWFuO1xuICAgIGNvbW1hbmQ6IFJlbW90ZUNvbW1hbmRUeXBlcztcbiAgICBmYWNpbGl0eUNvbW1hbmQ6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzO1xuICAgIGFjdGlvbjogUmVtb3RlQWN0aW9uVHlwZXM7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVBlcm1pc3Npb25EdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBfZGF0YVtcInR5cGVcIl07XG4gICAgICAgICAgICB0aGlzLmdyb3VwID0gX2RhdGFbXCJncm91cFwiXTtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZSA9IF9kYXRhW1wic2VydmljZVwiXTtcbiAgICAgICAgICAgIHRoaXMubW9kdWxlID0gX2RhdGFbXCJtb2R1bGVcIl07XG4gICAgICAgICAgICB0aGlzLnN1Yk1vZHVsZSA9IF9kYXRhW1wic3ViTW9kdWxlXCJdO1xuICAgICAgICAgICAgdGhpcy5tYWluID0gX2RhdGFbXCJtYWluXCJdO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ID0gX2RhdGFbXCJkaXNwbGF5XCJdO1xuICAgICAgICAgICAgdGhpcy5jb21tYW5kID0gX2RhdGFbXCJjb21tYW5kXCJdO1xuICAgICAgICAgICAgdGhpcy5mYWNpbGl0eUNvbW1hbmQgPSBfZGF0YVtcImZhY2lsaXR5Q29tbWFuZFwiXTtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uID0gX2RhdGFbXCJhY3Rpb25cIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFBlcm1pc3Npb25EdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFBlcm1pc3Npb25EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcInR5cGVcIl0gPSB0aGlzLnR5cGU7XG4gICAgICAgIGRhdGFbXCJncm91cFwiXSA9IHRoaXMuZ3JvdXA7XG4gICAgICAgIGRhdGFbXCJzZXJ2aWNlXCJdID0gdGhpcy5zZXJ2aWNlO1xuICAgICAgICBkYXRhW1wibW9kdWxlXCJdID0gdGhpcy5tb2R1bGU7XG4gICAgICAgIGRhdGFbXCJzdWJNb2R1bGVcIl0gPSB0aGlzLnN1Yk1vZHVsZTtcbiAgICAgICAgZGF0YVtcIm1haW5cIl0gPSB0aGlzLm1haW47XG4gICAgICAgIGRhdGFbXCJkaXNwbGF5XCJdID0gdGhpcy5kaXNwbGF5O1xuICAgICAgICBkYXRhW1wiY29tbWFuZFwiXSA9IHRoaXMuY29tbWFuZDtcbiAgICAgICAgZGF0YVtcImZhY2lsaXR5Q29tbWFuZFwiXSA9IHRoaXMuZmFjaWxpdHlDb21tYW5kO1xuICAgICAgICBkYXRhW1wiYWN0aW9uXCJdID0gdGhpcy5hY3Rpb247XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFBlcm1pc3Npb25EdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBQZXJtaXNzaW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUGVybWlzc2lvbkR0byB7XG4gICAgdHlwZTogUGVybWlzc2lvblR5cGU7XG4gICAgZ3JvdXA6IFBlcm1pc3Npb25Hcm91cDtcbiAgICBzZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZTtcbiAgICBtb2R1bGU6IEFwcE1vZHVsZTtcbiAgICBzdWJNb2R1bGU6IFN1Yk1vZHVsZTtcbiAgICBtYWluOiBib29sZWFuO1xuICAgIGRpc3BsYXk6IGJvb2xlYW47XG4gICAgY29tbWFuZDogUmVtb3RlQ29tbWFuZFR5cGVzO1xuICAgIGZhY2lsaXR5Q29tbWFuZDogRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXM7XG4gICAgYWN0aW9uOiBSZW1vdGVBY3Rpb25UeXBlcztcbn1cblxuZXhwb3J0IGVudW0gUGVybWlzc2lvbkdyb3VwIHtcbiAgICBOb25lID0gMCxcbiAgICBHZW5lcmFsUGVybWlzc2lvbnMgPSAxLFxuICAgIEFkdmFuY2VkT3B0aW9ucyA9IDIsXG4gICAgVGlja2V0UGVybWlzc2lvbnMgPSAzLFxuICAgIFBhcmtpbmdMb3RQZXJtaXNzaW9ucyA9IDQsXG59XG5cbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25TZXJ2aWNlIHtcbiAgICBDbG91ZCA9IDAsXG4gICAgU3BhcmtDb3JlID0gMSxcbiAgICBDbG91ZFNwYXJrQ29yZSA9IDIsXG4gICAgU21hcnRQYXJrID0gMyxcbn1cblxuZXhwb3J0IGVudW0gUGVybWlzc2lvblR5cGUge1xuICAgIENjTWFpbiA9IDAsXG4gICAgRGVwcmVjYXRlZEFkbWluTWFpbiA9IDEsXG4gICAgVW5sb2NrRG9vciA9IDIsXG4gICAgVmVuZEdhdGUgPSAzLFxuICAgIFZhbGlkYXRlID0gNCxcbiAgICBTZXRQcmljZSA9IDUsXG4gICAgUmVzdG9yZVRpY2tldCA9IDYsXG4gICAgQ2hhbmdlRGV2aWNlQWNjZXNzTW9kZSA9IDcsXG4gICAgUmVzZXREZXZpY2VBY2Nlc3NNb2RlID0gOCxcbiAgICBSZXN0YXJ0RGV2aWNlID0gOSxcbiAgICBSZXNldEJpbGxEaXNwZW5zZXIgPSAxMCxcbiAgICBDbG9zZUdhdGUgPSAxMSxcbiAgICBFamVjdEphbW1lZFRpY2tldCA9IDEyLFxuICAgIFN3YWxsb3dKYW1tZWRUaWNrZXQgPSAxMyxcbiAgICBEZWxpdmVyQnVuZGxlQmlsbHMgPSAxNCxcbiAgICBMb2NrQ2FzaFJlZ2lzdGVyID0gMTUsXG4gICAgU2V0UmF0ZSA9IDE2LFxuICAgIEluc2VydFZpcnR1YWxUaWNrZXQgPSAxNyxcbiAgICBIb2xkUmVsYXkgPSAxOCxcbiAgICBPcGVuUmVsYXkgPSAxOSxcbiAgICBQcmludFRpY2tldCA9IDIwLFxuICAgIFRyaWdnZXJMUFJNb2R1bGUgPSAyMSxcbiAgICBFbmFibGVSZXByaW50UmVjZWlwdCA9IDIyLFxuICAgIE9wZW5HYXRlQ29udGludW91c2x5ID0gMjMsXG4gICAgQ2xvc2VHYXRlQ29udGludW91c2x5ID0gMjQsXG4gICAgTWFudWFsbHlDbG9zZVRpY2tldCA9IDI1LFxuICAgIFVwZGF0ZUxvY2F0aW9uID0gMjYsXG4gICAgVXBkYXRlT2NjdXBhbmN5ID0gMjcsXG4gICAgQXR0YWNoVGlja2V0ID0gMjgsXG4gICAgVXBkYXRlTGljZW5zZVBsYXRlID0gMjksXG4gICAgTG9zdFRpY2tldCA9IDMwLFxuICAgIEluc2VydFJlbW90ZVZhbGlkYXRpb24gPSAzMSxcbiAgICBVcGRhdGVQYXltZW50ID0gMzIsXG4gICAgVXBkYXRlWm9uZU9jY3VwYW5jeSA9IDMzLFxuICAgIFVwZGF0ZVJlbW90ZVZhbGlkYXRpb24gPSAzNCxcbiAgICBWYWxpZGF0aW9uTWFpbiA9IDM1LFxuICAgIFZhbGlkYXRpb25FVmFsaWRhdGlvblZpZXcgPSAzNixcbiAgICBWYWxpZGF0aW9uU3RpY2tlclZpZXcgPSAzNyxcbiAgICBWYWxpZGF0aW9uQ291cG9uVmlldyA9IDM4LFxuICAgIFJlcG9ydHNNYWluID0gMzksXG4gICAgR3Vlc3RNYWluID0gNDAsXG4gICAgVXBkYXRlRG9jdW1lbnQgPSA0MSxcbiAgICBWaWV3UmV2ZW51ZSA9IDQyLFxuICAgIFByaW50UmVjZWlwdCA9IDQzLFxuICAgIE1vbnRobGllc01haW4gPSA0NCxcbiAgICBQaU1haW4gPSA0NSxcbiAgICBHdWVzdEdyb3VwVmlldyA9IDQ2LFxuICAgIFNpbmdsZUd1ZXN0ID0gNDcsXG4gICAgQ2xvc2VUaWNrZXRGb3JJU0YgPSA0OCxcbiAgICBQYXltZW50Rm9ySVNGID0gNDksXG4gICAgTWFudWFsbHlSdW5aID0gNTAsXG4gICAgVXBkYXRlU2V0dGluZ3MgPSA1MSxcbiAgICBTZXRBY3RpdmVSYXRlID0gNTIsXG4gICAgVXBkYXRlTUNEYXRlVGltZSA9IDUzLFxuICAgIEd1ZXN0SG90ZWxHdWVzdFZpZXcgPSA1NCxcbiAgICBHdWVzdFZpZXcgPSA1NSxcbiAgICBBY2NvdW50TWFuYWdlbWVudE1haW4gPSA1NixcbiAgICBBY2NvdW50TWFuYWdlbWVudEFjY291bnRWaWV3ID0gNTcsXG4gICAgTW9udGhsaWVzVmlldyA9IDU4LFxuICAgIE1vbnRobHlTZXJpZXNDcmVhdGUgPSA1OSxcbiAgICBSdW5NYWNybyA9IDYwLFxuICAgIFRlbmFudFNldHRpbmdzTWFpbiA9IDYxLFxuICAgIE1hbmFnZW1lbnRBZG1pbiA9IDYyLFxuICAgIEJsYWNrTGlzdCA9IDYzLFxuICAgIFN5c3RlbUFkbWluID0gNjQsXG4gICAgT3BlcmF0aW9uYWxBZG1pbiA9IDY1LFxuICAgIEZhY2lsaXRpZXNBbmRTbWFydHBhcmtzID0gNjYsXG4gICAgTG9nbyA9IDY3LFxuICAgIFNtdHBTZXR0aW5ncyA9IDY4LFxuICAgIERlZmF1bHRVc2VyU2V0dGluZ3MgPSA2OSxcbiAgICBBdWRpdCA9IDcwLFxuICAgIEJhY2tvZmZpY2VNYWluID0gNzEsXG4gICAgTG90Q29uZmlndXJhdGlvbk1haW4gPSA3MixcbiAgICBMb3RDb25maWd1cmF0aW9uUmF0ZXMgPSA3MyxcbiAgICBMb3RDb25maWd1cmF0aW9uU2NoZWR1bGVyID0gNzQsXG4gICAgTG90Q29uZmlndXJhdGlvblZhbGlkYXRpb25Qcm9maWxlID0gNzUsXG4gICAgSG90ZWxHdWVzdElPQ3JlYXRlID0gNzYsXG4gICAgRUNvbW1lcmNlQmFja29mZmljZU1haW4gPSA3NyxcbiAgICBWYWxpZGF0aW9uRVZhbGlkYXRpb25DcmVhdGUgPSA3OCxcbiAgICBWYWxpZGF0aW9uRVZhbGlkYXRpb25VcGRhdGUgPSA3OSxcbiAgICBWYWxpZGF0aW9uRVZhbGlkYXRpb25EZWxldGUgPSA4MCxcbiAgICBWYWxpZGF0aW9uU3RpY2tlckNyZWF0ZSA9IDgxLFxuICAgIFZhbGlkYXRpb25TdGlja2VyVXBkYXRlID0gODIsXG4gICAgVmFsaWRhdGlvblN0aWNrZXJEZWxldGUgPSA4MyxcbiAgICBWYWxpZGF0aW9uQ291cG9uQ3JlYXRlID0gODQsXG4gICAgVmFsaWRhdGlvbkNvdXBvblVwZGF0ZSA9IDg1LFxuICAgIFZhbGlkYXRpb25Db3Vwb25EZWxldGUgPSA4NixcbiAgICBHdWVzdEdyb3VwQ3JlYXRlID0gODcsXG4gICAgQWNjb3VudE1hbmFnZW1lbnRBY2NvdW50Q3JlYXRlID0gODgsXG4gICAgQWNjb3VudE1hbmFnZW1lbnRBY2NvdW50VXBkYXRlID0gODksXG4gICAgQWNjb3VudE1hbmFnZW1lbnRBY2NvdW50RGVsZXRlID0gOTAsXG4gICAgTW9udGhsaWVzQ3JlYXRlID0gOTEsXG4gICAgTW9udGhsaWVzVXBkYXRlID0gOTIsXG4gICAgTW9udGhsaWVzRGVsZXRlID0gOTMsXG4gICAgR3Vlc3RDcmVhdGUgPSA5NCxcbiAgICBHdWVzdFVwZGF0ZSA9IDk1LFxuICAgIEd1ZXN0RGVsZXRlID0gOTYsXG4gICAgQ2xvc2VQYXltZW50U2NyZWVuID0gOTcsXG4gICAgRUNvbW1lcmNlQWRtaW4gPSA5OCxcbiAgICBFQ29tbWVyY2VSZWd1bGFyID0gOTksXG4gICAgTG90Q29uZmlndXJhdGlvbkFjY2Vzc1Byb2ZpbGUgPSAxMDAsXG4gICAgQ2FuY2VsUmVjZWlwdCA9IDEwMSxcbiAgICBHdWVzdEFkdmFuY2VkID0gMTAyLFxuICAgIEd1ZXN0R3JvdXBBZHZhbmNlZCA9IDEwMyxcbiAgICBHdWVzdEhvdGVsR3Vlc3RDcmVhdGUgPSAxMDQsXG4gICAgR3Vlc3RIb3RlbEd1ZXN0VXBkYXRlID0gMTA1LFxuICAgIEd1ZXN0SG90ZWxHdWVzdERlbGV0ZSA9IDEwNixcbiAgICBJbXBvcnRlclRvb2xWaWV3ID0gMTA3LFxuICAgIEd1ZXN0RVZvdWNoZXJWaWV3ID0gMTA4LFxuICAgIExvdENvbmZpZ3VyYXRpb25EeW5hbWljUHJpY2luZyA9IDEwOSxcbiAgICBEaWdpdGFsUmVjZXBpdCA9IDExMCxcbiAgICBBbGxBY2NvdW50cyA9IDExMSxcbiAgICBBbGxWYWxpZGF0aW9ucyA9IDExMixcbiAgICBNb250aGxpZXNDcmVhdGVBZHZhbmNlZCA9IDExMyxcbiAgICBNb250aGxpZXNVcGRhdGVBZHZhbmNlZCA9IDExNCxcbiAgICBNb250aGx5U2VyaWVzQ3JlYXRlQWR2YW5jZWQgPSAxMTUsXG4gICAgR3Vlc3RDcmVhdGVBZHZhbmNlZCA9IDExNixcbiAgICBHdWVzdFVwZGF0ZUFkdmFuY2VkID0gMTE3LFxuICAgIEd1ZXN0R3JvdXBDcmVhdGVBZHZhbmNlZCA9IDExOCxcbiAgICBHdWVzdEhvdGVsR3Vlc3RDcmVhdGVBZHZhbmNlZCA9IDExOSxcbiAgICBHdWVzdEhvdGVsR3Vlc3RVcGRhdGVBZHZhbmNlZCA9IDEyMCxcbiAgICBWYWxpZGF0aW9uU3RpY2tlckNyZWF0ZUFkdmFuY2VkID0gMTIxLFxuICAgIFZhbGlkYXRpb25TdGlja2VyVXBkYXRlQWR2YW5jZWQgPSAxMjIsXG4gICAgVmFsaWRhdGlvbkNvdXBvbkNyZWF0ZUFkdmFuY2VkID0gMTIzLFxuICAgIFZhbGlkYXRpb25Db3Vwb25VcGRhdGVBZHZhbmNlZCA9IDEyNCxcbiAgICBWYWxpZGF0aW9uU2VsZlZhbGlkYXRpb25WaWV3ID0gMTI1LFxuICAgIFZhbGlkYXRpb25TZWxmVmFsaWRhdGlvbkNyZWF0ZSA9IDEyNixcbiAgICBWYWxpZGF0aW9uU2VsZlZhbGlkYXRpb25VcGRhdGUgPSAxMjcsXG4gICAgVmFsaWRhdGlvblNlbGZWYWxpZGF0aW9uRGVsZXRlID0gMTI4LFxuICAgIExvdENvbmZpZ3VyYXRpb25DYXNoaWVyTWFuYWdlbWVudCA9IDEyOSxcbiAgICBIb3RlbEd1ZXN0SU9WaWV3ID0gMTMwLFxuICAgIENyZWF0ZVRpY2tldEJ5TGljZW5zZVBsYXRlID0gMTMxLFxuICAgIEVuZm9yY2VtZW50SW50ZWdyYXRpb24gPSAxMzIsXG4gICAgU2NhbjJQYXlNYWluID0gMTMzLFxuICAgIFNjYW4yUGF5ID0gMTM0LFxuICAgIE1vbnRobGllc1NlbmRBbmRQcmludCA9IDEzNSxcbiAgICBHdWVzdFNlbmRBbmRQcmludCA9IDEzNixcbiAgICBHdWVzdEhvdGVsR3Vlc3RTZW5kQW5kUHJpbnQgPSAxMzcsXG4gICAgVmFsaWRhdGlvbkNvdXBvblNlbmRBbmRQcmludCA9IDEzOCxcbiAgICBWYWxpZGF0aW9uU3RpY2tlclNlbmRBbmRQcmludCA9IDEzOSxcbiAgICBBdXRob3JpemF0aW9uID0gLTEsXG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ibGVtRGV0YWlscyBpbXBsZW1lbnRzIElQcm9ibGVtRGV0YWlscyB7XG4gICAgdHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgc3RhdHVzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgZGV0YWlsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaW5zdGFuY2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIFtrZXk6IHN0cmluZ106IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJUHJvYmxlbURldGFpbHMpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBfZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChfZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbcHJvcGVydHldID0gX2RhdGFbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50eXBlID0gX2RhdGFbXCJ0eXBlXCJdO1xuICAgICAgICAgICAgdGhpcy50aXRsZSA9IF9kYXRhW1widGl0bGVcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IF9kYXRhW1wic3RhdHVzXCJdO1xuICAgICAgICAgICAgdGhpcy5kZXRhaWwgPSBfZGF0YVtcImRldGFpbFwiXTtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UgPSBfZGF0YVtcImluc3RhbmNlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBQcm9ibGVtRGV0YWlscyB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgUHJvYmxlbURldGFpbHMoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgIGRhdGFbcHJvcGVydHldID0gdGhpc1twcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInR5cGVcIl0gPSB0aGlzLnR5cGU7XG4gICAgICAgIGRhdGFbXCJ0aXRsZVwiXSA9IHRoaXMudGl0bGU7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNcIl0gPSB0aGlzLnN0YXR1cztcbiAgICAgICAgZGF0YVtcImRldGFpbFwiXSA9IHRoaXMuZGV0YWlsO1xuICAgICAgICBkYXRhW1wiaW5zdGFuY2VcIl0gPSB0aGlzLmluc3RhbmNlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBQcm9ibGVtRGV0YWlscyB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFByb2JsZW1EZXRhaWxzKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUHJvYmxlbURldGFpbHMge1xuICAgIHR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHN0YXR1czogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGRldGFpbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGluc3RhbmNlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBSZWZyZXNoVG9rZW5EdG8gaW1wbGVtZW50cyBJUmVmcmVzaFRva2VuRHRvIHtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGV4cGlyYXRpb246IG1vbWVudC5Nb21lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVJlZnJlc2hUb2tlbkR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBfZGF0YVtcImFjY2Vzc1Rva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4gPSBfZGF0YVtcInJlZnJlc2hUb2tlblwiXTtcbiAgICAgICAgICAgIHRoaXMuZXhwaXJhdGlvbiA9IF9kYXRhW1wiZXhwaXJhdGlvblwiXSA/IG1vbWVudChfZGF0YVtcImV4cGlyYXRpb25cIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogUmVmcmVzaFRva2VuRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWZyZXNoVG9rZW5EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImFjY2Vzc1Rva2VuXCJdID0gdGhpcy5hY2Nlc3NUb2tlbjtcbiAgICAgICAgZGF0YVtcInJlZnJlc2hUb2tlblwiXSA9IHRoaXMucmVmcmVzaFRva2VuO1xuICAgICAgICBkYXRhW1wiZXhwaXJhdGlvblwiXSA9IHRoaXMuZXhwaXJhdGlvbiA/IHRoaXMuZXhwaXJhdGlvbi50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlZnJlc2hUb2tlbkR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlZnJlc2hUb2tlbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlZnJlc2hUb2tlbkR0byB7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBleHBpcmF0aW9uOiBtb21lbnQuTW9tZW50O1xufVxuXG5leHBvcnQgY2xhc3MgUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogUmVmcmVzaFRva2VuRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IFJlZnJlc2hUb2tlbkR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBSZWZyZXNoVG9rZW5EdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGVudW0gUmVtb3RlQWN0aW9uVHlwZXMge1xuICAgIFVwZGF0ZUxpY2Vuc2VQbGF0ZSA9IDEsXG4gICAgVXBkYXRlRG9jdW1lbnQgPSAyLFxuICAgIFZpZXdSZXZlbnVlID0gMyxcbiAgICBQcmludFJlY2VpcHQgPSA0LFxufVxuXG5leHBvcnQgZW51bSBSZW1vdGVDb21tYW5kVHlwZXMge1xuICAgIFVubG9ja0Rvb3IgPSAwLFxuICAgIFZlbmRHYXRlID0gMSxcbiAgICBWYWxpZGF0ZSA9IDIsXG4gICAgU2V0UHJpY2UgPSAzLFxuICAgIFJlc3RvcmVUaWNrZXQgPSA0LFxuICAgIENoYW5nZURldmljZUFjY2Vzc01vZGUgPSA1LFxuICAgIFJlc2V0RGV2aWNlQWNjZXNzTW9kZSA9IDYsXG4gICAgUmVzdGFydERldmljZSA9IDcsXG4gICAgUmVzZXRCaWxsRGlzcGVuc2VyID0gOCxcbiAgICBDbG9zZUdhdGUgPSA5LFxuICAgIEVqZWN0SmFtbWVkVGlja2V0ID0gMTAsXG4gICAgU3dhbGxvd0phbW1lZFRpY2tldCA9IDExLFxuICAgIERlbGl2ZXJCdW5kbGVCaWxscyA9IDEyLFxuICAgIExvY2tDYXNoUmVnaXN0ZXIgPSAxMyxcbiAgICBTZXRSYXRlID0gMTQsXG4gICAgSW5zZXJ0VmlydHVhbFRpY2tldCA9IDE1LFxuICAgIEhvbGRSZWxheSA9IDE2LFxuICAgIE9wZW5SZWxheSA9IDE3LFxuICAgIFByaW50VGlja2V0ID0gMTgsXG4gICAgVHJpZ2dlckxQUk1vZHVsZSA9IDE5LFxuICAgIEVuYWJsZVJlcHJpbnRSZWNlaXB0ID0gMjAsXG4gICAgT3BlbkdhdGVDb250aW51b3VzbHkgPSAyMSxcbiAgICBDbG9zZUdhdGVDb250aW51b3VzbHkgPSAyMixcbiAgICBTZW5kUGFyYW1ldGVycyA9IDIzLFxuICAgIFNlbmRLZXlPcHRpb25zID0gMjQsXG4gICAgTWFudWFsbHlDbG9zZVRpY2tldCA9IDMwLFxuICAgIFVwZGF0ZUxvY2F0aW9uID0gMzEsXG4gICAgVXBkYXRlT2NjdXBhbmN5ID0gMzIsXG4gICAgQXR0YWNoVGlja2V0ID0gMzMsXG4gICAgSW5zZXJ0UmVtb3RlVmFsaWRhdGlvbiA9IDM2LFxuICAgIFVwZGF0ZVJlbW90ZVZhbGlkYXRpb24gPSAzNyxcbiAgICBEZWxldGVSZW1vdGVWYWxpZGF0aW9uID0gMzksXG4gICAgUmVzdG9yZVJlbW90ZVZhbGlkYXRpb24gPSA0MCxcbiAgICBVcGRhdGVUb3RhbE9jY3VwYW5jeSA9IDQxLFxuICAgIFVwZGF0ZVpvbmVPY2N1cGFuY3kgPSA0MixcbiAgICBDbG9zZVRpY2tldEZvcklTRiA9IDQzLFxuICAgIFBheW1lbnRGb3JJU0YgPSA0NCxcbiAgICBEZWxldGVUaWNrZXQgPSA0NSxcbiAgICBDbG9zZVBheW1lbnRTY3JlZW4gPSA0NixcbiAgICBVcGRhdGVBbGxWYWxpZGF0aW9uID0gNDcsXG4gICAgQ2FuY2VsUmVjZWlwdCA9IDQ4LFxuICAgIFJlc3RhcnRTbWFydHBhcmsgPSA0OSxcbiAgICBTZW5kRGlnaXRhbFJlY2VpcHRQYXJhbXMgPSA1MCxcbiAgICBTZW5kU3VyY2hhcmdlID0gNTEsXG4gICAgU2VuZExvdFNldHVwID0gNTIsXG4gICAgU2VuZFJhdGVJbWFnZXMgPSA1MyxcbiAgICBVcGRhdGVTbWFydFpvbmVPY2N1cGFuY3kgPSA1NCxcbiAgICBDcmVhdGVUaWNrZXRCeUxpY2Vuc2VQbGF0ZSA9IDU1LFxuICAgIENyZWF0ZVFyT25UaWNrZXQgPSA1NixcbiAgICBHZXRUaWNrZXRGZWUgPSAxMDAwLFxuICAgIFVwZGF0ZVRpY2tldFBheW1lbnQgPSAxMDAxLFxuICAgIFVwZGF0ZUNvbXBhbmllc0NvdW50ZXIgPSAxMDAyLFxufVxuXG5leHBvcnQgY2xhc3MgU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIGltcGxlbWVudHMgSVNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBpc1NtYXJ0UGFya0Nvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNTcGFya0NvcmVDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNTcGFya0Nsb3VkQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIHNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzbWFydFBhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gX2RhdGFbXCJpZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTbWFydFBhcmtDb25uZWN0ZWQgPSBfZGF0YVtcImlzU21hcnRQYXJrQ29ubmVjdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWQgPSBfZGF0YVtcImlzU21hcnRQYXJrQ29yZUNvbm5lY3RlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTcGFya0NvcmVDb25uZWN0ZWQgPSBfZGF0YVtcImlzU3BhcmtDb3JlQ29ubmVjdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1NwYXJrQ2xvdWRDb25uZWN0ZWQgPSBfZGF0YVtcImlzU3BhcmtDbG91ZENvbm5lY3RlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wID0gX2RhdGFbXCJzbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPyBtb21lbnQoX2RhdGFbXCJzbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IF9kYXRhW1wic21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcInNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID0gX2RhdGFbXCJzcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPyBtb21lbnQoX2RhdGFbXCJzcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IF9kYXRhW1wic3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcInNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImlkXCJdID0gdGhpcy5pZDtcbiAgICAgICAgZGF0YVtcImlzU21hcnRQYXJrQ29ubmVjdGVkXCJdID0gdGhpcy5pc1NtYXJ0UGFya0Nvbm5lY3RlZDtcbiAgICAgICAgZGF0YVtcImlzU21hcnRQYXJrQ29yZUNvbm5lY3RlZFwiXSA9IHRoaXMuaXNTbWFydFBhcmtDb3JlQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNTcGFya0NvcmVDb25uZWN0ZWRcIl0gPSB0aGlzLmlzU3BhcmtDb3JlQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNTcGFya0Nsb3VkQ29ubmVjdGVkXCJdID0gdGhpcy5pc1NwYXJrQ2xvdWRDb25uZWN0ZWQ7XG4gICAgICAgIGRhdGFbXCJzbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLnNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/IHRoaXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLnNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPyB0aGlzLnNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID0gdGhpcy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPyB0aGlzLnNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcC50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID0gdGhpcy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGlzU21hcnRQYXJrQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzU21hcnRQYXJrQ29yZUNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc1NwYXJrQ29yZUNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc1NwYXJrQ2xvdWRDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIFNldHRpbmdzQ2F0ZWdvcnkge1xuICAgIERhdGVGb3JtYXRzID0gMCxcbiAgICBBbGVydHMgPSAxLFxuICAgIFRpY2tldHNTcGVjaWZpY2F0aW9ucyA9IDIsXG4gICAgTG9jYWxpemF0aW9uID0gMyxcbiAgICBBbGVydHNQcmVmZXJlbmNlc09sZCA9IDQsXG4gICAgVHdvRmFjdG9yQXV0aGVudGljYXRpb24gPSA1LFxuICAgIEVDb21tZXJjZUJhY2tvZmZpY2VVUkwgPSA2LFxuICAgIFNTTyA9IDcsXG4gICAgUGFzc3dvcmRQb2xpY3kgPSA4LFxuICAgIERpZ2l0YWxSZWNlaXB0UHJvdmlkZXJzU2V0dGluZ3MgPSA5LFxuICAgIE5vdGlmaWNhdGlvblByZWZlcmVuY2VzT2xkID0gMTAsXG4gICAgU3BlY2lhbFRyYW5zaWVudCA9IDExLFxuICAgIEFsZXJ0c1ByZWZlcmVuY2VzID0gMTIsXG4gICAgTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMgPSAxMyxcbiAgICBFbmZvcmNlbWVudEludGVncmF0aW9uU2V0dGluZ3MgPSAxNCxcbiAgICBTY2FuMlBheSA9IDE1LFxufVxuXG5leHBvcnQgY2xhc3MgU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8gaW1wbGVtZW50cyBJU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8ge1xuICAgIHVzZXJTdGF0dXM6IFVzZXJTdGF0dXM7XG4gICAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xuICAgIHNpbmdsZVNpZ25PblByb3ZpZGVyOiBTaW5nbGVTaWduT25Qcm92aWRlcjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJTdGF0dXMgPSBfZGF0YVtcInVzZXJTdGF0dXNcIl07XG4gICAgICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IF9kYXRhW1wiaXNBdXRoZW50aWNhdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVTaWduT25Qcm92aWRlciA9IF9kYXRhW1wic2luZ2xlU2lnbk9uUHJvdmlkZXJcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1widXNlclN0YXR1c1wiXSA9IHRoaXMudXNlclN0YXR1cztcbiAgICAgICAgZGF0YVtcImlzQXV0aGVudGljYXRlZFwiXSA9IHRoaXMuaXNBdXRoZW50aWNhdGVkO1xuICAgICAgICBkYXRhW1wic2luZ2xlU2lnbk9uUHJvdmlkZXJcIl0gPSB0aGlzLnNpbmdsZVNpZ25PblByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8ge1xuICAgIHVzZXJTdGF0dXM6IFVzZXJTdGF0dXM7XG4gICAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xuICAgIHNpbmdsZVNpZ25PblByb3ZpZGVyOiBTaW5nbGVTaWduT25Qcm92aWRlcjtcbn1cblxuZXhwb3J0IGVudW0gU2luZ2xlU2lnbk9uUHJvdmlkZXIge1xuICAgIE1pY3Jvc29mdCA9IDEsXG4gICAgUGluZ0ZlZGVyYXRlID0gMixcbn1cblxuZXhwb3J0IGVudW0gU21hcnRQYXJrVHlwZSB7XG4gICAgU2luZ2xlUGFyayA9IDAsXG4gICAgTXVsdGlQYXJrID0gMSxcbiAgICBTdXBlclBhcmsgPSAyLFxufVxuXG5leHBvcnQgY2xhc3MgU21hcnRQYXJrV3JhcHBlckR0byBpbXBsZW1lbnRzIElTbWFydFBhcmtXcmFwcGVyRHRvIHtcbiAgICBzbWFydFBhcmtzOiB7IFtrZXk6IHN0cmluZ106IFNtYXJ0cGFya0Jhc2ljRHRvOyB9IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElTbWFydFBhcmtXcmFwcGVyRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wic21hcnRQYXJrc1wiXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc21hcnRQYXJrcyA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gX2RhdGFbXCJzbWFydFBhcmtzXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcInNtYXJ0UGFya3NcIl0uaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMuc21hcnRQYXJrcylba2V5XSA9IF9kYXRhW1wic21hcnRQYXJrc1wiXVtrZXldID8gU21hcnRwYXJrQmFzaWNEdG8uZnJvbUpTKF9kYXRhW1wic21hcnRQYXJrc1wiXVtrZXldKSA6IG5ldyBTbWFydHBhcmtCYXNpY0R0bygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU21hcnRQYXJrV3JhcHBlckR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU21hcnRQYXJrV3JhcHBlckR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBpZiAodGhpcy5zbWFydFBhcmtzKSB7XG4gICAgICAgICAgICBkYXRhW1wic21hcnRQYXJrc1wiXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuc21hcnRQYXJrcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNtYXJ0UGFya3MuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+ZGF0YVtcInNtYXJ0UGFya3NcIl0pW2tleV0gPSB0aGlzLnNtYXJ0UGFya3Nba2V5XSA/IHRoaXMuc21hcnRQYXJrc1trZXldLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU21hcnRQYXJrV3JhcHBlckR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNtYXJ0UGFya1dyYXBwZXJEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTbWFydFBhcmtXcmFwcGVyRHRvIHtcbiAgICBzbWFydFBhcmtzOiB7IFtrZXk6IHN0cmluZ106IFNtYXJ0cGFya0Jhc2ljRHRvOyB9IHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBTbWFydFBhcmtXcmFwcGVyRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBTbWFydFBhcmtXcmFwcGVyRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogU21hcnRQYXJrV3JhcHBlckR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgU21hcnRwYXJrQmFzaWNEdG8gaW1wbGVtZW50cyBJU21hcnRwYXJrQmFzaWNEdG8ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBndWlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdHlwZTogU21hcnRQYXJrVHlwZTtcbiAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXM6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bztcbiAgICBmYWNpbGl0aWVzOiBGYWNpbGl0eUJhc2ljRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgc3BhcmtWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgc21hcnRQYXJrVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGN1cnJlbmN5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZW5hYmxlU3BlY2lhbFRyYW5zaWVudHM6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVNtYXJ0cGFya0Jhc2ljRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gX2RhdGFbXCJuYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy5ndWlkID0gX2RhdGFbXCJndWlkXCJdO1xuICAgICAgICAgICAgdGhpcy50eXBlID0gX2RhdGFbXCJ0eXBlXCJdO1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlc1J1bm5pbmdTdGF0dXMgPSBfZGF0YVtcInNlcnZpY2VzUnVubmluZ1N0YXR1c1wiXSA/IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0by5mcm9tSlMoX2RhdGFbXCJzZXJ2aWNlc1J1bm5pbmdTdGF0dXNcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcImZhY2lsaXRpZXNcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWNpbGl0aWVzID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJmYWNpbGl0aWVzXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhY2lsaXRpZXMucHVzaChGYWNpbGl0eUJhc2ljRHRvLmZyb21KUyhpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNwYXJrVmVyc2lvbiA9IF9kYXRhW1wic3BhcmtWZXJzaW9uXCJdO1xuICAgICAgICAgICAgdGhpcy5zbWFydFBhcmtWZXJzaW9uID0gX2RhdGFbXCJzbWFydFBhcmtWZXJzaW9uXCJdO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW5jeSA9IF9kYXRhW1wiY3VycmVuY3lcIl07XG4gICAgICAgICAgICB0aGlzLmVuYWJsZVNwZWNpYWxUcmFuc2llbnRzID0gX2RhdGFbXCJlbmFibGVTcGVjaWFsVHJhbnNpZW50c1wiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU21hcnRwYXJrQmFzaWNEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNtYXJ0cGFya0Jhc2ljRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJuYW1lXCJdID0gdGhpcy5uYW1lO1xuICAgICAgICBkYXRhW1wiZ3VpZFwiXSA9IHRoaXMuZ3VpZDtcbiAgICAgICAgZGF0YVtcInR5cGVcIl0gPSB0aGlzLnR5cGU7XG4gICAgICAgIGRhdGFbXCJzZXJ2aWNlc1J1bm5pbmdTdGF0dXNcIl0gPSB0aGlzLnNlcnZpY2VzUnVubmluZ1N0YXR1cyA/IHRoaXMuc2VydmljZXNSdW5uaW5nU3RhdHVzLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmFjaWxpdGllcykpIHtcbiAgICAgICAgICAgIGRhdGFbXCJmYWNpbGl0aWVzXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuZmFjaWxpdGllcylcbiAgICAgICAgICAgICAgICBkYXRhW1wiZmFjaWxpdGllc1wiXS5wdXNoKGl0ZW0gPyBpdGVtLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJzcGFya1ZlcnNpb25cIl0gPSB0aGlzLnNwYXJrVmVyc2lvbjtcbiAgICAgICAgZGF0YVtcInNtYXJ0UGFya1ZlcnNpb25cIl0gPSB0aGlzLnNtYXJ0UGFya1ZlcnNpb247XG4gICAgICAgIGRhdGFbXCJjdXJyZW5jeVwiXSA9IHRoaXMuY3VycmVuY3k7XG4gICAgICAgIGRhdGFbXCJlbmFibGVTcGVjaWFsVHJhbnNpZW50c1wiXSA9IHRoaXMuZW5hYmxlU3BlY2lhbFRyYW5zaWVudHM7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFNtYXJ0cGFya0Jhc2ljRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU21hcnRwYXJrQmFzaWNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTbWFydHBhcmtCYXNpY0R0byB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGd1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0eXBlOiBTbWFydFBhcmtUeXBlO1xuICAgIHNlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvO1xuICAgIGZhY2lsaXRpZXM6IEZhY2lsaXR5QmFzaWNEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICBzcGFya1ZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBzbWFydFBhcmtWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY3VycmVuY3k6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBlbmFibGVTcGVjaWFsVHJhbnNpZW50czogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFNwYXJrU2V0dGluZ3NEdG8gaW1wbGVtZW50cyBJU3BhcmtTZXR0aW5nc0R0byB7XG4gICAgY2F0ZWdvcnk6IFNldHRpbmdzQ2F0ZWdvcnk7XG4gICAgc2V0dGluZ3NKc29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVNwYXJrU2V0dGluZ3NEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNhdGVnb3J5ID0gX2RhdGFbXCJjYXRlZ29yeVwiXTtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NKc29uID0gX2RhdGFbXCJzZXR0aW5nc0pzb25cIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFNwYXJrU2V0dGluZ3NEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNwYXJrU2V0dGluZ3NEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImNhdGVnb3J5XCJdID0gdGhpcy5jYXRlZ29yeTtcbiAgICAgICAgZGF0YVtcInNldHRpbmdzSnNvblwiXSA9IHRoaXMuc2V0dGluZ3NKc29uO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTcGFya1NldHRpbmdzRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3BhcmtTZXR0aW5nc0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNwYXJrU2V0dGluZ3NEdG8ge1xuICAgIGNhdGVnb3J5OiBTZXR0aW5nc0NhdGVnb3J5O1xuICAgIHNldHRpbmdzSnNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgU3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nOyB9IHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wiZGF0YVwiXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gX2RhdGFbXCJkYXRhXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcImRhdGFcIl0uaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMuZGF0YSlba2V5XSA9IF9kYXRhW1wiZGF0YVwiXVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGRhdGFbXCJkYXRhXCJdID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wiZGF0YVwiXSlba2V5XSA9ICg8YW55PnRoaXMuZGF0YSlba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZzsgfSB8IHVuZGVmaW5lZDtcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBTdWJNb2R1bGUge1xuICAgIEVWYWxpZGF0aW9uID0gMCxcbiAgICBTdGlja2VycyA9IDEsXG4gICAgQ291cG9ucyA9IDIsXG4gICAgR3Vlc3RzID0gMyxcbiAgICBIb3RlbEd1ZXN0cyA9IDQsXG4gICAgTW9udGhsaWVzID0gNSxcbiAgICBBY2NvdW50cyA9IDYsXG4gICAgVXNlck1hbmFnZW1lbnQgPSA3LFxuICAgIEZhY2lsaXRpZXNBbmRTbWFydHBhcmtzID0gOCxcbiAgICBMb2dvID0gOSxcbiAgICBTbXRwU2V0dGluZ3MgPSAxMCxcbiAgICBEZWZhdWx0VXNlclNldHRpbmdzID0gMTEsXG4gICAgQXVkaXQgPSAxMixcbiAgICBSYXRlcyA9IDEzLFxuICAgIFNjaGVkdWxlciA9IDE0LFxuICAgIFZhbGlkYXRpb25Qcm9maWxlcyA9IDE1LFxuICAgIEhvdGVsR3Vlc3RzSU8gPSAxNixcbiAgICBBY2Nlc3NQcm9maWxlcyA9IDE3LFxuICAgIEltcG9ydGVyVG9vbCA9IDE4LFxuICAgIEVWb3VjaGVyID0gMTksXG4gICAgRHluYW1pY1ByaWNpbmcgPSAyMCxcbiAgICBEaWdpdGFsUmVjZWlwdCA9IDIxLFxuICAgIFNlbGZWYWxpZGF0aW9uID0gMjIsXG4gICAgQ2FzaGllcnNNYW5hZ2VtZW50ID0gMjMsXG4gICAgRW5mb3JjZW1lbnRJbnRlZ3JhdGlvbiA9IDI0LFxuICAgIFNjYW4yUGF5ID0gMjUsXG59XG5cbmV4cG9ydCBjbGFzcyBUZW5hbnREZXRhaWxzRHRvIGltcGxlbWVudHMgSVRlbmFudERldGFpbHNEdG8ge1xuICAgIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHByb3BzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVGVuYW50RGV0YWlsc0R0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSBfZGF0YVtcImRpc3BsYXlOYW1lXCJdO1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wicHJvcHNcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcInByb3BzXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcInByb3BzXCJdLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLnByb3BzKVtrZXldID0gX2RhdGFbXCJwcm9wc1wiXVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGVuYW50RGV0YWlsc0R0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGVuYW50RGV0YWlsc0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wibmFtZVwiXSA9IHRoaXMubmFtZTtcbiAgICAgICAgZGF0YVtcImRpc3BsYXlOYW1lXCJdID0gdGhpcy5kaXNwbGF5TmFtZTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMpIHtcbiAgICAgICAgICAgIGRhdGFbXCJwcm9wc1wiXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMucHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wicHJvcHNcIl0pW2tleV0gPSAoPGFueT50aGlzLnByb3BzKVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRlbmFudERldGFpbHNEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZW5hbnREZXRhaWxzRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGVuYW50RGV0YWlsc0R0byB7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9IHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBUZW5hbnREZXRhaWxzRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBUZW5hbnREZXRhaWxzRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVGVuYW50RGV0YWlsc0R0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVGVuYW50RHRvIGltcGxlbWVudHMgSVRlbmFudER0byB7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9IHwgdW5kZWZpbmVkO1xuICAgIGlkOiBudW1iZXI7XG4gICAgdHJlZUlkOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRlbmFudER0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSBfZGF0YVtcImRpc3BsYXlOYW1lXCJdO1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wicHJvcHNcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcInByb3BzXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcInByb3BzXCJdLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLnByb3BzKVtrZXldID0gX2RhdGFbXCJwcm9wc1wiXVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaWQgPSBfZGF0YVtcImlkXCJdO1xuICAgICAgICAgICAgdGhpcy50cmVlSWQgPSBfZGF0YVtcInRyZWVJZFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGVuYW50RHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZW5hbnREdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcIm5hbWVcIl0gPSB0aGlzLm5hbWU7XG4gICAgICAgIGRhdGFbXCJkaXNwbGF5TmFtZVwiXSA9IHRoaXMuZGlzcGxheU5hbWU7XG4gICAgICAgIGlmICh0aGlzLnByb3BzKSB7XG4gICAgICAgICAgICBkYXRhW1wicHJvcHNcIl0gPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLnByb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+ZGF0YVtcInByb3BzXCJdKVtrZXldID0gKDxhbnk+dGhpcy5wcm9wcylba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkYXRhW1wiaWRcIl0gPSB0aGlzLmlkO1xuICAgICAgICBkYXRhW1widHJlZUlkXCJdID0gdGhpcy50cmVlSWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRlbmFudER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRlbmFudER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRlbmFudER0byB7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9IHwgdW5kZWZpbmVkO1xuICAgIGlkOiBudW1iZXI7XG4gICAgdHJlZUlkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBUZmFTZXR1cER0byBpbXBsZW1lbnRzIElUZmFTZXR1cER0byB7XG4gICAgZW1haWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1RmYUVuYWJsZWQ6IGJvb2xlYW47XG4gICAgYXV0aGVudGljYXRvcktleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHFyQ29kZUltYWdlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVnaXN0ZXJlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVGZhU2V0dXBEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVtYWlsID0gX2RhdGFbXCJlbWFpbFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNUZmFFbmFibGVkID0gX2RhdGFbXCJpc1RmYUVuYWJsZWRcIl07XG4gICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0b3JLZXkgPSBfZGF0YVtcImF1dGhlbnRpY2F0b3JLZXlcIl07XG4gICAgICAgICAgICB0aGlzLnFyQ29kZUltYWdlVXJsID0gX2RhdGFbXCJxckNvZGVJbWFnZVVybFwiXTtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZCA9IF9kYXRhW1wicmVnaXN0ZXJlZFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGZhU2V0dXBEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRmYVNldHVwRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlbWFpbFwiXSA9IHRoaXMuZW1haWw7XG4gICAgICAgIGRhdGFbXCJpc1RmYUVuYWJsZWRcIl0gPSB0aGlzLmlzVGZhRW5hYmxlZDtcbiAgICAgICAgZGF0YVtcImF1dGhlbnRpY2F0b3JLZXlcIl0gPSB0aGlzLmF1dGhlbnRpY2F0b3JLZXk7XG4gICAgICAgIGRhdGFbXCJxckNvZGVJbWFnZVVybFwiXSA9IHRoaXMucXJDb2RlSW1hZ2VVcmw7XG4gICAgICAgIGRhdGFbXCJyZWdpc3RlcmVkXCJdID0gdGhpcy5yZWdpc3RlcmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUZmFTZXR1cER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRmYVNldHVwRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGZhU2V0dXBEdG8ge1xuICAgIGVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNUZmFFbmFibGVkOiBib29sZWFuO1xuICAgIGF1dGhlbnRpY2F0b3JLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBxckNvZGVJbWFnZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZ2lzdGVyZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBUaGlyZFBhcnR5VmVuZG9yRHRvIGltcGxlbWVudHMgSVRoaXJkUGFydHlWZW5kb3JEdG8ge1xuICAgIGFjY291bnRJZDogbnVtYmVyO1xuICAgIHBlcm1pc3Npb25UeXBlczogUGVybWlzc2lvblR5cGVbXSB8IHVuZGVmaW5lZDtcbiAgICBwYXJrQ2xvdWRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUaGlyZFBhcnR5VmVuZG9yRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5hY2NvdW50SWQgPSBfZGF0YVtcImFjY291bnRJZFwiXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wicGVybWlzc2lvblR5cGVzXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGVzID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJwZXJtaXNzaW9uVHlwZXNcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGVzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcmtDbG91ZElkID0gX2RhdGFbXCJwYXJrQ2xvdWRJZFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGhpcmRQYXJ0eVZlbmRvckR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGhpcmRQYXJ0eVZlbmRvckR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiYWNjb3VudElkXCJdID0gdGhpcy5hY2NvdW50SWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMucGVybWlzc2lvblR5cGVzKSkge1xuICAgICAgICAgICAgZGF0YVtcInBlcm1pc3Npb25UeXBlc1wiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLnBlcm1pc3Npb25UeXBlcylcbiAgICAgICAgICAgICAgICBkYXRhW1wicGVybWlzc2lvblR5cGVzXCJdLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInBhcmtDbG91ZElkXCJdID0gdGhpcy5wYXJrQ2xvdWRJZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVGhpcmRQYXJ0eVZlbmRvckR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRoaXJkUGFydHlWZW5kb3JEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUaGlyZFBhcnR5VmVuZG9yRHRvIHtcbiAgICBhY2NvdW50SWQ6IG51bWJlcjtcbiAgICBwZXJtaXNzaW9uVHlwZXM6IFBlcm1pc3Npb25UeXBlW10gfCB1bmRlZmluZWQ7XG4gICAgcGFya0Nsb3VkSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVGhpcmRQYXJ0eVZlbmRvckR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gVGhpcmRQYXJ0eVZlbmRvckR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFRoaXJkUGFydHlWZW5kb3JEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvIGltcGxlbWVudHMgSVRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvIHtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvIHtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvIGltcGxlbWVudHMgSVR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICBpc0VuYWJsZWRGb3JVc2VyOiBib29sZWFuO1xuICAgIGlzUmVxdWllcmQyRkFTZXR1cDogYm9vbGVhbjtcbiAgICBhY3RpdmF0ZVJlc3BvbnNlRHRvOiBBY3RpdmF0ZVJlc3BvbnNlRHRvO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaXNFbmFibGVkRm9yVXNlciA9IF9kYXRhW1wiaXNFbmFibGVkRm9yVXNlclwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNSZXF1aWVyZDJGQVNldHVwID0gX2RhdGFbXCJpc1JlcXVpZXJkMkZBU2V0dXBcIl07XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlUmVzcG9uc2VEdG8gPSBfZGF0YVtcImFjdGl2YXRlUmVzcG9uc2VEdG9cIl0gPyBBY3RpdmF0ZVJlc3BvbnNlRHRvLmZyb21KUyhfZGF0YVtcImFjdGl2YXRlUmVzcG9uc2VEdG9cIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiaXNFbmFibGVkRm9yVXNlclwiXSA9IHRoaXMuaXNFbmFibGVkRm9yVXNlcjtcbiAgICAgICAgZGF0YVtcImlzUmVxdWllcmQyRkFTZXR1cFwiXSA9IHRoaXMuaXNSZXF1aWVyZDJGQVNldHVwO1xuICAgICAgICBkYXRhW1wiYWN0aXZhdGVSZXNwb25zZUR0b1wiXSA9IHRoaXMuYWN0aXZhdGVSZXNwb25zZUR0byA/IHRoaXMuYWN0aXZhdGVSZXNwb25zZUR0by50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8ge1xuICAgIGlzRW5hYmxlZEZvclVzZXI6IGJvb2xlYW47XG4gICAgaXNSZXF1aWVyZDJGQVNldHVwOiBib29sZWFuO1xuICAgIGFjdGl2YXRlUmVzcG9uc2VEdG86IEFjdGl2YXRlUmVzcG9uc2VEdG87XG59XG5cbmV4cG9ydCBlbnVtIFVzZXJTdGF0dXMge1xuICAgIEFjdGl2ZSA9IDAsXG4gICAgQmxvY2tlZCA9IDEsXG4gICAgSW52aXRlZCA9IDIsXG4gICAgSWdub3JlID0gMyxcbiAgICBQYXNzd29yZEV4cGlyZWQgPSA0LFxuICAgIFJldm9rZWQgPSA1LFxuICAgIFRlbXBvcmFyeUJsb2NrZWQgPSA2LFxuICAgIEF3YWl0aW5nQWNjZXNzID0gNyxcbiAgICBVc2VyRXhwaXJlZCA9IDgsXG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvIGltcGxlbWVudHMgSVZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8ge1xuICAgIGlkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxhc3ROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBzdGF0dXM6IFVzZXJTdGF0dXM7XG4gICAgcG1sOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gX2RhdGFbXCJpZFwiXTtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMubGFzdE5hbWUgPSBfZGF0YVtcImxhc3ROYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy51TmFtZSA9IF9kYXRhW1widU5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IF9kYXRhW1wic3RhdHVzXCJdO1xuICAgICAgICAgICAgdGhpcy5wbWwgPSBfZGF0YVtcInBtbFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiaWRcIl0gPSB0aGlzLmlkO1xuICAgICAgICBkYXRhW1wibmFtZVwiXSA9IHRoaXMubmFtZTtcbiAgICAgICAgZGF0YVtcImxhc3ROYW1lXCJdID0gdGhpcy5sYXN0TmFtZTtcbiAgICAgICAgZGF0YVtcInVOYW1lXCJdID0gdGhpcy51TmFtZTtcbiAgICAgICAgZGF0YVtcInN0YXR1c1wiXSA9IHRoaXMuc3RhdHVzO1xuICAgICAgICBkYXRhW1wicG1sXCJdID0gdGhpcy5wbWw7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0byB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGFzdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHN0YXR1czogVXNlclN0YXR1cztcbiAgICBwbWw6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byBpbXBsZW1lbnRzIElWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VyTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUgPSBfZGF0YVtcImNvZGVcIl07XG4gICAgICAgICAgICB0aGlzLnVzZXJOYW1lID0gX2RhdGFbXCJ1c2VyTmFtZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImNvZGVcIl0gPSB0aGlzLmNvZGU7XG4gICAgICAgIGRhdGFbXCJ1c2VyTmFtZVwiXSA9IHRoaXMudXNlck5hbWU7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byB7XG4gICAgY29kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVzZXJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0byBpbXBsZW1lbnRzIElWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0byB7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBfZGF0YVtcImFjY2Vzc1Rva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4gPSBfZGF0YVtcInJlZnJlc2hUb2tlblwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcImFjY2Vzc1Rva2VuXCJdID0gdGhpcy5hY2Nlc3NUb2tlbjtcbiAgICAgICAgZGF0YVtcInJlZnJlc2hUb2tlblwiXSA9IHRoaXMucmVmcmVzaFRva2VuO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8ge1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVJlc3BvbnNlIHtcbiAgICBkYXRhOiBCbG9iO1xuICAgIHN0YXR1czogbnVtYmVyO1xuICAgIGZpbGVOYW1lPzogc3RyaW5nO1xuICAgIGhlYWRlcnM/OiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEFwaUV4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBudW1iZXI7XG4gICAgcmVzcG9uc2U6IHN0cmluZztcbiAgICBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICByZXN1bHQ6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIHJlc3BvbnNlOiBzdHJpbmcsIGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCByZXN1bHQ6IGFueSkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpc0FwaUV4Y2VwdGlvbiA9IHRydWU7XG5cbiAgICBzdGF0aWMgaXNBcGlFeGNlcHRpb24ob2JqOiBhbnkpOiBvYmogaXMgQXBpRXhjZXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIG9iai5pc0FwaUV4Y2VwdGlvbiA9PT0gdHJ1ZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIHJlc3BvbnNlOiBzdHJpbmcsIGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCByZXN1bHQ/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmIChyZXN1bHQgIT09IG51bGwgJiYgcmVzdWx0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3VsdCk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhuZXcgQXBpRXhjZXB0aW9uKG1lc3NhZ2UsIHN0YXR1cywgcmVzcG9uc2UsIGhlYWRlcnMsIG51bGwpKTtcbn1cblxuZnVuY3Rpb24gYmxvYlRvVGV4dChibG9iOiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChvYnNlcnZlcjogYW55KSA9PiB7XG4gICAgICAgIGlmICghYmxvYikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChcIlwiKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgoZXZlbnQudGFyZ2V0IGFzIGFueSkucmVzdWx0KTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpO1xuICAgICAgICB9XG4gICAgfSk7XG59Il19
|
|
3990
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktc2VydmljZS1wcm94aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9zZXJ2aWNlLXByb3h5L2lkZW50aXR5LXNlcnZpY2UtcHJveGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3QkFBd0I7QUFDeEIsbUJBQW1CO0FBQ25CLDJIQUEySDtBQUMzSCxvQkFBb0I7QUFDcEIsd0JBQXdCO0FBRXhCLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsdUNBQXVDO0FBRXZDLE9BQU8sRUFBRSxRQUFRLElBQUksbUJBQW1CLEVBQUUsVUFBVSxJQUFJLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLElBQUksZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9GLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQzs7O0FBRTVCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBUyxjQUFjLENBQUMsQ0FBQztBQUd2RSxNQUFNLE9BQU8seUJBQXlCO0lBS2xDLFlBQWdDLElBQWdCLEVBQW9DLE9BQWdCO1FBRjFGLHFCQUFnQixHQUFtRCxTQUFTLENBQUM7UUFHbkYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxPQUFP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LGNBQWMsS0FBSyxJQUFJLENBQUM7SUFDdkMsQ0FBQztDQUNKO0FBRUQsU0FBUyxjQUFjLENBQUMsT0FBZSxFQUFFLE1BQWMsRUFBRSxRQUFnQixFQUFFLE9BQWdDLEVBQUUsTUFBWTtJQUNySCxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLFNBQVM7UUFDdkMsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFFaEMsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1RixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFBUztJQUN6QixPQUFPLElBQUksVUFBVSxDQUFTLENBQUMsUUFBYSxFQUFFLEVBQUU7UUFDNUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1IsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEIsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEVBQUU7Z0JBQ3BCLFFBQVEsQ0FBQyxJQUFJLENBQUUsS0FBSyxDQUFDLE1BQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gPGF1dG8tZ2VuZXJhdGVkPlxuLy8gICAgIEdlbmVyYXRlZCB1c2luZyB0aGUgTlN3YWcgdG9vbGNoYWluIHYxNC40LjAuMCAoTkpzb25TY2hlbWEgdjExLjMuMi4wIChOZXd0b25zb2Z0Lkpzb24gdjEzLjAuMC4wKSkgKGh0dHA6Ly9OU3dhZy5vcmcpXG4vLyA8L2F1dG8tZ2VuZXJhdGVkPlxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qIHRzbGludDpkaXNhYmxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gUmVTaGFycGVyIGRpc2FibGUgSW5jb25zaXN0ZW50TmFtaW5nXG5cbmltcG9ydCB7IG1lcmdlTWFwIGFzIF9vYnNlcnZhYmxlTWVyZ2VNYXAsIGNhdGNoRXJyb3IgYXMgX29ic2VydmFibGVDYXRjaCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgYXMgX29ic2VydmFibGVUaHJvdywgb2YgYXMgX29ic2VydmFibGVPZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBPcHRpb25hbCwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2UsIEh0dHBSZXNwb25zZUJhc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuZXhwb3J0IGNvbnN0IEFQSV9CQVNFX1VSTCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdBUElfQkFTRV9VUkwnKTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFzc2V0SWRlbnRpdHlTZXJ2aWNlUHJveHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBpZGVudGlmaWVyIChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0TG9nbyhpZGVudGlmaWVyOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi9hc3NldC9sb2dvP1wiO1xuICAgICAgICBpZiAoaWRlbnRpZmllciA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ2lkZW50aWZpZXInIGNhbm5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgZWxzZSBpZiAoaWRlbnRpZmllciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdXJsXyArPSBcIklkZW50aWZpZXI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIGlkZW50aWZpZXIpICsgXCImXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldExvZ28ocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldExvZ28ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0dldExvZ28ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gTG9nb0R0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8TG9nb0R0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCYWNrb2ZmaWNlVXNlcklkZW50aXR5U2VydmljZVByb3h5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm9keSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGJhY2tvZmZpY2VBdXRoZW50aWNhdGUoYm9keTogQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8gfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy9iYWNrb2ZmaWNldXNlci9hdXRoZW50aWNhdGVcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb25cIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0JhY2tvZmZpY2VBdXRoZW50aWNhdGUocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0JhY2tvZmZpY2VBdXRoZW50aWNhdGUocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzQmFja29mZmljZUF1dGhlbnRpY2F0ZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAyKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDI6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMiA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAyID0gQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAyKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMTogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDAxID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDEgPSBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTQwMSk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJVbmF1dGhvcml6ZWRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDAxKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbklkZW50aXR5U2VydmljZVByb3h5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBnZXRPbmxpbmVWYWxpZGF0b3JWZXJzaW9uKCk6IE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvY29uZmlndXJhdGlvbi9vbmxpbmUtdmFsaWRhdG9yLXZlcnNpb25cIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0T25saW5lVmFsaWRhdG9yVmVyc2lvbihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0T25saW5lVmFsaWRhdG9yVmVyc2lvbihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0dldE9ubGluZVZhbGlkYXRvclZlcnNpb24ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBPYmplY3RIdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPE9iamVjdEh0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBnZXRTZXR0aW5nc0J5Q2F0ZWdvcnkoY2F0ZWdvcnk6IFNldHRpbmdzQ2F0ZWdvcnkpOiBPYnNlcnZhYmxlPE9iamVjdEh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL2NvbmZpZ3VyYXRpb24vc2V0dGluZ3Mve2NhdGVnb3J5fVwiO1xuICAgICAgICBpZiAoY2F0ZWdvcnkgPT09IHVuZGVmaW5lZCB8fCBjYXRlZ29yeSA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ2NhdGVnb3J5JyBtdXN0IGJlIGRlZmluZWQuXCIpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKFwie2NhdGVnb3J5fVwiLCBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIGNhdGVnb3J5KSk7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldFNldHRpbmdzQnlDYXRlZ29yeShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0U2V0dGluZ3NCeUNhdGVnb3J5KHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8T2JqZWN0SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzR2V0U2V0dGluZ3NCeUNhdGVnb3J5KHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gT2JqZWN0SHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxPYmplY3RIdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0QXBwQ29uZmlndXJhdGlvbigpOiBPYnNlcnZhYmxlPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi9jb25maWd1cmF0aW9uXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldEFwcENvbmZpZ3VyYXRpb24ocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldEFwcENvbmZpZ3VyYXRpb24ocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0dldEFwcENvbmZpZ3VyYXRpb24ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8QXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGYWNpbGl0eUlkZW50aXR5U2VydmljZVByb3h5IHtcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGpzb25QYXJzZVJldml2ZXI6ICgoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEh0dHBDbGllbnQpIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIEBJbmplY3QoQVBJX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwgPz8gXCJcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYXBwTW9kdWxlIChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZmFjaWxpdHlBbGwoYXBwTW9kdWxlOiBBcHBNb2R1bGUgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi9mYWNpbGl0eS9iYXNpYz9cIjtcbiAgICAgICAgaWYgKGFwcE1vZHVsZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ2FwcE1vZHVsZScgY2Fubm90IGJlIG51bGwuXCIpO1xuICAgICAgICBlbHNlIGlmIChhcHBNb2R1bGUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHVybF8gKz0gXCJhcHBNb2R1bGU9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIGFwcE1vZHVsZSkgKyBcIiZcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRmFjaWxpdHlBbGwocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZhY2lsaXR5QWxsKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8U21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8U21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NGYWNpbGl0eUFsbChyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8U21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBhcHBNb2R1bGUgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBnZXRGYWNpbGl0eVRyZWUoYXBwTW9kdWxlOiBBcHBNb2R1bGUgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPEZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvZmFjaWxpdHkvdHJlZT9cIjtcbiAgICAgICAgaWYgKGFwcE1vZHVsZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ2FwcE1vZHVsZScgY2Fubm90IGJlIG51bGwuXCIpO1xuICAgICAgICBlbHNlIGlmIChhcHBNb2R1bGUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHVybF8gKz0gXCJhcHBNb2R1bGU9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIGFwcE1vZHVsZSkgKyBcIiZcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0RmFjaWxpdHlUcmVlKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NHZXRGYWNpbGl0eVRyZWUocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8RmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzR2V0RmFjaWxpdHlUcmVlKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8RmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTG9jYWxpemF0aW9uSWRlbnRpdHlTZXJ2aWNlUHJveHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBrZXlOYW1lIChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgZ2V0UmVzb3VyY2Uoa2V5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxGaWxlUmVzcG9uc2U+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL2xvY2FsaXphdGlvbi9nZXQtcmVzb3VyY2U/XCI7XG4gICAgICAgIGlmIChrZXlOYW1lID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciAna2V5TmFtZScgY2Fubm90IGJlIG51bGwuXCIpO1xuICAgICAgICBlbHNlIGlmIChrZXlOYW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB1cmxfICs9IFwia2V5TmFtZT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChcIlwiICsga2V5TmFtZSkgKyBcIiZcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzR2V0UmVzb3VyY2UocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldFJlc291cmNlKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8RmlsZVJlc3BvbnNlPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPEZpbGVSZXNwb25zZT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0dldFJlc291cmNlKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxGaWxlUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDAgfHwgc3RhdHVzID09PSAyMDYpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnMgPyByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtZGlzcG9zaXRpb25cIikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgZmlsZU5hbWVNYXRjaCA9IGNvbnRlbnREaXNwb3NpdGlvbiA/IC9maWxlbmFtZVxcKj0oPzooXFxcXD9bJ1wiXSkoLio/KVxcMXwoPzpbXlxcc10rJy4qPycpPyhbXjtcXG5dKikpL2cuZXhlYyhjb250ZW50RGlzcG9zaXRpb24pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgbGV0IGZpbGVOYW1lID0gZmlsZU5hbWVNYXRjaCAmJiBmaWxlTmFtZU1hdGNoLmxlbmd0aCA+IDEgPyBmaWxlTmFtZU1hdGNoWzNdIHx8IGZpbGVOYW1lTWF0Y2hbMl0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoZmlsZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpbGVOYW1lTWF0Y2ggPSBjb250ZW50RGlzcG9zaXRpb24gPyAvZmlsZW5hbWU9XCI/KFteXCJdKj8pXCI/KDt8JCkvZy5leGVjKGNvbnRlbnREaXNwb3NpdGlvbikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZU1hdGNoICYmIGZpbGVOYW1lTWF0Y2gubGVuZ3RoID4gMSA/IGZpbGVOYW1lTWF0Y2hbMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZih7IGZpbGVOYW1lOiBmaWxlTmFtZSwgZGF0YTogcmVzcG9uc2VCbG9iIGFzIGFueSwgc3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IF9oZWFkZXJzIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxGaWxlUmVzcG9uc2U+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTbWFydHBhcmtJZGVudGl0eVNlcnZpY2VQcm94eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgdmVyc2lvbnMoKTogT2JzZXJ2YWJsZTxTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3NtYXJ0cGFyay92ZXJzaW9uc1wiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcImdldFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NWZXJzaW9ucyhyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmVyc2lvbnMocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8U3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzVmVyc2lvbnMocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUZW5hbnRJZGVudGl0eVNlcnZpY2VQcm94eSB7XG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBqc29uUGFyc2VSZXZpdmVyOiAoKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChIdHRwQ2xpZW50KSBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFQSV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmh0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID8/IFwiXCI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIG5hbWUgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBnZXRUZW5hbnREZXRhaWxzKG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3RlbmFudC9kZXRhaWxzP1wiO1xuICAgICAgICBpZiAobmFtZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ25hbWUnIGNhbm5vdCBiZSBudWxsLlwiKTtcbiAgICAgICAgZWxzZSBpZiAobmFtZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdXJsXyArPSBcIm5hbWU9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIG5hbWUpICsgXCImXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwiZ2V0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldFRlbmFudERldGFpbHMocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0dldFRlbmFudERldGFpbHMocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0dldFRlbmFudERldGFpbHMocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8VGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUaGlyZFBhcnR5SWRlbnRpdHlTZXJ2aWNlUHJveHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIG1lKCk6IE9ic2VydmFibGU8VGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3RoaXJkcGFydHkvbWVcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJnZXRcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTWUocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01lKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NNZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8VGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDQ6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwNCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDA0ID0gUHJvYmxlbURldGFpbHMuZnJvbUpTKHJlc3VsdERhdGE0MDQpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiTm90IEZvdW5kXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwNCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAwID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDAgPSBUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFVzZXJzSWRlbnRpdHlTZXJ2aWNlUHJveHkge1xuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudDtcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQganNvblBhcnNlUmV2aXZlcjogKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSHR0cENsaWVudCkgaHR0cDogSHR0cENsaWVudCwgQE9wdGlvbmFsKCkgQEluamVjdChBUElfQkFTRV9VUkwpIGJhc2VVcmw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5odHRwID0gaHR0cDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA/PyBcIlwiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib2R5IChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgYXV0aGVudGljYXRlKGJvZHk6IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvYXV0aGVudGljYXRlXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBdXRoZW50aWNhdGUocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0F1dGhlbnRpY2F0ZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NBdXRoZW50aWNhdGUocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDE6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwMSA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDAxID0gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSByZWZyZXNoVG9rZW4gKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICByZWZyZXNoVG9rZW4ocmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3VzZXJzL3JlZnJlc2gtdG9rZW5cIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIlJlZnJlc2hUb2tlblwiOiByZWZyZXNoVG9rZW4gIT09IHVuZGVmaW5lZCAmJiByZWZyZXNoVG9rZW4gIT09IG51bGwgPyBcIlwiICsgcmVmcmVzaFRva2VuIDogXCJcIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JlZnJlc2hUb2tlbihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUmVmcmVzaFRva2VuKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8UmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzUmVmcmVzaFRva2VuKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGFjdGl2YXRpb25Ub2tlbiAob3B0aW9uYWwpIFxuICAgICAqIEBwYXJhbSBwYXNzd29yZENoYW5nZVR5cGUgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICB2YWxpZGF0ZUFjdGl2YXRpb24oYWN0aXZhdGlvblRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQsIHBhc3N3b3JkQ2hhbmdlVHlwZTogUGFzc3dvcmRDaGFuZ2VUeXBlIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvdmFsaWRhdGUtYWN0aXZhdGlvbj9cIjtcbiAgICAgICAgaWYgKHBhc3N3b3JkQ2hhbmdlVHlwZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBwYXJhbWV0ZXIgJ3Bhc3N3b3JkQ2hhbmdlVHlwZScgY2Fubm90IGJlIG51bGwuXCIpO1xuICAgICAgICBlbHNlIGlmIChwYXNzd29yZENoYW5nZVR5cGUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHVybF8gKz0gXCJwYXNzd29yZENoYW5nZVR5cGU9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHBhc3N3b3JkQ2hhbmdlVHlwZSkgKyBcIiZcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkFjdGl2YXRpb25Ub2tlblwiOiBhY3RpdmF0aW9uVG9rZW4gIT09IHVuZGVmaW5lZCAmJiBhY3RpdmF0aW9uVG9rZW4gIT09IG51bGwgPyBcIlwiICsgYWN0aXZhdGlvblRva2VuIDogXCJcIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZhbGlkYXRlQWN0aXZhdGlvbihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmFsaWRhdGVBY3RpdmF0aW9uKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8VmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NWYWxpZGF0ZUFjdGl2YXRpb24ocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09IDIwMCAmJiBzdGF0dXMgIT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJBbiB1bmV4cGVjdGVkIHNlcnZlciBlcnJvciBvY2N1cnJlZC5cIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2Y8VmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm9keSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGF1dGhlbnRpY2F0ZU1vYmlsZShib2R5OiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi91c2Vycy9hdXRoZW50aWNhdGUtbW9iaWxlXCI7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoL1s/Jl0kLywgXCJcIik7XG5cbiAgICAgICAgY29uc3QgY29udGVudF8gPSBKU09OLnN0cmluZ2lmeShib2R5KTtcblxuICAgICAgICBsZXQgb3B0aW9uc18gOiBhbnkgPSB7XG4gICAgICAgICAgICBib2R5OiBjb250ZW50XyxcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCIsXG4gICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L3BsYWluXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KFwicG9zdFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBdXRoZW50aWNhdGVNb2JpbGUocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0F1dGhlbnRpY2F0ZU1vYmlsZShyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8SW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0F1dGhlbnRpY2F0ZU1vYmlsZShyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8SW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IEludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDApO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAwKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDAxOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDEgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwMSA9IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhNDAxKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIlVuYXV0aG9yaXplZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDEpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhPihudWxsIGFzIGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGJvZHkgKG9wdGlvbmFsKSBcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBtdWx0aVRlbmFudHNBdXRoZW50aWNhdGUoYm9keTogQXV0aGVudGljYXRlUmVxdWVzdER0byB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBsZXQgdXJsXyA9IHRoaXMuYmFzZVVybCArIFwiL2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvbXVsdGktdGVuYW50cy1hdXRoZW50aWNhdGVcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb25cIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc011bHRpVGVuYW50c0F1dGhlbnRpY2F0ZShyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTXVsdGlUZW5hbnRzQXV0aGVudGljYXRlKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzTXVsdGlUZW5hbnRzQXV0aGVudGljYXRlKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ0MDE6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTQwMSA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0NDAxID0gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm9keSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIHZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkxvZ2luKGJvZHk6IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi91c2Vycy92ZXJpZnktMmZhLWF1dGgtbG9naW5cIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb25cIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkxvZ2luKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25Mb2dpbihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25Mb2dpbihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMTogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDAxID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDEgPSBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBib2R5IChvcHRpb25hbCkgXG4gICAgICogQHJldHVybiBTdWNjZXNzXG4gICAgICovXG4gICAgdmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uKGJvZHk6IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi91c2Vycy92ZXJpZnktMmZhLWF1dGhcIjtcbiAgICAgICAgdXJsXyA9IHVybF8ucmVwbGFjZSgvWz8mXSQvLCBcIlwiKTtcblxuICAgICAgICBjb25zdCBjb250ZW50XyA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIGJvZHk6IGNvbnRlbnRfLFxuICAgICAgICAgICAgb2JzZXJ2ZTogXCJyZXNwb25zZVwiLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uLXBhdGNoK2pzb25cIixcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QoXCJwb3N0XCIsIHVybF8sIG9wdGlvbnNfKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoKHJlc3BvbnNlXyA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1ZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbihyZXNwb25zZV8pO1xuICAgICAgICB9KSkucGlwZShfb2JzZXJ2YWJsZUNhdGNoKChyZXNwb25zZV86IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlXyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZUJhc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1ZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbihyZXNwb25zZTogSHR0cFJlc3BvbnNlQmFzZSk6IE9ic2VydmFibGU8VmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCbG9iID1cbiAgICAgICAgICAgIHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlID8gcmVzcG9uc2UuYm9keSA6XG4gICAgICAgICAgICAocmVzcG9uc2UgYXMgYW55KS5lcnJvciBpbnN0YW5jZW9mIEJsb2IgPyAocmVzcG9uc2UgYXMgYW55KS5lcnJvciA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgX2hlYWRlcnM6IGFueSA9IHt9OyBpZiAocmVzcG9uc2UuaGVhZGVycykgeyBmb3IgKGxldCBrZXkgb2YgcmVzcG9uc2UuaGVhZGVycy5rZXlzKCkpIHsgX2hlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGtleSk7IH19XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDA0OiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDQgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwNCA9IFByb2JsZW1EZXRhaWxzLmZyb21KUyhyZXN1bHREYXRhNDA0KTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIk5vdCBGb3VuZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDQpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwMTogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDAxID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDEgPSBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGE0MDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiVW5hdXRob3JpemVkXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMsIHJlc3VsdDQwMSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9PSAyMDAgJiYgc3RhdHVzICE9PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKFwiQW4gdW5leHBlY3RlZCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuXCIsIHN0YXR1cywgX3Jlc3BvbnNlVGV4dCwgX2hlYWRlcnMpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT4obnVsbCBhcyBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIGVuYWJsZTJGYWN0b3JBdXRoRm9yVXNlcih1c2VySWQ6IG51bWJlcik6IE9ic2VydmFibGU8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgICAgIGxldCB1cmxfID0gdGhpcy5iYXNlVXJsICsgXCIvYXBpL3NlcnZpY2VzL3dlYi91c2Vycy97dXNlcklkfS9lbmFibGUtMmZhXCI7XG4gICAgICAgIGlmICh1c2VySWQgPT09IHVuZGVmaW5lZCB8fCB1c2VySWQgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICd1c2VySWQnIG11c3QgYmUgZGVmaW5lZC5cIik7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoXCJ7dXNlcklkfVwiLCBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHVzZXJJZCkpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInB1dFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NFbmFibGUyRmFjdG9yQXV0aEZvclVzZXIocmVzcG9uc2VfKTtcbiAgICAgICAgfSkpLnBpcGUoX29ic2VydmFibGVDYXRjaCgocmVzcG9uc2VfOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZV8gaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2VCYXNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0VuYWJsZTJGYWN0b3JBdXRoRm9yVXNlcihyZXNwb25zZV8gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KGUpIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3cocmVzcG9uc2VfKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NFbmFibGUyRmFjdG9yQXV0aEZvclVzZXIocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIFN1Y2Nlc3NcbiAgICAgKi9cbiAgICBkaXNhYmxlMkZhY3RvckF1dGhGb3JVc2VyKHVzZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3VzZXJzL3t1c2VySWR9L2Rpc2FibGUtMmZhXCI7XG4gICAgICAgIGlmICh1c2VySWQgPT09IHVuZGVmaW5lZCB8fCB1c2VySWQgPT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcGFyYW1ldGVyICd1c2VySWQnIG11c3QgYmUgZGVmaW5lZC5cIik7XG4gICAgICAgIHVybF8gPSB1cmxfLnJlcGxhY2UoXCJ7dXNlcklkfVwiLCBlbmNvZGVVUklDb21wb25lbnQoXCJcIiArIHVzZXJJZCkpO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGxldCBvcHRpb25zXyA6IGFueSA9IHtcbiAgICAgICAgICAgIG9ic2VydmU6IFwicmVzcG9uc2VcIixcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInB1dFwiLCB1cmxfLCBvcHRpb25zXykucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKChyZXNwb25zZV8gOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEaXNhYmxlMkZhY3RvckF1dGhGb3JVc2VyKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEaXNhYmxlMkZhY3RvckF1dGhGb3JVc2VyKHJlc3BvbnNlXyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlVGhyb3coZSkgYXMgYW55IGFzIE9ic2VydmFibGU8VG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhyZXNwb25zZV8pIGFzIGFueSBhcyBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0Rpc2FibGUyRmFjdG9yQXV0aEZvclVzZXIocmVzcG9uc2U6IEh0dHBSZXNwb25zZUJhc2UpOiBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQmxvYiA9XG4gICAgICAgICAgICByZXNwb25zZSBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSA/IHJlc3BvbnNlLmJvZHkgOlxuICAgICAgICAgICAgKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgaW5zdGFuY2VvZiBCbG9iID8gKHJlc3BvbnNlIGFzIGFueSkuZXJyb3IgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgbGV0IF9oZWFkZXJzOiBhbnkgPSB7fTsgaWYgKHJlc3BvbnNlLmhlYWRlcnMpIHsgZm9yIChsZXQga2V5IG9mIHJlc3BvbnNlLmhlYWRlcnMua2V5cygpKSB7IF9oZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldChrZXkpOyB9fVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDQwNDogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhNDA0ID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQ0MDQgPSBQcm9ibGVtRGV0YWlscy5mcm9tSlMocmVzdWx0RGF0YTQwNCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oXCJOb3QgRm91bmRcIiwgc3RhdHVzLCBfcmVzcG9uc2VUZXh0LCBfaGVhZGVycywgcmVzdWx0NDA0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0MjAwOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGEyMDAgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDIwMCA9IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5mcm9tSlMocmVzdWx0RGF0YTIwMCk7XG4gICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZihyZXN1bHQyMDApO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYm9keSAob3B0aW9uYWwpIFxuICAgICAqIEByZXR1cm4gU3VjY2Vzc1xuICAgICAqL1xuICAgIG9wZW5JZEF1dGhlbnRpY2F0ZShib2R5OiBBdXRoZW50aWNhdGVXZWJTc29SZXF1ZXN0RHRvIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgbGV0IHVybF8gPSB0aGlzLmJhc2VVcmwgKyBcIi9hcGkvc2VydmljZXMvd2ViL3VzZXJzL29pZGMtYXV0aFwiO1xuICAgICAgICB1cmxfID0gdXJsXy5yZXBsYWNlKC9bPyZdJC8sIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRfID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG5cbiAgICAgICAgbGV0IG9wdGlvbnNfIDogYW55ID0ge1xuICAgICAgICAgICAgYm9keTogY29udGVudF8sXG4gICAgICAgICAgICBvYnNlcnZlOiBcInJlc3BvbnNlXCIsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb24tcGF0Y2granNvblwiLFxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwidGV4dC9wbGFpblwiXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChcInBvc3RcIiwgdXJsXywgb3B0aW9uc18pLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcCgocmVzcG9uc2VfIDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzT3BlbklkQXV0aGVudGljYXRlKHJlc3BvbnNlXyk7XG4gICAgICAgIH0pKS5waXBlKF9vYnNlcnZhYmxlQ2F0Y2goKHJlc3BvbnNlXzogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VfIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlQmFzZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcGVuSWRBdXRoZW50aWNhdGUocmVzcG9uc2VfIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhlKSBhcyBhbnkgYXMgT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3BvbnNlXykgYXMgYW55IGFzIE9ic2VydmFibGU8QXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzT3BlbklkQXV0aGVudGljYXRlKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2VCYXNlKTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCByZXNwb25zZUJsb2IgPVxuICAgICAgICAgICAgcmVzcG9uc2UgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UgPyByZXNwb25zZS5ib2R5IDpcbiAgICAgICAgICAgIChyZXNwb25zZSBhcyBhbnkpLmVycm9yIGluc3RhbmNlb2YgQmxvYiA/IChyZXNwb25zZSBhcyBhbnkpLmVycm9yIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBfaGVhZGVyczogYW55ID0ge307IGlmIChyZXNwb25zZS5oZWFkZXJzKSB7IGZvciAobGV0IGtleSBvZiByZXNwb25zZS5oZWFkZXJzLmtleXMoKSkgeyBfaGVhZGVyc1trZXldID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoa2V5KTsgfX1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQyMDA6IGFueSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVzdWx0RGF0YTIwMCA9IF9yZXNwb25zZVRleHQgPT09IFwiXCIgPyBudWxsIDogSlNPTi5wYXJzZShfcmVzcG9uc2VUZXh0LCB0aGlzLmpzb25QYXJzZVJldml2ZXIpO1xuICAgICAgICAgICAgcmVzdWx0MjAwID0gQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhMjAwKTtcbiAgICAgICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZU9mKHJlc3VsdDIwMCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAyMDIpIHtcbiAgICAgICAgICAgIHJldHVybiBibG9iVG9UZXh0KHJlc3BvbnNlQmxvYikucGlwZShfb2JzZXJ2YWJsZU1lcmdlTWFwKF9yZXNwb25zZVRleHQgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDIwMjogYW55ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZXN1bHREYXRhMjAyID0gX3Jlc3BvbnNlVGV4dCA9PT0gXCJcIiA/IG51bGwgOiBKU09OLnBhcnNlKF9yZXNwb25zZVRleHQsIHRoaXMuanNvblBhcnNlUmV2aXZlcik7XG4gICAgICAgICAgICByZXN1bHQyMDIgPSBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZnJvbUpTKHJlc3VsdERhdGEyMDIpO1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZhYmxlT2YocmVzdWx0MjAyKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgcmV0dXJuIGJsb2JUb1RleHQocmVzcG9uc2VCbG9iKS5waXBlKF9vYnNlcnZhYmxlTWVyZ2VNYXAoX3Jlc3BvbnNlVGV4dCA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0NDAxOiBhbnkgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlc3VsdERhdGE0MDEgPSBfcmVzcG9uc2VUZXh0ID09PSBcIlwiID8gbnVsbCA6IEpTT04ucGFyc2UoX3Jlc3BvbnNlVGV4dCwgdGhpcy5qc29uUGFyc2VSZXZpdmVyKTtcbiAgICAgICAgICAgIHJlc3VsdDQwMSA9IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmZyb21KUyhyZXN1bHREYXRhNDAxKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIlVuYXV0aG9yaXplZFwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzLCByZXN1bHQ0MDEpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgICAgICByZXR1cm4gYmxvYlRvVGV4dChyZXNwb25zZUJsb2IpLnBpcGUoX29ic2VydmFibGVNZXJnZU1hcChfcmVzcG9uc2VUZXh0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihcIkFuIHVuZXhwZWN0ZWQgc2VydmVyIGVycm9yIG9jY3VycmVkLlwiLCBzdGF0dXMsIF9yZXNwb25zZVRleHQsIF9oZWFkZXJzKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVPZjxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+KG51bGwgYXMgYW55KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3RpdmF0ZVJlc3BvbnNlRHRvIGltcGxlbWVudHMgSUFjdGl2YXRlUmVzcG9uc2VEdG8ge1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZmFTZXR1cDogVGZhU2V0dXBEdG87XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUFjdGl2YXRlUmVzcG9uc2VEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMudGZhU2V0dXAgPSBfZGF0YVtcInRmYVNldHVwXCJdID8gVGZhU2V0dXBEdG8uZnJvbUpTKF9kYXRhW1widGZhU2V0dXBcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEFjdGl2YXRlUmVzcG9uc2VEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFjdGl2YXRlUmVzcG9uc2VEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJ0ZmFTZXR1cFwiXSA9IHRoaXMudGZhU2V0dXAgPyB0aGlzLnRmYVNldHVwLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEFjdGl2YXRlUmVzcG9uc2VEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBY3RpdmF0ZVJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQWN0aXZhdGVSZXNwb25zZUR0byB7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRmYVNldHVwOiBUZmFTZXR1cER0bztcbn1cblxuZXhwb3J0IGNsYXNzIEFwcENvbmZpZ3VyYXRpb25EdG8gaW1wbGVtZW50cyBJQXBwQ29uZmlndXJhdGlvbkR0byB7XG4gICAgbmV3RWRnZUZsYWc6IGJvb2xlYW47XG4gICAgbGF0ZXN0RWRnZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBhbmFseXRpY3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGZlZWRiYWNrVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwbWw6IG51bWJlcjtcbiAgICBtaW5pbXVtU3VwcG9ydGVkU3BhcmtBcGlTZXJ2aWNlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIG1pbmltdW1Db21wYXRpYmxlU3BhcmtBcGlTZXJ2aWNlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBcHBDb25maWd1cmF0aW9uRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5uZXdFZGdlRmxhZyA9IF9kYXRhW1wibmV3RWRnZUZsYWdcIl07XG4gICAgICAgICAgICB0aGlzLmxhdGVzdEVkZ2VWZXJzaW9uID0gX2RhdGFbXCJsYXRlc3RFZGdlVmVyc2lvblwiXTtcbiAgICAgICAgICAgIHRoaXMuYW5hbHl0aWNzVG9rZW4gPSBfZGF0YVtcImFuYWx5dGljc1Rva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5mZWVkYmFja1Rva2VuID0gX2RhdGFbXCJmZWVkYmFja1Rva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5wbWwgPSBfZGF0YVtcInBtbFwiXTtcbiAgICAgICAgICAgIHRoaXMubWluaW11bVN1cHBvcnRlZFNwYXJrQXBpU2VydmljZVZlcnNpb24gPSBfZGF0YVtcIm1pbmltdW1TdXBwb3J0ZWRTcGFya0FwaVNlcnZpY2VWZXJzaW9uXCJdO1xuICAgICAgICAgICAgdGhpcy5taW5pbXVtQ29tcGF0aWJsZVNwYXJrQXBpU2VydmljZVZlcnNpb24gPSBfZGF0YVtcIm1pbmltdW1Db21wYXRpYmxlU3BhcmtBcGlTZXJ2aWNlVmVyc2lvblwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXBwQ29uZmlndXJhdGlvbkR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXBwQ29uZmlndXJhdGlvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wibmV3RWRnZUZsYWdcIl0gPSB0aGlzLm5ld0VkZ2VGbGFnO1xuICAgICAgICBkYXRhW1wibGF0ZXN0RWRnZVZlcnNpb25cIl0gPSB0aGlzLmxhdGVzdEVkZ2VWZXJzaW9uO1xuICAgICAgICBkYXRhW1wiYW5hbHl0aWNzVG9rZW5cIl0gPSB0aGlzLmFuYWx5dGljc1Rva2VuO1xuICAgICAgICBkYXRhW1wiZmVlZGJhY2tUb2tlblwiXSA9IHRoaXMuZmVlZGJhY2tUb2tlbjtcbiAgICAgICAgZGF0YVtcInBtbFwiXSA9IHRoaXMucG1sO1xuICAgICAgICBkYXRhW1wibWluaW11bVN1cHBvcnRlZFNwYXJrQXBpU2VydmljZVZlcnNpb25cIl0gPSB0aGlzLm1pbmltdW1TdXBwb3J0ZWRTcGFya0FwaVNlcnZpY2VWZXJzaW9uO1xuICAgICAgICBkYXRhW1wibWluaW11bUNvbXBhdGlibGVTcGFya0FwaVNlcnZpY2VWZXJzaW9uXCJdID0gdGhpcy5taW5pbXVtQ29tcGF0aWJsZVNwYXJrQXBpU2VydmljZVZlcnNpb247XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEFwcENvbmZpZ3VyYXRpb25EdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBcHBDb25maWd1cmF0aW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXBwQ29uZmlndXJhdGlvbkR0byB7XG4gICAgbmV3RWRnZUZsYWc6IGJvb2xlYW47XG4gICAgbGF0ZXN0RWRnZVZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBhbmFseXRpY3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGZlZWRiYWNrVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBwbWw6IG51bWJlcjtcbiAgICBtaW5pbXVtU3VwcG9ydGVkU3BhcmtBcGlTZXJ2aWNlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIG1pbmltdW1Db21wYXRpYmxlU3BhcmtBcGlTZXJ2aWNlVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBBcHBDb25maWd1cmF0aW9uRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBBcHBDb25maWd1cmF0aW9uRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQXBwQ29uZmlndXJhdGlvbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBcHBDb25maWd1cmF0aW9uRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFwcENvbmZpZ3VyYXRpb25EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXBwQ29uZmlndXJhdGlvbkR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBBcHBNb2R1bGUge1xuICAgIENjID0gMCxcbiAgICBNYW5hZ2VtZW50ID0gMSxcbiAgICBTZXR0aW5ncyA9IDIsXG4gICAgVmFsaWRhdGlvbiA9IDMsXG4gICAgR3Vlc3RzID0gNCxcbiAgICBSZXBvcnRzID0gNSxcbiAgICBNb250aGxpZXMgPSA2LFxuICAgIEJhY2tvZmZpY2UgPSA3LFxuICAgIFBpID0gOCxcbiAgICBBY2NvdW50cyA9IDksXG4gICAgTG90Q29uZmlndXJhdGlvbiA9IDEwLFxuICAgIEVDb21tZXJjZUJhY2tvZmZpY2UgPSAxMSxcbiAgICBTY2FuMlBheSA9IDEyLFxufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8gaW1wbGVtZW50cyBJQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZUJhY2tvZmZpY2VTc29SZXF1ZXN0RHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5jb2RlID0gX2RhdGFbXCJjb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy50ZW5hbnROYW1lID0gX2RhdGFbXCJ0ZW5hbnROYW1lXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVCYWNrb2ZmaWNlU3NvUmVxdWVzdER0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImNvZGVcIl0gPSB0aGlzLmNvZGU7XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnROYW1lXCJdID0gdGhpcy50ZW5hbnROYW1lO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVCYWNrb2ZmaWNlU3NvUmVxdWVzdER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZUJhY2tvZmZpY2VTc29SZXF1ZXN0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlQmFja29mZmljZVNzb1JlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8ge1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGVtcG9yYXJ5QmxvY2tlZFRpbWU6IG51bWJlcjtcbiAgICB0ZW5hbnQ6IFRlbmFudER0bztcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBfZGF0YVtcImFjY2Vzc1Rva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy50ZW1wb3JhcnlCbG9ja2VkVGltZSA9IF9kYXRhW1widGVtcG9yYXJ5QmxvY2tlZFRpbWVcIl07XG4gICAgICAgICAgICB0aGlzLnRlbmFudCA9IF9kYXRhW1widGVuYW50XCJdID8gVGVuYW50RHRvLmZyb21KUyhfZGF0YVtcInRlbmFudFwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiYWNjZXNzVG9rZW5cIl0gPSB0aGlzLmFjY2Vzc1Rva2VuO1xuICAgICAgICBkYXRhW1widGVtcG9yYXJ5QmxvY2tlZFRpbWVcIl0gPSB0aGlzLnRlbXBvcmFyeUJsb2NrZWRUaW1lO1xuICAgICAgICBkYXRhW1widGVuYW50XCJdID0gdGhpcy50ZW5hbnQgPyB0aGlzLnRlbmFudC50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8ge1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGVtcG9yYXJ5QmxvY2tlZFRpbWU6IG51bWJlcjtcbiAgICB0ZW5hbnQ6IFRlbmFudER0bztcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gaW1wbGVtZW50cyBJQXV0aGVudGljYXRlUmVxdWVzdER0byB7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBwYXNzd29yZDogc3RyaW5nO1xuICAgIHRlbmFudElkOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgdGVuYW50TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElBdXRoZW50aWNhdGVSZXF1ZXN0RHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy51c2VybmFtZSA9IF9kYXRhW1widXNlcm5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnBhc3N3b3JkID0gX2RhdGFbXCJwYXNzd29yZFwiXTtcbiAgICAgICAgICAgIHRoaXMudGVuYW50SWQgPSBfZGF0YVtcInRlbmFudElkXCJdO1xuICAgICAgICAgICAgdGhpcy50ZW5hbnROYW1lID0gX2RhdGFbXCJ0ZW5hbnROYW1lXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJ1c2VybmFtZVwiXSA9IHRoaXMudXNlcm5hbWU7XG4gICAgICAgIGRhdGFbXCJwYXNzd29yZFwiXSA9IHRoaXMucGFzc3dvcmQ7XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnRJZFwiXSA9IHRoaXMudGVuYW50SWQ7XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnROYW1lXCJdID0gdGhpcy50ZW5hbnROYW1lO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVxdWVzdER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZVJlcXVlc3REdG8ge1xuICAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICB0ZW5hbnRJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIHRlbmFudE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvIHtcbiAgICB1c2VySWQ6IG51bWJlcjtcbiAgICBmaXJzdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsYXN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVzZXJuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdXNlclN0YXR1czogVXNlclN0YXR1cztcbiAgICBwYXNzd29yZEV4cGlyYXRpb246IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgbW9kdWxlczogQXV0aGVudGljYXRlVXNlck1vZHVsZUR0b1tdIHwgdW5kZWZpbmVkO1xuICAgIGRlZmF1bHRNb2R1bGU6IEFwcE1vZHVsZTtcbiAgICB0aGlyZFBhcnR5VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZnJlc2hJbnRlcnZhbDogbnVtYmVyO1xuICAgIGV4cGlyYXRpb246IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc2V0dGluZ3M6IFNwYXJrU2V0dGluZ3NEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnQ6IFRlbmFudER0bztcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBtZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdXNlcklzVGVtcG9yYXJ5QmxvY2tlZDogYm9vbGVhbjtcbiAgICBwYXNzd29yZEV4cGlyYXRpb25TdGF0ZTogUGFzc3dvcmRFeHBpcmF0aW9uU3RhdGU7XG4gICAgZGF5c1RvRXhwaXJlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgdHdvRmFjdG9yQXV0aGVudGljYXRpb246IGJvb2xlYW47XG4gICAgdHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG86IFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvO1xuICAgIHNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvOiBTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bztcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJJZCA9IF9kYXRhW1widXNlcklkXCJdO1xuICAgICAgICAgICAgdGhpcy5maXJzdE5hbWUgPSBfZGF0YVtcImZpcnN0TmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMubGFzdE5hbWUgPSBfZGF0YVtcImxhc3ROYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy51c2VybmFtZSA9IF9kYXRhW1widXNlcm5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnVzZXJTdGF0dXMgPSBfZGF0YVtcInVzZXJTdGF0dXNcIl07XG4gICAgICAgICAgICB0aGlzLnBhc3N3b3JkRXhwaXJhdGlvbiA9IF9kYXRhW1wicGFzc3dvcmRFeHBpcmF0aW9uXCJdID8gbW9tZW50KF9kYXRhW1wicGFzc3dvcmRFeHBpcmF0aW9uXCJdLnRvU3RyaW5nKCkpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcIm1vZHVsZXNcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJtb2R1bGVzXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXMucHVzaChBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvLmZyb21KUyhpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRNb2R1bGUgPSBfZGF0YVtcImRlZmF1bHRNb2R1bGVcIl07XG4gICAgICAgICAgICB0aGlzLnRoaXJkUGFydHlUb2tlbiA9IF9kYXRhW1widGhpcmRQYXJ0eVRva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IF9kYXRhW1wiYWNjZXNzVG9rZW5cIl07XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbiA9IF9kYXRhW1wicmVmcmVzaFRva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoSW50ZXJ2YWwgPSBfZGF0YVtcInJlZnJlc2hJbnRlcnZhbFwiXTtcbiAgICAgICAgICAgIHRoaXMuZXhwaXJhdGlvbiA9IF9kYXRhW1wiZXhwaXJhdGlvblwiXSA/IG1vbWVudChfZGF0YVtcImV4cGlyYXRpb25cIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wic2V0dGluZ3NcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncyA9IFtdIGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIF9kYXRhW1wic2V0dGluZ3NcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MucHVzaChTcGFya1NldHRpbmdzRHRvLmZyb21KUyhpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRlbmFudCA9IF9kYXRhW1widGVuYW50XCJdID8gVGVuYW50RHRvLmZyb21KUyhfZGF0YVtcInRlbmFudFwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBfZGF0YVtcIm1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLnVzZXJJc1RlbXBvcmFyeUJsb2NrZWQgPSBfZGF0YVtcInVzZXJJc1RlbXBvcmFyeUJsb2NrZWRcIl07XG4gICAgICAgICAgICB0aGlzLnBhc3N3b3JkRXhwaXJhdGlvblN0YXRlID0gX2RhdGFbXCJwYXNzd29yZEV4cGlyYXRpb25TdGF0ZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF5c1RvRXhwaXJlID0gX2RhdGFbXCJkYXlzVG9FeHBpcmVcIl07XG4gICAgICAgICAgICB0aGlzLnR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uID0gX2RhdGFbXCJ0d29GYWN0b3JBdXRoZW50aWNhdGlvblwiXTtcbiAgICAgICAgICAgIHRoaXMudHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8gPSBfZGF0YVtcInR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvXCJdID8gVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8uZnJvbUpTKF9kYXRhW1widHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG9cIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvID0gX2RhdGFbXCJzaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0b1wiXSA/IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvLmZyb21KUyhfZGF0YVtcInNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVzcG9uc2VEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcInVzZXJJZFwiXSA9IHRoaXMudXNlcklkO1xuICAgICAgICBkYXRhW1wiZmlyc3ROYW1lXCJdID0gdGhpcy5maXJzdE5hbWU7XG4gICAgICAgIGRhdGFbXCJsYXN0TmFtZVwiXSA9IHRoaXMubGFzdE5hbWU7XG4gICAgICAgIGRhdGFbXCJ1c2VybmFtZVwiXSA9IHRoaXMudXNlcm5hbWU7XG4gICAgICAgIGRhdGFbXCJ1c2VyU3RhdHVzXCJdID0gdGhpcy51c2VyU3RhdHVzO1xuICAgICAgICBkYXRhW1wicGFzc3dvcmRFeHBpcmF0aW9uXCJdID0gdGhpcy5wYXNzd29yZEV4cGlyYXRpb24gPyB0aGlzLnBhc3N3b3JkRXhwaXJhdGlvbi50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMubW9kdWxlcykpIHtcbiAgICAgICAgICAgIGRhdGFbXCJtb2R1bGVzXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMubW9kdWxlcylcbiAgICAgICAgICAgICAgICBkYXRhW1wibW9kdWxlc1wiXS5wdXNoKGl0ZW0gPyBpdGVtLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJkZWZhdWx0TW9kdWxlXCJdID0gdGhpcy5kZWZhdWx0TW9kdWxlO1xuICAgICAgICBkYXRhW1widGhpcmRQYXJ0eVRva2VuXCJdID0gdGhpcy50aGlyZFBhcnR5VG9rZW47XG4gICAgICAgIGRhdGFbXCJhY2Nlc3NUb2tlblwiXSA9IHRoaXMuYWNjZXNzVG9rZW47XG4gICAgICAgIGRhdGFbXCJyZWZyZXNoVG9rZW5cIl0gPSB0aGlzLnJlZnJlc2hUb2tlbjtcbiAgICAgICAgZGF0YVtcInJlZnJlc2hJbnRlcnZhbFwiXSA9IHRoaXMucmVmcmVzaEludGVydmFsO1xuICAgICAgICBkYXRhW1wiZXhwaXJhdGlvblwiXSA9IHRoaXMuZXhwaXJhdGlvbiA/IHRoaXMuZXhwaXJhdGlvbi50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuc2V0dGluZ3MpKSB7XG4gICAgICAgICAgICBkYXRhW1wic2V0dGluZ3NcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5zZXR0aW5ncylcbiAgICAgICAgICAgICAgICBkYXRhW1wic2V0dGluZ3NcIl0ucHVzaChpdGVtID8gaXRlbS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW1widGVuYW50XCJdID0gdGhpcy50ZW5hbnQgPyB0aGlzLnRlbmFudC50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJtZXNzYWdlXCJdID0gdGhpcy5tZXNzYWdlO1xuICAgICAgICBkYXRhW1widXNlcklzVGVtcG9yYXJ5QmxvY2tlZFwiXSA9IHRoaXMudXNlcklzVGVtcG9yYXJ5QmxvY2tlZDtcbiAgICAgICAgZGF0YVtcInBhc3N3b3JkRXhwaXJhdGlvblN0YXRlXCJdID0gdGhpcy5wYXNzd29yZEV4cGlyYXRpb25TdGF0ZTtcbiAgICAgICAgZGF0YVtcImRheXNUb0V4cGlyZVwiXSA9IHRoaXMuZGF5c1RvRXhwaXJlO1xuICAgICAgICBkYXRhW1widHdvRmFjdG9yQXV0aGVudGljYXRpb25cIl0gPSB0aGlzLnR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uO1xuICAgICAgICBkYXRhW1widHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG9cIl0gPSB0aGlzLnR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvID8gdGhpcy50d29GYWN0b3JBdXRoZW50aWNhdGlvbkR0by50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG9cIl0gPSB0aGlzLnNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvID8gdGhpcy5zaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0by50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG8ge1xuICAgIHVzZXJJZDogbnVtYmVyO1xuICAgIGZpcnN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxhc3ROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdXNlcm5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VyU3RhdHVzOiBVc2VyU3RhdHVzO1xuICAgIHBhc3N3b3JkRXhwaXJhdGlvbjogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBtb2R1bGVzOiBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgZGVmYXVsdE1vZHVsZTogQXBwTW9kdWxlO1xuICAgIHRoaXJkUGFydHlUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaEludGVydmFsOiBudW1iZXI7XG4gICAgZXhwaXJhdGlvbjogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzZXR0aW5nczogU3BhcmtTZXR0aW5nc0R0b1tdIHwgdW5kZWZpbmVkO1xuICAgIHRlbmFudDogVGVuYW50RHRvO1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIG1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VySXNUZW1wb3JhcnlCbG9ja2VkOiBib29sZWFuO1xuICAgIHBhc3N3b3JkRXhwaXJhdGlvblN0YXRlOiBQYXNzd29yZEV4cGlyYXRpb25TdGF0ZTtcbiAgICBkYXlzVG9FeHBpcmU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICB0d29GYWN0b3JBdXRoZW50aWNhdGlvbjogYm9vbGVhbjtcbiAgICB0d29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bzogVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG87XG4gICAgc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG86IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gQXV0aGVudGljYXRlUmVzcG9uc2VEdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b1tdIHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wiZGF0YVwiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcImRhdGFcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvLmZyb21KUyhpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YSkpIHtcbiAgICAgICAgICAgIGRhdGFbXCJkYXRhXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuZGF0YSlcbiAgICAgICAgICAgICAgICBkYXRhW1wiZGF0YVwiXS5wdXNoKGl0ZW0gPyBpdGVtLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvTGlzdEh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0xpc3RIdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0aGVudGljYXRlUmVzcG9uc2VEdG9MaXN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8gaW1wbGVtZW50cyBJQXV0aGVudGljYXRlVXNlck1vZHVsZUR0byB7XG4gICAgbW9kdWxlOiBBcHBNb2R1bGU7XG4gICAgc3ViTW9kdWxlOiBTdWJNb2R1bGVbXSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJQXV0aGVudGljYXRlVXNlck1vZHVsZUR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubW9kdWxlID0gX2RhdGFbXCJtb2R1bGVcIl07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcInN1Yk1vZHVsZVwiXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Yk1vZHVsZSA9IFtdIGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIF9kYXRhW1wic3ViTW9kdWxlXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Yk1vZHVsZS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJtb2R1bGVcIl0gPSB0aGlzLm1vZHVsZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5zdWJNb2R1bGUpKSB7XG4gICAgICAgICAgICBkYXRhW1wic3ViTW9kdWxlXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuc3ViTW9kdWxlKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJzdWJNb2R1bGVcIl0ucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVVc2VyTW9kdWxlRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlVXNlck1vZHVsZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZVVzZXJNb2R1bGVEdG8ge1xuICAgIG1vZHVsZTogQXBwTW9kdWxlO1xuICAgIHN1Yk1vZHVsZTogU3ViTW9kdWxlW10gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGVXZWJTc29SZXF1ZXN0RHRvIGltcGxlbWVudHMgSUF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUgPSBfZGF0YVtcImNvZGVcIl07XG4gICAgICAgICAgICB0aGlzLnRlbmFudE5hbWUgPSBfZGF0YVtcInRlbmFudE5hbWVcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImNvZGVcIl0gPSB0aGlzLmNvZGU7XG4gICAgICAgIGRhdGFbXCJ0ZW5hbnROYW1lXCJdID0gdGhpcy50ZW5hbnROYW1lO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBBdXRoZW50aWNhdGVXZWJTc29SZXF1ZXN0RHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgQXV0aGVudGljYXRlV2ViU3NvUmVxdWVzdER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUF1dGhlbnRpY2F0ZVdlYlNzb1JlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0ZW5hbnROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBGYWNpbGl0eUJhc2ljRHRvIGltcGxlbWVudHMgSUZhY2lsaXR5QmFzaWNEdG8ge1xuICAgIGlkOiBudW1iZXI7XG4gICAgY2xvdWRJZDogbnVtYmVyO1xuICAgIGNsb3VkUGFyZW50SWQ6IG51bWJlcjtcbiAgICBpc0Jhc2ljOiBib29sZWFuO1xuICAgIG11bHRpUGFya1BhcmVudElEOiBudW1iZXI7XG4gICAgc2l0ZUNvZGU6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGFyZW50OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgaXNNdWx0aVBhcms6IG51bWJlcjtcbiAgICB0aW1lRHJpZnQ6IG51bWJlcjtcbiAgICBzZXJ2ZXJEYXRlVGltZTogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzcFRpbWVab25lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdG90YWxTcGFjZTogbnVtYmVyO1xuICAgIGlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNDcmVkaXRTZXJ2ZXJFbmFibGVkOiBib29sZWFuO1xuICAgIGlzTFBSQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzTFBSRW5hYmxlZDogYm9vbGVhbjtcbiAgICBpc1RpY2tldExlc3NFbmFibGVkOiBib29sZWFuO1xuICAgIGxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBjcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgbWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgYWN0aXZlOiBudW1iZXI7XG4gICAgcGVybWlzc2lvbnM6IHsgW2tleTogc3RyaW5nXTogUGVybWlzc2lvbkR0bzsgfSB8IHVuZGVmaW5lZDtcbiAgICBmZWF0dXJlUGVybWlzc2lvbnM6IFBlcm1pc3Npb25UeXBlW10gfCB1bmRlZmluZWQ7XG4gICAgZXh0ZXJuYWxJZGVudGlmaWVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUZhY2lsaXR5QmFzaWNEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gX2RhdGFbXCJpZFwiXTtcbiAgICAgICAgICAgIHRoaXMuY2xvdWRJZCA9IF9kYXRhW1wiY2xvdWRJZFwiXTtcbiAgICAgICAgICAgIHRoaXMuY2xvdWRQYXJlbnRJZCA9IF9kYXRhW1wiY2xvdWRQYXJlbnRJZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNCYXNpYyA9IF9kYXRhW1wiaXNCYXNpY1wiXTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlQYXJrUGFyZW50SUQgPSBfZGF0YVtcIm11bHRpUGFya1BhcmVudElEXCJdO1xuICAgICAgICAgICAgdGhpcy5zaXRlQ29kZSA9IF9kYXRhW1wic2l0ZUNvZGVcIl07XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBfZGF0YVtcIm5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnBhcmVudCA9IF9kYXRhW1wicGFyZW50XCJdO1xuICAgICAgICAgICAgdGhpcy5pc011bHRpUGFyayA9IF9kYXRhW1wiaXNNdWx0aVBhcmtcIl07XG4gICAgICAgICAgICB0aGlzLnRpbWVEcmlmdCA9IF9kYXRhW1widGltZURyaWZ0XCJdO1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJEYXRlVGltZSA9IF9kYXRhW1wic2VydmVyRGF0ZVRpbWVcIl0gPyBtb21lbnQoX2RhdGFbXCJzZXJ2ZXJEYXRlVGltZVwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zcFRpbWVab25lID0gX2RhdGFbXCJzcFRpbWVab25lXCJdO1xuICAgICAgICAgICAgdGhpcy50b3RhbFNwYWNlID0gX2RhdGFbXCJ0b3RhbFNwYWNlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkID0gX2RhdGFbXCJpc01haW5Db250cm9sbGVyQ29ubmVjdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZCA9IF9kYXRhW1wiaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWRcIl07XG4gICAgICAgICAgICB0aGlzLmlzQ3JlZGl0U2VydmVyRW5hYmxlZCA9IF9kYXRhW1wiaXNDcmVkaXRTZXJ2ZXJFbmFibGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc0xQUkNvbm5lY3RlZCA9IF9kYXRhW1wiaXNMUFJDb25uZWN0ZWRcIl07XG4gICAgICAgICAgICB0aGlzLmlzTFBSRW5hYmxlZCA9IF9kYXRhW1wiaXNMUFJFbmFibGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1RpY2tldExlc3NFbmFibGVkID0gX2RhdGFbXCJpc1RpY2tldExlc3NFbmFibGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBfZGF0YVtcImxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcImxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBfZGF0YVtcImNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcImNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IF9kYXRhW1wibWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPyBtb21lbnQoX2RhdGFbXCJtYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXS50b1N0cmluZygpKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBfZGF0YVtcImFjdGl2ZVwiXTtcbiAgICAgICAgICAgIGlmIChfZGF0YVtcInBlcm1pc3Npb25zXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gX2RhdGFbXCJwZXJtaXNzaW9uc1wiXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGFbXCJwZXJtaXNzaW9uc1wiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5wZXJtaXNzaW9ucylba2V5XSA9IF9kYXRhW1wicGVybWlzc2lvbnNcIl1ba2V5XSA/IFBlcm1pc3Npb25EdG8uZnJvbUpTKF9kYXRhW1wicGVybWlzc2lvbnNcIl1ba2V5XSkgOiBuZXcgUGVybWlzc2lvbkR0bygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wiZmVhdHVyZVBlcm1pc3Npb25zXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZVBlcm1pc3Npb25zID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJmZWF0dXJlUGVybWlzc2lvbnNcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZVBlcm1pc3Npb25zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmV4dGVybmFsSWRlbnRpZmllciA9IF9kYXRhW1wiZXh0ZXJuYWxJZGVudGlmaWVyXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBGYWNpbGl0eUJhc2ljRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBGYWNpbGl0eUJhc2ljRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpZFwiXSA9IHRoaXMuaWQ7XG4gICAgICAgIGRhdGFbXCJjbG91ZElkXCJdID0gdGhpcy5jbG91ZElkO1xuICAgICAgICBkYXRhW1wiY2xvdWRQYXJlbnRJZFwiXSA9IHRoaXMuY2xvdWRQYXJlbnRJZDtcbiAgICAgICAgZGF0YVtcImlzQmFzaWNcIl0gPSB0aGlzLmlzQmFzaWM7XG4gICAgICAgIGRhdGFbXCJtdWx0aVBhcmtQYXJlbnRJRFwiXSA9IHRoaXMubXVsdGlQYXJrUGFyZW50SUQ7XG4gICAgICAgIGRhdGFbXCJzaXRlQ29kZVwiXSA9IHRoaXMuc2l0ZUNvZGU7XG4gICAgICAgIGRhdGFbXCJuYW1lXCJdID0gdGhpcy5uYW1lO1xuICAgICAgICBkYXRhW1wicGFyZW50XCJdID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGRhdGFbXCJpc011bHRpUGFya1wiXSA9IHRoaXMuaXNNdWx0aVBhcms7XG4gICAgICAgIGRhdGFbXCJ0aW1lRHJpZnRcIl0gPSB0aGlzLnRpbWVEcmlmdDtcbiAgICAgICAgZGF0YVtcInNlcnZlckRhdGVUaW1lXCJdID0gdGhpcy5zZXJ2ZXJEYXRlVGltZSA/IHRoaXMuc2VydmVyRGF0ZVRpbWUudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3BUaW1lWm9uZVwiXSA9IHRoaXMuc3BUaW1lWm9uZTtcbiAgICAgICAgZGF0YVtcInRvdGFsU3BhY2VcIl0gPSB0aGlzLnRvdGFsU3BhY2U7XG4gICAgICAgIGRhdGFbXCJpc01haW5Db250cm9sbGVyQ29ubmVjdGVkXCJdID0gdGhpcy5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWRcIl0gPSB0aGlzLmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNDcmVkaXRTZXJ2ZXJFbmFibGVkXCJdID0gdGhpcy5pc0NyZWRpdFNlcnZlckVuYWJsZWQ7XG4gICAgICAgIGRhdGFbXCJpc0xQUkNvbm5lY3RlZFwiXSA9IHRoaXMuaXNMUFJDb25uZWN0ZWQ7XG4gICAgICAgIGRhdGFbXCJpc0xQUkVuYWJsZWRcIl0gPSB0aGlzLmlzTFBSRW5hYmxlZDtcbiAgICAgICAgZGF0YVtcImlzVGlja2V0TGVzc0VuYWJsZWRcIl0gPSB0aGlzLmlzVGlja2V0TGVzc0VuYWJsZWQ7XG4gICAgICAgIGRhdGFbXCJscHJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLmxwckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/IHRoaXMubHByRGlzY29ubmVjdGVkVGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcImNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA9IHRoaXMuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wibWFpbkNvbnRyb2xsZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcC50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJhY3RpdmVcIl0gPSB0aGlzLmFjdGl2ZTtcbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGRhdGFbXCJwZXJtaXNzaW9uc1wiXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wicGVybWlzc2lvbnNcIl0pW2tleV0gPSB0aGlzLnBlcm1pc3Npb25zW2tleV0gPyB0aGlzLnBlcm1pc3Npb25zW2tleV0udG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZlYXR1cmVQZXJtaXNzaW9ucykpIHtcbiAgICAgICAgICAgIGRhdGFbXCJmZWF0dXJlUGVybWlzc2lvbnNcIl0gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgdGhpcy5mZWF0dXJlUGVybWlzc2lvbnMpXG4gICAgICAgICAgICAgICAgZGF0YVtcImZlYXR1cmVQZXJtaXNzaW9uc1wiXS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJleHRlcm5hbElkZW50aWZpZXJcIl0gPSB0aGlzLmV4dGVybmFsSWRlbnRpZmllcjtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogRmFjaWxpdHlCYXNpY0R0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZhY2lsaXR5QmFzaWNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElGYWNpbGl0eUJhc2ljRHRvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGNsb3VkSWQ6IG51bWJlcjtcbiAgICBjbG91ZFBhcmVudElkOiBudW1iZXI7XG4gICAgaXNCYXNpYzogYm9vbGVhbjtcbiAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVtYmVyO1xuICAgIHNpdGVDb2RlOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBhcmVudDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGlzTXVsdGlQYXJrOiBudW1iZXI7XG4gICAgdGltZURyaWZ0OiBudW1iZXI7XG4gICAgc2VydmVyRGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc3BUaW1lWm9uZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRvdGFsU3BhY2U6IG51bWJlcjtcbiAgICBpc01haW5Db250cm9sbGVyQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzQ3JlZGl0U2VydmVyRW5hYmxlZDogYm9vbGVhbjtcbiAgICBpc0xQUkNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc0xQUkVuYWJsZWQ6IGJvb2xlYW47XG4gICAgaXNUaWNrZXRMZXNzRW5hYmxlZDogYm9vbGVhbjtcbiAgICBscHJEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIG1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIGFjdGl2ZTogbnVtYmVyO1xuICAgIHBlcm1pc3Npb25zOiB7IFtrZXk6IHN0cmluZ106IFBlcm1pc3Npb25EdG87IH0gfCB1bmRlZmluZWQ7XG4gICAgZmVhdHVyZVBlcm1pc3Npb25zOiBQZXJtaXNzaW9uVHlwZVtdIHwgdW5kZWZpbmVkO1xuICAgIGV4dGVybmFsSWRlbnRpZmllcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcyB7XG4gICAgTWFudWFsbHlSdW5aID0gMSxcbiAgICBVcGRhdGVTZXR0aW5ncyA9IDIsXG4gICAgU2V0QWN0aXZlUmF0ZSA9IDMsXG4gICAgVXBkYXRlTUNEYXRlVGltZSA9IDQsXG4gICAgUnVuTWFjcm8gPSA1LFxuICAgIFRyYW5zbWl0U3BlY2lhbERheXMgPSA2LFxufVxuXG5leHBvcnQgY2xhc3MgRmFjaWxpdHlUcmVlRHRvIGltcGxlbWVudHMgSUZhY2lsaXR5VHJlZUR0byB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBjbG91ZElkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHBhcmVudDogbnVtYmVyO1xuICAgIGd1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0eXBlOiBQYXJrQnJhbmNoVHlwZTtcbiAgICBzbWFydFBhcmtPcmlnaW5UeXBlOiBTbWFydFBhcmtUeXBlO1xuICAgIGxvY2FsSWQ6IG51bWJlcjtcbiAgICBjaGlsZHJlbjogRmFjaWxpdHlUcmVlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgYWN0aXZlOiBib29sZWFuO1xuICAgIGlzUmVnaXN0ZXJlZFRvU2NhblRvUGF5OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElGYWNpbGl0eVRyZWVEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gX2RhdGFbXCJpZFwiXTtcbiAgICAgICAgICAgIHRoaXMuY2xvdWRJZCA9IF9kYXRhW1wiY2xvdWRJZFwiXTtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50ID0gX2RhdGFbXCJwYXJlbnRcIl07XG4gICAgICAgICAgICB0aGlzLmd1aWQgPSBfZGF0YVtcImd1aWRcIl07XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBfZGF0YVtcInR5cGVcIl07XG4gICAgICAgICAgICB0aGlzLnNtYXJ0UGFya09yaWdpblR5cGUgPSBfZGF0YVtcInNtYXJ0UGFya09yaWdpblR5cGVcIl07XG4gICAgICAgICAgICB0aGlzLmxvY2FsSWQgPSBfZGF0YVtcImxvY2FsSWRcIl07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcImNoaWxkcmVuXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBfZGF0YVtcImNoaWxkcmVuXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goRmFjaWxpdHlUcmVlRHRvLmZyb21KUyhpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IF9kYXRhW1wiYWN0aXZlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1JlZ2lzdGVyZWRUb1NjYW5Ub1BheSA9IF9kYXRhW1wiaXNSZWdpc3RlcmVkVG9TY2FuVG9QYXlcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IEZhY2lsaXR5VHJlZUR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgRmFjaWxpdHlUcmVlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpZFwiXSA9IHRoaXMuaWQ7XG4gICAgICAgIGRhdGFbXCJjbG91ZElkXCJdID0gdGhpcy5jbG91ZElkO1xuICAgICAgICBkYXRhW1wibmFtZVwiXSA9IHRoaXMubmFtZTtcbiAgICAgICAgZGF0YVtcInBhcmVudFwiXSA9IHRoaXMucGFyZW50O1xuICAgICAgICBkYXRhW1wiZ3VpZFwiXSA9IHRoaXMuZ3VpZDtcbiAgICAgICAgZGF0YVtcInR5cGVcIl0gPSB0aGlzLnR5cGU7XG4gICAgICAgIGRhdGFbXCJzbWFydFBhcmtPcmlnaW5UeXBlXCJdID0gdGhpcy5zbWFydFBhcmtPcmlnaW5UeXBlO1xuICAgICAgICBkYXRhW1wibG9jYWxJZFwiXSA9IHRoaXMubG9jYWxJZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGRhdGFbXCJjaGlsZHJlblwiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIGRhdGFbXCJjaGlsZHJlblwiXS5wdXNoKGl0ZW0gPyBpdGVtLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJhY3RpdmVcIl0gPSB0aGlzLmFjdGl2ZTtcbiAgICAgICAgZGF0YVtcImlzUmVnaXN0ZXJlZFRvU2NhblRvUGF5XCJdID0gdGhpcy5pc1JlZ2lzdGVyZWRUb1NjYW5Ub1BheTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogRmFjaWxpdHlUcmVlRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgRmFjaWxpdHlUcmVlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRmFjaWxpdHlUcmVlRHRvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGNsb3VkSWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcGFyZW50OiBudW1iZXI7XG4gICAgZ3VpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHR5cGU6IFBhcmtCcmFuY2hUeXBlO1xuICAgIHNtYXJ0UGFya09yaWdpblR5cGU6IFNtYXJ0UGFya1R5cGU7XG4gICAgbG9jYWxJZDogbnVtYmVyO1xuICAgIGNoaWxkcmVuOiBGYWNpbGl0eVRyZWVEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgaXNSZWdpc3RlcmVkVG9TY2FuVG9QYXk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJRmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogRmFjaWxpdHlUcmVlRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJRmFjaWxpdHlUcmVlRHRvSUVudW1lcmFibGVIdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcImRhdGFcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJkYXRhXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChGYWNpbGl0eVRyZWVEdG8uZnJvbUpTKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBGYWNpbGl0eVRyZWVEdG9JRW51bWVyYWJsZUh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YSkpIHtcbiAgICAgICAgICAgIGRhdGFbXCJkYXRhXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuZGF0YSlcbiAgICAgICAgICAgICAgICBkYXRhW1wiZGF0YVwiXS5wdXNoKGl0ZW0gPyBpdGVtLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IEZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZhY2lsaXR5VHJlZUR0b0lFbnVtZXJhYmxlSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IEZhY2lsaXR5VHJlZUR0b1tdIHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIEh0dHBTdGF0dXNDb2RlIHtcbiAgICBDb250aW51ZSA9IDEwMCxcbiAgICBTd2l0Y2hpbmdQcm90b2NvbHMgPSAxMDEsXG4gICAgUHJvY2Vzc2luZyA9IDEwMixcbiAgICBFYXJseUhpbnRzID0gMTAzLFxuICAgIE9LID0gMjAwLFxuICAgIENyZWF0ZWQgPSAyMDEsXG4gICAgQWNjZXB0ZWQgPSAyMDIsXG4gICAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uID0gMjAzLFxuICAgIE5vQ29udGVudCA9IDIwNCxcbiAgICBSZXNldENvbnRlbnQgPSAyMDUsXG4gICAgUGFydGlhbENvbnRlbnQgPSAyMDYsXG4gICAgTXVsdGlTdGF0dXMgPSAyMDcsXG4gICAgQWxyZWFkeVJlcG9ydGVkID0gMjA4LFxuICAgIElNVXNlZCA9IDIyNixcbiAgICBNdWx0aXBsZUNob2ljZXMgPSAzMDAsXG4gICAgQW1iaWd1b3VzID0gMzAxLFxuICAgIE1vdmVkUGVybWFuZW50bHkgPSAzMDIsXG4gICAgTW92ZWQgPSAzMDMsXG4gICAgRm91bmQgPSAzMDQsXG4gICAgUmVkaXJlY3QgPSAzMDUsXG4gICAgU2VlT3RoZXIgPSAzMDYsXG4gICAgUmVkaXJlY3RNZXRob2QgPSAzMDcsXG4gICAgTm90TW9kaWZpZWQgPSAzMDgsXG4gICAgVXNlUHJveHkgPSA0MDAsXG4gICAgVW51c2VkID0gNDAxLFxuICAgIFRlbXBvcmFyeVJlZGlyZWN0ID0gNDAyLFxuICAgIFJlZGlyZWN0S2VlcFZlcmIgPSA0MDMsXG4gICAgUGVybWFuZW50UmVkaXJlY3QgPSA0MDQsXG4gICAgQmFkUmVxdWVzdCA9IDQwNSxcbiAgICBVbmF1dGhvcml6ZWQgPSA0MDYsXG4gICAgUGF5bWVudFJlcXVpcmVkID0gNDA3LFxuICAgIEZvcmJpZGRlbiA9IDQwOCxcbiAgICBOb3RGb3VuZCA9IDQwOSxcbiAgICBNZXRob2ROb3RBbGxvd2VkID0gNDEwLFxuICAgIE5vdEFjY2VwdGFibGUgPSA0MTEsXG4gICAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkID0gNDEyLFxuICAgIFJlcXVlc3RUaW1lb3V0ID0gNDEzLFxuICAgIENvbmZsaWN0ID0gNDE0LFxuICAgIEdvbmUgPSA0MTUsXG4gICAgTGVuZ3RoUmVxdWlyZWQgPSA0MTYsXG4gICAgUHJlY29uZGl0aW9uRmFpbGVkID0gNDE3LFxuICAgIFJlcXVlc3RFbnRpdHlUb29MYXJnZSA9IDQyMSxcbiAgICBSZXF1ZXN0VXJpVG9vTG9uZyA9IDQyMixcbiAgICBVbnN1cHBvcnRlZE1lZGlhVHlwZSA9IDQyMyxcbiAgICBSZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlID0gNDI0LFxuICAgIEV4cGVjdGF0aW9uRmFpbGVkID0gNDI2LFxuICAgIE1pc2RpcmVjdGVkUmVxdWVzdCA9IDQyOCxcbiAgICBVbnByb2Nlc3NhYmxlRW50aXR5ID0gNDI5LFxuICAgIFVucHJvY2Vzc2FibGVDb250ZW50ID0gNDMxLFxuICAgIExvY2tlZCA9IDQ1MSxcbiAgICBGYWlsZWREZXBlbmRlbmN5ID0gNTAwLFxuICAgIFVwZ3JhZGVSZXF1aXJlZCA9IDUwMSxcbiAgICBQcmVjb25kaXRpb25SZXF1aXJlZCA9IDUwMixcbiAgICBUb29NYW55UmVxdWVzdHMgPSA1MDMsXG4gICAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlID0gNTA0LFxuICAgIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zID0gNTA1LFxuICAgIEludGVybmFsU2VydmVyRXJyb3IgPSA1MDYsXG4gICAgTm90SW1wbGVtZW50ZWQgPSA1MDcsXG4gICAgQmFkR2F0ZXdheSA9IDUwOCxcbiAgICBTZXJ2aWNlVW5hdmFpbGFibGUgPSA1MTAsXG4gICAgR2F0ZXdheVRpbWVvdXQgPSA1MTEsXG59XG5cbmV4cG9ydCBjbGFzcyBJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSUludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiB7IFtrZXk6IHN0cmluZ106IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvOyB9IHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIGlmIChfZGF0YVtcImRhdGFcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB7fSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIF9kYXRhW1wiZGF0YVwiXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2RhdGFbXCJkYXRhXCJdLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLmRhdGEpW2tleV0gPSBfZGF0YVtcImRhdGFcIl1ba2V5XSA/IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl1ba2V5XSkgOiBuZXcgQXV0aGVudGljYXRlUmVzcG9uc2VEdG8oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGRhdGFbXCJkYXRhXCJdID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wiZGF0YVwiXSlba2V5XSA9IHRoaXMuZGF0YVtrZXldID8gdGhpcy5kYXRhW2tleV0udG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBJbnQzMkF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgSW50MzJBdXRoZW50aWNhdGVSZXNwb25zZUR0b0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUludDMyQXV0aGVudGljYXRlUmVzcG9uc2VEdG9JRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiB7IFtrZXk6IHN0cmluZ106IEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvOyB9IHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dvRHRvIGltcGxlbWVudHMgSUxvZ29EdG8ge1xuICAgIGltYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSUxvZ29EdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlID0gX2RhdGFbXCJpbWFnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogTG9nb0R0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgTG9nb0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiaW1hZ2VcIl0gPSB0aGlzLmltYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBMb2dvRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgTG9nb0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ29EdG8ge1xuICAgIGltYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IExvZ29EdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJTG9nb0R0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IExvZ29EdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgTG9nb0R0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBMb2dvRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IExvZ29EdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTG9nb0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBMb2dvRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBPYmplY3RIdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSU9iamVjdEh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBhbnkgfCB1bmRlZmluZWQ7XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IE9iamVjdEh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE9iamVjdEh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YTtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE9iamVjdEh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElPYmplY3RIdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogYW55IHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIFBhcmtCcmFuY2hUeXBlIHtcbiAgICBQYXJrID0gMCxcbiAgICBHcm91cCA9IDEsXG59XG5cbmV4cG9ydCBlbnVtIFBhc3N3b3JkQ2hhbmdlVHlwZSB7XG4gICAgUmVnaXN0cmF0aW9uID0gMCxcbiAgICBGb3Jnb3QgPSAxLFxuICAgIEV4cGlyYXRpb24gPSAyLFxufVxuXG5leHBvcnQgZW51bSBQYXNzd29yZEV4cGlyYXRpb25TdGF0ZSB7XG4gICAgTm90RXhwaXJlZCA9IDEsXG4gICAgQWJvdXRUb0V4cGlyZSA9IDIsXG4gICAgRXhwaXJlZCA9IDMsXG59XG5cbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uRHRvIGltcGxlbWVudHMgSVBlcm1pc3Npb25EdG8ge1xuICAgIHR5cGU6IFBlcm1pc3Npb25UeXBlO1xuICAgIGdyb3VwOiBQZXJtaXNzaW9uR3JvdXA7XG4gICAgc2VydmljZTogUGVybWlzc2lvblNlcnZpY2U7XG4gICAgbW9kdWxlOiBBcHBNb2R1bGU7XG4gICAgc3ViTW9kdWxlOiBTdWJNb2R1bGU7XG4gICAgbWFpbjogYm9vbGVhbjtcbiAgICBkaXNwbGF5OiBib29sZWFuO1xuICAgIGNvbW1hbmQ6IFJlbW90ZUNvbW1hbmRUeXBlcztcbiAgICBmYWNpbGl0eUNvbW1hbmQ6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzO1xuICAgIGFjdGlvbjogUmVtb3RlQWN0aW9uVHlwZXM7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVBlcm1pc3Npb25EdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBfZGF0YVtcInR5cGVcIl07XG4gICAgICAgICAgICB0aGlzLmdyb3VwID0gX2RhdGFbXCJncm91cFwiXTtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZSA9IF9kYXRhW1wic2VydmljZVwiXTtcbiAgICAgICAgICAgIHRoaXMubW9kdWxlID0gX2RhdGFbXCJtb2R1bGVcIl07XG4gICAgICAgICAgICB0aGlzLnN1Yk1vZHVsZSA9IF9kYXRhW1wic3ViTW9kdWxlXCJdO1xuICAgICAgICAgICAgdGhpcy5tYWluID0gX2RhdGFbXCJtYWluXCJdO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ID0gX2RhdGFbXCJkaXNwbGF5XCJdO1xuICAgICAgICAgICAgdGhpcy5jb21tYW5kID0gX2RhdGFbXCJjb21tYW5kXCJdO1xuICAgICAgICAgICAgdGhpcy5mYWNpbGl0eUNvbW1hbmQgPSBfZGF0YVtcImZhY2lsaXR5Q29tbWFuZFwiXTtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uID0gX2RhdGFbXCJhY3Rpb25cIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFBlcm1pc3Npb25EdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFBlcm1pc3Npb25EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcInR5cGVcIl0gPSB0aGlzLnR5cGU7XG4gICAgICAgIGRhdGFbXCJncm91cFwiXSA9IHRoaXMuZ3JvdXA7XG4gICAgICAgIGRhdGFbXCJzZXJ2aWNlXCJdID0gdGhpcy5zZXJ2aWNlO1xuICAgICAgICBkYXRhW1wibW9kdWxlXCJdID0gdGhpcy5tb2R1bGU7XG4gICAgICAgIGRhdGFbXCJzdWJNb2R1bGVcIl0gPSB0aGlzLnN1Yk1vZHVsZTtcbiAgICAgICAgZGF0YVtcIm1haW5cIl0gPSB0aGlzLm1haW47XG4gICAgICAgIGRhdGFbXCJkaXNwbGF5XCJdID0gdGhpcy5kaXNwbGF5O1xuICAgICAgICBkYXRhW1wiY29tbWFuZFwiXSA9IHRoaXMuY29tbWFuZDtcbiAgICAgICAgZGF0YVtcImZhY2lsaXR5Q29tbWFuZFwiXSA9IHRoaXMuZmFjaWxpdHlDb21tYW5kO1xuICAgICAgICBkYXRhW1wiYWN0aW9uXCJdID0gdGhpcy5hY3Rpb247XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFBlcm1pc3Npb25EdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBQZXJtaXNzaW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUGVybWlzc2lvbkR0byB7XG4gICAgdHlwZTogUGVybWlzc2lvblR5cGU7XG4gICAgZ3JvdXA6IFBlcm1pc3Npb25Hcm91cDtcbiAgICBzZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZTtcbiAgICBtb2R1bGU6IEFwcE1vZHVsZTtcbiAgICBzdWJNb2R1bGU6IFN1Yk1vZHVsZTtcbiAgICBtYWluOiBib29sZWFuO1xuICAgIGRpc3BsYXk6IGJvb2xlYW47XG4gICAgY29tbWFuZDogUmVtb3RlQ29tbWFuZFR5cGVzO1xuICAgIGZhY2lsaXR5Q29tbWFuZDogRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXM7XG4gICAgYWN0aW9uOiBSZW1vdGVBY3Rpb25UeXBlcztcbn1cblxuZXhwb3J0IGVudW0gUGVybWlzc2lvbkdyb3VwIHtcbiAgICBOb25lID0gMCxcbiAgICBHZW5lcmFsUGVybWlzc2lvbnMgPSAxLFxuICAgIEFkdmFuY2VkT3B0aW9ucyA9IDIsXG4gICAgVGlja2V0UGVybWlzc2lvbnMgPSAzLFxuICAgIFBhcmtpbmdMb3RQZXJtaXNzaW9ucyA9IDQsXG59XG5cbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25TZXJ2aWNlIHtcbiAgICBDbG91ZCA9IDAsXG4gICAgU3BhcmtDb3JlID0gMSxcbiAgICBDbG91ZFNwYXJrQ29yZSA9IDIsXG4gICAgU21hcnRQYXJrID0gMyxcbn1cblxuZXhwb3J0IGVudW0gUGVybWlzc2lvblR5cGUge1xuICAgIENjTWFpbiA9IDAsXG4gICAgRGVwcmVjYXRlZEFkbWluTWFpbiA9IDEsXG4gICAgVW5sb2NrRG9vciA9IDIsXG4gICAgVmVuZEdhdGUgPSAzLFxuICAgIFZhbGlkYXRlID0gNCxcbiAgICBTZXRQcmljZSA9IDUsXG4gICAgUmVzdG9yZVRpY2tldCA9IDYsXG4gICAgQ2hhbmdlRGV2aWNlQWNjZXNzTW9kZSA9IDcsXG4gICAgUmVzZXREZXZpY2VBY2Nlc3NNb2RlID0gOCxcbiAgICBSZXN0YXJ0RGV2aWNlID0gOSxcbiAgICBSZXNldEJpbGxEaXNwZW5zZXIgPSAxMCxcbiAgICBDbG9zZUdhdGUgPSAxMSxcbiAgICBFamVjdEphbW1lZFRpY2tldCA9IDEyLFxuICAgIFN3YWxsb3dKYW1tZWRUaWNrZXQgPSAxMyxcbiAgICBEZWxpdmVyQnVuZGxlQmlsbHMgPSAxNCxcbiAgICBMb2NrQ2FzaFJlZ2lzdGVyID0gMTUsXG4gICAgU2V0UmF0ZSA9IDE2LFxuICAgIEluc2VydFZpcnR1YWxUaWNrZXQgPSAxNyxcbiAgICBIb2xkUmVsYXkgPSAxOCxcbiAgICBPcGVuUmVsYXkgPSAxOSxcbiAgICBQcmludFRpY2tldCA9IDIwLFxuICAgIFRyaWdnZXJMUFJNb2R1bGUgPSAyMSxcbiAgICBFbmFibGVSZXByaW50UmVjZWlwdCA9IDIyLFxuICAgIE9wZW5HYXRlQ29udGludW91c2x5ID0gMjMsXG4gICAgQ2xvc2VHYXRlQ29udGludW91c2x5ID0gMjQsXG4gICAgTWFudWFsbHlDbG9zZVRpY2tldCA9IDI1LFxuICAgIFVwZGF0ZUxvY2F0aW9uID0gMjYsXG4gICAgVXBkYXRlT2NjdXBhbmN5ID0gMjcsXG4gICAgQXR0YWNoVGlja2V0ID0gMjgsXG4gICAgVXBkYXRlTGljZW5zZVBsYXRlID0gMjksXG4gICAgTG9zdFRpY2tldCA9IDMwLFxuICAgIEluc2VydFJlbW90ZVZhbGlkYXRpb24gPSAzMSxcbiAgICBVcGRhdGVQYXltZW50ID0gMzIsXG4gICAgVXBkYXRlWm9uZU9jY3VwYW5jeSA9IDMzLFxuICAgIFVwZGF0ZVJlbW90ZVZhbGlkYXRpb24gPSAzNCxcbiAgICBWYWxpZGF0aW9uTWFpbiA9IDM1LFxuICAgIFZhbGlkYXRpb25FVmFsaWRhdGlvblZpZXcgPSAzNixcbiAgICBWYWxpZGF0aW9uU3RpY2tlclZpZXcgPSAzNyxcbiAgICBWYWxpZGF0aW9uQ291cG9uVmlldyA9IDM4LFxuICAgIFJlcG9ydHNNYWluID0gMzksXG4gICAgR3Vlc3RNYWluID0gNDAsXG4gICAgVXBkYXRlRG9jdW1lbnQgPSA0MSxcbiAgICBWaWV3UmV2ZW51ZSA9IDQyLFxuICAgIFByaW50UmVjZWlwdCA9IDQzLFxuICAgIE1vbnRobGllc01haW4gPSA0NCxcbiAgICBQaU1haW4gPSA0NSxcbiAgICBHdWVzdEdyb3VwVmlldyA9IDQ2LFxuICAgIFNpbmdsZUd1ZXN0ID0gNDcsXG4gICAgQ2xvc2VUaWNrZXRGb3JJU0YgPSA0OCxcbiAgICBQYXltZW50Rm9ySVNGID0gNDksXG4gICAgTWFudWFsbHlSdW5aID0gNTAsXG4gICAgVXBkYXRlU2V0dGluZ3MgPSA1MSxcbiAgICBTZXRBY3RpdmVSYXRlID0gNTIsXG4gICAgVXBkYXRlTUNEYXRlVGltZSA9IDUzLFxuICAgIEd1ZXN0SG90ZWxHdWVzdFZpZXcgPSA1NCxcbiAgICBHdWVzdFZpZXcgPSA1NSxcbiAgICBBY2NvdW50TWFuYWdlbWVudE1haW4gPSA1NixcbiAgICBBY2NvdW50TWFuYWdlbWVudEFjY291bnRWaWV3ID0gNTcsXG4gICAgTW9udGhsaWVzVmlldyA9IDU4LFxuICAgIE1vbnRobHlTZXJpZXNDcmVhdGUgPSA1OSxcbiAgICBSdW5NYWNybyA9IDYwLFxuICAgIFRlbmFudFNldHRpbmdzTWFpbiA9IDYxLFxuICAgIE1hbmFnZW1lbnRBZG1pbiA9IDYyLFxuICAgIEJsYWNrTGlzdCA9IDYzLFxuICAgIFN5c3RlbUFkbWluID0gNjQsXG4gICAgT3BlcmF0aW9uYWxBZG1pbiA9IDY1LFxuICAgIEZhY2lsaXRpZXNBbmRTbWFydHBhcmtzID0gNjYsXG4gICAgTG9nbyA9IDY3LFxuICAgIFNtdHBTZXR0aW5ncyA9IDY4LFxuICAgIERlZmF1bHRVc2VyU2V0dGluZ3MgPSA2OSxcbiAgICBBdWRpdCA9IDcwLFxuICAgIEJhY2tvZmZpY2VNYWluID0gNzEsXG4gICAgTG90Q29uZmlndXJhdGlvbk1haW4gPSA3MixcbiAgICBMb3RDb25maWd1cmF0aW9uUmF0ZXMgPSA3MyxcbiAgICBMb3RDb25maWd1cmF0aW9uU2NoZWR1bGVyID0gNzQsXG4gICAgTG90Q29uZmlndXJhdGlvblZhbGlkYXRpb25Qcm9maWxlID0gNzUsXG4gICAgSG90ZWxHdWVzdElPQ3JlYXRlID0gNzYsXG4gICAgRUNvbW1lcmNlQmFja29mZmljZU1haW4gPSA3NyxcbiAgICBWYWxpZGF0aW9uRVZhbGlkYXRpb25DcmVhdGUgPSA3OCxcbiAgICBWYWxpZGF0aW9uRVZhbGlkYXRpb25VcGRhdGUgPSA3OSxcbiAgICBWYWxpZGF0aW9uRVZhbGlkYXRpb25EZWxldGUgPSA4MCxcbiAgICBWYWxpZGF0aW9uU3RpY2tlckNyZWF0ZSA9IDgxLFxuICAgIFZhbGlkYXRpb25TdGlja2VyVXBkYXRlID0gODIsXG4gICAgVmFsaWRhdGlvblN0aWNrZXJEZWxldGUgPSA4MyxcbiAgICBWYWxpZGF0aW9uQ291cG9uQ3JlYXRlID0gODQsXG4gICAgVmFsaWRhdGlvbkNvdXBvblVwZGF0ZSA9IDg1LFxuICAgIFZhbGlkYXRpb25Db3Vwb25EZWxldGUgPSA4NixcbiAgICBHdWVzdEdyb3VwQ3JlYXRlID0gODcsXG4gICAgQWNjb3VudE1hbmFnZW1lbnRBY2NvdW50Q3JlYXRlID0gODgsXG4gICAgQWNjb3VudE1hbmFnZW1lbnRBY2NvdW50VXBkYXRlID0gODksXG4gICAgQWNjb3VudE1hbmFnZW1lbnRBY2NvdW50RGVsZXRlID0gOTAsXG4gICAgTW9udGhsaWVzQ3JlYXRlID0gOTEsXG4gICAgTW9udGhsaWVzVXBkYXRlID0gOTIsXG4gICAgTW9udGhsaWVzRGVsZXRlID0gOTMsXG4gICAgR3Vlc3RDcmVhdGUgPSA5NCxcbiAgICBHdWVzdFVwZGF0ZSA9IDk1LFxuICAgIEd1ZXN0RGVsZXRlID0gOTYsXG4gICAgQ2xvc2VQYXltZW50U2NyZWVuID0gOTcsXG4gICAgRUNvbW1lcmNlQWRtaW4gPSA5OCxcbiAgICBFQ29tbWVyY2VSZWd1bGFyID0gOTksXG4gICAgTG90Q29uZmlndXJhdGlvbkFjY2Vzc1Byb2ZpbGUgPSAxMDAsXG4gICAgQ2FuY2VsUmVjZWlwdCA9IDEwMSxcbiAgICBHdWVzdEFkdmFuY2VkID0gMTAyLFxuICAgIEd1ZXN0R3JvdXBBZHZhbmNlZCA9IDEwMyxcbiAgICBHdWVzdEhvdGVsR3Vlc3RDcmVhdGUgPSAxMDQsXG4gICAgR3Vlc3RIb3RlbEd1ZXN0VXBkYXRlID0gMTA1LFxuICAgIEd1ZXN0SG90ZWxHdWVzdERlbGV0ZSA9IDEwNixcbiAgICBJbXBvcnRlclRvb2xWaWV3ID0gMTA3LFxuICAgIEd1ZXN0RVZvdWNoZXJWaWV3ID0gMTA4LFxuICAgIExvdENvbmZpZ3VyYXRpb25EeW5hbWljUHJpY2luZyA9IDEwOSxcbiAgICBEaWdpdGFsUmVjZXBpdCA9IDExMCxcbiAgICBBbGxBY2NvdW50cyA9IDExMSxcbiAgICBBbGxWYWxpZGF0aW9ucyA9IDExMixcbiAgICBNb250aGxpZXNDcmVhdGVBZHZhbmNlZCA9IDExMyxcbiAgICBNb250aGxpZXNVcGRhdGVBZHZhbmNlZCA9IDExNCxcbiAgICBNb250aGx5U2VyaWVzQ3JlYXRlQWR2YW5jZWQgPSAxMTUsXG4gICAgR3Vlc3RDcmVhdGVBZHZhbmNlZCA9IDExNixcbiAgICBHdWVzdFVwZGF0ZUFkdmFuY2VkID0gMTE3LFxuICAgIEd1ZXN0R3JvdXBDcmVhdGVBZHZhbmNlZCA9IDExOCxcbiAgICBHdWVzdEhvdGVsR3Vlc3RDcmVhdGVBZHZhbmNlZCA9IDExOSxcbiAgICBHdWVzdEhvdGVsR3Vlc3RVcGRhdGVBZHZhbmNlZCA9IDEyMCxcbiAgICBWYWxpZGF0aW9uU3RpY2tlckNyZWF0ZUFkdmFuY2VkID0gMTIxLFxuICAgIFZhbGlkYXRpb25TdGlja2VyVXBkYXRlQWR2YW5jZWQgPSAxMjIsXG4gICAgVmFsaWRhdGlvbkNvdXBvbkNyZWF0ZUFkdmFuY2VkID0gMTIzLFxuICAgIFZhbGlkYXRpb25Db3Vwb25VcGRhdGVBZHZhbmNlZCA9IDEyNCxcbiAgICBWYWxpZGF0aW9uU2VsZlZhbGlkYXRpb25WaWV3ID0gMTI1LFxuICAgIFZhbGlkYXRpb25TZWxmVmFsaWRhdGlvbkNyZWF0ZSA9IDEyNixcbiAgICBWYWxpZGF0aW9uU2VsZlZhbGlkYXRpb25VcGRhdGUgPSAxMjcsXG4gICAgVmFsaWRhdGlvblNlbGZWYWxpZGF0aW9uRGVsZXRlID0gMTI4LFxuICAgIExvdENvbmZpZ3VyYXRpb25DYXNoaWVyTWFuYWdlbWVudCA9IDEyOSxcbiAgICBIb3RlbEd1ZXN0SU9WaWV3ID0gMTMwLFxuICAgIENyZWF0ZVRpY2tldEJ5TGljZW5zZVBsYXRlID0gMTMxLFxuICAgIEVuZm9yY2VtZW50SW50ZWdyYXRpb24gPSAxMzIsXG4gICAgU2NhbjJQYXlNYWluID0gMTMzLFxuICAgIFNjYW4yUGF5ID0gMTM0LFxuICAgIE1vbnRobGllc1NlbmRBbmRQcmludCA9IDEzNSxcbiAgICBHdWVzdFNlbmRBbmRQcmludCA9IDEzNixcbiAgICBHdWVzdEhvdGVsR3Vlc3RTZW5kQW5kUHJpbnQgPSAxMzcsXG4gICAgVmFsaWRhdGlvbkNvdXBvblNlbmRBbmRQcmludCA9IDEzOCxcbiAgICBWYWxpZGF0aW9uU3RpY2tlclNlbmRBbmRQcmludCA9IDEzOSxcbiAgICBBdXRob3JpemF0aW9uID0gLTEsXG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ibGVtRGV0YWlscyBpbXBsZW1lbnRzIElQcm9ibGVtRGV0YWlscyB7XG4gICAgdHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgc3RhdHVzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgZGV0YWlsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaW5zdGFuY2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIFtrZXk6IHN0cmluZ106IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJUHJvYmxlbURldGFpbHMpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBfZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChfZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbcHJvcGVydHldID0gX2RhdGFbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50eXBlID0gX2RhdGFbXCJ0eXBlXCJdO1xuICAgICAgICAgICAgdGhpcy50aXRsZSA9IF9kYXRhW1widGl0bGVcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IF9kYXRhW1wic3RhdHVzXCJdO1xuICAgICAgICAgICAgdGhpcy5kZXRhaWwgPSBfZGF0YVtcImRldGFpbFwiXTtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UgPSBfZGF0YVtcImluc3RhbmNlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBQcm9ibGVtRGV0YWlscyB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgUHJvYmxlbURldGFpbHMoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgIGRhdGFbcHJvcGVydHldID0gdGhpc1twcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInR5cGVcIl0gPSB0aGlzLnR5cGU7XG4gICAgICAgIGRhdGFbXCJ0aXRsZVwiXSA9IHRoaXMudGl0bGU7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNcIl0gPSB0aGlzLnN0YXR1cztcbiAgICAgICAgZGF0YVtcImRldGFpbFwiXSA9IHRoaXMuZGV0YWlsO1xuICAgICAgICBkYXRhW1wiaW5zdGFuY2VcIl0gPSB0aGlzLmluc3RhbmNlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBQcm9ibGVtRGV0YWlscyB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFByb2JsZW1EZXRhaWxzKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUHJvYmxlbURldGFpbHMge1xuICAgIHR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHN0YXR1czogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGRldGFpbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGluc3RhbmNlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBSZWZyZXNoVG9rZW5EdG8gaW1wbGVtZW50cyBJUmVmcmVzaFRva2VuRHRvIHtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGV4cGlyYXRpb246IG1vbWVudC5Nb21lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVJlZnJlc2hUb2tlbkR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBfZGF0YVtcImFjY2Vzc1Rva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4gPSBfZGF0YVtcInJlZnJlc2hUb2tlblwiXTtcbiAgICAgICAgICAgIHRoaXMuZXhwaXJhdGlvbiA9IF9kYXRhW1wiZXhwaXJhdGlvblwiXSA/IG1vbWVudChfZGF0YVtcImV4cGlyYXRpb25cIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogUmVmcmVzaFRva2VuRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBSZWZyZXNoVG9rZW5EdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImFjY2Vzc1Rva2VuXCJdID0gdGhpcy5hY2Nlc3NUb2tlbjtcbiAgICAgICAgZGF0YVtcInJlZnJlc2hUb2tlblwiXSA9IHRoaXMucmVmcmVzaFRva2VuO1xuICAgICAgICBkYXRhW1wiZXhwaXJhdGlvblwiXSA9IHRoaXMuZXhwaXJhdGlvbiA/IHRoaXMuZXhwaXJhdGlvbi50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlZnJlc2hUb2tlbkR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlZnJlc2hUb2tlbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlZnJlc2hUb2tlbkR0byB7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBleHBpcmF0aW9uOiBtb21lbnQuTW9tZW50O1xufVxuXG5leHBvcnQgY2xhc3MgUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YSBpbXBsZW1lbnRzIElSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogUmVmcmVzaFRva2VuRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEpIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IF9kYXRhW1wiZXJyb3JNZXNzYWdlXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IF9kYXRhW1wic3RhdHVzQ29kZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IF9kYXRhW1wiZGF0YVwiXSA/IFJlZnJlc2hUb2tlbkR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImVycm9yTWVzc2FnZVwiXSA9IHRoaXMuZXJyb3JNZXNzYWdlO1xuICAgICAgICBkYXRhW1wiaXNTdWNjZXNzXCJdID0gdGhpcy5pc1N1Y2Nlc3M7XG4gICAgICAgIGRhdGFbXCJzdGF0dXNDb2RlXCJdID0gdGhpcy5zdGF0dXNDb2RlO1xuICAgICAgICBkYXRhW1wiZGF0YVwiXSA9IHRoaXMuZGF0YSA/IHRoaXMuZGF0YS50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZWZyZXNoVG9rZW5EdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgUmVmcmVzaFRva2VuRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlZnJlc2hUb2tlbkR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBSZWZyZXNoVG9rZW5EdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGVudW0gUmVtb3RlQWN0aW9uVHlwZXMge1xuICAgIFVwZGF0ZUxpY2Vuc2VQbGF0ZSA9IDEsXG4gICAgVXBkYXRlRG9jdW1lbnQgPSAyLFxuICAgIFZpZXdSZXZlbnVlID0gMyxcbiAgICBQcmludFJlY2VpcHQgPSA0LFxufVxuXG5leHBvcnQgZW51bSBSZW1vdGVDb21tYW5kVHlwZXMge1xuICAgIFVubG9ja0Rvb3IgPSAwLFxuICAgIFZlbmRHYXRlID0gMSxcbiAgICBWYWxpZGF0ZSA9IDIsXG4gICAgU2V0UHJpY2UgPSAzLFxuICAgIFJlc3RvcmVUaWNrZXQgPSA0LFxuICAgIENoYW5nZURldmljZUFjY2Vzc01vZGUgPSA1LFxuICAgIFJlc2V0RGV2aWNlQWNjZXNzTW9kZSA9IDYsXG4gICAgUmVzdGFydERldmljZSA9IDcsXG4gICAgUmVzZXRCaWxsRGlzcGVuc2VyID0gOCxcbiAgICBDbG9zZUdhdGUgPSA5LFxuICAgIEVqZWN0SmFtbWVkVGlja2V0ID0gMTAsXG4gICAgU3dhbGxvd0phbW1lZFRpY2tldCA9IDExLFxuICAgIERlbGl2ZXJCdW5kbGVCaWxscyA9IDEyLFxuICAgIExvY2tDYXNoUmVnaXN0ZXIgPSAxMyxcbiAgICBTZXRSYXRlID0gMTQsXG4gICAgSW5zZXJ0VmlydHVhbFRpY2tldCA9IDE1LFxuICAgIEhvbGRSZWxheSA9IDE2LFxuICAgIE9wZW5SZWxheSA9IDE3LFxuICAgIFByaW50VGlja2V0ID0gMTgsXG4gICAgVHJpZ2dlckxQUk1vZHVsZSA9IDE5LFxuICAgIEVuYWJsZVJlcHJpbnRSZWNlaXB0ID0gMjAsXG4gICAgT3BlbkdhdGVDb250aW51b3VzbHkgPSAyMSxcbiAgICBDbG9zZUdhdGVDb250aW51b3VzbHkgPSAyMixcbiAgICBTZW5kUGFyYW1ldGVycyA9IDIzLFxuICAgIFNlbmRLZXlPcHRpb25zID0gMjQsXG4gICAgTWFudWFsbHlDbG9zZVRpY2tldCA9IDMwLFxuICAgIFVwZGF0ZUxvY2F0aW9uID0gMzEsXG4gICAgVXBkYXRlT2NjdXBhbmN5ID0gMzIsXG4gICAgQXR0YWNoVGlja2V0ID0gMzMsXG4gICAgSW5zZXJ0UmVtb3RlVmFsaWRhdGlvbiA9IDM2LFxuICAgIFVwZGF0ZVJlbW90ZVZhbGlkYXRpb24gPSAzNyxcbiAgICBEZWxldGVSZW1vdGVWYWxpZGF0aW9uID0gMzksXG4gICAgUmVzdG9yZVJlbW90ZVZhbGlkYXRpb24gPSA0MCxcbiAgICBVcGRhdGVUb3RhbE9jY3VwYW5jeSA9IDQxLFxuICAgIFVwZGF0ZVpvbmVPY2N1cGFuY3kgPSA0MixcbiAgICBDbG9zZVRpY2tldEZvcklTRiA9IDQzLFxuICAgIFBheW1lbnRGb3JJU0YgPSA0NCxcbiAgICBEZWxldGVUaWNrZXQgPSA0NSxcbiAgICBDbG9zZVBheW1lbnRTY3JlZW4gPSA0NixcbiAgICBVcGRhdGVBbGxWYWxpZGF0aW9uID0gNDcsXG4gICAgQ2FuY2VsUmVjZWlwdCA9IDQ4LFxuICAgIFJlc3RhcnRTbWFydHBhcmsgPSA0OSxcbiAgICBTZW5kRGlnaXRhbFJlY2VpcHRQYXJhbXMgPSA1MCxcbiAgICBTZW5kU3VyY2hhcmdlID0gNTEsXG4gICAgU2VuZExvdFNldHVwID0gNTIsXG4gICAgU2VuZFJhdGVJbWFnZXMgPSA1MyxcbiAgICBVcGRhdGVTbWFydFpvbmVPY2N1cGFuY3kgPSA1NCxcbiAgICBDcmVhdGVUaWNrZXRCeUxpY2Vuc2VQbGF0ZSA9IDU1LFxuICAgIENyZWF0ZVFyT25UaWNrZXQgPSA1NixcbiAgICBHZXRUaWNrZXRGZWUgPSAxMDAwLFxuICAgIFVwZGF0ZVRpY2tldFBheW1lbnQgPSAxMDAxLFxuICAgIFVwZGF0ZUNvbXBhbmllc0NvdW50ZXIgPSAxMDAyLFxufVxuXG5leHBvcnQgY2xhc3MgU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIGltcGxlbWVudHMgSVNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBpc1NtYXJ0UGFya0Nvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNTcGFya0NvcmVDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNTcGFya0Nsb3VkQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIHNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzbWFydFBhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcDogbW9tZW50Lk1vbWVudCB8IHVuZGVmaW5lZDtcbiAgICBzcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gX2RhdGFbXCJpZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTbWFydFBhcmtDb25uZWN0ZWQgPSBfZGF0YVtcImlzU21hcnRQYXJrQ29ubmVjdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1NtYXJ0UGFya0NvcmVDb25uZWN0ZWQgPSBfZGF0YVtcImlzU21hcnRQYXJrQ29yZUNvbm5lY3RlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTcGFya0NvcmVDb25uZWN0ZWQgPSBfZGF0YVtcImlzU3BhcmtDb3JlQ29ubmVjdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5pc1NwYXJrQ2xvdWRDb25uZWN0ZWQgPSBfZGF0YVtcImlzU3BhcmtDbG91ZENvbm5lY3RlZFwiXTtcbiAgICAgICAgICAgIHRoaXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wID0gX2RhdGFbXCJzbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPyBtb21lbnQoX2RhdGFbXCJzbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IF9kYXRhW1wic21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcInNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID0gX2RhdGFbXCJzcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPyBtb21lbnQoX2RhdGFbXCJzcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IF9kYXRhW1wic3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcFwiXSA/IG1vbWVudChfZGF0YVtcInNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0udG9TdHJpbmcoKSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImlkXCJdID0gdGhpcy5pZDtcbiAgICAgICAgZGF0YVtcImlzU21hcnRQYXJrQ29ubmVjdGVkXCJdID0gdGhpcy5pc1NtYXJ0UGFya0Nvbm5lY3RlZDtcbiAgICAgICAgZGF0YVtcImlzU21hcnRQYXJrQ29yZUNvbm5lY3RlZFwiXSA9IHRoaXMuaXNTbWFydFBhcmtDb3JlQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNTcGFya0NvcmVDb25uZWN0ZWRcIl0gPSB0aGlzLmlzU3BhcmtDb3JlQ29ubmVjdGVkO1xuICAgICAgICBkYXRhW1wiaXNTcGFya0Nsb3VkQ29ubmVjdGVkXCJdID0gdGhpcy5pc1NwYXJrQ2xvdWRDb25uZWN0ZWQ7XG4gICAgICAgIGRhdGFbXCJzbWFydFBhcmtEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLnNtYXJ0UGFya0Rpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/IHRoaXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXBcIl0gPSB0aGlzLnNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPyB0aGlzLnNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAudG9JU09TdHJpbmcoKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICBkYXRhW1wic3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID0gdGhpcy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPyB0aGlzLnNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcC50b0lTT1N0cmluZygpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wXCJdID0gdGhpcy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wID8gdGhpcy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wLnRvSVNPU3RyaW5nKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGlzU21hcnRQYXJrQ29ubmVjdGVkOiBib29sZWFuO1xuICAgIGlzU21hcnRQYXJrQ29yZUNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc1NwYXJrQ29yZUNvbm5lY3RlZDogYm9vbGVhbjtcbiAgICBpc1NwYXJrQ2xvdWRDb25uZWN0ZWQ6IGJvb2xlYW47XG4gICAgc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG4gICAgc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wOiBtb21lbnQuTW9tZW50IHwgdW5kZWZpbmVkO1xuICAgIHNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXA6IG1vbWVudC5Nb21lbnQgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIFNldHRpbmdzQ2F0ZWdvcnkge1xuICAgIERhdGVGb3JtYXRzID0gMCxcbiAgICBBbGVydHMgPSAxLFxuICAgIFRpY2tldHNTcGVjaWZpY2F0aW9ucyA9IDIsXG4gICAgTG9jYWxpemF0aW9uID0gMyxcbiAgICBBbGVydHNQcmVmZXJlbmNlc09sZCA9IDQsXG4gICAgVHdvRmFjdG9yQXV0aGVudGljYXRpb24gPSA1LFxuICAgIEVDb21tZXJjZUJhY2tvZmZpY2VVUkwgPSA2LFxuICAgIFNTTyA9IDcsXG4gICAgUGFzc3dvcmRQb2xpY3kgPSA4LFxuICAgIERpZ2l0YWxSZWNlaXB0UHJvdmlkZXJzU2V0dGluZ3MgPSA5LFxuICAgIE5vdGlmaWNhdGlvblByZWZlcmVuY2VzT2xkID0gMTAsXG4gICAgU3BlY2lhbFRyYW5zaWVudCA9IDExLFxuICAgIEFsZXJ0c1ByZWZlcmVuY2VzID0gMTIsXG4gICAgTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMgPSAxMyxcbiAgICBFbmZvcmNlbWVudEludGVncmF0aW9uU2V0dGluZ3MgPSAxNCxcbiAgICBTY2FuMlBheSA9IDE1LFxufVxuXG5leHBvcnQgY2xhc3MgU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8gaW1wbGVtZW50cyBJU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8ge1xuICAgIHVzZXJTdGF0dXM6IFVzZXJTdGF0dXM7XG4gICAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xuICAgIHNpbmdsZVNpZ25PblByb3ZpZGVyOiBTaW5nbGVTaWduT25Qcm92aWRlcjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJTdGF0dXMgPSBfZGF0YVtcInVzZXJTdGF0dXNcIl07XG4gICAgICAgICAgICB0aGlzLmlzQXV0aGVudGljYXRlZCA9IF9kYXRhW1wiaXNBdXRoZW50aWNhdGVkXCJdO1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVTaWduT25Qcm92aWRlciA9IF9kYXRhW1wic2luZ2xlU2lnbk9uUHJvdmlkZXJcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1widXNlclN0YXR1c1wiXSA9IHRoaXMudXNlclN0YXR1cztcbiAgICAgICAgZGF0YVtcImlzQXV0aGVudGljYXRlZFwiXSA9IHRoaXMuaXNBdXRoZW50aWNhdGVkO1xuICAgICAgICBkYXRhW1wic2luZ2xlU2lnbk9uUHJvdmlkZXJcIl0gPSB0aGlzLnNpbmdsZVNpZ25PblByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8ge1xuICAgIHVzZXJTdGF0dXM6IFVzZXJTdGF0dXM7XG4gICAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xuICAgIHNpbmdsZVNpZ25PblByb3ZpZGVyOiBTaW5nbGVTaWduT25Qcm92aWRlcjtcbn1cblxuZXhwb3J0IGVudW0gU2luZ2xlU2lnbk9uUHJvdmlkZXIge1xuICAgIE1pY3Jvc29mdCA9IDEsXG4gICAgUGluZ0ZlZGVyYXRlID0gMixcbn1cblxuZXhwb3J0IGVudW0gU21hcnRQYXJrVHlwZSB7XG4gICAgU2luZ2xlUGFyayA9IDAsXG4gICAgTXVsdGlQYXJrID0gMSxcbiAgICBTdXBlclBhcmsgPSAyLFxufVxuXG5leHBvcnQgY2xhc3MgU21hcnRQYXJrV3JhcHBlckR0byBpbXBsZW1lbnRzIElTbWFydFBhcmtXcmFwcGVyRHRvIHtcbiAgICBzbWFydFBhcmtzOiB7IFtrZXk6IHN0cmluZ106IFNtYXJ0cGFya0Jhc2ljRHRvOyB9IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElTbWFydFBhcmtXcmFwcGVyRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wic21hcnRQYXJrc1wiXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc21hcnRQYXJrcyA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gX2RhdGFbXCJzbWFydFBhcmtzXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcInNtYXJ0UGFya3NcIl0uaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMuc21hcnRQYXJrcylba2V5XSA9IF9kYXRhW1wic21hcnRQYXJrc1wiXVtrZXldID8gU21hcnRwYXJrQmFzaWNEdG8uZnJvbUpTKF9kYXRhW1wic21hcnRQYXJrc1wiXVtrZXldKSA6IG5ldyBTbWFydHBhcmtCYXNpY0R0bygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU21hcnRQYXJrV3JhcHBlckR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU21hcnRQYXJrV3JhcHBlckR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBpZiAodGhpcy5zbWFydFBhcmtzKSB7XG4gICAgICAgICAgICBkYXRhW1wic21hcnRQYXJrc1wiXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuc21hcnRQYXJrcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNtYXJ0UGFya3MuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+ZGF0YVtcInNtYXJ0UGFya3NcIl0pW2tleV0gPSB0aGlzLnNtYXJ0UGFya3Nba2V5XSA/IHRoaXMuc21hcnRQYXJrc1trZXldLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU21hcnRQYXJrV3JhcHBlckR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNtYXJ0UGFya1dyYXBwZXJEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTbWFydFBhcmtXcmFwcGVyRHRvIHtcbiAgICBzbWFydFBhcmtzOiB7IFtrZXk6IHN0cmluZ106IFNtYXJ0cGFya0Jhc2ljRHRvOyB9IHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBTbWFydFBhcmtXcmFwcGVyRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBTbWFydFBhcmtXcmFwcGVyRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU21hcnRQYXJrV3JhcHBlckR0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTbWFydFBhcmtXcmFwcGVyRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNtYXJ0UGFya1dyYXBwZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogU21hcnRQYXJrV3JhcHBlckR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgU21hcnRwYXJrQmFzaWNEdG8gaW1wbGVtZW50cyBJU21hcnRwYXJrQmFzaWNEdG8ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBndWlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdHlwZTogU21hcnRQYXJrVHlwZTtcbiAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXM6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bztcbiAgICBmYWNpbGl0aWVzOiBGYWNpbGl0eUJhc2ljRHRvW10gfCB1bmRlZmluZWQ7XG4gICAgc3BhcmtWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgc21hcnRQYXJrVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGN1cnJlbmN5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgZW5hYmxlU3BlY2lhbFRyYW5zaWVudHM6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVNtYXJ0cGFya0Jhc2ljRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gX2RhdGFbXCJuYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy5ndWlkID0gX2RhdGFbXCJndWlkXCJdO1xuICAgICAgICAgICAgdGhpcy50eXBlID0gX2RhdGFbXCJ0eXBlXCJdO1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlc1J1bm5pbmdTdGF0dXMgPSBfZGF0YVtcInNlcnZpY2VzUnVubmluZ1N0YXR1c1wiXSA/IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0by5mcm9tSlMoX2RhdGFbXCJzZXJ2aWNlc1J1bm5pbmdTdGF0dXNcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfZGF0YVtcImZhY2lsaXRpZXNcIl0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWNpbGl0aWVzID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJmYWNpbGl0aWVzXCJdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhY2lsaXRpZXMucHVzaChGYWNpbGl0eUJhc2ljRHRvLmZyb21KUyhpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNwYXJrVmVyc2lvbiA9IF9kYXRhW1wic3BhcmtWZXJzaW9uXCJdO1xuICAgICAgICAgICAgdGhpcy5zbWFydFBhcmtWZXJzaW9uID0gX2RhdGFbXCJzbWFydFBhcmtWZXJzaW9uXCJdO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW5jeSA9IF9kYXRhW1wiY3VycmVuY3lcIl07XG4gICAgICAgICAgICB0aGlzLmVuYWJsZVNwZWNpYWxUcmFuc2llbnRzID0gX2RhdGFbXCJlbmFibGVTcGVjaWFsVHJhbnNpZW50c1wiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogU21hcnRwYXJrQmFzaWNEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNtYXJ0cGFya0Jhc2ljRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJuYW1lXCJdID0gdGhpcy5uYW1lO1xuICAgICAgICBkYXRhW1wiZ3VpZFwiXSA9IHRoaXMuZ3VpZDtcbiAgICAgICAgZGF0YVtcInR5cGVcIl0gPSB0aGlzLnR5cGU7XG4gICAgICAgIGRhdGFbXCJzZXJ2aWNlc1J1bm5pbmdTdGF0dXNcIl0gPSB0aGlzLnNlcnZpY2VzUnVubmluZ1N0YXR1cyA/IHRoaXMuc2VydmljZXNSdW5uaW5nU3RhdHVzLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmFjaWxpdGllcykpIHtcbiAgICAgICAgICAgIGRhdGFbXCJmYWNpbGl0aWVzXCJdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHRoaXMuZmFjaWxpdGllcylcbiAgICAgICAgICAgICAgICBkYXRhW1wiZmFjaWxpdGllc1wiXS5wdXNoKGl0ZW0gPyBpdGVtLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbXCJzcGFya1ZlcnNpb25cIl0gPSB0aGlzLnNwYXJrVmVyc2lvbjtcbiAgICAgICAgZGF0YVtcInNtYXJ0UGFya1ZlcnNpb25cIl0gPSB0aGlzLnNtYXJ0UGFya1ZlcnNpb247XG4gICAgICAgIGRhdGFbXCJjdXJyZW5jeVwiXSA9IHRoaXMuY3VycmVuY3k7XG4gICAgICAgIGRhdGFbXCJlbmFibGVTcGVjaWFsVHJhbnNpZW50c1wiXSA9IHRoaXMuZW5hYmxlU3BlY2lhbFRyYW5zaWVudHM7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFNtYXJ0cGFya0Jhc2ljRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU21hcnRwYXJrQmFzaWNEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTbWFydHBhcmtCYXNpY0R0byB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGd1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0eXBlOiBTbWFydFBhcmtUeXBlO1xuICAgIHNlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvO1xuICAgIGZhY2lsaXRpZXM6IEZhY2lsaXR5QmFzaWNEdG9bXSB8IHVuZGVmaW5lZDtcbiAgICBzcGFya1ZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBzbWFydFBhcmtWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY3VycmVuY3k6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBlbmFibGVTcGVjaWFsVHJhbnNpZW50czogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFNwYXJrU2V0dGluZ3NEdG8gaW1wbGVtZW50cyBJU3BhcmtTZXR0aW5nc0R0byB7XG4gICAgY2F0ZWdvcnk6IFNldHRpbmdzQ2F0ZWdvcnk7XG4gICAgc2V0dGluZ3NKc29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVNwYXJrU2V0dGluZ3NEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNhdGVnb3J5ID0gX2RhdGFbXCJjYXRlZ29yeVwiXTtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NKc29uID0gX2RhdGFbXCJzZXR0aW5nc0pzb25cIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFNwYXJrU2V0dGluZ3NEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFNwYXJrU2V0dGluZ3NEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImNhdGVnb3J5XCJdID0gdGhpcy5jYXRlZ29yeTtcbiAgICAgICAgZGF0YVtcInNldHRpbmdzSnNvblwiXSA9IHRoaXMuc2V0dGluZ3NKc29uO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTcGFya1NldHRpbmdzRHRvIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3BhcmtTZXR0aW5nc0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNwYXJrU2V0dGluZ3NEdG8ge1xuICAgIGNhdGVnb3J5OiBTZXR0aW5nc0NhdGVnb3J5O1xuICAgIHNldHRpbmdzSnNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgU3RyaW5nU3RyaW5nSURpY3Rpb25hcnlIdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nOyB9IHwgdW5kZWZpbmVkO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wiZGF0YVwiXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHt9IGFzIGFueTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gX2RhdGFbXCJkYXRhXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcImRhdGFcIl0uaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMuZGF0YSlba2V5XSA9IF9kYXRhW1wiZGF0YVwiXVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFN0cmluZ1N0cmluZ0lEaWN0aW9uYXJ5SHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGRhdGFbXCJkYXRhXCJdID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wiZGF0YVwiXSlba2V5XSA9ICg8YW55PnRoaXMuZGF0YSlba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl0gPSB0aGlzLnN1Y2Nlc3NNZXNzYWdlO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdHJpbmdTdHJpbmdJRGljdGlvbmFyeUh0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZzsgfSB8IHVuZGVmaW5lZDtcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZW51bSBTdWJNb2R1bGUge1xuICAgIEVWYWxpZGF0aW9uID0gMCxcbiAgICBTdGlja2VycyA9IDEsXG4gICAgQ291cG9ucyA9IDIsXG4gICAgR3Vlc3RzID0gMyxcbiAgICBIb3RlbEd1ZXN0cyA9IDQsXG4gICAgTW9udGhsaWVzID0gNSxcbiAgICBBY2NvdW50cyA9IDYsXG4gICAgVXNlck1hbmFnZW1lbnQgPSA3LFxuICAgIEZhY2lsaXRpZXNBbmRTbWFydHBhcmtzID0gOCxcbiAgICBMb2dvID0gOSxcbiAgICBTbXRwU2V0dGluZ3MgPSAxMCxcbiAgICBEZWZhdWx0VXNlclNldHRpbmdzID0gMTEsXG4gICAgQXVkaXQgPSAxMixcbiAgICBSYXRlcyA9IDEzLFxuICAgIFNjaGVkdWxlciA9IDE0LFxuICAgIFZhbGlkYXRpb25Qcm9maWxlcyA9IDE1LFxuICAgIEhvdGVsR3Vlc3RzSU8gPSAxNixcbiAgICBBY2Nlc3NQcm9maWxlcyA9IDE3LFxuICAgIEltcG9ydGVyVG9vbCA9IDE4LFxuICAgIEVWb3VjaGVyID0gMTksXG4gICAgRHluYW1pY1ByaWNpbmcgPSAyMCxcbiAgICBEaWdpdGFsUmVjZWlwdCA9IDIxLFxuICAgIFNlbGZWYWxpZGF0aW9uID0gMjIsXG4gICAgQ2FzaGllcnNNYW5hZ2VtZW50ID0gMjMsXG4gICAgRW5mb3JjZW1lbnRJbnRlZ3JhdGlvbiA9IDI0LFxuICAgIFNjYW4yUGF5ID0gMjUsXG59XG5cbmV4cG9ydCBjbGFzcyBUZW5hbnREZXRhaWxzRHRvIGltcGxlbWVudHMgSVRlbmFudERldGFpbHNEdG8ge1xuICAgIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHByb3BzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVGVuYW50RGV0YWlsc0R0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSBfZGF0YVtcImRpc3BsYXlOYW1lXCJdO1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wicHJvcHNcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcInByb3BzXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcInByb3BzXCJdLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLnByb3BzKVtrZXldID0gX2RhdGFbXCJwcm9wc1wiXVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGVuYW50RGV0YWlsc0R0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGVuYW50RGV0YWlsc0R0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wibmFtZVwiXSA9IHRoaXMubmFtZTtcbiAgICAgICAgZGF0YVtcImRpc3BsYXlOYW1lXCJdID0gdGhpcy5kaXNwbGF5TmFtZTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMpIHtcbiAgICAgICAgICAgIGRhdGFbXCJwcm9wc1wiXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMucHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT5kYXRhW1wicHJvcHNcIl0pW2tleV0gPSAoPGFueT50aGlzLnByb3BzKVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRlbmFudERldGFpbHNEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZW5hbnREZXRhaWxzRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGVuYW50RGV0YWlsc0R0byB7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9IHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBzdGF0dXNDb2RlOiBIdHRwU3RhdHVzQ29kZTtcbiAgICBkYXRhOiBUZW5hbnREZXRhaWxzRHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBUZW5hbnREZXRhaWxzRHRvLmZyb21KUyhfZGF0YVtcImRhdGFcIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlID0gX2RhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVGVuYW50RGV0YWlsc0R0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZW5hbnREZXRhaWxzRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRlbmFudERldGFpbHNEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVGVuYW50RGV0YWlsc0R0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVGVuYW50RHRvIGltcGxlbWVudHMgSVRlbmFudER0byB7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9IHwgdW5kZWZpbmVkO1xuICAgIGlkOiBudW1iZXI7XG4gICAgdHJlZUlkOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRlbmFudER0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU5hbWUgPSBfZGF0YVtcImRpc3BsYXlOYW1lXCJdO1xuICAgICAgICAgICAgaWYgKF9kYXRhW1wicHJvcHNcIl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzID0ge30gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfZGF0YVtcInByb3BzXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YVtcInByb3BzXCJdLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLnByb3BzKVtrZXldID0gX2RhdGFbXCJwcm9wc1wiXVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaWQgPSBfZGF0YVtcImlkXCJdO1xuICAgICAgICAgICAgdGhpcy50cmVlSWQgPSBfZGF0YVtcInRyZWVJZFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGVuYW50RHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUZW5hbnREdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcIm5hbWVcIl0gPSB0aGlzLm5hbWU7XG4gICAgICAgIGRhdGFbXCJkaXNwbGF5TmFtZVwiXSA9IHRoaXMuZGlzcGxheU5hbWU7XG4gICAgICAgIGlmICh0aGlzLnByb3BzKSB7XG4gICAgICAgICAgICBkYXRhW1wicHJvcHNcIl0gPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLnByb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+ZGF0YVtcInByb3BzXCJdKVtrZXldID0gKDxhbnk+dGhpcy5wcm9wcylba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkYXRhW1wiaWRcIl0gPSB0aGlzLmlkO1xuICAgICAgICBkYXRhW1widHJlZUlkXCJdID0gdGhpcy50cmVlSWQ7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRlbmFudER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRlbmFudER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRlbmFudER0byB7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9IHwgdW5kZWZpbmVkO1xuICAgIGlkOiBudW1iZXI7XG4gICAgdHJlZUlkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBUZmFTZXR1cER0byBpbXBsZW1lbnRzIElUZmFTZXR1cER0byB7XG4gICAgZW1haWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1RmYUVuYWJsZWQ6IGJvb2xlYW47XG4gICAgYXV0aGVudGljYXRvcktleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHFyQ29kZUltYWdlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVnaXN0ZXJlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVGZhU2V0dXBEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmVtYWlsID0gX2RhdGFbXCJlbWFpbFwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNUZmFFbmFibGVkID0gX2RhdGFbXCJpc1RmYUVuYWJsZWRcIl07XG4gICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0b3JLZXkgPSBfZGF0YVtcImF1dGhlbnRpY2F0b3JLZXlcIl07XG4gICAgICAgICAgICB0aGlzLnFyQ29kZUltYWdlVXJsID0gX2RhdGFbXCJxckNvZGVJbWFnZVVybFwiXTtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZCA9IF9kYXRhW1wicmVnaXN0ZXJlZFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGZhU2V0dXBEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRmYVNldHVwRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlbWFpbFwiXSA9IHRoaXMuZW1haWw7XG4gICAgICAgIGRhdGFbXCJpc1RmYUVuYWJsZWRcIl0gPSB0aGlzLmlzVGZhRW5hYmxlZDtcbiAgICAgICAgZGF0YVtcImF1dGhlbnRpY2F0b3JLZXlcIl0gPSB0aGlzLmF1dGhlbnRpY2F0b3JLZXk7XG4gICAgICAgIGRhdGFbXCJxckNvZGVJbWFnZVVybFwiXSA9IHRoaXMucXJDb2RlSW1hZ2VVcmw7XG4gICAgICAgIGRhdGFbXCJyZWdpc3RlcmVkXCJdID0gdGhpcy5yZWdpc3RlcmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUZmFTZXR1cER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRmYVNldHVwRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGZhU2V0dXBEdG8ge1xuICAgIGVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNUZmFFbmFibGVkOiBib29sZWFuO1xuICAgIGF1dGhlbnRpY2F0b3JLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBxckNvZGVJbWFnZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZ2lzdGVyZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBUaGlyZFBhcnR5VmVuZG9yRHRvIGltcGxlbWVudHMgSVRoaXJkUGFydHlWZW5kb3JEdG8ge1xuICAgIGFjY291bnRJZDogbnVtYmVyO1xuICAgIHBlcm1pc3Npb25UeXBlczogUGVybWlzc2lvblR5cGVbXSB8IHVuZGVmaW5lZDtcbiAgICBwYXJrQ2xvdWRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUaGlyZFBhcnR5VmVuZG9yRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5hY2NvdW50SWQgPSBfZGF0YVtcImFjY291bnRJZFwiXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9kYXRhW1wicGVybWlzc2lvblR5cGVzXCJdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGVzID0gW10gYXMgYW55O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgX2RhdGFbXCJwZXJtaXNzaW9uVHlwZXNcIl0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGVzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcmtDbG91ZElkID0gX2RhdGFbXCJwYXJrQ2xvdWRJZFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVGhpcmRQYXJ0eVZlbmRvckR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGhpcmRQYXJ0eVZlbmRvckR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiYWNjb3VudElkXCJdID0gdGhpcy5hY2NvdW50SWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMucGVybWlzc2lvblR5cGVzKSkge1xuICAgICAgICAgICAgZGF0YVtcInBlcm1pc3Npb25UeXBlc1wiXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiB0aGlzLnBlcm1pc3Npb25UeXBlcylcbiAgICAgICAgICAgICAgICBkYXRhW1wicGVybWlzc2lvblR5cGVzXCJdLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtcInBhcmtDbG91ZElkXCJdID0gdGhpcy5wYXJrQ2xvdWRJZDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVGhpcmRQYXJ0eVZlbmRvckR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRoaXJkUGFydHlWZW5kb3JEdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUaGlyZFBhcnR5VmVuZG9yRHRvIHtcbiAgICBhY2NvdW50SWQ6IG51bWJlcjtcbiAgICBwZXJtaXNzaW9uVHlwZXM6IFBlcm1pc3Npb25UeXBlW10gfCB1bmRlZmluZWQ7XG4gICAgcGFya0Nsb3VkSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVGhpcmRQYXJ0eVZlbmRvckR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gVGhpcmRQYXJ0eVZlbmRvckR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFRoaXJkUGFydHlWZW5kb3JEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVGhpcmRQYXJ0eVZlbmRvckR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUaGlyZFBhcnR5VmVuZG9yRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFRoaXJkUGFydHlWZW5kb3JEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvIGltcGxlbWVudHMgSVRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvIHtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvIHtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEgaW1wbGVtZW50cyBJVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBJVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBfZGF0YVtcImVycm9yTWVzc2FnZVwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNTdWNjZXNzID0gX2RhdGFbXCJpc1N1Y2Nlc3NcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBfZGF0YVtcInN0YXR1c0NvZGVcIl07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBfZGF0YVtcImRhdGFcIl0gPyBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJlcnJvck1lc3NhZ2VcIl0gPSB0aGlzLmVycm9yTWVzc2FnZTtcbiAgICAgICAgZGF0YVtcImlzU3VjY2Vzc1wiXSA9IHRoaXMuaXNTdWNjZXNzO1xuICAgICAgICBkYXRhW1wic3RhdHVzQ29kZVwiXSA9IHRoaXMuc3RhdHVzQ29kZTtcbiAgICAgICAgZGF0YVtcImRhdGFcIl0gPSB0aGlzLmRhdGEgPyB0aGlzLmRhdGEudG9KU09OKCkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdID0gdGhpcy5zdWNjZXNzTWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVG9nZ2xlMkZhY3RvckF1dGhGb3JVc2VyUmVzcG9uc2VEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvIGltcGxlbWVudHMgSVR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICBpc0VuYWJsZWRGb3JVc2VyOiBib29sZWFuO1xuICAgIGlzUmVxdWllcmQyRkFTZXR1cDogYm9vbGVhbjtcbiAgICBhY3RpdmF0ZVJlc3BvbnNlRHRvOiBBY3RpdmF0ZVJlc3BvbnNlRHRvO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bykge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuaXNFbmFibGVkRm9yVXNlciA9IF9kYXRhW1wiaXNFbmFibGVkRm9yVXNlclwiXTtcbiAgICAgICAgICAgIHRoaXMuaXNSZXF1aWVyZDJGQVNldHVwID0gX2RhdGFbXCJpc1JlcXVpZXJkMkZBU2V0dXBcIl07XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlUmVzcG9uc2VEdG8gPSBfZGF0YVtcImFjdGl2YXRlUmVzcG9uc2VEdG9cIl0gPyBBY3RpdmF0ZVJlc3BvbnNlRHRvLmZyb21KUyhfZGF0YVtcImFjdGl2YXRlUmVzcG9uc2VEdG9cIl0pIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiaXNFbmFibGVkRm9yVXNlclwiXSA9IHRoaXMuaXNFbmFibGVkRm9yVXNlcjtcbiAgICAgICAgZGF0YVtcImlzUmVxdWllcmQyRkFTZXR1cFwiXSA9IHRoaXMuaXNSZXF1aWVyZDJGQVNldHVwO1xuICAgICAgICBkYXRhW1wiYWN0aXZhdGVSZXNwb25zZUR0b1wiXSA9IHRoaXMuYWN0aXZhdGVSZXNwb25zZUR0byA/IHRoaXMuYWN0aXZhdGVSZXNwb25zZUR0by50b0pTT04oKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUd29GYWN0b3JBdXRoZW50aWNhdGlvbkR0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVHdvRmFjdG9yQXV0aGVudGljYXRpb25EdG8ge1xuICAgIGlzRW5hYmxlZEZvclVzZXI6IGJvb2xlYW47XG4gICAgaXNSZXF1aWVyZDJGQVNldHVwOiBib29sZWFuO1xuICAgIGFjdGl2YXRlUmVzcG9uc2VEdG86IEFjdGl2YXRlUmVzcG9uc2VEdG87XG59XG5cbmV4cG9ydCBlbnVtIFVzZXJTdGF0dXMge1xuICAgIEFjdGl2ZSA9IDAsXG4gICAgQmxvY2tlZCA9IDEsXG4gICAgSW52aXRlZCA9IDIsXG4gICAgSWdub3JlID0gMyxcbiAgICBQYXNzd29yZEV4cGlyZWQgPSA0LFxuICAgIFJldm9rZWQgPSA1LFxuICAgIFRlbXBvcmFyeUJsb2NrZWQgPSA2LFxuICAgIEF3YWl0aW5nQWNjZXNzID0gNyxcbiAgICBVc2VyRXhwaXJlZCA9IDgsXG59XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvIGltcGxlbWVudHMgSVZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8ge1xuICAgIGlkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxhc3ROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBzdGF0dXM6IFVzZXJTdGF0dXM7XG4gICAgcG1sOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gX2RhdGFbXCJpZFwiXTtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF9kYXRhW1wibmFtZVwiXTtcbiAgICAgICAgICAgIHRoaXMubGFzdE5hbWUgPSBfZGF0YVtcImxhc3ROYW1lXCJdO1xuICAgICAgICAgICAgdGhpcy51TmFtZSA9IF9kYXRhW1widU5hbWVcIl07XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IF9kYXRhW1wic3RhdHVzXCJdO1xuICAgICAgICAgICAgdGhpcy5wbWwgPSBfZGF0YVtcInBtbFwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0byB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiaWRcIl0gPSB0aGlzLmlkO1xuICAgICAgICBkYXRhW1wibmFtZVwiXSA9IHRoaXMubmFtZTtcbiAgICAgICAgZGF0YVtcImxhc3ROYW1lXCJdID0gdGhpcy5sYXN0TmFtZTtcbiAgICAgICAgZGF0YVtcInVOYW1lXCJdID0gdGhpcy51TmFtZTtcbiAgICAgICAgZGF0YVtcInN0YXR1c1wiXSA9IHRoaXMuc3RhdHVzO1xuICAgICAgICBkYXRhW1wicG1sXCJdID0gdGhpcy5wbWw7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG8ge1xuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0byB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGFzdE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHN0YXR1czogVXNlclN0YXR1cztcbiAgICBwbWw6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgc3RhdHVzQ29kZTogSHR0cFN0YXR1c0NvZGU7XG4gICAgZGF0YTogVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0bztcbiAgICBzdWNjZXNzTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0by5mcm9tSlMoX2RhdGFbXCJkYXRhXCJdKSA6IDxhbnk+dW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IF9kYXRhW1wic3VjY2Vzc01lc3NhZ2VcIl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUpTKGRhdGE6IGFueSk6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMudG9KU09OKCk7XG4gICAgICAgIGxldCByZXN1bHQgPSBuZXcgVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEoKTtcbiAgICAgICAgcmVzdWx0LmluaXQoanNvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG87XG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byBpbXBsZW1lbnRzIElWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8ge1xuICAgIGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB1c2VyTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YT86IElWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8pIHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMpW3Byb3BlcnR5XSA9ICg8YW55PmRhdGEpW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoX2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKF9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGUgPSBfZGF0YVtcImNvZGVcIl07XG4gICAgICAgICAgICB0aGlzLnVzZXJOYW1lID0gX2RhdGFbXCJ1c2VyTmFtZVwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8oKTtcbiAgICAgICAgcmVzdWx0LmluaXQoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdG9KU09OKGRhdGE/OiBhbnkpIHtcbiAgICAgICAgZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbiAgICAgICAgZGF0YVtcImNvZGVcIl0gPSB0aGlzLmNvZGU7XG4gICAgICAgIGRhdGFbXCJ1c2VyTmFtZVwiXSA9IHRoaXMudXNlck5hbWU7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0bygpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byB7XG4gICAgY29kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHVzZXJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0byBpbXBsZW1lbnRzIElWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0byB7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzKVtwcm9wZXJ0eV0gPSAoPGFueT5kYXRhKVtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0KF9kYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChfZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5pc1N1Y2Nlc3MgPSBfZGF0YVtcImlzU3VjY2Vzc1wiXTtcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBfZGF0YVtcImFjY2Vzc1Rva2VuXCJdO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4gPSBfZGF0YVtcInJlZnJlc2hUb2tlblwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSlMoZGF0YTogYW55KTogVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8ge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvSlNPTihkYXRhPzogYW55KSB7XG4gICAgICAgIGRhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcImFjY2Vzc1Rva2VuXCJdID0gdGhpcy5hY2Nlc3NUb2tlbjtcbiAgICAgICAgZGF0YVtcInJlZnJlc2hUb2tlblwiXSA9IHRoaXMucmVmcmVzaFRva2VuO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0byB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvKCk7XG4gICAgICAgIHJlc3VsdC5pbml0KGpzb24pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8ge1xuICAgIGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG9IdHRwUmVzcG9uc2VEYXRhIGltcGxlbWVudHMgSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcylbcHJvcGVydHldID0gKDxhbnk+ZGF0YSlbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdChfZGF0YT86IGFueSkge1xuICAgICAgICBpZiAoX2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gX2RhdGFbXCJlcnJvck1lc3NhZ2VcIl07XG4gICAgICAgICAgICB0aGlzLmlzU3VjY2VzcyA9IF9kYXRhW1wiaXNTdWNjZXNzXCJdO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gX2RhdGFbXCJzdGF0dXNDb2RlXCJdO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gX2RhdGFbXCJkYXRhXCJdID8gVmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXREdG8uZnJvbUpTKF9kYXRhW1wiZGF0YVwiXSkgOiA8YW55PnVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSBfZGF0YVtcInN1Y2Nlc3NNZXNzYWdlXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21KUyhkYXRhOiBhbnkpOiBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChkYXRhKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b0pTT04oZGF0YT86IGFueSkge1xuICAgICAgICBkYXRhID0gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8gZGF0YSA6IHt9O1xuICAgICAgICBkYXRhW1wiZXJyb3JNZXNzYWdlXCJdID0gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgICAgIGRhdGFbXCJpc1N1Y2Nlc3NcIl0gPSB0aGlzLmlzU3VjY2VzcztcbiAgICAgICAgZGF0YVtcInN0YXR1c0NvZGVcIl0gPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgICAgIGRhdGFbXCJkYXRhXCJdID0gdGhpcy5kYXRhID8gdGhpcy5kYXRhLnRvSlNPTigpIDogPGFueT51bmRlZmluZWQ7XG4gICAgICAgIGRhdGFbXCJzdWNjZXNzTWVzc2FnZVwiXSA9IHRoaXMuc3VjY2Vzc01lc3NhZ2U7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTigpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSgpO1xuICAgICAgICByZXN1bHQuaW5pdChqc29uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgIHN0YXR1c0NvZGU6IEh0dHBTdGF0dXNDb2RlO1xuICAgIGRhdGE6IFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvO1xuICAgIHN1Y2Nlc3NNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVJlc3BvbnNlIHtcbiAgICBkYXRhOiBCbG9iO1xuICAgIHN0YXR1czogbnVtYmVyO1xuICAgIGZpbGVOYW1lPzogc3RyaW5nO1xuICAgIGhlYWRlcnM/OiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEFwaUV4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBudW1iZXI7XG4gICAgcmVzcG9uc2U6IHN0cmluZztcbiAgICBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICByZXN1bHQ6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIHJlc3BvbnNlOiBzdHJpbmcsIGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCByZXN1bHQ6IGFueSkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpc0FwaUV4Y2VwdGlvbiA9IHRydWU7XG5cbiAgICBzdGF0aWMgaXNBcGlFeGNlcHRpb24ob2JqOiBhbnkpOiBvYmogaXMgQXBpRXhjZXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIG9iai5pc0FwaUV4Y2VwdGlvbiA9PT0gdHJ1ZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzOiBudW1iZXIsIHJlc3BvbnNlOiBzdHJpbmcsIGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogYW55OyB9LCByZXN1bHQ/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmIChyZXN1bHQgIT09IG51bGwgJiYgcmVzdWx0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBfb2JzZXJ2YWJsZVRocm93KHJlc3VsdCk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gX29ic2VydmFibGVUaHJvdyhuZXcgQXBpRXhjZXB0aW9uKG1lc3NhZ2UsIHN0YXR1cywgcmVzcG9uc2UsIGhlYWRlcnMsIG51bGwpKTtcbn1cblxuZnVuY3Rpb24gYmxvYlRvVGV4dChibG9iOiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChvYnNlcnZlcjogYW55KSA9PiB7XG4gICAgICAgIGlmICghYmxvYikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChcIlwiKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgoZXZlbnQudGFyZ2V0IGFzIGFueSkucmVzdWx0KTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpO1xuICAgICAgICB9XG4gICAgfSk7XG59Il19
|