ng-easycommerce 0.0.679 → 0.0.680
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/bundles/ng-easycommerce.umd.js +162 -27
- package/bundles/ng-easycommerce.umd.js.map +1 -1
- package/bundles/ng-easycommerce.umd.min.js +1 -1
- package/bundles/ng-easycommerce.umd.min.js.map +1 -1
- package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +26 -1
- package/esm2015/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.js +75 -2
- package/esm2015/lib/ec-component/product-detail-ec/product-detail-ec.component.js +65 -28
- package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +26 -1
- package/esm5/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.js +75 -2
- package/esm5/lib/ec-component/product-detail-ec/product-detail-ec.component.js +64 -27
- package/fesm2015/ng-easycommerce.js +163 -28
- package/fesm2015/ng-easycommerce.js.map +1 -1
- package/fesm5/ng-easycommerce.js +162 -27
- package/fesm5/ng-easycommerce.js.map +1 -1
- package/lib/ec-component/cart-ec/cart-ec.component.d.ts +2 -0
- package/lib/ec-component/multiple-items-to-cart-ec/multiple-items-to-cart-ec.component.d.ts +8 -0
- package/lib/ec-component/product-detail-ec/product-detail-ec.component.d.ts +15 -4
- package/ng-easycommerce.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -45,6 +45,9 @@ let ProductDetailEcComponent = class ProductDetailEcComponent extends ComponentH
|
|
|
45
45
|
this.hidePrices = false;
|
|
46
46
|
this.creditAccountShowPrices = null;
|
|
47
47
|
this.enableFieldNotesInArticleFile = false;
|
|
48
|
+
this.quantityError = '';
|
|
49
|
+
this.minimumItemsQty = null;
|
|
50
|
+
this.multipleQty = null;
|
|
48
51
|
this.addToCart = () => {
|
|
49
52
|
var _a;
|
|
50
53
|
const note = ((_a = this.comments) === null || _a === void 0 ? void 0 : _a.trim()) || null;
|
|
@@ -60,20 +63,23 @@ let ProductDetailEcComponent = class ProductDetailEcComponent extends ComponentH
|
|
|
60
63
|
};
|
|
61
64
|
/**
|
|
62
65
|
* @description actualiza la variable quantity sumandole 'x' contenido.
|
|
66
|
+
* Si hay un multipleQuantity configurado, hace snap al siguiente múltiplo válido
|
|
67
|
+
* cuando la cantidad actual ya es inválida.
|
|
63
68
|
* @param stock número máximo disponible en stock.
|
|
64
|
-
* @param changeAmount cantidad que se quiere sumar.
|
|
65
|
-
* @param forceMultiple si es true, obliga a que el resultado sea múltiplo de changeAmount.
|
|
69
|
+
* @param changeAmount cantidad que se quiere sumar (ignorado si multipleQty está seteado).
|
|
70
|
+
* @param forceMultiple legacy — si es true, obliga a que el resultado sea múltiplo de changeAmount.
|
|
66
71
|
*/
|
|
67
72
|
this.plus = (stock, changeAmount = 1, forceMultiple = false) => {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
73
|
+
const step = this.multipleQty || changeAmount;
|
|
74
|
+
const currentQuantity = Number(this.quantity);
|
|
75
|
+
let newQuantity;
|
|
76
|
+
if (step > 1) {
|
|
77
|
+
newQuantity = currentQuantity % step !== 0
|
|
78
|
+
? Math.ceil(currentQuantity / step) * step
|
|
79
|
+
: currentQuantity + step;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
newQuantity = currentQuantity + step;
|
|
77
83
|
}
|
|
78
84
|
if (!stock || newQuantity <= stock) {
|
|
79
85
|
this.quantity = newQuantity;
|
|
@@ -81,32 +87,56 @@ let ProductDetailEcComponent = class ProductDetailEcComponent extends ComponentH
|
|
|
81
87
|
else {
|
|
82
88
|
this.toastrService.show('out-of-stock-actually');
|
|
83
89
|
}
|
|
90
|
+
this.validateDetail();
|
|
84
91
|
};
|
|
85
92
|
/**
|
|
86
93
|
* @description actualiza la variable quantity restandole 'x' contenido.
|
|
87
|
-
*
|
|
88
|
-
*
|
|
94
|
+
* Si hay un multipleQuantity configurado, hace snap al múltiplo válido inferior
|
|
95
|
+
* cuando la cantidad actual ya es inválida.
|
|
96
|
+
* @param changeAmount cantidad que se quiere restar (ignorado si multipleQty está seteado).
|
|
97
|
+
* @param minimum cantidad mínima permitida (ignorado si minimumItemsQty está seteado).
|
|
98
|
+
* @param forceMultiple legacy — si es true, obliga a que el resultado sea múltiplo de changeAmount.
|
|
89
99
|
*/
|
|
90
100
|
this.less = (changeAmount = 1, minimum = 1, forceMultiple = false) => {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
if (newQuantity < changeAmount) {
|
|
100
|
-
newQuantity = changeAmount;
|
|
101
|
-
}
|
|
101
|
+
const step = this.multipleQty || changeAmount;
|
|
102
|
+
const floor = this.minimumItemsQty || (step > 1 ? step : minimum);
|
|
103
|
+
let newQuantity;
|
|
104
|
+
if (step > 1) {
|
|
105
|
+
newQuantity = this.quantity % step !== 0
|
|
106
|
+
? Math.floor(this.quantity / step) * step
|
|
107
|
+
: this.quantity - step;
|
|
102
108
|
}
|
|
103
|
-
|
|
104
|
-
this.quantity
|
|
109
|
+
else {
|
|
110
|
+
newQuantity = this.quantity - step;
|
|
111
|
+
}
|
|
112
|
+
this.quantity = newQuantity >= floor ? newQuantity : floor;
|
|
113
|
+
this.validateDetail();
|
|
114
|
+
};
|
|
115
|
+
this.onQuantityInput = (value) => {
|
|
116
|
+
const parsed = parseInt(value, 10);
|
|
117
|
+
if (!isNaN(parsed)) {
|
|
118
|
+
this.quantity = parsed;
|
|
119
|
+
this.validateDetail();
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
this.validateDetail = () => {
|
|
123
|
+
if (this.minimumItemsQty && this.quantity < this.minimumItemsQty) {
|
|
124
|
+
this.quantityError = 'La cantidad debe ser al menos ' + this.minimumItemsQty;
|
|
125
|
+
}
|
|
126
|
+
else if (this.multipleQty && this.quantity % this.multipleQty !== 0) {
|
|
127
|
+
this.quantityError = 'La cantidad debe ser m\u00faltiplo de ' + this.multipleQty;
|
|
105
128
|
}
|
|
106
129
|
else {
|
|
107
|
-
this.
|
|
130
|
+
this.quantityError = '';
|
|
108
131
|
}
|
|
109
132
|
};
|
|
133
|
+
this.isQuantityValidDetail = () => {
|
|
134
|
+
if (this.minimumItemsQty && this.quantity < this.minimumItemsQty)
|
|
135
|
+
return false;
|
|
136
|
+
if (this.multipleQty && this.quantity % this.multipleQty !== 0)
|
|
137
|
+
return false;
|
|
138
|
+
return true;
|
|
139
|
+
};
|
|
110
140
|
this.showContact = () => this.show = true;
|
|
111
141
|
this.hideContact = () => this.show = false;
|
|
112
142
|
this.thereIsMoreInfo = (product) => {
|
|
@@ -185,6 +215,13 @@ let ProductDetailEcComponent = class ProductDetailEcComponent extends ComponentH
|
|
|
185
215
|
});
|
|
186
216
|
this.comments = (_l = (_k = match) === null || _k === void 0 ? void 0 : _k.comments, (_l !== null && _l !== void 0 ? _l : ''));
|
|
187
217
|
});
|
|
218
|
+
this.productService.asociatedData$.subscribe(ad => {
|
|
219
|
+
var _a, _b;
|
|
220
|
+
this.minimumItemsQty = ((_a = ad) === null || _a === void 0 ? void 0 : _a.minimumItemsQuantity) || null;
|
|
221
|
+
this.multipleQty = ((_b = ad) === null || _b === void 0 ? void 0 : _b.multipleQuantity) || null;
|
|
222
|
+
this.quantity = this.minimumItemsQty || this.multipleQty || 1;
|
|
223
|
+
this.quantityError = '';
|
|
224
|
+
});
|
|
188
225
|
}
|
|
189
226
|
ngOnDestroy() {
|
|
190
227
|
var _a;
|
|
@@ -220,4 +257,4 @@ ProductDetailEcComponent = __decorate([
|
|
|
220
257
|
})
|
|
221
258
|
], ProductDetailEcComponent);
|
|
222
259
|
export { ProductDetailEcComponent };
|
|
223
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9wcm9kdWN0LWRldGFpbC1lYy9wcm9kdWN0LWRldGFpbC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLElBQUks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QUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXOztRQUNQLE1BQUEsSUFBSSxDQUFDLFVBQVUsMENBQUUsV0FBVyxHQUFHO0lBQ25DLENBQUM7SUFZRCxNQUFNO1FBQ0YsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUE0QixDQUFDO1FBQ25ELEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0NBdUVKLENBQUE7O1lBakw4QixvQkFBb0I7WUFDNUIsU0FBUztZQUNBLGNBQWM7WUFDbEIsV0FBVztZQUNSLGNBQWM7WUFDYixlQUFlO1lBQ2QsZ0JBQWdCO1lBQzFCLE1BQU07WUFDSSxZQUFZO1lBQ3ZCLElBQUk7WUFDRCxRQUFROztBQWJQO0lBQXJCLFNBQVMsQ0FBQyxTQUFTLENBQUM7eURBQXFCO0FBbkJqQyx3QkFBd0I7SUFOcEMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLHVCQUF1QjtRQUNqQyxZQUFpRDtRQUVqRCxTQUFTLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzs7S0FDcEMsQ0FBQztHQUNXLHdCQUF3QixDQXVNcEM7U0F2TVksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXInO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb3JlLmNvbnN0cyc7XHJcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbmFseXRpY3Muc2VydmljZSc7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcHRpb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9kdWN0RGV0YWlsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2R1Y3RzL3Byb2R1Y3QtZGV0YWlsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9kdWN0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9kdWN0cy9wcm9kdWN0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IE1ldGEgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhbm5lbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHN0YXJ0V2l0aCwgZmlsdGVyIGFzIHJ4RmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhcHAtcHJvZHVjdC1kZXRhaWwtZWMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3QtZGV0YWlsLWVjLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3Byb2R1Y3QtZGV0YWlsLWVjLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtQcm9kdWN0RGV0YWlsU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2R1Y3REZXRhaWxFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgcHVibGljIHByb2R1Y3Q6IGFueTtcclxuICAgIHB1YmxpYyBtZWRpYVVybDtcclxuICAgIHB1YmxpYyBzaG93ID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcXVhbnRpdHkgPSAxO1xyXG4gICAgcHVibGljIGNvbW1lbnRzOiBzdHJpbmcgPSAnJztcclxuICAgIHB1YmxpYyBicmVhZGNydW1iID0gW107XHJcbiAgICBwdWJsaWMgY2Fyb3VzZWw6IGFueTtcclxuICAgIHB1YmxpYyBjb2RlID0gbnVsbDtcclxuICAgIHB1YmxpYyBmb2N1c0ltYWdlOiBzdHJpbmcgPSBudWxsXHJcbiAgICBwdWJsaWMgb3dsT3B0aW9ucyA9IHt9XHJcbiAgICBwdWJsaWMgc2hvd1Jldmlld3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoaWRlUHJpY2VzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY3JlZGl0QWNjb3VudFNob3dQcmljZXM6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcclxuICAgIHB1YmxpYyBlbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBwcmVmaWxsU3ViPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuXHJcbiAgICBAVmlld0NoaWxkKCdjb250YWN0JykgY29udGFjdDogRWxlbWVudFJlZjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgcHJvZHVjdFNlcnZpY2U6IFByb2R1Y3REZXRhaWxTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBjb25zdHM6IENvbnN0YW50cyxcclxuICAgICAgICBwcm90ZWN0ZWQgYWN0aXZlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwdWJsaWMgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBvcHRpb25zU2VydmljZTogT3B0aW9uc1NlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIHByb2R1Y3RzU2VydmljZTogUHJvZHVjdHNTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcm90ZWN0ZWQgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbWV0YTogTWV0YSxcclxuICAgICAgICBwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLm1lZGlhVXJsID0gdGhpcy5jb25zdHMubWVkaWFVcmwoKTtcclxuICAgICAgICB0aGlzLmFjdGl2ZWRSb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHF1ZXJ5UGFyYW1zID0+IHtcclxuICAgICAgICAgICAgbGV0IHZhcmlhbnQ6IGFueSA9ICh0aGlzLmFjdGl2ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgndmFyaWFudCcpKTtcclxuICAgICAgICAgICAgbGV0IGNvZGUgPSBxdWVyeVBhcmFtcy5pZDtcclxuICAgICAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS5sb2FkUHJvZHVjdChjb2RlLCB2YXJpYW50KTtcclxuICAgICAgICAgICAgdGhpcy5jb2RlID0gcXVlcnlQYXJhbXMuaWRcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMucHJvZHVjdFNlcnZpY2UucHJvZHVjdCQuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3QgPSByZXM7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsKDAsIDApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iID0gdGhpcy5vcHRpb25zU2VydmljZS5nZXRCcmVhZGNydW1iKHRoaXMucHJvZHVjdC5jYXRlZ29yeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9kdWN0Lm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ldGEudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzp0aXRsZScsIGNvbnRlbnQ6IHRoaXMucHJvZHVjdC5uYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWV0YS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOmRlc2NyaXB0aW9uJywgY29udGVudDogdGhpcy5kZWxldGVIVE1MKHRoaXMucHJvZHVjdC5kZXNjcmlwdGlvbikgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXRhLnVwZGF0ZVRhZyh7IHByb3BlcnR5OiAnb2c6aW1hZ2UnLCBjb250ZW50OiB0aGlzLmNvbnN0cy5tZWRpYVVybCgpICsgdGhpcy5wcm9kdWN0LnBpY3R1cmVzZGVmYXVsdFswXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ldGEudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzp0eXBlJywgY29udGVudDogJ3Byb2R1Y3QnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWV0YS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOnVybCcsIGNvbnRlbnQ6IHdpbmRvdy5sb2NhdGlvbi5ocmVmIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS5wcm9kdWN0JC5waXBlKGZpbHRlcihkYXRhID0+IGRhdGEgJiYgZGF0YS5pZCAmJiBkYXRhLmlkICE9IDApKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIChwcm9kdWN0UGFyYW0pID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3ZpZXdfaXRlbScsIHsgLi4ucHJvZHVjdFBhcmFtLCBjdXJyZW5jeTogdGhpcy5jb25zdHMuY3VycmVuY3kuY29kZSB9KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VJbWdGb2N1cyhwcm9kdWN0UGFyYW0ucGljdHVyZXNkZWZhdWx0WzBdKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KENoYW5uZWxDb25maWdTZXJ2aWNlKS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoY2hhbm5lbCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1Jldmlld3MgPSBjaGFubmVsLnNob3dSZXZpZXdzO1xyXG4gICAgICAgICAgICB0aGlzLmhpZGVQcmljZXMgPSBjaGFubmVsPy5oaWRlUHJpY2VzID8/IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlID0gY2hhbm5lbD8uZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPz8gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoKHNob3dQcmljZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWRpdEFjY291bnRTaG93UHJpY2VzID0gc2hvd1ByaWNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUhUTUwoY2FkZW5hOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIC8vIEV4cHJlc2nDs24gcmVndWxhciBwYXJhIGJ1c2NhciBldGlxdWV0YXMgSFRNTFxyXG4gICAgICAgIGNvbnN0IGV4cHJlc2lvblJlZ3VsYXIgPSAvPFtePl0qPi9nO1xyXG4gICAgICAgIC8vIFJlZW1wbGF6YSB0b2RhcyBsYXMgZXRpcXVldGFzIEhUTUwgcG9yIHVuYSBjYWRlbmEgdmFjw61hXHJcbiAgICAgICAgcmV0dXJuIGNhZGVuYS5yZXBsYWNlKGV4cHJlc2lvblJlZ3VsYXIsICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVjT25Jbml0KClcclxuXHJcbiAgICAgICAgLy8gUHJlbGxlbmFyIGNvbWVudGFyaW9zIGN1YW5kbzpcclxuICAgICAgICAvLyAtIGNhcmd1ZSBlbCBwcm9kdWN0b1xyXG4gICAgICAgIC8vIC0gY2FtYmllIGxhIHZhcmlhbnRlIHNlbGVjY2lvbmFkYSAoYXNvY2lhdGVkRGF0YSQpXHJcbiAgICAgICAgLy8gLSBjYW1iaWVuIGxvcyDDrXRlbXMgZGVsIGNhcnJpdG8gICAgICAgIFxyXG4gICAgICAgIHRoaXMucHJlZmlsbFN1YiA9IGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLnByb2R1Y3QkLnBpcGUocnhGaWx0ZXIoKHA6IGFueSkgPT4gISFwICYmICEhcC5pZCkpLFxyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLmFzb2NpYXRlZERhdGEkLnBpcGUoc3RhcnRXaXRoKG51bGwgYXMgYW55KSksXHJcbiAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuY2FydEl0ZW1zLnBpcGUoc3RhcnRXaXRoKFtdIGFzIGFueVtdKSksXHJcbiAgICAgICAgXSkuc3Vic2NyaWJlKChbcHJvZHVjdCwgZGF0YSwgaXRlbXNdOiBbYW55LCBhbnksIGFueVtdXSkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgdmFyaWFudElkID1cclxuICAgICAgICAgICAgICAgIGRhdGE/LnZhcmlhbnRDb2RlID8/XHJcbiAgICAgICAgICAgICAgICBkYXRhPy52YXJpYW50X2lkID8/XHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0Py52YXJpYW50cz8uWzBdPy5jb2RlID8/XHJcbiAgICAgICAgICAgICAgICBudWxsO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBpdGVtcz8uZmluZChpdCA9PlxyXG4gICAgICAgICAgICAgICAgaXQ/LnByb2R1Y3Q/LmlkID09PSBwcm9kdWN0Py5pZCAmJlxyXG4gICAgICAgICAgICAgICAgKHZhcmlhbnRJZCA/IGl0Py52YXJpYW50X2lkID09PSB2YXJpYW50SWQgOiB0cnVlKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5jb21tZW50cyA9IChtYXRjaD8uY29tbWVudHMgPz8gJycpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJlZmlsbFN1Yj8udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUb0NhcnQgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgbm90ZSA9IHRoaXMuY29tbWVudHM/LnRyaW0oKSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMucXVhbnRpdHkgPiAwICYmIHRoaXMucHJvZHVjdFNlcnZpY2UuYWRkVG9DYXJ0KHRoaXMucXVhbnRpdHksIHVuZGVmaW5lZCwgbm90ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQWxsUHJvZHVjdG9zVG9DYXJ0ID0gKCkgPT4ge1xyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMucHJvZHVjdC5wcm9kdWN0V2l0aFVuaXF1ZVZhcmlhbnQ/LmZpbHRlcihwcm9kID0+IHByb2QucHJvZHVjdFRvQ2FydEl0ZW0pLm1hcChwcm9kID0+IHByb2QucHJvZHVjdFRvQ2FydEl0ZW0pXHJcbiAgICAgICAgaXRlbXM/Lmxlbmd0aCAmJiB0aGlzLmNhcnRTZXJ2aWNlLmFkZEFsbFRvQ2FydChpdGVtcylcclxuICAgIH1cclxuXHJcbiAgICBzY3JvbGwoKSB7XHJcbiAgICAgICAgbGV0IGVsID0gdGhpcy5jb250YWN0Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlUmVmID0gKGNhcm91c2VsKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJvdXNlbCA9IGNhcm91c2VsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIGFjdHVhbGl6YSBsYSB2YXJpYWJsZSBxdWFudGl0eSBzdW1hbmRvbGUgJ3gnIGNvbnRlbmlkby5cclxuICAgICAqIEBwYXJhbSBzdG9jayBuw7ptZXJvIG3DoXhpbW8gZGlzcG9uaWJsZSBlbiBzdG9jay5cclxuICAgICAqIEBwYXJhbSBjaGFuZ2VBbW91bnQgY2FudGlkYWQgcXVlIHNlIHF1aWVyZSBzdW1hci5cclxuICAgICAqIEBwYXJhbSBmb3JjZU11bHRpcGxlIHNpIGVzIHRydWUsIG9ibGlnYSBhIHF1ZSBlbCByZXN1bHRhZG8gc2VhIG3Dumx0aXBsbyBkZSBjaGFuZ2VBbW91bnQuXHJcbiAgICAgKi9cclxuICAgIHBsdXMgPSAoc3RvY2s/OiBudW1iZXIsIGNoYW5nZUFtb3VudDogbnVtYmVyID0gMSwgZm9yY2VNdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRRdWFudGl0eSA9IE51bWJlcih0aGlzLnF1YW50aXR5KTtcclxuICAgICAgICBsZXQgbmV3UXVhbnRpdHkgPSBjdXJyZW50UXVhbnRpdHkgKyBjaGFuZ2VBbW91bnQ7XHJcblxyXG4gICAgICAgIGlmIChmb3JjZU11bHRpcGxlICYmIGNoYW5nZUFtb3VudCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWFudGl0eSA8IGNoYW5nZUFtb3VudCkge1xyXG4gICAgICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBjaGFuZ2VBbW91bnQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGguY2VpbChuZXdRdWFudGl0eSAvIGNoYW5nZUFtb3VudCkgKiBjaGFuZ2VBbW91bnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzdG9jayB8fCBuZXdRdWFudGl0eSA8PSBzdG9jaykge1xyXG4gICAgICAgICAgICB0aGlzLnF1YW50aXR5ID0gbmV3UXVhbnRpdHk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jay1hY3R1YWxseScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBhY3R1YWxpemEgbGEgdmFyaWFibGUgcXVhbnRpdHkgcmVzdGFuZG9sZSAneCcgY29udGVuaWRvLlxyXG4gICAgICogQHBhcmFtIGNoYW5nZUFtb3VudCBjYW50aWRhZCBxdWUgc2UgcXVpZXJlIHJlc3Rhci5cclxuICAgICAqIEBwYXJhbSBmb3JjZU11bHRpcGxlIHNpIGVzIHRydWUsIG9ibGlnYSBhIHF1ZSBlbCByZXN1bHRhZG8gc2VhIG3Dumx0aXBsbyBkZSBjaGFuZ2VBbW91bnQuXHJcbiAgICAgKi9cclxuICAgIGxlc3MgPSAoY2hhbmdlQW1vdW50OiBudW1iZXIgPSAxLCBtaW5pbXVtOiBudW1iZXIgPSAxLCBmb3JjZU11bHRpcGxlOiBib29sZWFuID0gZmFsc2UpID0+IHtcclxuICAgICAgICBsZXQgbmV3UXVhbnRpdHkgPSB0aGlzLnF1YW50aXR5IC0gY2hhbmdlQW1vdW50O1xyXG5cclxuICAgICAgICBpZiAoZm9yY2VNdWx0aXBsZSAmJiBjaGFuZ2VBbW91bnQgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnF1YW50aXR5IDw9IGNoYW5nZUFtb3VudCkge1xyXG4gICAgICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBjaGFuZ2VBbW91bnQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGguZmxvb3IobmV3UXVhbnRpdHkgLyBjaGFuZ2VBbW91bnQpICogY2hhbmdlQW1vdW50O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgPCBjaGFuZ2VBbW91bnQpIHtcclxuICAgICAgICAgICAgICAgIG5ld1F1YW50aXR5ID0gY2hhbmdlQW1vdW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobmV3UXVhbnRpdHkgPj0gbWluaW11bSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1YW50aXR5ID0gbmV3UXVhbnRpdHk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5xdWFudGl0eSA9IG1pbmltdW07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3dDb250YWN0ID0gKCkgPT4gdGhpcy5zaG93ID0gdHJ1ZTtcclxuICAgIGhpZGVDb250YWN0ID0gKCkgPT4gdGhpcy5zaG93ID0gZmFsc2U7XHJcblxyXG4gICAgdGhlcmVJc01vcmVJbmZvID0gKHByb2R1Y3Q6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCByZXN1bHQ7XHJcbiAgICAgICAgaWYgKHByb2R1Y3Q/LnNwZWNpYWxfbWFyayAmJiBwcm9kdWN0Py5zcGVjaWFsX21hcmsubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHByb2R1Y3Q/LnNwZWNpYWxfbWFyaz8uZmluZChzcGVjaWFsX21hcmsgPT4gc3BlY2lhbF9tYXJrLnR5cGUgPT0gJ21vcmVfaW5mbycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZUltZ0ZvY3VzID0gKGltZykgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9jdXNJbWFnZSA9IGltZ1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL2VjLWNvbXBvbmVudC9wcm9kdWN0LWRldGFpbC1lYy9wcm9kdWN0LWRldGFpbC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLElBQUks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YlA7SUFBckIsU0FBUyxDQUFDLFNBQVMsQ0FBQzt5REFBcUI7QUF0QmpDLHdCQUF3QjtJQU5wQyxTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsdUJBQXVCO1FBQ2pDLFlBQWlEO1FBRWpELFNBQVMsRUFBRSxDQUFDLG9CQUFvQixDQUFDOztLQUNwQyxDQUFDO0dBQ1csd0JBQXdCLENBNE9wQztTQTVPWSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENvbXBvbmVudEhlbHBlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY29tcG9uZW50LWhlbHBlcic7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvcmUuY29uc3RzJztcclxuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FuYWx5dGljcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPcHRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29wdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IFByb2R1Y3REZXRhaWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvZHVjdHMvcHJvZHVjdC1kZXRhaWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFByb2R1Y3RzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2R1Y3RzL3Byb2R1Y3RzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWV0YSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgc3RhcnRXaXRoLCBmaWx0ZXIgYXMgcnhGaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2FwcC1wcm9kdWN0LWRldGFpbC1lYycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vcHJvZHVjdC1kZXRhaWwtZWMuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1Byb2R1Y3REZXRhaWxTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZHVjdERldGFpbEVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBwdWJsaWMgcHJvZHVjdDogYW55O1xyXG4gICAgcHVibGljIG1lZGlhVXJsO1xyXG4gICAgcHVibGljIHNob3cgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBxdWFudGl0eSA9IDE7XHJcbiAgICBwdWJsaWMgY29tbWVudHM6IHN0cmluZyA9ICcnO1xyXG4gICAgcHVibGljIGJyZWFkY3J1bWIgPSBbXTtcclxuICAgIHB1YmxpYyBjYXJvdXNlbDogYW55O1xyXG4gICAgcHVibGljIGNvZGUgPSBudWxsO1xyXG4gICAgcHVibGljIGZvY3VzSW1hZ2U6IHN0cmluZyA9IG51bGxcclxuICAgIHB1YmxpYyBvd2xPcHRpb25zID0ge31cclxuICAgIHB1YmxpYyBzaG93UmV2aWV3czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhpZGVQcmljZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjcmVkaXRBY2NvdW50U2hvd1ByaWNlczogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xyXG4gICAgcHVibGljIGVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgcXVhbnRpdHlFcnJvcjogc3RyaW5nID0gJyc7XHJcbiAgICBwdWJsaWMgbWluaW11bUl0ZW1zUXR5OiBudW1iZXIgPSBudWxsO1xyXG4gICAgcHVibGljIG11bHRpcGxlUXR5OiBudW1iZXIgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBwcmVmaWxsU3ViPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuXHJcbiAgICBAVmlld0NoaWxkKCdjb250YWN0JykgY29udGFjdDogRWxlbWVudFJlZjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgcHJvZHVjdFNlcnZpY2U6IFByb2R1Y3REZXRhaWxTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBjb25zdHM6IENvbnN0YW50cyxcclxuICAgICAgICBwcm90ZWN0ZWQgYWN0aXZlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwdWJsaWMgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBvcHRpb25zU2VydmljZTogT3B0aW9uc1NlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIHByb2R1Y3RzU2VydmljZTogUHJvZHVjdHNTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcm90ZWN0ZWQgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbWV0YTogTWV0YSxcclxuICAgICAgICBwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLm1lZGlhVXJsID0gdGhpcy5jb25zdHMubWVkaWFVcmwoKTtcclxuICAgICAgICB0aGlzLmFjdGl2ZWRSb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHF1ZXJ5UGFyYW1zID0+IHtcclxuICAgICAgICAgICAgbGV0IHZhcmlhbnQ6IGFueSA9ICh0aGlzLmFjdGl2ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgndmFyaWFudCcpKTtcclxuICAgICAgICAgICAgbGV0IGNvZGUgPSBxdWVyeVBhcmFtcy5pZDtcclxuICAgICAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS5sb2FkUHJvZHVjdChjb2RlLCB2YXJpYW50KTtcclxuICAgICAgICAgICAgdGhpcy5jb2RlID0gcXVlcnlQYXJhbXMuaWRcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMucHJvZHVjdFNlcnZpY2UucHJvZHVjdCQuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3QgPSByZXM7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsKDAsIDApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iID0gdGhpcy5vcHRpb25zU2VydmljZS5nZXRCcmVhZGNydW1iKHRoaXMucHJvZHVjdC5jYXRlZ29yeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9kdWN0Lm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ldGEudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzp0aXRsZScsIGNvbnRlbnQ6IHRoaXMucHJvZHVjdC5uYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWV0YS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOmRlc2NyaXB0aW9uJywgY29udGVudDogdGhpcy5kZWxldGVIVE1MKHRoaXMucHJvZHVjdC5kZXNjcmlwdGlvbikgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXRhLnVwZGF0ZVRhZyh7IHByb3BlcnR5OiAnb2c6aW1hZ2UnLCBjb250ZW50OiB0aGlzLmNvbnN0cy5tZWRpYVVybCgpICsgdGhpcy5wcm9kdWN0LnBpY3R1cmVzZGVmYXVsdFswXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ldGEudXBkYXRlVGFnKHsgcHJvcGVydHk6ICdvZzp0eXBlJywgY29udGVudDogJ3Byb2R1Y3QnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWV0YS51cGRhdGVUYWcoeyBwcm9wZXJ0eTogJ29nOnVybCcsIGNvbnRlbnQ6IHdpbmRvdy5sb2NhdGlvbi5ocmVmIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS5wcm9kdWN0JC5waXBlKGZpbHRlcihkYXRhID0+IGRhdGEgJiYgZGF0YS5pZCAmJiBkYXRhLmlkICE9IDApKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIChwcm9kdWN0UGFyYW0pID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3ZpZXdfaXRlbScsIHsgLi4ucHJvZHVjdFBhcmFtLCBjdXJyZW5jeTogdGhpcy5jb25zdHMuY3VycmVuY3kuY29kZSB9KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VJbWdGb2N1cyhwcm9kdWN0UGFyYW0ucGljdHVyZXNkZWZhdWx0WzBdKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KENoYW5uZWxDb25maWdTZXJ2aWNlKS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoY2hhbm5lbCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1Jldmlld3MgPSBjaGFubmVsLnNob3dSZXZpZXdzO1xyXG4gICAgICAgICAgICB0aGlzLmhpZGVQcmljZXMgPSBjaGFubmVsPy5oaWRlUHJpY2VzID8/IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlID0gY2hhbm5lbD8uZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPz8gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoKHNob3dQcmljZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWRpdEFjY291bnRTaG93UHJpY2VzID0gc2hvd1ByaWNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUhUTUwoY2FkZW5hOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIC8vIEV4cHJlc2nDs24gcmVndWxhciBwYXJhIGJ1c2NhciBldGlxdWV0YXMgSFRNTFxyXG4gICAgICAgIGNvbnN0IGV4cHJlc2lvblJlZ3VsYXIgPSAvPFtePl0qPi9nO1xyXG4gICAgICAgIC8vIFJlZW1wbGF6YSB0b2RhcyBsYXMgZXRpcXVldGFzIEhUTUwgcG9yIHVuYSBjYWRlbmEgdmFjw61hXHJcbiAgICAgICAgcmV0dXJuIGNhZGVuYS5yZXBsYWNlKGV4cHJlc2lvblJlZ3VsYXIsICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVjT25Jbml0KClcclxuXHJcbiAgICAgICAgLy8gUHJlbGxlbmFyIGNvbWVudGFyaW9zIGN1YW5kbzpcclxuICAgICAgICAvLyAtIGNhcmd1ZSBlbCBwcm9kdWN0b1xyXG4gICAgICAgIC8vIC0gY2FtYmllIGxhIHZhcmlhbnRlIHNlbGVjY2lvbmFkYSAoYXNvY2lhdGVkRGF0YSQpXHJcbiAgICAgICAgLy8gLSBjYW1iaWVuIGxvcyDDrXRlbXMgZGVsIGNhcnJpdG8gICAgICAgIFxyXG4gICAgICAgIHRoaXMucHJlZmlsbFN1YiA9IGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLnByb2R1Y3QkLnBpcGUocnhGaWx0ZXIoKHA6IGFueSkgPT4gISFwICYmICEhcC5pZCkpLFxyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLmFzb2NpYXRlZERhdGEkLnBpcGUoc3RhcnRXaXRoKG51bGwgYXMgYW55KSksXHJcbiAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuY2FydEl0ZW1zLnBpcGUoc3RhcnRXaXRoKFtdIGFzIGFueVtdKSksXHJcbiAgICAgICAgXSkuc3Vic2NyaWJlKChbcHJvZHVjdCwgZGF0YSwgaXRlbXNdOiBbYW55LCBhbnksIGFueVtdXSkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgdmFyaWFudElkID1cclxuICAgICAgICAgICAgICAgIGRhdGE/LnZhcmlhbnRDb2RlID8/XHJcbiAgICAgICAgICAgICAgICBkYXRhPy52YXJpYW50X2lkID8/XHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0Py52YXJpYW50cz8uWzBdPy5jb2RlID8/XHJcbiAgICAgICAgICAgICAgICBudWxsO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBpdGVtcz8uZmluZChpdCA9PlxyXG4gICAgICAgICAgICAgICAgaXQ/LnByb2R1Y3Q/LmlkID09PSBwcm9kdWN0Py5pZCAmJlxyXG4gICAgICAgICAgICAgICAgKHZhcmlhbnRJZCA/IGl0Py52YXJpYW50X2lkID09PSB2YXJpYW50SWQgOiB0cnVlKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5jb21tZW50cyA9IChtYXRjaD8uY29tbWVudHMgPz8gJycpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLmFzb2NpYXRlZERhdGEkLnN1YnNjcmliZShhZCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWluaW11bUl0ZW1zUXR5ID0gYWQ/Lm1pbmltdW1JdGVtc1F1YW50aXR5IHx8IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMubXVsdGlwbGVRdHkgPSBhZD8ubXVsdGlwbGVRdWFudGl0eSB8fCBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnF1YW50aXR5ID0gdGhpcy5taW5pbXVtSXRlbXNRdHkgfHwgdGhpcy5tdWx0aXBsZVF0eSB8fCAxO1xyXG4gICAgICAgICAgICB0aGlzLnF1YW50aXR5RXJyb3IgPSAnJztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByZWZpbGxTdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVG9DYXJ0ID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5vdGUgPSB0aGlzLmNvbW1lbnRzPy50cmltKCkgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLnF1YW50aXR5ID4gMCAmJiB0aGlzLnByb2R1Y3RTZXJ2aWNlLmFkZFRvQ2FydCh0aGlzLnF1YW50aXR5LCB1bmRlZmluZWQsIG5vdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEFsbFByb2R1Y3Rvc1RvQ2FydCA9ICgpID0+IHtcclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLnByb2R1Y3QucHJvZHVjdFdpdGhVbmlxdWVWYXJpYW50Py5maWx0ZXIocHJvZCA9PiBwcm9kLnByb2R1Y3RUb0NhcnRJdGVtKS5tYXAocHJvZCA9PiBwcm9kLnByb2R1Y3RUb0NhcnRJdGVtKVxyXG4gICAgICAgIGl0ZW1zPy5sZW5ndGggJiYgdGhpcy5jYXJ0U2VydmljZS5hZGRBbGxUb0NhcnQoaXRlbXMpXHJcbiAgICB9XHJcblxyXG4gICAgc2Nyb2xsKCkge1xyXG4gICAgICAgIGxldCBlbCA9IHRoaXMuY29udGFjdC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGVsLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVJlZiA9IChjYXJvdXNlbCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2Fyb3VzZWwgPSBjYXJvdXNlbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBhY3R1YWxpemEgbGEgdmFyaWFibGUgcXVhbnRpdHkgc3VtYW5kb2xlICd4JyBjb250ZW5pZG8uXHJcbiAgICAgKiBTaSBoYXkgdW4gbXVsdGlwbGVRdWFudGl0eSBjb25maWd1cmFkbywgaGFjZSBzbmFwIGFsIHNpZ3VpZW50ZSBtw7psdGlwbG8gdsOhbGlkb1xyXG4gICAgICogY3VhbmRvIGxhIGNhbnRpZGFkIGFjdHVhbCB5YSBlcyBpbnbDoWxpZGEuXHJcbiAgICAgKiBAcGFyYW0gc3RvY2sgbsO6bWVybyBtw6F4aW1vIGRpc3BvbmlibGUgZW4gc3RvY2suXHJcbiAgICAgKiBAcGFyYW0gY2hhbmdlQW1vdW50IGNhbnRpZGFkIHF1ZSBzZSBxdWllcmUgc3VtYXIgKGlnbm9yYWRvIHNpIG11bHRpcGxlUXR5IGVzdMOhIHNldGVhZG8pLlxyXG4gICAgICogQHBhcmFtIGZvcmNlTXVsdGlwbGUgbGVnYWN5IOKAlCBzaSBlcyB0cnVlLCBvYmxpZ2EgYSBxdWUgZWwgcmVzdWx0YWRvIHNlYSBtw7psdGlwbG8gZGUgY2hhbmdlQW1vdW50LlxyXG4gICAgICovXHJcbiAgICBwbHVzID0gKHN0b2NrPzogbnVtYmVyLCBjaGFuZ2VBbW91bnQ6IG51bWJlciA9IDEsIGZvcmNlTXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLm11bHRpcGxlUXR5IHx8IGNoYW5nZUFtb3VudDtcclxuICAgICAgICBjb25zdCBjdXJyZW50UXVhbnRpdHkgPSBOdW1iZXIodGhpcy5xdWFudGl0eSk7XHJcbiAgICAgICAgbGV0IG5ld1F1YW50aXR5OiBudW1iZXI7XHJcblxyXG4gICAgICAgIGlmIChzdGVwID4gMSkge1xyXG4gICAgICAgICAgICBuZXdRdWFudGl0eSA9IGN1cnJlbnRRdWFudGl0eSAlIHN0ZXAgIT09IDBcclxuICAgICAgICAgICAgICAgID8gTWF0aC5jZWlsKGN1cnJlbnRRdWFudGl0eSAvIHN0ZXApICogc3RlcFxyXG4gICAgICAgICAgICAgICAgOiBjdXJyZW50UXVhbnRpdHkgKyBzdGVwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5ld1F1YW50aXR5ID0gY3VycmVudFF1YW50aXR5ICsgc3RlcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RvY2sgfHwgbmV3UXVhbnRpdHkgPD0gc3RvY2spIHtcclxuICAgICAgICAgICAgdGhpcy5xdWFudGl0eSA9IG5ld1F1YW50aXR5O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdvdXQtb2Ytc3RvY2stYWN0dWFsbHknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZURldGFpbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIGFjdHVhbGl6YSBsYSB2YXJpYWJsZSBxdWFudGl0eSByZXN0YW5kb2xlICd4JyBjb250ZW5pZG8uXHJcbiAgICAgKiBTaSBoYXkgdW4gbXVsdGlwbGVRdWFudGl0eSBjb25maWd1cmFkbywgaGFjZSBzbmFwIGFsIG3Dumx0aXBsbyB2w6FsaWRvIGluZmVyaW9yXHJcbiAgICAgKiBjdWFuZG8gbGEgY2FudGlkYWQgYWN0dWFsIHlhIGVzIGludsOhbGlkYS5cclxuICAgICAqIEBwYXJhbSBjaGFuZ2VBbW91bnQgY2FudGlkYWQgcXVlIHNlIHF1aWVyZSByZXN0YXIgKGlnbm9yYWRvIHNpIG11bHRpcGxlUXR5IGVzdMOhIHNldGVhZG8pLlxyXG4gICAgICogQHBhcmFtIG1pbmltdW0gY2FudGlkYWQgbcOtbmltYSBwZXJtaXRpZGEgKGlnbm9yYWRvIHNpIG1pbmltdW1JdGVtc1F0eSBlc3TDoSBzZXRlYWRvKS5cclxuICAgICAqIEBwYXJhbSBmb3JjZU11bHRpcGxlIGxlZ2FjeSDigJQgc2kgZXMgdHJ1ZSwgb2JsaWdhIGEgcXVlIGVsIHJlc3VsdGFkbyBzZWEgbcO6bHRpcGxvIGRlIGNoYW5nZUFtb3VudC5cclxuICAgICAqL1xyXG4gICAgbGVzcyA9IChjaGFuZ2VBbW91bnQ6IG51bWJlciA9IDEsIG1pbmltdW06IG51bWJlciA9IDEsIGZvcmNlTXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLm11bHRpcGxlUXR5IHx8IGNoYW5nZUFtb3VudDtcclxuICAgICAgICBjb25zdCBmbG9vciA9IHRoaXMubWluaW11bUl0ZW1zUXR5IHx8IChzdGVwID4gMSA/IHN0ZXAgOiBtaW5pbXVtKTtcclxuICAgICAgICBsZXQgbmV3UXVhbnRpdHk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgaWYgKHN0ZXAgPiAxKSB7XHJcbiAgICAgICAgICAgIG5ld1F1YW50aXR5ID0gdGhpcy5xdWFudGl0eSAlIHN0ZXAgIT09IDBcclxuICAgICAgICAgICAgICAgID8gTWF0aC5mbG9vcih0aGlzLnF1YW50aXR5IC8gc3RlcCkgKiBzdGVwXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMucXVhbnRpdHkgLSBzdGVwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5ld1F1YW50aXR5ID0gdGhpcy5xdWFudGl0eSAtIHN0ZXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnF1YW50aXR5ID0gbmV3UXVhbnRpdHkgPj0gZmxvb3IgPyBuZXdRdWFudGl0eSA6IGZsb29yO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGVEZXRhaWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBvblF1YW50aXR5SW5wdXQgPSAodmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XHJcbiAgICAgICAgaWYgKCFpc05hTihwYXJzZWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVhbnRpdHkgPSBwYXJzZWQ7XHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVEZXRhaWwoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGVEZXRhaWwgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMubWluaW11bUl0ZW1zUXR5ICYmIHRoaXMucXVhbnRpdHkgPCB0aGlzLm1pbmltdW1JdGVtc1F0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1YW50aXR5RXJyb3IgPSAnTGEgY2FudGlkYWQgZGViZSBzZXIgYWwgbWVub3MgJyArIHRoaXMubWluaW11bUl0ZW1zUXR5O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tdWx0aXBsZVF0eSAmJiB0aGlzLnF1YW50aXR5ICUgdGhpcy5tdWx0aXBsZVF0eSAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnF1YW50aXR5RXJyb3IgPSAnTGEgY2FudGlkYWQgZGViZSBzZXIgbVxcdTAwZmFsdGlwbG8gZGUgJyArIHRoaXMubXVsdGlwbGVRdHk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5xdWFudGl0eUVycm9yID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzUXVhbnRpdHlWYWxpZERldGFpbCA9ICgpOiBib29sZWFuID0+IHtcclxuICAgICAgICBpZiAodGhpcy5taW5pbXVtSXRlbXNRdHkgJiYgdGhpcy5xdWFudGl0eSA8IHRoaXMubWluaW11bUl0ZW1zUXR5KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGVRdHkgJiYgdGhpcy5xdWFudGl0eSAlIHRoaXMubXVsdGlwbGVRdHkgIT09IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93Q29udGFjdCA9ICgpID0+IHRoaXMuc2hvdyA9IHRydWU7XHJcbiAgICBoaWRlQ29udGFjdCA9ICgpID0+IHRoaXMuc2hvdyA9IGZhbHNlO1xyXG5cclxuICAgIHRoZXJlSXNNb3JlSW5mbyA9IChwcm9kdWN0OiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgcmVzdWx0O1xyXG4gICAgICAgIGlmIChwcm9kdWN0Py5zcGVjaWFsX21hcmsgJiYgcHJvZHVjdD8uc3BlY2lhbF9tYXJrLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBwcm9kdWN0Py5zcGVjaWFsX21hcms/LmZpbmQoc3BlY2lhbF9tYXJrID0+IHNwZWNpYWxfbWFyay50eXBlID09ICdtb3JlX2luZm8nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VJbWdGb2N1cyA9IChpbWcpID0+IHtcclxuICAgICAgICB0aGlzLmZvY3VzSW1hZ2UgPSBpbWdcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -105,6 +105,31 @@ var CartEcComponent = /** @class */ (function (_super) {
|
|
|
105
105
|
_this.cartLoading = false;
|
|
106
106
|
_this.enableFieldNotesInArticleFile = false;
|
|
107
107
|
_this.toDecimal = function (amount) { return _this.consts.toDecimal(amount); };
|
|
108
|
+
_this.cartItemPlus = function (item) {
|
|
109
|
+
var _a, _b;
|
|
110
|
+
var multipleQty = ((_a = item.product.variants[0]) === null || _a === void 0 ? void 0 : _a.multipleQuantity) || 0;
|
|
111
|
+
var step = multipleQty || 1;
|
|
112
|
+
var stock = (_b = item.product.variants[0]) === null || _b === void 0 ? void 0 : _b.stock;
|
|
113
|
+
var current = item.quantity;
|
|
114
|
+
var next = step > 1 && current % step !== 0
|
|
115
|
+
? Math.ceil(current / step) * step
|
|
116
|
+
: current + step;
|
|
117
|
+
_this.actualizarCantidad(item, next, stock, 'cartPlus');
|
|
118
|
+
};
|
|
119
|
+
_this.cartItemLess = function (item) {
|
|
120
|
+
var _a, _b, _c;
|
|
121
|
+
var multipleQty = ((_a = item.product.variants[0]) === null || _a === void 0 ? void 0 : _a.multipleQuantity) || 0;
|
|
122
|
+
var minimumQty = ((_b = item.product.variants[0]) === null || _b === void 0 ? void 0 : _b.minimumItemsQuantity) || 0;
|
|
123
|
+
var step = multipleQty || 1;
|
|
124
|
+
var floor = minimumQty || step;
|
|
125
|
+
var current = item.quantity;
|
|
126
|
+
var next = step > 1 && current % step !== 0
|
|
127
|
+
? Math.floor(current / step) * step
|
|
128
|
+
: current - step;
|
|
129
|
+
if (next >= floor) {
|
|
130
|
+
_this.actualizarCantidad(item, next, (_c = item.product.variants[0]) === null || _c === void 0 ? void 0 : _c.stock, 'cartLess');
|
|
131
|
+
}
|
|
132
|
+
};
|
|
108
133
|
_this.redirectRegister = function () { return _this.router.navigateByUrl("/auth/login"); };
|
|
109
134
|
_this.getVariants = function (product) {
|
|
110
135
|
var item = product.product;
|
|
@@ -529,4 +554,4 @@ var CartEcComponent = /** @class */ (function (_super) {
|
|
|
529
554
|
return CartEcComponent;
|
|
530
555
|
}(ComponentHelper));
|
|
531
556
|
export { CartEcComponent };
|
|
532
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NhcnQtZWMvY2FydC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEIsTUFBTSxlQUFlLENBQUE7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVM3RTtJQUFxQyxtQ0FBZTtJQXNCaEQseUJBQ1csV0FBd0IsRUFDeEIsV0FBd0IsRUFDckIsTUFBaUIsRUFDcEIsZUFBZ0MsRUFDaEMsTUFBYyxFQUNkLFlBQTRCLEVBQ3pCLGFBQTJCLEVBQzlCLGlCQUFvQyxFQUNwQyxvQkFBMEM7UUFUckQsWUFVSSxpQkFBTyxTQUtWO1FBZFUsaUJBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVcsR0FB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QyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBRSx1QkFBdUI7Z0JBQzlELEtBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixLQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIseURBQXlEO2FBQzVEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBb0RELCtDQUFxQixHQUFyQixVQUFzQixTQUFpQixFQUFFLEtBQWE7UUFDbEQsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ3hGLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUV6RSxJQUFJLGVBQWUsR0FBTSxrQkFBa0IsVUFBTyxDQUFDO1FBQ25ELE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7O2dCQTladUIsV0FBVztnQkFDWCxXQUFXO2dCQUNiLFNBQVM7Z0JBQ0gsZUFBZTtnQkFDeEIsTUFBTTtnQkFDQSxjQUFjO2dCQUNWLFlBQVk7Z0JBQ1gsaUJBQWlCO2dCQUNkLG9CQUFvQjs7SUEvQjVDLGVBQWU7UUFMM0IsU0FBUyxDQUFDO1lBQ1AsUUFBUSxFQUFFLGFBQWE7WUFDdkIsWUFBdUM7O1NBRTFDLENBQUM7T0FDVyxlQUFlLENBMmMzQjtJQUFELHNCQUFDO0NBQUEsQUEzY0QsQ0FBcUMsZUFBZSxHQTJjbkQ7U0EzY1ksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tIFwibmd4LWJvb3RzdHJhcC9tb2RhbFwiO1xyXG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbC9icy1tb2RhbC1yZWYuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gXCIuLi8uLi9jb3JlLmNvbnN0c1wiO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IFByb2R1Y3RzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2R1Y3RzL3Byb2R1Y3RzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEhlbHBlciB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXJcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3RvYXN0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgaW50ZXJ2YWwsIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBBZGRyZXNzaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoZWNrb3V0L2FkZHJlc3Npbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xyXG5kZWNsYXJlIHZhciAkOiBhbnk7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2FwcC1jYXJ0LWVjJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXJ0LWVjLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NhcnQtZWMuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FydEVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblxyXG4gICAgcHVibGljIHZhcmlhbnRzVG9TaG93OiBzdHJpbmdbXSA9IFsnVEFMTEUnLCAnQ09MT1InXTtcclxuICAgIHB1YmxpYyBpc0xvZ2dlZEluID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbWVkaWFVcmwgPSAnJztcclxuICAgIHB1YmxpYyBtb2RhbFJlZjogQnNNb2RhbFJlZiB8IG51bGw7XHJcbiAgICBwdWJsaWMgcHJvbW90aW9ucyA9IFtdO1xyXG4gICAgcHVibGljIGl0ZW1zOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgICBwcml2YXRlIGNhcmdhbmRvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY2hhbm5lbDogYW55ID0ge307XHJcbiAgICBwdWJsaWMgdXBkYXRlU3RvY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBleGl0VXBkYXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhpZGVQcmljZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoaWRlRGlzY291bnRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGlkZVRheGVzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY3JlZGl0QWNjb3VudFNob3dQcmljZXM6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcclxuICAgIHB1YmxpYyBzaG93VGF4TGVnZW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY2FydExvYWRpbmcgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBlbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgY29uc3RzOiBDb25zdGFudHMsXHJcbiAgICAgICAgcHVibGljIHByb2R1Y3RzU2VydmljZTogUHJvZHVjdHNTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwdWJsaWMgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBhZGRyZXNzaW5nU2VydmljZTogQWRkcmVzc2luZ1NlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGNoYW5uZWxDb25maWdTZXJ2aWNlOiBDaGFubmVsQ29uZmlnU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcclxuICAgICAgICB0aGlzLmlzTG9nZ2VkSW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgICAgIHRoaXMubWVkaWFVcmwgPSB0aGlzLmNvbnN0cy5tZWRpYVVybCgpO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVMb2dnZWRJbigpIHtcclxuICAgICAgICB0aGlzLmlzTG9nZ2VkSW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHdpbmRvdy5zY3JvbGwoMCwgMCk7XHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5wcm9tb3Rpb25zLnN1YnNjcmliZShwcm9tb3Rpb25zID0+IHRoaXMucHJvbW90aW9ucyA9IHByb21vdGlvbnMpO1xyXG4gICAgICAgIC8vICAgIGNvbnNvbGUubG9nKHRoaXMuY2FydFNlcnZpY2UuZ2V0VGF4ZXMoKSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2hhbm5lbENvbmZpZ1NlcnZpY2UuY2hhbm5lbENvbmZpZyQuc3Vic2NyaWJlKGNoYW5uZWwgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhpZGVQcmljZXMgPSBjaGFubmVsPy5oaWRlUHJpY2VzID8/IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmhpZGVEaXNjb3VudHMgPSBjaGFubmVsPy5oaWRlRGlzY291bnRzID8/IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmhpZGVUYXhlcyA9IGNoYW5uZWw/LmhpZGVUYXhlcyA/PyBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93VGF4TGVnZW5kID0gY2hhbm5lbD8uc2hvd1RheExlZ2VuZCA/PyBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5lbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZSA9IGNoYW5uZWw/LmVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlID8/IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaGlkZVByaWNlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5zaG93UHJpY2UkLnN1YnNjcmliZSgoc2hvd1ByaWNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlZGl0QWNjb3VudFNob3dQcmljZXMgPSBzaG93UHJpY2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5sb2FkaW5nLnN1YnNjcmliZShpc0xvYWRpbmcgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNhcnRMb2FkaW5nID0gaXNMb2FkaW5nO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZWNPbkluaXQoKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0b0RlY2ltYWwgPSAoYW1vdW50KSA9PiB0aGlzLmNvbnN0cy50b0RlY2ltYWwoYW1vdW50KTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYWN0dWFsaXphckNhbnRpZGFkKGl0ZW06IGFueSwgY2FudGlkYWQ6IG51bWJlciB8IHN0cmluZywgc3RvY2s6IG51bWJlciwgaWQ/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5jYXJ0TG9hZGluZykgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG11bHRpcGxlUXVhbnRpdHkgPSBpdGVtLnByb2R1Y3Q/LnZhcmlhbnRzICYmIGl0ZW0ucHJvZHVjdC52YXJpYW50cy5sZW5ndGggPiAwID8gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm11bHRpcGxlUXVhbnRpdHkgOiAwO1xyXG4gICAgICAgIGNvbnN0IHN0ZXAgPSBtdWx0aXBsZVF1YW50aXR5ICYmIG11bHRpcGxlUXVhbnRpdHkgPiAwID8gbXVsdGlwbGVRdWFudGl0eSA6IDE7XHJcblxyXG4gICAgICAgIGxldCBuZXdRdWFudGl0eTogbnVtYmVyO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGNhbnRpZGFkID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBuZXdRdWFudGl0eSA9IHBhcnNlSW50KGNhbnRpZGFkLCAxMCk7XHJcbiAgICAgICAgICAgIGlmIChuZXdRdWFudGl0eSAlIHN0ZXAgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LWJlLW11bHRpcGxlJywgeyBxdWFudGl0eTogc3RlcCB9KTtcclxuICAgICAgICAgICAgICAgIG5ld1F1YW50aXR5ID0gTWF0aC5yb3VuZChuZXdRdWFudGl0eSAvIHN0ZXApICogc3RlcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5ld1F1YW50aXR5ID0gY2FudGlkYWQ7XHJcbiAgICAgICAgICAgIGlmIChuZXdRdWFudGl0eSAlIHN0ZXAgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIG5ld1F1YW50aXR5ID0gTWF0aC5yb3VuZChuZXdRdWFudGl0eSAvIHN0ZXApICogc3RlcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qga2VlcFNhbWVDb21tZW50ID0gaXRlbT8uY29tbWVudHMgPz8gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBpZiAoaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gdHJ1ZTsgLy8gQWN0dWFsaXphIGxhIHByb3BpZWRhZCB2aW5jdWxhZGEgYSBgW2Rpc2FibGVkXWBcclxuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ID4gMCAmJiBuZXdRdWFudGl0eSA8PSBzdG9jaykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS51cGRhdGVJdGVtUXVhbnRpdHkoaXRlbSwgbmV3UXVhbnRpdHksIGtlZXBTYW1lQ29tbWVudCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAvLyBGdW5jacOzbiBkZSBmbGVjaGEgcGFyYSBwcmVzZXJ2YXIgZWwgY29udGV4dG9cclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgPiAwICYmIG5ld1F1YW50aXR5IDw9IHN0b2NrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtLCBuZXdRdWFudGl0eSwga2VlcFNhbWVDb21tZW50KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdvdXQtb2Ytc3RvY2stYWN0dWFsbHknKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG5cclxuICAgIHJlZGlyZWN0Q2hlY2tvdXQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FydFNlcnZpY2UuaGFzU3VmZmljaWVudENyZWRpdHNGb3JDYXJ0VG90YWwoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvY2hlY2tvdXRgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiTm8gc2UgcHVlZGUgcmVkaXJpZ2lyIGFsIGNoZWNrb3V0IGRlYmlkbyBhIHVuYSB2YWxpZGFjacOzbiBmYWxsaWRhLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWRpcmVjdFJlZ2lzdGVyID0gKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2F1dGgvbG9naW5gKVxyXG5cclxuICAgIG9wZW5Nb2RhbCh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KHRlbXBsYXRlLCB7IGNsYXNzOiAnbW9kYWwteGwnLCBrZXlib2FyZDogZmFsc2UgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVkaXJlY3REZXRhaWxQcm9kdWN0KHByb2R1Y3QpIHtcclxuICAgICAgICBsZXQgdmFyaWFudCA9IHByb2R1Y3QudmFyaWFudHNbMF1cclxuICAgICAgICBsZXQgcGF0aCA9ICcvcHJvZHVjdC8nXHJcbiAgICAgICAgcGF0aCArPSB2YXJpYW50LmNvZGVcclxuICAgICAgICBwYXRoICs9IHZhcmlhbnQub3B0aW9ucy5sZW5ndGggPyBcIj92YXJpYW50PXRydWVcIiA6IFwiXCJcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHBhdGgpXHJcbiAgICB9XHJcblxyXG4gICAgZm9ybWF0RGF0ZShkYXRlKSB7XHJcbiAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShkYXRlKSxcclxuICAgICAgICAgICAgbW9udGggPSAnJyArIChkLmdldE1vbnRoKCkgKyAxKSxcclxuICAgICAgICAgICAgZGF5ID0gJycgKyBkLmdldERhdGUoKSxcclxuICAgICAgICAgICAgeWVhciA9IGQuZ2V0RnVsbFllYXIoKTtcclxuXHJcbiAgICAgICAgaWYgKG1vbnRoLmxlbmd0aCA8IDIpXHJcbiAgICAgICAgICAgIG1vbnRoID0gJzAnICsgbW9udGg7XHJcbiAgICAgICAgaWYgKGRheS5sZW5ndGggPCAyKVxyXG4gICAgICAgICAgICBkYXkgPSAnMCcgKyBkYXk7XHJcblxyXG4gICAgICAgIHJldHVybiBbeWVhciwgbW9udGgsIGRheV0uam9pbignLScpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNhcmdhTW9kYWwoaXRlbSkge1xyXG5cclxuICAgICAgICAvLyBPYnRpZW5lIGxhcyBzZWRlcyBkZWwgY2xpZW50ZVxyXG4gICAgICAgIGNvbnN0IHNlZGVzID0gYXdhaXQgdGhpcy5jYXJ0U2VydmljZS5nZXRBZGRyZXNzQm9vaygpO1xyXG5cclxuICAgICAgICAvLyBDcmVvIHVuYSBzZXJpZSBkZSB2YXJpYWJsZXMgcXVlIHZveSBhIG5lY2VzaXRhciwgaWQgcGFyYSBjb250cm9sYXIgbGFzIHZ1ZWx0YXMgcXVlIGRhIHkgY3VhbnRhcyBsaW5lYXMgaGF5IHkgYWxsSUQgcGFyYSBhbG1hY2VuYXIgbG9zIElEIGRlIGxvcyBsb3Rlcy5cclxuICAgICAgICB2YXIgaWQgPSAxO1xyXG4gICAgICAgIHZhciB0aGlzXyA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGFsbElEID0gW107XHJcblxyXG4gICAgICAgIC8vIEHDsWFkZSBsb3MgZGF0b3MgYWwgZW5jYWJlemFkbyBkZWwgTW9kYWxcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW5jYWJlemFkb01vZGFsJykuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwidGl0bGUgdGV4dC1kYXJrIHRleHQtZGVjb3JhdGlvbi1ub25lIGg1IGQtYmxvY2sgbS0wIHAtMCBtLTAgcC0wXCI+PHAgY2xhc3M9XCJub21icmUgbWItMFwiIGlkPVwicHJvZHVjdE5hbWVcIj4nICsgaXRlbVsncHJvZHVjdCddWyduYW1lJ10gKyAnPC9wPjxzbWFsbCBjbGFzcz1cInRleHQtc2Vjb25kYXJ5IHBzLTIgbXMtMVwiIGlkPVwicHJvZHVjdFJlZlwiPlJlZjonICsgaXRlbVsndmFyaWFudF9pZCddICsgJzwvc21hbGw+PC9hPic7XHJcblxyXG4gICAgICAgIC8vIEJvcnJhbW9zIHRvZG9zIGxvcyBkYXRvcyBkZSBsb3MgbG90ZXMgYW50ZXJpb3Jlc1xyXG4gICAgICAgIHZhciBib2R5VGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxvdF9ib2R5X3RhYmxlXCIpIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XHJcbiAgICAgICAgYm9keVRhYmxlLmlubmVySFRNTCA9ICcnO1xyXG5cclxuICAgICAgICAvLyBSZWNvcnJlIHRvZG9zIGxvcyBhcnRpY3Vsb3MgeSBlbmN1ZW50cmEgc2kgdGllbmVuIGxvdGVzIG8gbm8sIHNpIHRpZW5lIGNyZWEgbGFzIGxpbmVhc1xyXG4gICAgICAgIHRoaXNfLmNhcnRTZXJ2aWNlLmdldENhcnQyKCkuZm9yRWFjaChpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGlmIChpWydpdGVtX2lkJ10gPT0gaXRlbS5pdGVtX2lkICYmIGlbJ2xvdCddICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBib2R5VGFibGUuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgICAgICAgICBpWydsb3QnXS5mb3JFYWNoKGxvdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDEgPSByb3cuaW5zZXJ0Q2VsbCgwKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDIgPSByb3cuaW5zZXJ0Q2VsbCgxKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDMgPSByb3cuaW5zZXJ0Q2VsbCgyKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDQgPSByb3cuaW5zZXJ0Q2VsbCgzKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDUgPSByb3cuaW5zZXJ0Q2VsbCg0KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDYgPSByb3cuaW5zZXJ0Q2VsbCg1KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKERhdGUucGFyc2UobG90WydkYXRlX3JlcXVlc3QnXSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwxLmlubmVySFRNTCA9ICc8aW5wdXQgaWQ9XCJpZCcgKyBpZCArICdcIiAgc3R5bGU9XCJib3JkZXI6IDA7XCIgdmFsdWU9XCInICsgbG90LmlkICsgJ1wiIGRpc2FibGVkPic7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbDIuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJxdWFudGl0eScgKyBpZCArICdcIiB2YWx1ZT0gXCInICsgbG90LnF1YW50aXR5ICsgJ1wiY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy01MFwiIG1heD1cIicgKyBsb3QucXVhbnRpdHkgKyAnXCI+JztcclxuICAgICAgICAgICAgICAgICAgICBjZWxsMy5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJkYXRlXCIgdmFsdWU9XCInICsgdGhpcy5mb3JtYXREYXRlKGRhdGUpICsgJ1wiIGlkPVwiZGVsaXZlcnlEYXRlJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBvcGNpb25lcyA9IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICBzZWRlcy5mb3JFYWNoKHNlZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VkZS5pZCA9PSBsb3Quc2hpcHBpbmdfYWRkcmVzc19pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BjaW9uZXMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgc2VkZS5pZCArICdcIiBzZWxlY3RlZD4nICsgc2VkZS5jaXR5ICsgJyAtICcgKyBzZWRlLnN0cmVldCArICc8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BjaW9uZXMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgc2VkZS5pZCArICdcIj4nICsgc2VkZS5jaXR5ICsgJyAtICcgKyBzZWRlLnN0cmVldCArICc8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbDQuaW5uZXJIVE1MID0gJzxzZWxlY3QgIGlkPVwic2hpcHBpbmdBZGRyZXNzJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nICsgb3BjaW9uZXMgKyAnPC9zZWxlY3Q+JztcclxuICAgICAgICAgICAgICAgICAgICBjZWxsNS5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG5TZWd1aXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI2NvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBhcmlhLWNvbnRyb2xzPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiIHZhbHVlPVwiVmVyXCI+PC9pbnB1dD4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGw2LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiY29sLTEgZmxleC1ncm93LTAgdGV4dC1yaWdodCBidG5Cb3JyYXIgZC1ub25lIGQtbWQtYmxvY2sgZC1ub25lIGQtbWQtYmxvY2tcIj48YnV0dG9uIHZhbHVlPVwiJyArIGxvdC5pZCArICdcIiBjbGFzcz1cImJ0blwiIGlkPVwiYm90b25Cb3JyYXJcIj48aW1nIHNyYz1cIi4vYXNzZXRzL21hcXVldGFkby9pbWcvaWMtYm9ycmFyLnN2Z1wiIGFsdD1cIlwiPiA8L2J1dHRvbj48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByb3cyID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWxhMiA9IHJvdzIuaW5zZXJ0Q2VsbCgwKVxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGEyLmNvbFNwYW4gPSA2O1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGEyLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiY29sbGFwc2VcIiBpZD1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIj48aW5wdXQgaWQ9XCJub3RlcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHZhbHVlPVwiJyArIGxvdC5ub3RlcyArICdcIiBwbGFjZWhvbGRlcj1cIkluZ3Jlc2UgdW4gY29tZW50YXJpbyBlbiBjYXNvIGRlIHF1ZSBzZWEgbmVjZXNhcmlvLlwiIHR5cGU9XCJ0ZXh0XCIvPjwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQgPSBpZCArIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGFsbElELnB1c2gobG90WydpZCddKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3RvbkFncmVnYXInKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgLy8gLy8gU2UgY2FsY3VsYSBsYSBjYW50aWRhZCB5IGVsIGNvbnRhZG9yIHBhcmEgcXVlIG5vIGV4Y2VkYSBsYSBjYW50aWRhZCBkZSBsYSBsaW5lYSBhbCBjcmVhciB1biBudWV2byBsb3RlLlxyXG4gICAgICAgICAgICB2YXIgY2FudGlkYWRBY3R1YWwgPSAwO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGlmICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW50aWRhZEFjdHVhbCA9IGNhbnRpZGFkQWN0dWFsICsgcGFyc2VJbnQoKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIiArIGluZGV4KSkudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBhw7FhZGUgbGEgbGluZWEgc2llbXByZSB5IGN1YW5kbyBsYSBjYW50aWRhZCByZXN0YW50ZSBubyBzZWEgY2Vyby5cclxuICAgICAgICAgICAgaWYgKGNhbnRpZGFkQWN0dWFsIDwgaXRlbVsncXVhbnRpdHknXSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJvdyA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxsMSA9IHJvdy5pbnNlcnRDZWxsKDApO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGwyID0gcm93Lmluc2VydENlbGwoMSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDMgPSByb3cuaW5zZXJ0Q2VsbCgyKTtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxsNCA9IHJvdy5pbnNlcnRDZWxsKDMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGw1ID0gcm93Lmluc2VydENlbGwoNCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDYgPSByb3cuaW5zZXJ0Q2VsbCg1KTtcclxuICAgICAgICAgICAgICAgIGNlbGwxLmlubmVySFRNTCA9ICc8aW5wdXQgaWQ9XCJpZCcgKyBpZCArICdcIiAgc3R5bGU9XCJib3JkZXI6IDA7XCIgdmFsdWU9XCJQZW5kdC5cIiBkaXNhYmxlZD4nO1xyXG4gICAgICAgICAgICAgICAgY2VsbDIuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJxdWFudGl0eScgKyBpZCArICdcIiB2YWx1ZT0gXCInICsgKGl0ZW1bJ3F1YW50aXR5J10gLSBjYW50aWRhZEFjdHVhbCkgKyAnXCJjbGFzcz1cImZvcm0tY29udHJvbCB3LTUwXCIgbWF4PVwiJyArIChpdGVtWydxdWFudGl0eSddIC0gY2FudGlkYWRBY3R1YWwpICsgJ1wiPic7XHJcbiAgICAgICAgICAgICAgICBjZWxsMy5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJkYXRlXCIgaWQ9XCJkZWxpdmVyeURhdGUnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPic7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3BjaW9uZXMgPSBcIlwiXHJcbiAgICAgICAgICAgICAgICBzZWRlcy5mb3JFYWNoKHNlZGUgPT4geyBvcGNpb25lcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBzZWRlLmlkICsgJ1wiPicgKyBzZWRlLmNpdHkgKyAnIC0gJyArIHNlZGUuc3RyZWV0ICsgJzwvb3B0aW9uPic7IH0pO1xyXG4gICAgICAgICAgICAgICAgY2VsbDQuaW5uZXJIVE1MID0gJzxzZWxlY3QgIGlkPVwic2hpcHBpbmdBZGRyZXNzJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nICsgb3BjaW9uZXMgKyAnPC9zZWxlY3Q+JztcclxuICAgICAgICAgICAgICAgIGNlbGw1LmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0blNlZ3VpclwiIHR5cGU9XCJidXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS1icy10YXJnZXQ9XCIjY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtY29udHJvbHM9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgdmFsdWU9XCJWZXJcIj48L2lucHV0Pic7XHJcbiAgICAgICAgICAgICAgICBjZWxsNi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbC0xIGZsZXgtZ3Jvdy0wIHRleHQtcmlnaHQgYnRuQm9ycmFyIGQtbm9uZSBkLW1kLWJsb2NrIGQtbm9uZSBkLW1kLWJsb2NrXCI+PGJ1dHRvbiBjbGFzcz1cImJ0blwiIGlkPVwiYm90b25Cb3JyYXJcIj48aW1nIHNyYz1cIi4vYXNzZXRzL21hcXVldGFkby9pbWcvaWMtYm9ycmFyLnN2Z1wiIGFsdD1cIlwiPiA8L2J1dHQ+PC9kaXY+JztcclxuICAgICAgICAgICAgICAgIHZhciByb3cyID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpbGEyID0gcm93Mi5pbnNlcnRDZWxsKDApXHJcbiAgICAgICAgICAgICAgICBmaWxhMi5jb2xTcGFuID0gNjtcclxuICAgICAgICAgICAgICAgIGZpbGEyLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiY29sbGFwc2VcIiBpZD1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIj48aW5wdXQgaWQ9XCJub3RlcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiSW5ncmVzZSB1biBjb21lbnRhcmlvIGVuIGNhc28gZGUgcXVlIHNlYSBuZWNlc2FyaW8uXCIgdHlwZT1cInRleHRcIi8+PC9kaXY+JztcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgaWQgPSBpZCArIDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzXy50b2FzdHJTZXJ2aWNlLnNob3coJ2xvdC1tYXgtcXVhbnRpdHknKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ3VhbmRvIHNlIHB1bHNhIGVsIGJvdG9uIHBhcmEgZ3VhcmRhciBlbCBsb3RlIHJlY29ycmUgbGEgZnVuY2lvbiB5IGVsIGZvciAsIHJlY29ycmUgbGluZWEgYSBsaW5lYSB5IGxhbnphIGVsIGVuZHBvaW50IGNvbiB1bmEgcGF1c2EgcGFyYSBxdWUgbm8gc2UgcGllcmRhIG5pbmd1bm8geSBubyBzZSBxdWVkZSBwaWxsYWRvLlxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3Rvbkd1YXJkYXInKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzXy50b2FzdHJTZXJ2aWNlLnNob3coJ2xvdC1zYXZpbmcnKTtcclxuICAgICAgICAgICAgdGhpc18uY2FyZ2FuZG8gPSB0cnVlO1xyXG4gICAgICAgICAgICB2YXIgbG90SUQgPSAnJztcclxuICAgICAgICAgICAgdmFyIGNhbnRpZGFkTG90ZXMgPSAwO1xyXG4gICAgICAgICAgICAvL0NvbnRyb2xhIHF1ZSBsYXMgY2FudGlkYWRlcyBkZSBsb3MgbG90ZXMgbm8gc2VhIHN1cGVyaW9yIGEgbGEgZGVsIHByb2R1Y3RvIGVuIGVsIGNhcnJpdG8uXHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpZDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIiArIGluZGV4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbnRpZGFkTG90ZXMgPSBjYW50aWRhZExvdGVzICsgcGFyc2VJbnQoKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIiArIGluZGV4KSkudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbS5xdWFudGl0eSA+PSBjYW50aWRhZExvdGVzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjYW50aWRhZExvdGVzKTtcclxuICAgICAgICAgICAgICAgIHZhciB5ID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpZDsgaW5kZXgrKykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIiArIGluZGV4KSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YW50aXR5ID0gcGFyc2VJbnQoKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIiArIGluZGV4KSkudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsaXZlcnlEYXRlID0gKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGVsaXZlcnlEYXRlXCIgKyBpbmRleCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hpcHBpbmdBZGRyZXNzID0gJChcIiNzaGlwcGluZ0FkZHJlc3NcIiArIGluZGV4KS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vdGVzID0gJChcIiNub3Rlc1wiICsgaW5kZXgpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hpcHBpbmdBZGRyZXNzTmFtZSA9ICQoJyNzaGlwcGluZ0FkZHJlc3MnICsgaW5kZXggKyAnIG9wdGlvbjpzZWxlY3RlZCcpLnRleHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlkXCIgKyBpbmRleCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvdElEID0gKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWRcIiArIGluZGV4KSkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBteUluZGV4ID0gYWxsSUQuaW5kZXhPZihwYXJzZUludChsb3RJRCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobXlJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbElELnNwbGljZShteUluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvdElEID09ICdQZW5kdC4nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdudWV2bycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgMCwgaXRlbS5pdGVtX2lkLCBxdWFudGl0eSwgaXRlbS5wcm9kdWN0LnByaWNlLCBpdGVtLnF1YW50aXR5LCBpdGVtLmRpc2NvdW50LCBpdGVtLnByb2R1Y3QucHJpY2UgKiBxdWFudGl0eSwgJ25ldycsIGRlbGl2ZXJ5RGF0ZSwgbm90ZXMsIHBhcnNlSW50KHNoaXBwaW5nQWRkcmVzcyksIHNoaXBwaW5nQWRkcmVzc05hbWUsICduZXdsb3QnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb3RJRCAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsb3RJRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfLmNhcnRTZXJ2aWNlLmFkZFRvTG90KGl0ZW0ucHJvZHVjdCwgMCwgaXRlbS52YXJpYW50X2lkLCBwYXJzZUludChsb3RJRCksIGl0ZW0uaXRlbV9pZCwgcXVhbnRpdHksIGl0ZW0ucHJvZHVjdC5wcmljZSwgaXRlbS5xdWFudGl0eSwgaXRlbS5kaXNjb3VudCwgaXRlbS5wcm9kdWN0LnByaWNlICogcXVhbnRpdHksICdlZGl0ZWQnLCBkZWxpdmVyeURhdGUsIG5vdGVzLCBwYXJzZUludChzaGlwcGluZ0FkZHJlc3MpLCBzaGlwcGluZ0FkZHJlc3NOYW1lLCAnZWRpdGxvdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB5ID0gaW5kZXg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhbGxJRC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ2JvcnJhcicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNfLmNhcnRTZXJ2aWNlLmFkZFRvTG90KGl0ZW0ucHJvZHVjdCwgMCwgaXRlbS52YXJpYW50X2lkLCBlbGVtZW50LCAwLCAwLCAwLCAwLCAwLCAwLCAnZGVsZXRlJywgMCwgJycsIDAsICdkZWxldGUnLCAnZGVsZXRlbG90Jyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aGlzXy5jYXJ0U2VydmljZS5sb2FkQ2FydEJ5VG9rZW4odGhpc18uY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCkpOyB9LCAzMDAgKiB5KTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3Qtc2F2ZWQnKTsgfSwgMzAwICogeSk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRoaXNfLmNhcmdhbmRvID0gZmFsc2UgfSwgMzAwICogeSk7XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdMYSBjYW50aWRhZCBkZSBsb3MgbG90ZXMgZXMgc3VwZXJpb3IgYSBsYSBjYW50aWRhZCBkZWwgcHJvZHVjdG8uJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnI2JvdG9uQm9ycmFyJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMpO1xyXG4gICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ3RyJykucmVtb3ZlKCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZU1vZGFsKGlkKSB7XHJcbiAgICAgICAgJCgnIycgKyBpZCkubW9kYWwoJ2hpZGUnKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja1N0b2NrKGl0ZW0pIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgaXRlbS5wcm9kdWN0LnZhcmlhbnRzKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLnZhcmlhbnRfaWQgPT09IHZhcmlhbnQuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RvY2sgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnF1YW50aXR5ID4gdmFyaWFudC5zdG9jaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RvY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYW50LnN0b2NrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gU29sbyBzZSBlamVjdXRhIHNpIG5vIHNlIGN1bXBsZSBsYSBjb25kaWNpw7NuXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQWxsU3RvY2soKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbXM6IGFueVtdID0gW107XHJcblxyXG4gICAgICAgIC8vIERlZmluZSBsYSBzdXNjcmlwY2nDs24gYW50ZXMgZGUgdXNhcmxhXHJcblxyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuY2FydEl0ZW1zLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgICByZXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiBpdGVtLnByb2R1Y3QudmFyaWFudHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS52YXJpYW50X2lkID09PSB2YXJpYW50LmNvZGUgJiYgIXRoaXMuZXhpdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5zdG9jayA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5kZWxldGVDYXJ0SXRlbShpdGVtLCBmYWxzZSk7IC8vIEJvcnJhIGVsIGFydMOtY3Vsb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucXVhbnRpdHkgPiB2YXJpYW50LnN0b2NrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiB2YXJpYW50LnN0b2NrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiB2YXJpYW50LmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RDb2RlOiBpdGVtLnByb2R1Y3QuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudENvZGU6IHZhcmlhbnQuY29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDAgJiYgIXRoaXMuZXhpdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7ICAvLyBEZXN1c2Nyw61iZXRlIGFudGVzIGRlIGFjdHVhbGl6YXJcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkQWxsVG9DYXJ0KGl0ZW1zKTsgIC8vIEFjdHVhbGl6YSBlbCBjYXJyaXRvXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4aXRVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy51cGRhdGVBbGxTdG9jaygpOyAgLy8gVnVlbHZlIGEgdmVyaWZpY2FyIGVsIHN0b2NrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIGdldFZhcmlhbnRzID0gcHJvZHVjdCA9PiB7XHJcblxyXG4gICAgICAgIGxldCBpdGVtID0gcHJvZHVjdC5wcm9kdWN0XHJcblxyXG4gICAgICAgIGlmIChpdGVtLnZhcmlhbnRzICYmIGl0ZW0udmFyaWFudHMubGVuZ3RoICYmIGl0ZW0udmFyaWFudHNbMF0ub3B0aW9ucyAmJiBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gaXRlbS52YXJpYW50c1swXS5vcHRpb25zXHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcihvcHRpb24gPT4gdGhpcy52YXJpYW50c1RvU2hvdy5maW5kKG5hbWUgPT4gb3B0aW9uLmhhc093blByb3BlcnR5KG5hbWUpKSlcclxuICAgICAgICAgICAgbGV0IG9wdGlvbnNNYXAgPSBbXVxyXG4gICAgICAgICAgICBvcHRpb25zLm1hcChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMob3B0aW9uKS5mb3JFYWNoKChlbnRyeSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb25BZGRlZCA9IGZhbHNlOyAgLy8gVmFyaWFibGUgcGFyYSBldml0YXIgbcO6bHRpcGxlcyBpbnNlcmNpb25lc1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpdGVtLm9wdGlvbnMuZm9yRWFjaChvcHRpb24yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbjIuY29kZSA9PSAnQ09MT1InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24yLnZhbHVlcy5mb3JFYWNoKGNvbG9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sb3IuY29kZSA9PSBvcHRpb25bZW50cnldICYmICFvcHRpb25BZGRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zTWFwLnB1c2goeyBuYW1lOiBlbnRyeSwgdmFsdWU6IG9wdGlvbltlbnRyeV0sIGltYWdlOiBjb2xvci5pbWFnZSwgbW9iaWxlSW1hZ2U6IGNvbG9yLm1vYmlsZUltYWdlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25BZGRlZCA9IHRydWU7IC8vIE1hcmNhciBvcGNpw7NuIGFncmVnYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTaSBubyBzZSBhw7FhZGnDsyBsYSBvcGNpw7NuIGRlIENPTE9SLCBtYW5lamFyIG90cmFzIG9wY2lvbmVzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25BZGRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm9wdGlvbnMuZm9yRWFjaChvcHRpb24yID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uMi5jb2RlICE9PSAnQ09MT1InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc01hcC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZW50cnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb25bZW50cnldXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkFkZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uc01hcDtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uc01hcDtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZURpc2NvdW50TWVzc2FnZShzYWxlcHJpY2U6IG51bWJlciwgcHJpY2U6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGlzTmFOKHNhbGVwcmljZSkgfHwgaXNOYU4ocHJpY2UpIHx8IHNhbGVwcmljZSA+PSBwcmljZSB8fCBzYWxlcHJpY2UgPD0gMCB8fCBwcmljZSA8PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkaXNjb3VudFBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKCgocHJpY2UgLSBzYWxlcHJpY2UpIC8gcHJpY2UpICogMTAwKTtcclxuXHJcbiAgICAgICAgbGV0IGRpc2NvdW50TWVzc2FnZSA9IGAke2Rpc2NvdW50UGVyY2VudGFnZX0lIE9GRmA7XHJcbiAgICAgICAgcmV0dXJuIGRpc2NvdW50TWVzc2FnZTtcclxuICAgIH1cclxuICAgIGdldE1pbmltdW1QdXJjaGFzZUFtb3VudCA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsLnR5cGUgPT0gJ2IyYicgPyB0aGlzLmNoYW5uZWwud2hvbGVzYWxlck1pbmltdW1QdXJjaGFzZUFtb3VudCA6IHRoaXMuY2hhbm5lbC5yZXRhaWxlck1pbmltdW1QdXJjaGFzZUFtb3VudFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBleGNlZWRzTWluaW11bUFtb3VudCA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlID49IHRoaXMuZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50KCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVkaXJlY3RDaGVja291dCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFZlcmlmaWNhciBzaSBoYXkgdW4gYmFsYW5jZSBkZSBjbGllbnRlIGFjdGl2b1xyXG4gICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmJhbGFuY2VDdXN0b21lciQuc3Vic2NyaWJlKGJhbGFuY2VDdXN0b21lciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYmFsYW5jZUN1c3RvbWVyICYmIGJhbGFuY2VDdXN0b21lci5jcmVkaXRBbW91bnQgIT09IG51bGwgJiYgYmFsYW5jZUN1c3RvbWVyLmNyZWRpdEFtb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3F1YW50aXR5LW5vdC1leGNlZWRlZC13aGl0b3V0LWFtb3VudCcpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncXVhbnRpdHktbm90LWV4Y2VlZGVkJywgeyBhbW91bnQ6IHRoaXMuZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50KCkgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLnVuc3Vic2NyaWJlKCk7IC8vIERlc3VzY3JpYmlyc2UgaW5tZWRpYXRhbWVudGUgZGVzcHXDqXMgZGUgb2J0ZW5lciBlbCB2YWxvclxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG59XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuIl19
|
|
557
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NhcnQtZWMvY2FydC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEIsTUFBTSxlQUFlLENBQUE7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVM3RTtJQUFxQyxtQ0FBZTtJQXNCaEQseUJBQ1csV0FBd0IsRUFDeEIsV0FBd0IsRUFDckIsTUFBaUIsRUFDcEIsZUFBZ0MsRUFDaEMsTUFBYyxFQUNkLFlBQTRCLEVBQ3pCLGFBQTJCLEVBQzlCLGlCQUFvQyxFQUNwQyxvQkFBMEM7UUFUckQsWUFVSSxpQkFBTyxTQUtWO1FBZFUsaUJBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVcsR0FBWCxXQUFXLENBQWE7UUFDckIsWUFBTSxHQUFOLE1BQU0sQ0FBVztRQUNwQixxQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsWUFBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGtCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUN6QixtQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUM5Qix1QkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLDBCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUE1QjlDLG9CQUFjLEdBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUMsZ0JBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsY0FBUSxHQUFHLEVBQUUsQ0FBQztRQUVkLGdCQUFVLEdBQUcsRUFBRSxDQUFDO1FBRWYsY0FBUSxHQUFZLEtBQUssQ0FBQztRQUMzQixhQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ2xCLGlCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGdCQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGdCQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGdCQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLG1CQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGVBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsNkJBQXVCLEdBQW1CLElBQUksQ0FBQztRQUMvQyxtQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixpQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixtQ0FBNkIsR0FBWSxLQUFLLENBQUM7UUFzRHRELGVBQVMsR0FBRyxVQUFDLE1BQU0sSUFBSyxPQUFBLEtBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUE3QixDQUE2QixDQUFDO1FBK0N0RCxrQkFBWSxHQUFHLFVBQUMsSUFBUzs7WUFDckIsSUFBTSxXQUFXLEdBQVcsT0FBQSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsMENBQUUsZ0JBQWdCLEtBQUksQ0FBQyxDQUFDO1lBQzVFLElBQU0sSUFBSSxHQUFHLFdBQVcsSUFBSSxDQUFDLENBQUM7WUFDOUIsSUFBTSxLQUFLLFNBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDBDQUFFLEtBQUssQ0FBQztZQUM5QyxJQUFNLE9BQU8sR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBRXRDLElBQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksT0FBTyxHQUFHLElBQUksS0FBSyxDQUFDO2dCQUN6QyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSTtnQkFDbEMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFFckIsS0FBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQTtRQUVELGtCQUFZLEdBQUcsVUFBQyxJQUFTOztZQUNyQixJQUFNLFdBQVcsR0FBVyxPQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQywwQ0FBRSxnQkFBZ0IsS0FBSSxDQUFDLENBQUM7WUFDNUUsSUFBTSxVQUFVLEdBQVcsT0FBQSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsMENBQUUsb0JBQW9CLEtBQUksQ0FBQyxDQUFDO1lBQy9FLElBQU0sSUFBSSxHQUFHLFdBQVcsSUFBSSxDQUFDLENBQUM7WUFDOUIsSUFBTSxLQUFLLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQztZQUNqQyxJQUFNLE9BQU8sR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBRXRDLElBQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksT0FBTyxHQUFHLElBQUksS0FBSyxDQUFDO2dCQUN6QyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSTtnQkFDbkMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFFckIsSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFO2dCQUNmLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxRQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQywwQ0FBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7YUFDcEY7UUFDTCxDQUFDLENBQUE7UUFZRCxzQkFBZ0IsR0FBRyxjQUFNLE9BQUEsS0FBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEVBQXhDLENBQXdDLENBQUE7UUF5UGpFLGlCQUFXLEdBQUcsVUFBQSxPQUFPO1lBRWpCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUE7WUFFMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDdEcsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7Z0JBQ3RDLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQUEsTUFBTSxJQUFJLE9BQUEsS0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUEzQixDQUEyQixDQUFDLEVBQTdELENBQTZELENBQUMsQ0FBQTtnQkFDakcsSUFBSSxZQUFVLEdBQUcsRUFBRSxDQUFBO2dCQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQUEsTUFBTTtvQkFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFDLEtBQUs7d0JBQzlCLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFFLDZDQUE2Qzt3QkFFdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBQSxPQUFPOzRCQUN4QixJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFO2dDQUN6QixPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFBLEtBQUs7b0NBQ3hCLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7d0NBQzdDLFlBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO3dDQUMzRyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMseUJBQXlCO3FDQUNoRDtnQ0FDTCxDQUFDLENBQUMsQ0FBQzs2QkFDTjt3QkFDTCxDQUFDLENBQUMsQ0FBQzt3QkFDSCw2REFBNkQ7d0JBQzdELElBQUksQ0FBQyxXQUFXLEVBQUU7NEJBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBQSxPQUFPO2dDQUV4QixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO29DQUMxQixZQUFVLENBQUMsSUFBSSxDQUFDO3dDQUNaLElBQUksRUFBRSxLQUFLO3dDQUNYLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDO3FDQUV2QixDQUFDLENBQUM7b0NBQ0gsV0FBVyxHQUFHLElBQUksQ0FBQztpQ0FDdEI7NEJBQ0wsQ0FBQyxDQUFDLENBQUM7eUJBQ047b0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTyxZQUFVLENBQUM7Z0JBQ3RCLENBQUMsQ0FBQyxDQUFDO2dCQUVILE9BQU8sWUFBVSxDQUFDO2FBRXJCO2lCQUFNO2dCQUNILE9BQU8sSUFBSSxDQUFBO2FBQ2Q7UUFFTCxDQUFDLENBQUE7UUFZRCw4QkFBd0IsR0FBRztZQUN2QixPQUFPLEtBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQTtRQUVqSSxDQUFDLENBQUE7UUFFRCwwQkFBb0IsR0FBRyxVQUFDLEtBQWE7WUFDakMsSUFBSSxLQUFLLElBQUksS0FBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUU7Z0JBQzFDLE9BQU8sS0FBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDbEM7aUJBQU07Z0JBQ0gsZ0RBQWdEO2dCQUNoRCxLQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxVQUFBLGVBQWU7b0JBQ3ZELElBQUksZUFBZSxJQUFJLGVBQWUsQ0FBQyxZQUFZLEtBQUssSUFBSSxJQUFJLGVBQWUsQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO3dCQUN4RyxLQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO3FCQUNuRTt5QkFBTTt3QkFDSCxLQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDLENBQUM7cUJBQ2pHO2dCQUNMLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsMkRBQTJEO2FBQ2hGO1FBQ0wsQ0FBQyxDQUFBO1FBcGNHLEtBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUNwQixLQUFJLENBQUMsVUFBVSxHQUFHLEtBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDckQsS0FBSSxDQUFDLFFBQVEsR0FBRyxLQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDOztJQUUzQyxDQUFDO0lBR0QscUNBQVcsR0FBWDtRQUNJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQsd0NBQWMsR0FBZDtRQUNJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQsa0NBQVEsR0FBUjtRQUFBLGlCQXdCQztRQXZCRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBQSxVQUFVLElBQUksT0FBQSxLQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsRUFBNUIsQ0FBNEIsQ0FBQyxDQUFDO1FBQ2xGLCtDQUErQztRQUUvQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxVQUFBLE9BQU87O1lBQ3RELEtBQUksQ0FBQyxVQUFVLGVBQUcsT0FBTywwQ0FBRSxVQUFVLHVDQUFJLEtBQUssRUFBQSxDQUFDO1lBQy9DLEtBQUksQ0FBQyxhQUFhLGVBQUcsT0FBTywwQ0FBRSxhQUFhLHVDQUFJLEtBQUssRUFBQSxDQUFDO1lBQ3JELEtBQUksQ0FBQyxTQUFTLGVBQUcsT0FBTywwQ0FBRSxTQUFTLHVDQUFJLEtBQUssRUFBQSxDQUFDO1lBQzdDLEtBQUksQ0FBQyxhQUFhLGVBQUcsT0FBTywwQ0FBRSxhQUFhLHVDQUFJLEtBQUssRUFBQSxDQUFDO1lBQ3JELEtBQUksQ0FBQyw2QkFBNkIsZUFBRyxPQUFPLDBDQUFFLDZCQUE2Qix1Q0FBSSxLQUFLLEVBQUEsQ0FBQztZQUVyRixJQUFJLEtBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUMvQjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQUMsU0FBUztZQUM1QyxLQUFJLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQUEsU0FBUztZQUN4QyxLQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUVuQixDQUFDO0lBSVMsNENBQWtCLEdBQTVCLFVBQTZCLElBQVMsRUFBRSxRQUF5QixFQUFFLEtBQWEsRUFBRSxFQUFXO1FBQTdGLGlCQTBDQzs7UUF6Q0csSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLE9BQU87U0FDVjtRQUNELElBQU0sZ0JBQWdCLEdBQUcsT0FBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxRQUFRLEtBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwSSxJQUFNLElBQUksR0FBRyxnQkFBZ0IsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0UsSUFBSSxXQUFtQixDQUFDO1FBRXhCLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1lBQzlCLFdBQVcsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLElBQUksV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ2hFLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDdkQ7U0FDSjthQUFNO1lBQ0gsV0FBVyxHQUFHLFFBQVEsQ0FBQztZQUN2QixJQUFJLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFO2dCQUMxQixXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ3ZEO1NBQ0o7UUFFRCxJQUFNLGVBQWUsZUFBRyxJQUFJLDBDQUFFLFFBQVEsdUNBQUksU0FBUyxFQUFBLENBQUM7UUFFcEQsSUFBSSxFQUFFLEVBQUU7WUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLGtEQUFrRDtZQUMxRSxJQUFJLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxJQUFJLEtBQUssRUFBRTtnQkFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO2FBQzNFO2lCQUFNO2dCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7YUFDcEQ7WUFFRCxVQUFVLENBQUM7Z0JBQ1AsS0FBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDNUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ1o7YUFBTTtZQUNILElBQUksV0FBVyxHQUFHLENBQUMsSUFBSSxXQUFXLElBQUksS0FBSyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7YUFDM0U7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQzthQUNwRDtTQUNKO0lBQ0wsQ0FBQztJQUFBLENBQUM7SUFnQ0YsMENBQWdCLEdBQWhCO1FBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGdDQUFnQyxFQUFFLEVBQUU7WUFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUM7U0FDZjthQUFNO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO1lBQ25GLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQUlELG1DQUFTLEdBQVQsVUFBVSxRQUEwQjtRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVELCtDQUFxQixHQUFyQixVQUFzQixPQUFPO1FBQ3pCLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDakMsSUFBSSxJQUFJLEdBQUcsV0FBVyxDQUFBO1FBQ3RCLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFBO1FBQ3BCLElBQUksSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUVELG9DQUFVLEdBQVYsVUFBVyxJQUFJO1FBQ1gsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ2xCLEtBQUssR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQy9CLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUN0QixJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTNCLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ2hCLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ2QsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFFcEIsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFSyxvQ0FBVSxHQUFoQixVQUFpQixJQUFJOzs7Ozs7NEJBR0gscUJBQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsRUFBQTs7d0JBQS9DLEtBQUssR0FBRyxTQUF1Qzt3QkFHakQsRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDUCxLQUFLLEdBQUcsSUFBSSxDQUFDO3dCQUNiLEtBQUssR0FBRyxFQUFFLENBQUM7d0JBRWYsMENBQTBDO3dCQUMxQyxRQUFRLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUMsU0FBUyxHQUFHLHFIQUFxSCxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxrRUFBa0UsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsY0FBYyxDQUFDO3dCQUc5UyxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBcUIsQ0FBQzt3QkFDOUUsU0FBUyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7d0JBRXpCLHlGQUF5Rjt3QkFDekYsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBQSxDQUFDOzRCQUVsQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0NBQ2hELFNBQVMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO2dDQUN6QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsR0FBRztvQ0FDaEIsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29DQUNyRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUM5QixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUM5QixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUM5QixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUM5QixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUM5QixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUM5QixJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7b0NBQ3JELEtBQUssQ0FBQyxTQUFTLEdBQUcsZUFBZSxHQUFHLEVBQUUsR0FBRywrQkFBK0IsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQztvQ0FDbEcsS0FBSyxDQUFDLFNBQVMsR0FBRyxtQ0FBbUMsR0FBRyxFQUFFLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsa0NBQWtDLEdBQUcsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7b0NBQ3BKLEtBQUssQ0FBQyxTQUFTLEdBQUcsNEJBQTRCLEdBQUcsS0FBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxvQkFBb0IsR0FBRyxFQUFFLEdBQUcsOEJBQThCLENBQUM7b0NBQ3BJLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQTtvQ0FDakIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFBLElBQUk7d0NBQ2QsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRTs0Q0FDcEMsUUFBUSxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO3lDQUMzRzs2Q0FDSTs0Q0FDRCxRQUFRLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7eUNBQ2xHO29DQUNMLENBQUMsQ0FBQyxDQUFDO29DQUNILEtBQUssQ0FBQyxTQUFTLEdBQUcsOEJBQThCLEdBQUcsRUFBRSxHQUFHLDhCQUE4QixHQUFHLFFBQVEsR0FBRyxXQUFXLENBQUM7b0NBQ2hILEtBQUssQ0FBQyxTQUFTLEdBQUcsaUlBQWlJLEdBQUcsRUFBRSxHQUFHLHdEQUF3RCxHQUFHLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQztvQ0FDcFAsS0FBSyxDQUFDLFNBQVMsR0FBRyx5R0FBeUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLHdHQUF3RyxDQUFDO29DQUNoUCxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0NBQ3RELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7b0NBQzlCLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO29DQUNsQixLQUFLLENBQUMsU0FBUyxHQUFHLDJDQUEyQyxHQUFHLEVBQUUsR0FBRyxvQkFBb0IsR0FBRyxFQUFFLEdBQUcsZ0NBQWdDLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyx5RkFBeUYsQ0FBQztvQ0FDMU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7b0NBRVosS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQ0FDMUIsQ0FBQyxDQUFDLENBQUM7NkJBQ047d0JBQ0wsQ0FBQyxDQUFDLENBQUM7d0JBRUgsUUFBUSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLEdBQUc7NEJBRTlDLDZHQUE2Rzs0QkFDN0csSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDOzRCQUN2QixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO2dDQUNyQyxJQUFzQixRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsRUFBRTtvQ0FDL0QsY0FBYyxHQUFHLGNBQWMsR0FBRyxRQUFRLENBQW9CLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lDQUNySDs2QkFDSjs0QkFFRCx1RUFBdUU7NEJBQ3ZFLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtnQ0FDbkMsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dDQUNyRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUM5QixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUM5QixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUM5QixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUM5QixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUM5QixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUM5QixLQUFLLENBQUMsU0FBUyxHQUFHLGVBQWUsR0FBRyxFQUFFLEdBQUcsZ0RBQWdELENBQUM7Z0NBQzFGLEtBQUssQ0FBQyxTQUFTLEdBQUcsbUNBQW1DLEdBQUcsRUFBRSxHQUFHLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxjQUFjLENBQUMsR0FBRyxrQ0FBa0MsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7Z0NBQ2xNLEtBQUssQ0FBQyxTQUFTLEdBQUcscUNBQXFDLEdBQUcsRUFBRSxHQUFHLDhCQUE4QixDQUFDO2dDQUM5RixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUE7Z0NBQ2pCLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBQSxJQUFJLElBQU0sUUFBUSxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQzNILEtBQUssQ0FBQyxTQUFTLEdBQUcsOEJBQThCLEdBQUcsRUFBRSxHQUFHLDhCQUE4QixHQUFHLFFBQVEsR0FBRyxXQUFXLENBQUM7Z0NBQ2hILEtBQUssQ0FBQyxTQUFTLEdBQUcsaUlBQWlJLEdBQUcsRUFBRSxHQUFHLHdEQUF3RCxHQUFHLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQztnQ0FDcFAsS0FBSyxDQUFDLFNBQVMsR0FBRyxvTUFBb00sQ0FBQztnQ0FDdk4sSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dDQUN0RCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO2dDQUM5QixLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztnQ0FDbEIsS0FBSyxDQUFDLFNBQVMsR0FBRywyQ0FBMkMsR0FBRyxFQUFFLEdBQUcsb0JBQW9CLEdBQUcsRUFBRSxHQUFHLDhHQUE4RyxDQUFDO2dDQUdoTixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs2QkFDZjtpQ0FBTTtnQ0FDSCxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDOzZCQUNoRDt3QkFDTCxDQUFDLENBQUE7d0JBRUQsMkxBQTJMO3dCQUMzTCxRQUFRLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sR0FBRzs0QkFDOUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBQ3ZDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDOzRCQUN0QixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7NEJBQ2YsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDOzRCQUN0QiwyRkFBMkY7NEJBQzNGLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0NBQ3JDLElBQXNCLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxFQUFFO29DQUMvRCxhQUFhLEdBQUcsYUFBYSxHQUFHLFFBQVEsQ0FBb0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7aUNBQ25IOzZCQUNKOzRCQUVELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxhQUFhLEVBQUU7Z0NBQ2hDLDhCQUE4QjtnQ0FDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dDQUNWLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0NBRXJDLElBQXVCLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBRSxFQUFFO3dDQUNqRSxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQW9CLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dDQUMvRixJQUFJLFlBQVksR0FBc0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFFLENBQUMsS0FBSyxDQUFDO3dDQUM3RixJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7d0NBQzFELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7d0NBQ3RDLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO3FDQUN2RjtvQ0FDRCxJQUF1QixRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUUsRUFBRTt3Q0FDM0QsS0FBSyxHQUFzQixRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUUsQ0FBQyxLQUFLLENBQUM7d0NBQ3hFLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0NBQzdDLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFOzRDQUNoQixLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQzt5Q0FDNUI7cUNBRUo7b0NBQ0QsSUFBSSxLQUFLLElBQUksUUFBUSxFQUFFO3dDQUNuQix3QkFBd0I7d0NBQ3hCLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxDQUFDO3FDQUVsUTt5Q0FBTSxJQUFJLEtBQUssSUFBSSxFQUFFLEVBQUU7d0NBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7d0NBQ25CLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxDQUFDO3FDQUNwUjtvQ0FDRCxDQUFDLEdBQUcsS0FBSyxDQUFDO2lDQUNiO2dDQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBQSxPQUFPO29DQUNqQiwyQkFBMkI7b0NBQzNCLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0NBQ3ZJLENBQUMsQ0FBQyxDQUFDO2dDQUNILFVBQVUsQ0FBQyxjQUFjLEtBQUssQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0NBRTFHLFVBQVUsQ0FBQyxjQUFjLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztnQ0FFNUUsVUFBVSxDQUFDLGNBQWMsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDOzZCQUUvRDtpQ0FBTTtnQ0FDSCxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDOzZCQUNoRzt3QkFDTCxDQUFDLENBQUM7d0JBRUYsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsS0FBSzs0QkFDbkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDOzRCQUN2QixxQkFBcUI7NEJBQ3JCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7d0JBRW5DLENBQUMsQ0FBQyxDQUFDOzs7OztLQUVOO0lBRUQsb0NBQVUsR0FBVixVQUFXLEVBQUU7UUFDVCxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsb0NBQVUsR0FBVixVQUFXLElBQUk7OztZQUNYLEtBQXNCLElBQUEsS0FBQSxTQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFBLGdCQUFBLDRCQUFFO2dCQUF4QyxJQUFNLE9BQU8sV0FBQTtnQkFDZCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLElBQUksRUFBRTtvQkFDbEMsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTt3QkFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7d0JBQ3hCLE9BQU8sR0FBRyxDQUFDO3FCQUNkO3lCQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFO3dCQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzt3QkFDeEIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO3FCQUN4QjtpQkFDSjthQUNKOzs7Ozs7Ozs7UUFDRCxPQUFPLEtBQUssQ0FBQyxDQUFDLCtDQUErQztJQUNqRSxDQUFDO0lBRUQsd0NBQWMsR0FBZDtRQUFBLGlCQW1DQztRQWxDRyxJQUFNLEtBQUssR0FBVSxFQUFFLENBQUM7UUFFeEIsd0NBQXdDO1FBRXhDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFBLEdBQUc7WUFDcEMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFBLElBQUk7OztvQkFDWixLQUFzQixJQUFBLEtBQUEsU0FBQSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQSxnQkFBQSw0QkFBRTt3QkFBeEMsSUFBTSxPQUFPLFdBQUE7d0JBQ2QsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFJLENBQUMsVUFBVSxFQUFFOzRCQUN0RCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO2dDQUNyQixLQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxvQkFBb0I7NkJBQ3JFO2lDQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFO2dDQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDO29DQUNQLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7b0NBQzVCLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSztvQ0FDdkIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJO2lDQUM1QixDQUFDLENBQUM7NkJBQ047aUNBQU07Z0NBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQztvQ0FDUCxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29DQUM1QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0NBQ3ZCLFdBQVcsRUFBRSxPQUFPLENBQUMsSUFBSTtpQ0FDNUIsQ0FBQyxDQUFDOzZCQUNOO3lCQUNKO3FCQUNKOzs7Ozs7Ozs7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsVUFBVSxFQUFFO2dCQUN0QyxtRUFBbUU7Z0JBQ25FLEtBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUUsdUJBQXVCO2dCQUM5RCxLQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFDekIsS0FBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLHlEQUF5RDthQUM1RDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQW9ERCwrQ0FBcUIsR0FBckIsVUFBc0IsU0FBaUIsRUFBRSxLQUFhO1FBQ2xELElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLElBQUksS0FBSyxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtZQUN4RixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFFekUsSUFBSSxlQUFlLEdBQU0sa0JBQWtCLFVBQU8sQ0FBQztRQUNuRCxPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDOztnQkEzYnVCLFdBQVc7Z0JBQ1gsV0FBVztnQkFDYixTQUFTO2dCQUNILGVBQWU7Z0JBQ3hCLE1BQU07Z0JBQ0EsY0FBYztnQkFDVixZQUFZO2dCQUNYLGlCQUFpQjtnQkFDZCxvQkFBb0I7O0lBL0I1QyxlQUFlO1FBTDNCLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxhQUFhO1lBQ3ZCLFlBQXVDOztTQUUxQyxDQUFDO09BQ1csZUFBZSxDQXdlM0I7SUFBRCxzQkFBQztDQUFBLEFBeGVELENBQXFDLGVBQWUsR0F3ZW5EO1NBeGVZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvbW9kYWxcIjtcclxuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwvYnMtbW9kYWwtcmVmLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tIFwiLi4vLi4vY29yZS5jb25zdHNcIjtcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9kdWN0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9kdWN0cy9wcm9kdWN0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCIuLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGludGVydmFsLCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQWRkcmVzc2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGVja291dC9hZGRyZXNzaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhbm5lbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhcHAtY2FydC1lYycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FydC1lYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jYXJ0LWVjLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENhcnRFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cclxuICAgIHB1YmxpYyB2YXJpYW50c1RvU2hvdzogc3RyaW5nW10gPSBbJ1RBTExFJywgJ0NPTE9SJ107XHJcbiAgICBwdWJsaWMgaXNMb2dnZWRJbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIG1lZGlhVXJsID0gJyc7XHJcbiAgICBwdWJsaWMgbW9kYWxSZWY6IEJzTW9kYWxSZWYgfCBudWxsO1xyXG4gICAgcHVibGljIHByb21vdGlvbnMgPSBbXTtcclxuICAgIHB1YmxpYyBpdGVtczogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgcHJpdmF0ZSBjYXJnYW5kbzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNoYW5uZWw6IGFueSA9IHt9O1xyXG4gICAgcHVibGljIHVwZGF0ZVN0b2NrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZXhpdFVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoaWRlUHJpY2VzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGlkZURpc2NvdW50czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhpZGVUYXhlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNyZWRpdEFjY291bnRTaG93UHJpY2VzOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwdWJsaWMgc2hvd1RheExlZ2VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNhcnRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIGNvbnN0czogQ29uc3RhbnRzLFxyXG4gICAgICAgIHB1YmxpYyBwcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHVibGljIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIHRvYXN0clNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgICAgICBwdWJsaWMgYWRkcmVzc2luZ1NlcnZpY2U6IEFkZHJlc3NpbmdTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXHJcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICB0aGlzLm1lZGlhVXJsID0gdGhpcy5jb25zdHMubWVkaWFVcmwoKTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTG9nZ2VkSW4oKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB3aW5kb3cuc2Nyb2xsKDAsIDApO1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UucHJvbW90aW9ucy5zdWJzY3JpYmUocHJvbW90aW9ucyA9PiB0aGlzLnByb21vdGlvbnMgPSBwcm9tb3Rpb25zKTtcclxuICAgICAgICAvLyAgICBjb25zb2xlLmxvZyh0aGlzLmNhcnRTZXJ2aWNlLmdldFRheGVzKCkpO1xyXG5cclxuICAgICAgICB0aGlzLmNoYW5uZWxDb25maWdTZXJ2aWNlLmNoYW5uZWxDb25maWckLnN1YnNjcmliZShjaGFubmVsID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oaWRlUHJpY2VzID0gY2hhbm5lbD8uaGlkZVByaWNlcyA/PyBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlRGlzY291bnRzID0gY2hhbm5lbD8uaGlkZURpc2NvdW50cyA/PyBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlVGF4ZXMgPSBjaGFubmVsPy5oaWRlVGF4ZXMgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RheExlZ2VuZCA9IGNoYW5uZWw/LnNob3dUYXhMZWdlbmQgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPSBjaGFubmVsPy5lbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZSA/PyBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhpZGVQcmljZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoKHNob3dQcmljZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWRpdEFjY291bnRTaG93UHJpY2VzID0gc2hvd1ByaWNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UubG9hZGluZy5zdWJzY3JpYmUoaXNMb2FkaW5nID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jYXJ0TG9hZGluZyA9IGlzTG9hZGluZztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmVjT25Jbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdG9EZWNpbWFsID0gKGFtb3VudCkgPT4gdGhpcy5jb25zdHMudG9EZWNpbWFsKGFtb3VudCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIGFjdHVhbGl6YXJDYW50aWRhZChpdGVtOiBhbnksIGNhbnRpZGFkOiBudW1iZXIgfCBzdHJpbmcsIHN0b2NrOiBudW1iZXIsIGlkPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FydExvYWRpbmcpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtdWx0aXBsZVF1YW50aXR5ID0gaXRlbS5wcm9kdWN0Py52YXJpYW50cyAmJiBpdGVtLnByb2R1Y3QudmFyaWFudHMubGVuZ3RoID4gMCA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5IDogMDtcclxuICAgICAgICBjb25zdCBzdGVwID0gbXVsdGlwbGVRdWFudGl0eSAmJiBtdWx0aXBsZVF1YW50aXR5ID4gMCA/IG11bHRpcGxlUXVhbnRpdHkgOiAxO1xyXG5cclxuICAgICAgICBsZXQgbmV3UXVhbnRpdHk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYW50aWRhZCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBwYXJzZUludChjYW50aWRhZCwgMTApO1xyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgJSBzdGVwICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1iZS1tdWx0aXBsZScsIHsgcXVhbnRpdHk6IHN0ZXAgfSk7XHJcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGgucm91bmQobmV3UXVhbnRpdHkgLyBzdGVwKSAqIHN0ZXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBuZXdRdWFudGl0eSA9IGNhbnRpZGFkO1xyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgJSBzdGVwICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGgucm91bmQobmV3UXVhbnRpdHkgLyBzdGVwKSAqIHN0ZXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGtlZXBTYW1lQ29tbWVudCA9IGl0ZW0/LmNvbW1lbnRzID8/IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7IC8vIEFjdHVhbGl6YSBsYSBwcm9waWVkYWQgdmluY3VsYWRhIGEgYFtkaXNhYmxlZF1gXHJcbiAgICAgICAgICAgIGlmIChuZXdRdWFudGl0eSA+IDAgJiYgbmV3UXVhbnRpdHkgPD0gc3RvY2spIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIG5ld1F1YW50aXR5LCBrZWVwU2FtZUNvbW1lbnQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jay1hY3R1YWxseScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgLy8gRnVuY2nDs24gZGUgZmxlY2hhIHBhcmEgcHJlc2VydmFyIGVsIGNvbnRleHRvXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ID4gMCAmJiBuZXdRdWFudGl0eSA8PSBzdG9jaykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS51cGRhdGVJdGVtUXVhbnRpdHkoaXRlbSwgbmV3UXVhbnRpdHksIGtlZXBTYW1lQ29tbWVudCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICBjYXJ0SXRlbVBsdXMgPSAoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbXVsdGlwbGVRdHk6IG51bWJlciA9IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8ubXVsdGlwbGVRdWFudGl0eSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IHN0ZXAgPSBtdWx0aXBsZVF0eSB8fCAxO1xyXG4gICAgICAgIGNvbnN0IHN0b2NrID0gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdPy5zdG9jaztcclxuICAgICAgICBjb25zdCBjdXJyZW50OiBudW1iZXIgPSBpdGVtLnF1YW50aXR5O1xyXG5cclxuICAgICAgICBjb25zdCBuZXh0ID0gc3RlcCA+IDEgJiYgY3VycmVudCAlIHN0ZXAgIT09IDBcclxuICAgICAgICAgICAgPyBNYXRoLmNlaWwoY3VycmVudCAvIHN0ZXApICogc3RlcFxyXG4gICAgICAgICAgICA6IGN1cnJlbnQgKyBzdGVwO1xyXG5cclxuICAgICAgICB0aGlzLmFjdHVhbGl6YXJDYW50aWRhZChpdGVtLCBuZXh0LCBzdG9jaywgJ2NhcnRQbHVzJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FydEl0ZW1MZXNzID0gKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG11bHRpcGxlUXR5OiBudW1iZXIgPSBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/Lm11bHRpcGxlUXVhbnRpdHkgfHwgMDtcclxuICAgICAgICBjb25zdCBtaW5pbXVtUXR5OiBudW1iZXIgPSBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/Lm1pbmltdW1JdGVtc1F1YW50aXR5IHx8IDA7XHJcbiAgICAgICAgY29uc3Qgc3RlcCA9IG11bHRpcGxlUXR5IHx8IDE7XHJcbiAgICAgICAgY29uc3QgZmxvb3IgPSBtaW5pbXVtUXR5IHx8IHN0ZXA7XHJcbiAgICAgICAgY29uc3QgY3VycmVudDogbnVtYmVyID0gaXRlbS5xdWFudGl0eTtcclxuXHJcbiAgICAgICAgY29uc3QgbmV4dCA9IHN0ZXAgPiAxICYmIGN1cnJlbnQgJSBzdGVwICE9PSAwXHJcbiAgICAgICAgICAgID8gTWF0aC5mbG9vcihjdXJyZW50IC8gc3RlcCkgKiBzdGVwXHJcbiAgICAgICAgICAgIDogY3VycmVudCAtIHN0ZXA7XHJcblxyXG4gICAgICAgIGlmIChuZXh0ID49IGZsb29yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0dWFsaXphckNhbnRpZGFkKGl0ZW0sIG5leHQsIGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8uc3RvY2ssICdjYXJ0TGVzcycpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWRpcmVjdENoZWNrb3V0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNhcnRTZXJ2aWNlLmhhc1N1ZmZpY2llbnRDcmVkaXRzRm9yQ2FydFRvdGFsKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2NoZWNrb3V0YCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIk5vIHNlIHB1ZWRlIHJlZGlyaWdpciBhbCBjaGVja291dCBkZWJpZG8gYSB1bmEgdmFsaWRhY2nDs24gZmFsbGlkYS5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVkaXJlY3RSZWdpc3RlciA9ICgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9hdXRoL2xvZ2luYClcclxuXHJcbiAgICBvcGVuTW9kYWwodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcclxuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0ZW1wbGF0ZSwgeyBjbGFzczogJ21vZGFsLXhsJywga2V5Ym9hcmQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZGlyZWN0RGV0YWlsUHJvZHVjdChwcm9kdWN0KSB7XHJcbiAgICAgICAgbGV0IHZhcmlhbnQgPSBwcm9kdWN0LnZhcmlhbnRzWzBdXHJcbiAgICAgICAgbGV0IHBhdGggPSAnL3Byb2R1Y3QvJ1xyXG4gICAgICAgIHBhdGggKz0gdmFyaWFudC5jb2RlXHJcbiAgICAgICAgcGF0aCArPSB2YXJpYW50Lm9wdGlvbnMubGVuZ3RoID8gXCI/dmFyaWFudD10cnVlXCIgOiBcIlwiXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChwYXRoKVxyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdERhdGUoZGF0ZSkge1xyXG4gICAgICAgIHZhciBkID0gbmV3IERhdGUoZGF0ZSksXHJcbiAgICAgICAgICAgIG1vbnRoID0gJycgKyAoZC5nZXRNb250aCgpICsgMSksXHJcbiAgICAgICAgICAgIGRheSA9ICcnICsgZC5nZXREYXRlKCksXHJcbiAgICAgICAgICAgIHllYXIgPSBkLmdldEZ1bGxZZWFyKCk7XHJcblxyXG4gICAgICAgIGlmIChtb250aC5sZW5ndGggPCAyKVxyXG4gICAgICAgICAgICBtb250aCA9ICcwJyArIG1vbnRoO1xyXG4gICAgICAgIGlmIChkYXkubGVuZ3RoIDwgMilcclxuICAgICAgICAgICAgZGF5ID0gJzAnICsgZGF5O1xyXG5cclxuICAgICAgICByZXR1cm4gW3llYXIsIG1vbnRoLCBkYXldLmpvaW4oJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjYXJnYU1vZGFsKGl0ZW0pIHtcclxuXHJcbiAgICAgICAgLy8gT2J0aWVuZSBsYXMgc2VkZXMgZGVsIGNsaWVudGVcclxuICAgICAgICBjb25zdCBzZWRlcyA9IGF3YWl0IHRoaXMuY2FydFNlcnZpY2UuZ2V0QWRkcmVzc0Jvb2soKTtcclxuXHJcbiAgICAgICAgLy8gQ3JlbyB1bmEgc2VyaWUgZGUgdmFyaWFibGVzIHF1ZSB2b3kgYSBuZWNlc2l0YXIsIGlkIHBhcmEgY29udHJvbGFyIGxhcyB2dWVsdGFzIHF1ZSBkYSB5IGN1YW50YXMgbGluZWFzIGhheSB5IGFsbElEIHBhcmEgYWxtYWNlbmFyIGxvcyBJRCBkZSBsb3MgbG90ZXMuXHJcbiAgICAgICAgdmFyIGlkID0gMTtcclxuICAgICAgICB2YXIgdGhpc18gPSB0aGlzO1xyXG4gICAgICAgIHZhciBhbGxJRCA9IFtdO1xyXG5cclxuICAgICAgICAvLyBBw7FhZGUgbG9zIGRhdG9zIGFsIGVuY2FiZXphZG8gZGVsIE1vZGFsXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VuY2FiZXphZG9Nb2RhbCcpLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cInRpdGxlIHRleHQtZGFyayB0ZXh0LWRlY29yYXRpb24tbm9uZSBoNSBkLWJsb2NrIG0tMCBwLTAgbS0wIHAtMFwiPjxwIGNsYXNzPVwibm9tYnJlIG1iLTBcIiBpZD1cInByb2R1Y3ROYW1lXCI+JyArIGl0ZW1bJ3Byb2R1Y3QnXVsnbmFtZSddICsgJzwvcD48c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSBwcy0yIG1zLTFcIiBpZD1cInByb2R1Y3RSZWZcIj5SZWY6JyArIGl0ZW1bJ3ZhcmlhbnRfaWQnXSArICc8L3NtYWxsPjwvYT4nO1xyXG5cclxuICAgICAgICAvLyBCb3JyYW1vcyB0b2RvcyBsb3MgZGF0b3MgZGUgbG9zIGxvdGVzIGFudGVyaW9yZXNcclxuICAgICAgICB2YXIgYm9keVRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsb3RfYm9keV90YWJsZVwiKSBhcyBIVE1MVGFibGVFbGVtZW50O1xyXG4gICAgICAgIGJvZHlUYWJsZS5pbm5lckhUTUwgPSAnJztcclxuXHJcbiAgICAgICAgLy8gUmVjb3JyZSB0b2RvcyBsb3MgYXJ0aWN1bG9zIHkgZW5jdWVudHJhIHNpIHRpZW5lbiBsb3RlcyBvIG5vLCBzaSB0aWVuZSBjcmVhIGxhcyBsaW5lYXNcclxuICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5nZXRDYXJ0MigpLmZvckVhY2goaSA9PiB7XHJcblxyXG4gICAgICAgICAgICBpZiAoaVsnaXRlbV9pZCddID09IGl0ZW0uaXRlbV9pZCAmJiBpWydsb3QnXSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgYm9keVRhYmxlLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgaVsnbG90J10uZm9yRWFjaChsb3QgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByb3cgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwxID0gcm93Lmluc2VydENlbGwoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwyID0gcm93Lmluc2VydENlbGwoMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwzID0gcm93Lmluc2VydENlbGwoMik7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw0ID0gcm93Lmluc2VydENlbGwoMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw1ID0gcm93Lmluc2VydENlbGwoNCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw2ID0gcm93Lmluc2VydENlbGwoNSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKGxvdFsnZGF0ZV9yZXF1ZXN0J10pKTtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsMS5pbm5lckhUTUwgPSAnPGlucHV0IGlkPVwiaWQnICsgaWQgKyAnXCIgIHN0eWxlPVwiYm9yZGVyOiAwO1wiIHZhbHVlPVwiJyArIGxvdC5pZCArICdcIiBkaXNhYmxlZD4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknICsgaWQgKyAnXCIgdmFsdWU9IFwiJyArIGxvdC5xdWFudGl0eSArICdcImNsYXNzPVwiZm9ybS1jb250cm9sIHctNTBcIiBtYXg9XCInICsgbG90LnF1YW50aXR5ICsgJ1wiPic7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbDMuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiZGF0ZVwiIHZhbHVlPVwiJyArIHRoaXMuZm9ybWF0RGF0ZShkYXRlKSArICdcIiBpZD1cImRlbGl2ZXJ5RGF0ZScgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgb3BjaW9uZXMgPSBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZGUuaWQgPT0gbG90LnNoaXBwaW5nX2FkZHJlc3NfaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbmVzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHNlZGUuaWQgKyAnXCIgc2VsZWN0ZWQ+JyArIHNlZGUuY2l0eSArICcgLSAnICsgc2VkZS5zdHJlZXQgKyAnPC9vcHRpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbmVzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHNlZGUuaWQgKyAnXCI+JyArIHNlZGUuY2l0eSArICcgLSAnICsgc2VkZS5zdHJlZXQgKyAnPC9vcHRpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGw0LmlubmVySFRNTCA9ICc8c2VsZWN0ICBpZD1cInNoaXBwaW5nQWRkcmVzcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JyArIG9wY2lvbmVzICsgJzwvc2VsZWN0Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbDUuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuU2VndWlyXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1jb250cm9scz1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiB2YWx1ZT1cIlZlclwiPjwvaW5wdXQ+JztcclxuICAgICAgICAgICAgICAgICAgICBjZWxsNi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbC0xIGZsZXgtZ3Jvdy0wIHRleHQtcmlnaHQgYnRuQm9ycmFyIGQtbm9uZSBkLW1kLWJsb2NrIGQtbm9uZSBkLW1kLWJsb2NrXCI+PGJ1dHRvbiB2YWx1ZT1cIicgKyBsb3QuaWQgKyAnXCIgY2xhc3M9XCJidG5cIiBpZD1cImJvdG9uQm9ycmFyXCI+PGltZyBzcmM9XCIuL2Fzc2V0cy9tYXF1ZXRhZG8vaW1nL2ljLWJvcnJhci5zdmdcIiBhbHQ9XCJcIj4gPC9idXR0b24+PC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcm93MiA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsYTIgPSByb3cyLmluc2VydENlbGwoMClcclxuICAgICAgICAgICAgICAgICAgICBmaWxhMi5jb2xTcGFuID0gNjtcclxuICAgICAgICAgICAgICAgICAgICBmaWxhMi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgaWQ9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCI+PGlucHV0IGlkPVwibm90ZXMnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB2YWx1ZT1cIicgKyBsb3Qubm90ZXMgKyAnXCIgcGxhY2Vob2xkZXI9XCJJbmdyZXNlIHVuIGNvbWVudGFyaW8gZW4gY2FzbyBkZSBxdWUgc2VhIG5lY2VzYXJpby5cIiB0eXBlPVwidGV4dFwiLz48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGlkID0gaWQgKyAxO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhbGxJRC5wdXNoKGxvdFsnaWQnXSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90b25BZ3JlZ2FyJykub25jbGljayA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIC8vIFNlIGNhbGN1bGEgbGEgY2FudGlkYWQgeSBlbCBjb250YWRvciBwYXJhIHF1ZSBubyBleGNlZGEgbGEgY2FudGlkYWQgZGUgbGEgbGluZWEgYWwgY3JlYXIgdW4gbnVldm8gbG90ZS5cclxuICAgICAgICAgICAgdmFyIGNhbnRpZGFkQWN0dWFsID0gMDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGlkOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FudGlkYWRBY3R1YWwgPSBjYW50aWRhZEFjdHVhbCArIHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gU2UgYcOxYWRlIGxhIGxpbmVhIHNpZW1wcmUgeSBjdWFuZG8gbGEgY2FudGlkYWQgcmVzdGFudGUgbm8gc2VhIGNlcm8uXHJcbiAgICAgICAgICAgIGlmIChjYW50aWRhZEFjdHVhbCA8IGl0ZW1bJ3F1YW50aXR5J10pIHtcclxuICAgICAgICAgICAgICAgIHZhciByb3cgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDEgPSByb3cuaW5zZXJ0Q2VsbCgwKTtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxsMiA9IHJvdy5pbnNlcnRDZWxsKDEpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGwzID0gcm93Lmluc2VydENlbGwoMik7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDQgPSByb3cuaW5zZXJ0Q2VsbCgzKTtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxsNSA9IHJvdy5pbnNlcnRDZWxsKDQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGw2ID0gcm93Lmluc2VydENlbGwoNSk7XHJcbiAgICAgICAgICAgICAgICBjZWxsMS5pbm5lckhUTUwgPSAnPGlucHV0IGlkPVwiaWQnICsgaWQgKyAnXCIgIHN0eWxlPVwiYm9yZGVyOiAwO1wiIHZhbHVlPVwiUGVuZHQuXCIgZGlzYWJsZWQ+JztcclxuICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknICsgaWQgKyAnXCIgdmFsdWU9IFwiJyArIChpdGVtWydxdWFudGl0eSddIC0gY2FudGlkYWRBY3R1YWwpICsgJ1wiY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy01MFwiIG1heD1cIicgKyAoaXRlbVsncXVhbnRpdHknXSAtIGNhbnRpZGFkQWN0dWFsKSArICdcIj4nO1xyXG4gICAgICAgICAgICAgICAgY2VsbDMuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiZGF0ZVwiIGlkPVwiZGVsaXZlcnlEYXRlJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9wY2lvbmVzID0gXCJcIlxyXG4gICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHsgb3BjaW9uZXMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgc2VkZS5pZCArICdcIj4nICsgc2VkZS5jaXR5ICsgJyAtICcgKyBzZWRlLnN0cmVldCArICc8L29wdGlvbj4nOyB9KTtcclxuICAgICAgICAgICAgICAgIGNlbGw0LmlubmVySFRNTCA9ICc8c2VsZWN0ICBpZD1cInNoaXBwaW5nQWRkcmVzcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JyArIG9wY2lvbmVzICsgJzwvc2VsZWN0Pic7XHJcbiAgICAgICAgICAgICAgICBjZWxsNS5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG5TZWd1aXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI2NvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBhcmlhLWNvbnRyb2xzPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiIHZhbHVlPVwiVmVyXCI+PC9pbnB1dD4nO1xyXG4gICAgICAgICAgICAgICAgY2VsbDYuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2wtMSBmbGV4LWdyb3ctMCB0ZXh0LXJpZ2h0IGJ0bkJvcnJhciBkLW5vbmUgZC1tZC1ibG9jayBkLW5vbmUgZC1tZC1ibG9ja1wiPjxidXR0b24gY2xhc3M9XCJidG5cIiBpZD1cImJvdG9uQm9ycmFyXCI+PGltZyBzcmM9XCIuL2Fzc2V0cy9tYXF1ZXRhZG8vaW1nL2ljLWJvcnJhci5zdmdcIiBhbHQ9XCJcIj4gPC9idXR0PjwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICB2YXIgcm93MiA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHZhciBmaWxhMiA9IHJvdzIuaW5zZXJ0Q2VsbCgwKVxyXG4gICAgICAgICAgICAgICAgZmlsYTIuY29sU3BhbiA9IDY7XHJcbiAgICAgICAgICAgICAgICBmaWxhMi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgaWQ9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCI+PGlucHV0IGlkPVwibm90ZXMnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIkluZ3Jlc2UgdW4gY29tZW50YXJpbyBlbiBjYXNvIGRlIHF1ZSBzZWEgbmVjZXNhcmlvLlwiIHR5cGU9XCJ0ZXh0XCIvPjwvZGl2Pic7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIGlkID0gaWQgKyAxO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3QtbWF4LXF1YW50aXR5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEN1YW5kbyBzZSBwdWxzYSBlbCBib3RvbiBwYXJhIGd1YXJkYXIgZWwgbG90ZSByZWNvcnJlIGxhIGZ1bmNpb24geSBlbCBmb3IgLCByZWNvcnJlIGxpbmVhIGEgbGluZWEgeSBsYW56YSBlbCBlbmRwb2ludCBjb24gdW5hIHBhdXNhIHBhcmEgcXVlIG5vIHNlIHBpZXJkYSBuaW5ndW5vIHkgbm8gc2UgcXVlZGUgcGlsbGFkby5cclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90b25HdWFyZGFyJykub25jbGljayA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3Qtc2F2aW5nJyk7XHJcbiAgICAgICAgICAgIHRoaXNfLmNhcmdhbmRvID0gdHJ1ZTtcclxuICAgICAgICAgICAgdmFyIGxvdElEID0gJyc7XHJcbiAgICAgICAgICAgIHZhciBjYW50aWRhZExvdGVzID0gMDtcclxuICAgICAgICAgICAgLy9Db250cm9sYSBxdWUgbGFzIGNhbnRpZGFkZXMgZGUgbG9zIGxvdGVzIG5vIHNlYSBzdXBlcmlvciBhIGxhIGRlbCBwcm9kdWN0byBlbiBlbCBjYXJyaXRvLlxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGlmICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW50aWRhZExvdGVzID0gY2FudGlkYWRMb3RlcyArIHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW0ucXVhbnRpdHkgPj0gY2FudGlkYWRMb3Rlcykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY2FudGlkYWRMb3Rlcyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgeSA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWFudGl0eSA9IHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbGl2ZXJ5RGF0ZSA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlbGl2ZXJ5RGF0ZVwiICsgaW5kZXgpKS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBwaW5nQWRkcmVzcyA9ICQoXCIjc2hpcHBpbmdBZGRyZXNzXCIgKyBpbmRleCkudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3RlcyA9ICQoXCIjbm90ZXNcIiArIGluZGV4KS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBwaW5nQWRkcmVzc05hbWUgPSAkKCcjc2hpcHBpbmdBZGRyZXNzJyArIGluZGV4ICsgJyBvcHRpb246c2VsZWN0ZWQnKS50ZXh0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpZFwiICsgaW5kZXgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb3RJRCA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlkXCIgKyBpbmRleCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXlJbmRleCA9IGFsbElELmluZGV4T2YocGFyc2VJbnQobG90SUQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG15SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxJRC5zcGxpY2UobXlJbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsb3RJRCA9PSAnUGVuZHQuJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnbnVldm8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIDAsIGl0ZW0uaXRlbV9pZCwgcXVhbnRpdHksIGl0ZW0ucHJvZHVjdC5wcmljZSwgaXRlbS5xdWFudGl0eSwgaXRlbS5kaXNjb3VudCwgaXRlbS5wcm9kdWN0LnByaWNlICogcXVhbnRpdHksICduZXcnLCBkZWxpdmVyeURhdGUsIG5vdGVzLCBwYXJzZUludChzaGlwcGluZ0FkZHJlc3MpLCBzaGlwcGluZ0FkZHJlc3NOYW1lLCAnbmV3bG90Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG90SUQgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobG90SUQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgcGFyc2VJbnQobG90SUQpLCBpdGVtLml0ZW1faWQsIHF1YW50aXR5LCBpdGVtLnByb2R1Y3QucHJpY2UsIGl0ZW0ucXVhbnRpdHksIGl0ZW0uZGlzY291bnQsIGl0ZW0ucHJvZHVjdC5wcmljZSAqIHF1YW50aXR5LCAnZWRpdGVkJywgZGVsaXZlcnlEYXRlLCBub3RlcywgcGFyc2VJbnQoc2hpcHBpbmdBZGRyZXNzKSwgc2hpcHBpbmdBZGRyZXNzTmFtZSwgJ2VkaXRsb3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYWxsSUQuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdib3JyYXInKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgZWxlbWVudCwgMCwgMCwgMCwgMCwgMCwgMCwgJ2RlbGV0ZScsIDAsICcnLCAwLCAnZGVsZXRlJywgJ2RlbGV0ZWxvdCcpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18uY2FydFNlcnZpY2UubG9hZENhcnRCeVRva2VuKHRoaXNfLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpKTsgfSwgMzAwICogeSk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnbG90LXNhdmVkJyk7IH0sIDMwMCAqIHkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aGlzXy5jYXJnYW5kbyA9IGZhbHNlIH0sIDMwMCAqIHkpO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnTGEgY2FudGlkYWQgZGUgbG9zIGxvdGVzIGVzIHN1cGVyaW9yIGEgbGEgY2FudGlkYWQgZGVsIHByb2R1Y3RvLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJyNib3RvbkJvcnJhcicsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzKTtcclxuICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCd0cicpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VNb2RhbChpZCkge1xyXG4gICAgICAgICQoJyMnICsgaWQpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tTdG9jayhpdGVtKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIGl0ZW0ucHJvZHVjdC52YXJpYW50cykge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS52YXJpYW50X2lkID09PSB2YXJpYW50LmNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0b2NrID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5xdWFudGl0eSA+IHZhcmlhbnQuc3RvY2spIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFudC5zdG9jaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFNvbG8gc2UgZWplY3V0YSBzaSBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUFsbFN0b2NrKCkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgICAvLyBEZWZpbmUgbGEgc3VzY3JpcGNpw7NuIGFudGVzIGRlIHVzYXJsYVxyXG5cclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmNhcnRJdGVtcy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgaXRlbS5wcm9kdWN0LnZhcmlhbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFyaWFudF9pZCA9PT0gdmFyaWFudC5jb2RlICYmICF0aGlzLmV4aXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RvY2sgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZGVsZXRlQ2FydEl0ZW0oaXRlbSwgZmFsc2UpOyAvLyBCb3JyYSBlbCBhcnTDrWN1bG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnF1YW50aXR5ID4gdmFyaWFudC5zdG9jaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogdmFyaWFudC5zdG9jayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogdmFyaWFudC5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiB2YXJpYW50LmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwICYmICF0aGlzLmV4aXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyAgLy8gRGVzdXNjcsOtYmV0ZSBhbnRlcyBkZSBhY3R1YWxpemFyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZEFsbFRvQ2FydChpdGVtcyk7ICAvLyBBY3R1YWxpemEgZWwgY2Fycml0b1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leGl0VXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMudXBkYXRlQWxsU3RvY2soKTsgIC8vIFZ1ZWx2ZSBhIHZlcmlmaWNhciBlbCBzdG9ja1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBnZXRWYXJpYW50cyA9IHByb2R1Y3QgPT4ge1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHByb2R1Y3QucHJvZHVjdFxyXG5cclxuICAgICAgICBpZiAoaXRlbS52YXJpYW50cyAmJiBpdGVtLnZhcmlhbnRzLmxlbmd0aCAmJiBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnMgJiYgaXRlbS52YXJpYW50c1swXS5vcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IGl0ZW0udmFyaWFudHNbMF0ub3B0aW9uc1xyXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHRoaXMudmFyaWFudHNUb1Nob3cuZmluZChuYW1lID0+IG9wdGlvbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkpXHJcbiAgICAgICAgICAgIGxldCBvcHRpb25zTWFwID0gW11cclxuICAgICAgICAgICAgb3B0aW9ucy5tYXAob3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbikuZm9yRWFjaCgoZW50cnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uQWRkZWQgPSBmYWxzZTsgIC8vIFZhcmlhYmxlIHBhcmEgZXZpdGFyIG3Dumx0aXBsZXMgaW5zZXJjaW9uZXNcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2gob3B0aW9uMiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24yLmNvZGUgPT0gJ0NPTE9SJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uMi52YWx1ZXMuZm9yRWFjaChjb2xvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9yLmNvZGUgPT0gb3B0aW9uW2VudHJ5XSAmJiAhb3B0aW9uQWRkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc01hcC5wdXNoKHsgbmFtZTogZW50cnksIHZhbHVlOiBvcHRpb25bZW50cnldLCBpbWFnZTogY29sb3IuaW1hZ2UsIG1vYmlsZUltYWdlOiBjb2xvci5tb2JpbGVJbWFnZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uQWRkZWQgPSB0cnVlOyAvLyBNYXJjYXIgb3BjacOzbiBhZ3JlZ2FkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2kgbm8gc2UgYcOxYWRpw7MgbGEgb3BjacOzbiBkZSBDT0xPUiwgbWFuZWphciBvdHJhcyBvcGNpb25lc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uQWRkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2gob3B0aW9uMiA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbjIuY29kZSAhPT0gJ0NPTE9SJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGVudHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9uW2VudHJ5XVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25BZGRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVEaXNjb3VudE1lc3NhZ2Uoc2FsZXByaWNlOiBudW1iZXIsIHByaWNlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChpc05hTihzYWxlcHJpY2UpIHx8IGlzTmFOKHByaWNlKSB8fCBzYWxlcHJpY2UgPj0gcHJpY2UgfHwgc2FsZXByaWNlIDw9IDAgfHwgcHJpY2UgPD0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGlzY291bnRQZXJjZW50YWdlID0gTWF0aC5yb3VuZCgoKHByaWNlIC0gc2FsZXByaWNlKSAvIHByaWNlKSAqIDEwMCk7XHJcblxyXG4gICAgICAgIGxldCBkaXNjb3VudE1lc3NhZ2UgPSBgJHtkaXNjb3VudFBlcmNlbnRhZ2V9JSBPRkZgO1xyXG4gICAgICAgIHJldHVybiBkaXNjb3VudE1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICBnZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQgPSAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhbm5lbC50eXBlID09ICdiMmInID8gdGhpcy5jaGFubmVsLndob2xlc2FsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnQgOiB0aGlzLmNoYW5uZWwucmV0YWlsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZXhjZWVkc01pbmltdW1BbW91bnQgPSAodmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGlmICh2YWx1ZSA+PSB0aGlzLmdldE1pbmltdW1QdXJjaGFzZUFtb3VudCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZGlyZWN0Q2hlY2tvdXQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBWZXJpZmljYXIgc2kgaGF5IHVuIGJhbGFuY2UgZGUgY2xpZW50ZSBhY3Rpdm9cclxuICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5iYWxhbmNlQ3VzdG9tZXIkLnN1YnNjcmliZShiYWxhbmNlQ3VzdG9tZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGJhbGFuY2VDdXN0b21lciAmJiBiYWxhbmNlQ3VzdG9tZXIuY3JlZGl0QW1vdW50ICE9PSBudWxsICYmIGJhbGFuY2VDdXN0b21lci5jcmVkaXRBbW91bnQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdxdWFudGl0eS1ub3QtZXhjZWVkZWQtd2hpdG91dC1hbW91bnQnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3F1YW50aXR5LW5vdC1leGNlZWRlZCcsIHsgYW1vdW50OiB0aGlzLmdldE1pbmltdW1QdXJjaGFzZUFtb3VudCgpIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS51bnN1YnNjcmliZSgpOyAvLyBEZXN1c2NyaWJpcnNlIGlubWVkaWF0YW1lbnRlIGRlc3B1w6lzIGRlIG9idGVuZXIgZWwgdmFsb3JcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxufVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiJdfQ==
|